From 07e463b9e1e8f5e48344805abfa3a6b242306b71 Mon Sep 17 00:00:00 2001 From: Patrick Robbe <robbe@lal.in2p3.fr> Date: Tue, 11 Jun 2019 18:40:49 +0900 Subject: [PATCH] Remove old file --- Driver/pcie40_driver/pcie40_dma_regmap.h | 86 --- Driver/pcie40_driver/pcie40_ioctl.h | 91 ---- Driver/pcie40_reload/.gitignore | 2 - Driver/pcie40_reload/Makefile | 28 - Driver/pcie40_reload/main.c | 25 - Lib/src/ecs/ecs.c | 351 ------------ Lib/src/minipods/i2cDriver.c | 656 ----------------------- 7 files changed, 1239 deletions(-) delete mode 100644 Driver/pcie40_driver/pcie40_dma_regmap.h delete mode 100644 Driver/pcie40_driver/pcie40_ioctl.h delete mode 100644 Driver/pcie40_reload/.gitignore delete mode 100644 Driver/pcie40_reload/Makefile delete mode 100644 Driver/pcie40_reload/main.c delete mode 100644 Lib/src/ecs/ecs.c delete mode 100644 Lib/src/minipods/i2cDriver.c diff --git a/Driver/pcie40_driver/pcie40_dma_regmap.h b/Driver/pcie40_driver/pcie40_dma_regmap.h deleted file mode 100644 index 1c492d3..0000000 --- a/Driver/pcie40_driver/pcie40_dma_regmap.h +++ /dev/null @@ -1,86 +0,0 @@ -// This output was generated by the following command: -// ../common/regmap_cfg_to_h.tcl P40_ ../common/pcie40_dma_regmap.cfg -// Do not edit this file manually, your changes will be overwritten by the generator. - -#ifndef P40_REGMAP_H -#define P40_REGMAP_H - static const int P40_DMA_REGMAP_VERSION = 0x20170424; - - static const int P40_DMA_CTRL_OFF_INBUF_SIZE = 0x0A0; - static const int P40_DMA_CTRL_OFF_META_EVID_HI = 0x034; - static const int P40_DMA_CTRL_OFF_VERSION = 0x008; - static const int P40_DMA_CTRL_OFF_MAIN_EVID_LO = 0x024; - static const int P40_DMA_CTRL_OFF_MAIN_MSI_CYCLES = 0x08C; - static const int P40_DMA_CTRL_OFF_CHOKE_LAST_FROM_EVID_HI = 0x0E0; - static const int P40_DMA_CTRL_OFF_CHOKE_LAST_CYCLES = 0x0D8; - static const int P40_DMA_CTRL_OFF_CHOKE_TOTAL_SINCE_EVID_LO = 0x0D0; - static const int P40_DMA_CTRL_OFF_CHOKE_TOTAL_CYCLES = 0x0CC; - static const int P40_DMA_CTRL_OFF_TRUNC_TOTAL_SINCE_EVID_HI = 0x0B4; - static const int P40_DMA_CTRL_OFF_CHOKE_LAST_TO_EVID_LO = 0x0E4; - static const int P40_DMA_CTRL_OFF_TRUNC_LAST_TO_EVID_HI = 0x0C8; - static const int P40_DMA_CTRL_OFF_TRUNC_THRES = 0x0A8; - static const int P40_DMA_CTRL_OFF_RWTEST = 0x000; - static const int P40_DMA_CTRL_OFF_PCIE_GEN = 0x080; - static const int P40_DMA_CTRL_OFF_INBUF_FILL = 0x0A4; - static const int P40_DMA_CTRL_OFF_CHIP_ID_LO = 0x044; - static const int P40_DMA_CTRL_OFF_LINK_ID = 0x00C; - static const int P40_DMA_CTRL_OFF_ERROR = 0x014; - static const int P40_DMA_CTRL_OFF_TRUNC_LAST_FROM_EVID_LO = 0x0BC; - static const int P40_DMA_CTRL_OFF_ODIN_EVID_LO = 0x03C; - static const int P40_DMA_CTRL_OFF_META_PACKING = 0x02C; - static const int P40_DMA_CTRL_OFF_RESET = 0x010; - static const int P40_DMA_CTRL_OFF_MAIN_EVID_HI = 0x028; - static const int P40_DMA_CTRL_BASE_DAQ_MAIN_STREAM = 0x100; - static const int P40_DMA_CTRL_OFF_META_MSI_BYTES = 0x090; - static const int P40_DMA_CTRL_OFF_MSI_MODE = 0x084; - static const int P40_DMA_CTRL_OFF_CHOKE_TOTAL_SINCE_EVID_HI = 0x0D4; - static const int P40_DMA_CTRL_OFF_MAIN_GEN_FIXED = 0x01C; - static const int P40_DMA_CTRL_OFF_CHOKE_LAST_TO_EVID_HI = 0x0E8; - static const int P40_DMA_CTRL_OFF_CHIP_ID_HI = 0x048; - static const int P40_DMA_CTRL_OFF_META_EVID_LO = 0x030; - static const int P40_DMA_CTRL_OFF_MAIN_GEN_CTL = 0x018; - static const int P40_DMA_CTRL_OFF_META_MSI_CYCLES = 0x094; - static const int P40_DMA_CTRL_OFF_CHOKE_LAST_FROM_EVID_LO = 0x0DC; - static const int P40_DMA_CTRL_OFF_TRUNC_LAST_FROM_EVID_HI = 0x0C0; - static const int P40_DMA_CTRL_OFF_TRUNC_LAST_CYCLES = 0x0B8; - static const int P40_DMA_CTRL_OFF_TRUNC_TOTAL_SINCE_EVID_LO = 0x0B0; - static const int P40_DMA_CTRL_OFF_TRUNC_TOTAL_CYCLES = 0x0AC; - static const int P40_DMA_CTRL_OFF_ODIN_EVID_HI = 0x040; - static const int P40_DMA_CTRL_OFF_TRUNC_LAST_TO_EVID_LO = 0x0C4; - static const int P40_DMA_CTRL_OFF_MAIN_RAW_MODE = 0x020; - static const int P40_DMA_CTRL_OFF_MAIN_MSI_BYTES = 0x088; - static const int P40_DMA_CTRL_OFF_META_MSI_BLOCKS = 0x098; - static const int P40_DMA_CTRL_OFF_REGMAP = 0x004; - static const int P40_DMA_CTRL_OFF_ODIN_GEN_CTL = 0x038; - - static const int P40_DMA_DAQ_STREAM_OFF_FPGA_BUF_DESCS_BUSY_LO = 0x24; - static const int P40_DMA_DAQ_STREAM_OFF_FPGA_BUF_BYTES = 0x0C; - static const int P40_DMA_DAQ_STREAM_OFF_FPGA_BUF_DESCS_FILL_HI = 0x1C; - static const int P40_DMA_DAQ_STREAM_OFF_FPGA_BUF_DESCS_BUSY_HI = 0x28; - static const int P40_DMA_DAQ_STREAM_OFF_HOST_BUF_WRITE_OFF = 0x2C; - static const int P40_DMA_DAQ_STREAM_OFF_FPGA_BUF_DESC_BYTES = 0x14; - static const int P40_DMA_DAQ_STREAM_OFF_HOST_BUF_READ_OFF = 0x30; - static const int P40_DMA_DAQ_STREAM_OFF_ENABLE = 0x00; - static const int P40_DMA_DAQ_STREAM_OFF_HOST_MAP_PAGES = 0x38; - static const int P40_DMA_DAQ_STREAM_OFF_FLUSH = 0x08; - static const int P40_DMA_DAQ_STREAM_OFF_FPGA_BUF_DESCS = 0x10; - static const int P40_DMA_DAQ_STREAM_OFF_FPGA_BUF_DESCS_FILL_LO = 0x18; - static const int P40_DMA_DAQ_STREAM_OFF_HOST_MAP_ENTRIES = 0x34; - static const int P40_DMA_DAQ_STREAM_OFF_FPGA_BUF_DESC_FILL_BYTES = 0x20; - static const int P40_DMA_DAQ_STREAM_OFF_READY = 0x04; - - static const int P40_DMA_CTRL_QSYS_BASE = 0x1000; - - static const int P40_DMA_DAQ_MAIN_STREAM_QSYS_BASE = 0x1100; - - static const int P40_DMA_DAQ_MAIN_MAP_QSYS_BASE = 0x10000; - - static const int P40_DMA_DAQ_MAIN_BUF_QSYS_BASE = 0x100000; - - static const int P40_DMA_DAQ_META_STREAM_QSYS_BASE = 0x0400; - - static const int P40_DMA_DAQ_META_MAP_QSYS_BASE = 0x20000; - - static const int P40_DMA_DAQ_META_BUF_QSYS_BASE = 0x200000; - -#endif//P40_REGMAP_H diff --git a/Driver/pcie40_driver/pcie40_ioctl.h b/Driver/pcie40_driver/pcie40_ioctl.h deleted file mode 100644 index 80c4c6d..0000000 --- a/Driver/pcie40_driver/pcie40_ioctl.h +++ /dev/null @@ -1,91 +0,0 @@ -#ifndef __PCIE40_IOCTL_H -#define __PCIE40_IOCTL_H -//ioctl.pcie``+ - -#define P40_CTRL_GET_RWTEST _IOR('c', 1, uint64_t)//+`P40_CTRL_GET_RWTEST` ?> -#define P40_CTRL_SET_RWTEST _IOW('c', 2, uint64_t)//+`P40_CTRL_SET_RWTEST` ?> -#define P40_CTRL_GET_VERSION _IOR('c', 3, uint64_t)//+`P40_CTRL_GET_VERSION` ?> -#define P40_CTRL_GET_LINK_ID _IOR('c', 4, uint64_t)//+`P40_CTRL_GET_LINK_ID` ?> -#define P40_CTRL_GET_CHIP_ID _IOR('c', 5, uint64_t)//+`P40_CTRL_GET_CHIP_ID` ?> -#define P40_CTRL_GET_ERROR _IOR('c', 6, uint64_t)//+`P40_CTRL_GET_ERROR` ?> -#define P40_CTRL_GET_RESET _IOR('c', 7, uint64_t)//+`P40_CTRL_GET_RESET` ?> -#define P40_CTRL_SET_RESET _IOW('c', 8, uint64_t)//+`P40_CTRL_SET_RESET` ?> -#define P40_RST_BIT_DEFAULT (0) -#define P40_RST_BIT_LOGIC (1) -#define P40_RST_BIT_FLUSH (2) -#define P40_RST_BIT_COUNTERS (3) -#define P40_CTRL_GET_MAIN_GEN_CTL _IOR('c', 9, uint64_t)//+`P40_CTRL_GET_MAIN_GEN_CTL` ?> -#define P40_CTRL_SET_MAIN_GEN_CTL _IOW('c', 10, uint64_t)//+`P40_CTRL_SET_MAIN_GEN_CTL` ?> -#define P40_MAIN_GEN_BIT_ENABLE (0) -#define P40_MAIN_GEN_BIT_RUNNING (1) -#define P40_MAIN_GEN_BIT_FIXED (2) -#define P40_MAIN_GEN_BIT_THROTTLE (3) -#define P40_CTRL_GET_MAIN_GEN_FIXED _IOR('c', 11, uint64_t)//+`P40_CTRL_GET_MAIN_GEN_FIXED` ?> -#define P40_CTRL_SET_MAIN_GEN_FIXED _IOW('c', 12, uint64_t)//+`P40_CTRL_SET_MAIN_GEN_FIXED` ?> -#define P40_CTRL_GET_MAIN_RAW_MODE _IOR('c', 13, uint64_t)//+`P40_CTRL_GET_MAIN_RAW_MODE` ?> -#define P40_CTRL_GET_PCIE_GEN _IOR('c', 14, uint64_t)//+`P40_CTRL_GET_PCIE_GEN` ?> -#define P40_CTRL_GET_META_PACKING _IOR('c', 15, uint64_t)//+`P40_CTRL_GET_META_PACKING` ?> -#define P40_CTRL_SET_META_PACKING _IOW('c', 16, uint64_t)//+`P40_CTRL_SET_META_PACKING` ?> -#define P40_CTRL_GET_MSI_MODE _IOR('c', 17, uint64_t)//+`P40_CTRL_GET_MSI_MODE` ?> -#define P40_CTRL_SET_MSI_MODE _IOW('c', 18, uint64_t)//+`P40_CTRL_SET_MSI_MODE` ?> -#define P40_MSI_MODE_BIT_DAQ (0) -#define P40_MSI_MODE_BIT_MAIN (1) -#define P40_MSI_MODE_BIT_META (2) -#define P40_CTRL_GET_MAIN_MSI_BYTES _IOR('c', 19, uint64_t)//+`P40_CTRL_GET_MAIN_MSI_BYTES` ?> -#define P40_CTRL_SET_MAIN_MSI_BYTES _IOW('c', 20, uint64_t)//+`P40_CTRL_SET_MAIN_MSI_BYTES` ?> -#define P40_CTRL_GET_MAIN_MSI_CYCLES _IOR('c', 21, uint64_t)//+`P40_CTRL_GET_MAIN_MSI_CYCLES` ?> -#define P40_CTRL_GET_META_MSI_BYTES _IOR('c', 22, uint64_t)//+`P40_CTRL_GET_META_MSI_BYTES` ?> -#define P40_CTRL_SET_META_MSI_BYTES _IOW('c', 23, uint64_t)//+`P40_CTRL_SET_META_MSI_BYTES` ?> -#define P40_CTRL_GET_META_MSI_CYCLES _IOR('c', 24, uint64_t)//+`P40_CTRL_GET_META_MSI_CYCLES` ?> -#define P40_CTRL_GET_META_MSI_BLOCKS _IOR('c', 25, uint64_t)//+`P40_CTRL_GET_META_MSI_BLOCKS` ?> -#define P40_CTRL_SET_META_MSI_BLOCKS _IOW('c', 26, uint64_t)//+`P40_CTRL_SET_META_MSI_BLOCKS` ?> -#define P40_CTRL_GET_INBUF_SIZE _IOR('c', 27, uint64_t)//+`P40_CTRL_GET_INBUF_SIZE` ?> -#define P40_CTRL_GET_INBUF_FILL _IOR('c', 28, uint64_t)//+`P40_CTRL_GET_INBUF_FILL` ?> -#define P40_CTRL_GET_TRUNC_THRES _IOR('c', 29, uint64_t)//+`P40_CTRL_GET_TRUNC_THRES` ?> -#define P40_CTRL_SET_TRUNC_THRES _IOW('c', 30, uint64_t)//+`P40_CTRL_SET_TRUNC_THRES` ?> -#define P40_CTRL_GET_TRUNC_TOTAL_CYCLES _IOR('c', 31, uint64_t)//+`P40_CTRL_GET_TRUNC_TOTAL_CYCLES` ?> -#define P40_CTRL_GET_TRUNC_TOTAL_SINCE_EVID _IOR('c', 32, uint64_t)//+`P40_CTRL_GET_TRUNC_TOTAL_SINCE_EVID` ?> -#define P40_CTRL_GET_TRUNC_LAST_CYCLES _IOR('c', 33, uint64_t)//+`P40_CTRL_GET_TRUNC_LAST_CYCLES` ?> -#define P40_CTRL_GET_TRUNC_LAST_FROM_EVID _IOR('c', 34, uint64_t)//+`P40_CTRL_GET_TRUNC_LAST_FROM_EVID` ?> -#define P40_CTRL_GET_TRUNC_LAST_TO_EVID _IOR('c', 35, uint64_t)//+`P40_CTRL_GET_TRUNC_LAST_TO_EVID` ?> -#define P40_CTRL_GET_CHOKE_TOTAL_CYCLES _IOR('c', 36, uint64_t)//+`P40_CTRL_GET_CHOKE_TOTAL_CYCLES` ?> -#define P40_CTRL_GET_CHOKE_TOTAL_SINCE_EVID _IOR('c', 37, uint64_t)//+`P40_CTRL_GET_CHOKE_TOTAL_SINCE_EVID` ?> -#define P40_CTRL_GET_CHOKE_LAST_CYCLES _IOR('c', 38, uint64_t)//+`P40_CTRL_GET_CHOKE_LAST_CYCLES` ?> -#define P40_CTRL_GET_CHOKE_LAST_FROM_EVID _IOR('c', 39, uint64_t)//+`P40_CTRL_GET_CHOKE_LAST_FROM_EVID` ?> -#define P40_CTRL_GET_CHOKE_LAST_TO_EVID _IOR('c', 40, uint64_t)//+`P40_CTRL_GET_CHOKE_LAST_TO_EVID` ?> - -// this should advance both the main and meta read pointers -// after parsing the metadata information -// we might allow manually advancing the pointer, -// but only in MSI_META and MSI_MAIN modes, never in MSI_DAQ -#define P40_CTRL_GET_HOST_MAIN_MSI_NSECS _IOR('h', 2, uint64_t)//+`P40_CTRL_GET_HOST_MAIN_MSI_NSECS` ?> -#define P40_CTRL_GET_HOST_META_MSI_NSECS _IOR('h', 3, uint64_t)//+`P40_CTRL_GET_HOST_META_MSI_NSECS` ?> - -#define P40_STREAM_GET_ENABLE _IOR('s', 1, uint64_t)//+`P40_STREAM_GET_ENABLE` ?> -#define P40_STREAM_SET_ENABLE _IOW('s', 2, uint64_t)//+`P40_STREAM_SET_ENABLE` ?> -#define P40_STREAM_GET_READY _IOR('s', 3, uint64_t)//+`P40_STREAM_GET_READY` ?> -#define P40_STREAM_GET_FLUSH _IOR('s', 4, uint64_t)//+`P40_STREAM_GET_FLUSH` ?> -#define P40_STREAM_SET_FLUSH _IOW('s', 5, uint64_t)//+`P40_STREAM_SET_FLUSH` ?> -#define P40_STREAM_GET_FPGA_BUF_BYTES _IOR('s', 6, uint64_t)//+`P40_STREAM_GET_FPGA_BUF_BYTES` ?> -#define P40_STREAM_GET_FPGA_BUF_DESCS _IOR('s', 7, uint64_t)//+`P40_STREAM_GET_FPGA_BUF_DESCS` ?> - -#define P40_STREAM_GET_FPGA_BUF_DESC_BYTES _IOR('s', 8, uint64_t)//+`P40_STREAM_GET_FPGA_BUF_DESC_BYTES` ?> - -#define P40_STREAM_GET_FPGA_BUF_DESCS_FILL _IOR('s', 9, uint64_t)//+`P40_STREAM_GET_FPGA_BUF_DESCS_FILL` ?> - -#define P40_STREAM_GET_FPGA_BUF_DESC_FILL_BYTES _IOR('s', 10, uint64_t)//+`P40_STREAM_GET_FPGA_BUF_DESC_FILL_BYTES` ?> - -#define P40_STREAM_GET_FPGA_BUF_DESCS_BUSY _IOR('s', 11, uint64_t)//+`P40_STREAM_GET_FPGA_BUF_DESCS_BUSY` ?> - -#define P40_STREAM_GET_HOST_BUF_WRITE_OFF _IOR('s', 12, uint64_t)//+`P40_STREAM_GET_HOST_BUF_WRITE_OFF` ?> -#define P40_STREAM_GET_HOST_BUF_READ_OFF _IOR('s', 13, uint64_t)//+`P40_STREAM_GET_HOST_BUF_READ_OFF` ?> - -#define P40_STREAM_GET_HOST_BUF_BYTES _IOR('m', 1, uint64_t)//+`P40_STREAM_GET_HOST_BUF_BYTES` ?> -#define P40_STREAM_GET_HOST_BUF_BYTES_USED _IOR('m', 2, uint64_t)//+`P40_STREAM_GET_HOST_BUF_BYTES_USED` ?> -#define P40_STREAM_GET_HOST_MSI_COUNT _IOR('m', 3, uint64_t)//+`P40_STREAM_GET_HOST_MSI_COUNT` ?> -#define P40_STREAM_FREE_HOST_BUF_BYTES _IOWR('m', 4, uint64_t)//+`P40_STREAM_FREE_HOST_BUF_BYTES` ?> - -#define P40_ECS_GET_BAR_SIZE _IO('e', 1) //+`P40_ECS_GET_BAR_SIZE` ?> -//TODO: why not _IOR? - -#endif//__PCIE40_IOCTL_H diff --git a/Driver/pcie40_reload/.gitignore b/Driver/pcie40_reload/.gitignore deleted file mode 100644 index ed2b39c..0000000 --- a/Driver/pcie40_reload/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -pcie40_reload_suid -pcie40_reload_suid.out/ diff --git a/Driver/pcie40_reload/Makefile b/Driver/pcie40_reload/Makefile deleted file mode 100644 index 29b8a33..0000000 --- a/Driver/pcie40_reload/Makefile +++ /dev/null @@ -1,28 +0,0 @@ -HERE :=$(strip $(realpath $(dir $(lastword $(MAKEFILE_LIST))))) -TOP :=$(realpath $(HERE)/..) - -include $(TOP)/common/flags.mk - -SCRIPTS :=pcie40_reload.sh -SCRIPTS_INSTALL =$(DAQ40_PREFIX)/pcie40_reload - -PCIE40_RELOAD_SUID :=pcie40_reload -PCIE40_RELOAD_SUID_OBJS =main.o -PCIE40_RELOAD_SUID_CFLAGS =$(CFLAGS) -PCIE40_RELOAD_SUID_INSTALL =$(SCRIPTS_INSTALL) - -PCIE40_RELOAD :=pcie40_reload -PCIE40_RELOAD_LINK =$(SCRIPTS_INSTALL)/pcie40_reload_suid -PCIE40_RELOAD_INSTALL =$(PREFIX)/bin - -PCIE40_RELOAD_MAN_DCRT =$(HERE)/man.dcrt -PCIE40_RELOAD_MAN_INSTALL =$(PREFIX)/share/man - -include $(TOP)/common/rules.mk -ifeq ($(ENABLE_PCIE40), true) -$(eval $(call COPY_template,SCRIPTS,755)) -$(eval $(call LINK_template,PCIE40_RELOAD)) -$(eval $(call ODIR_template,PCIE40_RELOAD_SUID)) -$(eval $(call MAN_template,PCIE40_RELOAD,1)) -endif -$(eval $(call DEFAULT_template)) diff --git a/Driver/pcie40_reload/main.c b/Driver/pcie40_reload/main.c deleted file mode 100644 index c678193..0000000 --- a/Driver/pcie40_reload/main.c +++ /dev/null @@ -1,25 +0,0 @@ -#define _GNU_SOURCE -#include <stdlib.h> -#include <unistd.h> -#include <stdio.h> -#include <signal.h> -#include <string.h> -#include <limits.h> -#include <libgen.h> - -int main(int argc, char *argv[]) -{ - char here_path[PATH_MAX]; - char script_path[PATH_MAX]; - - if (readlink("/proc/self/exe", here_path, PATH_MAX) == -1) { - perror("readlink"); - return -1; - } - // if (setresuid(0,0,0)) { - // perror("setresuid"); - // return -1; - //} - snprintf(script_path, sizeof(script_path), "%s/pcie40_reload.sh", dirname(here_path)); - return execvp(script_path, argv); -} diff --git a/Lib/src/ecs/ecs.c b/Lib/src/ecs/ecs.c deleted file mode 100644 index 0ec6d54..0000000 --- a/Lib/src/ecs/ecs.c +++ /dev/null @@ -1,351 +0,0 @@ -/****************************************************************************************//** -* \file ecs.c -* -* \brief This file contains the user library to access PCI driver. -* -* \author JM : 02/11/2013 -* \version 1.0 -* \date 08/11/2013 - -* \copyright (c) Copyright CERN for the benefit of the LHCb Collaboration. -* Distributed under the terms of the GNU General Public Licence V3. -* ana.py script is free and open source software. - - CHANGELOG - JM : 02/11/2013 Initial version - JM/PYD : 04/11/2013 PYD code integration - PYD : adapt for Paolo driver with its library and add multiple board choice -*/ -/************************************************************************************************** -The *Bar*() type of functions concentrate the conditional code which depends of the driver type. - -The ecs_*Lli() or ecs_*User() type of functions are driver blind and used to match user registers -or lli registers. - -ecs_openUser() ecs_openLli() -ecs_iordUser() ecs_iordLli() -ecs_iowrUser() ecs_iowrLli() -ecs_iordBlocUser() ecs_iordBlocLli() -ecs_iowrBlocUser() ecs_iowrBlocLli() -ecs_closeUser() ecs_closeLli() -************************************************************************************************/ -#include <stdio.h> -#include <unistd.h> -#include <string.h> -#include <stdlib.h> - -#include <sys/types.h> -#include <sys/stat.h> -#include <fcntl.h> - -#include <linux/ioctl.h> -#include <sys/ioctl.h> - -#include <ecs.h> -#include <systemConfig.h> - -// rpm includes -// PYD 20/03/2018 force the use of rpm for all borads types -#include <pcie40/ecs.h> - -/** - * \var ecs_userFile - * \brief ecs_open function return a file description which is stored on userFile for bar 0. -*/ -static int ecs_userFile[MAX_DEV]; - -/** - * \var ecs_lliFile - * \brief ecs_open function return a file description which is stored on lliFile for bar 2. -*/ -static int ecs_lliFile[MAX_DEV]; -/** - * \var ecs_bar2_mm - * \brief ecs_open function for bar 2 mmaps registers area from a start address. -*/ -static unsigned *ecs_bar1_mm[MAX_DEV]; // bar1 start add of mmap -static unsigned *ecs_bar2_mm[MAX_DEV]; // bar2 start add of mmap - -/******************************************************//** - * \fn int ecs_close(int dev, int bar) - * \brief Function to close bar file - * - * \param dev: the selected board number - * \param bar: the bar number - *//******************************************************/ -void ecs_close(int dev, int bar){ - if (bar==2){ - p40_ecs_close(ecs_lliFile[dev],ecs_bar2_mm[dev]); - } - else if (bar==0){ - p40_ecs_close(ecs_lliFile[dev],ecs_bar1_mm[dev]); - } -} - -/******************************************************//** - * \fn int ecs_open(int dev, int bar) - * \brief Function to open bar file - * - * \param dev: the selected board number - * \param bar: number of bar - * \return -1 error / file descriptor - *//******************************************************/ -int ecs_open(int dev,int bar){ - if (bar==2){ - ecs_lliFile[dev] = p40_ecs_open(dev,bar,&(ecs_bar2_mm[dev])); - return ecs_lliFile[dev]; - } - else if (bar==0){ - ecs_userFile[dev] = p40_ecs_open(dev,bar,&(ecs_bar1_mm[dev])); - return ecs_userFile[dev]; - } -return -1; -} - -int ecs_write(int dev, int bar, unsigned add, int val){ - if (add%4 != 0) - return(-1); - - if (bar==2){ - p40_ecs_w32(ecs_bar2_mm[dev],add,val); - } - else if (bar==0){ - p40_ecs_w32(ecs_bar1_mm[dev],add,val); - } - return(0); -} - -unsigned ecs_read(int dev, int bar, unsigned add){ - uint32_t val; - if (add%4 != 0) - return(-1); - if (bar==2){ - val = p40_ecs_r32(ecs_bar2_mm[dev],add); - } - else if (bar==0){ - val = p40_ecs_r32(ecs_bar1_mm[dev],add); - } - return val; -} - -int ecs_iowrBar(int dev, int bar, unsigned add, unsigned *val){ - if (add%4 != 0) - return(-1); - if (bar==2){ - if (ecs_lliFile[dev] == 0) ecs_open(dev,bar); - } - else if (bar==0){ - if (ecs_userFile[dev] == 0) ecs_open(dev,bar); - } - ecs_write(dev,bar,add,*val); - return(0); -} - -int ecs_iordBar(int dev, int bar, unsigned add, unsigned *val){ - if (add%4 != 0) - return(-1); - if (bar==2){ - if (ecs_lliFile[dev] == 0) ecs_open(dev,bar); - } - else if (bar==0){ - if (ecs_userFile[dev] == 0) ecs_open(dev,bar); - } - *val = ecs_read(dev,bar,add); - return(0); -} -int ecs_writeBloc(int dev, int bar, unsigned add, int size, unsigned *val){ - int i; - unsigned wd; - if (add%sizeof(unsigned) != 0) - return(-1); - for (i=0; i<size; i = i + 1){ - wd = val[i]; - ecs_write(dev,bar, add+i*sizeof(unsigned), wd); - } - return 0; -} - -int ecs_readBloc(int dev, int bar, unsigned add, int size, unsigned *val){ - int i; - if (add%4 != 0) - return(-1); - for (i=0; i<size; i = i + 1){ - val[i] = ecs_read(dev,bar,add+i*sizeof(unsigned)); - } - return 0; -} -int ecs_iowrBarBloc(int dev, int bar, unsigned add, int size, unsigned *val){ - ecs_writeBloc(dev,bar,add,size,val); -return 0; -} - -int ecs_iordBarBloc(int dev, int bar, unsigned add, int size, unsigned *val){ - ecs_readBloc(dev,bar,add,size,val); -return 0; -} - -/***********************************************************************//** - * \fn int ecs_printSetup() - * \brief Function to print BAR configurations for checking - * - *//***********************************************************************/ -void ecs_printSetup(){ - printf("-------------------------------------------------\n"); - printf("driver type = MMAP (PCIe40 daq) version\n"); - printf("-------------------------------------------------\n"); - printf("BAR user = BAR%d\n",BAR_USER); - printf("BAR i2c = BAR%d\n",BAR_I2C); - - printf("BASE i2c bus %d TEMPERATURES = 0x%08x\n", I2C_BUS_TEMPERATURES, I2C_BUS_BASE_TEMPERATURES); - printf("BASE i2c bus %d CLEANER1 = 0x%08x\n", I2C_BUS_PLL_CLEANER1, I2C_BUS_BASE_PLL_CLEANER1); - printf("BASE i2c bus %d CLEANER2 = 0x%08x\n", I2C_BUS_PLL_CLEANER2, I2C_BUS_BASE_PLL_CLEANER2); - printf("BASE i2c bus %d PLL_TFC = 0x%08x\n", I2C_BUS_PLL_TFC, I2C_BUS_BASE_PLL_TFC); - printf("BASE i2c bus %d SFP1 = 0x%08x\n", I2C_BUS_SFP1, I2C_BUS_BASE_SFP1); - printf("BASE i2c bus %d SFP2 = 0x%08x\n", I2C_BUS_SFP2, I2C_BUS_BASE_SFP2); - printf("BASE i2c bus %d MINIPODS = 0x%08x\n", I2C_BUS_MINIPODS, I2C_BUS_BASE_MINIPODS); - printf("BASE i2c bus %d TEMP_MEZZANINE = 0x%08x\n", I2C_BUS_TEMP_MEZZANINE, I2C_BUS_BASE_TEMP_MEZZANINE); - printf("BASE i2c bus %d CURRENT1 = 0x%08x\n", I2C_BUS_CURRENT1, I2C_BUS_BASE_CURRENT1); - printf("BASE i2c bus %d CURRENT2 = 0x%08x\n", I2C_BUS_CURRENT2, I2C_BUS_BASE_CURRENT2); -} - -// Usefull for python wrappers when memory is allocated by the lli C libs -// it should be freed after python module has used it. -void ecs_free( int *data) { - free(data); -} -/***********************************************************************//** - * \fn int ecs_openUser(int dev) - * \brief Function to init the ecs pcie bus accesses for user space - * Thus function has to be done before any access. - * - * Here we have a detailed description of the function - * - * \param : dev the board number - * \return 0 success, -1 error - *//***********************************************************************/ -int ecs_openUser(int dev){ - return ecs_open(dev,0); -} - -/***********************************************************************//** - * \fn int ecs_closeUser(int dev) - * \brief Function to disconnect from the ecs user space. - * A new ecs_open() should be done before any new read or write - * - * \param : dev the board number - *//***********************************************************************/ -void ecs_closeUser(int dev){ - ecs_close(dev,0); -} - -/***********************************************************************//** - * \fn int ecs_openLli(int dev) - * \brief Function to init the ecs pcie bus accesses for LLI devices - * Thus function has to be done before any access. - * - * \param : dev the board number - * \return 0 success, -1 error - *//***********************************************************************/ -int ecs_openLli(int dev){ - return ecs_open(dev,2); -} - -/***********************************************************************//** - * \fn int ecs_closeLli(int dev) - * \brief Function to disconnect from the LLI devices io. - * A new ecs_openLli() should be done before any new read or write - * - * \param : dev the board number - *//***********************************************************************/ -void ecs_closeLli(int dev){ - ecs_close(dev,2); -} - -/***********************************************************************//** - * \fn int ecs_iordLli(int dev, unsigned add, unsigned *val) - * \brief Function to read a word at offset add in the lli registers space. - * - * \param : dev the board number - * \param add the offset of the word to read in the lli register space - * \param val a pointer to receive the read value in case of success - * \return 0 success,-1 error - *//***********************************************************************/ -int ecs_iordLli(int dev, unsigned add, unsigned *val){ - return ecs_iordBar(dev, 2, add, val); -} - -/***********************************************************************//** - * \fn int ecs_iowrLli(int dev, unsigned add, unsigned *val) - * \brief Function to write a word at offset add in the Lli registers space. - * - * \param : dev the board number - * \param add the offset of the word to write in the Lli registers space - * \param val a pointer to the value to write - * \return 0 success,-1 error - *//***********************************************************************/ -int ecs_iowrLli(int dev, unsigned add, unsigned *val){ - return ecs_iowrBar(dev, 2, add, val); -} - -/***********************************************************************//** - * \fn int ecs_iordBlocLli(unsigned add, int size, unsigned *val) - * \brief Function to read size words at offset add in the lli registers space. - * - * \param : dev the board number - * \param add : the offset of the word to read in the lli register space - * \param size : number of bytes to read - * \param val : a pointer to receive the read value in case of success - * \return 0 success,-1 error - *//***********************************************************************/ -int ecs_iordBlocLli(int dev, unsigned add, int size, unsigned *val){ - return ecs_iordBarBloc(dev, 2, add, size, val); -} - -/***********************************************************************//** - * \fn int ecs_iowrBlocLli(unsigned add, int size, unsigned *val) - * \brief Function to write size words at offset add in the Lli registers space. - * - * \param : dev the board number - * \param add : the offset of the word to write in the Lli registers space - * \param size : number of bytes to write - * \param val : a pointer to the value to write - * \return 0 success,-1 error - *//***********************************************************************/ -int ecs_iowrBlocLli(int dev, unsigned add, int size, unsigned *val){ - return ecs_iowrBarBloc(dev, 2, add, size, val); -} - -/***********************************************************************//** - * \fn int ecs_iordI2c(int dev, unsigned add, unsigned *val) - * \brief Function to read a word at offset add in the I2C core registers space. - * - * \param : dev the board number - * \param add the offset of the word to read in the I2C core register space - * \param val a pointer to receive the read value in case of success - * \return 0 success,-1 error - *//***********************************************************************/ -int ecs_iordI2c(int dev, unsigned add, unsigned *val){ - return ecs_iordLli(dev, add, val); -} -int ecs_iordI2c_slow(int dev, unsigned add, unsigned *val){ - int dat = ecs_iordLli(dev, add, val); - usleep(0); - return dat; -} -/***********************************************************************//** - * \fn int ecs_iowrI2c(unsigned add, unsigned *val) - * \brief Function to write a word at offset add in the I2C core registers space. - * - * \param : dev the board number - * \param add the offset of the word to write in the I2C core registers space - * \param val a pointer to the value to write - * \return 0 success,-1 error - *//***********************************************************************/ -int ecs_iowrI2c(int dev, unsigned add, unsigned *val){ - return ecs_iowrLli(dev, add, val); -} -int ecs_iowrI2c_slow(int dev, unsigned add, unsigned *val){ - int dat = ecs_iowrLli(dev, add, val); - usleep(0); - return dat; -} diff --git a/Lib/src/minipods/i2cDriver.c b/Lib/src/minipods/i2cDriver.c deleted file mode 100644 index f75267d..0000000 --- a/Lib/src/minipods/i2cDriver.c +++ /dev/null @@ -1,656 +0,0 @@ -/****************************************************************************************//** -* \file i2cDriver.c -* -* \brief This unit is a simple driver library for I2C bus based on the Open-Core I2C-master. -* -* \author PYD : 12/6/2013 -* \version 0.1 -* \date 12/6/2013 - -* PYD : 12/6/2013 initial version -* PYD : 01/10/2018 remove code for ES12 and ES3 versions -*//******************************************************************************************/ -#include <stdio.h> -#include <error.h> -#include <stdlib.h> -#include <unistd.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <fcntl.h> - -#define offsetReg(r) (r*4) - -//========================= SYSTEM CONFIGURATION ================================= -#include <systemConfig.h> -#include <ecs.h> -//================================================================================ -// USER ORIENTED PROCEDURES FOR EXTERNAL USE -#include <i2cDriver.h> -//=============================================================================== -//#define I2C_FREQ 0xc7 ;#(199dec) value for 100MHz clock to match 100kHz SCL -//#define I2C_FREQ 0x31 ;#(49dec) value for 100MHz clock to match 400kHz SCL -//#define I2C_FREQ 0x18 ;#(24dec) value for 100MHz clock to match 800kHz SCL - -// addresses of I2C registers (start at 0xa40 in qsys) -#define I2C_PRELOREG 0x0 -#define I2C_PREHIREG 0x1 -#define I2C_CTRLREG 0x2 -#define I2C_TSMTREG 0x3 -#define I2C_RCVREG 0x3 -#define I2C_CMDREG 0x4 -#define I2C_STATREG 0x4 - -// Control register -#define I2C_ENA 0x80 -#define I2C_DIS 0x00 -// Command register bits -#define I2C_STA 0x80 -#define I2C_STO 0x40 -#define I2C_RD 0x20 -#define I2C_WR 0x10 -#define I2C_NACK 0x08 -#define I2C_IACK 0x01 -// Status register bits -#define I2C_TIP 0x02 -#define I2C_BUSY 0x40 - -/***********************************************************************//** - * \fn int unsigned I2C_MakeAvagoAdd(compNb) - * \brief Function to build a device address - * - * For TX(pair) the address is 0101hjkx (hjk is hard add) (x is 1=R 0=W) - * - * For RX(odd) the address is 0110hjkx (hjk is hard add) (x is 1=R 0=W) - * - * NOTE the x is added in Read/Write function - * - * \return the I2c address - *//***********************************************************************/ -/* -static unsigned i2c_MakeAvagoAdd(int compNb) { - unsigned i2cAdd; -// partern 0 + 0101/TX or 0110/RX + fixAdd on 3digits - if (compNb%2) - i2cAdd = 5<<3; - else - i2cAdd = 6<<3; - i2cAdd = i2cAdd + compNb; - - return(i2cAdd); -} -*/ - -unsigned lastSetInCLK[MAX_DEV]; -unsigned LastSetSCLfreq[MAX_DEV]; - -static int getBusBase(int bus){ - switch(bus){ - case I2C_BUS_TEMPERATURES: - return(I2C_BUS_BASE_TEMPERATURES); - break; - case I2C_BUS_PLL_CLEANER1: - return(I2C_BUS_BASE_PLL_CLEANER1); - break; - case I2C_BUS_PLL_CLEANER2: - return(I2C_BUS_BASE_PLL_CLEANER2); - break; - case I2C_BUS_PLL_TFC: - return(I2C_BUS_BASE_PLL_TFC); - break; - case I2C_BUS_SFP1: - return(I2C_BUS_BASE_SFP1); - break; - case I2C_BUS_SFP2: - return(I2C_BUS_BASE_SFP2); - break; - case I2C_BUS_MINIPODS: - return(I2C_BUS_BASE_MINIPODS); - break; - case I2C_BUS_TEMP_MEZZANINE: - return(I2C_BUS_BASE_TEMP_MEZZANINE); - break; - case I2C_BUS_CURRENT1: - return(I2C_BUS_BASE_CURRENT1); - break; - case I2C_BUS_CURRENT2: - return(I2C_BUS_BASE_CURRENT2); - break; - case I2C_BUS_FANOUT: - return(I2C_BUS_BASE_FANOUT); - break; - case I2C_BUS_FPGA_EEPROM: - return(I2C_BUS_BASE_FPGA_EEPROM); - default: - printf("ERROR: unknown i2c bus number %d in file %s line %d\n",bus,__FILE__,__LINE__); - return(99); - } -} - /***********************************************************************//** - * \fn void i2c_enable(int dev, int bus) - * \brief Function to activate the i2c-opencore IP. - * \param dev: the board number - * \param bus: the target i2c bus number - *//***********************************************************************/ -static void i2c_enable(int dev, int bus) { - unsigned cval = I2C_ENA; - - ecs_iowrI2c_slow( dev, getBusBase(bus)+ (I2C_CTRLREG*4), &cval); -} -/***********************************************************************//** - * \fn void i2c_disable(int dev,int bus) - * \param dev: the board number - * \brief Function to deactivate the i2c-opencore IP. - * \param bus: the target i2c bus number - *//***********************************************************************/ -static void i2c_disable(int dev,int bus) { - unsigned cval = I2C_DIS; - - ecs_iowrI2c_slow( dev, getBusBase(bus)+ (I2C_CTRLREG*4), &cval); -} -/***********************************************************************//** - * \fn void i2c_stop(int dev,int bus) - * \param dev: the board number - * \brief Function to generate the stop condition on the i2c bus. - * \param bus: the target i2c bus number - *//***********************************************************************/ -static void i2c_stop(int dev, int bus) { - unsigned cval = I2C_STO; - - ecs_iowrI2c_slow( dev, getBusBase(bus)+ (I2C_CMDREG*4), &cval); -} - -/****************************************************************************//** - * \fn void i2c_setSpeed(int dev, int bus, int value) - * \brief Function to program the prescale the SCL clock line. Should be called - * before the I2C use. - * \param dev: the board number - * \param bus: the target i2c bus number - * \param value: the value to write in the prescale register - *//**************************************************************************/ -static void i2c_setSpeed(int dev, int bus, int value ) { - unsigned cval = value>>8; - int base = getBusBase(bus); - - ecs_iowrI2c_slow(dev, base + (I2C_PREHIREG*4), &cval); - cval =value & 0xFF; - ecs_iowrI2c_slow(dev, base + (I2C_PRELOREG*4), &cval); -} -/****************************************************************************//** - * \fn int i2c_init(int dev, int bus, unsigned inCLK, unsigned SCLfreq) - * \brief Function to open access to i2c opencore and set speed - * \ if it is specified - * \param dev: the board number - * \param bus: the target i2c bus number - * \param inCLK: the input system clock ferquency in Hz - * \param SCLfreq: the target SCL clock frequency in Hz - * \return 0 success,-1 error - *//**************************************************************************/ -int i2c_init(int dev, int bus, unsigned inCLK, unsigned SCLfreq) { - long int prescale; - -// printf("Simulation init with clock %d fequency %d \n",inCLK, SCLfreq); return(0); - - if (ecs_openLli(dev)<0){ - printf("ERROR: Can't init I2C\n"); - return(-1); - } - i2c_stop(dev, bus); - i2c_disable(dev, bus); - i2c_enable(dev, bus); - // set prescale register - if (inCLK!=0 && SCLfreq !=0){ - prescale = (inCLK/(5*SCLfreq))-1; -// printf("PYD i2c i2c_init() bus %d applied speed is %ld\n", bus, prescale); - i2c_setSpeed(dev, bus, prescale); - lastSetInCLK[dev] = inCLK; - LastSetSCLfreq[dev] = SCLfreq; - } - return(0); -} - -/****************************************************************************//** - * \fn int i2c_getInit(int dev, int bus, unsigned &inCLK, unsigned &SCLfreq) - * \brief Read the last values in the prescale of the SCL clock line. - * - * \param dev: the board number - * \param bus: the target i2c bus number - * \param inCLK: the system clock ferquency in Hz - * \param SCLfreq: the target SCL clock frequency in Hz - *//**************************************************************************/ -void i2c_getInit(int dev, int bus, unsigned *inCLK, unsigned *SCLfreq) { - *inCLK = lastSetInCLK[dev]; - *SCLfreq = LastSetSCLfreq[dev]; -} -/***********************************************************************************//** - * \fn int _waitTIP() - * \brief function to wait for the status register TIP bit value 0 "transfer complete" - * - * \param dev: the borad number - * \param bus: the target i2c bus number - * \return 0 success,-1 error - *//********************************************************************************/ -static int i2c_waitTIP(int dev, int bus) { - unsigned val, step = 0; - int base = getBusBase(bus); - while(1){ - usleep(10); //MJ POUR TEMPO_FERNAND LE 12 SEPT 2017 -// printf("step %d\n", step); - step = step + 1; - if(ecs_iordI2c_slow(dev, base + (I2C_STATREG*4), &val)==0){ -// printf("PYD status 0x%x\n", val); - if ((val & I2C_TIP) == 0){ //transfer complete - return(0); - } else { // transfer in progress - if (step > 500){ - printf("ERROR: timeout in i2c_waitTIP()\n"); - return(-1); - } else { - usleep(10); -// printf("PYD wait %d\n", step); -// for (i=0; i<loop; i++) dum++; - } - } - } else { // read error - printf("i2c_waitTIP firmware level read error KO\n"); - return(-1); - } - }//while -} - -/***********************************************************************//** - * \fn int i2c_readMem(int dev, int bus, unsigned slaveAdd, unsigned regIndex, unsigned *val) - * \brief Function to read one single register - * - * \param dev: the board number - * \param bus: the target i2c bus number - * \param slaveAdd: the address of the device to write in the I2C space - * \param regIndex: the number of the register in the component - * \param val : a pointer to receive the read value - * \return 0 success,-1 error - *//***********************************************************************/ -int i2c_readMem(int dev, int bus, unsigned slaveAdd, unsigned regIndex, unsigned *val) { - unsigned cval; - int base = getBusBase(bus); - - // generate start command - // write $slaveAdd (slaveAdd+WR bit) in transmitReg - // - // printf("PYD bus=%d i2c_readMem() at base 0x%x subadd 0x%x register %d\n", bus, base, slaveAdd, regIndex); -// printf("Simulation\n"); *val=0x55; return(0); - - cval = slaveAdd<<1; - ecs_iowrI2c_slow(dev, base + (I2C_TSMTREG*4), &cval); - // set STA bit and WR bit in commandReg - cval = I2C_STA | I2C_WR; - ecs_iowrI2c_slow(dev, base + (I2C_CMDREG*4), &cval); - // wait fir TIP flaf in statusReg - if ( i2c_waitTIP(dev, bus) != 0) - return(-1); - // read statusReg to verify RxACK=0 - ecs_iordI2c_slow(dev, base + (I2C_STATREG*4), &cval); - if ((cval & I2C_NACK) == I2C_NACK){ - printf("ERROR: bus=%d i2c_readMem() first transaction slave address not acknowledge in I2C_Write\n",bus); - return(-1); - } - // - // write $regIndex in transmitReg - // - cval = regIndex; - ecs_iowrI2c_slow(dev, base + (I2C_TSMTREG*4), &cval); - // set WR bit in commandReg - cval = I2C_WR; - ecs_iowrI2c_slow(dev, base + (I2C_CMDREG*4), &cval); - // wait fir TIP flaf in statusReg - if ( i2c_waitTIP(dev, bus) != 0) - return(-1); - // read statusReg to verify RxACK=0 - ecs_iordI2c_slow(dev, base + (I2C_STATREG*4), &cval); - if ((cval & I2C_NACK) == I2C_NACK){ - printf("ERROR:bus %d i2c_readMem() second transaction slave address not acknowledge in I2C_Write\n",bus); - return(-1); - } - // - // write $slaveAdd (slaveAdd+RD bit) in transmitReg - // - cval = slaveAdd<<1 | 1; - ecs_iowrI2c_slow(dev, base + (I2C_TSMTREG*4), &cval); - // set STA bit and WR bit in commandReg - cval = I2C_STA | I2C_WR; - ecs_iowrI2c_slow(dev, base + (I2C_CMDREG*4), &cval); - // wait fir TIP flaf in statusReg - if ( i2c_waitTIP(dev, bus) != 0) - return(-1); - // read statusReg to verify RxACK=0 - if ((cval & I2C_NACK) == I2C_NACK){ - printf("ERROR: bus %d i2c_readMem() third transaction slave address not acknowledge in I2C_Write\n",bus); - return(-1); - } - // - // set RD bit, set ACK bit =1(NACK) set STO bit in commandReg - // - cval = I2C_RD | I2C_NACK | I2C_STO; - ecs_iowrI2c_slow(dev, base + (I2C_CMDREG*4), &cval); - // wait for TIP flag in statusReg - if ( i2c_waitTIP(dev, bus) != 0) - return(-1); - return( ecs_iordI2c_slow(dev, base + (I2C_RCVREG*4), val) ); -} -/***********************************************************************//** - * \fn int i2c_writeMem(int dev, int bus, unsigned slaveAdd, unsigned regIndex, unsigned *val) - * \brief Function to write a value in a register - * - * \param dev: the board number - * \param bus: the target i2c bus number - * \param slaveAdd: the address of the device to write in the I2C space - * \param regIndex: the number of the register in the component - * \param val : a pointer to the value to write - * \return 0 success,-1 error - *//***********************************************************************/ -int i2c_writeMem(int dev, int bus, unsigned slaveAdd, unsigned regIndex, unsigned *val){ - unsigned cval; - int base = getBusBase(bus); - - // generate start command -// printf("bus %d i2c_writeMem() at add 0x%x register %d val %x\n", bus, slaveAdd, regIndex, *val); -// printf("Simulation\n"); return(0); - // write $slaveAdd (slaveAdd+WR bit) in transmitReg - cval = slaveAdd<<1; - ecs_iowrI2c_slow(dev, base + (I2C_TSMTREG*4), &cval); - // set STA bit and WR bit in commandReg - cval = I2C_STA | I2C_WR; - ecs_iowrI2c_slow(dev, base + (I2C_CMDREG*4), &cval); - // wait fir TIP flaf in statusReg - if ( i2c_waitTIP(dev, bus) != 0) - return(-1); - // read statusReg to verify RxACK=0 - ecs_iordI2c_slow(dev, base + (I2C_STATREG*4), &cval); - if ((cval & I2C_NACK) == I2C_NACK){ - printf("ERROR: bus %d slave address not acknowledge in I2C_Write\n",bus); - return(-1); - } - // - // write $regIndex in transmitReg - // - cval = regIndex; - ecs_iowrI2c_slow(dev, base + (I2C_TSMTREG*4), &cval); - // set WR bit in commandReg - cval = I2C_WR; - ecs_iowrI2c_slow(dev, base + (I2C_CMDREG*4), &cval); - // wait fir TIP flaf in statusReg - if ( i2c_waitTIP(dev, bus) != 0) - return(-1); - // read statusReg to verify RxACK=0 - ecs_iordI2c_slow(dev, base + (I2C_STATREG*4), &cval); - if ((cval & I2C_NACK) == I2C_NACK){ - printf("ERROR: bus %d slave address not acknowledge in I2C_Write\n",bus); - return(-1); - } - // - // write $slaveAdd (slaveAdd+RD bit) in transmitReg - // - ecs_iowrI2c_slow(dev, base + (I2C_TSMTREG*4), val); - // set STA bit and WR bit in commandReg - cval = I2C_STO | I2C_WR; - ecs_iowrI2c_slow(dev, base + (I2C_CMDREG*4), &cval); - // wait fir TIP flaf in statusReg - if ( i2c_waitTIP(dev, bus) != 0) - return(-1); -return(0); -} -/***********************************************************************//** - * \fn int i2c_multReadMemInit(int dev, int bus, unsigned slaveAdd, unsigned regIndex) - * \brief Function to initialize a multiread sequence from slave at - * i2c address slaveAdd starting at device internal register regIndex - * - * \param dev: the board number - * \param bus: the target i2c bus number - * \param slaveAdd: the address of the device to read from in the I2C space - * \param regIndex: the number of the first register in the sequence to read - * \return 0 success,-1 error - *//***********************************************************************/ -static int i2c_multReadMemInit(int dev, int bus, unsigned slaveAdd, unsigned regIndex) { - unsigned cval; - int base = getBusBase(bus); - - // generate start command - // write $slaveAdd (slaveAdd+WR bit) in transmitReg - // -// printf("PYD start i2c_multReadMemInit\n"); - cval = slaveAdd<<1; - ecs_iowrI2c_slow(dev, base + (I2C_TSMTREG*4), &cval); - // set STA bit and WR bit in commandReg - cval = I2C_STA | I2C_WR; - ecs_iowrI2c_slow(dev, base + (I2C_CMDREG*4), &cval); -// printf("PYD wait for TIP flag in statusReg\n"); - // wait for TIP flag in statusReg - if ( i2c_waitTIP(dev, bus) != 0) - return(-1); - // read statusReg to verify RxACK=0 -// printf("PYD read statusReg to verify RxACK=0\n"); - ecs_iordI2c_slow(dev, base + (I2C_STATREG*4), &cval); - if ((cval & I2C_NACK) == I2C_NACK){ - printf("ERROR: bus %d slave address not acknowledge in I2C_Write\n",bus); - return(-1); - } - // - // write $regIndex in transmitReg - // -// printf("PYD write $regIndex in transmitReg\n"); - cval = regIndex; - ecs_iowrI2c_slow(dev, base + (I2C_TSMTREG*4), &cval); - // set WR bit in commandReg - cval = I2C_WR; - ecs_iowrI2c_slow(dev, base + (I2C_CMDREG*4), &cval); - // wait fir TIP flaf in statusReg - if ( i2c_waitTIP(dev, bus) != 0) - return(-1); - // read statusReg to verify RxACK=0 - ecs_iordI2c_slow(dev, base + (I2C_STATREG*4), &cval); - if ((cval & I2C_NACK) == I2C_NACK){ - printf("ERROR: bus %d slave address not acknowledge in I2C_Write\n",bus); - return(-1); - } - // - // write $slaveAdd (slaveAdd+RD bit) in transmitReg - // -// printf("PYD write $slaveAdd (slaveAdd+RD bit) in transmitReg\n"); - cval = slaveAdd<<1 | 1; - ecs_iowrI2c_slow(dev, base + (I2C_TSMTREG*4), &cval); - // set STA bit and WR bit in commandReg - cval = I2C_STA | I2C_WR; - ecs_iowrI2c_slow(dev, base + (I2C_CMDREG*4), &cval); - // wait fir TIP flaf in statusReg - if ( i2c_waitTIP(dev, bus) != 0) - return(-1); -// printf("PYD end i2c_multReadMemInit\n"); -return(0); -} -/******************************************************************************//** - * \fn int i2c_multReadMem(int dev, int bus, unsigned slaveAdd, unsigned regIndex, int nb) - * \brief Function to read/print a sequence of nb conscecutive registers from slave at - * i2c address slaveAdd starting at device internal register regIndex - * Used with nb=1 is a function to read one register value - * - * This function allocate the array to store the read data in. The user - * should free it after use. - * - * \param dev: the board number - * \param bus: the target i2c bus number - * \param slaveAdd: the address of the device to read from in the I2C space - * \param regIndex: the number of the first register in the sequence to read - * \param nb : the number of conscecutives registers to read - * \param data : a pointer to receive the data array reference - * \return 0 success,-1 error - *//******************************************************************************/ -int i2c_multReadMem(int dev, int bus, unsigned slaveAdd, unsigned regIndex, int nb, unsigned **data) { - unsigned cval; - int i; - unsigned *bloc; - - int base = getBusBase(bus); - - if (i2c_multReadMemInit(dev, bus, slaveAdd, regIndex) != 0) - return(-1); - bloc = malloc(nb*sizeof(unsigned)); - if (bloc==0){ - perror("Can't malloc in i2c_multReadMem()\n"); - return(-1); - } -/* printf("Reading bytes at slave add 0x%x (%d) starting at internal address 0x%x (%d)\n", - slaveAdd, slaveAdd, regIndex, regIndex); -*/ - // Read and display values - cval = I2C_RD; -// printf("PYD read loop\n"); - for (i=0; i<(nb-1); i++){ - ecs_iowrI2c_slow(dev, base + (I2C_CMDREG*4), &cval); - // wait for TIP flag in statusReg - if ( i2c_waitTIP(dev, bus) != 0) - return(-1); - ecs_iordI2c_slow(dev, base + (I2C_RCVREG*4), &bloc[i]); -// printf("PYD 0x%x "); - } -// printf("PYD\n"); - - // last byte to transfer - cval = I2C_RD | I2C_NACK | I2C_STO; - ecs_iowrI2c_slow(dev, base + (I2C_CMDREG*4), &cval); - // wait for TIP flag in statusReg - if ( i2c_waitTIP(dev, bus) != 0) - return(-1); - ecs_iordI2c_slow(dev, base + (I2C_RCVREG*4), &bloc[nb-1]); - *data = bloc; - return(0); -} - -#ifdef MAIN_DRIVER -int main(){ - unsigned val, i2cAdd; - unsigned cval[3]; - int i, loop; - unsigned val1[] = { 0x4, 0x5, 0xc0 }; - unsigned val2[] = { 0xa, 0xb, 0x00 }; - unsigned i2cAddTab[] = {0x28, 0x31, 0x2A, 0x33, 0x2C, 0x35}; - unsigned *data; - int base; - int dev = 0; - - if (ecs_openLli(dev) != 0){ - perror("Can't access i2c ocore\n"); - exit(0); - } - printf("TEST on PCIe access to ocore regsiters\n"); - printf("======================================\n"); - base = I2C_BASE_0; - - // raw test for pcie access to opencore registers - ecs_iordI2c(dev, base + (I2C_PRELOREG*4), &cval[0]); - ecs_iordI2c(dev, base + (I2C_PREHIREG*4), &cval[1]); - ecs_iordI2c(dev, base + (I2C_CTRLREG*4), &cval[2]); - printf("Before ...\n"); - for (i=0; i<3; i++) - printf("Ox%x ", cval[i]); - printf("\n"); - - ecs_iowrI2c(dev, base + (I2C_PRELOREG*4), &val1[0]); - ecs_iowrI2c(dev, base + (I2C_PREHIREG*4), &val1[1]); - ecs_iowrI2c(dev, base + (I2C_CTRLREG*4), &val1[2]); - printf("After first loop ... should be equal\n"); - ecs_iordI2c(dev, base + (I2C_PRELOREG*4), &cval[0]); - ecs_iordI2c(dev, base + (I2C_PREHIREG*4), &cval[1]); - ecs_iordI2c(dev, base + (I2C_CTRLREG*4), &cval[2]); - for (i=0; i<3; i++) - printf(" Ox%x =?= 0x%x |", cval[i], val1[i]); - printf("\n"); - - exit(0); - - ecs_iowrI2c(dev, base + (I2C_PRELOREG*4), &val2[0]); - ecs_iowrI2c(dev, base + (I2C_PREHIREG*4), &val2[1]); - ecs_iowrI2c(dev, base + (I2C_CTRLREG*4), &val2[2]); - printf("After second loop ... should be equal\n"); - ecs_iordI2c(dev, base + (I2C_PRELOREG*4), &cval[0]); - ecs_iordI2c(dev, base + (I2C_PREHIREG*4), &cval[1]); - ecs_iordI2c(dev, base + (I2C_CTRLREG*4), &cval[2]); - for (i=0; i<3; i++) - printf("Ox%x =?= 0x%x |", cval[i], val2[i]); - printf("\n"); - - printf("\nTEST on I2C access to avago registers\n"); - printf("=====================================\n"); - // init and set address for TX 0 -// i2c_init(dev, 100000000, 100000); // for TCL/TK because jtag master set this clock - i2c_init(dev, 125000000, 100000); // fast clock with PCI -// i2c_init(dev, 62500000, 100000); // slow clock with PCI - // set i2c address of avago number 0 (a TX) - printf("Select avago number 0 (a TX) as target\n"); - i2cAdd = 5<<3; // comp 0 TX - - printf("Read register 0 should be 0x00 ---> read "); - val = 0xaa; - i2c_readMem(dev, i2cAdd, 0, &val); - printf("(0x%x)\n", val); - - - printf("Write NULL in page select register\n"); - val = 0; // select page 0 - i2c_writeMem(dev, i2cAdd, 127, &val); - printf("Read read page select register should be NULL ---> read "); - val = 0xaa; - i2c_readMem(dev, i2cAdd, 127, &val); - printf("(0x%x)\n", val); - - printf("Write 1 in page select register\n"); - val = 1; // select page 0 - i2c_writeMem(dev, i2cAdd, 127, &val); - printf("Read read page select register should be 1 ---> read "); - val = 0xaa; - i2c_readMem(dev, i2cAdd, 127, &val); - printf("(0x%x)\n", val); - - printf("Write NULL in page select register\n"); - val = 0; // select page 0 - i2c_writeMem(dev, i2cAdd, 127, &val); - printf("Read read page select register should be NULL ---> read "); - val = 0xaa; - i2c_readMem(dev, i2cAdd, 127, &val); - printf("(0x%x)\n", val); - - printf("Write 0xff in register 94 squelch\n"); - val = 0xff; // select page 0 - i2c_writeMem(dev, i2cAdd, 94, &val); - printf("Read squelch ---> read "); - val = 0xaa; - i2c_readMem(dev, i2cAdd, 94, &val); - printf("(0x%x)\n", val); - - printf("Write 0xff in register 95 squelch\n"); - val = 0xff; // select page 0 - i2c_writeMem(dev, i2cAdd, 95, &val); - printf("Read squelch ---> read "); - val = 0xaa; - i2c_readMem(dev, i2cAdd, 95, &val); - printf("(0x%x)\n", val); - - printf("Read Vendor Name\n"); - loop = 16; - // test to read vendor name at reg 152 to 167 (16bytes) - // in module at address 0 - for (i=0; i<loop; i++){ - val = 1; - i2c_readMem(dev, i2cAdd, 152+i, &val); -// printf("0x%x %c ", val, (char)val); - printf("%c", (char)val); - } - printf("\n"); - - i2c_multReadMem(dev, i2cAdd, 152, 16, &data); - for (i=0; i<loop; i++) - printf("%c", (char)data[i]); - printf("\n"); - -return(0); -} -#endif - - -- GitLab