diff --git a/bsp/phytium/.gitignore b/bsp/phytium/.gitignore index 43c09682e7..ca53c59acf 100644 --- a/bsp/phytium/.gitignore +++ b/bsp/phytium/.gitignore @@ -3,12 +3,15 @@ /aarch32/tools/gnu_gcc/* /aarch32/tools/ci.py /aarch32/tools/get_toolchain.py +/aarch32/phytium_standalone_sdk_install.py /aarch32/smart-env.sh /aarch32/smart-env.bat /aarch64/tools/gnu_gcc/* /aarch64/tools/ci.py /aarch64/tools/get_toolchain.py +/aarch64/phytium_standalone_sdk_install.py /aarch64/smart-env.sh /aarch64/smart-env.bat **/**/makefile -/libraries/tests/* \ No newline at end of file +/libraries/tests/* +/libraries/phytium_standalone_sdk/* diff --git a/bsp/phytium/README.md b/bsp/phytium/README.md index 5b314e5d48..3e3f628a2d 100644 --- a/bsp/phytium/README.md +++ b/bsp/phytium/README.md @@ -33,6 +33,9 @@ | GPIO | 支持 | GPIO 引脚电平输入输出,中断 | | XMAC | 支持 | XMAC 网卡初始化和运行 | | SDMMC | 支持 | SD0/SD1 读写 SD 卡或 eMMC 颗粒 | +| PWM | 支持 | PWM 脉宽调制电压输出 | +| CAN | 支持 | CAN/CANFD设备通信 | +| I2C | 支持 | I2C设备通信 | | **芯片** | **支持情况** | **备注** | | :----------------- | :----------: | :------------------------------------- | @@ -41,6 +44,7 @@ | E2000Q | 支持 | 支持SMP | | E2000S | 支持 | | +- Phytium PI 上使用 RT-Thread 要注意读写操作不能影响 SD 卡的固件,具体使用方法可以[参考](./doc/use_phytium_pi_sd_image.md) ## 如何在Ubuntu/Windows 环境下使用此BSP @@ -61,6 +65,9 @@ 4. 使用 export_project.py 导出 BSP 工程到其他目录进行开发 5. 使用 RT-Studio 导入 BSP 工程进行开发 +## 如何添加开发板 + +- [CUS BOARD ADD](./board/README.md) ## 如何进行编译与实验 diff --git a/bsp/phytium/aarch32/.config b/bsp/phytium/aarch32/.config index 36a489ac32..6b56edb613 100644 --- a/bsp/phytium/aarch32/.config +++ b/bsp/phytium/aarch32/.config @@ -8,7 +8,7 @@ # CONFIG_RT_NAME_MAX=16 # CONFIG_RT_USING_ARCH_DATA_TYPE is not set -CONFIG_RT_USING_SMART=y +# CONFIG_RT_USING_SMART is not set # CONFIG_RT_USING_AMP is not set CONFIG_RT_USING_SMP=y CONFIG_RT_CPUS_NR=4 @@ -72,19 +72,15 @@ CONFIG_RT_USING_SLAB_AS_HEAP=y # CONFIG_RT_USING_MEMTRACE is not set CONFIG_RT_USING_HEAP_ISR=y CONFIG_RT_USING_HEAP=y - -# -# Kernel Device Object -# CONFIG_RT_USING_DEVICE=y # CONFIG_RT_USING_DEVICE_OPS is not set -# CONFIG_RT_USING_DM is not set # CONFIG_RT_USING_INTERRUPT_INFO is not set CONFIG_RT_USING_CONSOLE=y CONFIG_RT_CONSOLEBUF_SIZE=256 CONFIG_RT_CONSOLE_DEVICE_NAME="uart1" -CONFIG_RT_VER_NUM=0x50002 +CONFIG_RT_VER_NUM=0x50100 # CONFIG_RT_USING_STDC_ATOMIC is not set +CONFIG_RT_BACKTRACE_LEVEL_MAX_NR=32 CONFIG_RT_USING_CACHE=y CONFIG_RT_USING_HW_ATOMIC=y # CONFIG_ARCH_ARM_BOOTWITH_FLUSH_CACHE is not set @@ -93,8 +89,6 @@ CONFIG_RT_USING_CPU_FFS=y CONFIG_ARCH_MM_MMU=y CONFIG_ARCH_ARM=y CONFIG_ARCH_ARM_MMU=y -CONFIG_KERNEL_VADDR_START=0xc0000000 -# CONFIG_RT_IOREMAP_LATE is not set CONFIG_ARCH_ARM_CORTEX_A=y # CONFIG_RT_SMP_AUTO_BOOT is not set # CONFIG_RT_USING_GIC_V2 is not set @@ -170,19 +164,11 @@ CONFIG_RT_USING_DFS_RAMFS=y CONFIG_RT_USING_DFS_MQUEUE=y # CONFIG_RT_USING_DFS_NFS is not set # CONFIG_RT_USING_FAL is not set -CONFIG_RT_USING_LWP=y -CONFIG_RT_LWP_MAX_NR=30 -CONFIG_LWP_TASK_STACK_SIZE=16384 -CONFIG_RT_CH_MSG_MAX_NR=1024 -CONFIG_LWP_CONSOLE_INPUT_BUFFER_SIZE=1024 -CONFIG_LWP_TID_MAX_NR=64 -CONFIG_LWP_ENABLE_ASID=y -CONFIG_RT_LWP_SHM_MAX_NR=64 -# CONFIG_LWP_UNIX98_PTY is not set # # Device Drivers # +# CONFIG_RT_USING_DM is not set CONFIG_RT_USING_DEVICE_IPC=y CONFIG_RT_UNAMED_PIPE_NUMBER=64 CONFIG_RT_USING_SYSTEM_WORKQUEUE=y @@ -193,8 +179,6 @@ CONFIG_RT_USING_SERIAL_V1=y # CONFIG_RT_USING_SERIAL_V2 is not set CONFIG_RT_SERIAL_USING_DMA=y CONFIG_RT_SERIAL_RB_BUFSZ=1024 -CONFIG_RT_USING_TTY=y -# CONFIG_RT_TTY_DEBUG is not set # CONFIG_RT_USING_CAN is not set # CONFIG_RT_USING_HWTIMER is not set # CONFIG_RT_USING_CPUTIME is not set @@ -210,14 +194,13 @@ CONFIG_RT_USING_RANDOM=y # CONFIG_RT_USING_MTD_NOR is not set # CONFIG_RT_USING_MTD_NAND is not set # CONFIG_RT_USING_PM is not set -# CONFIG_RT_USING_FDT is not set CONFIG_RT_USING_RTC=y # CONFIG_RT_USING_ALARM is not set # CONFIG_RT_USING_SOFT_RTC is not set CONFIG_RT_USING_SDIO=y -CONFIG_RT_SDIO_STACK_SIZE=512 +CONFIG_RT_SDIO_STACK_SIZE=4096 CONFIG_RT_SDIO_THREAD_PRIORITY=15 -CONFIG_RT_MMCSD_STACK_SIZE=1024 +CONFIG_RT_MMCSD_STACK_SIZE=4096 CONFIG_RT_MMCSD_THREAD_PREORITY=22 CONFIG_RT_MMCSD_MAX_PARTITION=16 # CONFIG_RT_SDIO_DEBUG is not set @@ -268,8 +251,6 @@ CONFIG_RT_USING_POSIX_STDIO=y CONFIG_RT_USING_POSIX_POLL=y CONFIG_RT_USING_POSIX_SELECT=y # CONFIG_RT_USING_POSIX_EVENTFD is not set -# CONFIG_RT_USING_POSIX_EPOLL is not set -# CONFIG_RT_USING_POSIX_SIGNALFD is not set # CONFIG_RT_USING_POSIX_TIMERFD is not set # CONFIG_RT_USING_POSIX_SOCKET is not set CONFIG_RT_USING_POSIX_TERMIOS=y @@ -395,6 +376,11 @@ CONFIG_RT_USING_ADT_REF=y # CONFIG_RT_USING_RT_LINK is not set # CONFIG_RT_USING_VBUS is not set +# +# Memory management +# +# CONFIG_RT_USING_MEMBLOCK is not set + # # RT-Thread Utestcases # @@ -435,6 +421,11 @@ CONFIG_RT_USING_ADT_REF=y # # CONFIG_PKG_USING_WLAN_WICED is not set # CONFIG_PKG_USING_RW007 is not set + +# +# CYW43012 WiFi +# +# CONFIG_PKG_USING_WLAN_CYW43012 is not set # CONFIG_PKG_USING_COAP is not set # CONFIG_PKG_USING_NOPOLL is not set # CONFIG_PKG_USING_NETUTILS is not set @@ -477,6 +468,7 @@ CONFIG_RT_USING_ADT_REF=y # CONFIG_PKG_USING_NMEALIB is not set # CONFIG_PKG_USING_PDULIB is not set # CONFIG_PKG_USING_BTSTACK is not set +# CONFIG_PKG_USING_BT_CYW43012 is not set # CONFIG_PKG_USING_LORAWAN_ED_STACK is not set # CONFIG_PKG_USING_WAYZ_IOTKIT is not set # CONFIG_PKG_USING_MAVLINK is not set @@ -496,6 +488,8 @@ CONFIG_RT_USING_ADT_REF=y # CONFIG_PKG_USING_ZFTP is not set # CONFIG_PKG_USING_WOL is not set # CONFIG_PKG_USING_ZEPHYR_POLLING is not set +# CONFIG_PKG_USING_MATTER_ADAPTATION_LAYER is not set +# CONFIG_PKG_USING_LHC_MODBUS is not set # # security packages @@ -542,7 +536,6 @@ CONFIG_RT_USING_ADT_REF=y # LVGL: powerful and easy-to-use embedded GUI library # # CONFIG_PKG_USING_LVGL is not set -# CONFIG_PKG_USING_LITTLEVGL2RTT is not set # CONFIG_PKG_USING_LV_MUSIC_DEMO is not set # CONFIG_PKG_USING_GUI_GUIDER_DEMO is not set @@ -618,6 +611,7 @@ CONFIG_RT_USING_ADT_REF=y # CONFIG_PKG_USING_HASH_MATCH is not set # CONFIG_PKG_USING_ARMV7M_DWT_TOOL is not set # CONFIG_PKG_USING_VOFA_PLUS is not set +# CONFIG_PKG_USING_ZDEBUG is not set # # system packages @@ -654,6 +648,8 @@ CONFIG_RT_USING_ADT_REF=y # CONFIG_PKG_USING_UC_COMMON is not set # CONFIG_PKG_USING_UC_MODBUS is not set # CONFIG_PKG_USING_FREERTOS_WRAPPER is not set +# CONFIG_PKG_USING_LITEOS_SDK is not set +# CONFIG_PKG_USING_TZ_DATABASE is not set # CONFIG_PKG_USING_CAIRO is not set # CONFIG_PKG_USING_PIXMAN is not set # CONFIG_PKG_USING_PARTITION is not set @@ -677,6 +673,7 @@ CONFIG_RT_USING_ADT_REF=y # CONFIG_PKG_USING_QBOOT is not set # CONFIG_PKG_USING_PPOOL is not set # CONFIG_PKG_USING_OPENAMP is not set +# CONFIG_PKG_USING_RPMSG_LITE is not set # CONFIG_PKG_USING_LPM is not set # CONFIG_PKG_USING_TLSF is not set # CONFIG_PKG_USING_EVENT_RECORDER is not set @@ -690,6 +687,11 @@ CONFIG_RT_USING_ADT_REF=y # CONFIG_PKG_USING_AGILE_UPGRADE is not set # CONFIG_PKG_USING_FLASH_BLOB is not set # CONFIG_PKG_USING_MLIBC is not set +# CONFIG_PKG_USING_TASK_MSG_BUS is not set +# CONFIG_PKG_USING_SFDB is not set +# CONFIG_PKG_USING_RTP is not set +# CONFIG_PKG_USING_REB is not set +# CONFIG_PKG_USING_R_RHEALSTONE is not set # # peripheral libraries and drivers @@ -754,6 +756,7 @@ CONFIG_RT_USING_ADT_REF=y # CONFIG_PKG_USING_BALANCE is not set # CONFIG_PKG_USING_SHT2X is not set # CONFIG_PKG_USING_SHT3X is not set +# CONFIG_PKG_USING_SHT4X is not set # CONFIG_PKG_USING_AD7746 is not set # CONFIG_PKG_USING_ADT74XX is not set # CONFIG_PKG_USING_MAX17048 is not set @@ -854,6 +857,11 @@ CONFIG_RT_USING_ADT_REF=y # CONFIG_PKG_USING_FINGERPRINT is not set # CONFIG_PKG_USING_BT_ECB02C is not set # CONFIG_PKG_USING_UAT is not set +# CONFIG_PKG_USING_ST7789 is not set +# CONFIG_PKG_USING_VS1003 is not set +# CONFIG_PKG_USING_X9555 is not set +# CONFIG_PKG_USING_SYSTEM_RUN_LED is not set +# CONFIG_PKG_USING_PHYTIUM_SDK is not set # CONFIG_PKG_USING_SPI_TOOLS is not set # @@ -868,6 +876,7 @@ CONFIG_RT_USING_ADT_REF=y # CONFIG_PKG_USING_ULAPACK is not set # CONFIG_PKG_USING_QUEST is not set # CONFIG_PKG_USING_NAXOS is not set +# CONFIG_PKG_USING_R_TINYMAIX is not set # # Signal Processing and Control Algorithm Packages @@ -877,6 +886,7 @@ CONFIG_RT_USING_ADT_REF=y # CONFIG_PKG_USING_UKAL is not set # CONFIG_PKG_USING_DIGITALCTRL is not set # CONFIG_PKG_USING_KISSFFT is not set +# CONFIG_PKG_USING_CMSIS_DSP is not set # # miscellaneous packages @@ -914,6 +924,7 @@ CONFIG_RT_USING_ADT_REF=y # CONFIG_PKG_USING_MINILZO is not set # CONFIG_PKG_USING_QUICKLZ is not set # CONFIG_PKG_USING_LZMA is not set +# CONFIG_PKG_USING_RALARAM is not set # CONFIG_PKG_USING_MULTIBUTTON is not set # CONFIG_PKG_USING_FLEXIBLE_BUTTON is not set # CONFIG_PKG_USING_CANFESTIVAL is not set @@ -1098,6 +1109,7 @@ CONFIG_RT_USING_ADT_REF=y # # CONFIG_PKG_USING_ARDUINO_ADAFRUIT_GFX_LIBRARY is not set # CONFIG_PKG_USING_ARDUINO_U8G2 is not set +# CONFIG_PKG_USING_ARDUINO_TFT_ESPI is not set # CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ST7735 is not set # CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SSD1306 is not set # CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ILI9341 is not set @@ -1106,6 +1118,7 @@ CONFIG_RT_USING_ADT_REF=y # # Timing # +# CONFIG_PKG_USING_ARDUINO_RTCLIB is not set # CONFIG_PKG_USING_ARDUINO_MSTIMER2 is not set # CONFIG_PKG_USING_ARDUINO_TICKER is not set # CONFIG_PKG_USING_ARDUINO_TASKSCHEDULER is not set @@ -1142,7 +1155,6 @@ CONFIG_RT_USING_ADT_REF=y # # CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MFRC630 is not set # CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI5351 is not set -# CONFIG_PKG_USING_ARDUINO_RTCLIB is not set # # Signal IO @@ -1163,10 +1175,12 @@ CONFIG_RT_USING_ADT_REF=y # # Hardware Drivers # +# CONFIG_DRV_DEBUG is not set # # On-chip Peripheral Drivers # +CONFIG_BSP_USING_IOPAD=y CONFIG_BSP_USING_UART=y CONFIG_RT_USING_UART1=y # CONFIG_RT_USING_UART0 is not set @@ -1174,14 +1188,15 @@ CONFIG_RT_USING_UART1=y # CONFIG_BSP_USING_CAN is not set # CONFIG_BSP_USING_GPIO is not set # CONFIG_BSP_USING_QSPI is not set -CONFIG_BSP_USING_ETH=y -CONFIG_RT_LWIP_PBUF_POOL_BUFSIZE=1700 -CONFIG_BSP_USING_SDIO=y +# CONFIG_BSP_USING_ETH is not set +# CONFIG_BSP_USING_PWM is not set +# CONFIG_BSP_USING_I2C is not set +CONFIG_BSP_USING_SDIF=y CONFIG_BSP_USING_SDCARD_FATFS=y -CONFIG_USING_SDIO0=y -# CONFIG_USING_SDIO1 is not set +CONFIG_BSP_USING_SDCARD_PARTITION="sd1" +CONFIG_USING_SDIF0=y +# CONFIG_USING_SDIF1 is not set # CONFIG_USING_EMMC is not set -CONFIG_SDCARD_OFFSET=0x0 # # Board extended module Drivers @@ -1195,61 +1210,45 @@ CONFIG_TARGET_ARMV8_AARCH32=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # -# Board Configuration +# Soc configuration # -# CONFIG_TARGET_F2000_4 is not set -# CONFIG_TARGET_D2000 is not set +CONFIG_TARGET_PHYTIUMPI=y # CONFIG_TARGET_E2000Q is not set # CONFIG_TARGET_E2000D is not set # CONFIG_TARGET_E2000S is not set -CONFIG_TARGET_PHYTIUMPI=y +# CONFIG_TARGET_FT2004 is not set +# CONFIG_TARGET_D2000 is not set +CONFIG_SOC_NAME="phytiumpi" +CONFIG_SOC_CORE_NUM=4 +CONFIG_F32BIT_MEMORY_ADDRESS=0x80000000 +CONFIG_F32BIT_MEMORY_LENGTH=0x80000000 +CONFIG_F64BIT_MEMORY_ADDRESS=0x2000000000 +CONFIG_F64BIT_MEMORY_LENGTH=0x800000000 CONFIG_TARGET_E2000=y +# CONFIG_USE_SPINLOCK is not set CONFIG_DEFAULT_DEBUG_PRINT_UART1=y # CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set # CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set # -# Components Configuration +# Board Configuration # -# CONFIG_USE_SPI is not set -# CONFIG_USE_QSPI is not set -CONFIG_USE_GIC=y -CONFIG_ENABLE_GICV3=y -CONFIG_USE_IOPAD=y -CONFIG_ENABLE_IOPAD=y -CONFIG_USE_SERIAL=y +CONFIG_BOARD_NAME="firefly" +# CONFIG_USE_SPI_IOPAD is not set +# CONFIG_USE_GPIO_IOPAD is not set +# CONFIG_USE_CAN_IOPAD is not set +# CONFIG_USE_QSPI_IOPAD is not set +# CONFIG_USE_PWM_IOPAD is not set +# CONFIG_USE_MIO_IOPAD is not set +# CONFIG_USE_TACHO_IOPAD is not set +# CONFIG_USE_UART_IOPAD is not set +# CONFIG_USE_THIRD_PARTY_IOPAD is not set +CONFIG_FIREFLY_DEMO_BOARD=y # -# Usart Configuration +# IO mux configuration when board start up # -CONFIG_ENABLE_Pl011_UART=y -# CONFIG_USE_GPIO is not set -CONFIG_USE_ETH=y - -# -# Eth Configuration -# -CONFIG_ENABLE_FXMAC=y -# CONFIG_ENABLE_FGMAC is not set -CONFIG_FXMAC_PHY_COMMON=y -# CONFIG_FXMAC_PHY_YT is not set -# CONFIG_USE_CAN is not set -# CONFIG_USE_I2C is not set -# CONFIG_USE_TIMER is not set -# CONFIG_USE_MIO is not set -# CONFIG_USE_SDMMC is not set -# CONFIG_USE_PCIE is not set -# CONFIG_USE_WDT is not set -# CONFIG_USE_DMA is not set -# CONFIG_USE_NAND is not set -# CONFIG_USE_RTC is not set -# CONFIG_USE_SATA is not set -# CONFIG_USE_USB is not set -# CONFIG_USE_ADC is not set -# CONFIG_USE_PWM is not set -# CONFIG_USE_IPC is not set -# CONFIG_USE_MEDIA is not set -# CONFIG_USE_SCMI_MHU is not set +# CONFIG_CUS_DEMO_BOARD is not set # # Sdk common configuration @@ -1266,3 +1265,8 @@ CONFIG_LOG_ERROR=y CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y CONFIG_INTERRUPT_ROLE_MASTER=y # CONFIG_INTERRUPT_ROLE_SLAVE is not set + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set diff --git a/bsp/phytium/aarch32/Kconfig b/bsp/phytium/aarch32/Kconfig index 3f92dee45b..89e21c9bb7 100644 --- a/bsp/phytium/aarch32/Kconfig +++ b/bsp/phytium/aarch32/Kconfig @@ -10,10 +10,10 @@ config BSP_DIR option env="BSP_ROOT" default "../." -config STANDALONE_DIR +config SDK_DIR string - option env="STANDALONE_DIR" - default ".././libraries/standalone" + option env="SDK_DIR" + default ".././libraries/phytium_standalone_sdk" config PKGS_DIR string @@ -27,6 +27,7 @@ source "$BSP_DIR/libraries/drivers/Kconfig" config PHYTIUM_ARCH_AARCH32 bool select ARCH_ARM_CORTEX_A + select RT_USING_CACHE select RT_USING_COMPONENTS_INIT select RT_USING_USER_MAIN select RT_USING_GIC_V3 @@ -45,8 +46,11 @@ menu "Standalone Setting" default y help Use the Aarch64 to Aarch32 mode function - - source "$STANDALONE_DIR/board/Kconfig" - source "$STANDALONE_DIR/drivers/Kconfig" - source "$STANDALONE_DIR/common/Kconfig" + + source "$SDK_DIR/soc/soc.kconfig" + source "$BSP_DIR/board/board.kconfig" + source "$SDK_DIR/common/common.kconfig" endmenu + + + diff --git a/bsp/phytium/aarch32/README.md b/bsp/phytium/aarch32/README.md index dcec0d0049..4f70d4aa6a 100644 --- a/bsp/phytium/aarch32/README.md +++ b/bsp/phytium/aarch32/README.md @@ -4,23 +4,17 @@ ## 1. 准备编译环境 -- 在 aarch32 目录下创建 tools 目录,后续用于存放 RT-Thread 编译工具链 - -```sh -cd ./aarch32 -mkdir tools -``` - -- 在 tools 目录下下载两个 python 脚本,get_toolchain.py 和 ci.py,下载完后给两个脚本添加执行权限 +- 创建tools目录,在 tools 目录下下载两个python 脚本,get_toolchain.py 和 ci.py,下载完后给两个脚本添加执行权限 ```shell +mkdir tools cd ./tools wget https://gitee.com/rtthread/ART-Pi-smart/raw/master/tools/get_toolchain.py wget https://gitee.com/rtthread/ART-Pi-smart/raw/master/tools/ci.py chmod +x get_toolchain.py ci.py ``` -- 然后运行 get_toolchain.py 脚本,拉取 aarch32 交叉编译链`arm-linux-musleabi_for_x86_64-pc-linux-gnu` +- 运行 get_toolchain.py 脚本,拉取 aarch32 交叉编译链`arm-linux-musleabi_for_x86_64-pc-linux-gnu` ```shell python3 ./get_toolchain.py arm @@ -40,9 +34,26 @@ source ./smart-env.sh arm ![aarch32_env](./figures/aarch32_env.png) -## 2. 如何选择芯片 +## NOTE -- 以 E2000Q RT-Smart为例,Linux 环境下,运行 make load_e2000q_rtsmart 加载默认的 rtconfig, 然后输入下列命令,进入 menuconfig 进一步配置, +以上步骤已在ubuntu20.04开发环境测试,在其他开发环境下若无法下载相关脚本,可使用以下链接手动下载 + +```shell + get_toolchain.py下载地址 + https://gitee.com/rtthread/ART-Pi-smart/blob/master/tools/get_toolchain.py + + ci.py下载地址 + https://gitee.com/rtthread/ART-Pi-smart/blob/master/tools/ci.py + + 当出现以下提示时,可采用以下链接下载 phytium_standalone_sdk_install.py + "Please refer to the ./README and manual download phytium_standalone_sdk_install.py, place in current folder" + phytium_standalone_sdk_install.py下载地址 + https://gitee.com/phytium_embedded/phytium-standalone-sdk/blob/Standalone-Sdk_RT-thread/phytium_standalone_sdk_install.py +``` + +## 2. 如何选择开发板 + +- 以 E2000Q RT-Smart为例,Linux 环境下,运行 make load_e2000q_demo_rtsmart 加载默认的 rtconfig, 然后输入下列命令,进入 menuconfig 进一步配置, ```shell scons --menuconfig @@ -54,8 +65,7 @@ source ./smart-env.sh arm Standalone Setting > Board Configuration > Chip ``` -![](./figures/chip_select.png) -![](./figures/phytium_cpu_select.png) +![](./figures/board_select.png) ## 3. 如何选择驱动 @@ -79,10 +89,10 @@ Hardware Drivers > On-chip Peripheral Drivers 开发者通过以下选项进行调试信息等级的设置 -![](./figures/select_debug_info.png) +![](./figures/debug_info.png) -## 4. 如何切换至RT-Thread Smart 工作模式 +## 5. 如何切换至RT-Thread Smart 工作模式 ```shell @@ -94,7 +104,7 @@ Hardware Drivers > On-chip Peripheral Drivers 开发者通过以上配置开启RT-Thread Smart 功能 -## 5. 编译程序 +## 6. 编译程序 ```shell scons -c @@ -109,7 +119,7 @@ rtthread_a32.elf rtthread_a32.map ``` -## 6. 启动镜像程序 +## 7. 启动镜像程序 - 可以用串口通过 XMODEM 协议将 bin/elf 文件上传到开发板,然后启动, @@ -133,7 +143,7 @@ loadx 80080000 go 80080000 ``` -## 7. 打包导出工程源代码 +## 8. 打包导出工程源代码 - 指定工程名和路径,打包RT-Thread内核和Phytium BSP代码,可以导出一个工程工程 @@ -161,7 +171,7 @@ config STANDALONE_DIR - 输入 menuconfig 和 scons 完成编译 -## 8. 将工程导入 RT-Studio +## 9. 将工程导入 RT-Studio - 在 RT-Studio 使用功能 `RT-Thread Bsp 到工作空间`,导入 5. 中导出的 BSP 工程 - 设置 BSP 工程的交叉编译链后进行后续开发 diff --git a/bsp/phytium/aarch32/SConscript b/bsp/phytium/aarch32/SConscript index 4c815c49b8..a95361af00 100644 --- a/bsp/phytium/aarch32/SConscript +++ b/bsp/phytium/aarch32/SConscript @@ -5,11 +5,11 @@ from building import * cwd = GetCurrentDir() objs = [] -list = os.listdir(cwd) +folder_list = os.listdir(cwd) -for d in list: - path = os.path.join(cwd, d) +for folder in folder_list: + path = os.path.join(cwd, folder) if os.path.isfile(os.path.join(path, 'SConscript')): - objs = objs + SConscript(os.path.join(d, 'SConscript')) + objs = objs + SConscript(os.path.join(folder, 'SConscript')) Return('objs') diff --git a/bsp/phytium/aarch32/SConstruct b/bsp/phytium/aarch32/SConstruct index f0bd948838..ef9bc22466 100644 --- a/bsp/phytium/aarch32/SConstruct +++ b/bsp/phytium/aarch32/SConstruct @@ -1,6 +1,7 @@ import os import sys import rtconfig +import subprocess IS_EXPORTED = False @@ -43,6 +44,36 @@ Export('RTT_ROOT') Export('BSP_ROOT') Export('rtconfig') +def is_phytium_sdk_installed(): + py_target_folder = os.getcwd() + "/../libraries/phytium_standalone_sdk" + return os.path.exists(py_target_folder) + +def install_phytium_sdk(): + if is_phytium_sdk_installed(): + return 0 + print("Checking for the presence of phytium_standalone_sdk_install.py script...") + sconstruct_dir = os.getcwd() + install_script_path = os.path.join(sconstruct_dir, "phytium_standalone_sdk_install.py") + + try: + subprocess.call(["wget", "https://gitee.com/phytium_embedded/phytium-standalone-sdk/raw/Standalone-Sdk_RT-thread/phytium_standalone_sdk_install.py"]) + except: + print("Please refer to the ./README and manual download phytium_standalone_sdk_install.py, place in current folder") + if os.path.exists(install_script_path): + try: + subprocess.call(["python", install_script_path]) + except: + subprocess.call(["python3", install_script_path]) + + if not is_phytium_sdk_installed(): + print("Error: phytium_standalone_sdk install failed") + exit(0) + else: + print("Error: phytium_standalone_sdk_install.py is not exists, exit compilation") + exit(0) + +install_phytium_sdk() + # prepare building environment objs = PrepareBuilding(env, RTT_ROOT, has_libcpu = False) @@ -53,7 +84,6 @@ if not IS_EXPORTED: # if project is not exported, libraries and board need to ma # include board objs.extend(SConscript(os.path.join(BSP_ROOT + '/board', 'SConscript'))) - if GetDepend('RT_USING_SMART'): # use smart link.lds env['LINKFLAGS'] = env['LINKFLAGS'].replace('link.lds', 'link_smart.lds') diff --git a/bsp/phytium/aarch32/applications/main.c b/bsp/phytium/aarch32/applications/main.c index 5abc3130b0..5cafc5b172 100644 --- a/bsp/phytium/aarch32/applications/main.c +++ b/bsp/phytium/aarch32/applications/main.c @@ -16,6 +16,23 @@ #include +#define ASSERT_STATIC(expression) \ + extern int assert_static[(expression) ? 1 : -1] + +#define ASSERT_STATIC(expression) \ + extern int assert_static[(expression) ? 1 : -1] + +/* check if SMP related setting ok */ +#ifndef RT_USING_SMP + ASSERT_STATIC(RT_CPUS_NR == 1U); /* please set RT_CPUS_NR = 1 when SMP off */ +#else + #if defined(TARGET_E2000D) + ASSERT_STATIC(RT_CPUS_NR <= 2U); /* use 2 cores at most */ + #elif defined(TARGET_E2000Q) || defined(TARGET_PHYTIUMPI) + ASSERT_STATIC(RT_CPUS_NR <= 4U); /* use 4 cores at most */ + #endif +#endif + #ifdef RT_USING_SMP struct rt_thread test_core[RT_CPUS_NR]; diff --git a/bsp/phytium/aarch32/applications/mnt.c b/bsp/phytium/aarch32/applications/mnt.c index adff1480ff..e052a3e812 100644 --- a/bsp/phytium/aarch32/applications/mnt.c +++ b/bsp/phytium/aarch32/applications/mnt.c @@ -18,31 +18,8 @@ #include #include -#define DBG_TAG "app.filesystem" -#define DBG_LVL DBG_INFO - -#ifdef BSP_USING_SDCARD_FATFS -#define SD_DEIVCE_NAME "sd" -static int filesystem_mount(void) +static int ram_disk_mount(const char *mount_point) { - while (rt_device_find(SD_DEIVCE_NAME) == RT_NULL) - { - rt_thread_mdelay(1); - } - - if (dfs_mount(SD_DEIVCE_NAME, "/", "elm", 0, 0) == 0) - { - LOG_I("file system initialization done!\n"); - } - else - { - LOG_E("[sd] File System on SD initialization failed!"); - LOG_E("[sd] Please format SD Card as FAT32!!!..."); - return -1; - } - - mkdir("/ram", 0x777); - #ifdef RT_USING_DFS_RAMFS extern struct dfs_ramfs *dfs_ramfs_create(rt_uint8_t *pool, rt_size_t size); @@ -51,38 +28,113 @@ static int filesystem_mount(void) pool = rt_malloc(size); if (pool == RT_NULL) + { LOG_E("Malloc fail!"); + } - if (dfs_mount(RT_NULL, "/ram", "ram", 0, (const void *)dfs_ramfs_create(pool, size)) == 0) + if (dfs_mount(RT_NULL, mount_point, "ram", 0, (const void *)dfs_ramfs_create(pool, size)) == 0) + { LOG_I("RAM file system initializated!"); + } else + { LOG_E("RAM file system initializate failed!"); + } #endif + return RT_EOK; } -INIT_ENV_EXPORT(filesystem_mount); + +#ifdef BSP_USING_SDCARD_FATFS +extern void fsdif_change(void); +static int sd_disk_try_mount(char *device_name, char *mount_point, char *fs_type_name, int mkfs_count) +{ + struct statfs fs_stat; + int rc = 0; + + LOG_I("mount(\"%s\",\"%s\",\"%s\");", device_name, mount_point, fs_type_name); + + if (rt_device_find(device_name) == NULL) + { + LOG_I("%s not find!!!", device_name); + return -RT_EIO; + } + + mkdir(mount_point, 0); +_remount: + rc = dfs_mount(device_name, mount_point, fs_type_name, 0, 0); + if (rc == 0) + { + LOG_I("mounted %s on %s", device_name, mount_point); + if (dfs_statfs(mount_point, &fs_stat) >= 0) + { + LOG_I("%s size:%d, total: %d, free: %d", mount_point, + fs_stat.f_bsize, fs_stat.f_blocks, fs_stat.f_bfree); + } + } + else + { + if (mkfs_count > 0) + { + /* LOG_I("[%s]try mkfs -t %s %s ", mkfs_count, fs_type_name, device_name); + dfs_mkfs(fs_type_name, device_name); */ + mkfs_count--; + LOG_E("%s is not in %s, please format first !!!", device_name, fs_type_name); + goto _remount; + } + + LOG_I("mount failed :%d ", rc); + return -RT_EIO; + } + + return RT_EOK; +} + +static void sd_filesytem_task_entry(void *parameter) +{ + int result; + LOG_D("sdio host change: %d", change); + mmcsd_wait_cd_changed(0); /* clear */ + fsdif_change(); /* send cd change to host */ + + /* block until plug/unplug event happens */ + result = mmcsd_wait_cd_changed(RT_WAITING_FOREVER); + if (result == MMCSD_HOST_PLUGED) + { + rt_kprintf("mmcsd change pluged \n"); + /* mount sdcard partition as / */ + if (RT_EOK == sd_disk_try_mount(BSP_USING_SDCARD_PARTITION, "/", "elm", 0)) + { + ram_disk_mount("/ram"); /* mount ramdisk if configured */ + } + } +} + +int filesystem_mount(void) +{ + rt_thread_t tid; + tid = rt_thread_create("sd_filesytem", sd_filesytem_task_entry, + RT_NULL, + 4096, + RT_THREAD_PRIORITY_MAX - 2, 20); + if (tid != RT_NULL) + { + rt_thread_startup(tid); + } + else + { + LOG_E("create sd mount task error!"); + } + + return RT_EOK; +} +INIT_APP_EXPORT(filesystem_mount); #else static int filesystem_mount(void) { -#ifdef RT_USING_DFS_RAMFS - extern struct dfs_ramfs *dfs_ramfs_create(rt_uint8_t *pool, rt_size_t size); - - rt_uint8_t *pool = RT_NULL; - rt_size_t size = 8 * 1024 * 1024; - - pool = rt_malloc(size); - if (pool == RT_NULL) - LOG_E("Malloc fail!"); - - if (dfs_mount(RT_NULL, "/", "ram", 0, (const void *)dfs_ramfs_create(pool, size)) == 0) - LOG_I("RAM file system initializated!"); - else - LOG_E("RAM file system initializate failed!"); -#endif - - return RT_EOK; + return ram_disk_mount("/"); /* mount ramdisk as / */ } -INIT_ENV_EXPORT(filesystem_mount); +INIT_APP_EXPORT(filesystem_mount); #endif // #ifdef BSP_USING_SDCARD_FATFS #endif // #if defined(RT_USING_DFS) \ No newline at end of file diff --git a/bsp/phytium/aarch32/configs/e2000d_rtsmart b/bsp/phytium/aarch32/configs/e2000d_demo_rtsmart similarity index 91% rename from bsp/phytium/aarch32/configs/e2000d_rtsmart rename to bsp/phytium/aarch32/configs/e2000d_demo_rtsmart index 9fb864a5b6..72a31f3985 100644 --- a/bsp/phytium/aarch32/configs/e2000d_rtsmart +++ b/bsp/phytium/aarch32/configs/e2000d_demo_rtsmart @@ -72,23 +72,15 @@ CONFIG_RT_USING_SLAB_AS_HEAP=y # CONFIG_RT_USING_MEMTRACE is not set CONFIG_RT_USING_HEAP_ISR=y CONFIG_RT_USING_HEAP=y - -# -# Kernel Device Object -# CONFIG_RT_USING_DEVICE=y # CONFIG_RT_USING_DEVICE_OPS is not set -# CONFIG_RT_USING_DM is not set # CONFIG_RT_USING_INTERRUPT_INFO is not set CONFIG_RT_USING_CONSOLE=y CONFIG_RT_CONSOLEBUF_SIZE=256 CONFIG_RT_CONSOLE_DEVICE_NAME="uart1" -CONFIG_RT_VER_NUM=0x50001 +CONFIG_RT_VER_NUM=0x50100 # CONFIG_RT_USING_STDC_ATOMIC is not set - -# -# RT-Thread Architecture -# +CONFIG_RT_BACKTRACE_LEVEL_MAX_NR=32 CONFIG_RT_USING_CACHE=y CONFIG_RT_USING_HW_ATOMIC=y # CONFIG_ARCH_ARM_BOOTWITH_FLUSH_CACHE is not set @@ -129,6 +121,7 @@ CONFIG_FINSH_USING_DESCRIPTION=y # CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set # CONFIG_FINSH_USING_AUTH is not set CONFIG_FINSH_ARG_MAX=10 +CONFIG_FINSH_USING_OPTION_COMPLETION=y # # DFS: device virtual file system @@ -174,6 +167,7 @@ CONFIG_RT_USING_DFS_MQUEUE=y # CONFIG_RT_USING_DFS_NFS is not set # CONFIG_RT_USING_FAL is not set CONFIG_RT_USING_LWP=y +# CONFIG_LWP_DEBUG is not set CONFIG_RT_LWP_MAX_NR=30 CONFIG_LWP_TASK_STACK_SIZE=16384 CONFIG_RT_CH_MSG_MAX_NR=1024 @@ -186,6 +180,7 @@ CONFIG_RT_LWP_SHM_MAX_NR=64 # # Device Drivers # +# CONFIG_RT_USING_DM is not set CONFIG_RT_USING_DEVICE_IPC=y CONFIG_RT_UNAMED_PIPE_NUMBER=64 CONFIG_RT_USING_SYSTEM_WORKQUEUE=y @@ -213,17 +208,10 @@ CONFIG_RT_USING_RANDOM=y # CONFIG_RT_USING_MTD_NOR is not set # CONFIG_RT_USING_MTD_NAND is not set # CONFIG_RT_USING_PM is not set -# CONFIG_RT_USING_FDT is not set CONFIG_RT_USING_RTC=y # CONFIG_RT_USING_ALARM is not set # CONFIG_RT_USING_SOFT_RTC is not set -CONFIG_RT_USING_SDIO=y -CONFIG_RT_SDIO_STACK_SIZE=4096 -CONFIG_RT_SDIO_THREAD_PRIORITY=15 -CONFIG_RT_MMCSD_STACK_SIZE=4096 -CONFIG_RT_MMCSD_THREAD_PREORITY=22 -CONFIG_RT_MMCSD_MAX_PARTITION=16 -# CONFIG_RT_SDIO_DEBUG is not set +# CONFIG_RT_USING_SDIO is not set # CONFIG_RT_USING_SPI is not set # CONFIG_RT_USING_WDT is not set # CONFIG_RT_USING_AUDIO is not set @@ -236,6 +224,7 @@ CONFIG_RT_MMCSD_MAX_PARTITION=16 CONFIG_RT_USING_DEV_BUS=y # CONFIG_RT_USING_WIFI is not set # CONFIG_RT_USING_VIRTIO is not set +CONFIG_RT_USING_KTIME=y # # Using USB @@ -247,7 +236,19 @@ CONFIG_RT_USING_DEV_BUS=y # # C/C++ and POSIX layer # -CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8 + +# +# ISO-ANSI C layer +# + +# +# Timezone and Daylight Saving Time +# +# CONFIG_RT_LIBC_USING_FULL_TZ_DST is not set +CONFIG_RT_LIBC_USING_LIGHT_TZ_DST=y +CONFIG_RT_LIBC_TZ_DEFAULT_HOUR=8 +CONFIG_RT_LIBC_TZ_DEFAULT_MIN=0 +CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 # # POSIX (Portable Operating System Interface) layer @@ -257,6 +258,10 @@ CONFIG_RT_USING_POSIX_DEVIO=y CONFIG_RT_USING_POSIX_STDIO=y CONFIG_RT_USING_POSIX_POLL=y CONFIG_RT_USING_POSIX_SELECT=y +# CONFIG_RT_USING_POSIX_EVENTFD is not set +# CONFIG_RT_USING_POSIX_EPOLL is not set +# CONFIG_RT_USING_POSIX_SIGNALFD is not set +# CONFIG_RT_USING_POSIX_TIMERFD is not set # CONFIG_RT_USING_POSIX_SOCKET is not set CONFIG_RT_USING_POSIX_TERMIOS=y CONFIG_RT_USING_POSIX_AIO=y @@ -380,7 +385,11 @@ CONFIG_RT_USING_ADT_HASHMAP=y CONFIG_RT_USING_ADT_REF=y # CONFIG_RT_USING_RT_LINK is not set # CONFIG_RT_USING_VBUS is not set -CONFIG_RT_USING_KTIME=y + +# +# Memory management +# +# CONFIG_RT_USING_MEMBLOCK is not set # # RT-Thread Utestcases @@ -405,7 +414,6 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_KAWAII_MQTT is not set # CONFIG_PKG_USING_BC28_MQTT is not set # CONFIG_PKG_USING_WEBTERMINAL is not set -# CONFIG_PKG_USING_LIBMODBUS is not set # CONFIG_PKG_USING_FREEMODBUS is not set # CONFIG_PKG_USING_NANOPB is not set @@ -423,6 +431,11 @@ CONFIG_RT_USING_KTIME=y # # CONFIG_PKG_USING_WLAN_WICED is not set # CONFIG_PKG_USING_RW007 is not set + +# +# CYW43012 WiFi +# +# CONFIG_PKG_USING_WLAN_CYW43012 is not set # CONFIG_PKG_USING_COAP is not set # CONFIG_PKG_USING_NOPOLL is not set # CONFIG_PKG_USING_NETUTILS is not set @@ -465,6 +478,7 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_NMEALIB is not set # CONFIG_PKG_USING_PDULIB is not set # CONFIG_PKG_USING_BTSTACK is not set +# CONFIG_PKG_USING_BT_CYW43012 is not set # CONFIG_PKG_USING_LORAWAN_ED_STACK is not set # CONFIG_PKG_USING_WAYZ_IOTKIT is not set # CONFIG_PKG_USING_MAVLINK is not set @@ -484,6 +498,8 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_ZFTP is not set # CONFIG_PKG_USING_WOL is not set # CONFIG_PKG_USING_ZEPHYR_POLLING is not set +# CONFIG_PKG_USING_MATTER_ADAPTATION_LAYER is not set +# CONFIG_PKG_USING_LHC_MODBUS is not set # # security packages @@ -530,7 +546,6 @@ CONFIG_RT_USING_KTIME=y # LVGL: powerful and easy-to-use embedded GUI library # # CONFIG_PKG_USING_LVGL is not set -# CONFIG_PKG_USING_LITTLEVGL2RTT is not set # CONFIG_PKG_USING_LV_MUSIC_DEMO is not set # CONFIG_PKG_USING_GUI_GUIDER_DEMO is not set @@ -606,6 +621,7 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_HASH_MATCH is not set # CONFIG_PKG_USING_ARMV7M_DWT_TOOL is not set # CONFIG_PKG_USING_VOFA_PLUS is not set +# CONFIG_PKG_USING_ZDEBUG is not set # # system packages @@ -642,6 +658,8 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_UC_COMMON is not set # CONFIG_PKG_USING_UC_MODBUS is not set # CONFIG_PKG_USING_FREERTOS_WRAPPER is not set +# CONFIG_PKG_USING_LITEOS_SDK is not set +# CONFIG_PKG_USING_TZ_DATABASE is not set # CONFIG_PKG_USING_CAIRO is not set # CONFIG_PKG_USING_PIXMAN is not set # CONFIG_PKG_USING_PARTITION is not set @@ -665,6 +683,7 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_QBOOT is not set # CONFIG_PKG_USING_PPOOL is not set # CONFIG_PKG_USING_OPENAMP is not set +# CONFIG_PKG_USING_RPMSG_LITE is not set # CONFIG_PKG_USING_LPM is not set # CONFIG_PKG_USING_TLSF is not set # CONFIG_PKG_USING_EVENT_RECORDER is not set @@ -677,6 +696,12 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_QPC is not set # CONFIG_PKG_USING_AGILE_UPGRADE is not set # CONFIG_PKG_USING_FLASH_BLOB is not set +# CONFIG_PKG_USING_MLIBC is not set +# CONFIG_PKG_USING_TASK_MSG_BUS is not set +# CONFIG_PKG_USING_SFDB is not set +# CONFIG_PKG_USING_RTP is not set +# CONFIG_PKG_USING_REB is not set +# CONFIG_PKG_USING_R_RHEALSTONE is not set # # peripheral libraries and drivers @@ -741,6 +766,7 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_BALANCE is not set # CONFIG_PKG_USING_SHT2X is not set # CONFIG_PKG_USING_SHT3X is not set +# CONFIG_PKG_USING_SHT4X is not set # CONFIG_PKG_USING_AD7746 is not set # CONFIG_PKG_USING_ADT74XX is not set # CONFIG_PKG_USING_MAX17048 is not set @@ -761,6 +787,7 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_FT5426 is not set # CONFIG_PKG_USING_FT6236 is not set # CONFIG_PKG_USING_XPT2046_TOUCH is not set +# CONFIG_PKG_USING_CST816X is not set # CONFIG_PKG_USING_REALTEK_AMEBA is not set # CONFIG_PKG_USING_STM32_SDIO is not set # CONFIG_PKG_USING_ESP_IDF is not set @@ -836,7 +863,15 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_IO_INPUT_FILTER is not set # CONFIG_PKG_USING_RASPBERRYPI_PICO_SDK is not set # CONFIG_PKG_USING_LRF_NV7LIDAR is not set +# CONFIG_PKG_USING_AIP650 is not set # CONFIG_PKG_USING_FINGERPRINT is not set +# CONFIG_PKG_USING_BT_ECB02C is not set +# CONFIG_PKG_USING_UAT is not set +# CONFIG_PKG_USING_ST7789 is not set +# CONFIG_PKG_USING_VS1003 is not set +# CONFIG_PKG_USING_X9555 is not set +# CONFIG_PKG_USING_SYSTEM_RUN_LED is not set +# CONFIG_PKG_USING_SPI_TOOLS is not set # # AI packages @@ -850,12 +885,17 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_ULAPACK is not set # CONFIG_PKG_USING_QUEST is not set # CONFIG_PKG_USING_NAXOS is not set +# CONFIG_PKG_USING_R_TINYMAIX is not set # # Signal Processing and Control Algorithm Packages # # CONFIG_PKG_USING_FIRE_PID_CURVE is not set +# CONFIG_PKG_USING_QPID is not set # CONFIG_PKG_USING_UKAL is not set +# CONFIG_PKG_USING_DIGITALCTRL is not set +# CONFIG_PKG_USING_KISSFFT is not set +# CONFIG_PKG_USING_CMSIS_DSP is not set # # miscellaneous packages @@ -893,6 +933,7 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_MINILZO is not set # CONFIG_PKG_USING_QUICKLZ is not set # CONFIG_PKG_USING_LZMA is not set +# CONFIG_PKG_USING_RALARAM is not set # CONFIG_PKG_USING_MULTIBUTTON is not set # CONFIG_PKG_USING_FLEXIBLE_BUTTON is not set # CONFIG_PKG_USING_CANFESTIVAL is not set @@ -902,7 +943,6 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_DSTR is not set # CONFIG_PKG_USING_TINYFRAME is not set # CONFIG_PKG_USING_KENDRYTE_DEMO is not set -# CONFIG_PKG_USING_DIGITALCTRL is not set # CONFIG_PKG_USING_UPACKER is not set # CONFIG_PKG_USING_UPARAM is not set # CONFIG_PKG_USING_HELLO is not set @@ -927,8 +967,9 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_RTDUINO is not set # -# Projects +# Projects and Demos # +# CONFIG_PKG_USING_ARDUINO_MSGQ_C_CPP_DEMO is not set # CONFIG_PKG_USING_ARDUINO_ULTRASOUND_RADAR is not set # CONFIG_PKG_USING_ARDUINO_SENSOR_KIT is not set # CONFIG_PKG_USING_ARDUINO_MATLAB_SUPPORT is not set @@ -1075,14 +1116,21 @@ CONFIG_RT_USING_KTIME=y # # Display # +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_GFX_LIBRARY is not set # CONFIG_PKG_USING_ARDUINO_U8G2 is not set -# CONFIG_PKG_USING_ARDUINO_U8GLIB_ARDUINO is not set +# CONFIG_PKG_USING_ARDUINO_TFT_ESPI is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ST7735 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SSD1306 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ILI9341 is not set # CONFIG_PKG_USING_SEEED_TM1637 is not set # # Timing # +# CONFIG_PKG_USING_ARDUINO_RTCLIB is not set # CONFIG_PKG_USING_ARDUINO_MSTIMER2 is not set +# CONFIG_PKG_USING_ARDUINO_TICKER is not set +# CONFIG_PKG_USING_ARDUINO_TASKSCHEDULER is not set # # Data Processing @@ -1116,7 +1164,6 @@ CONFIG_RT_USING_KTIME=y # # CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MFRC630 is not set # CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI5351 is not set -# CONFIG_PKG_USING_ARDUINO_RTCLIB is not set # # Signal IO @@ -1137,10 +1184,12 @@ CONFIG_RT_USING_KTIME=y # # Hardware Drivers # +# CONFIG_DRV_DEBUG is not set # # On-chip Peripheral Drivers # +CONFIG_BSP_USING_IOPAD=y CONFIG_BSP_USING_UART=y CONFIG_RT_USING_UART1=y # CONFIG_RT_USING_UART0 is not set @@ -1148,13 +1197,10 @@ CONFIG_RT_USING_UART1=y # CONFIG_BSP_USING_CAN is not set # CONFIG_BSP_USING_GPIO is not set # CONFIG_BSP_USING_QSPI is not set -CONFIG_BSP_USING_ETH=y -CONFIG_RT_LWIP_PBUF_POOL_BUFSIZE=1700 -CONFIG_BSP_USING_SDIO=y -CONFIG_BSP_USING_SDCARD_FATFS=y -# CONFIG_USING_SDIO0 is not set -CONFIG_USING_SDIO1=y -# CONFIG_USING_EMMC is not set +# CONFIG_BSP_USING_ETH is not set +# CONFIG_BSP_USING_PWM is not set +# CONFIG_BSP_USING_I2C is not set +# CONFIG_BSP_USING_SDIF is not set # # Board extended module Drivers @@ -1168,60 +1214,47 @@ CONFIG_TARGET_ARMV8_AARCH32=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # -# Board Configuration +# Soc configuration # -# CONFIG_TARGET_F2000_4 is not set -# CONFIG_TARGET_D2000 is not set +# CONFIG_TARGET_PHYTIUMPI is not set # CONFIG_TARGET_E2000Q is not set CONFIG_TARGET_E2000D=y # CONFIG_TARGET_E2000S is not set +# CONFIG_TARGET_FT2004 is not set +# CONFIG_TARGET_D2000 is not set +CONFIG_SOC_NAME="e2000" +CONFIG_TARGET_TYPE_NAME="d" +CONFIG_SOC_CORE_NUM=2 +CONFIG_F32BIT_MEMORY_ADDRESS=0x80000000 +CONFIG_F32BIT_MEMORY_LENGTH=0x80000000 +CONFIG_F64BIT_MEMORY_ADDRESS=0x2000000000 +CONFIG_F64BIT_MEMORY_LENGTH=0x800000000 CONFIG_TARGET_E2000=y +# CONFIG_USE_SPINLOCK is not set CONFIG_DEFAULT_DEBUG_PRINT_UART1=y # CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set # CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set # -# Components Configuration +# Board Configuration # -# CONFIG_USE_SPI is not set -# CONFIG_USE_QSPI is not set -CONFIG_USE_GIC=y -CONFIG_ENABLE_GICV3=y -CONFIG_USE_IOPAD=y -CONFIG_ENABLE_IOPAD=y -CONFIG_USE_SERIAL=y +CONFIG_E2000D_DEMO_BOARD=y +CONFIG_BOARD_NAME="demo" # -# Usart Configuration +# IO mux configuration when board start up # -CONFIG_ENABLE_Pl011_UART=y -# CONFIG_USE_GPIO is not set -CONFIG_USE_ETH=y - -# -# Eth Configuration -# -CONFIG_ENABLE_FXMAC=y -# CONFIG_ENABLE_FGMAC is not set -CONFIG_FXMAC_PHY_COMMON=y -# CONFIG_FXMAC_PHY_YT is not set -# CONFIG_USE_CAN is not set -# CONFIG_USE_I2C is not set -# CONFIG_USE_TIMER is not set -# CONFIG_USE_MIO is not set -# CONFIG_USE_SDMMC is not set -# CONFIG_USE_PCIE is not set -# CONFIG_USE_WDT is not set -# CONFIG_USE_DMA is not set -# CONFIG_USE_NAND is not set -# CONFIG_USE_RTC is not set -# CONFIG_USE_SATA is not set -# CONFIG_USE_USB is not set -# CONFIG_USE_ADC is not set -# CONFIG_USE_PWM is not set -# CONFIG_USE_IPC is not set -# CONFIG_USE_MEDIA is not set -# CONFIG_USE_SCMI_MHU is not set +# CONFIG_USE_SPI_IOPAD is not set +# CONFIG_USE_GPIO_IOPAD is not set +# CONFIG_USE_CAN_IOPAD is not set +# CONFIG_USE_QSPI_IOPAD is not set +# CONFIG_USE_PWM_IOPAD is not set +# CONFIG_USE_ADC_IOPAD is not set +# CONFIG_USE_MIO_IOPAD is not set +# CONFIG_USE_TACHO_IOPAD is not set +# CONFIG_USE_UART_IOPAD is not set +# CONFIG_USE_THIRD_PARTY_IOPAD is not set +# CONFIG_CUS_DEMO_BOARD is not set # # Sdk common configuration @@ -1238,3 +1271,8 @@ CONFIG_LOG_ERROR=y CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y CONFIG_INTERRUPT_ROLE_MASTER=y # CONFIG_INTERRUPT_ROLE_SLAVE is not set + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set diff --git a/bsp/phytium/aarch32/configs/e2000d_rtsmart.h b/bsp/phytium/aarch32/configs/e2000d_demo_rtsmart.h similarity index 90% rename from bsp/phytium/aarch32/configs/e2000d_rtsmart.h rename to bsp/phytium/aarch32/configs/e2000d_demo_rtsmart.h index 997fc8457b..0b4fb3adaf 100644 --- a/bsp/phytium/aarch32/configs/e2000d_rtsmart.h +++ b/bsp/phytium/aarch32/configs/e2000d_demo_rtsmart.h @@ -52,17 +52,12 @@ #define RT_USING_SLAB_AS_HEAP #define RT_USING_HEAP_ISR #define RT_USING_HEAP - -/* Kernel Device Object */ - #define RT_USING_DEVICE #define RT_USING_CONSOLE #define RT_CONSOLEBUF_SIZE 256 #define RT_CONSOLE_DEVICE_NAME "uart1" -#define RT_VER_NUM 0x50001 - -/* RT-Thread Architecture */ - +#define RT_VER_NUM 0x50100 +#define RT_BACKTRACE_LEVEL_MAX_NR 32 #define RT_USING_CACHE #define RT_USING_HW_ATOMIC #define RT_USING_CPU_FFS @@ -92,6 +87,7 @@ #define MSH_USING_BUILT_IN_COMMANDS #define FINSH_USING_DESCRIPTION #define FINSH_ARG_MAX 10 +#define FINSH_USING_OPTION_COMPLETION /* DFS: device virtual file system */ @@ -145,20 +141,22 @@ #define RT_USING_ZERO #define RT_USING_RANDOM #define RT_USING_RTC -#define RT_USING_SDIO -#define RT_SDIO_STACK_SIZE 4096 -#define RT_SDIO_THREAD_PRIORITY 15 -#define RT_MMCSD_STACK_SIZE 4096 -#define RT_MMCSD_THREAD_PREORITY 22 -#define RT_MMCSD_MAX_PARTITION 16 #define RT_USING_DEV_BUS +#define RT_USING_KTIME /* Using USB */ /* C/C++ and POSIX layer */ -#define RT_LIBC_DEFAULT_TIMEZONE 8 +/* ISO-ANSI C layer */ + +/* Timezone and Daylight Saving Time */ + +#define RT_LIBC_USING_LIGHT_TZ_DST +#define RT_LIBC_TZ_DEFAULT_HOUR 8 +#define RT_LIBC_TZ_DEFAULT_MIN 0 +#define RT_LIBC_TZ_DEFAULT_SEC 0 /* POSIX (Portable Operating System Interface) layer */ @@ -252,7 +250,9 @@ #define RT_USING_ADT_BITMAP #define RT_USING_ADT_HASHMAP #define RT_USING_ADT_REF -#define RT_USING_KTIME + +/* Memory management */ + /* RT-Thread Utestcases */ @@ -270,6 +270,9 @@ /* Wiced WiFi */ +/* CYW43012 WiFi */ + + /* IoT Cloud */ @@ -339,7 +342,7 @@ /* Arduino libraries */ -/* Projects */ +/* Projects and Demos */ /* Sensors */ @@ -372,15 +375,12 @@ /* Hardware Drivers */ + /* On-chip Peripheral Drivers */ +#define BSP_USING_IOPAD #define BSP_USING_UART #define RT_USING_UART1 -#define BSP_USING_ETH -#define RT_LWIP_PBUF_POOL_BUFSIZE 1700 -#define BSP_USING_SDIO -#define BSP_USING_SDCARD_FATFS -#define USING_SDIO1 /* Board extended module Drivers */ @@ -391,29 +391,26 @@ #define TARGET_ARMV8_AARCH32 #define USE_AARCH64_L1_TO_AARCH32 -/* Board Configuration */ +/* Soc configuration */ #define TARGET_E2000D +#define SOC_NAME "e2000" +#define TARGET_TYPE_NAME "d" +#define SOC_CORE_NUM 2 +#define F32BIT_MEMORY_ADDRESS 0x80000000 +#define F32BIT_MEMORY_LENGTH 0x80000000 +#define F64BIT_MEMORY_ADDRESS 0x2000000000 +#define F64BIT_MEMORY_LENGTH 0x800000000 #define TARGET_E2000 #define DEFAULT_DEBUG_PRINT_UART1 -/* Components Configuration */ +/* Board Configuration */ -#define USE_GIC -#define ENABLE_GICV3 -#define USE_IOPAD -#define ENABLE_IOPAD -#define USE_SERIAL +#define E2000D_DEMO_BOARD +#define BOARD_NAME "demo" -/* Usart Configuration */ +/* IO mux configuration when board start up */ -#define ENABLE_Pl011_UART -#define USE_ETH - -/* Eth Configuration */ - -#define ENABLE_FXMAC -#define FXMAC_PHY_COMMON /* Sdk common configuration */ @@ -421,4 +418,7 @@ #define USE_DEFAULT_INTERRUPT_CONFIG #define INTERRUPT_ROLE_MASTER +/* Image information configuration */ + + #endif diff --git a/bsp/phytium/aarch32/configs/e2000q_rtthread b/bsp/phytium/aarch32/configs/e2000d_demo_rtthread similarity index 90% rename from bsp/phytium/aarch32/configs/e2000q_rtthread rename to bsp/phytium/aarch32/configs/e2000d_demo_rtthread index 138851310d..5660ee73eb 100644 --- a/bsp/phytium/aarch32/configs/e2000q_rtthread +++ b/bsp/phytium/aarch32/configs/e2000d_demo_rtthread @@ -9,8 +9,9 @@ CONFIG_RT_NAME_MAX=16 # CONFIG_RT_USING_ARCH_DATA_TYPE is not set # CONFIG_RT_USING_SMART is not set +# CONFIG_RT_USING_AMP is not set CONFIG_RT_USING_SMP=y -CONFIG_RT_CPUS_NR=4 +CONFIG_RT_CPUS_NR=2 CONFIG_RT_ALIGN_SIZE=4 # CONFIG_RT_THREAD_PRIORITY_8 is not set CONFIG_RT_THREAD_PRIORITY_32=y @@ -36,19 +37,11 @@ CONFIG_RT_KSERVICE_USING_STDLIB=y # CONFIG_RT_KSERVICE_USING_TINY_SIZE is not set # CONFIG_RT_USING_TINY_FFS is not set CONFIG_RT_KPRINTF_USING_LONGLONG=y -CONFIG_RT_DEBUG=y -# CONFIG_RT_DEBUG_COLOR is not set -# CONFIG_RT_DEBUG_INIT_CONFIG is not set -# CONFIG_RT_DEBUG_THREAD_CONFIG is not set -# CONFIG_RT_DEBUG_SCHEDULER_CONFIG is not set -# CONFIG_RT_DEBUG_IPC_CONFIG is not set -# CONFIG_RT_DEBUG_TIMER_CONFIG is not set -# CONFIG_RT_DEBUG_IRQ_CONFIG is not set -# CONFIG_RT_DEBUG_MEM_CONFIG is not set -# CONFIG_RT_DEBUG_SLAB_CONFIG is not set -# CONFIG_RT_DEBUG_MEMHEAP_CONFIG is not set -# CONFIG_RT_DEBUG_PAGE_LEAK is not set -# CONFIG_RT_DEBUG_MODULE_CONFIG is not set +CONFIG_RT_USING_DEBUG=y +CONFIG_RT_DEBUGING_COLOR=y +CONFIG_RT_DEBUGING_CONTEXT=y +CONFIG_RT_DEBUGING_INIT=y +# CONFIG_RT_DEBUGING_PAGE_LEAK is not set # # Inter-Thread communication @@ -58,6 +51,7 @@ CONFIG_RT_USING_MUTEX=y CONFIG_RT_USING_EVENT=y CONFIG_RT_USING_MAILBOX=y CONFIG_RT_USING_MESSAGEQUEUE=y +CONFIG_RT_USING_MESSAGEQUEUE_PRIORITY=y # CONFIG_RT_USING_SIGNALS is not set # @@ -78,19 +72,15 @@ CONFIG_RT_USING_SLAB_AS_HEAP=y # CONFIG_RT_USING_MEMTRACE is not set CONFIG_RT_USING_HEAP_ISR=y CONFIG_RT_USING_HEAP=y - -# -# Kernel Device Object -# CONFIG_RT_USING_DEVICE=y # CONFIG_RT_USING_DEVICE_OPS is not set -# CONFIG_RT_USING_DM is not set # CONFIG_RT_USING_INTERRUPT_INFO is not set CONFIG_RT_USING_CONSOLE=y CONFIG_RT_CONSOLEBUF_SIZE=256 CONFIG_RT_CONSOLE_DEVICE_NAME="uart1" -CONFIG_RT_VER_NUM=0x50001 +CONFIG_RT_VER_NUM=0x50100 # CONFIG_RT_USING_STDC_ATOMIC is not set +CONFIG_RT_BACKTRACE_LEVEL_MAX_NR=32 CONFIG_RT_USING_CACHE=y CONFIG_RT_USING_HW_ATOMIC=y # CONFIG_ARCH_ARM_BOOTWITH_FLUSH_CACHE is not set @@ -129,6 +119,7 @@ CONFIG_FINSH_USING_DESCRIPTION=y # CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set # CONFIG_FINSH_USING_AUTH is not set CONFIG_FINSH_ARG_MAX=10 +CONFIG_FINSH_USING_OPTION_COMPLETION=y # # DFS: device virtual file system @@ -142,18 +133,42 @@ CONFIG_RT_USING_DFS_V1=y # CONFIG_RT_USING_DFS_V2 is not set CONFIG_DFS_FILESYSTEMS_MAX=4 CONFIG_DFS_FILESYSTEM_TYPES_MAX=4 -# CONFIG_RT_USING_DFS_ELMFAT is not set +CONFIG_RT_USING_DFS_ELMFAT=y + +# +# elm-chan's FatFs, Generic FAT Filesystem Module +# +CONFIG_RT_DFS_ELM_CODE_PAGE=437 +CONFIG_RT_DFS_ELM_WORD_ACCESS=y +# CONFIG_RT_DFS_ELM_USE_LFN_0 is not set +# CONFIG_RT_DFS_ELM_USE_LFN_1 is not set +# CONFIG_RT_DFS_ELM_USE_LFN_2 is not set +CONFIG_RT_DFS_ELM_USE_LFN_3=y +CONFIG_RT_DFS_ELM_USE_LFN=3 +CONFIG_RT_DFS_ELM_LFN_UNICODE_0=y +# CONFIG_RT_DFS_ELM_LFN_UNICODE_1 is not set +# CONFIG_RT_DFS_ELM_LFN_UNICODE_2 is not set +# CONFIG_RT_DFS_ELM_LFN_UNICODE_3 is not set +CONFIG_RT_DFS_ELM_LFN_UNICODE=0 +CONFIG_RT_DFS_ELM_MAX_LFN=255 +CONFIG_RT_DFS_ELM_DRIVES=2 +CONFIG_RT_DFS_ELM_MAX_SECTOR_SIZE=512 +# CONFIG_RT_DFS_ELM_USE_ERASE is not set +CONFIG_RT_DFS_ELM_REENTRANT=y +CONFIG_RT_DFS_ELM_MUTEX_TIMEOUT=3000 CONFIG_RT_USING_DFS_DEVFS=y # CONFIG_RT_USING_DFS_ROMFS is not set # CONFIG_RT_USING_DFS_CROMFS is not set CONFIG_RT_USING_DFS_RAMFS=y # CONFIG_RT_USING_DFS_TMPFS is not set +CONFIG_RT_USING_DFS_MQUEUE=y # CONFIG_RT_USING_DFS_NFS is not set # CONFIG_RT_USING_FAL is not set # # Device Drivers # +# CONFIG_RT_USING_DM is not set CONFIG_RT_USING_DEVICE_IPC=y CONFIG_RT_UNAMED_PIPE_NUMBER=64 CONFIG_RT_USING_SYSTEM_WORKQUEUE=y @@ -172,17 +187,14 @@ CONFIG_RT_SERIAL_RB_BUFSZ=1024 # CONFIG_RT_USING_PIN is not set # CONFIG_RT_USING_ADC is not set # CONFIG_RT_USING_DAC is not set -CONFIG_RT_USING_NULL=y -CONFIG_RT_USING_ZERO=y -CONFIG_RT_USING_RANDOM=y +# CONFIG_RT_USING_NULL is not set +# CONFIG_RT_USING_ZERO is not set +# CONFIG_RT_USING_RANDOM is not set # CONFIG_RT_USING_PWM is not set # CONFIG_RT_USING_MTD_NOR is not set # CONFIG_RT_USING_MTD_NAND is not set # CONFIG_RT_USING_PM is not set -# CONFIG_RT_USING_FDT is not set -CONFIG_RT_USING_RTC=y -# CONFIG_RT_USING_ALARM is not set -# CONFIG_RT_USING_SOFT_RTC is not set +# CONFIG_RT_USING_RTC is not set # CONFIG_RT_USING_SDIO is not set # CONFIG_RT_USING_SPI is not set # CONFIG_RT_USING_WDT is not set @@ -193,9 +205,10 @@ CONFIG_RT_USING_RTC=y # CONFIG_RT_USING_HWCRYPTO is not set # CONFIG_RT_USING_PULSE_ENCODER is not set # CONFIG_RT_USING_INPUT_CAPTURE is not set -# CONFIG_RT_USING_DEV_BUS is not set +CONFIG_RT_USING_DEV_BUS=y # CONFIG_RT_USING_WIFI is not set # CONFIG_RT_USING_VIRTIO is not set +CONFIG_RT_USING_KTIME=y # # Using USB @@ -207,7 +220,19 @@ CONFIG_RT_USING_RTC=y # # C/C++ and POSIX layer # -CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8 + +# +# ISO-ANSI C layer +# + +# +# Timezone and Daylight Saving Time +# +# CONFIG_RT_LIBC_USING_FULL_TZ_DST is not set +CONFIG_RT_LIBC_USING_LIGHT_TZ_DST=y +CONFIG_RT_LIBC_TZ_DEFAULT_HOUR=8 +CONFIG_RT_LIBC_TZ_DEFAULT_MIN=0 +CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 # # POSIX (Portable Operating System Interface) layer @@ -217,6 +242,8 @@ CONFIG_RT_USING_POSIX_DEVIO=y CONFIG_RT_USING_POSIX_STDIO=y CONFIG_RT_USING_POSIX_POLL=y CONFIG_RT_USING_POSIX_SELECT=y +# CONFIG_RT_USING_POSIX_EVENTFD is not set +# CONFIG_RT_USING_POSIX_TIMERFD is not set # CONFIG_RT_USING_POSIX_SOCKET is not set CONFIG_RT_USING_POSIX_TERMIOS=y CONFIG_RT_USING_POSIX_AIO=y @@ -332,10 +359,20 @@ CONFIG_RT_USING_UTEST=y CONFIG_UTEST_THR_STACK_SIZE=4096 CONFIG_UTEST_THR_PRIORITY=20 # CONFIG_RT_USING_VAR_EXPORT is not set +CONFIG_RT_USING_RESOURCE_ID=y CONFIG_RT_USING_ADT=y +CONFIG_RT_USING_ADT_AVL=y +CONFIG_RT_USING_ADT_BITMAP=y +CONFIG_RT_USING_ADT_HASHMAP=y +CONFIG_RT_USING_ADT_REF=y # CONFIG_RT_USING_RT_LINK is not set # CONFIG_RT_USING_VBUS is not set +# +# Memory management +# +# CONFIG_RT_USING_MEMBLOCK is not set + # # RT-Thread Utestcases # @@ -376,6 +413,11 @@ CONFIG_RT_USING_ADT=y # # CONFIG_PKG_USING_WLAN_WICED is not set # CONFIG_PKG_USING_RW007 is not set + +# +# CYW43012 WiFi +# +# CONFIG_PKG_USING_WLAN_CYW43012 is not set # CONFIG_PKG_USING_COAP is not set # CONFIG_PKG_USING_NOPOLL is not set # CONFIG_PKG_USING_NETUTILS is not set @@ -418,6 +460,7 @@ CONFIG_RT_USING_ADT=y # CONFIG_PKG_USING_NMEALIB is not set # CONFIG_PKG_USING_PDULIB is not set # CONFIG_PKG_USING_BTSTACK is not set +# CONFIG_PKG_USING_BT_CYW43012 is not set # CONFIG_PKG_USING_LORAWAN_ED_STACK is not set # CONFIG_PKG_USING_WAYZ_IOTKIT is not set # CONFIG_PKG_USING_MAVLINK is not set @@ -437,6 +480,8 @@ CONFIG_RT_USING_ADT=y # CONFIG_PKG_USING_ZFTP is not set # CONFIG_PKG_USING_WOL is not set # CONFIG_PKG_USING_ZEPHYR_POLLING is not set +# CONFIG_PKG_USING_MATTER_ADAPTATION_LAYER is not set +# CONFIG_PKG_USING_LHC_MODBUS is not set # # security packages @@ -483,7 +528,6 @@ CONFIG_RT_USING_ADT=y # LVGL: powerful and easy-to-use embedded GUI library # # CONFIG_PKG_USING_LVGL is not set -# CONFIG_PKG_USING_LITTLEVGL2RTT is not set # CONFIG_PKG_USING_LV_MUSIC_DEMO is not set # CONFIG_PKG_USING_GUI_GUIDER_DEMO is not set @@ -559,6 +603,7 @@ CONFIG_RT_USING_ADT=y # CONFIG_PKG_USING_HASH_MATCH is not set # CONFIG_PKG_USING_ARMV7M_DWT_TOOL is not set # CONFIG_PKG_USING_VOFA_PLUS is not set +# CONFIG_PKG_USING_ZDEBUG is not set # # system packages @@ -595,6 +640,8 @@ CONFIG_RT_USING_ADT=y # CONFIG_PKG_USING_UC_COMMON is not set # CONFIG_PKG_USING_UC_MODBUS is not set # CONFIG_PKG_USING_FREERTOS_WRAPPER is not set +# CONFIG_PKG_USING_LITEOS_SDK is not set +# CONFIG_PKG_USING_TZ_DATABASE is not set # CONFIG_PKG_USING_CAIRO is not set # CONFIG_PKG_USING_PIXMAN is not set # CONFIG_PKG_USING_PARTITION is not set @@ -618,6 +665,7 @@ CONFIG_RT_USING_ADT=y # CONFIG_PKG_USING_QBOOT is not set # CONFIG_PKG_USING_PPOOL is not set # CONFIG_PKG_USING_OPENAMP is not set +# CONFIG_PKG_USING_RPMSG_LITE is not set # CONFIG_PKG_USING_LPM is not set # CONFIG_PKG_USING_TLSF is not set # CONFIG_PKG_USING_EVENT_RECORDER is not set @@ -631,6 +679,11 @@ CONFIG_RT_USING_ADT=y # CONFIG_PKG_USING_AGILE_UPGRADE is not set # CONFIG_PKG_USING_FLASH_BLOB is not set # CONFIG_PKG_USING_MLIBC is not set +# CONFIG_PKG_USING_TASK_MSG_BUS is not set +# CONFIG_PKG_USING_SFDB is not set +# CONFIG_PKG_USING_RTP is not set +# CONFIG_PKG_USING_REB is not set +# CONFIG_PKG_USING_R_RHEALSTONE is not set # # peripheral libraries and drivers @@ -695,6 +748,7 @@ CONFIG_RT_USING_ADT=y # CONFIG_PKG_USING_BALANCE is not set # CONFIG_PKG_USING_SHT2X is not set # CONFIG_PKG_USING_SHT3X is not set +# CONFIG_PKG_USING_SHT4X is not set # CONFIG_PKG_USING_AD7746 is not set # CONFIG_PKG_USING_ADT74XX is not set # CONFIG_PKG_USING_MAX17048 is not set @@ -795,6 +849,10 @@ CONFIG_RT_USING_ADT=y # CONFIG_PKG_USING_FINGERPRINT is not set # CONFIG_PKG_USING_BT_ECB02C is not set # CONFIG_PKG_USING_UAT is not set +# CONFIG_PKG_USING_ST7789 is not set +# CONFIG_PKG_USING_VS1003 is not set +# CONFIG_PKG_USING_X9555 is not set +# CONFIG_PKG_USING_SYSTEM_RUN_LED is not set # CONFIG_PKG_USING_SPI_TOOLS is not set # @@ -809,6 +867,7 @@ CONFIG_RT_USING_ADT=y # CONFIG_PKG_USING_ULAPACK is not set # CONFIG_PKG_USING_QUEST is not set # CONFIG_PKG_USING_NAXOS is not set +# CONFIG_PKG_USING_R_TINYMAIX is not set # # Signal Processing and Control Algorithm Packages @@ -818,6 +877,7 @@ CONFIG_RT_USING_ADT=y # CONFIG_PKG_USING_UKAL is not set # CONFIG_PKG_USING_DIGITALCTRL is not set # CONFIG_PKG_USING_KISSFFT is not set +# CONFIG_PKG_USING_CMSIS_DSP is not set # # miscellaneous packages @@ -855,6 +915,7 @@ CONFIG_RT_USING_ADT=y # CONFIG_PKG_USING_MINILZO is not set # CONFIG_PKG_USING_QUICKLZ is not set # CONFIG_PKG_USING_LZMA is not set +# CONFIG_PKG_USING_RALARAM is not set # CONFIG_PKG_USING_MULTIBUTTON is not set # CONFIG_PKG_USING_FLEXIBLE_BUTTON is not set # CONFIG_PKG_USING_CANFESTIVAL is not set @@ -1039,6 +1100,7 @@ CONFIG_RT_USING_ADT=y # # CONFIG_PKG_USING_ARDUINO_ADAFRUIT_GFX_LIBRARY is not set # CONFIG_PKG_USING_ARDUINO_U8G2 is not set +# CONFIG_PKG_USING_ARDUINO_TFT_ESPI is not set # CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ST7735 is not set # CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SSD1306 is not set # CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ILI9341 is not set @@ -1047,6 +1109,7 @@ CONFIG_RT_USING_ADT=y # # Timing # +# CONFIG_PKG_USING_ARDUINO_RTCLIB is not set # CONFIG_PKG_USING_ARDUINO_MSTIMER2 is not set # CONFIG_PKG_USING_ARDUINO_TICKER is not set # CONFIG_PKG_USING_ARDUINO_TASKSCHEDULER is not set @@ -1083,7 +1146,6 @@ CONFIG_RT_USING_ADT=y # # CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MFRC630 is not set # CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI5351 is not set -# CONFIG_PKG_USING_ARDUINO_RTCLIB is not set # # Signal IO @@ -1104,18 +1166,23 @@ CONFIG_RT_USING_ADT=y # # Hardware Drivers # +# CONFIG_DRV_DEBUG is not set # # On-chip Peripheral Drivers # +CONFIG_BSP_USING_IOPAD=y CONFIG_BSP_USING_UART=y CONFIG_RT_USING_UART1=y # CONFIG_RT_USING_UART0 is not set # CONFIG_BSP_USING_SPI is not set # CONFIG_BSP_USING_CAN is not set +# CONFIG_BSP_USING_GPIO is not set # CONFIG_BSP_USING_QSPI is not set -CONFIG_BSP_USING_ETH=y -CONFIG_RT_LWIP_PBUF_POOL_BUFSIZE=1700 +# CONFIG_BSP_USING_ETH is not set +# CONFIG_BSP_USING_PWM is not set +# CONFIG_BSP_USING_I2C is not set +# CONFIG_BSP_USING_SDIF is not set # # Board extended module Drivers @@ -1129,67 +1196,65 @@ CONFIG_TARGET_ARMV8_AARCH32=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # -# Board Configuration +# Soc configuration # -# CONFIG_TARGET_F2000_4 is not set -# CONFIG_TARGET_D2000 is not set -CONFIG_TARGET_E2000Q=y -# CONFIG_TARGET_E2000D is not set +# CONFIG_TARGET_PHYTIUMPI is not set +# CONFIG_TARGET_E2000Q is not set +CONFIG_TARGET_E2000D=y # CONFIG_TARGET_E2000S is not set +# CONFIG_TARGET_FT2004 is not set +# CONFIG_TARGET_D2000 is not set +CONFIG_SOC_NAME="e2000" +CONFIG_TARGET_TYPE_NAME="d" +CONFIG_SOC_CORE_NUM=2 +CONFIG_F32BIT_MEMORY_ADDRESS=0x80000000 +CONFIG_F32BIT_MEMORY_LENGTH=0x80000000 +CONFIG_F64BIT_MEMORY_ADDRESS=0x2000000000 +CONFIG_F64BIT_MEMORY_LENGTH=0x800000000 CONFIG_TARGET_E2000=y +# CONFIG_USE_SPINLOCK is not set CONFIG_DEFAULT_DEBUG_PRINT_UART1=y # CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set # CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set # -# Components Configuration +# Board Configuration # -# CONFIG_USE_SPI is not set -# CONFIG_USE_QSPI is not set -CONFIG_USE_GIC=y -CONFIG_ENABLE_GICV3=y -CONFIG_USE_SERIAL=y +CONFIG_E2000D_DEMO_BOARD=y +CONFIG_BOARD_NAME="demo" # -# Usart Configuration +# IO mux configuration when board start up # -CONFIG_ENABLE_Pl011_UART=y -# CONFIG_USE_GPIO is not set -CONFIG_USE_ETH=y +# CONFIG_USE_SPI_IOPAD is not set +# CONFIG_USE_GPIO_IOPAD is not set +# CONFIG_USE_CAN_IOPAD is not set +# CONFIG_USE_QSPI_IOPAD is not set +# CONFIG_USE_PWM_IOPAD is not set +# CONFIG_USE_ADC_IOPAD is not set +# CONFIG_USE_MIO_IOPAD is not set +# CONFIG_USE_TACHO_IOPAD is not set +# CONFIG_USE_UART_IOPAD is not set +# CONFIG_USE_THIRD_PARTY_IOPAD is not set +# CONFIG_CUS_DEMO_BOARD is not set # -# Eth Configuration +# Sdk common configuration # -CONFIG_ENABLE_FXMAC=y -# CONFIG_ENABLE_FGMAC is not set -CONFIG_FXMAC_PHY_COMMON=y -# CONFIG_FXMAC_PHY_YT is not set -# CONFIG_USE_CAN is not set -# CONFIG_USE_I2C is not set -# CONFIG_USE_TIMER is not set -# CONFIG_USE_MIO is not set -# CONFIG_USE_SDMMC is not set -# CONFIG_USE_PCIE is not set -# CONFIG_USE_WDT is not set -# CONFIG_USE_DMA is not set -# CONFIG_USE_NAND is not set -# CONFIG_USE_RTC is not set -# CONFIG_USE_SATA is not set -# CONFIG_USE_USB is not set -# CONFIG_USE_ADC is not set -# CONFIG_USE_PWM is not set -# CONFIG_USE_IPC is not set -# CONFIG_USE_MEDIA is not set -# CONFIG_USE_SCMI_MHU is not set # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set diff --git a/bsp/phytium/aarch32/configs/e2000d_rtthread.h b/bsp/phytium/aarch32/configs/e2000d_demo_rtthread.h similarity index 90% rename from bsp/phytium/aarch32/configs/e2000d_rtthread.h rename to bsp/phytium/aarch32/configs/e2000d_demo_rtthread.h index b4cc3b82dd..ebf4c745ae 100644 --- a/bsp/phytium/aarch32/configs/e2000d_rtthread.h +++ b/bsp/phytium/aarch32/configs/e2000d_demo_rtthread.h @@ -51,17 +51,12 @@ #define RT_USING_SLAB_AS_HEAP #define RT_USING_HEAP_ISR #define RT_USING_HEAP - -/* Kernel Device Object */ - #define RT_USING_DEVICE #define RT_USING_CONSOLE #define RT_CONSOLEBUF_SIZE 256 #define RT_CONSOLE_DEVICE_NAME "uart1" -#define RT_VER_NUM 0x50001 - -/* RT-Thread Architecture */ - +#define RT_VER_NUM 0x50100 +#define RT_BACKTRACE_LEVEL_MAX_NR 32 #define RT_USING_CACHE #define RT_USING_HW_ATOMIC #define RT_USING_CPU_FFS @@ -90,6 +85,7 @@ #define MSH_USING_BUILT_IN_COMMANDS #define FINSH_USING_DESCRIPTION #define FINSH_ARG_MAX 10 +#define FINSH_USING_OPTION_COMPLETION /* DFS: device virtual file system */ @@ -130,24 +126,22 @@ #define RT_USING_SERIAL_V1 #define RT_SERIAL_USING_DMA #define RT_SERIAL_RB_BUFSZ 1024 -#define RT_USING_NULL -#define RT_USING_ZERO -#define RT_USING_RANDOM -#define RT_USING_RTC -#define RT_USING_SDIO -#define RT_SDIO_STACK_SIZE 4096 -#define RT_SDIO_THREAD_PRIORITY 15 -#define RT_MMCSD_STACK_SIZE 4096 -#define RT_MMCSD_THREAD_PREORITY 22 -#define RT_MMCSD_MAX_PARTITION 16 #define RT_USING_DEV_BUS +#define RT_USING_KTIME /* Using USB */ /* C/C++ and POSIX layer */ -#define RT_LIBC_DEFAULT_TIMEZONE 8 +/* ISO-ANSI C layer */ + +/* Timezone and Daylight Saving Time */ + +#define RT_LIBC_USING_LIGHT_TZ_DST +#define RT_LIBC_TZ_DEFAULT_HOUR 8 +#define RT_LIBC_TZ_DEFAULT_MIN 0 +#define RT_LIBC_TZ_DEFAULT_SEC 0 /* POSIX (Portable Operating System Interface) layer */ @@ -241,7 +235,9 @@ #define RT_USING_ADT_BITMAP #define RT_USING_ADT_HASHMAP #define RT_USING_ADT_REF -#define RT_USING_KTIME + +/* Memory management */ + /* RT-Thread Utestcases */ @@ -259,6 +255,9 @@ /* Wiced WiFi */ +/* CYW43012 WiFi */ + + /* IoT Cloud */ @@ -328,7 +327,7 @@ /* Arduino libraries */ -/* Projects */ +/* Projects and Demos */ /* Sensors */ @@ -361,15 +360,12 @@ /* Hardware Drivers */ + /* On-chip Peripheral Drivers */ +#define BSP_USING_IOPAD #define BSP_USING_UART #define RT_USING_UART1 -#define BSP_USING_ETH -#define RT_LWIP_PBUF_POOL_BUFSIZE 1700 -#define BSP_USING_SDIO -#define BSP_USING_SDCARD_FATFS -#define USING_SDIO1 /* Board extended module Drivers */ @@ -380,29 +376,26 @@ #define TARGET_ARMV8_AARCH32 #define USE_AARCH64_L1_TO_AARCH32 -/* Board Configuration */ +/* Soc configuration */ #define TARGET_E2000D +#define SOC_NAME "e2000" +#define TARGET_TYPE_NAME "d" +#define SOC_CORE_NUM 2 +#define F32BIT_MEMORY_ADDRESS 0x80000000 +#define F32BIT_MEMORY_LENGTH 0x80000000 +#define F64BIT_MEMORY_ADDRESS 0x2000000000 +#define F64BIT_MEMORY_LENGTH 0x800000000 #define TARGET_E2000 #define DEFAULT_DEBUG_PRINT_UART1 -/* Components Configuration */ +/* Board Configuration */ -#define USE_GIC -#define ENABLE_GICV3 -#define USE_IOPAD -#define ENABLE_IOPAD -#define USE_SERIAL +#define E2000D_DEMO_BOARD +#define BOARD_NAME "demo" -/* Usart Configuration */ +/* IO mux configuration when board start up */ -#define ENABLE_Pl011_UART -#define USE_ETH - -/* Eth Configuration */ - -#define ENABLE_FXMAC -#define FXMAC_PHY_COMMON /* Sdk common configuration */ @@ -410,4 +403,7 @@ #define USE_DEFAULT_INTERRUPT_CONFIG #define INTERRUPT_ROLE_MASTER +/* Image information configuration */ + + #endif diff --git a/bsp/phytium/aarch32/configs/e2000d_rtthread_test b/bsp/phytium/aarch32/configs/e2000d_rtthread_test deleted file mode 100644 index 9dadd0b38e..0000000000 --- a/bsp/phytium/aarch32/configs/e2000d_rtthread_test +++ /dev/null @@ -1,1344 +0,0 @@ -# -# Automatically generated file; DO NOT EDIT. -# RT-Thread Project Configuration -# - -# -# RT-Thread Kernel -# -CONFIG_RT_NAME_MAX=16 -# CONFIG_RT_USING_ARCH_DATA_TYPE is not set -# CONFIG_RT_USING_SMART is not set -CONFIG_RT_USING_SMP=y -CONFIG_RT_CPUS_NR=2 -CONFIG_RT_ALIGN_SIZE=4 -# CONFIG_RT_THREAD_PRIORITY_8 is not set -CONFIG_RT_THREAD_PRIORITY_32=y -# CONFIG_RT_THREAD_PRIORITY_256 is not set -CONFIG_RT_THREAD_PRIORITY_MAX=32 -CONFIG_RT_TICK_PER_SECOND=1000 -CONFIG_RT_USING_OVERFLOW_CHECK=y -CONFIG_RT_USING_HOOK=y -CONFIG_RT_HOOK_USING_FUNC_PTR=y -CONFIG_RT_USING_IDLE_HOOK=y -CONFIG_RT_IDLE_HOOK_LIST_SIZE=4 -CONFIG_IDLE_THREAD_STACK_SIZE=4096 -CONFIG_SYSTEM_THREAD_STACK_SIZE=4096 -CONFIG_RT_USING_TIMER_SOFT=y -CONFIG_RT_TIMER_THREAD_PRIO=4 -CONFIG_RT_TIMER_THREAD_STACK_SIZE=4096 - -# -# kservice optimization -# -CONFIG_RT_KSERVICE_USING_STDLIB=y -# CONFIG_RT_KSERVICE_USING_STDLIB_MEMORY is not set -# CONFIG_RT_KSERVICE_USING_TINY_SIZE is not set -# CONFIG_RT_USING_TINY_FFS is not set -CONFIG_RT_KPRINTF_USING_LONGLONG=y -CONFIG_RT_DEBUG=y -# CONFIG_RT_DEBUG_COLOR is not set -# CONFIG_RT_DEBUG_INIT_CONFIG is not set -# CONFIG_RT_DEBUG_THREAD_CONFIG is not set -# CONFIG_RT_DEBUG_SCHEDULER_CONFIG is not set -# CONFIG_RT_DEBUG_IPC_CONFIG is not set -# CONFIG_RT_DEBUG_TIMER_CONFIG is not set -# CONFIG_RT_DEBUG_IRQ_CONFIG is not set -# CONFIG_RT_DEBUG_MEM_CONFIG is not set -# CONFIG_RT_DEBUG_SLAB_CONFIG is not set -# CONFIG_RT_DEBUG_MEMHEAP_CONFIG is not set -# CONFIG_RT_DEBUG_PAGE_LEAK is not set -# CONFIG_RT_DEBUG_MODULE_CONFIG is not set - -# -# Inter-Thread communication -# -CONFIG_RT_USING_SEMAPHORE=y -CONFIG_RT_USING_MUTEX=y -CONFIG_RT_USING_EVENT=y -CONFIG_RT_USING_MAILBOX=y -CONFIG_RT_USING_MESSAGEQUEUE=y -# CONFIG_RT_USING_SIGNALS is not set - -# -# Memory Management -# -CONFIG_RT_PAGE_MAX_ORDER=11 -# CONFIG_RT_USING_MEMPOOL is not set -# CONFIG_RT_USING_SMALL_MEM is not set -CONFIG_RT_USING_SLAB=y -CONFIG_RT_USING_MEMHEAP=y -CONFIG_RT_MEMHEAP_FAST_MODE=y -# CONFIG_RT_MEMHEAP_BEST_MODE is not set -# CONFIG_RT_USING_SMALL_MEM_AS_HEAP is not set -# CONFIG_RT_USING_MEMHEAP_AS_HEAP is not set -CONFIG_RT_USING_SLAB_AS_HEAP=y -# CONFIG_RT_USING_USERHEAP is not set -# CONFIG_RT_USING_NOHEAP is not set -# CONFIG_RT_USING_MEMTRACE is not set -CONFIG_RT_USING_HEAP_ISR=y -CONFIG_RT_USING_HEAP=y - -# -# Kernel Device Object -# -CONFIG_RT_USING_DEVICE=y -# CONFIG_RT_USING_DEVICE_OPS is not set -# CONFIG_RT_USING_DM is not set -# CONFIG_RT_USING_INTERRUPT_INFO is not set -CONFIG_RT_USING_CONSOLE=y -CONFIG_RT_CONSOLEBUF_SIZE=256 -CONFIG_RT_CONSOLE_DEVICE_NAME="uart1" -CONFIG_RT_VER_NUM=0x50001 -# CONFIG_RT_USING_STDC_ATOMIC is not set -CONFIG_RT_USING_CACHE=y -CONFIG_RT_USING_HW_ATOMIC=y -# CONFIG_ARCH_ARM_BOOTWITH_FLUSH_CACHE is not set -# CONFIG_ARCH_CPU_STACK_GROWS_UPWARD is not set -CONFIG_RT_USING_CPU_FFS=y -CONFIG_ARCH_MM_MMU=y -CONFIG_ARCH_ARM=y -CONFIG_ARCH_ARM_MMU=y -CONFIG_ARCH_ARM_CORTEX_A=y -# CONFIG_RT_SMP_AUTO_BOOT is not set -# CONFIG_RT_USING_GIC_V2 is not set -CONFIG_RT_USING_GIC_V3=y -# CONFIG_ARCH_ARM_SECURE_MODE is not set -# CONFIG_RT_BACKTRACE_FUNCTION_NAME is not set - -# -# RT-Thread Components -# -CONFIG_RT_USING_COMPONENTS_INIT=y -CONFIG_RT_USING_USER_MAIN=y -CONFIG_RT_MAIN_THREAD_STACK_SIZE=8192 -CONFIG_RT_MAIN_THREAD_PRIORITY=10 -# CONFIG_RT_USING_LEGACY is not set -CONFIG_RT_USING_MSH=y -CONFIG_RT_USING_FINSH=y -CONFIG_FINSH_USING_MSH=y -CONFIG_FINSH_THREAD_NAME="tshell" -CONFIG_FINSH_THREAD_PRIORITY=20 -CONFIG_FINSH_THREAD_STACK_SIZE=4096 -CONFIG_FINSH_USING_HISTORY=y -CONFIG_FINSH_HISTORY_LINES=5 -CONFIG_FINSH_USING_SYMTAB=y -CONFIG_FINSH_CMD_SIZE=80 -CONFIG_MSH_USING_BUILT_IN_COMMANDS=y -CONFIG_FINSH_USING_DESCRIPTION=y -# CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set -# CONFIG_FINSH_USING_AUTH is not set -CONFIG_FINSH_ARG_MAX=10 - -# -# DFS: device virtual file system -# -CONFIG_RT_USING_DFS=y -CONFIG_DFS_USING_POSIX=y -CONFIG_DFS_USING_WORKDIR=y -# CONFIG_RT_USING_DFS_MNTTABLE is not set -CONFIG_DFS_FD_MAX=16 -CONFIG_RT_USING_DFS_V1=y -# CONFIG_RT_USING_DFS_V2 is not set -CONFIG_DFS_FILESYSTEMS_MAX=4 -CONFIG_DFS_FILESYSTEM_TYPES_MAX=4 -CONFIG_RT_USING_DFS_ELMFAT=y - -# -# elm-chan's FatFs, Generic FAT Filesystem Module -# -CONFIG_RT_DFS_ELM_CODE_PAGE=437 -CONFIG_RT_DFS_ELM_WORD_ACCESS=y -# CONFIG_RT_DFS_ELM_USE_LFN_0 is not set -# CONFIG_RT_DFS_ELM_USE_LFN_1 is not set -# CONFIG_RT_DFS_ELM_USE_LFN_2 is not set -CONFIG_RT_DFS_ELM_USE_LFN_3=y -CONFIG_RT_DFS_ELM_USE_LFN=3 -CONFIG_RT_DFS_ELM_LFN_UNICODE_0=y -# CONFIG_RT_DFS_ELM_LFN_UNICODE_1 is not set -# CONFIG_RT_DFS_ELM_LFN_UNICODE_2 is not set -# CONFIG_RT_DFS_ELM_LFN_UNICODE_3 is not set -CONFIG_RT_DFS_ELM_LFN_UNICODE=0 -CONFIG_RT_DFS_ELM_MAX_LFN=255 -CONFIG_RT_DFS_ELM_DRIVES=2 -CONFIG_RT_DFS_ELM_MAX_SECTOR_SIZE=512 -# CONFIG_RT_DFS_ELM_USE_ERASE is not set -CONFIG_RT_DFS_ELM_REENTRANT=y -CONFIG_RT_DFS_ELM_MUTEX_TIMEOUT=3000 -CONFIG_RT_USING_DFS_DEVFS=y -# CONFIG_RT_USING_DFS_ROMFS is not set -# CONFIG_RT_USING_DFS_CROMFS is not set -CONFIG_RT_USING_DFS_RAMFS=y -# CONFIG_RT_USING_DFS_TMPFS is not set -# CONFIG_RT_USING_DFS_NFS is not set -# CONFIG_RT_USING_FAL is not set - -# -# Device Drivers -# -CONFIG_RT_USING_DEVICE_IPC=y -CONFIG_RT_UNAMED_PIPE_NUMBER=64 -CONFIG_RT_USING_SYSTEM_WORKQUEUE=y -CONFIG_RT_SYSTEM_WORKQUEUE_STACKSIZE=4096 -CONFIG_RT_SYSTEM_WORKQUEUE_PRIORITY=23 -CONFIG_RT_USING_SERIAL=y -CONFIG_RT_USING_SERIAL_V1=y -# CONFIG_RT_USING_SERIAL_V2 is not set -CONFIG_RT_SERIAL_USING_DMA=y -CONFIG_RT_SERIAL_RB_BUFSZ=1024 -# CONFIG_RT_USING_CAN is not set -# CONFIG_RT_USING_HWTIMER is not set -# CONFIG_RT_USING_CPUTIME is not set -# CONFIG_RT_USING_I2C is not set -# CONFIG_RT_USING_PHY is not set -# CONFIG_RT_USING_PIN is not set -# CONFIG_RT_USING_ADC is not set -# CONFIG_RT_USING_DAC is not set -CONFIG_RT_USING_NULL=y -CONFIG_RT_USING_ZERO=y -CONFIG_RT_USING_RANDOM=y -# CONFIG_RT_USING_PWM is not set -# CONFIG_RT_USING_MTD_NOR is not set -# CONFIG_RT_USING_MTD_NAND is not set -# CONFIG_RT_USING_PM is not set -# CONFIG_RT_USING_FDT is not set -CONFIG_RT_USING_RTC=y -# CONFIG_RT_USING_ALARM is not set -# CONFIG_RT_USING_SOFT_RTC is not set -CONFIG_RT_USING_SDIO=y -CONFIG_RT_SDIO_STACK_SIZE=4096 -CONFIG_RT_SDIO_THREAD_PRIORITY=15 -CONFIG_RT_MMCSD_STACK_SIZE=4096 -CONFIG_RT_MMCSD_THREAD_PREORITY=22 -CONFIG_RT_MMCSD_MAX_PARTITION=16 -# CONFIG_RT_SDIO_DEBUG is not set -# CONFIG_RT_USING_SPI is not set -# CONFIG_RT_USING_WDT is not set -# CONFIG_RT_USING_AUDIO is not set -# CONFIG_RT_USING_SENSOR is not set -# CONFIG_RT_USING_TOUCH is not set -# CONFIG_RT_USING_LCD is not set -# CONFIG_RT_USING_HWCRYPTO is not set -# CONFIG_RT_USING_PULSE_ENCODER is not set -# CONFIG_RT_USING_INPUT_CAPTURE is not set -# CONFIG_RT_USING_DEV_BUS is not set -# CONFIG_RT_USING_WIFI is not set -# CONFIG_RT_USING_VIRTIO is not set - -# -# Using USB -# -# CONFIG_RT_USING_USB is not set -# CONFIG_RT_USING_USB_HOST is not set -# CONFIG_RT_USING_USB_DEVICE is not set - -# -# C/C++ and POSIX layer -# -CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8 - -# -# POSIX (Portable Operating System Interface) layer -# -CONFIG_RT_USING_POSIX_FS=y -CONFIG_RT_USING_POSIX_DEVIO=y -CONFIG_RT_USING_POSIX_STDIO=y -CONFIG_RT_USING_POSIX_POLL=y -CONFIG_RT_USING_POSIX_SELECT=y -# CONFIG_RT_USING_POSIX_SOCKET is not set -CONFIG_RT_USING_POSIX_TERMIOS=y -CONFIG_RT_USING_POSIX_AIO=y -# CONFIG_RT_USING_POSIX_MMAN is not set -CONFIG_RT_USING_POSIX_DELAY=y -CONFIG_RT_USING_POSIX_CLOCK=y -CONFIG_RT_USING_POSIX_TIMER=y -# CONFIG_RT_USING_PTHREADS is not set -# CONFIG_RT_USING_MODULE is not set - -# -# Interprocess Communication (IPC) -# -CONFIG_RT_USING_POSIX_PIPE=y -CONFIG_RT_USING_POSIX_PIPE_SIZE=512 -CONFIG_RT_USING_POSIX_MESSAGE_QUEUE=y -CONFIG_RT_USING_POSIX_MESSAGE_SEMAPHORE=y - -# -# Socket is in the 'Network' category -# -# CONFIG_RT_USING_CPLUSPLUS is not set - -# -# Network -# -CONFIG_RT_USING_SAL=y -CONFIG_SAL_INTERNET_CHECK=y - -# -# Docking with protocol stacks -# -CONFIG_SAL_USING_LWIP=y -# CONFIG_SAL_USING_AT is not set -# CONFIG_SAL_USING_TLS is not set -CONFIG_SAL_USING_POSIX=y -# CONFIG_SAL_USING_AF_UNIX is not set -CONFIG_RT_USING_NETDEV=y -CONFIG_NETDEV_USING_IFCONFIG=y -CONFIG_NETDEV_USING_PING=y -CONFIG_NETDEV_USING_NETSTAT=y -CONFIG_NETDEV_USING_AUTO_DEFAULT=y -# CONFIG_NETDEV_USING_IPV6 is not set -CONFIG_NETDEV_IPV4=1 -CONFIG_NETDEV_IPV6=0 -# CONFIG_NETDEV_IPV6_SCOPES is not set -CONFIG_RT_USING_LWIP=y -# CONFIG_RT_USING_LWIP_LOCAL_VERSION is not set -# CONFIG_RT_USING_LWIP141 is not set -# CONFIG_RT_USING_LWIP203 is not set -CONFIG_RT_USING_LWIP212=y -# CONFIG_RT_USING_LWIP_LATEST is not set -CONFIG_RT_USING_LWIP_VER_NUM=0x20102 -# CONFIG_RT_USING_LWIP_IPV6 is not set -CONFIG_RT_LWIP_MEM_ALIGNMENT=64 -CONFIG_RT_LWIP_IGMP=y -CONFIG_RT_LWIP_ICMP=y -# CONFIG_RT_LWIP_SNMP is not set -CONFIG_RT_LWIP_DNS=y -# CONFIG_RT_LWIP_DHCP is not set - -# -# Static IPv4 Address -# -CONFIG_RT_LWIP_IPADDR="192.168.4.10" -CONFIG_RT_LWIP_GWADDR="192.168.4.1" -CONFIG_RT_LWIP_MSKADDR="255.255.255.0" -CONFIG_RT_LWIP_UDP=y -CONFIG_RT_LWIP_TCP=y -CONFIG_RT_LWIP_RAW=y -# CONFIG_RT_LWIP_PPP is not set -CONFIG_RT_MEMP_NUM_NETCONN=8 -CONFIG_RT_LWIP_PBUF_NUM=512 -CONFIG_RT_LWIP_RAW_PCB_NUM=4 -CONFIG_RT_LWIP_UDP_PCB_NUM=4 -CONFIG_RT_LWIP_TCP_PCB_NUM=4 -CONFIG_RT_LWIP_TCP_SEG_NUM=40 -CONFIG_RT_LWIP_TCP_SND_BUF=8196 -CONFIG_RT_LWIP_TCP_WND=8196 -CONFIG_RT_LWIP_TCPTHREAD_PRIORITY=12 -CONFIG_RT_LWIP_TCPTHREAD_MBOX_SIZE=8 -CONFIG_RT_LWIP_TCPTHREAD_STACKSIZE=16184 -# CONFIG_LWIP_NO_RX_THREAD is not set -# CONFIG_LWIP_NO_TX_THREAD is not set -CONFIG_RT_LWIP_ETHTHREAD_PRIORITY=12 -CONFIG_RT_LWIP_ETHTHREAD_STACKSIZE=2048 -CONFIG_RT_LWIP_ETHTHREAD_MBOX_SIZE=8 -# CONFIG_RT_LWIP_REASSEMBLY_FRAG is not set -CONFIG_LWIP_NETIF_STATUS_CALLBACK=1 -CONFIG_LWIP_NETIF_LINK_CALLBACK=1 -CONFIG_SO_REUSE=1 -CONFIG_LWIP_SO_RCVTIMEO=1 -CONFIG_LWIP_SO_SNDTIMEO=1 -CONFIG_LWIP_SO_RCVBUF=1 -CONFIG_LWIP_SO_LINGER=0 -# CONFIG_RT_LWIP_NETIF_LOOPBACK is not set -CONFIG_LWIP_NETIF_LOOPBACK=0 -# CONFIG_RT_LWIP_STATS is not set -# CONFIG_RT_LWIP_USING_HW_CHECKSUM is not set -CONFIG_RT_LWIP_USING_PING=y -# CONFIG_LWIP_USING_DHCPD is not set -# CONFIG_RT_LWIP_DEBUG is not set -# CONFIG_RT_USING_AT is not set - -# -# Utilities -# -CONFIG_RT_USING_RYM=y -# CONFIG_YMODEM_USING_CRC_TABLE is not set -CONFIG_YMODEM_USING_FILE_TRANSFER=y -# CONFIG_RT_USING_ULOG is not set -CONFIG_RT_USING_UTEST=y -CONFIG_UTEST_THR_STACK_SIZE=4096 -CONFIG_UTEST_THR_PRIORITY=20 -# CONFIG_RT_USING_VAR_EXPORT is not set -CONFIG_RT_USING_ADT=y -# CONFIG_RT_USING_RT_LINK is not set -# CONFIG_RT_USING_VBUS is not set - -# -# RT-Thread Utestcases -# -CONFIG_RT_USING_UTESTCASES=y - -# -# Utest Self Testcase -# -CONFIG_UTEST_SELF_PASS_TC=y - -# -# Kernel Testcase -# -CONFIG_UTEST_MEMHEAP_TC=y -CONFIG_UTEST_SLAB_TC=y -CONFIG_UTEST_IRQ_TC=y -CONFIG_UTEST_SEMAPHORE_TC=y -CONFIG_UTEST_EVENT_TC=y -CONFIG_UTEST_TIMER_TC=y -# CONFIG_UTEST_MESSAGEQUEUE_TC is not set -# CONFIG_UTEST_SIGNAL_TC is not set -CONFIG_UTEST_MUTEX_TC=y -CONFIG_UTEST_MAILBOX_TC=y -CONFIG_UTEST_THREAD_TC=y -CONFIG_UTEST_ATOMIC_TC=y - -# -# CPP11 Testcase -# -# CONFIG_UTEST_CPP11_THREAD_TC is not set - -# -# Utest Serial Testcase -# -# CONFIG_UTEST_SERIAL_TC is not set - -# -# RTT Posix Testcase -# -CONFIG_RTT_POSIX_TESTCASE=y -# CONFIG_RTT_POSIX_TESTCASE_DIRENT_H is not set -# CONFIG_RTT_POSIX_TESTCASE_PTHREAD_H is not set -CONFIG_RTT_POSIX_TESTCASE_STDIO_H=y -# CONFIG_STDIO_H_CLEARERR is not set -# CONFIG_STDIO_H_FCLOSE is not set -# CONFIG_STDIO_H_FDOPEN is not set -# CONFIG_STDIO_H_FEOF is not set -# CONFIG_STDIO_H_FERROR is not set -# CONFIG_STDIO_H_FFLUSH is not set -# CONFIG_STDIO_H_FGETC is not set -# CONFIG_STDIO_H_FGETS is not set -# CONFIG_STDIO_H_FILENO is not set -# CONFIG_STDIO_H_FOPEN is not set -# CONFIG_STDIO_H_FPRINTF is not set -# CONFIG_STDIO_H_FPUTC is not set -# CONFIG_STDIO_H_FPUTS is not set -# CONFIG_STDIO_H_FREAD is not set -# CONFIG_STDIO_H_FSCANF is not set -# CONFIG_STDIO_H_FSEEK is not set -# CONFIG_STDIO_H_FTELL is not set -# CONFIG_STDIO_H_FWRITE is not set -# CONFIG_STDIO_H_PERROR is not set -# CONFIG_STDIO_H_PRINTF is not set -# CONFIG_STDIO_H_PUTC is not set -# CONFIG_STDIO_H_PUTCHAR is not set -# CONFIG_STDIO_H_PUTS is not set -# CONFIG_STDIO_H_REMOVE is not set -# CONFIG_STDIO_H_RENAME is not set -# CONFIG_STDIO_H_REWIND is not set -# CONFIG_STDIO_H_SETBUF is not set -# CONFIG_STDIO_H_SETVBUF is not set -# CONFIG_STDIO_H_SNPRINTF is not set -# CONFIG_STDIO_H_SPRINTF is not set -# CONFIG_STDIO_H_SSCANF is not set -# CONFIG_STDIO_H_VFPRINTF is not set -# CONFIG_STDIO_H_VPRINTF is not set -# CONFIG_STDIO_H_VSNPRINTF is not set -# CONFIG_STDIO_H_VSPRINTF is not set -CONFIG_RTT_POSIX_TESTCASE_STDLIB_H=y -# CONFIG_STDLIB_H_ATOI is not set -# CONFIG_STDLIB_H_ATOL is not set -# CONFIG_STDLIB_H_QSORT is not set -# CONFIG_STDLIB_H_STRTOL is not set -CONFIG_RTT_POSIX_TESTCASE_UNISTD_H=y -# CONFIG_UNISTD_H_ACCESS is not set -# CONFIG_UNISTD_H_CHDIR is not set -# CONFIG_UNISTD_H_FTRUNCATE is not set -# CONFIG_UNISTD_H_ISATTY is not set -# CONFIG_UNISTD_H_FSYNC is not set -# CONFIG_UNISTD_H_RMDIR is not set - -# -# Memory Management Subsytem Testcase -# -# CONFIG_UTEST_MM_API_TC is not set -# CONFIG_UTEST_MM_LWP_TC is not set - -# -# RT-Thread online packages -# - -# -# IoT - internet of things -# -# CONFIG_PKG_USING_LWIP is not set -# CONFIG_PKG_USING_LORAWAN_DRIVER is not set -# CONFIG_PKG_USING_PAHOMQTT is not set -# CONFIG_PKG_USING_UMQTT is not set -# CONFIG_PKG_USING_WEBCLIENT is not set -# CONFIG_PKG_USING_WEBNET is not set -# CONFIG_PKG_USING_MONGOOSE is not set -# CONFIG_PKG_USING_MYMQTT is not set -# CONFIG_PKG_USING_KAWAII_MQTT is not set -# CONFIG_PKG_USING_BC28_MQTT is not set -# CONFIG_PKG_USING_WEBTERMINAL is not set -# CONFIG_PKG_USING_LIBMODBUS is not set -# CONFIG_PKG_USING_FREEMODBUS is not set -# CONFIG_PKG_USING_NANOPB is not set - -# -# Wi-Fi -# - -# -# Marvell WiFi -# -# CONFIG_PKG_USING_WLANMARVELL is not set - -# -# Wiced WiFi -# -# CONFIG_PKG_USING_WLAN_WICED is not set -# CONFIG_PKG_USING_RW007 is not set -# CONFIG_PKG_USING_COAP is not set -# CONFIG_PKG_USING_NOPOLL is not set -# CONFIG_PKG_USING_NETUTILS is not set -# CONFIG_PKG_USING_CMUX is not set -# CONFIG_PKG_USING_PPP_DEVICE is not set -# CONFIG_PKG_USING_AT_DEVICE is not set -# CONFIG_PKG_USING_ATSRV_SOCKET is not set -# CONFIG_PKG_USING_WIZNET is not set -# CONFIG_PKG_USING_ZB_COORDINATOR is not set - -# -# IoT Cloud -# -# CONFIG_PKG_USING_ONENET is not set -# CONFIG_PKG_USING_GAGENT_CLOUD is not set -# CONFIG_PKG_USING_ALI_IOTKIT is not set -# CONFIG_PKG_USING_AZURE is not set -# CONFIG_PKG_USING_TENCENT_IOT_EXPLORER is not set -# CONFIG_PKG_USING_JIOT-C-SDK is not set -# CONFIG_PKG_USING_UCLOUD_IOT_SDK is not set -# CONFIG_PKG_USING_JOYLINK is not set -# CONFIG_PKG_USING_EZ_IOT_OS is not set -# CONFIG_PKG_USING_IOTSHARP_SDK is not set -# CONFIG_PKG_USING_NIMBLE is not set -# CONFIG_PKG_USING_LLSYNC_SDK_ADAPTER is not set -# CONFIG_PKG_USING_OTA_DOWNLOADER is not set -# CONFIG_PKG_USING_IPMSG is not set -# CONFIG_PKG_USING_LSSDP is not set -# CONFIG_PKG_USING_AIRKISS_OPEN is not set -# CONFIG_PKG_USING_LIBRWS is not set -# CONFIG_PKG_USING_TCPSERVER is not set -# CONFIG_PKG_USING_PROTOBUF_C is not set -# CONFIG_PKG_USING_DLT645 is not set -# CONFIG_PKG_USING_QXWZ is not set -# CONFIG_PKG_USING_SMTP_CLIENT is not set -# CONFIG_PKG_USING_ABUP_FOTA is not set -# CONFIG_PKG_USING_LIBCURL2RTT is not set -# CONFIG_PKG_USING_CAPNP is not set -# CONFIG_PKG_USING_AGILE_TELNET is not set -# CONFIG_PKG_USING_NMEALIB is not set -# CONFIG_PKG_USING_PDULIB is not set -# CONFIG_PKG_USING_BTSTACK is not set -# CONFIG_PKG_USING_LORAWAN_ED_STACK is not set -# CONFIG_PKG_USING_WAYZ_IOTKIT is not set -# CONFIG_PKG_USING_MAVLINK is not set -# CONFIG_PKG_USING_BSAL is not set -# CONFIG_PKG_USING_AGILE_MODBUS is not set -# CONFIG_PKG_USING_AGILE_FTP is not set -# CONFIG_PKG_USING_EMBEDDEDPROTO is not set -# CONFIG_PKG_USING_RT_LINK_HW is not set -# CONFIG_PKG_USING_RYANMQTT is not set -# CONFIG_PKG_USING_RYANW5500 is not set -# CONFIG_PKG_USING_LORA_PKT_FWD is not set -# CONFIG_PKG_USING_LORA_GW_DRIVER_LIB is not set -# CONFIG_PKG_USING_LORA_PKT_SNIFFER is not set -# CONFIG_PKG_USING_HM is not set -# CONFIG_PKG_USING_SMALL_MODBUS is not set -# CONFIG_PKG_USING_NET_SERVER is not set -# CONFIG_PKG_USING_ZFTP is not set -# CONFIG_PKG_USING_WOL is not set -# CONFIG_PKG_USING_ZEPHYR_POLLING is not set - -# -# security packages -# -# CONFIG_PKG_USING_MBEDTLS is not set -# CONFIG_PKG_USING_LIBSODIUM is not set -# CONFIG_PKG_USING_LIBHYDROGEN is not set -# CONFIG_PKG_USING_TINYCRYPT is not set -# CONFIG_PKG_USING_TFM is not set -# CONFIG_PKG_USING_YD_CRYPTO is not set - -# -# language packages -# - -# -# JSON: JavaScript Object Notation, a lightweight data-interchange format -# -# CONFIG_PKG_USING_CJSON is not set -# CONFIG_PKG_USING_LJSON is not set -# CONFIG_PKG_USING_RT_CJSON_TOOLS is not set -# CONFIG_PKG_USING_RAPIDJSON is not set -# CONFIG_PKG_USING_JSMN is not set -# CONFIG_PKG_USING_AGILE_JSMN is not set -# CONFIG_PKG_USING_PARSON is not set - -# -# XML: Extensible Markup Language -# -# CONFIG_PKG_USING_SIMPLE_XML is not set -# CONFIG_PKG_USING_EZXML is not set -# CONFIG_PKG_USING_LUATOS_SOC is not set -# CONFIG_PKG_USING_LUA is not set -# CONFIG_PKG_USING_JERRYSCRIPT is not set -# CONFIG_PKG_USING_MICROPYTHON is not set -# CONFIG_PKG_USING_PIKASCRIPT is not set -# CONFIG_PKG_USING_RTT_RUST is not set - -# -# multimedia packages -# - -# -# LVGL: powerful and easy-to-use embedded GUI library -# -# CONFIG_PKG_USING_LVGL is not set -# CONFIG_PKG_USING_LITTLEVGL2RTT is not set -# CONFIG_PKG_USING_LV_MUSIC_DEMO is not set -# CONFIG_PKG_USING_GUI_GUIDER_DEMO is not set - -# -# u8g2: a monochrome graphic library -# -# CONFIG_PKG_USING_U8G2_OFFICIAL is not set -# CONFIG_PKG_USING_U8G2 is not set -# CONFIG_PKG_USING_OPENMV is not set -# CONFIG_PKG_USING_MUPDF is not set -# CONFIG_PKG_USING_STEMWIN is not set -# CONFIG_PKG_USING_WAVPLAYER is not set -# CONFIG_PKG_USING_TJPGD is not set -# CONFIG_PKG_USING_PDFGEN is not set -# CONFIG_PKG_USING_HELIX is not set -# CONFIG_PKG_USING_AZUREGUIX is not set -# CONFIG_PKG_USING_TOUCHGFX2RTT is not set -# CONFIG_PKG_USING_NUEMWIN is not set -# CONFIG_PKG_USING_MP3PLAYER is not set -# CONFIG_PKG_USING_TINYJPEG is not set -# CONFIG_PKG_USING_UGUI is not set -# CONFIG_PKG_USING_MCURSES is not set -# CONFIG_PKG_USING_TERMBOX is not set -# CONFIG_PKG_USING_VT100 is not set -# CONFIG_PKG_USING_QRCODE is not set -# CONFIG_PKG_USING_GUIENGINE is not set -# CONFIG_PKG_USING_PERSIMMON is not set -# CONFIG_PKG_USING_3GPP_AMRNB is not set - -# -# tools packages -# -# CONFIG_PKG_USING_CMBACKTRACE is not set -# CONFIG_PKG_USING_EASYFLASH is not set -# CONFIG_PKG_USING_EASYLOGGER is not set -# CONFIG_PKG_USING_SYSTEMVIEW is not set -# CONFIG_PKG_USING_SEGGER_RTT is not set -# CONFIG_PKG_USING_RTT_AUTO_EXE_CMD is not set -# CONFIG_PKG_USING_RDB is not set -# CONFIG_PKG_USING_ULOG_EASYFLASH is not set -# CONFIG_PKG_USING_LOGMGR is not set -# CONFIG_PKG_USING_ADBD is not set -# CONFIG_PKG_USING_COREMARK is not set -# CONFIG_PKG_USING_DHRYSTONE is not set -# CONFIG_PKG_USING_MEMORYPERF is not set -# CONFIG_PKG_USING_NR_MICRO_SHELL is not set -# CONFIG_PKG_USING_CHINESE_FONT_LIBRARY is not set -# CONFIG_PKG_USING_LUNAR_CALENDAR is not set -# CONFIG_PKG_USING_BS8116A is not set -# CONFIG_PKG_USING_GPS_RMC is not set -# CONFIG_PKG_USING_URLENCODE is not set -# CONFIG_PKG_USING_UMCN is not set -# CONFIG_PKG_USING_LWRB2RTT is not set -# CONFIG_PKG_USING_CPU_USAGE is not set -# CONFIG_PKG_USING_GBK2UTF8 is not set -# CONFIG_PKG_USING_VCONSOLE is not set -# CONFIG_PKG_USING_KDB is not set -# CONFIG_PKG_USING_WAMR is not set -# CONFIG_PKG_USING_MICRO_XRCE_DDS_CLIENT is not set -# CONFIG_PKG_USING_LWLOG is not set -# CONFIG_PKG_USING_ANV_TRACE is not set -# CONFIG_PKG_USING_ANV_MEMLEAK is not set -# CONFIG_PKG_USING_ANV_TESTSUIT is not set -# CONFIG_PKG_USING_ANV_BENCH is not set -# CONFIG_PKG_USING_DEVMEM is not set -# CONFIG_PKG_USING_REGEX is not set -# CONFIG_PKG_USING_MEM_SANDBOX is not set -# CONFIG_PKG_USING_SOLAR_TERMS is not set -# CONFIG_PKG_USING_GAN_ZHI is not set -# CONFIG_PKG_USING_FDT is not set -# CONFIG_PKG_USING_CBOX is not set -# CONFIG_PKG_USING_SNOWFLAKE is not set -# CONFIG_PKG_USING_HASH_MATCH is not set -# CONFIG_PKG_USING_ARMV7M_DWT_TOOL is not set -# CONFIG_PKG_USING_VOFA_PLUS is not set - -# -# system packages -# - -# -# enhanced kernel services -# -# CONFIG_PKG_USING_RT_MEMCPY_CM is not set -# CONFIG_PKG_USING_RT_KPRINTF_THREADSAFE is not set -# CONFIG_PKG_USING_RT_VSNPRINTF_FULL is not set - -# -# acceleration: Assembly language or algorithmic acceleration packages -# -# CONFIG_PKG_USING_QFPLIB_M0_FULL is not set -# CONFIG_PKG_USING_QFPLIB_M0_TINY is not set -# CONFIG_PKG_USING_QFPLIB_M3 is not set - -# -# CMSIS: ARM Cortex-M Microcontroller Software Interface Standard -# -# CONFIG_PKG_USING_CMSIS_5 is not set -# CONFIG_PKG_USING_CMSIS_RTOS1 is not set -# CONFIG_PKG_USING_CMSIS_RTOS2 is not set - -# -# Micrium: Micrium software products porting for RT-Thread -# -# CONFIG_PKG_USING_UCOSIII_WRAPPER is not set -# CONFIG_PKG_USING_UCOSII_WRAPPER is not set -# CONFIG_PKG_USING_UC_CRC is not set -# CONFIG_PKG_USING_UC_CLK is not set -# CONFIG_PKG_USING_UC_COMMON is not set -# CONFIG_PKG_USING_UC_MODBUS is not set -# CONFIG_PKG_USING_FREERTOS_WRAPPER is not set -# CONFIG_PKG_USING_CAIRO is not set -# CONFIG_PKG_USING_PIXMAN is not set -# CONFIG_PKG_USING_PARTITION is not set -# CONFIG_PKG_USING_PERF_COUNTER is not set -# CONFIG_PKG_USING_FLASHDB is not set -# CONFIG_PKG_USING_SQLITE is not set -# CONFIG_PKG_USING_RTI is not set -# CONFIG_PKG_USING_DFS_YAFFS is not set -# CONFIG_PKG_USING_LITTLEFS is not set -# CONFIG_PKG_USING_DFS_JFFS2 is not set -# CONFIG_PKG_USING_DFS_UFFS is not set -# CONFIG_PKG_USING_LWEXT4 is not set -# CONFIG_PKG_USING_THREAD_POOL is not set -# CONFIG_PKG_USING_ROBOTS is not set -# CONFIG_PKG_USING_EV is not set -# CONFIG_PKG_USING_SYSWATCH is not set -# CONFIG_PKG_USING_SYS_LOAD_MONITOR is not set -# CONFIG_PKG_USING_PLCCORE is not set -# CONFIG_PKG_USING_RAMDISK is not set -# CONFIG_PKG_USING_MININI is not set -# CONFIG_PKG_USING_QBOOT is not set -# CONFIG_PKG_USING_PPOOL is not set -# CONFIG_PKG_USING_OPENAMP is not set -# CONFIG_PKG_USING_LPM is not set -# CONFIG_PKG_USING_TLSF is not set -# CONFIG_PKG_USING_EVENT_RECORDER is not set -# CONFIG_PKG_USING_ARM_2D is not set -# CONFIG_PKG_USING_MCUBOOT is not set -# CONFIG_PKG_USING_TINYUSB is not set -# CONFIG_PKG_USING_CHERRYUSB is not set -# CONFIG_PKG_USING_KMULTI_RTIMER is not set -# CONFIG_PKG_USING_TFDB is not set -# CONFIG_PKG_USING_QPC is not set -# CONFIG_PKG_USING_AGILE_UPGRADE is not set -# CONFIG_PKG_USING_FLASH_BLOB is not set - -# -# peripheral libraries and drivers -# - -# -# sensors drivers -# -# CONFIG_PKG_USING_LSM6DSM is not set -# CONFIG_PKG_USING_LSM6DSL is not set -# CONFIG_PKG_USING_LPS22HB is not set -# CONFIG_PKG_USING_HTS221 is not set -# CONFIG_PKG_USING_LSM303AGR is not set -# CONFIG_PKG_USING_BME280 is not set -# CONFIG_PKG_USING_BME680 is not set -# CONFIG_PKG_USING_BMA400 is not set -# CONFIG_PKG_USING_BMI160_BMX160 is not set -# CONFIG_PKG_USING_SPL0601 is not set -# CONFIG_PKG_USING_MS5805 is not set -# CONFIG_PKG_USING_DA270 is not set -# CONFIG_PKG_USING_DF220 is not set -# CONFIG_PKG_USING_HSHCAL001 is not set -# CONFIG_PKG_USING_BH1750 is not set -# CONFIG_PKG_USING_MPU6XXX is not set -# CONFIG_PKG_USING_AHT10 is not set -# CONFIG_PKG_USING_AP3216C is not set -# CONFIG_PKG_USING_TSL4531 is not set -# CONFIG_PKG_USING_DS18B20 is not set -# CONFIG_PKG_USING_DHT11 is not set -# CONFIG_PKG_USING_DHTXX is not set -# CONFIG_PKG_USING_GY271 is not set -# CONFIG_PKG_USING_GP2Y10 is not set -# CONFIG_PKG_USING_SGP30 is not set -# CONFIG_PKG_USING_HDC1000 is not set -# CONFIG_PKG_USING_BMP180 is not set -# CONFIG_PKG_USING_BMP280 is not set -# CONFIG_PKG_USING_SHTC1 is not set -# CONFIG_PKG_USING_BMI088 is not set -# CONFIG_PKG_USING_HMC5883 is not set -# CONFIG_PKG_USING_MAX6675 is not set -# CONFIG_PKG_USING_TMP1075 is not set -# CONFIG_PKG_USING_SR04 is not set -# CONFIG_PKG_USING_CCS811 is not set -# CONFIG_PKG_USING_PMSXX is not set -# CONFIG_PKG_USING_RT3020 is not set -# CONFIG_PKG_USING_MLX90632 is not set -# CONFIG_PKG_USING_MLX90393 is not set -# CONFIG_PKG_USING_MLX90392 is not set -# CONFIG_PKG_USING_MLX90397 is not set -# CONFIG_PKG_USING_MS5611 is not set -# CONFIG_PKG_USING_MAX31865 is not set -# CONFIG_PKG_USING_VL53L0X is not set -# CONFIG_PKG_USING_INA260 is not set -# CONFIG_PKG_USING_MAX30102 is not set -# CONFIG_PKG_USING_INA226 is not set -# CONFIG_PKG_USING_LIS2DH12 is not set -# CONFIG_PKG_USING_HS300X is not set -# CONFIG_PKG_USING_ZMOD4410 is not set -# CONFIG_PKG_USING_ISL29035 is not set -# CONFIG_PKG_USING_MMC3680KJ is not set -# CONFIG_PKG_USING_QMP6989 is not set -# CONFIG_PKG_USING_BALANCE is not set -# CONFIG_PKG_USING_SHT2X is not set -# CONFIG_PKG_USING_SHT3X is not set -# CONFIG_PKG_USING_AD7746 is not set -# CONFIG_PKG_USING_ADT74XX is not set -# CONFIG_PKG_USING_MAX17048 is not set -# CONFIG_PKG_USING_AS7341 is not set -# CONFIG_PKG_USING_CW2015 is not set -# CONFIG_PKG_USING_ICM20608 is not set -# CONFIG_PKG_USING_PAJ7620 is not set -# CONFIG_PKG_USING_STHS34PF80 is not set - -# -# touch drivers -# -# CONFIG_PKG_USING_GT9147 is not set -# CONFIG_PKG_USING_GT1151 is not set -# CONFIG_PKG_USING_GT917S is not set -# CONFIG_PKG_USING_GT911 is not set -# CONFIG_PKG_USING_FT6206 is not set -# CONFIG_PKG_USING_FT5426 is not set -# CONFIG_PKG_USING_FT6236 is not set -# CONFIG_PKG_USING_XPT2046_TOUCH is not set -# CONFIG_PKG_USING_REALTEK_AMEBA is not set -# CONFIG_PKG_USING_STM32_SDIO is not set -# CONFIG_PKG_USING_ESP_IDF is not set -# CONFIG_PKG_USING_BUTTON is not set -# CONFIG_PKG_USING_PCF8574 is not set -# CONFIG_PKG_USING_SX12XX is not set -# CONFIG_PKG_USING_SIGNAL_LED is not set -# CONFIG_PKG_USING_LEDBLINK is not set -# CONFIG_PKG_USING_LITTLED is not set -# CONFIG_PKG_USING_LKDGUI is not set -# CONFIG_PKG_USING_NRF5X_SDK is not set -# CONFIG_PKG_USING_NRFX is not set - -# -# Kendryte SDK -# -# CONFIG_PKG_USING_K210_SDK is not set -# CONFIG_PKG_USING_KENDRYTE_SDK is not set -# CONFIG_PKG_USING_INFRARED is not set -# CONFIG_PKG_USING_MULTI_INFRARED is not set -# CONFIG_PKG_USING_AGILE_BUTTON is not set -# CONFIG_PKG_USING_AGILE_LED is not set -# CONFIG_PKG_USING_AT24CXX is not set -# CONFIG_PKG_USING_MOTIONDRIVER2RTT is not set -# CONFIG_PKG_USING_PCA9685 is not set -# CONFIG_PKG_USING_ILI9341 is not set -# CONFIG_PKG_USING_I2C_TOOLS is not set -# CONFIG_PKG_USING_NRF24L01 is not set -# CONFIG_PKG_USING_RPLIDAR is not set -# CONFIG_PKG_USING_AS608 is not set -# CONFIG_PKG_USING_RC522 is not set -# CONFIG_PKG_USING_WS2812B is not set -# CONFIG_PKG_USING_EMBARC_BSP is not set -# CONFIG_PKG_USING_EXTERN_RTC_DRIVERS is not set -# CONFIG_PKG_USING_MULTI_RTIMER is not set -# CONFIG_PKG_USING_MAX7219 is not set -# CONFIG_PKG_USING_BEEP is not set -# CONFIG_PKG_USING_EASYBLINK is not set -# CONFIG_PKG_USING_PMS_SERIES is not set -# CONFIG_PKG_USING_CAN_YMODEM is not set -# CONFIG_PKG_USING_LORA_RADIO_DRIVER is not set -# CONFIG_PKG_USING_QLED is not set -# CONFIG_PKG_USING_AGILE_CONSOLE is not set -# CONFIG_PKG_USING_LD3320 is not set -# CONFIG_PKG_USING_WK2124 is not set -# CONFIG_PKG_USING_LY68L6400 is not set -# CONFIG_PKG_USING_DM9051 is not set -# CONFIG_PKG_USING_SSD1306 is not set -# CONFIG_PKG_USING_QKEY is not set -# CONFIG_PKG_USING_RS485 is not set -# CONFIG_PKG_USING_RS232 is not set -# CONFIG_PKG_USING_NES is not set -# CONFIG_PKG_USING_VIRTUAL_SENSOR is not set -# CONFIG_PKG_USING_VDEVICE is not set -# CONFIG_PKG_USING_SGM706 is not set -# CONFIG_PKG_USING_STM32WB55_SDK is not set -# CONFIG_PKG_USING_RDA58XX is not set -# CONFIG_PKG_USING_LIBNFC is not set -# CONFIG_PKG_USING_MFOC is not set -# CONFIG_PKG_USING_TMC51XX is not set -# CONFIG_PKG_USING_TCA9534 is not set -# CONFIG_PKG_USING_KOBUKI is not set -# CONFIG_PKG_USING_ROSSERIAL is not set -# CONFIG_PKG_USING_MICRO_ROS is not set -# CONFIG_PKG_USING_MCP23008 is not set -# CONFIG_PKG_USING_BLUETRUM_SDK is not set -# CONFIG_PKG_USING_MISAKA_AT24CXX is not set -# CONFIG_PKG_USING_MISAKA_RGB_BLING is not set -# CONFIG_PKG_USING_LORA_MODEM_DRIVER is not set -# CONFIG_PKG_USING_SOFT_SERIAL is not set -# CONFIG_PKG_USING_MB85RS16 is not set -# CONFIG_PKG_USING_RFM300 is not set -# CONFIG_PKG_USING_IO_INPUT_FILTER is not set -# CONFIG_PKG_USING_RASPBERRYPI_PICO_SDK is not set -# CONFIG_PKG_USING_LRF_NV7LIDAR is not set -# CONFIG_PKG_USING_FINGERPRINT is not set - -# -# AI packages -# -# CONFIG_PKG_USING_LIBANN is not set -# CONFIG_PKG_USING_NNOM is not set -# CONFIG_PKG_USING_ONNX_BACKEND is not set -# CONFIG_PKG_USING_ONNX_PARSER is not set -# CONFIG_PKG_USING_TENSORFLOWLITEMICRO is not set -# CONFIG_PKG_USING_ELAPACK is not set -# CONFIG_PKG_USING_ULAPACK is not set -# CONFIG_PKG_USING_QUEST is not set -# CONFIG_PKG_USING_NAXOS is not set - -# -# Signal Processing and Control Algorithm Packages -# -# CONFIG_PKG_USING_FIRE_PID_CURVE is not set -# CONFIG_PKG_USING_UKAL is not set - -# -# miscellaneous packages -# - -# -# project laboratory -# - -# -# samples: kernel and components samples -# -# CONFIG_PKG_USING_KERNEL_SAMPLES is not set -# CONFIG_PKG_USING_FILESYSTEM_SAMPLES is not set -# CONFIG_PKG_USING_NETWORK_SAMPLES is not set -# CONFIG_PKG_USING_PERIPHERAL_SAMPLES is not set - -# -# entertainment: terminal games and other interesting software packages -# -# CONFIG_PKG_USING_CMATRIX is not set -# CONFIG_PKG_USING_SL is not set -# CONFIG_PKG_USING_CAL is not set -# CONFIG_PKG_USING_ACLOCK is not set -# CONFIG_PKG_USING_THREES is not set -# CONFIG_PKG_USING_2048 is not set -# CONFIG_PKG_USING_SNAKE is not set -# CONFIG_PKG_USING_TETRIS is not set -# CONFIG_PKG_USING_DONUT is not set -# CONFIG_PKG_USING_COWSAY is not set -# CONFIG_PKG_USING_MORSE is not set -# CONFIG_PKG_USING_LIBCSV is not set -# CONFIG_PKG_USING_OPTPARSE is not set -# CONFIG_PKG_USING_FASTLZ is not set -# CONFIG_PKG_USING_MINILZO is not set -# CONFIG_PKG_USING_QUICKLZ is not set -# CONFIG_PKG_USING_LZMA is not set -# CONFIG_PKG_USING_MULTIBUTTON is not set -# CONFIG_PKG_USING_FLEXIBLE_BUTTON is not set -# CONFIG_PKG_USING_CANFESTIVAL is not set -# CONFIG_PKG_USING_ZLIB is not set -# CONFIG_PKG_USING_MINIZIP is not set -# CONFIG_PKG_USING_HEATSHRINK is not set -# CONFIG_PKG_USING_DSTR is not set -# CONFIG_PKG_USING_TINYFRAME is not set -# CONFIG_PKG_USING_KENDRYTE_DEMO is not set -# CONFIG_PKG_USING_DIGITALCTRL is not set -# CONFIG_PKG_USING_UPACKER is not set -# CONFIG_PKG_USING_UPARAM is not set -# CONFIG_PKG_USING_HELLO is not set -# CONFIG_PKG_USING_VI is not set -# CONFIG_PKG_USING_KI is not set -# CONFIG_PKG_USING_ARMv7M_DWT is not set -# CONFIG_PKG_USING_CRCLIB is not set -# CONFIG_PKG_USING_LWGPS is not set -# CONFIG_PKG_USING_STATE_MACHINE is not set -# CONFIG_PKG_USING_DESIGN_PATTERN is not set -# CONFIG_PKG_USING_CONTROLLER is not set -# CONFIG_PKG_USING_PHASE_LOCKED_LOOP is not set -# CONFIG_PKG_USING_MFBD is not set -# CONFIG_PKG_USING_SLCAN2RTT is not set -# CONFIG_PKG_USING_SOEM is not set -# CONFIG_PKG_USING_QPARAM is not set -# CONFIG_PKG_USING_CorevMCU_CLI is not set - -# -# Arduino libraries -# -# CONFIG_PKG_USING_RTDUINO is not set - -# -# Projects -# -# CONFIG_PKG_USING_ARDUINO_ULTRASOUND_RADAR is not set -# CONFIG_PKG_USING_ARDUINO_SENSOR_KIT is not set -# CONFIG_PKG_USING_ARDUINO_MATLAB_SUPPORT is not set - -# -# Sensors -# -# CONFIG_PKG_USING_ARDUINO_SENSOR_DEVICE_DRIVERS is not set -# CONFIG_PKG_USING_ARDUINO_CAPACITIVESENSOR is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADXL375 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL53L0X is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL53L1X is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SENSOR is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL6180X is not set -# CONFIG_PKG_USING_ADAFRUIT_MAX31855 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX31865 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX31856 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX6675 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90614 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM9DS1 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AHTX0 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM9DS0 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP280 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADT7410 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP085 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BME680 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP9808 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP4728 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_INA219 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LTR390 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADXL345 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DHT is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP9600 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM6DS is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BNO055 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX1704X is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MMC56X3 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90393 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90395 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ICM20X is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DPS310 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HTS221 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SHT4X is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SHT31 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADXL343 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BME280 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AS726X is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AMG88XX is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AM2320 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AM2315 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LTR329_LTR303 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP085_UNIFIED is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP183 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP183_UNIFIED is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP3XX is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MS8607 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS3MDL is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90640 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MMA8451 is not set -# CONFIG_PKG_USING_ADAFRUIT_MSA301 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPL115A2 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BNO08X is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BNO08X_RVC is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS2MDL is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM303DLH_MAG is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LC709203F is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_CAP1188 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_CCS811 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_NAU7802 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS331 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LPS2X is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LPS35HW is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM303_ACCEL is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS3DH is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCF8591 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPL3115A2 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPR121 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPRLS is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPU6050 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCT2075 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PM25AQI is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_EMC2101 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_FXAS21002C is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SCD30 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_FXOS8700 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HMC5883_UNIFIED is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SGP30 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TMP006 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TLA202X is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TCS34725 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI7021 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI1145 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SGP40 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SHTC3 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HDC1000 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HTU21DF is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AS7341 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HTU31D is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SENSORLAB is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_INA260 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TMP007_LIBRARY is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_L3GD20 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TMP117 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TSC2007 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TSL2561 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TSL2591_LIBRARY is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VCNL4040 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VEML6070 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VEML6075 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VEML7700 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_LIS3DHTR is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_DHT is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_ADXL335 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_ADXL345 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_BME280 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_BMP280 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_H3LIS331DL is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_MMA7660 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_TSL2561 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_PAJ7620 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_VL53L0X is not set -# CONFIG_PKG_USING_SEEED_ITG3200 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_SHT31 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_HP20X is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_DRV2605L is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_BBM150 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_HMC5883L is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_LSM303DLH is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_TCS3414CS is not set -# CONFIG_PKG_USING_SEEED_MP503 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_BMP085 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_HIGHTEMP is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_VEML6070 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_SI1145 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_SHT35 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_AT42QT1070 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_LSM6DS3 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_HDC1000 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_HM3301 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_MCP9600 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_LTC2941 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_LDC1612 is not set - -# -# Display -# -# CONFIG_PKG_USING_ARDUINO_U8G2 is not set -# CONFIG_PKG_USING_ARDUINO_U8GLIB_ARDUINO is not set -# CONFIG_PKG_USING_SEEED_TM1637 is not set - -# -# Timing -# -# CONFIG_PKG_USING_ARDUINO_MSTIMER2 is not set - -# -# Data Processing -# -# CONFIG_PKG_USING_ARDUINO_KALMANFILTER is not set -# CONFIG_PKG_USING_ARDUINO_ARDUINOJSON is not set - -# -# Data Storage -# - -# -# Communication -# -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PN532 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI4713 is not set - -# -# Device Control -# -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCF8574 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCA9685 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_PCF85063TP is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TPA2016 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DRV2605 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DS1841 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DS3502 is not set - -# -# Other -# -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MFRC630 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI5351 is not set -# CONFIG_PKG_USING_ARDUINO_RTCLIB is not set - -# -# Signal IO -# -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BUSIO is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TCA8418 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP23017 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADS1X15 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AW9523 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP3008 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP4725 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BD3491FS is not set - -# -# Uncategorized -# - -# -# Hardware Drivers -# - -# -# On-chip Peripheral Drivers -# -CONFIG_BSP_USING_UART=y -CONFIG_RT_USING_UART1=y -# CONFIG_RT_USING_UART0 is not set -# CONFIG_BSP_USING_SPI is not set -# CONFIG_BSP_USING_CAN is not set -# CONFIG_BSP_USING_GPIO is not set -# CONFIG_BSP_USING_QSPI is not set -CONFIG_BSP_USING_ETH=y -CONFIG_RT_LWIP_PBUF_POOL_BUFSIZE=1700 -CONFIG_BSP_USING_SDIO=y -CONFIG_BSP_USING_SDCARD_FATFS=y -# CONFIG_USING_SDIO0 is not set -CONFIG_USING_SDIO1=y -# CONFIG_USING_EMMC is not set - -# -# Board extended module Drivers -# -CONFIG_PHYTIUM_ARCH_AARCH32=y - -# -# Standalone Setting -# -CONFIG_TARGET_ARMV8_AARCH32=y -CONFIG_USE_AARCH64_L1_TO_AARCH32=y - -# -# Board Configuration -# -# CONFIG_TARGET_F2000_4 is not set -# CONFIG_TARGET_D2000 is not set -# CONFIG_TARGET_E2000Q is not set -CONFIG_TARGET_E2000D=y -# CONFIG_TARGET_E2000S is not set -CONFIG_TARGET_E2000=y -CONFIG_DEFAULT_DEBUG_PRINT_UART1=y -# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set -# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set - -# -# Components Configuration -# -# CONFIG_USE_SPI is not set -# CONFIG_USE_QSPI is not set -CONFIG_USE_GIC=y -CONFIG_ENABLE_GICV3=y -CONFIG_USE_IOPAD=y -CONFIG_ENABLE_IOPAD=y -CONFIG_USE_SERIAL=y - -# -# Usart Configuration -# -CONFIG_ENABLE_Pl011_UART=y -# CONFIG_USE_GPIO is not set -CONFIG_USE_ETH=y - -# -# Eth Configuration -# -CONFIG_ENABLE_FXMAC=y -# CONFIG_ENABLE_FGMAC is not set -CONFIG_FXMAC_PHY_COMMON=y -# CONFIG_FXMAC_PHY_YT is not set -# CONFIG_USE_CAN is not set -# CONFIG_USE_I2C is not set -# CONFIG_USE_TIMER is not set -# CONFIG_USE_MIO is not set -# CONFIG_USE_SDMMC is not set -# CONFIG_USE_PCIE is not set -# CONFIG_USE_WDT is not set -# CONFIG_USE_DMA is not set -# CONFIG_USE_NAND is not set -# CONFIG_USE_RTC is not set -# CONFIG_USE_SATA is not set -# CONFIG_USE_USB is not set -# CONFIG_USE_ADC is not set -# CONFIG_USE_PWM is not set -# CONFIG_USE_IPC is not set -# CONFIG_USE_MEDIA is not set -# CONFIG_USE_SCMI_MHU is not set - -# -# Sdk common configuration -# -# CONFIG_LOG_VERBOS is not set -# CONFIG_LOG_DEBUG is not set -# CONFIG_LOG_INFO is not set -# CONFIG_LOG_WARN is not set -CONFIG_LOG_ERROR=y -# CONFIG_LOG_NONE is not set -# CONFIG_LOG_EXTRA_INFO is not set -# CONFIG_LOG_DISPALY_CORE_NUM is not set -# CONFIG_BOOTUP_DEBUG_PRINTS is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set -CONFIG_PHYTIUM_RTT_TEST=y -CONFIG_ENABLE_RTT_UTEST=y - -# -# RT-Thread Utestcases -# - -# -# Kernel Testcase -# - -# -# CPP11 Testcase -# - -# -# Utest Serial Testcase -# - -# -# RTT Posix Testcase -# - -# -# Memory Management Subsytem Testcase -# -# CONFIG_ENABLE_KERNEL_TEST is not set -# CONFIG_ENABLE_KERNEL_SAMPLE is not set -# CONFIG_ENABLE_COREMARK is not set -# CONFIG_ENABLE_DHRYSTONE is not set diff --git a/bsp/phytium/aarch32/configs/e2000q_rtsmart b/bsp/phytium/aarch32/configs/e2000q_demo_rtsmart similarity index 90% rename from bsp/phytium/aarch32/configs/e2000q_rtsmart rename to bsp/phytium/aarch32/configs/e2000q_demo_rtsmart index 5271c16f00..97c9cc73f7 100644 --- a/bsp/phytium/aarch32/configs/e2000q_rtsmart +++ b/bsp/phytium/aarch32/configs/e2000q_demo_rtsmart @@ -9,8 +9,9 @@ CONFIG_RT_NAME_MAX=16 # CONFIG_RT_USING_ARCH_DATA_TYPE is not set CONFIG_RT_USING_SMART=y +# CONFIG_RT_USING_AMP is not set CONFIG_RT_USING_SMP=y -CONFIG_RT_CPUS_NR=4 +CONFIG_RT_CPUS_NR=2 CONFIG_RT_ALIGN_SIZE=4 # CONFIG_RT_THREAD_PRIORITY_8 is not set CONFIG_RT_THREAD_PRIORITY_32=y @@ -36,19 +37,11 @@ CONFIG_RT_KSERVICE_USING_STDLIB=y # CONFIG_RT_KSERVICE_USING_TINY_SIZE is not set # CONFIG_RT_USING_TINY_FFS is not set CONFIG_RT_KPRINTF_USING_LONGLONG=y -CONFIG_RT_DEBUG=y -# CONFIG_RT_DEBUG_COLOR is not set -# CONFIG_RT_DEBUG_INIT_CONFIG is not set -# CONFIG_RT_DEBUG_THREAD_CONFIG is not set -# CONFIG_RT_DEBUG_SCHEDULER_CONFIG is not set -# CONFIG_RT_DEBUG_IPC_CONFIG is not set -# CONFIG_RT_DEBUG_TIMER_CONFIG is not set -# CONFIG_RT_DEBUG_IRQ_CONFIG is not set -# CONFIG_RT_DEBUG_MEM_CONFIG is not set -# CONFIG_RT_DEBUG_SLAB_CONFIG is not set -# CONFIG_RT_DEBUG_MEMHEAP_CONFIG is not set -# CONFIG_RT_DEBUG_PAGE_LEAK is not set -# CONFIG_RT_DEBUG_MODULE_CONFIG is not set +CONFIG_RT_USING_DEBUG=y +CONFIG_RT_DEBUGING_COLOR=y +CONFIG_RT_DEBUGING_CONTEXT=y +CONFIG_RT_DEBUGING_INIT=y +# CONFIG_RT_DEBUGING_PAGE_LEAK is not set # # Inter-Thread communication @@ -58,6 +51,7 @@ CONFIG_RT_USING_MUTEX=y CONFIG_RT_USING_EVENT=y CONFIG_RT_USING_MAILBOX=y CONFIG_RT_USING_MESSAGEQUEUE=y +CONFIG_RT_USING_MESSAGEQUEUE_PRIORITY=y # CONFIG_RT_USING_SIGNALS is not set # @@ -78,19 +72,15 @@ CONFIG_RT_USING_SLAB_AS_HEAP=y # CONFIG_RT_USING_MEMTRACE is not set CONFIG_RT_USING_HEAP_ISR=y CONFIG_RT_USING_HEAP=y - -# -# Kernel Device Object -# CONFIG_RT_USING_DEVICE=y # CONFIG_RT_USING_DEVICE_OPS is not set -# CONFIG_RT_USING_DM is not set # CONFIG_RT_USING_INTERRUPT_INFO is not set CONFIG_RT_USING_CONSOLE=y CONFIG_RT_CONSOLEBUF_SIZE=256 CONFIG_RT_CONSOLE_DEVICE_NAME="uart1" -CONFIG_RT_VER_NUM=0x50001 +CONFIG_RT_VER_NUM=0x50100 # CONFIG_RT_USING_STDC_ATOMIC is not set +CONFIG_RT_BACKTRACE_LEVEL_MAX_NR=32 CONFIG_RT_USING_CACHE=y CONFIG_RT_USING_HW_ATOMIC=y # CONFIG_ARCH_ARM_BOOTWITH_FLUSH_CACHE is not set @@ -131,6 +121,7 @@ CONFIG_FINSH_USING_DESCRIPTION=y # CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set # CONFIG_FINSH_USING_AUTH is not set CONFIG_FINSH_ARG_MAX=10 +CONFIG_FINSH_USING_OPTION_COMPLETION=y # # DFS: device virtual file system @@ -144,15 +135,39 @@ CONFIG_RT_USING_DFS_V1=y # CONFIG_RT_USING_DFS_V2 is not set CONFIG_DFS_FILESYSTEMS_MAX=4 CONFIG_DFS_FILESYSTEM_TYPES_MAX=4 -# CONFIG_RT_USING_DFS_ELMFAT is not set +CONFIG_RT_USING_DFS_ELMFAT=y + +# +# elm-chan's FatFs, Generic FAT Filesystem Module +# +CONFIG_RT_DFS_ELM_CODE_PAGE=437 +CONFIG_RT_DFS_ELM_WORD_ACCESS=y +# CONFIG_RT_DFS_ELM_USE_LFN_0 is not set +# CONFIG_RT_DFS_ELM_USE_LFN_1 is not set +# CONFIG_RT_DFS_ELM_USE_LFN_2 is not set +CONFIG_RT_DFS_ELM_USE_LFN_3=y +CONFIG_RT_DFS_ELM_USE_LFN=3 +CONFIG_RT_DFS_ELM_LFN_UNICODE_0=y +# CONFIG_RT_DFS_ELM_LFN_UNICODE_1 is not set +# CONFIG_RT_DFS_ELM_LFN_UNICODE_2 is not set +# CONFIG_RT_DFS_ELM_LFN_UNICODE_3 is not set +CONFIG_RT_DFS_ELM_LFN_UNICODE=0 +CONFIG_RT_DFS_ELM_MAX_LFN=255 +CONFIG_RT_DFS_ELM_DRIVES=2 +CONFIG_RT_DFS_ELM_MAX_SECTOR_SIZE=512 +# CONFIG_RT_DFS_ELM_USE_ERASE is not set +CONFIG_RT_DFS_ELM_REENTRANT=y +CONFIG_RT_DFS_ELM_MUTEX_TIMEOUT=3000 CONFIG_RT_USING_DFS_DEVFS=y # CONFIG_RT_USING_DFS_ROMFS is not set # CONFIG_RT_USING_DFS_CROMFS is not set CONFIG_RT_USING_DFS_RAMFS=y # CONFIG_RT_USING_DFS_TMPFS is not set +CONFIG_RT_USING_DFS_MQUEUE=y # CONFIG_RT_USING_DFS_NFS is not set # CONFIG_RT_USING_FAL is not set CONFIG_RT_USING_LWP=y +# CONFIG_LWP_DEBUG is not set CONFIG_RT_LWP_MAX_NR=30 CONFIG_LWP_TASK_STACK_SIZE=16384 CONFIG_RT_CH_MSG_MAX_NR=1024 @@ -165,6 +180,7 @@ CONFIG_RT_LWP_SHM_MAX_NR=64 # # Device Drivers # +# CONFIG_RT_USING_DM is not set CONFIG_RT_USING_DEVICE_IPC=y CONFIG_RT_UNAMED_PIPE_NUMBER=64 CONFIG_RT_USING_SYSTEM_WORKQUEUE=y @@ -192,7 +208,6 @@ CONFIG_RT_USING_RANDOM=y # CONFIG_RT_USING_MTD_NOR is not set # CONFIG_RT_USING_MTD_NAND is not set # CONFIG_RT_USING_PM is not set -# CONFIG_RT_USING_FDT is not set CONFIG_RT_USING_RTC=y # CONFIG_RT_USING_ALARM is not set # CONFIG_RT_USING_SOFT_RTC is not set @@ -206,9 +221,10 @@ CONFIG_RT_USING_RTC=y # CONFIG_RT_USING_HWCRYPTO is not set # CONFIG_RT_USING_PULSE_ENCODER is not set # CONFIG_RT_USING_INPUT_CAPTURE is not set -# CONFIG_RT_USING_DEV_BUS is not set +CONFIG_RT_USING_DEV_BUS=y # CONFIG_RT_USING_WIFI is not set # CONFIG_RT_USING_VIRTIO is not set +CONFIG_RT_USING_KTIME=y # # Using USB @@ -220,7 +236,19 @@ CONFIG_RT_USING_RTC=y # # C/C++ and POSIX layer # -CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8 + +# +# ISO-ANSI C layer +# + +# +# Timezone and Daylight Saving Time +# +# CONFIG_RT_LIBC_USING_FULL_TZ_DST is not set +CONFIG_RT_LIBC_USING_LIGHT_TZ_DST=y +CONFIG_RT_LIBC_TZ_DEFAULT_HOUR=8 +CONFIG_RT_LIBC_TZ_DEFAULT_MIN=0 +CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 # # POSIX (Portable Operating System Interface) layer @@ -230,6 +258,10 @@ CONFIG_RT_USING_POSIX_DEVIO=y CONFIG_RT_USING_POSIX_STDIO=y CONFIG_RT_USING_POSIX_POLL=y CONFIG_RT_USING_POSIX_SELECT=y +# CONFIG_RT_USING_POSIX_EVENTFD is not set +# CONFIG_RT_USING_POSIX_EPOLL is not set +# CONFIG_RT_USING_POSIX_SIGNALFD is not set +# CONFIG_RT_USING_POSIX_TIMERFD is not set # CONFIG_RT_USING_POSIX_SOCKET is not set CONFIG_RT_USING_POSIX_TERMIOS=y CONFIG_RT_USING_POSIX_AIO=y @@ -345,10 +377,20 @@ CONFIG_RT_USING_UTEST=y CONFIG_UTEST_THR_STACK_SIZE=4096 CONFIG_UTEST_THR_PRIORITY=20 # CONFIG_RT_USING_VAR_EXPORT is not set +CONFIG_RT_USING_RESOURCE_ID=y CONFIG_RT_USING_ADT=y +CONFIG_RT_USING_ADT_AVL=y +CONFIG_RT_USING_ADT_BITMAP=y +CONFIG_RT_USING_ADT_HASHMAP=y +CONFIG_RT_USING_ADT_REF=y # CONFIG_RT_USING_RT_LINK is not set # CONFIG_RT_USING_VBUS is not set +# +# Memory management +# +# CONFIG_RT_USING_MEMBLOCK is not set + # # RT-Thread Utestcases # @@ -389,6 +431,11 @@ CONFIG_RT_USING_ADT=y # # CONFIG_PKG_USING_WLAN_WICED is not set # CONFIG_PKG_USING_RW007 is not set + +# +# CYW43012 WiFi +# +# CONFIG_PKG_USING_WLAN_CYW43012 is not set # CONFIG_PKG_USING_COAP is not set # CONFIG_PKG_USING_NOPOLL is not set # CONFIG_PKG_USING_NETUTILS is not set @@ -431,6 +478,7 @@ CONFIG_RT_USING_ADT=y # CONFIG_PKG_USING_NMEALIB is not set # CONFIG_PKG_USING_PDULIB is not set # CONFIG_PKG_USING_BTSTACK is not set +# CONFIG_PKG_USING_BT_CYW43012 is not set # CONFIG_PKG_USING_LORAWAN_ED_STACK is not set # CONFIG_PKG_USING_WAYZ_IOTKIT is not set # CONFIG_PKG_USING_MAVLINK is not set @@ -450,6 +498,8 @@ CONFIG_RT_USING_ADT=y # CONFIG_PKG_USING_ZFTP is not set # CONFIG_PKG_USING_WOL is not set # CONFIG_PKG_USING_ZEPHYR_POLLING is not set +# CONFIG_PKG_USING_MATTER_ADAPTATION_LAYER is not set +# CONFIG_PKG_USING_LHC_MODBUS is not set # # security packages @@ -496,7 +546,6 @@ CONFIG_RT_USING_ADT=y # LVGL: powerful and easy-to-use embedded GUI library # # CONFIG_PKG_USING_LVGL is not set -# CONFIG_PKG_USING_LITTLEVGL2RTT is not set # CONFIG_PKG_USING_LV_MUSIC_DEMO is not set # CONFIG_PKG_USING_GUI_GUIDER_DEMO is not set @@ -572,6 +621,7 @@ CONFIG_RT_USING_ADT=y # CONFIG_PKG_USING_HASH_MATCH is not set # CONFIG_PKG_USING_ARMV7M_DWT_TOOL is not set # CONFIG_PKG_USING_VOFA_PLUS is not set +# CONFIG_PKG_USING_ZDEBUG is not set # # system packages @@ -608,6 +658,8 @@ CONFIG_RT_USING_ADT=y # CONFIG_PKG_USING_UC_COMMON is not set # CONFIG_PKG_USING_UC_MODBUS is not set # CONFIG_PKG_USING_FREERTOS_WRAPPER is not set +# CONFIG_PKG_USING_LITEOS_SDK is not set +# CONFIG_PKG_USING_TZ_DATABASE is not set # CONFIG_PKG_USING_CAIRO is not set # CONFIG_PKG_USING_PIXMAN is not set # CONFIG_PKG_USING_PARTITION is not set @@ -631,6 +683,7 @@ CONFIG_RT_USING_ADT=y # CONFIG_PKG_USING_QBOOT is not set # CONFIG_PKG_USING_PPOOL is not set # CONFIG_PKG_USING_OPENAMP is not set +# CONFIG_PKG_USING_RPMSG_LITE is not set # CONFIG_PKG_USING_LPM is not set # CONFIG_PKG_USING_TLSF is not set # CONFIG_PKG_USING_EVENT_RECORDER is not set @@ -644,6 +697,11 @@ CONFIG_RT_USING_ADT=y # CONFIG_PKG_USING_AGILE_UPGRADE is not set # CONFIG_PKG_USING_FLASH_BLOB is not set # CONFIG_PKG_USING_MLIBC is not set +# CONFIG_PKG_USING_TASK_MSG_BUS is not set +# CONFIG_PKG_USING_SFDB is not set +# CONFIG_PKG_USING_RTP is not set +# CONFIG_PKG_USING_REB is not set +# CONFIG_PKG_USING_R_RHEALSTONE is not set # # peripheral libraries and drivers @@ -708,6 +766,7 @@ CONFIG_RT_USING_ADT=y # CONFIG_PKG_USING_BALANCE is not set # CONFIG_PKG_USING_SHT2X is not set # CONFIG_PKG_USING_SHT3X is not set +# CONFIG_PKG_USING_SHT4X is not set # CONFIG_PKG_USING_AD7746 is not set # CONFIG_PKG_USING_ADT74XX is not set # CONFIG_PKG_USING_MAX17048 is not set @@ -808,6 +867,10 @@ CONFIG_RT_USING_ADT=y # CONFIG_PKG_USING_FINGERPRINT is not set # CONFIG_PKG_USING_BT_ECB02C is not set # CONFIG_PKG_USING_UAT is not set +# CONFIG_PKG_USING_ST7789 is not set +# CONFIG_PKG_USING_VS1003 is not set +# CONFIG_PKG_USING_X9555 is not set +# CONFIG_PKG_USING_SYSTEM_RUN_LED is not set # CONFIG_PKG_USING_SPI_TOOLS is not set # @@ -822,6 +885,7 @@ CONFIG_RT_USING_ADT=y # CONFIG_PKG_USING_ULAPACK is not set # CONFIG_PKG_USING_QUEST is not set # CONFIG_PKG_USING_NAXOS is not set +# CONFIG_PKG_USING_R_TINYMAIX is not set # # Signal Processing and Control Algorithm Packages @@ -831,6 +895,7 @@ CONFIG_RT_USING_ADT=y # CONFIG_PKG_USING_UKAL is not set # CONFIG_PKG_USING_DIGITALCTRL is not set # CONFIG_PKG_USING_KISSFFT is not set +# CONFIG_PKG_USING_CMSIS_DSP is not set # # miscellaneous packages @@ -868,6 +933,7 @@ CONFIG_RT_USING_ADT=y # CONFIG_PKG_USING_MINILZO is not set # CONFIG_PKG_USING_QUICKLZ is not set # CONFIG_PKG_USING_LZMA is not set +# CONFIG_PKG_USING_RALARAM is not set # CONFIG_PKG_USING_MULTIBUTTON is not set # CONFIG_PKG_USING_FLEXIBLE_BUTTON is not set # CONFIG_PKG_USING_CANFESTIVAL is not set @@ -1052,6 +1118,7 @@ CONFIG_RT_USING_ADT=y # # CONFIG_PKG_USING_ARDUINO_ADAFRUIT_GFX_LIBRARY is not set # CONFIG_PKG_USING_ARDUINO_U8G2 is not set +# CONFIG_PKG_USING_ARDUINO_TFT_ESPI is not set # CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ST7735 is not set # CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SSD1306 is not set # CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ILI9341 is not set @@ -1060,6 +1127,7 @@ CONFIG_RT_USING_ADT=y # # Timing # +# CONFIG_PKG_USING_ARDUINO_RTCLIB is not set # CONFIG_PKG_USING_ARDUINO_MSTIMER2 is not set # CONFIG_PKG_USING_ARDUINO_TICKER is not set # CONFIG_PKG_USING_ARDUINO_TASKSCHEDULER is not set @@ -1096,7 +1164,6 @@ CONFIG_RT_USING_ADT=y # # CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MFRC630 is not set # CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI5351 is not set -# CONFIG_PKG_USING_ARDUINO_RTCLIB is not set # # Signal IO @@ -1117,18 +1184,23 @@ CONFIG_RT_USING_ADT=y # # Hardware Drivers # +# CONFIG_DRV_DEBUG is not set # # On-chip Peripheral Drivers # +CONFIG_BSP_USING_IOPAD=y CONFIG_BSP_USING_UART=y CONFIG_RT_USING_UART1=y # CONFIG_RT_USING_UART0 is not set # CONFIG_BSP_USING_SPI is not set # CONFIG_BSP_USING_CAN is not set +# CONFIG_BSP_USING_GPIO is not set # CONFIG_BSP_USING_QSPI is not set -CONFIG_BSP_USING_ETH=y -CONFIG_RT_LWIP_PBUF_POOL_BUFSIZE=1700 +# CONFIG_BSP_USING_ETH is not set +# CONFIG_BSP_USING_PWM is not set +# CONFIG_BSP_USING_I2C is not set +# CONFIG_BSP_USING_SDIF is not set # # Board extended module Drivers @@ -1142,67 +1214,64 @@ CONFIG_TARGET_ARMV8_AARCH32=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # -# Board Configuration +# Soc configuration # -# CONFIG_TARGET_F2000_4 is not set -# CONFIG_TARGET_D2000 is not set +# CONFIG_TARGET_PHYTIUMPI is not set CONFIG_TARGET_E2000Q=y # CONFIG_TARGET_E2000D is not set # CONFIG_TARGET_E2000S is not set +# CONFIG_TARGET_FT2004 is not set +# CONFIG_TARGET_D2000 is not set +CONFIG_SOC_NAME="e2000" +CONFIG_TARGET_TYPE_NAME="q" +CONFIG_SOC_CORE_NUM=4 +CONFIG_F32BIT_MEMORY_ADDRESS=0x80000000 +CONFIG_F32BIT_MEMORY_LENGTH=0x80000000 +CONFIG_F64BIT_MEMORY_ADDRESS=0x2000000000 +CONFIG_F64BIT_MEMORY_LENGTH=0x800000000 CONFIG_TARGET_E2000=y +# CONFIG_USE_SPINLOCK is not set CONFIG_DEFAULT_DEBUG_PRINT_UART1=y # CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set # CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set # -# Components Configuration +# Board Configuration # -# CONFIG_USE_SPI is not set -# CONFIG_USE_QSPI is not set -CONFIG_USE_GIC=y -CONFIG_ENABLE_GICV3=y -CONFIG_USE_SERIAL=y +CONFIG_BOARD_NAME="demo" +# CONFIG_USE_SPI_IOPAD is not set +# CONFIG_USE_GPIO_IOPAD is not set +# CONFIG_USE_CAN_IOPAD is not set +# CONFIG_USE_QSPI_IOPAD is not set +# CONFIG_USE_PWM_IOPAD is not set +# CONFIG_USE_MIO_IOPAD is not set +# CONFIG_USE_TACHO_IOPAD is not set +# CONFIG_USE_UART_IOPAD is not set +# CONFIG_USE_THIRD_PARTY_IOPAD is not set +CONFIG_E2000Q_DEMO_BOARD=y # -# Usart Configuration +# IO mux configuration when board start up # -CONFIG_ENABLE_Pl011_UART=y -# CONFIG_USE_GPIO is not set -CONFIG_USE_ETH=y +# CONFIG_CUS_DEMO_BOARD is not set # -# Eth Configuration +# Sdk common configuration # -CONFIG_ENABLE_FXMAC=y -# CONFIG_ENABLE_FGMAC is not set -CONFIG_FXMAC_PHY_COMMON=y -# CONFIG_FXMAC_PHY_YT is not set -# CONFIG_USE_CAN is not set -# CONFIG_USE_I2C is not set -# CONFIG_USE_TIMER is not set -# CONFIG_USE_MIO is not set -# CONFIG_USE_SDMMC is not set -# CONFIG_USE_PCIE is not set -# CONFIG_USE_WDT is not set -# CONFIG_USE_DMA is not set -# CONFIG_USE_NAND is not set -# CONFIG_USE_RTC is not set -# CONFIG_USE_SATA is not set -# CONFIG_USE_USB is not set -# CONFIG_USE_ADC is not set -# CONFIG_USE_PWM is not set -# CONFIG_USE_IPC is not set -# CONFIG_USE_MEDIA is not set -# CONFIG_USE_SCMI_MHU is not set # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set diff --git a/bsp/phytium/aarch32/configs/e2000d_rtthread_test.h b/bsp/phytium/aarch32/configs/e2000q_demo_rtsmart.h similarity index 82% rename from bsp/phytium/aarch32/configs/e2000d_rtthread_test.h rename to bsp/phytium/aarch32/configs/e2000q_demo_rtsmart.h index ca41af627e..1d678446b3 100644 --- a/bsp/phytium/aarch32/configs/e2000d_rtthread_test.h +++ b/bsp/phytium/aarch32/configs/e2000q_demo_rtsmart.h @@ -7,6 +7,7 @@ /* RT-Thread Kernel */ #define RT_NAME_MAX 16 +#define RT_USING_SMART #define RT_USING_SMP #define RT_CPUS_NR 2 #define RT_ALIGN_SIZE 4 @@ -28,7 +29,10 @@ #define RT_KSERVICE_USING_STDLIB #define RT_KPRINTF_USING_LONGLONG -#define RT_DEBUG +#define RT_USING_DEBUG +#define RT_DEBUGING_COLOR +#define RT_DEBUGING_CONTEXT +#define RT_DEBUGING_INIT /* Inter-Thread communication */ @@ -37,6 +41,7 @@ #define RT_USING_EVENT #define RT_USING_MAILBOX #define RT_USING_MESSAGEQUEUE +#define RT_USING_MESSAGEQUEUE_PRIORITY /* Memory Management */ @@ -47,20 +52,19 @@ #define RT_USING_SLAB_AS_HEAP #define RT_USING_HEAP_ISR #define RT_USING_HEAP - -/* Kernel Device Object */ - #define RT_USING_DEVICE #define RT_USING_CONSOLE #define RT_CONSOLEBUF_SIZE 256 #define RT_CONSOLE_DEVICE_NAME "uart1" -#define RT_VER_NUM 0x50001 +#define RT_VER_NUM 0x50100 +#define RT_BACKTRACE_LEVEL_MAX_NR 32 #define RT_USING_CACHE #define RT_USING_HW_ATOMIC #define RT_USING_CPU_FFS #define ARCH_MM_MMU #define ARCH_ARM #define ARCH_ARM_MMU +#define KERNEL_VADDR_START 0xc0000000 #define ARCH_ARM_CORTEX_A #define RT_USING_GIC_V3 @@ -83,6 +87,7 @@ #define MSH_USING_BUILT_IN_COMMANDS #define FINSH_USING_DESCRIPTION #define FINSH_ARG_MAX 10 +#define FINSH_USING_OPTION_COMPLETION /* DFS: device virtual file system */ @@ -110,6 +115,15 @@ #define RT_DFS_ELM_MUTEX_TIMEOUT 3000 #define RT_USING_DFS_DEVFS #define RT_USING_DFS_RAMFS +#define RT_USING_DFS_MQUEUE +#define RT_USING_LWP +#define RT_LWP_MAX_NR 30 +#define LWP_TASK_STACK_SIZE 16384 +#define RT_CH_MSG_MAX_NR 1024 +#define LWP_CONSOLE_INPUT_BUFFER_SIZE 1024 +#define LWP_TID_MAX_NR 64 +#define LWP_ENABLE_ASID +#define RT_LWP_SHM_MAX_NR 64 /* Device Drivers */ @@ -122,23 +136,27 @@ #define RT_USING_SERIAL_V1 #define RT_SERIAL_USING_DMA #define RT_SERIAL_RB_BUFSZ 1024 +#define RT_USING_TTY #define RT_USING_NULL #define RT_USING_ZERO #define RT_USING_RANDOM #define RT_USING_RTC -#define RT_USING_SDIO -#define RT_SDIO_STACK_SIZE 4096 -#define RT_SDIO_THREAD_PRIORITY 15 -#define RT_MMCSD_STACK_SIZE 4096 -#define RT_MMCSD_THREAD_PREORITY 22 -#define RT_MMCSD_MAX_PARTITION 16 +#define RT_USING_DEV_BUS +#define RT_USING_KTIME /* Using USB */ /* C/C++ and POSIX layer */ -#define RT_LIBC_DEFAULT_TIMEZONE 8 +/* ISO-ANSI C layer */ + +/* Timezone and Daylight Saving Time */ + +#define RT_LIBC_USING_LIGHT_TZ_DST +#define RT_LIBC_TZ_DEFAULT_HOUR 8 +#define RT_LIBC_TZ_DEFAULT_MIN 0 +#define RT_LIBC_TZ_DEFAULT_SEC 0 /* POSIX (Portable Operating System Interface) layer */ @@ -226,44 +244,18 @@ #define RT_USING_UTEST #define UTEST_THR_STACK_SIZE 4096 #define UTEST_THR_PRIORITY 20 +#define RT_USING_RESOURCE_ID #define RT_USING_ADT +#define RT_USING_ADT_AVL +#define RT_USING_ADT_BITMAP +#define RT_USING_ADT_HASHMAP +#define RT_USING_ADT_REF + +/* Memory management */ + /* RT-Thread Utestcases */ -#define RT_USING_UTESTCASES - -/* Utest Self Testcase */ - -#define UTEST_SELF_PASS_TC - -/* Kernel Testcase */ - -#define UTEST_MEMHEAP_TC -#define UTEST_SLAB_TC -#define UTEST_IRQ_TC -#define UTEST_SEMAPHORE_TC -#define UTEST_EVENT_TC -#define UTEST_TIMER_TC -#define UTEST_MUTEX_TC -#define UTEST_MAILBOX_TC -#define UTEST_THREAD_TC -#define UTEST_ATOMIC_TC - -/* CPP11 Testcase */ - - -/* Utest Serial Testcase */ - - -/* RTT Posix Testcase */ - -#define RTT_POSIX_TESTCASE -#define RTT_POSIX_TESTCASE_STDIO_H -#define RTT_POSIX_TESTCASE_STDLIB_H -#define RTT_POSIX_TESTCASE_UNISTD_H - -/* Memory Management Subsytem Testcase */ - /* RT-Thread online packages */ @@ -278,6 +270,9 @@ /* Wiced WiFi */ +/* CYW43012 WiFi */ + + /* IoT Cloud */ @@ -347,7 +342,7 @@ /* Arduino libraries */ -/* Projects */ +/* Projects and Demos */ /* Sensors */ @@ -380,15 +375,12 @@ /* Hardware Drivers */ + /* On-chip Peripheral Drivers */ +#define BSP_USING_IOPAD #define BSP_USING_UART #define RT_USING_UART1 -#define BSP_USING_ETH -#define RT_LWIP_PBUF_POOL_BUFSIZE 1700 -#define BSP_USING_SDIO -#define BSP_USING_SDCARD_FATFS -#define USING_SDIO1 /* Board extended module Drivers */ @@ -399,49 +391,34 @@ #define TARGET_ARMV8_AARCH32 #define USE_AARCH64_L1_TO_AARCH32 -/* Board Configuration */ +/* Soc configuration */ -#define TARGET_E2000D +#define TARGET_E2000Q +#define SOC_NAME "e2000" +#define TARGET_TYPE_NAME "q" +#define SOC_CORE_NUM 4 +#define F32BIT_MEMORY_ADDRESS 0x80000000 +#define F32BIT_MEMORY_LENGTH 0x80000000 +#define F64BIT_MEMORY_ADDRESS 0x2000000000 +#define F64BIT_MEMORY_LENGTH 0x800000000 #define TARGET_E2000 #define DEFAULT_DEBUG_PRINT_UART1 -/* Components Configuration */ +/* Board Configuration */ -#define USE_GIC -#define ENABLE_GICV3 -#define USE_IOPAD -#define ENABLE_IOPAD -#define USE_SERIAL +#define BOARD_NAME "demo" +#define E2000Q_DEMO_BOARD -/* Usart Configuration */ +/* IO mux configuration when board start up */ -#define ENABLE_Pl011_UART -#define USE_ETH - -/* Eth Configuration */ - -#define ENABLE_FXMAC -#define FXMAC_PHY_COMMON /* Sdk common configuration */ #define LOG_ERROR #define USE_DEFAULT_INTERRUPT_CONFIG #define INTERRUPT_ROLE_MASTER -#define PHYTIUM_RTT_TEST -#define ENABLE_RTT_UTEST -/* RT-Thread Utestcases */ - -/* Kernel Testcase */ - -/* CPP11 Testcase */ - -/* Utest Serial Testcase */ - -/* RTT Posix Testcase */ - -/* Memory Management Subsytem Testcase */ +/* Image information configuration */ #endif diff --git a/bsp/phytium/aarch32/configs/e2000d_rtthread b/bsp/phytium/aarch32/configs/e2000q_demo_rtthread similarity index 92% rename from bsp/phytium/aarch32/configs/e2000d_rtthread rename to bsp/phytium/aarch32/configs/e2000q_demo_rtthread index dde45595a4..5d745f167f 100644 --- a/bsp/phytium/aarch32/configs/e2000d_rtthread +++ b/bsp/phytium/aarch32/configs/e2000q_demo_rtthread @@ -72,23 +72,15 @@ CONFIG_RT_USING_SLAB_AS_HEAP=y # CONFIG_RT_USING_MEMTRACE is not set CONFIG_RT_USING_HEAP_ISR=y CONFIG_RT_USING_HEAP=y - -# -# Kernel Device Object -# CONFIG_RT_USING_DEVICE=y # CONFIG_RT_USING_DEVICE_OPS is not set -# CONFIG_RT_USING_DM is not set # CONFIG_RT_USING_INTERRUPT_INFO is not set CONFIG_RT_USING_CONSOLE=y CONFIG_RT_CONSOLEBUF_SIZE=256 CONFIG_RT_CONSOLE_DEVICE_NAME="uart1" -CONFIG_RT_VER_NUM=0x50001 +CONFIG_RT_VER_NUM=0x50100 # CONFIG_RT_USING_STDC_ATOMIC is not set - -# -# RT-Thread Architecture -# +CONFIG_RT_BACKTRACE_LEVEL_MAX_NR=32 CONFIG_RT_USING_CACHE=y CONFIG_RT_USING_HW_ATOMIC=y # CONFIG_ARCH_ARM_BOOTWITH_FLUSH_CACHE is not set @@ -127,6 +119,7 @@ CONFIG_FINSH_USING_DESCRIPTION=y # CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set # CONFIG_FINSH_USING_AUTH is not set CONFIG_FINSH_ARG_MAX=10 +CONFIG_FINSH_USING_OPTION_COMPLETION=y # # DFS: device virtual file system @@ -175,6 +168,7 @@ CONFIG_RT_USING_DFS_MQUEUE=y # # Device Drivers # +# CONFIG_RT_USING_DM is not set CONFIG_RT_USING_DEVICE_IPC=y CONFIG_RT_UNAMED_PIPE_NUMBER=64 CONFIG_RT_USING_SYSTEM_WORKQUEUE=y @@ -200,17 +194,10 @@ CONFIG_RT_USING_RANDOM=y # CONFIG_RT_USING_MTD_NOR is not set # CONFIG_RT_USING_MTD_NAND is not set # CONFIG_RT_USING_PM is not set -# CONFIG_RT_USING_FDT is not set CONFIG_RT_USING_RTC=y # CONFIG_RT_USING_ALARM is not set # CONFIG_RT_USING_SOFT_RTC is not set -CONFIG_RT_USING_SDIO=y -CONFIG_RT_SDIO_STACK_SIZE=4096 -CONFIG_RT_SDIO_THREAD_PRIORITY=15 -CONFIG_RT_MMCSD_STACK_SIZE=4096 -CONFIG_RT_MMCSD_THREAD_PREORITY=22 -CONFIG_RT_MMCSD_MAX_PARTITION=16 -# CONFIG_RT_SDIO_DEBUG is not set +# CONFIG_RT_USING_SDIO is not set # CONFIG_RT_USING_SPI is not set # CONFIG_RT_USING_WDT is not set # CONFIG_RT_USING_AUDIO is not set @@ -223,6 +210,7 @@ CONFIG_RT_MMCSD_MAX_PARTITION=16 CONFIG_RT_USING_DEV_BUS=y # CONFIG_RT_USING_WIFI is not set # CONFIG_RT_USING_VIRTIO is not set +CONFIG_RT_USING_KTIME=y # # Using USB @@ -234,7 +222,19 @@ CONFIG_RT_USING_DEV_BUS=y # # C/C++ and POSIX layer # -CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8 + +# +# ISO-ANSI C layer +# + +# +# Timezone and Daylight Saving Time +# +# CONFIG_RT_LIBC_USING_FULL_TZ_DST is not set +CONFIG_RT_LIBC_USING_LIGHT_TZ_DST=y +CONFIG_RT_LIBC_TZ_DEFAULT_HOUR=8 +CONFIG_RT_LIBC_TZ_DEFAULT_MIN=0 +CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 # # POSIX (Portable Operating System Interface) layer @@ -244,6 +244,8 @@ CONFIG_RT_USING_POSIX_DEVIO=y CONFIG_RT_USING_POSIX_STDIO=y CONFIG_RT_USING_POSIX_POLL=y CONFIG_RT_USING_POSIX_SELECT=y +# CONFIG_RT_USING_POSIX_EVENTFD is not set +# CONFIG_RT_USING_POSIX_TIMERFD is not set # CONFIG_RT_USING_POSIX_SOCKET is not set CONFIG_RT_USING_POSIX_TERMIOS=y CONFIG_RT_USING_POSIX_AIO=y @@ -367,7 +369,11 @@ CONFIG_RT_USING_ADT_HASHMAP=y CONFIG_RT_USING_ADT_REF=y # CONFIG_RT_USING_RT_LINK is not set # CONFIG_RT_USING_VBUS is not set -CONFIG_RT_USING_KTIME=y + +# +# Memory management +# +# CONFIG_RT_USING_MEMBLOCK is not set # # RT-Thread Utestcases @@ -392,7 +398,6 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_KAWAII_MQTT is not set # CONFIG_PKG_USING_BC28_MQTT is not set # CONFIG_PKG_USING_WEBTERMINAL is not set -# CONFIG_PKG_USING_LIBMODBUS is not set # CONFIG_PKG_USING_FREEMODBUS is not set # CONFIG_PKG_USING_NANOPB is not set @@ -410,6 +415,11 @@ CONFIG_RT_USING_KTIME=y # # CONFIG_PKG_USING_WLAN_WICED is not set # CONFIG_PKG_USING_RW007 is not set + +# +# CYW43012 WiFi +# +# CONFIG_PKG_USING_WLAN_CYW43012 is not set # CONFIG_PKG_USING_COAP is not set # CONFIG_PKG_USING_NOPOLL is not set # CONFIG_PKG_USING_NETUTILS is not set @@ -452,6 +462,7 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_NMEALIB is not set # CONFIG_PKG_USING_PDULIB is not set # CONFIG_PKG_USING_BTSTACK is not set +# CONFIG_PKG_USING_BT_CYW43012 is not set # CONFIG_PKG_USING_LORAWAN_ED_STACK is not set # CONFIG_PKG_USING_WAYZ_IOTKIT is not set # CONFIG_PKG_USING_MAVLINK is not set @@ -471,6 +482,8 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_ZFTP is not set # CONFIG_PKG_USING_WOL is not set # CONFIG_PKG_USING_ZEPHYR_POLLING is not set +# CONFIG_PKG_USING_MATTER_ADAPTATION_LAYER is not set +# CONFIG_PKG_USING_LHC_MODBUS is not set # # security packages @@ -517,7 +530,6 @@ CONFIG_RT_USING_KTIME=y # LVGL: powerful and easy-to-use embedded GUI library # # CONFIG_PKG_USING_LVGL is not set -# CONFIG_PKG_USING_LITTLEVGL2RTT is not set # CONFIG_PKG_USING_LV_MUSIC_DEMO is not set # CONFIG_PKG_USING_GUI_GUIDER_DEMO is not set @@ -593,6 +605,7 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_HASH_MATCH is not set # CONFIG_PKG_USING_ARMV7M_DWT_TOOL is not set # CONFIG_PKG_USING_VOFA_PLUS is not set +# CONFIG_PKG_USING_ZDEBUG is not set # # system packages @@ -629,6 +642,8 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_UC_COMMON is not set # CONFIG_PKG_USING_UC_MODBUS is not set # CONFIG_PKG_USING_FREERTOS_WRAPPER is not set +# CONFIG_PKG_USING_LITEOS_SDK is not set +# CONFIG_PKG_USING_TZ_DATABASE is not set # CONFIG_PKG_USING_CAIRO is not set # CONFIG_PKG_USING_PIXMAN is not set # CONFIG_PKG_USING_PARTITION is not set @@ -652,6 +667,7 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_QBOOT is not set # CONFIG_PKG_USING_PPOOL is not set # CONFIG_PKG_USING_OPENAMP is not set +# CONFIG_PKG_USING_RPMSG_LITE is not set # CONFIG_PKG_USING_LPM is not set # CONFIG_PKG_USING_TLSF is not set # CONFIG_PKG_USING_EVENT_RECORDER is not set @@ -664,6 +680,12 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_QPC is not set # CONFIG_PKG_USING_AGILE_UPGRADE is not set # CONFIG_PKG_USING_FLASH_BLOB is not set +# CONFIG_PKG_USING_MLIBC is not set +# CONFIG_PKG_USING_TASK_MSG_BUS is not set +# CONFIG_PKG_USING_SFDB is not set +# CONFIG_PKG_USING_RTP is not set +# CONFIG_PKG_USING_REB is not set +# CONFIG_PKG_USING_R_RHEALSTONE is not set # # peripheral libraries and drivers @@ -728,6 +750,7 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_BALANCE is not set # CONFIG_PKG_USING_SHT2X is not set # CONFIG_PKG_USING_SHT3X is not set +# CONFIG_PKG_USING_SHT4X is not set # CONFIG_PKG_USING_AD7746 is not set # CONFIG_PKG_USING_ADT74XX is not set # CONFIG_PKG_USING_MAX17048 is not set @@ -748,6 +771,7 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_FT5426 is not set # CONFIG_PKG_USING_FT6236 is not set # CONFIG_PKG_USING_XPT2046_TOUCH is not set +# CONFIG_PKG_USING_CST816X is not set # CONFIG_PKG_USING_REALTEK_AMEBA is not set # CONFIG_PKG_USING_STM32_SDIO is not set # CONFIG_PKG_USING_ESP_IDF is not set @@ -823,7 +847,15 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_IO_INPUT_FILTER is not set # CONFIG_PKG_USING_RASPBERRYPI_PICO_SDK is not set # CONFIG_PKG_USING_LRF_NV7LIDAR is not set +# CONFIG_PKG_USING_AIP650 is not set # CONFIG_PKG_USING_FINGERPRINT is not set +# CONFIG_PKG_USING_BT_ECB02C is not set +# CONFIG_PKG_USING_UAT is not set +# CONFIG_PKG_USING_ST7789 is not set +# CONFIG_PKG_USING_VS1003 is not set +# CONFIG_PKG_USING_X9555 is not set +# CONFIG_PKG_USING_SYSTEM_RUN_LED is not set +# CONFIG_PKG_USING_SPI_TOOLS is not set # # AI packages @@ -837,12 +869,17 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_ULAPACK is not set # CONFIG_PKG_USING_QUEST is not set # CONFIG_PKG_USING_NAXOS is not set +# CONFIG_PKG_USING_R_TINYMAIX is not set # # Signal Processing and Control Algorithm Packages # # CONFIG_PKG_USING_FIRE_PID_CURVE is not set +# CONFIG_PKG_USING_QPID is not set # CONFIG_PKG_USING_UKAL is not set +# CONFIG_PKG_USING_DIGITALCTRL is not set +# CONFIG_PKG_USING_KISSFFT is not set +# CONFIG_PKG_USING_CMSIS_DSP is not set # # miscellaneous packages @@ -880,6 +917,7 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_MINILZO is not set # CONFIG_PKG_USING_QUICKLZ is not set # CONFIG_PKG_USING_LZMA is not set +# CONFIG_PKG_USING_RALARAM is not set # CONFIG_PKG_USING_MULTIBUTTON is not set # CONFIG_PKG_USING_FLEXIBLE_BUTTON is not set # CONFIG_PKG_USING_CANFESTIVAL is not set @@ -889,7 +927,6 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_DSTR is not set # CONFIG_PKG_USING_TINYFRAME is not set # CONFIG_PKG_USING_KENDRYTE_DEMO is not set -# CONFIG_PKG_USING_DIGITALCTRL is not set # CONFIG_PKG_USING_UPACKER is not set # CONFIG_PKG_USING_UPARAM is not set # CONFIG_PKG_USING_HELLO is not set @@ -914,8 +951,9 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_RTDUINO is not set # -# Projects +# Projects and Demos # +# CONFIG_PKG_USING_ARDUINO_MSGQ_C_CPP_DEMO is not set # CONFIG_PKG_USING_ARDUINO_ULTRASOUND_RADAR is not set # CONFIG_PKG_USING_ARDUINO_SENSOR_KIT is not set # CONFIG_PKG_USING_ARDUINO_MATLAB_SUPPORT is not set @@ -1062,14 +1100,21 @@ CONFIG_RT_USING_KTIME=y # # Display # +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_GFX_LIBRARY is not set # CONFIG_PKG_USING_ARDUINO_U8G2 is not set -# CONFIG_PKG_USING_ARDUINO_U8GLIB_ARDUINO is not set +# CONFIG_PKG_USING_ARDUINO_TFT_ESPI is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ST7735 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SSD1306 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ILI9341 is not set # CONFIG_PKG_USING_SEEED_TM1637 is not set # # Timing # +# CONFIG_PKG_USING_ARDUINO_RTCLIB is not set # CONFIG_PKG_USING_ARDUINO_MSTIMER2 is not set +# CONFIG_PKG_USING_ARDUINO_TICKER is not set +# CONFIG_PKG_USING_ARDUINO_TASKSCHEDULER is not set # # Data Processing @@ -1103,7 +1148,6 @@ CONFIG_RT_USING_KTIME=y # # CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MFRC630 is not set # CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI5351 is not set -# CONFIG_PKG_USING_ARDUINO_RTCLIB is not set # # Signal IO @@ -1124,10 +1168,12 @@ CONFIG_RT_USING_KTIME=y # # Hardware Drivers # +# CONFIG_DRV_DEBUG is not set # # On-chip Peripheral Drivers # +CONFIG_BSP_USING_IOPAD=y CONFIG_BSP_USING_UART=y CONFIG_RT_USING_UART1=y # CONFIG_RT_USING_UART0 is not set @@ -1135,13 +1181,10 @@ CONFIG_RT_USING_UART1=y # CONFIG_BSP_USING_CAN is not set # CONFIG_BSP_USING_GPIO is not set # CONFIG_BSP_USING_QSPI is not set -CONFIG_BSP_USING_ETH=y -CONFIG_RT_LWIP_PBUF_POOL_BUFSIZE=1700 -CONFIG_BSP_USING_SDIO=y -CONFIG_BSP_USING_SDCARD_FATFS=y -# CONFIG_USING_SDIO0 is not set -CONFIG_USING_SDIO1=y -# CONFIG_USING_EMMC is not set +# CONFIG_BSP_USING_ETH is not set +# CONFIG_BSP_USING_PWM is not set +# CONFIG_BSP_USING_I2C is not set +# CONFIG_BSP_USING_SDIF is not set # # Board extended module Drivers @@ -1155,60 +1198,46 @@ CONFIG_TARGET_ARMV8_AARCH32=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # -# Board Configuration +# Soc configuration # -# CONFIG_TARGET_F2000_4 is not set -# CONFIG_TARGET_D2000 is not set -# CONFIG_TARGET_E2000Q is not set -CONFIG_TARGET_E2000D=y +# CONFIG_TARGET_PHYTIUMPI is not set +CONFIG_TARGET_E2000Q=y +# CONFIG_TARGET_E2000D is not set # CONFIG_TARGET_E2000S is not set +# CONFIG_TARGET_FT2004 is not set +# CONFIG_TARGET_D2000 is not set +CONFIG_SOC_NAME="e2000" +CONFIG_TARGET_TYPE_NAME="q" +CONFIG_SOC_CORE_NUM=4 +CONFIG_F32BIT_MEMORY_ADDRESS=0x80000000 +CONFIG_F32BIT_MEMORY_LENGTH=0x80000000 +CONFIG_F64BIT_MEMORY_ADDRESS=0x2000000000 +CONFIG_F64BIT_MEMORY_LENGTH=0x800000000 CONFIG_TARGET_E2000=y +# CONFIG_USE_SPINLOCK is not set CONFIG_DEFAULT_DEBUG_PRINT_UART1=y # CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set # CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set # -# Components Configuration +# Board Configuration # -# CONFIG_USE_SPI is not set -# CONFIG_USE_QSPI is not set -CONFIG_USE_GIC=y -CONFIG_ENABLE_GICV3=y -CONFIG_USE_IOPAD=y -CONFIG_ENABLE_IOPAD=y -CONFIG_USE_SERIAL=y +CONFIG_BOARD_NAME="demo" +# CONFIG_USE_SPI_IOPAD is not set +# CONFIG_USE_GPIO_IOPAD is not set +# CONFIG_USE_CAN_IOPAD is not set +# CONFIG_USE_QSPI_IOPAD is not set +# CONFIG_USE_PWM_IOPAD is not set +# CONFIG_USE_MIO_IOPAD is not set +# CONFIG_USE_TACHO_IOPAD is not set +# CONFIG_USE_UART_IOPAD is not set +# CONFIG_USE_THIRD_PARTY_IOPAD is not set +CONFIG_E2000Q_DEMO_BOARD=y # -# Usart Configuration +# IO mux configuration when board start up # -CONFIG_ENABLE_Pl011_UART=y -# CONFIG_USE_GPIO is not set -CONFIG_USE_ETH=y - -# -# Eth Configuration -# -CONFIG_ENABLE_FXMAC=y -# CONFIG_ENABLE_FGMAC is not set -CONFIG_FXMAC_PHY_COMMON=y -# CONFIG_FXMAC_PHY_YT is not set -# CONFIG_USE_CAN is not set -# CONFIG_USE_I2C is not set -# CONFIG_USE_TIMER is not set -# CONFIG_USE_MIO is not set -# CONFIG_USE_SDMMC is not set -# CONFIG_USE_PCIE is not set -# CONFIG_USE_WDT is not set -# CONFIG_USE_DMA is not set -# CONFIG_USE_NAND is not set -# CONFIG_USE_RTC is not set -# CONFIG_USE_SATA is not set -# CONFIG_USE_USB is not set -# CONFIG_USE_ADC is not set -# CONFIG_USE_PWM is not set -# CONFIG_USE_IPC is not set -# CONFIG_USE_MEDIA is not set -# CONFIG_USE_SCMI_MHU is not set +# CONFIG_CUS_DEMO_BOARD is not set # # Sdk common configuration @@ -1225,3 +1254,8 @@ CONFIG_LOG_ERROR=y CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y CONFIG_INTERRUPT_ROLE_MASTER=y # CONFIG_INTERRUPT_ROLE_SLAVE is not set + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set diff --git a/bsp/phytium/aarch32/configs/e2000q_rtsmart.h b/bsp/phytium/aarch32/configs/e2000q_demo_rtthread.h similarity index 80% rename from bsp/phytium/aarch32/configs/e2000q_rtsmart.h rename to bsp/phytium/aarch32/configs/e2000q_demo_rtthread.h index df5914ff60..0751ddcbc3 100644 --- a/bsp/phytium/aarch32/configs/e2000q_rtsmart.h +++ b/bsp/phytium/aarch32/configs/e2000q_demo_rtthread.h @@ -7,9 +7,8 @@ /* RT-Thread Kernel */ #define RT_NAME_MAX 16 -#define RT_USING_SMART #define RT_USING_SMP -#define RT_CPUS_NR 4 +#define RT_CPUS_NR 2 #define RT_ALIGN_SIZE 4 #define RT_THREAD_PRIORITY_32 #define RT_THREAD_PRIORITY_MAX 32 @@ -29,7 +28,10 @@ #define RT_KSERVICE_USING_STDLIB #define RT_KPRINTF_USING_LONGLONG -#define RT_DEBUG +#define RT_USING_DEBUG +#define RT_DEBUGING_COLOR +#define RT_DEBUGING_CONTEXT +#define RT_DEBUGING_INIT /* Inter-Thread communication */ @@ -38,6 +40,7 @@ #define RT_USING_EVENT #define RT_USING_MAILBOX #define RT_USING_MESSAGEQUEUE +#define RT_USING_MESSAGEQUEUE_PRIORITY /* Memory Management */ @@ -48,21 +51,18 @@ #define RT_USING_SLAB_AS_HEAP #define RT_USING_HEAP_ISR #define RT_USING_HEAP - -/* Kernel Device Object */ - #define RT_USING_DEVICE #define RT_USING_CONSOLE #define RT_CONSOLEBUF_SIZE 256 #define RT_CONSOLE_DEVICE_NAME "uart1" -#define RT_VER_NUM 0x50001 +#define RT_VER_NUM 0x50100 +#define RT_BACKTRACE_LEVEL_MAX_NR 32 #define RT_USING_CACHE #define RT_USING_HW_ATOMIC #define RT_USING_CPU_FFS #define ARCH_MM_MMU #define ARCH_ARM #define ARCH_ARM_MMU -#define KERNEL_VADDR_START 0xc0000000 #define ARCH_ARM_CORTEX_A #define RT_USING_GIC_V3 @@ -85,6 +85,7 @@ #define MSH_USING_BUILT_IN_COMMANDS #define FINSH_USING_DESCRIPTION #define FINSH_ARG_MAX 10 +#define FINSH_USING_OPTION_COMPLETION /* DFS: device virtual file system */ @@ -95,16 +96,24 @@ #define RT_USING_DFS_V1 #define DFS_FILESYSTEMS_MAX 4 #define DFS_FILESYSTEM_TYPES_MAX 4 +#define RT_USING_DFS_ELMFAT + +/* elm-chan's FatFs, Generic FAT Filesystem Module */ + +#define RT_DFS_ELM_CODE_PAGE 437 +#define RT_DFS_ELM_WORD_ACCESS +#define RT_DFS_ELM_USE_LFN_3 +#define RT_DFS_ELM_USE_LFN 3 +#define RT_DFS_ELM_LFN_UNICODE_0 +#define RT_DFS_ELM_LFN_UNICODE 0 +#define RT_DFS_ELM_MAX_LFN 255 +#define RT_DFS_ELM_DRIVES 2 +#define RT_DFS_ELM_MAX_SECTOR_SIZE 512 +#define RT_DFS_ELM_REENTRANT +#define RT_DFS_ELM_MUTEX_TIMEOUT 3000 #define RT_USING_DFS_DEVFS #define RT_USING_DFS_RAMFS -#define RT_USING_LWP -#define RT_LWP_MAX_NR 30 -#define LWP_TASK_STACK_SIZE 16384 -#define RT_CH_MSG_MAX_NR 1024 -#define LWP_CONSOLE_INPUT_BUFFER_SIZE 1024 -#define LWP_TID_MAX_NR 64 -#define LWP_ENABLE_ASID -#define RT_LWP_SHM_MAX_NR 64 +#define RT_USING_DFS_MQUEUE /* Device Drivers */ @@ -117,18 +126,26 @@ #define RT_USING_SERIAL_V1 #define RT_SERIAL_USING_DMA #define RT_SERIAL_RB_BUFSZ 1024 -#define RT_USING_TTY #define RT_USING_NULL #define RT_USING_ZERO #define RT_USING_RANDOM #define RT_USING_RTC +#define RT_USING_DEV_BUS +#define RT_USING_KTIME /* Using USB */ /* C/C++ and POSIX layer */ -#define RT_LIBC_DEFAULT_TIMEZONE 8 +/* ISO-ANSI C layer */ + +/* Timezone and Daylight Saving Time */ + +#define RT_LIBC_USING_LIGHT_TZ_DST +#define RT_LIBC_TZ_DEFAULT_HOUR 8 +#define RT_LIBC_TZ_DEFAULT_MIN 0 +#define RT_LIBC_TZ_DEFAULT_SEC 0 /* POSIX (Portable Operating System Interface) layer */ @@ -216,7 +233,15 @@ #define RT_USING_UTEST #define UTEST_THR_STACK_SIZE 4096 #define UTEST_THR_PRIORITY 20 +#define RT_USING_RESOURCE_ID #define RT_USING_ADT +#define RT_USING_ADT_AVL +#define RT_USING_ADT_BITMAP +#define RT_USING_ADT_HASHMAP +#define RT_USING_ADT_REF + +/* Memory management */ + /* RT-Thread Utestcases */ @@ -234,6 +259,9 @@ /* Wiced WiFi */ +/* CYW43012 WiFi */ + + /* IoT Cloud */ @@ -336,12 +364,12 @@ /* Hardware Drivers */ + /* On-chip Peripheral Drivers */ +#define BSP_USING_IOPAD #define BSP_USING_UART #define RT_USING_UART1 -#define BSP_USING_ETH -#define RT_LWIP_PBUF_POOL_BUFSIZE 1700 /* Board extended module Drivers */ @@ -352,29 +380,34 @@ #define TARGET_ARMV8_AARCH32 #define USE_AARCH64_L1_TO_AARCH32 -/* Board Configuration */ +/* Soc configuration */ #define TARGET_E2000Q +#define SOC_NAME "e2000" +#define TARGET_TYPE_NAME "q" +#define SOC_CORE_NUM 4 +#define F32BIT_MEMORY_ADDRESS 0x80000000 +#define F32BIT_MEMORY_LENGTH 0x80000000 +#define F64BIT_MEMORY_ADDRESS 0x2000000000 +#define F64BIT_MEMORY_LENGTH 0x800000000 #define TARGET_E2000 #define DEFAULT_DEBUG_PRINT_UART1 -/* Components Configuration */ +/* Board Configuration */ -#define USE_GIC -#define ENABLE_GICV3 -#define USE_SERIAL +#define BOARD_NAME "demo" +#define E2000Q_DEMO_BOARD -/* Usart Configuration */ +/* IO mux configuration when board start up */ -#define ENABLE_Pl011_UART -#define USE_ETH -/* Eth Configuration */ +/* Sdk common configuration */ -#define ENABLE_FXMAC -#define FXMAC_PHY_COMMON #define LOG_ERROR #define USE_DEFAULT_INTERRUPT_CONFIG #define INTERRUPT_ROLE_MASTER +/* Image information configuration */ + + #endif diff --git a/bsp/phytium/aarch32/configs/e2000q_rtthread.h b/bsp/phytium/aarch32/configs/e2000q_rtthread.h deleted file mode 100644 index 07749b2cf8..0000000000 --- a/bsp/phytium/aarch32/configs/e2000q_rtthread.h +++ /dev/null @@ -1,369 +0,0 @@ -#ifndef RT_CONFIG_H__ -#define RT_CONFIG_H__ - -/* Automatically generated file; DO NOT EDIT. */ -/* RT-Thread Project Configuration */ - -/* RT-Thread Kernel */ - -#define RT_NAME_MAX 16 -#define RT_USING_SMP -#define RT_CPUS_NR 4 -#define RT_ALIGN_SIZE 4 -#define RT_THREAD_PRIORITY_32 -#define RT_THREAD_PRIORITY_MAX 32 -#define RT_TICK_PER_SECOND 1000 -#define RT_USING_OVERFLOW_CHECK -#define RT_USING_HOOK -#define RT_HOOK_USING_FUNC_PTR -#define RT_USING_IDLE_HOOK -#define RT_IDLE_HOOK_LIST_SIZE 4 -#define IDLE_THREAD_STACK_SIZE 4096 -#define SYSTEM_THREAD_STACK_SIZE 4096 -#define RT_USING_TIMER_SOFT -#define RT_TIMER_THREAD_PRIO 4 -#define RT_TIMER_THREAD_STACK_SIZE 4096 - -/* kservice optimization */ - -#define RT_KSERVICE_USING_STDLIB -#define RT_KPRINTF_USING_LONGLONG -#define RT_DEBUG - -/* Inter-Thread communication */ - -#define RT_USING_SEMAPHORE -#define RT_USING_MUTEX -#define RT_USING_EVENT -#define RT_USING_MAILBOX -#define RT_USING_MESSAGEQUEUE - -/* Memory Management */ - -#define RT_PAGE_MAX_ORDER 11 -#define RT_USING_SLAB -#define RT_USING_MEMHEAP -#define RT_MEMHEAP_FAST_MODE -#define RT_USING_SLAB_AS_HEAP -#define RT_USING_HEAP_ISR -#define RT_USING_HEAP - -/* Kernel Device Object */ - -#define RT_USING_DEVICE -#define RT_USING_CONSOLE -#define RT_CONSOLEBUF_SIZE 256 -#define RT_CONSOLE_DEVICE_NAME "uart1" -#define RT_VER_NUM 0x50001 -#define RT_USING_CACHE -#define RT_USING_HW_ATOMIC -#define RT_USING_CPU_FFS -#define ARCH_MM_MMU -#define ARCH_ARM -#define ARCH_ARM_MMU -#define ARCH_ARM_CORTEX_A -#define RT_USING_GIC_V3 - -/* RT-Thread Components */ - -#define RT_USING_COMPONENTS_INIT -#define RT_USING_USER_MAIN -#define RT_MAIN_THREAD_STACK_SIZE 8192 -#define RT_MAIN_THREAD_PRIORITY 10 -#define RT_USING_MSH -#define RT_USING_FINSH -#define FINSH_USING_MSH -#define FINSH_THREAD_NAME "tshell" -#define FINSH_THREAD_PRIORITY 20 -#define FINSH_THREAD_STACK_SIZE 4096 -#define FINSH_USING_HISTORY -#define FINSH_HISTORY_LINES 5 -#define FINSH_USING_SYMTAB -#define FINSH_CMD_SIZE 80 -#define MSH_USING_BUILT_IN_COMMANDS -#define FINSH_USING_DESCRIPTION -#define FINSH_ARG_MAX 10 - -/* DFS: device virtual file system */ - -#define RT_USING_DFS -#define DFS_USING_POSIX -#define DFS_USING_WORKDIR -#define DFS_FD_MAX 16 -#define RT_USING_DFS_V1 -#define DFS_FILESYSTEMS_MAX 4 -#define DFS_FILESYSTEM_TYPES_MAX 4 -#define RT_USING_DFS_DEVFS -#define RT_USING_DFS_RAMFS - -/* Device Drivers */ - -#define RT_USING_DEVICE_IPC -#define RT_UNAMED_PIPE_NUMBER 64 -#define RT_USING_SYSTEM_WORKQUEUE -#define RT_SYSTEM_WORKQUEUE_STACKSIZE 4096 -#define RT_SYSTEM_WORKQUEUE_PRIORITY 23 -#define RT_USING_SERIAL -#define RT_USING_SERIAL_V1 -#define RT_SERIAL_USING_DMA -#define RT_SERIAL_RB_BUFSZ 1024 -#define RT_USING_NULL -#define RT_USING_ZERO -#define RT_USING_RANDOM -#define RT_USING_RTC - -/* Using USB */ - - -/* C/C++ and POSIX layer */ - -#define RT_LIBC_DEFAULT_TIMEZONE 8 - -/* POSIX (Portable Operating System Interface) layer */ - -#define RT_USING_POSIX_FS -#define RT_USING_POSIX_DEVIO -#define RT_USING_POSIX_STDIO -#define RT_USING_POSIX_POLL -#define RT_USING_POSIX_SELECT -#define RT_USING_POSIX_TERMIOS -#define RT_USING_POSIX_AIO -#define RT_USING_POSIX_DELAY -#define RT_USING_POSIX_CLOCK -#define RT_USING_POSIX_TIMER - -/* Interprocess Communication (IPC) */ - -#define RT_USING_POSIX_PIPE -#define RT_USING_POSIX_PIPE_SIZE 512 -#define RT_USING_POSIX_MESSAGE_QUEUE -#define RT_USING_POSIX_MESSAGE_SEMAPHORE - -/* Socket is in the 'Network' category */ - - -/* Network */ - -#define RT_USING_SAL -#define SAL_INTERNET_CHECK - -/* Docking with protocol stacks */ - -#define SAL_USING_LWIP -#define SAL_USING_POSIX -#define RT_USING_NETDEV -#define NETDEV_USING_IFCONFIG -#define NETDEV_USING_PING -#define NETDEV_USING_NETSTAT -#define NETDEV_USING_AUTO_DEFAULT -#define NETDEV_IPV4 1 -#define NETDEV_IPV6 0 -#define RT_USING_LWIP -#define RT_USING_LWIP212 -#define RT_USING_LWIP_VER_NUM 0x20102 -#define RT_LWIP_MEM_ALIGNMENT 64 -#define RT_LWIP_IGMP -#define RT_LWIP_ICMP -#define RT_LWIP_DNS - -/* Static IPv4 Address */ - -#define RT_LWIP_IPADDR "192.168.4.10" -#define RT_LWIP_GWADDR "192.168.4.1" -#define RT_LWIP_MSKADDR "255.255.255.0" -#define RT_LWIP_UDP -#define RT_LWIP_TCP -#define RT_LWIP_RAW -#define RT_MEMP_NUM_NETCONN 8 -#define RT_LWIP_PBUF_NUM 512 -#define RT_LWIP_RAW_PCB_NUM 4 -#define RT_LWIP_UDP_PCB_NUM 4 -#define RT_LWIP_TCP_PCB_NUM 4 -#define RT_LWIP_TCP_SEG_NUM 40 -#define RT_LWIP_TCP_SND_BUF 8196 -#define RT_LWIP_TCP_WND 8196 -#define RT_LWIP_TCPTHREAD_PRIORITY 12 -#define RT_LWIP_TCPTHREAD_MBOX_SIZE 8 -#define RT_LWIP_TCPTHREAD_STACKSIZE 16184 -#define RT_LWIP_ETHTHREAD_PRIORITY 12 -#define RT_LWIP_ETHTHREAD_STACKSIZE 2048 -#define RT_LWIP_ETHTHREAD_MBOX_SIZE 8 -#define LWIP_NETIF_STATUS_CALLBACK 1 -#define LWIP_NETIF_LINK_CALLBACK 1 -#define SO_REUSE 1 -#define LWIP_SO_RCVTIMEO 1 -#define LWIP_SO_SNDTIMEO 1 -#define LWIP_SO_RCVBUF 1 -#define LWIP_SO_LINGER 0 -#define LWIP_NETIF_LOOPBACK 0 -#define RT_LWIP_USING_PING - -/* Utilities */ - -#define RT_USING_RYM -#define YMODEM_USING_FILE_TRANSFER -#define RT_USING_UTEST -#define UTEST_THR_STACK_SIZE 4096 -#define UTEST_THR_PRIORITY 20 -#define RT_USING_ADT - -/* RT-Thread Utestcases */ - - -/* RT-Thread online packages */ - -/* IoT - internet of things */ - - -/* Wi-Fi */ - -/* Marvell WiFi */ - - -/* Wiced WiFi */ - - -/* IoT Cloud */ - - -/* security packages */ - - -/* language packages */ - -/* JSON: JavaScript Object Notation, a lightweight data-interchange format */ - - -/* XML: Extensible Markup Language */ - - -/* multimedia packages */ - -/* LVGL: powerful and easy-to-use embedded GUI library */ - - -/* u8g2: a monochrome graphic library */ - - -/* tools packages */ - - -/* system packages */ - -/* enhanced kernel services */ - - -/* acceleration: Assembly language or algorithmic acceleration packages */ - - -/* CMSIS: ARM Cortex-M Microcontroller Software Interface Standard */ - - -/* Micrium: Micrium software products porting for RT-Thread */ - - -/* peripheral libraries and drivers */ - -/* sensors drivers */ - - -/* touch drivers */ - - -/* Kendryte SDK */ - - -/* AI packages */ - - -/* Signal Processing and Control Algorithm Packages */ - - -/* miscellaneous packages */ - -/* project laboratory */ - -/* samples: kernel and components samples */ - - -/* entertainment: terminal games and other interesting software packages */ - - -/* Arduino libraries */ - - -/* Projects and Demos */ - - -/* Sensors */ - - -/* Display */ - - -/* Timing */ - - -/* Data Processing */ - - -/* Data Storage */ - -/* Communication */ - - -/* Device Control */ - - -/* Other */ - - -/* Signal IO */ - - -/* Uncategorized */ - -/* Hardware Drivers */ - -/* On-chip Peripheral Drivers */ - -#define BSP_USING_UART -#define RT_USING_UART1 -#define BSP_USING_ETH -#define RT_LWIP_PBUF_POOL_BUFSIZE 1700 - -/* Board extended module Drivers */ - -#define PHYTIUM_ARCH_AARCH32 - -/* Standalone Setting */ - -#define TARGET_ARMV8_AARCH32 -#define USE_AARCH64_L1_TO_AARCH32 - -/* Board Configuration */ - -#define TARGET_E2000Q -#define TARGET_E2000 -#define DEFAULT_DEBUG_PRINT_UART1 - -/* Components Configuration */ - -#define USE_GIC -#define ENABLE_GICV3 -#define USE_SERIAL - -/* Usart Configuration */ - -#define ENABLE_Pl011_UART -#define USE_ETH - -/* Eth Configuration */ - -#define ENABLE_FXMAC -#define FXMAC_PHY_COMMON -#define LOG_ERROR -#define USE_DEFAULT_INTERRUPT_CONFIG -#define INTERRUPT_ROLE_MASTER - -#endif diff --git a/bsp/phytium/aarch32/configs/phytium_pi_rtsmart b/bsp/phytium/aarch32/configs/phytium_pi_rtsmart index 48eaa2a9b7..e8b922496a 100644 --- a/bsp/phytium/aarch32/configs/phytium_pi_rtsmart +++ b/bsp/phytium/aarch32/configs/phytium_pi_rtsmart @@ -72,19 +72,15 @@ CONFIG_RT_USING_SLAB_AS_HEAP=y # CONFIG_RT_USING_MEMTRACE is not set CONFIG_RT_USING_HEAP_ISR=y CONFIG_RT_USING_HEAP=y - -# -# Kernel Device Object -# CONFIG_RT_USING_DEVICE=y # CONFIG_RT_USING_DEVICE_OPS is not set -# CONFIG_RT_USING_DM is not set # CONFIG_RT_USING_INTERRUPT_INFO is not set CONFIG_RT_USING_CONSOLE=y CONFIG_RT_CONSOLEBUF_SIZE=256 CONFIG_RT_CONSOLE_DEVICE_NAME="uart1" -CONFIG_RT_VER_NUM=0x50001 +CONFIG_RT_VER_NUM=0x50100 # CONFIG_RT_USING_STDC_ATOMIC is not set +CONFIG_RT_BACKTRACE_LEVEL_MAX_NR=32 CONFIG_RT_USING_CACHE=y CONFIG_RT_USING_HW_ATOMIC=y # CONFIG_ARCH_ARM_BOOTWITH_FLUSH_CACHE is not set @@ -125,6 +121,7 @@ CONFIG_FINSH_USING_DESCRIPTION=y # CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set # CONFIG_FINSH_USING_AUTH is not set CONFIG_FINSH_ARG_MAX=10 +CONFIG_FINSH_USING_OPTION_COMPLETION=y # # DFS: device virtual file system @@ -170,6 +167,7 @@ CONFIG_RT_USING_DFS_MQUEUE=y # CONFIG_RT_USING_DFS_NFS is not set # CONFIG_RT_USING_FAL is not set CONFIG_RT_USING_LWP=y +# CONFIG_LWP_DEBUG is not set CONFIG_RT_LWP_MAX_NR=30 CONFIG_LWP_TASK_STACK_SIZE=16384 CONFIG_RT_CH_MSG_MAX_NR=1024 @@ -182,6 +180,7 @@ CONFIG_RT_LWP_SHM_MAX_NR=64 # # Device Drivers # +# CONFIG_RT_USING_DM is not set CONFIG_RT_USING_DEVICE_IPC=y CONFIG_RT_UNAMED_PIPE_NUMBER=64 CONFIG_RT_USING_SYSTEM_WORKQUEUE=y @@ -209,14 +208,13 @@ CONFIG_RT_USING_RANDOM=y # CONFIG_RT_USING_MTD_NOR is not set # CONFIG_RT_USING_MTD_NAND is not set # CONFIG_RT_USING_PM is not set -# CONFIG_RT_USING_FDT is not set CONFIG_RT_USING_RTC=y # CONFIG_RT_USING_ALARM is not set # CONFIG_RT_USING_SOFT_RTC is not set CONFIG_RT_USING_SDIO=y -CONFIG_RT_SDIO_STACK_SIZE=512 +CONFIG_RT_SDIO_STACK_SIZE=4096 CONFIG_RT_SDIO_THREAD_PRIORITY=15 -CONFIG_RT_MMCSD_STACK_SIZE=1024 +CONFIG_RT_MMCSD_STACK_SIZE=4096 CONFIG_RT_MMCSD_THREAD_PREORITY=22 CONFIG_RT_MMCSD_MAX_PARTITION=16 # CONFIG_RT_SDIO_DEBUG is not set @@ -232,6 +230,7 @@ CONFIG_RT_MMCSD_MAX_PARTITION=16 CONFIG_RT_USING_DEV_BUS=y # CONFIG_RT_USING_WIFI is not set # CONFIG_RT_USING_VIRTIO is not set +CONFIG_RT_USING_KTIME=y # # Using USB @@ -267,6 +266,8 @@ CONFIG_RT_USING_POSIX_POLL=y CONFIG_RT_USING_POSIX_SELECT=y # CONFIG_RT_USING_POSIX_EVENTFD is not set # CONFIG_RT_USING_POSIX_EPOLL is not set +# CONFIG_RT_USING_POSIX_SIGNALFD is not set +# CONFIG_RT_USING_POSIX_TIMERFD is not set # CONFIG_RT_USING_POSIX_SOCKET is not set CONFIG_RT_USING_POSIX_TERMIOS=y CONFIG_RT_USING_POSIX_AIO=y @@ -390,7 +391,11 @@ CONFIG_RT_USING_ADT_HASHMAP=y CONFIG_RT_USING_ADT_REF=y # CONFIG_RT_USING_RT_LINK is not set # CONFIG_RT_USING_VBUS is not set -CONFIG_RT_USING_KTIME=y + +# +# Memory management +# +# CONFIG_RT_USING_MEMBLOCK is not set # # RT-Thread Utestcases @@ -415,7 +420,6 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_KAWAII_MQTT is not set # CONFIG_PKG_USING_BC28_MQTT is not set # CONFIG_PKG_USING_WEBTERMINAL is not set -# CONFIG_PKG_USING_LIBMODBUS is not set # CONFIG_PKG_USING_FREEMODBUS is not set # CONFIG_PKG_USING_NANOPB is not set @@ -433,6 +437,11 @@ CONFIG_RT_USING_KTIME=y # # CONFIG_PKG_USING_WLAN_WICED is not set # CONFIG_PKG_USING_RW007 is not set + +# +# CYW43012 WiFi +# +# CONFIG_PKG_USING_WLAN_CYW43012 is not set # CONFIG_PKG_USING_COAP is not set # CONFIG_PKG_USING_NOPOLL is not set # CONFIG_PKG_USING_NETUTILS is not set @@ -475,6 +484,7 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_NMEALIB is not set # CONFIG_PKG_USING_PDULIB is not set # CONFIG_PKG_USING_BTSTACK is not set +# CONFIG_PKG_USING_BT_CYW43012 is not set # CONFIG_PKG_USING_LORAWAN_ED_STACK is not set # CONFIG_PKG_USING_WAYZ_IOTKIT is not set # CONFIG_PKG_USING_MAVLINK is not set @@ -494,6 +504,8 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_ZFTP is not set # CONFIG_PKG_USING_WOL is not set # CONFIG_PKG_USING_ZEPHYR_POLLING is not set +# CONFIG_PKG_USING_MATTER_ADAPTATION_LAYER is not set +# CONFIG_PKG_USING_LHC_MODBUS is not set # # security packages @@ -540,7 +552,6 @@ CONFIG_RT_USING_KTIME=y # LVGL: powerful and easy-to-use embedded GUI library # # CONFIG_PKG_USING_LVGL is not set -# CONFIG_PKG_USING_LITTLEVGL2RTT is not set # CONFIG_PKG_USING_LV_MUSIC_DEMO is not set # CONFIG_PKG_USING_GUI_GUIDER_DEMO is not set @@ -616,6 +627,7 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_HASH_MATCH is not set # CONFIG_PKG_USING_ARMV7M_DWT_TOOL is not set # CONFIG_PKG_USING_VOFA_PLUS is not set +# CONFIG_PKG_USING_ZDEBUG is not set # # system packages @@ -652,6 +664,8 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_UC_COMMON is not set # CONFIG_PKG_USING_UC_MODBUS is not set # CONFIG_PKG_USING_FREERTOS_WRAPPER is not set +# CONFIG_PKG_USING_LITEOS_SDK is not set +# CONFIG_PKG_USING_TZ_DATABASE is not set # CONFIG_PKG_USING_CAIRO is not set # CONFIG_PKG_USING_PIXMAN is not set # CONFIG_PKG_USING_PARTITION is not set @@ -675,6 +689,7 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_QBOOT is not set # CONFIG_PKG_USING_PPOOL is not set # CONFIG_PKG_USING_OPENAMP is not set +# CONFIG_PKG_USING_RPMSG_LITE is not set # CONFIG_PKG_USING_LPM is not set # CONFIG_PKG_USING_TLSF is not set # CONFIG_PKG_USING_EVENT_RECORDER is not set @@ -687,6 +702,12 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_QPC is not set # CONFIG_PKG_USING_AGILE_UPGRADE is not set # CONFIG_PKG_USING_FLASH_BLOB is not set +# CONFIG_PKG_USING_MLIBC is not set +# CONFIG_PKG_USING_TASK_MSG_BUS is not set +# CONFIG_PKG_USING_SFDB is not set +# CONFIG_PKG_USING_RTP is not set +# CONFIG_PKG_USING_REB is not set +# CONFIG_PKG_USING_R_RHEALSTONE is not set # # peripheral libraries and drivers @@ -751,6 +772,7 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_BALANCE is not set # CONFIG_PKG_USING_SHT2X is not set # CONFIG_PKG_USING_SHT3X is not set +# CONFIG_PKG_USING_SHT4X is not set # CONFIG_PKG_USING_AD7746 is not set # CONFIG_PKG_USING_ADT74XX is not set # CONFIG_PKG_USING_MAX17048 is not set @@ -771,6 +793,7 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_FT5426 is not set # CONFIG_PKG_USING_FT6236 is not set # CONFIG_PKG_USING_XPT2046_TOUCH is not set +# CONFIG_PKG_USING_CST816X is not set # CONFIG_PKG_USING_REALTEK_AMEBA is not set # CONFIG_PKG_USING_STM32_SDIO is not set # CONFIG_PKG_USING_ESP_IDF is not set @@ -846,7 +869,15 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_IO_INPUT_FILTER is not set # CONFIG_PKG_USING_RASPBERRYPI_PICO_SDK is not set # CONFIG_PKG_USING_LRF_NV7LIDAR is not set +# CONFIG_PKG_USING_AIP650 is not set # CONFIG_PKG_USING_FINGERPRINT is not set +# CONFIG_PKG_USING_BT_ECB02C is not set +# CONFIG_PKG_USING_UAT is not set +# CONFIG_PKG_USING_ST7789 is not set +# CONFIG_PKG_USING_VS1003 is not set +# CONFIG_PKG_USING_X9555 is not set +# CONFIG_PKG_USING_SYSTEM_RUN_LED is not set +# CONFIG_PKG_USING_SPI_TOOLS is not set # # AI packages @@ -860,12 +891,17 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_ULAPACK is not set # CONFIG_PKG_USING_QUEST is not set # CONFIG_PKG_USING_NAXOS is not set +# CONFIG_PKG_USING_R_TINYMAIX is not set # # Signal Processing and Control Algorithm Packages # # CONFIG_PKG_USING_FIRE_PID_CURVE is not set +# CONFIG_PKG_USING_QPID is not set # CONFIG_PKG_USING_UKAL is not set +# CONFIG_PKG_USING_DIGITALCTRL is not set +# CONFIG_PKG_USING_KISSFFT is not set +# CONFIG_PKG_USING_CMSIS_DSP is not set # # miscellaneous packages @@ -903,6 +939,7 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_MINILZO is not set # CONFIG_PKG_USING_QUICKLZ is not set # CONFIG_PKG_USING_LZMA is not set +# CONFIG_PKG_USING_RALARAM is not set # CONFIG_PKG_USING_MULTIBUTTON is not set # CONFIG_PKG_USING_FLEXIBLE_BUTTON is not set # CONFIG_PKG_USING_CANFESTIVAL is not set @@ -912,7 +949,6 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_DSTR is not set # CONFIG_PKG_USING_TINYFRAME is not set # CONFIG_PKG_USING_KENDRYTE_DEMO is not set -# CONFIG_PKG_USING_DIGITALCTRL is not set # CONFIG_PKG_USING_UPACKER is not set # CONFIG_PKG_USING_UPARAM is not set # CONFIG_PKG_USING_HELLO is not set @@ -937,8 +973,9 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_RTDUINO is not set # -# Projects +# Projects and Demos # +# CONFIG_PKG_USING_ARDUINO_MSGQ_C_CPP_DEMO is not set # CONFIG_PKG_USING_ARDUINO_ULTRASOUND_RADAR is not set # CONFIG_PKG_USING_ARDUINO_SENSOR_KIT is not set # CONFIG_PKG_USING_ARDUINO_MATLAB_SUPPORT is not set @@ -1085,14 +1122,21 @@ CONFIG_RT_USING_KTIME=y # # Display # +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_GFX_LIBRARY is not set # CONFIG_PKG_USING_ARDUINO_U8G2 is not set -# CONFIG_PKG_USING_ARDUINO_U8GLIB_ARDUINO is not set +# CONFIG_PKG_USING_ARDUINO_TFT_ESPI is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ST7735 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SSD1306 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ILI9341 is not set # CONFIG_PKG_USING_SEEED_TM1637 is not set # # Timing # +# CONFIG_PKG_USING_ARDUINO_RTCLIB is not set # CONFIG_PKG_USING_ARDUINO_MSTIMER2 is not set +# CONFIG_PKG_USING_ARDUINO_TICKER is not set +# CONFIG_PKG_USING_ARDUINO_TASKSCHEDULER is not set # # Data Processing @@ -1126,7 +1170,6 @@ CONFIG_RT_USING_KTIME=y # # CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MFRC630 is not set # CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI5351 is not set -# CONFIG_PKG_USING_ARDUINO_RTCLIB is not set # # Signal IO @@ -1147,10 +1190,12 @@ CONFIG_RT_USING_KTIME=y # # Hardware Drivers # +# CONFIG_DRV_DEBUG is not set # # On-chip Peripheral Drivers # +CONFIG_BSP_USING_IOPAD=y CONFIG_BSP_USING_UART=y CONFIG_RT_USING_UART1=y # CONFIG_RT_USING_UART0 is not set @@ -1158,12 +1203,14 @@ CONFIG_RT_USING_UART1=y # CONFIG_BSP_USING_CAN is not set # CONFIG_BSP_USING_GPIO is not set # CONFIG_BSP_USING_QSPI is not set -CONFIG_BSP_USING_ETH=y -CONFIG_RT_LWIP_PBUF_POOL_BUFSIZE=1700 -CONFIG_BSP_USING_SDIO=y +# CONFIG_BSP_USING_ETH is not set +# CONFIG_BSP_USING_PWM is not set +# CONFIG_BSP_USING_I2C is not set +CONFIG_BSP_USING_SDIF=y CONFIG_BSP_USING_SDCARD_FATFS=y -CONFIG_USING_SDIO0=y -# CONFIG_USING_SDIO1 is not set +CONFIG_BSP_USING_SDCARD_PARTITION="sd1" +CONFIG_USING_SDIF0=y +# CONFIG_USING_SDIF1 is not set # CONFIG_USING_EMMC is not set # @@ -1178,61 +1225,45 @@ CONFIG_TARGET_ARMV8_AARCH32=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # -# Board Configuration +# Soc configuration # -# CONFIG_TARGET_F2000_4 is not set -# CONFIG_TARGET_D2000 is not set +CONFIG_TARGET_PHYTIUMPI=y # CONFIG_TARGET_E2000Q is not set # CONFIG_TARGET_E2000D is not set # CONFIG_TARGET_E2000S is not set -CONFIG_TARGET_PHYTIUMPI=y +# CONFIG_TARGET_FT2004 is not set +# CONFIG_TARGET_D2000 is not set +CONFIG_SOC_NAME="phytiumpi" +CONFIG_SOC_CORE_NUM=4 +CONFIG_F32BIT_MEMORY_ADDRESS=0x80000000 +CONFIG_F32BIT_MEMORY_LENGTH=0x80000000 +CONFIG_F64BIT_MEMORY_ADDRESS=0x2000000000 +CONFIG_F64BIT_MEMORY_LENGTH=0x800000000 CONFIG_TARGET_E2000=y +# CONFIG_USE_SPINLOCK is not set CONFIG_DEFAULT_DEBUG_PRINT_UART1=y # CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set # CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set # -# Components Configuration +# Board Configuration # -# CONFIG_USE_SPI is not set -# CONFIG_USE_QSPI is not set -CONFIG_USE_GIC=y -CONFIG_ENABLE_GICV3=y -CONFIG_USE_IOPAD=y -CONFIG_ENABLE_IOPAD=y -CONFIG_USE_SERIAL=y +CONFIG_BOARD_NAME="firefly" +# CONFIG_USE_SPI_IOPAD is not set +# CONFIG_USE_GPIO_IOPAD is not set +# CONFIG_USE_CAN_IOPAD is not set +# CONFIG_USE_QSPI_IOPAD is not set +# CONFIG_USE_PWM_IOPAD is not set +# CONFIG_USE_MIO_IOPAD is not set +# CONFIG_USE_TACHO_IOPAD is not set +# CONFIG_USE_UART_IOPAD is not set +# CONFIG_USE_THIRD_PARTY_IOPAD is not set +CONFIG_FIREFLY_DEMO_BOARD=y # -# Usart Configuration +# IO mux configuration when board start up # -CONFIG_ENABLE_Pl011_UART=y -# CONFIG_USE_GPIO is not set -CONFIG_USE_ETH=y - -# -# Eth Configuration -# -CONFIG_ENABLE_FXMAC=y -# CONFIG_ENABLE_FGMAC is not set -CONFIG_FXMAC_PHY_COMMON=y -# CONFIG_FXMAC_PHY_YT is not set -# CONFIG_USE_CAN is not set -# CONFIG_USE_I2C is not set -# CONFIG_USE_TIMER is not set -# CONFIG_USE_MIO is not set -# CONFIG_USE_SDMMC is not set -# CONFIG_USE_PCIE is not set -# CONFIG_USE_WDT is not set -# CONFIG_USE_DMA is not set -# CONFIG_USE_NAND is not set -# CONFIG_USE_RTC is not set -# CONFIG_USE_SATA is not set -# CONFIG_USE_USB is not set -# CONFIG_USE_ADC is not set -# CONFIG_USE_PWM is not set -# CONFIG_USE_IPC is not set -# CONFIG_USE_MEDIA is not set -# CONFIG_USE_SCMI_MHU is not set +# CONFIG_CUS_DEMO_BOARD is not set # # Sdk common configuration @@ -1249,3 +1280,8 @@ CONFIG_LOG_ERROR=y CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y CONFIG_INTERRUPT_ROLE_MASTER=y # CONFIG_INTERRUPT_ROLE_SLAVE is not set + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set diff --git a/bsp/phytium/aarch32/configs/phytium_pi_rtsmart.h b/bsp/phytium/aarch32/configs/phytium_pi_rtsmart.h index 27754baba0..4267111672 100644 --- a/bsp/phytium/aarch32/configs/phytium_pi_rtsmart.h +++ b/bsp/phytium/aarch32/configs/phytium_pi_rtsmart.h @@ -52,14 +52,12 @@ #define RT_USING_SLAB_AS_HEAP #define RT_USING_HEAP_ISR #define RT_USING_HEAP - -/* Kernel Device Object */ - #define RT_USING_DEVICE #define RT_USING_CONSOLE #define RT_CONSOLEBUF_SIZE 256 #define RT_CONSOLE_DEVICE_NAME "uart1" -#define RT_VER_NUM 0x50001 +#define RT_VER_NUM 0x50100 +#define RT_BACKTRACE_LEVEL_MAX_NR 32 #define RT_USING_CACHE #define RT_USING_HW_ATOMIC #define RT_USING_CPU_FFS @@ -89,6 +87,7 @@ #define MSH_USING_BUILT_IN_COMMANDS #define FINSH_USING_DESCRIPTION #define FINSH_ARG_MAX 10 +#define FINSH_USING_OPTION_COMPLETION /* DFS: device virtual file system */ @@ -143,12 +142,13 @@ #define RT_USING_RANDOM #define RT_USING_RTC #define RT_USING_SDIO -#define RT_SDIO_STACK_SIZE 512 +#define RT_SDIO_STACK_SIZE 4096 #define RT_SDIO_THREAD_PRIORITY 15 -#define RT_MMCSD_STACK_SIZE 1024 +#define RT_MMCSD_STACK_SIZE 4096 #define RT_MMCSD_THREAD_PREORITY 22 #define RT_MMCSD_MAX_PARTITION 16 #define RT_USING_DEV_BUS +#define RT_USING_KTIME /* Using USB */ @@ -256,7 +256,9 @@ #define RT_USING_ADT_BITMAP #define RT_USING_ADT_HASHMAP #define RT_USING_ADT_REF -#define RT_USING_KTIME + +/* Memory management */ + /* RT-Thread Utestcases */ @@ -274,6 +276,9 @@ /* Wiced WiFi */ +/* CYW43012 WiFi */ + + /* IoT Cloud */ @@ -343,7 +348,7 @@ /* Arduino libraries */ -/* Projects */ +/* Projects and Demos */ /* Sensors */ @@ -376,15 +381,16 @@ /* Hardware Drivers */ + /* On-chip Peripheral Drivers */ +#define BSP_USING_IOPAD #define BSP_USING_UART #define RT_USING_UART1 -#define BSP_USING_ETH -#define RT_LWIP_PBUF_POOL_BUFSIZE 1700 -#define BSP_USING_SDIO +#define BSP_USING_SDIF #define BSP_USING_SDCARD_FATFS -#define USING_SDIO0 +#define BSP_USING_SDCARD_PARTITION "sd1" +#define USING_SDIF0 /* Board extended module Drivers */ @@ -395,29 +401,25 @@ #define TARGET_ARMV8_AARCH32 #define USE_AARCH64_L1_TO_AARCH32 -/* Board Configuration */ +/* Soc configuration */ #define TARGET_PHYTIUMPI +#define SOC_NAME "phytiumpi" +#define SOC_CORE_NUM 4 +#define F32BIT_MEMORY_ADDRESS 0x80000000 +#define F32BIT_MEMORY_LENGTH 0x80000000 +#define F64BIT_MEMORY_ADDRESS 0x2000000000 +#define F64BIT_MEMORY_LENGTH 0x800000000 #define TARGET_E2000 #define DEFAULT_DEBUG_PRINT_UART1 -/* Components Configuration */ +/* Board Configuration */ -#define USE_GIC -#define ENABLE_GICV3 -#define USE_IOPAD -#define ENABLE_IOPAD -#define USE_SERIAL +#define BOARD_NAME "firefly" +#define FIREFLY_DEMO_BOARD -/* Usart Configuration */ +/* IO mux configuration when board start up */ -#define ENABLE_Pl011_UART -#define USE_ETH - -/* Eth Configuration */ - -#define ENABLE_FXMAC -#define FXMAC_PHY_COMMON /* Sdk common configuration */ @@ -425,4 +427,7 @@ #define USE_DEFAULT_INTERRUPT_CONFIG #define INTERRUPT_ROLE_MASTER +/* Image information configuration */ + + #endif diff --git a/bsp/phytium/aarch32/configs/phytium_pi_rtthread b/bsp/phytium/aarch32/configs/phytium_pi_rtthread index eee5728fa1..c7d8ec77c9 100644 --- a/bsp/phytium/aarch32/configs/phytium_pi_rtthread +++ b/bsp/phytium/aarch32/configs/phytium_pi_rtthread @@ -72,19 +72,15 @@ CONFIG_RT_USING_SLAB_AS_HEAP=y # CONFIG_RT_USING_MEMTRACE is not set CONFIG_RT_USING_HEAP_ISR=y CONFIG_RT_USING_HEAP=y - -# -# Kernel Device Object -# CONFIG_RT_USING_DEVICE=y # CONFIG_RT_USING_DEVICE_OPS is not set -# CONFIG_RT_USING_DM is not set # CONFIG_RT_USING_INTERRUPT_INFO is not set CONFIG_RT_USING_CONSOLE=y CONFIG_RT_CONSOLEBUF_SIZE=256 CONFIG_RT_CONSOLE_DEVICE_NAME="uart1" -CONFIG_RT_VER_NUM=0x50001 +CONFIG_RT_VER_NUM=0x50100 # CONFIG_RT_USING_STDC_ATOMIC is not set +CONFIG_RT_BACKTRACE_LEVEL_MAX_NR=32 CONFIG_RT_USING_CACHE=y CONFIG_RT_USING_HW_ATOMIC=y # CONFIG_ARCH_ARM_BOOTWITH_FLUSH_CACHE is not set @@ -123,6 +119,7 @@ CONFIG_FINSH_USING_DESCRIPTION=y # CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set # CONFIG_FINSH_USING_AUTH is not set CONFIG_FINSH_ARG_MAX=10 +CONFIG_FINSH_USING_OPTION_COMPLETION=y # # DFS: device virtual file system @@ -171,6 +168,7 @@ CONFIG_RT_USING_DFS_MQUEUE=y # # Device Drivers # +# CONFIG_RT_USING_DM is not set CONFIG_RT_USING_DEVICE_IPC=y CONFIG_RT_UNAMED_PIPE_NUMBER=64 CONFIG_RT_USING_SYSTEM_WORKQUEUE=y @@ -196,14 +194,13 @@ CONFIG_RT_USING_RANDOM=y # CONFIG_RT_USING_MTD_NOR is not set # CONFIG_RT_USING_MTD_NAND is not set # CONFIG_RT_USING_PM is not set -# CONFIG_RT_USING_FDT is not set CONFIG_RT_USING_RTC=y # CONFIG_RT_USING_ALARM is not set # CONFIG_RT_USING_SOFT_RTC is not set CONFIG_RT_USING_SDIO=y -CONFIG_RT_SDIO_STACK_SIZE=512 +CONFIG_RT_SDIO_STACK_SIZE=4096 CONFIG_RT_SDIO_THREAD_PRIORITY=15 -CONFIG_RT_MMCSD_STACK_SIZE=1024 +CONFIG_RT_MMCSD_STACK_SIZE=4096 CONFIG_RT_MMCSD_THREAD_PREORITY=22 CONFIG_RT_MMCSD_MAX_PARTITION=16 # CONFIG_RT_SDIO_DEBUG is not set @@ -219,6 +216,7 @@ CONFIG_RT_MMCSD_MAX_PARTITION=16 CONFIG_RT_USING_DEV_BUS=y # CONFIG_RT_USING_WIFI is not set # CONFIG_RT_USING_VIRTIO is not set +CONFIG_RT_USING_KTIME=y # # Using USB @@ -253,6 +251,7 @@ CONFIG_RT_USING_POSIX_STDIO=y CONFIG_RT_USING_POSIX_POLL=y CONFIG_RT_USING_POSIX_SELECT=y # CONFIG_RT_USING_POSIX_EVENTFD is not set +# CONFIG_RT_USING_POSIX_TIMERFD is not set # CONFIG_RT_USING_POSIX_SOCKET is not set CONFIG_RT_USING_POSIX_TERMIOS=y CONFIG_RT_USING_POSIX_AIO=y @@ -376,7 +375,11 @@ CONFIG_RT_USING_ADT_HASHMAP=y CONFIG_RT_USING_ADT_REF=y # CONFIG_RT_USING_RT_LINK is not set # CONFIG_RT_USING_VBUS is not set -CONFIG_RT_USING_KTIME=y + +# +# Memory management +# +# CONFIG_RT_USING_MEMBLOCK is not set # # RT-Thread Utestcases @@ -401,7 +404,6 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_KAWAII_MQTT is not set # CONFIG_PKG_USING_BC28_MQTT is not set # CONFIG_PKG_USING_WEBTERMINAL is not set -# CONFIG_PKG_USING_LIBMODBUS is not set # CONFIG_PKG_USING_FREEMODBUS is not set # CONFIG_PKG_USING_NANOPB is not set @@ -419,6 +421,11 @@ CONFIG_RT_USING_KTIME=y # # CONFIG_PKG_USING_WLAN_WICED is not set # CONFIG_PKG_USING_RW007 is not set + +# +# CYW43012 WiFi +# +# CONFIG_PKG_USING_WLAN_CYW43012 is not set # CONFIG_PKG_USING_COAP is not set # CONFIG_PKG_USING_NOPOLL is not set # CONFIG_PKG_USING_NETUTILS is not set @@ -461,6 +468,7 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_NMEALIB is not set # CONFIG_PKG_USING_PDULIB is not set # CONFIG_PKG_USING_BTSTACK is not set +# CONFIG_PKG_USING_BT_CYW43012 is not set # CONFIG_PKG_USING_LORAWAN_ED_STACK is not set # CONFIG_PKG_USING_WAYZ_IOTKIT is not set # CONFIG_PKG_USING_MAVLINK is not set @@ -480,6 +488,8 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_ZFTP is not set # CONFIG_PKG_USING_WOL is not set # CONFIG_PKG_USING_ZEPHYR_POLLING is not set +# CONFIG_PKG_USING_MATTER_ADAPTATION_LAYER is not set +# CONFIG_PKG_USING_LHC_MODBUS is not set # # security packages @@ -526,7 +536,6 @@ CONFIG_RT_USING_KTIME=y # LVGL: powerful and easy-to-use embedded GUI library # # CONFIG_PKG_USING_LVGL is not set -# CONFIG_PKG_USING_LITTLEVGL2RTT is not set # CONFIG_PKG_USING_LV_MUSIC_DEMO is not set # CONFIG_PKG_USING_GUI_GUIDER_DEMO is not set @@ -602,6 +611,7 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_HASH_MATCH is not set # CONFIG_PKG_USING_ARMV7M_DWT_TOOL is not set # CONFIG_PKG_USING_VOFA_PLUS is not set +# CONFIG_PKG_USING_ZDEBUG is not set # # system packages @@ -638,6 +648,8 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_UC_COMMON is not set # CONFIG_PKG_USING_UC_MODBUS is not set # CONFIG_PKG_USING_FREERTOS_WRAPPER is not set +# CONFIG_PKG_USING_LITEOS_SDK is not set +# CONFIG_PKG_USING_TZ_DATABASE is not set # CONFIG_PKG_USING_CAIRO is not set # CONFIG_PKG_USING_PIXMAN is not set # CONFIG_PKG_USING_PARTITION is not set @@ -661,6 +673,7 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_QBOOT is not set # CONFIG_PKG_USING_PPOOL is not set # CONFIG_PKG_USING_OPENAMP is not set +# CONFIG_PKG_USING_RPMSG_LITE is not set # CONFIG_PKG_USING_LPM is not set # CONFIG_PKG_USING_TLSF is not set # CONFIG_PKG_USING_EVENT_RECORDER is not set @@ -673,6 +686,12 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_QPC is not set # CONFIG_PKG_USING_AGILE_UPGRADE is not set # CONFIG_PKG_USING_FLASH_BLOB is not set +# CONFIG_PKG_USING_MLIBC is not set +# CONFIG_PKG_USING_TASK_MSG_BUS is not set +# CONFIG_PKG_USING_SFDB is not set +# CONFIG_PKG_USING_RTP is not set +# CONFIG_PKG_USING_REB is not set +# CONFIG_PKG_USING_R_RHEALSTONE is not set # # peripheral libraries and drivers @@ -737,6 +756,7 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_BALANCE is not set # CONFIG_PKG_USING_SHT2X is not set # CONFIG_PKG_USING_SHT3X is not set +# CONFIG_PKG_USING_SHT4X is not set # CONFIG_PKG_USING_AD7746 is not set # CONFIG_PKG_USING_ADT74XX is not set # CONFIG_PKG_USING_MAX17048 is not set @@ -757,6 +777,7 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_FT5426 is not set # CONFIG_PKG_USING_FT6236 is not set # CONFIG_PKG_USING_XPT2046_TOUCH is not set +# CONFIG_PKG_USING_CST816X is not set # CONFIG_PKG_USING_REALTEK_AMEBA is not set # CONFIG_PKG_USING_STM32_SDIO is not set # CONFIG_PKG_USING_ESP_IDF is not set @@ -832,7 +853,15 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_IO_INPUT_FILTER is not set # CONFIG_PKG_USING_RASPBERRYPI_PICO_SDK is not set # CONFIG_PKG_USING_LRF_NV7LIDAR is not set +# CONFIG_PKG_USING_AIP650 is not set # CONFIG_PKG_USING_FINGERPRINT is not set +# CONFIG_PKG_USING_BT_ECB02C is not set +# CONFIG_PKG_USING_UAT is not set +# CONFIG_PKG_USING_ST7789 is not set +# CONFIG_PKG_USING_VS1003 is not set +# CONFIG_PKG_USING_X9555 is not set +# CONFIG_PKG_USING_SYSTEM_RUN_LED is not set +# CONFIG_PKG_USING_SPI_TOOLS is not set # # AI packages @@ -846,12 +875,17 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_ULAPACK is not set # CONFIG_PKG_USING_QUEST is not set # CONFIG_PKG_USING_NAXOS is not set +# CONFIG_PKG_USING_R_TINYMAIX is not set # # Signal Processing and Control Algorithm Packages # # CONFIG_PKG_USING_FIRE_PID_CURVE is not set +# CONFIG_PKG_USING_QPID is not set # CONFIG_PKG_USING_UKAL is not set +# CONFIG_PKG_USING_DIGITALCTRL is not set +# CONFIG_PKG_USING_KISSFFT is not set +# CONFIG_PKG_USING_CMSIS_DSP is not set # # miscellaneous packages @@ -889,6 +923,7 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_MINILZO is not set # CONFIG_PKG_USING_QUICKLZ is not set # CONFIG_PKG_USING_LZMA is not set +# CONFIG_PKG_USING_RALARAM is not set # CONFIG_PKG_USING_MULTIBUTTON is not set # CONFIG_PKG_USING_FLEXIBLE_BUTTON is not set # CONFIG_PKG_USING_CANFESTIVAL is not set @@ -898,7 +933,6 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_DSTR is not set # CONFIG_PKG_USING_TINYFRAME is not set # CONFIG_PKG_USING_KENDRYTE_DEMO is not set -# CONFIG_PKG_USING_DIGITALCTRL is not set # CONFIG_PKG_USING_UPACKER is not set # CONFIG_PKG_USING_UPARAM is not set # CONFIG_PKG_USING_HELLO is not set @@ -923,8 +957,9 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_RTDUINO is not set # -# Projects +# Projects and Demos # +# CONFIG_PKG_USING_ARDUINO_MSGQ_C_CPP_DEMO is not set # CONFIG_PKG_USING_ARDUINO_ULTRASOUND_RADAR is not set # CONFIG_PKG_USING_ARDUINO_SENSOR_KIT is not set # CONFIG_PKG_USING_ARDUINO_MATLAB_SUPPORT is not set @@ -1071,14 +1106,21 @@ CONFIG_RT_USING_KTIME=y # # Display # +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_GFX_LIBRARY is not set # CONFIG_PKG_USING_ARDUINO_U8G2 is not set -# CONFIG_PKG_USING_ARDUINO_U8GLIB_ARDUINO is not set +# CONFIG_PKG_USING_ARDUINO_TFT_ESPI is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ST7735 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SSD1306 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ILI9341 is not set # CONFIG_PKG_USING_SEEED_TM1637 is not set # # Timing # +# CONFIG_PKG_USING_ARDUINO_RTCLIB is not set # CONFIG_PKG_USING_ARDUINO_MSTIMER2 is not set +# CONFIG_PKG_USING_ARDUINO_TICKER is not set +# CONFIG_PKG_USING_ARDUINO_TASKSCHEDULER is not set # # Data Processing @@ -1112,7 +1154,6 @@ CONFIG_RT_USING_KTIME=y # # CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MFRC630 is not set # CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI5351 is not set -# CONFIG_PKG_USING_ARDUINO_RTCLIB is not set # # Signal IO @@ -1133,10 +1174,12 @@ CONFIG_RT_USING_KTIME=y # # Hardware Drivers # +# CONFIG_DRV_DEBUG is not set # # On-chip Peripheral Drivers # +CONFIG_BSP_USING_IOPAD=y CONFIG_BSP_USING_UART=y CONFIG_RT_USING_UART1=y # CONFIG_RT_USING_UART0 is not set @@ -1144,12 +1187,14 @@ CONFIG_RT_USING_UART1=y # CONFIG_BSP_USING_CAN is not set # CONFIG_BSP_USING_GPIO is not set # CONFIG_BSP_USING_QSPI is not set -CONFIG_BSP_USING_ETH=y -CONFIG_RT_LWIP_PBUF_POOL_BUFSIZE=1700 -CONFIG_BSP_USING_SDIO=y +# CONFIG_BSP_USING_ETH is not set +# CONFIG_BSP_USING_PWM is not set +# CONFIG_BSP_USING_I2C is not set +CONFIG_BSP_USING_SDIF=y CONFIG_BSP_USING_SDCARD_FATFS=y -CONFIG_USING_SDIO0=y -# CONFIG_USING_SDIO1 is not set +CONFIG_BSP_USING_SDCARD_PARTITION="sd1" +CONFIG_USING_SDIF0=y +# CONFIG_USING_SDIF1 is not set # CONFIG_USING_EMMC is not set # @@ -1164,61 +1209,45 @@ CONFIG_TARGET_ARMV8_AARCH32=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # -# Board Configuration +# Soc configuration # -# CONFIG_TARGET_F2000_4 is not set -# CONFIG_TARGET_D2000 is not set +CONFIG_TARGET_PHYTIUMPI=y # CONFIG_TARGET_E2000Q is not set # CONFIG_TARGET_E2000D is not set # CONFIG_TARGET_E2000S is not set -CONFIG_TARGET_PHYTIUMPI=y +# CONFIG_TARGET_FT2004 is not set +# CONFIG_TARGET_D2000 is not set +CONFIG_SOC_NAME="phytiumpi" +CONFIG_SOC_CORE_NUM=4 +CONFIG_F32BIT_MEMORY_ADDRESS=0x80000000 +CONFIG_F32BIT_MEMORY_LENGTH=0x80000000 +CONFIG_F64BIT_MEMORY_ADDRESS=0x2000000000 +CONFIG_F64BIT_MEMORY_LENGTH=0x800000000 CONFIG_TARGET_E2000=y +# CONFIG_USE_SPINLOCK is not set CONFIG_DEFAULT_DEBUG_PRINT_UART1=y # CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set # CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set # -# Components Configuration +# Board Configuration # -# CONFIG_USE_SPI is not set -# CONFIG_USE_QSPI is not set -CONFIG_USE_GIC=y -CONFIG_ENABLE_GICV3=y -CONFIG_USE_IOPAD=y -CONFIG_ENABLE_IOPAD=y -CONFIG_USE_SERIAL=y +CONFIG_BOARD_NAME="firefly" +# CONFIG_USE_SPI_IOPAD is not set +# CONFIG_USE_GPIO_IOPAD is not set +# CONFIG_USE_CAN_IOPAD is not set +# CONFIG_USE_QSPI_IOPAD is not set +# CONFIG_USE_PWM_IOPAD is not set +# CONFIG_USE_MIO_IOPAD is not set +# CONFIG_USE_TACHO_IOPAD is not set +# CONFIG_USE_UART_IOPAD is not set +# CONFIG_USE_THIRD_PARTY_IOPAD is not set +CONFIG_FIREFLY_DEMO_BOARD=y # -# Usart Configuration +# IO mux configuration when board start up # -CONFIG_ENABLE_Pl011_UART=y -# CONFIG_USE_GPIO is not set -CONFIG_USE_ETH=y - -# -# Eth Configuration -# -CONFIG_ENABLE_FXMAC=y -# CONFIG_ENABLE_FGMAC is not set -CONFIG_FXMAC_PHY_COMMON=y -# CONFIG_FXMAC_PHY_YT is not set -# CONFIG_USE_CAN is not set -# CONFIG_USE_I2C is not set -# CONFIG_USE_TIMER is not set -# CONFIG_USE_MIO is not set -# CONFIG_USE_SDMMC is not set -# CONFIG_USE_PCIE is not set -# CONFIG_USE_WDT is not set -# CONFIG_USE_DMA is not set -# CONFIG_USE_NAND is not set -# CONFIG_USE_RTC is not set -# CONFIG_USE_SATA is not set -# CONFIG_USE_USB is not set -# CONFIG_USE_ADC is not set -# CONFIG_USE_PWM is not set -# CONFIG_USE_IPC is not set -# CONFIG_USE_MEDIA is not set -# CONFIG_USE_SCMI_MHU is not set +# CONFIG_CUS_DEMO_BOARD is not set # # Sdk common configuration @@ -1235,3 +1264,8 @@ CONFIG_LOG_ERROR=y CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y CONFIG_INTERRUPT_ROLE_MASTER=y # CONFIG_INTERRUPT_ROLE_SLAVE is not set + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set diff --git a/bsp/phytium/aarch32/configs/phytium_pi_rtthread.h b/bsp/phytium/aarch32/configs/phytium_pi_rtthread.h index a5f9526874..e38d0cac17 100644 --- a/bsp/phytium/aarch32/configs/phytium_pi_rtthread.h +++ b/bsp/phytium/aarch32/configs/phytium_pi_rtthread.h @@ -51,14 +51,12 @@ #define RT_USING_SLAB_AS_HEAP #define RT_USING_HEAP_ISR #define RT_USING_HEAP - -/* Kernel Device Object */ - #define RT_USING_DEVICE #define RT_USING_CONSOLE #define RT_CONSOLEBUF_SIZE 256 #define RT_CONSOLE_DEVICE_NAME "uart1" -#define RT_VER_NUM 0x50001 +#define RT_VER_NUM 0x50100 +#define RT_BACKTRACE_LEVEL_MAX_NR 32 #define RT_USING_CACHE #define RT_USING_HW_ATOMIC #define RT_USING_CPU_FFS @@ -87,6 +85,7 @@ #define MSH_USING_BUILT_IN_COMMANDS #define FINSH_USING_DESCRIPTION #define FINSH_ARG_MAX 10 +#define FINSH_USING_OPTION_COMPLETION /* DFS: device virtual file system */ @@ -132,12 +131,13 @@ #define RT_USING_RANDOM #define RT_USING_RTC #define RT_USING_SDIO -#define RT_SDIO_STACK_SIZE 512 +#define RT_SDIO_STACK_SIZE 4096 #define RT_SDIO_THREAD_PRIORITY 15 -#define RT_MMCSD_STACK_SIZE 1024 +#define RT_MMCSD_STACK_SIZE 4096 #define RT_MMCSD_THREAD_PREORITY 22 #define RT_MMCSD_MAX_PARTITION 16 #define RT_USING_DEV_BUS +#define RT_USING_KTIME /* Using USB */ @@ -245,7 +245,9 @@ #define RT_USING_ADT_BITMAP #define RT_USING_ADT_HASHMAP #define RT_USING_ADT_REF -#define RT_USING_KTIME + +/* Memory management */ + /* RT-Thread Utestcases */ @@ -263,6 +265,9 @@ /* Wiced WiFi */ +/* CYW43012 WiFi */ + + /* IoT Cloud */ @@ -332,7 +337,7 @@ /* Arduino libraries */ -/* Projects */ +/* Projects and Demos */ /* Sensors */ @@ -365,15 +370,16 @@ /* Hardware Drivers */ + /* On-chip Peripheral Drivers */ +#define BSP_USING_IOPAD #define BSP_USING_UART #define RT_USING_UART1 -#define BSP_USING_ETH -#define RT_LWIP_PBUF_POOL_BUFSIZE 1700 -#define BSP_USING_SDIO +#define BSP_USING_SDIF #define BSP_USING_SDCARD_FATFS -#define USING_SDIO0 +#define BSP_USING_SDCARD_PARTITION "sd1" +#define USING_SDIF0 /* Board extended module Drivers */ @@ -384,29 +390,25 @@ #define TARGET_ARMV8_AARCH32 #define USE_AARCH64_L1_TO_AARCH32 -/* Board Configuration */ +/* Soc configuration */ #define TARGET_PHYTIUMPI +#define SOC_NAME "phytiumpi" +#define SOC_CORE_NUM 4 +#define F32BIT_MEMORY_ADDRESS 0x80000000 +#define F32BIT_MEMORY_LENGTH 0x80000000 +#define F64BIT_MEMORY_ADDRESS 0x2000000000 +#define F64BIT_MEMORY_LENGTH 0x800000000 #define TARGET_E2000 #define DEFAULT_DEBUG_PRINT_UART1 -/* Components Configuration */ +/* Board Configuration */ -#define USE_GIC -#define ENABLE_GICV3 -#define USE_IOPAD -#define ENABLE_IOPAD -#define USE_SERIAL +#define BOARD_NAME "firefly" +#define FIREFLY_DEMO_BOARD -/* Usart Configuration */ +/* IO mux configuration when board start up */ -#define ENABLE_Pl011_UART -#define USE_ETH - -/* Eth Configuration */ - -#define ENABLE_FXMAC -#define FXMAC_PHY_COMMON /* Sdk common configuration */ @@ -414,4 +416,7 @@ #define USE_DEFAULT_INTERRUPT_CONFIG #define INTERRUPT_ROLE_MASTER +/* Image information configuration */ + + #endif diff --git a/bsp/phytium/aarch32/figures/board_select.png b/bsp/phytium/aarch32/figures/board_select.png new file mode 100644 index 0000000000..363998af85 Binary files /dev/null and b/bsp/phytium/aarch32/figures/board_select.png differ diff --git a/bsp/phytium/aarch32/figures/chip_select.png b/bsp/phytium/aarch32/figures/chip_select.png deleted file mode 100644 index 26878fe235..0000000000 Binary files a/bsp/phytium/aarch32/figures/chip_select.png and /dev/null differ diff --git a/bsp/phytium/aarch32/figures/debug_info.png b/bsp/phytium/aarch32/figures/debug_info.png new file mode 100644 index 0000000000..6df66ce369 Binary files /dev/null and b/bsp/phytium/aarch32/figures/debug_info.png differ diff --git a/bsp/phytium/aarch32/figures/phytium_cpu_select.png b/bsp/phytium/aarch32/figures/phytium_cpu_select.png deleted file mode 100644 index 40af2b41c6..0000000000 Binary files a/bsp/phytium/aarch32/figures/phytium_cpu_select.png and /dev/null differ diff --git a/bsp/phytium/aarch32/figures/select_debug_info.png b/bsp/phytium/aarch32/figures/select_debug_info.png deleted file mode 100644 index 8d22436940..0000000000 Binary files a/bsp/phytium/aarch32/figures/select_debug_info.png and /dev/null differ diff --git a/bsp/phytium/aarch32/makefile b/bsp/phytium/aarch32/makefile index 16202d7b9a..94322ca12c 100644 --- a/bsp/phytium/aarch32/makefile +++ b/bsp/phytium/aarch32/makefile @@ -13,12 +13,12 @@ OD = $(RTT_EXEC_PATH)/$(RTT_CC_PREFIX)objdump include .config -ifdef CONFIG_TARGET_E2000Q -RTCONFIG := e2000q +ifdef CONFIG_E2000Q_DEMO_BOARD +RTCONFIG := e2000q_demo endif -ifdef CONFIG_TARGET_E2000D -RTCONFIG := e2000d +ifdef CONFIG_E2000D_DEMO_BOARD +RTCONFIG := e2000d_demo endif ifdef CONFIG_TARGET_PHYTIUMPI @@ -61,52 +61,52 @@ saveconfig: @cp ./.config ./configs/$(RTCONFIG) -f @cp ./rtconfig.h ./configs/$(RTCONFIG).h -f -load_e2000q_rtsmart: - @echo "Load configs from ./configs/e2000q_rtsmart" - @cp ./configs/e2000q_rtsmart ./.config -f - @cp ./configs/e2000q_rtsmart.h ./rtconfig.h -f +load_e2000q_demo_rtsmart: + @echo "Load configs from ./configs/e2000q_demo_rtsmart" + @cp ./configs/e2000q_demo_rtsmart ./.config -f + @cp ./configs/e2000q_demo_rtsmart.h ./rtconfig.h -f @scons -c -load_e2000q_rtsmart_test: - @echo "Load configs from ./configs/e2000q_rtsmart_test" - @cp ./configs/e2000q_rtsmart_test ./.config -f - @cp ./configs/e2000q_rtsmart_test.h ./rtconfig.h -f +load_e2000q_demo_rtsmart_test: + @echo "Load configs from ./configs/e2000q_demo_rtsmart_test" + @cp ./configs/e2000q_demo_rtsmart_test ./.config -f + @cp ./configs/e2000q_demo_rtsmart_test.h ./rtconfig.h -f @scons -c -load_e2000q_rtthread: - @echo "Load configs from ./configs/e2000q_rtthread" - @cp ./configs/e2000q_rtthread ./.config -f - @cp ./configs/e2000q_rtthread.h ./rtconfig.h -f +load_e2000q_demo_rtthread: + @echo "Load configs from ./configs/e2000q_demo_rtthread" + @cp ./configs/e2000q_demo_rtthread ./.config -f + @cp ./configs/e2000q_demo_rtthread.h ./rtconfig.h -f @scons -c -load_e2000q_rtthread_test: - @echo "Load configs from ./configs/e2000q_rtthread_test" - @cp ./configs/e2000q_rtthread_test ./.config -f - @cp ./configs/e2000q_rtthread_test.h ./rtconfig.h -f +load_e2000q_demo_rtthread_test: + @echo "Load configs from ./configs/e2000q_demo_rtthread_test" + @cp ./configs/e2000q_demo_rtthread_test ./.config -f + @cp ./configs/e2000q_demo_rtthread_test.h ./rtconfig.h -f @scons -c -load_e2000d_rtsmart: - @echo "Load configs from ./configs/e2000d_rtsmart" - @cp ./configs/e2000d_rtsmart ./.config -f - @cp ./configs/e2000d_rtsmart.h ./rtconfig.h -f +load_e2000d_demo_rtsmart: + @echo "Load configs from ./configs/e2000d_demo_rtsmart" + @cp ./configs/e2000d_demo_rtsmart ./.config -f + @cp ./configs/e2000d_demo_rtsmart.h ./rtconfig.h -f @scons -c -load_e2000d_rtsmart_test: - @echo "Load configs from ./configs/e2000d_rtsmart_test" - @cp ./configs/e2000d_rtsmart_test ./.config -f - @cp ./configs/e2000d_rtsmart_test.h ./rtconfig.h -f +load_e2000d_demo_rtsmart_test: + @echo "Load configs from ./configs/e2000d_demo_rtsmart_test" + @cp ./configs/e2000d_demo_rtsmart_test ./.config -f + @cp ./configs/e2000d_demo_rtsmart_test.h ./rtconfig.h -f @scons -c -load_e2000d_rtthread: - @echo "Load configs from ./configs/e2000d_rtthread" - @cp ./configs/e2000d_rtthread ./.config -f - @cp ./configs/e2000d_rtthread.h ./rtconfig.h -f +load_e2000d_demo_rtthread: + @echo "Load configs from ./configs/e2000d_demo_rtthread" + @cp ./configs/e2000d_demo_rtthread ./.config -f + @cp ./configs/e2000d_demo_rtthread.h ./rtconfig.h -f scons -c -load_e2000d_rtthread_test: - @echo "Load configs from ./configs/e2000d_rtthread_test" - @cp ./configs/e2000d_rtthread_test ./.config -f - @cp ./configs/e2000d_rtthread_test.h ./rtconfig.h -f +load_e2000d_demo_rtthread_test: + @echo "Load configs from ./configs/e2000d_demo_rtthread_test" + @cp ./configs/e2000d_demo_rtthread_test ./.config -f + @cp ./configs/e2000d_demo_rtthread_test.h ./rtconfig.h -f scons -c load_phytium_pi_rtthread: diff --git a/bsp/phytium/aarch32/rtconfig.h b/bsp/phytium/aarch32/rtconfig.h index cb19a36b91..e38d0cac17 100644 --- a/bsp/phytium/aarch32/rtconfig.h +++ b/bsp/phytium/aarch32/rtconfig.h @@ -7,7 +7,6 @@ /* RT-Thread Kernel */ #define RT_NAME_MAX 16 -#define RT_USING_SMART #define RT_USING_SMP #define RT_CPUS_NR 4 #define RT_ALIGN_SIZE 4 @@ -52,21 +51,18 @@ #define RT_USING_SLAB_AS_HEAP #define RT_USING_HEAP_ISR #define RT_USING_HEAP - -/* Kernel Device Object */ - #define RT_USING_DEVICE #define RT_USING_CONSOLE #define RT_CONSOLEBUF_SIZE 256 #define RT_CONSOLE_DEVICE_NAME "uart1" -#define RT_VER_NUM 0x50002 +#define RT_VER_NUM 0x50100 +#define RT_BACKTRACE_LEVEL_MAX_NR 32 #define RT_USING_CACHE #define RT_USING_HW_ATOMIC #define RT_USING_CPU_FFS #define ARCH_MM_MMU #define ARCH_ARM #define ARCH_ARM_MMU -#define KERNEL_VADDR_START 0xc0000000 #define ARCH_ARM_CORTEX_A #define RT_USING_GIC_V3 @@ -118,14 +114,6 @@ #define RT_USING_DFS_DEVFS #define RT_USING_DFS_RAMFS #define RT_USING_DFS_MQUEUE -#define RT_USING_LWP -#define RT_LWP_MAX_NR 30 -#define LWP_TASK_STACK_SIZE 16384 -#define RT_CH_MSG_MAX_NR 1024 -#define LWP_CONSOLE_INPUT_BUFFER_SIZE 1024 -#define LWP_TID_MAX_NR 64 -#define LWP_ENABLE_ASID -#define RT_LWP_SHM_MAX_NR 64 /* Device Drivers */ @@ -138,15 +126,14 @@ #define RT_USING_SERIAL_V1 #define RT_SERIAL_USING_DMA #define RT_SERIAL_RB_BUFSZ 1024 -#define RT_USING_TTY #define RT_USING_NULL #define RT_USING_ZERO #define RT_USING_RANDOM #define RT_USING_RTC #define RT_USING_SDIO -#define RT_SDIO_STACK_SIZE 512 +#define RT_SDIO_STACK_SIZE 4096 #define RT_SDIO_THREAD_PRIORITY 15 -#define RT_MMCSD_STACK_SIZE 1024 +#define RT_MMCSD_STACK_SIZE 4096 #define RT_MMCSD_THREAD_PREORITY 22 #define RT_MMCSD_MAX_PARTITION 16 #define RT_USING_DEV_BUS @@ -259,6 +246,9 @@ #define RT_USING_ADT_HASHMAP #define RT_USING_ADT_REF +/* Memory management */ + + /* RT-Thread Utestcases */ @@ -275,6 +265,9 @@ /* Wiced WiFi */ +/* CYW43012 WiFi */ + + /* IoT Cloud */ @@ -377,16 +370,16 @@ /* Hardware Drivers */ + /* On-chip Peripheral Drivers */ +#define BSP_USING_IOPAD #define BSP_USING_UART #define RT_USING_UART1 -#define BSP_USING_ETH -#define RT_LWIP_PBUF_POOL_BUFSIZE 1700 -#define BSP_USING_SDIO +#define BSP_USING_SDIF #define BSP_USING_SDCARD_FATFS -#define USING_SDIO0 -#define SDCARD_OFFSET 0x0 +#define BSP_USING_SDCARD_PARTITION "sd1" +#define USING_SDIF0 /* Board extended module Drivers */ @@ -397,29 +390,25 @@ #define TARGET_ARMV8_AARCH32 #define USE_AARCH64_L1_TO_AARCH32 -/* Board Configuration */ +/* Soc configuration */ #define TARGET_PHYTIUMPI +#define SOC_NAME "phytiumpi" +#define SOC_CORE_NUM 4 +#define F32BIT_MEMORY_ADDRESS 0x80000000 +#define F32BIT_MEMORY_LENGTH 0x80000000 +#define F64BIT_MEMORY_ADDRESS 0x2000000000 +#define F64BIT_MEMORY_LENGTH 0x800000000 #define TARGET_E2000 #define DEFAULT_DEBUG_PRINT_UART1 -/* Components Configuration */ +/* Board Configuration */ -#define USE_GIC -#define ENABLE_GICV3 -#define USE_IOPAD -#define ENABLE_IOPAD -#define USE_SERIAL +#define BOARD_NAME "firefly" +#define FIREFLY_DEMO_BOARD -/* Usart Configuration */ +/* IO mux configuration when board start up */ -#define ENABLE_Pl011_UART -#define USE_ETH - -/* Eth Configuration */ - -#define ENABLE_FXMAC -#define FXMAC_PHY_COMMON /* Sdk common configuration */ @@ -427,4 +416,7 @@ #define USE_DEFAULT_INTERRUPT_CONFIG #define INTERRUPT_ROLE_MASTER +/* Image information configuration */ + + #endif diff --git a/bsp/phytium/aarch64/.config b/bsp/phytium/aarch64/.config index 92291403b1..c65e8998d2 100644 --- a/bsp/phytium/aarch64/.config +++ b/bsp/phytium/aarch64/.config @@ -24,7 +24,6 @@ CONFIG_RT_HOOK_USING_FUNC_PTR=y CONFIG_RT_USING_IDLE_HOOK=y CONFIG_RT_IDLE_HOOK_LIST_SIZE=4 CONFIG_IDLE_THREAD_STACK_SIZE=8192 -CONFIG_SYSTEM_THREAD_STACK_SIZE=8192 CONFIG_RT_USING_TIMER_SOFT=y CONFIG_RT_TIMER_THREAD_PRIO=4 CONFIG_RT_TIMER_THREAD_STACK_SIZE=8192 @@ -72,19 +71,15 @@ CONFIG_RT_USING_SLAB_AS_HEAP=y # CONFIG_RT_USING_MEMTRACE is not set CONFIG_RT_USING_HEAP_ISR=y CONFIG_RT_USING_HEAP=y - -# -# Kernel Device Object -# CONFIG_RT_USING_DEVICE=y # CONFIG_RT_USING_DEVICE_OPS is not set -# CONFIG_RT_USING_DM is not set # CONFIG_RT_USING_INTERRUPT_INFO is not set CONFIG_RT_USING_CONSOLE=y CONFIG_RT_CONSOLEBUF_SIZE=128 CONFIG_RT_CONSOLE_DEVICE_NAME="uart1" -CONFIG_RT_VER_NUM=0x50002 +CONFIG_RT_VER_NUM=0x50100 # CONFIG_RT_USING_STDC_ATOMIC is not set +CONFIG_RT_BACKTRACE_LEVEL_MAX_NR=32 # # AArch64 Architecture Configuration @@ -176,6 +171,7 @@ CONFIG_RT_USING_DFS_RAMFS=y # # Device Drivers # +# CONFIG_RT_USING_DM is not set CONFIG_RT_USING_DEVICE_IPC=y CONFIG_RT_UNAMED_PIPE_NUMBER=64 CONFIG_RT_USING_SYSTEM_WORKQUEUE=y @@ -201,14 +197,13 @@ CONFIG_RT_USING_RANDOM=y # CONFIG_RT_USING_MTD_NOR is not set # CONFIG_RT_USING_MTD_NAND is not set # CONFIG_RT_USING_PM is not set -# CONFIG_RT_USING_FDT is not set CONFIG_RT_USING_RTC=y # CONFIG_RT_USING_ALARM is not set # CONFIG_RT_USING_SOFT_RTC is not set CONFIG_RT_USING_SDIO=y -CONFIG_RT_SDIO_STACK_SIZE=4096 +CONFIG_RT_SDIO_STACK_SIZE=8192 CONFIG_RT_SDIO_THREAD_PRIORITY=15 -CONFIG_RT_MMCSD_STACK_SIZE=4096 +CONFIG_RT_MMCSD_STACK_SIZE=8192 CONFIG_RT_MMCSD_THREAD_PREORITY=22 CONFIG_RT_MMCSD_MAX_PARTITION=16 # CONFIG_RT_SDIO_DEBUG is not set @@ -344,7 +339,7 @@ CONFIG_RT_LWIP_TCPTHREAD_STACKSIZE=16184 # CONFIG_LWIP_NO_RX_THREAD is not set # CONFIG_LWIP_NO_TX_THREAD is not set CONFIG_RT_LWIP_ETHTHREAD_PRIORITY=12 -CONFIG_RT_LWIP_ETHTHREAD_STACKSIZE=2048 +CONFIG_RT_LWIP_ETHTHREAD_STACKSIZE=8192 CONFIG_RT_LWIP_ETHTHREAD_MBOX_SIZE=8 # CONFIG_RT_LWIP_REASSEMBLY_FRAG is not set CONFIG_LWIP_NETIF_STATUS_CALLBACK=1 @@ -409,6 +404,11 @@ CONFIG_RT_USING_ADT_REF=y # CONFIG_RT_USING_RT_LINK is not set # CONFIG_RT_USING_VBUS is not set +# +# Memory management +# +# CONFIG_RT_USING_MEMBLOCK is not set + # # RT-Thread Utestcases # @@ -449,6 +449,11 @@ CONFIG_RT_USING_ADT_REF=y # # CONFIG_PKG_USING_WLAN_WICED is not set # CONFIG_PKG_USING_RW007 is not set + +# +# CYW43012 WiFi +# +# CONFIG_PKG_USING_WLAN_CYW43012 is not set # CONFIG_PKG_USING_COAP is not set # CONFIG_PKG_USING_NOPOLL is not set # CONFIG_PKG_USING_NETUTILS is not set @@ -491,6 +496,7 @@ CONFIG_RT_USING_ADT_REF=y # CONFIG_PKG_USING_NMEALIB is not set # CONFIG_PKG_USING_PDULIB is not set # CONFIG_PKG_USING_BTSTACK is not set +# CONFIG_PKG_USING_BT_CYW43012 is not set # CONFIG_PKG_USING_LORAWAN_ED_STACK is not set # CONFIG_PKG_USING_WAYZ_IOTKIT is not set # CONFIG_PKG_USING_MAVLINK is not set @@ -510,6 +516,8 @@ CONFIG_RT_USING_ADT_REF=y # CONFIG_PKG_USING_ZFTP is not set # CONFIG_PKG_USING_WOL is not set # CONFIG_PKG_USING_ZEPHYR_POLLING is not set +# CONFIG_PKG_USING_MATTER_ADAPTATION_LAYER is not set +# CONFIG_PKG_USING_LHC_MODBUS is not set # # security packages @@ -556,7 +564,6 @@ CONFIG_RT_USING_ADT_REF=y # LVGL: powerful and easy-to-use embedded GUI library # # CONFIG_PKG_USING_LVGL is not set -# CONFIG_PKG_USING_LITTLEVGL2RTT is not set # CONFIG_PKG_USING_LV_MUSIC_DEMO is not set # CONFIG_PKG_USING_GUI_GUIDER_DEMO is not set @@ -631,6 +638,7 @@ CONFIG_RT_USING_ADT_REF=y # CONFIG_PKG_USING_HASH_MATCH is not set # CONFIG_PKG_USING_ARMV7M_DWT_TOOL is not set # CONFIG_PKG_USING_VOFA_PLUS is not set +# CONFIG_PKG_USING_ZDEBUG is not set # # system packages @@ -667,6 +675,8 @@ CONFIG_RT_USING_ADT_REF=y # CONFIG_PKG_USING_UC_COMMON is not set # CONFIG_PKG_USING_UC_MODBUS is not set # CONFIG_PKG_USING_FREERTOS_WRAPPER is not set +# CONFIG_PKG_USING_LITEOS_SDK is not set +# CONFIG_PKG_USING_TZ_DATABASE is not set # CONFIG_PKG_USING_CAIRO is not set # CONFIG_PKG_USING_PIXMAN is not set # CONFIG_PKG_USING_PARTITION is not set @@ -690,6 +700,7 @@ CONFIG_RT_USING_ADT_REF=y # CONFIG_PKG_USING_QBOOT is not set # CONFIG_PKG_USING_PPOOL is not set # CONFIG_PKG_USING_OPENAMP is not set +# CONFIG_PKG_USING_RPMSG_LITE is not set # CONFIG_PKG_USING_LPM is not set # CONFIG_PKG_USING_TLSF is not set # CONFIG_PKG_USING_EVENT_RECORDER is not set @@ -703,6 +714,11 @@ CONFIG_RT_USING_ADT_REF=y # CONFIG_PKG_USING_AGILE_UPGRADE is not set # CONFIG_PKG_USING_FLASH_BLOB is not set # CONFIG_PKG_USING_MLIBC is not set +# CONFIG_PKG_USING_TASK_MSG_BUS is not set +# CONFIG_PKG_USING_SFDB is not set +# CONFIG_PKG_USING_RTP is not set +# CONFIG_PKG_USING_REB is not set +# CONFIG_PKG_USING_R_RHEALSTONE is not set # # peripheral libraries and drivers @@ -767,6 +783,7 @@ CONFIG_RT_USING_ADT_REF=y # CONFIG_PKG_USING_BALANCE is not set # CONFIG_PKG_USING_SHT2X is not set # CONFIG_PKG_USING_SHT3X is not set +# CONFIG_PKG_USING_SHT4X is not set # CONFIG_PKG_USING_AD7746 is not set # CONFIG_PKG_USING_ADT74XX is not set # CONFIG_PKG_USING_MAX17048 is not set @@ -867,6 +884,10 @@ CONFIG_RT_USING_ADT_REF=y # CONFIG_PKG_USING_FINGERPRINT is not set # CONFIG_PKG_USING_BT_ECB02C is not set # CONFIG_PKG_USING_UAT is not set +# CONFIG_PKG_USING_ST7789 is not set +# CONFIG_PKG_USING_VS1003 is not set +# CONFIG_PKG_USING_X9555 is not set +# CONFIG_PKG_USING_SYSTEM_RUN_LED is not set # CONFIG_PKG_USING_SPI_TOOLS is not set # @@ -882,6 +903,7 @@ CONFIG_RT_USING_ADT_REF=y # CONFIG_PKG_USING_QUEST is not set # CONFIG_PKG_USING_NAXOS is not set # CONFIG_PKG_USING_NCNN is not set +# CONFIG_PKG_USING_R_TINYMAIX is not set # # Signal Processing and Control Algorithm Packages @@ -952,6 +974,7 @@ CONFIG_PKG_USING_KERNEL_SAMPLES_EN=y # CONFIG_PKG_USING_MINILZO is not set # CONFIG_PKG_USING_QUICKLZ is not set # CONFIG_PKG_USING_LZMA is not set +# CONFIG_PKG_USING_RALARAM is not set # CONFIG_PKG_USING_MULTIBUTTON is not set # CONFIG_PKG_USING_FLEXIBLE_BUTTON is not set # CONFIG_PKG_USING_CANFESTIVAL is not set @@ -1136,6 +1159,7 @@ CONFIG_PKG_USING_KERNEL_SAMPLES_EN=y # # CONFIG_PKG_USING_ARDUINO_ADAFRUIT_GFX_LIBRARY is not set # CONFIG_PKG_USING_ARDUINO_U8G2 is not set +# CONFIG_PKG_USING_ARDUINO_TFT_ESPI is not set # CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ST7735 is not set # CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SSD1306 is not set # CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ILI9341 is not set @@ -1144,6 +1168,7 @@ CONFIG_PKG_USING_KERNEL_SAMPLES_EN=y # # Timing # +# CONFIG_PKG_USING_ARDUINO_RTCLIB is not set # CONFIG_PKG_USING_ARDUINO_MSTIMER2 is not set # CONFIG_PKG_USING_ARDUINO_TICKER is not set # CONFIG_PKG_USING_ARDUINO_TASKSCHEDULER is not set @@ -1180,7 +1205,6 @@ CONFIG_PKG_USING_KERNEL_SAMPLES_EN=y # # CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MFRC630 is not set # CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI5351 is not set -# CONFIG_PKG_USING_ARDUINO_RTCLIB is not set # # Signal IO @@ -1201,10 +1225,12 @@ CONFIG_PKG_USING_KERNEL_SAMPLES_EN=y # # Hardware Drivers # +CONFIG_DRV_DEBUG=y # # On-chip Peripheral Drivers # +CONFIG_BSP_USING_IOPAD=y CONFIG_BSP_USING_UART=y CONFIG_RT_USING_UART1=y # CONFIG_RT_USING_UART0 is not set @@ -1212,9 +1238,15 @@ CONFIG_RT_USING_UART1=y # CONFIG_BSP_USING_CAN is not set # CONFIG_BSP_USING_GPIO is not set # CONFIG_BSP_USING_QSPI is not set -CONFIG_BSP_USING_ETH=y -CONFIG_RT_LWIP_PBUF_POOL_BUFSIZE=1700 -# CONFIG_BSP_USING_SDIO is not set +# CONFIG_BSP_USING_ETH is not set +# CONFIG_BSP_USING_PWM is not set +# CONFIG_BSP_USING_I2C is not set +CONFIG_BSP_USING_SDIF=y +CONFIG_BSP_USING_SDCARD_FATFS=y +CONFIG_BSP_USING_SDCARD_PARTITION="sd1" +CONFIG_USING_SDIF0=y +# CONFIG_USING_SDIF1 is not set +# CONFIG_USING_EMMC is not set # # Board extended module Drivers @@ -1230,77 +1262,62 @@ CONFIG_ARM_SPI_BIND_CPU_ID=2 CONFIG_TARGET_ARMV8_AARCH64=y # -# Board Configuration +# Soc configuration # -# CONFIG_TARGET_F2000_4 is not set -# CONFIG_TARGET_D2000 is not set +CONFIG_TARGET_PHYTIUMPI=y # CONFIG_TARGET_E2000Q is not set # CONFIG_TARGET_E2000D is not set # CONFIG_TARGET_E2000S is not set -CONFIG_TARGET_PHYTIUMPI=y +# CONFIG_TARGET_FT2004 is not set +# CONFIG_TARGET_D2000 is not set +CONFIG_SOC_NAME="phytiumpi" +CONFIG_SOC_CORE_NUM=4 +CONFIG_F32BIT_MEMORY_ADDRESS=0x80000000 +CONFIG_F32BIT_MEMORY_LENGTH=0x80000000 +CONFIG_F64BIT_MEMORY_ADDRESS=0x2000000000 +CONFIG_F64BIT_MEMORY_LENGTH=0x800000000 CONFIG_TARGET_E2000=y +# CONFIG_USE_SPINLOCK is not set CONFIG_DEFAULT_DEBUG_PRINT_UART1=y # CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set # CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set # -# Components Configuration +# Board Configuration # -CONFIG_USE_SPI=y -CONFIG_USE_FSPIM=y -CONFIG_USE_QSPI=y +CONFIG_BOARD_NAME="firefly" +# CONFIG_USE_SPI_IOPAD is not set +# CONFIG_USE_GPIO_IOPAD is not set +# CONFIG_USE_CAN_IOPAD is not set +# CONFIG_USE_QSPI_IOPAD is not set +# CONFIG_USE_PWM_IOPAD is not set +# CONFIG_USE_MIO_IOPAD is not set +# CONFIG_USE_TACHO_IOPAD is not set +# CONFIG_USE_UART_IOPAD is not set +# CONFIG_USE_THIRD_PARTY_IOPAD is not set +# CONFIG_E2000Q_DEMO_BOARD is not set +CONFIG_FIREFLY_DEMO_BOARD=y # -# Qspi Configuration +# IO mux configuration when board start up # -CONFIG_USE_FQSPI=y -# CONFIG_USE_GIC is not set -CONFIG_USE_IOPAD=y -CONFIG_ENABLE_IOPAD=y -CONFIG_USE_SERIAL=y - -# -# Usart Configuration -# -CONFIG_ENABLE_Pl011_UART=y -# CONFIG_USE_GPIO is not set -CONFIG_USE_ETH=y - -# -# Eth Configuration -# -CONFIG_ENABLE_FXMAC=y -# CONFIG_ENABLE_FGMAC is not set -CONFIG_FXMAC_PHY_COMMON=y -# CONFIG_FXMAC_PHY_YT is not set -# CONFIG_USE_CAN is not set -# CONFIG_USE_I2C is not set -# CONFIG_USE_TIMER is not set -# CONFIG_USE_MIO is not set -# CONFIG_USE_SDMMC is not set -# CONFIG_USE_PCIE is not set -# CONFIG_USE_WDT is not set -# CONFIG_USE_DMA is not set -# CONFIG_USE_NAND is not set -# CONFIG_USE_RTC is not set -# CONFIG_USE_SATA is not set -# CONFIG_USE_USB is not set -# CONFIG_USE_ADC is not set -# CONFIG_USE_PWM is not set -# CONFIG_USE_IPC is not set -# CONFIG_USE_MEDIA is not set -# CONFIG_USE_SCMI_MHU is not set +# CONFIG_CUS_DEMO_BOARD is not set # # Sdk common configuration # # CONFIG_LOG_VERBOS is not set -# CONFIG_LOG_DEBUG is not set +CONFIG_LOG_DEBUG=y # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set -CONFIG_LOG_ERROR=y +# CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set # CONFIG_USE_DEFAULT_INTERRUPT_CONFIG is not set + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set diff --git a/bsp/phytium/aarch64/.configs b/bsp/phytium/aarch64/.configs deleted file mode 100644 index c1497e82e5..0000000000 --- a/bsp/phytium/aarch64/.configs +++ /dev/null @@ -1,1116 +0,0 @@ -# -# Automatically generated file; DO NOT EDIT. -# RT-Thread Project Configuration -# - -# -# RT-Thread Kernel -# -CONFIG_RT_NAME_MAX=16 -# CONFIG_RT_USING_ARCH_DATA_TYPE is not set -# CONFIG_RT_USING_SMART is not set -# CONFIG_RT_USING_SMP is not set -CONFIG_RT_ALIGN_SIZE=4 -# CONFIG_RT_THREAD_PRIORITY_8 is not set -CONFIG_RT_THREAD_PRIORITY_32=y -# CONFIG_RT_THREAD_PRIORITY_256 is not set -CONFIG_RT_THREAD_PRIORITY_MAX=32 -CONFIG_RT_TICK_PER_SECOND=1000 -CONFIG_RT_USING_OVERFLOW_CHECK=y -CONFIG_RT_USING_HOOK=y -CONFIG_RT_HOOK_USING_FUNC_PTR=y -CONFIG_RT_USING_IDLE_HOOK=y -CONFIG_RT_IDLE_HOOK_LIST_SIZE=4 -CONFIG_IDLE_THREAD_STACK_SIZE=40960 -CONFIG_RT_USING_TIMER_SOFT=y -CONFIG_RT_TIMER_THREAD_PRIO=4 -CONFIG_RT_TIMER_THREAD_STACK_SIZE=4096 - -# -# kservice optimization -# -CONFIG_RT_KSERVICE_USING_STDLIB=y -# CONFIG_RT_KSERVICE_USING_STDLIB_MEMORY is not set -# CONFIG_RT_KSERVICE_USING_TINY_SIZE is not set -# CONFIG_RT_USING_TINY_FFS is not set -CONFIG_RT_KPRINTF_USING_LONGLONG=y -CONFIG_RT_DEBUG=y -# CONFIG_RT_DEBUG_COLOR is not set -# CONFIG_RT_DEBUG_INIT_CONFIG is not set -# CONFIG_RT_DEBUG_THREAD_CONFIG is not set -# CONFIG_RT_DEBUG_SCHEDULER_CONFIG is not set -# CONFIG_RT_DEBUG_IPC_CONFIG is not set -# CONFIG_RT_DEBUG_TIMER_CONFIG is not set -# CONFIG_RT_DEBUG_IRQ_CONFIG is not set -# CONFIG_RT_DEBUG_MEM_CONFIG is not set -# CONFIG_RT_DEBUG_SLAB_CONFIG is not set -# CONFIG_RT_DEBUG_MEMHEAP_CONFIG is not set -# CONFIG_RT_DEBUG_MODULE_CONFIG is not set - -# -# Inter-Thread communication -# -CONFIG_RT_USING_SEMAPHORE=y -CONFIG_RT_USING_MUTEX=y -CONFIG_RT_USING_EVENT=y -CONFIG_RT_USING_MAILBOX=y -CONFIG_RT_USING_MESSAGEQUEUE=y -# CONFIG_RT_USING_SIGNALS is not set - -# -# Memory Management -# -CONFIG_RT_PAGE_MAX_ORDER=11 -CONFIG_RT_USING_MEMPOOL=y -CONFIG_RT_USING_SMALL_MEM=y -# CONFIG_RT_USING_SLAB is not set -CONFIG_RT_USING_MEMHEAP=y -CONFIG_RT_MEMHEAP_FAST_MODE=y -# CONFIG_RT_MEMHEAP_BEST_MODE is not set -CONFIG_RT_USING_SMALL_MEM_AS_HEAP=y -# CONFIG_RT_USING_MEMHEAP_AS_HEAP is not set -# CONFIG_RT_USING_SLAB_AS_HEAP is not set -# CONFIG_RT_USING_USERHEAP is not set -# CONFIG_RT_USING_NOHEAP is not set -# CONFIG_RT_USING_MEMTRACE is not set -# CONFIG_RT_USING_HEAP_ISR is not set -CONFIG_RT_USING_HEAP=y - -# -# Kernel Device Object -# -CONFIG_RT_USING_DEVICE=y -# CONFIG_RT_USING_DEVICE_OPS is not set -# CONFIG_RT_USING_DM is not set -# CONFIG_RT_USING_INTERRUPT_INFO is not set -CONFIG_RT_USING_CONSOLE=y -CONFIG_RT_CONSOLEBUF_SIZE=128 -CONFIG_RT_CONSOLE_DEVICE_NAME="uart1" -CONFIG_RT_VER_NUM=0x50001 -# CONFIG_RT_USING_STDC_ATOMIC is not set -CONFIG_ARCH_CPU_64BIT=y -CONFIG_RT_USING_CACHE=y -CONFIG_RT_USING_HW_ATOMIC=y -CONFIG_ARCH_ARM_BOOTWITH_FLUSH_CACHE=y -# CONFIG_ARCH_CPU_STACK_GROWS_UPWARD is not set -# CONFIG_RT_USING_CPU_FFS is not set -CONFIG_ARCH_MM_MMU=y -CONFIG_ARCH_ARM=y -CONFIG_ARCH_ARM_MMU=y -CONFIG_ARCH_ARMV8=y - -# -# RT-Thread Components -# -CONFIG_RT_USING_COMPONENTS_INIT=y -CONFIG_RT_USING_USER_MAIN=y -CONFIG_RT_MAIN_THREAD_STACK_SIZE=8192 -CONFIG_RT_MAIN_THREAD_PRIORITY=10 -# CONFIG_RT_USING_LEGACY is not set -CONFIG_RT_USING_MSH=y -CONFIG_RT_USING_FINSH=y -CONFIG_FINSH_USING_MSH=y -CONFIG_FINSH_THREAD_NAME="tshell" -CONFIG_FINSH_THREAD_PRIORITY=20 -CONFIG_FINSH_THREAD_STACK_SIZE=4096 -CONFIG_FINSH_USING_HISTORY=y -CONFIG_FINSH_HISTORY_LINES=5 -CONFIG_FINSH_USING_SYMTAB=y -CONFIG_FINSH_CMD_SIZE=80 -CONFIG_MSH_USING_BUILT_IN_COMMANDS=y -CONFIG_FINSH_USING_DESCRIPTION=y -# CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set -# CONFIG_FINSH_USING_AUTH is not set -CONFIG_FINSH_ARG_MAX=10 - -# -# DFS: device virtual file system -# -CONFIG_RT_USING_DFS=y -CONFIG_DFS_USING_POSIX=y -CONFIG_DFS_USING_WORKDIR=y -# CONFIG_RT_USING_DFS_MNTTABLE is not set -CONFIG_DFS_FD_MAX=16 -CONFIG_RT_USING_DFS_V1=y -# CONFIG_RT_USING_DFS_V2 is not set -CONFIG_DFS_FILESYSTEMS_MAX=4 -CONFIG_DFS_FILESYSTEM_TYPES_MAX=4 -# CONFIG_RT_USING_DFS_ELMFAT is not set -CONFIG_RT_USING_DFS_DEVFS=y -# CONFIG_RT_USING_DFS_ROMFS is not set -# CONFIG_RT_USING_DFS_CROMFS is not set -CONFIG_RT_USING_DFS_RAMFS=y -# CONFIG_RT_USING_DFS_TMPFS is not set -# CONFIG_RT_USING_FAL is not set - -# -# Device Drivers -# -CONFIG_RT_USING_DEVICE_IPC=y -CONFIG_RT_UNAMED_PIPE_NUMBER=64 -CONFIG_RT_USING_SYSTEM_WORKQUEUE=y -CONFIG_RT_SYSTEM_WORKQUEUE_STACKSIZE=8192 -CONFIG_RT_SYSTEM_WORKQUEUE_PRIORITY=23 -CONFIG_RT_USING_SERIAL=y -CONFIG_RT_USING_SERIAL_V1=y -# CONFIG_RT_USING_SERIAL_V2 is not set -CONFIG_RT_SERIAL_USING_DMA=y -CONFIG_RT_SERIAL_RB_BUFSZ=64 -# CONFIG_RT_USING_CAN is not set -# CONFIG_RT_USING_HWTIMER is not set -# CONFIG_RT_USING_CPUTIME is not set -# CONFIG_RT_USING_I2C is not set -# CONFIG_RT_USING_PHY is not set -# CONFIG_RT_USING_PIN is not set -# CONFIG_RT_USING_ADC is not set -# CONFIG_RT_USING_DAC is not set -CONFIG_RT_USING_NULL=y -CONFIG_RT_USING_ZERO=y -CONFIG_RT_USING_RANDOM=y -# CONFIG_RT_USING_PWM is not set -# CONFIG_RT_USING_MTD_NOR is not set -# CONFIG_RT_USING_MTD_NAND is not set -# CONFIG_RT_USING_PM is not set -# CONFIG_RT_USING_FDT is not set -CONFIG_RT_USING_RTC=y -# CONFIG_RT_USING_ALARM is not set -# CONFIG_RT_USING_SOFT_RTC is not set -# CONFIG_RT_USING_SDIO is not set -# CONFIG_RT_USING_SPI is not set -# CONFIG_RT_USING_WDT is not set -# CONFIG_RT_USING_AUDIO is not set -# CONFIG_RT_USING_SENSOR is not set -# CONFIG_RT_USING_TOUCH is not set -# CONFIG_RT_USING_LCD is not set -# CONFIG_RT_USING_HWCRYPTO is not set -# CONFIG_RT_USING_PULSE_ENCODER is not set -# CONFIG_RT_USING_INPUT_CAPTURE is not set -# CONFIG_RT_USING_DEV_BUS is not set -# CONFIG_RT_USING_WIFI is not set -# CONFIG_RT_USING_VIRTIO is not set - -# -# Using USB -# -# CONFIG_RT_USING_USB is not set -# CONFIG_RT_USING_USB_HOST is not set -# CONFIG_RT_USING_USB_DEVICE is not set - -# -# C/C++ and POSIX layer -# -CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8 - -# -# POSIX (Portable Operating System Interface) layer -# -CONFIG_RT_USING_POSIX_FS=y -CONFIG_RT_USING_POSIX_DEVIO=y -CONFIG_RT_USING_POSIX_STDIO=y -# CONFIG_RT_USING_POSIX_POLL is not set -# CONFIG_RT_USING_POSIX_SELECT is not set -# CONFIG_RT_USING_POSIX_SOCKET is not set -CONFIG_RT_USING_POSIX_TERMIOS=y -# CONFIG_RT_USING_POSIX_AIO is not set -# CONFIG_RT_USING_POSIX_MMAN is not set -CONFIG_RT_USING_POSIX_DELAY=y -CONFIG_RT_USING_POSIX_CLOCK=y -CONFIG_RT_USING_POSIX_TIMER=y -# CONFIG_RT_USING_PTHREADS is not set -# CONFIG_RT_USING_MODULE is not set - -# -# Interprocess Communication (IPC) -# -# CONFIG_RT_USING_POSIX_PIPE is not set -# CONFIG_RT_USING_POSIX_MESSAGE_QUEUE is not set -# CONFIG_RT_USING_POSIX_MESSAGE_SEMAPHORE is not set - -# -# Socket is in the 'Network' category -# -# CONFIG_RT_USING_CPLUSPLUS is not set - -# -# Network -# -# CONFIG_RT_USING_SAL is not set -# CONFIG_RT_USING_NETDEV is not set -# CONFIG_RT_USING_LWIP is not set -# CONFIG_RT_USING_AT is not set - -# -# Utilities -# -CONFIG_RT_USING_RYM=y -# CONFIG_YMODEM_USING_CRC_TABLE is not set -CONFIG_YMODEM_USING_FILE_TRANSFER=y -# CONFIG_RT_USING_ULOG is not set -# CONFIG_RT_USING_UTEST is not set -# CONFIG_RT_USING_VAR_EXPORT is not set -CONFIG_RT_USING_ADT=y -# CONFIG_RT_USING_RT_LINK is not set -# CONFIG_RT_USING_VBUS is not set - -# -# RT-Thread Utestcases -# -# CONFIG_RT_USING_UTESTCASES is not set - -# -# RT-Thread online packages -# - -# -# IoT - internet of things -# -# CONFIG_PKG_USING_LWIP is not set -# CONFIG_PKG_USING_LORAWAN_DRIVER is not set -# CONFIG_PKG_USING_PAHOMQTT is not set -# CONFIG_PKG_USING_UMQTT is not set -# CONFIG_PKG_USING_WEBCLIENT is not set -# CONFIG_PKG_USING_WEBNET is not set -# CONFIG_PKG_USING_MONGOOSE is not set -# CONFIG_PKG_USING_MYMQTT is not set -# CONFIG_PKG_USING_KAWAII_MQTT is not set -# CONFIG_PKG_USING_BC28_MQTT is not set -# CONFIG_PKG_USING_WEBTERMINAL is not set -# CONFIG_PKG_USING_LIBMODBUS is not set -# CONFIG_PKG_USING_FREEMODBUS is not set -# CONFIG_PKG_USING_NANOPB is not set - -# -# Wi-Fi -# - -# -# Marvell WiFi -# -# CONFIG_PKG_USING_WLANMARVELL is not set - -# -# Wiced WiFi -# -# CONFIG_PKG_USING_WLAN_WICED is not set -# CONFIG_PKG_USING_RW007 is not set -# CONFIG_PKG_USING_COAP is not set -# CONFIG_PKG_USING_NOPOLL is not set -# CONFIG_PKG_USING_NETUTILS is not set -# CONFIG_PKG_USING_CMUX is not set -# CONFIG_PKG_USING_PPP_DEVICE is not set -# CONFIG_PKG_USING_AT_DEVICE is not set -# CONFIG_PKG_USING_ATSRV_SOCKET is not set -# CONFIG_PKG_USING_WIZNET is not set -# CONFIG_PKG_USING_ZB_COORDINATOR is not set - -# -# IoT Cloud -# -# CONFIG_PKG_USING_ONENET is not set -# CONFIG_PKG_USING_GAGENT_CLOUD is not set -# CONFIG_PKG_USING_ALI_IOTKIT is not set -# CONFIG_PKG_USING_AZURE is not set -# CONFIG_PKG_USING_TENCENT_IOT_EXPLORER is not set -# CONFIG_PKG_USING_JIOT-C-SDK is not set -# CONFIG_PKG_USING_UCLOUD_IOT_SDK is not set -# CONFIG_PKG_USING_JOYLINK is not set -# CONFIG_PKG_USING_EZ_IOT_OS is not set -# CONFIG_PKG_USING_IOTSHARP_SDK is not set -# CONFIG_PKG_USING_NIMBLE is not set -# CONFIG_PKG_USING_LLSYNC_SDK_ADAPTER is not set -# CONFIG_PKG_USING_OTA_DOWNLOADER is not set -# CONFIG_PKG_USING_IPMSG is not set -# CONFIG_PKG_USING_LSSDP is not set -# CONFIG_PKG_USING_AIRKISS_OPEN is not set -# CONFIG_PKG_USING_LIBRWS is not set -# CONFIG_PKG_USING_TCPSERVER is not set -# CONFIG_PKG_USING_PROTOBUF_C is not set -# CONFIG_PKG_USING_DLT645 is not set -# CONFIG_PKG_USING_QXWZ is not set -# CONFIG_PKG_USING_SMTP_CLIENT is not set -# CONFIG_PKG_USING_ABUP_FOTA is not set -# CONFIG_PKG_USING_LIBCURL2RTT is not set -# CONFIG_PKG_USING_CAPNP is not set -# CONFIG_PKG_USING_AGILE_TELNET is not set -# CONFIG_PKG_USING_NMEALIB is not set -# CONFIG_PKG_USING_PDULIB is not set -# CONFIG_PKG_USING_BTSTACK is not set -# CONFIG_PKG_USING_LORAWAN_ED_STACK is not set -# CONFIG_PKG_USING_WAYZ_IOTKIT is not set -# CONFIG_PKG_USING_MAVLINK is not set -# CONFIG_PKG_USING_BSAL is not set -# CONFIG_PKG_USING_AGILE_MODBUS is not set -# CONFIG_PKG_USING_AGILE_FTP is not set -# CONFIG_PKG_USING_EMBEDDEDPROTO is not set -# CONFIG_PKG_USING_RT_LINK_HW is not set -# CONFIG_PKG_USING_RYANMQTT is not set -# CONFIG_PKG_USING_RYANW5500 is not set -# CONFIG_PKG_USING_LORA_PKT_FWD is not set -# CONFIG_PKG_USING_LORA_GW_DRIVER_LIB is not set -# CONFIG_PKG_USING_LORA_PKT_SNIFFER is not set -# CONFIG_PKG_USING_HM is not set -# CONFIG_PKG_USING_SMALL_MODBUS is not set -# CONFIG_PKG_USING_NET_SERVER is not set -# CONFIG_PKG_USING_ZFTP is not set -# CONFIG_PKG_USING_WOL is not set -# CONFIG_PKG_USING_ZEPHYR_POLLING is not set - -# -# security packages -# -# CONFIG_PKG_USING_MBEDTLS is not set -# CONFIG_PKG_USING_LIBSODIUM is not set -# CONFIG_PKG_USING_LIBHYDROGEN is not set -# CONFIG_PKG_USING_TINYCRYPT is not set -# CONFIG_PKG_USING_TFM is not set -# CONFIG_PKG_USING_YD_CRYPTO is not set - -# -# language packages -# - -# -# JSON: JavaScript Object Notation, a lightweight data-interchange format -# -# CONFIG_PKG_USING_CJSON is not set -# CONFIG_PKG_USING_LJSON is not set -# CONFIG_PKG_USING_RT_CJSON_TOOLS is not set -# CONFIG_PKG_USING_RAPIDJSON is not set -# CONFIG_PKG_USING_JSMN is not set -# CONFIG_PKG_USING_AGILE_JSMN is not set -# CONFIG_PKG_USING_PARSON is not set - -# -# XML: Extensible Markup Language -# -# CONFIG_PKG_USING_SIMPLE_XML is not set -# CONFIG_PKG_USING_EZXML is not set -# CONFIG_PKG_USING_LUATOS_SOC is not set -# CONFIG_PKG_USING_LUA is not set -# CONFIG_PKG_USING_JERRYSCRIPT is not set -# CONFIG_PKG_USING_MICROPYTHON is not set -# CONFIG_PKG_USING_PIKASCRIPT is not set -# CONFIG_PKG_USING_RTT_RUST is not set - -# -# multimedia packages -# - -# -# LVGL: powerful and easy-to-use embedded GUI library -# -# CONFIG_PKG_USING_LVGL is not set -# CONFIG_PKG_USING_LITTLEVGL2RTT is not set -# CONFIG_PKG_USING_LV_MUSIC_DEMO is not set -# CONFIG_PKG_USING_GUI_GUIDER_DEMO is not set - -# -# u8g2: a monochrome graphic library -# -# CONFIG_PKG_USING_U8G2_OFFICIAL is not set -# CONFIG_PKG_USING_U8G2 is not set -# CONFIG_PKG_USING_OPENMV is not set -# CONFIG_PKG_USING_MUPDF is not set -# CONFIG_PKG_USING_STEMWIN is not set -# CONFIG_PKG_USING_WAVPLAYER is not set -# CONFIG_PKG_USING_TJPGD is not set -# CONFIG_PKG_USING_PDFGEN is not set -# CONFIG_PKG_USING_HELIX is not set -# CONFIG_PKG_USING_AZUREGUIX is not set -# CONFIG_PKG_USING_TOUCHGFX2RTT is not set -# CONFIG_PKG_USING_NUEMWIN is not set -# CONFIG_PKG_USING_MP3PLAYER is not set -# CONFIG_PKG_USING_TINYJPEG is not set -# CONFIG_PKG_USING_UGUI is not set -# CONFIG_PKG_USING_MCURSES is not set -# CONFIG_PKG_USING_TERMBOX is not set -# CONFIG_PKG_USING_VT100 is not set -# CONFIG_PKG_USING_QRCODE is not set -# CONFIG_PKG_USING_GUIENGINE is not set -# CONFIG_PKG_USING_3GPP_AMRNB is not set - -# -# tools packages -# -# CONFIG_PKG_USING_CMBACKTRACE is not set -# CONFIG_PKG_USING_EASYFLASH is not set -# CONFIG_PKG_USING_EASYLOGGER is not set -# CONFIG_PKG_USING_SYSTEMVIEW is not set -# CONFIG_PKG_USING_SEGGER_RTT is not set -# CONFIG_PKG_USING_RTT_AUTO_EXE_CMD is not set -# CONFIG_PKG_USING_RDB is not set -# CONFIG_PKG_USING_ULOG_EASYFLASH is not set -# CONFIG_PKG_USING_LOGMGR is not set -# CONFIG_PKG_USING_ADBD is not set -# CONFIG_PKG_USING_COREMARK is not set -# CONFIG_PKG_USING_DHRYSTONE is not set -# CONFIG_PKG_USING_MEMORYPERF is not set -# CONFIG_PKG_USING_NR_MICRO_SHELL is not set -# CONFIG_PKG_USING_CHINESE_FONT_LIBRARY is not set -# CONFIG_PKG_USING_LUNAR_CALENDAR is not set -# CONFIG_PKG_USING_BS8116A is not set -# CONFIG_PKG_USING_GPS_RMC is not set -# CONFIG_PKG_USING_URLENCODE is not set -# CONFIG_PKG_USING_UMCN is not set -# CONFIG_PKG_USING_LWRB2RTT is not set -# CONFIG_PKG_USING_CPU_USAGE is not set -# CONFIG_PKG_USING_GBK2UTF8 is not set -# CONFIG_PKG_USING_VCONSOLE is not set -# CONFIG_PKG_USING_KDB is not set -# CONFIG_PKG_USING_WAMR is not set -# CONFIG_PKG_USING_MICRO_XRCE_DDS_CLIENT is not set -# CONFIG_PKG_USING_LWLOG is not set -# CONFIG_PKG_USING_ANV_TRACE is not set -# CONFIG_PKG_USING_ANV_MEMLEAK is not set -# CONFIG_PKG_USING_ANV_TESTSUIT is not set -# CONFIG_PKG_USING_ANV_BENCH is not set -# CONFIG_PKG_USING_DEVMEM is not set -# CONFIG_PKG_USING_REGEX is not set -# CONFIG_PKG_USING_MEM_SANDBOX is not set -# CONFIG_PKG_USING_SOLAR_TERMS is not set -# CONFIG_PKG_USING_GAN_ZHI is not set -# CONFIG_PKG_USING_FDT is not set -# CONFIG_PKG_USING_CBOX is not set -# CONFIG_PKG_USING_SNOWFLAKE is not set -# CONFIG_PKG_USING_HASH_MATCH is not set -# CONFIG_PKG_USING_ARMV7M_DWT_TOOL is not set -# CONFIG_PKG_USING_VOFA_PLUS is not set - -# -# system packages -# - -# -# enhanced kernel services -# -# CONFIG_PKG_USING_RT_MEMCPY_CM is not set -# CONFIG_PKG_USING_RT_KPRINTF_THREADSAFE is not set -# CONFIG_PKG_USING_RT_VSNPRINTF_FULL is not set - -# -# acceleration: Assembly language or algorithmic acceleration packages -# -# CONFIG_PKG_USING_QFPLIB_M0_FULL is not set -# CONFIG_PKG_USING_QFPLIB_M0_TINY is not set -# CONFIG_PKG_USING_QFPLIB_M3 is not set - -# -# CMSIS: ARM Cortex-M Microcontroller Software Interface Standard -# -# CONFIG_PKG_USING_CMSIS_5 is not set -# CONFIG_PKG_USING_CMSIS_RTOS1 is not set -# CONFIG_PKG_USING_CMSIS_RTOS2 is not set - -# -# Micrium: Micrium software products porting for RT-Thread -# -# CONFIG_PKG_USING_UCOSIII_WRAPPER is not set -# CONFIG_PKG_USING_UCOSII_WRAPPER is not set -# CONFIG_PKG_USING_UC_CRC is not set -# CONFIG_PKG_USING_UC_CLK is not set -# CONFIG_PKG_USING_UC_COMMON is not set -# CONFIG_PKG_USING_UC_MODBUS is not set -# CONFIG_PKG_USING_FREERTOS_WRAPPER is not set -# CONFIG_PKG_USING_CAIRO is not set -# CONFIG_PKG_USING_PIXMAN is not set -# CONFIG_PKG_USING_PARTITION is not set -# CONFIG_PKG_USING_PERF_COUNTER is not set -# CONFIG_PKG_USING_FLASHDB is not set -# CONFIG_PKG_USING_SQLITE is not set -# CONFIG_PKG_USING_RTI is not set -# CONFIG_PKG_USING_DFS_YAFFS is not set -# CONFIG_PKG_USING_LITTLEFS is not set -# CONFIG_PKG_USING_DFS_JFFS2 is not set -# CONFIG_PKG_USING_DFS_UFFS is not set -# CONFIG_PKG_USING_LWEXT4 is not set -# CONFIG_PKG_USING_THREAD_POOL is not set -# CONFIG_PKG_USING_ROBOTS is not set -# CONFIG_PKG_USING_EV is not set -# CONFIG_PKG_USING_SYSWATCH is not set -# CONFIG_PKG_USING_SYS_LOAD_MONITOR is not set -# CONFIG_PKG_USING_PLCCORE is not set -# CONFIG_PKG_USING_RAMDISK is not set -# CONFIG_PKG_USING_MININI is not set -# CONFIG_PKG_USING_QBOOT is not set -# CONFIG_PKG_USING_PPOOL is not set -# CONFIG_PKG_USING_OPENAMP is not set -# CONFIG_PKG_USING_LPM is not set -# CONFIG_PKG_USING_TLSF is not set -# CONFIG_PKG_USING_EVENT_RECORDER is not set -# CONFIG_PKG_USING_ARM_2D is not set -# CONFIG_PKG_USING_MCUBOOT is not set -# CONFIG_PKG_USING_TINYUSB is not set -# CONFIG_PKG_USING_CHERRYUSB is not set -# CONFIG_PKG_USING_KMULTI_RTIMER is not set -# CONFIG_PKG_USING_TFDB is not set -# CONFIG_PKG_USING_QPC is not set -# CONFIG_PKG_USING_AGILE_UPGRADE is not set -# CONFIG_PKG_USING_FLASH_BLOB is not set - -# -# peripheral libraries and drivers -# - -# -# sensors drivers -# -# CONFIG_PKG_USING_LSM6DSM is not set -# CONFIG_PKG_USING_LSM6DSL is not set -# CONFIG_PKG_USING_LPS22HB is not set -# CONFIG_PKG_USING_HTS221 is not set -# CONFIG_PKG_USING_LSM303AGR is not set -# CONFIG_PKG_USING_BME280 is not set -# CONFIG_PKG_USING_BME680 is not set -# CONFIG_PKG_USING_BMA400 is not set -# CONFIG_PKG_USING_BMI160_BMX160 is not set -# CONFIG_PKG_USING_SPL0601 is not set -# CONFIG_PKG_USING_MS5805 is not set -# CONFIG_PKG_USING_DA270 is not set -# CONFIG_PKG_USING_DF220 is not set -# CONFIG_PKG_USING_HSHCAL001 is not set -# CONFIG_PKG_USING_BH1750 is not set -# CONFIG_PKG_USING_MPU6XXX is not set -# CONFIG_PKG_USING_AHT10 is not set -# CONFIG_PKG_USING_AP3216C is not set -# CONFIG_PKG_USING_TSL4531 is not set -# CONFIG_PKG_USING_DS18B20 is not set -# CONFIG_PKG_USING_DHT11 is not set -# CONFIG_PKG_USING_DHTXX is not set -# CONFIG_PKG_USING_GY271 is not set -# CONFIG_PKG_USING_GP2Y10 is not set -# CONFIG_PKG_USING_SGP30 is not set -# CONFIG_PKG_USING_HDC1000 is not set -# CONFIG_PKG_USING_BMP180 is not set -# CONFIG_PKG_USING_BMP280 is not set -# CONFIG_PKG_USING_SHTC1 is not set -# CONFIG_PKG_USING_BMI088 is not set -# CONFIG_PKG_USING_HMC5883 is not set -# CONFIG_PKG_USING_MAX6675 is not set -# CONFIG_PKG_USING_TMP1075 is not set -# CONFIG_PKG_USING_SR04 is not set -# CONFIG_PKG_USING_CCS811 is not set -# CONFIG_PKG_USING_PMSXX is not set -# CONFIG_PKG_USING_RT3020 is not set -# CONFIG_PKG_USING_MLX90632 is not set -# CONFIG_PKG_USING_MLX90393 is not set -# CONFIG_PKG_USING_MLX90392 is not set -# CONFIG_PKG_USING_MLX90397 is not set -# CONFIG_PKG_USING_MS5611 is not set -# CONFIG_PKG_USING_MAX31865 is not set -# CONFIG_PKG_USING_VL53L0X is not set -# CONFIG_PKG_USING_INA260 is not set -# CONFIG_PKG_USING_MAX30102 is not set -# CONFIG_PKG_USING_INA226 is not set -# CONFIG_PKG_USING_LIS2DH12 is not set -# CONFIG_PKG_USING_HS300X is not set -# CONFIG_PKG_USING_ZMOD4410 is not set -# CONFIG_PKG_USING_ISL29035 is not set -# CONFIG_PKG_USING_MMC3680KJ is not set -# CONFIG_PKG_USING_QMP6989 is not set -# CONFIG_PKG_USING_BALANCE is not set -# CONFIG_PKG_USING_SHT2X is not set -# CONFIG_PKG_USING_SHT3X is not set -# CONFIG_PKG_USING_AD7746 is not set -# CONFIG_PKG_USING_ADT74XX is not set -# CONFIG_PKG_USING_MAX17048 is not set -# CONFIG_PKG_USING_AS7341 is not set -# CONFIG_PKG_USING_CW2015 is not set -# CONFIG_PKG_USING_ICM20608 is not set -# CONFIG_PKG_USING_PAJ7620 is not set -# CONFIG_PKG_USING_STHS34PF80 is not set - -# -# touch drivers -# -# CONFIG_PKG_USING_GT9147 is not set -# CONFIG_PKG_USING_GT1151 is not set -# CONFIG_PKG_USING_GT917S is not set -# CONFIG_PKG_USING_GT911 is not set -# CONFIG_PKG_USING_FT6206 is not set -# CONFIG_PKG_USING_FT5426 is not set -# CONFIG_PKG_USING_FT6236 is not set -# CONFIG_PKG_USING_XPT2046_TOUCH is not set -# CONFIG_PKG_USING_REALTEK_AMEBA is not set -# CONFIG_PKG_USING_STM32_SDIO is not set -# CONFIG_PKG_USING_ESP_IDF is not set -# CONFIG_PKG_USING_BUTTON is not set -# CONFIG_PKG_USING_PCF8574 is not set -# CONFIG_PKG_USING_SX12XX is not set -# CONFIG_PKG_USING_SIGNAL_LED is not set -# CONFIG_PKG_USING_LEDBLINK is not set -# CONFIG_PKG_USING_LITTLED is not set -# CONFIG_PKG_USING_LKDGUI is not set -# CONFIG_PKG_USING_NRF5X_SDK is not set -# CONFIG_PKG_USING_NRFX is not set - -# -# Kendryte SDK -# -# CONFIG_PKG_USING_K210_SDK is not set -# CONFIG_PKG_USING_KENDRYTE_SDK is not set -# CONFIG_PKG_USING_INFRARED is not set -# CONFIG_PKG_USING_MULTI_INFRARED is not set -# CONFIG_PKG_USING_AGILE_BUTTON is not set -# CONFIG_PKG_USING_AGILE_LED is not set -# CONFIG_PKG_USING_AT24CXX is not set -# CONFIG_PKG_USING_MOTIONDRIVER2RTT is not set -# CONFIG_PKG_USING_PCA9685 is not set -# CONFIG_PKG_USING_ILI9341 is not set -# CONFIG_PKG_USING_I2C_TOOLS is not set -# CONFIG_PKG_USING_NRF24L01 is not set -# CONFIG_PKG_USING_RPLIDAR is not set -# CONFIG_PKG_USING_AS608 is not set -# CONFIG_PKG_USING_RC522 is not set -# CONFIG_PKG_USING_WS2812B is not set -# CONFIG_PKG_USING_EMBARC_BSP is not set -# CONFIG_PKG_USING_EXTERN_RTC_DRIVERS is not set -# CONFIG_PKG_USING_MULTI_RTIMER is not set -# CONFIG_PKG_USING_MAX7219 is not set -# CONFIG_PKG_USING_BEEP is not set -# CONFIG_PKG_USING_EASYBLINK is not set -# CONFIG_PKG_USING_PMS_SERIES is not set -# CONFIG_PKG_USING_CAN_YMODEM is not set -# CONFIG_PKG_USING_LORA_RADIO_DRIVER is not set -# CONFIG_PKG_USING_QLED is not set -# CONFIG_PKG_USING_AGILE_CONSOLE is not set -# CONFIG_PKG_USING_LD3320 is not set -# CONFIG_PKG_USING_WK2124 is not set -# CONFIG_PKG_USING_LY68L6400 is not set -# CONFIG_PKG_USING_DM9051 is not set -# CONFIG_PKG_USING_SSD1306 is not set -# CONFIG_PKG_USING_QKEY is not set -# CONFIG_PKG_USING_RS485 is not set -# CONFIG_PKG_USING_RS232 is not set -# CONFIG_PKG_USING_NES is not set -# CONFIG_PKG_USING_VIRTUAL_SENSOR is not set -# CONFIG_PKG_USING_VDEVICE is not set -# CONFIG_PKG_USING_SGM706 is not set -# CONFIG_PKG_USING_STM32WB55_SDK is not set -# CONFIG_PKG_USING_RDA58XX is not set -# CONFIG_PKG_USING_LIBNFC is not set -# CONFIG_PKG_USING_MFOC is not set -# CONFIG_PKG_USING_TMC51XX is not set -# CONFIG_PKG_USING_TCA9534 is not set -# CONFIG_PKG_USING_KOBUKI is not set -# CONFIG_PKG_USING_ROSSERIAL is not set -# CONFIG_PKG_USING_MICRO_ROS is not set -# CONFIG_PKG_USING_MCP23008 is not set -# CONFIG_PKG_USING_BLUETRUM_SDK is not set -# CONFIG_PKG_USING_MISAKA_AT24CXX is not set -# CONFIG_PKG_USING_MISAKA_RGB_BLING is not set -# CONFIG_PKG_USING_LORA_MODEM_DRIVER is not set -# CONFIG_PKG_USING_SOFT_SERIAL is not set -# CONFIG_PKG_USING_MB85RS16 is not set -# CONFIG_PKG_USING_RFM300 is not set -# CONFIG_PKG_USING_IO_INPUT_FILTER is not set -# CONFIG_PKG_USING_RASPBERRYPI_PICO_SDK is not set -# CONFIG_PKG_USING_LRF_NV7LIDAR is not set -# CONFIG_PKG_USING_FINGERPRINT is not set - -# -# AI packages -# -# CONFIG_PKG_USING_LIBANN is not set -# CONFIG_PKG_USING_NNOM is not set -# CONFIG_PKG_USING_ONNX_BACKEND is not set -# CONFIG_PKG_USING_ONNX_PARSER is not set -# CONFIG_PKG_USING_TENSORFLOWLITEMICRO is not set -# CONFIG_PKG_USING_ELAPACK is not set -# CONFIG_PKG_USING_ULAPACK is not set -# CONFIG_PKG_USING_QUEST is not set -# CONFIG_PKG_USING_NAXOS is not set - -# -# Signal Processing and Control Algorithm Packages -# -# CONFIG_PKG_USING_FIRE_PID_CURVE is not set -# CONFIG_PKG_USING_UKAL is not set - -# -# miscellaneous packages -# - -# -# project laboratory -# - -# -# samples: kernel and components samples -# -CONFIG_PKG_USING_KERNEL_SAMPLES=y -CONFIG_PKG_KERNEL_SAMPLES_PATH="/packages/misc/samples/kernel_samples" -# CONFIG_PKG_USING_KERNEL_SAMPLES_V030 is not set -# CONFIG_PKG_USING_KERNEL_SAMPLES_V040 is not set -CONFIG_PKG_USING_KERNEL_SAMPLES_LATEST_VERSION=y -CONFIG_PKG_KERNEL_SAMPLES_VER="latest" -CONFIG_PKG_USING_KERNEL_SAMPLES_EN=y -# CONFIG_PKG_USING_KERNEL_SAMPLES_ZH is not set -# CONFIG_KERNEL_SAMPLES_USING_THREAD is not set -# CONFIG_KERNEL_SAMPLES_USING_SEMAPHORE is not set -# CONFIG_KERNEL_SAMPLES_USING_MUTEX is not set -# CONFIG_KERNEL_SAMPLES_USING_MAILBOX is not set -# CONFIG_KERNEL_SAMPLES_USING_EVENT is not set -# CONFIG_KERNEL_SAMPLES_USING_MESSAGEQUEUE is not set -# CONFIG_KERNEL_SAMPLES_USING_TIMER is not set -# CONFIG_KERNEL_SAMPLES_USING_HEAP is not set -# CONFIG_KERNEL_SAMPLES_USING_MEMHEAP is not set -# CONFIG_KERNEL_SAMPLES_USING_MEMPOOL is not set -# CONFIG_KERNEL_SAMPLES_USING_IDLEHOOK is not set -# CONFIG_KERNEL_SAMPLES_USING_SIGNAL is not set -# CONFIG_KERNEL_SAMPLES_USING_INTERRUPT is not set -# CONFIG_KERNEL_SAMPLES_USING_PRI_INVERSION is not set -# CONFIG_KERNEL_SAMPLES_USING_TIME_SLICE is not set -# CONFIG_KERNEL_SAMPLES_USING_SCHEDULER_HOOK is not set -# CONFIG_KERNEL_SAMPLES_USING_PRODUCER_CONSUMER is not set -# CONFIG_PKG_USING_FILESYSTEM_SAMPLES is not set -# CONFIG_PKG_USING_NETWORK_SAMPLES is not set -# CONFIG_PKG_USING_PERIPHERAL_SAMPLES is not set - -# -# entertainment: terminal games and other interesting software packages -# -# CONFIG_PKG_USING_CMATRIX is not set -# CONFIG_PKG_USING_SL is not set -# CONFIG_PKG_USING_CAL is not set -# CONFIG_PKG_USING_ACLOCK is not set -# CONFIG_PKG_USING_THREES is not set -# CONFIG_PKG_USING_2048 is not set -# CONFIG_PKG_USING_SNAKE is not set -# CONFIG_PKG_USING_TETRIS is not set -# CONFIG_PKG_USING_DONUT is not set -# CONFIG_PKG_USING_COWSAY is not set -# CONFIG_PKG_USING_MORSE is not set -# CONFIG_PKG_USING_LIBCSV is not set -# CONFIG_PKG_USING_OPTPARSE is not set -# CONFIG_PKG_USING_FASTLZ is not set -# CONFIG_PKG_USING_MINILZO is not set -# CONFIG_PKG_USING_QUICKLZ is not set -# CONFIG_PKG_USING_LZMA is not set -# CONFIG_PKG_USING_MULTIBUTTON is not set -# CONFIG_PKG_USING_FLEXIBLE_BUTTON is not set -# CONFIG_PKG_USING_CANFESTIVAL is not set -# CONFIG_PKG_USING_ZLIB is not set -# CONFIG_PKG_USING_MINIZIP is not set -# CONFIG_PKG_USING_HEATSHRINK is not set -# CONFIG_PKG_USING_DSTR is not set -# CONFIG_PKG_USING_TINYFRAME is not set -# CONFIG_PKG_USING_KENDRYTE_DEMO is not set -# CONFIG_PKG_USING_DIGITALCTRL is not set -# CONFIG_PKG_USING_UPACKER is not set -# CONFIG_PKG_USING_UPARAM is not set -# CONFIG_PKG_USING_HELLO is not set -# CONFIG_PKG_USING_VI is not set -# CONFIG_PKG_USING_KI is not set -# CONFIG_PKG_USING_ARMv7M_DWT is not set -# CONFIG_PKG_USING_CRCLIB is not set -# CONFIG_PKG_USING_LWGPS is not set -# CONFIG_PKG_USING_STATE_MACHINE is not set -# CONFIG_PKG_USING_DESIGN_PATTERN is not set -# CONFIG_PKG_USING_CONTROLLER is not set -# CONFIG_PKG_USING_PHASE_LOCKED_LOOP is not set -# CONFIG_PKG_USING_MFBD is not set -# CONFIG_PKG_USING_SLCAN2RTT is not set -# CONFIG_PKG_USING_SOEM is not set -# CONFIG_PKG_USING_QPARAM is not set -# CONFIG_PKG_USING_CorevMCU_CLI is not set - -# -# Arduino libraries -# -# CONFIG_PKG_USING_RTDUINO is not set - -# -# Projects -# -# CONFIG_PKG_USING_ARDUINO_ULTRASOUND_RADAR is not set -# CONFIG_PKG_USING_ARDUINO_SENSOR_KIT is not set -# CONFIG_PKG_USING_ARDUINO_MATLAB_SUPPORT is not set - -# -# Sensors -# -# CONFIG_PKG_USING_ARDUINO_SENSOR_DEVICE_DRIVERS is not set -# CONFIG_PKG_USING_ARDUINO_CAPACITIVESENSOR is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADXL375 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL53L0X is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL53L1X is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SENSOR is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL6180X is not set -# CONFIG_PKG_USING_ADAFRUIT_MAX31855 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX31865 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX31856 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX6675 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90614 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM9DS1 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AHTX0 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM9DS0 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP280 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADT7410 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP085 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BME680 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP9808 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP4728 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_INA219 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LTR390 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADXL345 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DHT is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP9600 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM6DS is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BNO055 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX1704X is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MMC56X3 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90393 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90395 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ICM20X is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DPS310 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HTS221 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SHT4X is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SHT31 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADXL343 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BME280 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AS726X is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AMG88XX is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AM2320 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AM2315 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LTR329_LTR303 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP085_UNIFIED is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP183 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP183_UNIFIED is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP3XX is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MS8607 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS3MDL is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90640 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MMA8451 is not set -# CONFIG_PKG_USING_ADAFRUIT_MSA301 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPL115A2 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BNO08X is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BNO08X_RVC is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS2MDL is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM303DLH_MAG is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LC709203F is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_CAP1188 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_CCS811 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_NAU7802 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS331 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LPS2X is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LPS35HW is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM303_ACCEL is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS3DH is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCF8591 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPL3115A2 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPR121 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPRLS is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPU6050 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCT2075 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PM25AQI is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_EMC2101 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_FXAS21002C is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SCD30 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_FXOS8700 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HMC5883_UNIFIED is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SGP30 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TMP006 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TLA202X is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TCS34725 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI7021 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI1145 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SGP40 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SHTC3 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HDC1000 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HTU21DF is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AS7341 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HTU31D is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SENSORLAB is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_INA260 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TMP007_LIBRARY is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_L3GD20 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TMP117 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TSC2007 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TSL2561 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TSL2591_LIBRARY is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VCNL4040 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VEML6070 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VEML6075 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VEML7700 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_LIS3DHTR is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_DHT is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_ADXL335 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_ADXL345 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_BME280 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_BMP280 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_H3LIS331DL is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_MMA7660 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_TSL2561 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_PAJ7620 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_VL53L0X is not set -# CONFIG_PKG_USING_SEEED_ITG3200 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_SHT31 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_HP20X is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_DRV2605L is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_BBM150 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_HMC5883L is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_LSM303DLH is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_TCS3414CS is not set -# CONFIG_PKG_USING_SEEED_MP503 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_BMP085 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_HIGHTEMP is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_VEML6070 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_SI1145 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_SHT35 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_AT42QT1070 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_LSM6DS3 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_HDC1000 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_HM3301 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_MCP9600 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_LTC2941 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_LDC1612 is not set - -# -# Display -# -# CONFIG_PKG_USING_ARDUINO_U8G2 is not set -# CONFIG_PKG_USING_ARDUINO_U8GLIB_ARDUINO is not set -# CONFIG_PKG_USING_SEEED_TM1637 is not set - -# -# Timing -# -# CONFIG_PKG_USING_ARDUINO_MSTIMER2 is not set - -# -# Data Processing -# -# CONFIG_PKG_USING_ARDUINO_KALMANFILTER is not set -# CONFIG_PKG_USING_ARDUINO_ARDUINOJSON is not set - -# -# Data Storage -# - -# -# Communication -# -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PN532 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI4713 is not set - -# -# Device Control -# -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCF8574 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCA9685 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_PCF85063TP is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TPA2016 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DRV2605 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DS1841 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DS3502 is not set - -# -# Other -# -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MFRC630 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI5351 is not set -# CONFIG_PKG_USING_ARDUINO_RTCLIB is not set - -# -# Signal IO -# -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BUSIO is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TCA8418 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP23017 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADS1X15 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AW9523 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP3008 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP4725 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BD3491FS is not set - -# -# Uncategorized -# - -# -# Hardware Drivers -# - -# -# On-chip Peripheral Drivers -# -CONFIG_BSP_USING_UART=y -CONFIG_RT_USING_UART1=y -# CONFIG_RT_USING_UART0 is not set -# CONFIG_BSP_USING_SPI is not set -# CONFIG_BSP_USING_CAN is not set -# CONFIG_BSP_USING_QSPI is not set - -# -# Board extended module Drivers -# -CONFIG_BSP_USING_GIC=y -CONFIG_BSP_USING_GICV3=y -CONFIG_PHYTIUM_ARCH_AARCH64=y -CONFIG_ARM_SPI_BIND_CPU_ID=0 - -# -# Standalone Setting -# -CONFIG_TARGET_ARMV8_AARCH64=y - -# -# Board Configuration -# -# CONFIG_TARGET_F2000_4 is not set -# CONFIG_TARGET_D2000 is not set -# CONFIG_TARGET_E2000Q is not set -CONFIG_TARGET_E2000D=y -# CONFIG_TARGET_E2000S is not set -CONFIG_TARGET_E2000=y -CONFIG_DEFAULT_DEBUG_PRINT_UART1=y -# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set -# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set - -# -# Components Configuration -# -CONFIG_USE_SPI=y -CONFIG_USE_FSPIM=y -CONFIG_USE_QSPI=y - -# -# Qspi Configuration -# -CONFIG_USE_FQSPI=y -# CONFIG_USE_GIC is not set -CONFIG_USE_SERIAL=y - -# -# Usart Configuration -# -CONFIG_ENABLE_Pl011_UART=y -# CONFIG_USE_GPIO is not set -# CONFIG_USE_ETH is not set -# CONFIG_USE_CAN is not set -# CONFIG_USE_I2C is not set -# CONFIG_USE_TIMER is not set -# CONFIG_USE_MIO is not set -# CONFIG_USE_SDMMC is not set -# CONFIG_USE_PCIE is not set -# CONFIG_USE_WDT is not set -# CONFIG_USE_DMA is not set -# CONFIG_USE_NAND is not set -# CONFIG_USE_RTC is not set -# CONFIG_USE_SATA is not set -# CONFIG_USE_USB is not set -# CONFIG_USE_ADC is not set -# CONFIG_USE_PWM is not set -# CONFIG_USE_IPC is not set -# CONFIG_USE_MEDIA is not set -# CONFIG_USE_SCMI_MHU is not set -# CONFIG_LOG_VERBOS is not set -# CONFIG_LOG_DEBUG is not set -# CONFIG_LOG_INFO is not set -# CONFIG_LOG_WARN is not set -CONFIG_LOG_ERROR=y -# CONFIG_LOG_NONE is not set -# CONFIG_USE_DEFAULT_INTERRUPT_CONFIG is not set -# CONFIG_LOG_EXTRA_INFO is not set -# CONFIG_LOG_DISPALY_CORE_NUM is not set -# CONFIG_BOOTUP_DEBUG_PRINTS is not set diff --git a/bsp/phytium/aarch64/Kconfig b/bsp/phytium/aarch64/Kconfig index f532b366c5..fa6a1d92bc 100644 --- a/bsp/phytium/aarch64/Kconfig +++ b/bsp/phytium/aarch64/Kconfig @@ -10,10 +10,10 @@ config BSP_DIR option env="BSP_ROOT" default "../." -config STANDALONE_DIR +config SDK_DIR string - option env="STANDALONE_DIR" - default ".././libraries/standalone" + option env="SDK_DIR" + default ".././libraries/phytium_standalone_sdk" config PKGS_DIR string @@ -37,6 +37,7 @@ config PHYTIUM_ARCH_AARCH64 select RT_USING_COMPONENTS_INIT select RT_USING_USER_MAIN select ARCH_CPU_64BIT + select RT_USING_CACHE select TARGET_ARMV8_AARCH64 select ARCH_ARM_BOOTWITH_FLUSH_CACHE default y @@ -60,14 +61,18 @@ if TARGET_PHYTIUMPI default 2 endif +if RT_USING_SMP + +endif + menu "Standalone Setting" config TARGET_ARMV8_AARCH64 bool "Armv8 Aarch64" default y - source "$STANDALONE_DIR/board/Kconfig" - source "$STANDALONE_DIR/drivers/Kconfig" - source "$STANDALONE_DIR/common/Kconfig" + source "$SDK_DIR/soc/soc.kconfig" + source "$BSP_DIR/board/board.kconfig" + source "$SDK_DIR/common/common.kconfig" endmenu diff --git a/bsp/phytium/aarch64/README.md b/bsp/phytium/aarch64/README.md index af1b3a7d66..8970153bbd 100644 --- a/bsp/phytium/aarch64/README.md +++ b/bsp/phytium/aarch64/README.md @@ -4,23 +4,17 @@ ## 1. 准备编译环境 -- 在 aarch64 目录下创建 tools 目录,后续用于存放 RT-Thread 编译工具链 - -```sh -cd ./aarch64 -mkdir tools -``` - -- 在 tools 目录下下载两个 python 脚本,get_toolchain.py 和 ci.py,下载完后给两个脚本添加执行权限 +- 创建tools目录,在 tools 目录下下载两个python 脚本,get_toolchain.py 和 ci.py,下载完后给两个脚本添加执行权限 ```shell +mkdir tools cd ./tools wget https://gitee.com/rtthread/ART-Pi-smart/raw/master/tools/get_toolchain.py wget https://gitee.com/rtthread/ART-Pi-smart/raw/master/tools/ci.py chmod +x get_toolchain.py ci.py ``` -- 然后运行 get_toolchain.py 脚本,拉取 aarch64 交叉编译链`aarch64-linux-musleabi_for_x86_64-pc-linux-gnu` +- 运行 get_toolchain.py 脚本,拉取 aarch64 交叉编译链`aarch64-linux-musleabi_for_x86_64-pc-linux-gnu` ```shell python3 ./get_toolchain.py aarch64 @@ -42,11 +36,25 @@ source ./smart-env.sh aarch64 ## NOTE -- 请使用ubuntu20.04 开发环境进行上述操作,其他开发环境没有进行测试 +以上步骤已在ubuntu20.04开发环境测试,在其他开发环境下若无法下载相关脚本,可使用以下链接手动下载 -## 2. 如何选择芯片 +```shell + get_toolchain.py下载地址 + https://gitee.com/rtthread/ART-Pi-smart/blob/master/tools/get_toolchain.py -- 以 E2000Q RT-Smart为例,Linux 环境下,运行 make load_e2000q_rtsmart 加载默认的 rtconfig, 然后输入下列命令,进入 menuconfig 进一步配置, + ci.py下载地址 + https://gitee.com/rtthread/ART-Pi-smart/blob/master/tools/ci.py + + 当出现以下提示时,可采用以下链接下载 phytium_standalone_sdk_install.py + "Please refer to the ./README and manual download phytium_standalone_sdk_install.py, place in current folder" + phytium_standalone_sdk_install.py下载地址 + https://gitee.com/phytium_embedded/phytium-standalone-sdk/blob/Standalone-Sdk_RT-thread/phytium_standalone_sdk_install.py +``` + + +## 2. 如何选择开发板 + +- 以 E2000Q RT-Smart为例,Linux 环境下,运行 make load_e2000q_demo_rtsmart 加载默认的 rtconfig, 然后输入下列命令,进入 menuconfig 进一步配置 ```shell scons --menuconfig @@ -55,11 +63,10 @@ source ./smart-env.sh aarch64 开发者通过以下选择进行配置 ``` -Standalone Setting > Board Configuration > Chip +Standalone Setting > Board Configuration ``` -![](./figures/chip_select.png) -![](./figures/phytium_cpu_select.png) +![](./figures/board_select.png) ## 3. 如何选择驱动 @@ -91,9 +98,10 @@ Hardware Drivers Config > On-chip Peripheral Drivers scons --menuconfig ``` -开发者通过以下选项进行调试信息等级的设置 +开发者通过以下选项开启打印调试信息 + +![](./figures/debug_info.png) -![](./figures/select_debug_info.png) ## 6. 编译程序 diff --git a/bsp/phytium/aarch64/SConscript b/bsp/phytium/aarch64/SConscript index 4c815c49b8..a95361af00 100644 --- a/bsp/phytium/aarch64/SConscript +++ b/bsp/phytium/aarch64/SConscript @@ -5,11 +5,11 @@ from building import * cwd = GetCurrentDir() objs = [] -list = os.listdir(cwd) +folder_list = os.listdir(cwd) -for d in list: - path = os.path.join(cwd, d) +for folder in folder_list: + path = os.path.join(cwd, folder) if os.path.isfile(os.path.join(path, 'SConscript')): - objs = objs + SConscript(os.path.join(d, 'SConscript')) + objs = objs + SConscript(os.path.join(folder, 'SConscript')) Return('objs') diff --git a/bsp/phytium/aarch64/SConstruct b/bsp/phytium/aarch64/SConstruct index ae659dfb21..d2e1216988 100644 --- a/bsp/phytium/aarch64/SConstruct +++ b/bsp/phytium/aarch64/SConstruct @@ -1,6 +1,7 @@ import os import sys import rtconfig +import subprocess IS_EXPORTED = False @@ -43,6 +44,36 @@ Export('RTT_ROOT') Export('BSP_ROOT') Export('rtconfig') +def is_phytium_sdk_installed(): + py_target_folder = os.getcwd() + "/../libraries/phytium_standalone_sdk" + return os.path.exists(py_target_folder) + +def install_phytium_sdk(): + if is_phytium_sdk_installed(): + return 0 + print("Checking for the presence of phytium_standalone_sdk_install.py script...") + sconstruct_dir = os.getcwd() + install_script_path = os.path.join(sconstruct_dir, "phytium_standalone_sdk_install.py") + + try: + subprocess.call(["wget", "https://gitee.com/phytium_embedded/phytium-standalone-sdk/raw/Standalone-Sdk_RT-thread/phytium_standalone_sdk_install.py"]) + except: + print("Please refer to the ./README and manual download phytium_standalone_sdk_install.py, place in current folder") + if os.path.exists(install_script_path): + try: + subprocess.call(["python", install_script_path]) + except: + subprocess.call(["python3", install_script_path]) + + if not is_phytium_sdk_installed(): + print("Error: phytium_standalone_sdk install failed") + exit(0) + else: + print("Error: phytium_standalone_sdk_install.py is not exists, exit compilation") + exit(0) + +install_phytium_sdk() + # prepare building environment objs = PrepareBuilding(env, RTT_ROOT, has_libcpu = False) diff --git a/bsp/phytium/aarch64/applications/main.c b/bsp/phytium/aarch64/applications/main.c index 24379b50c0..9c05d8d070 100644 --- a/bsp/phytium/aarch64/applications/main.c +++ b/bsp/phytium/aarch64/applications/main.c @@ -16,6 +16,20 @@ #include +#define ASSERT_STATIC(expression) \ + extern int assert_static[(expression) ? 1 : -1] + +/* check if SMP related setting ok */ +#ifndef RT_USING_SMP + ASSERT_STATIC(RT_CPUS_NR == 1U); /* please set RT_CPUS_NR = 1 when SMP off */ +#else + #if defined(TARGET_E2000D) + ASSERT_STATIC(RT_CPUS_NR <= 2U); /* use 2 cores at most */ + #elif defined(TARGET_E2000Q) || defined(TARGET_PHYTIUMPI) + ASSERT_STATIC(RT_CPUS_NR <= 4U); /* use 4 cores at most */ + #endif +#endif + #ifdef RT_USING_SMP struct rt_thread test_core[RT_CPUS_NR]; diff --git a/bsp/phytium/aarch64/applications/mnt.c b/bsp/phytium/aarch64/applications/mnt.c index 65e4b3ad75..202f29ed89 100644 --- a/bsp/phytium/aarch64/applications/mnt.c +++ b/bsp/phytium/aarch64/applications/mnt.c @@ -18,69 +18,124 @@ #include #include -#define DBG_TAG "app.filesystem" -#define DBG_LVL DBG_INFO - -#ifdef BSP_USING_SDCARD_FATFS -#define SD_DEIVCE_NAME "sd" -static int filesystem_mount(void) +static int ram_disk_mount(const char *mount_point) { - while (rt_device_find(SD_DEIVCE_NAME) == RT_NULL) - { - rt_thread_mdelay(1); - } - - if (dfs_mount(SD_DEIVCE_NAME, "/", "elm", 0, 0) == 0) - { - LOG_I("file system initialization done!\n"); - } - else - { - LOG_E("[sd] File System on SD initialization failed!"); - LOG_E("[sd] Please format SD Card as FAT32!!!..."); - return -1; - } - - mkdir("/ram", 0x777); - #ifdef RT_USING_DFS_RAMFS extern struct dfs_ramfs *dfs_ramfs_create(rt_uint8_t *pool, rt_size_t size); rt_uint8_t *pool = RT_NULL; rt_size_t size = 8 * 1024 * 1024; + rt_err_t err = RT_EOK; pool = rt_malloc(size); if (pool == RT_NULL) + { LOG_E("Malloc fail!"); + } - if (dfs_mount(RT_NULL, "/ram", "ram", 0, (const void *)dfs_ramfs_create(pool, size)) == 0) + err = dfs_mount(RT_NULL, mount_point, "ram", 0, (const void *)dfs_ramfs_create(pool, size)); + if (err == RT_EOK) + { LOG_I("RAM file system initializated!"); + } else - LOG_E("RAM file system initializate failed!"); + { + LOG_E("RAM file system initializate failed!, err = %d", err); + } #endif + return RT_EOK; } -INIT_ENV_EXPORT(filesystem_mount); + +#ifdef BSP_USING_SDCARD_FATFS +extern void fsdif_change(void); +static int sd_disk_try_mount(char *device_name, char *mount_point, char *fs_type_name, int mkfs_count) +{ + struct statfs fs_stat; + int rc = 0; + + LOG_I("mount(\"%s\",\"%s\",\"%s\");", device_name, mount_point, fs_type_name); + + if (rt_device_find(device_name) == NULL) + { + LOG_I("%s not find!!!", device_name); + return -RT_EIO; + } + + mkdir(mount_point, 0); +_remount: + rc = dfs_mount(device_name, mount_point, fs_type_name, 0, 0); + if (rc == 0) + { + LOG_I("mounted %s on %s", device_name, mount_point); + if (dfs_statfs(mount_point, &fs_stat) >= 0) + { + LOG_I("%s size:%d, total: %d, free: %d", mount_point, + fs_stat.f_bsize, fs_stat.f_blocks, fs_stat.f_bfree); + } + } + else + { + if (mkfs_count > 0) + { + /* LOG_I("[%s]try mkfs -t %s %s ", mkfs_count, fs_type_name, device_name); + dfs_mkfs(fs_type_name, device_name); */ + mkfs_count--; + LOG_E("%s is not in %s, please format first !!!", device_name, fs_type_name); + goto _remount; + } + + LOG_I("mount failed :%d ", rc); + return -RT_EIO; + } + + return RT_EOK; +} + +static void sd_filesytem_task_entry(void *parameter) +{ + int result; + LOG_D("sdio host change: %d", change); + mmcsd_wait_cd_changed(0); /* clear */ + fsdif_change(); /* send cd change to host */ + + /* block until plug/unplug event happens */ + result = mmcsd_wait_cd_changed(RT_WAITING_FOREVER); + if (result == MMCSD_HOST_PLUGED) + { + rt_kprintf("mmcsd change pluged \n"); + /* mount sdcard partition as / */ + if (RT_EOK == sd_disk_try_mount(BSP_USING_SDCARD_PARTITION, "/", "elm", 0)) + { + ram_disk_mount("/ram"); /* mount ramdisk if configured */ + } + } +} + +int filesystem_mount(void) +{ + rt_thread_t tid; + tid = rt_thread_create("sd_filesytem", sd_filesytem_task_entry, + RT_NULL, + 4096, + RT_THREAD_PRIORITY_MAX - 2, 20); + if (tid != RT_NULL) + { + rt_thread_startup(tid); + } + else + { + LOG_E("create sd mount task error!"); + } + + return RT_EOK; +} +INIT_APP_EXPORT(filesystem_mount); + #else static int filesystem_mount(void) { -#ifdef RT_USING_DFS_RAMFS - extern struct dfs_ramfs *dfs_ramfs_create(rt_uint8_t *pool, rt_size_t size); - - rt_uint8_t *pool = RT_NULL; - rt_size_t size = 8 * 1024 * 1024; - - pool = rt_malloc(size); - if (pool == RT_NULL) - LOG_E("Malloc fail!"); - - if (dfs_mount(RT_NULL, "/", "ram", 0, (const void *)dfs_ramfs_create(pool, size)) == 0) - LOG_I("RAM file system initializated!"); - else - LOG_E("RAM file system initializate failed!"); -#endif - - return RT_EOK; + return ram_disk_mount("/"); /* mount ramdisk as / */ } INIT_ENV_EXPORT(filesystem_mount); #endif // #ifdef BSP_USING_SDCARD_FATFS diff --git a/bsp/phytium/aarch64/configs/e2000d_rtsmart b/bsp/phytium/aarch64/configs/e2000d_demo_rtsmart similarity index 92% rename from bsp/phytium/aarch64/configs/e2000d_rtsmart rename to bsp/phytium/aarch64/configs/e2000d_demo_rtsmart index 1c34ffbbc0..0138e55864 100644 --- a/bsp/phytium/aarch64/configs/e2000d_rtsmart +++ b/bsp/phytium/aarch64/configs/e2000d_demo_rtsmart @@ -72,23 +72,23 @@ CONFIG_RT_USING_SLAB_AS_HEAP=y # CONFIG_RT_USING_MEMTRACE is not set CONFIG_RT_USING_HEAP_ISR=y CONFIG_RT_USING_HEAP=y - -# -# Kernel Device Object -# CONFIG_RT_USING_DEVICE=y # CONFIG_RT_USING_DEVICE_OPS is not set -# CONFIG_RT_USING_DM is not set # CONFIG_RT_USING_INTERRUPT_INFO is not set CONFIG_RT_USING_CONSOLE=y CONFIG_RT_CONSOLEBUF_SIZE=128 CONFIG_RT_CONSOLE_DEVICE_NAME="uart1" -CONFIG_RT_VER_NUM=0x50001 +CONFIG_RT_VER_NUM=0x50100 # CONFIG_RT_USING_STDC_ATOMIC is not set +CONFIG_RT_BACKTRACE_LEVEL_MAX_NR=32 # -# RT-Thread Architecture +# AArch64 Architecture Configuration # +CONFIG_ARCH_TEXT_OFFSET=0x80000 +CONFIG_ARCH_RAM_OFFSET=0x80000000 +CONFIG_ARCH_SECONDARY_CPU_STACK_SIZE=4096 +CONFIG_ARCH_HAVE_EFFICIENT_UNALIGNED_ACCESS=y CONFIG_ARCH_CPU_64BIT=y CONFIG_RT_USING_CACHE=y # CONFIG_RT_USING_HW_ATOMIC is not set @@ -100,10 +100,6 @@ CONFIG_ARCH_ARM=y CONFIG_ARCH_ARM_MMU=y CONFIG_KERNEL_VADDR_START=0xffff000000000000 CONFIG_ARCH_ARMV8=y -CONFIG_ARCH_TEXT_OFFSET=0x80000 -CONFIG_ARCH_RAM_OFFSET=0x80000000 -CONFIG_ARCH_SECONDARY_CPU_STACK_SIZE=4096 -CONFIG_ARCH_HAVE_EFFICIENT_UNALIGNED_ACCESS=y # # RT-Thread Components @@ -128,6 +124,7 @@ CONFIG_FINSH_USING_DESCRIPTION=y # CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set # CONFIG_FINSH_USING_AUTH is not set CONFIG_FINSH_ARG_MAX=10 +CONFIG_FINSH_USING_OPTION_COMPLETION=y # # DFS: device virtual file system @@ -173,6 +170,7 @@ CONFIG_RT_USING_DFS_RAMFS=y # CONFIG_RT_USING_DFS_NFS is not set # CONFIG_RT_USING_FAL is not set CONFIG_RT_USING_LWP=y +# CONFIG_LWP_DEBUG is not set CONFIG_RT_LWP_MAX_NR=30 CONFIG_LWP_TASK_STACK_SIZE=16384 CONFIG_RT_CH_MSG_MAX_NR=1024 @@ -184,6 +182,7 @@ CONFIG_RT_LWP_SHM_MAX_NR=64 # # Device Drivers # +# CONFIG_RT_USING_DM is not set CONFIG_RT_USING_DEVICE_IPC=y CONFIG_RT_UNAMED_PIPE_NUMBER=64 CONFIG_RT_USING_SYSTEM_WORKQUEUE=y @@ -211,17 +210,10 @@ CONFIG_RT_USING_RANDOM=y # CONFIG_RT_USING_MTD_NOR is not set # CONFIG_RT_USING_MTD_NAND is not set # CONFIG_RT_USING_PM is not set -# CONFIG_RT_USING_FDT is not set CONFIG_RT_USING_RTC=y # CONFIG_RT_USING_ALARM is not set # CONFIG_RT_USING_SOFT_RTC is not set -CONFIG_RT_USING_SDIO=y -CONFIG_RT_SDIO_STACK_SIZE=4096 -CONFIG_RT_SDIO_THREAD_PRIORITY=15 -CONFIG_RT_MMCSD_STACK_SIZE=4096 -CONFIG_RT_MMCSD_THREAD_PREORITY=22 -CONFIG_RT_MMCSD_MAX_PARTITION=16 -# CONFIG_RT_SDIO_DEBUG is not set +# CONFIG_RT_USING_SDIO is not set # CONFIG_RT_USING_SPI is not set # CONFIG_RT_USING_WDT is not set # CONFIG_RT_USING_AUDIO is not set @@ -234,6 +226,7 @@ CONFIG_RT_MMCSD_MAX_PARTITION=16 # CONFIG_RT_USING_DEV_BUS is not set # CONFIG_RT_USING_WIFI is not set # CONFIG_RT_USING_VIRTIO is not set +CONFIG_RT_USING_KTIME=y # # Using USB @@ -245,7 +238,19 @@ CONFIG_RT_MMCSD_MAX_PARTITION=16 # # C/C++ and POSIX layer # -CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8 + +# +# ISO-ANSI C layer +# + +# +# Timezone and Daylight Saving Time +# +# CONFIG_RT_LIBC_USING_FULL_TZ_DST is not set +CONFIG_RT_LIBC_USING_LIGHT_TZ_DST=y +CONFIG_RT_LIBC_TZ_DEFAULT_HOUR=8 +CONFIG_RT_LIBC_TZ_DEFAULT_MIN=0 +CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 # # POSIX (Portable Operating System Interface) layer @@ -255,6 +260,10 @@ CONFIG_RT_USING_POSIX_DEVIO=y CONFIG_RT_USING_POSIX_STDIO=y # CONFIG_RT_USING_POSIX_POLL is not set # CONFIG_RT_USING_POSIX_SELECT is not set +# CONFIG_RT_USING_POSIX_EVENTFD is not set +# CONFIG_RT_USING_POSIX_EPOLL is not set +# CONFIG_RT_USING_POSIX_SIGNALFD is not set +# CONFIG_RT_USING_POSIX_TIMERFD is not set # CONFIG_RT_USING_POSIX_SOCKET is not set CONFIG_RT_USING_POSIX_TERMIOS=y # CONFIG_RT_USING_POSIX_AIO is not set @@ -403,7 +412,11 @@ CONFIG_RT_USING_ADT_HASHMAP=y CONFIG_RT_USING_ADT_REF=y # CONFIG_RT_USING_RT_LINK is not set # CONFIG_RT_USING_VBUS is not set -CONFIG_RT_USING_KTIME=y + +# +# Memory management +# +# CONFIG_RT_USING_MEMBLOCK is not set # # RT-Thread Utestcases @@ -428,7 +441,6 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_KAWAII_MQTT is not set # CONFIG_PKG_USING_BC28_MQTT is not set # CONFIG_PKG_USING_WEBTERMINAL is not set -# CONFIG_PKG_USING_LIBMODBUS is not set # CONFIG_PKG_USING_FREEMODBUS is not set # CONFIG_PKG_USING_NANOPB is not set @@ -446,6 +458,11 @@ CONFIG_RT_USING_KTIME=y # # CONFIG_PKG_USING_WLAN_WICED is not set # CONFIG_PKG_USING_RW007 is not set + +# +# CYW43012 WiFi +# +# CONFIG_PKG_USING_WLAN_CYW43012 is not set # CONFIG_PKG_USING_COAP is not set # CONFIG_PKG_USING_NOPOLL is not set # CONFIG_PKG_USING_NETUTILS is not set @@ -488,6 +505,7 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_NMEALIB is not set # CONFIG_PKG_USING_PDULIB is not set # CONFIG_PKG_USING_BTSTACK is not set +# CONFIG_PKG_USING_BT_CYW43012 is not set # CONFIG_PKG_USING_LORAWAN_ED_STACK is not set # CONFIG_PKG_USING_WAYZ_IOTKIT is not set # CONFIG_PKG_USING_MAVLINK is not set @@ -507,6 +525,8 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_ZFTP is not set # CONFIG_PKG_USING_WOL is not set # CONFIG_PKG_USING_ZEPHYR_POLLING is not set +# CONFIG_PKG_USING_MATTER_ADAPTATION_LAYER is not set +# CONFIG_PKG_USING_LHC_MODBUS is not set # # security packages @@ -553,7 +573,6 @@ CONFIG_RT_USING_KTIME=y # LVGL: powerful and easy-to-use embedded GUI library # # CONFIG_PKG_USING_LVGL is not set -# CONFIG_PKG_USING_LITTLEVGL2RTT is not set # CONFIG_PKG_USING_LV_MUSIC_DEMO is not set # CONFIG_PKG_USING_GUI_GUIDER_DEMO is not set @@ -628,6 +647,7 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_HASH_MATCH is not set # CONFIG_PKG_USING_ARMV7M_DWT_TOOL is not set # CONFIG_PKG_USING_VOFA_PLUS is not set +# CONFIG_PKG_USING_ZDEBUG is not set # # system packages @@ -664,6 +684,8 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_UC_COMMON is not set # CONFIG_PKG_USING_UC_MODBUS is not set # CONFIG_PKG_USING_FREERTOS_WRAPPER is not set +# CONFIG_PKG_USING_LITEOS_SDK is not set +# CONFIG_PKG_USING_TZ_DATABASE is not set # CONFIG_PKG_USING_CAIRO is not set # CONFIG_PKG_USING_PIXMAN is not set # CONFIG_PKG_USING_PARTITION is not set @@ -687,6 +709,7 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_QBOOT is not set # CONFIG_PKG_USING_PPOOL is not set # CONFIG_PKG_USING_OPENAMP is not set +# CONFIG_PKG_USING_RPMSG_LITE is not set # CONFIG_PKG_USING_LPM is not set # CONFIG_PKG_USING_TLSF is not set # CONFIG_PKG_USING_EVENT_RECORDER is not set @@ -699,6 +722,12 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_QPC is not set # CONFIG_PKG_USING_AGILE_UPGRADE is not set # CONFIG_PKG_USING_FLASH_BLOB is not set +# CONFIG_PKG_USING_MLIBC is not set +# CONFIG_PKG_USING_TASK_MSG_BUS is not set +# CONFIG_PKG_USING_SFDB is not set +# CONFIG_PKG_USING_RTP is not set +# CONFIG_PKG_USING_REB is not set +# CONFIG_PKG_USING_R_RHEALSTONE is not set # # peripheral libraries and drivers @@ -763,6 +792,7 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_BALANCE is not set # CONFIG_PKG_USING_SHT2X is not set # CONFIG_PKG_USING_SHT3X is not set +# CONFIG_PKG_USING_SHT4X is not set # CONFIG_PKG_USING_AD7746 is not set # CONFIG_PKG_USING_ADT74XX is not set # CONFIG_PKG_USING_MAX17048 is not set @@ -783,6 +813,7 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_FT5426 is not set # CONFIG_PKG_USING_FT6236 is not set # CONFIG_PKG_USING_XPT2046_TOUCH is not set +# CONFIG_PKG_USING_CST816X is not set # CONFIG_PKG_USING_REALTEK_AMEBA is not set # CONFIG_PKG_USING_STM32_SDIO is not set # CONFIG_PKG_USING_ESP_IDF is not set @@ -858,7 +889,15 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_IO_INPUT_FILTER is not set # CONFIG_PKG_USING_RASPBERRYPI_PICO_SDK is not set # CONFIG_PKG_USING_LRF_NV7LIDAR is not set +# CONFIG_PKG_USING_AIP650 is not set # CONFIG_PKG_USING_FINGERPRINT is not set +# CONFIG_PKG_USING_BT_ECB02C is not set +# CONFIG_PKG_USING_UAT is not set +# CONFIG_PKG_USING_ST7789 is not set +# CONFIG_PKG_USING_VS1003 is not set +# CONFIG_PKG_USING_X9555 is not set +# CONFIG_PKG_USING_SYSTEM_RUN_LED is not set +# CONFIG_PKG_USING_SPI_TOOLS is not set # # AI packages @@ -872,12 +911,17 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_ULAPACK is not set # CONFIG_PKG_USING_QUEST is not set # CONFIG_PKG_USING_NAXOS is not set +# CONFIG_PKG_USING_NCNN is not set +# CONFIG_PKG_USING_R_TINYMAIX is not set # # Signal Processing and Control Algorithm Packages # # CONFIG_PKG_USING_FIRE_PID_CURVE is not set +# CONFIG_PKG_USING_QPID is not set # CONFIG_PKG_USING_UKAL is not set +# CONFIG_PKG_USING_DIGITALCTRL is not set +# CONFIG_PKG_USING_KISSFFT is not set # # miscellaneous packages @@ -939,6 +983,7 @@ CONFIG_PKG_USING_KERNEL_SAMPLES_EN=y # CONFIG_PKG_USING_MINILZO is not set # CONFIG_PKG_USING_QUICKLZ is not set # CONFIG_PKG_USING_LZMA is not set +# CONFIG_PKG_USING_RALARAM is not set # CONFIG_PKG_USING_MULTIBUTTON is not set # CONFIG_PKG_USING_FLEXIBLE_BUTTON is not set # CONFIG_PKG_USING_CANFESTIVAL is not set @@ -948,7 +993,6 @@ CONFIG_PKG_USING_KERNEL_SAMPLES_EN=y # CONFIG_PKG_USING_DSTR is not set # CONFIG_PKG_USING_TINYFRAME is not set # CONFIG_PKG_USING_KENDRYTE_DEMO is not set -# CONFIG_PKG_USING_DIGITALCTRL is not set # CONFIG_PKG_USING_UPACKER is not set # CONFIG_PKG_USING_UPARAM is not set # CONFIG_PKG_USING_HELLO is not set @@ -973,8 +1017,9 @@ CONFIG_PKG_USING_KERNEL_SAMPLES_EN=y # CONFIG_PKG_USING_RTDUINO is not set # -# Projects +# Projects and Demos # +# CONFIG_PKG_USING_ARDUINO_MSGQ_C_CPP_DEMO is not set # CONFIG_PKG_USING_ARDUINO_ULTRASOUND_RADAR is not set # CONFIG_PKG_USING_ARDUINO_SENSOR_KIT is not set # CONFIG_PKG_USING_ARDUINO_MATLAB_SUPPORT is not set @@ -1121,14 +1166,21 @@ CONFIG_PKG_USING_KERNEL_SAMPLES_EN=y # # Display # +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_GFX_LIBRARY is not set # CONFIG_PKG_USING_ARDUINO_U8G2 is not set -# CONFIG_PKG_USING_ARDUINO_U8GLIB_ARDUINO is not set +# CONFIG_PKG_USING_ARDUINO_TFT_ESPI is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ST7735 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SSD1306 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ILI9341 is not set # CONFIG_PKG_USING_SEEED_TM1637 is not set # # Timing # +# CONFIG_PKG_USING_ARDUINO_RTCLIB is not set # CONFIG_PKG_USING_ARDUINO_MSTIMER2 is not set +# CONFIG_PKG_USING_ARDUINO_TICKER is not set +# CONFIG_PKG_USING_ARDUINO_TASKSCHEDULER is not set # # Data Processing @@ -1162,7 +1214,6 @@ CONFIG_PKG_USING_KERNEL_SAMPLES_EN=y # # CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MFRC630 is not set # CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI5351 is not set -# CONFIG_PKG_USING_ARDUINO_RTCLIB is not set # # Signal IO @@ -1183,10 +1234,12 @@ CONFIG_PKG_USING_KERNEL_SAMPLES_EN=y # # Hardware Drivers # +CONFIG_DRV_DEBUG=y # # On-chip Peripheral Drivers # +CONFIG_BSP_USING_IOPAD=y CONFIG_BSP_USING_UART=y CONFIG_RT_USING_UART1=y # CONFIG_RT_USING_UART0 is not set @@ -1194,13 +1247,10 @@ CONFIG_RT_USING_UART1=y # CONFIG_BSP_USING_CAN is not set # CONFIG_BSP_USING_GPIO is not set # CONFIG_BSP_USING_QSPI is not set -CONFIG_BSP_USING_ETH=y -CONFIG_RT_LWIP_PBUF_POOL_BUFSIZE=1700 -CONFIG_BSP_USING_SDIO=y -CONFIG_BSP_USING_SDCARD_FATFS=y -# CONFIG_USING_SDIO0 is not set -CONFIG_USING_SDIO1=y -# CONFIG_USING_EMMC is not set +# CONFIG_BSP_USING_ETH is not set +# CONFIG_BSP_USING_PWM is not set +# CONFIG_BSP_USING_I2C is not set +# CONFIG_BSP_USING_SDIF is not set # # Board extended module Drivers @@ -1216,65 +1266,47 @@ CONFIG_ARM_SPI_BIND_CPU_ID=0 CONFIG_TARGET_ARMV8_AARCH64=y # -# Board Configuration +# Soc configuration # -# CONFIG_TARGET_F2000_4 is not set -# CONFIG_TARGET_D2000 is not set +# CONFIG_TARGET_PHYTIUMPI is not set # CONFIG_TARGET_E2000Q is not set CONFIG_TARGET_E2000D=y # CONFIG_TARGET_E2000S is not set +# CONFIG_TARGET_FT2004 is not set +# CONFIG_TARGET_D2000 is not set +CONFIG_SOC_NAME="e2000" +CONFIG_TARGET_TYPE_NAME="d" +CONFIG_SOC_CORE_NUM=2 +CONFIG_F32BIT_MEMORY_ADDRESS=0x80000000 +CONFIG_F32BIT_MEMORY_LENGTH=0x80000000 +CONFIG_F64BIT_MEMORY_ADDRESS=0x2000000000 +CONFIG_F64BIT_MEMORY_LENGTH=0x800000000 CONFIG_TARGET_E2000=y +# CONFIG_USE_SPINLOCK is not set CONFIG_DEFAULT_DEBUG_PRINT_UART1=y # CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set # CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set # -# Components Configuration +# Board Configuration # -CONFIG_USE_SPI=y -CONFIG_USE_FSPIM=y -CONFIG_USE_QSPI=y +CONFIG_E2000D_DEMO_BOARD=y +CONFIG_BOARD_NAME="demo" # -# Qspi Configuration +# IO mux configuration when board start up # -CONFIG_USE_FQSPI=y -# CONFIG_USE_GIC is not set -CONFIG_USE_IOPAD=y -CONFIG_ENABLE_IOPAD=y -CONFIG_USE_SERIAL=y - -# -# Usart Configuration -# -CONFIG_ENABLE_Pl011_UART=y -# CONFIG_USE_GPIO is not set -CONFIG_USE_ETH=y - -# -# Eth Configuration -# -CONFIG_ENABLE_FXMAC=y -# CONFIG_ENABLE_FGMAC is not set -CONFIG_FXMAC_PHY_COMMON=y -# CONFIG_FXMAC_PHY_YT is not set -# CONFIG_USE_CAN is not set -# CONFIG_USE_I2C is not set -# CONFIG_USE_TIMER is not set -# CONFIG_USE_MIO is not set -# CONFIG_USE_SDMMC is not set -# CONFIG_USE_PCIE is not set -# CONFIG_USE_WDT is not set -# CONFIG_USE_DMA is not set -# CONFIG_USE_NAND is not set -# CONFIG_USE_RTC is not set -# CONFIG_USE_SATA is not set -# CONFIG_USE_USB is not set -# CONFIG_USE_ADC is not set -# CONFIG_USE_PWM is not set -# CONFIG_USE_IPC is not set -# CONFIG_USE_MEDIA is not set -# CONFIG_USE_SCMI_MHU is not set +# CONFIG_USE_SPI_IOPAD is not set +# CONFIG_USE_GPIO_IOPAD is not set +# CONFIG_USE_CAN_IOPAD is not set +# CONFIG_USE_QSPI_IOPAD is not set +# CONFIG_USE_PWM_IOPAD is not set +# CONFIG_USE_ADC_IOPAD is not set +# CONFIG_USE_MIO_IOPAD is not set +# CONFIG_USE_TACHO_IOPAD is not set +# CONFIG_USE_UART_IOPAD is not set +# CONFIG_USE_THIRD_PARTY_IOPAD is not set +# CONFIG_CUS_DEMO_BOARD is not set # # Sdk common configuration @@ -1289,3 +1321,8 @@ CONFIG_LOG_ERROR=y # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set # CONFIG_USE_DEFAULT_INTERRUPT_CONFIG is not set + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set diff --git a/bsp/phytium/aarch64/configs/e2000d_rtsmart.h b/bsp/phytium/aarch64/configs/e2000d_demo_rtsmart.h similarity index 89% rename from bsp/phytium/aarch64/configs/e2000d_rtsmart.h rename to bsp/phytium/aarch64/configs/e2000d_demo_rtsmart.h index 0398272f39..e73fac6b26 100644 --- a/bsp/phytium/aarch64/configs/e2000d_rtsmart.h +++ b/bsp/phytium/aarch64/configs/e2000d_demo_rtsmart.h @@ -51,17 +51,19 @@ #define RT_USING_SLAB_AS_HEAP #define RT_USING_HEAP_ISR #define RT_USING_HEAP - -/* Kernel Device Object */ - #define RT_USING_DEVICE #define RT_USING_CONSOLE #define RT_CONSOLEBUF_SIZE 128 #define RT_CONSOLE_DEVICE_NAME "uart1" -#define RT_VER_NUM 0x50001 +#define RT_VER_NUM 0x50100 +#define RT_BACKTRACE_LEVEL_MAX_NR 32 -/* RT-Thread Architecture */ +/* AArch64 Architecture Configuration */ +#define ARCH_TEXT_OFFSET 0x80000 +#define ARCH_RAM_OFFSET 0x80000000 +#define ARCH_SECONDARY_CPU_STACK_SIZE 4096 +#define ARCH_HAVE_EFFICIENT_UNALIGNED_ACCESS #define ARCH_CPU_64BIT #define RT_USING_CACHE #define ARCH_ARM_BOOTWITH_FLUSH_CACHE @@ -70,10 +72,6 @@ #define ARCH_ARM_MMU #define KERNEL_VADDR_START 0xffff000000000000 #define ARCH_ARMV8 -#define ARCH_TEXT_OFFSET 0x80000 -#define ARCH_RAM_OFFSET 0x80000000 -#define ARCH_SECONDARY_CPU_STACK_SIZE 4096 -#define ARCH_HAVE_EFFICIENT_UNALIGNED_ACCESS /* RT-Thread Components */ @@ -94,6 +92,7 @@ #define MSH_USING_BUILT_IN_COMMANDS #define FINSH_USING_DESCRIPTION #define FINSH_ARG_MAX 10 +#define FINSH_USING_OPTION_COMPLETION /* DFS: device virtual file system */ @@ -145,19 +144,21 @@ #define RT_USING_ZERO #define RT_USING_RANDOM #define RT_USING_RTC -#define RT_USING_SDIO -#define RT_SDIO_STACK_SIZE 4096 -#define RT_SDIO_THREAD_PRIORITY 15 -#define RT_MMCSD_STACK_SIZE 4096 -#define RT_MMCSD_THREAD_PREORITY 22 -#define RT_MMCSD_MAX_PARTITION 16 +#define RT_USING_KTIME /* Using USB */ /* C/C++ and POSIX layer */ -#define RT_LIBC_DEFAULT_TIMEZONE 8 +/* ISO-ANSI C layer */ + +/* Timezone and Daylight Saving Time */ + +#define RT_LIBC_USING_LIGHT_TZ_DST +#define RT_LIBC_TZ_DEFAULT_HOUR 8 +#define RT_LIBC_TZ_DEFAULT_MIN 0 +#define RT_LIBC_TZ_DEFAULT_SEC 0 /* POSIX (Portable Operating System Interface) layer */ @@ -243,7 +244,9 @@ #define RT_USING_ADT_BITMAP #define RT_USING_ADT_HASHMAP #define RT_USING_ADT_REF -#define RT_USING_KTIME + +/* Memory management */ + /* RT-Thread Utestcases */ @@ -261,6 +264,9 @@ /* Wiced WiFi */ +/* CYW43012 WiFi */ + + /* IoT Cloud */ @@ -333,7 +339,7 @@ /* Arduino libraries */ -/* Projects */ +/* Projects and Demos */ /* Sensors */ @@ -366,15 +372,13 @@ /* Hardware Drivers */ +#define DRV_DEBUG + /* On-chip Peripheral Drivers */ +#define BSP_USING_IOPAD #define BSP_USING_UART #define RT_USING_UART1 -#define BSP_USING_ETH -#define RT_LWIP_PBUF_POOL_BUFSIZE 1700 -#define BSP_USING_SDIO -#define BSP_USING_SDCARD_FATFS -#define USING_SDIO1 /* Board extended module Drivers */ @@ -387,37 +391,32 @@ #define TARGET_ARMV8_AARCH64 -/* Board Configuration */ +/* Soc configuration */ #define TARGET_E2000D +#define SOC_NAME "e2000" +#define TARGET_TYPE_NAME "d" +#define SOC_CORE_NUM 2 +#define F32BIT_MEMORY_ADDRESS 0x80000000 +#define F32BIT_MEMORY_LENGTH 0x80000000 +#define F64BIT_MEMORY_ADDRESS 0x2000000000 +#define F64BIT_MEMORY_LENGTH 0x800000000 #define TARGET_E2000 #define DEFAULT_DEBUG_PRINT_UART1 -/* Components Configuration */ +/* Board Configuration */ -#define USE_SPI -#define USE_FSPIM -#define USE_QSPI +#define E2000D_DEMO_BOARD +#define BOARD_NAME "demo" -/* Qspi Configuration */ +/* IO mux configuration when board start up */ -#define USE_FQSPI -#define USE_IOPAD -#define ENABLE_IOPAD -#define USE_SERIAL - -/* Usart Configuration */ - -#define ENABLE_Pl011_UART -#define USE_ETH - -/* Eth Configuration */ - -#define ENABLE_FXMAC -#define FXMAC_PHY_COMMON /* Sdk common configuration */ #define LOG_ERROR +/* Image information configuration */ + + #endif diff --git a/bsp/phytium/aarch64/configs/e2000d_rtthread_test b/bsp/phytium/aarch64/configs/e2000d_demo_rtthread similarity index 90% rename from bsp/phytium/aarch64/configs/e2000d_rtthread_test rename to bsp/phytium/aarch64/configs/e2000d_demo_rtthread index 0fdea70111..9c049c392a 100644 --- a/bsp/phytium/aarch64/configs/e2000d_rtthread_test +++ b/bsp/phytium/aarch64/configs/e2000d_demo_rtthread @@ -9,6 +9,7 @@ CONFIG_RT_NAME_MAX=16 # CONFIG_RT_USING_ARCH_DATA_TYPE is not set # CONFIG_RT_USING_SMART is not set +# CONFIG_RT_USING_AMP is not set CONFIG_RT_USING_SMP=y CONFIG_RT_CPUS_NR=2 CONFIG_RT_ALIGN_SIZE=4 @@ -22,11 +23,11 @@ CONFIG_RT_USING_HOOK=y CONFIG_RT_HOOK_USING_FUNC_PTR=y CONFIG_RT_USING_IDLE_HOOK=y CONFIG_RT_IDLE_HOOK_LIST_SIZE=4 -CONFIG_IDLE_THREAD_STACK_SIZE=40960 -CONFIG_SYSTEM_THREAD_STACK_SIZE=40960 +CONFIG_IDLE_THREAD_STACK_SIZE=8192 +CONFIG_SYSTEM_THREAD_STACK_SIZE=8192 CONFIG_RT_USING_TIMER_SOFT=y CONFIG_RT_TIMER_THREAD_PRIO=4 -CONFIG_RT_TIMER_THREAD_STACK_SIZE=4096 +CONFIG_RT_TIMER_THREAD_STACK_SIZE=8192 # # kservice optimization @@ -36,19 +37,11 @@ CONFIG_RT_KSERVICE_USING_STDLIB=y # CONFIG_RT_KSERVICE_USING_TINY_SIZE is not set # CONFIG_RT_USING_TINY_FFS is not set CONFIG_RT_KPRINTF_USING_LONGLONG=y -CONFIG_RT_DEBUG=y -# CONFIG_RT_DEBUG_COLOR is not set -# CONFIG_RT_DEBUG_INIT_CONFIG is not set -# CONFIG_RT_DEBUG_THREAD_CONFIG is not set -# CONFIG_RT_DEBUG_SCHEDULER_CONFIG is not set -# CONFIG_RT_DEBUG_IPC_CONFIG is not set -# CONFIG_RT_DEBUG_TIMER_CONFIG is not set -# CONFIG_RT_DEBUG_IRQ_CONFIG is not set -# CONFIG_RT_DEBUG_MEM_CONFIG is not set -# CONFIG_RT_DEBUG_SLAB_CONFIG is not set -# CONFIG_RT_DEBUG_MEMHEAP_CONFIG is not set -# CONFIG_RT_DEBUG_PAGE_LEAK is not set -# CONFIG_RT_DEBUG_MODULE_CONFIG is not set +CONFIG_RT_USING_DEBUG=y +CONFIG_RT_DEBUGING_COLOR=y +CONFIG_RT_DEBUGING_CONTEXT=y +CONFIG_RT_DEBUGING_INIT=y +# CONFIG_RT_DEBUGING_PAGE_LEAK is not set # # Inter-Thread communication @@ -58,6 +51,7 @@ CONFIG_RT_USING_MUTEX=y CONFIG_RT_USING_EVENT=y CONFIG_RT_USING_MAILBOX=y CONFIG_RT_USING_MESSAGEQUEUE=y +# CONFIG_RT_USING_MESSAGEQUEUE_PRIORITY is not set # CONFIG_RT_USING_SIGNALS is not set # @@ -78,19 +72,23 @@ CONFIG_RT_USING_SLAB_AS_HEAP=y # CONFIG_RT_USING_MEMTRACE is not set CONFIG_RT_USING_HEAP_ISR=y CONFIG_RT_USING_HEAP=y - -# -# Kernel Device Object -# CONFIG_RT_USING_DEVICE=y # CONFIG_RT_USING_DEVICE_OPS is not set -# CONFIG_RT_USING_DM is not set # CONFIG_RT_USING_INTERRUPT_INFO is not set CONFIG_RT_USING_CONSOLE=y CONFIG_RT_CONSOLEBUF_SIZE=128 CONFIG_RT_CONSOLE_DEVICE_NAME="uart1" -CONFIG_RT_VER_NUM=0x50001 +CONFIG_RT_VER_NUM=0x50100 # CONFIG_RT_USING_STDC_ATOMIC is not set +CONFIG_RT_BACKTRACE_LEVEL_MAX_NR=32 + +# +# AArch64 Architecture Configuration +# +CONFIG_ARCH_TEXT_OFFSET=0x80000 +CONFIG_ARCH_RAM_OFFSET=0x80000000 +CONFIG_ARCH_SECONDARY_CPU_STACK_SIZE=4096 +CONFIG_ARCH_HAVE_EFFICIENT_UNALIGNED_ACCESS=y CONFIG_ARCH_CPU_64BIT=y CONFIG_RT_USING_CACHE=y # CONFIG_RT_USING_HW_ATOMIC is not set @@ -125,6 +123,7 @@ CONFIG_FINSH_USING_DESCRIPTION=y # CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set # CONFIG_FINSH_USING_AUTH is not set CONFIG_FINSH_ARG_MAX=10 +CONFIG_FINSH_USING_OPTION_COMPLETION=y # # DFS: device virtual file system @@ -166,12 +165,14 @@ CONFIG_RT_USING_DFS_DEVFS=y # CONFIG_RT_USING_DFS_CROMFS is not set CONFIG_RT_USING_DFS_RAMFS=y # CONFIG_RT_USING_DFS_TMPFS is not set +# CONFIG_RT_USING_DFS_MQUEUE is not set # CONFIG_RT_USING_DFS_NFS is not set # CONFIG_RT_USING_FAL is not set # # Device Drivers # +# CONFIG_RT_USING_DM is not set CONFIG_RT_USING_DEVICE_IPC=y CONFIG_RT_UNAMED_PIPE_NUMBER=64 CONFIG_RT_USING_SYSTEM_WORKQUEUE=y @@ -190,24 +191,15 @@ CONFIG_RT_SERIAL_RB_BUFSZ=64 # CONFIG_RT_USING_PIN is not set # CONFIG_RT_USING_ADC is not set # CONFIG_RT_USING_DAC is not set -CONFIG_RT_USING_NULL=y -CONFIG_RT_USING_ZERO=y -CONFIG_RT_USING_RANDOM=y +# CONFIG_RT_USING_NULL is not set +# CONFIG_RT_USING_ZERO is not set +# CONFIG_RT_USING_RANDOM is not set # CONFIG_RT_USING_PWM is not set # CONFIG_RT_USING_MTD_NOR is not set # CONFIG_RT_USING_MTD_NAND is not set # CONFIG_RT_USING_PM is not set -# CONFIG_RT_USING_FDT is not set -CONFIG_RT_USING_RTC=y -# CONFIG_RT_USING_ALARM is not set -# CONFIG_RT_USING_SOFT_RTC is not set -CONFIG_RT_USING_SDIO=y -CONFIG_RT_SDIO_STACK_SIZE=4096 -CONFIG_RT_SDIO_THREAD_PRIORITY=15 -CONFIG_RT_MMCSD_STACK_SIZE=4096 -CONFIG_RT_MMCSD_THREAD_PREORITY=22 -CONFIG_RT_MMCSD_MAX_PARTITION=16 -# CONFIG_RT_SDIO_DEBUG is not set +# CONFIG_RT_USING_RTC is not set +# CONFIG_RT_USING_SDIO is not set # CONFIG_RT_USING_SPI is not set # CONFIG_RT_USING_WDT is not set # CONFIG_RT_USING_AUDIO is not set @@ -220,6 +212,7 @@ CONFIG_RT_MMCSD_MAX_PARTITION=16 # CONFIG_RT_USING_DEV_BUS is not set # CONFIG_RT_USING_WIFI is not set # CONFIG_RT_USING_VIRTIO is not set +CONFIG_RT_USING_KTIME=y # # Using USB @@ -231,7 +224,19 @@ CONFIG_RT_MMCSD_MAX_PARTITION=16 # # C/C++ and POSIX layer # -CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8 + +# +# ISO-ANSI C layer +# + +# +# Timezone and Daylight Saving Time +# +# CONFIG_RT_LIBC_USING_FULL_TZ_DST is not set +CONFIG_RT_LIBC_USING_LIGHT_TZ_DST=y +CONFIG_RT_LIBC_TZ_DEFAULT_HOUR=8 +CONFIG_RT_LIBC_TZ_DEFAULT_MIN=0 +CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 # # POSIX (Portable Operating System Interface) layer @@ -241,6 +246,8 @@ CONFIG_RT_USING_POSIX_DEVIO=y CONFIG_RT_USING_POSIX_STDIO=y # CONFIG_RT_USING_POSIX_POLL is not set # CONFIG_RT_USING_POSIX_SELECT is not set +# CONFIG_RT_USING_POSIX_EVENTFD is not set +# CONFIG_RT_USING_POSIX_TIMERFD is not set # CONFIG_RT_USING_POSIX_SOCKET is not set CONFIG_RT_USING_POSIX_TERMIOS=y # CONFIG_RT_USING_POSIX_AIO is not set @@ -381,10 +388,20 @@ CONFIG_YMODEM_USING_FILE_TRANSFER=y # CONFIG_RT_USING_ULOG is not set # CONFIG_RT_USING_UTEST is not set # CONFIG_RT_USING_VAR_EXPORT is not set +CONFIG_RT_USING_RESOURCE_ID=y CONFIG_RT_USING_ADT=y +CONFIG_RT_USING_ADT_AVL=y +CONFIG_RT_USING_ADT_BITMAP=y +CONFIG_RT_USING_ADT_HASHMAP=y +CONFIG_RT_USING_ADT_REF=y # CONFIG_RT_USING_RT_LINK is not set # CONFIG_RT_USING_VBUS is not set +# +# Memory management +# +# CONFIG_RT_USING_MEMBLOCK is not set + # # RT-Thread Utestcases # @@ -408,7 +425,6 @@ CONFIG_RT_USING_ADT=y # CONFIG_PKG_USING_KAWAII_MQTT is not set # CONFIG_PKG_USING_BC28_MQTT is not set # CONFIG_PKG_USING_WEBTERMINAL is not set -# CONFIG_PKG_USING_LIBMODBUS is not set # CONFIG_PKG_USING_FREEMODBUS is not set # CONFIG_PKG_USING_NANOPB is not set @@ -426,6 +442,11 @@ CONFIG_RT_USING_ADT=y # # CONFIG_PKG_USING_WLAN_WICED is not set # CONFIG_PKG_USING_RW007 is not set + +# +# CYW43012 WiFi +# +# CONFIG_PKG_USING_WLAN_CYW43012 is not set # CONFIG_PKG_USING_COAP is not set # CONFIG_PKG_USING_NOPOLL is not set # CONFIG_PKG_USING_NETUTILS is not set @@ -468,6 +489,7 @@ CONFIG_RT_USING_ADT=y # CONFIG_PKG_USING_NMEALIB is not set # CONFIG_PKG_USING_PDULIB is not set # CONFIG_PKG_USING_BTSTACK is not set +# CONFIG_PKG_USING_BT_CYW43012 is not set # CONFIG_PKG_USING_LORAWAN_ED_STACK is not set # CONFIG_PKG_USING_WAYZ_IOTKIT is not set # CONFIG_PKG_USING_MAVLINK is not set @@ -487,6 +509,8 @@ CONFIG_RT_USING_ADT=y # CONFIG_PKG_USING_ZFTP is not set # CONFIG_PKG_USING_WOL is not set # CONFIG_PKG_USING_ZEPHYR_POLLING is not set +# CONFIG_PKG_USING_MATTER_ADAPTATION_LAYER is not set +# CONFIG_PKG_USING_LHC_MODBUS is not set # # security packages @@ -533,7 +557,6 @@ CONFIG_RT_USING_ADT=y # LVGL: powerful and easy-to-use embedded GUI library # # CONFIG_PKG_USING_LVGL is not set -# CONFIG_PKG_USING_LITTLEVGL2RTT is not set # CONFIG_PKG_USING_LV_MUSIC_DEMO is not set # CONFIG_PKG_USING_GUI_GUIDER_DEMO is not set @@ -608,6 +631,7 @@ CONFIG_RT_USING_ADT=y # CONFIG_PKG_USING_HASH_MATCH is not set # CONFIG_PKG_USING_ARMV7M_DWT_TOOL is not set # CONFIG_PKG_USING_VOFA_PLUS is not set +# CONFIG_PKG_USING_ZDEBUG is not set # # system packages @@ -644,6 +668,8 @@ CONFIG_RT_USING_ADT=y # CONFIG_PKG_USING_UC_COMMON is not set # CONFIG_PKG_USING_UC_MODBUS is not set # CONFIG_PKG_USING_FREERTOS_WRAPPER is not set +# CONFIG_PKG_USING_LITEOS_SDK is not set +# CONFIG_PKG_USING_TZ_DATABASE is not set # CONFIG_PKG_USING_CAIRO is not set # CONFIG_PKG_USING_PIXMAN is not set # CONFIG_PKG_USING_PARTITION is not set @@ -667,6 +693,7 @@ CONFIG_RT_USING_ADT=y # CONFIG_PKG_USING_QBOOT is not set # CONFIG_PKG_USING_PPOOL is not set # CONFIG_PKG_USING_OPENAMP is not set +# CONFIG_PKG_USING_RPMSG_LITE is not set # CONFIG_PKG_USING_LPM is not set # CONFIG_PKG_USING_TLSF is not set # CONFIG_PKG_USING_EVENT_RECORDER is not set @@ -679,6 +706,12 @@ CONFIG_RT_USING_ADT=y # CONFIG_PKG_USING_QPC is not set # CONFIG_PKG_USING_AGILE_UPGRADE is not set # CONFIG_PKG_USING_FLASH_BLOB is not set +# CONFIG_PKG_USING_MLIBC is not set +# CONFIG_PKG_USING_TASK_MSG_BUS is not set +# CONFIG_PKG_USING_SFDB is not set +# CONFIG_PKG_USING_RTP is not set +# CONFIG_PKG_USING_REB is not set +# CONFIG_PKG_USING_R_RHEALSTONE is not set # # peripheral libraries and drivers @@ -743,6 +776,7 @@ CONFIG_RT_USING_ADT=y # CONFIG_PKG_USING_BALANCE is not set # CONFIG_PKG_USING_SHT2X is not set # CONFIG_PKG_USING_SHT3X is not set +# CONFIG_PKG_USING_SHT4X is not set # CONFIG_PKG_USING_AD7746 is not set # CONFIG_PKG_USING_ADT74XX is not set # CONFIG_PKG_USING_MAX17048 is not set @@ -763,6 +797,7 @@ CONFIG_RT_USING_ADT=y # CONFIG_PKG_USING_FT5426 is not set # CONFIG_PKG_USING_FT6236 is not set # CONFIG_PKG_USING_XPT2046_TOUCH is not set +# CONFIG_PKG_USING_CST816X is not set # CONFIG_PKG_USING_REALTEK_AMEBA is not set # CONFIG_PKG_USING_STM32_SDIO is not set # CONFIG_PKG_USING_ESP_IDF is not set @@ -838,7 +873,15 @@ CONFIG_RT_USING_ADT=y # CONFIG_PKG_USING_IO_INPUT_FILTER is not set # CONFIG_PKG_USING_RASPBERRYPI_PICO_SDK is not set # CONFIG_PKG_USING_LRF_NV7LIDAR is not set +# CONFIG_PKG_USING_AIP650 is not set # CONFIG_PKG_USING_FINGERPRINT is not set +# CONFIG_PKG_USING_BT_ECB02C is not set +# CONFIG_PKG_USING_UAT is not set +# CONFIG_PKG_USING_ST7789 is not set +# CONFIG_PKG_USING_VS1003 is not set +# CONFIG_PKG_USING_X9555 is not set +# CONFIG_PKG_USING_SYSTEM_RUN_LED is not set +# CONFIG_PKG_USING_SPI_TOOLS is not set # # AI packages @@ -852,12 +895,17 @@ CONFIG_RT_USING_ADT=y # CONFIG_PKG_USING_ULAPACK is not set # CONFIG_PKG_USING_QUEST is not set # CONFIG_PKG_USING_NAXOS is not set +# CONFIG_PKG_USING_NCNN is not set +# CONFIG_PKG_USING_R_TINYMAIX is not set # # Signal Processing and Control Algorithm Packages # # CONFIG_PKG_USING_FIRE_PID_CURVE is not set +# CONFIG_PKG_USING_QPID is not set # CONFIG_PKG_USING_UKAL is not set +# CONFIG_PKG_USING_DIGITALCTRL is not set +# CONFIG_PKG_USING_KISSFFT is not set # # miscellaneous packages @@ -919,6 +967,7 @@ CONFIG_PKG_USING_KERNEL_SAMPLES_EN=y # CONFIG_PKG_USING_MINILZO is not set # CONFIG_PKG_USING_QUICKLZ is not set # CONFIG_PKG_USING_LZMA is not set +# CONFIG_PKG_USING_RALARAM is not set # CONFIG_PKG_USING_MULTIBUTTON is not set # CONFIG_PKG_USING_FLEXIBLE_BUTTON is not set # CONFIG_PKG_USING_CANFESTIVAL is not set @@ -928,7 +977,6 @@ CONFIG_PKG_USING_KERNEL_SAMPLES_EN=y # CONFIG_PKG_USING_DSTR is not set # CONFIG_PKG_USING_TINYFRAME is not set # CONFIG_PKG_USING_KENDRYTE_DEMO is not set -# CONFIG_PKG_USING_DIGITALCTRL is not set # CONFIG_PKG_USING_UPACKER is not set # CONFIG_PKG_USING_UPARAM is not set # CONFIG_PKG_USING_HELLO is not set @@ -953,8 +1001,9 @@ CONFIG_PKG_USING_KERNEL_SAMPLES_EN=y # CONFIG_PKG_USING_RTDUINO is not set # -# Projects +# Projects and Demos # +# CONFIG_PKG_USING_ARDUINO_MSGQ_C_CPP_DEMO is not set # CONFIG_PKG_USING_ARDUINO_ULTRASOUND_RADAR is not set # CONFIG_PKG_USING_ARDUINO_SENSOR_KIT is not set # CONFIG_PKG_USING_ARDUINO_MATLAB_SUPPORT is not set @@ -1101,14 +1150,21 @@ CONFIG_PKG_USING_KERNEL_SAMPLES_EN=y # # Display # +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_GFX_LIBRARY is not set # CONFIG_PKG_USING_ARDUINO_U8G2 is not set -# CONFIG_PKG_USING_ARDUINO_U8GLIB_ARDUINO is not set +# CONFIG_PKG_USING_ARDUINO_TFT_ESPI is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ST7735 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SSD1306 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ILI9341 is not set # CONFIG_PKG_USING_SEEED_TM1637 is not set # # Timing # +# CONFIG_PKG_USING_ARDUINO_RTCLIB is not set # CONFIG_PKG_USING_ARDUINO_MSTIMER2 is not set +# CONFIG_PKG_USING_ARDUINO_TICKER is not set +# CONFIG_PKG_USING_ARDUINO_TASKSCHEDULER is not set # # Data Processing @@ -1142,7 +1198,6 @@ CONFIG_PKG_USING_KERNEL_SAMPLES_EN=y # # CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MFRC630 is not set # CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI5351 is not set -# CONFIG_PKG_USING_ARDUINO_RTCLIB is not set # # Signal IO @@ -1163,10 +1218,12 @@ CONFIG_PKG_USING_KERNEL_SAMPLES_EN=y # # Hardware Drivers # +CONFIG_DRV_DEBUG=y # # On-chip Peripheral Drivers # +CONFIG_BSP_USING_IOPAD=y CONFIG_BSP_USING_UART=y CONFIG_RT_USING_UART1=y # CONFIG_RT_USING_UART0 is not set @@ -1174,13 +1231,10 @@ CONFIG_RT_USING_UART1=y # CONFIG_BSP_USING_CAN is not set # CONFIG_BSP_USING_GPIO is not set # CONFIG_BSP_USING_QSPI is not set -CONFIG_BSP_USING_ETH=y -CONFIG_RT_LWIP_PBUF_POOL_BUFSIZE=1700 -CONFIG_BSP_USING_SDIO=y -CONFIG_BSP_USING_SDCARD_FATFS=y -# CONFIG_USING_SDIO0 is not set -CONFIG_USING_SDIO1=y -# CONFIG_USING_EMMC is not set +# CONFIG_BSP_USING_ETH is not set +# CONFIG_BSP_USING_PWM is not set +# CONFIG_BSP_USING_I2C is not set +# CONFIG_BSP_USING_SDIF is not set # # Board extended module Drivers @@ -1196,78 +1250,63 @@ CONFIG_ARM_SPI_BIND_CPU_ID=0 CONFIG_TARGET_ARMV8_AARCH64=y # -# Board Configuration +# Soc configuration # -# CONFIG_TARGET_F2000_4 is not set -# CONFIG_TARGET_D2000 is not set +# CONFIG_TARGET_PHYTIUMPI is not set # CONFIG_TARGET_E2000Q is not set CONFIG_TARGET_E2000D=y # CONFIG_TARGET_E2000S is not set +# CONFIG_TARGET_FT2004 is not set +# CONFIG_TARGET_D2000 is not set +CONFIG_SOC_NAME="e2000" +CONFIG_TARGET_TYPE_NAME="d" +CONFIG_SOC_CORE_NUM=2 +CONFIG_F32BIT_MEMORY_ADDRESS=0x80000000 +CONFIG_F32BIT_MEMORY_LENGTH=0x80000000 +CONFIG_F64BIT_MEMORY_ADDRESS=0x2000000000 +CONFIG_F64BIT_MEMORY_LENGTH=0x800000000 CONFIG_TARGET_E2000=y +# CONFIG_USE_SPINLOCK is not set CONFIG_DEFAULT_DEBUG_PRINT_UART1=y # CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set # CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set # -# Components Configuration +# Board Configuration # -CONFIG_USE_SPI=y -CONFIG_USE_FSPIM=y -CONFIG_USE_QSPI=y +CONFIG_E2000D_DEMO_BOARD=y +CONFIG_BOARD_NAME="demo" # -# Qspi Configuration +# IO mux configuration when board start up # -CONFIG_USE_FQSPI=y -# CONFIG_USE_GIC is not set -CONFIG_USE_IOPAD=y -CONFIG_ENABLE_IOPAD=y -CONFIG_USE_SERIAL=y +# CONFIG_USE_SPI_IOPAD is not set +# CONFIG_USE_GPIO_IOPAD is not set +# CONFIG_USE_CAN_IOPAD is not set +# CONFIG_USE_QSPI_IOPAD is not set +# CONFIG_USE_PWM_IOPAD is not set +# CONFIG_USE_ADC_IOPAD is not set +# CONFIG_USE_MIO_IOPAD is not set +# CONFIG_USE_TACHO_IOPAD is not set +# CONFIG_USE_UART_IOPAD is not set +# CONFIG_USE_THIRD_PARTY_IOPAD is not set +# CONFIG_CUS_DEMO_BOARD is not set # -# Usart Configuration +# Sdk common configuration # -CONFIG_ENABLE_Pl011_UART=y -# CONFIG_USE_GPIO is not set -CONFIG_USE_ETH=y - -# -# Eth Configuration -# -CONFIG_ENABLE_FXMAC=y -# CONFIG_ENABLE_FGMAC is not set -CONFIG_FXMAC_PHY_COMMON=y -# CONFIG_FXMAC_PHY_YT is not set -# CONFIG_USE_CAN is not set -# CONFIG_USE_I2C is not set -# CONFIG_USE_TIMER is not set -# CONFIG_USE_MIO is not set -# CONFIG_USE_SDMMC is not set -# CONFIG_USE_PCIE is not set -# CONFIG_USE_WDT is not set -# CONFIG_USE_DMA is not set -# CONFIG_USE_NAND is not set -# CONFIG_USE_RTC is not set -# CONFIG_USE_SATA is not set -# CONFIG_USE_USB is not set -# CONFIG_USE_ADC is not set -# CONFIG_USE_PWM is not set -# CONFIG_USE_IPC is not set -# CONFIG_USE_MEDIA is not set -# CONFIG_USE_SCMI_MHU is not set # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -# CONFIG_USE_DEFAULT_INTERRUPT_CONFIG is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set -CONFIG_PHYTIUM_RTT_TEST=y -# CONFIG_ENABLE_RTT_UTEST is not set -# CONFIG_ENABLE_KERNEL_TEST is not set -# CONFIG_ENABLE_KERNEL_SAMPLE is not set -# CONFIG_ENABLE_COREMARK is not set -# CONFIG_ENABLE_DHRYSTONE is not set +# CONFIG_USE_DEFAULT_INTERRUPT_CONFIG is not set + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set diff --git a/bsp/phytium/aarch64/configs/e2000d_rtthread.h b/bsp/phytium/aarch64/configs/e2000d_demo_rtthread.h similarity index 89% rename from bsp/phytium/aarch64/configs/e2000d_rtthread.h rename to bsp/phytium/aarch64/configs/e2000d_demo_rtthread.h index 2aaee109e0..8e56e6c5d8 100644 --- a/bsp/phytium/aarch64/configs/e2000d_rtthread.h +++ b/bsp/phytium/aarch64/configs/e2000d_demo_rtthread.h @@ -50,17 +50,19 @@ #define RT_USING_SLAB_AS_HEAP #define RT_USING_HEAP_ISR #define RT_USING_HEAP - -/* Kernel Device Object */ - #define RT_USING_DEVICE #define RT_USING_CONSOLE #define RT_CONSOLEBUF_SIZE 128 #define RT_CONSOLE_DEVICE_NAME "uart1" -#define RT_VER_NUM 0x50001 +#define RT_VER_NUM 0x50100 +#define RT_BACKTRACE_LEVEL_MAX_NR 32 -/* RT-Thread Architecture */ +/* AArch64 Architecture Configuration */ +#define ARCH_TEXT_OFFSET 0x80000 +#define ARCH_RAM_OFFSET 0x80000000 +#define ARCH_SECONDARY_CPU_STACK_SIZE 4096 +#define ARCH_HAVE_EFFICIENT_UNALIGNED_ACCESS #define ARCH_CPU_64BIT #define RT_USING_CACHE #define ARCH_ARM_BOOTWITH_FLUSH_CACHE @@ -68,10 +70,6 @@ #define ARCH_ARM #define ARCH_ARM_MMU #define ARCH_ARMV8 -#define ARCH_TEXT_OFFSET 0x80000 -#define ARCH_RAM_OFFSET 0x80000000 -#define ARCH_SECONDARY_CPU_STACK_SIZE 4096 -#define ARCH_HAVE_EFFICIENT_UNALIGNED_ACCESS /* RT-Thread Components */ @@ -92,6 +90,7 @@ #define MSH_USING_BUILT_IN_COMMANDS #define FINSH_USING_DESCRIPTION #define FINSH_ARG_MAX 10 +#define FINSH_USING_OPTION_COMPLETION /* DFS: device virtual file system */ @@ -131,23 +130,21 @@ #define RT_USING_SERIAL_V1 #define RT_SERIAL_USING_DMA #define RT_SERIAL_RB_BUFSZ 64 -#define RT_USING_NULL -#define RT_USING_ZERO -#define RT_USING_RANDOM -#define RT_USING_RTC -#define RT_USING_SDIO -#define RT_SDIO_STACK_SIZE 4096 -#define RT_SDIO_THREAD_PRIORITY 15 -#define RT_MMCSD_STACK_SIZE 4096 -#define RT_MMCSD_THREAD_PREORITY 22 -#define RT_MMCSD_MAX_PARTITION 16 +#define RT_USING_KTIME /* Using USB */ /* C/C++ and POSIX layer */ -#define RT_LIBC_DEFAULT_TIMEZONE 8 +/* ISO-ANSI C layer */ + +/* Timezone and Daylight Saving Time */ + +#define RT_LIBC_USING_LIGHT_TZ_DST +#define RT_LIBC_TZ_DEFAULT_HOUR 8 +#define RT_LIBC_TZ_DEFAULT_MIN 0 +#define RT_LIBC_TZ_DEFAULT_SEC 0 /* POSIX (Portable Operating System Interface) layer */ @@ -233,7 +230,9 @@ #define RT_USING_ADT_BITMAP #define RT_USING_ADT_HASHMAP #define RT_USING_ADT_REF -#define RT_USING_KTIME + +/* Memory management */ + /* RT-Thread Utestcases */ @@ -251,6 +250,9 @@ /* Wiced WiFi */ +/* CYW43012 WiFi */ + + /* IoT Cloud */ @@ -323,7 +325,7 @@ /* Arduino libraries */ -/* Projects */ +/* Projects and Demos */ /* Sensors */ @@ -356,15 +358,13 @@ /* Hardware Drivers */ +#define DRV_DEBUG + /* On-chip Peripheral Drivers */ +#define BSP_USING_IOPAD #define BSP_USING_UART #define RT_USING_UART1 -#define BSP_USING_ETH -#define RT_LWIP_PBUF_POOL_BUFSIZE 1700 -#define BSP_USING_SDIO -#define BSP_USING_SDCARD_FATFS -#define USING_SDIO1 /* Board extended module Drivers */ @@ -377,37 +377,32 @@ #define TARGET_ARMV8_AARCH64 -/* Board Configuration */ +/* Soc configuration */ #define TARGET_E2000D +#define SOC_NAME "e2000" +#define TARGET_TYPE_NAME "d" +#define SOC_CORE_NUM 2 +#define F32BIT_MEMORY_ADDRESS 0x80000000 +#define F32BIT_MEMORY_LENGTH 0x80000000 +#define F64BIT_MEMORY_ADDRESS 0x2000000000 +#define F64BIT_MEMORY_LENGTH 0x800000000 #define TARGET_E2000 #define DEFAULT_DEBUG_PRINT_UART1 -/* Components Configuration */ +/* Board Configuration */ -#define USE_SPI -#define USE_FSPIM -#define USE_QSPI +#define E2000D_DEMO_BOARD +#define BOARD_NAME "demo" -/* Qspi Configuration */ +/* IO mux configuration when board start up */ -#define USE_FQSPI -#define USE_IOPAD -#define ENABLE_IOPAD -#define USE_SERIAL - -/* Usart Configuration */ - -#define ENABLE_Pl011_UART -#define USE_ETH - -/* Eth Configuration */ - -#define ENABLE_FXMAC -#define FXMAC_PHY_COMMON /* Sdk common configuration */ #define LOG_ERROR +/* Image information configuration */ + + #endif diff --git a/bsp/phytium/aarch64/configs/e2000d_rtsmart_test b/bsp/phytium/aarch64/configs/e2000d_rtsmart_test deleted file mode 100644 index 63c61429c8..0000000000 --- a/bsp/phytium/aarch64/configs/e2000d_rtsmart_test +++ /dev/null @@ -1,1284 +0,0 @@ -# -# Automatically generated file; DO NOT EDIT. -# RT-Thread Project Configuration -# - -# -# RT-Thread Kernel -# -CONFIG_RT_NAME_MAX=16 -# CONFIG_RT_USING_ARCH_DATA_TYPE is not set -CONFIG_RT_USING_SMART=y -CONFIG_RT_USING_SMP=y -CONFIG_RT_CPUS_NR=2 -CONFIG_RT_ALIGN_SIZE=4 -# CONFIG_RT_THREAD_PRIORITY_8 is not set -CONFIG_RT_THREAD_PRIORITY_32=y -# CONFIG_RT_THREAD_PRIORITY_256 is not set -CONFIG_RT_THREAD_PRIORITY_MAX=32 -CONFIG_RT_TICK_PER_SECOND=1000 -CONFIG_RT_USING_OVERFLOW_CHECK=y -CONFIG_RT_USING_HOOK=y -CONFIG_RT_HOOK_USING_FUNC_PTR=y -CONFIG_RT_USING_IDLE_HOOK=y -CONFIG_RT_IDLE_HOOK_LIST_SIZE=4 -CONFIG_IDLE_THREAD_STACK_SIZE=40960 -CONFIG_SYSTEM_THREAD_STACK_SIZE=40960 -CONFIG_RT_USING_TIMER_SOFT=y -CONFIG_RT_TIMER_THREAD_PRIO=4 -CONFIG_RT_TIMER_THREAD_STACK_SIZE=4096 - -# -# kservice optimization -# -CONFIG_RT_KSERVICE_USING_STDLIB=y -# CONFIG_RT_KSERVICE_USING_STDLIB_MEMORY is not set -# CONFIG_RT_KSERVICE_USING_TINY_SIZE is not set -# CONFIG_RT_USING_TINY_FFS is not set -CONFIG_RT_KPRINTF_USING_LONGLONG=y -CONFIG_RT_DEBUG=y -# CONFIG_RT_DEBUG_COLOR is not set -# CONFIG_RT_DEBUG_INIT_CONFIG is not set -# CONFIG_RT_DEBUG_THREAD_CONFIG is not set -# CONFIG_RT_DEBUG_SCHEDULER_CONFIG is not set -# CONFIG_RT_DEBUG_IPC_CONFIG is not set -# CONFIG_RT_DEBUG_TIMER_CONFIG is not set -# CONFIG_RT_DEBUG_IRQ_CONFIG is not set -# CONFIG_RT_DEBUG_MEM_CONFIG is not set -# CONFIG_RT_DEBUG_SLAB_CONFIG is not set -# CONFIG_RT_DEBUG_MEMHEAP_CONFIG is not set -# CONFIG_RT_DEBUG_PAGE_LEAK is not set -# CONFIG_RT_DEBUG_MODULE_CONFIG is not set - -# -# Inter-Thread communication -# -CONFIG_RT_USING_SEMAPHORE=y -CONFIG_RT_USING_MUTEX=y -CONFIG_RT_USING_EVENT=y -CONFIG_RT_USING_MAILBOX=y -CONFIG_RT_USING_MESSAGEQUEUE=y -# CONFIG_RT_USING_SIGNALS is not set - -# -# Memory Management -# -CONFIG_RT_PAGE_MAX_ORDER=16 -# CONFIG_RT_USING_MEMPOOL is not set -# CONFIG_RT_USING_SMALL_MEM is not set -CONFIG_RT_USING_SLAB=y -CONFIG_RT_USING_MEMHEAP=y -CONFIG_RT_MEMHEAP_FAST_MODE=y -# CONFIG_RT_MEMHEAP_BEST_MODE is not set -# CONFIG_RT_USING_SMALL_MEM_AS_HEAP is not set -# CONFIG_RT_USING_MEMHEAP_AS_HEAP is not set -CONFIG_RT_USING_SLAB_AS_HEAP=y -# CONFIG_RT_USING_USERHEAP is not set -# CONFIG_RT_USING_NOHEAP is not set -# CONFIG_RT_USING_MEMTRACE is not set -CONFIG_RT_USING_HEAP_ISR=y -CONFIG_RT_USING_HEAP=y - -# -# Kernel Device Object -# -CONFIG_RT_USING_DEVICE=y -# CONFIG_RT_USING_DEVICE_OPS is not set -# CONFIG_RT_USING_DM is not set -# CONFIG_RT_USING_INTERRUPT_INFO is not set -CONFIG_RT_USING_CONSOLE=y -CONFIG_RT_CONSOLEBUF_SIZE=128 -CONFIG_RT_CONSOLE_DEVICE_NAME="uart1" -CONFIG_RT_VER_NUM=0x50001 -# CONFIG_RT_USING_STDC_ATOMIC is not set -CONFIG_ARCH_CPU_64BIT=y -CONFIG_RT_USING_CACHE=y -# CONFIG_RT_USING_HW_ATOMIC is not set -CONFIG_ARCH_ARM_BOOTWITH_FLUSH_CACHE=y -# CONFIG_ARCH_CPU_STACK_GROWS_UPWARD is not set -# CONFIG_RT_USING_CPU_FFS is not set -CONFIG_ARCH_MM_MMU=y -CONFIG_ARCH_ARM=y -CONFIG_ARCH_ARM_MMU=y -CONFIG_KERNEL_VADDR_START=0xffff000000000000 -CONFIG_ARCH_ARMV8=y - -# -# RT-Thread Components -# -CONFIG_RT_USING_COMPONENTS_INIT=y -CONFIG_RT_USING_USER_MAIN=y -CONFIG_RT_MAIN_THREAD_STACK_SIZE=8192 -CONFIG_RT_MAIN_THREAD_PRIORITY=10 -# CONFIG_RT_USING_LEGACY is not set -CONFIG_RT_USING_MSH=y -CONFIG_RT_USING_FINSH=y -CONFIG_FINSH_USING_MSH=y -CONFIG_FINSH_THREAD_NAME="tshell" -CONFIG_FINSH_THREAD_PRIORITY=20 -CONFIG_FINSH_THREAD_STACK_SIZE=4096 -CONFIG_FINSH_USING_HISTORY=y -CONFIG_FINSH_HISTORY_LINES=5 -CONFIG_FINSH_USING_SYMTAB=y -CONFIG_FINSH_CMD_SIZE=80 -CONFIG_MSH_USING_BUILT_IN_COMMANDS=y -CONFIG_FINSH_USING_DESCRIPTION=y -# CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set -# CONFIG_FINSH_USING_AUTH is not set -CONFIG_FINSH_ARG_MAX=10 - -# -# DFS: device virtual file system -# -CONFIG_RT_USING_DFS=y -CONFIG_DFS_USING_POSIX=y -CONFIG_DFS_USING_WORKDIR=y -# CONFIG_RT_USING_DFS_MNTTABLE is not set -CONFIG_DFS_FD_MAX=16 -CONFIG_RT_USING_DFS_V1=y -# CONFIG_RT_USING_DFS_V2 is not set -CONFIG_DFS_FILESYSTEMS_MAX=4 -CONFIG_DFS_FILESYSTEM_TYPES_MAX=4 -CONFIG_RT_USING_DFS_ELMFAT=y - -# -# elm-chan's FatFs, Generic FAT Filesystem Module -# -CONFIG_RT_DFS_ELM_CODE_PAGE=437 -CONFIG_RT_DFS_ELM_WORD_ACCESS=y -# CONFIG_RT_DFS_ELM_USE_LFN_0 is not set -# CONFIG_RT_DFS_ELM_USE_LFN_1 is not set -# CONFIG_RT_DFS_ELM_USE_LFN_2 is not set -CONFIG_RT_DFS_ELM_USE_LFN_3=y -CONFIG_RT_DFS_ELM_USE_LFN=3 -CONFIG_RT_DFS_ELM_LFN_UNICODE_0=y -# CONFIG_RT_DFS_ELM_LFN_UNICODE_1 is not set -# CONFIG_RT_DFS_ELM_LFN_UNICODE_2 is not set -# CONFIG_RT_DFS_ELM_LFN_UNICODE_3 is not set -CONFIG_RT_DFS_ELM_LFN_UNICODE=0 -CONFIG_RT_DFS_ELM_MAX_LFN=255 -CONFIG_RT_DFS_ELM_DRIVES=2 -CONFIG_RT_DFS_ELM_MAX_SECTOR_SIZE=512 -# CONFIG_RT_DFS_ELM_USE_ERASE is not set -CONFIG_RT_DFS_ELM_REENTRANT=y -CONFIG_RT_DFS_ELM_MUTEX_TIMEOUT=3000 -CONFIG_RT_USING_DFS_DEVFS=y -# CONFIG_RT_USING_DFS_ROMFS is not set -# CONFIG_RT_USING_DFS_CROMFS is not set -CONFIG_RT_USING_DFS_RAMFS=y -# CONFIG_RT_USING_DFS_TMPFS is not set -# CONFIG_RT_USING_DFS_NFS is not set -# CONFIG_RT_USING_FAL is not set -CONFIG_RT_USING_LWP=y -CONFIG_RT_LWP_MAX_NR=30 -CONFIG_LWP_TASK_STACK_SIZE=16384 -CONFIG_RT_CH_MSG_MAX_NR=1024 -CONFIG_LWP_CONSOLE_INPUT_BUFFER_SIZE=1024 -CONFIG_LWP_TID_MAX_NR=64 -CONFIG_RT_LWP_SHM_MAX_NR=64 -# CONFIG_LWP_UNIX98_PTY is not set - -# -# Device Drivers -# -CONFIG_RT_USING_DEVICE_IPC=y -CONFIG_RT_UNAMED_PIPE_NUMBER=64 -CONFIG_RT_USING_SYSTEM_WORKQUEUE=y -CONFIG_RT_SYSTEM_WORKQUEUE_STACKSIZE=8192 -CONFIG_RT_SYSTEM_WORKQUEUE_PRIORITY=23 -CONFIG_RT_USING_SERIAL=y -CONFIG_RT_USING_SERIAL_V1=y -# CONFIG_RT_USING_SERIAL_V2 is not set -CONFIG_RT_SERIAL_USING_DMA=y -CONFIG_RT_SERIAL_RB_BUFSZ=64 -CONFIG_RT_USING_TTY=y -# CONFIG_RT_TTY_DEBUG is not set -# CONFIG_RT_USING_CAN is not set -# CONFIG_RT_USING_HWTIMER is not set -# CONFIG_RT_USING_CPUTIME is not set -# CONFIG_RT_USING_I2C is not set -# CONFIG_RT_USING_PHY is not set -# CONFIG_RT_USING_PIN is not set -# CONFIG_RT_USING_ADC is not set -# CONFIG_RT_USING_DAC is not set -CONFIG_RT_USING_NULL=y -CONFIG_RT_USING_ZERO=y -CONFIG_RT_USING_RANDOM=y -# CONFIG_RT_USING_PWM is not set -# CONFIG_RT_USING_MTD_NOR is not set -# CONFIG_RT_USING_MTD_NAND is not set -# CONFIG_RT_USING_PM is not set -# CONFIG_RT_USING_FDT is not set -CONFIG_RT_USING_RTC=y -# CONFIG_RT_USING_ALARM is not set -# CONFIG_RT_USING_SOFT_RTC is not set -CONFIG_RT_USING_SDIO=y -CONFIG_RT_SDIO_STACK_SIZE=4096 -CONFIG_RT_SDIO_THREAD_PRIORITY=15 -CONFIG_RT_MMCSD_STACK_SIZE=4096 -CONFIG_RT_MMCSD_THREAD_PREORITY=22 -CONFIG_RT_MMCSD_MAX_PARTITION=16 -# CONFIG_RT_SDIO_DEBUG is not set -# CONFIG_RT_USING_SPI is not set -# CONFIG_RT_USING_WDT is not set -# CONFIG_RT_USING_AUDIO is not set -# CONFIG_RT_USING_SENSOR is not set -# CONFIG_RT_USING_TOUCH is not set -# CONFIG_RT_USING_LCD is not set -# CONFIG_RT_USING_HWCRYPTO is not set -# CONFIG_RT_USING_PULSE_ENCODER is not set -# CONFIG_RT_USING_INPUT_CAPTURE is not set -# CONFIG_RT_USING_DEV_BUS is not set -# CONFIG_RT_USING_WIFI is not set -# CONFIG_RT_USING_VIRTIO is not set - -# -# Using USB -# -# CONFIG_RT_USING_USB is not set -# CONFIG_RT_USING_USB_HOST is not set -# CONFIG_RT_USING_USB_DEVICE is not set - -# -# C/C++ and POSIX layer -# -CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8 - -# -# POSIX (Portable Operating System Interface) layer -# -CONFIG_RT_USING_POSIX_FS=y -CONFIG_RT_USING_POSIX_DEVIO=y -CONFIG_RT_USING_POSIX_STDIO=y -# CONFIG_RT_USING_POSIX_POLL is not set -# CONFIG_RT_USING_POSIX_SELECT is not set -# CONFIG_RT_USING_POSIX_SOCKET is not set -CONFIG_RT_USING_POSIX_TERMIOS=y -# CONFIG_RT_USING_POSIX_AIO is not set -# CONFIG_RT_USING_POSIX_MMAN is not set -CONFIG_RT_USING_POSIX_DELAY=y -CONFIG_RT_USING_POSIX_CLOCK=y -CONFIG_RT_USING_POSIX_TIMER=y -# CONFIG_RT_USING_PTHREADS is not set -# CONFIG_RT_USING_MODULE is not set - -# -# Interprocess Communication (IPC) -# -# CONFIG_RT_USING_POSIX_PIPE is not set -# CONFIG_RT_USING_POSIX_MESSAGE_QUEUE is not set -# CONFIG_RT_USING_POSIX_MESSAGE_SEMAPHORE is not set - -# -# Socket is in the 'Network' category -# -# CONFIG_RT_USING_CPLUSPLUS is not set - -# -# Network -# -CONFIG_RT_USING_SAL=y -CONFIG_SAL_INTERNET_CHECK=y - -# -# Docking with protocol stacks -# -CONFIG_SAL_USING_LWIP=y -# CONFIG_SAL_USING_AT is not set -# CONFIG_SAL_USING_TLS is not set -CONFIG_SAL_USING_POSIX=y -# CONFIG_SAL_USING_AF_UNIX is not set -CONFIG_RT_USING_NETDEV=y -CONFIG_NETDEV_USING_IFCONFIG=y -CONFIG_NETDEV_USING_PING=y -CONFIG_NETDEV_USING_NETSTAT=y -CONFIG_NETDEV_USING_AUTO_DEFAULT=y -# CONFIG_NETDEV_USING_IPV6 is not set -CONFIG_NETDEV_IPV4=1 -CONFIG_NETDEV_IPV6=0 -# CONFIG_NETDEV_IPV6_SCOPES is not set -CONFIG_RT_USING_LWIP=y -# CONFIG_RT_USING_LWIP_LOCAL_VERSION is not set -# CONFIG_RT_USING_LWIP141 is not set -# CONFIG_RT_USING_LWIP203 is not set -CONFIG_RT_USING_LWIP212=y -# CONFIG_RT_USING_LWIP_LATEST is not set -CONFIG_RT_USING_LWIP_VER_NUM=0x20102 -# CONFIG_RT_USING_LWIP_IPV6 is not set -CONFIG_RT_LWIP_MEM_ALIGNMENT=64 -CONFIG_RT_LWIP_IGMP=y -CONFIG_RT_LWIP_ICMP=y -# CONFIG_RT_LWIP_SNMP is not set -CONFIG_RT_LWIP_DNS=y -# CONFIG_RT_LWIP_DHCP is not set - -# -# Static IPv4 Address -# -CONFIG_RT_LWIP_IPADDR="192.168.4.10" -CONFIG_RT_LWIP_GWADDR="192.168.4.1" -CONFIG_RT_LWIP_MSKADDR="255.255.255.0" -CONFIG_RT_LWIP_UDP=y -CONFIG_RT_LWIP_TCP=y -CONFIG_RT_LWIP_RAW=y -# CONFIG_RT_LWIP_PPP is not set -CONFIG_RT_MEMP_NUM_NETCONN=8 -CONFIG_RT_LWIP_PBUF_NUM=512 -CONFIG_RT_LWIP_RAW_PCB_NUM=4 -CONFIG_RT_LWIP_UDP_PCB_NUM=4 -CONFIG_RT_LWIP_TCP_PCB_NUM=4 -CONFIG_RT_LWIP_TCP_SEG_NUM=40 -CONFIG_RT_LWIP_TCP_SND_BUF=8196 -CONFIG_RT_LWIP_TCP_WND=8196 -CONFIG_RT_LWIP_TCPTHREAD_PRIORITY=12 -CONFIG_RT_LWIP_TCPTHREAD_MBOX_SIZE=8 -CONFIG_RT_LWIP_TCPTHREAD_STACKSIZE=16184 -# CONFIG_LWIP_NO_RX_THREAD is not set -# CONFIG_LWIP_NO_TX_THREAD is not set -CONFIG_RT_LWIP_ETHTHREAD_PRIORITY=12 -CONFIG_RT_LWIP_ETHTHREAD_STACKSIZE=2048 -CONFIG_RT_LWIP_ETHTHREAD_MBOX_SIZE=8 -# CONFIG_RT_LWIP_REASSEMBLY_FRAG is not set -CONFIG_LWIP_NETIF_STATUS_CALLBACK=1 -CONFIG_LWIP_NETIF_LINK_CALLBACK=1 -CONFIG_SO_REUSE=1 -CONFIG_LWIP_SO_RCVTIMEO=1 -CONFIG_LWIP_SO_SNDTIMEO=1 -CONFIG_LWIP_SO_RCVBUF=1 -CONFIG_LWIP_SO_LINGER=0 -# CONFIG_RT_LWIP_NETIF_LOOPBACK is not set -CONFIG_LWIP_NETIF_LOOPBACK=0 -# CONFIG_RT_LWIP_STATS is not set -# CONFIG_RT_LWIP_USING_HW_CHECKSUM is not set -CONFIG_RT_LWIP_USING_PING=y -# CONFIG_LWIP_USING_DHCPD is not set -CONFIG_RT_LWIP_DEBUG=y -# CONFIG_RT_LWIP_SYS_DEBUG is not set -# CONFIG_RT_LWIP_ETHARP_DEBUG is not set -# CONFIG_RT_LWIP_PPP_DEBUG is not set -# CONFIG_RT_LWIP_MEM_DEBUG is not set -# CONFIG_RT_LWIP_MEMP_DEBUG is not set -# CONFIG_RT_LWIP_PBUF_DEBUG is not set -# CONFIG_RT_LWIP_API_LIB_DEBUG is not set -# CONFIG_RT_LWIP_API_MSG_DEBUG is not set -# CONFIG_RT_LWIP_TCPIP_DEBUG is not set -CONFIG_RT_LWIP_NETIF_DEBUG=y -# CONFIG_RT_LWIP_SOCKETS_DEBUG is not set -# CONFIG_RT_LWIP_DNS_DEBUG is not set -# CONFIG_RT_LWIP_AUTOIP_DEBUG is not set -# CONFIG_RT_LWIP_DHCP_DEBUG is not set -# CONFIG_RT_LWIP_IP_DEBUG is not set -# CONFIG_RT_LWIP_IP_REASS_DEBUG is not set -# CONFIG_RT_LWIP_ICMP_DEBUG is not set -# CONFIG_RT_LWIP_IGMP_DEBUG is not set -# CONFIG_RT_LWIP_UDP_DEBUG is not set -# CONFIG_RT_LWIP_TCP_DEBUG is not set -# CONFIG_RT_LWIP_TCP_INPUT_DEBUG is not set -# CONFIG_RT_LWIP_TCP_OUTPUT_DEBUG is not set -# CONFIG_RT_LWIP_TCP_RTO_DEBUG is not set -# CONFIG_RT_LWIP_TCP_CWND_DEBUG is not set -# CONFIG_RT_LWIP_TCP_WND_DEBUG is not set -# CONFIG_RT_LWIP_TCP_FR_DEBUG is not set -# CONFIG_RT_LWIP_TCP_QLEN_DEBUG is not set -# CONFIG_RT_LWIP_TCP_RST_DEBUG is not set -# CONFIG_RT_USING_AT is not set - -# -# Utilities -# -CONFIG_RT_USING_RYM=y -# CONFIG_YMODEM_USING_CRC_TABLE is not set -CONFIG_YMODEM_USING_FILE_TRANSFER=y -# CONFIG_RT_USING_ULOG is not set -# CONFIG_RT_USING_UTEST is not set -# CONFIG_RT_USING_VAR_EXPORT is not set -CONFIG_RT_USING_ADT=y -# CONFIG_RT_USING_RT_LINK is not set -# CONFIG_RT_USING_VBUS is not set - -# -# RT-Thread Utestcases -# -# CONFIG_RT_USING_UTESTCASES is not set - -# -# RT-Thread online packages -# - -# -# IoT - internet of things -# -# CONFIG_PKG_USING_LWIP is not set -# CONFIG_PKG_USING_LORAWAN_DRIVER is not set -# CONFIG_PKG_USING_PAHOMQTT is not set -# CONFIG_PKG_USING_UMQTT is not set -# CONFIG_PKG_USING_WEBCLIENT is not set -# CONFIG_PKG_USING_WEBNET is not set -# CONFIG_PKG_USING_MONGOOSE is not set -# CONFIG_PKG_USING_MYMQTT is not set -# CONFIG_PKG_USING_KAWAII_MQTT is not set -# CONFIG_PKG_USING_BC28_MQTT is not set -# CONFIG_PKG_USING_WEBTERMINAL is not set -# CONFIG_PKG_USING_LIBMODBUS is not set -# CONFIG_PKG_USING_FREEMODBUS is not set -# CONFIG_PKG_USING_NANOPB is not set - -# -# Wi-Fi -# - -# -# Marvell WiFi -# -# CONFIG_PKG_USING_WLANMARVELL is not set - -# -# Wiced WiFi -# -# CONFIG_PKG_USING_WLAN_WICED is not set -# CONFIG_PKG_USING_RW007 is not set -# CONFIG_PKG_USING_COAP is not set -# CONFIG_PKG_USING_NOPOLL is not set -# CONFIG_PKG_USING_NETUTILS is not set -# CONFIG_PKG_USING_CMUX is not set -# CONFIG_PKG_USING_PPP_DEVICE is not set -# CONFIG_PKG_USING_AT_DEVICE is not set -# CONFIG_PKG_USING_ATSRV_SOCKET is not set -# CONFIG_PKG_USING_WIZNET is not set -# CONFIG_PKG_USING_ZB_COORDINATOR is not set - -# -# IoT Cloud -# -# CONFIG_PKG_USING_ONENET is not set -# CONFIG_PKG_USING_GAGENT_CLOUD is not set -# CONFIG_PKG_USING_ALI_IOTKIT is not set -# CONFIG_PKG_USING_AZURE is not set -# CONFIG_PKG_USING_TENCENT_IOT_EXPLORER is not set -# CONFIG_PKG_USING_JIOT-C-SDK is not set -# CONFIG_PKG_USING_UCLOUD_IOT_SDK is not set -# CONFIG_PKG_USING_JOYLINK is not set -# CONFIG_PKG_USING_EZ_IOT_OS is not set -# CONFIG_PKG_USING_IOTSHARP_SDK is not set -# CONFIG_PKG_USING_NIMBLE is not set -# CONFIG_PKG_USING_LLSYNC_SDK_ADAPTER is not set -# CONFIG_PKG_USING_OTA_DOWNLOADER is not set -# CONFIG_PKG_USING_IPMSG is not set -# CONFIG_PKG_USING_LSSDP is not set -# CONFIG_PKG_USING_AIRKISS_OPEN is not set -# CONFIG_PKG_USING_LIBRWS is not set -# CONFIG_PKG_USING_TCPSERVER is not set -# CONFIG_PKG_USING_PROTOBUF_C is not set -# CONFIG_PKG_USING_DLT645 is not set -# CONFIG_PKG_USING_QXWZ is not set -# CONFIG_PKG_USING_SMTP_CLIENT is not set -# CONFIG_PKG_USING_ABUP_FOTA is not set -# CONFIG_PKG_USING_LIBCURL2RTT is not set -# CONFIG_PKG_USING_CAPNP is not set -# CONFIG_PKG_USING_AGILE_TELNET is not set -# CONFIG_PKG_USING_NMEALIB is not set -# CONFIG_PKG_USING_PDULIB is not set -# CONFIG_PKG_USING_BTSTACK is not set -# CONFIG_PKG_USING_LORAWAN_ED_STACK is not set -# CONFIG_PKG_USING_WAYZ_IOTKIT is not set -# CONFIG_PKG_USING_MAVLINK is not set -# CONFIG_PKG_USING_BSAL is not set -# CONFIG_PKG_USING_AGILE_MODBUS is not set -# CONFIG_PKG_USING_AGILE_FTP is not set -# CONFIG_PKG_USING_EMBEDDEDPROTO is not set -# CONFIG_PKG_USING_RT_LINK_HW is not set -# CONFIG_PKG_USING_RYANMQTT is not set -# CONFIG_PKG_USING_RYANW5500 is not set -# CONFIG_PKG_USING_LORA_PKT_FWD is not set -# CONFIG_PKG_USING_LORA_GW_DRIVER_LIB is not set -# CONFIG_PKG_USING_LORA_PKT_SNIFFER is not set -# CONFIG_PKG_USING_HM is not set -# CONFIG_PKG_USING_SMALL_MODBUS is not set -# CONFIG_PKG_USING_NET_SERVER is not set -# CONFIG_PKG_USING_ZFTP is not set -# CONFIG_PKG_USING_WOL is not set -# CONFIG_PKG_USING_ZEPHYR_POLLING is not set - -# -# security packages -# -# CONFIG_PKG_USING_MBEDTLS is not set -# CONFIG_PKG_USING_LIBSODIUM is not set -# CONFIG_PKG_USING_LIBHYDROGEN is not set -# CONFIG_PKG_USING_TINYCRYPT is not set -# CONFIG_PKG_USING_TFM is not set -# CONFIG_PKG_USING_YD_CRYPTO is not set - -# -# language packages -# - -# -# JSON: JavaScript Object Notation, a lightweight data-interchange format -# -# CONFIG_PKG_USING_CJSON is not set -# CONFIG_PKG_USING_LJSON is not set -# CONFIG_PKG_USING_RT_CJSON_TOOLS is not set -# CONFIG_PKG_USING_RAPIDJSON is not set -# CONFIG_PKG_USING_JSMN is not set -# CONFIG_PKG_USING_AGILE_JSMN is not set -# CONFIG_PKG_USING_PARSON is not set - -# -# XML: Extensible Markup Language -# -# CONFIG_PKG_USING_SIMPLE_XML is not set -# CONFIG_PKG_USING_EZXML is not set -# CONFIG_PKG_USING_LUATOS_SOC is not set -# CONFIG_PKG_USING_LUA is not set -# CONFIG_PKG_USING_JERRYSCRIPT is not set -# CONFIG_PKG_USING_MICROPYTHON is not set -# CONFIG_PKG_USING_PIKASCRIPT is not set -# CONFIG_PKG_USING_RTT_RUST is not set - -# -# multimedia packages -# - -# -# LVGL: powerful and easy-to-use embedded GUI library -# -# CONFIG_PKG_USING_LVGL is not set -# CONFIG_PKG_USING_LITTLEVGL2RTT is not set -# CONFIG_PKG_USING_LV_MUSIC_DEMO is not set -# CONFIG_PKG_USING_GUI_GUIDER_DEMO is not set - -# -# u8g2: a monochrome graphic library -# -# CONFIG_PKG_USING_U8G2_OFFICIAL is not set -# CONFIG_PKG_USING_U8G2 is not set -# CONFIG_PKG_USING_OPENMV is not set -# CONFIG_PKG_USING_MUPDF is not set -# CONFIG_PKG_USING_STEMWIN is not set -# CONFIG_PKG_USING_WAVPLAYER is not set -# CONFIG_PKG_USING_TJPGD is not set -# CONFIG_PKG_USING_PDFGEN is not set -# CONFIG_PKG_USING_HELIX is not set -# CONFIG_PKG_USING_AZUREGUIX is not set -# CONFIG_PKG_USING_TOUCHGFX2RTT is not set -# CONFIG_PKG_USING_NUEMWIN is not set -# CONFIG_PKG_USING_MP3PLAYER is not set -# CONFIG_PKG_USING_TINYJPEG is not set -# CONFIG_PKG_USING_UGUI is not set -# CONFIG_PKG_USING_MCURSES is not set -# CONFIG_PKG_USING_TERMBOX is not set -# CONFIG_PKG_USING_VT100 is not set -# CONFIG_PKG_USING_QRCODE is not set -# CONFIG_PKG_USING_GUIENGINE is not set -# CONFIG_PKG_USING_3GPP_AMRNB is not set - -# -# tools packages -# -# CONFIG_PKG_USING_CMBACKTRACE is not set -# CONFIG_PKG_USING_EASYFLASH is not set -# CONFIG_PKG_USING_EASYLOGGER is not set -# CONFIG_PKG_USING_SYSTEMVIEW is not set -# CONFIG_PKG_USING_SEGGER_RTT is not set -# CONFIG_PKG_USING_RTT_AUTO_EXE_CMD is not set -# CONFIG_PKG_USING_RDB is not set -# CONFIG_PKG_USING_ULOG_EASYFLASH is not set -# CONFIG_PKG_USING_LOGMGR is not set -# CONFIG_PKG_USING_ADBD is not set -# CONFIG_PKG_USING_COREMARK is not set -# CONFIG_PKG_USING_DHRYSTONE is not set -# CONFIG_PKG_USING_MEMORYPERF is not set -# CONFIG_PKG_USING_NR_MICRO_SHELL is not set -# CONFIG_PKG_USING_CHINESE_FONT_LIBRARY is not set -# CONFIG_PKG_USING_LUNAR_CALENDAR is not set -# CONFIG_PKG_USING_BS8116A is not set -# CONFIG_PKG_USING_GPS_RMC is not set -# CONFIG_PKG_USING_URLENCODE is not set -# CONFIG_PKG_USING_UMCN is not set -# CONFIG_PKG_USING_LWRB2RTT is not set -# CONFIG_PKG_USING_CPU_USAGE is not set -# CONFIG_PKG_USING_GBK2UTF8 is not set -# CONFIG_PKG_USING_VCONSOLE is not set -# CONFIG_PKG_USING_KDB is not set -# CONFIG_PKG_USING_WAMR is not set -# CONFIG_PKG_USING_MICRO_XRCE_DDS_CLIENT is not set -# CONFIG_PKG_USING_LWLOG is not set -# CONFIG_PKG_USING_ANV_TRACE is not set -# CONFIG_PKG_USING_ANV_MEMLEAK is not set -# CONFIG_PKG_USING_ANV_TESTSUIT is not set -# CONFIG_PKG_USING_ANV_BENCH is not set -# CONFIG_PKG_USING_DEVMEM is not set -# CONFIG_PKG_USING_REGEX is not set -# CONFIG_PKG_USING_MEM_SANDBOX is not set -# CONFIG_PKG_USING_SOLAR_TERMS is not set -# CONFIG_PKG_USING_GAN_ZHI is not set -# CONFIG_PKG_USING_FDT is not set -# CONFIG_PKG_USING_CBOX is not set -# CONFIG_PKG_USING_SNOWFLAKE is not set -# CONFIG_PKG_USING_HASH_MATCH is not set -# CONFIG_PKG_USING_ARMV7M_DWT_TOOL is not set -# CONFIG_PKG_USING_VOFA_PLUS is not set - -# -# system packages -# - -# -# enhanced kernel services -# -# CONFIG_PKG_USING_RT_MEMCPY_CM is not set -# CONFIG_PKG_USING_RT_KPRINTF_THREADSAFE is not set -# CONFIG_PKG_USING_RT_VSNPRINTF_FULL is not set - -# -# acceleration: Assembly language or algorithmic acceleration packages -# -# CONFIG_PKG_USING_QFPLIB_M0_FULL is not set -# CONFIG_PKG_USING_QFPLIB_M0_TINY is not set -# CONFIG_PKG_USING_QFPLIB_M3 is not set - -# -# CMSIS: ARM Cortex-M Microcontroller Software Interface Standard -# -# CONFIG_PKG_USING_CMSIS_5 is not set -# CONFIG_PKG_USING_CMSIS_RTOS1 is not set -# CONFIG_PKG_USING_CMSIS_RTOS2 is not set - -# -# Micrium: Micrium software products porting for RT-Thread -# -# CONFIG_PKG_USING_UCOSIII_WRAPPER is not set -# CONFIG_PKG_USING_UCOSII_WRAPPER is not set -# CONFIG_PKG_USING_UC_CRC is not set -# CONFIG_PKG_USING_UC_CLK is not set -# CONFIG_PKG_USING_UC_COMMON is not set -# CONFIG_PKG_USING_UC_MODBUS is not set -# CONFIG_PKG_USING_FREERTOS_WRAPPER is not set -# CONFIG_PKG_USING_CAIRO is not set -# CONFIG_PKG_USING_PIXMAN is not set -# CONFIG_PKG_USING_PARTITION is not set -# CONFIG_PKG_USING_PERF_COUNTER is not set -# CONFIG_PKG_USING_FLASHDB is not set -# CONFIG_PKG_USING_SQLITE is not set -# CONFIG_PKG_USING_RTI is not set -# CONFIG_PKG_USING_DFS_YAFFS is not set -# CONFIG_PKG_USING_LITTLEFS is not set -# CONFIG_PKG_USING_DFS_JFFS2 is not set -# CONFIG_PKG_USING_DFS_UFFS is not set -# CONFIG_PKG_USING_LWEXT4 is not set -# CONFIG_PKG_USING_THREAD_POOL is not set -# CONFIG_PKG_USING_ROBOTS is not set -# CONFIG_PKG_USING_EV is not set -# CONFIG_PKG_USING_SYSWATCH is not set -# CONFIG_PKG_USING_SYS_LOAD_MONITOR is not set -# CONFIG_PKG_USING_PLCCORE is not set -# CONFIG_PKG_USING_RAMDISK is not set -# CONFIG_PKG_USING_MININI is not set -# CONFIG_PKG_USING_QBOOT is not set -# CONFIG_PKG_USING_PPOOL is not set -# CONFIG_PKG_USING_OPENAMP is not set -# CONFIG_PKG_USING_LPM is not set -# CONFIG_PKG_USING_TLSF is not set -# CONFIG_PKG_USING_EVENT_RECORDER is not set -# CONFIG_PKG_USING_ARM_2D is not set -# CONFIG_PKG_USING_MCUBOOT is not set -# CONFIG_PKG_USING_TINYUSB is not set -# CONFIG_PKG_USING_CHERRYUSB is not set -# CONFIG_PKG_USING_KMULTI_RTIMER is not set -# CONFIG_PKG_USING_TFDB is not set -# CONFIG_PKG_USING_QPC is not set -# CONFIG_PKG_USING_AGILE_UPGRADE is not set -# CONFIG_PKG_USING_FLASH_BLOB is not set - -# -# peripheral libraries and drivers -# - -# -# sensors drivers -# -# CONFIG_PKG_USING_LSM6DSM is not set -# CONFIG_PKG_USING_LSM6DSL is not set -# CONFIG_PKG_USING_LPS22HB is not set -# CONFIG_PKG_USING_HTS221 is not set -# CONFIG_PKG_USING_LSM303AGR is not set -# CONFIG_PKG_USING_BME280 is not set -# CONFIG_PKG_USING_BME680 is not set -# CONFIG_PKG_USING_BMA400 is not set -# CONFIG_PKG_USING_BMI160_BMX160 is not set -# CONFIG_PKG_USING_SPL0601 is not set -# CONFIG_PKG_USING_MS5805 is not set -# CONFIG_PKG_USING_DA270 is not set -# CONFIG_PKG_USING_DF220 is not set -# CONFIG_PKG_USING_HSHCAL001 is not set -# CONFIG_PKG_USING_BH1750 is not set -# CONFIG_PKG_USING_MPU6XXX is not set -# CONFIG_PKG_USING_AHT10 is not set -# CONFIG_PKG_USING_AP3216C is not set -# CONFIG_PKG_USING_TSL4531 is not set -# CONFIG_PKG_USING_DS18B20 is not set -# CONFIG_PKG_USING_DHT11 is not set -# CONFIG_PKG_USING_DHTXX is not set -# CONFIG_PKG_USING_GY271 is not set -# CONFIG_PKG_USING_GP2Y10 is not set -# CONFIG_PKG_USING_SGP30 is not set -# CONFIG_PKG_USING_HDC1000 is not set -# CONFIG_PKG_USING_BMP180 is not set -# CONFIG_PKG_USING_BMP280 is not set -# CONFIG_PKG_USING_SHTC1 is not set -# CONFIG_PKG_USING_BMI088 is not set -# CONFIG_PKG_USING_HMC5883 is not set -# CONFIG_PKG_USING_MAX6675 is not set -# CONFIG_PKG_USING_TMP1075 is not set -# CONFIG_PKG_USING_SR04 is not set -# CONFIG_PKG_USING_CCS811 is not set -# CONFIG_PKG_USING_PMSXX is not set -# CONFIG_PKG_USING_RT3020 is not set -# CONFIG_PKG_USING_MLX90632 is not set -# CONFIG_PKG_USING_MLX90393 is not set -# CONFIG_PKG_USING_MLX90392 is not set -# CONFIG_PKG_USING_MLX90397 is not set -# CONFIG_PKG_USING_MS5611 is not set -# CONFIG_PKG_USING_MAX31865 is not set -# CONFIG_PKG_USING_VL53L0X is not set -# CONFIG_PKG_USING_INA260 is not set -# CONFIG_PKG_USING_MAX30102 is not set -# CONFIG_PKG_USING_INA226 is not set -# CONFIG_PKG_USING_LIS2DH12 is not set -# CONFIG_PKG_USING_HS300X is not set -# CONFIG_PKG_USING_ZMOD4410 is not set -# CONFIG_PKG_USING_ISL29035 is not set -# CONFIG_PKG_USING_MMC3680KJ is not set -# CONFIG_PKG_USING_QMP6989 is not set -# CONFIG_PKG_USING_BALANCE is not set -# CONFIG_PKG_USING_SHT2X is not set -# CONFIG_PKG_USING_SHT3X is not set -# CONFIG_PKG_USING_AD7746 is not set -# CONFIG_PKG_USING_ADT74XX is not set -# CONFIG_PKG_USING_MAX17048 is not set -# CONFIG_PKG_USING_AS7341 is not set -# CONFIG_PKG_USING_CW2015 is not set -# CONFIG_PKG_USING_ICM20608 is not set -# CONFIG_PKG_USING_PAJ7620 is not set -# CONFIG_PKG_USING_STHS34PF80 is not set - -# -# touch drivers -# -# CONFIG_PKG_USING_GT9147 is not set -# CONFIG_PKG_USING_GT1151 is not set -# CONFIG_PKG_USING_GT917S is not set -# CONFIG_PKG_USING_GT911 is not set -# CONFIG_PKG_USING_FT6206 is not set -# CONFIG_PKG_USING_FT5426 is not set -# CONFIG_PKG_USING_FT6236 is not set -# CONFIG_PKG_USING_XPT2046_TOUCH is not set -# CONFIG_PKG_USING_REALTEK_AMEBA is not set -# CONFIG_PKG_USING_STM32_SDIO is not set -# CONFIG_PKG_USING_ESP_IDF is not set -# CONFIG_PKG_USING_BUTTON is not set -# CONFIG_PKG_USING_PCF8574 is not set -# CONFIG_PKG_USING_SX12XX is not set -# CONFIG_PKG_USING_SIGNAL_LED is not set -# CONFIG_PKG_USING_LEDBLINK is not set -# CONFIG_PKG_USING_LITTLED is not set -# CONFIG_PKG_USING_LKDGUI is not set -# CONFIG_PKG_USING_NRF5X_SDK is not set -# CONFIG_PKG_USING_NRFX is not set - -# -# Kendryte SDK -# -# CONFIG_PKG_USING_K210_SDK is not set -# CONFIG_PKG_USING_KENDRYTE_SDK is not set -# CONFIG_PKG_USING_INFRARED is not set -# CONFIG_PKG_USING_MULTI_INFRARED is not set -# CONFIG_PKG_USING_AGILE_BUTTON is not set -# CONFIG_PKG_USING_AGILE_LED is not set -# CONFIG_PKG_USING_AT24CXX is not set -# CONFIG_PKG_USING_MOTIONDRIVER2RTT is not set -# CONFIG_PKG_USING_PCA9685 is not set -# CONFIG_PKG_USING_ILI9341 is not set -# CONFIG_PKG_USING_I2C_TOOLS is not set -# CONFIG_PKG_USING_NRF24L01 is not set -# CONFIG_PKG_USING_RPLIDAR is not set -# CONFIG_PKG_USING_AS608 is not set -# CONFIG_PKG_USING_RC522 is not set -# CONFIG_PKG_USING_WS2812B is not set -# CONFIG_PKG_USING_EMBARC_BSP is not set -# CONFIG_PKG_USING_EXTERN_RTC_DRIVERS is not set -# CONFIG_PKG_USING_MULTI_RTIMER is not set -# CONFIG_PKG_USING_MAX7219 is not set -# CONFIG_PKG_USING_BEEP is not set -# CONFIG_PKG_USING_EASYBLINK is not set -# CONFIG_PKG_USING_PMS_SERIES is not set -# CONFIG_PKG_USING_CAN_YMODEM is not set -# CONFIG_PKG_USING_LORA_RADIO_DRIVER is not set -# CONFIG_PKG_USING_QLED is not set -# CONFIG_PKG_USING_AGILE_CONSOLE is not set -# CONFIG_PKG_USING_LD3320 is not set -# CONFIG_PKG_USING_WK2124 is not set -# CONFIG_PKG_USING_LY68L6400 is not set -# CONFIG_PKG_USING_DM9051 is not set -# CONFIG_PKG_USING_SSD1306 is not set -# CONFIG_PKG_USING_QKEY is not set -# CONFIG_PKG_USING_RS485 is not set -# CONFIG_PKG_USING_RS232 is not set -# CONFIG_PKG_USING_NES is not set -# CONFIG_PKG_USING_VIRTUAL_SENSOR is not set -# CONFIG_PKG_USING_VDEVICE is not set -# CONFIG_PKG_USING_SGM706 is not set -# CONFIG_PKG_USING_STM32WB55_SDK is not set -# CONFIG_PKG_USING_RDA58XX is not set -# CONFIG_PKG_USING_LIBNFC is not set -# CONFIG_PKG_USING_MFOC is not set -# CONFIG_PKG_USING_TMC51XX is not set -# CONFIG_PKG_USING_TCA9534 is not set -# CONFIG_PKG_USING_KOBUKI is not set -# CONFIG_PKG_USING_ROSSERIAL is not set -# CONFIG_PKG_USING_MICRO_ROS is not set -# CONFIG_PKG_USING_MCP23008 is not set -# CONFIG_PKG_USING_BLUETRUM_SDK is not set -# CONFIG_PKG_USING_MISAKA_AT24CXX is not set -# CONFIG_PKG_USING_MISAKA_RGB_BLING is not set -# CONFIG_PKG_USING_LORA_MODEM_DRIVER is not set -# CONFIG_PKG_USING_SOFT_SERIAL is not set -# CONFIG_PKG_USING_MB85RS16 is not set -# CONFIG_PKG_USING_RFM300 is not set -# CONFIG_PKG_USING_IO_INPUT_FILTER is not set -# CONFIG_PKG_USING_RASPBERRYPI_PICO_SDK is not set -# CONFIG_PKG_USING_LRF_NV7LIDAR is not set -# CONFIG_PKG_USING_FINGERPRINT is not set - -# -# AI packages -# -# CONFIG_PKG_USING_LIBANN is not set -# CONFIG_PKG_USING_NNOM is not set -# CONFIG_PKG_USING_ONNX_BACKEND is not set -# CONFIG_PKG_USING_ONNX_PARSER is not set -# CONFIG_PKG_USING_TENSORFLOWLITEMICRO is not set -# CONFIG_PKG_USING_ELAPACK is not set -# CONFIG_PKG_USING_ULAPACK is not set -# CONFIG_PKG_USING_QUEST is not set -# CONFIG_PKG_USING_NAXOS is not set - -# -# Signal Processing and Control Algorithm Packages -# -# CONFIG_PKG_USING_FIRE_PID_CURVE is not set -# CONFIG_PKG_USING_UKAL is not set - -# -# miscellaneous packages -# - -# -# project laboratory -# - -# -# samples: kernel and components samples -# -CONFIG_PKG_USING_KERNEL_SAMPLES=y -CONFIG_PKG_KERNEL_SAMPLES_PATH="/packages/misc/samples/kernel_samples" -# CONFIG_PKG_USING_KERNEL_SAMPLES_V030 is not set -# CONFIG_PKG_USING_KERNEL_SAMPLES_V040 is not set -CONFIG_PKG_USING_KERNEL_SAMPLES_LATEST_VERSION=y -CONFIG_PKG_KERNEL_SAMPLES_VER="latest" -CONFIG_PKG_USING_KERNEL_SAMPLES_EN=y -# CONFIG_PKG_USING_KERNEL_SAMPLES_ZH is not set -# CONFIG_KERNEL_SAMPLES_USING_THREAD is not set -# CONFIG_KERNEL_SAMPLES_USING_SEMAPHORE is not set -# CONFIG_KERNEL_SAMPLES_USING_MUTEX is not set -# CONFIG_KERNEL_SAMPLES_USING_MAILBOX is not set -# CONFIG_KERNEL_SAMPLES_USING_EVENT is not set -# CONFIG_KERNEL_SAMPLES_USING_MESSAGEQUEUE is not set -# CONFIG_KERNEL_SAMPLES_USING_TIMER is not set -# CONFIG_KERNEL_SAMPLES_USING_HEAP is not set -# CONFIG_KERNEL_SAMPLES_USING_MEMHEAP is not set -# CONFIG_KERNEL_SAMPLES_USING_MEMPOOL is not set -# CONFIG_KERNEL_SAMPLES_USING_IDLEHOOK is not set -# CONFIG_KERNEL_SAMPLES_USING_SIGNAL is not set -# CONFIG_KERNEL_SAMPLES_USING_INTERRUPT is not set -# CONFIG_KERNEL_SAMPLES_USING_PRI_INVERSION is not set -# CONFIG_KERNEL_SAMPLES_USING_TIME_SLICE is not set -# CONFIG_KERNEL_SAMPLES_USING_SCHEDULER_HOOK is not set -# CONFIG_KERNEL_SAMPLES_USING_PRODUCER_CONSUMER is not set -# CONFIG_PKG_USING_FILESYSTEM_SAMPLES is not set -# CONFIG_PKG_USING_NETWORK_SAMPLES is not set -# CONFIG_PKG_USING_PERIPHERAL_SAMPLES is not set - -# -# entertainment: terminal games and other interesting software packages -# -# CONFIG_PKG_USING_CMATRIX is not set -# CONFIG_PKG_USING_SL is not set -# CONFIG_PKG_USING_CAL is not set -# CONFIG_PKG_USING_ACLOCK is not set -# CONFIG_PKG_USING_THREES is not set -# CONFIG_PKG_USING_2048 is not set -# CONFIG_PKG_USING_SNAKE is not set -# CONFIG_PKG_USING_TETRIS is not set -# CONFIG_PKG_USING_DONUT is not set -# CONFIG_PKG_USING_COWSAY is not set -# CONFIG_PKG_USING_MORSE is not set -# CONFIG_PKG_USING_LIBCSV is not set -# CONFIG_PKG_USING_OPTPARSE is not set -# CONFIG_PKG_USING_FASTLZ is not set -# CONFIG_PKG_USING_MINILZO is not set -# CONFIG_PKG_USING_QUICKLZ is not set -# CONFIG_PKG_USING_LZMA is not set -# CONFIG_PKG_USING_MULTIBUTTON is not set -# CONFIG_PKG_USING_FLEXIBLE_BUTTON is not set -# CONFIG_PKG_USING_CANFESTIVAL is not set -# CONFIG_PKG_USING_ZLIB is not set -# CONFIG_PKG_USING_MINIZIP is not set -# CONFIG_PKG_USING_HEATSHRINK is not set -# CONFIG_PKG_USING_DSTR is not set -# CONFIG_PKG_USING_TINYFRAME is not set -# CONFIG_PKG_USING_KENDRYTE_DEMO is not set -# CONFIG_PKG_USING_DIGITALCTRL is not set -# CONFIG_PKG_USING_UPACKER is not set -# CONFIG_PKG_USING_UPARAM is not set -# CONFIG_PKG_USING_HELLO is not set -# CONFIG_PKG_USING_VI is not set -# CONFIG_PKG_USING_KI is not set -# CONFIG_PKG_USING_ARMv7M_DWT is not set -# CONFIG_PKG_USING_CRCLIB is not set -# CONFIG_PKG_USING_LWGPS is not set -# CONFIG_PKG_USING_STATE_MACHINE is not set -# CONFIG_PKG_USING_DESIGN_PATTERN is not set -# CONFIG_PKG_USING_CONTROLLER is not set -# CONFIG_PKG_USING_PHASE_LOCKED_LOOP is not set -# CONFIG_PKG_USING_MFBD is not set -# CONFIG_PKG_USING_SLCAN2RTT is not set -# CONFIG_PKG_USING_SOEM is not set -# CONFIG_PKG_USING_QPARAM is not set -# CONFIG_PKG_USING_CorevMCU_CLI is not set - -# -# Arduino libraries -# -# CONFIG_PKG_USING_RTDUINO is not set - -# -# Projects -# -# CONFIG_PKG_USING_ARDUINO_ULTRASOUND_RADAR is not set -# CONFIG_PKG_USING_ARDUINO_SENSOR_KIT is not set -# CONFIG_PKG_USING_ARDUINO_MATLAB_SUPPORT is not set - -# -# Sensors -# -# CONFIG_PKG_USING_ARDUINO_SENSOR_DEVICE_DRIVERS is not set -# CONFIG_PKG_USING_ARDUINO_CAPACITIVESENSOR is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADXL375 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL53L0X is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL53L1X is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SENSOR is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL6180X is not set -# CONFIG_PKG_USING_ADAFRUIT_MAX31855 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX31865 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX31856 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX6675 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90614 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM9DS1 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AHTX0 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM9DS0 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP280 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADT7410 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP085 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BME680 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP9808 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP4728 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_INA219 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LTR390 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADXL345 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DHT is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP9600 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM6DS is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BNO055 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX1704X is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MMC56X3 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90393 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90395 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ICM20X is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DPS310 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HTS221 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SHT4X is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SHT31 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADXL343 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BME280 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AS726X is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AMG88XX is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AM2320 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AM2315 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LTR329_LTR303 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP085_UNIFIED is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP183 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP183_UNIFIED is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP3XX is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MS8607 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS3MDL is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90640 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MMA8451 is not set -# CONFIG_PKG_USING_ADAFRUIT_MSA301 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPL115A2 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BNO08X is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BNO08X_RVC is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS2MDL is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM303DLH_MAG is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LC709203F is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_CAP1188 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_CCS811 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_NAU7802 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS331 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LPS2X is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LPS35HW is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM303_ACCEL is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS3DH is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCF8591 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPL3115A2 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPR121 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPRLS is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPU6050 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCT2075 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PM25AQI is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_EMC2101 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_FXAS21002C is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SCD30 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_FXOS8700 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HMC5883_UNIFIED is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SGP30 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TMP006 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TLA202X is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TCS34725 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI7021 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI1145 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SGP40 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SHTC3 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HDC1000 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HTU21DF is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AS7341 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HTU31D is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SENSORLAB is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_INA260 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TMP007_LIBRARY is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_L3GD20 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TMP117 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TSC2007 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TSL2561 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TSL2591_LIBRARY is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VCNL4040 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VEML6070 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VEML6075 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VEML7700 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_LIS3DHTR is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_DHT is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_ADXL335 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_ADXL345 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_BME280 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_BMP280 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_H3LIS331DL is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_MMA7660 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_TSL2561 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_PAJ7620 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_VL53L0X is not set -# CONFIG_PKG_USING_SEEED_ITG3200 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_SHT31 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_HP20X is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_DRV2605L is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_BBM150 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_HMC5883L is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_LSM303DLH is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_TCS3414CS is not set -# CONFIG_PKG_USING_SEEED_MP503 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_BMP085 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_HIGHTEMP is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_VEML6070 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_SI1145 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_SHT35 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_AT42QT1070 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_LSM6DS3 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_HDC1000 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_HM3301 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_MCP9600 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_LTC2941 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_LDC1612 is not set - -# -# Display -# -# CONFIG_PKG_USING_ARDUINO_U8G2 is not set -# CONFIG_PKG_USING_ARDUINO_U8GLIB_ARDUINO is not set -# CONFIG_PKG_USING_SEEED_TM1637 is not set - -# -# Timing -# -# CONFIG_PKG_USING_ARDUINO_MSTIMER2 is not set - -# -# Data Processing -# -# CONFIG_PKG_USING_ARDUINO_KALMANFILTER is not set -# CONFIG_PKG_USING_ARDUINO_ARDUINOJSON is not set - -# -# Data Storage -# - -# -# Communication -# -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PN532 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI4713 is not set - -# -# Device Control -# -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCF8574 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCA9685 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_PCF85063TP is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TPA2016 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DRV2605 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DS1841 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DS3502 is not set - -# -# Other -# -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MFRC630 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI5351 is not set -# CONFIG_PKG_USING_ARDUINO_RTCLIB is not set - -# -# Signal IO -# -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BUSIO is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TCA8418 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP23017 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADS1X15 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AW9523 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP3008 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP4725 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BD3491FS is not set - -# -# Uncategorized -# - -# -# Hardware Drivers -# - -# -# On-chip Peripheral Drivers -# -CONFIG_BSP_USING_UART=y -CONFIG_RT_USING_UART1=y -# CONFIG_RT_USING_UART0 is not set -# CONFIG_BSP_USING_SPI is not set -# CONFIG_BSP_USING_CAN is not set -# CONFIG_BSP_USING_GPIO is not set -# CONFIG_BSP_USING_QSPI is not set -CONFIG_BSP_USING_ETH=y -CONFIG_RT_LWIP_PBUF_POOL_BUFSIZE=1700 -CONFIG_BSP_USING_SDIO=y -CONFIG_BSP_USING_SDCARD_FATFS=y -# CONFIG_USING_SDIO0 is not set -CONFIG_USING_SDIO1=y -# CONFIG_USING_EMMC is not set - -# -# Board extended module Drivers -# -CONFIG_BSP_USING_GIC=y -CONFIG_BSP_USING_GICV3=y -CONFIG_PHYTIUM_ARCH_AARCH64=y -CONFIG_ARM_SPI_BIND_CPU_ID=0 - -# -# Standalone Setting -# -CONFIG_TARGET_ARMV8_AARCH64=y - -# -# Board Configuration -# -# CONFIG_TARGET_F2000_4 is not set -# CONFIG_TARGET_D2000 is not set -# CONFIG_TARGET_E2000Q is not set -CONFIG_TARGET_E2000D=y -# CONFIG_TARGET_E2000S is not set -CONFIG_TARGET_E2000=y -CONFIG_DEFAULT_DEBUG_PRINT_UART1=y -# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set -# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set - -# -# Components Configuration -# -CONFIG_USE_SPI=y -CONFIG_USE_FSPIM=y -CONFIG_USE_QSPI=y - -# -# Qspi Configuration -# -CONFIG_USE_FQSPI=y -# CONFIG_USE_GIC is not set -CONFIG_USE_IOPAD=y -CONFIG_ENABLE_IOPAD=y -CONFIG_USE_SERIAL=y - -# -# Usart Configuration -# -CONFIG_ENABLE_Pl011_UART=y -# CONFIG_USE_GPIO is not set -CONFIG_USE_ETH=y - -# -# Eth Configuration -# -CONFIG_ENABLE_FXMAC=y -# CONFIG_ENABLE_FGMAC is not set -CONFIG_FXMAC_PHY_COMMON=y -# CONFIG_FXMAC_PHY_YT is not set -# CONFIG_USE_CAN is not set -# CONFIG_USE_I2C is not set -# CONFIG_USE_TIMER is not set -# CONFIG_USE_MIO is not set -# CONFIG_USE_SDMMC is not set -# CONFIG_USE_PCIE is not set -# CONFIG_USE_WDT is not set -# CONFIG_USE_DMA is not set -# CONFIG_USE_NAND is not set -# CONFIG_USE_RTC is not set -# CONFIG_USE_SATA is not set -# CONFIG_USE_USB is not set -# CONFIG_USE_ADC is not set -# CONFIG_USE_PWM is not set -# CONFIG_USE_IPC is not set -# CONFIG_USE_MEDIA is not set -# CONFIG_USE_SCMI_MHU is not set -# CONFIG_LOG_VERBOS is not set -# CONFIG_LOG_DEBUG is not set -# CONFIG_LOG_INFO is not set -# CONFIG_LOG_WARN is not set -CONFIG_LOG_ERROR=y -# CONFIG_LOG_NONE is not set -# CONFIG_USE_DEFAULT_INTERRUPT_CONFIG is not set -# CONFIG_LOG_EXTRA_INFO is not set -# CONFIG_LOG_DISPALY_CORE_NUM is not set -# CONFIG_BOOTUP_DEBUG_PRINTS is not set -CONFIG_PHYTIUM_RTT_TEST=y -# CONFIG_ENABLE_RTT_UTEST is not set -# CONFIG_ENABLE_KERNEL_TEST is not set -# CONFIG_ENABLE_KERNEL_SAMPLE is not set -# CONFIG_ENABLE_COREMARK is not set -# CONFIG_ENABLE_DHRYSTONE is not set diff --git a/bsp/phytium/aarch64/configs/e2000d_rtsmart_test.h b/bsp/phytium/aarch64/configs/e2000d_rtsmart_test.h deleted file mode 100644 index 03c1c48df9..0000000000 --- a/bsp/phytium/aarch64/configs/e2000d_rtsmart_test.h +++ /dev/null @@ -1,405 +0,0 @@ -#ifndef RT_CONFIG_H__ -#define RT_CONFIG_H__ - -/* Automatically generated file; DO NOT EDIT. */ -/* RT-Thread Project Configuration */ - -/* RT-Thread Kernel */ - -#define RT_NAME_MAX 16 -#define RT_USING_SMART -#define RT_USING_SMP -#define RT_CPUS_NR 2 -#define RT_ALIGN_SIZE 4 -#define RT_THREAD_PRIORITY_32 -#define RT_THREAD_PRIORITY_MAX 32 -#define RT_TICK_PER_SECOND 1000 -#define RT_USING_OVERFLOW_CHECK -#define RT_USING_HOOK -#define RT_HOOK_USING_FUNC_PTR -#define RT_USING_IDLE_HOOK -#define RT_IDLE_HOOK_LIST_SIZE 4 -#define IDLE_THREAD_STACK_SIZE 40960 -#define SYSTEM_THREAD_STACK_SIZE 40960 -#define RT_USING_TIMER_SOFT -#define RT_TIMER_THREAD_PRIO 4 -#define RT_TIMER_THREAD_STACK_SIZE 4096 - -/* kservice optimization */ - -#define RT_KSERVICE_USING_STDLIB -#define RT_KPRINTF_USING_LONGLONG -#define RT_DEBUG - -/* Inter-Thread communication */ - -#define RT_USING_SEMAPHORE -#define RT_USING_MUTEX -#define RT_USING_EVENT -#define RT_USING_MAILBOX -#define RT_USING_MESSAGEQUEUE - -/* Memory Management */ - -#define RT_PAGE_MAX_ORDER 16 -#define RT_USING_SLAB -#define RT_USING_MEMHEAP -#define RT_MEMHEAP_FAST_MODE -#define RT_USING_SLAB_AS_HEAP -#define RT_USING_HEAP_ISR -#define RT_USING_HEAP - -/* Kernel Device Object */ - -#define RT_USING_DEVICE -#define RT_USING_CONSOLE -#define RT_CONSOLEBUF_SIZE 128 -#define RT_CONSOLE_DEVICE_NAME "uart1" -#define RT_VER_NUM 0x50001 -#define ARCH_CPU_64BIT -#define RT_USING_CACHE -#define ARCH_ARM_BOOTWITH_FLUSH_CACHE -#define ARCH_MM_MMU -#define ARCH_ARM -#define ARCH_ARM_MMU -#define KERNEL_VADDR_START 0xffff000000000000 -#define ARCH_ARMV8 - -/* RT-Thread Components */ - -#define RT_USING_COMPONENTS_INIT -#define RT_USING_USER_MAIN -#define RT_MAIN_THREAD_STACK_SIZE 8192 -#define RT_MAIN_THREAD_PRIORITY 10 -#define RT_USING_MSH -#define RT_USING_FINSH -#define FINSH_USING_MSH -#define FINSH_THREAD_NAME "tshell" -#define FINSH_THREAD_PRIORITY 20 -#define FINSH_THREAD_STACK_SIZE 4096 -#define FINSH_USING_HISTORY -#define FINSH_HISTORY_LINES 5 -#define FINSH_USING_SYMTAB -#define FINSH_CMD_SIZE 80 -#define MSH_USING_BUILT_IN_COMMANDS -#define FINSH_USING_DESCRIPTION -#define FINSH_ARG_MAX 10 - -/* DFS: device virtual file system */ - -#define RT_USING_DFS -#define DFS_USING_POSIX -#define DFS_USING_WORKDIR -#define DFS_FD_MAX 16 -#define RT_USING_DFS_V1 -#define DFS_FILESYSTEMS_MAX 4 -#define DFS_FILESYSTEM_TYPES_MAX 4 -#define RT_USING_DFS_ELMFAT - -/* elm-chan's FatFs, Generic FAT Filesystem Module */ - -#define RT_DFS_ELM_CODE_PAGE 437 -#define RT_DFS_ELM_WORD_ACCESS -#define RT_DFS_ELM_USE_LFN_3 -#define RT_DFS_ELM_USE_LFN 3 -#define RT_DFS_ELM_LFN_UNICODE_0 -#define RT_DFS_ELM_LFN_UNICODE 0 -#define RT_DFS_ELM_MAX_LFN 255 -#define RT_DFS_ELM_DRIVES 2 -#define RT_DFS_ELM_MAX_SECTOR_SIZE 512 -#define RT_DFS_ELM_REENTRANT -#define RT_DFS_ELM_MUTEX_TIMEOUT 3000 -#define RT_USING_DFS_DEVFS -#define RT_USING_DFS_RAMFS -#define RT_USING_LWP -#define RT_LWP_MAX_NR 30 -#define LWP_TASK_STACK_SIZE 16384 -#define RT_CH_MSG_MAX_NR 1024 -#define LWP_CONSOLE_INPUT_BUFFER_SIZE 1024 -#define LWP_TID_MAX_NR 64 -#define RT_LWP_SHM_MAX_NR 64 - -/* Device Drivers */ - -#define RT_USING_DEVICE_IPC -#define RT_UNAMED_PIPE_NUMBER 64 -#define RT_USING_SYSTEM_WORKQUEUE -#define RT_SYSTEM_WORKQUEUE_STACKSIZE 8192 -#define RT_SYSTEM_WORKQUEUE_PRIORITY 23 -#define RT_USING_SERIAL -#define RT_USING_SERIAL_V1 -#define RT_SERIAL_USING_DMA -#define RT_SERIAL_RB_BUFSZ 64 -#define RT_USING_TTY -#define RT_USING_NULL -#define RT_USING_ZERO -#define RT_USING_RANDOM -#define RT_USING_RTC -#define RT_USING_SDIO -#define RT_SDIO_STACK_SIZE 4096 -#define RT_SDIO_THREAD_PRIORITY 15 -#define RT_MMCSD_STACK_SIZE 4096 -#define RT_MMCSD_THREAD_PREORITY 22 -#define RT_MMCSD_MAX_PARTITION 16 - -/* Using USB */ - - -/* C/C++ and POSIX layer */ - -#define RT_LIBC_DEFAULT_TIMEZONE 8 - -/* POSIX (Portable Operating System Interface) layer */ - -#define RT_USING_POSIX_FS -#define RT_USING_POSIX_DEVIO -#define RT_USING_POSIX_STDIO -#define RT_USING_POSIX_TERMIOS -#define RT_USING_POSIX_DELAY -#define RT_USING_POSIX_CLOCK -#define RT_USING_POSIX_TIMER - -/* Interprocess Communication (IPC) */ - - -/* Socket is in the 'Network' category */ - - -/* Network */ - -#define RT_USING_SAL -#define SAL_INTERNET_CHECK - -/* Docking with protocol stacks */ - -#define SAL_USING_LWIP -#define SAL_USING_POSIX -#define RT_USING_NETDEV -#define NETDEV_USING_IFCONFIG -#define NETDEV_USING_PING -#define NETDEV_USING_NETSTAT -#define NETDEV_USING_AUTO_DEFAULT -#define NETDEV_IPV4 1 -#define NETDEV_IPV6 0 -#define RT_USING_LWIP -#define RT_USING_LWIP212 -#define RT_USING_LWIP_VER_NUM 0x20102 -#define RT_LWIP_MEM_ALIGNMENT 64 -#define RT_LWIP_IGMP -#define RT_LWIP_ICMP -#define RT_LWIP_DNS - -/* Static IPv4 Address */ - -#define RT_LWIP_IPADDR "192.168.4.10" -#define RT_LWIP_GWADDR "192.168.4.1" -#define RT_LWIP_MSKADDR "255.255.255.0" -#define RT_LWIP_UDP -#define RT_LWIP_TCP -#define RT_LWIP_RAW -#define RT_MEMP_NUM_NETCONN 8 -#define RT_LWIP_PBUF_NUM 512 -#define RT_LWIP_RAW_PCB_NUM 4 -#define RT_LWIP_UDP_PCB_NUM 4 -#define RT_LWIP_TCP_PCB_NUM 4 -#define RT_LWIP_TCP_SEG_NUM 40 -#define RT_LWIP_TCP_SND_BUF 8196 -#define RT_LWIP_TCP_WND 8196 -#define RT_LWIP_TCPTHREAD_PRIORITY 12 -#define RT_LWIP_TCPTHREAD_MBOX_SIZE 8 -#define RT_LWIP_TCPTHREAD_STACKSIZE 16184 -#define RT_LWIP_ETHTHREAD_PRIORITY 12 -#define RT_LWIP_ETHTHREAD_STACKSIZE 2048 -#define RT_LWIP_ETHTHREAD_MBOX_SIZE 8 -#define LWIP_NETIF_STATUS_CALLBACK 1 -#define LWIP_NETIF_LINK_CALLBACK 1 -#define SO_REUSE 1 -#define LWIP_SO_RCVTIMEO 1 -#define LWIP_SO_SNDTIMEO 1 -#define LWIP_SO_RCVBUF 1 -#define LWIP_SO_LINGER 0 -#define LWIP_NETIF_LOOPBACK 0 -#define RT_LWIP_USING_PING -#define RT_LWIP_DEBUG -#define RT_LWIP_NETIF_DEBUG - -/* Utilities */ - -#define RT_USING_RYM -#define YMODEM_USING_FILE_TRANSFER -#define RT_USING_ADT - -/* RT-Thread Utestcases */ - - -/* RT-Thread online packages */ - -/* IoT - internet of things */ - - -/* Wi-Fi */ - -/* Marvell WiFi */ - - -/* Wiced WiFi */ - - -/* IoT Cloud */ - - -/* security packages */ - - -/* language packages */ - -/* JSON: JavaScript Object Notation, a lightweight data-interchange format */ - - -/* XML: Extensible Markup Language */ - - -/* multimedia packages */ - -/* LVGL: powerful and easy-to-use embedded GUI library */ - - -/* u8g2: a monochrome graphic library */ - - -/* tools packages */ - - -/* system packages */ - -/* enhanced kernel services */ - - -/* acceleration: Assembly language or algorithmic acceleration packages */ - - -/* CMSIS: ARM Cortex-M Microcontroller Software Interface Standard */ - - -/* Micrium: Micrium software products porting for RT-Thread */ - - -/* peripheral libraries and drivers */ - -/* sensors drivers */ - - -/* touch drivers */ - - -/* Kendryte SDK */ - - -/* AI packages */ - - -/* Signal Processing and Control Algorithm Packages */ - - -/* miscellaneous packages */ - -/* project laboratory */ - -/* samples: kernel and components samples */ - -#define PKG_USING_KERNEL_SAMPLES -#define PKG_USING_KERNEL_SAMPLES_LATEST_VERSION -#define PKG_USING_KERNEL_SAMPLES_EN - -/* entertainment: terminal games and other interesting software packages */ - - -/* Arduino libraries */ - - -/* Projects */ - - -/* Sensors */ - - -/* Display */ - - -/* Timing */ - - -/* Data Processing */ - - -/* Data Storage */ - -/* Communication */ - - -/* Device Control */ - - -/* Other */ - - -/* Signal IO */ - - -/* Uncategorized */ - -/* Hardware Drivers */ - -/* On-chip Peripheral Drivers */ - -#define BSP_USING_UART -#define RT_USING_UART1 -#define BSP_USING_ETH -#define RT_LWIP_PBUF_POOL_BUFSIZE 1700 -#define BSP_USING_SDIO -#define BSP_USING_SDCARD_FATFS -#define USING_SDIO1 - -/* Board extended module Drivers */ - -#define BSP_USING_GIC -#define BSP_USING_GICV3 -#define PHYTIUM_ARCH_AARCH64 -#define ARM_SPI_BIND_CPU_ID 0 - -/* Standalone Setting */ - -#define TARGET_ARMV8_AARCH64 - -/* Board Configuration */ - -#define TARGET_E2000D -#define TARGET_E2000 -#define DEFAULT_DEBUG_PRINT_UART1 - -/* Components Configuration */ - -#define USE_SPI -#define USE_FSPIM -#define USE_QSPI - -/* Qspi Configuration */ - -#define USE_FQSPI -#define USE_IOPAD -#define ENABLE_IOPAD -#define USE_SERIAL - -/* Usart Configuration */ - -#define ENABLE_Pl011_UART -#define USE_ETH - -/* Eth Configuration */ - -#define ENABLE_FXMAC -#define FXMAC_PHY_COMMON -#define LOG_ERROR -#define PHYTIUM_RTT_TEST - -#endif diff --git a/bsp/phytium/aarch64/configs/e2000d_rtthread_test.h b/bsp/phytium/aarch64/configs/e2000d_rtthread_test.h deleted file mode 100644 index e7d8209481..0000000000 --- a/bsp/phytium/aarch64/configs/e2000d_rtthread_test.h +++ /dev/null @@ -1,395 +0,0 @@ -#ifndef RT_CONFIG_H__ -#define RT_CONFIG_H__ - -/* Automatically generated file; DO NOT EDIT. */ -/* RT-Thread Project Configuration */ - -/* RT-Thread Kernel */ - -#define RT_NAME_MAX 16 -#define RT_USING_SMP -#define RT_CPUS_NR 2 -#define RT_ALIGN_SIZE 4 -#define RT_THREAD_PRIORITY_32 -#define RT_THREAD_PRIORITY_MAX 32 -#define RT_TICK_PER_SECOND 1000 -#define RT_USING_OVERFLOW_CHECK -#define RT_USING_HOOK -#define RT_HOOK_USING_FUNC_PTR -#define RT_USING_IDLE_HOOK -#define RT_IDLE_HOOK_LIST_SIZE 4 -#define IDLE_THREAD_STACK_SIZE 40960 -#define SYSTEM_THREAD_STACK_SIZE 40960 -#define RT_USING_TIMER_SOFT -#define RT_TIMER_THREAD_PRIO 4 -#define RT_TIMER_THREAD_STACK_SIZE 4096 - -/* kservice optimization */ - -#define RT_KSERVICE_USING_STDLIB -#define RT_KPRINTF_USING_LONGLONG -#define RT_DEBUG - -/* Inter-Thread communication */ - -#define RT_USING_SEMAPHORE -#define RT_USING_MUTEX -#define RT_USING_EVENT -#define RT_USING_MAILBOX -#define RT_USING_MESSAGEQUEUE - -/* Memory Management */ - -#define RT_PAGE_MAX_ORDER 16 -#define RT_USING_SLAB -#define RT_USING_MEMHEAP -#define RT_MEMHEAP_FAST_MODE -#define RT_USING_SLAB_AS_HEAP -#define RT_USING_HEAP_ISR -#define RT_USING_HEAP - -/* Kernel Device Object */ - -#define RT_USING_DEVICE -#define RT_USING_CONSOLE -#define RT_CONSOLEBUF_SIZE 128 -#define RT_CONSOLE_DEVICE_NAME "uart1" -#define RT_VER_NUM 0x50001 -#define ARCH_CPU_64BIT -#define RT_USING_CACHE -#define ARCH_ARM_BOOTWITH_FLUSH_CACHE -#define ARCH_MM_MMU -#define ARCH_ARM -#define ARCH_ARM_MMU -#define ARCH_ARMV8 - -/* RT-Thread Components */ - -#define RT_USING_COMPONENTS_INIT -#define RT_USING_USER_MAIN -#define RT_MAIN_THREAD_STACK_SIZE 8192 -#define RT_MAIN_THREAD_PRIORITY 10 -#define RT_USING_MSH -#define RT_USING_FINSH -#define FINSH_USING_MSH -#define FINSH_THREAD_NAME "tshell" -#define FINSH_THREAD_PRIORITY 20 -#define FINSH_THREAD_STACK_SIZE 4096 -#define FINSH_USING_HISTORY -#define FINSH_HISTORY_LINES 5 -#define FINSH_USING_SYMTAB -#define FINSH_CMD_SIZE 80 -#define MSH_USING_BUILT_IN_COMMANDS -#define FINSH_USING_DESCRIPTION -#define FINSH_ARG_MAX 10 - -/* DFS: device virtual file system */ - -#define RT_USING_DFS -#define DFS_USING_POSIX -#define DFS_USING_WORKDIR -#define DFS_FD_MAX 16 -#define RT_USING_DFS_V1 -#define DFS_FILESYSTEMS_MAX 4 -#define DFS_FILESYSTEM_TYPES_MAX 4 -#define RT_USING_DFS_ELMFAT - -/* elm-chan's FatFs, Generic FAT Filesystem Module */ - -#define RT_DFS_ELM_CODE_PAGE 437 -#define RT_DFS_ELM_WORD_ACCESS -#define RT_DFS_ELM_USE_LFN_3 -#define RT_DFS_ELM_USE_LFN 3 -#define RT_DFS_ELM_LFN_UNICODE_0 -#define RT_DFS_ELM_LFN_UNICODE 0 -#define RT_DFS_ELM_MAX_LFN 255 -#define RT_DFS_ELM_DRIVES 2 -#define RT_DFS_ELM_MAX_SECTOR_SIZE 512 -#define RT_DFS_ELM_REENTRANT -#define RT_DFS_ELM_MUTEX_TIMEOUT 3000 -#define RT_USING_DFS_DEVFS -#define RT_USING_DFS_RAMFS - -/* Device Drivers */ - -#define RT_USING_DEVICE_IPC -#define RT_UNAMED_PIPE_NUMBER 64 -#define RT_USING_SYSTEM_WORKQUEUE -#define RT_SYSTEM_WORKQUEUE_STACKSIZE 8192 -#define RT_SYSTEM_WORKQUEUE_PRIORITY 23 -#define RT_USING_SERIAL -#define RT_USING_SERIAL_V1 -#define RT_SERIAL_USING_DMA -#define RT_SERIAL_RB_BUFSZ 64 -#define RT_USING_NULL -#define RT_USING_ZERO -#define RT_USING_RANDOM -#define RT_USING_RTC -#define RT_USING_SDIO -#define RT_SDIO_STACK_SIZE 4096 -#define RT_SDIO_THREAD_PRIORITY 15 -#define RT_MMCSD_STACK_SIZE 4096 -#define RT_MMCSD_THREAD_PREORITY 22 -#define RT_MMCSD_MAX_PARTITION 16 - -/* Using USB */ - - -/* C/C++ and POSIX layer */ - -#define RT_LIBC_DEFAULT_TIMEZONE 8 - -/* POSIX (Portable Operating System Interface) layer */ - -#define RT_USING_POSIX_FS -#define RT_USING_POSIX_DEVIO -#define RT_USING_POSIX_STDIO -#define RT_USING_POSIX_TERMIOS -#define RT_USING_POSIX_DELAY -#define RT_USING_POSIX_CLOCK -#define RT_USING_POSIX_TIMER - -/* Interprocess Communication (IPC) */ - - -/* Socket is in the 'Network' category */ - - -/* Network */ - -#define RT_USING_SAL -#define SAL_INTERNET_CHECK - -/* Docking with protocol stacks */ - -#define SAL_USING_LWIP -#define SAL_USING_POSIX -#define RT_USING_NETDEV -#define NETDEV_USING_IFCONFIG -#define NETDEV_USING_PING -#define NETDEV_USING_NETSTAT -#define NETDEV_USING_AUTO_DEFAULT -#define NETDEV_IPV4 1 -#define NETDEV_IPV6 0 -#define RT_USING_LWIP -#define RT_USING_LWIP212 -#define RT_USING_LWIP_VER_NUM 0x20102 -#define RT_LWIP_MEM_ALIGNMENT 64 -#define RT_LWIP_IGMP -#define RT_LWIP_ICMP -#define RT_LWIP_DNS - -/* Static IPv4 Address */ - -#define RT_LWIP_IPADDR "192.168.4.10" -#define RT_LWIP_GWADDR "192.168.4.1" -#define RT_LWIP_MSKADDR "255.255.255.0" -#define RT_LWIP_UDP -#define RT_LWIP_TCP -#define RT_LWIP_RAW -#define RT_MEMP_NUM_NETCONN 8 -#define RT_LWIP_PBUF_NUM 512 -#define RT_LWIP_RAW_PCB_NUM 4 -#define RT_LWIP_UDP_PCB_NUM 4 -#define RT_LWIP_TCP_PCB_NUM 4 -#define RT_LWIP_TCP_SEG_NUM 40 -#define RT_LWIP_TCP_SND_BUF 8196 -#define RT_LWIP_TCP_WND 8196 -#define RT_LWIP_TCPTHREAD_PRIORITY 12 -#define RT_LWIP_TCPTHREAD_MBOX_SIZE 8 -#define RT_LWIP_TCPTHREAD_STACKSIZE 16184 -#define RT_LWIP_ETHTHREAD_PRIORITY 12 -#define RT_LWIP_ETHTHREAD_STACKSIZE 2048 -#define RT_LWIP_ETHTHREAD_MBOX_SIZE 8 -#define LWIP_NETIF_STATUS_CALLBACK 1 -#define LWIP_NETIF_LINK_CALLBACK 1 -#define SO_REUSE 1 -#define LWIP_SO_RCVTIMEO 1 -#define LWIP_SO_SNDTIMEO 1 -#define LWIP_SO_RCVBUF 1 -#define LWIP_SO_LINGER 0 -#define LWIP_NETIF_LOOPBACK 0 -#define RT_LWIP_USING_PING -#define RT_LWIP_DEBUG -#define RT_LWIP_NETIF_DEBUG - -/* Utilities */ - -#define RT_USING_RYM -#define YMODEM_USING_FILE_TRANSFER -#define RT_USING_ADT - -/* RT-Thread Utestcases */ - - -/* RT-Thread online packages */ - -/* IoT - internet of things */ - - -/* Wi-Fi */ - -/* Marvell WiFi */ - - -/* Wiced WiFi */ - - -/* IoT Cloud */ - - -/* security packages */ - - -/* language packages */ - -/* JSON: JavaScript Object Notation, a lightweight data-interchange format */ - - -/* XML: Extensible Markup Language */ - - -/* multimedia packages */ - -/* LVGL: powerful and easy-to-use embedded GUI library */ - - -/* u8g2: a monochrome graphic library */ - - -/* tools packages */ - - -/* system packages */ - -/* enhanced kernel services */ - - -/* acceleration: Assembly language or algorithmic acceleration packages */ - - -/* CMSIS: ARM Cortex-M Microcontroller Software Interface Standard */ - - -/* Micrium: Micrium software products porting for RT-Thread */ - - -/* peripheral libraries and drivers */ - -/* sensors drivers */ - - -/* touch drivers */ - - -/* Kendryte SDK */ - - -/* AI packages */ - - -/* Signal Processing and Control Algorithm Packages */ - - -/* miscellaneous packages */ - -/* project laboratory */ - -/* samples: kernel and components samples */ - -#define PKG_USING_KERNEL_SAMPLES -#define PKG_USING_KERNEL_SAMPLES_LATEST_VERSION -#define PKG_USING_KERNEL_SAMPLES_EN - -/* entertainment: terminal games and other interesting software packages */ - - -/* Arduino libraries */ - - -/* Projects */ - - -/* Sensors */ - - -/* Display */ - - -/* Timing */ - - -/* Data Processing */ - - -/* Data Storage */ - -/* Communication */ - - -/* Device Control */ - - -/* Other */ - - -/* Signal IO */ - - -/* Uncategorized */ - -/* Hardware Drivers */ - -/* On-chip Peripheral Drivers */ - -#define BSP_USING_UART -#define RT_USING_UART1 -#define BSP_USING_ETH -#define RT_LWIP_PBUF_POOL_BUFSIZE 1700 -#define BSP_USING_SDIO -#define BSP_USING_SDCARD_FATFS -#define USING_SDIO1 - -/* Board extended module Drivers */ - -#define BSP_USING_GIC -#define BSP_USING_GICV3 -#define PHYTIUM_ARCH_AARCH64 -#define ARM_SPI_BIND_CPU_ID 0 - -/* Standalone Setting */ - -#define TARGET_ARMV8_AARCH64 - -/* Board Configuration */ - -#define TARGET_E2000D -#define TARGET_E2000 -#define DEFAULT_DEBUG_PRINT_UART1 - -/* Components Configuration */ - -#define USE_SPI -#define USE_FSPIM -#define USE_QSPI - -/* Qspi Configuration */ - -#define USE_FQSPI -#define USE_IOPAD -#define ENABLE_IOPAD -#define USE_SERIAL - -/* Usart Configuration */ - -#define ENABLE_Pl011_UART -#define USE_ETH - -/* Eth Configuration */ - -#define ENABLE_FXMAC -#define FXMAC_PHY_COMMON -#define LOG_ERROR -#define PHYTIUM_RTT_TEST - -#endif diff --git a/bsp/phytium/aarch64/configs/e2000q_rtsmart b/bsp/phytium/aarch64/configs/e2000q_demo_rtsmart similarity index 90% rename from bsp/phytium/aarch64/configs/e2000q_rtsmart rename to bsp/phytium/aarch64/configs/e2000q_demo_rtsmart index 7cd8e6f232..8b21d4b597 100644 --- a/bsp/phytium/aarch64/configs/e2000q_rtsmart +++ b/bsp/phytium/aarch64/configs/e2000q_demo_rtsmart @@ -9,6 +9,7 @@ CONFIG_RT_NAME_MAX=16 # CONFIG_RT_USING_ARCH_DATA_TYPE is not set CONFIG_RT_USING_SMART=y +# CONFIG_RT_USING_AMP is not set CONFIG_RT_USING_SMP=y CONFIG_RT_CPUS_NR=4 CONFIG_RT_ALIGN_SIZE=4 @@ -22,11 +23,11 @@ CONFIG_RT_USING_HOOK=y CONFIG_RT_HOOK_USING_FUNC_PTR=y CONFIG_RT_USING_IDLE_HOOK=y CONFIG_RT_IDLE_HOOK_LIST_SIZE=4 -CONFIG_IDLE_THREAD_STACK_SIZE=40960 -CONFIG_SYSTEM_THREAD_STACK_SIZE=40960 +CONFIG_IDLE_THREAD_STACK_SIZE=8192 +CONFIG_SYSTEM_THREAD_STACK_SIZE=8192 CONFIG_RT_USING_TIMER_SOFT=y CONFIG_RT_TIMER_THREAD_PRIO=4 -CONFIG_RT_TIMER_THREAD_STACK_SIZE=4096 +CONFIG_RT_TIMER_THREAD_STACK_SIZE=8192 # # kservice optimization @@ -36,19 +37,11 @@ CONFIG_RT_KSERVICE_USING_STDLIB=y # CONFIG_RT_KSERVICE_USING_TINY_SIZE is not set # CONFIG_RT_USING_TINY_FFS is not set CONFIG_RT_KPRINTF_USING_LONGLONG=y -CONFIG_RT_DEBUG=y -# CONFIG_RT_DEBUG_COLOR is not set -# CONFIG_RT_DEBUG_INIT_CONFIG is not set -# CONFIG_RT_DEBUG_THREAD_CONFIG is not set -# CONFIG_RT_DEBUG_SCHEDULER_CONFIG is not set -# CONFIG_RT_DEBUG_IPC_CONFIG is not set -# CONFIG_RT_DEBUG_TIMER_CONFIG is not set -# CONFIG_RT_DEBUG_IRQ_CONFIG is not set -# CONFIG_RT_DEBUG_MEM_CONFIG is not set -# CONFIG_RT_DEBUG_SLAB_CONFIG is not set -# CONFIG_RT_DEBUG_MEMHEAP_CONFIG is not set -# CONFIG_RT_DEBUG_PAGE_LEAK is not set -# CONFIG_RT_DEBUG_MODULE_CONFIG is not set +CONFIG_RT_USING_DEBUG=y +CONFIG_RT_DEBUGING_COLOR=y +CONFIG_RT_DEBUGING_CONTEXT=y +CONFIG_RT_DEBUGING_INIT=y +# CONFIG_RT_DEBUGING_PAGE_LEAK is not set # # Inter-Thread communication @@ -58,6 +51,7 @@ CONFIG_RT_USING_MUTEX=y CONFIG_RT_USING_EVENT=y CONFIG_RT_USING_MAILBOX=y CONFIG_RT_USING_MESSAGEQUEUE=y +# CONFIG_RT_USING_MESSAGEQUEUE_PRIORITY is not set # CONFIG_RT_USING_SIGNALS is not set # @@ -78,19 +72,23 @@ CONFIG_RT_USING_SLAB_AS_HEAP=y # CONFIG_RT_USING_MEMTRACE is not set CONFIG_RT_USING_HEAP_ISR=y CONFIG_RT_USING_HEAP=y - -# -# Kernel Device Object -# CONFIG_RT_USING_DEVICE=y # CONFIG_RT_USING_DEVICE_OPS is not set -# CONFIG_RT_USING_DM is not set # CONFIG_RT_USING_INTERRUPT_INFO is not set CONFIG_RT_USING_CONSOLE=y CONFIG_RT_CONSOLEBUF_SIZE=128 CONFIG_RT_CONSOLE_DEVICE_NAME="uart1" -CONFIG_RT_VER_NUM=0x50001 +CONFIG_RT_VER_NUM=0x50100 # CONFIG_RT_USING_STDC_ATOMIC is not set +CONFIG_RT_BACKTRACE_LEVEL_MAX_NR=32 + +# +# AArch64 Architecture Configuration +# +CONFIG_ARCH_TEXT_OFFSET=0x80000 +CONFIG_ARCH_RAM_OFFSET=0x80000000 +CONFIG_ARCH_SECONDARY_CPU_STACK_SIZE=4096 +CONFIG_ARCH_HAVE_EFFICIENT_UNALIGNED_ACCESS=y CONFIG_ARCH_CPU_64BIT=y CONFIG_RT_USING_CACHE=y # CONFIG_RT_USING_HW_ATOMIC is not set @@ -126,6 +124,7 @@ CONFIG_FINSH_USING_DESCRIPTION=y # CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set # CONFIG_FINSH_USING_AUTH is not set CONFIG_FINSH_ARG_MAX=10 +CONFIG_FINSH_USING_OPTION_COMPLETION=y # # DFS: device virtual file system @@ -167,9 +166,11 @@ CONFIG_RT_USING_DFS_DEVFS=y # CONFIG_RT_USING_DFS_CROMFS is not set CONFIG_RT_USING_DFS_RAMFS=y # CONFIG_RT_USING_DFS_TMPFS is not set +# CONFIG_RT_USING_DFS_MQUEUE is not set # CONFIG_RT_USING_DFS_NFS is not set # CONFIG_RT_USING_FAL is not set CONFIG_RT_USING_LWP=y +# CONFIG_LWP_DEBUG is not set CONFIG_RT_LWP_MAX_NR=30 CONFIG_LWP_TASK_STACK_SIZE=16384 CONFIG_RT_CH_MSG_MAX_NR=1024 @@ -181,6 +182,7 @@ CONFIG_RT_LWP_SHM_MAX_NR=64 # # Device Drivers # +# CONFIG_RT_USING_DM is not set CONFIG_RT_USING_DEVICE_IPC=y CONFIG_RT_UNAMED_PIPE_NUMBER=64 CONFIG_RT_USING_SYSTEM_WORKQUEUE=y @@ -208,17 +210,10 @@ CONFIG_RT_USING_RANDOM=y # CONFIG_RT_USING_MTD_NOR is not set # CONFIG_RT_USING_MTD_NAND is not set # CONFIG_RT_USING_PM is not set -# CONFIG_RT_USING_FDT is not set CONFIG_RT_USING_RTC=y # CONFIG_RT_USING_ALARM is not set # CONFIG_RT_USING_SOFT_RTC is not set -CONFIG_RT_USING_SDIO=y -CONFIG_RT_SDIO_STACK_SIZE=512 -CONFIG_RT_SDIO_THREAD_PRIORITY=15 -CONFIG_RT_MMCSD_STACK_SIZE=1024 -CONFIG_RT_MMCSD_THREAD_PREORITY=22 -CONFIG_RT_MMCSD_MAX_PARTITION=16 -# CONFIG_RT_SDIO_DEBUG is not set +# CONFIG_RT_USING_SDIO is not set # CONFIG_RT_USING_SPI is not set # CONFIG_RT_USING_WDT is not set # CONFIG_RT_USING_AUDIO is not set @@ -231,6 +226,7 @@ CONFIG_RT_MMCSD_MAX_PARTITION=16 # CONFIG_RT_USING_DEV_BUS is not set # CONFIG_RT_USING_WIFI is not set # CONFIG_RT_USING_VIRTIO is not set +CONFIG_RT_USING_KTIME=y # # Using USB @@ -242,7 +238,19 @@ CONFIG_RT_MMCSD_MAX_PARTITION=16 # # C/C++ and POSIX layer # -CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8 + +# +# ISO-ANSI C layer +# + +# +# Timezone and Daylight Saving Time +# +# CONFIG_RT_LIBC_USING_FULL_TZ_DST is not set +CONFIG_RT_LIBC_USING_LIGHT_TZ_DST=y +CONFIG_RT_LIBC_TZ_DEFAULT_HOUR=8 +CONFIG_RT_LIBC_TZ_DEFAULT_MIN=0 +CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 # # POSIX (Portable Operating System Interface) layer @@ -252,6 +260,10 @@ CONFIG_RT_USING_POSIX_DEVIO=y CONFIG_RT_USING_POSIX_STDIO=y # CONFIG_RT_USING_POSIX_POLL is not set # CONFIG_RT_USING_POSIX_SELECT is not set +# CONFIG_RT_USING_POSIX_EVENTFD is not set +# CONFIG_RT_USING_POSIX_EPOLL is not set +# CONFIG_RT_USING_POSIX_SIGNALFD is not set +# CONFIG_RT_USING_POSIX_TIMERFD is not set # CONFIG_RT_USING_POSIX_SOCKET is not set CONFIG_RT_USING_POSIX_TERMIOS=y # CONFIG_RT_USING_POSIX_AIO is not set @@ -392,10 +404,20 @@ CONFIG_YMODEM_USING_FILE_TRANSFER=y # CONFIG_RT_USING_ULOG is not set # CONFIG_RT_USING_UTEST is not set # CONFIG_RT_USING_VAR_EXPORT is not set +CONFIG_RT_USING_RESOURCE_ID=y CONFIG_RT_USING_ADT=y +CONFIG_RT_USING_ADT_AVL=y +CONFIG_RT_USING_ADT_BITMAP=y +CONFIG_RT_USING_ADT_HASHMAP=y +CONFIG_RT_USING_ADT_REF=y # CONFIG_RT_USING_RT_LINK is not set # CONFIG_RT_USING_VBUS is not set +# +# Memory management +# +# CONFIG_RT_USING_MEMBLOCK is not set + # # RT-Thread Utestcases # @@ -419,7 +441,6 @@ CONFIG_RT_USING_ADT=y # CONFIG_PKG_USING_KAWAII_MQTT is not set # CONFIG_PKG_USING_BC28_MQTT is not set # CONFIG_PKG_USING_WEBTERMINAL is not set -# CONFIG_PKG_USING_LIBMODBUS is not set # CONFIG_PKG_USING_FREEMODBUS is not set # CONFIG_PKG_USING_NANOPB is not set @@ -437,6 +458,11 @@ CONFIG_RT_USING_ADT=y # # CONFIG_PKG_USING_WLAN_WICED is not set # CONFIG_PKG_USING_RW007 is not set + +# +# CYW43012 WiFi +# +# CONFIG_PKG_USING_WLAN_CYW43012 is not set # CONFIG_PKG_USING_COAP is not set # CONFIG_PKG_USING_NOPOLL is not set # CONFIG_PKG_USING_NETUTILS is not set @@ -479,6 +505,7 @@ CONFIG_RT_USING_ADT=y # CONFIG_PKG_USING_NMEALIB is not set # CONFIG_PKG_USING_PDULIB is not set # CONFIG_PKG_USING_BTSTACK is not set +# CONFIG_PKG_USING_BT_CYW43012 is not set # CONFIG_PKG_USING_LORAWAN_ED_STACK is not set # CONFIG_PKG_USING_WAYZ_IOTKIT is not set # CONFIG_PKG_USING_MAVLINK is not set @@ -498,6 +525,8 @@ CONFIG_RT_USING_ADT=y # CONFIG_PKG_USING_ZFTP is not set # CONFIG_PKG_USING_WOL is not set # CONFIG_PKG_USING_ZEPHYR_POLLING is not set +# CONFIG_PKG_USING_MATTER_ADAPTATION_LAYER is not set +# CONFIG_PKG_USING_LHC_MODBUS is not set # # security packages @@ -544,7 +573,6 @@ CONFIG_RT_USING_ADT=y # LVGL: powerful and easy-to-use embedded GUI library # # CONFIG_PKG_USING_LVGL is not set -# CONFIG_PKG_USING_LITTLEVGL2RTT is not set # CONFIG_PKG_USING_LV_MUSIC_DEMO is not set # CONFIG_PKG_USING_GUI_GUIDER_DEMO is not set @@ -619,6 +647,7 @@ CONFIG_RT_USING_ADT=y # CONFIG_PKG_USING_HASH_MATCH is not set # CONFIG_PKG_USING_ARMV7M_DWT_TOOL is not set # CONFIG_PKG_USING_VOFA_PLUS is not set +# CONFIG_PKG_USING_ZDEBUG is not set # # system packages @@ -655,6 +684,8 @@ CONFIG_RT_USING_ADT=y # CONFIG_PKG_USING_UC_COMMON is not set # CONFIG_PKG_USING_UC_MODBUS is not set # CONFIG_PKG_USING_FREERTOS_WRAPPER is not set +# CONFIG_PKG_USING_LITEOS_SDK is not set +# CONFIG_PKG_USING_TZ_DATABASE is not set # CONFIG_PKG_USING_CAIRO is not set # CONFIG_PKG_USING_PIXMAN is not set # CONFIG_PKG_USING_PARTITION is not set @@ -678,6 +709,7 @@ CONFIG_RT_USING_ADT=y # CONFIG_PKG_USING_QBOOT is not set # CONFIG_PKG_USING_PPOOL is not set # CONFIG_PKG_USING_OPENAMP is not set +# CONFIG_PKG_USING_RPMSG_LITE is not set # CONFIG_PKG_USING_LPM is not set # CONFIG_PKG_USING_TLSF is not set # CONFIG_PKG_USING_EVENT_RECORDER is not set @@ -690,6 +722,12 @@ CONFIG_RT_USING_ADT=y # CONFIG_PKG_USING_QPC is not set # CONFIG_PKG_USING_AGILE_UPGRADE is not set # CONFIG_PKG_USING_FLASH_BLOB is not set +# CONFIG_PKG_USING_MLIBC is not set +# CONFIG_PKG_USING_TASK_MSG_BUS is not set +# CONFIG_PKG_USING_SFDB is not set +# CONFIG_PKG_USING_RTP is not set +# CONFIG_PKG_USING_REB is not set +# CONFIG_PKG_USING_R_RHEALSTONE is not set # # peripheral libraries and drivers @@ -754,6 +792,7 @@ CONFIG_RT_USING_ADT=y # CONFIG_PKG_USING_BALANCE is not set # CONFIG_PKG_USING_SHT2X is not set # CONFIG_PKG_USING_SHT3X is not set +# CONFIG_PKG_USING_SHT4X is not set # CONFIG_PKG_USING_AD7746 is not set # CONFIG_PKG_USING_ADT74XX is not set # CONFIG_PKG_USING_MAX17048 is not set @@ -774,6 +813,7 @@ CONFIG_RT_USING_ADT=y # CONFIG_PKG_USING_FT5426 is not set # CONFIG_PKG_USING_FT6236 is not set # CONFIG_PKG_USING_XPT2046_TOUCH is not set +# CONFIG_PKG_USING_CST816X is not set # CONFIG_PKG_USING_REALTEK_AMEBA is not set # CONFIG_PKG_USING_STM32_SDIO is not set # CONFIG_PKG_USING_ESP_IDF is not set @@ -849,7 +889,15 @@ CONFIG_RT_USING_ADT=y # CONFIG_PKG_USING_IO_INPUT_FILTER is not set # CONFIG_PKG_USING_RASPBERRYPI_PICO_SDK is not set # CONFIG_PKG_USING_LRF_NV7LIDAR is not set +# CONFIG_PKG_USING_AIP650 is not set # CONFIG_PKG_USING_FINGERPRINT is not set +# CONFIG_PKG_USING_BT_ECB02C is not set +# CONFIG_PKG_USING_UAT is not set +# CONFIG_PKG_USING_ST7789 is not set +# CONFIG_PKG_USING_VS1003 is not set +# CONFIG_PKG_USING_X9555 is not set +# CONFIG_PKG_USING_SYSTEM_RUN_LED is not set +# CONFIG_PKG_USING_SPI_TOOLS is not set # # AI packages @@ -863,12 +911,17 @@ CONFIG_RT_USING_ADT=y # CONFIG_PKG_USING_ULAPACK is not set # CONFIG_PKG_USING_QUEST is not set # CONFIG_PKG_USING_NAXOS is not set +# CONFIG_PKG_USING_NCNN is not set +# CONFIG_PKG_USING_R_TINYMAIX is not set # # Signal Processing and Control Algorithm Packages # # CONFIG_PKG_USING_FIRE_PID_CURVE is not set +# CONFIG_PKG_USING_QPID is not set # CONFIG_PKG_USING_UKAL is not set +# CONFIG_PKG_USING_DIGITALCTRL is not set +# CONFIG_PKG_USING_KISSFFT is not set # # miscellaneous packages @@ -930,6 +983,7 @@ CONFIG_PKG_USING_KERNEL_SAMPLES_EN=y # CONFIG_PKG_USING_MINILZO is not set # CONFIG_PKG_USING_QUICKLZ is not set # CONFIG_PKG_USING_LZMA is not set +# CONFIG_PKG_USING_RALARAM is not set # CONFIG_PKG_USING_MULTIBUTTON is not set # CONFIG_PKG_USING_FLEXIBLE_BUTTON is not set # CONFIG_PKG_USING_CANFESTIVAL is not set @@ -939,7 +993,6 @@ CONFIG_PKG_USING_KERNEL_SAMPLES_EN=y # CONFIG_PKG_USING_DSTR is not set # CONFIG_PKG_USING_TINYFRAME is not set # CONFIG_PKG_USING_KENDRYTE_DEMO is not set -# CONFIG_PKG_USING_DIGITALCTRL is not set # CONFIG_PKG_USING_UPACKER is not set # CONFIG_PKG_USING_UPARAM is not set # CONFIG_PKG_USING_HELLO is not set @@ -964,8 +1017,9 @@ CONFIG_PKG_USING_KERNEL_SAMPLES_EN=y # CONFIG_PKG_USING_RTDUINO is not set # -# Projects +# Projects and Demos # +# CONFIG_PKG_USING_ARDUINO_MSGQ_C_CPP_DEMO is not set # CONFIG_PKG_USING_ARDUINO_ULTRASOUND_RADAR is not set # CONFIG_PKG_USING_ARDUINO_SENSOR_KIT is not set # CONFIG_PKG_USING_ARDUINO_MATLAB_SUPPORT is not set @@ -1112,14 +1166,21 @@ CONFIG_PKG_USING_KERNEL_SAMPLES_EN=y # # Display # +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_GFX_LIBRARY is not set # CONFIG_PKG_USING_ARDUINO_U8G2 is not set -# CONFIG_PKG_USING_ARDUINO_U8GLIB_ARDUINO is not set +# CONFIG_PKG_USING_ARDUINO_TFT_ESPI is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ST7735 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SSD1306 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ILI9341 is not set # CONFIG_PKG_USING_SEEED_TM1637 is not set # # Timing # +# CONFIG_PKG_USING_ARDUINO_RTCLIB is not set # CONFIG_PKG_USING_ARDUINO_MSTIMER2 is not set +# CONFIG_PKG_USING_ARDUINO_TICKER is not set +# CONFIG_PKG_USING_ARDUINO_TASKSCHEDULER is not set # # Data Processing @@ -1153,7 +1214,6 @@ CONFIG_PKG_USING_KERNEL_SAMPLES_EN=y # # CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MFRC630 is not set # CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI5351 is not set -# CONFIG_PKG_USING_ARDUINO_RTCLIB is not set # # Signal IO @@ -1174,10 +1234,12 @@ CONFIG_PKG_USING_KERNEL_SAMPLES_EN=y # # Hardware Drivers # +CONFIG_DRV_DEBUG=y # # On-chip Peripheral Drivers # +CONFIG_BSP_USING_IOPAD=y CONFIG_BSP_USING_UART=y CONFIG_RT_USING_UART1=y # CONFIG_RT_USING_UART0 is not set @@ -1185,13 +1247,10 @@ CONFIG_RT_USING_UART1=y # CONFIG_BSP_USING_CAN is not set # CONFIG_BSP_USING_GPIO is not set # CONFIG_BSP_USING_QSPI is not set -CONFIG_BSP_USING_ETH=y -CONFIG_RT_LWIP_PBUF_POOL_BUFSIZE=1700 -CONFIG_BSP_USING_SDIO=y -CONFIG_BSP_USING_SDCARD_FATFS=y -# CONFIG_USING_SDIO0 is not set -CONFIG_USING_SDIO1=y -# CONFIG_USING_EMMC is not set +# CONFIG_BSP_USING_ETH is not set +# CONFIG_BSP_USING_PWM is not set +# CONFIG_BSP_USING_I2C is not set +# CONFIG_BSP_USING_SDIF is not set # # Board extended module Drivers @@ -1207,73 +1266,62 @@ CONFIG_ARM_SPI_BIND_CPU_ID=2 CONFIG_TARGET_ARMV8_AARCH64=y # -# Board Configuration +# Soc configuration # -# CONFIG_TARGET_F2000_4 is not set -# CONFIG_TARGET_D2000 is not set +# CONFIG_TARGET_PHYTIUMPI is not set CONFIG_TARGET_E2000Q=y # CONFIG_TARGET_E2000D is not set # CONFIG_TARGET_E2000S is not set +# CONFIG_TARGET_FT2004 is not set +# CONFIG_TARGET_D2000 is not set +CONFIG_SOC_NAME="e2000" +CONFIG_TARGET_TYPE_NAME="q" +CONFIG_SOC_CORE_NUM=4 +CONFIG_F32BIT_MEMORY_ADDRESS=0x80000000 +CONFIG_F32BIT_MEMORY_LENGTH=0x80000000 +CONFIG_F64BIT_MEMORY_ADDRESS=0x2000000000 +CONFIG_F64BIT_MEMORY_LENGTH=0x800000000 CONFIG_TARGET_E2000=y +# CONFIG_USE_SPINLOCK is not set CONFIG_DEFAULT_DEBUG_PRINT_UART1=y # CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set # CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set # -# Components Configuration +# Board Configuration # -CONFIG_USE_SPI=y -CONFIG_USE_FSPIM=y -CONFIG_USE_QSPI=y +CONFIG_BOARD_NAME="demo" +# CONFIG_USE_SPI_IOPAD is not set +# CONFIG_USE_GPIO_IOPAD is not set +# CONFIG_USE_CAN_IOPAD is not set +# CONFIG_USE_QSPI_IOPAD is not set +# CONFIG_USE_PWM_IOPAD is not set +# CONFIG_USE_MIO_IOPAD is not set +# CONFIG_USE_TACHO_IOPAD is not set +# CONFIG_USE_UART_IOPAD is not set +# CONFIG_USE_THIRD_PARTY_IOPAD is not set +CONFIG_E2000Q_DEMO_BOARD=y # -# Qspi Configuration +# IO mux configuration when board start up # -CONFIG_USE_FQSPI=y -# CONFIG_USE_GIC is not set -CONFIG_USE_IOPAD=y -CONFIG_ENABLE_IOPAD=y -CONFIG_USE_SERIAL=y +# CONFIG_CUS_DEMO_BOARD is not set # -# Usart Configuration +# Sdk common configuration # -CONFIG_ENABLE_Pl011_UART=y -# CONFIG_USE_GPIO is not set -CONFIG_USE_ETH=y - -# -# Eth Configuration -# -CONFIG_ENABLE_FXMAC=y -# CONFIG_ENABLE_FGMAC is not set -CONFIG_FXMAC_PHY_COMMON=y -# CONFIG_FXMAC_PHY_YT is not set -# CONFIG_USE_CAN is not set -# CONFIG_USE_I2C is not set -# CONFIG_USE_TIMER is not set -# CONFIG_USE_MIO is not set -# CONFIG_USE_SDMMC is not set -# CONFIG_USE_PCIE is not set -# CONFIG_USE_WDT is not set -# CONFIG_USE_DMA is not set -# CONFIG_USE_NAND is not set -# CONFIG_USE_RTC is not set -# CONFIG_USE_SATA is not set -# CONFIG_USE_USB is not set -# CONFIG_USE_ADC is not set -# CONFIG_USE_PWM is not set -# CONFIG_USE_IPC is not set -# CONFIG_USE_MEDIA is not set -# CONFIG_USE_SCMI_MHU is not set # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -# CONFIG_USE_DEFAULT_INTERRUPT_CONFIG is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set -# CONFIG_PHYTIUM_RTT_TEST is not set +# CONFIG_USE_DEFAULT_INTERRUPT_CONFIG is not set + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set diff --git a/bsp/phytium/aarch64/configs/e2000q_rtsmart_test.h b/bsp/phytium/aarch64/configs/e2000q_demo_rtsmart.h similarity index 83% rename from bsp/phytium/aarch64/configs/e2000q_rtsmart_test.h rename to bsp/phytium/aarch64/configs/e2000q_demo_rtsmart.h index 59885eb397..217b0c0524 100644 --- a/bsp/phytium/aarch64/configs/e2000q_rtsmart_test.h +++ b/bsp/phytium/aarch64/configs/e2000q_demo_rtsmart.h @@ -19,17 +19,20 @@ #define RT_HOOK_USING_FUNC_PTR #define RT_USING_IDLE_HOOK #define RT_IDLE_HOOK_LIST_SIZE 4 -#define IDLE_THREAD_STACK_SIZE 40960 -#define SYSTEM_THREAD_STACK_SIZE 40960 +#define IDLE_THREAD_STACK_SIZE 8192 +#define SYSTEM_THREAD_STACK_SIZE 8192 #define RT_USING_TIMER_SOFT #define RT_TIMER_THREAD_PRIO 4 -#define RT_TIMER_THREAD_STACK_SIZE 4096 +#define RT_TIMER_THREAD_STACK_SIZE 8192 /* kservice optimization */ #define RT_KSERVICE_USING_STDLIB #define RT_KPRINTF_USING_LONGLONG -#define RT_DEBUG +#define RT_USING_DEBUG +#define RT_DEBUGING_COLOR +#define RT_DEBUGING_CONTEXT +#define RT_DEBUGING_INIT /* Inter-Thread communication */ @@ -48,14 +51,19 @@ #define RT_USING_SLAB_AS_HEAP #define RT_USING_HEAP_ISR #define RT_USING_HEAP - -/* Kernel Device Object */ - #define RT_USING_DEVICE #define RT_USING_CONSOLE #define RT_CONSOLEBUF_SIZE 128 #define RT_CONSOLE_DEVICE_NAME "uart1" -#define RT_VER_NUM 0x50001 +#define RT_VER_NUM 0x50100 +#define RT_BACKTRACE_LEVEL_MAX_NR 32 + +/* AArch64 Architecture Configuration */ + +#define ARCH_TEXT_OFFSET 0x80000 +#define ARCH_RAM_OFFSET 0x80000000 +#define ARCH_SECONDARY_CPU_STACK_SIZE 4096 +#define ARCH_HAVE_EFFICIENT_UNALIGNED_ACCESS #define ARCH_CPU_64BIT #define RT_USING_CACHE #define ARCH_ARM_BOOTWITH_FLUSH_CACHE @@ -84,6 +92,7 @@ #define MSH_USING_BUILT_IN_COMMANDS #define FINSH_USING_DESCRIPTION #define FINSH_ARG_MAX 10 +#define FINSH_USING_OPTION_COMPLETION /* DFS: device virtual file system */ @@ -135,19 +144,21 @@ #define RT_USING_ZERO #define RT_USING_RANDOM #define RT_USING_RTC -#define RT_USING_SDIO -#define RT_SDIO_STACK_SIZE 512 -#define RT_SDIO_THREAD_PRIORITY 15 -#define RT_MMCSD_STACK_SIZE 1024 -#define RT_MMCSD_THREAD_PREORITY 22 -#define RT_MMCSD_MAX_PARTITION 16 +#define RT_USING_KTIME /* Using USB */ /* C/C++ and POSIX layer */ -#define RT_LIBC_DEFAULT_TIMEZONE 8 +/* ISO-ANSI C layer */ + +/* Timezone and Daylight Saving Time */ + +#define RT_LIBC_USING_LIGHT_TZ_DST +#define RT_LIBC_TZ_DEFAULT_HOUR 8 +#define RT_LIBC_TZ_DEFAULT_MIN 0 +#define RT_LIBC_TZ_DEFAULT_SEC 0 /* POSIX (Portable Operating System Interface) layer */ @@ -227,7 +238,15 @@ #define RT_USING_RYM #define YMODEM_USING_FILE_TRANSFER +#define RT_USING_RESOURCE_ID #define RT_USING_ADT +#define RT_USING_ADT_AVL +#define RT_USING_ADT_BITMAP +#define RT_USING_ADT_HASHMAP +#define RT_USING_ADT_REF + +/* Memory management */ + /* RT-Thread Utestcases */ @@ -245,6 +264,9 @@ /* Wiced WiFi */ +/* CYW43012 WiFi */ + + /* IoT Cloud */ @@ -317,7 +339,7 @@ /* Arduino libraries */ -/* Projects */ +/* Projects and Demos */ /* Sensors */ @@ -350,15 +372,13 @@ /* Hardware Drivers */ +#define DRV_DEBUG + /* On-chip Peripheral Drivers */ +#define BSP_USING_IOPAD #define BSP_USING_UART #define RT_USING_UART1 -#define BSP_USING_ETH -#define RT_LWIP_PBUF_POOL_BUFSIZE 1700 -#define BSP_USING_SDIO -#define BSP_USING_SDCARD_FATFS -#define USING_SDIO1 /* Board extended module Drivers */ @@ -371,35 +391,32 @@ #define TARGET_ARMV8_AARCH64 -/* Board Configuration */ +/* Soc configuration */ #define TARGET_E2000Q +#define SOC_NAME "e2000" +#define TARGET_TYPE_NAME "q" +#define SOC_CORE_NUM 4 +#define F32BIT_MEMORY_ADDRESS 0x80000000 +#define F32BIT_MEMORY_LENGTH 0x80000000 +#define F64BIT_MEMORY_ADDRESS 0x2000000000 +#define F64BIT_MEMORY_LENGTH 0x800000000 #define TARGET_E2000 #define DEFAULT_DEBUG_PRINT_UART1 -/* Components Configuration */ +/* Board Configuration */ -#define USE_SPI -#define USE_FSPIM -#define USE_QSPI +#define BOARD_NAME "demo" +#define E2000Q_DEMO_BOARD -/* Qspi Configuration */ +/* IO mux configuration when board start up */ -#define USE_FQSPI -#define USE_IOPAD -#define ENABLE_IOPAD -#define USE_SERIAL -/* Usart Configuration */ +/* Sdk common configuration */ -#define ENABLE_Pl011_UART -#define USE_ETH - -/* Eth Configuration */ - -#define ENABLE_FXMAC -#define FXMAC_PHY_COMMON #define LOG_ERROR -#define PHYTIUM_RTT_TEST + +/* Image information configuration */ + #endif diff --git a/bsp/phytium/aarch64/configs/e2000d_rtthread b/bsp/phytium/aarch64/configs/e2000q_demo_rtthread similarity index 92% rename from bsp/phytium/aarch64/configs/e2000d_rtthread rename to bsp/phytium/aarch64/configs/e2000q_demo_rtthread index 72b8700b98..6da92dc00e 100644 --- a/bsp/phytium/aarch64/configs/e2000d_rtthread +++ b/bsp/phytium/aarch64/configs/e2000q_demo_rtthread @@ -11,7 +11,7 @@ CONFIG_RT_NAME_MAX=16 # CONFIG_RT_USING_SMART is not set # CONFIG_RT_USING_AMP is not set CONFIG_RT_USING_SMP=y -CONFIG_RT_CPUS_NR=2 +CONFIG_RT_CPUS_NR=4 CONFIG_RT_ALIGN_SIZE=4 # CONFIG_RT_THREAD_PRIORITY_8 is not set CONFIG_RT_THREAD_PRIORITY_32=y @@ -72,23 +72,23 @@ CONFIG_RT_USING_SLAB_AS_HEAP=y # CONFIG_RT_USING_MEMTRACE is not set CONFIG_RT_USING_HEAP_ISR=y CONFIG_RT_USING_HEAP=y - -# -# Kernel Device Object -# CONFIG_RT_USING_DEVICE=y # CONFIG_RT_USING_DEVICE_OPS is not set -# CONFIG_RT_USING_DM is not set # CONFIG_RT_USING_INTERRUPT_INFO is not set CONFIG_RT_USING_CONSOLE=y CONFIG_RT_CONSOLEBUF_SIZE=128 CONFIG_RT_CONSOLE_DEVICE_NAME="uart1" -CONFIG_RT_VER_NUM=0x50001 +CONFIG_RT_VER_NUM=0x50100 # CONFIG_RT_USING_STDC_ATOMIC is not set +CONFIG_RT_BACKTRACE_LEVEL_MAX_NR=32 # -# RT-Thread Architecture +# AArch64 Architecture Configuration # +CONFIG_ARCH_TEXT_OFFSET=0x80000 +CONFIG_ARCH_RAM_OFFSET=0x80000000 +CONFIG_ARCH_SECONDARY_CPU_STACK_SIZE=4096 +CONFIG_ARCH_HAVE_EFFICIENT_UNALIGNED_ACCESS=y CONFIG_ARCH_CPU_64BIT=y CONFIG_RT_USING_CACHE=y # CONFIG_RT_USING_HW_ATOMIC is not set @@ -99,10 +99,6 @@ CONFIG_ARCH_MM_MMU=y CONFIG_ARCH_ARM=y CONFIG_ARCH_ARM_MMU=y CONFIG_ARCH_ARMV8=y -CONFIG_ARCH_TEXT_OFFSET=0x80000 -CONFIG_ARCH_RAM_OFFSET=0x80000000 -CONFIG_ARCH_SECONDARY_CPU_STACK_SIZE=4096 -CONFIG_ARCH_HAVE_EFFICIENT_UNALIGNED_ACCESS=y # # RT-Thread Components @@ -127,6 +123,7 @@ CONFIG_FINSH_USING_DESCRIPTION=y # CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set # CONFIG_FINSH_USING_AUTH is not set CONFIG_FINSH_ARG_MAX=10 +CONFIG_FINSH_USING_OPTION_COMPLETION=y # # DFS: device virtual file system @@ -175,6 +172,7 @@ CONFIG_RT_USING_DFS_RAMFS=y # # Device Drivers # +# CONFIG_RT_USING_DM is not set CONFIG_RT_USING_DEVICE_IPC=y CONFIG_RT_UNAMED_PIPE_NUMBER=64 CONFIG_RT_USING_SYSTEM_WORKQUEUE=y @@ -200,17 +198,10 @@ CONFIG_RT_USING_RANDOM=y # CONFIG_RT_USING_MTD_NOR is not set # CONFIG_RT_USING_MTD_NAND is not set # CONFIG_RT_USING_PM is not set -# CONFIG_RT_USING_FDT is not set CONFIG_RT_USING_RTC=y # CONFIG_RT_USING_ALARM is not set # CONFIG_RT_USING_SOFT_RTC is not set -CONFIG_RT_USING_SDIO=y -CONFIG_RT_SDIO_STACK_SIZE=4096 -CONFIG_RT_SDIO_THREAD_PRIORITY=15 -CONFIG_RT_MMCSD_STACK_SIZE=4096 -CONFIG_RT_MMCSD_THREAD_PREORITY=22 -CONFIG_RT_MMCSD_MAX_PARTITION=16 -# CONFIG_RT_SDIO_DEBUG is not set +# CONFIG_RT_USING_SDIO is not set # CONFIG_RT_USING_SPI is not set # CONFIG_RT_USING_WDT is not set # CONFIG_RT_USING_AUDIO is not set @@ -223,6 +214,7 @@ CONFIG_RT_MMCSD_MAX_PARTITION=16 # CONFIG_RT_USING_DEV_BUS is not set # CONFIG_RT_USING_WIFI is not set # CONFIG_RT_USING_VIRTIO is not set +CONFIG_RT_USING_KTIME=y # # Using USB @@ -234,7 +226,19 @@ CONFIG_RT_MMCSD_MAX_PARTITION=16 # # C/C++ and POSIX layer # -CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8 + +# +# ISO-ANSI C layer +# + +# +# Timezone and Daylight Saving Time +# +# CONFIG_RT_LIBC_USING_FULL_TZ_DST is not set +CONFIG_RT_LIBC_USING_LIGHT_TZ_DST=y +CONFIG_RT_LIBC_TZ_DEFAULT_HOUR=8 +CONFIG_RT_LIBC_TZ_DEFAULT_MIN=0 +CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 # # POSIX (Portable Operating System Interface) layer @@ -244,6 +248,8 @@ CONFIG_RT_USING_POSIX_DEVIO=y CONFIG_RT_USING_POSIX_STDIO=y # CONFIG_RT_USING_POSIX_POLL is not set # CONFIG_RT_USING_POSIX_SELECT is not set +# CONFIG_RT_USING_POSIX_EVENTFD is not set +# CONFIG_RT_USING_POSIX_TIMERFD is not set # CONFIG_RT_USING_POSIX_SOCKET is not set CONFIG_RT_USING_POSIX_TERMIOS=y # CONFIG_RT_USING_POSIX_AIO is not set @@ -392,7 +398,11 @@ CONFIG_RT_USING_ADT_HASHMAP=y CONFIG_RT_USING_ADT_REF=y # CONFIG_RT_USING_RT_LINK is not set # CONFIG_RT_USING_VBUS is not set -CONFIG_RT_USING_KTIME=y + +# +# Memory management +# +# CONFIG_RT_USING_MEMBLOCK is not set # # RT-Thread Utestcases @@ -417,7 +427,6 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_KAWAII_MQTT is not set # CONFIG_PKG_USING_BC28_MQTT is not set # CONFIG_PKG_USING_WEBTERMINAL is not set -# CONFIG_PKG_USING_LIBMODBUS is not set # CONFIG_PKG_USING_FREEMODBUS is not set # CONFIG_PKG_USING_NANOPB is not set @@ -435,6 +444,11 @@ CONFIG_RT_USING_KTIME=y # # CONFIG_PKG_USING_WLAN_WICED is not set # CONFIG_PKG_USING_RW007 is not set + +# +# CYW43012 WiFi +# +# CONFIG_PKG_USING_WLAN_CYW43012 is not set # CONFIG_PKG_USING_COAP is not set # CONFIG_PKG_USING_NOPOLL is not set # CONFIG_PKG_USING_NETUTILS is not set @@ -477,6 +491,7 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_NMEALIB is not set # CONFIG_PKG_USING_PDULIB is not set # CONFIG_PKG_USING_BTSTACK is not set +# CONFIG_PKG_USING_BT_CYW43012 is not set # CONFIG_PKG_USING_LORAWAN_ED_STACK is not set # CONFIG_PKG_USING_WAYZ_IOTKIT is not set # CONFIG_PKG_USING_MAVLINK is not set @@ -496,6 +511,8 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_ZFTP is not set # CONFIG_PKG_USING_WOL is not set # CONFIG_PKG_USING_ZEPHYR_POLLING is not set +# CONFIG_PKG_USING_MATTER_ADAPTATION_LAYER is not set +# CONFIG_PKG_USING_LHC_MODBUS is not set # # security packages @@ -542,7 +559,6 @@ CONFIG_RT_USING_KTIME=y # LVGL: powerful and easy-to-use embedded GUI library # # CONFIG_PKG_USING_LVGL is not set -# CONFIG_PKG_USING_LITTLEVGL2RTT is not set # CONFIG_PKG_USING_LV_MUSIC_DEMO is not set # CONFIG_PKG_USING_GUI_GUIDER_DEMO is not set @@ -617,6 +633,7 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_HASH_MATCH is not set # CONFIG_PKG_USING_ARMV7M_DWT_TOOL is not set # CONFIG_PKG_USING_VOFA_PLUS is not set +# CONFIG_PKG_USING_ZDEBUG is not set # # system packages @@ -653,6 +670,8 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_UC_COMMON is not set # CONFIG_PKG_USING_UC_MODBUS is not set # CONFIG_PKG_USING_FREERTOS_WRAPPER is not set +# CONFIG_PKG_USING_LITEOS_SDK is not set +# CONFIG_PKG_USING_TZ_DATABASE is not set # CONFIG_PKG_USING_CAIRO is not set # CONFIG_PKG_USING_PIXMAN is not set # CONFIG_PKG_USING_PARTITION is not set @@ -676,6 +695,7 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_QBOOT is not set # CONFIG_PKG_USING_PPOOL is not set # CONFIG_PKG_USING_OPENAMP is not set +# CONFIG_PKG_USING_RPMSG_LITE is not set # CONFIG_PKG_USING_LPM is not set # CONFIG_PKG_USING_TLSF is not set # CONFIG_PKG_USING_EVENT_RECORDER is not set @@ -688,6 +708,12 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_QPC is not set # CONFIG_PKG_USING_AGILE_UPGRADE is not set # CONFIG_PKG_USING_FLASH_BLOB is not set +# CONFIG_PKG_USING_MLIBC is not set +# CONFIG_PKG_USING_TASK_MSG_BUS is not set +# CONFIG_PKG_USING_SFDB is not set +# CONFIG_PKG_USING_RTP is not set +# CONFIG_PKG_USING_REB is not set +# CONFIG_PKG_USING_R_RHEALSTONE is not set # # peripheral libraries and drivers @@ -752,6 +778,7 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_BALANCE is not set # CONFIG_PKG_USING_SHT2X is not set # CONFIG_PKG_USING_SHT3X is not set +# CONFIG_PKG_USING_SHT4X is not set # CONFIG_PKG_USING_AD7746 is not set # CONFIG_PKG_USING_ADT74XX is not set # CONFIG_PKG_USING_MAX17048 is not set @@ -772,6 +799,7 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_FT5426 is not set # CONFIG_PKG_USING_FT6236 is not set # CONFIG_PKG_USING_XPT2046_TOUCH is not set +# CONFIG_PKG_USING_CST816X is not set # CONFIG_PKG_USING_REALTEK_AMEBA is not set # CONFIG_PKG_USING_STM32_SDIO is not set # CONFIG_PKG_USING_ESP_IDF is not set @@ -847,7 +875,15 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_IO_INPUT_FILTER is not set # CONFIG_PKG_USING_RASPBERRYPI_PICO_SDK is not set # CONFIG_PKG_USING_LRF_NV7LIDAR is not set +# CONFIG_PKG_USING_AIP650 is not set # CONFIG_PKG_USING_FINGERPRINT is not set +# CONFIG_PKG_USING_BT_ECB02C is not set +# CONFIG_PKG_USING_UAT is not set +# CONFIG_PKG_USING_ST7789 is not set +# CONFIG_PKG_USING_VS1003 is not set +# CONFIG_PKG_USING_X9555 is not set +# CONFIG_PKG_USING_SYSTEM_RUN_LED is not set +# CONFIG_PKG_USING_SPI_TOOLS is not set # # AI packages @@ -861,12 +897,17 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_ULAPACK is not set # CONFIG_PKG_USING_QUEST is not set # CONFIG_PKG_USING_NAXOS is not set +# CONFIG_PKG_USING_NCNN is not set +# CONFIG_PKG_USING_R_TINYMAIX is not set # # Signal Processing and Control Algorithm Packages # # CONFIG_PKG_USING_FIRE_PID_CURVE is not set +# CONFIG_PKG_USING_QPID is not set # CONFIG_PKG_USING_UKAL is not set +# CONFIG_PKG_USING_DIGITALCTRL is not set +# CONFIG_PKG_USING_KISSFFT is not set # # miscellaneous packages @@ -928,6 +969,7 @@ CONFIG_PKG_USING_KERNEL_SAMPLES_EN=y # CONFIG_PKG_USING_MINILZO is not set # CONFIG_PKG_USING_QUICKLZ is not set # CONFIG_PKG_USING_LZMA is not set +# CONFIG_PKG_USING_RALARAM is not set # CONFIG_PKG_USING_MULTIBUTTON is not set # CONFIG_PKG_USING_FLEXIBLE_BUTTON is not set # CONFIG_PKG_USING_CANFESTIVAL is not set @@ -937,7 +979,6 @@ CONFIG_PKG_USING_KERNEL_SAMPLES_EN=y # CONFIG_PKG_USING_DSTR is not set # CONFIG_PKG_USING_TINYFRAME is not set # CONFIG_PKG_USING_KENDRYTE_DEMO is not set -# CONFIG_PKG_USING_DIGITALCTRL is not set # CONFIG_PKG_USING_UPACKER is not set # CONFIG_PKG_USING_UPARAM is not set # CONFIG_PKG_USING_HELLO is not set @@ -962,8 +1003,9 @@ CONFIG_PKG_USING_KERNEL_SAMPLES_EN=y # CONFIG_PKG_USING_RTDUINO is not set # -# Projects +# Projects and Demos # +# CONFIG_PKG_USING_ARDUINO_MSGQ_C_CPP_DEMO is not set # CONFIG_PKG_USING_ARDUINO_ULTRASOUND_RADAR is not set # CONFIG_PKG_USING_ARDUINO_SENSOR_KIT is not set # CONFIG_PKG_USING_ARDUINO_MATLAB_SUPPORT is not set @@ -1110,14 +1152,21 @@ CONFIG_PKG_USING_KERNEL_SAMPLES_EN=y # # Display # +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_GFX_LIBRARY is not set # CONFIG_PKG_USING_ARDUINO_U8G2 is not set -# CONFIG_PKG_USING_ARDUINO_U8GLIB_ARDUINO is not set +# CONFIG_PKG_USING_ARDUINO_TFT_ESPI is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ST7735 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SSD1306 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ILI9341 is not set # CONFIG_PKG_USING_SEEED_TM1637 is not set # # Timing # +# CONFIG_PKG_USING_ARDUINO_RTCLIB is not set # CONFIG_PKG_USING_ARDUINO_MSTIMER2 is not set +# CONFIG_PKG_USING_ARDUINO_TICKER is not set +# CONFIG_PKG_USING_ARDUINO_TASKSCHEDULER is not set # # Data Processing @@ -1151,7 +1200,6 @@ CONFIG_PKG_USING_KERNEL_SAMPLES_EN=y # # CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MFRC630 is not set # CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI5351 is not set -# CONFIG_PKG_USING_ARDUINO_RTCLIB is not set # # Signal IO @@ -1172,10 +1220,12 @@ CONFIG_PKG_USING_KERNEL_SAMPLES_EN=y # # Hardware Drivers # +CONFIG_DRV_DEBUG=y # # On-chip Peripheral Drivers # +CONFIG_BSP_USING_IOPAD=y CONFIG_BSP_USING_UART=y CONFIG_RT_USING_UART1=y # CONFIG_RT_USING_UART0 is not set @@ -1183,13 +1233,10 @@ CONFIG_RT_USING_UART1=y # CONFIG_BSP_USING_CAN is not set # CONFIG_BSP_USING_GPIO is not set # CONFIG_BSP_USING_QSPI is not set -CONFIG_BSP_USING_ETH=y -CONFIG_RT_LWIP_PBUF_POOL_BUFSIZE=1700 -CONFIG_BSP_USING_SDIO=y -CONFIG_BSP_USING_SDCARD_FATFS=y -# CONFIG_USING_SDIO0 is not set -CONFIG_USING_SDIO1=y -# CONFIG_USING_EMMC is not set +# CONFIG_BSP_USING_ETH is not set +# CONFIG_BSP_USING_PWM is not set +# CONFIG_BSP_USING_I2C is not set +# CONFIG_BSP_USING_SDIF is not set # # Board extended module Drivers @@ -1197,7 +1244,7 @@ CONFIG_USING_SDIO1=y CONFIG_BSP_USING_GIC=y CONFIG_BSP_USING_GICV3=y CONFIG_PHYTIUM_ARCH_AARCH64=y -CONFIG_ARM_SPI_BIND_CPU_ID=0 +CONFIG_ARM_SPI_BIND_CPU_ID=2 # # Standalone Setting @@ -1205,65 +1252,46 @@ CONFIG_ARM_SPI_BIND_CPU_ID=0 CONFIG_TARGET_ARMV8_AARCH64=y # -# Board Configuration +# Soc configuration # -# CONFIG_TARGET_F2000_4 is not set -# CONFIG_TARGET_D2000 is not set -# CONFIG_TARGET_E2000Q is not set -CONFIG_TARGET_E2000D=y +# CONFIG_TARGET_PHYTIUMPI is not set +CONFIG_TARGET_E2000Q=y +# CONFIG_TARGET_E2000D is not set # CONFIG_TARGET_E2000S is not set +# CONFIG_TARGET_FT2004 is not set +# CONFIG_TARGET_D2000 is not set +CONFIG_SOC_NAME="e2000" +CONFIG_TARGET_TYPE_NAME="q" +CONFIG_SOC_CORE_NUM=4 +CONFIG_F32BIT_MEMORY_ADDRESS=0x80000000 +CONFIG_F32BIT_MEMORY_LENGTH=0x80000000 +CONFIG_F64BIT_MEMORY_ADDRESS=0x2000000000 +CONFIG_F64BIT_MEMORY_LENGTH=0x800000000 CONFIG_TARGET_E2000=y +# CONFIG_USE_SPINLOCK is not set CONFIG_DEFAULT_DEBUG_PRINT_UART1=y # CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set # CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set # -# Components Configuration +# Board Configuration # -CONFIG_USE_SPI=y -CONFIG_USE_FSPIM=y -CONFIG_USE_QSPI=y +CONFIG_BOARD_NAME="demo" +# CONFIG_USE_SPI_IOPAD is not set +# CONFIG_USE_GPIO_IOPAD is not set +# CONFIG_USE_CAN_IOPAD is not set +# CONFIG_USE_QSPI_IOPAD is not set +# CONFIG_USE_PWM_IOPAD is not set +# CONFIG_USE_MIO_IOPAD is not set +# CONFIG_USE_TACHO_IOPAD is not set +# CONFIG_USE_UART_IOPAD is not set +# CONFIG_USE_THIRD_PARTY_IOPAD is not set +CONFIG_E2000Q_DEMO_BOARD=y # -# Qspi Configuration +# IO mux configuration when board start up # -CONFIG_USE_FQSPI=y -# CONFIG_USE_GIC is not set -CONFIG_USE_IOPAD=y -CONFIG_ENABLE_IOPAD=y -CONFIG_USE_SERIAL=y - -# -# Usart Configuration -# -CONFIG_ENABLE_Pl011_UART=y -# CONFIG_USE_GPIO is not set -CONFIG_USE_ETH=y - -# -# Eth Configuration -# -CONFIG_ENABLE_FXMAC=y -# CONFIG_ENABLE_FGMAC is not set -CONFIG_FXMAC_PHY_COMMON=y -# CONFIG_FXMAC_PHY_YT is not set -# CONFIG_USE_CAN is not set -# CONFIG_USE_I2C is not set -# CONFIG_USE_TIMER is not set -# CONFIG_USE_MIO is not set -# CONFIG_USE_SDMMC is not set -# CONFIG_USE_PCIE is not set -# CONFIG_USE_WDT is not set -# CONFIG_USE_DMA is not set -# CONFIG_USE_NAND is not set -# CONFIG_USE_RTC is not set -# CONFIG_USE_SATA is not set -# CONFIG_USE_USB is not set -# CONFIG_USE_ADC is not set -# CONFIG_USE_PWM is not set -# CONFIG_USE_IPC is not set -# CONFIG_USE_MEDIA is not set -# CONFIG_USE_SCMI_MHU is not set +# CONFIG_CUS_DEMO_BOARD is not set # # Sdk common configuration @@ -1278,3 +1306,8 @@ CONFIG_LOG_ERROR=y # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set # CONFIG_USE_DEFAULT_INTERRUPT_CONFIG is not set + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set diff --git a/bsp/phytium/aarch64/configs/e2000q_rtsmart.h b/bsp/phytium/aarch64/configs/e2000q_demo_rtthread.h similarity index 82% rename from bsp/phytium/aarch64/configs/e2000q_rtsmart.h rename to bsp/phytium/aarch64/configs/e2000q_demo_rtthread.h index 83c352b145..ed305a2171 100644 --- a/bsp/phytium/aarch64/configs/e2000q_rtsmart.h +++ b/bsp/phytium/aarch64/configs/e2000q_demo_rtthread.h @@ -7,7 +7,6 @@ /* RT-Thread Kernel */ #define RT_NAME_MAX 16 -#define RT_USING_SMART #define RT_USING_SMP #define RT_CPUS_NR 4 #define RT_ALIGN_SIZE 4 @@ -19,17 +18,20 @@ #define RT_HOOK_USING_FUNC_PTR #define RT_USING_IDLE_HOOK #define RT_IDLE_HOOK_LIST_SIZE 4 -#define IDLE_THREAD_STACK_SIZE 40960 -#define SYSTEM_THREAD_STACK_SIZE 40960 +#define IDLE_THREAD_STACK_SIZE 8192 +#define SYSTEM_THREAD_STACK_SIZE 8192 #define RT_USING_TIMER_SOFT #define RT_TIMER_THREAD_PRIO 4 -#define RT_TIMER_THREAD_STACK_SIZE 4096 +#define RT_TIMER_THREAD_STACK_SIZE 8192 /* kservice optimization */ #define RT_KSERVICE_USING_STDLIB #define RT_KPRINTF_USING_LONGLONG -#define RT_DEBUG +#define RT_USING_DEBUG +#define RT_DEBUGING_COLOR +#define RT_DEBUGING_CONTEXT +#define RT_DEBUGING_INIT /* Inter-Thread communication */ @@ -48,21 +50,25 @@ #define RT_USING_SLAB_AS_HEAP #define RT_USING_HEAP_ISR #define RT_USING_HEAP - -/* Kernel Device Object */ - #define RT_USING_DEVICE #define RT_USING_CONSOLE #define RT_CONSOLEBUF_SIZE 128 #define RT_CONSOLE_DEVICE_NAME "uart1" -#define RT_VER_NUM 0x50001 +#define RT_VER_NUM 0x50100 +#define RT_BACKTRACE_LEVEL_MAX_NR 32 + +/* AArch64 Architecture Configuration */ + +#define ARCH_TEXT_OFFSET 0x80000 +#define ARCH_RAM_OFFSET 0x80000000 +#define ARCH_SECONDARY_CPU_STACK_SIZE 4096 +#define ARCH_HAVE_EFFICIENT_UNALIGNED_ACCESS #define ARCH_CPU_64BIT #define RT_USING_CACHE #define ARCH_ARM_BOOTWITH_FLUSH_CACHE #define ARCH_MM_MMU #define ARCH_ARM #define ARCH_ARM_MMU -#define KERNEL_VADDR_START 0xffff000000000000 #define ARCH_ARMV8 /* RT-Thread Components */ @@ -84,6 +90,7 @@ #define MSH_USING_BUILT_IN_COMMANDS #define FINSH_USING_DESCRIPTION #define FINSH_ARG_MAX 10 +#define FINSH_USING_OPTION_COMPLETION /* DFS: device virtual file system */ @@ -111,13 +118,6 @@ #define RT_DFS_ELM_MUTEX_TIMEOUT 3000 #define RT_USING_DFS_DEVFS #define RT_USING_DFS_RAMFS -#define RT_USING_LWP -#define RT_LWP_MAX_NR 30 -#define LWP_TASK_STACK_SIZE 16384 -#define RT_CH_MSG_MAX_NR 1024 -#define LWP_CONSOLE_INPUT_BUFFER_SIZE 1024 -#define LWP_TID_MAX_NR 64 -#define RT_LWP_SHM_MAX_NR 64 /* Device Drivers */ @@ -130,24 +130,25 @@ #define RT_USING_SERIAL_V1 #define RT_SERIAL_USING_DMA #define RT_SERIAL_RB_BUFSZ 64 -#define RT_USING_TTY #define RT_USING_NULL #define RT_USING_ZERO #define RT_USING_RANDOM #define RT_USING_RTC -#define RT_USING_SDIO -#define RT_SDIO_STACK_SIZE 512 -#define RT_SDIO_THREAD_PRIORITY 15 -#define RT_MMCSD_STACK_SIZE 1024 -#define RT_MMCSD_THREAD_PREORITY 22 -#define RT_MMCSD_MAX_PARTITION 16 +#define RT_USING_KTIME /* Using USB */ /* C/C++ and POSIX layer */ -#define RT_LIBC_DEFAULT_TIMEZONE 8 +/* ISO-ANSI C layer */ + +/* Timezone and Daylight Saving Time */ + +#define RT_LIBC_USING_LIGHT_TZ_DST +#define RT_LIBC_TZ_DEFAULT_HOUR 8 +#define RT_LIBC_TZ_DEFAULT_MIN 0 +#define RT_LIBC_TZ_DEFAULT_SEC 0 /* POSIX (Portable Operating System Interface) layer */ @@ -227,7 +228,15 @@ #define RT_USING_RYM #define YMODEM_USING_FILE_TRANSFER +#define RT_USING_RESOURCE_ID #define RT_USING_ADT +#define RT_USING_ADT_AVL +#define RT_USING_ADT_BITMAP +#define RT_USING_ADT_HASHMAP +#define RT_USING_ADT_REF + +/* Memory management */ + /* RT-Thread Utestcases */ @@ -245,6 +254,9 @@ /* Wiced WiFi */ +/* CYW43012 WiFi */ + + /* IoT Cloud */ @@ -317,7 +329,7 @@ /* Arduino libraries */ -/* Projects */ +/* Projects and Demos */ /* Sensors */ @@ -350,15 +362,13 @@ /* Hardware Drivers */ +#define DRV_DEBUG + /* On-chip Peripheral Drivers */ +#define BSP_USING_IOPAD #define BSP_USING_UART #define RT_USING_UART1 -#define BSP_USING_ETH -#define RT_LWIP_PBUF_POOL_BUFSIZE 1700 -#define BSP_USING_SDIO -#define BSP_USING_SDCARD_FATFS -#define USING_SDIO1 /* Board extended module Drivers */ @@ -371,34 +381,32 @@ #define TARGET_ARMV8_AARCH64 -/* Board Configuration */ +/* Soc configuration */ #define TARGET_E2000Q +#define SOC_NAME "e2000" +#define TARGET_TYPE_NAME "q" +#define SOC_CORE_NUM 4 +#define F32BIT_MEMORY_ADDRESS 0x80000000 +#define F32BIT_MEMORY_LENGTH 0x80000000 +#define F64BIT_MEMORY_ADDRESS 0x2000000000 +#define F64BIT_MEMORY_LENGTH 0x800000000 #define TARGET_E2000 #define DEFAULT_DEBUG_PRINT_UART1 -/* Components Configuration */ +/* Board Configuration */ -#define USE_SPI -#define USE_FSPIM -#define USE_QSPI +#define BOARD_NAME "demo" +#define E2000Q_DEMO_BOARD -/* Qspi Configuration */ +/* IO mux configuration when board start up */ -#define USE_FQSPI -#define USE_IOPAD -#define ENABLE_IOPAD -#define USE_SERIAL -/* Usart Configuration */ +/* Sdk common configuration */ -#define ENABLE_Pl011_UART -#define USE_ETH - -/* Eth Configuration */ - -#define ENABLE_FXMAC -#define FXMAC_PHY_COMMON #define LOG_ERROR +/* Image information configuration */ + + #endif diff --git a/bsp/phytium/aarch64/configs/e2000q_rtsmart_test b/bsp/phytium/aarch64/configs/e2000q_rtsmart_test deleted file mode 100644 index 225d3e5e06..0000000000 --- a/bsp/phytium/aarch64/configs/e2000q_rtsmart_test +++ /dev/null @@ -1,1284 +0,0 @@ -# -# Automatically generated file; DO NOT EDIT. -# RT-Thread Project Configuration -# - -# -# RT-Thread Kernel -# -CONFIG_RT_NAME_MAX=16 -# CONFIG_RT_USING_ARCH_DATA_TYPE is not set -CONFIG_RT_USING_SMART=y -CONFIG_RT_USING_SMP=y -CONFIG_RT_CPUS_NR=4 -CONFIG_RT_ALIGN_SIZE=4 -# CONFIG_RT_THREAD_PRIORITY_8 is not set -CONFIG_RT_THREAD_PRIORITY_32=y -# CONFIG_RT_THREAD_PRIORITY_256 is not set -CONFIG_RT_THREAD_PRIORITY_MAX=32 -CONFIG_RT_TICK_PER_SECOND=1000 -CONFIG_RT_USING_OVERFLOW_CHECK=y -CONFIG_RT_USING_HOOK=y -CONFIG_RT_HOOK_USING_FUNC_PTR=y -CONFIG_RT_USING_IDLE_HOOK=y -CONFIG_RT_IDLE_HOOK_LIST_SIZE=4 -CONFIG_IDLE_THREAD_STACK_SIZE=40960 -CONFIG_SYSTEM_THREAD_STACK_SIZE=40960 -CONFIG_RT_USING_TIMER_SOFT=y -CONFIG_RT_TIMER_THREAD_PRIO=4 -CONFIG_RT_TIMER_THREAD_STACK_SIZE=4096 - -# -# kservice optimization -# -CONFIG_RT_KSERVICE_USING_STDLIB=y -# CONFIG_RT_KSERVICE_USING_STDLIB_MEMORY is not set -# CONFIG_RT_KSERVICE_USING_TINY_SIZE is not set -# CONFIG_RT_USING_TINY_FFS is not set -CONFIG_RT_KPRINTF_USING_LONGLONG=y -CONFIG_RT_DEBUG=y -# CONFIG_RT_DEBUG_COLOR is not set -# CONFIG_RT_DEBUG_INIT_CONFIG is not set -# CONFIG_RT_DEBUG_THREAD_CONFIG is not set -# CONFIG_RT_DEBUG_SCHEDULER_CONFIG is not set -# CONFIG_RT_DEBUG_IPC_CONFIG is not set -# CONFIG_RT_DEBUG_TIMER_CONFIG is not set -# CONFIG_RT_DEBUG_IRQ_CONFIG is not set -# CONFIG_RT_DEBUG_MEM_CONFIG is not set -# CONFIG_RT_DEBUG_SLAB_CONFIG is not set -# CONFIG_RT_DEBUG_MEMHEAP_CONFIG is not set -# CONFIG_RT_DEBUG_PAGE_LEAK is not set -# CONFIG_RT_DEBUG_MODULE_CONFIG is not set - -# -# Inter-Thread communication -# -CONFIG_RT_USING_SEMAPHORE=y -CONFIG_RT_USING_MUTEX=y -CONFIG_RT_USING_EVENT=y -CONFIG_RT_USING_MAILBOX=y -CONFIG_RT_USING_MESSAGEQUEUE=y -# CONFIG_RT_USING_SIGNALS is not set - -# -# Memory Management -# -CONFIG_RT_PAGE_MAX_ORDER=16 -# CONFIG_RT_USING_MEMPOOL is not set -# CONFIG_RT_USING_SMALL_MEM is not set -CONFIG_RT_USING_SLAB=y -CONFIG_RT_USING_MEMHEAP=y -CONFIG_RT_MEMHEAP_FAST_MODE=y -# CONFIG_RT_MEMHEAP_BEST_MODE is not set -# CONFIG_RT_USING_SMALL_MEM_AS_HEAP is not set -# CONFIG_RT_USING_MEMHEAP_AS_HEAP is not set -CONFIG_RT_USING_SLAB_AS_HEAP=y -# CONFIG_RT_USING_USERHEAP is not set -# CONFIG_RT_USING_NOHEAP is not set -# CONFIG_RT_USING_MEMTRACE is not set -CONFIG_RT_USING_HEAP_ISR=y -CONFIG_RT_USING_HEAP=y - -# -# Kernel Device Object -# -CONFIG_RT_USING_DEVICE=y -# CONFIG_RT_USING_DEVICE_OPS is not set -# CONFIG_RT_USING_DM is not set -# CONFIG_RT_USING_INTERRUPT_INFO is not set -CONFIG_RT_USING_CONSOLE=y -CONFIG_RT_CONSOLEBUF_SIZE=128 -CONFIG_RT_CONSOLE_DEVICE_NAME="uart1" -CONFIG_RT_VER_NUM=0x50001 -# CONFIG_RT_USING_STDC_ATOMIC is not set -CONFIG_ARCH_CPU_64BIT=y -CONFIG_RT_USING_CACHE=y -# CONFIG_RT_USING_HW_ATOMIC is not set -CONFIG_ARCH_ARM_BOOTWITH_FLUSH_CACHE=y -# CONFIG_ARCH_CPU_STACK_GROWS_UPWARD is not set -# CONFIG_RT_USING_CPU_FFS is not set -CONFIG_ARCH_MM_MMU=y -CONFIG_ARCH_ARM=y -CONFIG_ARCH_ARM_MMU=y -CONFIG_KERNEL_VADDR_START=0xffff000000000000 -CONFIG_ARCH_ARMV8=y - -# -# RT-Thread Components -# -CONFIG_RT_USING_COMPONENTS_INIT=y -CONFIG_RT_USING_USER_MAIN=y -CONFIG_RT_MAIN_THREAD_STACK_SIZE=8192 -CONFIG_RT_MAIN_THREAD_PRIORITY=10 -# CONFIG_RT_USING_LEGACY is not set -CONFIG_RT_USING_MSH=y -CONFIG_RT_USING_FINSH=y -CONFIG_FINSH_USING_MSH=y -CONFIG_FINSH_THREAD_NAME="tshell" -CONFIG_FINSH_THREAD_PRIORITY=20 -CONFIG_FINSH_THREAD_STACK_SIZE=4096 -CONFIG_FINSH_USING_HISTORY=y -CONFIG_FINSH_HISTORY_LINES=5 -CONFIG_FINSH_USING_SYMTAB=y -CONFIG_FINSH_CMD_SIZE=80 -CONFIG_MSH_USING_BUILT_IN_COMMANDS=y -CONFIG_FINSH_USING_DESCRIPTION=y -# CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set -# CONFIG_FINSH_USING_AUTH is not set -CONFIG_FINSH_ARG_MAX=10 - -# -# DFS: device virtual file system -# -CONFIG_RT_USING_DFS=y -CONFIG_DFS_USING_POSIX=y -CONFIG_DFS_USING_WORKDIR=y -# CONFIG_RT_USING_DFS_MNTTABLE is not set -CONFIG_DFS_FD_MAX=16 -CONFIG_RT_USING_DFS_V1=y -# CONFIG_RT_USING_DFS_V2 is not set -CONFIG_DFS_FILESYSTEMS_MAX=4 -CONFIG_DFS_FILESYSTEM_TYPES_MAX=4 -CONFIG_RT_USING_DFS_ELMFAT=y - -# -# elm-chan's FatFs, Generic FAT Filesystem Module -# -CONFIG_RT_DFS_ELM_CODE_PAGE=437 -CONFIG_RT_DFS_ELM_WORD_ACCESS=y -# CONFIG_RT_DFS_ELM_USE_LFN_0 is not set -# CONFIG_RT_DFS_ELM_USE_LFN_1 is not set -# CONFIG_RT_DFS_ELM_USE_LFN_2 is not set -CONFIG_RT_DFS_ELM_USE_LFN_3=y -CONFIG_RT_DFS_ELM_USE_LFN=3 -CONFIG_RT_DFS_ELM_LFN_UNICODE_0=y -# CONFIG_RT_DFS_ELM_LFN_UNICODE_1 is not set -# CONFIG_RT_DFS_ELM_LFN_UNICODE_2 is not set -# CONFIG_RT_DFS_ELM_LFN_UNICODE_3 is not set -CONFIG_RT_DFS_ELM_LFN_UNICODE=0 -CONFIG_RT_DFS_ELM_MAX_LFN=255 -CONFIG_RT_DFS_ELM_DRIVES=2 -CONFIG_RT_DFS_ELM_MAX_SECTOR_SIZE=512 -# CONFIG_RT_DFS_ELM_USE_ERASE is not set -CONFIG_RT_DFS_ELM_REENTRANT=y -CONFIG_RT_DFS_ELM_MUTEX_TIMEOUT=3000 -CONFIG_RT_USING_DFS_DEVFS=y -# CONFIG_RT_USING_DFS_ROMFS is not set -# CONFIG_RT_USING_DFS_CROMFS is not set -CONFIG_RT_USING_DFS_RAMFS=y -# CONFIG_RT_USING_DFS_TMPFS is not set -# CONFIG_RT_USING_DFS_NFS is not set -# CONFIG_RT_USING_FAL is not set -CONFIG_RT_USING_LWP=y -CONFIG_RT_LWP_MAX_NR=30 -CONFIG_LWP_TASK_STACK_SIZE=16384 -CONFIG_RT_CH_MSG_MAX_NR=1024 -CONFIG_LWP_CONSOLE_INPUT_BUFFER_SIZE=1024 -CONFIG_LWP_TID_MAX_NR=64 -CONFIG_RT_LWP_SHM_MAX_NR=64 -# CONFIG_LWP_UNIX98_PTY is not set - -# -# Device Drivers -# -CONFIG_RT_USING_DEVICE_IPC=y -CONFIG_RT_UNAMED_PIPE_NUMBER=64 -CONFIG_RT_USING_SYSTEM_WORKQUEUE=y -CONFIG_RT_SYSTEM_WORKQUEUE_STACKSIZE=8192 -CONFIG_RT_SYSTEM_WORKQUEUE_PRIORITY=23 -CONFIG_RT_USING_SERIAL=y -CONFIG_RT_USING_SERIAL_V1=y -# CONFIG_RT_USING_SERIAL_V2 is not set -CONFIG_RT_SERIAL_USING_DMA=y -CONFIG_RT_SERIAL_RB_BUFSZ=64 -CONFIG_RT_USING_TTY=y -# CONFIG_RT_TTY_DEBUG is not set -# CONFIG_RT_USING_CAN is not set -# CONFIG_RT_USING_HWTIMER is not set -# CONFIG_RT_USING_CPUTIME is not set -# CONFIG_RT_USING_I2C is not set -# CONFIG_RT_USING_PHY is not set -# CONFIG_RT_USING_PIN is not set -# CONFIG_RT_USING_ADC is not set -# CONFIG_RT_USING_DAC is not set -CONFIG_RT_USING_NULL=y -CONFIG_RT_USING_ZERO=y -CONFIG_RT_USING_RANDOM=y -# CONFIG_RT_USING_PWM is not set -# CONFIG_RT_USING_MTD_NOR is not set -# CONFIG_RT_USING_MTD_NAND is not set -# CONFIG_RT_USING_PM is not set -# CONFIG_RT_USING_FDT is not set -CONFIG_RT_USING_RTC=y -# CONFIG_RT_USING_ALARM is not set -# CONFIG_RT_USING_SOFT_RTC is not set -CONFIG_RT_USING_SDIO=y -CONFIG_RT_SDIO_STACK_SIZE=512 -CONFIG_RT_SDIO_THREAD_PRIORITY=15 -CONFIG_RT_MMCSD_STACK_SIZE=1024 -CONFIG_RT_MMCSD_THREAD_PREORITY=22 -CONFIG_RT_MMCSD_MAX_PARTITION=16 -# CONFIG_RT_SDIO_DEBUG is not set -# CONFIG_RT_USING_SPI is not set -# CONFIG_RT_USING_WDT is not set -# CONFIG_RT_USING_AUDIO is not set -# CONFIG_RT_USING_SENSOR is not set -# CONFIG_RT_USING_TOUCH is not set -# CONFIG_RT_USING_LCD is not set -# CONFIG_RT_USING_HWCRYPTO is not set -# CONFIG_RT_USING_PULSE_ENCODER is not set -# CONFIG_RT_USING_INPUT_CAPTURE is not set -# CONFIG_RT_USING_DEV_BUS is not set -# CONFIG_RT_USING_WIFI is not set -# CONFIG_RT_USING_VIRTIO is not set - -# -# Using USB -# -# CONFIG_RT_USING_USB is not set -# CONFIG_RT_USING_USB_HOST is not set -# CONFIG_RT_USING_USB_DEVICE is not set - -# -# C/C++ and POSIX layer -# -CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8 - -# -# POSIX (Portable Operating System Interface) layer -# -CONFIG_RT_USING_POSIX_FS=y -CONFIG_RT_USING_POSIX_DEVIO=y -CONFIG_RT_USING_POSIX_STDIO=y -# CONFIG_RT_USING_POSIX_POLL is not set -# CONFIG_RT_USING_POSIX_SELECT is not set -# CONFIG_RT_USING_POSIX_SOCKET is not set -CONFIG_RT_USING_POSIX_TERMIOS=y -# CONFIG_RT_USING_POSIX_AIO is not set -# CONFIG_RT_USING_POSIX_MMAN is not set -CONFIG_RT_USING_POSIX_DELAY=y -CONFIG_RT_USING_POSIX_CLOCK=y -CONFIG_RT_USING_POSIX_TIMER=y -# CONFIG_RT_USING_PTHREADS is not set -# CONFIG_RT_USING_MODULE is not set - -# -# Interprocess Communication (IPC) -# -# CONFIG_RT_USING_POSIX_PIPE is not set -# CONFIG_RT_USING_POSIX_MESSAGE_QUEUE is not set -# CONFIG_RT_USING_POSIX_MESSAGE_SEMAPHORE is not set - -# -# Socket is in the 'Network' category -# -# CONFIG_RT_USING_CPLUSPLUS is not set - -# -# Network -# -CONFIG_RT_USING_SAL=y -CONFIG_SAL_INTERNET_CHECK=y - -# -# Docking with protocol stacks -# -CONFIG_SAL_USING_LWIP=y -# CONFIG_SAL_USING_AT is not set -# CONFIG_SAL_USING_TLS is not set -CONFIG_SAL_USING_POSIX=y -# CONFIG_SAL_USING_AF_UNIX is not set -CONFIG_RT_USING_NETDEV=y -CONFIG_NETDEV_USING_IFCONFIG=y -CONFIG_NETDEV_USING_PING=y -CONFIG_NETDEV_USING_NETSTAT=y -CONFIG_NETDEV_USING_AUTO_DEFAULT=y -# CONFIG_NETDEV_USING_IPV6 is not set -CONFIG_NETDEV_IPV4=1 -CONFIG_NETDEV_IPV6=0 -# CONFIG_NETDEV_IPV6_SCOPES is not set -CONFIG_RT_USING_LWIP=y -# CONFIG_RT_USING_LWIP_LOCAL_VERSION is not set -# CONFIG_RT_USING_LWIP141 is not set -# CONFIG_RT_USING_LWIP203 is not set -CONFIG_RT_USING_LWIP212=y -# CONFIG_RT_USING_LWIP_LATEST is not set -CONFIG_RT_USING_LWIP_VER_NUM=0x20102 -# CONFIG_RT_USING_LWIP_IPV6 is not set -CONFIG_RT_LWIP_MEM_ALIGNMENT=64 -CONFIG_RT_LWIP_IGMP=y -CONFIG_RT_LWIP_ICMP=y -# CONFIG_RT_LWIP_SNMP is not set -CONFIG_RT_LWIP_DNS=y -# CONFIG_RT_LWIP_DHCP is not set - -# -# Static IPv4 Address -# -CONFIG_RT_LWIP_IPADDR="192.168.4.10" -CONFIG_RT_LWIP_GWADDR="192.168.4.1" -CONFIG_RT_LWIP_MSKADDR="255.255.255.0" -CONFIG_RT_LWIP_UDP=y -CONFIG_RT_LWIP_TCP=y -CONFIG_RT_LWIP_RAW=y -# CONFIG_RT_LWIP_PPP is not set -CONFIG_RT_MEMP_NUM_NETCONN=8 -CONFIG_RT_LWIP_PBUF_NUM=512 -CONFIG_RT_LWIP_RAW_PCB_NUM=4 -CONFIG_RT_LWIP_UDP_PCB_NUM=4 -CONFIG_RT_LWIP_TCP_PCB_NUM=4 -CONFIG_RT_LWIP_TCP_SEG_NUM=40 -CONFIG_RT_LWIP_TCP_SND_BUF=8196 -CONFIG_RT_LWIP_TCP_WND=8196 -CONFIG_RT_LWIP_TCPTHREAD_PRIORITY=12 -CONFIG_RT_LWIP_TCPTHREAD_MBOX_SIZE=8 -CONFIG_RT_LWIP_TCPTHREAD_STACKSIZE=16184 -# CONFIG_LWIP_NO_RX_THREAD is not set -# CONFIG_LWIP_NO_TX_THREAD is not set -CONFIG_RT_LWIP_ETHTHREAD_PRIORITY=12 -CONFIG_RT_LWIP_ETHTHREAD_STACKSIZE=2048 -CONFIG_RT_LWIP_ETHTHREAD_MBOX_SIZE=8 -# CONFIG_RT_LWIP_REASSEMBLY_FRAG is not set -CONFIG_LWIP_NETIF_STATUS_CALLBACK=1 -CONFIG_LWIP_NETIF_LINK_CALLBACK=1 -CONFIG_SO_REUSE=1 -CONFIG_LWIP_SO_RCVTIMEO=1 -CONFIG_LWIP_SO_SNDTIMEO=1 -CONFIG_LWIP_SO_RCVBUF=1 -CONFIG_LWIP_SO_LINGER=0 -# CONFIG_RT_LWIP_NETIF_LOOPBACK is not set -CONFIG_LWIP_NETIF_LOOPBACK=0 -# CONFIG_RT_LWIP_STATS is not set -# CONFIG_RT_LWIP_USING_HW_CHECKSUM is not set -CONFIG_RT_LWIP_USING_PING=y -# CONFIG_LWIP_USING_DHCPD is not set -CONFIG_RT_LWIP_DEBUG=y -# CONFIG_RT_LWIP_SYS_DEBUG is not set -# CONFIG_RT_LWIP_ETHARP_DEBUG is not set -# CONFIG_RT_LWIP_PPP_DEBUG is not set -# CONFIG_RT_LWIP_MEM_DEBUG is not set -# CONFIG_RT_LWIP_MEMP_DEBUG is not set -# CONFIG_RT_LWIP_PBUF_DEBUG is not set -# CONFIG_RT_LWIP_API_LIB_DEBUG is not set -# CONFIG_RT_LWIP_API_MSG_DEBUG is not set -# CONFIG_RT_LWIP_TCPIP_DEBUG is not set -CONFIG_RT_LWIP_NETIF_DEBUG=y -# CONFIG_RT_LWIP_SOCKETS_DEBUG is not set -# CONFIG_RT_LWIP_DNS_DEBUG is not set -# CONFIG_RT_LWIP_AUTOIP_DEBUG is not set -# CONFIG_RT_LWIP_DHCP_DEBUG is not set -# CONFIG_RT_LWIP_IP_DEBUG is not set -# CONFIG_RT_LWIP_IP_REASS_DEBUG is not set -# CONFIG_RT_LWIP_ICMP_DEBUG is not set -# CONFIG_RT_LWIP_IGMP_DEBUG is not set -# CONFIG_RT_LWIP_UDP_DEBUG is not set -# CONFIG_RT_LWIP_TCP_DEBUG is not set -# CONFIG_RT_LWIP_TCP_INPUT_DEBUG is not set -# CONFIG_RT_LWIP_TCP_OUTPUT_DEBUG is not set -# CONFIG_RT_LWIP_TCP_RTO_DEBUG is not set -# CONFIG_RT_LWIP_TCP_CWND_DEBUG is not set -# CONFIG_RT_LWIP_TCP_WND_DEBUG is not set -# CONFIG_RT_LWIP_TCP_FR_DEBUG is not set -# CONFIG_RT_LWIP_TCP_QLEN_DEBUG is not set -# CONFIG_RT_LWIP_TCP_RST_DEBUG is not set -# CONFIG_RT_USING_AT is not set - -# -# Utilities -# -CONFIG_RT_USING_RYM=y -# CONFIG_YMODEM_USING_CRC_TABLE is not set -CONFIG_YMODEM_USING_FILE_TRANSFER=y -# CONFIG_RT_USING_ULOG is not set -# CONFIG_RT_USING_UTEST is not set -# CONFIG_RT_USING_VAR_EXPORT is not set -CONFIG_RT_USING_ADT=y -# CONFIG_RT_USING_RT_LINK is not set -# CONFIG_RT_USING_VBUS is not set - -# -# RT-Thread Utestcases -# -# CONFIG_RT_USING_UTESTCASES is not set - -# -# RT-Thread online packages -# - -# -# IoT - internet of things -# -# CONFIG_PKG_USING_LWIP is not set -# CONFIG_PKG_USING_LORAWAN_DRIVER is not set -# CONFIG_PKG_USING_PAHOMQTT is not set -# CONFIG_PKG_USING_UMQTT is not set -# CONFIG_PKG_USING_WEBCLIENT is not set -# CONFIG_PKG_USING_WEBNET is not set -# CONFIG_PKG_USING_MONGOOSE is not set -# CONFIG_PKG_USING_MYMQTT is not set -# CONFIG_PKG_USING_KAWAII_MQTT is not set -# CONFIG_PKG_USING_BC28_MQTT is not set -# CONFIG_PKG_USING_WEBTERMINAL is not set -# CONFIG_PKG_USING_LIBMODBUS is not set -# CONFIG_PKG_USING_FREEMODBUS is not set -# CONFIG_PKG_USING_NANOPB is not set - -# -# Wi-Fi -# - -# -# Marvell WiFi -# -# CONFIG_PKG_USING_WLANMARVELL is not set - -# -# Wiced WiFi -# -# CONFIG_PKG_USING_WLAN_WICED is not set -# CONFIG_PKG_USING_RW007 is not set -# CONFIG_PKG_USING_COAP is not set -# CONFIG_PKG_USING_NOPOLL is not set -# CONFIG_PKG_USING_NETUTILS is not set -# CONFIG_PKG_USING_CMUX is not set -# CONFIG_PKG_USING_PPP_DEVICE is not set -# CONFIG_PKG_USING_AT_DEVICE is not set -# CONFIG_PKG_USING_ATSRV_SOCKET is not set -# CONFIG_PKG_USING_WIZNET is not set -# CONFIG_PKG_USING_ZB_COORDINATOR is not set - -# -# IoT Cloud -# -# CONFIG_PKG_USING_ONENET is not set -# CONFIG_PKG_USING_GAGENT_CLOUD is not set -# CONFIG_PKG_USING_ALI_IOTKIT is not set -# CONFIG_PKG_USING_AZURE is not set -# CONFIG_PKG_USING_TENCENT_IOT_EXPLORER is not set -# CONFIG_PKG_USING_JIOT-C-SDK is not set -# CONFIG_PKG_USING_UCLOUD_IOT_SDK is not set -# CONFIG_PKG_USING_JOYLINK is not set -# CONFIG_PKG_USING_EZ_IOT_OS is not set -# CONFIG_PKG_USING_IOTSHARP_SDK is not set -# CONFIG_PKG_USING_NIMBLE is not set -# CONFIG_PKG_USING_LLSYNC_SDK_ADAPTER is not set -# CONFIG_PKG_USING_OTA_DOWNLOADER is not set -# CONFIG_PKG_USING_IPMSG is not set -# CONFIG_PKG_USING_LSSDP is not set -# CONFIG_PKG_USING_AIRKISS_OPEN is not set -# CONFIG_PKG_USING_LIBRWS is not set -# CONFIG_PKG_USING_TCPSERVER is not set -# CONFIG_PKG_USING_PROTOBUF_C is not set -# CONFIG_PKG_USING_DLT645 is not set -# CONFIG_PKG_USING_QXWZ is not set -# CONFIG_PKG_USING_SMTP_CLIENT is not set -# CONFIG_PKG_USING_ABUP_FOTA is not set -# CONFIG_PKG_USING_LIBCURL2RTT is not set -# CONFIG_PKG_USING_CAPNP is not set -# CONFIG_PKG_USING_AGILE_TELNET is not set -# CONFIG_PKG_USING_NMEALIB is not set -# CONFIG_PKG_USING_PDULIB is not set -# CONFIG_PKG_USING_BTSTACK is not set -# CONFIG_PKG_USING_LORAWAN_ED_STACK is not set -# CONFIG_PKG_USING_WAYZ_IOTKIT is not set -# CONFIG_PKG_USING_MAVLINK is not set -# CONFIG_PKG_USING_BSAL is not set -# CONFIG_PKG_USING_AGILE_MODBUS is not set -# CONFIG_PKG_USING_AGILE_FTP is not set -# CONFIG_PKG_USING_EMBEDDEDPROTO is not set -# CONFIG_PKG_USING_RT_LINK_HW is not set -# CONFIG_PKG_USING_RYANMQTT is not set -# CONFIG_PKG_USING_RYANW5500 is not set -# CONFIG_PKG_USING_LORA_PKT_FWD is not set -# CONFIG_PKG_USING_LORA_GW_DRIVER_LIB is not set -# CONFIG_PKG_USING_LORA_PKT_SNIFFER is not set -# CONFIG_PKG_USING_HM is not set -# CONFIG_PKG_USING_SMALL_MODBUS is not set -# CONFIG_PKG_USING_NET_SERVER is not set -# CONFIG_PKG_USING_ZFTP is not set -# CONFIG_PKG_USING_WOL is not set -# CONFIG_PKG_USING_ZEPHYR_POLLING is not set - -# -# security packages -# -# CONFIG_PKG_USING_MBEDTLS is not set -# CONFIG_PKG_USING_LIBSODIUM is not set -# CONFIG_PKG_USING_LIBHYDROGEN is not set -# CONFIG_PKG_USING_TINYCRYPT is not set -# CONFIG_PKG_USING_TFM is not set -# CONFIG_PKG_USING_YD_CRYPTO is not set - -# -# language packages -# - -# -# JSON: JavaScript Object Notation, a lightweight data-interchange format -# -# CONFIG_PKG_USING_CJSON is not set -# CONFIG_PKG_USING_LJSON is not set -# CONFIG_PKG_USING_RT_CJSON_TOOLS is not set -# CONFIG_PKG_USING_RAPIDJSON is not set -# CONFIG_PKG_USING_JSMN is not set -# CONFIG_PKG_USING_AGILE_JSMN is not set -# CONFIG_PKG_USING_PARSON is not set - -# -# XML: Extensible Markup Language -# -# CONFIG_PKG_USING_SIMPLE_XML is not set -# CONFIG_PKG_USING_EZXML is not set -# CONFIG_PKG_USING_LUATOS_SOC is not set -# CONFIG_PKG_USING_LUA is not set -# CONFIG_PKG_USING_JERRYSCRIPT is not set -# CONFIG_PKG_USING_MICROPYTHON is not set -# CONFIG_PKG_USING_PIKASCRIPT is not set -# CONFIG_PKG_USING_RTT_RUST is not set - -# -# multimedia packages -# - -# -# LVGL: powerful and easy-to-use embedded GUI library -# -# CONFIG_PKG_USING_LVGL is not set -# CONFIG_PKG_USING_LITTLEVGL2RTT is not set -# CONFIG_PKG_USING_LV_MUSIC_DEMO is not set -# CONFIG_PKG_USING_GUI_GUIDER_DEMO is not set - -# -# u8g2: a monochrome graphic library -# -# CONFIG_PKG_USING_U8G2_OFFICIAL is not set -# CONFIG_PKG_USING_U8G2 is not set -# CONFIG_PKG_USING_OPENMV is not set -# CONFIG_PKG_USING_MUPDF is not set -# CONFIG_PKG_USING_STEMWIN is not set -# CONFIG_PKG_USING_WAVPLAYER is not set -# CONFIG_PKG_USING_TJPGD is not set -# CONFIG_PKG_USING_PDFGEN is not set -# CONFIG_PKG_USING_HELIX is not set -# CONFIG_PKG_USING_AZUREGUIX is not set -# CONFIG_PKG_USING_TOUCHGFX2RTT is not set -# CONFIG_PKG_USING_NUEMWIN is not set -# CONFIG_PKG_USING_MP3PLAYER is not set -# CONFIG_PKG_USING_TINYJPEG is not set -# CONFIG_PKG_USING_UGUI is not set -# CONFIG_PKG_USING_MCURSES is not set -# CONFIG_PKG_USING_TERMBOX is not set -# CONFIG_PKG_USING_VT100 is not set -# CONFIG_PKG_USING_QRCODE is not set -# CONFIG_PKG_USING_GUIENGINE is not set -# CONFIG_PKG_USING_3GPP_AMRNB is not set - -# -# tools packages -# -# CONFIG_PKG_USING_CMBACKTRACE is not set -# CONFIG_PKG_USING_EASYFLASH is not set -# CONFIG_PKG_USING_EASYLOGGER is not set -# CONFIG_PKG_USING_SYSTEMVIEW is not set -# CONFIG_PKG_USING_SEGGER_RTT is not set -# CONFIG_PKG_USING_RTT_AUTO_EXE_CMD is not set -# CONFIG_PKG_USING_RDB is not set -# CONFIG_PKG_USING_ULOG_EASYFLASH is not set -# CONFIG_PKG_USING_LOGMGR is not set -# CONFIG_PKG_USING_ADBD is not set -# CONFIG_PKG_USING_COREMARK is not set -# CONFIG_PKG_USING_DHRYSTONE is not set -# CONFIG_PKG_USING_MEMORYPERF is not set -# CONFIG_PKG_USING_NR_MICRO_SHELL is not set -# CONFIG_PKG_USING_CHINESE_FONT_LIBRARY is not set -# CONFIG_PKG_USING_LUNAR_CALENDAR is not set -# CONFIG_PKG_USING_BS8116A is not set -# CONFIG_PKG_USING_GPS_RMC is not set -# CONFIG_PKG_USING_URLENCODE is not set -# CONFIG_PKG_USING_UMCN is not set -# CONFIG_PKG_USING_LWRB2RTT is not set -# CONFIG_PKG_USING_CPU_USAGE is not set -# CONFIG_PKG_USING_GBK2UTF8 is not set -# CONFIG_PKG_USING_VCONSOLE is not set -# CONFIG_PKG_USING_KDB is not set -# CONFIG_PKG_USING_WAMR is not set -# CONFIG_PKG_USING_MICRO_XRCE_DDS_CLIENT is not set -# CONFIG_PKG_USING_LWLOG is not set -# CONFIG_PKG_USING_ANV_TRACE is not set -# CONFIG_PKG_USING_ANV_MEMLEAK is not set -# CONFIG_PKG_USING_ANV_TESTSUIT is not set -# CONFIG_PKG_USING_ANV_BENCH is not set -# CONFIG_PKG_USING_DEVMEM is not set -# CONFIG_PKG_USING_REGEX is not set -# CONFIG_PKG_USING_MEM_SANDBOX is not set -# CONFIG_PKG_USING_SOLAR_TERMS is not set -# CONFIG_PKG_USING_GAN_ZHI is not set -# CONFIG_PKG_USING_FDT is not set -# CONFIG_PKG_USING_CBOX is not set -# CONFIG_PKG_USING_SNOWFLAKE is not set -# CONFIG_PKG_USING_HASH_MATCH is not set -# CONFIG_PKG_USING_ARMV7M_DWT_TOOL is not set -# CONFIG_PKG_USING_VOFA_PLUS is not set - -# -# system packages -# - -# -# enhanced kernel services -# -# CONFIG_PKG_USING_RT_MEMCPY_CM is not set -# CONFIG_PKG_USING_RT_KPRINTF_THREADSAFE is not set -# CONFIG_PKG_USING_RT_VSNPRINTF_FULL is not set - -# -# acceleration: Assembly language or algorithmic acceleration packages -# -# CONFIG_PKG_USING_QFPLIB_M0_FULL is not set -# CONFIG_PKG_USING_QFPLIB_M0_TINY is not set -# CONFIG_PKG_USING_QFPLIB_M3 is not set - -# -# CMSIS: ARM Cortex-M Microcontroller Software Interface Standard -# -# CONFIG_PKG_USING_CMSIS_5 is not set -# CONFIG_PKG_USING_CMSIS_RTOS1 is not set -# CONFIG_PKG_USING_CMSIS_RTOS2 is not set - -# -# Micrium: Micrium software products porting for RT-Thread -# -# CONFIG_PKG_USING_UCOSIII_WRAPPER is not set -# CONFIG_PKG_USING_UCOSII_WRAPPER is not set -# CONFIG_PKG_USING_UC_CRC is not set -# CONFIG_PKG_USING_UC_CLK is not set -# CONFIG_PKG_USING_UC_COMMON is not set -# CONFIG_PKG_USING_UC_MODBUS is not set -# CONFIG_PKG_USING_FREERTOS_WRAPPER is not set -# CONFIG_PKG_USING_CAIRO is not set -# CONFIG_PKG_USING_PIXMAN is not set -# CONFIG_PKG_USING_PARTITION is not set -# CONFIG_PKG_USING_PERF_COUNTER is not set -# CONFIG_PKG_USING_FLASHDB is not set -# CONFIG_PKG_USING_SQLITE is not set -# CONFIG_PKG_USING_RTI is not set -# CONFIG_PKG_USING_DFS_YAFFS is not set -# CONFIG_PKG_USING_LITTLEFS is not set -# CONFIG_PKG_USING_DFS_JFFS2 is not set -# CONFIG_PKG_USING_DFS_UFFS is not set -# CONFIG_PKG_USING_LWEXT4 is not set -# CONFIG_PKG_USING_THREAD_POOL is not set -# CONFIG_PKG_USING_ROBOTS is not set -# CONFIG_PKG_USING_EV is not set -# CONFIG_PKG_USING_SYSWATCH is not set -# CONFIG_PKG_USING_SYS_LOAD_MONITOR is not set -# CONFIG_PKG_USING_PLCCORE is not set -# CONFIG_PKG_USING_RAMDISK is not set -# CONFIG_PKG_USING_MININI is not set -# CONFIG_PKG_USING_QBOOT is not set -# CONFIG_PKG_USING_PPOOL is not set -# CONFIG_PKG_USING_OPENAMP is not set -# CONFIG_PKG_USING_LPM is not set -# CONFIG_PKG_USING_TLSF is not set -# CONFIG_PKG_USING_EVENT_RECORDER is not set -# CONFIG_PKG_USING_ARM_2D is not set -# CONFIG_PKG_USING_MCUBOOT is not set -# CONFIG_PKG_USING_TINYUSB is not set -# CONFIG_PKG_USING_CHERRYUSB is not set -# CONFIG_PKG_USING_KMULTI_RTIMER is not set -# CONFIG_PKG_USING_TFDB is not set -# CONFIG_PKG_USING_QPC is not set -# CONFIG_PKG_USING_AGILE_UPGRADE is not set -# CONFIG_PKG_USING_FLASH_BLOB is not set - -# -# peripheral libraries and drivers -# - -# -# sensors drivers -# -# CONFIG_PKG_USING_LSM6DSM is not set -# CONFIG_PKG_USING_LSM6DSL is not set -# CONFIG_PKG_USING_LPS22HB is not set -# CONFIG_PKG_USING_HTS221 is not set -# CONFIG_PKG_USING_LSM303AGR is not set -# CONFIG_PKG_USING_BME280 is not set -# CONFIG_PKG_USING_BME680 is not set -# CONFIG_PKG_USING_BMA400 is not set -# CONFIG_PKG_USING_BMI160_BMX160 is not set -# CONFIG_PKG_USING_SPL0601 is not set -# CONFIG_PKG_USING_MS5805 is not set -# CONFIG_PKG_USING_DA270 is not set -# CONFIG_PKG_USING_DF220 is not set -# CONFIG_PKG_USING_HSHCAL001 is not set -# CONFIG_PKG_USING_BH1750 is not set -# CONFIG_PKG_USING_MPU6XXX is not set -# CONFIG_PKG_USING_AHT10 is not set -# CONFIG_PKG_USING_AP3216C is not set -# CONFIG_PKG_USING_TSL4531 is not set -# CONFIG_PKG_USING_DS18B20 is not set -# CONFIG_PKG_USING_DHT11 is not set -# CONFIG_PKG_USING_DHTXX is not set -# CONFIG_PKG_USING_GY271 is not set -# CONFIG_PKG_USING_GP2Y10 is not set -# CONFIG_PKG_USING_SGP30 is not set -# CONFIG_PKG_USING_HDC1000 is not set -# CONFIG_PKG_USING_BMP180 is not set -# CONFIG_PKG_USING_BMP280 is not set -# CONFIG_PKG_USING_SHTC1 is not set -# CONFIG_PKG_USING_BMI088 is not set -# CONFIG_PKG_USING_HMC5883 is not set -# CONFIG_PKG_USING_MAX6675 is not set -# CONFIG_PKG_USING_TMP1075 is not set -# CONFIG_PKG_USING_SR04 is not set -# CONFIG_PKG_USING_CCS811 is not set -# CONFIG_PKG_USING_PMSXX is not set -# CONFIG_PKG_USING_RT3020 is not set -# CONFIG_PKG_USING_MLX90632 is not set -# CONFIG_PKG_USING_MLX90393 is not set -# CONFIG_PKG_USING_MLX90392 is not set -# CONFIG_PKG_USING_MLX90397 is not set -# CONFIG_PKG_USING_MS5611 is not set -# CONFIG_PKG_USING_MAX31865 is not set -# CONFIG_PKG_USING_VL53L0X is not set -# CONFIG_PKG_USING_INA260 is not set -# CONFIG_PKG_USING_MAX30102 is not set -# CONFIG_PKG_USING_INA226 is not set -# CONFIG_PKG_USING_LIS2DH12 is not set -# CONFIG_PKG_USING_HS300X is not set -# CONFIG_PKG_USING_ZMOD4410 is not set -# CONFIG_PKG_USING_ISL29035 is not set -# CONFIG_PKG_USING_MMC3680KJ is not set -# CONFIG_PKG_USING_QMP6989 is not set -# CONFIG_PKG_USING_BALANCE is not set -# CONFIG_PKG_USING_SHT2X is not set -# CONFIG_PKG_USING_SHT3X is not set -# CONFIG_PKG_USING_AD7746 is not set -# CONFIG_PKG_USING_ADT74XX is not set -# CONFIG_PKG_USING_MAX17048 is not set -# CONFIG_PKG_USING_AS7341 is not set -# CONFIG_PKG_USING_CW2015 is not set -# CONFIG_PKG_USING_ICM20608 is not set -# CONFIG_PKG_USING_PAJ7620 is not set -# CONFIG_PKG_USING_STHS34PF80 is not set - -# -# touch drivers -# -# CONFIG_PKG_USING_GT9147 is not set -# CONFIG_PKG_USING_GT1151 is not set -# CONFIG_PKG_USING_GT917S is not set -# CONFIG_PKG_USING_GT911 is not set -# CONFIG_PKG_USING_FT6206 is not set -# CONFIG_PKG_USING_FT5426 is not set -# CONFIG_PKG_USING_FT6236 is not set -# CONFIG_PKG_USING_XPT2046_TOUCH is not set -# CONFIG_PKG_USING_REALTEK_AMEBA is not set -# CONFIG_PKG_USING_STM32_SDIO is not set -# CONFIG_PKG_USING_ESP_IDF is not set -# CONFIG_PKG_USING_BUTTON is not set -# CONFIG_PKG_USING_PCF8574 is not set -# CONFIG_PKG_USING_SX12XX is not set -# CONFIG_PKG_USING_SIGNAL_LED is not set -# CONFIG_PKG_USING_LEDBLINK is not set -# CONFIG_PKG_USING_LITTLED is not set -# CONFIG_PKG_USING_LKDGUI is not set -# CONFIG_PKG_USING_NRF5X_SDK is not set -# CONFIG_PKG_USING_NRFX is not set - -# -# Kendryte SDK -# -# CONFIG_PKG_USING_K210_SDK is not set -# CONFIG_PKG_USING_KENDRYTE_SDK is not set -# CONFIG_PKG_USING_INFRARED is not set -# CONFIG_PKG_USING_MULTI_INFRARED is not set -# CONFIG_PKG_USING_AGILE_BUTTON is not set -# CONFIG_PKG_USING_AGILE_LED is not set -# CONFIG_PKG_USING_AT24CXX is not set -# CONFIG_PKG_USING_MOTIONDRIVER2RTT is not set -# CONFIG_PKG_USING_PCA9685 is not set -# CONFIG_PKG_USING_ILI9341 is not set -# CONFIG_PKG_USING_I2C_TOOLS is not set -# CONFIG_PKG_USING_NRF24L01 is not set -# CONFIG_PKG_USING_RPLIDAR is not set -# CONFIG_PKG_USING_AS608 is not set -# CONFIG_PKG_USING_RC522 is not set -# CONFIG_PKG_USING_WS2812B is not set -# CONFIG_PKG_USING_EMBARC_BSP is not set -# CONFIG_PKG_USING_EXTERN_RTC_DRIVERS is not set -# CONFIG_PKG_USING_MULTI_RTIMER is not set -# CONFIG_PKG_USING_MAX7219 is not set -# CONFIG_PKG_USING_BEEP is not set -# CONFIG_PKG_USING_EASYBLINK is not set -# CONFIG_PKG_USING_PMS_SERIES is not set -# CONFIG_PKG_USING_CAN_YMODEM is not set -# CONFIG_PKG_USING_LORA_RADIO_DRIVER is not set -# CONFIG_PKG_USING_QLED is not set -# CONFIG_PKG_USING_AGILE_CONSOLE is not set -# CONFIG_PKG_USING_LD3320 is not set -# CONFIG_PKG_USING_WK2124 is not set -# CONFIG_PKG_USING_LY68L6400 is not set -# CONFIG_PKG_USING_DM9051 is not set -# CONFIG_PKG_USING_SSD1306 is not set -# CONFIG_PKG_USING_QKEY is not set -# CONFIG_PKG_USING_RS485 is not set -# CONFIG_PKG_USING_RS232 is not set -# CONFIG_PKG_USING_NES is not set -# CONFIG_PKG_USING_VIRTUAL_SENSOR is not set -# CONFIG_PKG_USING_VDEVICE is not set -# CONFIG_PKG_USING_SGM706 is not set -# CONFIG_PKG_USING_STM32WB55_SDK is not set -# CONFIG_PKG_USING_RDA58XX is not set -# CONFIG_PKG_USING_LIBNFC is not set -# CONFIG_PKG_USING_MFOC is not set -# CONFIG_PKG_USING_TMC51XX is not set -# CONFIG_PKG_USING_TCA9534 is not set -# CONFIG_PKG_USING_KOBUKI is not set -# CONFIG_PKG_USING_ROSSERIAL is not set -# CONFIG_PKG_USING_MICRO_ROS is not set -# CONFIG_PKG_USING_MCP23008 is not set -# CONFIG_PKG_USING_BLUETRUM_SDK is not set -# CONFIG_PKG_USING_MISAKA_AT24CXX is not set -# CONFIG_PKG_USING_MISAKA_RGB_BLING is not set -# CONFIG_PKG_USING_LORA_MODEM_DRIVER is not set -# CONFIG_PKG_USING_SOFT_SERIAL is not set -# CONFIG_PKG_USING_MB85RS16 is not set -# CONFIG_PKG_USING_RFM300 is not set -# CONFIG_PKG_USING_IO_INPUT_FILTER is not set -# CONFIG_PKG_USING_RASPBERRYPI_PICO_SDK is not set -# CONFIG_PKG_USING_LRF_NV7LIDAR is not set -# CONFIG_PKG_USING_FINGERPRINT is not set - -# -# AI packages -# -# CONFIG_PKG_USING_LIBANN is not set -# CONFIG_PKG_USING_NNOM is not set -# CONFIG_PKG_USING_ONNX_BACKEND is not set -# CONFIG_PKG_USING_ONNX_PARSER is not set -# CONFIG_PKG_USING_TENSORFLOWLITEMICRO is not set -# CONFIG_PKG_USING_ELAPACK is not set -# CONFIG_PKG_USING_ULAPACK is not set -# CONFIG_PKG_USING_QUEST is not set -# CONFIG_PKG_USING_NAXOS is not set - -# -# Signal Processing and Control Algorithm Packages -# -# CONFIG_PKG_USING_FIRE_PID_CURVE is not set -# CONFIG_PKG_USING_UKAL is not set - -# -# miscellaneous packages -# - -# -# project laboratory -# - -# -# samples: kernel and components samples -# -CONFIG_PKG_USING_KERNEL_SAMPLES=y -CONFIG_PKG_KERNEL_SAMPLES_PATH="/packages/misc/samples/kernel_samples" -# CONFIG_PKG_USING_KERNEL_SAMPLES_V030 is not set -# CONFIG_PKG_USING_KERNEL_SAMPLES_V040 is not set -CONFIG_PKG_USING_KERNEL_SAMPLES_LATEST_VERSION=y -CONFIG_PKG_KERNEL_SAMPLES_VER="latest" -CONFIG_PKG_USING_KERNEL_SAMPLES_EN=y -# CONFIG_PKG_USING_KERNEL_SAMPLES_ZH is not set -# CONFIG_KERNEL_SAMPLES_USING_THREAD is not set -# CONFIG_KERNEL_SAMPLES_USING_SEMAPHORE is not set -# CONFIG_KERNEL_SAMPLES_USING_MUTEX is not set -# CONFIG_KERNEL_SAMPLES_USING_MAILBOX is not set -# CONFIG_KERNEL_SAMPLES_USING_EVENT is not set -# CONFIG_KERNEL_SAMPLES_USING_MESSAGEQUEUE is not set -# CONFIG_KERNEL_SAMPLES_USING_TIMER is not set -# CONFIG_KERNEL_SAMPLES_USING_HEAP is not set -# CONFIG_KERNEL_SAMPLES_USING_MEMHEAP is not set -# CONFIG_KERNEL_SAMPLES_USING_MEMPOOL is not set -# CONFIG_KERNEL_SAMPLES_USING_IDLEHOOK is not set -# CONFIG_KERNEL_SAMPLES_USING_SIGNAL is not set -# CONFIG_KERNEL_SAMPLES_USING_INTERRUPT is not set -# CONFIG_KERNEL_SAMPLES_USING_PRI_INVERSION is not set -# CONFIG_KERNEL_SAMPLES_USING_TIME_SLICE is not set -# CONFIG_KERNEL_SAMPLES_USING_SCHEDULER_HOOK is not set -# CONFIG_KERNEL_SAMPLES_USING_PRODUCER_CONSUMER is not set -# CONFIG_PKG_USING_FILESYSTEM_SAMPLES is not set -# CONFIG_PKG_USING_NETWORK_SAMPLES is not set -# CONFIG_PKG_USING_PERIPHERAL_SAMPLES is not set - -# -# entertainment: terminal games and other interesting software packages -# -# CONFIG_PKG_USING_CMATRIX is not set -# CONFIG_PKG_USING_SL is not set -# CONFIG_PKG_USING_CAL is not set -# CONFIG_PKG_USING_ACLOCK is not set -# CONFIG_PKG_USING_THREES is not set -# CONFIG_PKG_USING_2048 is not set -# CONFIG_PKG_USING_SNAKE is not set -# CONFIG_PKG_USING_TETRIS is not set -# CONFIG_PKG_USING_DONUT is not set -# CONFIG_PKG_USING_COWSAY is not set -# CONFIG_PKG_USING_MORSE is not set -# CONFIG_PKG_USING_LIBCSV is not set -# CONFIG_PKG_USING_OPTPARSE is not set -# CONFIG_PKG_USING_FASTLZ is not set -# CONFIG_PKG_USING_MINILZO is not set -# CONFIG_PKG_USING_QUICKLZ is not set -# CONFIG_PKG_USING_LZMA is not set -# CONFIG_PKG_USING_MULTIBUTTON is not set -# CONFIG_PKG_USING_FLEXIBLE_BUTTON is not set -# CONFIG_PKG_USING_CANFESTIVAL is not set -# CONFIG_PKG_USING_ZLIB is not set -# CONFIG_PKG_USING_MINIZIP is not set -# CONFIG_PKG_USING_HEATSHRINK is not set -# CONFIG_PKG_USING_DSTR is not set -# CONFIG_PKG_USING_TINYFRAME is not set -# CONFIG_PKG_USING_KENDRYTE_DEMO is not set -# CONFIG_PKG_USING_DIGITALCTRL is not set -# CONFIG_PKG_USING_UPACKER is not set -# CONFIG_PKG_USING_UPARAM is not set -# CONFIG_PKG_USING_HELLO is not set -# CONFIG_PKG_USING_VI is not set -# CONFIG_PKG_USING_KI is not set -# CONFIG_PKG_USING_ARMv7M_DWT is not set -# CONFIG_PKG_USING_CRCLIB is not set -# CONFIG_PKG_USING_LWGPS is not set -# CONFIG_PKG_USING_STATE_MACHINE is not set -# CONFIG_PKG_USING_DESIGN_PATTERN is not set -# CONFIG_PKG_USING_CONTROLLER is not set -# CONFIG_PKG_USING_PHASE_LOCKED_LOOP is not set -# CONFIG_PKG_USING_MFBD is not set -# CONFIG_PKG_USING_SLCAN2RTT is not set -# CONFIG_PKG_USING_SOEM is not set -# CONFIG_PKG_USING_QPARAM is not set -# CONFIG_PKG_USING_CorevMCU_CLI is not set - -# -# Arduino libraries -# -# CONFIG_PKG_USING_RTDUINO is not set - -# -# Projects -# -# CONFIG_PKG_USING_ARDUINO_ULTRASOUND_RADAR is not set -# CONFIG_PKG_USING_ARDUINO_SENSOR_KIT is not set -# CONFIG_PKG_USING_ARDUINO_MATLAB_SUPPORT is not set - -# -# Sensors -# -# CONFIG_PKG_USING_ARDUINO_SENSOR_DEVICE_DRIVERS is not set -# CONFIG_PKG_USING_ARDUINO_CAPACITIVESENSOR is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADXL375 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL53L0X is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL53L1X is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SENSOR is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL6180X is not set -# CONFIG_PKG_USING_ADAFRUIT_MAX31855 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX31865 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX31856 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX6675 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90614 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM9DS1 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AHTX0 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM9DS0 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP280 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADT7410 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP085 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BME680 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP9808 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP4728 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_INA219 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LTR390 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADXL345 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DHT is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP9600 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM6DS is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BNO055 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX1704X is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MMC56X3 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90393 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90395 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ICM20X is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DPS310 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HTS221 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SHT4X is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SHT31 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADXL343 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BME280 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AS726X is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AMG88XX is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AM2320 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AM2315 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LTR329_LTR303 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP085_UNIFIED is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP183 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP183_UNIFIED is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP3XX is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MS8607 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS3MDL is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90640 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MMA8451 is not set -# CONFIG_PKG_USING_ADAFRUIT_MSA301 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPL115A2 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BNO08X is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BNO08X_RVC is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS2MDL is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM303DLH_MAG is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LC709203F is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_CAP1188 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_CCS811 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_NAU7802 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS331 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LPS2X is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LPS35HW is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM303_ACCEL is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS3DH is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCF8591 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPL3115A2 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPR121 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPRLS is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPU6050 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCT2075 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PM25AQI is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_EMC2101 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_FXAS21002C is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SCD30 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_FXOS8700 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HMC5883_UNIFIED is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SGP30 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TMP006 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TLA202X is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TCS34725 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI7021 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI1145 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SGP40 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SHTC3 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HDC1000 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HTU21DF is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AS7341 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HTU31D is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SENSORLAB is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_INA260 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TMP007_LIBRARY is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_L3GD20 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TMP117 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TSC2007 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TSL2561 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TSL2591_LIBRARY is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VCNL4040 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VEML6070 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VEML6075 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VEML7700 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_LIS3DHTR is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_DHT is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_ADXL335 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_ADXL345 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_BME280 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_BMP280 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_H3LIS331DL is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_MMA7660 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_TSL2561 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_PAJ7620 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_VL53L0X is not set -# CONFIG_PKG_USING_SEEED_ITG3200 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_SHT31 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_HP20X is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_DRV2605L is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_BBM150 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_HMC5883L is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_LSM303DLH is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_TCS3414CS is not set -# CONFIG_PKG_USING_SEEED_MP503 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_BMP085 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_HIGHTEMP is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_VEML6070 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_SI1145 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_SHT35 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_AT42QT1070 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_LSM6DS3 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_HDC1000 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_HM3301 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_MCP9600 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_LTC2941 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_LDC1612 is not set - -# -# Display -# -# CONFIG_PKG_USING_ARDUINO_U8G2 is not set -# CONFIG_PKG_USING_ARDUINO_U8GLIB_ARDUINO is not set -# CONFIG_PKG_USING_SEEED_TM1637 is not set - -# -# Timing -# -# CONFIG_PKG_USING_ARDUINO_MSTIMER2 is not set - -# -# Data Processing -# -# CONFIG_PKG_USING_ARDUINO_KALMANFILTER is not set -# CONFIG_PKG_USING_ARDUINO_ARDUINOJSON is not set - -# -# Data Storage -# - -# -# Communication -# -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PN532 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI4713 is not set - -# -# Device Control -# -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCF8574 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCA9685 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_PCF85063TP is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TPA2016 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DRV2605 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DS1841 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DS3502 is not set - -# -# Other -# -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MFRC630 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI5351 is not set -# CONFIG_PKG_USING_ARDUINO_RTCLIB is not set - -# -# Signal IO -# -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BUSIO is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TCA8418 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP23017 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADS1X15 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AW9523 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP3008 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP4725 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BD3491FS is not set - -# -# Uncategorized -# - -# -# Hardware Drivers -# - -# -# On-chip Peripheral Drivers -# -CONFIG_BSP_USING_UART=y -CONFIG_RT_USING_UART1=y -# CONFIG_RT_USING_UART0 is not set -# CONFIG_BSP_USING_SPI is not set -# CONFIG_BSP_USING_CAN is not set -# CONFIG_BSP_USING_GPIO is not set -# CONFIG_BSP_USING_QSPI is not set -CONFIG_BSP_USING_ETH=y -CONFIG_RT_LWIP_PBUF_POOL_BUFSIZE=1700 -CONFIG_BSP_USING_SDIO=y -CONFIG_BSP_USING_SDCARD_FATFS=y -# CONFIG_USING_SDIO0 is not set -CONFIG_USING_SDIO1=y -# CONFIG_USING_EMMC is not set - -# -# Board extended module Drivers -# -CONFIG_BSP_USING_GIC=y -CONFIG_BSP_USING_GICV3=y -CONFIG_PHYTIUM_ARCH_AARCH64=y -CONFIG_ARM_SPI_BIND_CPU_ID=2 - -# -# Standalone Setting -# -CONFIG_TARGET_ARMV8_AARCH64=y - -# -# Board Configuration -# -# CONFIG_TARGET_F2000_4 is not set -# CONFIG_TARGET_D2000 is not set -CONFIG_TARGET_E2000Q=y -# CONFIG_TARGET_E2000D is not set -# CONFIG_TARGET_E2000S is not set -CONFIG_TARGET_E2000=y -CONFIG_DEFAULT_DEBUG_PRINT_UART1=y -# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set -# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set - -# -# Components Configuration -# -CONFIG_USE_SPI=y -CONFIG_USE_FSPIM=y -CONFIG_USE_QSPI=y - -# -# Qspi Configuration -# -CONFIG_USE_FQSPI=y -# CONFIG_USE_GIC is not set -CONFIG_USE_IOPAD=y -CONFIG_ENABLE_IOPAD=y -CONFIG_USE_SERIAL=y - -# -# Usart Configuration -# -CONFIG_ENABLE_Pl011_UART=y -# CONFIG_USE_GPIO is not set -CONFIG_USE_ETH=y - -# -# Eth Configuration -# -CONFIG_ENABLE_FXMAC=y -# CONFIG_ENABLE_FGMAC is not set -CONFIG_FXMAC_PHY_COMMON=y -# CONFIG_FXMAC_PHY_YT is not set -# CONFIG_USE_CAN is not set -# CONFIG_USE_I2C is not set -# CONFIG_USE_TIMER is not set -# CONFIG_USE_MIO is not set -# CONFIG_USE_SDMMC is not set -# CONFIG_USE_PCIE is not set -# CONFIG_USE_WDT is not set -# CONFIG_USE_DMA is not set -# CONFIG_USE_NAND is not set -# CONFIG_USE_RTC is not set -# CONFIG_USE_SATA is not set -# CONFIG_USE_USB is not set -# CONFIG_USE_ADC is not set -# CONFIG_USE_PWM is not set -# CONFIG_USE_IPC is not set -# CONFIG_USE_MEDIA is not set -# CONFIG_USE_SCMI_MHU is not set -# CONFIG_LOG_VERBOS is not set -# CONFIG_LOG_DEBUG is not set -# CONFIG_LOG_INFO is not set -# CONFIG_LOG_WARN is not set -CONFIG_LOG_ERROR=y -# CONFIG_LOG_NONE is not set -# CONFIG_USE_DEFAULT_INTERRUPT_CONFIG is not set -# CONFIG_LOG_EXTRA_INFO is not set -# CONFIG_LOG_DISPALY_CORE_NUM is not set -# CONFIG_BOOTUP_DEBUG_PRINTS is not set -CONFIG_PHYTIUM_RTT_TEST=y -# CONFIG_ENABLE_RTT_UTEST is not set -# CONFIG_ENABLE_KERNEL_TEST is not set -# CONFIG_ENABLE_KERNEL_SAMPLE is not set -# CONFIG_ENABLE_COREMARK is not set -# CONFIG_ENABLE_DHRYSTONE is not set diff --git a/bsp/phytium/aarch64/configs/e2000q_rtthread b/bsp/phytium/aarch64/configs/e2000q_rtthread deleted file mode 100644 index 7c92990347..0000000000 --- a/bsp/phytium/aarch64/configs/e2000q_rtthread +++ /dev/null @@ -1,1257 +0,0 @@ -# -# Automatically generated file; DO NOT EDIT. -# RT-Thread Project Configuration -# - -# -# RT-Thread Kernel -# -CONFIG_RT_NAME_MAX=16 -# CONFIG_RT_USING_ARCH_DATA_TYPE is not set -# CONFIG_RT_USING_SMART is not set -CONFIG_RT_USING_SMP=y -CONFIG_RT_CPUS_NR=2 -CONFIG_RT_ALIGN_SIZE=4 -# CONFIG_RT_THREAD_PRIORITY_8 is not set -CONFIG_RT_THREAD_PRIORITY_32=y -# CONFIG_RT_THREAD_PRIORITY_256 is not set -CONFIG_RT_THREAD_PRIORITY_MAX=32 -CONFIG_RT_TICK_PER_SECOND=1000 -CONFIG_RT_USING_OVERFLOW_CHECK=y -CONFIG_RT_USING_HOOK=y -CONFIG_RT_HOOK_USING_FUNC_PTR=y -CONFIG_RT_USING_IDLE_HOOK=y -CONFIG_RT_IDLE_HOOK_LIST_SIZE=4 -CONFIG_IDLE_THREAD_STACK_SIZE=40960 -CONFIG_SYSTEM_THREAD_STACK_SIZE=40960 -CONFIG_RT_USING_TIMER_SOFT=y -CONFIG_RT_TIMER_THREAD_PRIO=4 -CONFIG_RT_TIMER_THREAD_STACK_SIZE=4096 - -# -# kservice optimization -# -CONFIG_RT_KSERVICE_USING_STDLIB=y -# CONFIG_RT_KSERVICE_USING_STDLIB_MEMORY is not set -# CONFIG_RT_KSERVICE_USING_TINY_SIZE is not set -# CONFIG_RT_USING_TINY_FFS is not set -CONFIG_RT_KPRINTF_USING_LONGLONG=y -CONFIG_RT_DEBUG=y -# CONFIG_RT_DEBUG_COLOR is not set -# CONFIG_RT_DEBUG_INIT_CONFIG is not set -# CONFIG_RT_DEBUG_THREAD_CONFIG is not set -# CONFIG_RT_DEBUG_SCHEDULER_CONFIG is not set -# CONFIG_RT_DEBUG_IPC_CONFIG is not set -# CONFIG_RT_DEBUG_TIMER_CONFIG is not set -# CONFIG_RT_DEBUG_IRQ_CONFIG is not set -# CONFIG_RT_DEBUG_MEM_CONFIG is not set -# CONFIG_RT_DEBUG_SLAB_CONFIG is not set -# CONFIG_RT_DEBUG_MEMHEAP_CONFIG is not set -# CONFIG_RT_DEBUG_PAGE_LEAK is not set -# CONFIG_RT_DEBUG_MODULE_CONFIG is not set - -# -# Inter-Thread communication -# -CONFIG_RT_USING_SEMAPHORE=y -CONFIG_RT_USING_MUTEX=y -CONFIG_RT_USING_EVENT=y -CONFIG_RT_USING_MAILBOX=y -CONFIG_RT_USING_MESSAGEQUEUE=y -# CONFIG_RT_USING_SIGNALS is not set - -# -# Memory Management -# -CONFIG_RT_PAGE_MAX_ORDER=16 -# CONFIG_RT_USING_MEMPOOL is not set -# CONFIG_RT_USING_SMALL_MEM is not set -CONFIG_RT_USING_SLAB=y -CONFIG_RT_USING_MEMHEAP=y -CONFIG_RT_MEMHEAP_FAST_MODE=y -# CONFIG_RT_MEMHEAP_BEST_MODE is not set -# CONFIG_RT_USING_SMALL_MEM_AS_HEAP is not set -# CONFIG_RT_USING_MEMHEAP_AS_HEAP is not set -CONFIG_RT_USING_SLAB_AS_HEAP=y -# CONFIG_RT_USING_USERHEAP is not set -# CONFIG_RT_USING_NOHEAP is not set -# CONFIG_RT_USING_MEMTRACE is not set -CONFIG_RT_USING_HEAP_ISR=y -CONFIG_RT_USING_HEAP=y - -# -# Kernel Device Object -# -CONFIG_RT_USING_DEVICE=y -# CONFIG_RT_USING_DEVICE_OPS is not set -# CONFIG_RT_USING_DM is not set -# CONFIG_RT_USING_INTERRUPT_INFO is not set -CONFIG_RT_USING_CONSOLE=y -CONFIG_RT_CONSOLEBUF_SIZE=128 -CONFIG_RT_CONSOLE_DEVICE_NAME="uart1" -CONFIG_RT_VER_NUM=0x50001 -# CONFIG_RT_USING_STDC_ATOMIC is not set -CONFIG_ARCH_CPU_64BIT=y -CONFIG_RT_USING_CACHE=y -# CONFIG_RT_USING_HW_ATOMIC is not set -CONFIG_ARCH_ARM_BOOTWITH_FLUSH_CACHE=y -# CONFIG_ARCH_CPU_STACK_GROWS_UPWARD is not set -# CONFIG_RT_USING_CPU_FFS is not set -CONFIG_ARCH_MM_MMU=y -CONFIG_ARCH_ARM=y -CONFIG_ARCH_ARM_MMU=y -CONFIG_ARCH_ARMV8=y - -# -# RT-Thread Components -# -CONFIG_RT_USING_COMPONENTS_INIT=y -CONFIG_RT_USING_USER_MAIN=y -CONFIG_RT_MAIN_THREAD_STACK_SIZE=8192 -CONFIG_RT_MAIN_THREAD_PRIORITY=10 -# CONFIG_RT_USING_LEGACY is not set -CONFIG_RT_USING_MSH=y -CONFIG_RT_USING_FINSH=y -CONFIG_FINSH_USING_MSH=y -CONFIG_FINSH_THREAD_NAME="tshell" -CONFIG_FINSH_THREAD_PRIORITY=20 -CONFIG_FINSH_THREAD_STACK_SIZE=4096 -CONFIG_FINSH_USING_HISTORY=y -CONFIG_FINSH_HISTORY_LINES=5 -CONFIG_FINSH_USING_SYMTAB=y -CONFIG_FINSH_CMD_SIZE=80 -CONFIG_MSH_USING_BUILT_IN_COMMANDS=y -CONFIG_FINSH_USING_DESCRIPTION=y -# CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set -# CONFIG_FINSH_USING_AUTH is not set -CONFIG_FINSH_ARG_MAX=10 - -# -# DFS: device virtual file system -# -CONFIG_RT_USING_DFS=y -CONFIG_DFS_USING_POSIX=y -CONFIG_DFS_USING_WORKDIR=y -# CONFIG_RT_USING_DFS_MNTTABLE is not set -CONFIG_DFS_FD_MAX=16 -CONFIG_RT_USING_DFS_V1=y -# CONFIG_RT_USING_DFS_V2 is not set -CONFIG_DFS_FILESYSTEMS_MAX=4 -CONFIG_DFS_FILESYSTEM_TYPES_MAX=4 -CONFIG_RT_USING_DFS_ELMFAT=y - -# -# elm-chan's FatFs, Generic FAT Filesystem Module -# -CONFIG_RT_DFS_ELM_CODE_PAGE=437 -CONFIG_RT_DFS_ELM_WORD_ACCESS=y -# CONFIG_RT_DFS_ELM_USE_LFN_0 is not set -# CONFIG_RT_DFS_ELM_USE_LFN_1 is not set -# CONFIG_RT_DFS_ELM_USE_LFN_2 is not set -CONFIG_RT_DFS_ELM_USE_LFN_3=y -CONFIG_RT_DFS_ELM_USE_LFN=3 -CONFIG_RT_DFS_ELM_LFN_UNICODE_0=y -# CONFIG_RT_DFS_ELM_LFN_UNICODE_1 is not set -# CONFIG_RT_DFS_ELM_LFN_UNICODE_2 is not set -# CONFIG_RT_DFS_ELM_LFN_UNICODE_3 is not set -CONFIG_RT_DFS_ELM_LFN_UNICODE=0 -CONFIG_RT_DFS_ELM_MAX_LFN=255 -CONFIG_RT_DFS_ELM_DRIVES=2 -CONFIG_RT_DFS_ELM_MAX_SECTOR_SIZE=512 -# CONFIG_RT_DFS_ELM_USE_ERASE is not set -CONFIG_RT_DFS_ELM_REENTRANT=y -CONFIG_RT_DFS_ELM_MUTEX_TIMEOUT=3000 -CONFIG_RT_USING_DFS_DEVFS=y -# CONFIG_RT_USING_DFS_ROMFS is not set -# CONFIG_RT_USING_DFS_CROMFS is not set -CONFIG_RT_USING_DFS_RAMFS=y -# CONFIG_RT_USING_DFS_TMPFS is not set -# CONFIG_RT_USING_DFS_NFS is not set -# CONFIG_RT_USING_FAL is not set - -# -# Device Drivers -# -CONFIG_RT_USING_DEVICE_IPC=y -CONFIG_RT_UNAMED_PIPE_NUMBER=64 -CONFIG_RT_USING_SYSTEM_WORKQUEUE=y -CONFIG_RT_SYSTEM_WORKQUEUE_STACKSIZE=8192 -CONFIG_RT_SYSTEM_WORKQUEUE_PRIORITY=23 -CONFIG_RT_USING_SERIAL=y -CONFIG_RT_USING_SERIAL_V1=y -# CONFIG_RT_USING_SERIAL_V2 is not set -CONFIG_RT_SERIAL_USING_DMA=y -CONFIG_RT_SERIAL_RB_BUFSZ=64 -# CONFIG_RT_USING_CAN is not set -# CONFIG_RT_USING_HWTIMER is not set -# CONFIG_RT_USING_CPUTIME is not set -# CONFIG_RT_USING_I2C is not set -# CONFIG_RT_USING_PHY is not set -# CONFIG_RT_USING_PIN is not set -# CONFIG_RT_USING_ADC is not set -# CONFIG_RT_USING_DAC is not set -CONFIG_RT_USING_NULL=y -CONFIG_RT_USING_ZERO=y -CONFIG_RT_USING_RANDOM=y -# CONFIG_RT_USING_PWM is not set -# CONFIG_RT_USING_MTD_NOR is not set -# CONFIG_RT_USING_MTD_NAND is not set -# CONFIG_RT_USING_PM is not set -# CONFIG_RT_USING_FDT is not set -CONFIG_RT_USING_RTC=y -# CONFIG_RT_USING_ALARM is not set -# CONFIG_RT_USING_SOFT_RTC is not set -# CONFIG_RT_USING_SDIO is not set -# CONFIG_RT_USING_SPI is not set -# CONFIG_RT_USING_WDT is not set -# CONFIG_RT_USING_AUDIO is not set -# CONFIG_RT_USING_SENSOR is not set -# CONFIG_RT_USING_TOUCH is not set -# CONFIG_RT_USING_LCD is not set -# CONFIG_RT_USING_HWCRYPTO is not set -# CONFIG_RT_USING_PULSE_ENCODER is not set -# CONFIG_RT_USING_INPUT_CAPTURE is not set -# CONFIG_RT_USING_DEV_BUS is not set -# CONFIG_RT_USING_WIFI is not set -# CONFIG_RT_USING_VIRTIO is not set - -# -# Using USB -# -# CONFIG_RT_USING_USB is not set -# CONFIG_RT_USING_USB_HOST is not set -# CONFIG_RT_USING_USB_DEVICE is not set - -# -# C/C++ and POSIX layer -# -CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8 - -# -# POSIX (Portable Operating System Interface) layer -# -CONFIG_RT_USING_POSIX_FS=y -CONFIG_RT_USING_POSIX_DEVIO=y -CONFIG_RT_USING_POSIX_STDIO=y -# CONFIG_RT_USING_POSIX_POLL is not set -# CONFIG_RT_USING_POSIX_SELECT is not set -# CONFIG_RT_USING_POSIX_SOCKET is not set -CONFIG_RT_USING_POSIX_TERMIOS=y -# CONFIG_RT_USING_POSIX_AIO is not set -# CONFIG_RT_USING_POSIX_MMAN is not set -CONFIG_RT_USING_POSIX_DELAY=y -CONFIG_RT_USING_POSIX_CLOCK=y -CONFIG_RT_USING_POSIX_TIMER=y -# CONFIG_RT_USING_PTHREADS is not set -# CONFIG_RT_USING_MODULE is not set - -# -# Interprocess Communication (IPC) -# -# CONFIG_RT_USING_POSIX_PIPE is not set -# CONFIG_RT_USING_POSIX_MESSAGE_QUEUE is not set -# CONFIG_RT_USING_POSIX_MESSAGE_SEMAPHORE is not set - -# -# Socket is in the 'Network' category -# -# CONFIG_RT_USING_CPLUSPLUS is not set - -# -# Network -# -CONFIG_RT_USING_SAL=y -CONFIG_SAL_INTERNET_CHECK=y - -# -# Docking with protocol stacks -# -CONFIG_SAL_USING_LWIP=y -# CONFIG_SAL_USING_AT is not set -# CONFIG_SAL_USING_TLS is not set -CONFIG_SAL_USING_POSIX=y -# CONFIG_SAL_USING_AF_UNIX is not set -CONFIG_RT_USING_NETDEV=y -CONFIG_NETDEV_USING_IFCONFIG=y -CONFIG_NETDEV_USING_PING=y -CONFIG_NETDEV_USING_NETSTAT=y -CONFIG_NETDEV_USING_AUTO_DEFAULT=y -# CONFIG_NETDEV_USING_IPV6 is not set -CONFIG_NETDEV_IPV4=1 -CONFIG_NETDEV_IPV6=0 -# CONFIG_NETDEV_IPV6_SCOPES is not set -CONFIG_RT_USING_LWIP=y -# CONFIG_RT_USING_LWIP_LOCAL_VERSION is not set -# CONFIG_RT_USING_LWIP141 is not set -# CONFIG_RT_USING_LWIP203 is not set -CONFIG_RT_USING_LWIP212=y -# CONFIG_RT_USING_LWIP_LATEST is not set -CONFIG_RT_USING_LWIP_VER_NUM=0x20102 -# CONFIG_RT_USING_LWIP_IPV6 is not set -CONFIG_RT_LWIP_MEM_ALIGNMENT=64 -CONFIG_RT_LWIP_IGMP=y -CONFIG_RT_LWIP_ICMP=y -# CONFIG_RT_LWIP_SNMP is not set -CONFIG_RT_LWIP_DNS=y -# CONFIG_RT_LWIP_DHCP is not set - -# -# Static IPv4 Address -# -CONFIG_RT_LWIP_IPADDR="192.168.4.10" -CONFIG_RT_LWIP_GWADDR="192.168.4.1" -CONFIG_RT_LWIP_MSKADDR="255.255.255.0" -CONFIG_RT_LWIP_UDP=y -CONFIG_RT_LWIP_TCP=y -CONFIG_RT_LWIP_RAW=y -# CONFIG_RT_LWIP_PPP is not set -CONFIG_RT_MEMP_NUM_NETCONN=8 -CONFIG_RT_LWIP_PBUF_NUM=512 -CONFIG_RT_LWIP_RAW_PCB_NUM=4 -CONFIG_RT_LWIP_UDP_PCB_NUM=4 -CONFIG_RT_LWIP_TCP_PCB_NUM=4 -CONFIG_RT_LWIP_TCP_SEG_NUM=40 -CONFIG_RT_LWIP_TCP_SND_BUF=8196 -CONFIG_RT_LWIP_TCP_WND=8196 -CONFIG_RT_LWIP_TCPTHREAD_PRIORITY=12 -CONFIG_RT_LWIP_TCPTHREAD_MBOX_SIZE=8 -CONFIG_RT_LWIP_TCPTHREAD_STACKSIZE=16184 -# CONFIG_LWIP_NO_RX_THREAD is not set -# CONFIG_LWIP_NO_TX_THREAD is not set -CONFIG_RT_LWIP_ETHTHREAD_PRIORITY=12 -CONFIG_RT_LWIP_ETHTHREAD_STACKSIZE=2048 -CONFIG_RT_LWIP_ETHTHREAD_MBOX_SIZE=8 -# CONFIG_RT_LWIP_REASSEMBLY_FRAG is not set -CONFIG_LWIP_NETIF_STATUS_CALLBACK=1 -CONFIG_LWIP_NETIF_LINK_CALLBACK=1 -CONFIG_SO_REUSE=1 -CONFIG_LWIP_SO_RCVTIMEO=1 -CONFIG_LWIP_SO_SNDTIMEO=1 -CONFIG_LWIP_SO_RCVBUF=1 -CONFIG_LWIP_SO_LINGER=0 -# CONFIG_RT_LWIP_NETIF_LOOPBACK is not set -CONFIG_LWIP_NETIF_LOOPBACK=0 -# CONFIG_RT_LWIP_STATS is not set -# CONFIG_RT_LWIP_USING_HW_CHECKSUM is not set -CONFIG_RT_LWIP_USING_PING=y -# CONFIG_LWIP_USING_DHCPD is not set -CONFIG_RT_LWIP_DEBUG=y -# CONFIG_RT_LWIP_SYS_DEBUG is not set -# CONFIG_RT_LWIP_ETHARP_DEBUG is not set -# CONFIG_RT_LWIP_PPP_DEBUG is not set -# CONFIG_RT_LWIP_MEM_DEBUG is not set -# CONFIG_RT_LWIP_MEMP_DEBUG is not set -# CONFIG_RT_LWIP_PBUF_DEBUG is not set -# CONFIG_RT_LWIP_API_LIB_DEBUG is not set -# CONFIG_RT_LWIP_API_MSG_DEBUG is not set -# CONFIG_RT_LWIP_TCPIP_DEBUG is not set -CONFIG_RT_LWIP_NETIF_DEBUG=y -# CONFIG_RT_LWIP_SOCKETS_DEBUG is not set -# CONFIG_RT_LWIP_DNS_DEBUG is not set -# CONFIG_RT_LWIP_AUTOIP_DEBUG is not set -# CONFIG_RT_LWIP_DHCP_DEBUG is not set -# CONFIG_RT_LWIP_IP_DEBUG is not set -# CONFIG_RT_LWIP_IP_REASS_DEBUG is not set -# CONFIG_RT_LWIP_ICMP_DEBUG is not set -# CONFIG_RT_LWIP_IGMP_DEBUG is not set -# CONFIG_RT_LWIP_UDP_DEBUG is not set -# CONFIG_RT_LWIP_TCP_DEBUG is not set -# CONFIG_RT_LWIP_TCP_INPUT_DEBUG is not set -# CONFIG_RT_LWIP_TCP_OUTPUT_DEBUG is not set -# CONFIG_RT_LWIP_TCP_RTO_DEBUG is not set -# CONFIG_RT_LWIP_TCP_CWND_DEBUG is not set -# CONFIG_RT_LWIP_TCP_WND_DEBUG is not set -# CONFIG_RT_LWIP_TCP_FR_DEBUG is not set -# CONFIG_RT_LWIP_TCP_QLEN_DEBUG is not set -# CONFIG_RT_LWIP_TCP_RST_DEBUG is not set -# CONFIG_RT_USING_AT is not set - -# -# Utilities -# -CONFIG_RT_USING_RYM=y -# CONFIG_YMODEM_USING_CRC_TABLE is not set -CONFIG_YMODEM_USING_FILE_TRANSFER=y -# CONFIG_RT_USING_ULOG is not set -# CONFIG_RT_USING_UTEST is not set -# CONFIG_RT_USING_VAR_EXPORT is not set -CONFIG_RT_USING_ADT=y -# CONFIG_RT_USING_RT_LINK is not set -# CONFIG_RT_USING_VBUS is not set - -# -# RT-Thread Utestcases -# -# CONFIG_RT_USING_UTESTCASES is not set - -# -# RT-Thread online packages -# - -# -# IoT - internet of things -# -# CONFIG_PKG_USING_LWIP is not set -# CONFIG_PKG_USING_LORAWAN_DRIVER is not set -# CONFIG_PKG_USING_PAHOMQTT is not set -# CONFIG_PKG_USING_UMQTT is not set -# CONFIG_PKG_USING_WEBCLIENT is not set -# CONFIG_PKG_USING_WEBNET is not set -# CONFIG_PKG_USING_MONGOOSE is not set -# CONFIG_PKG_USING_MYMQTT is not set -# CONFIG_PKG_USING_KAWAII_MQTT is not set -# CONFIG_PKG_USING_BC28_MQTT is not set -# CONFIG_PKG_USING_WEBTERMINAL is not set -# CONFIG_PKG_USING_LIBMODBUS is not set -# CONFIG_PKG_USING_FREEMODBUS is not set -# CONFIG_PKG_USING_NANOPB is not set - -# -# Wi-Fi -# - -# -# Marvell WiFi -# -# CONFIG_PKG_USING_WLANMARVELL is not set - -# -# Wiced WiFi -# -# CONFIG_PKG_USING_WLAN_WICED is not set -# CONFIG_PKG_USING_RW007 is not set -# CONFIG_PKG_USING_COAP is not set -# CONFIG_PKG_USING_NOPOLL is not set -# CONFIG_PKG_USING_NETUTILS is not set -# CONFIG_PKG_USING_CMUX is not set -# CONFIG_PKG_USING_PPP_DEVICE is not set -# CONFIG_PKG_USING_AT_DEVICE is not set -# CONFIG_PKG_USING_ATSRV_SOCKET is not set -# CONFIG_PKG_USING_WIZNET is not set -# CONFIG_PKG_USING_ZB_COORDINATOR is not set - -# -# IoT Cloud -# -# CONFIG_PKG_USING_ONENET is not set -# CONFIG_PKG_USING_GAGENT_CLOUD is not set -# CONFIG_PKG_USING_ALI_IOTKIT is not set -# CONFIG_PKG_USING_AZURE is not set -# CONFIG_PKG_USING_TENCENT_IOT_EXPLORER is not set -# CONFIG_PKG_USING_JIOT-C-SDK is not set -# CONFIG_PKG_USING_UCLOUD_IOT_SDK is not set -# CONFIG_PKG_USING_JOYLINK is not set -# CONFIG_PKG_USING_EZ_IOT_OS is not set -# CONFIG_PKG_USING_IOTSHARP_SDK is not set -# CONFIG_PKG_USING_NIMBLE is not set -# CONFIG_PKG_USING_LLSYNC_SDK_ADAPTER is not set -# CONFIG_PKG_USING_OTA_DOWNLOADER is not set -# CONFIG_PKG_USING_IPMSG is not set -# CONFIG_PKG_USING_LSSDP is not set -# CONFIG_PKG_USING_AIRKISS_OPEN is not set -# CONFIG_PKG_USING_LIBRWS is not set -# CONFIG_PKG_USING_TCPSERVER is not set -# CONFIG_PKG_USING_PROTOBUF_C is not set -# CONFIG_PKG_USING_DLT645 is not set -# CONFIG_PKG_USING_QXWZ is not set -# CONFIG_PKG_USING_SMTP_CLIENT is not set -# CONFIG_PKG_USING_ABUP_FOTA is not set -# CONFIG_PKG_USING_LIBCURL2RTT is not set -# CONFIG_PKG_USING_CAPNP is not set -# CONFIG_PKG_USING_AGILE_TELNET is not set -# CONFIG_PKG_USING_NMEALIB is not set -# CONFIG_PKG_USING_PDULIB is not set -# CONFIG_PKG_USING_BTSTACK is not set -# CONFIG_PKG_USING_LORAWAN_ED_STACK is not set -# CONFIG_PKG_USING_WAYZ_IOTKIT is not set -# CONFIG_PKG_USING_MAVLINK is not set -# CONFIG_PKG_USING_BSAL is not set -# CONFIG_PKG_USING_AGILE_MODBUS is not set -# CONFIG_PKG_USING_AGILE_FTP is not set -# CONFIG_PKG_USING_EMBEDDEDPROTO is not set -# CONFIG_PKG_USING_RT_LINK_HW is not set -# CONFIG_PKG_USING_RYANMQTT is not set -# CONFIG_PKG_USING_RYANW5500 is not set -# CONFIG_PKG_USING_LORA_PKT_FWD is not set -# CONFIG_PKG_USING_LORA_GW_DRIVER_LIB is not set -# CONFIG_PKG_USING_LORA_PKT_SNIFFER is not set -# CONFIG_PKG_USING_HM is not set -# CONFIG_PKG_USING_SMALL_MODBUS is not set -# CONFIG_PKG_USING_NET_SERVER is not set -# CONFIG_PKG_USING_ZFTP is not set -# CONFIG_PKG_USING_WOL is not set -# CONFIG_PKG_USING_ZEPHYR_POLLING is not set - -# -# security packages -# -# CONFIG_PKG_USING_MBEDTLS is not set -# CONFIG_PKG_USING_LIBSODIUM is not set -# CONFIG_PKG_USING_LIBHYDROGEN is not set -# CONFIG_PKG_USING_TINYCRYPT is not set -# CONFIG_PKG_USING_TFM is not set -# CONFIG_PKG_USING_YD_CRYPTO is not set - -# -# language packages -# - -# -# JSON: JavaScript Object Notation, a lightweight data-interchange format -# -# CONFIG_PKG_USING_CJSON is not set -# CONFIG_PKG_USING_LJSON is not set -# CONFIG_PKG_USING_RT_CJSON_TOOLS is not set -# CONFIG_PKG_USING_RAPIDJSON is not set -# CONFIG_PKG_USING_JSMN is not set -# CONFIG_PKG_USING_AGILE_JSMN is not set -# CONFIG_PKG_USING_PARSON is not set - -# -# XML: Extensible Markup Language -# -# CONFIG_PKG_USING_SIMPLE_XML is not set -# CONFIG_PKG_USING_EZXML is not set -# CONFIG_PKG_USING_LUATOS_SOC is not set -# CONFIG_PKG_USING_LUA is not set -# CONFIG_PKG_USING_JERRYSCRIPT is not set -# CONFIG_PKG_USING_MICROPYTHON is not set -# CONFIG_PKG_USING_PIKASCRIPT is not set -# CONFIG_PKG_USING_RTT_RUST is not set - -# -# multimedia packages -# - -# -# LVGL: powerful and easy-to-use embedded GUI library -# -# CONFIG_PKG_USING_LVGL is not set -# CONFIG_PKG_USING_LITTLEVGL2RTT is not set -# CONFIG_PKG_USING_LV_MUSIC_DEMO is not set -# CONFIG_PKG_USING_GUI_GUIDER_DEMO is not set - -# -# u8g2: a monochrome graphic library -# -# CONFIG_PKG_USING_U8G2_OFFICIAL is not set -# CONFIG_PKG_USING_U8G2 is not set -# CONFIG_PKG_USING_OPENMV is not set -# CONFIG_PKG_USING_MUPDF is not set -# CONFIG_PKG_USING_STEMWIN is not set -# CONFIG_PKG_USING_WAVPLAYER is not set -# CONFIG_PKG_USING_TJPGD is not set -# CONFIG_PKG_USING_PDFGEN is not set -# CONFIG_PKG_USING_HELIX is not set -# CONFIG_PKG_USING_AZUREGUIX is not set -# CONFIG_PKG_USING_TOUCHGFX2RTT is not set -# CONFIG_PKG_USING_NUEMWIN is not set -# CONFIG_PKG_USING_MP3PLAYER is not set -# CONFIG_PKG_USING_TINYJPEG is not set -# CONFIG_PKG_USING_UGUI is not set -# CONFIG_PKG_USING_MCURSES is not set -# CONFIG_PKG_USING_TERMBOX is not set -# CONFIG_PKG_USING_VT100 is not set -# CONFIG_PKG_USING_QRCODE is not set -# CONFIG_PKG_USING_GUIENGINE is not set -# CONFIG_PKG_USING_3GPP_AMRNB is not set - -# -# tools packages -# -# CONFIG_PKG_USING_CMBACKTRACE is not set -# CONFIG_PKG_USING_EASYFLASH is not set -# CONFIG_PKG_USING_EASYLOGGER is not set -# CONFIG_PKG_USING_SYSTEMVIEW is not set -# CONFIG_PKG_USING_SEGGER_RTT is not set -# CONFIG_PKG_USING_RTT_AUTO_EXE_CMD is not set -# CONFIG_PKG_USING_RDB is not set -# CONFIG_PKG_USING_ULOG_EASYFLASH is not set -# CONFIG_PKG_USING_LOGMGR is not set -# CONFIG_PKG_USING_ADBD is not set -# CONFIG_PKG_USING_COREMARK is not set -# CONFIG_PKG_USING_DHRYSTONE is not set -# CONFIG_PKG_USING_MEMORYPERF is not set -# CONFIG_PKG_USING_NR_MICRO_SHELL is not set -# CONFIG_PKG_USING_CHINESE_FONT_LIBRARY is not set -# CONFIG_PKG_USING_LUNAR_CALENDAR is not set -# CONFIG_PKG_USING_BS8116A is not set -# CONFIG_PKG_USING_GPS_RMC is not set -# CONFIG_PKG_USING_URLENCODE is not set -# CONFIG_PKG_USING_UMCN is not set -# CONFIG_PKG_USING_LWRB2RTT is not set -# CONFIG_PKG_USING_CPU_USAGE is not set -# CONFIG_PKG_USING_GBK2UTF8 is not set -# CONFIG_PKG_USING_VCONSOLE is not set -# CONFIG_PKG_USING_KDB is not set -# CONFIG_PKG_USING_WAMR is not set -# CONFIG_PKG_USING_MICRO_XRCE_DDS_CLIENT is not set -# CONFIG_PKG_USING_LWLOG is not set -# CONFIG_PKG_USING_ANV_TRACE is not set -# CONFIG_PKG_USING_ANV_MEMLEAK is not set -# CONFIG_PKG_USING_ANV_TESTSUIT is not set -# CONFIG_PKG_USING_ANV_BENCH is not set -# CONFIG_PKG_USING_DEVMEM is not set -# CONFIG_PKG_USING_REGEX is not set -# CONFIG_PKG_USING_MEM_SANDBOX is not set -# CONFIG_PKG_USING_SOLAR_TERMS is not set -# CONFIG_PKG_USING_GAN_ZHI is not set -# CONFIG_PKG_USING_FDT is not set -# CONFIG_PKG_USING_CBOX is not set -# CONFIG_PKG_USING_SNOWFLAKE is not set -# CONFIG_PKG_USING_HASH_MATCH is not set -# CONFIG_PKG_USING_ARMV7M_DWT_TOOL is not set -# CONFIG_PKG_USING_VOFA_PLUS is not set - -# -# system packages -# - -# -# enhanced kernel services -# -# CONFIG_PKG_USING_RT_MEMCPY_CM is not set -# CONFIG_PKG_USING_RT_KPRINTF_THREADSAFE is not set -# CONFIG_PKG_USING_RT_VSNPRINTF_FULL is not set - -# -# acceleration: Assembly language or algorithmic acceleration packages -# -# CONFIG_PKG_USING_QFPLIB_M0_FULL is not set -# CONFIG_PKG_USING_QFPLIB_M0_TINY is not set -# CONFIG_PKG_USING_QFPLIB_M3 is not set - -# -# CMSIS: ARM Cortex-M Microcontroller Software Interface Standard -# -# CONFIG_PKG_USING_CMSIS_5 is not set -# CONFIG_PKG_USING_CMSIS_RTOS1 is not set -# CONFIG_PKG_USING_CMSIS_RTOS2 is not set - -# -# Micrium: Micrium software products porting for RT-Thread -# -# CONFIG_PKG_USING_UCOSIII_WRAPPER is not set -# CONFIG_PKG_USING_UCOSII_WRAPPER is not set -# CONFIG_PKG_USING_UC_CRC is not set -# CONFIG_PKG_USING_UC_CLK is not set -# CONFIG_PKG_USING_UC_COMMON is not set -# CONFIG_PKG_USING_UC_MODBUS is not set -# CONFIG_PKG_USING_FREERTOS_WRAPPER is not set -# CONFIG_PKG_USING_CAIRO is not set -# CONFIG_PKG_USING_PIXMAN is not set -# CONFIG_PKG_USING_PARTITION is not set -# CONFIG_PKG_USING_PERF_COUNTER is not set -# CONFIG_PKG_USING_FLASHDB is not set -# CONFIG_PKG_USING_SQLITE is not set -# CONFIG_PKG_USING_RTI is not set -# CONFIG_PKG_USING_DFS_YAFFS is not set -# CONFIG_PKG_USING_LITTLEFS is not set -# CONFIG_PKG_USING_DFS_JFFS2 is not set -# CONFIG_PKG_USING_DFS_UFFS is not set -# CONFIG_PKG_USING_LWEXT4 is not set -# CONFIG_PKG_USING_THREAD_POOL is not set -# CONFIG_PKG_USING_ROBOTS is not set -# CONFIG_PKG_USING_EV is not set -# CONFIG_PKG_USING_SYSWATCH is not set -# CONFIG_PKG_USING_SYS_LOAD_MONITOR is not set -# CONFIG_PKG_USING_PLCCORE is not set -# CONFIG_PKG_USING_RAMDISK is not set -# CONFIG_PKG_USING_MININI is not set -# CONFIG_PKG_USING_QBOOT is not set -# CONFIG_PKG_USING_PPOOL is not set -# CONFIG_PKG_USING_OPENAMP is not set -# CONFIG_PKG_USING_LPM is not set -# CONFIG_PKG_USING_TLSF is not set -# CONFIG_PKG_USING_EVENT_RECORDER is not set -# CONFIG_PKG_USING_ARM_2D is not set -# CONFIG_PKG_USING_MCUBOOT is not set -# CONFIG_PKG_USING_TINYUSB is not set -# CONFIG_PKG_USING_CHERRYUSB is not set -# CONFIG_PKG_USING_KMULTI_RTIMER is not set -# CONFIG_PKG_USING_TFDB is not set -# CONFIG_PKG_USING_QPC is not set -# CONFIG_PKG_USING_AGILE_UPGRADE is not set -# CONFIG_PKG_USING_FLASH_BLOB is not set - -# -# peripheral libraries and drivers -# - -# -# sensors drivers -# -# CONFIG_PKG_USING_LSM6DSM is not set -# CONFIG_PKG_USING_LSM6DSL is not set -# CONFIG_PKG_USING_LPS22HB is not set -# CONFIG_PKG_USING_HTS221 is not set -# CONFIG_PKG_USING_LSM303AGR is not set -# CONFIG_PKG_USING_BME280 is not set -# CONFIG_PKG_USING_BME680 is not set -# CONFIG_PKG_USING_BMA400 is not set -# CONFIG_PKG_USING_BMI160_BMX160 is not set -# CONFIG_PKG_USING_SPL0601 is not set -# CONFIG_PKG_USING_MS5805 is not set -# CONFIG_PKG_USING_DA270 is not set -# CONFIG_PKG_USING_DF220 is not set -# CONFIG_PKG_USING_HSHCAL001 is not set -# CONFIG_PKG_USING_BH1750 is not set -# CONFIG_PKG_USING_MPU6XXX is not set -# CONFIG_PKG_USING_AHT10 is not set -# CONFIG_PKG_USING_AP3216C is not set -# CONFIG_PKG_USING_TSL4531 is not set -# CONFIG_PKG_USING_DS18B20 is not set -# CONFIG_PKG_USING_DHT11 is not set -# CONFIG_PKG_USING_DHTXX is not set -# CONFIG_PKG_USING_GY271 is not set -# CONFIG_PKG_USING_GP2Y10 is not set -# CONFIG_PKG_USING_SGP30 is not set -# CONFIG_PKG_USING_HDC1000 is not set -# CONFIG_PKG_USING_BMP180 is not set -# CONFIG_PKG_USING_BMP280 is not set -# CONFIG_PKG_USING_SHTC1 is not set -# CONFIG_PKG_USING_BMI088 is not set -# CONFIG_PKG_USING_HMC5883 is not set -# CONFIG_PKG_USING_MAX6675 is not set -# CONFIG_PKG_USING_TMP1075 is not set -# CONFIG_PKG_USING_SR04 is not set -# CONFIG_PKG_USING_CCS811 is not set -# CONFIG_PKG_USING_PMSXX is not set -# CONFIG_PKG_USING_RT3020 is not set -# CONFIG_PKG_USING_MLX90632 is not set -# CONFIG_PKG_USING_MLX90393 is not set -# CONFIG_PKG_USING_MLX90392 is not set -# CONFIG_PKG_USING_MLX90397 is not set -# CONFIG_PKG_USING_MS5611 is not set -# CONFIG_PKG_USING_MAX31865 is not set -# CONFIG_PKG_USING_VL53L0X is not set -# CONFIG_PKG_USING_INA260 is not set -# CONFIG_PKG_USING_MAX30102 is not set -# CONFIG_PKG_USING_INA226 is not set -# CONFIG_PKG_USING_LIS2DH12 is not set -# CONFIG_PKG_USING_HS300X is not set -# CONFIG_PKG_USING_ZMOD4410 is not set -# CONFIG_PKG_USING_ISL29035 is not set -# CONFIG_PKG_USING_MMC3680KJ is not set -# CONFIG_PKG_USING_QMP6989 is not set -# CONFIG_PKG_USING_BALANCE is not set -# CONFIG_PKG_USING_SHT2X is not set -# CONFIG_PKG_USING_SHT3X is not set -# CONFIG_PKG_USING_AD7746 is not set -# CONFIG_PKG_USING_ADT74XX is not set -# CONFIG_PKG_USING_MAX17048 is not set -# CONFIG_PKG_USING_AS7341 is not set -# CONFIG_PKG_USING_CW2015 is not set -# CONFIG_PKG_USING_ICM20608 is not set -# CONFIG_PKG_USING_PAJ7620 is not set -# CONFIG_PKG_USING_STHS34PF80 is not set - -# -# touch drivers -# -# CONFIG_PKG_USING_GT9147 is not set -# CONFIG_PKG_USING_GT1151 is not set -# CONFIG_PKG_USING_GT917S is not set -# CONFIG_PKG_USING_GT911 is not set -# CONFIG_PKG_USING_FT6206 is not set -# CONFIG_PKG_USING_FT5426 is not set -# CONFIG_PKG_USING_FT6236 is not set -# CONFIG_PKG_USING_XPT2046_TOUCH is not set -# CONFIG_PKG_USING_REALTEK_AMEBA is not set -# CONFIG_PKG_USING_STM32_SDIO is not set -# CONFIG_PKG_USING_ESP_IDF is not set -# CONFIG_PKG_USING_BUTTON is not set -# CONFIG_PKG_USING_PCF8574 is not set -# CONFIG_PKG_USING_SX12XX is not set -# CONFIG_PKG_USING_SIGNAL_LED is not set -# CONFIG_PKG_USING_LEDBLINK is not set -# CONFIG_PKG_USING_LITTLED is not set -# CONFIG_PKG_USING_LKDGUI is not set -# CONFIG_PKG_USING_NRF5X_SDK is not set -# CONFIG_PKG_USING_NRFX is not set - -# -# Kendryte SDK -# -# CONFIG_PKG_USING_K210_SDK is not set -# CONFIG_PKG_USING_KENDRYTE_SDK is not set -# CONFIG_PKG_USING_INFRARED is not set -# CONFIG_PKG_USING_MULTI_INFRARED is not set -# CONFIG_PKG_USING_AGILE_BUTTON is not set -# CONFIG_PKG_USING_AGILE_LED is not set -# CONFIG_PKG_USING_AT24CXX is not set -# CONFIG_PKG_USING_MOTIONDRIVER2RTT is not set -# CONFIG_PKG_USING_PCA9685 is not set -# CONFIG_PKG_USING_ILI9341 is not set -# CONFIG_PKG_USING_I2C_TOOLS is not set -# CONFIG_PKG_USING_NRF24L01 is not set -# CONFIG_PKG_USING_RPLIDAR is not set -# CONFIG_PKG_USING_AS608 is not set -# CONFIG_PKG_USING_RC522 is not set -# CONFIG_PKG_USING_WS2812B is not set -# CONFIG_PKG_USING_EMBARC_BSP is not set -# CONFIG_PKG_USING_EXTERN_RTC_DRIVERS is not set -# CONFIG_PKG_USING_MULTI_RTIMER is not set -# CONFIG_PKG_USING_MAX7219 is not set -# CONFIG_PKG_USING_BEEP is not set -# CONFIG_PKG_USING_EASYBLINK is not set -# CONFIG_PKG_USING_PMS_SERIES is not set -# CONFIG_PKG_USING_CAN_YMODEM is not set -# CONFIG_PKG_USING_LORA_RADIO_DRIVER is not set -# CONFIG_PKG_USING_QLED is not set -# CONFIG_PKG_USING_AGILE_CONSOLE is not set -# CONFIG_PKG_USING_LD3320 is not set -# CONFIG_PKG_USING_WK2124 is not set -# CONFIG_PKG_USING_LY68L6400 is not set -# CONFIG_PKG_USING_DM9051 is not set -# CONFIG_PKG_USING_SSD1306 is not set -# CONFIG_PKG_USING_QKEY is not set -# CONFIG_PKG_USING_RS485 is not set -# CONFIG_PKG_USING_RS232 is not set -# CONFIG_PKG_USING_NES is not set -# CONFIG_PKG_USING_VIRTUAL_SENSOR is not set -# CONFIG_PKG_USING_VDEVICE is not set -# CONFIG_PKG_USING_SGM706 is not set -# CONFIG_PKG_USING_STM32WB55_SDK is not set -# CONFIG_PKG_USING_RDA58XX is not set -# CONFIG_PKG_USING_LIBNFC is not set -# CONFIG_PKG_USING_MFOC is not set -# CONFIG_PKG_USING_TMC51XX is not set -# CONFIG_PKG_USING_TCA9534 is not set -# CONFIG_PKG_USING_KOBUKI is not set -# CONFIG_PKG_USING_ROSSERIAL is not set -# CONFIG_PKG_USING_MICRO_ROS is not set -# CONFIG_PKG_USING_MCP23008 is not set -# CONFIG_PKG_USING_BLUETRUM_SDK is not set -# CONFIG_PKG_USING_MISAKA_AT24CXX is not set -# CONFIG_PKG_USING_MISAKA_RGB_BLING is not set -# CONFIG_PKG_USING_LORA_MODEM_DRIVER is not set -# CONFIG_PKG_USING_SOFT_SERIAL is not set -# CONFIG_PKG_USING_MB85RS16 is not set -# CONFIG_PKG_USING_RFM300 is not set -# CONFIG_PKG_USING_IO_INPUT_FILTER is not set -# CONFIG_PKG_USING_RASPBERRYPI_PICO_SDK is not set -# CONFIG_PKG_USING_LRF_NV7LIDAR is not set -# CONFIG_PKG_USING_FINGERPRINT is not set - -# -# AI packages -# -# CONFIG_PKG_USING_LIBANN is not set -# CONFIG_PKG_USING_NNOM is not set -# CONFIG_PKG_USING_ONNX_BACKEND is not set -# CONFIG_PKG_USING_ONNX_PARSER is not set -# CONFIG_PKG_USING_TENSORFLOWLITEMICRO is not set -# CONFIG_PKG_USING_ELAPACK is not set -# CONFIG_PKG_USING_ULAPACK is not set -# CONFIG_PKG_USING_QUEST is not set -# CONFIG_PKG_USING_NAXOS is not set - -# -# Signal Processing and Control Algorithm Packages -# -# CONFIG_PKG_USING_FIRE_PID_CURVE is not set -# CONFIG_PKG_USING_UKAL is not set - -# -# miscellaneous packages -# - -# -# project laboratory -# - -# -# samples: kernel and components samples -# -CONFIG_PKG_USING_KERNEL_SAMPLES=y -CONFIG_PKG_KERNEL_SAMPLES_PATH="/packages/misc/samples/kernel_samples" -# CONFIG_PKG_USING_KERNEL_SAMPLES_V030 is not set -# CONFIG_PKG_USING_KERNEL_SAMPLES_V040 is not set -CONFIG_PKG_USING_KERNEL_SAMPLES_LATEST_VERSION=y -CONFIG_PKG_KERNEL_SAMPLES_VER="latest" -CONFIG_PKG_USING_KERNEL_SAMPLES_EN=y -# CONFIG_PKG_USING_KERNEL_SAMPLES_ZH is not set -# CONFIG_KERNEL_SAMPLES_USING_THREAD is not set -# CONFIG_KERNEL_SAMPLES_USING_SEMAPHORE is not set -# CONFIG_KERNEL_SAMPLES_USING_MUTEX is not set -# CONFIG_KERNEL_SAMPLES_USING_MAILBOX is not set -# CONFIG_KERNEL_SAMPLES_USING_EVENT is not set -# CONFIG_KERNEL_SAMPLES_USING_MESSAGEQUEUE is not set -# CONFIG_KERNEL_SAMPLES_USING_TIMER is not set -# CONFIG_KERNEL_SAMPLES_USING_HEAP is not set -# CONFIG_KERNEL_SAMPLES_USING_MEMHEAP is not set -# CONFIG_KERNEL_SAMPLES_USING_MEMPOOL is not set -# CONFIG_KERNEL_SAMPLES_USING_IDLEHOOK is not set -# CONFIG_KERNEL_SAMPLES_USING_SIGNAL is not set -# CONFIG_KERNEL_SAMPLES_USING_INTERRUPT is not set -# CONFIG_KERNEL_SAMPLES_USING_PRI_INVERSION is not set -# CONFIG_KERNEL_SAMPLES_USING_TIME_SLICE is not set -# CONFIG_KERNEL_SAMPLES_USING_SCHEDULER_HOOK is not set -# CONFIG_KERNEL_SAMPLES_USING_PRODUCER_CONSUMER is not set -# CONFIG_PKG_USING_FILESYSTEM_SAMPLES is not set -# CONFIG_PKG_USING_NETWORK_SAMPLES is not set -# CONFIG_PKG_USING_PERIPHERAL_SAMPLES is not set - -# -# entertainment: terminal games and other interesting software packages -# -# CONFIG_PKG_USING_CMATRIX is not set -# CONFIG_PKG_USING_SL is not set -# CONFIG_PKG_USING_CAL is not set -# CONFIG_PKG_USING_ACLOCK is not set -# CONFIG_PKG_USING_THREES is not set -# CONFIG_PKG_USING_2048 is not set -# CONFIG_PKG_USING_SNAKE is not set -# CONFIG_PKG_USING_TETRIS is not set -# CONFIG_PKG_USING_DONUT is not set -# CONFIG_PKG_USING_COWSAY is not set -# CONFIG_PKG_USING_MORSE is not set -# CONFIG_PKG_USING_LIBCSV is not set -# CONFIG_PKG_USING_OPTPARSE is not set -# CONFIG_PKG_USING_FASTLZ is not set -# CONFIG_PKG_USING_MINILZO is not set -# CONFIG_PKG_USING_QUICKLZ is not set -# CONFIG_PKG_USING_LZMA is not set -# CONFIG_PKG_USING_MULTIBUTTON is not set -# CONFIG_PKG_USING_FLEXIBLE_BUTTON is not set -# CONFIG_PKG_USING_CANFESTIVAL is not set -# CONFIG_PKG_USING_ZLIB is not set -# CONFIG_PKG_USING_MINIZIP is not set -# CONFIG_PKG_USING_HEATSHRINK is not set -# CONFIG_PKG_USING_DSTR is not set -# CONFIG_PKG_USING_TINYFRAME is not set -# CONFIG_PKG_USING_KENDRYTE_DEMO is not set -# CONFIG_PKG_USING_DIGITALCTRL is not set -# CONFIG_PKG_USING_UPACKER is not set -# CONFIG_PKG_USING_UPARAM is not set -# CONFIG_PKG_USING_HELLO is not set -# CONFIG_PKG_USING_VI is not set -# CONFIG_PKG_USING_KI is not set -# CONFIG_PKG_USING_ARMv7M_DWT is not set -# CONFIG_PKG_USING_CRCLIB is not set -# CONFIG_PKG_USING_LWGPS is not set -# CONFIG_PKG_USING_STATE_MACHINE is not set -# CONFIG_PKG_USING_DESIGN_PATTERN is not set -# CONFIG_PKG_USING_CONTROLLER is not set -# CONFIG_PKG_USING_PHASE_LOCKED_LOOP is not set -# CONFIG_PKG_USING_MFBD is not set -# CONFIG_PKG_USING_SLCAN2RTT is not set -# CONFIG_PKG_USING_SOEM is not set -# CONFIG_PKG_USING_QPARAM is not set -# CONFIG_PKG_USING_CorevMCU_CLI is not set - -# -# Arduino libraries -# -# CONFIG_PKG_USING_RTDUINO is not set - -# -# Projects -# -# CONFIG_PKG_USING_ARDUINO_ULTRASOUND_RADAR is not set -# CONFIG_PKG_USING_ARDUINO_SENSOR_KIT is not set -# CONFIG_PKG_USING_ARDUINO_MATLAB_SUPPORT is not set - -# -# Sensors -# -# CONFIG_PKG_USING_ARDUINO_SENSOR_DEVICE_DRIVERS is not set -# CONFIG_PKG_USING_ARDUINO_CAPACITIVESENSOR is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADXL375 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL53L0X is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL53L1X is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SENSOR is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL6180X is not set -# CONFIG_PKG_USING_ADAFRUIT_MAX31855 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX31865 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX31856 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX6675 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90614 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM9DS1 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AHTX0 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM9DS0 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP280 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADT7410 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP085 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BME680 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP9808 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP4728 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_INA219 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LTR390 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADXL345 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DHT is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP9600 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM6DS is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BNO055 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX1704X is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MMC56X3 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90393 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90395 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ICM20X is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DPS310 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HTS221 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SHT4X is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SHT31 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADXL343 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BME280 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AS726X is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AMG88XX is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AM2320 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AM2315 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LTR329_LTR303 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP085_UNIFIED is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP183 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP183_UNIFIED is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP3XX is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MS8607 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS3MDL is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90640 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MMA8451 is not set -# CONFIG_PKG_USING_ADAFRUIT_MSA301 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPL115A2 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BNO08X is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BNO08X_RVC is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS2MDL is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM303DLH_MAG is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LC709203F is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_CAP1188 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_CCS811 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_NAU7802 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS331 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LPS2X is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LPS35HW is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM303_ACCEL is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS3DH is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCF8591 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPL3115A2 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPR121 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPRLS is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPU6050 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCT2075 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PM25AQI is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_EMC2101 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_FXAS21002C is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SCD30 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_FXOS8700 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HMC5883_UNIFIED is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SGP30 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TMP006 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TLA202X is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TCS34725 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI7021 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI1145 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SGP40 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SHTC3 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HDC1000 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HTU21DF is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AS7341 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HTU31D is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SENSORLAB is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_INA260 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TMP007_LIBRARY is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_L3GD20 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TMP117 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TSC2007 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TSL2561 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TSL2591_LIBRARY is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VCNL4040 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VEML6070 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VEML6075 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VEML7700 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_LIS3DHTR is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_DHT is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_ADXL335 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_ADXL345 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_BME280 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_BMP280 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_H3LIS331DL is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_MMA7660 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_TSL2561 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_PAJ7620 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_VL53L0X is not set -# CONFIG_PKG_USING_SEEED_ITG3200 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_SHT31 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_HP20X is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_DRV2605L is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_BBM150 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_HMC5883L is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_LSM303DLH is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_TCS3414CS is not set -# CONFIG_PKG_USING_SEEED_MP503 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_BMP085 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_HIGHTEMP is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_VEML6070 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_SI1145 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_SHT35 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_AT42QT1070 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_LSM6DS3 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_HDC1000 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_HM3301 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_MCP9600 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_LTC2941 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_LDC1612 is not set - -# -# Display -# -# CONFIG_PKG_USING_ARDUINO_U8G2 is not set -# CONFIG_PKG_USING_ARDUINO_U8GLIB_ARDUINO is not set -# CONFIG_PKG_USING_SEEED_TM1637 is not set - -# -# Timing -# -# CONFIG_PKG_USING_ARDUINO_MSTIMER2 is not set - -# -# Data Processing -# -# CONFIG_PKG_USING_ARDUINO_KALMANFILTER is not set -# CONFIG_PKG_USING_ARDUINO_ARDUINOJSON is not set - -# -# Data Storage -# - -# -# Communication -# -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PN532 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI4713 is not set - -# -# Device Control -# -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCF8574 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCA9685 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_PCF85063TP is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TPA2016 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DRV2605 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DS1841 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DS3502 is not set - -# -# Other -# -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MFRC630 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI5351 is not set -# CONFIG_PKG_USING_ARDUINO_RTCLIB is not set - -# -# Signal IO -# -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BUSIO is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TCA8418 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP23017 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADS1X15 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AW9523 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP3008 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP4725 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BD3491FS is not set - -# -# Uncategorized -# - -# -# Hardware Drivers -# - -# -# On-chip Peripheral Drivers -# -CONFIG_BSP_USING_UART=y -CONFIG_RT_USING_UART1=y -# CONFIG_RT_USING_UART0 is not set -# CONFIG_BSP_USING_SPI is not set -# CONFIG_BSP_USING_CAN is not set -# CONFIG_BSP_USING_GPIO is not set -# CONFIG_BSP_USING_QSPI is not set -CONFIG_BSP_USING_ETH=y -CONFIG_RT_LWIP_PBUF_POOL_BUFSIZE=1700 -# CONFIG_BSP_USING_SDIO is not set - -# -# Board extended module Drivers -# -CONFIG_BSP_USING_GIC=y -CONFIG_BSP_USING_GICV3=y -CONFIG_PHYTIUM_ARCH_AARCH64=y -CONFIG_ARM_SPI_BIND_CPU_ID=2 - -# -# Standalone Setting -# -CONFIG_TARGET_ARMV8_AARCH64=y - -# -# Board Configuration -# -# CONFIG_TARGET_F2000_4 is not set -# CONFIG_TARGET_D2000 is not set -CONFIG_TARGET_E2000Q=y -# CONFIG_TARGET_E2000D is not set -# CONFIG_TARGET_E2000S is not set -CONFIG_TARGET_E2000=y -CONFIG_DEFAULT_DEBUG_PRINT_UART1=y -# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set -# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set - -# -# Components Configuration -# -CONFIG_USE_SPI=y -CONFIG_USE_FSPIM=y -CONFIG_USE_QSPI=y - -# -# Qspi Configuration -# -CONFIG_USE_FQSPI=y -# CONFIG_USE_GIC is not set -CONFIG_USE_IOPAD=y -CONFIG_ENABLE_IOPAD=y -CONFIG_USE_SERIAL=y - -# -# Usart Configuration -# -CONFIG_ENABLE_Pl011_UART=y -# CONFIG_USE_GPIO is not set -CONFIG_USE_ETH=y - -# -# Eth Configuration -# -CONFIG_ENABLE_FXMAC=y -# CONFIG_ENABLE_FGMAC is not set -CONFIG_FXMAC_PHY_COMMON=y -# CONFIG_FXMAC_PHY_YT is not set -# CONFIG_USE_CAN is not set -# CONFIG_USE_I2C is not set -# CONFIG_USE_TIMER is not set -# CONFIG_USE_MIO is not set -# CONFIG_USE_SDMMC is not set -# CONFIG_USE_PCIE is not set -# CONFIG_USE_WDT is not set -# CONFIG_USE_DMA is not set -# CONFIG_USE_NAND is not set -# CONFIG_USE_RTC is not set -# CONFIG_USE_SATA is not set -# CONFIG_USE_USB is not set -# CONFIG_USE_ADC is not set -# CONFIG_USE_PWM is not set -# CONFIG_USE_IPC is not set -# CONFIG_USE_MEDIA is not set -# CONFIG_USE_SCMI_MHU is not set -# CONFIG_LOG_VERBOS is not set -# CONFIG_LOG_DEBUG is not set -# CONFIG_LOG_INFO is not set -# CONFIG_LOG_WARN is not set -CONFIG_LOG_ERROR=y -# CONFIG_LOG_NONE is not set -# CONFIG_USE_DEFAULT_INTERRUPT_CONFIG is not set -# CONFIG_LOG_EXTRA_INFO is not set -# CONFIG_LOG_DISPALY_CORE_NUM is not set -# CONFIG_BOOTUP_DEBUG_PRINTS is not set diff --git a/bsp/phytium/aarch64/configs/e2000q_rtthread.h b/bsp/phytium/aarch64/configs/e2000q_rtthread.h deleted file mode 100644 index 6244beb00c..0000000000 --- a/bsp/phytium/aarch64/configs/e2000q_rtthread.h +++ /dev/null @@ -1,385 +0,0 @@ -#ifndef RT_CONFIG_H__ -#define RT_CONFIG_H__ - -/* Automatically generated file; DO NOT EDIT. */ -/* RT-Thread Project Configuration */ - -/* RT-Thread Kernel */ - -#define RT_NAME_MAX 16 -#define RT_USING_SMP -#define RT_CPUS_NR 2 -#define RT_ALIGN_SIZE 4 -#define RT_THREAD_PRIORITY_32 -#define RT_THREAD_PRIORITY_MAX 32 -#define RT_TICK_PER_SECOND 1000 -#define RT_USING_OVERFLOW_CHECK -#define RT_USING_HOOK -#define RT_HOOK_USING_FUNC_PTR -#define RT_USING_IDLE_HOOK -#define RT_IDLE_HOOK_LIST_SIZE 4 -#define IDLE_THREAD_STACK_SIZE 40960 -#define SYSTEM_THREAD_STACK_SIZE 40960 -#define RT_USING_TIMER_SOFT -#define RT_TIMER_THREAD_PRIO 4 -#define RT_TIMER_THREAD_STACK_SIZE 4096 - -/* kservice optimization */ - -#define RT_KSERVICE_USING_STDLIB -#define RT_KPRINTF_USING_LONGLONG -#define RT_DEBUG - -/* Inter-Thread communication */ - -#define RT_USING_SEMAPHORE -#define RT_USING_MUTEX -#define RT_USING_EVENT -#define RT_USING_MAILBOX -#define RT_USING_MESSAGEQUEUE - -/* Memory Management */ - -#define RT_PAGE_MAX_ORDER 16 -#define RT_USING_SLAB -#define RT_USING_MEMHEAP -#define RT_MEMHEAP_FAST_MODE -#define RT_USING_SLAB_AS_HEAP -#define RT_USING_HEAP_ISR -#define RT_USING_HEAP - -/* Kernel Device Object */ - -#define RT_USING_DEVICE -#define RT_USING_CONSOLE -#define RT_CONSOLEBUF_SIZE 128 -#define RT_CONSOLE_DEVICE_NAME "uart1" -#define RT_VER_NUM 0x50001 -#define ARCH_CPU_64BIT -#define RT_USING_CACHE -#define ARCH_ARM_BOOTWITH_FLUSH_CACHE -#define ARCH_MM_MMU -#define ARCH_ARM -#define ARCH_ARM_MMU -#define ARCH_ARMV8 - -/* RT-Thread Components */ - -#define RT_USING_COMPONENTS_INIT -#define RT_USING_USER_MAIN -#define RT_MAIN_THREAD_STACK_SIZE 8192 -#define RT_MAIN_THREAD_PRIORITY 10 -#define RT_USING_MSH -#define RT_USING_FINSH -#define FINSH_USING_MSH -#define FINSH_THREAD_NAME "tshell" -#define FINSH_THREAD_PRIORITY 20 -#define FINSH_THREAD_STACK_SIZE 4096 -#define FINSH_USING_HISTORY -#define FINSH_HISTORY_LINES 5 -#define FINSH_USING_SYMTAB -#define FINSH_CMD_SIZE 80 -#define MSH_USING_BUILT_IN_COMMANDS -#define FINSH_USING_DESCRIPTION -#define FINSH_ARG_MAX 10 - -/* DFS: device virtual file system */ - -#define RT_USING_DFS -#define DFS_USING_POSIX -#define DFS_USING_WORKDIR -#define DFS_FD_MAX 16 -#define RT_USING_DFS_V1 -#define DFS_FILESYSTEMS_MAX 4 -#define DFS_FILESYSTEM_TYPES_MAX 4 -#define RT_USING_DFS_ELMFAT - -/* elm-chan's FatFs, Generic FAT Filesystem Module */ - -#define RT_DFS_ELM_CODE_PAGE 437 -#define RT_DFS_ELM_WORD_ACCESS -#define RT_DFS_ELM_USE_LFN_3 -#define RT_DFS_ELM_USE_LFN 3 -#define RT_DFS_ELM_LFN_UNICODE_0 -#define RT_DFS_ELM_LFN_UNICODE 0 -#define RT_DFS_ELM_MAX_LFN 255 -#define RT_DFS_ELM_DRIVES 2 -#define RT_DFS_ELM_MAX_SECTOR_SIZE 512 -#define RT_DFS_ELM_REENTRANT -#define RT_DFS_ELM_MUTEX_TIMEOUT 3000 -#define RT_USING_DFS_DEVFS -#define RT_USING_DFS_RAMFS - -/* Device Drivers */ - -#define RT_USING_DEVICE_IPC -#define RT_UNAMED_PIPE_NUMBER 64 -#define RT_USING_SYSTEM_WORKQUEUE -#define RT_SYSTEM_WORKQUEUE_STACKSIZE 8192 -#define RT_SYSTEM_WORKQUEUE_PRIORITY 23 -#define RT_USING_SERIAL -#define RT_USING_SERIAL_V1 -#define RT_SERIAL_USING_DMA -#define RT_SERIAL_RB_BUFSZ 64 -#define RT_USING_NULL -#define RT_USING_ZERO -#define RT_USING_RANDOM -#define RT_USING_RTC - -/* Using USB */ - - -/* C/C++ and POSIX layer */ - -#define RT_LIBC_DEFAULT_TIMEZONE 8 - -/* POSIX (Portable Operating System Interface) layer */ - -#define RT_USING_POSIX_FS -#define RT_USING_POSIX_DEVIO -#define RT_USING_POSIX_STDIO -#define RT_USING_POSIX_TERMIOS -#define RT_USING_POSIX_DELAY -#define RT_USING_POSIX_CLOCK -#define RT_USING_POSIX_TIMER - -/* Interprocess Communication (IPC) */ - - -/* Socket is in the 'Network' category */ - - -/* Network */ - -#define RT_USING_SAL -#define SAL_INTERNET_CHECK - -/* Docking with protocol stacks */ - -#define SAL_USING_LWIP -#define SAL_USING_POSIX -#define RT_USING_NETDEV -#define NETDEV_USING_IFCONFIG -#define NETDEV_USING_PING -#define NETDEV_USING_NETSTAT -#define NETDEV_USING_AUTO_DEFAULT -#define NETDEV_IPV4 1 -#define NETDEV_IPV6 0 -#define RT_USING_LWIP -#define RT_USING_LWIP212 -#define RT_USING_LWIP_VER_NUM 0x20102 -#define RT_LWIP_MEM_ALIGNMENT 64 -#define RT_LWIP_IGMP -#define RT_LWIP_ICMP -#define RT_LWIP_DNS - -/* Static IPv4 Address */ - -#define RT_LWIP_IPADDR "192.168.4.10" -#define RT_LWIP_GWADDR "192.168.4.1" -#define RT_LWIP_MSKADDR "255.255.255.0" -#define RT_LWIP_UDP -#define RT_LWIP_TCP -#define RT_LWIP_RAW -#define RT_MEMP_NUM_NETCONN 8 -#define RT_LWIP_PBUF_NUM 512 -#define RT_LWIP_RAW_PCB_NUM 4 -#define RT_LWIP_UDP_PCB_NUM 4 -#define RT_LWIP_TCP_PCB_NUM 4 -#define RT_LWIP_TCP_SEG_NUM 40 -#define RT_LWIP_TCP_SND_BUF 8196 -#define RT_LWIP_TCP_WND 8196 -#define RT_LWIP_TCPTHREAD_PRIORITY 12 -#define RT_LWIP_TCPTHREAD_MBOX_SIZE 8 -#define RT_LWIP_TCPTHREAD_STACKSIZE 16184 -#define RT_LWIP_ETHTHREAD_PRIORITY 12 -#define RT_LWIP_ETHTHREAD_STACKSIZE 2048 -#define RT_LWIP_ETHTHREAD_MBOX_SIZE 8 -#define LWIP_NETIF_STATUS_CALLBACK 1 -#define LWIP_NETIF_LINK_CALLBACK 1 -#define SO_REUSE 1 -#define LWIP_SO_RCVTIMEO 1 -#define LWIP_SO_SNDTIMEO 1 -#define LWIP_SO_RCVBUF 1 -#define LWIP_SO_LINGER 0 -#define LWIP_NETIF_LOOPBACK 0 -#define RT_LWIP_USING_PING -#define RT_LWIP_DEBUG -#define RT_LWIP_NETIF_DEBUG - -/* Utilities */ - -#define RT_USING_RYM -#define YMODEM_USING_FILE_TRANSFER -#define RT_USING_ADT - -/* RT-Thread Utestcases */ - - -/* RT-Thread online packages */ - -/* IoT - internet of things */ - - -/* Wi-Fi */ - -/* Marvell WiFi */ - - -/* Wiced WiFi */ - - -/* IoT Cloud */ - - -/* security packages */ - - -/* language packages */ - -/* JSON: JavaScript Object Notation, a lightweight data-interchange format */ - - -/* XML: Extensible Markup Language */ - - -/* multimedia packages */ - -/* LVGL: powerful and easy-to-use embedded GUI library */ - - -/* u8g2: a monochrome graphic library */ - - -/* tools packages */ - - -/* system packages */ - -/* enhanced kernel services */ - - -/* acceleration: Assembly language or algorithmic acceleration packages */ - - -/* CMSIS: ARM Cortex-M Microcontroller Software Interface Standard */ - - -/* Micrium: Micrium software products porting for RT-Thread */ - - -/* peripheral libraries and drivers */ - -/* sensors drivers */ - - -/* touch drivers */ - - -/* Kendryte SDK */ - - -/* AI packages */ - - -/* Signal Processing and Control Algorithm Packages */ - - -/* miscellaneous packages */ - -/* project laboratory */ - -/* samples: kernel and components samples */ - -#define PKG_USING_KERNEL_SAMPLES -#define PKG_USING_KERNEL_SAMPLES_LATEST_VERSION -#define PKG_USING_KERNEL_SAMPLES_EN - -/* entertainment: terminal games and other interesting software packages */ - - -/* Arduino libraries */ - - -/* Projects */ - - -/* Sensors */ - - -/* Display */ - - -/* Timing */ - - -/* Data Processing */ - - -/* Data Storage */ - -/* Communication */ - - -/* Device Control */ - - -/* Other */ - - -/* Signal IO */ - - -/* Uncategorized */ - -/* Hardware Drivers */ - -/* On-chip Peripheral Drivers */ - -#define BSP_USING_UART -#define RT_USING_UART1 -#define BSP_USING_ETH -#define RT_LWIP_PBUF_POOL_BUFSIZE 1700 - -/* Board extended module Drivers */ - -#define BSP_USING_GIC -#define BSP_USING_GICV3 -#define PHYTIUM_ARCH_AARCH64 -#define ARM_SPI_BIND_CPU_ID 2 - -/* Standalone Setting */ - -#define TARGET_ARMV8_AARCH64 - -/* Board Configuration */ - -#define TARGET_E2000Q -#define TARGET_E2000 -#define DEFAULT_DEBUG_PRINT_UART1 - -/* Components Configuration */ - -#define USE_SPI -#define USE_FSPIM -#define USE_QSPI - -/* Qspi Configuration */ - -#define USE_FQSPI -#define USE_IOPAD -#define ENABLE_IOPAD -#define USE_SERIAL - -/* Usart Configuration */ - -#define ENABLE_Pl011_UART -#define USE_ETH - -/* Eth Configuration */ - -#define ENABLE_FXMAC -#define FXMAC_PHY_COMMON -#define LOG_ERROR - -#endif diff --git a/bsp/phytium/aarch64/configs/e2000q_rtthread_test b/bsp/phytium/aarch64/configs/e2000q_rtthread_test deleted file mode 100644 index cdcbb57923..0000000000 --- a/bsp/phytium/aarch64/configs/e2000q_rtthread_test +++ /dev/null @@ -1,1263 +0,0 @@ -# -# Automatically generated file; DO NOT EDIT. -# RT-Thread Project Configuration -# - -# -# RT-Thread Kernel -# -CONFIG_RT_NAME_MAX=16 -# CONFIG_RT_USING_ARCH_DATA_TYPE is not set -# CONFIG_RT_USING_SMART is not set -CONFIG_RT_USING_SMP=y -CONFIG_RT_CPUS_NR=2 -CONFIG_RT_ALIGN_SIZE=4 -# CONFIG_RT_THREAD_PRIORITY_8 is not set -CONFIG_RT_THREAD_PRIORITY_32=y -# CONFIG_RT_THREAD_PRIORITY_256 is not set -CONFIG_RT_THREAD_PRIORITY_MAX=32 -CONFIG_RT_TICK_PER_SECOND=1000 -CONFIG_RT_USING_OVERFLOW_CHECK=y -CONFIG_RT_USING_HOOK=y -CONFIG_RT_HOOK_USING_FUNC_PTR=y -CONFIG_RT_USING_IDLE_HOOK=y -CONFIG_RT_IDLE_HOOK_LIST_SIZE=4 -CONFIG_IDLE_THREAD_STACK_SIZE=40960 -CONFIG_SYSTEM_THREAD_STACK_SIZE=40960 -CONFIG_RT_USING_TIMER_SOFT=y -CONFIG_RT_TIMER_THREAD_PRIO=4 -CONFIG_RT_TIMER_THREAD_STACK_SIZE=4096 - -# -# kservice optimization -# -CONFIG_RT_KSERVICE_USING_STDLIB=y -# CONFIG_RT_KSERVICE_USING_STDLIB_MEMORY is not set -# CONFIG_RT_KSERVICE_USING_TINY_SIZE is not set -# CONFIG_RT_USING_TINY_FFS is not set -CONFIG_RT_KPRINTF_USING_LONGLONG=y -CONFIG_RT_DEBUG=y -# CONFIG_RT_DEBUG_COLOR is not set -# CONFIG_RT_DEBUG_INIT_CONFIG is not set -# CONFIG_RT_DEBUG_THREAD_CONFIG is not set -# CONFIG_RT_DEBUG_SCHEDULER_CONFIG is not set -# CONFIG_RT_DEBUG_IPC_CONFIG is not set -# CONFIG_RT_DEBUG_TIMER_CONFIG is not set -# CONFIG_RT_DEBUG_IRQ_CONFIG is not set -# CONFIG_RT_DEBUG_MEM_CONFIG is not set -# CONFIG_RT_DEBUG_SLAB_CONFIG is not set -# CONFIG_RT_DEBUG_MEMHEAP_CONFIG is not set -# CONFIG_RT_DEBUG_PAGE_LEAK is not set -# CONFIG_RT_DEBUG_MODULE_CONFIG is not set - -# -# Inter-Thread communication -# -CONFIG_RT_USING_SEMAPHORE=y -CONFIG_RT_USING_MUTEX=y -CONFIG_RT_USING_EVENT=y -CONFIG_RT_USING_MAILBOX=y -CONFIG_RT_USING_MESSAGEQUEUE=y -# CONFIG_RT_USING_SIGNALS is not set - -# -# Memory Management -# -CONFIG_RT_PAGE_MAX_ORDER=16 -# CONFIG_RT_USING_MEMPOOL is not set -# CONFIG_RT_USING_SMALL_MEM is not set -CONFIG_RT_USING_SLAB=y -CONFIG_RT_USING_MEMHEAP=y -CONFIG_RT_MEMHEAP_FAST_MODE=y -# CONFIG_RT_MEMHEAP_BEST_MODE is not set -# CONFIG_RT_USING_SMALL_MEM_AS_HEAP is not set -# CONFIG_RT_USING_MEMHEAP_AS_HEAP is not set -CONFIG_RT_USING_SLAB_AS_HEAP=y -# CONFIG_RT_USING_USERHEAP is not set -# CONFIG_RT_USING_NOHEAP is not set -# CONFIG_RT_USING_MEMTRACE is not set -CONFIG_RT_USING_HEAP_ISR=y -CONFIG_RT_USING_HEAP=y - -# -# Kernel Device Object -# -CONFIG_RT_USING_DEVICE=y -# CONFIG_RT_USING_DEVICE_OPS is not set -# CONFIG_RT_USING_DM is not set -# CONFIG_RT_USING_INTERRUPT_INFO is not set -CONFIG_RT_USING_CONSOLE=y -CONFIG_RT_CONSOLEBUF_SIZE=128 -CONFIG_RT_CONSOLE_DEVICE_NAME="uart1" -CONFIG_RT_VER_NUM=0x50001 -# CONFIG_RT_USING_STDC_ATOMIC is not set -CONFIG_ARCH_CPU_64BIT=y -CONFIG_RT_USING_CACHE=y -# CONFIG_RT_USING_HW_ATOMIC is not set -CONFIG_ARCH_ARM_BOOTWITH_FLUSH_CACHE=y -# CONFIG_ARCH_CPU_STACK_GROWS_UPWARD is not set -# CONFIG_RT_USING_CPU_FFS is not set -CONFIG_ARCH_MM_MMU=y -CONFIG_ARCH_ARM=y -CONFIG_ARCH_ARM_MMU=y -CONFIG_ARCH_ARMV8=y - -# -# RT-Thread Components -# -CONFIG_RT_USING_COMPONENTS_INIT=y -CONFIG_RT_USING_USER_MAIN=y -CONFIG_RT_MAIN_THREAD_STACK_SIZE=8192 -CONFIG_RT_MAIN_THREAD_PRIORITY=10 -# CONFIG_RT_USING_LEGACY is not set -CONFIG_RT_USING_MSH=y -CONFIG_RT_USING_FINSH=y -CONFIG_FINSH_USING_MSH=y -CONFIG_FINSH_THREAD_NAME="tshell" -CONFIG_FINSH_THREAD_PRIORITY=20 -CONFIG_FINSH_THREAD_STACK_SIZE=4096 -CONFIG_FINSH_USING_HISTORY=y -CONFIG_FINSH_HISTORY_LINES=5 -CONFIG_FINSH_USING_SYMTAB=y -CONFIG_FINSH_CMD_SIZE=80 -CONFIG_MSH_USING_BUILT_IN_COMMANDS=y -CONFIG_FINSH_USING_DESCRIPTION=y -# CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set -# CONFIG_FINSH_USING_AUTH is not set -CONFIG_FINSH_ARG_MAX=10 - -# -# DFS: device virtual file system -# -CONFIG_RT_USING_DFS=y -CONFIG_DFS_USING_POSIX=y -CONFIG_DFS_USING_WORKDIR=y -# CONFIG_RT_USING_DFS_MNTTABLE is not set -CONFIG_DFS_FD_MAX=16 -CONFIG_RT_USING_DFS_V1=y -# CONFIG_RT_USING_DFS_V2 is not set -CONFIG_DFS_FILESYSTEMS_MAX=4 -CONFIG_DFS_FILESYSTEM_TYPES_MAX=4 -CONFIG_RT_USING_DFS_ELMFAT=y - -# -# elm-chan's FatFs, Generic FAT Filesystem Module -# -CONFIG_RT_DFS_ELM_CODE_PAGE=437 -CONFIG_RT_DFS_ELM_WORD_ACCESS=y -# CONFIG_RT_DFS_ELM_USE_LFN_0 is not set -# CONFIG_RT_DFS_ELM_USE_LFN_1 is not set -# CONFIG_RT_DFS_ELM_USE_LFN_2 is not set -CONFIG_RT_DFS_ELM_USE_LFN_3=y -CONFIG_RT_DFS_ELM_USE_LFN=3 -CONFIG_RT_DFS_ELM_LFN_UNICODE_0=y -# CONFIG_RT_DFS_ELM_LFN_UNICODE_1 is not set -# CONFIG_RT_DFS_ELM_LFN_UNICODE_2 is not set -# CONFIG_RT_DFS_ELM_LFN_UNICODE_3 is not set -CONFIG_RT_DFS_ELM_LFN_UNICODE=0 -CONFIG_RT_DFS_ELM_MAX_LFN=255 -CONFIG_RT_DFS_ELM_DRIVES=2 -CONFIG_RT_DFS_ELM_MAX_SECTOR_SIZE=512 -# CONFIG_RT_DFS_ELM_USE_ERASE is not set -CONFIG_RT_DFS_ELM_REENTRANT=y -CONFIG_RT_DFS_ELM_MUTEX_TIMEOUT=3000 -CONFIG_RT_USING_DFS_DEVFS=y -# CONFIG_RT_USING_DFS_ROMFS is not set -# CONFIG_RT_USING_DFS_CROMFS is not set -CONFIG_RT_USING_DFS_RAMFS=y -# CONFIG_RT_USING_DFS_TMPFS is not set -# CONFIG_RT_USING_DFS_NFS is not set -# CONFIG_RT_USING_FAL is not set - -# -# Device Drivers -# -CONFIG_RT_USING_DEVICE_IPC=y -CONFIG_RT_UNAMED_PIPE_NUMBER=64 -CONFIG_RT_USING_SYSTEM_WORKQUEUE=y -CONFIG_RT_SYSTEM_WORKQUEUE_STACKSIZE=8192 -CONFIG_RT_SYSTEM_WORKQUEUE_PRIORITY=23 -CONFIG_RT_USING_SERIAL=y -CONFIG_RT_USING_SERIAL_V1=y -# CONFIG_RT_USING_SERIAL_V2 is not set -CONFIG_RT_SERIAL_USING_DMA=y -CONFIG_RT_SERIAL_RB_BUFSZ=64 -# CONFIG_RT_USING_CAN is not set -# CONFIG_RT_USING_HWTIMER is not set -# CONFIG_RT_USING_CPUTIME is not set -# CONFIG_RT_USING_I2C is not set -# CONFIG_RT_USING_PHY is not set -# CONFIG_RT_USING_PIN is not set -# CONFIG_RT_USING_ADC is not set -# CONFIG_RT_USING_DAC is not set -CONFIG_RT_USING_NULL=y -CONFIG_RT_USING_ZERO=y -CONFIG_RT_USING_RANDOM=y -# CONFIG_RT_USING_PWM is not set -# CONFIG_RT_USING_MTD_NOR is not set -# CONFIG_RT_USING_MTD_NAND is not set -# CONFIG_RT_USING_PM is not set -# CONFIG_RT_USING_FDT is not set -CONFIG_RT_USING_RTC=y -# CONFIG_RT_USING_ALARM is not set -# CONFIG_RT_USING_SOFT_RTC is not set -# CONFIG_RT_USING_SDIO is not set -# CONFIG_RT_USING_SPI is not set -# CONFIG_RT_USING_WDT is not set -# CONFIG_RT_USING_AUDIO is not set -# CONFIG_RT_USING_SENSOR is not set -# CONFIG_RT_USING_TOUCH is not set -# CONFIG_RT_USING_LCD is not set -# CONFIG_RT_USING_HWCRYPTO is not set -# CONFIG_RT_USING_PULSE_ENCODER is not set -# CONFIG_RT_USING_INPUT_CAPTURE is not set -# CONFIG_RT_USING_DEV_BUS is not set -# CONFIG_RT_USING_WIFI is not set -# CONFIG_RT_USING_VIRTIO is not set - -# -# Using USB -# -# CONFIG_RT_USING_USB is not set -# CONFIG_RT_USING_USB_HOST is not set -# CONFIG_RT_USING_USB_DEVICE is not set - -# -# C/C++ and POSIX layer -# -CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8 - -# -# POSIX (Portable Operating System Interface) layer -# -CONFIG_RT_USING_POSIX_FS=y -CONFIG_RT_USING_POSIX_DEVIO=y -CONFIG_RT_USING_POSIX_STDIO=y -# CONFIG_RT_USING_POSIX_POLL is not set -# CONFIG_RT_USING_POSIX_SELECT is not set -# CONFIG_RT_USING_POSIX_SOCKET is not set -CONFIG_RT_USING_POSIX_TERMIOS=y -# CONFIG_RT_USING_POSIX_AIO is not set -# CONFIG_RT_USING_POSIX_MMAN is not set -CONFIG_RT_USING_POSIX_DELAY=y -CONFIG_RT_USING_POSIX_CLOCK=y -CONFIG_RT_USING_POSIX_TIMER=y -# CONFIG_RT_USING_PTHREADS is not set -# CONFIG_RT_USING_MODULE is not set - -# -# Interprocess Communication (IPC) -# -# CONFIG_RT_USING_POSIX_PIPE is not set -# CONFIG_RT_USING_POSIX_MESSAGE_QUEUE is not set -# CONFIG_RT_USING_POSIX_MESSAGE_SEMAPHORE is not set - -# -# Socket is in the 'Network' category -# -# CONFIG_RT_USING_CPLUSPLUS is not set - -# -# Network -# -CONFIG_RT_USING_SAL=y -CONFIG_SAL_INTERNET_CHECK=y - -# -# Docking with protocol stacks -# -CONFIG_SAL_USING_LWIP=y -# CONFIG_SAL_USING_AT is not set -# CONFIG_SAL_USING_TLS is not set -CONFIG_SAL_USING_POSIX=y -# CONFIG_SAL_USING_AF_UNIX is not set -CONFIG_RT_USING_NETDEV=y -CONFIG_NETDEV_USING_IFCONFIG=y -CONFIG_NETDEV_USING_PING=y -CONFIG_NETDEV_USING_NETSTAT=y -CONFIG_NETDEV_USING_AUTO_DEFAULT=y -# CONFIG_NETDEV_USING_IPV6 is not set -CONFIG_NETDEV_IPV4=1 -CONFIG_NETDEV_IPV6=0 -# CONFIG_NETDEV_IPV6_SCOPES is not set -CONFIG_RT_USING_LWIP=y -# CONFIG_RT_USING_LWIP_LOCAL_VERSION is not set -# CONFIG_RT_USING_LWIP141 is not set -# CONFIG_RT_USING_LWIP203 is not set -CONFIG_RT_USING_LWIP212=y -# CONFIG_RT_USING_LWIP_LATEST is not set -CONFIG_RT_USING_LWIP_VER_NUM=0x20102 -# CONFIG_RT_USING_LWIP_IPV6 is not set -CONFIG_RT_LWIP_MEM_ALIGNMENT=64 -CONFIG_RT_LWIP_IGMP=y -CONFIG_RT_LWIP_ICMP=y -# CONFIG_RT_LWIP_SNMP is not set -CONFIG_RT_LWIP_DNS=y -# CONFIG_RT_LWIP_DHCP is not set - -# -# Static IPv4 Address -# -CONFIG_RT_LWIP_IPADDR="192.168.4.10" -CONFIG_RT_LWIP_GWADDR="192.168.4.1" -CONFIG_RT_LWIP_MSKADDR="255.255.255.0" -CONFIG_RT_LWIP_UDP=y -CONFIG_RT_LWIP_TCP=y -CONFIG_RT_LWIP_RAW=y -# CONFIG_RT_LWIP_PPP is not set -CONFIG_RT_MEMP_NUM_NETCONN=8 -CONFIG_RT_LWIP_PBUF_NUM=512 -CONFIG_RT_LWIP_RAW_PCB_NUM=4 -CONFIG_RT_LWIP_UDP_PCB_NUM=4 -CONFIG_RT_LWIP_TCP_PCB_NUM=4 -CONFIG_RT_LWIP_TCP_SEG_NUM=40 -CONFIG_RT_LWIP_TCP_SND_BUF=8196 -CONFIG_RT_LWIP_TCP_WND=8196 -CONFIG_RT_LWIP_TCPTHREAD_PRIORITY=12 -CONFIG_RT_LWIP_TCPTHREAD_MBOX_SIZE=8 -CONFIG_RT_LWIP_TCPTHREAD_STACKSIZE=16184 -# CONFIG_LWIP_NO_RX_THREAD is not set -# CONFIG_LWIP_NO_TX_THREAD is not set -CONFIG_RT_LWIP_ETHTHREAD_PRIORITY=12 -CONFIG_RT_LWIP_ETHTHREAD_STACKSIZE=2048 -CONFIG_RT_LWIP_ETHTHREAD_MBOX_SIZE=8 -# CONFIG_RT_LWIP_REASSEMBLY_FRAG is not set -CONFIG_LWIP_NETIF_STATUS_CALLBACK=1 -CONFIG_LWIP_NETIF_LINK_CALLBACK=1 -CONFIG_SO_REUSE=1 -CONFIG_LWIP_SO_RCVTIMEO=1 -CONFIG_LWIP_SO_SNDTIMEO=1 -CONFIG_LWIP_SO_RCVBUF=1 -CONFIG_LWIP_SO_LINGER=0 -# CONFIG_RT_LWIP_NETIF_LOOPBACK is not set -CONFIG_LWIP_NETIF_LOOPBACK=0 -# CONFIG_RT_LWIP_STATS is not set -# CONFIG_RT_LWIP_USING_HW_CHECKSUM is not set -CONFIG_RT_LWIP_USING_PING=y -# CONFIG_LWIP_USING_DHCPD is not set -CONFIG_RT_LWIP_DEBUG=y -# CONFIG_RT_LWIP_SYS_DEBUG is not set -# CONFIG_RT_LWIP_ETHARP_DEBUG is not set -# CONFIG_RT_LWIP_PPP_DEBUG is not set -# CONFIG_RT_LWIP_MEM_DEBUG is not set -# CONFIG_RT_LWIP_MEMP_DEBUG is not set -# CONFIG_RT_LWIP_PBUF_DEBUG is not set -# CONFIG_RT_LWIP_API_LIB_DEBUG is not set -# CONFIG_RT_LWIP_API_MSG_DEBUG is not set -# CONFIG_RT_LWIP_TCPIP_DEBUG is not set -CONFIG_RT_LWIP_NETIF_DEBUG=y -# CONFIG_RT_LWIP_SOCKETS_DEBUG is not set -# CONFIG_RT_LWIP_DNS_DEBUG is not set -# CONFIG_RT_LWIP_AUTOIP_DEBUG is not set -# CONFIG_RT_LWIP_DHCP_DEBUG is not set -# CONFIG_RT_LWIP_IP_DEBUG is not set -# CONFIG_RT_LWIP_IP_REASS_DEBUG is not set -# CONFIG_RT_LWIP_ICMP_DEBUG is not set -# CONFIG_RT_LWIP_IGMP_DEBUG is not set -# CONFIG_RT_LWIP_UDP_DEBUG is not set -# CONFIG_RT_LWIP_TCP_DEBUG is not set -# CONFIG_RT_LWIP_TCP_INPUT_DEBUG is not set -# CONFIG_RT_LWIP_TCP_OUTPUT_DEBUG is not set -# CONFIG_RT_LWIP_TCP_RTO_DEBUG is not set -# CONFIG_RT_LWIP_TCP_CWND_DEBUG is not set -# CONFIG_RT_LWIP_TCP_WND_DEBUG is not set -# CONFIG_RT_LWIP_TCP_FR_DEBUG is not set -# CONFIG_RT_LWIP_TCP_QLEN_DEBUG is not set -# CONFIG_RT_LWIP_TCP_RST_DEBUG is not set -# CONFIG_RT_USING_AT is not set - -# -# Utilities -# -CONFIG_RT_USING_RYM=y -# CONFIG_YMODEM_USING_CRC_TABLE is not set -CONFIG_YMODEM_USING_FILE_TRANSFER=y -# CONFIG_RT_USING_ULOG is not set -# CONFIG_RT_USING_UTEST is not set -# CONFIG_RT_USING_VAR_EXPORT is not set -CONFIG_RT_USING_ADT=y -# CONFIG_RT_USING_RT_LINK is not set -# CONFIG_RT_USING_VBUS is not set - -# -# RT-Thread Utestcases -# -# CONFIG_RT_USING_UTESTCASES is not set - -# -# RT-Thread online packages -# - -# -# IoT - internet of things -# -# CONFIG_PKG_USING_LWIP is not set -# CONFIG_PKG_USING_LORAWAN_DRIVER is not set -# CONFIG_PKG_USING_PAHOMQTT is not set -# CONFIG_PKG_USING_UMQTT is not set -# CONFIG_PKG_USING_WEBCLIENT is not set -# CONFIG_PKG_USING_WEBNET is not set -# CONFIG_PKG_USING_MONGOOSE is not set -# CONFIG_PKG_USING_MYMQTT is not set -# CONFIG_PKG_USING_KAWAII_MQTT is not set -# CONFIG_PKG_USING_BC28_MQTT is not set -# CONFIG_PKG_USING_WEBTERMINAL is not set -# CONFIG_PKG_USING_LIBMODBUS is not set -# CONFIG_PKG_USING_FREEMODBUS is not set -# CONFIG_PKG_USING_NANOPB is not set - -# -# Wi-Fi -# - -# -# Marvell WiFi -# -# CONFIG_PKG_USING_WLANMARVELL is not set - -# -# Wiced WiFi -# -# CONFIG_PKG_USING_WLAN_WICED is not set -# CONFIG_PKG_USING_RW007 is not set -# CONFIG_PKG_USING_COAP is not set -# CONFIG_PKG_USING_NOPOLL is not set -# CONFIG_PKG_USING_NETUTILS is not set -# CONFIG_PKG_USING_CMUX is not set -# CONFIG_PKG_USING_PPP_DEVICE is not set -# CONFIG_PKG_USING_AT_DEVICE is not set -# CONFIG_PKG_USING_ATSRV_SOCKET is not set -# CONFIG_PKG_USING_WIZNET is not set -# CONFIG_PKG_USING_ZB_COORDINATOR is not set - -# -# IoT Cloud -# -# CONFIG_PKG_USING_ONENET is not set -# CONFIG_PKG_USING_GAGENT_CLOUD is not set -# CONFIG_PKG_USING_ALI_IOTKIT is not set -# CONFIG_PKG_USING_AZURE is not set -# CONFIG_PKG_USING_TENCENT_IOT_EXPLORER is not set -# CONFIG_PKG_USING_JIOT-C-SDK is not set -# CONFIG_PKG_USING_UCLOUD_IOT_SDK is not set -# CONFIG_PKG_USING_JOYLINK is not set -# CONFIG_PKG_USING_EZ_IOT_OS is not set -# CONFIG_PKG_USING_IOTSHARP_SDK is not set -# CONFIG_PKG_USING_NIMBLE is not set -# CONFIG_PKG_USING_LLSYNC_SDK_ADAPTER is not set -# CONFIG_PKG_USING_OTA_DOWNLOADER is not set -# CONFIG_PKG_USING_IPMSG is not set -# CONFIG_PKG_USING_LSSDP is not set -# CONFIG_PKG_USING_AIRKISS_OPEN is not set -# CONFIG_PKG_USING_LIBRWS is not set -# CONFIG_PKG_USING_TCPSERVER is not set -# CONFIG_PKG_USING_PROTOBUF_C is not set -# CONFIG_PKG_USING_DLT645 is not set -# CONFIG_PKG_USING_QXWZ is not set -# CONFIG_PKG_USING_SMTP_CLIENT is not set -# CONFIG_PKG_USING_ABUP_FOTA is not set -# CONFIG_PKG_USING_LIBCURL2RTT is not set -# CONFIG_PKG_USING_CAPNP is not set -# CONFIG_PKG_USING_AGILE_TELNET is not set -# CONFIG_PKG_USING_NMEALIB is not set -# CONFIG_PKG_USING_PDULIB is not set -# CONFIG_PKG_USING_BTSTACK is not set -# CONFIG_PKG_USING_LORAWAN_ED_STACK is not set -# CONFIG_PKG_USING_WAYZ_IOTKIT is not set -# CONFIG_PKG_USING_MAVLINK is not set -# CONFIG_PKG_USING_BSAL is not set -# CONFIG_PKG_USING_AGILE_MODBUS is not set -# CONFIG_PKG_USING_AGILE_FTP is not set -# CONFIG_PKG_USING_EMBEDDEDPROTO is not set -# CONFIG_PKG_USING_RT_LINK_HW is not set -# CONFIG_PKG_USING_RYANMQTT is not set -# CONFIG_PKG_USING_RYANW5500 is not set -# CONFIG_PKG_USING_LORA_PKT_FWD is not set -# CONFIG_PKG_USING_LORA_GW_DRIVER_LIB is not set -# CONFIG_PKG_USING_LORA_PKT_SNIFFER is not set -# CONFIG_PKG_USING_HM is not set -# CONFIG_PKG_USING_SMALL_MODBUS is not set -# CONFIG_PKG_USING_NET_SERVER is not set -# CONFIG_PKG_USING_ZFTP is not set -# CONFIG_PKG_USING_WOL is not set -# CONFIG_PKG_USING_ZEPHYR_POLLING is not set - -# -# security packages -# -# CONFIG_PKG_USING_MBEDTLS is not set -# CONFIG_PKG_USING_LIBSODIUM is not set -# CONFIG_PKG_USING_LIBHYDROGEN is not set -# CONFIG_PKG_USING_TINYCRYPT is not set -# CONFIG_PKG_USING_TFM is not set -# CONFIG_PKG_USING_YD_CRYPTO is not set - -# -# language packages -# - -# -# JSON: JavaScript Object Notation, a lightweight data-interchange format -# -# CONFIG_PKG_USING_CJSON is not set -# CONFIG_PKG_USING_LJSON is not set -# CONFIG_PKG_USING_RT_CJSON_TOOLS is not set -# CONFIG_PKG_USING_RAPIDJSON is not set -# CONFIG_PKG_USING_JSMN is not set -# CONFIG_PKG_USING_AGILE_JSMN is not set -# CONFIG_PKG_USING_PARSON is not set - -# -# XML: Extensible Markup Language -# -# CONFIG_PKG_USING_SIMPLE_XML is not set -# CONFIG_PKG_USING_EZXML is not set -# CONFIG_PKG_USING_LUATOS_SOC is not set -# CONFIG_PKG_USING_LUA is not set -# CONFIG_PKG_USING_JERRYSCRIPT is not set -# CONFIG_PKG_USING_MICROPYTHON is not set -# CONFIG_PKG_USING_PIKASCRIPT is not set -# CONFIG_PKG_USING_RTT_RUST is not set - -# -# multimedia packages -# - -# -# LVGL: powerful and easy-to-use embedded GUI library -# -# CONFIG_PKG_USING_LVGL is not set -# CONFIG_PKG_USING_LITTLEVGL2RTT is not set -# CONFIG_PKG_USING_LV_MUSIC_DEMO is not set -# CONFIG_PKG_USING_GUI_GUIDER_DEMO is not set - -# -# u8g2: a monochrome graphic library -# -# CONFIG_PKG_USING_U8G2_OFFICIAL is not set -# CONFIG_PKG_USING_U8G2 is not set -# CONFIG_PKG_USING_OPENMV is not set -# CONFIG_PKG_USING_MUPDF is not set -# CONFIG_PKG_USING_STEMWIN is not set -# CONFIG_PKG_USING_WAVPLAYER is not set -# CONFIG_PKG_USING_TJPGD is not set -# CONFIG_PKG_USING_PDFGEN is not set -# CONFIG_PKG_USING_HELIX is not set -# CONFIG_PKG_USING_AZUREGUIX is not set -# CONFIG_PKG_USING_TOUCHGFX2RTT is not set -# CONFIG_PKG_USING_NUEMWIN is not set -# CONFIG_PKG_USING_MP3PLAYER is not set -# CONFIG_PKG_USING_TINYJPEG is not set -# CONFIG_PKG_USING_UGUI is not set -# CONFIG_PKG_USING_MCURSES is not set -# CONFIG_PKG_USING_TERMBOX is not set -# CONFIG_PKG_USING_VT100 is not set -# CONFIG_PKG_USING_QRCODE is not set -# CONFIG_PKG_USING_GUIENGINE is not set -# CONFIG_PKG_USING_3GPP_AMRNB is not set - -# -# tools packages -# -# CONFIG_PKG_USING_CMBACKTRACE is not set -# CONFIG_PKG_USING_EASYFLASH is not set -# CONFIG_PKG_USING_EASYLOGGER is not set -# CONFIG_PKG_USING_SYSTEMVIEW is not set -# CONFIG_PKG_USING_SEGGER_RTT is not set -# CONFIG_PKG_USING_RTT_AUTO_EXE_CMD is not set -# CONFIG_PKG_USING_RDB is not set -# CONFIG_PKG_USING_ULOG_EASYFLASH is not set -# CONFIG_PKG_USING_LOGMGR is not set -# CONFIG_PKG_USING_ADBD is not set -# CONFIG_PKG_USING_COREMARK is not set -# CONFIG_PKG_USING_DHRYSTONE is not set -# CONFIG_PKG_USING_MEMORYPERF is not set -# CONFIG_PKG_USING_NR_MICRO_SHELL is not set -# CONFIG_PKG_USING_CHINESE_FONT_LIBRARY is not set -# CONFIG_PKG_USING_LUNAR_CALENDAR is not set -# CONFIG_PKG_USING_BS8116A is not set -# CONFIG_PKG_USING_GPS_RMC is not set -# CONFIG_PKG_USING_URLENCODE is not set -# CONFIG_PKG_USING_UMCN is not set -# CONFIG_PKG_USING_LWRB2RTT is not set -# CONFIG_PKG_USING_CPU_USAGE is not set -# CONFIG_PKG_USING_GBK2UTF8 is not set -# CONFIG_PKG_USING_VCONSOLE is not set -# CONFIG_PKG_USING_KDB is not set -# CONFIG_PKG_USING_WAMR is not set -# CONFIG_PKG_USING_MICRO_XRCE_DDS_CLIENT is not set -# CONFIG_PKG_USING_LWLOG is not set -# CONFIG_PKG_USING_ANV_TRACE is not set -# CONFIG_PKG_USING_ANV_MEMLEAK is not set -# CONFIG_PKG_USING_ANV_TESTSUIT is not set -# CONFIG_PKG_USING_ANV_BENCH is not set -# CONFIG_PKG_USING_DEVMEM is not set -# CONFIG_PKG_USING_REGEX is not set -# CONFIG_PKG_USING_MEM_SANDBOX is not set -# CONFIG_PKG_USING_SOLAR_TERMS is not set -# CONFIG_PKG_USING_GAN_ZHI is not set -# CONFIG_PKG_USING_FDT is not set -# CONFIG_PKG_USING_CBOX is not set -# CONFIG_PKG_USING_SNOWFLAKE is not set -# CONFIG_PKG_USING_HASH_MATCH is not set -# CONFIG_PKG_USING_ARMV7M_DWT_TOOL is not set -# CONFIG_PKG_USING_VOFA_PLUS is not set - -# -# system packages -# - -# -# enhanced kernel services -# -# CONFIG_PKG_USING_RT_MEMCPY_CM is not set -# CONFIG_PKG_USING_RT_KPRINTF_THREADSAFE is not set -# CONFIG_PKG_USING_RT_VSNPRINTF_FULL is not set - -# -# acceleration: Assembly language or algorithmic acceleration packages -# -# CONFIG_PKG_USING_QFPLIB_M0_FULL is not set -# CONFIG_PKG_USING_QFPLIB_M0_TINY is not set -# CONFIG_PKG_USING_QFPLIB_M3 is not set - -# -# CMSIS: ARM Cortex-M Microcontroller Software Interface Standard -# -# CONFIG_PKG_USING_CMSIS_5 is not set -# CONFIG_PKG_USING_CMSIS_RTOS1 is not set -# CONFIG_PKG_USING_CMSIS_RTOS2 is not set - -# -# Micrium: Micrium software products porting for RT-Thread -# -# CONFIG_PKG_USING_UCOSIII_WRAPPER is not set -# CONFIG_PKG_USING_UCOSII_WRAPPER is not set -# CONFIG_PKG_USING_UC_CRC is not set -# CONFIG_PKG_USING_UC_CLK is not set -# CONFIG_PKG_USING_UC_COMMON is not set -# CONFIG_PKG_USING_UC_MODBUS is not set -# CONFIG_PKG_USING_FREERTOS_WRAPPER is not set -# CONFIG_PKG_USING_CAIRO is not set -# CONFIG_PKG_USING_PIXMAN is not set -# CONFIG_PKG_USING_PARTITION is not set -# CONFIG_PKG_USING_PERF_COUNTER is not set -# CONFIG_PKG_USING_FLASHDB is not set -# CONFIG_PKG_USING_SQLITE is not set -# CONFIG_PKG_USING_RTI is not set -# CONFIG_PKG_USING_DFS_YAFFS is not set -# CONFIG_PKG_USING_LITTLEFS is not set -# CONFIG_PKG_USING_DFS_JFFS2 is not set -# CONFIG_PKG_USING_DFS_UFFS is not set -# CONFIG_PKG_USING_LWEXT4 is not set -# CONFIG_PKG_USING_THREAD_POOL is not set -# CONFIG_PKG_USING_ROBOTS is not set -# CONFIG_PKG_USING_EV is not set -# CONFIG_PKG_USING_SYSWATCH is not set -# CONFIG_PKG_USING_SYS_LOAD_MONITOR is not set -# CONFIG_PKG_USING_PLCCORE is not set -# CONFIG_PKG_USING_RAMDISK is not set -# CONFIG_PKG_USING_MININI is not set -# CONFIG_PKG_USING_QBOOT is not set -# CONFIG_PKG_USING_PPOOL is not set -# CONFIG_PKG_USING_OPENAMP is not set -# CONFIG_PKG_USING_LPM is not set -# CONFIG_PKG_USING_TLSF is not set -# CONFIG_PKG_USING_EVENT_RECORDER is not set -# CONFIG_PKG_USING_ARM_2D is not set -# CONFIG_PKG_USING_MCUBOOT is not set -# CONFIG_PKG_USING_TINYUSB is not set -# CONFIG_PKG_USING_CHERRYUSB is not set -# CONFIG_PKG_USING_KMULTI_RTIMER is not set -# CONFIG_PKG_USING_TFDB is not set -# CONFIG_PKG_USING_QPC is not set -# CONFIG_PKG_USING_AGILE_UPGRADE is not set -# CONFIG_PKG_USING_FLASH_BLOB is not set - -# -# peripheral libraries and drivers -# - -# -# sensors drivers -# -# CONFIG_PKG_USING_LSM6DSM is not set -# CONFIG_PKG_USING_LSM6DSL is not set -# CONFIG_PKG_USING_LPS22HB is not set -# CONFIG_PKG_USING_HTS221 is not set -# CONFIG_PKG_USING_LSM303AGR is not set -# CONFIG_PKG_USING_BME280 is not set -# CONFIG_PKG_USING_BME680 is not set -# CONFIG_PKG_USING_BMA400 is not set -# CONFIG_PKG_USING_BMI160_BMX160 is not set -# CONFIG_PKG_USING_SPL0601 is not set -# CONFIG_PKG_USING_MS5805 is not set -# CONFIG_PKG_USING_DA270 is not set -# CONFIG_PKG_USING_DF220 is not set -# CONFIG_PKG_USING_HSHCAL001 is not set -# CONFIG_PKG_USING_BH1750 is not set -# CONFIG_PKG_USING_MPU6XXX is not set -# CONFIG_PKG_USING_AHT10 is not set -# CONFIG_PKG_USING_AP3216C is not set -# CONFIG_PKG_USING_TSL4531 is not set -# CONFIG_PKG_USING_DS18B20 is not set -# CONFIG_PKG_USING_DHT11 is not set -# CONFIG_PKG_USING_DHTXX is not set -# CONFIG_PKG_USING_GY271 is not set -# CONFIG_PKG_USING_GP2Y10 is not set -# CONFIG_PKG_USING_SGP30 is not set -# CONFIG_PKG_USING_HDC1000 is not set -# CONFIG_PKG_USING_BMP180 is not set -# CONFIG_PKG_USING_BMP280 is not set -# CONFIG_PKG_USING_SHTC1 is not set -# CONFIG_PKG_USING_BMI088 is not set -# CONFIG_PKG_USING_HMC5883 is not set -# CONFIG_PKG_USING_MAX6675 is not set -# CONFIG_PKG_USING_TMP1075 is not set -# CONFIG_PKG_USING_SR04 is not set -# CONFIG_PKG_USING_CCS811 is not set -# CONFIG_PKG_USING_PMSXX is not set -# CONFIG_PKG_USING_RT3020 is not set -# CONFIG_PKG_USING_MLX90632 is not set -# CONFIG_PKG_USING_MLX90393 is not set -# CONFIG_PKG_USING_MLX90392 is not set -# CONFIG_PKG_USING_MLX90397 is not set -# CONFIG_PKG_USING_MS5611 is not set -# CONFIG_PKG_USING_MAX31865 is not set -# CONFIG_PKG_USING_VL53L0X is not set -# CONFIG_PKG_USING_INA260 is not set -# CONFIG_PKG_USING_MAX30102 is not set -# CONFIG_PKG_USING_INA226 is not set -# CONFIG_PKG_USING_LIS2DH12 is not set -# CONFIG_PKG_USING_HS300X is not set -# CONFIG_PKG_USING_ZMOD4410 is not set -# CONFIG_PKG_USING_ISL29035 is not set -# CONFIG_PKG_USING_MMC3680KJ is not set -# CONFIG_PKG_USING_QMP6989 is not set -# CONFIG_PKG_USING_BALANCE is not set -# CONFIG_PKG_USING_SHT2X is not set -# CONFIG_PKG_USING_SHT3X is not set -# CONFIG_PKG_USING_AD7746 is not set -# CONFIG_PKG_USING_ADT74XX is not set -# CONFIG_PKG_USING_MAX17048 is not set -# CONFIG_PKG_USING_AS7341 is not set -# CONFIG_PKG_USING_CW2015 is not set -# CONFIG_PKG_USING_ICM20608 is not set -# CONFIG_PKG_USING_PAJ7620 is not set -# CONFIG_PKG_USING_STHS34PF80 is not set - -# -# touch drivers -# -# CONFIG_PKG_USING_GT9147 is not set -# CONFIG_PKG_USING_GT1151 is not set -# CONFIG_PKG_USING_GT917S is not set -# CONFIG_PKG_USING_GT911 is not set -# CONFIG_PKG_USING_FT6206 is not set -# CONFIG_PKG_USING_FT5426 is not set -# CONFIG_PKG_USING_FT6236 is not set -# CONFIG_PKG_USING_XPT2046_TOUCH is not set -# CONFIG_PKG_USING_REALTEK_AMEBA is not set -# CONFIG_PKG_USING_STM32_SDIO is not set -# CONFIG_PKG_USING_ESP_IDF is not set -# CONFIG_PKG_USING_BUTTON is not set -# CONFIG_PKG_USING_PCF8574 is not set -# CONFIG_PKG_USING_SX12XX is not set -# CONFIG_PKG_USING_SIGNAL_LED is not set -# CONFIG_PKG_USING_LEDBLINK is not set -# CONFIG_PKG_USING_LITTLED is not set -# CONFIG_PKG_USING_LKDGUI is not set -# CONFIG_PKG_USING_NRF5X_SDK is not set -# CONFIG_PKG_USING_NRFX is not set - -# -# Kendryte SDK -# -# CONFIG_PKG_USING_K210_SDK is not set -# CONFIG_PKG_USING_KENDRYTE_SDK is not set -# CONFIG_PKG_USING_INFRARED is not set -# CONFIG_PKG_USING_MULTI_INFRARED is not set -# CONFIG_PKG_USING_AGILE_BUTTON is not set -# CONFIG_PKG_USING_AGILE_LED is not set -# CONFIG_PKG_USING_AT24CXX is not set -# CONFIG_PKG_USING_MOTIONDRIVER2RTT is not set -# CONFIG_PKG_USING_PCA9685 is not set -# CONFIG_PKG_USING_ILI9341 is not set -# CONFIG_PKG_USING_I2C_TOOLS is not set -# CONFIG_PKG_USING_NRF24L01 is not set -# CONFIG_PKG_USING_RPLIDAR is not set -# CONFIG_PKG_USING_AS608 is not set -# CONFIG_PKG_USING_RC522 is not set -# CONFIG_PKG_USING_WS2812B is not set -# CONFIG_PKG_USING_EMBARC_BSP is not set -# CONFIG_PKG_USING_EXTERN_RTC_DRIVERS is not set -# CONFIG_PKG_USING_MULTI_RTIMER is not set -# CONFIG_PKG_USING_MAX7219 is not set -# CONFIG_PKG_USING_BEEP is not set -# CONFIG_PKG_USING_EASYBLINK is not set -# CONFIG_PKG_USING_PMS_SERIES is not set -# CONFIG_PKG_USING_CAN_YMODEM is not set -# CONFIG_PKG_USING_LORA_RADIO_DRIVER is not set -# CONFIG_PKG_USING_QLED is not set -# CONFIG_PKG_USING_AGILE_CONSOLE is not set -# CONFIG_PKG_USING_LD3320 is not set -# CONFIG_PKG_USING_WK2124 is not set -# CONFIG_PKG_USING_LY68L6400 is not set -# CONFIG_PKG_USING_DM9051 is not set -# CONFIG_PKG_USING_SSD1306 is not set -# CONFIG_PKG_USING_QKEY is not set -# CONFIG_PKG_USING_RS485 is not set -# CONFIG_PKG_USING_RS232 is not set -# CONFIG_PKG_USING_NES is not set -# CONFIG_PKG_USING_VIRTUAL_SENSOR is not set -# CONFIG_PKG_USING_VDEVICE is not set -# CONFIG_PKG_USING_SGM706 is not set -# CONFIG_PKG_USING_STM32WB55_SDK is not set -# CONFIG_PKG_USING_RDA58XX is not set -# CONFIG_PKG_USING_LIBNFC is not set -# CONFIG_PKG_USING_MFOC is not set -# CONFIG_PKG_USING_TMC51XX is not set -# CONFIG_PKG_USING_TCA9534 is not set -# CONFIG_PKG_USING_KOBUKI is not set -# CONFIG_PKG_USING_ROSSERIAL is not set -# CONFIG_PKG_USING_MICRO_ROS is not set -# CONFIG_PKG_USING_MCP23008 is not set -# CONFIG_PKG_USING_BLUETRUM_SDK is not set -# CONFIG_PKG_USING_MISAKA_AT24CXX is not set -# CONFIG_PKG_USING_MISAKA_RGB_BLING is not set -# CONFIG_PKG_USING_LORA_MODEM_DRIVER is not set -# CONFIG_PKG_USING_SOFT_SERIAL is not set -# CONFIG_PKG_USING_MB85RS16 is not set -# CONFIG_PKG_USING_RFM300 is not set -# CONFIG_PKG_USING_IO_INPUT_FILTER is not set -# CONFIG_PKG_USING_RASPBERRYPI_PICO_SDK is not set -# CONFIG_PKG_USING_LRF_NV7LIDAR is not set -# CONFIG_PKG_USING_FINGERPRINT is not set - -# -# AI packages -# -# CONFIG_PKG_USING_LIBANN is not set -# CONFIG_PKG_USING_NNOM is not set -# CONFIG_PKG_USING_ONNX_BACKEND is not set -# CONFIG_PKG_USING_ONNX_PARSER is not set -# CONFIG_PKG_USING_TENSORFLOWLITEMICRO is not set -# CONFIG_PKG_USING_ELAPACK is not set -# CONFIG_PKG_USING_ULAPACK is not set -# CONFIG_PKG_USING_QUEST is not set -# CONFIG_PKG_USING_NAXOS is not set - -# -# Signal Processing and Control Algorithm Packages -# -# CONFIG_PKG_USING_FIRE_PID_CURVE is not set -# CONFIG_PKG_USING_UKAL is not set - -# -# miscellaneous packages -# - -# -# project laboratory -# - -# -# samples: kernel and components samples -# -CONFIG_PKG_USING_KERNEL_SAMPLES=y -CONFIG_PKG_KERNEL_SAMPLES_PATH="/packages/misc/samples/kernel_samples" -# CONFIG_PKG_USING_KERNEL_SAMPLES_V030 is not set -# CONFIG_PKG_USING_KERNEL_SAMPLES_V040 is not set -CONFIG_PKG_USING_KERNEL_SAMPLES_LATEST_VERSION=y -CONFIG_PKG_KERNEL_SAMPLES_VER="latest" -CONFIG_PKG_USING_KERNEL_SAMPLES_EN=y -# CONFIG_PKG_USING_KERNEL_SAMPLES_ZH is not set -# CONFIG_KERNEL_SAMPLES_USING_THREAD is not set -# CONFIG_KERNEL_SAMPLES_USING_SEMAPHORE is not set -# CONFIG_KERNEL_SAMPLES_USING_MUTEX is not set -# CONFIG_KERNEL_SAMPLES_USING_MAILBOX is not set -# CONFIG_KERNEL_SAMPLES_USING_EVENT is not set -# CONFIG_KERNEL_SAMPLES_USING_MESSAGEQUEUE is not set -# CONFIG_KERNEL_SAMPLES_USING_TIMER is not set -# CONFIG_KERNEL_SAMPLES_USING_HEAP is not set -# CONFIG_KERNEL_SAMPLES_USING_MEMHEAP is not set -# CONFIG_KERNEL_SAMPLES_USING_MEMPOOL is not set -# CONFIG_KERNEL_SAMPLES_USING_IDLEHOOK is not set -# CONFIG_KERNEL_SAMPLES_USING_SIGNAL is not set -# CONFIG_KERNEL_SAMPLES_USING_INTERRUPT is not set -# CONFIG_KERNEL_SAMPLES_USING_PRI_INVERSION is not set -# CONFIG_KERNEL_SAMPLES_USING_TIME_SLICE is not set -# CONFIG_KERNEL_SAMPLES_USING_SCHEDULER_HOOK is not set -# CONFIG_KERNEL_SAMPLES_USING_PRODUCER_CONSUMER is not set -# CONFIG_PKG_USING_FILESYSTEM_SAMPLES is not set -# CONFIG_PKG_USING_NETWORK_SAMPLES is not set -# CONFIG_PKG_USING_PERIPHERAL_SAMPLES is not set - -# -# entertainment: terminal games and other interesting software packages -# -# CONFIG_PKG_USING_CMATRIX is not set -# CONFIG_PKG_USING_SL is not set -# CONFIG_PKG_USING_CAL is not set -# CONFIG_PKG_USING_ACLOCK is not set -# CONFIG_PKG_USING_THREES is not set -# CONFIG_PKG_USING_2048 is not set -# CONFIG_PKG_USING_SNAKE is not set -# CONFIG_PKG_USING_TETRIS is not set -# CONFIG_PKG_USING_DONUT is not set -# CONFIG_PKG_USING_COWSAY is not set -# CONFIG_PKG_USING_MORSE is not set -# CONFIG_PKG_USING_LIBCSV is not set -# CONFIG_PKG_USING_OPTPARSE is not set -# CONFIG_PKG_USING_FASTLZ is not set -# CONFIG_PKG_USING_MINILZO is not set -# CONFIG_PKG_USING_QUICKLZ is not set -# CONFIG_PKG_USING_LZMA is not set -# CONFIG_PKG_USING_MULTIBUTTON is not set -# CONFIG_PKG_USING_FLEXIBLE_BUTTON is not set -# CONFIG_PKG_USING_CANFESTIVAL is not set -# CONFIG_PKG_USING_ZLIB is not set -# CONFIG_PKG_USING_MINIZIP is not set -# CONFIG_PKG_USING_HEATSHRINK is not set -# CONFIG_PKG_USING_DSTR is not set -# CONFIG_PKG_USING_TINYFRAME is not set -# CONFIG_PKG_USING_KENDRYTE_DEMO is not set -# CONFIG_PKG_USING_DIGITALCTRL is not set -# CONFIG_PKG_USING_UPACKER is not set -# CONFIG_PKG_USING_UPARAM is not set -# CONFIG_PKG_USING_HELLO is not set -# CONFIG_PKG_USING_VI is not set -# CONFIG_PKG_USING_KI is not set -# CONFIG_PKG_USING_ARMv7M_DWT is not set -# CONFIG_PKG_USING_CRCLIB is not set -# CONFIG_PKG_USING_LWGPS is not set -# CONFIG_PKG_USING_STATE_MACHINE is not set -# CONFIG_PKG_USING_DESIGN_PATTERN is not set -# CONFIG_PKG_USING_CONTROLLER is not set -# CONFIG_PKG_USING_PHASE_LOCKED_LOOP is not set -# CONFIG_PKG_USING_MFBD is not set -# CONFIG_PKG_USING_SLCAN2RTT is not set -# CONFIG_PKG_USING_SOEM is not set -# CONFIG_PKG_USING_QPARAM is not set -# CONFIG_PKG_USING_CorevMCU_CLI is not set - -# -# Arduino libraries -# -# CONFIG_PKG_USING_RTDUINO is not set - -# -# Projects -# -# CONFIG_PKG_USING_ARDUINO_ULTRASOUND_RADAR is not set -# CONFIG_PKG_USING_ARDUINO_SENSOR_KIT is not set -# CONFIG_PKG_USING_ARDUINO_MATLAB_SUPPORT is not set - -# -# Sensors -# -# CONFIG_PKG_USING_ARDUINO_SENSOR_DEVICE_DRIVERS is not set -# CONFIG_PKG_USING_ARDUINO_CAPACITIVESENSOR is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADXL375 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL53L0X is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL53L1X is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SENSOR is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL6180X is not set -# CONFIG_PKG_USING_ADAFRUIT_MAX31855 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX31865 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX31856 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX6675 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90614 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM9DS1 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AHTX0 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM9DS0 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP280 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADT7410 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP085 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BME680 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP9808 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP4728 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_INA219 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LTR390 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADXL345 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DHT is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP9600 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM6DS is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BNO055 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX1704X is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MMC56X3 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90393 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90395 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ICM20X is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DPS310 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HTS221 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SHT4X is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SHT31 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADXL343 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BME280 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AS726X is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AMG88XX is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AM2320 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AM2315 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LTR329_LTR303 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP085_UNIFIED is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP183 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP183_UNIFIED is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP3XX is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MS8607 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS3MDL is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90640 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MMA8451 is not set -# CONFIG_PKG_USING_ADAFRUIT_MSA301 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPL115A2 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BNO08X is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BNO08X_RVC is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS2MDL is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM303DLH_MAG is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LC709203F is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_CAP1188 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_CCS811 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_NAU7802 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS331 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LPS2X is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LPS35HW is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM303_ACCEL is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS3DH is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCF8591 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPL3115A2 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPR121 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPRLS is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPU6050 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCT2075 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PM25AQI is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_EMC2101 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_FXAS21002C is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SCD30 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_FXOS8700 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HMC5883_UNIFIED is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SGP30 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TMP006 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TLA202X is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TCS34725 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI7021 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI1145 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SGP40 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SHTC3 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HDC1000 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HTU21DF is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AS7341 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HTU31D is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SENSORLAB is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_INA260 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TMP007_LIBRARY is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_L3GD20 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TMP117 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TSC2007 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TSL2561 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TSL2591_LIBRARY is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VCNL4040 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VEML6070 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VEML6075 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VEML7700 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_LIS3DHTR is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_DHT is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_ADXL335 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_ADXL345 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_BME280 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_BMP280 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_H3LIS331DL is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_MMA7660 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_TSL2561 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_PAJ7620 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_VL53L0X is not set -# CONFIG_PKG_USING_SEEED_ITG3200 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_SHT31 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_HP20X is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_DRV2605L is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_BBM150 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_HMC5883L is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_LSM303DLH is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_TCS3414CS is not set -# CONFIG_PKG_USING_SEEED_MP503 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_BMP085 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_HIGHTEMP is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_VEML6070 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_SI1145 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_SHT35 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_AT42QT1070 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_LSM6DS3 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_HDC1000 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_HM3301 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_MCP9600 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_LTC2941 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_LDC1612 is not set - -# -# Display -# -# CONFIG_PKG_USING_ARDUINO_U8G2 is not set -# CONFIG_PKG_USING_ARDUINO_U8GLIB_ARDUINO is not set -# CONFIG_PKG_USING_SEEED_TM1637 is not set - -# -# Timing -# -# CONFIG_PKG_USING_ARDUINO_MSTIMER2 is not set - -# -# Data Processing -# -# CONFIG_PKG_USING_ARDUINO_KALMANFILTER is not set -# CONFIG_PKG_USING_ARDUINO_ARDUINOJSON is not set - -# -# Data Storage -# - -# -# Communication -# -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PN532 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI4713 is not set - -# -# Device Control -# -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCF8574 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCA9685 is not set -# CONFIG_PKG_USING_ARDUINO_SEEED_PCF85063TP is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TPA2016 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DRV2605 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DS1841 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DS3502 is not set - -# -# Other -# -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MFRC630 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI5351 is not set -# CONFIG_PKG_USING_ARDUINO_RTCLIB is not set - -# -# Signal IO -# -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BUSIO is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TCA8418 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP23017 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADS1X15 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AW9523 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP3008 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP4725 is not set -# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BD3491FS is not set - -# -# Uncategorized -# - -# -# Hardware Drivers -# - -# -# On-chip Peripheral Drivers -# -CONFIG_BSP_USING_UART=y -CONFIG_RT_USING_UART1=y -# CONFIG_RT_USING_UART0 is not set -# CONFIG_BSP_USING_SPI is not set -# CONFIG_BSP_USING_CAN is not set -# CONFIG_BSP_USING_GPIO is not set -# CONFIG_BSP_USING_QSPI is not set -CONFIG_BSP_USING_ETH=y -CONFIG_RT_LWIP_PBUF_POOL_BUFSIZE=1700 -# CONFIG_BSP_USING_SDIO is not set - -# -# Board extended module Drivers -# -CONFIG_BSP_USING_GIC=y -CONFIG_BSP_USING_GICV3=y -CONFIG_PHYTIUM_ARCH_AARCH64=y -CONFIG_ARM_SPI_BIND_CPU_ID=2 - -# -# Standalone Setting -# -CONFIG_TARGET_ARMV8_AARCH64=y - -# -# Board Configuration -# -# CONFIG_TARGET_F2000_4 is not set -# CONFIG_TARGET_D2000 is not set -CONFIG_TARGET_E2000Q=y -# CONFIG_TARGET_E2000D is not set -# CONFIG_TARGET_E2000S is not set -CONFIG_TARGET_E2000=y -CONFIG_DEFAULT_DEBUG_PRINT_UART1=y -# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set -# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set - -# -# Components Configuration -# -CONFIG_USE_SPI=y -CONFIG_USE_FSPIM=y -CONFIG_USE_QSPI=y - -# -# Qspi Configuration -# -CONFIG_USE_FQSPI=y -# CONFIG_USE_GIC is not set -CONFIG_USE_IOPAD=y -CONFIG_ENABLE_IOPAD=y -CONFIG_USE_SERIAL=y - -# -# Usart Configuration -# -CONFIG_ENABLE_Pl011_UART=y -# CONFIG_USE_GPIO is not set -CONFIG_USE_ETH=y - -# -# Eth Configuration -# -CONFIG_ENABLE_FXMAC=y -# CONFIG_ENABLE_FGMAC is not set -CONFIG_FXMAC_PHY_COMMON=y -# CONFIG_FXMAC_PHY_YT is not set -# CONFIG_USE_CAN is not set -# CONFIG_USE_I2C is not set -# CONFIG_USE_TIMER is not set -# CONFIG_USE_MIO is not set -# CONFIG_USE_SDMMC is not set -# CONFIG_USE_PCIE is not set -# CONFIG_USE_WDT is not set -# CONFIG_USE_DMA is not set -# CONFIG_USE_NAND is not set -# CONFIG_USE_RTC is not set -# CONFIG_USE_SATA is not set -# CONFIG_USE_USB is not set -# CONFIG_USE_ADC is not set -# CONFIG_USE_PWM is not set -# CONFIG_USE_IPC is not set -# CONFIG_USE_MEDIA is not set -# CONFIG_USE_SCMI_MHU is not set -# CONFIG_LOG_VERBOS is not set -# CONFIG_LOG_DEBUG is not set -# CONFIG_LOG_INFO is not set -# CONFIG_LOG_WARN is not set -CONFIG_LOG_ERROR=y -# CONFIG_LOG_NONE is not set -# CONFIG_USE_DEFAULT_INTERRUPT_CONFIG is not set -# CONFIG_LOG_EXTRA_INFO is not set -# CONFIG_LOG_DISPALY_CORE_NUM is not set -# CONFIG_BOOTUP_DEBUG_PRINTS is not set -CONFIG_PHYTIUM_RTT_TEST=y -# CONFIG_ENABLE_RTT_UTEST is not set -# CONFIG_ENABLE_KERNEL_TEST is not set -# CONFIG_ENABLE_KERNEL_SAMPLE is not set -# CONFIG_ENABLE_COREMARK is not set -# CONFIG_ENABLE_DHRYSTONE is not set diff --git a/bsp/phytium/aarch64/configs/e2000q_rtthread_test.h b/bsp/phytium/aarch64/configs/e2000q_rtthread_test.h deleted file mode 100644 index e50c791aea..0000000000 --- a/bsp/phytium/aarch64/configs/e2000q_rtthread_test.h +++ /dev/null @@ -1,386 +0,0 @@ -#ifndef RT_CONFIG_H__ -#define RT_CONFIG_H__ - -/* Automatically generated file; DO NOT EDIT. */ -/* RT-Thread Project Configuration */ - -/* RT-Thread Kernel */ - -#define RT_NAME_MAX 16 -#define RT_USING_SMP -#define RT_CPUS_NR 2 -#define RT_ALIGN_SIZE 4 -#define RT_THREAD_PRIORITY_32 -#define RT_THREAD_PRIORITY_MAX 32 -#define RT_TICK_PER_SECOND 1000 -#define RT_USING_OVERFLOW_CHECK -#define RT_USING_HOOK -#define RT_HOOK_USING_FUNC_PTR -#define RT_USING_IDLE_HOOK -#define RT_IDLE_HOOK_LIST_SIZE 4 -#define IDLE_THREAD_STACK_SIZE 40960 -#define SYSTEM_THREAD_STACK_SIZE 40960 -#define RT_USING_TIMER_SOFT -#define RT_TIMER_THREAD_PRIO 4 -#define RT_TIMER_THREAD_STACK_SIZE 4096 - -/* kservice optimization */ - -#define RT_KSERVICE_USING_STDLIB -#define RT_KPRINTF_USING_LONGLONG -#define RT_DEBUG - -/* Inter-Thread communication */ - -#define RT_USING_SEMAPHORE -#define RT_USING_MUTEX -#define RT_USING_EVENT -#define RT_USING_MAILBOX -#define RT_USING_MESSAGEQUEUE - -/* Memory Management */ - -#define RT_PAGE_MAX_ORDER 16 -#define RT_USING_SLAB -#define RT_USING_MEMHEAP -#define RT_MEMHEAP_FAST_MODE -#define RT_USING_SLAB_AS_HEAP -#define RT_USING_HEAP_ISR -#define RT_USING_HEAP - -/* Kernel Device Object */ - -#define RT_USING_DEVICE -#define RT_USING_CONSOLE -#define RT_CONSOLEBUF_SIZE 128 -#define RT_CONSOLE_DEVICE_NAME "uart1" -#define RT_VER_NUM 0x50001 -#define ARCH_CPU_64BIT -#define RT_USING_CACHE -#define ARCH_ARM_BOOTWITH_FLUSH_CACHE -#define ARCH_MM_MMU -#define ARCH_ARM -#define ARCH_ARM_MMU -#define ARCH_ARMV8 - -/* RT-Thread Components */ - -#define RT_USING_COMPONENTS_INIT -#define RT_USING_USER_MAIN -#define RT_MAIN_THREAD_STACK_SIZE 8192 -#define RT_MAIN_THREAD_PRIORITY 10 -#define RT_USING_MSH -#define RT_USING_FINSH -#define FINSH_USING_MSH -#define FINSH_THREAD_NAME "tshell" -#define FINSH_THREAD_PRIORITY 20 -#define FINSH_THREAD_STACK_SIZE 4096 -#define FINSH_USING_HISTORY -#define FINSH_HISTORY_LINES 5 -#define FINSH_USING_SYMTAB -#define FINSH_CMD_SIZE 80 -#define MSH_USING_BUILT_IN_COMMANDS -#define FINSH_USING_DESCRIPTION -#define FINSH_ARG_MAX 10 - -/* DFS: device virtual file system */ - -#define RT_USING_DFS -#define DFS_USING_POSIX -#define DFS_USING_WORKDIR -#define DFS_FD_MAX 16 -#define RT_USING_DFS_V1 -#define DFS_FILESYSTEMS_MAX 4 -#define DFS_FILESYSTEM_TYPES_MAX 4 -#define RT_USING_DFS_ELMFAT - -/* elm-chan's FatFs, Generic FAT Filesystem Module */ - -#define RT_DFS_ELM_CODE_PAGE 437 -#define RT_DFS_ELM_WORD_ACCESS -#define RT_DFS_ELM_USE_LFN_3 -#define RT_DFS_ELM_USE_LFN 3 -#define RT_DFS_ELM_LFN_UNICODE_0 -#define RT_DFS_ELM_LFN_UNICODE 0 -#define RT_DFS_ELM_MAX_LFN 255 -#define RT_DFS_ELM_DRIVES 2 -#define RT_DFS_ELM_MAX_SECTOR_SIZE 512 -#define RT_DFS_ELM_REENTRANT -#define RT_DFS_ELM_MUTEX_TIMEOUT 3000 -#define RT_USING_DFS_DEVFS -#define RT_USING_DFS_RAMFS - -/* Device Drivers */ - -#define RT_USING_DEVICE_IPC -#define RT_UNAMED_PIPE_NUMBER 64 -#define RT_USING_SYSTEM_WORKQUEUE -#define RT_SYSTEM_WORKQUEUE_STACKSIZE 8192 -#define RT_SYSTEM_WORKQUEUE_PRIORITY 23 -#define RT_USING_SERIAL -#define RT_USING_SERIAL_V1 -#define RT_SERIAL_USING_DMA -#define RT_SERIAL_RB_BUFSZ 64 -#define RT_USING_NULL -#define RT_USING_ZERO -#define RT_USING_RANDOM -#define RT_USING_RTC - -/* Using USB */ - - -/* C/C++ and POSIX layer */ - -#define RT_LIBC_DEFAULT_TIMEZONE 8 - -/* POSIX (Portable Operating System Interface) layer */ - -#define RT_USING_POSIX_FS -#define RT_USING_POSIX_DEVIO -#define RT_USING_POSIX_STDIO -#define RT_USING_POSIX_TERMIOS -#define RT_USING_POSIX_DELAY -#define RT_USING_POSIX_CLOCK -#define RT_USING_POSIX_TIMER - -/* Interprocess Communication (IPC) */ - - -/* Socket is in the 'Network' category */ - - -/* Network */ - -#define RT_USING_SAL -#define SAL_INTERNET_CHECK - -/* Docking with protocol stacks */ - -#define SAL_USING_LWIP -#define SAL_USING_POSIX -#define RT_USING_NETDEV -#define NETDEV_USING_IFCONFIG -#define NETDEV_USING_PING -#define NETDEV_USING_NETSTAT -#define NETDEV_USING_AUTO_DEFAULT -#define NETDEV_IPV4 1 -#define NETDEV_IPV6 0 -#define RT_USING_LWIP -#define RT_USING_LWIP212 -#define RT_USING_LWIP_VER_NUM 0x20102 -#define RT_LWIP_MEM_ALIGNMENT 64 -#define RT_LWIP_IGMP -#define RT_LWIP_ICMP -#define RT_LWIP_DNS - -/* Static IPv4 Address */ - -#define RT_LWIP_IPADDR "192.168.4.10" -#define RT_LWIP_GWADDR "192.168.4.1" -#define RT_LWIP_MSKADDR "255.255.255.0" -#define RT_LWIP_UDP -#define RT_LWIP_TCP -#define RT_LWIP_RAW -#define RT_MEMP_NUM_NETCONN 8 -#define RT_LWIP_PBUF_NUM 512 -#define RT_LWIP_RAW_PCB_NUM 4 -#define RT_LWIP_UDP_PCB_NUM 4 -#define RT_LWIP_TCP_PCB_NUM 4 -#define RT_LWIP_TCP_SEG_NUM 40 -#define RT_LWIP_TCP_SND_BUF 8196 -#define RT_LWIP_TCP_WND 8196 -#define RT_LWIP_TCPTHREAD_PRIORITY 12 -#define RT_LWIP_TCPTHREAD_MBOX_SIZE 8 -#define RT_LWIP_TCPTHREAD_STACKSIZE 16184 -#define RT_LWIP_ETHTHREAD_PRIORITY 12 -#define RT_LWIP_ETHTHREAD_STACKSIZE 2048 -#define RT_LWIP_ETHTHREAD_MBOX_SIZE 8 -#define LWIP_NETIF_STATUS_CALLBACK 1 -#define LWIP_NETIF_LINK_CALLBACK 1 -#define SO_REUSE 1 -#define LWIP_SO_RCVTIMEO 1 -#define LWIP_SO_SNDTIMEO 1 -#define LWIP_SO_RCVBUF 1 -#define LWIP_SO_LINGER 0 -#define LWIP_NETIF_LOOPBACK 0 -#define RT_LWIP_USING_PING -#define RT_LWIP_DEBUG -#define RT_LWIP_NETIF_DEBUG - -/* Utilities */ - -#define RT_USING_RYM -#define YMODEM_USING_FILE_TRANSFER -#define RT_USING_ADT - -/* RT-Thread Utestcases */ - - -/* RT-Thread online packages */ - -/* IoT - internet of things */ - - -/* Wi-Fi */ - -/* Marvell WiFi */ - - -/* Wiced WiFi */ - - -/* IoT Cloud */ - - -/* security packages */ - - -/* language packages */ - -/* JSON: JavaScript Object Notation, a lightweight data-interchange format */ - - -/* XML: Extensible Markup Language */ - - -/* multimedia packages */ - -/* LVGL: powerful and easy-to-use embedded GUI library */ - - -/* u8g2: a monochrome graphic library */ - - -/* tools packages */ - - -/* system packages */ - -/* enhanced kernel services */ - - -/* acceleration: Assembly language or algorithmic acceleration packages */ - - -/* CMSIS: ARM Cortex-M Microcontroller Software Interface Standard */ - - -/* Micrium: Micrium software products porting for RT-Thread */ - - -/* peripheral libraries and drivers */ - -/* sensors drivers */ - - -/* touch drivers */ - - -/* Kendryte SDK */ - - -/* AI packages */ - - -/* Signal Processing and Control Algorithm Packages */ - - -/* miscellaneous packages */ - -/* project laboratory */ - -/* samples: kernel and components samples */ - -#define PKG_USING_KERNEL_SAMPLES -#define PKG_USING_KERNEL_SAMPLES_LATEST_VERSION -#define PKG_USING_KERNEL_SAMPLES_EN - -/* entertainment: terminal games and other interesting software packages */ - - -/* Arduino libraries */ - - -/* Projects */ - - -/* Sensors */ - - -/* Display */ - - -/* Timing */ - - -/* Data Processing */ - - -/* Data Storage */ - -/* Communication */ - - -/* Device Control */ - - -/* Other */ - - -/* Signal IO */ - - -/* Uncategorized */ - -/* Hardware Drivers */ - -/* On-chip Peripheral Drivers */ - -#define BSP_USING_UART -#define RT_USING_UART1 -#define BSP_USING_ETH -#define RT_LWIP_PBUF_POOL_BUFSIZE 1700 - -/* Board extended module Drivers */ - -#define BSP_USING_GIC -#define BSP_USING_GICV3 -#define PHYTIUM_ARCH_AARCH64 -#define ARM_SPI_BIND_CPU_ID 2 - -/* Standalone Setting */ - -#define TARGET_ARMV8_AARCH64 - -/* Board Configuration */ - -#define TARGET_E2000Q -#define TARGET_E2000 -#define DEFAULT_DEBUG_PRINT_UART1 - -/* Components Configuration */ - -#define USE_SPI -#define USE_FSPIM -#define USE_QSPI - -/* Qspi Configuration */ - -#define USE_FQSPI -#define USE_IOPAD -#define ENABLE_IOPAD -#define USE_SERIAL - -/* Usart Configuration */ - -#define ENABLE_Pl011_UART -#define USE_ETH - -/* Eth Configuration */ - -#define ENABLE_FXMAC -#define FXMAC_PHY_COMMON -#define LOG_ERROR -#define PHYTIUM_RTT_TEST - -#endif diff --git a/bsp/phytium/aarch64/configs/phytium_pi_rtsmart b/bsp/phytium/aarch64/configs/phytium_pi_rtsmart index 0b63303a9c..cbc03f684f 100644 --- a/bsp/phytium/aarch64/configs/phytium_pi_rtsmart +++ b/bsp/phytium/aarch64/configs/phytium_pi_rtsmart @@ -23,11 +23,11 @@ CONFIG_RT_USING_HOOK=y CONFIG_RT_HOOK_USING_FUNC_PTR=y CONFIG_RT_USING_IDLE_HOOK=y CONFIG_RT_IDLE_HOOK_LIST_SIZE=4 -CONFIG_IDLE_THREAD_STACK_SIZE=40960 -CONFIG_SYSTEM_THREAD_STACK_SIZE=40960 +CONFIG_IDLE_THREAD_STACK_SIZE=8192 +CONFIG_SYSTEM_THREAD_STACK_SIZE=8192 CONFIG_RT_USING_TIMER_SOFT=y CONFIG_RT_TIMER_THREAD_PRIO=4 -CONFIG_RT_TIMER_THREAD_STACK_SIZE=4096 +CONFIG_RT_TIMER_THREAD_STACK_SIZE=8192 # # kservice optimization @@ -72,19 +72,23 @@ CONFIG_RT_USING_SLAB_AS_HEAP=y # CONFIG_RT_USING_MEMTRACE is not set CONFIG_RT_USING_HEAP_ISR=y CONFIG_RT_USING_HEAP=y - -# -# Kernel Device Object -# CONFIG_RT_USING_DEVICE=y # CONFIG_RT_USING_DEVICE_OPS is not set -# CONFIG_RT_USING_DM is not set # CONFIG_RT_USING_INTERRUPT_INFO is not set CONFIG_RT_USING_CONSOLE=y CONFIG_RT_CONSOLEBUF_SIZE=128 CONFIG_RT_CONSOLE_DEVICE_NAME="uart1" -CONFIG_RT_VER_NUM=0x50001 +CONFIG_RT_VER_NUM=0x50100 # CONFIG_RT_USING_STDC_ATOMIC is not set +CONFIG_RT_BACKTRACE_LEVEL_MAX_NR=32 + +# +# AArch64 Architecture Configuration +# +CONFIG_ARCH_TEXT_OFFSET=0x80000 +CONFIG_ARCH_RAM_OFFSET=0x80000000 +CONFIG_ARCH_SECONDARY_CPU_STACK_SIZE=4096 +CONFIG_ARCH_HAVE_EFFICIENT_UNALIGNED_ACCESS=y CONFIG_ARCH_CPU_64BIT=y CONFIG_RT_USING_CACHE=y # CONFIG_RT_USING_HW_ATOMIC is not set @@ -97,14 +101,6 @@ CONFIG_ARCH_ARM_MMU=y CONFIG_KERNEL_VADDR_START=0xffff000000000000 CONFIG_ARCH_ARMV8=y -# -# AArch64 Architecture Configuration -# -CONFIG_ARCH_TEXT_OFFSET=0x80000 -CONFIG_ARCH_RAM_OFFSET=0x80000000 -CONFIG_ARCH_SECONDARY_CPU_STACK_SIZE=4096 -CONFIG_ARCH_HAVE_EFFICIENT_UNALIGNED_ACCESS=y - # # RT-Thread Components # @@ -128,6 +124,7 @@ CONFIG_FINSH_USING_DESCRIPTION=y # CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set # CONFIG_FINSH_USING_AUTH is not set CONFIG_FINSH_ARG_MAX=10 +CONFIG_FINSH_USING_OPTION_COMPLETION=y # # DFS: device virtual file system @@ -173,6 +170,7 @@ CONFIG_RT_USING_DFS_RAMFS=y # CONFIG_RT_USING_DFS_NFS is not set # CONFIG_RT_USING_FAL is not set CONFIG_RT_USING_LWP=y +# CONFIG_LWP_DEBUG is not set CONFIG_RT_LWP_MAX_NR=30 CONFIG_LWP_TASK_STACK_SIZE=16384 CONFIG_RT_CH_MSG_MAX_NR=1024 @@ -184,6 +182,7 @@ CONFIG_RT_LWP_SHM_MAX_NR=64 # # Device Drivers # +# CONFIG_RT_USING_DM is not set CONFIG_RT_USING_DEVICE_IPC=y CONFIG_RT_UNAMED_PIPE_NUMBER=64 CONFIG_RT_USING_SYSTEM_WORKQUEUE=y @@ -211,14 +210,13 @@ CONFIG_RT_USING_RANDOM=y # CONFIG_RT_USING_MTD_NOR is not set # CONFIG_RT_USING_MTD_NAND is not set # CONFIG_RT_USING_PM is not set -# CONFIG_RT_USING_FDT is not set CONFIG_RT_USING_RTC=y # CONFIG_RT_USING_ALARM is not set # CONFIG_RT_USING_SOFT_RTC is not set CONFIG_RT_USING_SDIO=y -CONFIG_RT_SDIO_STACK_SIZE=512 +CONFIG_RT_SDIO_STACK_SIZE=8192 CONFIG_RT_SDIO_THREAD_PRIORITY=15 -CONFIG_RT_MMCSD_STACK_SIZE=1024 +CONFIG_RT_MMCSD_STACK_SIZE=8192 CONFIG_RT_MMCSD_THREAD_PREORITY=22 CONFIG_RT_MMCSD_MAX_PARTITION=16 # CONFIG_RT_SDIO_DEBUG is not set @@ -234,6 +232,7 @@ CONFIG_RT_MMCSD_MAX_PARTITION=16 # CONFIG_RT_USING_DEV_BUS is not set # CONFIG_RT_USING_WIFI is not set # CONFIG_RT_USING_VIRTIO is not set +CONFIG_RT_USING_KTIME=y # # Using USB @@ -269,6 +268,8 @@ CONFIG_RT_USING_POSIX_STDIO=y # CONFIG_RT_USING_POSIX_SELECT is not set # CONFIG_RT_USING_POSIX_EVENTFD is not set # CONFIG_RT_USING_POSIX_EPOLL is not set +# CONFIG_RT_USING_POSIX_SIGNALFD is not set +# CONFIG_RT_USING_POSIX_TIMERFD is not set # CONFIG_RT_USING_POSIX_SOCKET is not set CONFIG_RT_USING_POSIX_TERMIOS=y # CONFIG_RT_USING_POSIX_AIO is not set @@ -353,7 +354,7 @@ CONFIG_RT_LWIP_TCPTHREAD_STACKSIZE=16184 # CONFIG_LWIP_NO_RX_THREAD is not set # CONFIG_LWIP_NO_TX_THREAD is not set CONFIG_RT_LWIP_ETHTHREAD_PRIORITY=12 -CONFIG_RT_LWIP_ETHTHREAD_STACKSIZE=2048 +CONFIG_RT_LWIP_ETHTHREAD_STACKSIZE=8192 CONFIG_RT_LWIP_ETHTHREAD_MBOX_SIZE=8 # CONFIG_RT_LWIP_REASSEMBLY_FRAG is not set CONFIG_LWIP_NETIF_STATUS_CALLBACK=1 @@ -417,7 +418,11 @@ CONFIG_RT_USING_ADT_HASHMAP=y CONFIG_RT_USING_ADT_REF=y # CONFIG_RT_USING_RT_LINK is not set # CONFIG_RT_USING_VBUS is not set -CONFIG_RT_USING_KTIME=y + +# +# Memory management +# +# CONFIG_RT_USING_MEMBLOCK is not set # # RT-Thread Utestcases @@ -442,7 +447,6 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_KAWAII_MQTT is not set # CONFIG_PKG_USING_BC28_MQTT is not set # CONFIG_PKG_USING_WEBTERMINAL is not set -# CONFIG_PKG_USING_LIBMODBUS is not set # CONFIG_PKG_USING_FREEMODBUS is not set # CONFIG_PKG_USING_NANOPB is not set @@ -460,6 +464,11 @@ CONFIG_RT_USING_KTIME=y # # CONFIG_PKG_USING_WLAN_WICED is not set # CONFIG_PKG_USING_RW007 is not set + +# +# CYW43012 WiFi +# +# CONFIG_PKG_USING_WLAN_CYW43012 is not set # CONFIG_PKG_USING_COAP is not set # CONFIG_PKG_USING_NOPOLL is not set # CONFIG_PKG_USING_NETUTILS is not set @@ -502,6 +511,7 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_NMEALIB is not set # CONFIG_PKG_USING_PDULIB is not set # CONFIG_PKG_USING_BTSTACK is not set +# CONFIG_PKG_USING_BT_CYW43012 is not set # CONFIG_PKG_USING_LORAWAN_ED_STACK is not set # CONFIG_PKG_USING_WAYZ_IOTKIT is not set # CONFIG_PKG_USING_MAVLINK is not set @@ -521,6 +531,8 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_ZFTP is not set # CONFIG_PKG_USING_WOL is not set # CONFIG_PKG_USING_ZEPHYR_POLLING is not set +# CONFIG_PKG_USING_MATTER_ADAPTATION_LAYER is not set +# CONFIG_PKG_USING_LHC_MODBUS is not set # # security packages @@ -567,7 +579,6 @@ CONFIG_RT_USING_KTIME=y # LVGL: powerful and easy-to-use embedded GUI library # # CONFIG_PKG_USING_LVGL is not set -# CONFIG_PKG_USING_LITTLEVGL2RTT is not set # CONFIG_PKG_USING_LV_MUSIC_DEMO is not set # CONFIG_PKG_USING_GUI_GUIDER_DEMO is not set @@ -642,6 +653,7 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_HASH_MATCH is not set # CONFIG_PKG_USING_ARMV7M_DWT_TOOL is not set # CONFIG_PKG_USING_VOFA_PLUS is not set +# CONFIG_PKG_USING_ZDEBUG is not set # # system packages @@ -678,6 +690,8 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_UC_COMMON is not set # CONFIG_PKG_USING_UC_MODBUS is not set # CONFIG_PKG_USING_FREERTOS_WRAPPER is not set +# CONFIG_PKG_USING_LITEOS_SDK is not set +# CONFIG_PKG_USING_TZ_DATABASE is not set # CONFIG_PKG_USING_CAIRO is not set # CONFIG_PKG_USING_PIXMAN is not set # CONFIG_PKG_USING_PARTITION is not set @@ -701,6 +715,7 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_QBOOT is not set # CONFIG_PKG_USING_PPOOL is not set # CONFIG_PKG_USING_OPENAMP is not set +# CONFIG_PKG_USING_RPMSG_LITE is not set # CONFIG_PKG_USING_LPM is not set # CONFIG_PKG_USING_TLSF is not set # CONFIG_PKG_USING_EVENT_RECORDER is not set @@ -713,6 +728,12 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_QPC is not set # CONFIG_PKG_USING_AGILE_UPGRADE is not set # CONFIG_PKG_USING_FLASH_BLOB is not set +# CONFIG_PKG_USING_MLIBC is not set +# CONFIG_PKG_USING_TASK_MSG_BUS is not set +# CONFIG_PKG_USING_SFDB is not set +# CONFIG_PKG_USING_RTP is not set +# CONFIG_PKG_USING_REB is not set +# CONFIG_PKG_USING_R_RHEALSTONE is not set # # peripheral libraries and drivers @@ -777,6 +798,7 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_BALANCE is not set # CONFIG_PKG_USING_SHT2X is not set # CONFIG_PKG_USING_SHT3X is not set +# CONFIG_PKG_USING_SHT4X is not set # CONFIG_PKG_USING_AD7746 is not set # CONFIG_PKG_USING_ADT74XX is not set # CONFIG_PKG_USING_MAX17048 is not set @@ -797,6 +819,7 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_FT5426 is not set # CONFIG_PKG_USING_FT6236 is not set # CONFIG_PKG_USING_XPT2046_TOUCH is not set +# CONFIG_PKG_USING_CST816X is not set # CONFIG_PKG_USING_REALTEK_AMEBA is not set # CONFIG_PKG_USING_STM32_SDIO is not set # CONFIG_PKG_USING_ESP_IDF is not set @@ -872,7 +895,15 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_IO_INPUT_FILTER is not set # CONFIG_PKG_USING_RASPBERRYPI_PICO_SDK is not set # CONFIG_PKG_USING_LRF_NV7LIDAR is not set +# CONFIG_PKG_USING_AIP650 is not set # CONFIG_PKG_USING_FINGERPRINT is not set +# CONFIG_PKG_USING_BT_ECB02C is not set +# CONFIG_PKG_USING_UAT is not set +# CONFIG_PKG_USING_ST7789 is not set +# CONFIG_PKG_USING_VS1003 is not set +# CONFIG_PKG_USING_X9555 is not set +# CONFIG_PKG_USING_SYSTEM_RUN_LED is not set +# CONFIG_PKG_USING_SPI_TOOLS is not set # # AI packages @@ -886,12 +917,17 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_ULAPACK is not set # CONFIG_PKG_USING_QUEST is not set # CONFIG_PKG_USING_NAXOS is not set +# CONFIG_PKG_USING_NCNN is not set +# CONFIG_PKG_USING_R_TINYMAIX is not set # # Signal Processing and Control Algorithm Packages # # CONFIG_PKG_USING_FIRE_PID_CURVE is not set +# CONFIG_PKG_USING_QPID is not set # CONFIG_PKG_USING_UKAL is not set +# CONFIG_PKG_USING_DIGITALCTRL is not set +# CONFIG_PKG_USING_KISSFFT is not set # # miscellaneous packages @@ -953,6 +989,7 @@ CONFIG_PKG_USING_KERNEL_SAMPLES_EN=y # CONFIG_PKG_USING_MINILZO is not set # CONFIG_PKG_USING_QUICKLZ is not set # CONFIG_PKG_USING_LZMA is not set +# CONFIG_PKG_USING_RALARAM is not set # CONFIG_PKG_USING_MULTIBUTTON is not set # CONFIG_PKG_USING_FLEXIBLE_BUTTON is not set # CONFIG_PKG_USING_CANFESTIVAL is not set @@ -962,7 +999,6 @@ CONFIG_PKG_USING_KERNEL_SAMPLES_EN=y # CONFIG_PKG_USING_DSTR is not set # CONFIG_PKG_USING_TINYFRAME is not set # CONFIG_PKG_USING_KENDRYTE_DEMO is not set -# CONFIG_PKG_USING_DIGITALCTRL is not set # CONFIG_PKG_USING_UPACKER is not set # CONFIG_PKG_USING_UPARAM is not set # CONFIG_PKG_USING_HELLO is not set @@ -987,8 +1023,9 @@ CONFIG_PKG_USING_KERNEL_SAMPLES_EN=y # CONFIG_PKG_USING_RTDUINO is not set # -# Projects +# Projects and Demos # +# CONFIG_PKG_USING_ARDUINO_MSGQ_C_CPP_DEMO is not set # CONFIG_PKG_USING_ARDUINO_ULTRASOUND_RADAR is not set # CONFIG_PKG_USING_ARDUINO_SENSOR_KIT is not set # CONFIG_PKG_USING_ARDUINO_MATLAB_SUPPORT is not set @@ -1135,14 +1172,21 @@ CONFIG_PKG_USING_KERNEL_SAMPLES_EN=y # # Display # +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_GFX_LIBRARY is not set # CONFIG_PKG_USING_ARDUINO_U8G2 is not set -# CONFIG_PKG_USING_ARDUINO_U8GLIB_ARDUINO is not set +# CONFIG_PKG_USING_ARDUINO_TFT_ESPI is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ST7735 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SSD1306 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ILI9341 is not set # CONFIG_PKG_USING_SEEED_TM1637 is not set # # Timing # +# CONFIG_PKG_USING_ARDUINO_RTCLIB is not set # CONFIG_PKG_USING_ARDUINO_MSTIMER2 is not set +# CONFIG_PKG_USING_ARDUINO_TICKER is not set +# CONFIG_PKG_USING_ARDUINO_TASKSCHEDULER is not set # # Data Processing @@ -1176,7 +1220,6 @@ CONFIG_PKG_USING_KERNEL_SAMPLES_EN=y # # CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MFRC630 is not set # CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI5351 is not set -# CONFIG_PKG_USING_ARDUINO_RTCLIB is not set # # Signal IO @@ -1197,10 +1240,12 @@ CONFIG_PKG_USING_KERNEL_SAMPLES_EN=y # # Hardware Drivers # +CONFIG_DRV_DEBUG=y # # On-chip Peripheral Drivers # +CONFIG_BSP_USING_IOPAD=y CONFIG_BSP_USING_UART=y CONFIG_RT_USING_UART1=y # CONFIG_RT_USING_UART0 is not set @@ -1208,12 +1253,14 @@ CONFIG_RT_USING_UART1=y # CONFIG_BSP_USING_CAN is not set # CONFIG_BSP_USING_GPIO is not set # CONFIG_BSP_USING_QSPI is not set -CONFIG_BSP_USING_ETH=y -CONFIG_RT_LWIP_PBUF_POOL_BUFSIZE=1700 -CONFIG_BSP_USING_SDIO=y +# CONFIG_BSP_USING_ETH is not set +# CONFIG_BSP_USING_PWM is not set +# CONFIG_BSP_USING_I2C is not set +CONFIG_BSP_USING_SDIF=y CONFIG_BSP_USING_SDCARD_FATFS=y -CONFIG_USING_SDIO0=y -# CONFIG_USING_SDIO1 is not set +CONFIG_BSP_USING_SDCARD_PARTITION="sd1" +CONFIG_USING_SDIF0=y +# CONFIG_USING_SDIF1 is not set # CONFIG_USING_EMMC is not set # @@ -1230,77 +1277,61 @@ CONFIG_ARM_SPI_BIND_CPU_ID=2 CONFIG_TARGET_ARMV8_AARCH64=y # -# Board Configuration +# Soc configuration # -# CONFIG_TARGET_F2000_4 is not set -# CONFIG_TARGET_D2000 is not set +CONFIG_TARGET_PHYTIUMPI=y # CONFIG_TARGET_E2000Q is not set # CONFIG_TARGET_E2000D is not set # CONFIG_TARGET_E2000S is not set -CONFIG_TARGET_PHYTIUMPI=y +# CONFIG_TARGET_FT2004 is not set +# CONFIG_TARGET_D2000 is not set +CONFIG_SOC_NAME="phytiumpi" +CONFIG_SOC_CORE_NUM=4 +CONFIG_F32BIT_MEMORY_ADDRESS=0x80000000 +CONFIG_F32BIT_MEMORY_LENGTH=0x80000000 +CONFIG_F64BIT_MEMORY_ADDRESS=0x2000000000 +CONFIG_F64BIT_MEMORY_LENGTH=0x800000000 CONFIG_TARGET_E2000=y +# CONFIG_USE_SPINLOCK is not set CONFIG_DEFAULT_DEBUG_PRINT_UART1=y # CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set # CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set # -# Components Configuration +# Board Configuration # -CONFIG_USE_SPI=y -CONFIG_USE_FSPIM=y -CONFIG_USE_QSPI=y +CONFIG_BOARD_NAME="firefly" +# CONFIG_USE_SPI_IOPAD is not set +# CONFIG_USE_GPIO_IOPAD is not set +# CONFIG_USE_CAN_IOPAD is not set +# CONFIG_USE_QSPI_IOPAD is not set +# CONFIG_USE_PWM_IOPAD is not set +# CONFIG_USE_MIO_IOPAD is not set +# CONFIG_USE_TACHO_IOPAD is not set +# CONFIG_USE_UART_IOPAD is not set +# CONFIG_USE_THIRD_PARTY_IOPAD is not set +CONFIG_FIREFLY_DEMO_BOARD=y # -# Qspi Configuration +# IO mux configuration when board start up # -CONFIG_USE_FQSPI=y -# CONFIG_USE_GIC is not set -CONFIG_USE_IOPAD=y -CONFIG_ENABLE_IOPAD=y -CONFIG_USE_SERIAL=y - -# -# Usart Configuration -# -CONFIG_ENABLE_Pl011_UART=y -# CONFIG_USE_GPIO is not set -CONFIG_USE_ETH=y - -# -# Eth Configuration -# -CONFIG_ENABLE_FXMAC=y -# CONFIG_ENABLE_FGMAC is not set -CONFIG_FXMAC_PHY_COMMON=y -# CONFIG_FXMAC_PHY_YT is not set -# CONFIG_USE_CAN is not set -# CONFIG_USE_I2C is not set -# CONFIG_USE_TIMER is not set -# CONFIG_USE_MIO is not set -# CONFIG_USE_SDMMC is not set -# CONFIG_USE_PCIE is not set -# CONFIG_USE_WDT is not set -# CONFIG_USE_DMA is not set -# CONFIG_USE_NAND is not set -# CONFIG_USE_RTC is not set -# CONFIG_USE_SATA is not set -# CONFIG_USE_USB is not set -# CONFIG_USE_ADC is not set -# CONFIG_USE_PWM is not set -# CONFIG_USE_IPC is not set -# CONFIG_USE_MEDIA is not set -# CONFIG_USE_SCMI_MHU is not set +# CONFIG_CUS_DEMO_BOARD is not set # # Sdk common configuration # # CONFIG_LOG_VERBOS is not set -# CONFIG_LOG_DEBUG is not set +CONFIG_LOG_DEBUG=y # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set -CONFIG_LOG_ERROR=y +# CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set # CONFIG_USE_DEFAULT_INTERRUPT_CONFIG is not set + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set diff --git a/bsp/phytium/aarch64/configs/phytium_pi_rtsmart.h b/bsp/phytium/aarch64/configs/phytium_pi_rtsmart.h index 9dd2bfd960..30ff5d64af 100644 --- a/bsp/phytium/aarch64/configs/phytium_pi_rtsmart.h +++ b/bsp/phytium/aarch64/configs/phytium_pi_rtsmart.h @@ -19,11 +19,11 @@ #define RT_HOOK_USING_FUNC_PTR #define RT_USING_IDLE_HOOK #define RT_IDLE_HOOK_LIST_SIZE 4 -#define IDLE_THREAD_STACK_SIZE 40960 -#define SYSTEM_THREAD_STACK_SIZE 40960 +#define IDLE_THREAD_STACK_SIZE 8192 +#define SYSTEM_THREAD_STACK_SIZE 8192 #define RT_USING_TIMER_SOFT #define RT_TIMER_THREAD_PRIO 4 -#define RT_TIMER_THREAD_STACK_SIZE 4096 +#define RT_TIMER_THREAD_STACK_SIZE 8192 /* kservice optimization */ @@ -51,14 +51,19 @@ #define RT_USING_SLAB_AS_HEAP #define RT_USING_HEAP_ISR #define RT_USING_HEAP - -/* Kernel Device Object */ - #define RT_USING_DEVICE #define RT_USING_CONSOLE #define RT_CONSOLEBUF_SIZE 128 #define RT_CONSOLE_DEVICE_NAME "uart1" -#define RT_VER_NUM 0x50001 +#define RT_VER_NUM 0x50100 +#define RT_BACKTRACE_LEVEL_MAX_NR 32 + +/* AArch64 Architecture Configuration */ + +#define ARCH_TEXT_OFFSET 0x80000 +#define ARCH_RAM_OFFSET 0x80000000 +#define ARCH_SECONDARY_CPU_STACK_SIZE 4096 +#define ARCH_HAVE_EFFICIENT_UNALIGNED_ACCESS #define ARCH_CPU_64BIT #define RT_USING_CACHE #define ARCH_ARM_BOOTWITH_FLUSH_CACHE @@ -68,13 +73,6 @@ #define KERNEL_VADDR_START 0xffff000000000000 #define ARCH_ARMV8 -/* AArch64 Architecture Configuration */ - -#define ARCH_TEXT_OFFSET 0x80000 -#define ARCH_RAM_OFFSET 0x80000000 -#define ARCH_SECONDARY_CPU_STACK_SIZE 4096 -#define ARCH_HAVE_EFFICIENT_UNALIGNED_ACCESS - /* RT-Thread Components */ #define RT_USING_COMPONENTS_INIT @@ -94,6 +92,7 @@ #define MSH_USING_BUILT_IN_COMMANDS #define FINSH_USING_DESCRIPTION #define FINSH_ARG_MAX 10 +#define FINSH_USING_OPTION_COMPLETION /* DFS: device virtual file system */ @@ -146,11 +145,12 @@ #define RT_USING_RANDOM #define RT_USING_RTC #define RT_USING_SDIO -#define RT_SDIO_STACK_SIZE 512 +#define RT_SDIO_STACK_SIZE 8192 #define RT_SDIO_THREAD_PRIORITY 15 -#define RT_MMCSD_STACK_SIZE 1024 +#define RT_MMCSD_STACK_SIZE 8192 #define RT_MMCSD_THREAD_PREORITY 22 #define RT_MMCSD_MAX_PARTITION 16 +#define RT_USING_KTIME /* Using USB */ @@ -226,7 +226,7 @@ #define RT_LWIP_TCPTHREAD_MBOX_SIZE 8 #define RT_LWIP_TCPTHREAD_STACKSIZE 16184 #define RT_LWIP_ETHTHREAD_PRIORITY 12 -#define RT_LWIP_ETHTHREAD_STACKSIZE 2048 +#define RT_LWIP_ETHTHREAD_STACKSIZE 8192 #define RT_LWIP_ETHTHREAD_MBOX_SIZE 8 #define LWIP_NETIF_STATUS_CALLBACK 1 #define LWIP_NETIF_LINK_CALLBACK 1 @@ -250,7 +250,9 @@ #define RT_USING_ADT_BITMAP #define RT_USING_ADT_HASHMAP #define RT_USING_ADT_REF -#define RT_USING_KTIME + +/* Memory management */ + /* RT-Thread Utestcases */ @@ -268,6 +270,9 @@ /* Wiced WiFi */ +/* CYW43012 WiFi */ + + /* IoT Cloud */ @@ -340,7 +345,7 @@ /* Arduino libraries */ -/* Projects */ +/* Projects and Demos */ /* Sensors */ @@ -373,15 +378,17 @@ /* Hardware Drivers */ +#define DRV_DEBUG + /* On-chip Peripheral Drivers */ +#define BSP_USING_IOPAD #define BSP_USING_UART #define RT_USING_UART1 -#define BSP_USING_ETH -#define RT_LWIP_PBUF_POOL_BUFSIZE 1700 -#define BSP_USING_SDIO +#define BSP_USING_SDIF #define BSP_USING_SDCARD_FATFS -#define USING_SDIO0 +#define BSP_USING_SDCARD_PARTITION "sd1" +#define USING_SDIF0 /* Board extended module Drivers */ @@ -394,37 +401,31 @@ #define TARGET_ARMV8_AARCH64 -/* Board Configuration */ +/* Soc configuration */ #define TARGET_PHYTIUMPI +#define SOC_NAME "phytiumpi" +#define SOC_CORE_NUM 4 +#define F32BIT_MEMORY_ADDRESS 0x80000000 +#define F32BIT_MEMORY_LENGTH 0x80000000 +#define F64BIT_MEMORY_ADDRESS 0x2000000000 +#define F64BIT_MEMORY_LENGTH 0x800000000 #define TARGET_E2000 #define DEFAULT_DEBUG_PRINT_UART1 -/* Components Configuration */ +/* Board Configuration */ -#define USE_SPI -#define USE_FSPIM -#define USE_QSPI +#define BOARD_NAME "firefly" +#define FIREFLY_DEMO_BOARD -/* Qspi Configuration */ +/* IO mux configuration when board start up */ -#define USE_FQSPI -#define USE_IOPAD -#define ENABLE_IOPAD -#define USE_SERIAL - -/* Usart Configuration */ - -#define ENABLE_Pl011_UART -#define USE_ETH - -/* Eth Configuration */ - -#define ENABLE_FXMAC -#define FXMAC_PHY_COMMON /* Sdk common configuration */ -#define LOG_ERROR +#define LOG_DEBUG + +/* Image information configuration */ + #endif diff --git a/bsp/phytium/aarch64/configs/phytium_pi_rtthread b/bsp/phytium/aarch64/configs/phytium_pi_rtthread index 79bc4d3469..c65e8998d2 100644 --- a/bsp/phytium/aarch64/configs/phytium_pi_rtthread +++ b/bsp/phytium/aarch64/configs/phytium_pi_rtthread @@ -24,7 +24,6 @@ CONFIG_RT_HOOK_USING_FUNC_PTR=y CONFIG_RT_USING_IDLE_HOOK=y CONFIG_RT_IDLE_HOOK_LIST_SIZE=4 CONFIG_IDLE_THREAD_STACK_SIZE=8192 -CONFIG_SYSTEM_THREAD_STACK_SIZE=8192 CONFIG_RT_USING_TIMER_SOFT=y CONFIG_RT_TIMER_THREAD_PRIO=4 CONFIG_RT_TIMER_THREAD_STACK_SIZE=8192 @@ -72,19 +71,23 @@ CONFIG_RT_USING_SLAB_AS_HEAP=y # CONFIG_RT_USING_MEMTRACE is not set CONFIG_RT_USING_HEAP_ISR=y CONFIG_RT_USING_HEAP=y - -# -# Kernel Device Object -# CONFIG_RT_USING_DEVICE=y # CONFIG_RT_USING_DEVICE_OPS is not set -# CONFIG_RT_USING_DM is not set # CONFIG_RT_USING_INTERRUPT_INFO is not set CONFIG_RT_USING_CONSOLE=y CONFIG_RT_CONSOLEBUF_SIZE=128 CONFIG_RT_CONSOLE_DEVICE_NAME="uart1" -CONFIG_RT_VER_NUM=0x50001 +CONFIG_RT_VER_NUM=0x50100 # CONFIG_RT_USING_STDC_ATOMIC is not set +CONFIG_RT_BACKTRACE_LEVEL_MAX_NR=32 + +# +# AArch64 Architecture Configuration +# +CONFIG_ARCH_TEXT_OFFSET=0x80000 +CONFIG_ARCH_RAM_OFFSET=0x80000000 +CONFIG_ARCH_SECONDARY_CPU_STACK_SIZE=4096 +CONFIG_ARCH_HAVE_EFFICIENT_UNALIGNED_ACCESS=y CONFIG_ARCH_CPU_64BIT=y CONFIG_RT_USING_CACHE=y # CONFIG_RT_USING_HW_ATOMIC is not set @@ -96,14 +99,6 @@ CONFIG_ARCH_ARM=y CONFIG_ARCH_ARM_MMU=y CONFIG_ARCH_ARMV8=y -# -# AArch64 Architecture Configuration -# -CONFIG_ARCH_TEXT_OFFSET=0x80000 -CONFIG_ARCH_RAM_OFFSET=0x80000000 -CONFIG_ARCH_SECONDARY_CPU_STACK_SIZE=4096 -CONFIG_ARCH_HAVE_EFFICIENT_UNALIGNED_ACCESS=y - # # RT-Thread Components # @@ -127,6 +122,7 @@ CONFIG_FINSH_USING_DESCRIPTION=y # CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set # CONFIG_FINSH_USING_AUTH is not set CONFIG_FINSH_ARG_MAX=10 +CONFIG_FINSH_USING_OPTION_COMPLETION=y # # DFS: device virtual file system @@ -175,6 +171,7 @@ CONFIG_RT_USING_DFS_RAMFS=y # # Device Drivers # +# CONFIG_RT_USING_DM is not set CONFIG_RT_USING_DEVICE_IPC=y CONFIG_RT_UNAMED_PIPE_NUMBER=64 CONFIG_RT_USING_SYSTEM_WORKQUEUE=y @@ -200,14 +197,13 @@ CONFIG_RT_USING_RANDOM=y # CONFIG_RT_USING_MTD_NOR is not set # CONFIG_RT_USING_MTD_NAND is not set # CONFIG_RT_USING_PM is not set -# CONFIG_RT_USING_FDT is not set CONFIG_RT_USING_RTC=y # CONFIG_RT_USING_ALARM is not set # CONFIG_RT_USING_SOFT_RTC is not set CONFIG_RT_USING_SDIO=y -CONFIG_RT_SDIO_STACK_SIZE=4096 +CONFIG_RT_SDIO_STACK_SIZE=8192 CONFIG_RT_SDIO_THREAD_PRIORITY=15 -CONFIG_RT_MMCSD_STACK_SIZE=4096 +CONFIG_RT_MMCSD_STACK_SIZE=8192 CONFIG_RT_MMCSD_THREAD_PREORITY=22 CONFIG_RT_MMCSD_MAX_PARTITION=16 # CONFIG_RT_SDIO_DEBUG is not set @@ -223,6 +219,7 @@ CONFIG_RT_MMCSD_MAX_PARTITION=16 # CONFIG_RT_USING_DEV_BUS is not set # CONFIG_RT_USING_WIFI is not set # CONFIG_RT_USING_VIRTIO is not set +CONFIG_RT_USING_KTIME=y # # Using USB @@ -257,6 +254,7 @@ CONFIG_RT_USING_POSIX_STDIO=y # CONFIG_RT_USING_POSIX_POLL is not set # CONFIG_RT_USING_POSIX_SELECT is not set # CONFIG_RT_USING_POSIX_EVENTFD is not set +# CONFIG_RT_USING_POSIX_TIMERFD is not set # CONFIG_RT_USING_POSIX_SOCKET is not set CONFIG_RT_USING_POSIX_TERMIOS=y # CONFIG_RT_USING_POSIX_AIO is not set @@ -341,7 +339,7 @@ CONFIG_RT_LWIP_TCPTHREAD_STACKSIZE=16184 # CONFIG_LWIP_NO_RX_THREAD is not set # CONFIG_LWIP_NO_TX_THREAD is not set CONFIG_RT_LWIP_ETHTHREAD_PRIORITY=12 -CONFIG_RT_LWIP_ETHTHREAD_STACKSIZE=2048 +CONFIG_RT_LWIP_ETHTHREAD_STACKSIZE=8192 CONFIG_RT_LWIP_ETHTHREAD_MBOX_SIZE=8 # CONFIG_RT_LWIP_REASSEMBLY_FRAG is not set CONFIG_LWIP_NETIF_STATUS_CALLBACK=1 @@ -405,7 +403,11 @@ CONFIG_RT_USING_ADT_HASHMAP=y CONFIG_RT_USING_ADT_REF=y # CONFIG_RT_USING_RT_LINK is not set # CONFIG_RT_USING_VBUS is not set -CONFIG_RT_USING_KTIME=y + +# +# Memory management +# +# CONFIG_RT_USING_MEMBLOCK is not set # # RT-Thread Utestcases @@ -430,7 +432,6 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_KAWAII_MQTT is not set # CONFIG_PKG_USING_BC28_MQTT is not set # CONFIG_PKG_USING_WEBTERMINAL is not set -# CONFIG_PKG_USING_LIBMODBUS is not set # CONFIG_PKG_USING_FREEMODBUS is not set # CONFIG_PKG_USING_NANOPB is not set @@ -448,6 +449,11 @@ CONFIG_RT_USING_KTIME=y # # CONFIG_PKG_USING_WLAN_WICED is not set # CONFIG_PKG_USING_RW007 is not set + +# +# CYW43012 WiFi +# +# CONFIG_PKG_USING_WLAN_CYW43012 is not set # CONFIG_PKG_USING_COAP is not set # CONFIG_PKG_USING_NOPOLL is not set # CONFIG_PKG_USING_NETUTILS is not set @@ -490,6 +496,7 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_NMEALIB is not set # CONFIG_PKG_USING_PDULIB is not set # CONFIG_PKG_USING_BTSTACK is not set +# CONFIG_PKG_USING_BT_CYW43012 is not set # CONFIG_PKG_USING_LORAWAN_ED_STACK is not set # CONFIG_PKG_USING_WAYZ_IOTKIT is not set # CONFIG_PKG_USING_MAVLINK is not set @@ -509,6 +516,8 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_ZFTP is not set # CONFIG_PKG_USING_WOL is not set # CONFIG_PKG_USING_ZEPHYR_POLLING is not set +# CONFIG_PKG_USING_MATTER_ADAPTATION_LAYER is not set +# CONFIG_PKG_USING_LHC_MODBUS is not set # # security packages @@ -555,7 +564,6 @@ CONFIG_RT_USING_KTIME=y # LVGL: powerful and easy-to-use embedded GUI library # # CONFIG_PKG_USING_LVGL is not set -# CONFIG_PKG_USING_LITTLEVGL2RTT is not set # CONFIG_PKG_USING_LV_MUSIC_DEMO is not set # CONFIG_PKG_USING_GUI_GUIDER_DEMO is not set @@ -630,6 +638,7 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_HASH_MATCH is not set # CONFIG_PKG_USING_ARMV7M_DWT_TOOL is not set # CONFIG_PKG_USING_VOFA_PLUS is not set +# CONFIG_PKG_USING_ZDEBUG is not set # # system packages @@ -666,6 +675,8 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_UC_COMMON is not set # CONFIG_PKG_USING_UC_MODBUS is not set # CONFIG_PKG_USING_FREERTOS_WRAPPER is not set +# CONFIG_PKG_USING_LITEOS_SDK is not set +# CONFIG_PKG_USING_TZ_DATABASE is not set # CONFIG_PKG_USING_CAIRO is not set # CONFIG_PKG_USING_PIXMAN is not set # CONFIG_PKG_USING_PARTITION is not set @@ -689,6 +700,7 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_QBOOT is not set # CONFIG_PKG_USING_PPOOL is not set # CONFIG_PKG_USING_OPENAMP is not set +# CONFIG_PKG_USING_RPMSG_LITE is not set # CONFIG_PKG_USING_LPM is not set # CONFIG_PKG_USING_TLSF is not set # CONFIG_PKG_USING_EVENT_RECORDER is not set @@ -701,6 +713,12 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_QPC is not set # CONFIG_PKG_USING_AGILE_UPGRADE is not set # CONFIG_PKG_USING_FLASH_BLOB is not set +# CONFIG_PKG_USING_MLIBC is not set +# CONFIG_PKG_USING_TASK_MSG_BUS is not set +# CONFIG_PKG_USING_SFDB is not set +# CONFIG_PKG_USING_RTP is not set +# CONFIG_PKG_USING_REB is not set +# CONFIG_PKG_USING_R_RHEALSTONE is not set # # peripheral libraries and drivers @@ -765,6 +783,7 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_BALANCE is not set # CONFIG_PKG_USING_SHT2X is not set # CONFIG_PKG_USING_SHT3X is not set +# CONFIG_PKG_USING_SHT4X is not set # CONFIG_PKG_USING_AD7746 is not set # CONFIG_PKG_USING_ADT74XX is not set # CONFIG_PKG_USING_MAX17048 is not set @@ -785,6 +804,7 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_FT5426 is not set # CONFIG_PKG_USING_FT6236 is not set # CONFIG_PKG_USING_XPT2046_TOUCH is not set +# CONFIG_PKG_USING_CST816X is not set # CONFIG_PKG_USING_REALTEK_AMEBA is not set # CONFIG_PKG_USING_STM32_SDIO is not set # CONFIG_PKG_USING_ESP_IDF is not set @@ -860,7 +880,15 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_IO_INPUT_FILTER is not set # CONFIG_PKG_USING_RASPBERRYPI_PICO_SDK is not set # CONFIG_PKG_USING_LRF_NV7LIDAR is not set +# CONFIG_PKG_USING_AIP650 is not set # CONFIG_PKG_USING_FINGERPRINT is not set +# CONFIG_PKG_USING_BT_ECB02C is not set +# CONFIG_PKG_USING_UAT is not set +# CONFIG_PKG_USING_ST7789 is not set +# CONFIG_PKG_USING_VS1003 is not set +# CONFIG_PKG_USING_X9555 is not set +# CONFIG_PKG_USING_SYSTEM_RUN_LED is not set +# CONFIG_PKG_USING_SPI_TOOLS is not set # # AI packages @@ -874,12 +902,17 @@ CONFIG_RT_USING_KTIME=y # CONFIG_PKG_USING_ULAPACK is not set # CONFIG_PKG_USING_QUEST is not set # CONFIG_PKG_USING_NAXOS is not set +# CONFIG_PKG_USING_NCNN is not set +# CONFIG_PKG_USING_R_TINYMAIX is not set # # Signal Processing and Control Algorithm Packages # # CONFIG_PKG_USING_FIRE_PID_CURVE is not set +# CONFIG_PKG_USING_QPID is not set # CONFIG_PKG_USING_UKAL is not set +# CONFIG_PKG_USING_DIGITALCTRL is not set +# CONFIG_PKG_USING_KISSFFT is not set # # miscellaneous packages @@ -941,6 +974,7 @@ CONFIG_PKG_USING_KERNEL_SAMPLES_EN=y # CONFIG_PKG_USING_MINILZO is not set # CONFIG_PKG_USING_QUICKLZ is not set # CONFIG_PKG_USING_LZMA is not set +# CONFIG_PKG_USING_RALARAM is not set # CONFIG_PKG_USING_MULTIBUTTON is not set # CONFIG_PKG_USING_FLEXIBLE_BUTTON is not set # CONFIG_PKG_USING_CANFESTIVAL is not set @@ -950,7 +984,6 @@ CONFIG_PKG_USING_KERNEL_SAMPLES_EN=y # CONFIG_PKG_USING_DSTR is not set # CONFIG_PKG_USING_TINYFRAME is not set # CONFIG_PKG_USING_KENDRYTE_DEMO is not set -# CONFIG_PKG_USING_DIGITALCTRL is not set # CONFIG_PKG_USING_UPACKER is not set # CONFIG_PKG_USING_UPARAM is not set # CONFIG_PKG_USING_HELLO is not set @@ -975,8 +1008,9 @@ CONFIG_PKG_USING_KERNEL_SAMPLES_EN=y # CONFIG_PKG_USING_RTDUINO is not set # -# Projects +# Projects and Demos # +# CONFIG_PKG_USING_ARDUINO_MSGQ_C_CPP_DEMO is not set # CONFIG_PKG_USING_ARDUINO_ULTRASOUND_RADAR is not set # CONFIG_PKG_USING_ARDUINO_SENSOR_KIT is not set # CONFIG_PKG_USING_ARDUINO_MATLAB_SUPPORT is not set @@ -1123,14 +1157,21 @@ CONFIG_PKG_USING_KERNEL_SAMPLES_EN=y # # Display # +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_GFX_LIBRARY is not set # CONFIG_PKG_USING_ARDUINO_U8G2 is not set -# CONFIG_PKG_USING_ARDUINO_U8GLIB_ARDUINO is not set +# CONFIG_PKG_USING_ARDUINO_TFT_ESPI is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ST7735 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SSD1306 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ILI9341 is not set # CONFIG_PKG_USING_SEEED_TM1637 is not set # # Timing # +# CONFIG_PKG_USING_ARDUINO_RTCLIB is not set # CONFIG_PKG_USING_ARDUINO_MSTIMER2 is not set +# CONFIG_PKG_USING_ARDUINO_TICKER is not set +# CONFIG_PKG_USING_ARDUINO_TASKSCHEDULER is not set # # Data Processing @@ -1164,7 +1205,6 @@ CONFIG_PKG_USING_KERNEL_SAMPLES_EN=y # # CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MFRC630 is not set # CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI5351 is not set -# CONFIG_PKG_USING_ARDUINO_RTCLIB is not set # # Signal IO @@ -1185,10 +1225,12 @@ CONFIG_PKG_USING_KERNEL_SAMPLES_EN=y # # Hardware Drivers # +CONFIG_DRV_DEBUG=y # # On-chip Peripheral Drivers # +CONFIG_BSP_USING_IOPAD=y CONFIG_BSP_USING_UART=y CONFIG_RT_USING_UART1=y # CONFIG_RT_USING_UART0 is not set @@ -1196,9 +1238,15 @@ CONFIG_RT_USING_UART1=y # CONFIG_BSP_USING_CAN is not set # CONFIG_BSP_USING_GPIO is not set # CONFIG_BSP_USING_QSPI is not set -CONFIG_BSP_USING_ETH=y -CONFIG_RT_LWIP_PBUF_POOL_BUFSIZE=1700 -# CONFIG_BSP_USING_SDIO is not set +# CONFIG_BSP_USING_ETH is not set +# CONFIG_BSP_USING_PWM is not set +# CONFIG_BSP_USING_I2C is not set +CONFIG_BSP_USING_SDIF=y +CONFIG_BSP_USING_SDCARD_FATFS=y +CONFIG_BSP_USING_SDCARD_PARTITION="sd1" +CONFIG_USING_SDIF0=y +# CONFIG_USING_SDIF1 is not set +# CONFIG_USING_EMMC is not set # # Board extended module Drivers @@ -1206,6 +1254,7 @@ CONFIG_RT_LWIP_PBUF_POOL_BUFSIZE=1700 CONFIG_BSP_USING_GIC=y CONFIG_BSP_USING_GICV3=y CONFIG_PHYTIUM_ARCH_AARCH64=y +CONFIG_ARM_SPI_BIND_CPU_ID=2 # # Standalone Setting @@ -1213,77 +1262,62 @@ CONFIG_PHYTIUM_ARCH_AARCH64=y CONFIG_TARGET_ARMV8_AARCH64=y # -# Board Configuration +# Soc configuration # -# CONFIG_TARGET_F2000_4 is not set -# CONFIG_TARGET_D2000 is not set +CONFIG_TARGET_PHYTIUMPI=y # CONFIG_TARGET_E2000Q is not set # CONFIG_TARGET_E2000D is not set # CONFIG_TARGET_E2000S is not set -CONFIG_TARGET_PHYTIUMPI=y +# CONFIG_TARGET_FT2004 is not set +# CONFIG_TARGET_D2000 is not set +CONFIG_SOC_NAME="phytiumpi" +CONFIG_SOC_CORE_NUM=4 +CONFIG_F32BIT_MEMORY_ADDRESS=0x80000000 +CONFIG_F32BIT_MEMORY_LENGTH=0x80000000 +CONFIG_F64BIT_MEMORY_ADDRESS=0x2000000000 +CONFIG_F64BIT_MEMORY_LENGTH=0x800000000 CONFIG_TARGET_E2000=y +# CONFIG_USE_SPINLOCK is not set CONFIG_DEFAULT_DEBUG_PRINT_UART1=y # CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set # CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set # -# Components Configuration +# Board Configuration # -CONFIG_USE_SPI=y -CONFIG_USE_FSPIM=y -CONFIG_USE_QSPI=y +CONFIG_BOARD_NAME="firefly" +# CONFIG_USE_SPI_IOPAD is not set +# CONFIG_USE_GPIO_IOPAD is not set +# CONFIG_USE_CAN_IOPAD is not set +# CONFIG_USE_QSPI_IOPAD is not set +# CONFIG_USE_PWM_IOPAD is not set +# CONFIG_USE_MIO_IOPAD is not set +# CONFIG_USE_TACHO_IOPAD is not set +# CONFIG_USE_UART_IOPAD is not set +# CONFIG_USE_THIRD_PARTY_IOPAD is not set +# CONFIG_E2000Q_DEMO_BOARD is not set +CONFIG_FIREFLY_DEMO_BOARD=y # -# Qspi Configuration +# IO mux configuration when board start up # -CONFIG_USE_FQSPI=y -# CONFIG_USE_GIC is not set -CONFIG_USE_IOPAD=y -CONFIG_ENABLE_IOPAD=y -CONFIG_USE_SERIAL=y - -# -# Usart Configuration -# -CONFIG_ENABLE_Pl011_UART=y -# CONFIG_USE_GPIO is not set -CONFIG_USE_ETH=y - -# -# Eth Configuration -# -CONFIG_ENABLE_FXMAC=y -# CONFIG_ENABLE_FGMAC is not set -CONFIG_FXMAC_PHY_COMMON=y -# CONFIG_FXMAC_PHY_YT is not set -# CONFIG_USE_CAN is not set -# CONFIG_USE_I2C is not set -# CONFIG_USE_TIMER is not set -# CONFIG_USE_MIO is not set -# CONFIG_USE_SDMMC is not set -# CONFIG_USE_PCIE is not set -# CONFIG_USE_WDT is not set -# CONFIG_USE_DMA is not set -# CONFIG_USE_NAND is not set -# CONFIG_USE_RTC is not set -# CONFIG_USE_SATA is not set -# CONFIG_USE_USB is not set -# CONFIG_USE_ADC is not set -# CONFIG_USE_PWM is not set -# CONFIG_USE_IPC is not set -# CONFIG_USE_MEDIA is not set -# CONFIG_USE_SCMI_MHU is not set +# CONFIG_CUS_DEMO_BOARD is not set # # Sdk common configuration # # CONFIG_LOG_VERBOS is not set -# CONFIG_LOG_DEBUG is not set +CONFIG_LOG_DEBUG=y # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set -CONFIG_LOG_ERROR=y +# CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set # CONFIG_USE_DEFAULT_INTERRUPT_CONFIG is not set + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set diff --git a/bsp/phytium/aarch64/configs/phytium_pi_rtthread.h b/bsp/phytium/aarch64/configs/phytium_pi_rtthread.h index 79316d1f05..1c11c47fa5 100644 --- a/bsp/phytium/aarch64/configs/phytium_pi_rtthread.h +++ b/bsp/phytium/aarch64/configs/phytium_pi_rtthread.h @@ -7,8 +7,7 @@ /* RT-Thread Kernel */ #define RT_NAME_MAX 16 -#define RT_USING_SMP -#define RT_CPUS_NR 4 +#define RT_CPUS_NR 1 #define RT_ALIGN_SIZE 4 #define RT_THREAD_PRIORITY_32 #define RT_THREAD_PRIORITY_MAX 32 @@ -19,7 +18,6 @@ #define RT_USING_IDLE_HOOK #define RT_IDLE_HOOK_LIST_SIZE 4 #define IDLE_THREAD_STACK_SIZE 8192 -#define SYSTEM_THREAD_STACK_SIZE 8192 #define RT_USING_TIMER_SOFT #define RT_TIMER_THREAD_PRIO 4 #define RT_TIMER_THREAD_STACK_SIZE 8192 @@ -50,21 +48,12 @@ #define RT_USING_SLAB_AS_HEAP #define RT_USING_HEAP_ISR #define RT_USING_HEAP - -/* Kernel Device Object */ - #define RT_USING_DEVICE #define RT_USING_CONSOLE #define RT_CONSOLEBUF_SIZE 128 #define RT_CONSOLE_DEVICE_NAME "uart1" -#define RT_VER_NUM 0x50001 -#define ARCH_CPU_64BIT -#define RT_USING_CACHE -#define ARCH_ARM_BOOTWITH_FLUSH_CACHE -#define ARCH_MM_MMU -#define ARCH_ARM -#define ARCH_ARM_MMU -#define ARCH_ARMV8 +#define RT_VER_NUM 0x50100 +#define RT_BACKTRACE_LEVEL_MAX_NR 32 /* AArch64 Architecture Configuration */ @@ -72,6 +61,13 @@ #define ARCH_RAM_OFFSET 0x80000000 #define ARCH_SECONDARY_CPU_STACK_SIZE 4096 #define ARCH_HAVE_EFFICIENT_UNALIGNED_ACCESS +#define ARCH_CPU_64BIT +#define RT_USING_CACHE +#define ARCH_ARM_BOOTWITH_FLUSH_CACHE +#define ARCH_MM_MMU +#define ARCH_ARM +#define ARCH_ARM_MMU +#define ARCH_ARMV8 /* RT-Thread Components */ @@ -92,6 +88,7 @@ #define MSH_USING_BUILT_IN_COMMANDS #define FINSH_USING_DESCRIPTION #define FINSH_ARG_MAX 10 +#define FINSH_USING_OPTION_COMPLETION /* DFS: device virtual file system */ @@ -136,11 +133,12 @@ #define RT_USING_RANDOM #define RT_USING_RTC #define RT_USING_SDIO -#define RT_SDIO_STACK_SIZE 4096 +#define RT_SDIO_STACK_SIZE 8192 #define RT_SDIO_THREAD_PRIORITY 15 -#define RT_MMCSD_STACK_SIZE 4096 +#define RT_MMCSD_STACK_SIZE 8192 #define RT_MMCSD_THREAD_PREORITY 22 #define RT_MMCSD_MAX_PARTITION 16 +#define RT_USING_KTIME /* Using USB */ @@ -216,7 +214,7 @@ #define RT_LWIP_TCPTHREAD_MBOX_SIZE 8 #define RT_LWIP_TCPTHREAD_STACKSIZE 16184 #define RT_LWIP_ETHTHREAD_PRIORITY 12 -#define RT_LWIP_ETHTHREAD_STACKSIZE 2048 +#define RT_LWIP_ETHTHREAD_STACKSIZE 8192 #define RT_LWIP_ETHTHREAD_MBOX_SIZE 8 #define LWIP_NETIF_STATUS_CALLBACK 1 #define LWIP_NETIF_LINK_CALLBACK 1 @@ -240,7 +238,9 @@ #define RT_USING_ADT_BITMAP #define RT_USING_ADT_HASHMAP #define RT_USING_ADT_REF -#define RT_USING_KTIME + +/* Memory management */ + /* RT-Thread Utestcases */ @@ -258,6 +258,9 @@ /* Wiced WiFi */ +/* CYW43012 WiFi */ + + /* IoT Cloud */ @@ -330,7 +333,7 @@ /* Arduino libraries */ -/* Projects */ +/* Projects and Demos */ /* Sensors */ @@ -363,54 +366,54 @@ /* Hardware Drivers */ +#define DRV_DEBUG + /* On-chip Peripheral Drivers */ +#define BSP_USING_IOPAD #define BSP_USING_UART #define RT_USING_UART1 -#define BSP_USING_ETH -#define RT_LWIP_PBUF_POOL_BUFSIZE 1700 +#define BSP_USING_SDIF +#define BSP_USING_SDCARD_FATFS +#define BSP_USING_SDCARD_PARTITION "sd1" +#define USING_SDIF0 /* Board extended module Drivers */ #define BSP_USING_GIC #define BSP_USING_GICV3 #define PHYTIUM_ARCH_AARCH64 +#define ARM_SPI_BIND_CPU_ID 2 /* Standalone Setting */ #define TARGET_ARMV8_AARCH64 -/* Board Configuration */ +/* Soc configuration */ #define TARGET_PHYTIUMPI +#define SOC_NAME "phytiumpi" +#define SOC_CORE_NUM 4 +#define F32BIT_MEMORY_ADDRESS 0x80000000 +#define F32BIT_MEMORY_LENGTH 0x80000000 +#define F64BIT_MEMORY_ADDRESS 0x2000000000 +#define F64BIT_MEMORY_LENGTH 0x800000000 #define TARGET_E2000 #define DEFAULT_DEBUG_PRINT_UART1 -/* Components Configuration */ +/* Board Configuration */ -#define USE_SPI -#define USE_FSPIM -#define USE_QSPI +#define BOARD_NAME "firefly" +#define FIREFLY_DEMO_BOARD -/* Qspi Configuration */ +/* IO mux configuration when board start up */ -#define USE_FQSPI -#define USE_IOPAD -#define ENABLE_IOPAD -#define USE_SERIAL - -/* Usart Configuration */ - -#define ENABLE_Pl011_UART -#define USE_ETH - -/* Eth Configuration */ - -#define ENABLE_FXMAC -#define FXMAC_PHY_COMMON /* Sdk common configuration */ -#define LOG_ERROR +#define LOG_DEBUG + +/* Image information configuration */ + #endif diff --git a/bsp/phytium/aarch64/figures/chip_select.png b/bsp/phytium/aarch64/figures/chip_select.png deleted file mode 100644 index 26878fe235..0000000000 Binary files a/bsp/phytium/aarch64/figures/chip_select.png and /dev/null differ diff --git a/bsp/phytium/aarch64/figures/debug_info.png b/bsp/phytium/aarch64/figures/debug_info.png new file mode 100644 index 0000000000..6df66ce369 Binary files /dev/null and b/bsp/phytium/aarch64/figures/debug_info.png differ diff --git a/bsp/phytium/aarch64/figures/kconfig_modify.png b/bsp/phytium/aarch64/figures/kconfig_modify.png new file mode 100644 index 0000000000..97a043bb17 Binary files /dev/null and b/bsp/phytium/aarch64/figures/kconfig_modify.png differ diff --git a/bsp/phytium/aarch64/figures/phytium_cpu_select.png b/bsp/phytium/aarch64/figures/phytium_cpu_select.png deleted file mode 100644 index 40af2b41c6..0000000000 Binary files a/bsp/phytium/aarch64/figures/phytium_cpu_select.png and /dev/null differ diff --git a/bsp/phytium/aarch64/figures/select_debug_info.png b/bsp/phytium/aarch64/figures/select_debug_info.png deleted file mode 100644 index 8d22436940..0000000000 Binary files a/bsp/phytium/aarch64/figures/select_debug_info.png and /dev/null differ diff --git a/bsp/phytium/aarch64/figures/ymodem_upload.png b/bsp/phytium/aarch64/figures/ymodem_upload.png new file mode 100644 index 0000000000..9d166a09e8 Binary files /dev/null and b/bsp/phytium/aarch64/figures/ymodem_upload.png differ diff --git a/bsp/phytium/aarch64/makefile b/bsp/phytium/aarch64/makefile index 0d56d97b9a..79144a5994 100644 --- a/bsp/phytium/aarch64/makefile +++ b/bsp/phytium/aarch64/makefile @@ -14,12 +14,12 @@ RTCONFIG = include .config -ifdef CONFIG_TARGET_E2000Q -RTCONFIG := e2000q +ifdef CONFIG_E2000Q_DEMO_BOARD +RTCONFIG := e2000q_demo endif -ifdef CONFIG_TARGET_E2000D -RTCONFIG := e2000d +ifdef CONFIG_E2000D_DEMO_BOARD +RTCONFIG := e2000d_demo endif ifdef CONFIG_TARGET_PHYTIUMPI @@ -62,53 +62,53 @@ saveconfig: @cp ./.config ./configs/$(RTCONFIG) -f @cp ./rtconfig.h ./configs/$(RTCONFIG).h -f -load_e2000q_rtsmart: - @echo "Load configs from ./configs/e2000q_rtsmart" - @cp ./configs/e2000q_rtsmart ./.config -f - @cp ./configs/e2000q_rtsmart.h ./rtconfig.h -f +load_e2000q_demo_rtsmart: + @echo "Load configs from ./configs/e2000q_demo_rtsmart" + @cp ./configs/e2000q_demo_rtsmart ./.config -f + @cp ./configs/e2000q_demo_rtsmart.h ./rtconfig.h -f @scons -c -load_e2000q_rtsmart_test: - @echo "Load configs from ./configs/e2000q_rtsmart" - @cp ./configs/e2000q_rtsmart_test ./.config -f - @cp ./configs/e2000q_rtsmart_test.h ./rtconfig.h -f +load_e2000q_demo_rtsmart_test: + @echo "Load configs from ./configs/e2000q_demo_rtsmart_test" + @cp ./configs/e2000q_demo_rtsmart_test ./.config -f + @cp ./configs/e2000q_demo_rtsmart_test.h ./rtconfig.h -f @scons -c -load_e2000q_rtthread: - @echo "Load configs from ./configs/e2000q_rtthread" - @cp ./configs/e2000q_rtthread ./.config -f - @cp ./configs/e2000q_rtthread.h ./rtconfig.h -f +load_e2000q_demo_rtthread: + @echo "Load configs from ./configs/e2000q_demo_rtthread" + @cp ./configs/e2000q_demo_rtthread ./.config -f + @cp ./configs/e2000q_demo_rtthread.h ./rtconfig.h -f @scons -c -load_e2000q_rtthread_test: - @echo "Load configs from ./configs/e2000q_rtthread" - @cp ./configs/e2000q_rtthread_test ./.config -f - @cp ./configs/e2000q_rtthread_test.h ./rtconfig.h -f +load_e2000q_demo_rtthread_test: + @echo "Load configs from ./configs/e2000q_demo_rtthread_test" + @cp ./configs/e2000q_demo_rtthread_test ./.config -f + @cp ./configs/e2000q_demo_rtthread_test.h ./rtconfig.h -f @scons -c -load_e2000d_rtsmart: - @echo "Load configs from ./configs/e2000d_rtsmart" - @cp ./configs/e2000d_rtsmart ./.config -f - @cp ./configs/e2000d_rtsmart.h ./rtconfig.h -f +load_e2000d_demo_rtsmart: + @echo "Load configs from ./configs/e2000d_demo_rtsmart" + @cp ./configs/e2000d_demo_rtsmart ./.config -f + @cp ./configs/e2000d_demo_rtsmart.h ./rtconfig.h -f @scons -c -load_e2000d_rtsmart_test: - @echo "Load configs from ./configs/e2000d_rtsmart" - @cp ./configs/e2000d_rtsmart_test ./.config -f - @cp ./configs/e2000d_rtsmart_test.h ./rtconfig.h -f +load_e2000d_demo_rtsmart_test: + @echo "Load configs from ./configs/e2000d_demo_rtsmart_test" + @cp ./configs/e2000d_demo_rtsmart_test ./.config -f + @cp ./configs/e2000d_demo_rtsmart_test.h ./rtconfig.h -f @scons -c -load_e2000d_rtthread: - @echo "Load configs from ./configs/e2000d_rtthread" - @cp ./configs/e2000d_rtthread ./.config -f - @cp ./configs/e2000d_rtthread.h ./rtconfig.h -f - @scons -c +load_e2000d_demo_rtthread: + @echo "Load configs from ./configs/e2000d_demo_rtthread" + @cp ./configs/e2000d_demo_rtthread ./.config -f + @cp ./configs/e2000d_demo_rtthread.h ./rtconfig.h -f + scons -c -load_e2000d_rtthread_test: - @echo "Load configs from ./configs/e2000d_rtthread" - @cp ./configs/e2000d_rtthread_test ./.config -f - @cp ./configs/e2000d_rtthread_test.h ./rtconfig.h -f - @scons -c +load_e2000d_demo_rtthread_test: + @echo "Load configs from ./configs/e2000d_demo_rtthread_test" + @cp ./configs/e2000d_demo_rtthread_test ./.config -f + @cp ./configs/e2000d_demo_rtthread_test.h ./rtconfig.h -f + scons -c load_phytium_pi_rtthread: @echo "Load configs from ./configs/phytium_pi_rtthread" diff --git a/bsp/phytium/aarch64/rtconfig.h b/bsp/phytium/aarch64/rtconfig.h index daa649f86e..1c11c47fa5 100644 --- a/bsp/phytium/aarch64/rtconfig.h +++ b/bsp/phytium/aarch64/rtconfig.h @@ -7,8 +7,7 @@ /* RT-Thread Kernel */ #define RT_NAME_MAX 16 -#define RT_USING_SMP -#define RT_CPUS_NR 4 +#define RT_CPUS_NR 1 #define RT_ALIGN_SIZE 4 #define RT_THREAD_PRIORITY_32 #define RT_THREAD_PRIORITY_MAX 32 @@ -19,7 +18,6 @@ #define RT_USING_IDLE_HOOK #define RT_IDLE_HOOK_LIST_SIZE 4 #define IDLE_THREAD_STACK_SIZE 8192 -#define SYSTEM_THREAD_STACK_SIZE 8192 #define RT_USING_TIMER_SOFT #define RT_TIMER_THREAD_PRIO 4 #define RT_TIMER_THREAD_STACK_SIZE 8192 @@ -50,14 +48,12 @@ #define RT_USING_SLAB_AS_HEAP #define RT_USING_HEAP_ISR #define RT_USING_HEAP - -/* Kernel Device Object */ - #define RT_USING_DEVICE #define RT_USING_CONSOLE #define RT_CONSOLEBUF_SIZE 128 #define RT_CONSOLE_DEVICE_NAME "uart1" -#define RT_VER_NUM 0x50002 +#define RT_VER_NUM 0x50100 +#define RT_BACKTRACE_LEVEL_MAX_NR 32 /* AArch64 Architecture Configuration */ @@ -137,9 +133,9 @@ #define RT_USING_RANDOM #define RT_USING_RTC #define RT_USING_SDIO -#define RT_SDIO_STACK_SIZE 4096 +#define RT_SDIO_STACK_SIZE 8192 #define RT_SDIO_THREAD_PRIORITY 15 -#define RT_MMCSD_STACK_SIZE 4096 +#define RT_MMCSD_STACK_SIZE 8192 #define RT_MMCSD_THREAD_PREORITY 22 #define RT_MMCSD_MAX_PARTITION 16 #define RT_USING_KTIME @@ -218,7 +214,7 @@ #define RT_LWIP_TCPTHREAD_MBOX_SIZE 8 #define RT_LWIP_TCPTHREAD_STACKSIZE 16184 #define RT_LWIP_ETHTHREAD_PRIORITY 12 -#define RT_LWIP_ETHTHREAD_STACKSIZE 2048 +#define RT_LWIP_ETHTHREAD_STACKSIZE 8192 #define RT_LWIP_ETHTHREAD_MBOX_SIZE 8 #define LWIP_NETIF_STATUS_CALLBACK 1 #define LWIP_NETIF_LINK_CALLBACK 1 @@ -243,6 +239,9 @@ #define RT_USING_ADT_HASHMAP #define RT_USING_ADT_REF +/* Memory management */ + + /* RT-Thread Utestcases */ @@ -259,6 +258,9 @@ /* Wiced WiFi */ +/* CYW43012 WiFi */ + + /* IoT Cloud */ @@ -364,12 +366,17 @@ /* Hardware Drivers */ +#define DRV_DEBUG + /* On-chip Peripheral Drivers */ +#define BSP_USING_IOPAD #define BSP_USING_UART #define RT_USING_UART1 -#define BSP_USING_ETH -#define RT_LWIP_PBUF_POOL_BUFSIZE 1700 +#define BSP_USING_SDIF +#define BSP_USING_SDCARD_FATFS +#define BSP_USING_SDCARD_PARTITION "sd1" +#define USING_SDIF0 /* Board extended module Drivers */ @@ -382,37 +389,31 @@ #define TARGET_ARMV8_AARCH64 -/* Board Configuration */ +/* Soc configuration */ #define TARGET_PHYTIUMPI +#define SOC_NAME "phytiumpi" +#define SOC_CORE_NUM 4 +#define F32BIT_MEMORY_ADDRESS 0x80000000 +#define F32BIT_MEMORY_LENGTH 0x80000000 +#define F64BIT_MEMORY_ADDRESS 0x2000000000 +#define F64BIT_MEMORY_LENGTH 0x800000000 #define TARGET_E2000 #define DEFAULT_DEBUG_PRINT_UART1 -/* Components Configuration */ +/* Board Configuration */ -#define USE_SPI -#define USE_FSPIM -#define USE_QSPI +#define BOARD_NAME "firefly" +#define FIREFLY_DEMO_BOARD -/* Qspi Configuration */ +/* IO mux configuration when board start up */ -#define USE_FQSPI -#define USE_IOPAD -#define ENABLE_IOPAD -#define USE_SERIAL - -/* Usart Configuration */ - -#define ENABLE_Pl011_UART -#define USE_ETH - -/* Eth Configuration */ - -#define ENABLE_FXMAC -#define FXMAC_PHY_COMMON /* Sdk common configuration */ -#define LOG_ERROR +#define LOG_DEBUG + +/* Image information configuration */ + #endif diff --git a/bsp/phytium/board/README.md b/bsp/phytium/board/README.md new file mode 100644 index 0000000000..70042caaf7 --- /dev/null +++ b/bsp/phytium/board/README.md @@ -0,0 +1,51 @@ +# 添加开发板至PHYTIUM BSP + +注:BSP已支持E2000Q_DEMO,E2000D_DEMO,PHYTIUMPI开发板,若需填加系列其他开发板,请按以下步骤进行 + +## 以cus_demo_board(E2000D系列)开发板为例进行说明 + +1. 在bsp/phytium/board下创建cus_demo_board文件夹 +``` +$ cd bsp/phytium/board +$ cd mkdir cus_demo_board +``` + +2. 创建文件fio_mux.c和fio_mux.h,添加引脚复用函数 +``` +$ touch fio_mux.c +$ touch fio_mux.c +``` +可参考bsp/phytium/standalone/board/e2000d_demo 目录下的fio_mux.c和fio_mux.h文件,示例基本框架已完成,只需填充函数 + +3. 在bsp/phytium/board 目录下SConscript文件中添加如下内容,将fio_mux.c和fio_mux.h文件加入编译 + +![SConscript](./../figures/SConscript.png) + +4. 修改 bsp/phytium/board 目录下board.kconfig文件,如下图所示 + +![board_kconfig](./../figures/board_kconfig.png) + +5. 打开menuconfig进行如下配置 + +- 进入Standalone Setting目录下 +![standalone_setting](./../figures/standalone_setting.png) + +- 进入Soc configuration选择E2000D +![soc_configuration](./../figures/soc_configuration.png) + +![soc_select](./../figures/soc_select.png) + +- 进入board_configuration选择cus_board_demo + +![board_configuration](./../figures/soc_configuration.png) + +![board_select](./../figures/board_select.png) + +6. 编译测试 + + + + + + + diff --git a/bsp/phytium/board/SConscript b/bsp/phytium/board/SConscript index c98faf368a..1ab85f93a1 100644 --- a/bsp/phytium/board/SConscript +++ b/bsp/phytium/board/SConscript @@ -3,31 +3,13 @@ from building import * cwd = GetCurrentDir() src = Glob('*.S') src += Glob('*.c') +path = [cwd] -if GetDepend(['TARGET_E2000Q']): - src += Glob(cwd + '/e2000/memory_map.c') - src += Glob(cwd + '/e2000/q/parameters.c') -elif GetDepend(['TARGET_E2000D']): - src += Glob(cwd + '/e2000/memory_map.c') - src += Glob(cwd + '/e2000/d/parameters.c') -elif GetDepend(['TARGET_E2000S']): - src += Glob(cwd + '/e2000/memory_map.c') - src += Glob(cwd + '/e2000/s/parameters.c') +if GetDepend(['CUS_DEMO_BOARD']): + src += Glob(cwd + '/cus_demo_board/fio_mux.c') + path += [cwd + '/cus_demo_board/'] -if GetDepend(['TARGET_F2000_4']): - src += Glob(cwd + '/ft2004/memory_map.c') - src += Glob(cwd + '/ft2004/parameters.c') - -if GetDepend(['TARGET_D2000']): - src += Glob(cwd + '/d2000/memory_map.c') - src += Glob(cwd + '/d2000/parameters.c') - -if GetDepend(['TARGET_PHYTIUMPI']): - src += Glob(cwd + '/phytium-pi/memory_map.c') - src += Glob(cwd + '/phytium-pi/parameters.c') - -CPPPATH = [cwd] - -group = DefineGroup('Board', src, depend = [''], CPPPATH = CPPPATH) +group = DefineGroup('Board', src, depend=[ + ''], CPPPATH=path) Return('group') diff --git a/bsp/phytium/board/board.c b/bsp/phytium/board/board.c index b4d141dcd8..cee78d71a3 100644 --- a/bsp/phytium/board/board.c +++ b/bsp/phytium/board/board.c @@ -33,13 +33,11 @@ #include #include #else - #include "fgeneric_timer.h" /* for aarch32 */ + #include #endif #include #include -#include "fdebug.h" -#include "fprintk.h" #include "fearly_uart.h" #include "fcpu_info.h" #include "fiopad.h" @@ -48,13 +46,8 @@ #include "fpsci.h" #endif -#define LOG_DEBUG_TAG "BOARD" -#define BSP_LOG_ERROR(format, ...) FT_DEBUG_PRINT_E(LOG_DEBUG_TAG, format, ##__VA_ARGS__) -#define BSP_LOG_WARN(format, ...) FT_DEBUG_PRINT_W(LOG_DEBUG_TAG, format, ##__VA_ARGS__) -#define BSP_LOG_INFO(format, ...) FT_DEBUG_PRINT_I(LOG_DEBUG_TAG, format, ##__VA_ARGS__) -#define BSP_LOG_DEBUG(format, ...) FT_DEBUG_PRINT_D(LOG_DEBUG_TAG, format, ##__VA_ARGS__) - -FIOPadCtrl iopad_ctrl; +extern FIOPadCtrl iopad_ctrl; +uintptr flsd_config_base = FLSD_CONFIG_BASE; /* mmu config */ extern struct mem_desc platform_mem_desc[]; extern const rt_uint32_t platform_mem_desc_size; @@ -75,6 +68,16 @@ rt_region_t init_page_region = PAGE_END }; +void FIOMuxInit(void) +{ + FIOPadCfgInitialize(&iopad_ctrl, FIOPadLookupConfig(FIOPAD0_ID)); +#ifdef RT_USING_SMART + iopad_ctrl.config.base_address = (uintptr)rt_ioremap((void *)iopad_ctrl.config.base_address, 0x2000); +#endif + + return; +} + #if defined(TARGET_ARMV8_AARCH64) /* AARCH64 */ /* aarch64 use kernel gtimer */ @@ -84,9 +87,33 @@ rt_region_t init_page_region = /* aarch32 implment gtimer by bsp */ static rt_uint32_t timer_step; +#define CNTP_CTL_ENABLE (1U << 0) /* Enables the timer */ +#define CNTP_CTL_IMASK (1U << 1) /* Timer interrupt mask bit */ +#define CNTP_CTL_ISTATUS (1U << 2) /* The status of the timer */ +void GenericTimerInterruptEnable(u32 id) +{ + u64 ctrl = gtimer_get_control(); + if (ctrl & CNTP_CTL_IMASK) + { + ctrl &= ~CNTP_CTL_IMASK; + gtimer_set_control(ctrl); + } +} + +void GenericTimerStart(u32 id) +{ + u32 ctrl = gtimer_get_control(); /* get CNTP_CTL */ + + if (!(ctrl & CNTP_CTL_ENABLE)) + { + ctrl |= CNTP_CTL_ENABLE; /* enable gtimer if off */ + gtimer_set_control(ctrl); /* set CNTP_CTL */ + } +} + void rt_hw_timer_isr(int vector, void *parameter) { - GenericTimerSetTimerCompareValue(GENERIC_TIMER_ID0, timer_step); + gtimer_set_load_value(timer_step); rt_tick_increase(); } @@ -94,15 +121,17 @@ int rt_hw_timer_init(void) { rt_hw_interrupt_install(GENERIC_TIMER_NS_IRQ_NUM, rt_hw_timer_isr, RT_NULL, "tick"); rt_hw_interrupt_umask(GENERIC_TIMER_NS_IRQ_NUM); - timer_step = GenericTimerFrequecy(); + timer_step = gtimer_get_counter_frequency(); + FASSERT_MSG((timer_step > 1000000), "invalid freqency %ud", timer_step); timer_step /= RT_TICK_PER_SECOND; - GenericTimerSetTimerCompareValue(GENERIC_TIMER_ID0, timer_step); + gtimer_set_load_value(timer_step); GenericTimerInterruptEnable(GENERIC_TIMER_ID0); GenericTimerStart(GENERIC_TIMER_ID0); return 0; } INIT_BOARD_EXPORT(rt_hw_timer_init); + #endif #ifdef RT_USING_SMP @@ -135,10 +164,11 @@ void rt_hw_board_aarch64_init(void) FEarlyUartProbe(); - FIOPadCfgInitialize(&iopad_ctrl, FIOPadLookupConfig(FIOPAD0_ID)); - + FIOMuxInit(); #ifdef RT_USING_SMART - iopad_ctrl.config.base_address = (uintptr)rt_ioremap((void *)iopad_ctrl.config.base_address, 0x2000); +#if defined(FLSD_CONFIG_BASE) + flsd_config_base = (uintptr)rt_ioremap((void *)flsd_config_base, 0x1000); +#endif #endif /* compoent init */ @@ -162,8 +192,6 @@ void rt_hw_board_aarch64_init(void) rt_hw_interrupt_umask(RT_SCHEDULE_IPI); #endif - - } #else @@ -208,11 +236,13 @@ void rt_hw_board_aarch32_init(void) FEarlyUartProbe(); - FIOPadCfgInitialize(&iopad_ctrl, FIOPadLookupConfig(FIOPAD0_ID)); + FIOMuxInit(); #if defined(RT_USING_SMART) redist_addr = (uint32_t)rt_ioremap(GICV3_RD_BASE_ADDR, 4 * 128 * 1024); - iopad_ctrl.config.base_address = (uintptr)rt_ioremap((void *)iopad_ctrl.config.base_address, 0x2000); +#if defined(FLSD_CONFIG_BASE) + flsd_config_base = (uintptr)rt_ioremap((void *)flsd_config_base, 0x1000); +#endif #else redist_addr = GICV3_RD_BASE_ADDR; #endif diff --git a/bsp/phytium/board/board.h b/bsp/phytium/board/board.h index 8b8646365c..fd4792836e 100644 --- a/bsp/phytium/board/board.h +++ b/bsp/phytium/board/board.h @@ -22,7 +22,7 @@ #include "mmu.h" #ifdef RT_USING_SMART -#include "ioremap.h" + #include "ioremap.h" #endif #if defined(__CC_ARM) @@ -34,16 +34,16 @@ #endif #ifdef RT_USING_SMART -#define HEAP_END (rt_size_t)((rt_size_t)KERNEL_VADDR_START + 64 * 1024 * 1024) -#define PAGE_START HEAP_END + 1 * 1024 * 1024 -#define PAGE_END (rt_size_t)((rt_size_t)KERNEL_VADDR_START + 128 * 1024 * 1024) + #define HEAP_END (rt_size_t)((rt_size_t)KERNEL_VADDR_START + 64 * 1024 * 1024) + #define PAGE_START HEAP_END + 1 * 1024 * 1024 + #define PAGE_END (rt_size_t)((rt_size_t)KERNEL_VADDR_START + 128 * 1024 * 1024) #else -#define HEAP_END (rt_size_t)(HEAP_BEGIN + 64*1024*1024) -#define KERNEL_VADDR_START (rt_size_t)0x80000000 -#define DDR_END_ADDRESS (KERNEL_VADDR_START + 1024*1024*1024 - 1 ) -#define PAGE_POOL_SIZE (8ul << 20) -#define PAGE_START (rt_size_t)(HEAP_END) -#define PAGE_END (PAGE_START +PAGE_POOL_SIZE) + #define HEAP_END (rt_size_t)(HEAP_BEGIN + 64*1024*1024) + #define KERNEL_VADDR_START (rt_size_t)0x80000000 + #define DDR_END_ADDRESS (KERNEL_VADDR_START + 1024*1024*1024 - 1 ) + #define PAGE_POOL_SIZE (8ul << 20) + #define PAGE_START (rt_size_t)(HEAP_END) + #define PAGE_END (PAGE_START +PAGE_POOL_SIZE) #endif #ifdef RT_USING_PIN diff --git a/bsp/phytium/board/board.kconfig b/bsp/phytium/board/board.kconfig new file mode 100644 index 0000000000..6ba8eb4db2 --- /dev/null +++ b/bsp/phytium/board/board.kconfig @@ -0,0 +1,91 @@ +menu "Board Configuration" + +choice + prompt "Board select" + default FIREFLY_DEMO_BOARD + + config E2000D_DEMO_BOARD + select USE_IOMUX + bool + prompt "Use E2000D demo board" + depends on TARGET_E2000D + help + select E2000D demo board config + if E2000D_DEMO_BOARD + config BOARD_NAME + string + default "demo" + source "$SDK_DIR/board/e2000d_demo/e2000d_demo.kconfig" + endif + + config E2000Q_DEMO_BOARD + select USE_IOMUX + bool + prompt "Use E2000Q demo board" + depends on TARGET_E2000Q + help + select E2000Q demo board config + if E2000Q_DEMO_BOARD + config BOARD_NAME + string + default "demo" + source "$SDK_DIR/board/e2000q_demo/e2000q_demo.kconfig" + endif + + config D2000_TEST_BOARD + select USE_IOMUX + bool + prompt "Use D2000 test board" + depends on TARGET_D2000 + help + select D2000 test board config + if D2000_TEST_BOARD + config BOARD_NAME + string + default "test" + source "$SDK_DIR/board/d2000_test/d2000_test.kconfig" + endif + + config FT2004_DSK_BOARD + select USE_IOMUX + bool + prompt "Use FT2004 dsk board" + depends on TARGET_FT2004 + help + select FT2004 dsk board config + if FT2004_DSK_BOARD + config BOARD_NAME + string + default "dsk" + source "$SDK_DIR/board/ft2004_dsk/ft2004_dsk.kconfig" + endif + + config FIREFLY_DEMO_BOARD + select USE_IOMUX + bool + prompt "Use firefly board" + depends on TARGET_PHYTIUMPI + help + select firefly board config + if FIREFLY_DEMO_BOARD + config BOARD_NAME + string + default "firefly" + source "$SDK_DIR/board/firefly/firefly.kconfig" + endif + + config CUS_DEMO_BOARD + select USE_IOMUX + bool + prompt "Use Customization board" + help + select Customization board config + if CUS_DEMO_BOARD + config BOARD_NAME + string "Write name" + default "none" +# source "$SDK_DIR/board/""/"".kconfig" + endif +endchoice + +endmenu diff --git a/bsp/phytium/board/cus_demo_board/fio_mux.c b/bsp/phytium/board/cus_demo_board/fio_mux.c new file mode 100644 index 0000000000..909a004536 --- /dev/null +++ b/bsp/phytium/board/cus_demo_board/fio_mux.c @@ -0,0 +1,144 @@ +#include "fio_mux.h" +#include "fiopad_hw.h" +#include "fiopad.h" +#include "fparameters.h" +#include "fassert.h" + +FIOPadCtrl iopad_ctrl; + +/*****************************************************************************/ +/** + * @name: FIOPadSetSpimMux + * @msg: set iopad mux for spim + * @return {*} + * @param {u32} spim_id, instance id of spi + */ +void FIOPadSetSpimMux(u32 spim_id) +{ + +} + +/** + * @name: FIOPadSetGpioMux + * @msg: set iopad mux for gpio + * @return {*} + * @param {u32} gpio_id, instance id of gpio + * @param {u32} pin_id, index of pin + */ +void FIOPadSetGpioMux(u32 gpio_id, u32 pin_id) +{ + +} + +/** + * @name: FIOPadSetCanMux + * @msg: set iopad mux for can + * @return {*} + * @param {u32} can_id, instance id of can + */ +void FIOPadSetCanMux(u32 can_id) +{ + +} + +/** + * @name: FIOPadSetQspiMux + * @msg: set iopad mux for qspi + * @return {*} + * @param {u32} qspi_id, id of qspi instance + * @param {u32} cs_id, id of qspi cs + */ +void FIOPadSetQspiMux(u32 qspi_id, u32 cs_id) +{ + +} + + +/** + * @name: FIOPadSetPwmMux + * @msg: set iopad mux for pwm + * @return {*} + * @param {u32} pwm_id, id of pwm instance + * @param {u32} pwm_channel, channel of pwm instance + */ +void FIOPadSetPwmMux(u32 pwm_id, u32 pwm_channel) +{ + +} + + +/** + * @name: FIOPadSetAdcMux + * @msg: set iopad mux for adc + * @return {*} + * @param {u32} adc_id, id of adc instance + * @param {u32} adc_channel, id of adc channel + */ +void FIOPadSetAdcMux(u32 adc_id, u32 adc_channel) +{ + +} + +/** + * @name: FIOPadSetMioMux + * @msg: set iopad mux for mio + * @return {*} + * @param {u32} mio_id, instance id of i2c + */ +void FIOPadSetMioMux(u32 mio_id) +{ + +} + +/** + * @name: FIOPadSetTachoMux + * @msg: set iopad mux for pwm_in + * @return {*} + * @param {u32} pwm_in_id, instance id of tacho + */ +void FIOPadSetTachoMux(u32 pwm_in_id) +{ + +} + +/** + * @name: FIOPadSetUartMux + * @msg: set iopad mux for uart + * @return {*} + * @param {u32} uart_id, instance id of uart + */ +void FIOPadSetUartMux(u32 uart_id) +{ + +} + +/** + * @name: FIOPadSetUartMux + * @msg: set iopad mux for i2s + * @return {*} + */ +void FIOPadSetI2sMux(void) +{ + +} + +/** + * @name: FIOPadSetSdMux + * @msg: set iopad mux for sd + * @return {*} + */ +void FIOPadSetSdMux(u32 sd_id) +{ + +} + +/** + * @name: FIOMuxInit + * @msg: init io mux + * @return {void} + * @note: + */ +_WEAK void FIOMuxInit(void) +{ + +} diff --git a/bsp/phytium/board/cus_demo_board/fio_mux.h b/bsp/phytium/board/cus_demo_board/fio_mux.h new file mode 100644 index 0000000000..23283df1e3 --- /dev/null +++ b/bsp/phytium/board/cus_demo_board/fio_mux.h @@ -0,0 +1,29 @@ +#ifndef FIO_MUX_H +#define FIO_MUX_H + +#include "ftypes.h" +#include "fboard_port.h" +#ifdef __cplusplus +extern "C" +{ +#endif + +void FIOPadSetSpimMux(u32 spim_id); +void FIOPadSetGpioMux(u32 gpio_id, u32 pin_id); +void FIOPadSetCanMux(u32 can_id); +void FIOPadSetQspiMux(u32 qspi_id, u32 cs_id); +void FIOPadSetPwmMux(u32 pwm_id, u32 pwm_channel); +void FIOPadSetAdcMux(u32 adc_id, u32 adc_channel); +void FIOPadSetMioMux(u32 mio_id); +void FIOPadSetTachoMux(u32 pwm_in_id); +void FIOPadSetUartMux(u32 uart_id); +void FIOPadSetI2sMux(void); +void FIOPadSetSdMux(u32 sd_id); + +_WEAK void FIOMuxInit(void); +_WEAK void FIOMuxDeInit(void); +#ifdef __cplusplus +} +#endif + +#endif diff --git a/bsp/phytium/board/e2000/s/parameters.c b/bsp/phytium/board/e2000/s/parameters.c deleted file mode 100644 index b711d6704b..0000000000 --- a/bsp/phytium/board/e2000/s/parameters.c +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (c) 2006-2021, RT-Thread Development Team - * - * SPDX-License-Identifier: Apache-2.0 - * - * Email: opensource_embedded@phytium.com.cn - * - * Change Logs: - * Date Author Notes - * 2022-10-26 huanghe first commit - * - */ - -#include "rtconfig.h" -#include - -#include "fcpu_info.h" -#include "fparameters.h" - -u32 GetCpuMaskToAffval(u32 *cpu_mask, u32 *cluster_id, u32 *target_list) -{ - if (*cpu_mask == 0) - { - return 0; - } - - *target_list = 0; - *cluster_id = 0; - - if (*cpu_mask & 0x1) - { - *target_list = 1; - *cluster_id = 0x200; - *cpu_mask &= ~0x1; - } - else - { - *cpu_mask = 0; - return 0; - } - - return 1; -} diff --git a/bsp/phytium/board/phytium_cpu.c b/bsp/phytium/board/phytium_cpu.c index 220982e68d..d66d6a1443 100644 --- a/bsp/phytium/board/phytium_cpu.c +++ b/bsp/phytium/board/phytium_cpu.c @@ -36,18 +36,18 @@ int phytium_cpu_id_mapping(int cpu_id) #if RT_CPUS_NR <= 2 switch (cpu_id) { - case 0: - return 2; - case 1: - return 3; - case 2: - return 0; - case 3: - return 1; - default: - RT_ASSERT(0); - return 0; - break; + case 0: + return 2; + case 1: + return 3; + case 2: + return 0; + case 3: + return 1; + default: + RT_ASSERT(0); + return 0; + break; } #else return (int)cpu_id; @@ -91,18 +91,18 @@ int phytium_cpu_id_mapping(int cpu_id) #if defined(TARGET_E2000Q) || defined(TARGET_PHYTIUMPI) switch (cpu_id) { - case 0: - return 2; - case 1: - return 3; - case 2: - return 0; - case 3: - return 1; - default: - RT_ASSERT(0); - return 0; - break; + case 0: + return 2; + case 1: + return 3; + case 2: + return 0; + case 3: + return 1; + default: + RT_ASSERT(0); + return 0; + break; } #else return (int)cpu_id; diff --git a/bsp/phytium/board/phytium_cpu.h b/bsp/phytium/board/phytium_cpu.h index 0ff5a56bb9..3082305a6a 100644 --- a/bsp/phytium/board/phytium_cpu.h +++ b/bsp/phytium/board/phytium_cpu.h @@ -21,12 +21,11 @@ #define ARM_GIC_MAX_NR 1 #if defined(TARGET_FT2000_4) || defined(TARGET_D2000) -#define MAX_HANDLERS 160 + #define MAX_HANDLERS 160 #endif #if defined(TARGET_E2000) -#define MAX_HANDLERS 270 -#define ARM_GIC_CPU_NUM 4 + #define MAX_HANDLERS 270 #endif #define GIC_IRQ_START 0 @@ -59,18 +58,18 @@ rt_inline rt_uint32_t platform_get_gic_redist_base(void) switch (cpu_id) { - case 0: - case 1: - cpu_offset = 2; - break; - case 2: - case 3: - cpu_offset = -2; - default: - break; + case 0: + case 1: + cpu_offset = 2; + break; + case 2: + case 3: + cpu_offset = -2; + default: + break; } - rt_kprintf("cpu_id is %d \r\n",cpu_id); + rt_kprintf("cpu_id is %d \r\n", cpu_id); #endif rt_kprintf("offset is %d\n", cpu_offset); diff --git a/bsp/phytium/board/phytium_cpu_id.S b/bsp/phytium/board/phytium_cpu_id.S index a62ad27227..fd5c49ddad 100644 --- a/bsp/phytium/board/phytium_cpu_id.S +++ b/bsp/phytium/board/phytium_cpu_id.S @@ -12,12 +12,11 @@ */ #include "fparameters.h" -#include "sdkconfig.h" #ifndef __aarch64__ .globl cpu_id_mapping cpu_id_mapping: -#if defined(CONFIG_TARGET_E2000Q) +#if defined(TARGET_E2000Q) cmp r0, #0 // compare cpu_id with 0 beq map_cpu_id_0 cmp r0, #1 // compare cpu_id with 1 @@ -122,7 +121,7 @@ return: .globl cpu_id_mapping cpu_id_mapping: -#if defined(CONFIG_TARGET_E2000Q) +#if defined(TARGET_E2000Q) cmp x0, #0 // compare cpu_id with 0 beq map_cpu_id_0 cmp x0, #1 // compare cpu_id with 1 diff --git a/bsp/phytium/board/secondary_cpu.c b/bsp/phytium/board/secondary_cpu.c index 97e052484a..966159e550 100644 --- a/bsp/phytium/board/secondary_cpu.c +++ b/bsp/phytium/board/secondary_cpu.c @@ -64,7 +64,7 @@ rt_uint64_t rt_cpu_mpidr_early[] = }; extern int rt_hw_timer_init(void); -#include "fcache.h" + void rt_hw_secondary_cpu_up(void) { rt_uint32_t i; @@ -72,9 +72,9 @@ void rt_hw_secondary_cpu_up(void) int cpu_id; cpu_id = rt_hw_cpu_id(); rt_kprintf("rt_hw_secondary_cpu_up is processing \r\n"); - for (i = 0; i < RT_CPUS_NR;i++) + for (i = 0; i < RT_CPUS_NR; i++) { - if(i == cpu_id) + if (i == cpu_id) { continue; } @@ -89,7 +89,7 @@ void rt_hw_secondary_cpu_up(void) FPsciCpuMaskOn(cpu_mask, (uintptr)entry); __DSB(); #else - /* code */ + /* code */ FPsciCpuMaskOn(cpu_mask, (uintptr)rt_secondary_cpu_entry); __asm__ volatile("dsb" ::: "memory"); #endif diff --git a/bsp/phytium/doc/use_phytium_pi_sd_image.md b/bsp/phytium/doc/use_phytium_pi_sd_image.md new file mode 100644 index 0000000000..cc6843e2b6 --- /dev/null +++ b/bsp/phytium/doc/use_phytium_pi_sd_image.md @@ -0,0 +1,138 @@ +# 飞腾派上开发和固化 RT-Thread 程序 + +> 本文主要介绍如何在飞腾派中进行 RT-Thread 程序的开发和固化 + +- 飞腾派开发板是一款面向广大工程师和爱好者的开源硬件。主板处理器采用飞腾四核处理器,兼容 ARM v8 指令集,主频最高可达 1.8GHz +- 由于默认系统需要 16G 的空间,推荐使用 32G 的 SD 卡开发 RT-Thread 程序 + +## 开发和调试程序 + +- 在开发和调试程序的阶段可以参考 [Usage](.././README.md) 编译 RT-Thread 程序,通过网络串口等方式下载到飞腾派的 RAM 中直接运行 + +## 使用飞腾派 RT-Thread 镜像 + +- 如果需要固化 RT-Thread 程序镜像在 SD 卡中,并实现开机自启动,可以使用下列的镜像,镜像中包含飞腾派的启动固件、飞腾派OS和一个 RT-Thread 的启动分区 + +- [镜像下载链接](https://pan.baidu.com/s/1eL2ElKeVBU5GOyvzn2kl-A),提取码:PIIM + +- 下载之后解压,使用 sdcard-rtthread.img + + ``` + ----------------------------------------------------------------------------------- + | | | | + | 64MB (系统镜像) | 16G (Phytium Pi OS 根文件系统) | 4G (RT-Thread文件系统) | + | (无格式) | (ext4格式) | (fat32格式) | + ---------------------------------------------------------------------------------- + ``` + +- Windows 上使用 balenaEtcher 工具烧入一张 SD 卡(>= 32G),镜像的格式如下图所示,由3个分区组成,前 64MB 是二进制无格式的启动镜像,然后 16G 是 Phytium Pi OS 的根文件系统,格式为 ext4,最后 4G 是 RT-Thread 文件系统,格式为 fat32, + +- 在 linux 系统上,可以使用 dd 命令将镜像写入 SD 卡 (/dev/sdd) + + ``` + sudo dd if=./sdcard-rtthread-4g.img of=/dev/sdd bs=1M count=20000 status=progress + ``` + +- SD 卡烧入完成之后插入飞腾派 SD 卡槽,重启飞腾派就会自动进入 RT-Thread 系统, + + ``` + Loading Environment from MMC... OK + In: uart@2800d000 + Out: uart@2800d000 + Err: uart@2800d000 + Net: eth0: ethernet@3200c000 + scanning bus for devices... + SATA link 0 timeout. + AHCI 0001.0301 32 slots 1 ports 6 Gbps 0x1 impl SATA mode + flags: 64bit ncq stag pm led clo only pmp pio slum part ccc apst + SATA link 0 timeout. + AHCI 0001.0301 32 slots 1 ports 6 Gbps 0x1 impl SATA mode + flags: 64bit ncq stag pm led clo only pmp pio slum part ccc apst + Hit any key to stop autoboot: 0 + 739360 bytes read in 206 ms (3.4 MiB/s) + ## Starting application at 0x80080000 ... + + \ | / + - RT - Thread Operating System + / | \ 5.1.0 build Nov 9 2023 09:13:25 + 2006 - 2022 Copyright by RT-Thread team + do components initialization. + initialize rti_board_end:0 done + initialize dfs_init:0 done + initialize rt_work_sys_workqueue_init:0 done + initialize rt_mmcsd_core_init:0 done + ``` + +## 更新飞腾派 RT-Thread 镜像 + +- 有两种方式可以更新 SD 卡第三个分区中的 RT-Thread 镜像 +- 1. 将 SD 卡插入一台能识别第三个分区的电脑 (Ubuntu 系统能识别,Windows 可能不能识别),直接将 RT-Thread 镜像复制入 SD 卡 +- 2. 可以通过 u-boot 上传 RT-Thread 镜像,然后保存在 SD 卡第三个分区中,注意保存文件的大小 (0xc0000),要超过 tftpboot 加载的文件大小 + + ``` + Phytium-Pi#setenv ipaddr 192.168.4.20;setenv serverip 192.168.4.50;setenv gatewayip 192.168.4.1; + Phytium-Pi#tftpboot 0x90100000 rtthread_a64.bin + ethernet@3200c000: PHY present at 0 + ethernet@3200c000: Starting autonegotiation... + ethernet@3200c000: Autonegotiation complete + ethernet@3200c000: link up, 1000Mbps full-duplex (lpa: 0x2800) + ft sgmii speed 1000M! + Using ethernet@3200c000 device + TFTP from server 192.168.4.50; our IP address is 192.168.4.20 + Filename 'rtthread_a64.bin'. + Load address: 0x90100000 + Loading: ################################################################# + ################################################################# + ############### + 133.8 KiB/s + done + Bytes transferred = 739840 (b4a00 hex) + Phytium-Pi#fatls mmc 0:2 + rtthread-images/ + .Trash-1000/ + ram/ + System Volume Information/ + + 0 file(s), 4 dir(s) + + Phytium-Pi#fatwrite mmc 0:2 0x90100000 rtthread-images/rtthread_a64.bin 0xc0000 + 786432 bytes written in 398 ms (1.9 MiB/s) + Phytium-Pi#fatls mmc 0:2 rtthread-images + ./ + ../ + 786432 rtthread_a64.bin + 944384 rtsmart_a64.bin + 950828 rtsmart_a32.bin + 722580 rtthread_a32.bin + + 4 file(s), 2 dir(s) + + Phytium-Pi# + ``` + +## 修改自启动的 RT-Thread 镜像 + +- 通过在 u-boot 控制台修改 bootcmd,可以指定不同的 RT-Thread 镜像自启动,如下所示,指定启动 RT-Smart 镜像 `rtsmart_a64.bin` + + ``` + Phytium-Pi#printenv bootcmd + bootcmd=mw 0x32b301a8 0x275;mmc dev 0;mmc read 0x90000000 0x2000 0x10000;bootm 0x90000000#phytium + Phytium-Pi#setenv bootcmd "fatload mmc 0:2 0x80080000 rtthread-images/rtthread_a64.bin;dcache flush;go 0x80080000;" + Phytium-Pi#saveenv + ``` + + +## 切换成 linux 开发模式 + +- 本文提供的 RT-Thread 开发镜像中,有一个 linux 系统,需要的时候可以修改 bootcmd,切换成自启动 linux 系统 + + ``` + Phytium-Pi#setenv bootcmd "mw 0x32b301a8 0x275;mmc dev 0;mmc read 0x90000000 0x2000 0x10000;bootm 0x90000000#phytium" + Phytium-Pi#saveenv + Saving Environment to MMC... Writing to MMC(0)... OK + ``` + +## 在 RT-Thread 应用中访问 SD 卡分区 + +- 如前面介绍的,RT-Thread 应用可以使用第二个分区,分区文件系统格式为 FAT32 +- 打开配置 BSP_USING_SDCARD_FATFS 后, RT-Thread / RT-Smart 启动过程中会将 SD 卡挂载为根目录,将配置 BSP_USING_SDCARD_PARTITION 设置为 `sd1`,指定第二个分区为 RT-Thread 根目录,启动后创建的文件都会使用这个 SD 分区 \ No newline at end of file diff --git a/bsp/phytium/figures/SConscript.png b/bsp/phytium/figures/SConscript.png new file mode 100644 index 0000000000..4eceb1965b Binary files /dev/null and b/bsp/phytium/figures/SConscript.png differ diff --git a/bsp/phytium/figures/board_configuration.png b/bsp/phytium/figures/board_configuration.png new file mode 100644 index 0000000000..72cfff1fae Binary files /dev/null and b/bsp/phytium/figures/board_configuration.png differ diff --git a/bsp/phytium/figures/board_kconfig.png b/bsp/phytium/figures/board_kconfig.png new file mode 100644 index 0000000000..3c9fd5c6fa Binary files /dev/null and b/bsp/phytium/figures/board_kconfig.png differ diff --git a/bsp/phytium/figures/board_select.png b/bsp/phytium/figures/board_select.png new file mode 100644 index 0000000000..92d2ab83db Binary files /dev/null and b/bsp/phytium/figures/board_select.png differ diff --git a/bsp/phytium/figures/cus_board_demo.png b/bsp/phytium/figures/cus_board_demo.png new file mode 100644 index 0000000000..e1f0a6b717 Binary files /dev/null and b/bsp/phytium/figures/cus_board_demo.png differ diff --git a/bsp/phytium/figures/soc_choice.png b/bsp/phytium/figures/soc_choice.png new file mode 100644 index 0000000000..bde55113cd Binary files /dev/null and b/bsp/phytium/figures/soc_choice.png differ diff --git a/bsp/phytium/figures/soc_configuration.png b/bsp/phytium/figures/soc_configuration.png new file mode 100644 index 0000000000..bde55113cd Binary files /dev/null and b/bsp/phytium/figures/soc_configuration.png differ diff --git a/bsp/phytium/figures/soc_select.png b/bsp/phytium/figures/soc_select.png new file mode 100644 index 0000000000..7274c07c6f Binary files /dev/null and b/bsp/phytium/figures/soc_select.png differ diff --git a/bsp/phytium/figures/standalone_setting.png b/bsp/phytium/figures/standalone_setting.png new file mode 100644 index 0000000000..1ff8f6b184 Binary files /dev/null and b/bsp/phytium/figures/standalone_setting.png differ diff --git a/bsp/phytium/libraries/.ignore_format.yml b/bsp/phytium/libraries/.ignore_format.yml deleted file mode 100644 index f0bb173394..0000000000 --- a/bsp/phytium/libraries/.ignore_format.yml +++ /dev/null @@ -1,6 +0,0 @@ -# files format check exclude path, please follow the instructions below to modify; -# If you need to exclude an entire folder, add the folder path in dir_path; -# If you need to exclude a file, add the path to the file in file_path. - -dir_path: -- standalone diff --git a/bsp/phytium/libraries/SConscript b/bsp/phytium/libraries/SConscript index d69d4baf08..9e70ccbdae 100644 --- a/bsp/phytium/libraries/SConscript +++ b/bsp/phytium/libraries/SConscript @@ -4,106 +4,138 @@ from building import * objs = [] cwd = GetCurrentDir() -STANDALONE_DIR = cwd + '/standalone' +PORT_DRV_DIR = cwd + '/drivers' +PHYTIUM_SDK_DIR = cwd + '/phytium_standalone_sdk' +COMMON_DIR = cwd + '/common' # common source -src = Glob(STANDALONE_DIR+'/common/*.c') -path = [STANDALONE_DIR + '/common'] +src = Glob(PHYTIUM_SDK_DIR+'/common/fassert.c') +path = [PHYTIUM_SDK_DIR + '/common/'] -# port -src += Glob(STANDALONE_DIR+'/port/*.c') -path += [STANDALONE_DIR + '/port'] + [STANDALONE_DIR + '/port/arch'] +src += Glob(COMMON_DIR+'/*.c') +path += [COMMON_DIR ] + +# arch port +path += [PHYTIUM_SDK_DIR + '/arch/armv8/gcc'] if GetDepend(['TARGET_ARMV8_AARCH32']): - src += Glob(STANDALONE_DIR+'/port/arch/armv8/aarch32/*.c') + Glob(STANDALONE_DIR+'/port/arch/armv8/aarch32/*.S') - path += [STANDALONE_DIR + '/port/arch/armv8/aarch32'] + src += Glob(PHYTIUM_SDK_DIR+'/arch/armv8/aarch32/fsmcc.c') + Glob(PHYTIUM_SDK_DIR+'/arch/armv8/aarch32/gcc/fcpu_asm.S') + path += [PHYTIUM_SDK_DIR + '/arch/armv8/aarch32'] elif GetDepend(['TARGET_ARMV8_AARCH64']): - src += Glob(STANDALONE_DIR+'/port/arch/armv8/aarch64/*.c') + Glob(STANDALONE_DIR+'/port/arch/armv8/aarch64/*.S') - path += [STANDALONE_DIR + '/port/arch/armv8/aarch64'] + src += Glob(PHYTIUM_SDK_DIR+'/arch/armv8/aarch64/fsmcc.c') + Glob(PHYTIUM_SDK_DIR+'/arch/armv8/aarch64/gcc/fcpu_asm.S') + path += [PHYTIUM_SDK_DIR + '/arch/armv8/aarch64'] - src += Glob(STANDALONE_DIR+'/port/*.c') - path += [STANDALONE_DIR + '/port/*.h'] - -# board -src += Glob(STANDALONE_DIR+'/board/common/*.c') + Glob(STANDALONE_DIR+'/board/common/*.S') -path += [STANDALONE_DIR + '/board/common'] +# soc & soc_port +src += Glob(PHYTIUM_SDK_DIR+'/soc/common/fcpu_info.c') +path += [PHYTIUM_SDK_DIR + '/soc/common'] if GetDepend(['TARGET_F2000_4']): - src += Glob(STANDALONE_DIR+'/board/ft2004/*.c') - path += [STANDALONE_DIR + '/board/ft2004'] + src += Glob(cwd+'/port/soc_port/ft2004/*.c') + path += [PHYTIUM_SDK_DIR + '/soc/ft2004'] if GetDepend(['TARGET_E2000Q']): - src += Glob(STANDALONE_DIR+'/board/e2000/*.c') - path += [STANDALONE_DIR + '/board/e2000'] - src += Glob(STANDALONE_DIR+'/board/e2000/q/*.c') - path += [STANDALONE_DIR + '/board/e2000/q'] + src += Glob(cwd+'/port/soc_port/e2000/*.c') + Glob(cwd+'/port/soc_port/e2000/q/*.c') + path += [PHYTIUM_SDK_DIR + '/soc/e2000'] + [PHYTIUM_SDK_DIR + '/soc/e2000/q'] if GetDepend(['TARGET_E2000D']): - src += Glob(STANDALONE_DIR+'/board/e2000/*.c') - path += [STANDALONE_DIR + '/board/e2000'] - src += Glob(STANDALONE_DIR+'/board/e2000/d/*.c') - path += [STANDALONE_DIR + '/board/e2000/d'] - -if GetDepend(['ARGET_E2000S']): - src += Glob(STANDALONE_DIR+'/board/e2000/*.c') - path += [STANDALONE_DIR + '/board/e2000'] - src += Glob(STANDALONE_DIR+'/board/e2000/s/*.c') - path += [STANDALONE_DIR + '/board/e2000/s'] + src += Glob(cwd+'/port/soc_port/e2000/*.c') + Glob(cwd+'/port/soc_port/e2000/d/*.c') + path += [PHYTIUM_SDK_DIR + '/soc/e2000'] + [PHYTIUM_SDK_DIR + '/soc/e2000/d'] if GetDepend(['TARGET_PHYTIUMPI']): - src += Glob(STANDALONE_DIR+'/board/phytium-pi/*.c') - path += [STANDALONE_DIR + '/board/phytium-pi'] + src += Glob(cwd+'/port/soc_port/phytiumpi/*.c') + path += [PHYTIUM_SDK_DIR + '/soc/phytiumpi'] if GetDepend(['TARGET_D2000']): - path += [STANDALONE_DIR + '/board/d2000'] + src += Glob(cwd+'/port/soc_port/d2000/*.c') + path += [PHYTIUM_SDK_DIR + '/soc/d2000'] # driver +path += [PORT_DRV_DIR] ## spim if GetDepend(['BSP_USING_SPI']): - src += Glob(STANDALONE_DIR+'/drivers/spi/fspim/*.c') - path += [STANDALONE_DIR + '/drivers/spi/fspim'] + src += Glob(PHYTIUM_SDK_DIR+'/drivers/spi/fspim/*.c') + Glob(PORT_DRV_DIR+'/drv_spi.c') + path += [PHYTIUM_SDK_DIR + '/drivers/spi/fspim'] ## serial if GetDepend(['BSP_USING_UART']): - src += Glob(STANDALONE_DIR+'/drivers/serial/fpl011/*.c') - path += [STANDALONE_DIR + '/drivers/serial/fpl011'] + src += Glob(PHYTIUM_SDK_DIR+'/drivers/serial/fpl011/*.c') + Glob(PORT_DRV_DIR+'/drv_usart.c') + path += [PHYTIUM_SDK_DIR + '/drivers/serial/fpl011'] ## can if GetDepend(['BSP_USING_CAN']): - src += Glob(STANDALONE_DIR+'/drivers/can/fcan/*.c') + Glob(STANDALONE_DIR+'/drivers/can/fcan/*.S') - path += [STANDALONE_DIR + '/drivers/can/fcan/'] + src += Glob(PHYTIUM_SDK_DIR+'/drivers/can/fcan/*.c') + Glob(PORT_DRV_DIR+'/drv_can.c') + path += [PHYTIUM_SDK_DIR + '/drivers/can/fcan/'] ## qspi if GetDepend(['BSP_USING_QSPI']): - src += Glob(STANDALONE_DIR+'/drivers/qspi/fqspi/*.c') + Glob(STANDALONE_DIR+'/drivers/qspi/fqspi/*.S') - path += [STANDALONE_DIR + '/drivers/qspi/fqspi/'] + src += Glob(PHYTIUM_SDK_DIR+'/drivers/qspi/fqspi/*.c') + Glob(PORT_DRV_DIR+'/drv_qspi.c') + path += [PHYTIUM_SDK_DIR + '/drivers/qspi/fqspi/'] ## eth if GetDepend(['BSP_USING_ETH']): - src += Glob(STANDALONE_DIR+'/drivers/eth/fxmac/*.c') + Glob(STANDALONE_DIR+'/drivers/eth/fxmac/*.S') - path += [STANDALONE_DIR + '/drivers/eth/fxmac/'] + [STANDALONE_DIR + '/drivers/eth/fxmac/phy/'] + src += Glob(PHYTIUM_SDK_DIR+'/drivers/eth/fxmac/*.c') + Glob(PORT_DRV_DIR+'/drv_xmac.c') + path += [PHYTIUM_SDK_DIR + '/drivers/eth/fxmac/'] + [PHYTIUM_SDK_DIR + '/drivers/eth/fxmac/phy/'] -## sdio -if GetDepend(['BSP_USING_SDIO']): - src += Glob(STANDALONE_DIR+'/drivers/mmc/fsdio/*.c') + Glob(STANDALONE_DIR+'/drivers/mmc/fsdio/*.S') - path += [STANDALONE_DIR + '/drivers/mmc/fsdio/'] +## sdif +if GetDepend(['BSP_USING_SDIF']): + src += Glob(PHYTIUM_SDK_DIR+'/drivers/mmc/fsdif/*.c') + Glob(PORT_DRV_DIR+'/drv_sdif.c') + path += [PHYTIUM_SDK_DIR + '/drivers/mmc/fsdif/'] ## gpio if GetDepend(['BSP_USING_GPIO']): - src += Glob(STANDALONE_DIR+'/drivers/pin/fgpio/*.c') + Glob(STANDALONE_DIR+'/drivers/pin/fgpio/*.S') - path += [STANDALONE_DIR + '/drivers/pin/fgpio/'] + src += Glob(PHYTIUM_SDK_DIR+'/drivers/pin/fgpio/*.c') + Glob(PORT_DRV_DIR+'/drv_gpio.c') + path += [PHYTIUM_SDK_DIR + '/drivers/pin/fgpio/'] + +## pwm +if GetDepend(['BSP_USING_PWM']): + src += Glob(PHYTIUM_SDK_DIR+'/drivers/pwm/fpwm/*.c') + Glob(PORT_DRV_DIR+'/drv_pwm.c') + path += [PHYTIUM_SDK_DIR + '/drivers/pwm/fpwm/'] + +## i2C +if GetDepend(['BSP_USING_I2C']): + src += Glob(PHYTIUM_SDK_DIR+'/drivers/i2c/fi2c/*.c') + Glob(PORT_DRV_DIR+'/drv_i2c.c') + path += [PHYTIUM_SDK_DIR + '/drivers/i2c/fi2c/'] ## iopad -if GetDepend(['ENABLE_IOPAD']): - src += Glob(STANDALONE_DIR+'/drivers/iopad/fiopad/*.c') + Glob(STANDALONE_DIR+'/drivers/iopad/fiopad/*.S') - path += [STANDALONE_DIR + '/drivers/iopad/fiopad/'] +if GetDepend(['BSP_USING_IOPAD']): + src += Glob(PHYTIUM_SDK_DIR+'/drivers/iomux/fiopad/*.c') + path += [PHYTIUM_SDK_DIR + '/drivers/iomux/fiopad/'] -# phytium ports rt-thread drivers -PORT_DRV_DIR = cwd + '/drivers' +## mio +if GetDepend(['I2C_USE_MIO']): + src += Glob(PHYTIUM_SDK_DIR+'/drivers/mio/fmio/*.c') + path += [PHYTIUM_SDK_DIR + '/drivers/mio/fmio/'] -src += Glob(PORT_DRV_DIR + '/*.S') -src += Glob(PORT_DRV_DIR + '/*.c') +## board +if GetDepend(['E2000D_DEMO_BOARD']): + src += Glob(PHYTIUM_SDK_DIR+'/board/e2000d_demo/fio_mux.c') + path += [PHYTIUM_SDK_DIR + '/board/e2000d_demo/'] + + if GetDepend(['BSP_USING_SDIF']): + src += Glob(PHYTIUM_SDK_DIR+'/board/e2000d_demo/fsdif_timing.c') + +if GetDepend(['E2000Q_DEMO_BOARD']): + src += Glob(PHYTIUM_SDK_DIR+'/board/e2000q_demo/fio_mux.c') + path += [PHYTIUM_SDK_DIR + '/board/e2000q_demo/'] + + if GetDepend(['BSP_USING_SDIF']): + src += Glob(PHYTIUM_SDK_DIR+'/board/e2000q_demo/fsdif_timing.c') + +if GetDepend(['FIREFLY_DEMO_BOARD']): + src += Glob(PHYTIUM_SDK_DIR+'/board/firefly/fio_mux.c') + path += [PHYTIUM_SDK_DIR + '/board/firefly/'] + + if GetDepend(['BSP_USING_SDIF']): + src += Glob(PHYTIUM_SDK_DIR+'/board/firefly/fsdif_timing.c') + +## fdriver port +src += Glob(cwd+'/port/fdriver_port/*.c') +path += [cwd + '/port/fdriver_port'] + +## fboard port +src += Glob(cwd+'/port/fboard_port/*.c') +path += [cwd + '/port/fboard_port'] # phytium ports rt-thread examples PORT_DRV_DIR = cwd + '/examples' diff --git a/bsp/phytium/libraries/standalone/port/fearly_uart.c b/bsp/phytium/libraries/common/fearly_uart.c similarity index 94% rename from bsp/phytium/libraries/standalone/port/fearly_uart.c rename to bsp/phytium/libraries/common/fearly_uart.c index b7b268dbb0..be14569532 100644 --- a/bsp/phytium/libraries/standalone/port/fearly_uart.c +++ b/bsp/phytium/libraries/common/fearly_uart.c @@ -26,7 +26,7 @@ /***************************** Include Files *********************************/ #include "rtconfig.h" #ifdef RT_USING_SMART -#include + #include #endif #include "fkernel.h" @@ -43,7 +43,7 @@ void FEarlyUartProbe(void) FPl011Config config; config = *FPl011LookupConfig(EARLY_UART_CTRL_ID); #ifdef RT_USING_SMART - config.base_address = (uintptr)rt_ioremap((void*)config.base_address, 0x2000); + config.base_address = (uintptr)rt_ioremap((void *)config.base_address, 0x2000); #endif FPl011CfgInitialize(&early_uart, &config); return; diff --git a/bsp/phytium/libraries/standalone/port/fearly_uart.h b/bsp/phytium/libraries/common/fearly_uart.h similarity index 90% rename from bsp/phytium/libraries/standalone/port/fearly_uart.h rename to bsp/phytium/libraries/common/fearly_uart.h index 7518e677fb..c6be70c76e 100644 --- a/bsp/phytium/libraries/standalone/port/fearly_uart.h +++ b/bsp/phytium/libraries/common/fearly_uart.h @@ -22,8 +22,8 @@ * 1.0 rtos 2022/6/25 init commit * 1.1 zhangyan 2023/7/11 reconstruct */ -#ifndef BOARD_COMMON_EARLY_UART_H -#define BOARD_COMMON_EARLY_UART_H +#ifndef COMMON_FEARLY_UART_H +#define COMMON_FEARLY_UART_H #ifdef __cplusplus extern "C" @@ -31,17 +31,17 @@ extern "C" #endif /***************************** Include Files *********************************/ +#include "rtconfig.h" #include "ftypes.h" #include "fio.h" #include "fparameters.h" -#include "sdkconfig.h" /**************************** Type Definitions *******************************/ /************************** Constant Definitions *****************************/ -#if defined(CONFIG_DEFAULT_DEBUG_PRINT_UART2) +#if defined(DEFAULT_DEBUG_PRINT_UART2) #define EARLY_UART_CTRL_ID FUART2_ID -#elif defined(CONFIG_DEFAULT_DEBUG_PRINT_UART0) +#elif defined(DEFAULT_DEBUG_PRINT_UART0) #define EARLY_UART_CTRL_ID FUART0_ID #else #define EARLY_UART_CTRL_ID FUART1_ID diff --git a/bsp/phytium/libraries/standalone/common/fpsci.c b/bsp/phytium/libraries/common/fpsci.c similarity index 74% rename from bsp/phytium/libraries/standalone/common/fpsci.c rename to bsp/phytium/libraries/common/fpsci.c index 2842a929db..428d141b12 100644 --- a/bsp/phytium/libraries/standalone/common/fpsci.c +++ b/bsp/phytium/libraries/common/fpsci.c @@ -1,21 +1,21 @@ /* * Copyright : (C) 2023 Phytium Information Technology, Inc. * All Rights Reserved. - * + * * This program is OPEN SOURCE software: you can redistribute it and/or modify it * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, * either version 1.0 of the License, or (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the Phytium Public License for more details. - * - * + * + * * FilePath: fpsci.c * Created Date: 2023-06-21 10:36:53 * Last Modified: 2023-06-30 13:32:06 * Description: This file is for - * + * * Modify History: * Ver Who Date Changes * ----- ---------- -------- --------------------------------- @@ -28,14 +28,8 @@ #include "fpsci.h" #include "fassert.h" #include "fcompiler.h" -#include "fdebug.h" #include "fcpu_info.h" - -#define FPSCI_DEBUG_TAG "FPSCI" -#define FPSCI_DEBUG(format, ...) FT_DEBUG_PRINT_D(FPSCI_DEBUG_TAG, format, ##__VA_ARGS__) -#define FPSCI_INFO(format, ...) FT_DEBUG_PRINT_I(FPSCI_DEBUG_TAG, format, ##__VA_ARGS__) -#define FPSCI_WARN(format, ...) FT_DEBUG_PRINT_W(FPSCI_DEBUG_TAG, format, ##__VA_ARGS__) -#define FPSCI_ERROR(format, ...) FT_DEBUG_PRINT_E(FPSCI_DEBUG_TAG, format, ##__VA_ARGS__) +#include "rtdbg.h" /* 定义PSCI 函数值 */ #define FPSCI_0_2_FN32_BASE 0x84000000 @@ -71,10 +65,10 @@ static int fpsci_ringt_bit_flg = 0; /* 定义函数指针 */ typedef void (*FPsciInvokeFun)(unsigned long arg0, unsigned long arg1, - unsigned long arg2, unsigned long arg3, - unsigned long arg4, unsigned long arg5, - unsigned long arg6, unsigned long arg7, - struct FSmcccRes *res); + unsigned long arg2, unsigned long arg3, + unsigned long arg4, unsigned long arg5, + unsigned long arg6, unsigned long arg7, + struct FSmcccRes *res); /* 为函数指针初始化为默认的函数 */ FPsciInvokeFun f_psci_invoke = FSmcccSmcCall; @@ -85,8 +79,9 @@ FPsciInvokeFun f_psci_invoke = FSmcccSmcCall; * @msg: Get the version of the PSCI implementation. * @return {int}: The version information of the PSCI implementation. * @note: This function returns the version information obtained from the PSCI VERSION function. - */ -int FPsciVersion(void) { + */ +int FPsciVersion(void) +{ struct FSmcccRes res; FASSERT((*f_psci_invoke)); (*f_psci_invoke)(FPSCI_VERSION, 0, 0, 0, 0, 0, 0, 0, &res); @@ -100,7 +95,8 @@ int FPsciVersion(void) { * @return {int}: 1 if the function is supported; 0 otherwise. * @note: This function returns whether the PSCI function represented by psci_fid is supported or not. */ -int FPsciFeatures(u32 psci_fid) { +int FPsciFeatures(u32 psci_fid) +{ struct FSmcccRes res; FASSERT((*f_psci_invoke)); (*f_psci_invoke)(FPSCI_FEATURES, psci_fid, 0, 0, 0, 0, 0, 0, &res); @@ -116,7 +112,8 @@ int FPsciFeatures(u32 psci_fid) { * @return {int}: The status code of the operation, as defined by the PSCI specification. * @note: This function suspends the execution on a particular CPU and returns a status code indicating whether the operation was successful or not. */ -int FPsciCpuSuspend(u32 power_state, unsigned long entry_point_address, unsigned long context_id) { +int FPsciCpuSuspend(u32 power_state, unsigned long entry_point_address, unsigned long context_id) +{ struct FSmcccRes res; FASSERT((fpsci_ringt_bit_flg & FPSCI_CPU_SUSPEND_AARCH32_BIT) != 0); FASSERT((*f_psci_invoke)); @@ -134,17 +131,18 @@ int FPsciCpuSuspend(u32 power_state, unsigned long entry_point_address, unsigned * @return {int}: The status code of the operation, as defined by the PSCI specification. * @note: This function powers on a particular CPU and returns a status code indicating whether the operation was successful or not. */ -int FPsciCpuOn(unsigned long target_cpu, unsigned long entry_point_address, unsigned long context_id) { +int FPsciCpuOn(unsigned long target_cpu, unsigned long entry_point_address, unsigned long context_id) +{ struct FSmcccRes res; unsigned long cpu_on_id ; - #if defined(FAARCH64_USE) - cpu_on_id = FPSCI_CPU_ON_AARCH64 ; - #else - cpu_on_id = FPSCI_CPU_ON_AARCH32; - #endif +#if defined(FAARCH64_USE) + cpu_on_id = FPSCI_CPU_ON_AARCH64 ; +#else + cpu_on_id = FPSCI_CPU_ON_AARCH32; +#endif - FASSERT((fpsci_ringt_bit_flg & (FPSCI_CPU_ON_AARCH32_BIT|FPSCI_CPU_ON_AARCH64_BIT)) != 0); + FASSERT((fpsci_ringt_bit_flg & (FPSCI_CPU_ON_AARCH32_BIT | FPSCI_CPU_ON_AARCH64_BIT)) != 0); FASSERT((*f_psci_invoke)); (*f_psci_invoke)(cpu_on_id, target_cpu, entry_point_address, context_id, 0, 0, 0, 0, &res); return res.a0; @@ -156,7 +154,8 @@ int FPsciCpuOn(unsigned long target_cpu, unsigned long entry_point_address, unsi * @return: Returns the 'a0' field of the 'FSmcccRes' structure, indicating the result of the call. A return value of 0 (PSCI_SUCCESS) indicates success, any other value indicates an error occurred. * @note: A core that is powered down by CPU_OFF can only be powered up again in response to a CPU_ON. */ -int FPsciCpuOff(void) { +int FPsciCpuOff(void) +{ struct FSmcccRes res; FASSERT((fpsci_ringt_bit_flg & FPSCI_CPU_OFF_BIT) != 0); FASSERT((*f_psci_invoke)); @@ -174,17 +173,18 @@ int FPsciCpuOff(void) { * @return {int}: The power state of the specified affinity level, as defined by the PSCI specification. * @note: This function returns the power state of a particular affinity level. */ -int FPsciAffinityInfo(unsigned long target_affinity, u32 lowest_affinity_level) { +int FPsciAffinityInfo(unsigned long target_affinity, u32 lowest_affinity_level) +{ struct FSmcccRes res; - FASSERT((fpsci_ringt_bit_flg & (FPSCI_AFFINITY_INFO_AARCH32_BIT|FPSCI_AFFINITY_INFO_AARCH64_BIT)) != 0); + FASSERT((fpsci_ringt_bit_flg & (FPSCI_AFFINITY_INFO_AARCH32_BIT | FPSCI_AFFINITY_INFO_AARCH64_BIT)) != 0); FASSERT((*f_psci_invoke)); unsigned long cpu_on_id ; - #if defined(FAARCH64_USE) - cpu_on_id = FPSCI_CPU_ON_AARCH64 ; - #else - cpu_on_id = FPSCI_CPU_ON_AARCH32; - #endif +#if defined(FAARCH64_USE) + cpu_on_id = FPSCI_CPU_ON_AARCH64 ; +#else + cpu_on_id = FPSCI_CPU_ON_AARCH32; +#endif (*f_psci_invoke)(FPSCI_FAFFINITY_INFO_AARCH32, target_affinity, lowest_affinity_level, 0, 0, 0, 0, 0, &res); return res.a0; @@ -196,7 +196,8 @@ int FPsciAffinityInfo(unsigned long target_affinity, u32 lowest_affinity_level) * @param {u32} reset_type: The type of the system reset (cold/warm). * @note: This function resets the system. The reset type is specified by the parameter reset_type. */ -void FPsciSystemReset(u32 reset_type) { +void FPsciSystemReset(u32 reset_type) +{ struct FSmcccRes res; FASSERT((fpsci_ringt_bit_flg & FPSCI_SYSTEM_RESET_BIT) != 0); FASSERT((*f_psci_invoke)); @@ -206,97 +207,97 @@ void FPsciSystemReset(u32 reset_type) { /** * @name: FPsciCheckFeatures - * @msg: This function checks for the availability of various PSCI features and sets the corresponding bits in the 'fpsci_ringt_bit_flg' global flag accordingly. + * @msg: This function checks for the availability of various PSCI features and sets the corresponding bits in the 'fpsci_ringt_bit_flg' global flag accordingly. * @return: This function does not return a value. */ static void FPsciCheckFeatures(void) { - FPSCI_INFO("Checking PSCI features...\r\n"); + LOG_I("Checking PSCI features...\r\n"); fpsci_ringt_bit_flg = 0 ; - if (FPsciFeatures(FPSCI_CPU_SUSPEND_AARCH32)) + if (FPsciFeatures(FPSCI_CPU_SUSPEND_AARCH32)) { fpsci_ringt_bit_flg |= FPSCI_CPU_SUSPEND_AARCH32_BIT; - FPSCI_INFO("CPU_SUSPEND_AARCH32 supported.\r\n"); - } - else + LOG_I("CPU_SUSPEND_AARCH32 supported.\r\n"); + } + else { - FPSCI_ERROR("CPU_SUSPEND_AARCH32 not supported.\r\n"); + LOG_E("CPU_SUSPEND_AARCH32 not supported.\r\n"); } - if (FPsciFeatures(FPSCI_CPU_OFF)) + if (FPsciFeatures(FPSCI_CPU_OFF)) { fpsci_ringt_bit_flg |= FPSCI_CPU_OFF_BIT; - FPSCI_INFO("CPU_OFF supported.\r\n"); - } - else + LOG_I("CPU_OFF supported.\r\n"); + } + else { - FPSCI_ERROR("CPU_OFF not supported.\r\n"); + LOG_E("CPU_OFF not supported.\r\n"); } #if defined(FAARCH64_USE) - if (FPsciFeatures(FPSCI_CPU_ON_AARCH64)) + if (FPsciFeatures(FPSCI_CPU_ON_AARCH64)) { fpsci_ringt_bit_flg |= FPSCI_CPU_ON_AARCH64_BIT; - FPSCI_INFO("CPU_ON_AARCH64 supported.\r\n"); - } - else + LOG_I("CPU_ON_AARCH64 supported.\r\n"); + } + else { - FPSCI_ERROR("CPU_ON_AARCH64 not supported.\r\n"); + LOG_E("CPU_ON_AARCH64 not supported.\r\n"); } #else - if (FPsciFeatures(FPSCI_CPU_ON_AARCH32)) + if (FPsciFeatures(FPSCI_CPU_ON_AARCH32)) { fpsci_ringt_bit_flg |= FPSCI_CPU_ON_AARCH32_BIT; - FPSCI_INFO("CPU_ON_AARCH32 supported.\r\n"); - } - else + LOG_I("CPU_ON_AARCH32 supported.\r\n"); + } + else { - FPSCI_ERROR("CPU_ON_AARCH32 not supported.\r\n"); + LOG_E("CPU_ON_AARCH32 not supported.\r\n"); } #endif #if defined(FAARCH64_USE) - if (FPsciFeatures(FPSCI_FAFFINITY_INFO_AARCH64)) + if (FPsciFeatures(FPSCI_FAFFINITY_INFO_AARCH64)) { fpsci_ringt_bit_flg |= FPSCI_AFFINITY_INFO_AARCH64_BIT; - FPSCI_INFO("AFFINITY_INFO_AARCH64 supported.\r\n"); - } - else + LOG_I("AFFINITY_INFO_AARCH64 supported.\r\n"); + } + else { - FPSCI_ERROR("AFFINITY_INFO_AARCH64 not supported.\r\n"); + LOG_E("AFFINITY_INFO_AARCH64 not supported.\r\n"); } #else - if (FPsciFeatures(FPSCI_FAFFINITY_INFO_AARCH32)) + if (FPsciFeatures(FPSCI_FAFFINITY_INFO_AARCH32)) { fpsci_ringt_bit_flg |= FPSCI_AFFINITY_INFO_AARCH32_BIT; - FPSCI_INFO("FPSCI_AFFINITY_INFO_AARCH32 supported.\r\n"); - } - else + LOG_I("FPSCI_AFFINITY_INFO_AARCH32 supported.\r\n"); + } + else { - FPSCI_ERROR("AFFINITY_INFO_AARCH32 not supported.\r\n"); + LOG_E("AFFINITY_INFO_AARCH32 not supported.\r\n"); } #endif - if (FPsciFeatures(FPSCI_SYSTEM_OFF)) + if (FPsciFeatures(FPSCI_SYSTEM_OFF)) { fpsci_ringt_bit_flg |= FPSCI_SYSTEM_OFF_BIT; - FPSCI_INFO("SYSTEM_OFF supported.\r\n"); - } - else + LOG_I("SYSTEM_OFF supported.\r\n"); + } + else { - FPSCI_ERROR("SYSTEM_OFF not supported.\r\n"); + LOG_E("SYSTEM_OFF not supported.\r\n"); } - if (FPsciFeatures(FPSCI_SYSTEM_RESET)) + if (FPsciFeatures(FPSCI_SYSTEM_RESET)) { fpsci_ringt_bit_flg |= FPSCI_SYSTEM_RESET_BIT; - FPSCI_INFO("SYSTEM_RESET supported.\r\n"); - } - else + LOG_I("SYSTEM_RESET supported.\r\n"); + } + else { - FPSCI_ERROR("SYSTEM_RESET not supported.\r\n"); + LOG_E("SYSTEM_RESET not supported.\r\n"); } } @@ -317,25 +318,28 @@ int FPsciCpuMaskOn(s32 cpu_id_mask, uintptr bootaddr) { return FPSCI_INVALID_PARAMS; } - return FPsciCpuOn(cluster,(unsigned long)bootaddr,0) ; + return FPsciCpuOn(cluster, (unsigned long)bootaddr, 0) ; } -static void FSmccInit(int method) { - if (method == 1) { +static void FSmccInit(int method) +{ + if (method == 1) + { f_psci_invoke = FSmcccHvcCall; - } - else + } + else { f_psci_invoke = FSmcccSmcCall; } } -int FPsciInit(void) { +int FPsciInit(void) +{ int psci_version = 0; FSmccInit(0); psci_version = FPsciVersion() ; - FPSCI_INFO("major is 0x%x,minor is 0x%x \r\n", FPSCI_MAJOR_VERSION(psci_version),FPSCI_MINOR_VERSION(psci_version)) ; + LOG_I("major is 0x%x,minor is 0x%x \r\n", FPSCI_MAJOR_VERSION(psci_version), FPSCI_MINOR_VERSION(psci_version)) ; FPsciCheckFeatures(); return 0; } diff --git a/bsp/phytium/libraries/standalone/common/fpsci.h b/bsp/phytium/libraries/common/fpsci.h similarity index 84% rename from bsp/phytium/libraries/standalone/common/fpsci.h rename to bsp/phytium/libraries/common/fpsci.h index 9261eff4ae..37bcf76a88 100644 --- a/bsp/phytium/libraries/standalone/common/fpsci.h +++ b/bsp/phytium/libraries/common/fpsci.h @@ -1,21 +1,21 @@ /* * Copyright : (C) 2023 Phytium Information Technology, Inc. * All Rights Reserved. - * + * * This program is OPEN SOURCE software: you can redistribute it and/or modify it * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, * either version 1.0 of the License, or (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the Phytium Public License for more details. - * - * + * + * * FilePath: fpsci.h * Created Date: 2023-06-21 16:13:14 * Last Modified: 2023-06-27 15:33:23 * Description: This file is for - * + * * Modify History: * Ver Who Date Changes * ----- ---------- -------- --------------------------------- @@ -61,16 +61,16 @@ extern "C" /* 定义PSCI 错误码 */ -#define FPSCI_SUCCESS 0 -#define FPSCI_NOT_SUPPORTED -1 -#define FPSCI_INVALID_PARAMS -2 -#define FPSCI_DENIED -3 -#define FPSCI_ALREADY_ON -4 -#define FPSCI_ON_PENDING -5 -#define FPSCI_INTERNAL_FAILURE -6 -#define FPSCI_NOT_PRESENT -7 -#define FPSCI_DISABLED -8 -#define FPSCI_INVALID_ADDRESS -9 +#define FPSCI_SUCCESS 0 +#define FPSCI_NOT_SUPPORTED -1 +#define FPSCI_INVALID_PARAMS -2 +#define FPSCI_DENIED -3 +#define FPSCI_ALREADY_ON -4 +#define FPSCI_ON_PENDING -5 +#define FPSCI_INTERNAL_FAILURE -6 +#define FPSCI_NOT_PRESENT -7 +#define FPSCI_DISABLED -8 +#define FPSCI_INVALID_ADDRESS -9 int FPsciInit(void) ; int FPsciVersion(void) ; diff --git a/bsp/phytium/libraries/drivers/Kconfig b/bsp/phytium/libraries/drivers/Kconfig index f9bd504218..34993db395 100644 --- a/bsp/phytium/libraries/drivers/Kconfig +++ b/bsp/phytium/libraries/drivers/Kconfig @@ -1,6 +1,14 @@ menu "Hardware Drivers" + config DRV_DEBUG + bool "Enable drivers debug" + default n + menu "On-chip Peripheral Drivers" + menuconfig BSP_USING_IOPAD + bool "Enable IOPAD" + default y + menuconfig BSP_USING_UART bool "Enable UART" default y @@ -20,21 +28,17 @@ menu "On-chip Peripheral Drivers" menuconfig BSP_USING_SPI bool "Enable Spi" default n - select USE_SPI # sdk spi component select RT_USING_SPI if BSP_USING_SPI config RT_USING_SPIM0 bool "Enable spim0" default n - config RT_USING_SPIM1 bool "Enable spim1" default n - config RT_USING_SPIM2 bool "Enable spim2" - default y - + default n config RT_USING_SPIM3 bool "Enable spim3" default n @@ -44,8 +48,25 @@ menu "On-chip Peripheral Drivers" bool "Enable CAN" default n select RT_USING_CAN - select RT_CAN_USING_HDR - select RT_CAN_USING_CANFD + if BSP_USING_CAN + config RT_USING_CANFD + bool "Enable canfd" + select RT_CAN_USING_CANFD + default n + config RT_USING_FILTER + bool "Enable can filter" + select RT_CAN_USING_HDR + default n + config RT_USING_CAN0 + bool "Enable can0" + default n + config RT_USING_CAN1 + bool "Enable can1" + default n + config RT_USING_CAN2 + bool "Enable can2" + default n + endif menuconfig BSP_USING_GPIO bool "Enable GPIO" @@ -57,8 +78,7 @@ menu "On-chip Peripheral Drivers" default n select RT_USING_QSPI select RT_USING_SPI - select BSP_USING_SPI - select BSP_USING_GPIO + select RT_USING_PIN if BSP_USING_QSPI config USING_QSPI_CHANNEL0 bool "using qspi channel_0" @@ -70,48 +90,152 @@ menu "On-chip Peripheral Drivers" menuconfig BSP_USING_ETH bool "Enable ETH" - default y - select USE_ETH + default n if BSP_USING_ETH config RT_LWIP_PBUF_POOL_BUFSIZE int "The size of each pbuf in the pbuf pool" range 1500 2000 default 1700 endif - - + menuconfig BSP_USING_PWM + bool "Enable PWM" + default n + select RT_USING_PWM + if BSP_USING_PWM + config RT_USING_PWM0 + bool "Enable pwm0" + default n + config RT_USING_PWM1 + bool "Enable pwm1" + default n + config RT_USING_PWM2 + bool "Enable pwm2" + default n + config RT_USING_PWM3 + bool "Enable pwm3" + default n + config RT_USING_PWM4 + bool "Enable pwm4" + default n + config RT_USING_PWM5 + bool "Enable pwm5" + default n + config RT_USING_PWM6 + bool "Enable pwm6" + default n + endif + + menuconfig BSP_USING_I2C + bool "Enable I2C" + default n + select RT_USING_I2C + if BSP_USING_I2C + config I2C_USE_MIO + bool "using i2c mio" + default n + select USE_MIO + select ENABLE_MIO + + if I2C_USE_MIO + config RT_USING_MIO0 + bool "Enable mio0" + default n + config RT_USING_MIO1 + bool "Enable mio1" + default n + config RT_USING_MIO2 + bool "Enable mio2" + default n + config RT_USING_MIO3 + bool "Enable mio3" + default n + config RT_USING_MIO4 + bool "Enable mio4" + default n + config RT_USING_MIO5 + bool "Enable mio5" + default n + config RT_USING_MIO6 + bool "Enable mio6" + default n + config RT_USING_MIO7 + bool "Enable mio7" + default n + config RT_USING_MIO8 + bool "Enable mio8" + default n + config RT_USING_MIO9 + bool "Enable mio9" + default n + config RT_USING_MIO10 + bool "Enable mio10" + default n + config RT_USING_MIO11 + bool "Enable mio11" + default n + config RT_USING_MIO12 + bool "Enable mio12" + default n + config RT_USING_MIO13 + bool "Enable mio13" + default n + config RT_USING_MIO14 + bool "Enable mio14" + default n + config RT_USING_MIO15 + bool "Enable mio15" + default n + endif - menuconfig BSP_USING_SDIO - bool "Enable SDIO" - default y + config I2C_USE_CONTROLLER + bool "using i2c controller" + default n + if I2C_USE_CONTROLLER + config RT_USING_I2C0 + bool "Enable i2c0" + default n + config RT_USING_I2C1 + bool "Enable i2c1" + default n + config RT_USING_I2C2 + bool "Enable i2c2" + default n + endif + + endif + + menuconfig BSP_USING_SDIF + bool "Enable SDIF" + default n select RT_USING_SDIO - if BSP_USING_SDIO + if BSP_USING_SDIF config BSP_USING_SDCARD_FATFS bool "Enable SDCARD (FATFS)" select RT_USING_DFS_ELMFAT - default y + default n + if BSP_USING_SDCARD_FATFS + config BSP_USING_SDCARD_PARTITION + string "Set SDCARD (FATFS) partition index" + default "sd0" + endif + choice prompt "Choose a card to mount" - default USING_SDIO1 + default USING_SDIF1 - config USING_SDIO0 - bool "Use SDIO0" + config USING_SDIF0 + bool "Use SDIF0" - config USING_SDIO1 - bool "Use SDIO1" + config USING_SDIF1 + bool "Use SDIF1" config USING_EMMC bool "Use EMMC" endchoice - config SDCARD_OFFSET - hex "Block Offset" - default 0x0 - help - Skip access start paration of SD Card to protect BIOS endif endmenu diff --git a/bsp/phytium/libraries/drivers/drv_can.c b/bsp/phytium/libraries/drivers/drv_can.c index 194cd599f8..bfce14a4ee 100644 --- a/bsp/phytium/libraries/drivers/drv_can.c +++ b/bsp/phytium/libraries/drivers/drv_can.c @@ -11,18 +11,14 @@ * */ +#include "rtconfig.h" +#ifdef BSP_USING_CAN #include "drv_can.h" -#include "sdkconfig.h" - -#ifdef RT_USING_CAN -#include "fdebug.h" -#include "fpinctrl.h" - -#define FCAN_TEST_DEBUG_TAG "FCAN_TEST" -#define FCAN_TEST_DEBUG(format, ...) FT_DEBUG_PRINT_D(FCAN_TEST_DEBUG_TAG, format, ##__VA_ARGS__) -#define FCAN_TEST_INFO(format, ...) FT_DEBUG_PRINT_I(FCAN_TEST_DEBUG_TAG, format, ##__VA_ARGS__) -#define FCAN_TEST_WARN(format, ...) FT_DEBUG_PRINT_W(FCAN_TEST_DEBUG_TAG, format, ##__VA_ARGS__) -#define FCAN_TEST_ERROR(format, ...) FT_DEBUG_PRINT_E(FCAN_TEST_DEBUG_TAG, format, ##__VA_ARGS__) +#define LOG_TAG "can_drv" +#include "drv_log.h" +#include "fcan.h" +#include "fio_mux.h" +#include "interrupt.h" struct phytium_can { @@ -34,44 +30,38 @@ struct phytium_can static struct phytium_can drv_can[FCAN_NUM] = { -{ - .name = "CAN0", - .can_handle.config.instance_id = 0, -}, -{ - .name = "CAN1", - .can_handle.config.instance_id = 1, -}, -#if defined(CONFIG_TARGET_F2000_4) || defined(CONFIG_TARGET_D2000) -{ - .name = "CAN2", - .can_handle.config.instance_id = 2, -}, -#endif + { + .name = "CAN0", + .can_handle.config.instance_id = 0, + }, + { + .name = "CAN1", + .can_handle.config.instance_id = 1, + }, }; static void CanRxIrqCallback(void *args) { FCanCtrl *instance_p = (FCanCtrl *)args; rt_hw_can_isr(&drv_can[instance_p->config.instance_id].device, RT_CAN_EVENT_RX_IND); - FCAN_TEST_DEBUG("CAN%d irq recv frame callback.", instance_p->config.instance_id); + LOG_D("CAN%d irq recv frame callback.", instance_p->config.instance_id); } static void CanErrorCallback(void *args) { FCanCtrl *instance_p = (FCanCtrl *)args; uintptr base_addr = instance_p->config.base_address; - FCAN_TEST_DEBUG("CAN %d is under error.", instance_p->config.instance_id); - FCAN_TEST_DEBUG("error_status is %x.", FCAN_READ_REG32(base_addr, FCAN_INTR_OFFSET)); - FCAN_TEST_DEBUG("rxerr_cnt is %x.", FCAN_ERR_CNT_RFN_GET(FCAN_READ_REG32(base_addr, FCAN_ERR_CNT_OFFSET))); - FCAN_TEST_DEBUG("txerr_cnt is %x.", FCAN_ERR_CNT_TFN_GET(FCAN_READ_REG32(base_addr, FCAN_ERR_CNT_OFFSET))); + LOG_D("CAN %d is under error.", instance_p->config.instance_id); + LOG_D("error_status is %x.", FCAN_READ_REG32(base_addr, FCAN_INTR_OFFSET)); + LOG_D("rxerr_cnt is %x.", FCAN_ERR_CNT_RFN_GET(FCAN_READ_REG32(base_addr, FCAN_ERR_CNT_OFFSET))); + LOG_D("txerr_cnt is %x.", FCAN_ERR_CNT_TFN_GET(FCAN_READ_REG32(base_addr, FCAN_ERR_CNT_OFFSET))); } static void CanTxIrqCallback(void *args) { FCanCtrl *instance_p = (FCanCtrl *)args; rt_hw_can_isr(&drv_can[instance_p->config.instance_id].device, RT_CAN_EVENT_TX_DONE); - FCAN_TEST_DEBUG("CAN%d irq send frame callback.", instance_p->config.instance_id); + LOG_D("CAN%d irq send frame callback.", instance_p->config.instance_id); } static rt_err_t _can_config(struct rt_can_device *can, struct can_configure *cfg) @@ -84,31 +74,13 @@ static rt_err_t _can_config(struct rt_can_device *can, struct can_configure *cfg FError status = FT_SUCCESS; rt_kprintf("CAN%d begin to config.\n", drv_can->can_handle.config.instance_id); -#if defined(CONFIG_TARGET_F2000_4) || defined(CONFIG_TARGET_D2000) - if(drv_can->can_handle.config.instance_id == FCAN_INSTANCE_0) - { - FPinSetFunc(FIOCTRL_TJTAG_TDI_PAD, FPIN_FUNC1); /* can0-tx: func 1 */ - FPinSetFunc(FIOCTRL_SWDITMS_SWJ_PAD, FPIN_FUNC1); /* can0-rx: func 1 */ - } - else if(drv_can->can_handle.config.instance_id == FCAN_INSTANCE_1) - { - FPinSetFunc(FIOCTRL_NTRST_SWJ_PAD, FPIN_FUNC1); /* can1-tx: func 1 */ - FPinSetFunc(FIOCTRL_SWDO_SWJ_PAD, FPIN_FUNC1); /* can1-rx: func 1 */ - } - else - { - FCAN_TEST_ERROR("CAN id is under error."); - return RT_ERROR; - } -#elif defined(CONFIG_TARGET_E2000) FIOPadSetCanMux(drv_can->can_handle.config.instance_id); -#endif /*CAN config init*/ status = FCanCfgInitialize(&(drv_can->can_handle), FCanLookupConfig(drv_can->can_handle.config.instance_id)); if (status != FT_SUCCESS) { - FCAN_TEST_DEBUG("CAN %d initialize error, status = %#x.", drv_can->can_handle.config.instance_id, status); + LOG_D("CAN %d initialize error, status = %#x.", drv_can->can_handle.config.instance_id, status); return RT_ERROR; } @@ -118,13 +90,14 @@ static rt_err_t _can_config(struct rt_can_device *can, struct can_configure *cfg memset(&arb_segment_config, 0, sizeof(arb_segment_config)); memset(&data_segment_config, 0, sizeof(data_segment_config)); #if defined(RT_CAN_USING_CANFD) + FCanFdEnable(&(drv_can->can_handle), TRUE); arb_segment_config.auto_calc = TRUE; arb_segment_config.baudrate = CAN1MBaud; /*CANFD arb baud defaults to 1M ,allowed to be modified*/ arb_segment_config.segment = FCAN_ARB_SEGMENT; status = FCanBaudrateSet(&(drv_can->can_handle), &arb_segment_config); if (status != RT_EOK) { - FCAN_TEST_DEBUG("CAN%d set arb segment baudrate failed.", drv_can->can_handle.config.instance_id); + LOG_D("CAN%d set arb segment baudrate failed.", drv_can->can_handle.config.instance_id); return RT_ERROR; } data_segment_config.auto_calc = TRUE; @@ -133,7 +106,7 @@ static rt_err_t _can_config(struct rt_can_device *can, struct can_configure *cfg status = FCanBaudrateSet(&(drv_can->can_handle), &data_segment_config); if (status != RT_EOK) { - FCAN_TEST_DEBUG("CAN%d set data segment baudrate failed.", drv_can->can_handle.config.instance_id); + LOG_D("CAN%d set data segment baudrate failed.", drv_can->can_handle.config.instance_id); return RT_ERROR; } #else @@ -143,7 +116,7 @@ static rt_err_t _can_config(struct rt_can_device *can, struct can_configure *cfg status = FCanBaudrateSet(&(drv_can->can_handle), &arb_segment_config); if (status != FT_SUCCESS) { - FCAN_TEST_DEBUG("CAN%d set arb segment baudrate failed.", drv_can->can_handle.config.instance_id); + LOG_D("CAN%d set arb segment baudrate failed.", drv_can->can_handle.config.instance_id); return RT_ERROR; } data_segment_config.auto_calc = TRUE; @@ -152,7 +125,7 @@ static rt_err_t _can_config(struct rt_can_device *can, struct can_configure *cfg status = FCanBaudrateSet(&(drv_can->can_handle), &data_segment_config); if (status != FT_SUCCESS) { - FCAN_TEST_DEBUG("CAN%d set data segment baudrate failed.", drv_can->can_handle.config.instance_id); + LOG_D("CAN%d set data segment baudrate failed.", drv_can->can_handle.config.instance_id); return RT_ERROR; } #endif @@ -167,7 +140,7 @@ static rt_err_t _can_config(struct rt_can_device *can, struct can_configure *cfg } if (status != FT_SUCCESS) { - FCAN_TEST_ERROR("CAN%d set mask filter failed.", drv_can->can_handle.config.instance_id); + LOG_E("CAN%d set mask filter failed.", drv_can->can_handle.config.instance_id); return RT_ERROR; } /* Identifier mask enable */ @@ -197,154 +170,154 @@ static rt_err_t _can_control(struct rt_can_device *can, int cmd, void *arg) switch (cmd) { - case RT_DEVICE_CTRL_SET_INT: - GetCpuId(&cpu_id); - rt_hw_interrupt_set_target_cpus(drv_can->can_handle.config.irq_num, cpu_id); - argval = (rt_uint32_t) arg; - /*Open different interrupts*/ - if (argval == RT_DEVICE_CAN_INT_ERR) - { - intr_event.type = FCAN_INTR_EVENT_ERROR; - intr_event.handler = CanErrorCallback; - intr_event.param = (void *)(&(drv_can->can_handle)); - FCanRegisterInterruptHandler(&(drv_can->can_handle), &intr_event); - FCanInterruptEnable(&(drv_can->can_handle), intr_event.type); - } - if (argval == RT_DEVICE_FLAG_INT_TX) - { - intr_event.type = FCAN_INTR_EVENT_SEND; - intr_event.handler = CanTxIrqCallback; - intr_event.param = (void *)(&(drv_can->can_handle)); - FCanRegisterInterruptHandler(&(drv_can->can_handle), &intr_event); - FCanInterruptEnable(&(drv_can->can_handle), intr_event.type); - } - if (argval == RT_DEVICE_FLAG_INT_RX) - { - intr_event.type = FCAN_INTR_EVENT_RECV; - intr_event.handler = CanRxIrqCallback; - intr_event.param = (void *)(&(drv_can->can_handle)); - FCanRegisterInterruptHandler(&(drv_can->can_handle), &intr_event); - FCanInterruptEnable(&(drv_can->can_handle), intr_event.type); - } - rt_hw_interrupt_set_priority(drv_can->can_handle.config.irq_num, 16); - rt_hw_interrupt_install(drv_can->can_handle.config.irq_num, FCanIntrHandler, &(drv_can->can_handle), drv_can->name); - rt_hw_interrupt_umask(drv_can->can_handle.config.irq_num); - break; - - case RT_CAN_CMD_SET_MODE: - argval = (rt_uint32_t) arg; - FCanEnable(&(drv_can->can_handle), RT_FALSE); - if (argval == RT_CAN_MODE_LISTEN) - { - FCanSetMode(&(drv_can->can_handle), FCAN_PROBE_MONITOR_MODE); - drv_can->device.config.mode = RT_CAN_MODE_LISTEN; - } - else if (argval == RT_CAN_MODE_NORMAL) - { - FCanSetMode(&(drv_can->can_handle), FCAN_PROBE_NORMAL_MODE); - drv_can->device.config.mode = RT_CAN_MODE_NORMAL; - } - FCanEnable(&(drv_can->can_handle), RT_TRUE); - break; - - case RT_CAN_CMD_SET_BAUD: - argval = (rt_uint32_t) arg; - if (argval != CAN1MBaud && - argval != CAN800kBaud && - argval != CAN500kBaud && - argval != CAN250kBaud && - argval != CAN125kBaud && - argval != CAN100kBaud && - argval != CAN50kBaud && - argval != CAN20kBaud && - argval != CAN10kBaud) - { - return RT_ERROR; - } - if (argval != drv_can->device.config.baud_rate) - { - FCanBaudrateConfig arb_segment_config; - FCanBaudrateConfig data_segment_config; - memset(&arb_segment_config, 0, sizeof(arb_segment_config)); - memset(&data_segment_config, 0, sizeof(data_segment_config)); - drv_can->device.config.baud_rate = argval; - FCanEnable(&(drv_can->can_handle), RT_FALSE); - arb_segment_config.auto_calc = TRUE; - arb_segment_config.baudrate = drv_can->device.config.baud_rate; - arb_segment_config.segment = FCAN_ARB_SEGMENT; - status = FCanBaudrateSet(&(drv_can->can_handle), &arb_segment_config); - if (status != FT_SUCCESS) + case RT_DEVICE_CTRL_SET_INT: + GetCpuId(&cpu_id); + rt_hw_interrupt_set_target_cpus(drv_can->can_handle.config.irq_num, cpu_id); + argval = (rt_uint32_t) arg; + /*Open different interrupts*/ + if (argval == RT_DEVICE_CAN_INT_ERR) { - FCAN_TEST_DEBUG("CAN%d set arb segment baudrate failed.", drv_can->can_handle.config.instance_id); - return RT_ERROR; + intr_event.type = FCAN_INTR_EVENT_ERROR; + intr_event.handler = CanErrorCallback; + intr_event.param = (void *)(&(drv_can->can_handle)); + FCanRegisterInterruptHandler(&(drv_can->can_handle), &intr_event); + FCanInterruptEnable(&(drv_can->can_handle), intr_event.type); } - data_segment_config.auto_calc = TRUE; - data_segment_config.baudrate = drv_can->device.config.baud_rate; - data_segment_config.segment = FCAN_DATA_SEGMENT; - status = FCanBaudrateSet(&(drv_can->can_handle), &data_segment_config); - if (status != FT_SUCCESS) + if (argval == RT_DEVICE_FLAG_INT_TX) { - FCAN_TEST_DEBUG("CAN%d set data segment baudrate failed.", drv_can->can_handle.config.instance_id); - return RT_ERROR; + intr_event.type = FCAN_INTR_EVENT_SEND; + intr_event.handler = CanTxIrqCallback; + intr_event.param = (void *)(&(drv_can->can_handle)); + FCanRegisterInterruptHandler(&(drv_can->can_handle), &intr_event); + FCanInterruptEnable(&(drv_can->can_handle), intr_event.type); + } + if (argval == RT_DEVICE_FLAG_INT_RX) + { + intr_event.type = FCAN_INTR_EVENT_RECV; + intr_event.handler = CanRxIrqCallback; + intr_event.param = (void *)(&(drv_can->can_handle)); + FCanRegisterInterruptHandler(&(drv_can->can_handle), &intr_event); + FCanInterruptEnable(&(drv_can->can_handle), intr_event.type); + } + rt_hw_interrupt_set_priority(drv_can->can_handle.config.irq_num, 16); + rt_hw_interrupt_install(drv_can->can_handle.config.irq_num, FCanIntrHandler, &(drv_can->can_handle), drv_can->name); + rt_hw_interrupt_umask(drv_can->can_handle.config.irq_num); + break; + + case RT_CAN_CMD_SET_MODE: + argval = (rt_uint32_t) arg; + FCanEnable(&(drv_can->can_handle), RT_FALSE); + if (argval == RT_CAN_MODE_LISTEN) + { + FCanSetMode(&(drv_can->can_handle), FCAN_PROBE_MONITOR_MODE); + drv_can->device.config.mode = RT_CAN_MODE_LISTEN; + } + else if (argval == RT_CAN_MODE_NORMAL) + { + FCanSetMode(&(drv_can->can_handle), FCAN_PROBE_NORMAL_MODE); + drv_can->device.config.mode = RT_CAN_MODE_NORMAL; } FCanEnable(&(drv_can->can_handle), RT_TRUE); - } - break; + break; - case RT_CAN_CMD_SET_BAUD_FD: - #if defined RT_CAN_USING_CANFD - argval = (rt_uint32_t) arg; - if (argval != drv_can->device.config.baud_rate_fd) - { - FCanBaudrateConfig arb_segment_config; - FCanBaudrateConfig data_segment_config; - memset(&arb_segment_config, 0, sizeof(arb_segment_config)); - memset(&data_segment_config, 0, sizeof(data_segment_config)); - drv_can->device.config.baud_rate = argval; - FCanEnable(&(drv_can->can_handle), RT_FALSE); - arb_segment_config.auto_calc = TRUE; - arb_segment_config.baudrate = CAN1MBaud; - arb_segment_config.segment = FCAN_ARB_SEGMENT; - status = FCanBaudrateSet(&(drv_can->can_handle), &arb_segment_config); - if (status != FT_SUCCESS) + case RT_CAN_CMD_SET_BAUD: + argval = (rt_uint32_t) arg; + if (argval != CAN1MBaud && + argval != CAN800kBaud && + argval != CAN500kBaud && + argval != CAN250kBaud && + argval != CAN125kBaud && + argval != CAN100kBaud && + argval != CAN50kBaud && + argval != CAN20kBaud && + argval != CAN10kBaud) { - FCAN_TEST_DEBUG("CAN%d set arb segment baudrate failed.", drv_can->can_handle.config.instance_id); return RT_ERROR; } - data_segment_config.auto_calc = TRUE; - data_segment_config.baudrate = drv_can->device.config.baud_rate_fd; - data_segment_config.segment = FCAN_DATA_SEGMENT; - status = FCanBaudrateSet(&(drv_can->can_handle), &data_segment_config); - if (status != FT_SUCCESS) + if (argval != drv_can->device.config.baud_rate) { - FCAN_TEST_DEBUG("CAN%d set data segment baudrate failed.", drv_can->can_handle.config.instance_id); - return RT_ERROR; + FCanBaudrateConfig arb_segment_config; + FCanBaudrateConfig data_segment_config; + memset(&arb_segment_config, 0, sizeof(arb_segment_config)); + memset(&data_segment_config, 0, sizeof(data_segment_config)); + drv_can->device.config.baud_rate = argval; + FCanEnable(&(drv_can->can_handle), RT_FALSE); + arb_segment_config.auto_calc = TRUE; + arb_segment_config.baudrate = drv_can->device.config.baud_rate; + arb_segment_config.segment = FCAN_ARB_SEGMENT; + status = FCanBaudrateSet(&(drv_can->can_handle), &arb_segment_config); + if (status != FT_SUCCESS) + { + LOG_D("CAN%d set arb segment baudrate failed.", drv_can->can_handle.config.instance_id); + return RT_ERROR; + } + data_segment_config.auto_calc = TRUE; + data_segment_config.baudrate = drv_can->device.config.baud_rate; + data_segment_config.segment = FCAN_DATA_SEGMENT; + status = FCanBaudrateSet(&(drv_can->can_handle), &data_segment_config); + if (status != FT_SUCCESS) + { + LOG_D("CAN%d set data segment baudrate failed.", drv_can->can_handle.config.instance_id); + return RT_ERROR; + } + FCanEnable(&(drv_can->can_handle), RT_TRUE); + } + break; + + case RT_CAN_CMD_SET_BAUD_FD: +#if defined RT_CAN_USING_CANFD + argval = (rt_uint32_t) arg; + if (argval != drv_can->device.config.baud_rate_fd) + { + FCanBaudrateConfig arb_segment_config; + FCanBaudrateConfig data_segment_config; + memset(&arb_segment_config, 0, sizeof(arb_segment_config)); + memset(&data_segment_config, 0, sizeof(data_segment_config)); + drv_can->device.config.baud_rate = argval; + FCanEnable(&(drv_can->can_handle), RT_FALSE); + arb_segment_config.auto_calc = TRUE; + arb_segment_config.baudrate = CAN1MBaud; + arb_segment_config.segment = FCAN_ARB_SEGMENT; + status = FCanBaudrateSet(&(drv_can->can_handle), &arb_segment_config); + if (status != FT_SUCCESS) + { + LOG_D("CAN%d set arb segment baudrate failed.", drv_can->can_handle.config.instance_id); + return RT_ERROR; + } + data_segment_config.auto_calc = TRUE; + data_segment_config.baudrate = drv_can->device.config.baud_rate_fd; + data_segment_config.segment = FCAN_DATA_SEGMENT; + status = FCanBaudrateSet(&(drv_can->can_handle), &data_segment_config); + if (status != FT_SUCCESS) + { + LOG_D("CAN%d set data segment baudrate failed.", drv_can->can_handle.config.instance_id); + return RT_ERROR; + } + FCanEnable(&(drv_can->can_handle), RT_TRUE); + } +#endif + break; + + case RT_CAN_CMD_SET_FILTER: +#ifdef RT_CAN_USING_HDR + filter_cfg = (struct rt_can_filter_config *)arg; + FCanEnable(&(drv_can->can_handle), RT_FALSE); + for (int i = 0; i < filter_cfg->count; i++) + { + drv_can->filter.filter_index = i; + drv_can->filter.mask = filter_cfg->items[i].mask; + drv_can->filter.id = filter_cfg->items[i].id; + drv_can->filter.type = FCAN_STANDARD_FRAME; + status = FCanIdMaskFilterSet(&(drv_can->can_handle), &(drv_can->filter)); + if (status != FT_SUCCESS) + { + LOG_E("CAN%d set mask filter failed.", drv_can->can_handle.config.instance_id); + return RT_ERROR; + } } FCanEnable(&(drv_can->can_handle), RT_TRUE); - } - #endif - break; - - case RT_CAN_CMD_SET_FILTER: - #ifdef RT_CAN_USING_HDR - filter_cfg = (struct rt_can_filter_config *)arg; - FCanEnable(&(drv_can->can_handle), RT_FALSE); - for (int i = 0; i < filter_cfg->count; i++) - { - drv_can->filter.filter_index = i; - drv_can->filter.mask = filter_cfg->items[i].mask; - drv_can->filter.id = filter_cfg->items[i].id; - drv_can->filter.type = FCAN_STANDARD_FRAME; - status = FCanIdMaskFilterSet(&(drv_can->can_handle), &(drv_can->filter)); - if (status != FT_SUCCESS) - { - FCAN_TEST_ERROR("CAN%d set mask filter failed.", drv_can->can_handle.config.instance_id); - return RT_ERROR; - } - } - FCanEnable(&(drv_can->can_handle), RT_TRUE); - #endif - break; +#endif + break; } return RT_EOK; @@ -401,7 +374,7 @@ static int _can_recvmsg(struct rt_can_device *can, void *buf, rt_uint32_t fifo) status = FCanRecv(&(drv_can->can_handle), &recv_frame); if (status != FT_SUCCESS) { - FCAN_TEST_DEBUG("CAN%d recv data failed.", drv_can->can_handle.config.instance_id); + LOG_D("CAN%d recv data failed.", drv_can->can_handle.config.instance_id); return RT_ERROR; } if (CAN_EFF_FLAG & recv_frame.canid) @@ -432,7 +405,7 @@ static int _can_recvmsg(struct rt_can_device *can, void *buf, rt_uint32_t fifo) pmsg->data[i] = recv_frame.data[i]; } /* get hdr */ - pmsg->hdr = 0; + pmsg->hdr_index = 0; return RT_EOK; } @@ -445,29 +418,44 @@ static const struct rt_can_ops _can_ops = _can_recvmsg, }; -int rt_hw_can_init(void) +static int can_init(u32 can_id) { rt_err_t ret = RT_EOK; - for (int i = 0; i < (u32)FCAN_NUM; i++) - { - drv_can[i].device.config.ticks = 20000; - drv_can[i].device.config.baud_rate = 800000; - #ifdef RT_CAN_USING_CANFD - drv_can[i].device.config.baud_rate_fd = 800000; - #endif - drv_can[i].device.config.mode = RT_CAN_MODE_NORMAL; - drv_can[i].device.config.sndboxnumber = 1; - drv_can[i].device.config.msgboxsz = 1; - #ifdef RT_CAN_USING_HDR - drv_can[i].device.config.maxhdr = 1; - #endif - ret = rt_hw_can_register(&drv_can[i].device, - drv_can[i].name, - &_can_ops, - &drv_can[i]); - RT_ASSERT(ret == RT_EOK); - } - return (int)ret; + + drv_can[can_id].device.config.ticks = 20000; + drv_can[can_id].device.config.baud_rate = 800000; +#ifdef RT_CAN_USING_CANFD + drv_can[can_id].device.config.baud_rate_fd = 800000; +#endif + drv_can[can_id].device.config.mode = RT_CAN_MODE_NORMAL; + drv_can[can_id].device.config.sndboxnumber = 1; + drv_can[can_id].device.config.msgboxsz = 1; +#ifdef RT_CAN_USING_HDR + drv_can[can_id].device.config.maxhdr = 1; +#endif + ret = rt_hw_can_register(&drv_can[can_id].device, + drv_can[can_id].name, + &_can_ops, + &drv_can[can_id]); + RT_ASSERT(ret == RT_EOK); + + return ret; +} + +int rt_hw_can_init(void) +{ + +#if defined(RT_USING_CAN0) + can_init(FCAN0_ID); +#endif +#if defined(RT_USING_CAN1) + can_init(FCAN1_ID); +#endif +#if defined(RT_USING_CAN2) + can_init(FCAN2_ID); +#endif + + return 0; } INIT_BOARD_EXPORT(rt_hw_can_init); @@ -489,7 +477,7 @@ static void can_rx_thread(void *parameter) while (1) { /* The hdr value is - 1, which means reading data directly from the uselist */ - rxmsg.hdr = -1; + rxmsg.hdr_index = -1; /* Blocking waiting to receive semaphore */ res = rt_sem_take(&rx_sem, RT_WAITING_FOREVER); RT_ASSERT(res == RT_EOK); @@ -511,7 +499,6 @@ int can_sample(int argc, char *argv[]) { struct rt_can_msg msg = {0}; rt_err_t res = RT_EOK;; - rt_size_t size; rt_thread_t thread; char can_name[RT_NAME_MAX]; @@ -537,10 +524,10 @@ int can_sample(int argc, char *argv[]) /* Open the CAN device in the way of interrupt reception and transmission */ res = rt_device_open(can_dev, RT_DEVICE_FLAG_INT_TX | RT_DEVICE_FLAG_INT_RX); - rt_device_control(can_dev,RT_CAN_CMD_SET_BAUD, CAN1MBaud); + rt_device_control(can_dev, RT_CAN_CMD_SET_BAUD, CAN1MBaud); RT_ASSERT(res == RT_EOK); - #ifdef RT_CAN_USING_HDR +#ifdef RT_CAN_USING_HDR struct rt_can_filter_item items[4] = { RT_CAN_FILTER_ITEM_INIT(0x3, 0, 0, 0, 0, RT_NULL, RT_NULL), @@ -554,10 +541,10 @@ int can_sample(int argc, char *argv[]) /* Set the hardware filter table. After setting, only frames with id=0x03 can be received*/ res = rt_device_control(can_dev, RT_CAN_CMD_SET_FILTER, &cfg); RT_ASSERT(res == RT_EOK); - #endif +#endif /* Create data receiving thread */ - thread = rt_thread_create("can_rx", can_rx_thread, RT_NULL, 1024, 25, 10); + thread = rt_thread_create("can_rx", can_rx_thread, RT_NULL, 4096, 25, 10); if (thread != RT_NULL) { res = rt_thread_startup(thread); @@ -570,20 +557,20 @@ int can_sample(int argc, char *argv[]) msg.id = 0x78; /* ID = 0x78 */ msg.ide = RT_CAN_STDID; /* Standard format */ - msg.rtr = RT_CAN_RTR; /* Data frame */ + msg.rtr = RT_CAN_DTR; /* Data frame */ msg.len = 8; /* Data length is 8 */ /* Send CAN data */ - for (int i = 0; i < 10; i++) + for (int i = 0; i < 1; i++) { - /* 8-byte data to be sent */ - msg.data[0] = 0x00+i; - msg.data[1] = 0x11+i; - msg.data[2] = 0x22+i; - msg.data[3] = 0x33+i; - msg.data[4] = 0x44+i; - msg.data[5] = 0x55+i; - msg.data[6] = 0x66+i; - msg.data[7] = 0x77+i; + /* 8-byte data to be sent */ + msg.data[0] = 0x00 + i; + msg.data[1] = 0x11 + i; + msg.data[2] = 0x22 + i; + msg.data[3] = 0x33 + i; + msg.data[4] = 0x44 + i; + msg.data[5] = 0x55 + i; + msg.data[6] = 0x66 + i; + msg.data[7] = 0x77 + i; rt_device_write(can_dev, 0, &msg, sizeof(msg)); } @@ -591,4 +578,4 @@ int can_sample(int argc, char *argv[]) } /* Enter can_sample command for testing */ MSH_CMD_EXPORT(can_sample, can device sample); -#endif +#endif \ No newline at end of file diff --git a/bsp/phytium/libraries/drivers/drv_can.h b/bsp/phytium/libraries/drivers/drv_can.h index cc21da0383..93376e3649 100644 --- a/bsp/phytium/libraries/drivers/drv_can.h +++ b/bsp/phytium/libraries/drivers/drv_can.h @@ -16,9 +16,7 @@ #include -#ifdef RT_USING_CAN - -#include "fcan.h" +#ifdef BSP_USING_CAN #ifdef __cplusplus extern "C" diff --git a/bsp/phytium/libraries/drivers/drv_gpio.c b/bsp/phytium/libraries/drivers/drv_gpio.c index c01a3e94c6..b547085a2f 100644 --- a/bsp/phytium/libraries/drivers/drv_gpio.c +++ b/bsp/phytium/libraries/drivers/drv_gpio.c @@ -11,10 +11,14 @@ * */ +#include "rtconfig.h" +#ifdef BSP_USING_PIN + #include #include #include "interrupt.h" -#include "rtdbg.h" +#define LOG_TAG "gpio_drv" +#include "drv_log.h" #ifdef RT_USING_SMART #include "ioremap.h" #endif @@ -25,12 +29,10 @@ #include "fparameters.h" #endif #include "fkernel.h" -#include "fpinctrl.h" #include "fcpu_info.h" #include "ftypes.h" #include "board.h" -#ifdef RT_USING_PIN #include "fiopad.h" #include "fgpio.h" #include "drv_gpio.h" @@ -89,57 +91,6 @@ static void FGpioOpsSetupPinIRQ(FGpio *ctrl, FGpioPin *const pin, FGpioOpsPinCon return; } -void FIOPadSetGpioMux(u32 ctrl_id_p, u32 pin_id_p) -{ -#if defined(TARGET_E2000D) - if (ctrl_id_p == FGPIO4_ID) - { - switch (pin_id_p) - { - case 11: /* gpio 4-a-11 */ - FIOPadSetFunc(&iopad_ctrl, FIOPAD_AC45_REG0_OFFSET, FIOPAD_FUNC6); - break; - case 12: /* gpio 4-a-12 */ - FIOPadSetFunc(&iopad_ctrl, FIOPAD_AE43_REG0_OFFSET, FIOPAD_FUNC6); - break; - default: - LOG_E("Unsupported ctrl pin."); - RT_ASSERT(0); - break; - } - } - else - { - LOG_E("Unsupported ctrl."); - RT_ASSERT(0); - } -#endif - -#if defined(TARGET_E2000Q) || defined(TARGET_PHYTIUMPI) - if (ctrl_id_p == FGPIO4_ID) - { - switch (pin_id_p) - { - case 11: /* gpio 4-a-11 */ - FIOPadSetFunc(&iopad_ctrl, FIOPAD_AC49_REG0_OFFSET, FIOPAD_FUNC6); - break; - case 12: /* gpio 4-a-12 */ - FIOPadSetFunc(&iopad_ctrl, FIOPAD_AE47_REG0_OFFSET, FIOPAD_FUNC6); - break; - default: - LOG_E("Unsupported ctrl pin."); - RT_ASSERT(0); - break; - } - } - else - { - LOG_E("Unsupported ctrl."); - RT_ASSERT(0); - } -#endif -} - /* on E2000, if u want use GPIO-4-11, set pin = FGPIO_OPS_PIN_INDEX(4, 0, 11) */ static void drv_pin_mode(struct rt_device *device, rt_base_t pin, rt_uint8_t mode) { @@ -197,18 +148,18 @@ static void drv_pin_mode(struct rt_device *device, rt_base_t pin, rt_uint8_t mod switch (mode) { - case PIN_MODE_OUTPUT: - pin_config->direction = FGPIO_DIR_OUTPUT; - pin_config->en_irq = FALSE; - break; - case PIN_MODE_INPUT: - pin_config->direction = FGPIO_DIR_INPUT; - pin_config->en_irq = TRUE; - pin_config->irq_type = FGPIO_IRQ_TYPE_EDGE_RISING; - break; - default: - rt_kprintf("Not support mode %d!!!\n", mode); - break; + case PIN_MODE_OUTPUT: + pin_config->direction = FGPIO_DIR_OUTPUT; + pin_config->en_irq = FALSE; + break; + case PIN_MODE_INPUT: + pin_config->direction = FGPIO_DIR_INPUT; + pin_config->en_irq = TRUE; + pin_config->irq_type = FGPIO_IRQ_TYPE_EDGE_RISING; + break; + default: + rt_kprintf("Not support mode %d!!!\n", mode); + break; } FGpioSetDirection(pin_instance, pin_config->direction); @@ -299,21 +250,21 @@ rt_err_t drv_pin_attach_irq(struct rt_device *device, rt_base_t pin, switch (mode) { - case PIN_IRQ_MODE_RISING: - pin_config->irq_type = FGPIO_IRQ_TYPE_EDGE_RISING; - break; - case PIN_IRQ_MODE_FALLING: - pin_config->irq_type = FGPIO_IRQ_TYPE_EDGE_FALLING; - break; - case PIN_IRQ_MODE_LOW_LEVEL: - pin_config->irq_type = FGPIO_IRQ_TYPE_LEVEL_LOW; - break; - case PIN_IRQ_MODE_HIGH_LEVEL: - pin_config->irq_type = FGPIO_IRQ_TYPE_LEVEL_HIGH; - break; - default: - LOG_E("Do not spport irq_mode: %d\n", mode); - break; + case PIN_IRQ_MODE_RISING: + pin_config->irq_type = FGPIO_IRQ_TYPE_EDGE_RISING; + break; + case PIN_IRQ_MODE_FALLING: + pin_config->irq_type = FGPIO_IRQ_TYPE_EDGE_FALLING; + break; + case PIN_IRQ_MODE_LOW_LEVEL: + pin_config->irq_type = FGPIO_IRQ_TYPE_LEVEL_LOW; + break; + case PIN_IRQ_MODE_HIGH_LEVEL: + pin_config->irq_type = FGPIO_IRQ_TYPE_LEVEL_HIGH; + break; + default: + LOG_E("Do not spport irq_mode: %d\n", mode); + break; } FGpioSetInterruptType(pin_instance, pin_config->irq_type); FGpioRegisterInterruptCB(pin_instance, pin_config->irq_handler, @@ -391,4 +342,4 @@ int ft_pin_init(void) return ret; } INIT_DEVICE_EXPORT(ft_pin_init); -#endif /* RT_USING_PIN */ \ No newline at end of file +#endif \ No newline at end of file diff --git a/bsp/phytium/libraries/drivers/drv_i2c.c b/bsp/phytium/libraries/drivers/drv_i2c.c new file mode 100644 index 0000000000..42913c27fa --- /dev/null +++ b/bsp/phytium/libraries/drivers/drv_i2c.c @@ -0,0 +1,470 @@ +/* + * Copyright (c) 2006-2023, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Email: opensource_embedded@phytium.com.cn + * + * Change Logs: + * Date Author Notes + * 2023-10-23 zhangyan first version + * + */ +#include "rtconfig.h" +#if defined BSP_USING_I2C + +#define LOG_TAG "i2c_drv" +#include "drv_log.h" +#include "drv_i2c.h" +#include "fi2c.h" +#include "fi2c_hw.h" +#include "fio_mux.h" +#include "fmio_hw.h" +#include "fmio.h" +#include "drivers/i2c.h" +#include "fparameters.h" +#ifdef RT_USING_SMART + #include +#endif + +#define FI2C_DEFAULT_ID 0 +#define I2C_USE_MIO +#if defined(I2C_USE_MIO) + static FMioCtrl mio_handle; +#endif + +struct phytium_i2c_bus +{ + struct rt_i2c_bus_device device; + FI2c i2c_handle; + struct rt_i2c_msg *msg; + const char *name; +}; + +#if defined(I2C_USE_CONTROLLER) +static struct phytium_i2c_bus i2c_bus[FI2C_NUM] = +{ + { + .name = "I2C0", + .i2c_handle.config.instance_id = 0, + }, + { + .name = "I2C1", + .i2c_handle.config.instance_id = 1, + }, + { + .name = "I2C2", + .i2c_handle.config.instance_id = 2, + }, +}; +#endif + +#if defined(I2C_USE_MIO) +static struct phytium_i2c_bus i2c_mio_bus[FMIO_NUM] = +{ +#if defined(TARGET_E2000D) ||defined(TARGET_E2000Q) + { + .name = "MIO0", + .i2c_handle.config.instance_id = 0, + }, + { + .name = "MIO1", + .i2c_handle.config.instance_id = 1, + }, + { + .name = "MIO2", + .i2c_handle.config.instance_id = 2, + }, + { + .name = "MIO3", + .i2c_handle.config.instance_id = 3, + }, + { + .name = "MIO4", + .i2c_handle.config.instance_id = 4, + }, + { + .name = "MIO5", + .i2c_handle.config.instance_id = 5, + }, + { + .name = "MIO6", + .i2c_handle.config.instance_id = 6, + }, + { + .name = "MIO7", + .i2c_handle.config.instance_id = 7, + }, + { + .name = "MIO8", + .i2c_handle.config.instance_id = 8, + }, + { + .name = "MIO9", + .i2c_handle.config.instance_id = 9, + }, + { + .name = "MIO10", + .i2c_handle.config.instance_id = 10, + }, + { + .name = "MIO11", + .i2c_handle.config.instance_id = 11, + }, + { + .name = "MIO12", + .i2c_handle.config.instance_id = 12, + }, + { + .name = "MIO13", + .i2c_handle.config.instance_id = 13, + }, + { + .name = "MIO14", + .i2c_handle.config.instance_id = 14, + }, + { + .name = "MIO15", + .i2c_handle.config.instance_id = 15, + }, +#elif defined(TARGET_PHYTIUMPI) + { + .name = "MIO0", + .i2c_handle.config.instance_id = 0, + }, + { + .name = "MIO1", + .i2c_handle.config.instance_id = 1, + }, + { + .name = "MIO2", + .i2c_handle.config.instance_id = 2, + }, + { + .name = "MIO10", + .i2c_handle.config.instance_id = 10, + }, +#endif +}; + +#endif + +#if defined(I2C_USE_CONTROLLER) +static rt_err_t i2c_config(struct phytium_i2c_bus *i2c_bus) +{ + RT_ASSERT(i2c_bus); + FI2cConfig input_cfg; + const FI2cConfig *config_p = NULL; + FI2c *instance_p = &i2c_bus->i2c_handle; + FError ret = FI2C_SUCCESS; + + /* Lookup default configs by instance id */ + config_p = FI2cLookupConfig(instance_p->config.instance_id); + input_cfg = *config_p; +#ifdef RT_USING_SMART + input_cfg.base_addr = (uintptr)rt_ioremap((void *)input_cfg.base_addr, 0x1000); +#endif + input_cfg.speed_rate = FI2C_SPEED_STANDARD_RATE; + input_cfg.work_mode = FI2C_MASTER; + FI2cDeInitialize(&i2c_bus->i2c_handle); + /* Initialization */ + ret = FI2cCfgInitialize(instance_p, &input_cfg); + if (ret != FI2C_SUCCESS) + { + LOG_E("Init master I2c failed, ret: 0x%x", ret); + + return RT_ERROR; + } + + return RT_EOK; +} +#endif + +#if defined(I2C_USE_MIO) +static rt_err_t i2c_mio_config(struct phytium_i2c_bus *i2c_bus) +{ + RT_ASSERT(i2c_bus); + FI2cConfig input_cfg; + const FI2cConfig *config_p = NULL; + FI2c *instance_p = &i2c_bus->i2c_handle; + FError ret = FI2C_SUCCESS; + + mio_handle.config = *FMioLookupConfig(instance_p->config.instance_id); +#ifdef RT_USING_SMART + mio_handle.config.func_base_addr = (uintptr)rt_ioremap((void *)mio_handle.config.func_base_addr, 0x1200); + mio_handle.config.mio_base_addr = (uintptr)rt_ioremap((void *)mio_handle.config.mio_base_addr, 0x200); +#endif + ret = FMioFuncInit(&mio_handle, FMIO_FUNC_SET_I2C); + if (ret != FT_SUCCESS) + { + LOG_E("MIO initialize error."); + return RT_ERROR; + } + + FIOPadSetMioMux(instance_p->config.instance_id); + + config_p = FI2cLookupConfig(FI2C_DEFAULT_ID); + if (NULL == config_p) + { + LOG_E("Config of mio instance %d non found.", instance_p->config.instance_id); + return RT_ERROR; + } + + input_cfg = *config_p; + input_cfg.instance_id = instance_p->config.instance_id; + input_cfg.base_addr = FMioFuncGetAddress(&mio_handle, FMIO_FUNC_SET_I2C); + input_cfg.irq_num = FMioFuncGetIrqNum(&mio_handle, FMIO_FUNC_SET_I2C); + input_cfg.ref_clk_hz = FMIO_CLK_FREQ_HZ; + input_cfg.speed_rate = FI2C_SPEED_STANDARD_RATE; + ret = FI2cCfgInitialize(&i2c_bus->i2c_handle, &input_cfg); + if (FI2C_SUCCESS != ret) + { + LOG_E("Init mio master failed, ret: 0x%x", ret); + return RT_ERROR; + } + + return RT_EOK; +} +#endif + +static rt_err_t phytium_i2c_set_speed(struct phytium_i2c_bus *i2c_bus, rt_uint32_t speed) +{ + RT_ASSERT(i2c_bus); + u32 ret; + uintptr base_addr = i2c_bus->i2c_handle.config.base_addr; + + ret = FI2cSetSpeed(base_addr, speed); + if (ret != FI2C_SUCCESS) + { + LOG_E("Set i2c speed failed!\n"); + return RT_ERROR; + } + + return RT_EOK; +} + +static rt_err_t i2c_bus_control(struct rt_i2c_bus_device *device, int cmd, void *args) +{ + RT_ASSERT(device); + struct phytium_i2c_bus *i2c_bus; + i2c_bus = (struct phytium_i2c_bus *)(device); + + switch (cmd) + { + case RT_I2C_DEV_CTRL_CLK: + phytium_i2c_set_speed(i2c_bus, *(rt_uint32_t *)args); + break; + case RT_I2C_DEV_CTRL_10BIT: + FI2cConfig *config_p = &i2c_bus->i2c_handle.config; + config_p->use_7bit_addr = FALSE; + FI2cCfgInitialize(&i2c_bus->i2c_handle, config_p); + break; + default: + return -RT_EIO; + } + + return RT_EOK; +} + +static rt_ssize_t i2c_master_xfer(struct rt_i2c_bus_device *device, struct rt_i2c_msg msgs[], rt_uint32_t num) +{ + RT_ASSERT(device); + u32 ret; + struct rt_i2c_msg *pmsg; + struct phytium_i2c_bus *i2c_bus; + i2c_bus = (struct phytium_i2c_bus *)(device); + u8 mem_addr = msgs->buf[0]; + + for (int i = 0; i < num; i++) + { + pmsg = i2c_bus->msg = &msgs[i]; + i2c_bus->i2c_handle.config.slave_addr = pmsg->addr; + if (pmsg->flags & RT_I2C_RD) + { + ret = FI2cMasterReadPoll(&i2c_bus->i2c_handle, mem_addr, 1, &pmsg->buf[0], sizeof(pmsg->buf)); + if (ret != FI2C_SUCCESS) + { + LOG_E("I2C master read failed!\n"); + return RT_ERROR; + } + } + else + { + ret = FI2cMasterWritePoll(&i2c_bus->i2c_handle, mem_addr, 1, &pmsg->buf[1], sizeof(pmsg->buf) - 1); + if (ret != FI2C_SUCCESS) + { + LOG_E("I2C master write failed!\n"); + return RT_ERROR; + } + } + } + + return RT_EOK; +} + +static const struct rt_i2c_bus_device_ops _i2c_ops = +{ + .master_xfer = i2c_master_xfer, + .slave_xfer = NULL, + .i2c_bus_control = i2c_bus_control +}; + +#if defined(I2C_USE_CONTROLLER) +static int i2c_controller_init(u32 i2c_id) +{ + u32 ret = RT_EOK; + ret = i2c_config(&i2c_bus[i2c_id]); + if (ret != FI2C_SUCCESS) + { + LOG_E("I2C config failed.\n"); + + return RT_ERROR; + } + i2c_bus[i2c_id].device.ops = &_i2c_ops; + ret = rt_i2c_bus_device_register(&i2c_bus[i2c_id].device, i2c_bus[i2c_id].name); + LOG_D("I2C bus reg success.\n"); + RT_ASSERT(RT_EOK == ret); + + return ret; +} +#endif + +#if defined(I2C_USE_MIO) +static int i2c_mio_init(u32 i2c_mio_id) +{ + u32 ret = RT_EOK; + ret = i2c_mio_config(&i2c_mio_bus[i2c_mio_id]); + if (ret != FI2C_SUCCESS) + { + LOG_E("I2C mio config failed.\n"); + + return RT_ERROR; + } + i2c_mio_bus[i2c_mio_id].device.ops = &_i2c_ops; + ret = rt_i2c_bus_device_register(&i2c_mio_bus[i2c_mio_id].device, i2c_mio_bus[i2c_mio_id].name); + LOG_D("I2C mio bus reg success.\n"); + RT_ASSERT(RT_EOK == ret); + + return ret; +} +#endif + +int rt_hw_i2c_init(void) +{ + rt_err_t ret = RT_EOK; +#if defined(I2C_USE_CONTROLLER) + +#if defined(RT_USING_I2C0) + i2c_controller_init(FI2C0_ID); +#endif +#if defined(RT_USING_I2C1) + i2c_controller_init(FI2C1_ID); +#endif +#if defined(RT_USING_I2C2) + i2c_controller_init(FI2C2_ID); +#endif + +#endif + +#if defined(I2C_USE_MIO) + +#if defined(RT_USING_MIO0) + i2c_mio_init(FMIO0_ID); +#endif +#if defined(RT_USING_MIO1) + i2c_mio_init(FMIO1_ID); +#endif +#if defined(RT_USING_MIO2) + i2c_mio_init(FMIO2_ID); +#endif +#if defined(RT_USING_MIO3) + i2c_mio_init(FMIO3_ID); +#endif +#if defined(RT_USING_MIO4) + i2c_mio_init(FMIO4_ID); +#endif +#if defined(RT_USING_MIO5) + i2c_mio_init(FMIO5_ID); +#endif +#if defined(RT_USING_MIO6) + i2c_mio_init(FMIO6_ID); +#endif +#if defined(RT_USING_MIO7) + i2c_mio_init(FMIO7_ID); +#endif +#if defined(RT_USING_MIO8) + i2c_mio_init(FMIO8_ID); +#endif +#if defined(RT_USING_MIO9) + i2c_mio_init(FMIO9_ID); +#endif +#if defined(RT_USING_MIO10) + i2c_mio_init(FMIO10_ID); +#endif +#if defined(RT_USING_MIO11) + i2c_mio_init(FMIO11_ID); +#endif +#if defined(RT_USING_MIO12) + i2c_mio_init(FMIO12_ID); +#endif +#if defined(RT_USING_MIO13) + i2c_mio_init(FMIO13_ID); +#endif +#if defined(RT_USING_MIO14) + i2c_mio_init(FMIO14_ID); +#endif +#if defined(RT_USING_MIO15) + i2c_mio_init(FMIO15_ID); +#endif + +#endif + + return 0; +} +INIT_DEVICE_EXPORT(rt_hw_i2c_init); + + + +static struct rt_i2c_bus_device *i2c_test_bus = RT_NULL; /* I2C总线设备句柄 */ + +int i2c_sample(int argc, char *argv[]) +{ + char name[RT_NAME_MAX]; + rt_strncpy(name, "MIO15", RT_NAME_MAX); + i2c_test_bus = (struct rt_i2c_bus_device *)rt_device_find(name); + + rt_uint8_t read_buf[2] = {0x02, 0x0}; + rt_uint8_t write_buf[2] = {0x02, 0x01}; + if (i2c_test_bus == RT_NULL) + { + rt_kprintf("can't find %s device!\n", name); + } + else + { + rt_kprintf("find %s device!!!!\n", name); + } + + struct rt_i2c_msg read_msgs; + read_msgs.addr = 0x6B; + read_msgs.flags = RT_I2C_RD; + read_msgs.buf = read_buf; + read_msgs.len = 1; + rt_i2c_transfer(i2c_test_bus, &read_msgs, 1); + rt_kprintf("read_buf = %x\n", *read_msgs.buf); + + struct rt_i2c_msg write_msgs; + write_msgs.addr = 0x6B; + write_msgs.flags = RT_I2C_WR; + write_msgs.buf = write_buf; + write_msgs.len = 1; + rt_i2c_transfer(i2c_test_bus, &write_msgs, 1); + read_buf[0] = 0x02; + rt_i2c_transfer(i2c_test_bus, &read_msgs, 1); + rt_kprintf("read_buf = %x\n", *read_msgs.buf); + + return RT_EOK; +} + +MSH_CMD_EXPORT(i2c_sample, i2c device sample); + +#endif \ No newline at end of file diff --git a/bsp/phytium/libraries/drivers/drv_i2c.h b/bsp/phytium/libraries/drivers/drv_i2c.h new file mode 100644 index 0000000000..965f2b2648 --- /dev/null +++ b/bsp/phytium/libraries/drivers/drv_i2c.h @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2006-2023, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Email: opensource_embedded@phytium.com.cn + * + * Change Logs: + * Date Author Notes + * 2023-10-18 zhangyan first version + * + */ +#ifndef __DRV_I2C_H__ +#define __DRV_I2C_H__ + +#include + +#ifdef BSP_USING_I2C + +#ifdef __cplusplus +extern "C" +{ +#endif + + +#ifdef __cplusplus +} +#endif + +#endif +#endif /* __DRV_CAN_H__ */ diff --git a/bsp/phytium/libraries/drivers/drv_log.h b/bsp/phytium/libraries/drivers/drv_log.h new file mode 100644 index 0000000000..95e0f6ebd4 --- /dev/null +++ b/bsp/phytium/libraries/drivers/drv_log.h @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2006-2023, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Email: opensource_embedded@phytium.com.cn + * + * Change Logs: + * Date Author Notes + * 2023-10-23 zhangyan first version + * + */ + +#ifndef LOG_TAG + #define DBG_TAG "drv" +#else + #define DBG_TAG LOG_TAG +#endif /* LOG_TAG */ + +#ifdef DRV_DEBUG + #define DBG_LVL DBG_LOG +#else + #define DBG_LVL DBG_INFO +#endif /* DRV_DEBUG */ + +#include diff --git a/bsp/phytium/libraries/drivers/drv_pwm.c b/bsp/phytium/libraries/drivers/drv_pwm.c new file mode 100644 index 0000000000..c031352a9e --- /dev/null +++ b/bsp/phytium/libraries/drivers/drv_pwm.c @@ -0,0 +1,303 @@ +/* + * Copyright (c) 2006-2023, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Email: opensource_embedded@phytium.com.cn + * + * Change Logs: + * Date Author Notes + * 2023-10-18 zhangyan first version + * + */ +#include "rtconfig.h" +#ifdef BSP_USING_PWM +#define LOG_TAG "pwm_drv" +#include "drv_log.h" +#include "drv_pwm.h" +#include "fio_mux.h" +#include "fpwm.h" +#ifdef RT_USING_SMART + #include +#endif +struct phytium_pwm +{ + const char *name; + FPwmCtrl pwm_handle; + struct rt_device_pwm device; /* inherit from can device */ +}; + +static struct phytium_pwm pwm_dev[FPWM_NUM] = +{ +#if defined(TARGET_E2000) + { + .name = "PWM0", + .pwm_handle.config.instance_id = 0, + }, + { + .name = "PWM1", + .pwm_handle.config.instance_id = 1, + }, + { + .name = "PWM2", + .pwm_handle.config.instance_id = 2, + }, + { + .name = "PWM3", + .pwm_handle.config.instance_id = 3, + }, + { + .name = "PWM4", + .pwm_handle.config.instance_id = 4, + }, + { + .name = "PWM5", + .pwm_handle.config.instance_id = 5, + }, + { + .name = "PWM6", + .pwm_handle.config.instance_id = 6, + }, + { + .name = "PWM7", + .pwm_handle.config.instance_id = 7, + }, +#elif defined(TARGET_PHYTIUMPI) + { + .name = "PWM2", + .pwm_handle.config.instance_id = 2, + }, +#endif +}; + +static rt_err_t drv_pwm_config(struct phytium_pwm *pwm_dev) +{ + RT_ASSERT(pwm_dev); + u32 ret; + FPwmConfig *config = NULL; + FPwmCtrl *pwm_handle = &pwm_dev->pwm_handle; + FIOPadSetPwmMux(pwm_handle->config.instance_id, 0); + FIOPadSetPwmMux(pwm_handle->config.instance_id, 1); + config = FPwmLookupConfig(pwm_handle->config.instance_id); +#ifdef RT_USING_SMART + config->pwm_base_addr = (uintptr)rt_ioremap((void *)config->pwm_base_addr, 0x1000); + config->db_base_addr = (uintptr)rt_ioremap((void *)config->db_base_addr, 0x100); +#endif + ret = FPwmCfgInitialize(pwm_handle, config); + if (ret != FPWM_SUCCESS) + { + LOG_E("Pwm config init failed.\n"); + + return RT_ERROR; + } + + return RT_EOK; +} + +static rt_err_t drv_pwm_enable(struct phytium_pwm *pwm_dev, struct rt_pwm_configuration *configuration, boolean enable_pwm) +{ + RT_ASSERT(pwm_dev); + RT_ASSERT(configuration); + u32 channel = configuration->channel; + + if (enable_pwm == RT_TRUE) + { + FPwmEnable(&pwm_dev->pwm_handle, channel); + } + else + { + FPwmDisable(&pwm_dev->pwm_handle, channel); + } + + return RT_EOK; +} + +static rt_err_t drv_pwm_set(struct phytium_pwm *pwm_dev, int cmd, struct rt_pwm_configuration *configuration) +{ + RT_ASSERT(pwm_dev); + RT_ASSERT(configuration); + u32 ret; + FPwmVariableConfig pwm_cfg; + u32 channel = configuration->channel; + + memset(&pwm_cfg, 0, sizeof(pwm_cfg)); + pwm_cfg.tim_ctrl_mode = FPWM_MODULO; + pwm_cfg.tim_ctrl_div = 50 - 1; + /* Precision set to microseconds */ + switch (cmd) + { + case PWM_CMD_SET: + pwm_cfg.pwm_period = configuration->period / 1000; + pwm_cfg.pwm_pulse = configuration->pulse / 1000; + break; + case PWM_CMD_SET_PERIOD: + pwm_cfg.pwm_period = configuration->period / 1000; + break; + case PWM_CMD_SET_PULSE: + pwm_cfg.pwm_pulse = configuration->pulse / 1000; + break; + } + /* Can be modified according to function */ + pwm_cfg.pwm_mode = FPWM_OUTPUT_COMPARE; + pwm_cfg.pwm_polarity = FPWM_POLARITY_NORMAL; + pwm_cfg.pwm_duty_source_mode = FPWM_DUTY_CCR; + + FPwmDisable(&pwm_dev->pwm_handle, channel); + + ret = FPwmVariableSet(&pwm_dev->pwm_handle, channel, &pwm_cfg); + if (ret != FPWM_SUCCESS) + { + LOG_E("Pwm variable set failed.\n"); + + return RT_ERROR; + } + + FPwmEnable(&pwm_dev->pwm_handle, channel); + + return RT_EOK; +} + +static rt_err_t drv_pwm_get(struct phytium_pwm *pwm_dev, struct rt_pwm_configuration *configuration) +{ + RT_ASSERT(pwm_dev); + RT_ASSERT(configuration); + u32 ret; + FPwmVariableConfig pwm_cfg; + u32 channel = configuration->channel; + + memset(&pwm_cfg, 0, sizeof(pwm_cfg)); + ret = FPwmVariableGet(&pwm_dev->pwm_handle, channel, &pwm_cfg); + if (ret != FPWM_SUCCESS) + { + LOG_E("Pwm variable get failed.\n"); + + return RT_ERROR; + } + + configuration->period = pwm_cfg.pwm_period * 1000; + configuration->pulse = pwm_cfg.pwm_pulse * 1000; + + LOG_D("period = %d\n, pulse = %d\n", configuration->period, configuration->pulse); + + return RT_EOK; +} + +static rt_err_t drv_pwm_set_dead_time(struct phytium_pwm *pwm_dev, struct rt_pwm_configuration *configuration) +{ + RT_ASSERT(pwm_dev); + RT_ASSERT(configuration); + u32 ret; + FPwmDbVariableConfig db_cfg; + u32 channel = configuration->channel; + + memset(&db_cfg, 0, sizeof(db_cfg)); + db_cfg.db_rise_cycle = configuration->dead_time / 1000; + db_cfg.db_fall_cycle = configuration->dead_time / 1000; + db_cfg.db_polarity_sel = FPWM_DB_AH; + db_cfg.db_in_mode = FPWM_DB_IN_MODE_PWM0; + db_cfg.db_out_mode = FPWM_DB_OUT_MODE_ENABLE_RISE_FALL; + + FPwmDisable(&pwm_dev->pwm_handle, channel); + ret = FPwmDbVariableSet(&pwm_dev->pwm_handle, &db_cfg); + if (ret != FPWM_SUCCESS) + { + LOG_E("FPwmDbVariableSet failed."); + + return RT_ERROR; + } + FPwmEnable(&pwm_dev->pwm_handle, channel); + + return RT_EOK; +} + +static rt_err_t _pwm_control(struct rt_device_pwm *device, int cmd, void *arg) +{ + struct rt_pwm_configuration *configuration = (struct rt_pwm_configuration *)arg; + struct phytium_pwm *pwm_dev; + pwm_dev = (struct phytium_pwm *)(device->parent.user_data); + + switch (cmd) + { + case PWM_CMD_ENABLE: + return drv_pwm_enable(pwm_dev, configuration, RT_TRUE); + case PWM_CMD_DISABLE: + return drv_pwm_enable(pwm_dev, configuration, RT_FALSE); + case PWM_CMD_SET: + return drv_pwm_set(pwm_dev, PWM_CMD_SET, configuration); + case PWM_CMD_GET: + return drv_pwm_get(pwm_dev, configuration); + case PWM_CMD_SET_DEAD_TIME: + return drv_pwm_set_dead_time(pwm_dev, configuration); + case PWM_CMD_SET_PERIOD: + return drv_pwm_set(pwm_dev, PWM_CMD_SET_PERIOD, configuration); + case PWM_CMD_SET_PULSE: + return drv_pwm_set(pwm_dev, PWM_CMD_SET_PULSE, configuration); + default: + return -RT_EINVAL; + } +} + +static const struct rt_pwm_ops _pwm_ops = +{ + _pwm_control, +}; + +static rt_err_t pwm_controller_init(u32 pwm_id) +{ + u32 ret = RT_EOK; + ret = drv_pwm_config(&pwm_dev[pwm_id]); + if (ret != FPWM_SUCCESS) + { + LOG_E("Pwm config failed.\n"); + + return RT_ERROR; + } + ret = rt_device_pwm_register(&pwm_dev[pwm_id].device, + pwm_dev[pwm_id].name, + &_pwm_ops, + &pwm_dev[pwm_id]); + RT_ASSERT(ret == RT_EOK); + + return ret; +} + +int rt_hw_pwm_init(void) +{ +#if defined(TARGET_E2000) + +#if defined(RT_USING_PWM0) + pwm_controller_init(FPWM0_ID); +#endif +#if defined(RT_USING_PWM1) + pwm_controller_init(FPWM1_ID); +#endif +#if defined(RT_USING_PWM2) + pwm_controller_init(FPWM2_ID); +#endif +#if defined(RT_USING_PWM3) + pwm_controller_init(FPWM3_ID); +#endif +#if defined(RT_USING_PWM4) + pwm_controller_init(FPWM4_ID); +#endif +#if defined(RT_USING_PWM5) + pwm_controller_init(FPWM5_ID); +#endif +#if defined(RT_USING_PWM6) + pwm_controller_init(FPWM6_ID); +#endif +#if defined(RT_USING_PWM7) + pwm_controller_init(FPWM7_ID); +#endif + +#elif defined(TARGET_PHYTIUMPI) + +#if defined(RT_USING_PWM2) + pwm_controller_init(FPWM2_ID); +#endif + +#endif + return 0; +} +INIT_DEVICE_EXPORT(rt_hw_pwm_init); +#endif \ No newline at end of file diff --git a/bsp/phytium/libraries/drivers/drv_pwm.h b/bsp/phytium/libraries/drivers/drv_pwm.h new file mode 100644 index 0000000000..a6ba65eb76 --- /dev/null +++ b/bsp/phytium/libraries/drivers/drv_pwm.h @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2006-2023, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Email: opensource_embedded@phytium.com.cn + * + * Change Logs: + * Date Author Notes + * 2023-10-18 zhangyan first version + * + */ +#ifndef __DRV_PWM_H__ +#define __DRV_PWM_H__ + +#include + +#ifdef BSP_USING_PWM + +#ifdef __cplusplus +extern "C" +{ +#endif + +#ifdef __cplusplus +} +#endif + +#endif +#endif /* __DRV_CAN_H__ */ diff --git a/bsp/phytium/libraries/drivers/drv_qspi.c b/bsp/phytium/libraries/drivers/drv_qspi.c index f2e9abed38..5451fc2868 100644 --- a/bsp/phytium/libraries/drivers/drv_qspi.c +++ b/bsp/phytium/libraries/drivers/drv_qspi.c @@ -12,7 +12,7 @@ */ #include "rtconfig.h" -#ifdef RT_USING_QSPI +#ifdef BSP_USING_QSPI #include #ifdef RT_USING_SMART #include @@ -20,7 +20,8 @@ #include "rtdevice.h" #include "drv_qspi.h" #include "fqspi_flash.h" -#include "rtdbg.h" +#define LOG_TAG "qspi_drv" +#include "drv_log.h" #include "fiopad.h" #include "fqspi_hw.h" @@ -45,21 +46,11 @@ rt_err_t FQspiInit(phytium_qspi_bus *phytium_qspi_bus) FError ret = FT_SUCCESS; rt_uint32_t qspi_id = phytium_qspi_bus->fqspi_id; -#ifdef USING_QSPI_CHANNEL0 -#if defined CONFIG_TARGET_E2000D - FIOPadSetFunc(&iopad_ctrl, FIOPAD_AR51_REG0_OFFSET, FIOPAD_FUNC0); -#elif defined CONFIG_TARGET_E2000Q - FIOPadSetFunc(&iopad_ctrl, FIOPAD_AR55_REG0_OFFSET, FIOPAD_FUNC0); -#endif -#elif defined USING_QSPI_CHANNEL1 -#if defined CONFIG_TARGET_E2000D - FIOPadSetFunc(&iopad_ctrl, FIOPAD_AR45_REG0_OFFSET, FIOPAD_FUNC0); -#elif defined CONFIG_TARGET_E2000Q - FIOPadSetFunc(&iopad_ctrl, FIOPAD_AR49_REG0_OFFSET, FIOPAD_FUNC0); -#endif -#endif + FIOPadSetQspiMux(qspi_id, FQSPI_CS_0); + FIOPadSetQspiMux(qspi_id, FQSPI_CS_1); FQspiDeInitialize(&(phytium_qspi_bus->fqspi)); + FQspiConfig pconfig = *FQspiLookupConfig(qspi_id); #ifdef RT_USING_SMART @@ -93,6 +84,36 @@ rt_err_t FQspiInit(phytium_qspi_bus *phytium_qspi_bus) return RT_EOK; } +#define __is_print(ch) ((unsigned int)((ch) - ' ') < 127u - ' ') +void FtDumpHexByte(const u8 *ptr, u32 buflen) +{ + u8 *buf = (u8 *)ptr; + fsize_t i, j; + + for (i = 0; i < buflen; i += 16) + { + rt_kprintf("%p: ", ptr + i); + + for (j = 0; j < 16; j++) + if (i + j < buflen) + { + rt_kprintf("%02X ", buf[i + j]); + } + else + { + rt_kprintf(" "); + } + rt_kprintf(" "); + + for (j = 0; j < 16; j++) + if (i + j < buflen) + { + rt_kprintf("%c", (char)(__is_print(buf[i + j]) ? buf[i + j] : '.')); + } + rt_kprintf("\r\n"); + } +} + static rt_err_t phytium_qspi_configure(struct rt_spi_device *device, struct rt_spi_configuration *configuration) { RT_ASSERT(device != RT_NULL); @@ -149,18 +170,18 @@ static FError QspiFlashWriteData(FQspiCtrl *pctrl, u8 command, uintptr addr, con /* set addr_sel region, FQSPI_ADDR_SEL_3 or FQSPI_ADDR_SEL_4 */ switch (command) { - case FQSPI_FLASH_CMD_PP: - case FQSPI_FLASH_CMD_QPP: - pctrl->wr_cfg.wr_addr_sel = FQSPI_ADDR_SEL_3; - break; - case FQSPI_FLASH_CMD_4PP: - case FQSPI_FLASH_CMD_4QPP: - pctrl->wr_cfg.wr_addr_sel = FQSPI_ADDR_SEL_4; - break; - default: - ret |= FQSPI_NOT_SUPPORT; - return ret; - break; + case FQSPI_FLASH_CMD_PP: + case FQSPI_FLASH_CMD_QPP: + pctrl->wr_cfg.wr_addr_sel = FQSPI_ADDR_SEL_3; + break; + case FQSPI_FLASH_CMD_4PP: + case FQSPI_FLASH_CMD_4QPP: + pctrl->wr_cfg.wr_addr_sel = FQSPI_ADDR_SEL_4; + break; + default: + ret |= FQSPI_NOT_SUPPORT; + return ret; + break; } /*write wr_cfg to Write config register 0x08 */ @@ -353,7 +374,7 @@ static rt_ssize_t phytium_qspi_xfer(struct rt_spi_device *device, struct rt_spi_ /*Distinguish the read mode according to different commands*/ if (cmd == FQSPI_FLASH_CMD_READ || cmd == FQSPI_FLASH_CMD_4READ || cmd == FQSPI_FLASH_CMD_FAST_READ || cmd == FQSPI_FLASH_CMD_4FAST_READ || - cmd == FQSPI_FLASH_CMD_DUAL_READ || cmd == FQSPI_FLASH_CMD_QIOR || cmd == FQSPI_FLASH_CMD_4QIOR) + cmd == FQSPI_FLASH_CMD_DUAL_READ || cmd == FQSPI_FLASH_CMD_QIOR || cmd == FQSPI_FLASH_CMD_4QIOR) { ret |= FQspiFlashReadDataConfig(&(qspi_bus->fqspi), cmd); if (FT_SUCCESS != ret) diff --git a/bsp/phytium/libraries/drivers/drv_qspi.h b/bsp/phytium/libraries/drivers/drv_qspi.h index c92b884b7f..50170063fd 100644 --- a/bsp/phytium/libraries/drivers/drv_qspi.h +++ b/bsp/phytium/libraries/drivers/drv_qspi.h @@ -11,12 +11,12 @@ * */ -#ifndef __DRT_QSPI_H__ -#define __DRT_QSPI_H__ +#ifndef __DRV_QSPI_H__ +#define __DRV_QSPI_H__ #include "rtconfig.h" -#ifdef RT_USING_QSPI +#ifdef BSP_USING_QSPI #include #include "rtdevice.h" #include "fqspi_flash.h" diff --git a/bsp/phytium/libraries/drivers/drv_sdif.c b/bsp/phytium/libraries/drivers/drv_sdif.c new file mode 100644 index 0000000000..463b934ce4 --- /dev/null +++ b/bsp/phytium/libraries/drivers/drv_sdif.c @@ -0,0 +1,532 @@ +/* + * Copyright (c) 2006-2023, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Email: opensource_embedded@phytium.com.cn + * + * Change Logs: + * Date Author Notes + * 2023/7/11 liqiaozhong init SD card and mount file system + * 2023/11/8 zhugengyu add interrupt handling for dma waiting, unify function naming + */ + +/***************************** Include Files *********************************/ +#include"rtconfig.h" + +#ifdef BSP_USING_SDIF +#include +#include +#include +#include +#include +#include + +#ifdef RT_USING_SMART + #include "ioremap.h" +#endif +#include "mm_aspace.h" +#include "interrupt.h" + +#define LOG_TAG "sdif_drv" +#include "drv_log.h" + +#include "ftypes.h" +#include "fparameters.h" +#include "fcpu_info.h" + +#include "fsdif_timing.h" + +#include "fsdif.h" +#include "fsdif_hw.h" + +#include "drv_sdif.h" +/************************** Constant Definitions *****************************/ +#ifdef USING_SDIF0 + #define SDIF_CONTROLLER_ID FSDIF0_ID +#elif defined (USING_SDIF1) + #define SDIF_CONTROLLER_ID FSDIF1_ID +#endif +#define SDIF_MALLOC_CAP_DESC 256U +#define SDIF_DMA_ALIGN 512U +#define SDIF_DMA_BLK_SZ 512U +#define SDIF_VALID_OCR 0x00FFFF80 /* supported voltage range is 1.65v-3.6v (VDD_165_195-VDD_35_36) */ +#define SDIF_MAX_BLK_TRANS 20U + +#ifndef CONFIG_SDCARD_OFFSET + #define CONFIG_SDCARD_OFFSET 0x0U +#endif + +/* preserve pointer to host instance */ +static struct rt_mmcsd_host *mmc_host[FSDIF_NUM] = {RT_NULL}; +/**************************** Type Definitions *******************************/ +typedef struct +{ + FSdif *mmcsd_instance; + FSdifIDmaDesc *rw_desc; + rt_err_t (*transfer)(struct rt_mmcsd_host *host, struct rt_mmcsd_req *req, FSdifCmdData *cmd_data_p); + struct rt_event event; +#define SDIF_EVENT_CARD_DETECTED (1 << 0) +#define SDIF_EVENT_COMMAND_DONE (1 << 1) +#define SDIF_EVENT_DATA_DONE (1 << 2) +#define SDIF_EVENT_ERROR_OCCUR (1 << 3) +#define SDIF_EVENT_SDIO_IRQ (1 << 4) +} fsdif_info_t; +/************************** Variable Definitions *****************************/ + +/***************** Macros (Inline Functions) Definitions *********************/ +void fsdif_change(void); + +/*******************************Api Functions*********************************/ +static void fsdif_host_relax(void) +{ + rt_thread_mdelay(1); +} + +static void fsdif_card_detect_callback(FSdif *const mmcsd_instance, void *args, u32 status, u32 dmac_status) +{ + struct rt_mmcsd_host *host = (struct rt_mmcsd_host *)args; + fsdif_info_t *private_data = (fsdif_info_t *)host->private_data; + + rt_event_send(&private_data->event, SDIF_EVENT_CARD_DETECTED); + fsdif_change(); +} + +static void fsdif_command_done_callback(FSdif *const mmcsd_instance, void *args, u32 status, u32 dmac_status) +{ + struct rt_mmcsd_host *host = (struct rt_mmcsd_host *)args; + fsdif_info_t *private_data = (fsdif_info_t *)host->private_data; + + rt_event_send(&private_data->event, SDIF_EVENT_COMMAND_DONE); +} + +static void fsdif_data_done_callback(FSdif *const mmcsd_instance, void *args, u32 status, u32 dmac_status) +{ + struct rt_mmcsd_host *host = (struct rt_mmcsd_host *)args; + fsdif_info_t *private_data = (fsdif_info_t *)host->private_data; + + rt_event_send(&private_data->event, SDIF_EVENT_DATA_DONE); +} + +static void fsdif_sdio_irq_callback(FSdif *const mmcsd_instance, void *args, u32 status, u32 dmac_status) +{ + struct rt_mmcsd_host *host = (struct rt_mmcsd_host *)args; + fsdif_info_t *private_data = (fsdif_info_t *)host->private_data; + + rt_event_send(&private_data->event, SDIF_EVENT_SDIO_IRQ); +} + +static void fsdif_error_occur_callback(FSdif *const mmcsd_instance, void *args, u32 status, u32 dmac_status) +{ + struct rt_mmcsd_host *host = (struct rt_mmcsd_host *)args; + fsdif_info_t *private_data = (fsdif_info_t *)host->private_data; + + rt_event_send(&private_data->event, SDIF_EVENT_ERROR_OCCUR); +} + +static void fsdif_ctrl_setup_interrupt(struct rt_mmcsd_host *host) +{ + fsdif_info_t *private_data = (fsdif_info_t *)host->private_data; + FSdif *mmcsd_instance = private_data->mmcsd_instance; + FSdifConfig *config_p = &mmcsd_instance->config; + rt_uint32_t cpu_id = 0; + + GetCpuId((u32 *)&cpu_id); + rt_hw_interrupt_set_target_cpus(config_p->irq_num, cpu_id); + rt_hw_interrupt_set_priority(config_p->irq_num, 0xd0); + + /* register intr callback */ + rt_hw_interrupt_install(config_p->irq_num, + FSdifInterruptHandler, + mmcsd_instance, + NULL); + + /* enable irq */ + rt_hw_interrupt_umask(config_p->irq_num); + + FSdifRegisterEvtHandler(mmcsd_instance, FSDIF_EVT_CARD_DETECTED, fsdif_card_detect_callback, host); + FSdifRegisterEvtHandler(mmcsd_instance, FSDIF_EVT_ERR_OCCURE, fsdif_error_occur_callback, host); + FSdifRegisterEvtHandler(mmcsd_instance, FSDIF_EVT_CMD_DONE, fsdif_command_done_callback, host); + FSdifRegisterEvtHandler(mmcsd_instance, FSDIF_EVT_DATA_DONE, fsdif_data_done_callback, host); + FSdifRegisterEvtHandler(mmcsd_instance, FSDIF_EVT_SDIO_IRQ, fsdif_sdio_irq_callback, host); + + return; +} + +static rt_err_t fsdif_ctrl_init(struct rt_mmcsd_host *host) +{ + fsdif_info_t *private_data = (fsdif_info_t *)host->private_data; + FSdif *mmcsd_instance = RT_NULL; + const FSdifConfig *default_mmcsd_config = RT_NULL; + FSdifConfig mmcsd_config; + FSdifIDmaDesc *rw_desc = RT_NULL; + + mmcsd_instance = rt_malloc(sizeof(FSdif)); + if (!mmcsd_instance) + { + LOG_E("Malloc mmcsd_instance failed"); + return RT_ERROR; + } + + rw_desc = rt_malloc_align(SDIF_MAX_BLK_TRANS * sizeof(FSdifIDmaDesc), SDIF_MALLOC_CAP_DESC); + if (!rw_desc) + { + LOG_E("Malloc rw_desc failed"); + return RT_ERROR; + } + + rt_memset(mmcsd_instance, 0, sizeof(FSdif)); + rt_memset(rw_desc, 0, SDIF_MAX_BLK_TRANS * sizeof(FSdifIDmaDesc)); + + /* SDIF controller init */ + RT_ASSERT((default_mmcsd_config = FSdifLookupConfig(SDIF_CONTROLLER_ID)) != RT_NULL); + mmcsd_config = *default_mmcsd_config; /* load default config */ +#ifdef RT_USING_SMART + mmcsd_config.base_addr = (uintptr)rt_ioremap((void *)mmcsd_config.base_addr, 0x1000); +#endif + mmcsd_config.trans_mode = FSDIF_IDMA_TRANS_MODE; +#ifdef USING_EMMC + mmcsd_config.non_removable = TRUE; /* eMMC is unremovable on board */ +#else + mmcsd_config.non_removable = FALSE; /* TF card is removable on board */ +#endif + mmcsd_config.get_tuning = FSdifGetTimingSetting; + + if (FSDIF_SUCCESS != FSdifCfgInitialize(mmcsd_instance, &mmcsd_config)) + { + LOG_E("SDIF controller init failed."); + return RT_ERROR; + } + + if (FSDIF_SUCCESS != FSdifSetIDMAList(mmcsd_instance, rw_desc, (uintptr)rw_desc + PV_OFFSET, SDIF_MAX_BLK_TRANS)) + { + LOG_E("SDIF controller setup DMA failed."); + return RT_ERROR; + } + mmcsd_instance->desc_list.first_desc_dma = (uintptr)rw_desc + PV_OFFSET; + + FSdifRegisterRelaxHandler(mmcsd_instance, fsdif_host_relax); /* SDIF delay for a while */ + + private_data->mmcsd_instance = mmcsd_instance; + private_data->rw_desc = rw_desc; + + fsdif_ctrl_setup_interrupt(host); + return RT_EOK; +} + +rt_inline rt_err_t fsdif_dma_transfer(struct rt_mmcsd_host *host, struct rt_mmcsd_req *req, FSdifCmdData *req_cmd) +{ + FError ret = FT_SUCCESS; + rt_uint32_t event = 0U; + rt_uint32_t wait_event = 0U; + fsdif_info_t *private_data = (fsdif_info_t *)host->private_data; + FSdif *mmcsd_instance = private_data->mmcsd_instance; + + if (req_cmd->data_p == RT_NULL) + { + wait_event = SDIF_EVENT_COMMAND_DONE; + } + else + { + wait_event = SDIF_EVENT_COMMAND_DONE | SDIF_EVENT_DATA_DONE; + } + + ret = FSdifDMATransfer(mmcsd_instance, req_cmd); + if (ret != FT_SUCCESS) + { + LOG_E("FSdifDMATransfer() fail."); + return -RT_ERROR; + } + + while (TRUE) + { + if (rt_event_recv(&private_data->event, + (wait_event), + (RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR | RT_WAITING_NO), + rt_tick_from_millisecond(5000), + &event) == RT_EOK) + { + (void)FSdifGetCmdResponse(mmcsd_instance, req_cmd); + break; + } + else + { + if (rt_event_recv(&private_data->event, + (SDIF_EVENT_ERROR_OCCUR), + (RT_EVENT_FLAG_CLEAR | RT_WAITING_NO), + rt_tick_from_millisecond(5000), + &event) == RT_EOK) + { + LOG_E("Sdif DMA transfer endup with error !!!"); + return -RT_EIO; + } + } + + fsdif_host_relax(); + } + + if (resp_type(req->cmd) & RESP_MASK) + { + if (resp_type(req->cmd) == RESP_R2) + { + req->cmd->resp[3] = req_cmd->response[0]; + req->cmd->resp[2] = req_cmd->response[1]; + req->cmd->resp[1] = req_cmd->response[2]; + req->cmd->resp[0] = req_cmd->response[3]; + } + else + { + req->cmd->resp[0] = req_cmd->response[0]; + } + } + + return RT_EOK; +} + +static void fsdif_request_send(struct rt_mmcsd_host *host, struct rt_mmcsd_req *req) +{ + /* ignore some SDIF-ONIY cmd */ + if ((req->cmd->cmd_code == SD_IO_SEND_OP_COND) || (req->cmd->cmd_code == SD_IO_RW_DIRECT)) + { + req->cmd->err = -1; + goto skip_cmd; + } + + fsdif_info_t *private_data = (fsdif_info_t *)host->private_data; + FSdifCmdData req_cmd; + FSdifCmdData req_stop; + FSdifData req_data; + rt_uint32_t *data_buf_aligned = RT_NULL; + rt_uint32_t cmd_flag = resp_type(req->cmd); + + rt_memset(&req_cmd, 0, sizeof(FSdifCmdData)); + rt_memset(&req_stop, 0, sizeof(FSdifCmdData)); + rt_memset(&req_data, 0, sizeof(FSdifData)); + + /* convert req into ft driver type */ + if (req->cmd->cmd_code == GO_IDLE_STATE) + { + req_cmd.flag |= FSDIF_CMD_FLAG_NEED_INIT; + } + + if (req->cmd->cmd_code == GO_INACTIVE_STATE) + { + req_cmd.flag |= FSDIF_CMD_FLAG_NEED_AUTO_STOP; + } + + if ((cmd_flag != RESP_R3) && (cmd_flag != RESP_R4) && (cmd_flag != RESP_NONE)) + { + req_cmd.flag |= FSDIF_CMD_FLAG_NEED_RESP_CRC; + } + + if (cmd_flag & RESP_MASK) + { + req_cmd.flag |= FSDIF_CMD_FLAG_EXP_RESP; + + if (cmd_flag == RESP_R2) + { + req_cmd.flag |= FSDIF_CMD_FLAG_EXP_LONG_RESP; + } + } + + if (req->data) /* transfer command with data */ + { + data_buf_aligned = rt_malloc_align(SDIF_DMA_BLK_SZ * req->data->blks, SDIF_DMA_ALIGN); + if (!data_buf_aligned) + { + LOG_E("Malloc data_buf_aligned failed"); + return; + } + rt_memset(data_buf_aligned, 0, SDIF_DMA_BLK_SZ * req->data->blks); + + req_cmd.flag |= FSDIF_CMD_FLAG_EXP_DATA; + + req_data.blksz = req->data->blksize; + req_data.blkcnt = req->data->blks + CONFIG_SDCARD_OFFSET; + req_data.datalen = req->data->blksize * req->data->blks; + if ((uintptr)req->data->buf % SDIF_DMA_ALIGN) /* data buffer should be 512-aligned */ + { + if (req->data->flags & DATA_DIR_WRITE) + { + rt_memcpy((void *)data_buf_aligned, (void *)req->data->buf, req_data.datalen); + } + req_data.buf = (rt_uint8_t *)data_buf_aligned; + req_data.buf_dma = (uintptr)data_buf_aligned + PV_OFFSET; + } + else + { + req_data.buf = (rt_uint8_t *)req->data->buf; + req_data.buf_dma = (uintptr)req->data->buf + PV_OFFSET; + } + req_cmd.data_p = &req_data; + + if (req->data->flags & DATA_DIR_READ) + { + req_cmd.flag |= FSDIF_CMD_FLAG_READ_DATA; + } + else if (req->data->flags & DATA_DIR_WRITE) + { + req_cmd.flag |= FSDIF_CMD_FLAG_WRITE_DATA; + } + } + + req_cmd.cmdidx = req->cmd->cmd_code; + req_cmd.cmdarg = req->cmd->arg; + + /* do cmd and data transfer */ + req->cmd->err = (private_data->transfer)(host, req, &req_cmd); + if (req->cmd->err != RT_EOK) + { + LOG_E("transfer failed in %s", __func__); + } + + if (req->data && (req->data->flags & DATA_DIR_READ)) + { + if ((uintptr)req->data->buf % SDIF_DMA_ALIGN) /* data buffer should be 512-aligned */ + { + rt_memcpy((void *)req->data->buf, (void *)data_buf_aligned, req_data.datalen); + } + } + + /* stop cmd */ + if (req->stop) + { + req_stop.cmdidx = req->stop->cmd_code; + req_stop.cmdarg = req->stop->arg; + if (req->stop->flags & RESP_MASK) + { + req_stop.flag |= FSDIF_CMD_FLAG_READ_DATA; + if (resp_type(req->stop) == RESP_R2) + { + req_stop.flag |= FSDIF_CMD_FLAG_EXP_LONG_RESP; + } + } + req->stop->err = (private_data->transfer)(host, req, &req_stop); + } + + if (data_buf_aligned) + { + rt_free_align(data_buf_aligned); + } + +skip_cmd: + mmcsd_req_complete(host); +} + +static void fsdif_set_iocfg(struct rt_mmcsd_host *host, struct rt_mmcsd_io_cfg *io_cfg) +{ + FError ret = FT_SUCCESS; + fsdif_info_t *private_data = (fsdif_info_t *)host->private_data; + FSdif *mmcsd_instance = private_data->mmcsd_instance; + uintptr base_addr = mmcsd_instance->config.base_addr; + + if (0 != io_cfg->clock) + { + ret = FSdifSetClkFreq(mmcsd_instance, io_cfg->clock); + if (ret != FT_SUCCESS) + { + LOG_E("FSdifSetClkFreq fail."); + } + } + + switch (io_cfg->bus_width) + { + case MMCSD_BUS_WIDTH_1: + FSdifSetBusWidth(base_addr, 1U); + break; + case MMCSD_BUS_WIDTH_4: + FSdifSetBusWidth(base_addr, 4U); + break; + case MMCSD_BUS_WIDTH_8: + FSdifSetBusWidth(base_addr, 8U); + break; + default: + LOG_E("Invalid bus width %d", io_cfg->bus_width); + break; + } +} + +static const struct rt_mmcsd_host_ops ops = +{ + fsdif_request_send, + fsdif_set_iocfg, + RT_NULL, + RT_NULL, + RT_NULL, +}; + +void fsdif_change(void) +{ + mmcsd_change(mmc_host[SDIF_CONTROLLER_ID]); +} + +int rt_hw_fsdif_init(void) +{ + /* variables init */ + struct rt_mmcsd_host *host = RT_NULL; + fsdif_info_t *private_data = RT_NULL; + rt_err_t result = RT_EOK; + + host = mmcsd_alloc_host(); + if (!host) + { + LOG_E("Alloc host failed"); + goto err_free; + } + + private_data = rt_malloc(sizeof(fsdif_info_t)); + if (!private_data) + { + LOG_E("Malloc private_data failed"); + goto err_free; + } + + rt_memset(private_data, 0, sizeof(fsdif_info_t)); + private_data->transfer = fsdif_dma_transfer; + result = rt_event_init(&private_data->event, "sdif_event", RT_IPC_FLAG_FIFO); + RT_ASSERT(RT_EOK == result); + + /* host data init */ + host->ops = &ops; + host->freq_min = 400000; + host->freq_max = 50000000; + host->valid_ocr = SDIF_VALID_OCR; /* the voltage range supported is 1.65v-3.6v */ + host->flags = MMCSD_MUTBLKWRITE | MMCSD_BUSWIDTH_4; + host->max_seg_size = SDIF_DMA_BLK_SZ; /* used in block_dev.c */ + host->max_dma_segs = SDIF_MAX_BLK_TRANS; /* physical segment number */ + host->max_blk_size = SDIF_DMA_BLK_SZ; /* all the 4 para limits size of one blk tran */ + host->max_blk_count = SDIF_MAX_BLK_TRANS; + host->private_data = private_data; + + mmc_host[SDIF_CONTROLLER_ID] = host; + + if (RT_EOK != fsdif_ctrl_init(host)) + { + LOG_E("fsdif_ctrl_init() failed"); + goto err_free; + } + + return RT_EOK; + +err_free: + if (host) + { + rt_free(host); + } + if (private_data->mmcsd_instance) + { + rt_free(private_data->mmcsd_instance); + } + if (private_data->rw_desc) + { + rt_free_align(private_data->rw_desc); + } + if (private_data) + { + rt_free(private_data); + } + + return -RT_EOK; +} +INIT_DEVICE_EXPORT(rt_hw_fsdif_init); +#endif // #ifdef RT_USING_SDIO \ No newline at end of file diff --git a/bsp/phytium/libraries/drivers/drv_sdio.h b/bsp/phytium/libraries/drivers/drv_sdif.h similarity index 94% rename from bsp/phytium/libraries/drivers/drv_sdio.h rename to bsp/phytium/libraries/drivers/drv_sdif.h index c1fbf33383..5ced05a4c8 100644 --- a/bsp/phytium/libraries/drivers/drv_sdio.h +++ b/bsp/phytium/libraries/drivers/drv_sdif.h @@ -11,8 +11,8 @@ * */ -#ifndef __DRV_SDIO_H__ -#define __DRV_SDIO_H__ +#ifndef __DRV_SDIF_H__ +#define __DRV_SDIF_H__ /***************************** Include Files *********************************/ #include /************************** Constant Definitions *****************************/ diff --git a/bsp/phytium/libraries/drivers/drv_sdio.c b/bsp/phytium/libraries/drivers/drv_sdio.c deleted file mode 100644 index a80ab7acf3..0000000000 --- a/bsp/phytium/libraries/drivers/drv_sdio.c +++ /dev/null @@ -1,394 +0,0 @@ -/* - * Copyright (c) 2006-2023, RT-Thread Development Team - * - * SPDX-License-Identifier: Apache-2.0 - * - * Email: opensource_embedded@phytium.com.cn - * - * Change Logs: - * Date Author Notes - * 2023/7/11 liqiaozhong init SD card and mount file system - */ - -/***************************** Include Files *********************************/ -#include -#include - -#ifdef BSP_USING_SDIO -#include -#include -#include - -#ifdef RT_USING_SMART - #include "ioremap.h" -#endif -#include "mm_aspace.h" - -#include "ftypes.h" -#if defined(TARGET_E2000) - #include "fparameters.h" -#endif - -#include "fsdio.h" -#include "fsdio_hw.h" - -#include "drv_sdio.h" -/************************** Constant Definitions *****************************/ -#ifdef USING_SDIO0 - #define SDIO_CONTROLLER_ID FSDIO0_ID -#elif defined (USING_SDIO1) - #define SDIO_CONTROLLER_ID FSDIO1_ID -#endif -#define SDIO_TF_CARD_HOST_ID 0x1 -#define SDIO_MALLOC_CAP_DESC 256U -#define SDIO_DMA_ALIGN 512U -#define SDIO_DMA_BLK_SZ 512U -#define SDIO_VALID_OCR 0x00FFFF80 /* supported voltage range is 1.65v-3.6v (VDD_165_195-VDD_35_36) */ -#define SDIO_MAX_BLK_TRANS 20U - -#ifndef CONFIG_SDCARD_OFFSET -#define CONFIG_SDCARD_OFFSET 0x0U -#endif -/**************************** Type Definitions *******************************/ -typedef struct -{ - FSdio *mmcsd_instance; - FSdioIDmaDesc *rw_desc; - rt_err_t (*transfer)(struct rt_mmcsd_host *host, struct rt_mmcsd_req *req, FSdioCmdData *cmd_data_p); -} mmcsd_info_t; -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/*******************************Api Functions*********************************/ -static void fsdio_host_relax(void) -{ - rt_thread_mdelay(1); -} - -static rt_err_t fsdio_ctrl_init(struct rt_mmcsd_host *host) -{ - mmcsd_info_t *private_data_t = (mmcsd_info_t *)host->private_data; - FSdio *mmcsd_instance = RT_NULL; - const FSdioConfig *default_mmcsd_config = RT_NULL; - FSdioConfig mmcsd_config; - FSdioIDmaDesc *rw_desc = RT_NULL; - - mmcsd_instance = rt_malloc(sizeof(FSdio)); - if (!mmcsd_instance) - { - LOG_E("Malloc mmcsd_instance failed"); - return RT_ERROR; - } - - rw_desc = rt_malloc_align(SDIO_MAX_BLK_TRANS * sizeof(FSdioIDmaDesc), SDIO_MALLOC_CAP_DESC); - if (!rw_desc) - { - LOG_E("Malloc rw_desc failed"); - return RT_ERROR; - } - - rt_memset(mmcsd_instance, 0, sizeof(FSdio)); - rt_memset(rw_desc, 0, SDIO_MAX_BLK_TRANS * sizeof(FSdioIDmaDesc)); - - /* SDIO controller init */ - RT_ASSERT((default_mmcsd_config = FSdioLookupConfig(SDIO_CONTROLLER_ID)) != RT_NULL); - mmcsd_config = *default_mmcsd_config; /* load default config */ -#ifdef RT_USING_SMART - mmcsd_config.base_addr = (uintptr)rt_ioremap((void *)mmcsd_config.base_addr, 0x1000); -#endif - mmcsd_config.trans_mode = FSDIO_IDMA_TRANS_MODE; -#ifdef USING_EMMC - mmcsd_config.non_removable = TRUE; /* eMMC is unremovable on board */ -#else - mmcsd_config.non_removable = FALSE; /* TF card is removable on board */ -#endif - - - if (FSDIO_SUCCESS != FSdioCfgInitialize(mmcsd_instance, &mmcsd_config)) - { - LOG_E("SDIO controller init failed."); - return RT_ERROR; - } - - if (FSDIO_SUCCESS != FSdioSetIDMAList(mmcsd_instance, rw_desc, SDIO_MAX_BLK_TRANS)) - { - LOG_E("SDIO controller setup DMA failed."); - return RT_ERROR; - } - mmcsd_instance->desc_list.first_desc_p = (uintptr)rw_desc + PV_OFFSET; - - FSdioRegisterRelaxHandler(mmcsd_instance, fsdio_host_relax); /* SDIO delay for a while */ - - private_data_t->mmcsd_instance = mmcsd_instance; - private_data_t->rw_desc = rw_desc; - - rt_kprintf("SDIO controller init success!\r\n"); - return RT_EOK; -} - -rt_inline rt_err_t sdio_dma_transfer(struct rt_mmcsd_host *host, struct rt_mmcsd_req *req, FSdioCmdData *req_cmd) -{ - FError ret = FT_SUCCESS; - mmcsd_info_t *private_data_t = (mmcsd_info_t *)host->private_data; - FSdio *mmcsd_instance = private_data_t->mmcsd_instance; - - ret = FSdioDMATransfer(mmcsd_instance, req_cmd); - if (ret != FT_SUCCESS) - { - LOG_E("FSdioDMATransfer() fail."); - return -RT_ERROR; - } - - ret = FSdioPollWaitDMAEnd(mmcsd_instance, req_cmd); - if (ret != FT_SUCCESS) - { - LOG_E("FSdioPollWaitDMAEnd() fail."); - return -RT_ERROR; - } - - if (resp_type(req->cmd) & RESP_MASK) - { - if (resp_type(req->cmd) == RESP_R2) - { - req->cmd->resp[3] = req_cmd->response[0]; - req->cmd->resp[2] = req_cmd->response[1]; - req->cmd->resp[1] = req_cmd->response[2]; - req->cmd->resp[0] = req_cmd->response[3]; - } - else - { - req->cmd->resp[0] = req_cmd->response[0]; - } - } - - return RT_EOK; -} - -static void mmc_request_send(struct rt_mmcsd_host *host, struct rt_mmcsd_req *req) -{ - /* ignore some SDIO-ONIY cmd */ - if ((req->cmd->cmd_code == SD_IO_SEND_OP_COND) || (req->cmd->cmd_code == SD_IO_RW_DIRECT)) - { - req->cmd->err = -1; - goto skip_cmd; - } - - mmcsd_info_t *private_data_t = (mmcsd_info_t *)host->private_data; - FSdioCmdData req_cmd; - FSdioCmdData req_stop; - FSdioData req_data; - rt_uint32_t *data_buf_aligned = RT_NULL; - rt_uint32_t cmd_flag = resp_type(req->cmd); - - rt_memset(&req_cmd, 0, sizeof(FSdioCmdData)); - rt_memset(&req_stop, 0, sizeof(FSdioCmdData)); - rt_memset(&req_data, 0, sizeof(FSdioData)); - - /* convert req into ft driver type */ - if (req->cmd->cmd_code == GO_IDLE_STATE) - { - req_cmd.flag |= FSDIO_CMD_FLAG_NEED_INIT; - } - - if (req->cmd->cmd_code == GO_INACTIVE_STATE) - { - req_cmd.flag |= FSDIO_CMD_FLAG_NEED_AUTO_STOP; - } - - if ((cmd_flag != RESP_R3) && (cmd_flag != RESP_R4) && (cmd_flag != RESP_NONE)) - { - req_cmd.flag |= FSDIO_CMD_FLAG_NEED_RESP_CRC; - } - - if (cmd_flag & RESP_MASK) - { - req_cmd.flag |= FSDIO_CMD_FLAG_EXP_RESP; - - if (cmd_flag == RESP_R2) - { - req_cmd.flag |= FSDIO_CMD_FLAG_EXP_LONG_RESP; - } - } - - if (req->data) /* transfer command with data */ - { - data_buf_aligned = rt_malloc_align(SDIO_DMA_BLK_SZ * req->data->blks, SDIO_DMA_ALIGN); - if (!data_buf_aligned) - { - LOG_E("Malloc data_buf_aligned failed"); - return; - } - rt_memset(data_buf_aligned, 0, SDIO_DMA_BLK_SZ * req->data->blks); - - req_cmd.flag |= FSDIO_CMD_FLAG_EXP_DATA; - - req_data.blksz = req->data->blksize; - req_data.blkcnt = req->data->blks + CONFIG_SDCARD_OFFSET; - req_data.datalen = req->data->blksize * req->data->blks; - if ((uintptr)req->data->buf % SDIO_DMA_ALIGN) /* data buffer should be 512-aligned */ - { - if (req->data->flags & DATA_DIR_WRITE) - { - rt_memcpy((void *)data_buf_aligned, (void *)req->data->buf, req_data.datalen); - } - req_data.buf = (rt_uint8_t *)data_buf_aligned; - req_data.buf_p = (uintptr)data_buf_aligned + PV_OFFSET; - } - else - { - req_data.buf = (rt_uint8_t *)req->data->buf; - req_data.buf_p = (uintptr)req->data->buf + PV_OFFSET; - } - req_cmd.data_p = &req_data; - - if (req->data->flags & DATA_DIR_READ) - { - req_cmd.flag |= FSDIO_CMD_FLAG_READ_DATA; - } - else if (req->data->flags & DATA_DIR_WRITE) - { - req_cmd.flag |= FSDIO_CMD_FLAG_WRITE_DATA; - } - } - - req_cmd.cmdidx = req->cmd->cmd_code; - req_cmd.cmdarg = req->cmd->arg; - - /* do cmd and data transfer */ - req->cmd->err = (private_data_t->transfer)(host, req, &req_cmd); - if (req->cmd->err != RT_EOK) - { - LOG_E("transfer failed in %s", __func__); - } - - if (req->data && (req->data->flags & DATA_DIR_READ)) - { - if ((uintptr)req->data->buf % SDIO_DMA_ALIGN) /* data buffer should be 512-aligned */ - { - rt_memcpy((void *)req->data->buf, (void *)data_buf_aligned, req_data.datalen); - } - } - - /* stop cmd */ - if (req->stop) - { - req_stop.cmdidx = req->stop->cmd_code; - req_stop.cmdarg = req->stop->arg; - if (req->stop->flags & RESP_MASK) - { - req_stop.flag |= FSDIO_CMD_FLAG_READ_DATA; - if (resp_type(req->stop) == RESP_R2) - req_stop.flag |= FSDIO_CMD_FLAG_EXP_LONG_RESP; - } - req->stop->err = (private_data_t->transfer)(host, req, &req_stop); - } - - if (data_buf_aligned) - rt_free_align(data_buf_aligned); - -skip_cmd: - mmcsd_req_complete(host); -} - -static void mmc_set_iocfg(struct rt_mmcsd_host *host, struct rt_mmcsd_io_cfg *io_cfg) -{ - FError ret = FT_SUCCESS; - mmcsd_info_t *private_data_t = (mmcsd_info_t *)host->private_data; - FSdio *mmcsd_instance = private_data_t->mmcsd_instance; - uintptr base_addr = mmcsd_instance->config.base_addr; - - if (0 != io_cfg->clock) - { - ret = FSdioSetClkFreq(mmcsd_instance, io_cfg->clock); - if (ret != FT_SUCCESS) - { - LOG_E("FSdioSetClkFreq fail."); - } - } - - switch (io_cfg->bus_width) - { - case MMCSD_BUS_WIDTH_1: - FSdioSetBusWidth(base_addr, 1U); - break; - case MMCSD_BUS_WIDTH_4: - FSdioSetBusWidth(base_addr, 4U); - break; - case MMCSD_BUS_WIDTH_8: - FSdioSetBusWidth(base_addr, 8U); - break; - default: - LOG_E("Invalid bus width %d", io_cfg->bus_width); - break; - } -} - -static const struct rt_mmcsd_host_ops ops = -{ - mmc_request_send, - mmc_set_iocfg, - RT_NULL, - RT_NULL, - RT_NULL, -}; - -int ft_mmcsd_init(void) -{ - /* variables init */ - struct rt_mmcsd_host *host = RT_NULL; - mmcsd_info_t *private_data = RT_NULL; - - host = mmcsd_alloc_host(); - if (!host) - { - LOG_E("Alloc host failed"); - goto err_free; - } - - private_data = rt_malloc(sizeof(mmcsd_info_t)); - if (!private_data) - { - LOG_E("Malloc private_data failed"); - goto err_free; - } - - rt_memset(private_data, 0, sizeof(mmcsd_info_t)); - private_data->transfer = sdio_dma_transfer; - - /* host data init */ - host->ops = &ops; - host->freq_min = 400000; - host->freq_max = 50000000; - host->valid_ocr = SDIO_VALID_OCR; /* the voltage range supported is 1.65v-3.6v */ - host->flags = MMCSD_MUTBLKWRITE | MMCSD_BUSWIDTH_4; - host->max_seg_size = SDIO_DMA_BLK_SZ; /* used in block_dev.c */ - host->max_dma_segs = SDIO_MAX_BLK_TRANS; /* physical segment number */ - host->max_blk_size = SDIO_DMA_BLK_SZ; /* all the 4 para limits size of one blk tran */ - host->max_blk_count = SDIO_MAX_BLK_TRANS; - host->private_data = private_data; - - if (RT_EOK != fsdio_ctrl_init(host)) - { - LOG_E("fsdio_ctrl_init() failed"); - goto err_free; - } - - mmcsd_change(host); - - return RT_EOK; - -err_free: - if (host) - rt_free(host); - if (private_data->mmcsd_instance) - rt_free(private_data->mmcsd_instance); - if (private_data->rw_desc) - rt_free_align(private_data->rw_desc); - if (private_data) - rt_free(private_data); - - return -RT_EOK; -} -INIT_DEVICE_EXPORT(ft_mmcsd_init); -#endif // #ifdef RT_USING_SDIO \ No newline at end of file diff --git a/bsp/phytium/libraries/drivers/drv_spi.c b/bsp/phytium/libraries/drivers/drv_spi.c index 2b1d2130b8..4296957ab6 100644 --- a/bsp/phytium/libraries/drivers/drv_spi.c +++ b/bsp/phytium/libraries/drivers/drv_spi.c @@ -11,23 +11,24 @@ * 2023-03-08 liqiaozhong support 4 spis and qspi working together * */ +#include"rtconfig.h" +#ifdef BSP_USING_SPI + #include #include #include "interrupt.h" - +#define LOG_TAG "spi_drv" +#include "drv_log.h" #include -#include "fdebug.h" #if defined(TARGET_E2000) -#include "fparameters.h" + #include "fparameters.h" #endif #include "fcpu_info.h" #include "fkernel.h" #include "ftypes.h" -#include "fsleep.h" -#ifdef RT_USING_SPI #include @@ -56,16 +57,11 @@ static struct rt_spi_device *spi_device = RT_NULL; static struct rt_event rx_done_event; /***************** Macros (Inline Functions) Definitions *********************/ -#define FSPIM_DEBUG_TAG "SPIM" -#define FSPIM_ERROR(format, ...) FT_DEBUG_PRINT_E(FSPIM_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSPIM_WARN(format, ...) FT_DEBUG_PRINT_W(FSPIM_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSPIM_INFO(format, ...) FT_DEBUG_PRINT_I(FSPIM_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSPIM_DEBUG(format, ...) FT_DEBUG_PRINT_D(FSPIM_DEBUG_TAG, format, ##__VA_ARGS__) #define EVENT_RX_DONE (1 << 1) /*******************************Api Functions*********************************/ -static rt_err_t spim_configure(struct rt_spi_device* device, struct rt_spi_configuration* configuration); -static rt_uint32_t spim_xfer(struct rt_spi_device* device, struct rt_spi_message* message); +static rt_err_t spim_configure(struct rt_spi_device *device, struct rt_spi_configuration *configuration); +static rt_uint32_t spim_xfer(struct rt_spi_device *device, struct rt_spi_message *message); static FError FSpimSetupInterrupt(FSpim *instance_p) { @@ -75,16 +71,16 @@ static FError FSpimSetupInterrupt(FSpim *instance_p) u32 cpu_id = 0; GetCpuId(&cpu_id); - FSPIM_DEBUG("cpu_id is %d, irq_num is %d\n", cpu_id, config_p->irq_num); + LOG_D("cpu_id is %d, irq_num is %d\n", cpu_id, config_p->irq_num); config_p->irq_prority = 0xd0; rt_hw_interrupt_set_target_cpus(config_p->irq_num, cpu_id); rt_hw_interrupt_set_priority(config_p->irq_num, config_p->irq_prority); /* register intr callback */ rt_hw_interrupt_install(config_p->irq_num, - FSpimInterruptHandler, - instance_p, - NULL); + FSpimInterruptHandler, + instance_p, + NULL); /* enable tx fifo overflow / rx overflow / rx full */ FSpimMaskIrq(base_addr, FSPIM_IMR_ALL_BITS); @@ -109,7 +105,7 @@ static const struct rt_spi_ops spim_ops = }; static rt_err_t spim_configure(struct rt_spi_device *device, - struct rt_spi_configuration *configuration) + struct rt_spi_configuration *configuration) { FError ret = FSPIM_SUCCESS; RT_ASSERT(device != RT_NULL); @@ -117,7 +113,7 @@ static rt_err_t spim_configure(struct rt_spi_device *device, struct drv_spi *user_data_cfg = device->parent.user_data; FSpimConfig input_cfg = *FSpimLookupConfig(user_data_cfg->spi_id); #ifdef RT_USING_SMART - input_cfg.base_addr = (uintptr)rt_ioremap((void*)input_cfg.base_addr, 0x1000); + input_cfg.base_addr = (uintptr)rt_ioremap((void *)input_cfg.base_addr, 0x1000); #endif FSpimConfig *set_input_cfg = &input_cfg; @@ -151,12 +147,16 @@ static rt_err_t spim_configure(struct rt_spi_device *device, /* send spi_cfg to RT-Thread sys */ ret = FSpimCfgInitialize(&user_data_cfg->spim_instance, &input_cfg); if (FSPIM_SUCCESS != ret) + { return RT_ERROR; + } /* irq setting */ ret = FSpimSetupInterrupt(&user_data_cfg->spim_instance); if (FSPIM_SUCCESS != ret) + { return RT_ERROR; + } FSpimRegisterIntrruptHandler(&user_data_cfg->spim_instance, FSPIM_INTR_EVT_RX_DONE, rt_ft_send_event_done, NULL); return ret; @@ -244,53 +244,53 @@ int ft_spi_init(void) rt_kprintf("Spi bus spi0 init\n"); /* spi device init and attach to bus */ - #ifdef RT_USING_SPIM0 - _RTSpim0.spi_id = FSPI0_ID; - result = rt_spi_bus_attach_device(&_RTSpim0.device, "spi00", "spi0", &_RTSpim0); - spi_device = (struct rt_spi_device *)rt_device_find("spi00"); - if (RT_NULL == spi_device) - { - rt_kprintf("Spi init failed -> can't find spi00 device!\n"); - return RT_ERROR; - } - rt_kprintf("Spi master device spi00 init.\n"); - #endif +#ifdef RT_USING_SPIM0 + _RTSpim0.spi_id = FSPI0_ID; + result = rt_spi_bus_attach_device(&_RTSpim0.device, "spi00", "spi0", &_RTSpim0); + spi_device = (struct rt_spi_device *)rt_device_find("spi00"); + if (RT_NULL == spi_device) + { + rt_kprintf("Spi init failed -> can't find spi00 device!\n"); + return RT_ERROR; + } + rt_kprintf("Spi master device spi00 init.\n"); +#endif - #ifdef RT_USING_SPIM1 - _RTSpim1.spi_id = FSPI1_ID; - result = rt_spi_bus_attach_device(&_RTSpim1.device, "spi01", "spi0", &_RTSpim1); - spi_device = (struct rt_spi_device *)rt_device_find("spi01"); - if (RT_NULL == spi_device) - { - rt_kprintf("Spi init failed -> can't find spi01 device!\n"); - return RT_ERROR; - } - rt_kprintf("Spi master device spi01 init.\n"); - #endif +#ifdef RT_USING_SPIM1 + _RTSpim1.spi_id = FSPI1_ID; + result = rt_spi_bus_attach_device(&_RTSpim1.device, "spi01", "spi0", &_RTSpim1); + spi_device = (struct rt_spi_device *)rt_device_find("spi01"); + if (RT_NULL == spi_device) + { + rt_kprintf("Spi init failed -> can't find spi01 device!\n"); + return RT_ERROR; + } + rt_kprintf("Spi master device spi01 init.\n"); +#endif - #ifdef RT_USING_SPIM2 - _RTSpim2.spi_id = FSPI2_ID; - result = rt_spi_bus_attach_device(&_RTSpim2.device, "spi02", "spi0", &_RTSpim2); - spi_device = (struct rt_spi_device *)rt_device_find("spi02"); - if (RT_NULL == spi_device) - { - rt_kprintf("Spi init failed -> can't find spi02 device!\n"); - return RT_ERROR; - } - rt_kprintf("Spi master device spi02 init.\n"); - #endif +#ifdef RT_USING_SPIM2 + _RTSpim2.spi_id = FSPI2_ID; + result = rt_spi_bus_attach_device(&_RTSpim2.device, "spi02", "spi0", &_RTSpim2); + spi_device = (struct rt_spi_device *)rt_device_find("spi02"); + if (RT_NULL == spi_device) + { + rt_kprintf("Spi init failed -> can't find spi02 device!\n"); + return RT_ERROR; + } + rt_kprintf("Spi master device spi02 init.\n"); +#endif - #ifdef RT_USING_SPIM3 - _RTSpim3.spi_id = FSPI3_ID; - result = rt_spi_bus_attach_device(&_RTSpim3.device, "spi03", "spi0", &_RTSpim3); - spi_device = (struct rt_spi_device *)rt_device_find("spi03"); - if (RT_NULL == spi_device) - { - rt_kprintf("Spi init failed -> can't find spi03 device!\n"); - return RT_ERROR; - } - rt_kprintf("Spi master device spi03 init.\n"); - #endif +#ifdef RT_USING_SPIM3 + _RTSpim3.spi_id = FSPI3_ID; + result = rt_spi_bus_attach_device(&_RTSpim3.device, "spi03", "spi0", &_RTSpim3); + spi_device = (struct rt_spi_device *)rt_device_find("spi03"); + if (RT_NULL == spi_device) + { + rt_kprintf("Spi init failed -> can't find spi03 device!\n"); + return RT_ERROR; + } + rt_kprintf("Spi master device spi03 init.\n"); +#endif return result; @@ -338,4 +338,5 @@ static void fspim_test_sample(int argc, char *argv[]) } } MSH_CMD_EXPORT(fspim_test_sample, "fspim test sample"); + #endif diff --git a/bsp/phytium/libraries/drivers/drv_spi.h b/bsp/phytium/libraries/drivers/drv_spi.h index be5a6aab7b..155ad22b3d 100644 --- a/bsp/phytium/libraries/drivers/drv_spi.h +++ b/bsp/phytium/libraries/drivers/drv_spi.h @@ -14,6 +14,7 @@ #define __DRV_SPI_H__ #include +#ifdef BSP_USING_SPI struct drv_spi { @@ -22,6 +23,7 @@ struct drv_spi struct rt_spi_device device; }; +#endif #endif diff --git a/bsp/phytium/libraries/drivers/drv_usart.c b/bsp/phytium/libraries/drivers/drv_usart.c index 7601346b5f..d171dbdeb4 100644 --- a/bsp/phytium/libraries/drivers/drv_usart.c +++ b/bsp/phytium/libraries/drivers/drv_usart.c @@ -11,17 +11,14 @@ * 2023-04-27 huanghe support RT-Smart */ +#include "rtconfig.h" +#ifdef BSP_USING_UART + #include "board.h" - #include - #include "drv_usart.h" #include "interrupt.h" #include "fpl011.h" -#include "rtconfig.h" -#include "fprintk.h" - -#ifdef RT_USING_SERIAL extern u32 FUart_GetInterruptMask(FPl011 *uart_ptr); @@ -46,7 +43,7 @@ static rt_err_t uart_configure(struct rt_serial_device *serial, struct serial_co config = *(const FPl011Config *)FPl011LookupConfig(uart->config.uart_instance); #ifdef RT_USING_SMART - config.base_address = (uintptr)rt_ioremap((void*)config.base_address, 0x1000); + config.base_address = (uintptr)rt_ioremap((void *)config.base_address, 0x1000); #endif RT_ASSERT(FPl011CfgInitialize(uart_hw, &config) == FT_SUCCESS); @@ -78,15 +75,15 @@ static rt_err_t uart_control(struct rt_serial_device *serial, int cmd, void *arg switch (cmd) { - case RT_DEVICE_CTRL_CLR_INT: - /* disable rx irq */ - rt_hw_interrupt_mask(uart_ptr->config.irq_num); - break; + case RT_DEVICE_CTRL_CLR_INT: + /* disable rx irq */ + rt_hw_interrupt_mask(uart_ptr->config.irq_num); + break; - case RT_DEVICE_CTRL_SET_INT: - /* enable rx irq */ - rt_hw_interrupt_umask(uart_ptr->config.irq_num); - break; + case RT_DEVICE_CTRL_SET_INT: + /* enable rx irq */ + rt_hw_interrupt_umask(uart_ptr->config.irq_num); + break; } return RT_EOK; @@ -99,7 +96,9 @@ static void Ft_Os_Uart_Callback(void *Args, u32 Event, u32 EventData) if (FPL011_EVENT_RECV_DATA == Event || FPL011_EVENT_RECV_TOUT == Event) { if (serial->serial_rx) + { rt_hw_serial_isr(serial, RT_SERIAL_EVENT_RX_IND); + } } else if (FPL011_EVENT_RECV_ERROR == Event) { @@ -258,4 +257,4 @@ int rt_hw_uart_init(void) } INIT_BOARD_EXPORT(rt_hw_uart_init); -#endif /* RT_USING_SERIAL */ +#endif diff --git a/bsp/phytium/libraries/drivers/drv_usart.h b/bsp/phytium/libraries/drivers/drv_usart.h index ed7e532c8c..6ca3433ff8 100644 --- a/bsp/phytium/libraries/drivers/drv_usart.h +++ b/bsp/phytium/libraries/drivers/drv_usart.h @@ -16,6 +16,8 @@ #include #include "rtdevice.h" +#ifdef BSP_USING_UART + #include "fpl011.h" #include "fpl011_hw.h" @@ -27,7 +29,6 @@ #define RTOS_UART_ISR_TXIM_MASK FPL011IMSC_TXIM /* Transmit interrupt mask. */ #define RTOS_UART_ISR_RXIM_MASK FPL011IMSC_RXIM /* Receive interrupt mask. */ - typedef struct { u32 uart_instance; /* select uart global object */ @@ -36,7 +37,6 @@ typedef struct u32 uart_baudrate; } FtFreertosUartConfig; - struct drv_usart { FPl011 *handle; @@ -45,3 +45,5 @@ struct drv_usart }; #endif // ! + +#endif diff --git a/bsp/phytium/libraries/drivers/drv_xmac.c b/bsp/phytium/libraries/drivers/drv_xmac.c index f8207ee730..d8cf99f9fd 100644 --- a/bsp/phytium/libraries/drivers/drv_xmac.c +++ b/bsp/phytium/libraries/drivers/drv_xmac.c @@ -11,10 +11,13 @@ * 2023-07-14 liuzhihong support RT-Smart */ -#include "board.h" +#include"rtconfig.h" #ifdef BSP_USING_ETH +#include "board.h" +#define LOG_TAG "xmac_drv" +#include "drv_log.h" #include "mm_aspace.h" #ifdef RT_USING_SMART #include "ioremap.h" @@ -28,17 +31,6 @@ #include "drv_xmac.h" - -#define FXMAC_OS_XMAC_DEBUG_TAG "FXMAC_OS_XMAC" -#define FXMAC_OS_XMAC_PRINT_E(format, ...) FT_DEBUG_PRINT_E(FXMAC_OS_XMAC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FXMAC_OS_XMAC_PRINT_I(format, ...) FT_DEBUG_PRINT_I(FXMAC_OS_XMAC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FXMAC_OS_XMAC_PRINT_D(format, ...) FT_DEBUG_PRINT_D(FXMAC_OS_XMAC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FXMAC_OS_XMAC_PRINT_W(format, ...) FT_DEBUG_PRINT_W(FXMAC_OS_XMAC_DEBUG_TAG, format, ##__VA_ARGS__) - -#define LOG_E(format, ...) FT_DEBUG_PRINT_E(FXMAC_OS_XMAC_DEBUG_TAG, format, ##__VA_ARGS__) -#define LOG_I(format, ...) FT_DEBUG_PRINT_I(FXMAC_OS_XMAC_DEBUG_TAG, format, ##__VA_ARGS__) -#define LOG_D(format, ...) FT_DEBUG_PRINT_D(FXMAC_OS_XMAC_DEBUG_TAG, format, ##__VA_ARGS__) - #define FXMAC_BD_TO_INDEX(ringptr, bdptr) \ (((uintptr)bdptr - (uintptr)(ringptr)->base_bd_addr) / (ringptr)->separation) @@ -182,7 +174,7 @@ void FXmacProcessSentBds(FXmacOs *instance_p, FXmacBdRing *txring) status = FXmacBdRingFree(txring, n_bds, txbdset); if (status != FT_SUCCESS) { - FXMAC_OS_XMAC_PRINT_I("Failure while freeing in Tx Done ISR."); + LOG_I("Failure while freeing in Tx Done ISR."); } } return; @@ -228,7 +220,7 @@ FError FXmacSgsend(FXmacOs *instance_p, struct pbuf *p) status = FXmacBdRingAlloc(txring, n_pbufs, &txbdset); if (status != FT_SUCCESS) { - FXMAC_OS_XMAC_PRINT_I("sgsend: Error allocating TxBD."); + LOG_I("sgsend: Error allocating TxBD."); return ERR_GENERAL; } @@ -238,9 +230,9 @@ FError FXmacSgsend(FXmacOs *instance_p, struct pbuf *p) if (instance_p->buffer.tx_pbufs_storage[bdindex]) { - FXMAC_OS_XMAC_PRINT_I("txbd %p, txring->base_bd_addr %p", txbd, txring->base_bd_addr); - FXMAC_OS_XMAC_PRINT_I("PBUFS not available bdindex is %d ", bdindex); - FXMAC_OS_XMAC_PRINT_I("instance_p->buffer.tx_pbufs_storage[bdindex] %p ", instance_p->buffer.tx_pbufs_storage[bdindex]); + LOG_I("txbd %p, txring->base_bd_addr %p", txbd, txring->base_bd_addr); + LOG_I("PBUFS not available bdindex is %d ", bdindex); + LOG_I("instance_p->buffer.tx_pbufs_storage[bdindex] %p ", instance_p->buffer.tx_pbufs_storage[bdindex]); return ERR_GENERAL; } @@ -298,7 +290,7 @@ FError FXmacSgsend(FXmacOs *instance_p, struct pbuf *p) status = FXmacBdRingToHw(txring, n_pbufs, txbdset); if (status != FT_SUCCESS) { - FXMAC_OS_XMAC_PRINT_I("sgsend: Error submitting TxBD."); + LOG_I("sgsend: Error submitting TxBD."); return ERR_GENERAL; } /* Start transmit */ @@ -340,27 +332,27 @@ void SetupRxBds(FXmacOs *instance_p, FXmacBdRing *rxring) lwip_stats.link.memerr++; lwip_stats.link.drop++; #endif - FXMAC_OS_XMAC_PRINT_I("Unable to alloc pbuf in recv_handler."); + LOG_I("Unable to alloc pbuf in recv_handler."); return; } status = FXmacBdRingAlloc(rxring, 1, &rxbd); if (status != FT_SUCCESS) { - FXMAC_OS_XMAC_PRINT_I("SetupRxBds: Error allocating RxBD."); + LOG_I("SetupRxBds: Error allocating RxBD."); pbuf_free(p); return; } status = FXmacBdRingToHw(rxring, 1, rxbd); if (status != FT_SUCCESS) { - FXMAC_OS_XMAC_PRINT_I("Error committing RxBD to hardware: "); + LOG_I("Error committing RxBD to hardware: "); if (status == FXMAC_ERR_SG_LIST) { - FXMAC_OS_XMAC_PRINT_I("XST_DMA_SG_LIST_ERROR: this function was called out of sequence with FXmacBdRingAlloc()."); + LOG_I("XST_DMA_SG_LIST_ERROR: this function was called out of sequence with FXmacBdRingAlloc()."); } else { - FXMAC_OS_XMAC_PRINT_I("Set of BDs was rejected because the first BD did not have its start-of-packet bit set, or the last BD did not have its end-of-packet bit set, or any one of the BD set has 0 as length value."); + LOG_I("Set of BDs was rejected because the first BD did not have its start-of-packet bit set, or the last BD did not have its end-of-packet bit set, or any one of the BD set has 0 as length value."); } pbuf_free(p); @@ -525,11 +517,11 @@ FError FXmacInitDma(FXmacOs *instance_p) rxringptr = &FXMAC_GET_RXRING(instance_p->instance); txringptr = &FXMAC_GET_TXRING(instance_p->instance); - FXMAC_OS_XMAC_PRINT_I("rxringptr: 0x%08x", rxringptr); - FXMAC_OS_XMAC_PRINT_I("txringptr: 0x%08x", txringptr); + LOG_I("rxringptr: 0x%08x", rxringptr); + LOG_I("txringptr: 0x%08x", txringptr); - FXMAC_OS_XMAC_PRINT_I("rx_bdspace: %p ", instance_p->buffer.rx_bdspace); - FXMAC_OS_XMAC_PRINT_I("tx_bdspace: %p ", instance_p->buffer.tx_bdspace); + LOG_I("rx_bdspace: %p ", instance_p->buffer.rx_bdspace); + LOG_I("tx_bdspace: %p ", instance_p->buffer.tx_bdspace); /* Setup RxBD space. */ FXMAC_BD_CLEAR(&bdtemplate); @@ -545,14 +537,14 @@ FError FXmacInitDma(FXmacOs *instance_p) if (status != FT_SUCCESS) { - FXMAC_OS_XMAC_PRINT_I("Error setting up RxBD space."); + LOG_I("Error setting up RxBD space."); return ERR_IF; } status = FXmacBdRingClone(rxringptr, &bdtemplate, FXMAC_RECV); if (status != FT_SUCCESS) { - FXMAC_OS_XMAC_PRINT_I("Error initializing RxBD space."); + LOG_I("Error initializing RxBD space."); return ERR_IF; } @@ -600,13 +592,13 @@ FError FXmacInitDma(FXmacOs *instance_p) lwip_stats.link.memerr++; lwip_stats.link.drop++; #endif - FXMAC_OS_XMAC_PRINT_E("Unable to alloc pbuf in InitDma."); + LOG_E("Unable to alloc pbuf in InitDma."); return ERR_IF; } status = FXmacBdRingAlloc(rxringptr, 1, &rxbd); if (status != FT_SUCCESS) { - FXMAC_OS_XMAC_PRINT_E("InitDma: Error allocating RxBD."); + LOG_E("InitDma: Error allocating RxBD."); pbuf_free(p); return ERR_IF; } @@ -614,7 +606,7 @@ FError FXmacInitDma(FXmacOs *instance_p) status = FXmacBdRingToHw(rxringptr, 1, rxbd); if (status != FT_SUCCESS) { - FXMAC_OS_XMAC_PRINT_E("Error: committing RxBD to HW."); + LOG_E("Error: committing RxBD to HW."); pbuf_free(p); FXmacBdRingUnAlloc(rxringptr, 1, rxbd); return ERR_IF; @@ -692,7 +684,7 @@ static void FreeTxRxPbufs(FXmacOs *instance_p) /* return one packet from receive q */ p = (struct pbuf *)FXmacPqDequeue(&instance_p->recv_q); pbuf_free(p); - FXMAC_OS_XMAC_PRINT_E("Delete queue %p", p); + LOG_E("Delete queue %p", p); rx_queue_len--; } FreeOnlyTxPbufs(instance_p); @@ -711,7 +703,7 @@ static void FXmacHandleDmaTxError(FXmacOs *instance_p) if (status != FT_SUCCESS) { - FXMAC_OS_XMAC_PRINT_E("In %s:EmacPs Configuration Failed....", __func__); + LOG_E("In %s:EmacPs Configuration Failed....", __func__); } /* initialize the mac */ @@ -757,52 +749,52 @@ void FXmacErrorHandler(void *arg, u8 direction, u32 error_word) { switch (direction) { - case FXMAC_RECV: - if (error_word & FXMAC_RXSR_HRESPNOK_MASK) - { - FXMAC_OS_XMAC_PRINT_I("Receive DMA error."); - FXmacHandleDmaTxError(instance_p); - } - if (error_word & FXMAC_RXSR_RXOVR_MASK) - { - FXMAC_OS_XMAC_PRINT_I("Receive over run."); - FXmacRecvHandler(instance_p); - SetupRxBds(instance_p, rxring); - } - if (error_word & FXMAC_RXSR_BUFFNA_MASK) - { - FXMAC_OS_XMAC_PRINT_I("Receive buffer not available."); - FXmacRecvHandler(arg); - SetupRxBds(instance_p, rxring); - } - break; - case FXMAC_SEND: - if (error_word & FXMAC_TXSR_HRESPNOK_MASK) - { - FXMAC_OS_XMAC_PRINT_I("Transmit DMA error."); - FXmacHandleDmaTxError(instance_p); - } - if (error_word & FXMAC_TXSR_URUN_MASK) - { - FXMAC_OS_XMAC_PRINT_I("Transmit under run."); - FXmacHandleTxErrors(instance_p); - } - if (error_word & FXMAC_TXSR_BUFEXH_MASK) - { - FXMAC_OS_XMAC_PRINT_I("Transmit buffer exhausted."); - FXmacHandleTxErrors(instance_p); - } - if (error_word & FXMAC_TXSR_RXOVR_MASK) - { - FXMAC_OS_XMAC_PRINT_I("Transmit retry excessed limits."); - FXmacHandleTxErrors(instance_p); - } - if (error_word & FXMAC_TXSR_FRAMERX_MASK) - { - FXMAC_OS_XMAC_PRINT_I("Transmit collision."); - FXmacProcessSentBds(instance_p, txring); - } - break; + case FXMAC_RECV: + if (error_word & FXMAC_RXSR_HRESPNOK_MASK) + { + LOG_I("Receive DMA error."); + FXmacHandleDmaTxError(instance_p); + } + if (error_word & FXMAC_RXSR_RXOVR_MASK) + { + LOG_I("Receive over run."); + FXmacRecvHandler(instance_p); + SetupRxBds(instance_p, rxring); + } + if (error_word & FXMAC_RXSR_BUFFNA_MASK) + { + LOG_I("Receive buffer not available."); + FXmacRecvHandler(arg); + SetupRxBds(instance_p, rxring); + } + break; + case FXMAC_SEND: + if (error_word & FXMAC_TXSR_HRESPNOK_MASK) + { + LOG_I("Transmit DMA error."); + FXmacHandleDmaTxError(instance_p); + } + if (error_word & FXMAC_TXSR_URUN_MASK) + { + LOG_I("Transmit under run."); + FXmacHandleTxErrors(instance_p); + } + if (error_word & FXMAC_TXSR_BUFEXH_MASK) + { + LOG_I("Transmit buffer exhausted."); + FXmacHandleTxErrors(instance_p); + } + if (error_word & FXMAC_TXSR_RXOVR_MASK) + { + LOG_I("Transmit retry excessed limits."); + FXmacHandleTxErrors(instance_p); + } + if (error_word & FXMAC_TXSR_FRAMERX_MASK) + { + LOG_I("Transmit collision."); + FXmacProcessSentBds(instance_p, txring); + } + break; } } } @@ -822,34 +814,34 @@ void FXmacLinkChange(void *arg) if (xmac_p->config.interface == FXMAC_PHY_INTERFACE_MODE_SGMII) { - FXMAC_OS_XMAC_PRINT_I("xmac_p->config.base_address is %p", xmac_p->config.base_address); + LOG_I("xmac_p->config.base_address is %p", xmac_p->config.base_address); ctrl = FXMAC_READREG32(xmac_p->config.base_address, FXMAC_PCS_AN_LP_OFFSET); link = (ctrl & FXMAC_PCS_LINK_PARTNER_NEXT_PAGE_STATUS) >> 15; - FXMAC_OS_XMAC_PRINT_I("Link status is 0x%x", link); + LOG_I("Link status is 0x%x", link); switch (link) { - case 0: - link_status = FXMAC_LINKDOWN; - break; - case 1: - link_status = FXMAC_LINKUP; - break; - default: - FXMAC_OS_XMAC_PRINT_E("Link status is error 0x%x ", link); - return; + case 0: + link_status = FXMAC_LINKDOWN; + break; + case 1: + link_status = FXMAC_LINKUP; + break; + default: + LOG_E("Link status is error 0x%x ", link); + return; } if (xmac_p->config.auto_neg == 0) { if (link_status == FXMAC_LINKUP) { - FXMAC_OS_XMAC_PRINT_I("No neg link up (%d/%s)", xmac_p->config.speed, xmac_p->config.duplex == 1 ? "FULL" : "Half"); + LOG_I("No neg link up (%d/%s)", xmac_p->config.speed, xmac_p->config.duplex == 1 ? "FULL" : "Half"); xmac_p->link_status = FXMAC_NEGOTIATING; } else { - FXMAC_OS_XMAC_PRINT_I("No neg link down."); + LOG_I("No neg link down."); xmac_p->link_status = FXMAC_LINKDOWN; } } @@ -874,14 +866,14 @@ void FXmacLinkChange(void *arg) if (link_status != xmac_p->link_status) { - FXMAC_OS_XMAC_PRINT_I("Sgmii link_status has changed."); + LOG_I("Sgmii link_status has changed."); } /* add erase NCFGR config */ if ((speed != xmac_p->config.speed) || (duplex != xmac_p->config.duplex)) { - FXMAC_OS_XMAC_PRINT_I("Sgmii link_status has changed."); - FXMAC_OS_XMAC_PRINT_I("New speed is %d, duplex is %d", speed, duplex); + LOG_I("Sgmii link_status has changed."); + LOG_I("New speed is %d, duplex is %d", speed, duplex); } if (link_status == FXMAC_LINKUP) @@ -889,13 +881,13 @@ void FXmacLinkChange(void *arg) if (link_status != xmac_p->link_status) { xmac_p->link_status = FXMAC_NEGOTIATING; - FXMAC_OS_XMAC_PRINT_I("Need NEGOTIATING."); + LOG_I("Need NEGOTIATING."); } } else { xmac_p->link_status = link_status; - FXMAC_OS_XMAC_PRINT_I("Change status is 0x%x", link_status); + LOG_I("Change status is 0x%x", link_status); } } } @@ -962,34 +954,34 @@ enum lwip_port_link_status FXmacLwipPortLinkDetect(FXmacOs *instance_p) switch (xmac_p->link_status) { - case FXMAC_LINKUP: - return ETH_LINK_UP; - case FXMAC_LINKDOWN: - xmac_p->link_status = FXMAC_NEGOTIATING; - FXMAC_OS_XMAC_PRINT_D("Ethernet Link down."); - return ETH_LINK_DOWN; - case FXMAC_NEGOTIATING: - if ((phy_link_status == FXMAC_LINKUP) && FXmacPhyAutonegStatus(xmac_p, xmac_p->phy_address)) - { - err_t phy_ret; - phy_ret = FXmacPhyInit(xmac_p, xmac_p->config.speed, xmac_p->config.duplex, xmac_p->config.auto_neg); - - if (phy_ret != FT_SUCCESS) - { - FXMAC_OS_XMAC_PRINT_E("FXmacPhyInit is error."); - return ETH_LINK_DOWN; - } - FXmacSelectClk(xmac_p); - FXmacInitInterface(xmac_p); - - /* Initiate Phy setup to get link speed */ - xmac_p->link_status = FXMAC_LINKUP; - FXMAC_OS_XMAC_PRINT_D("Ethernet Link up."); + case FXMAC_LINKUP: return ETH_LINK_UP; - } - return ETH_LINK_DOWN; - default: - return ETH_LINK_DOWN; + case FXMAC_LINKDOWN: + xmac_p->link_status = FXMAC_NEGOTIATING; + LOG_D("Ethernet Link down."); + return ETH_LINK_DOWN; + case FXMAC_NEGOTIATING: + if ((phy_link_status == FXMAC_LINKUP) && FXmacPhyAutonegStatus(xmac_p, xmac_p->phy_address)) + { + err_t phy_ret; + phy_ret = FXmacPhyInit(xmac_p, xmac_p->config.speed, xmac_p->config.duplex, xmac_p->config.auto_neg); + + if (phy_ret != FT_SUCCESS) + { + LOG_E("FXmacPhyInit is error."); + return ETH_LINK_DOWN; + } + FXmacSelectClk(xmac_p); + FXmacInitInterface(xmac_p); + + /* Initiate Phy setup to get link speed */ + xmac_p->link_status = FXMAC_LINKUP; + LOG_D("Ethernet Link up."); + return ETH_LINK_UP; + } + return ETH_LINK_DOWN; + default: + return ETH_LINK_DOWN; } } @@ -1009,7 +1001,7 @@ enum lwip_port_link_status FXmacPhyReconnect(FXmacOs *instance_p) phy_ret = FXmacPhyInit(xmac_p, xmac_p->config.speed, xmac_p->config.duplex, xmac_p->config.auto_neg); if (phy_ret != FT_SUCCESS) { - FXMAC_OS_XMAC_PRINT_I("FXmacPhyInit is error."); + LOG_I("FXmacPhyInit is error."); rt_hw_interrupt_umask(xmac_p->config.queue_irq_num[0]); return ETH_LINK_DOWN; } @@ -1022,12 +1014,12 @@ enum lwip_port_link_status FXmacPhyReconnect(FXmacOs *instance_p) switch (xmac_p->link_status) { - case FXMAC_LINKDOWN: - return ETH_LINK_DOWN; - case FXMAC_LINKUP: - return ETH_LINK_UP; - default: - return ETH_LINK_DOWN; + case FXMAC_LINKDOWN: + return ETH_LINK_DOWN; + case FXMAC_LINKUP: + return ETH_LINK_UP; + default: + return ETH_LINK_DOWN; } } else if ((xmac_p->config.interface == FXMAC_PHY_INTERFACE_MODE_RMII) || (xmac_p->config.interface == FXMAC_PHY_INTERFACE_MODE_RGMII)) @@ -1038,12 +1030,12 @@ enum lwip_port_link_status FXmacPhyReconnect(FXmacOs *instance_p) { switch (xmac_p->link_status) { - case FXMAC_LINKDOWN: - return ETH_LINK_DOWN; - case FXMAC_LINKUP: - return ETH_LINK_UP; - default: - return ETH_LINK_DOWN; + case FXMAC_LINKDOWN: + return ETH_LINK_DOWN; + case FXMAC_LINKUP: + return ETH_LINK_UP; + default: + return ETH_LINK_DOWN; } } } @@ -1082,7 +1074,7 @@ static void FXmacInitOnError(FXmacOs *instance_p) status = FXmacSetMacAddress(xmac_p, (void *)(instance_p->hwaddr), 1); if (status != FT_SUCCESS) { - FXMAC_OS_XMAC_PRINT_E("In %s:Emac Mac Address set failed...", __func__); + LOG_E("In %s:Emac Mac Address set failed...", __func__); } } @@ -1107,11 +1099,11 @@ FError FXmacOsInit(FXmacOs *instance_p) FASSERT(instance_p->mac_config.instance_id < FXMAC_NUM); xmac_p = &instance_p->instance; - FXMAC_OS_XMAC_PRINT_I("instance_id IS %d", instance_p->mac_config.instance_id); + LOG_I("instance_id IS %d", instance_p->mac_config.instance_id); mac_config_p = FXmacLookupConfig(instance_p->mac_config.instance_id); if (mac_config_p == NULL) { - FXMAC_OS_XMAC_PRINT_E("FXmacLookupConfig is error , instance_id is %d", instance_p->mac_config.instance_id); + LOG_E("FXmacLookupConfig is error , instance_id is %d", instance_p->mac_config.instance_id); return FREERTOS_XMAC_INIT_ERROR; } #ifdef RT_USING_SMART @@ -1120,21 +1112,21 @@ FError FXmacOsInit(FXmacOs *instance_p) mac_config = *mac_config_p; switch (instance_p->mac_config.interface) { - case FXMAC_OS_INTERFACE_SGMII: - interface = FXMAC_PHY_INTERFACE_MODE_SGMII; - FXMAC_OS_XMAC_PRINT_I("SGMII select."); - break; - case FXMAC_OS_INTERFACE_RMII: - interface = FXMAC_PHY_INTERFACE_MODE_RMII; - FXMAC_OS_XMAC_PRINT_I("RMII select."); - break; - case FXMAC_OS_INTERFACE_RGMII: - FXMAC_OS_XMAC_PRINT_I("RGMII select."); - interface = FXMAC_PHY_INTERFACE_MODE_RGMII; - break; - default: - FXMAC_OS_XMAC_PRINT_E("Update interface is error , interface is %d", instance_p->mac_config.instance_id); - return FREERTOS_XMAC_INIT_ERROR; + case FXMAC_OS_INTERFACE_SGMII: + interface = FXMAC_PHY_INTERFACE_MODE_SGMII; + LOG_I("SGMII select."); + break; + case FXMAC_OS_INTERFACE_RMII: + interface = FXMAC_PHY_INTERFACE_MODE_RMII; + LOG_I("RMII select."); + break; + case FXMAC_OS_INTERFACE_RGMII: + LOG_I("RGMII select."); + interface = FXMAC_PHY_INTERFACE_MODE_RGMII; + break; + default: + LOG_E("Update interface is error , interface is %d", instance_p->mac_config.instance_id); + return FREERTOS_XMAC_INIT_ERROR; } mac_config.interface = interface; @@ -1149,34 +1141,34 @@ FError FXmacOsInit(FXmacOs *instance_p) switch (instance_p->mac_config.phy_speed) { - case FXMAC_PHY_SPEED_10M: - mac_config.speed = FXMAC_SPEED_10; - break; - case FXMAC_PHY_SPEED_100M: - mac_config.speed = FXMAC_SPEED_100; - break; - case FXMAC_PHY_SPEED_1000M: - mac_config.speed = FXMAC_SPEED_1000; - break; - default: - FXMAC_OS_XMAC_PRINT_E("Setting speed is not valid , speed is %d", instance_p->mac_config.phy_speed); - return FREERTOS_XMAC_INIT_ERROR; + case FXMAC_PHY_SPEED_10M: + mac_config.speed = FXMAC_SPEED_10; + break; + case FXMAC_PHY_SPEED_100M: + mac_config.speed = FXMAC_SPEED_100; + break; + case FXMAC_PHY_SPEED_1000M: + mac_config.speed = FXMAC_SPEED_1000; + break; + default: + LOG_E("Setting speed is not valid , speed is %d", instance_p->mac_config.phy_speed); + return FREERTOS_XMAC_INIT_ERROR; } switch (instance_p->mac_config.phy_duplex) { - case FXMAC_PHY_HALF_DUPLEX: - mac_config.duplex = 0; - break; - case FXMAC_PHY_FULL_DUPLEX: - mac_config.duplex = 1; - break; + case FXMAC_PHY_HALF_DUPLEX: + mac_config.duplex = 0; + break; + case FXMAC_PHY_FULL_DUPLEX: + mac_config.duplex = 1; + break; } status = FXmacCfgInitialize(xmac_p, &mac_config); if (status != FT_SUCCESS) { - FXMAC_OS_XMAC_PRINT_E("In %s:EmacPs Configuration Failed....", __func__); + LOG_E("In %s:EmacPs Configuration Failed....", __func__); } if (instance_p->config & FXMAC_OS_CONFIG_JUMBO) @@ -1198,7 +1190,7 @@ FError FXmacOsInit(FXmacOs *instance_p) status = FXmacSetMacAddress(xmac_p, (void *)(instance_p->hwaddr), 0); if (status != FT_SUCCESS) { - FXMAC_OS_XMAC_PRINT_E("In %s:Emac Mac Address set failed...", __func__); + LOG_E("In %s:Emac Mac Address set failed...", __func__); } /* close fcs check */ @@ -1211,7 +1203,7 @@ FError FXmacOsInit(FXmacOs *instance_p) status = FXmacPhyInit(xmac_p, xmac_p->config.speed, xmac_p->config.duplex, xmac_p->config.auto_neg); if (status != FT_SUCCESS) { - FXMAC_OS_XMAC_PRINT_W("FXmacPhyInit is error."); + LOG_W("FXmacPhyInit is error."); } FXmacSelectClk(xmac_p); @@ -1285,7 +1277,7 @@ FError FXmacOsTx(FXmacOs *instance_p, void *tx_buf) FASSERT(instance_p != NULL); if (tx_buf == NULL) { - FXMAC_OS_XMAC_PRINT_E("tx_buf is null."); + LOG_E("tx_buf is null."); return FREERTOS_XMAC_PARAM_ERROR; } @@ -1310,7 +1302,7 @@ FError FXmacOsTx(FXmacOs *instance_p, void *tx_buf) #if LINK_STATS lwip_stats.link.drop++; #endif - FXMAC_OS_XMAC_PRINT_E("Pack dropped, no space."); + LOG_E("Pack dropped, no space."); ret = FREERTOS_XMAC_NO_VALID_SPACE; } @@ -1421,19 +1413,21 @@ static rt_err_t rt_xmac_control(rt_device_t dev, int cmd, void *args) } switch (cmd) { - case NIOCTL_GADDR: - /* get mac address */ - if (args) - { - rt_memcpy(args, pOsMac->hwaddr, 6); - } + case NIOCTL_GADDR: + /* get mac address */ + if (args) + { + rt_memcpy(args, pOsMac->hwaddr, 6); + } - else - return -RT_ERROR; - break; + else + { + return -RT_ERROR; + } + break; - default: - break; + default: + break; } return RT_EOK; @@ -1535,23 +1529,23 @@ static void ethernet_link_thread(void *Args) switch (eth_link_detect(pOsMac)) { - case ETH_LINK_UP: - if (is_link_up == 0) - { - rt_kprintf("link up\n"); - is_link_up = 1; - eth_device_linkchange(&pOsMac->parent, RT_TRUE); - } - break; - case ETH_LINK_DOWN: - default: - if (is_link_up == 1) - { - rt_kprintf("link down\n"); - is_link_up = 0; - eth_device_linkchange(&pOsMac->parent, RT_FALSE); - } - break; + case ETH_LINK_UP: + if (is_link_up == 0) + { + rt_kprintf("link up\n"); + is_link_up = 1; + eth_device_linkchange(&pOsMac->parent, RT_TRUE); + } + break; + case ETH_LINK_DOWN: + default: + if (is_link_up == 1) + { + rt_kprintf("link down\n"); + is_link_up = 0; + eth_device_linkchange(&pOsMac->parent, RT_FALSE); + } + break; } rt_thread_mdelay(10); } diff --git a/bsp/phytium/libraries/drivers/drv_xmac.h b/bsp/phytium/libraries/drivers/drv_xmac.h index b54675ba5d..8ea3680c94 100644 --- a/bsp/phytium/libraries/drivers/drv_xmac.h +++ b/bsp/phytium/libraries/drivers/drv_xmac.h @@ -15,17 +15,17 @@ #include #include +#ifdef BSP_USING_ETH + #include #include "fxmac.h" #include "fkernel.h" #include "ferror_code.h" #include "fassert.h" -#include "fcache.h" #include "fxmac_bdring.h" #include "eth_ieee_reg.h" #include "fcpu_info.h" -#include "fdebug.h" #ifdef __cplusplus extern "C" { @@ -140,3 +140,5 @@ enum lwip_port_link_status #endif #endif // ! + +#endif diff --git a/bsp/phytium/libraries/standalone/drivers/watchdog/fwdt/fwdt_intr.c b/bsp/phytium/libraries/port/fboard_port/fboard_port.c similarity index 55% rename from bsp/phytium/libraries/standalone/drivers/watchdog/fwdt/fwdt_intr.c rename to bsp/phytium/libraries/port/fboard_port/fboard_port.c index b10a4cde2c..14e1eeadb8 100644 --- a/bsp/phytium/libraries/standalone/drivers/watchdog/fwdt/fwdt_intr.c +++ b/bsp/phytium/libraries/port/fboard_port/fboard_port.c @@ -1,5 +1,5 @@ /* - * Copyright : (C) 2022 Phytium Information Technology, Inc. + * Copyright : (C) 2023 Phytium Information Technology, Inc. * All Rights Reserved. * * This program is OPEN SOURCE software: you can redistribute it and/or modify it @@ -11,13 +11,14 @@ * See the Phytium Public License for more details. * * - * FilePath: fwdt_intr.c - * Date: 2021-11-05 10:01:59 - * LastEditTime: 2022-02-25 11:44:02 - * Description:  This file is for wdt interrupt handler implementation. + * FilePath: fboard_port.c + * Created Date: 2023-10-27 17:02:35 + * Last Modified: 2023-10-27 09:22:20 + * Description: This file is for board layer code decoupling * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 wangxiaodong 2022/4/25 init commit + * Modify History: + * Ver Who Date Changes + * ----- ---------- -------- --------------------------------- + * 1.0 zhangyan 2023/10/27 first release */ +#include "fboard_port.h" \ No newline at end of file diff --git a/bsp/phytium/libraries/port/fboard_port/fboard_port.h b/bsp/phytium/libraries/port/fboard_port/fboard_port.h new file mode 100644 index 0000000000..9f00459933 --- /dev/null +++ b/bsp/phytium/libraries/port/fboard_port/fboard_port.h @@ -0,0 +1,56 @@ +/* + * Copyright : (C) 2023 Phytium Information Technology, Inc. + * All Rights Reserved. + * + * This program is OPEN SOURCE software: you can redistribute it and/or modify it + * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, + * either version 1.0 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the Phytium Public License for more details. + * + * + * FilePath: fboard_port.h + * Created Date: 2023-10-27 17:02:35 + * Last Modified: 2023-10-27 09:22:20 + * Description: This file is for board layer code decoupling + * + * Modify History: + * Ver Who Date Changes + * ----- ---------- -------- --------------------------------- + * 1.0 zhangyan 2023/10/27 first release + */ +#ifndef FBOARD_PORT_H +#define FBOARD_PORT_H + +#include +#include +#include "rtconfig.h" + + +#if (DBG_LEVEL >= DBG_WARNING) + #define FT_DEBUG_PRINT_W(TAG, format, ...) LOG_W(format, ##__VA_ARGS__) +#else + #define FT_DEBUG_PRINT_W(TAG, format, ...) LOG_W(...) +#endif + +#if (DBG_LEVEL >= DBG_INFO) + #define FT_DEBUG_PRINT_I(TAG, format, ...) LOG_I(format, ##__VA_ARGS__) +#else + #define FT_DEBUG_PRINT_I(TAG, format, ...) LOG_I(...) +#endif + +#if (DBG_LEVEL >= DBG_ERROR) + #define FT_DEBUG_PRINT_E(TAG, format, ...) LOG_E(format, ##__VA_ARGS__) +#else + #define FT_DEBUG_PRINT_E(TAG, format, ...) LOG_E(...) +#endif + +#if (DBG_LEVEL >= DBG_LOG) + #define FT_DEBUG_PRINT_D(TAG, format, ...) LOG_D(format, ##__VA_ARGS__) +#else + #define FT_DEBUG_PRINT_D(TAG, format, ...) LOG_D(...) +#endif + +#endif \ No newline at end of file diff --git a/bsp/phytium/libraries/port/fdriver_port/fdrivers_port.c b/bsp/phytium/libraries/port/fdriver_port/fdrivers_port.c new file mode 100644 index 0000000000..155a987ee3 --- /dev/null +++ b/bsp/phytium/libraries/port/fdriver_port/fdrivers_port.c @@ -0,0 +1,80 @@ +/* + * Copyright : (C) 2023 Phytium Information Technology, Inc. + * All Rights Reserved. + * + * This program is OPEN SOURCE software: you can redistribute it and/or modify it + * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, + * either version 1.0 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the Phytium Public License for more details. + * + * + * FilePath: fdrivers_port.c + * Created Date: 2023-10-17 08:29:18 + * Last Modified: 2023-10-26 10:49:19 + * Description: This file is for drive layer code decoupling + * + * Modify History: + * Ver Who Date Changes + * ----- ---------- -------- --------------------------------- + * 1.0 huanghe 2023/10/17 first release + */ +#include "fdrivers_port.h" +#include "cache.h" +#include "rtthread.h" + +#ifdef __aarch64__ +/* cache */ +void FDriverDCacheRangeFlush(uintptr_t adr, size_t len) +{ + __asm_flush_dcache_range(adr, len); +} + +void FDriverDCacheRangeInvalidate(uintptr_t adr, size_t len) +{ + rt_hw_cpu_dcache_invalidate(adr, len); +} + +void FDriverICacheRangeInvalidate(uintptr_t adr, size_t len) +{ + __asm_invalidate_icache_all(); +} +#else +#include "rthw.h" +/* cache */ +void FDriverDCacheRangeFlush(uintptr_t adr, size_t len) +{ + rt_hw_cpu_dcache_ops(RT_HW_CACHE_FLUSH, adr, len); +} + +void FDriverDCacheRangeInvalidate(uintptr_t adr, size_t len) +{ + rt_hw_cpu_dcache_ops(RT_HW_CACHE_INVALIDATE, adr, len); +} + +void FDriverICacheRangeInvalidate(uintptr_t adr, size_t len) +{ + rt_hw_cpu_icache_ops(RT_HW_CACHE_INVALIDATE, adr, len); +} +#endif + + +/* time delay */ + +void FDriverUdelay(u32 usec) +{ + rt_thread_delay(usec); +} + +void FDriverMdelay(u32 msec) +{ + rt_thread_mdelay(msec); +} + +void FDriverSdelay(u32 sec) +{ + u32 msec = sec * 1000; + rt_thread_mdelay(msec); +} diff --git a/bsp/phytium/libraries/port/fdriver_port/fdrivers_port.h b/bsp/phytium/libraries/port/fdriver_port/fdrivers_port.h new file mode 100644 index 0000000000..4e53c2eaf0 --- /dev/null +++ b/bsp/phytium/libraries/port/fdriver_port/fdrivers_port.h @@ -0,0 +1,105 @@ +/* + * Copyright : (C) 2023 Phytium Information Technology, Inc. + * All Rights Reserved. + * + * This program is OPEN SOURCE software: you can redistribute it and/or modify it + * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, + * either version 1.0 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the Phytium Public License for more details. + * + * + * FilePath: fdrivers_port.h + * Created Date: 2023-10-16 17:02:35 + * Last Modified: 2023-10-27 09:22:20 + * Description: This file is for drive layer code decoupling + * + * Modify History: + * Ver Who Date Changes + * ----- ---------- -------- --------------------------------- + * 1.0 huanghe 2023/10/17 first release + */ + +#ifndef FDRIVERS_PORT_H +#define FDRIVERS_PORT_H + +#include "ftypes.h" +#ifdef __aarch64__ + #include "faarch64.h" +#else + #include "faarch32.h" +#endif +#include +/***************************** Include Files *********************************/ +#include "rtconfig.h" +#include "ftypes.h" +#include "drv_log.h" + +#ifdef __aarch64__ + #include "faarch64.h" +#else + #include "faarch32.h" +#endif + +#ifdef __cplusplus +extern "C" +{ +#endif + +/* cache */ +void FDriverDCacheRangeFlush(uintptr_t adr, size_t len); + +void FDriverDCacheRangeInvalidate(uintptr_t adr, size_t len); + +void FDriverICacheRangeInvalidate(uintptr_t adr, size_t len); + + +/* memory barrier */ + +#define FDRIVER_DSB() DSB() + +#define FDRIVER_DMB() DMB() + +#define FDRIVER_ISB() ISB() + +/* time delay */ + +void FDriverUdelay(u32 usec); + +void FDriverMdelay(u32 msec); + +void FDriverSdelay(u32 sec); + +#if (DBG_LEVEL >= DBG_WARNING) +#define FT_DEBUG_PRINT_W(TAG, format, ...) LOG_W(format, ##__VA_ARGS__) +#else +#define FT_DEBUG_PRINT_W(TAG, format, ...) LOG_W(...) +#endif + +#if (DBG_LEVEL >= DBG_INFO) +#define FT_DEBUG_PRINT_I(TAG, format, ...) LOG_I(format, ##__VA_ARGS__) +#else +#define FT_DEBUG_PRINT_I(TAG, format, ...) LOG_I(...) +#endif + +#if (DBG_LEVEL >= DBG_ERROR) +#define FT_DEBUG_PRINT_E(TAG, format, ...) LOG_E(format, ##__VA_ARGS__) +#else +#define FT_DEBUG_PRINT_E(TAG, format, ...) LOG_E(...) +#endif + +#if (DBG_LEVEL >= DBG_LOG) +#define FT_DEBUG_PRINT_D(TAG, format, ...) LOG_D(format, ##__VA_ARGS__) +#else +#define FT_DEBUG_PRINT_D(TAG, format, ...) LOG_D(...) +#endif + + +#ifdef __cplusplus +} +#endif + + +#endif diff --git a/bsp/phytium/board/d2000/parameters.c b/bsp/phytium/libraries/port/soc_port/d2000/cpu_affinity_mask.c similarity index 98% rename from bsp/phytium/board/d2000/parameters.c rename to bsp/phytium/libraries/port/soc_port/d2000/cpu_affinity_mask.c index 297e556586..4f6e476dde 100644 --- a/bsp/phytium/board/d2000/parameters.c +++ b/bsp/phytium/libraries/port/soc_port/d2000/cpu_affinity_mask.c @@ -15,8 +15,6 @@ #include #include "fcpu_info.h" -#include "fparameters.h" - /** * @name: GetCpuMaskToAffval diff --git a/bsp/phytium/board/d2000/memory_map.c b/bsp/phytium/libraries/port/soc_port/d2000/memory_map.c similarity index 97% rename from bsp/phytium/board/d2000/memory_map.c rename to bsp/phytium/libraries/port/soc_port/d2000/memory_map.c index 34aa214030..e5a1dc426a 100644 --- a/bsp/phytium/board/d2000/memory_map.c +++ b/bsp/phytium/libraries/port/soc_port/d2000/memory_map.c @@ -21,7 +21,8 @@ #if defined(TARGET_ARMV8_AARCH64) struct mem_desc platform_mem_desc[] = { - { KERNEL_VADDR_START, + { + KERNEL_VADDR_START, KERNEL_VADDR_START + 0x0fffffff, (rt_size_t)ARCH_MAP_FAILED, NORMAL_MEM @@ -30,7 +31,8 @@ struct mem_desc platform_mem_desc[] = #else struct mem_desc platform_mem_desc[] = { - { KERNEL_VADDR_START, + { + KERNEL_VADDR_START, KERNEL_VADDR_START + 0x10000000, (rt_size_t)ARCH_MAP_FAILED, NORMAL_MEM diff --git a/bsp/phytium/board/e2000/d/parameters.c b/bsp/phytium/libraries/port/soc_port/e2000/d/cpu_affinity_mask.c similarity index 97% rename from bsp/phytium/board/e2000/d/parameters.c rename to bsp/phytium/libraries/port/soc_port/e2000/d/cpu_affinity_mask.c index 5a5c55a845..83d871ec03 100644 --- a/bsp/phytium/board/e2000/d/parameters.c +++ b/bsp/phytium/libraries/port/soc_port/e2000/d/cpu_affinity_mask.c @@ -15,7 +15,6 @@ #include #include "fcpu_info.h" -#include "fparameters.h" u32 GetCpuMaskToAffval(u32 *cpu_mask, u32 *cluster_id, u32 *target_list) { diff --git a/bsp/phytium/board/phytium-pi/memory_map.c b/bsp/phytium/libraries/port/soc_port/e2000/memory_map.c similarity index 90% rename from bsp/phytium/board/phytium-pi/memory_map.c rename to bsp/phytium/libraries/port/soc_port/e2000/memory_map.c index fdea92c5bc..392d2b9e61 100644 --- a/bsp/phytium/board/phytium-pi/memory_map.c +++ b/bsp/phytium/libraries/port/soc_port/e2000/memory_map.c @@ -21,7 +21,8 @@ #if defined(TARGET_ARMV8_AARCH64) struct mem_desc platform_mem_desc[] = { - { KERNEL_VADDR_START, + { + KERNEL_VADDR_START, KERNEL_VADDR_START + 0x0fffffff, (rt_size_t)ARCH_MAP_FAILED, NORMAL_MEM @@ -30,7 +31,8 @@ struct mem_desc platform_mem_desc[] = #else struct mem_desc platform_mem_desc[] = { - { KERNEL_VADDR_START, + { + KERNEL_VADDR_START, KERNEL_VADDR_START + 0x10000000, (rt_size_t)ARCH_MAP_FAILED, NORMAL_MEM @@ -41,8 +43,9 @@ struct mem_desc platform_mem_desc[] = #if defined(TARGET_ARMV8_AARCH64) -struct mem_desc platform_mem_desc[] = { - {KERNEL_VADDR_START, DDR_END_ADDRESS , KERNEL_VADDR_START, NORMAL_MEM}, +struct mem_desc platform_mem_desc[] = +{ + {KERNEL_VADDR_START, DDR_END_ADDRESS, KERNEL_VADDR_START, NORMAL_MEM}, { 0x28000000U, 0x32B36FFFU, diff --git a/bsp/phytium/board/e2000/q/parameters.c b/bsp/phytium/libraries/port/soc_port/e2000/q/cpu_affinity_mask.c similarity index 95% rename from bsp/phytium/board/e2000/q/parameters.c rename to bsp/phytium/libraries/port/soc_port/e2000/q/cpu_affinity_mask.c index ed3fb0453e..df7b425c4b 100644 --- a/bsp/phytium/board/e2000/q/parameters.c +++ b/bsp/phytium/libraries/port/soc_port/e2000/q/cpu_affinity_mask.c @@ -15,8 +15,6 @@ #include #include "fcpu_info.h" -#include "fparameters.h" - /** * @name: GetCpuMaskToAffval @@ -55,7 +53,7 @@ u32 GetCpuMaskToAffval(u32 *cpu_mask, u32 *cluster_id, u32 *target_list) { *target_list = 3; } - else if ((*cpu_mask & 0x4)) + else if ((*cpu_mask & 0x1)) { *target_list = 1; } diff --git a/bsp/phytium/board/ft2004/parameters.c b/bsp/phytium/libraries/port/soc_port/ft2004/cpu_affinity_mask.c similarity index 100% rename from bsp/phytium/board/ft2004/parameters.c rename to bsp/phytium/libraries/port/soc_port/ft2004/cpu_affinity_mask.c diff --git a/bsp/phytium/board/ft2004/memory_map.c b/bsp/phytium/libraries/port/soc_port/ft2004/memory_map.c similarity index 100% rename from bsp/phytium/board/ft2004/memory_map.c rename to bsp/phytium/libraries/port/soc_port/ft2004/memory_map.c diff --git a/bsp/phytium/board/phytium-pi/parameters.c b/bsp/phytium/libraries/port/soc_port/phytiumpi/cpu_affinity_mask.c similarity index 95% rename from bsp/phytium/board/phytium-pi/parameters.c rename to bsp/phytium/libraries/port/soc_port/phytiumpi/cpu_affinity_mask.c index ed3fb0453e..df7b425c4b 100644 --- a/bsp/phytium/board/phytium-pi/parameters.c +++ b/bsp/phytium/libraries/port/soc_port/phytiumpi/cpu_affinity_mask.c @@ -15,8 +15,6 @@ #include #include "fcpu_info.h" -#include "fparameters.h" - /** * @name: GetCpuMaskToAffval @@ -55,7 +53,7 @@ u32 GetCpuMaskToAffval(u32 *cpu_mask, u32 *cluster_id, u32 *target_list) { *target_list = 3; } - else if ((*cpu_mask & 0x4)) + else if ((*cpu_mask & 0x1)) { *target_list = 1; } diff --git a/bsp/phytium/board/e2000/memory_map.c b/bsp/phytium/libraries/port/soc_port/phytiumpi/memory_map.c similarity index 90% rename from bsp/phytium/board/e2000/memory_map.c rename to bsp/phytium/libraries/port/soc_port/phytiumpi/memory_map.c index fdea92c5bc..392d2b9e61 100644 --- a/bsp/phytium/board/e2000/memory_map.c +++ b/bsp/phytium/libraries/port/soc_port/phytiumpi/memory_map.c @@ -21,7 +21,8 @@ #if defined(TARGET_ARMV8_AARCH64) struct mem_desc platform_mem_desc[] = { - { KERNEL_VADDR_START, + { + KERNEL_VADDR_START, KERNEL_VADDR_START + 0x0fffffff, (rt_size_t)ARCH_MAP_FAILED, NORMAL_MEM @@ -30,7 +31,8 @@ struct mem_desc platform_mem_desc[] = #else struct mem_desc platform_mem_desc[] = { - { KERNEL_VADDR_START, + { + KERNEL_VADDR_START, KERNEL_VADDR_START + 0x10000000, (rt_size_t)ARCH_MAP_FAILED, NORMAL_MEM @@ -41,8 +43,9 @@ struct mem_desc platform_mem_desc[] = #if defined(TARGET_ARMV8_AARCH64) -struct mem_desc platform_mem_desc[] = { - {KERNEL_VADDR_START, DDR_END_ADDRESS , KERNEL_VADDR_START, NORMAL_MEM}, +struct mem_desc platform_mem_desc[] = +{ + {KERNEL_VADDR_START, DDR_END_ADDRESS, KERNEL_VADDR_START, NORMAL_MEM}, { 0x28000000U, 0x32B36FFFU, diff --git a/bsp/phytium/libraries/standalone/LICENSE b/bsp/phytium/libraries/standalone/LICENSE deleted file mode 100644 index 30bd97be52..0000000000 --- a/bsp/phytium/libraries/standalone/LICENSE +++ /dev/null @@ -1,28 +0,0 @@ - - Phytium Public License 1.0 (PPL-1.0) - -UNLESS IT HAS ITS OWN COPYRIGHT/LICENSE EMBEDDED IN ITS BODY, EACH FILE IS SUBJECT TO THE FOLLOWING LICENSE TERMS - -Copyright (C) 2022, Phytium Technology Co., Ltd. -All Rights Reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that -the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this list of conditions and the -following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and -the following disclaimer in the documentation and/or other materials provided with the distribution. - -3. If the name of phytium or the names of its contributors are needed to endorse or promote products -derived from this software ,Prior written permission should be required. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED -WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A -PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED -TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/README.md b/bsp/phytium/libraries/standalone/README.md deleted file mode 100644 index b05bd14a68..0000000000 --- a/bsp/phytium/libraries/standalone/README.md +++ /dev/null @@ -1,312 +0,0 @@ -# Phytium-Standalone-SDK - -**v1.1.1** [ReleaseNote](./doc/ChangeLog.md) - -## 1. 项目概要 - -### 1.1 仓库介绍 - -本项目代码仓库整体共分为两个分支: -master 分支:开发分支,用于保存最新的协作开发代码以及bug修复后的代码。其只要求保障新功能基本正确并且能够满足基本的使用需求,并没有经过系统性和复杂条件下的测试。 -release 分支:发布分支,包含核心启动代码、芯片外设驱动、用户使用例程和构建的脚本工具。用于保存经过系统性测试的代码并对外发布版本,默认下载此分支的代码。 - -### 1.2 基本介绍 - -本项目发布了 Phytium 系列 CPU 的 嵌入式软件开发工具包,包括板级支持包、第三方开源中间件、交叉编译构建工具、及其 Baremetal 参考例程,在支持多平台裸机应用开发的基础上,能够为多种RTOS提供外设驱动和配置构建工具。 - -![LetterShell](./doc/fig/letter_shell.png) - -### 1.3 系统架构 - -本项目的整体设计如下所示,自下而上可以分为平台层、组件层、框架层和应用层。 - -![Framework](./doc/design/system_2.png) - -- 平台层(Platform)在整个软件框架中位于最底层,提供了基本数据结构类型定义、驱动参数标定、硬件平台耦合的寄存器自检、板级启动、CPU 内存虚拟等功能 -- 组件层(Component)在整个软件框架中位于中间位置,向下依赖于平台层提供的参数配置与内存方案,向上提供应用开发与模块测试的支持 -- 框架层(Framework)为开发主机提供了开发环境,支持SDK安装,应用工程配置和二进制文件构建及烧录等工具。 -- 应用层(Application)提供了应用开发模板和例程,帮助开发者迅速熟悉SDK的使用,进行不同类型的应用程序开发 - -### 1.4 源代码结构 - -``` -. -├── Kconfig --> 配置定义 -├── LICENSE --> 版权声明 -├── README.md --> 使用说明 -├── arch -│   └── armv8 --> 架构相关 -├── baremetal -│   └── example --> 裸机例程 -├── board -│   ├── d2000 -│   ├── e2000 -│   └── ft2004 --> 平台相关 -├── common -│   ├── fprintf.c -│   ├── fprintf.h -│   ├── fsleep.c -│   └── fsleep.h --> 通用方法 -├── configs -│   ├── ft2004_aarch32_defconfig -│   └── ft2004_aarch64_defconfig --> 各平台默认配置 -├── doc -│   ├── ChangeLog.md --> 修改记录 -│   └── reference --> 接口说明文档 -├── drivers -│   ├── can -│   ├── dma -│   └── watchdog --> 外设驱动 -├── install.py --> 安装脚本 -├── lib -│   ├── Kconfiglib -│   ├── lib.mk -│   ├── libc -│   └── nostdlib --> 依赖库 -├── make -│   ├── build_baremetal.mk -│   ├── buildinfo.mk -│   ├── complier.mk -│   └── preconfig.mk --> 编译脚本和链接脚本 -├── requirements.txt --> python环境依赖组件 -├── scripts -├── standalone.mk -├── third-party -│   └── letter-shell-3.1 --> 第三方库 -├── tools -``` - ---- - -## 2. 快速入门 - -- 目前支持在Windows和Linux上使用SDK,支持在x86_64和ARM AARCH64设备上完成交叉编译 - -![windows](./doc/fig/windows.png)![linux](./doc/fig/linux.png)![输入图片说明](./doc/fig/kylin.png) - -- 参考[Windows10 快速入门](./doc/reference/usr/install_windows.md), [Linux x86_64 快速入门](./doc/reference/usr/install_linux_x86_64.md) -- 参考[使用说明](./doc/reference/usr/usage.md), 新建Phytium Standalone SDK的应用工程,与开发板建立连接 -- 参考[例程](./baremetal/example),开始使用SDK -- 参考[系统测试](./example),开始使用重构后的系统测试用例(v1.1.0版本开始,测试用例将逐步进行重构) - ---- - -## 3. 硬件参考 - -### 3.1 FT2000-4 - -FT-2000/4 是一款面向桌面应用的高性能通用 4 核处理器。每 2 个核构成 1 个处理器核簇(Cluster),并共享 L2 Cache。主要技术特征如下: - -- 兼容 ARM v8 64 位指令系统,兼容 32 位指令 -- 支持单精度、双精度浮点运算指令 -- 支持 ASIMD 处理指令 -- 集成 2 个 DDR4 通道,可对 DDR 存储数据进行实时加密 -- 集成 34 Lane PCIE3.0 接口:2 个 X16(每个可拆分成 2 个 X8),2 个 X1 -- 集成 2 个 GMAC,RGMII 接口,支持 10/100/1000 自适应 -- 集成 1 个 SD 卡控制器,兼容 SD 2.0 规范 -- 集成 加密计算单元 -- 集成 4 个 UART,32 个 GPIO,4 个 I2C,1 个 QSPI,2 个通 用 SPI,2 个 WDT,16 个外部中断(和 GPIO 共用 IO) -- 集成温度传感器 - -### 3.2 D2000 - -D2000 是一款面向桌面应用的高性能通用 8 核处理器。每 2 个核构成 1 个处理器核簇(Cluster),并共享 L2 Cache。存储系统包含 Cache 子系统和 DDR,I/O 系统包含 PCIe、高速 IO 子系统、千兆位以太网 GMAC 和低速 IO 子系统,主要技术特征如下, - -- 兼容 ARM v8 64 位指令系统,兼容 32 位指令 -- 支持单精度、双精度浮点运算指令 -- 支持 ASIMD 处理指令 -- 集成 2 个 DDR 通道,支持 DDR4 和 LPDDR4,可对 DDR 存储数据进行实时加密 -- 集成 34 Lane PCIE3.0 接口:2 个 X16(每个可拆分成 2 个 X8),2 个 X1 -- 集成 2 个 GMAC,RGMII 接口,支持 10/100/1000 自适应 -- 集成 1 个 SD 卡控制器,兼容 SD 2.0 规范 -- 集成 1 个 HDAudio,支持音频输出,可同时支持最多 4 个 Codec -- 集成 SM2、SM3、SM4、SM9 模块 -- 集成 4 个 UART,32 个 GPIO,4 个 I2C,1 个 QSPI,2 个通用 SPI,2 个 WDT,16 个外部中断(和 GPIO 共用 IO) -- 集成 2 个温度传感器 - -### 3.3 E2000Q - -- E2000Q 集成2个FTC664核和2个FTC310核。主要技术特征如下: -- 兼容ARM v8 64 位指令系统,兼容32 位指令 -- 集成 1 路 16 通道 General DMA 和 1 路 8 通道 Device DMA -- 支持单精度、双精度浮点运算指令 -- 两个 FTC664 核各包含 1MB 私有 L2 Cache,由两个 FTC310 核组成的Cluster 内含 256KB 共享的 L2 Cache -- 集成1个DDR4 通道 -- 集成6Lane PCIE3.0 接口(X4+2*X1 、X2+4*X2、6*X1) -- 集成4个1000M以太网控制器,支持2路SGMII接口和2路SGMII/RGMII接口 -- 集成3路USB2.0(OTG)和2路USB3.0(兼容 2.0) -- 集成2路SATA3.0模块 -- 2路 DisplayPort1.4 接口 -- 集成常用低速接口:WDT、QSPI、PWM、Nand、SD/SDIO/eMMC 、SPI_M、UART、I2C、I2S、MIO、CAN-FD、GPIO、LocalBus、Timer - -### 3.4 E2000D - -- E2000D 集成 2 个 FTC310 核。主要技术特征如下: -- 兼容ARM v8 64 位指令系统,兼容32 位指令 -- 集成 1 路 16 通道 General DMA 和 1 路 8 通道 Device DMA -- 支持单精度、双精度浮点运算指令 -- L2 Cache 有256KB -- 集成1个DDR4 通道 -- 集成4 Lane PCIE3.0 接口(4X1) -- 集成4个1000M以太网控制器,支持 2 路 SGMII 接口和 2 路 SGMII/RGMII 接口 -- 集成3路USB2.0(OTG)和2路USB3.0(兼容 2.0) -- 集成2路SATA3.0模块 -- 2路 DisplayPort1.4 接口 -- 集成常用低速接口:WDT,QSPI,PWM,Nand,SD/SDIO/eMMC ,SPI_M,UART,I2C,MIO,CAN-FD,GPIO,LocalBus,Timer - -### 3.5 E2000S - -- E2000S 集成 1 个 FTC310 核,单核结构。主要技术特征如下: -- 兼容ARM v8 64 位指令系统,兼容32 位指令 -- 集成 1 路 16 通道 General DMA 和 1 路 8 通道 Device DMA -- 支持单精度、双精度浮点运算指令 -- L2 Cache 有256KB -- 集成1个DDR4 通道 -- 集成2 Lane PCIE3.0 接口(2X1) -- 集成3个1000M以太网控制器,支持1路SGMII接口和2路RGMII/RMII接口 -- 集成1路USB2.0(Device)和2路USB2.0(OTG) -- 2路 DisplayPort1.4 接口 -- 集成常用低速接口:WDT、DMAC、PWM、QSPI、SD/SDIO/eMMC、SPI Master、UART、I2C、MIO、I3C、PMBUS、GPIO、SGPIO、One-Wire、Timer、One-Wire - -## 4 外设驱动支持情况 - -| Hardware Interface | Platform Supported | Platform Developing | Component | -| ------------------------------ | ---------------------------------- | ---------------------------------- | -------------------------- | -| Generic Intrrupt Controller v3 | FT2000/4`
`E2000`
`D2000 | | gic/fgic | -| Generic Timer | FT2000/4`
`E2000`
`D2000 | | generic_timer | -| UART (PrimeCell PL011) | FT2000/4`
`E2000`
`D2000 | | usart/pl011_uart | -| 10/100/1000MB-ETHERNET | FT2000/4`
`E2000`
`D2000 | | eth/fgmac`
`eth/fxmac | -| ADC | E2000 | | adc/fadc | -| CAN | FT2000/4`
`E2000`
`D2000 | | can/fcan | -| DDMA | | E2000 | dma/fddma | -| GDMA | E2000 | | dma/gdma | -| GPIO | FT2000/4`
`E2000`
`D2000 | | gpio/fgpio | -| I2C | FT2000/4`
`E2000`
`D2000 | | i2c/fi2c | -| QSPI (Nor Flash) | FT2000/4`
`E2000`
`D2000 | | qspi/fqspi | -| SPI | FT2000/4`
`E2000`
`D2000 | | spi/fspim | -| TIMER & TACHO | E2000 | | timer/ftimer_tacho | -| MIO | E2000 | | mio/fmio | -| SDMMC | | FT2000/4`
`D2000 | mmc/fsdmmc | -| SDIO | E2000 | | mmc/fsdio | -| PCIE | FT2000/4`
`D2000`
`E2000 | | pcie/fpcie | -| NAND | E2000 | | nand/fnand | -| RTC | FT2000/4`
`D2000 | | rtc/frtc | -| SATA | FT2000/4`
`D2000`
`E2000 | | sata/fsata | -| USB-PCI | | FT2000/4`
`E2000`
`D2000 | usb/fxhci | -| PWM | E2000 | | pwm/fpwm | -| WDT | FT2000/4`
`D2000`
`E2000 | | watchdog/fwdt | - -| Third-Party | Platform Supported | Platform Developing | Component | -| ------------------- | ---------------------------------- | ---------------------------------- | ---------------------- | -| LWIP 2.1.2 | FT2000/4`
`D2000`
`E2000 | | lwip-2.1.2 | -| Letter shell 3.1 | FT2000/4`
`D2000`
`E2000 | | letter-shell-3.1 | -| Sdmmc | FT2000/4`
`D2000 | | sdmmc | -| Sfud 1.1.0 | FT2000/4`
`D2000`
`E2000 | | sfud-1.1.0 | -| Backtrace | FT2000/4`
`D2000`
`E2000 | | backtrace | -| Tlsf | FT2000/4`
`D2000`
`E2000 | | tlsf-3.1.0 | -| Fatfs (RAM/Sd/SATA) | FT2000/4`
`D2000`
`E2000 | | fatfs-0.1.3 | -| Ymodem | FT2000/4`
`D2000`
`E2000 | | | -| OpenAMP | FT2000/4`
`D2000`
`E2000 | | openamp | -| LittleFS-2.4.2 | | FT2000/4`
`E2000`
`D2000 | littlefs-2.4.2 | -| SPIFFS-0.3.7 | FT2000/4`
`D2000`
`E2000 | | spiffs-0.3.7 | -| freemodbus-v1.6 | E2000 | | protocols/fmodbus_test | - ---- - -## 5. API指南 - -### 5.1 DRIVERS - -#### 5.1.1 [FI2C](./doc/reference/driver/fi2c.md) - -#### 5.1.2 [FPL011](./doc/reference/driver/fpl011.md) - -#### 5.1.3 [FRTC](./doc/reference/driver/frtc.md) - -#### 5.1.4 [FWDT](./doc/reference/driver/fwdt.md) - -#### 5.1.5 [FSPIM](./doc/reference/driver/fspim.md) - -#### 5.1.6 [FQSPI](./doc/reference/driver/fqspi.md) - -#### 5.1.7 [FSDMMC](./doc/reference/driver/fsdmmc.md) - -#### 5.1.8 [FSATA](./doc/reference/driver/fsata.md) - -#### 5.1.9 [FPCIE](./doc/reference/driver/fpcie.md) - -#### 5.1.10 [FUSB](./doc/reference/driver/fusb.md) - -#### 5.1.11 [FGPIO](./doc/reference/driver/fgpio.md) - -#### 5.1.12 [FGIC](./doc/reference/driver/fgic.md) - -#### 5.1.13 [FDDMA](./doc/reference/driver/fddma.md) - -#### 5.1.14 [FCAN](./doc/reference/driver/fcan.md) - -#### 5.1.15 [FADC](./doc/reference/driver/fadc.md) - -#### 5.1.16 [FPWM](./doc/reference/driver/fpwm.md) - -#### 5.1.17 [FSDIO](./doc/reference/driver/fsdio.md) - -#### 5.1.18 [FMEDIA](doc/reference/driver/fmedia.md) - -### 5.2 MEMORY - -#### 5.2.1 [FMEMORY_POOL](./doc/reference/sdk/fmemory_pool.md) - -### 5.3 CPU - -#### 5.3.1 [MMU](./doc/reference/cpu/mmu.md) - -#### 5.3.2 [FPINCTRL](./doc/reference/sdk/fpinctrl.md) - -#### 5.3.2 [FINTERRUPT](./doc/reference/cpu/finterrupt.md) - -#### 5.3.3 [FPSCI](./doc/reference/cpu/psci.md) - ---- - -## 6. 贡献方法 - -请联系飞腾嵌入式软件部 - -huanghe@phytium.com.cn - -zhugengyu@phytium.com.cn - -wangxiaodong1030@phytium.com.cn - -liushengming1118@phytium.com.cn - -wangzongqiang1322@phytium.com.cn - -liqiaozhong1404@phytium.com.cn - -liuzhihong1235@phytium.com.cn - -zhangyan1491@phytium.com.cn - ---- - -## 6. 相关资源 - -- ARM Architecture Reference Manual -- ARM Cortex-A Series Programmer’s Guide -- Programmer Guide for ARMv8-A -- ARM System Developers Guide Designing and Optimizing System Software -- FT-2000/4 软件编程手册-V1.4 -- D2000 软件编程手册-V1.0 -- Bare-metal programming for ARM —— A hands-on guide -- Using the GNU Compiler Collection -- Using ld, The GNU Linker -- Using as, The GNU Assembler -- Armv8-A memory model guide - ---- - -## 7. 许可协议 - -Phytium Public License 1.0 (PPL-1.0) diff --git a/bsp/phytium/libraries/standalone/board/Kconfig b/bsp/phytium/libraries/standalone/board/Kconfig deleted file mode 100644 index 45849f5e7d..0000000000 --- a/bsp/phytium/libraries/standalone/board/Kconfig +++ /dev/null @@ -1,69 +0,0 @@ -menu "Board Configuration" - - choice BUILD_TARGET_CHIP_TYPE - prompt "Chip" - default TARGET_E2000Q - help - Select chip type for build - - config TARGET_F2000_4 - bool "FT2000-4" - select USE_SERIAL - select ENABLE_Pl011_UART - - config TARGET_D2000 - bool "D2000" - select USE_SERIAL - select ENABLE_Pl011_UART - - config TARGET_E2000Q - bool "E2000Q" - select TARGET_E2000 - select USE_SERIAL - select ENABLE_Pl011_UART - - config TARGET_E2000D - bool "E2000D" - select TARGET_E2000 - select USE_SERIAL - select ENABLE_Pl011_UART - - config TARGET_E2000S - bool "E2000S" - select TARGET_E2000 - select USE_SERIAL - select ENABLE_Pl011_UART - - config TARGET_PHYTIUMPI - bool "Phytium Pi" - select TARGET_E2000 - select USE_SERIAL - select ENABLE_Pl011_UART - -# config TARGET_TARDIGRADE -# bool "TARDIGRADE" - - endchoice # BUILD_TARGET_CHIP_TYPE - - # an invisible config to define common code of E2000 Q/D/S - config TARGET_E2000 - bool - default y if TARGET_E2000Q || TARGET_E2000D || TARGET_E2000S - - choice DEBUG_PRINT_UART - prompt "Select Debug uart instance" - default DEFAULT_DEBUG_PRINT_UART1 - help - Select arch for build - config DEFAULT_DEBUG_PRINT_UART1 - bool "Use uart1" - config DEFAULT_DEBUG_PRINT_UART0 - bool "Use uart0" - config DEFAULT_DEBUG_PRINT_UART2 - bool "Use uart2" - endchoice # DEBUG_PRINT_UART - - -endmenu - - diff --git a/bsp/phytium/libraries/standalone/board/common/fcpu_asm.S b/bsp/phytium/libraries/standalone/board/common/fcpu_asm.S deleted file mode 100644 index c536bef925..0000000000 --- a/bsp/phytium/libraries/standalone/board/common/fcpu_asm.S +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: _cpu_asm.S - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-17 17:57:55 - * Description:  This file is for - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - */ - -#include "sdkconfig.h" - -#ifdef CONFIG_TARGET_ARMV8_AARCH64 -// ------------------------------------------------------------ - .global GetAffinity - //uint32_t GetAffinity(void); - .type GetAffinity, @function -GetAffinity: - MRS x0, MPIDR_EL1 - RET - - -.global ArchSpinLock; -.text; -ArchSpinLock: - mov w2, #1 - sevl -1: - wfe - ldaxr w1, [x0] - cbnz w1, 1b - stxr w1, w2, [x0] - cbnz w1, 1b - ret - - -.global ArchSpinUnlock; -.text; -ArchSpinUnlock: - stlr xzr, [x0] - ret - -#else - -.globl GetAffinity -GetAffinity: - mrc p15, #0, r0, c0, c0, #5 @ read multiprocessor affinity register - bx lr - -#endif \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/board/common/fcpu_info.c b/bsp/phytium/libraries/standalone/board/common/fcpu_info.c deleted file mode 100644 index 9b7c718ace..0000000000 --- a/bsp/phytium/libraries/standalone/board/common/fcpu_info.c +++ /dev/null @@ -1,264 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: cpu_info.c - * Date: 2022-03-08 19:37:19 - * LastEditTime: 2022-03-15 11:18:14 - * Description:  This file is for - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - */ - -#include "fcpu_info.h" -#include "ferror_code.h" -#include "fparameters.h" -#include "fprintk.h" - -FError GetCpuId(u32 *cpu_id_p) -{ - u32 affinity = GetAffinity(); - FError ret = ERR_SUCCESS ; - - switch (affinity & 0xfff) - { -#ifdef CORE0_AFF - case CORE0_AFF: - *cpu_id_p = 0 ; - break; -#endif -#ifdef CORE1_AFF - case CORE1_AFF: - *cpu_id_p = 1 ; - break; -#endif -#ifdef CORE2_AFF - case CORE2_AFF: - *cpu_id_p = 2; - break; -#endif -#ifdef CORE3_AFF - case CORE3_AFF: - *cpu_id_p = 3 ; - break; -#endif -#ifdef CORE4_AFF - case CORE4_AFF: - *cpu_id_p = 4 ; - break; -#endif -#ifdef CORE5_AFF - case CORE5_AFF: - *cpu_id_p = 5 ; - break; -#endif -#ifdef CORE6_AFF - case CORE6_AFF: - *cpu_id_p = 6 ; - break; -#endif -#ifdef CORE7_AFF - case CORE7_AFF: - *cpu_id_p = 7 ; - break; -#endif - default: - ret = ERR_GENERAL ; - break; - } - return ret; -} - -/** - * @name: GetCpuAffinityByMask - * @msg: Determine the cluster information using the CPU ID - * @param {u32} cpu_id cpu id mask .for example : 1 is core0 ,2 is core1 ..... - * @param {u64} *affinity_level_p cluster information , format is: - * |--------[bit31-24]-------[bit23-16]-------------[bit15-8]--------[bit7-0] - * |--------Affinity level3-----Affinity level2-----Affinity level1---Affinity level0 - * @return {*} ERR_SUCCESS is ok - */ -FError GetCpuAffinityByMask(u32 cpu_id_mask, u64 *affinity_level_p) -{ - FError ret = ERR_SUCCESS ; - switch (cpu_id_mask) - { -#ifdef CORE0_AFF - case (1<<0): - *affinity_level_p = CORE0_AFF; - break ; -#endif -#ifdef CORE1_AFF - case (1<<1): - *affinity_level_p = CORE1_AFF; - break ; -#endif -#ifdef CORE2_AFF - case (1<<2): - *affinity_level_p = CORE2_AFF; - break ; -#endif -#ifdef CORE3_AFF - case (1<<3): - *affinity_level_p = CORE3_AFF; - break ; -#endif -#ifdef CORE4_AFF - case (1<<4): - *affinity_level_p = CORE4_AFF; - break ; -#endif -#ifdef CORE5_AFF - case (1<<5): - *affinity_level_p = CORE5_AFF; - break ; -#endif -#ifdef CORE6_AFF - case (1<<6): - *affinity_level_p = CORE6_AFF; - break ; -#endif -#ifdef CORE7_AFF - case (1<<7): - *affinity_level_p = CORE7_AFF; - break ; -#endif - default: - ret = ERR_GENERAL; - break; - } - return ret; -} - - -/** - * @name: GetCpuAffinity - * @msg: Determine the cluster information using the CPU ID - * @param {u32} cpu_id cpu id .for example : 0 is core0 ,1 is core1 ..... - * @param {u64} *affinity_level_p cluster information , format is: - * |--------[bit31-24]-------[bit23-16]-------------[bit15-8]--------[bit7-0] - * |--------Affinity level3-----Affinity level2-----Affinity level1---Affinity level0 - * @return {*} ERR_SUCCESS is ok - */ -FError GetCpuAffinity(u32 cpu_id, u64 *affinity_level_p) -{ - FError ret = ERR_SUCCESS ; - switch (cpu_id) - { -#ifdef CORE0_AFF - case (0): - *affinity_level_p = CORE0_AFF; - break ; -#endif -#ifdef CORE1_AFF - case (1): - *affinity_level_p = CORE1_AFF; - break ; -#endif -#ifdef CORE2_AFF - case (2): - *affinity_level_p = CORE2_AFF; - break ; -#endif -#ifdef CORE3_AFF - case (3): - *affinity_level_p = CORE3_AFF; - break ; -#endif -#ifdef CORE4_AFF - case (4): - *affinity_level_p = CORE4_AFF; - break ; -#endif -#ifdef CORE5_AFF - case (5): - *affinity_level_p = CORE5_AFF; - break ; -#endif -#ifdef CORE6_AFF - case (6): - *affinity_level_p = CORE6_AFF; - break ; -#endif -#ifdef CORE7_AFF - case (7): - *affinity_level_p = CORE7_AFF; - break ; -#endif - default: - ret = ERR_GENERAL; - break; - } - return ret; -} - - -/** - * @name: UseAffinityGetCpuId - * @msg: Get the core value from affinity level - * @param {u64} affinity_level is cpu affinity level value - * @param {u32*} cpu_id_p is pointer to get cpu id value - * @return {*} ERR_SUCCESS is ok , ERR_GENERAL is fail - */ -FError UseAffinityGetCpuId(u64 affinity_level, u32 *cpu_id_p) -{ - FError ret = ERR_SUCCESS ; - switch (affinity_level) - { -#ifdef CORE0_AFF - case CORE0_AFF: - *cpu_id_p = 0; - break ; -#endif -#ifdef CORE1_AFF - case CORE1_AFF: - *cpu_id_p = 1; - break ; -#endif -#ifdef CORE2_AFF - case CORE2_AFF: - *cpu_id_p = 2; - break ; -#endif -#ifdef CORE3_AFF - case CORE3_AFF: - *cpu_id_p = 3; - break ; -#endif -#ifdef CORE4_AFF - case CORE4_AFF: - *cpu_id_p = 4; - break ; -#endif -#ifdef CORE5_AFF - case CORE5_AFF: - *cpu_id_p = 5; - break ; -#endif -#ifdef CORE6_AFF - case CORE6_AFF: - *cpu_id_p = 6; - break ; -#endif -#ifdef CORE7_AFF - case CORE7_AFF: - *cpu_id_p = 7; - break ; -#endif - default: - ret = ERR_GENERAL; - break; - } - return ret; -} diff --git a/bsp/phytium/libraries/standalone/board/common/fcpu_info.h b/bsp/phytium/libraries/standalone/board/common/fcpu_info.h deleted file mode 100644 index b5434f2d19..0000000000 --- a/bsp/phytium/libraries/standalone/board/common/fcpu_info.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fcpu_info.h - * Date: 2022-03-08 19:37:19 - * LastEditTime: 2022-03-15 11:18:07 - * Description:  This file is for - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - */ - -#ifndef BOARD_COMMON_CPU_INFO_H -#define BOARD_COMMON_CPU_INFO_H - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include "ftypes.h" -#include "ferror_code.h" -u32 GetAffinity(void); -FError GetCpuId(u32 *cpu_id_p); -FError GetCpuAffinity(u32 cpu_id, u64 *cluster_value_p); -FError GetCpuAffinityByMask(u32 cpu_id, u64 *affinity_level_p); -FError UseAffinityGetCpuId(u64 affinity_level, u32 *cpu_id_p); -u32 GetCpuMaskToAffval(u32 *cpu_mask, u32 *cluster_id, u32 *target_list); -#ifdef __cplusplus -} -#endif - -#endif // ! \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/board/common/fsmp.c b/bsp/phytium/libraries/standalone/board/common/fsmp.c deleted file mode 100644 index 806e33d2ef..0000000000 --- a/bsp/phytium/libraries/standalone/board/common/fsmp.c +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fsmp.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-17 17:58:14 - * Description:  This files is for a way to provide spinlocks for multicore operations - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * v1.1 carl 2022-12-30 add init function - * v1.2 cark 2023-02-28 Use GCC built-in functions to implement spinlock - */ - -#if 0 - -#include "fsmp.h" -#include "sdkconfig.h" -#include "ftypes.h" -#include "fatomic.h" - - -typedef struct -{ - int v; -}FCpuLock; - - -#ifdef CONFIG_SPIN_MEM - FCpuLock *_lock = (FCpuLock *)CONFIG_SPIN_MEM; -#else - FCpuLock _static_lock ; - FCpuLock *_lock = &_static_lock ; -#endif - - -void SpinUnlock(void) -{ - FATOMIC_UNLOCK(_lock->v); -} - -void SpinLock(void) -{ - - while(FATOMIC_LOCK(_lock->v,1)) - { - - } - -} - -void SpinInit(void) -{ - FATOMIC_UNLOCK(_lock->v); -} - -#endif \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/board/common/fsmp.h b/bsp/phytium/libraries/standalone/board/common/fsmp.h deleted file mode 100644 index e16f69a616..0000000000 --- a/bsp/phytium/libraries/standalone/board/common/fsmp.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fsmp.h - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-17 17:58:18 - * Description:  This file is for spinlock function - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 carl 2023-02-28 Use GCC built-in functions to implement spinlock - */ - - -#ifndef BSP_BOARD_COMMON_SMP_H -#define BSP_BOARD_COMMON_SMP_H - -#include "ftypes.h" - - -#ifdef __cplusplus -extern "C" -{ -#endif - -void SpinInit(void); -void SpinLock(void); -void SpinUnlock(void); - -#ifdef __cplusplus -} -#endif - - -#endif // DEBUG \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/board/e2000/d/fparameters.h b/bsp/phytium/libraries/standalone/board/e2000/d/fparameters.h deleted file mode 100644 index d97c0e590c..0000000000 --- a/bsp/phytium/libraries/standalone/board/e2000/d/fparameters.h +++ /dev/null @@ -1,298 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fparameters.h - * Date: 2022-02-11 13:33:28 - * LastEditTime: 2022-02-17 18:00:50 - * Description:  This file is for - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - */ - -#ifndef BOARD_E2000D_PARAMTERERS_H -#define BOARD_E2000D_PARAMTERERS_H - -#ifdef __cplusplus -extern "C" -{ -#endif - -/***************************** Include Files *********************************/ -#include "fparameters_comm.h" - -/************************** Constant Definitions *****************************/ -#define CORE0_AFF 0x200U -#define CORE1_AFF 0x201U -#define FCORE_NUM 2 - -#define FT_CPUS_NR 2U - -/* GIC offset */ -#define FT_GIC_REDISTRUBUTIOR_OFFSET 2 - -/* register offset of iopad function / pull / driver strength */ -#define FIOPAD_AN55_REG0_OFFSET 0x0000U -#define FIOPAD_AW43_REG0_OFFSET 0x0004U -#define FIOPAD_AR51_REG0_OFFSET 0x0020U -#define FIOPAD_AJ51_REG0_OFFSET 0x0024U -#define FIOPAD_AL51_REG0_OFFSET 0x0028U -#define FIOPAD_AL49_REG0_OFFSET 0x002CU -#define FIOPAD_AN47_REG0_OFFSET 0x0030U -#define FIOPAD_AR47_REG0_OFFSET 0x0034U -#define FIOPAD_BA53_REG0_OFFSET 0x0038U -#define FIOPAD_BA55_REG0_OFFSET 0x003CU -#define FIOPAD_AW53_REG0_OFFSET 0x0040U -#define FIOPAD_AW55_REG0_OFFSET 0x0044U -#define FIOPAD_AU51_REG0_OFFSET 0x0048U -#define FIOPAD_AN53_REG0_OFFSET 0x004CU -#define FIOPAD_AL55_REG0_OFFSET 0x0050U -#define FIOPAD_AJ55_REG0_OFFSET 0x0054U -#define FIOPAD_AJ53_REG0_OFFSET 0x0058U -#define FIOPAD_AG55_REG0_OFFSET 0x005CU -#define FIOPAD_AG53_REG0_OFFSET 0x0060U -#define FIOPAD_AE55_REG0_OFFSET 0x0064U -#define FIOPAD_AC55_REG0_OFFSET 0x0068U -#define FIOPAD_AC53_REG0_OFFSET 0x006CU -#define FIOPAD_AR45_REG0_OFFSET 0x0070U -#define FIOPAD_BA51_REG0_OFFSET 0x0074U -#define FIOPAD_BA49_REG0_OFFSET 0x0078U -#define FIOPAD_AR55_REG0_OFFSET 0x007CU -#define FIOPAD_AU55_REG0_OFFSET 0x0080U -#define FIOPAD_AR53_REG0_OFFSET 0x0084U -#define FIOPAD_BA45_REG0_OFFSET 0x0088U -#define FIOPAD_AW51_REG0_OFFSET 0x008CU -#define FIOPAD_A31_REG0_OFFSET 0x0090U -#define FIOPAD_R53_REG0_OFFSET 0x0094U -#define FIOPAD_R55_REG0_OFFSET 0x0098U -#define FIOPAD_U55_REG0_OFFSET 0x009CU -#define FIOPAD_W55_REG0_OFFSET 0x00A0U -#define FIOPAD_U53_REG0_OFFSET 0x00A4U -#define FIOPAD_AA53_REG0_OFFSET 0x00A8U -#define FIOPAD_AA55_REG0_OFFSET 0x00ACU -#define FIOPAD_AW47_REG0_OFFSET 0x00B0U -#define FIOPAD_AU47_REG0_OFFSET 0x00B4U -#define FIOPAD_A35_REG0_OFFSET 0x00B8U -#define FIOPAD_C35_REG0_OFFSET 0x00BCU -#define FIOPAD_C33_REG0_OFFSET 0x00C0U -#define FIOPAD_A33_REG0_OFFSET 0x00C4U -#define FIOPAD_A37_REG0_OFFSET 0x00C8U -#define FIOPAD_A39_REG0_OFFSET 0x00CCU -#define FIOPAD_A41_REG0_OFFSET 0x00D0U -#define FIOPAD_C41_REG0_OFFSET 0x00D4U -#define FIOPAD_A43_REG0_OFFSET 0x00D8U -#define FIOPAD_A45_REG0_OFFSET 0x00DCU -#define FIOPAD_C45_REG0_OFFSET 0x00E0U -#define FIOPAD_A47_REG0_OFFSET 0x00E4U -#define FIOPAD_A29_REG0_OFFSET 0x00E8U -#define FIOPAD_C29_REG0_OFFSET 0x00ECU -#define FIOPAD_C27_REG0_OFFSET 0x00F0U -#define FIOPAD_A27_REG0_OFFSET 0x00F4U -#define FIOPAD_AJ49_REG0_OFFSET 0x00F8U -#define FIOPAD_AL45_REG0_OFFSET 0x00FCU -#define FIOPAD_AL43_REG0_OFFSET 0x0100U -#define FIOPAD_AN45_REG0_OFFSET 0x0104U -#define FIOPAD_AG47_REG0_OFFSET 0x0108U -#define FIOPAD_AJ47_REG0_OFFSET 0x010CU -#define FIOPAD_AG45_REG0_OFFSET 0x0110U -#define FIOPAD_AE51_REG0_OFFSET 0x0114U -#define FIOPAD_AE49_REG0_OFFSET 0x0118U -#define FIOPAD_AG51_REG0_OFFSET 0x011CU -#define FIOPAD_AJ45_REG0_OFFSET 0x0120U -#define FIOPAD_AC51_REG0_OFFSET 0x0124U -#define FIOPAD_AC49_REG0_OFFSET 0x0128U -#define FIOPAD_AE47_REG0_OFFSET 0x012CU -#define FIOPAD_W47_REG0_OFFSET 0x0130U -#define FIOPAD_W51_REG0_OFFSET 0x0134U -#define FIOPAD_W49_REG0_OFFSET 0x0138U -#define FIOPAD_U51_REG0_OFFSET 0x013CU -#define FIOPAD_U49_REG0_OFFSET 0x0140U -#define FIOPAD_AE45_REG0_OFFSET 0x0144U -#define FIOPAD_AC45_REG0_OFFSET 0x0148U -#define FIOPAD_AE43_REG0_OFFSET 0x014CU -#define FIOPAD_AA43_REG0_OFFSET 0x0150U -#define FIOPAD_AA45_REG0_OFFSET 0x0154U -#define FIOPAD_W45_REG0_OFFSET 0x0158U -#define FIOPAD_AA47_REG0_OFFSET 0x015CU -#define FIOPAD_U45_REG0_OFFSET 0x0160U -#define FIOPAD_G55_REG0_OFFSET 0x0164U -#define FIOPAD_J55_REG0_OFFSET 0x0168U -#define FIOPAD_L53_REG0_OFFSET 0x016CU -#define FIOPAD_C55_REG0_OFFSET 0x0170U -#define FIOPAD_E55_REG0_OFFSET 0x0174U -#define FIOPAD_J53_REG0_OFFSET 0x0178U -#define FIOPAD_L55_REG0_OFFSET 0x017CU -#define FIOPAD_N55_REG0_OFFSET 0x0180U -#define FIOPAD_C53_REG0_OFFSET 0x0184U -#define FIOPAD_E53_REG0_OFFSET 0x0188U -#define FIOPAD_E27_REG0_OFFSET 0x018CU -#define FIOPAD_G27_REG0_OFFSET 0x0190U -#define FIOPAD_N37_REG0_OFFSET 0x0194U -#define FIOPAD_N35_REG0_OFFSET 0x0198U -#define FIOPAD_J29_REG0_OFFSET 0x019CU -#define FIOPAD_N29_REG0_OFFSET 0x01A0U -#define FIOPAD_L29_REG0_OFFSET 0x01A4U -#define FIOPAD_N41_REG0_OFFSET 0x01A8U -#define FIOPAD_N39_REG0_OFFSET 0x01ACU -#define FIOPAD_L27_REG0_OFFSET 0x01B0U -#define FIOPAD_J27_REG0_OFFSET 0x01B4U -#define FIOPAD_J25_REG0_OFFSET 0x01B8U -#define FIOPAD_E25_REG0_OFFSET 0x01BCU -#define FIOPAD_G25_REG0_OFFSET 0x01C0U -#define FIOPAD_N23_REG0_OFFSET 0x01C4U -#define FIOPAD_L25_REG0_OFFSET 0x01C8U -#define FIOPAD_J33_REG0_OFFSET 0x01CCU -#define FIOPAD_J35_REG0_OFFSET 0x01D0U -#define FIOPAD_G37_REG0_OFFSET 0x01D4U -#define FIOPAD_E39_REG0_OFFSET 0x01D8U -#define FIOPAD_L39_REG0_OFFSET 0x01DCU -#define FIOPAD_C39_REG0_OFFSET 0x01E0U -#define FIOPAD_E37_REG0_OFFSET 0x01E4U -#define FIOPAD_L41_REG0_OFFSET 0x01E8U -#define FIOPAD_J39_REG0_OFFSET 0x01ECU -#define FIOPAD_J37_REG0_OFFSET 0x01F0U -#define FIOPAD_L35_REG0_OFFSET 0x01F4U -#define FIOPAD_E33_REG0_OFFSET 0x01F8U -#define FIOPAD_E31_REG0_OFFSET 0x01FCU -#define FIOPAD_G31_REG0_OFFSET 0x0200U -#define FIOPAD_J31_REG0_OFFSET 0x0204U -#define FIOPAD_L33_REG0_OFFSET 0x0208U -#define FIOPAD_N31_REG0_OFFSET 0x020CU -#define FIOPAD_R47_REG0_OFFSET 0x0210U -#define FIOPAD_R45_REG0_OFFSET 0x0214U -#define FIOPAD_N47_REG0_OFFSET 0x0218U -#define FIOPAD_N51_REG0_OFFSET 0x021CU -#define FIOPAD_L51_REG0_OFFSET 0x0220U -#define FIOPAD_J51_REG0_OFFSET 0x0224U -#define FIOPAD_J41_REG0_OFFSET 0x0228U -#define FIOPAD_E43_REG0_OFFSET 0x022CU -#define FIOPAD_G43_REG0_OFFSET 0x0230U -#define FIOPAD_J43_REG0_OFFSET 0x0234U -#define FIOPAD_J45_REG0_OFFSET 0x0238U -#define FIOPAD_N45_REG0_OFFSET 0x023CU -#define FIOPAD_L47_REG0_OFFSET 0x0240U -#define FIOPAD_L45_REG0_OFFSET 0x0244U -#define FIOPAD_N49_REG0_OFFSET 0x0248U -#define FIOPAD_J49_REG0_OFFSET 0x024CU - -#define FIOPAD_REG0_BEG_OFFSET FIOPAD_AN55_REG0_OFFSET -#define FIOPAD_REG0_END_OFFSET FIOPAD_J49_REG0_OFFSET - -/* register offset of iopad delay */ -#define FIOPAD_AJ51_REG1_OFFSET 0x1024U -#define FIOPAD_AL51_REG1_OFFSET 0x1028U -#define FIOPAD_AL49_REG1_OFFSET 0x102CU -#define FIOPAD_AN47_REG1_OFFSET 0x1030U -#define FIOPAD_AR47_REG1_OFFSET 0x1034U -#define FIOPAD_AJ53_REG1_OFFSET 0x1058U -#define FIOPAD_AG55_REG1_OFFSET 0x105CU -#define FIOPAD_AG53_REG1_OFFSET 0x1060U -#define FIOPAD_AE55_REG1_OFFSET 0x1064U -#define FIOPAD_BA51_REG1_OFFSET 0x1074U -#define FIOPAD_BA49_REG1_OFFSET 0x1078U -#define FIOPAD_AR55_REG1_OFFSET 0x107CU -#define FIOPAD_AU55_REG1_OFFSET 0x1080U -#define FIOPAD_A41_REG1_OFFSET 0x10D0U -#define FIOPAD_C41_REG1_OFFSET 0x10D4U -#define FIOPAD_A43_REG1_OFFSET 0x10D8U -#define FIOPAD_A45_REG1_OFFSET 0x10DCU -#define FIOPAD_C45_REG1_OFFSET 0x10E0U -#define FIOPAD_A47_REG1_OFFSET 0x10E4U -#define FIOPAD_A29_REG1_OFFSET 0x10E8U -#define FIOPAD_C29_REG1_OFFSET 0x10ECU -#define FIOPAD_C27_REG1_OFFSET 0x10F0U -#define FIOPAD_A27_REG1_OFFSET 0x10F4U -#define FIOPAD_AJ49_REG1_OFFSET 0x10F8U -#define FIOPAD_AL45_REG1_OFFSET 0x10FCU -#define FIOPAD_AL43_REG1_OFFSET 0x1100U -#define FIOPAD_AN45_REG1_OFFSET 0x1104U -#define FIOPAD_AG47_REG1_OFFSET 0x1108U -#define FIOPAD_AJ47_REG1_OFFSET 0x110CU -#define FIOPAD_AG45_REG1_OFFSET 0x1110U -#define FIOPAD_AE51_REG1_OFFSET 0x1114U -#define FIOPAD_AE49_REG1_OFFSET 0x1118U -#define FIOPAD_AG51_REG1_OFFSET 0x111CU -#define FIOPAD_AJ45_REG1_OFFSET 0x1120U -#define FIOPAD_AC51_REG1_OFFSET 0x1124U -#define FIOPAD_AC49_REG1_OFFSET 0x1128U -#define FIOPAD_AE47_REG1_OFFSET 0x112CU -#define FIOPAD_W47_REG1_OFFSET 0x1130U -#define FIOPAD_W49_REG1_OFFSET 0x1138U -#define FIOPAD_U51_REG1_OFFSET 0x113CU -#define FIOPAD_U49_REG1_OFFSET 0x1140U -#define FIOPAD_AE45_REG1_OFFSET 0x1144U -#define FIOPAD_AC45_REG1_OFFSET 0x1148U -#define FIOPAD_AE43_REG1_OFFSET 0x114CU -#define FIOPAD_AA43_REG1_OFFSET 0x1150U -#define FIOPAD_AA45_REG1_OFFSET 0x1154U -#define FIOPAD_W45_REG1_OFFSET 0x1158U -#define FIOPAD_AA47_REG1_OFFSET 0x115CU -#define FIOPAD_U45_REG1_OFFSET 0x1160U -#define FIOPAD_J55_REG1_OFFSET 0x1168U -#define FIOPAD_L53_REG1_OFFSET 0x116CU -#define FIOPAD_C55_REG1_OFFSET 0x1170U -#define FIOPAD_E55_REG1_OFFSET 0x1174U -#define FIOPAD_J53_REG1_OFFSET 0x1178U -#define FIOPAD_L55_REG1_OFFSET 0x117CU -#define FIOPAD_N55_REG1_OFFSET 0x1180U -#define FIOPAD_E27_REG1_OFFSET 0x118CU -#define FIOPAD_G27_REG1_OFFSET 0x1190U -#define FIOPAD_N37_REG1_OFFSET 0x1194U -#define FIOPAD_N35_REG1_OFFSET 0x1198U -#define FIOPAD_J29_REG1_OFFSET 0x119CU -#define FIOPAD_N29_REG1_OFFSET 0x11A0U -#define FIOPAD_L29_REG1_OFFSET 0x11A4U -#define FIOPAD_N41_REG1_OFFSET 0x11A8U -#define FIOPAD_N39_REG1_OFFSET 0x11ACU -#define FIOPAD_L27_REG1_OFFSET 0x11B0U -#define FIOPAD_J27_REG1_OFFSET 0x11B4U -#define FIOPAD_J25_REG1_OFFSET 0x11B8U -#define FIOPAD_E25_REG1_OFFSET 0x11BCU -#define FIOPAD_G25_REG1_OFFSET 0x11C0U -#define FIOPAD_J33_REG1_OFFSET 0x11CCU -#define FIOPAD_J35_REG1_OFFSET 0x11D0U -#define FIOPAD_G37_REG1_OFFSET 0x11D4U -#define FIOPAD_E39_REG1_OFFSET 0x11D8U -#define FIOPAD_L39_REG1_OFFSET 0x11DCU -#define FIOPAD_C39_REG1_OFFSET 0x11E0U -#define FIOPAD_E37_REG1_OFFSET 0x11E4U -#define FIOPAD_L41_REG1_OFFSET 0x11E8U -#define FIOPAD_J39_REG1_OFFSET 0x11ECU -#define FIOPAD_J37_REG1_OFFSET 0x11F0U -#define FIOPAD_L35_REG1_OFFSET 0x11F4U -#define FIOPAD_E33_REG1_OFFSET 0x11F8U -#define FIOPAD_E31_REG1_OFFSET 0x11FCU -#define FIOPAD_G31_REG1_OFFSET 0x1200U -#define FIOPAD_L51_REG1_OFFSET 0x1220U -#define FIOPAD_J51_REG1_OFFSET 0x1224U -#define FIOPAD_J41_REG1_OFFSET 0x1228U -#define FIOPAD_E43_REG1_OFFSET 0x122CU -#define FIOPAD_G43_REG1_OFFSET 0x1230U -#define FIOPAD_J43_REG1_OFFSET 0x1234U -#define FIOPAD_J45_REG1_OFFSET 0x1238U -#define FIOPAD_N45_REG1_OFFSET 0x123CU -#define FIOPAD_L47_REG1_OFFSET 0x1240U -#define FIOPAD_L45_REG1_OFFSET 0x1244U -#define FIOPAD_N49_REG1_OFFSET 0x1248U -#define FIOPAD_J49_REG1_OFFSET 0x124CU - -#define FIOPAD_REG1_BEG_OFFSET FIOPAD_AJ51_REG1_OFFSET -#define FIOPAD_REG1_END_OFFSET FIOPAD_J49_REG1_OFFSET - -#ifdef __cplusplus -} - -#endif - -#endif \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/board/e2000/fparameters_comm.h b/bsp/phytium/libraries/standalone/board/e2000/fparameters_comm.h deleted file mode 100644 index eeecdf778e..0000000000 --- a/bsp/phytium/libraries/standalone/board/e2000/fparameters_comm.h +++ /dev/null @@ -1,725 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fparameters_comm.h - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-17 18:01:11 - * Description:  This file is for - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - */ - -#ifndef BOARD_E2000_PARAMTERERS_COMMON_H -#define BOARD_E2000_PARAMTERERS_COMMON_H - -#ifdef __cplusplus -extern "C" -{ -#endif - -/***************************** Include Files *********************************/ -#if !defined(__ASSEMBLER__) -#include "ftypes.h" -#endif - -/************************** Constant Definitions *****************************/ -/* CACHE */ -#define CACHE_LINE_ADDR_MASK 0x3FUL -#define CACHE_LINE 64U - -/* DEVICE Register Address */ -#define FT_DEV_BASE_ADDR 0x28000000U -#define FT_DEV_END_ADDR 0x2FFFFFFFU - -/* PCI */ -#define FPCIE_NUM 1 -#define FPCIE0_ID 0 -#define FPCIE0_MISC_IRQ_NUM 40 - -#define FPCIE_CFG_MAX_NUM_OF_BUS 256 -#define FPCIE_CFG_MAX_NUM_OF_DEV 32 -#define FPCIE_CFG_MAX_NUM_OF_FUN 8 - -#define FPCI_CONFIG_BASE_ADDR 0x40000000U -#define FPCI_CONFIG_REG_LENGTH 0x10000000U - -#define FPCI_IO_CONFIG_BASE_ADDR 0x50000000U -#define FPCI_IO_CONFIG_REG_LENGTH 0x08000000U - -#define FPCI_MEM32_BASE_ADDR 0x58000000U -#define FPCI_MEM32_REG_LENGTH 0x27FFFFFFU - -#define FPCI_MEM64_BASE_ADDR 0x1000000000U -#define FPCI_MEM64_REG_LENGTH 0x1000000000U - -#define FPCI_EU0_C0_CONTROL_BASE_ADDR 0x29000000U -#define FPCI_EU0_C1_CONTROL_BASE_ADDR 0x29010000U -#define FPCI_EU0_C2_CONTROL_BASE_ADDR 0x29020000U -#define FPCI_EU1_C0_CONTROL_BASE_ADDR 0x29030000U -#define FPCI_EU1_C1_CONTROL_BASE_ADDR 0x29040000U -#define FPCI_EU1_C2_CONTROL_BASE_ADDR 0x29050000U - -#define FPCI_EU0_CONFIG_BASE_ADDR 0x29100000U -#define FPCI_EU1_CONFIG_BASE_ADDR 0x29101000U - -#define FPCI_INTA_IRQ_NUM 36 -#define FPCI_INTB_IRQ_NUM 37 -#define FPCI_INTC_IRQ_NUM 38 -#define FPCI_INTD_IRQ_NUM 39 - -#define FPCI_NEED_SKIP 0 - -#define FPCI_INTX_PEU0_STAT 0x29100000U -#define FPCI_INTX_PEU1_STAT 0x29101000U - -#define FPCI_INTX_EU0_C0_CONTROL 0x29000184U -#define FPCI_INTX_EU0_C1_CONTROL 0x29010184U -#define FPCI_INTX_EU0_C2_CONTROL 0x29020184U -#define FPCI_INTX_EU1_C0_CONTROL 0x29030184U -#define FPCI_INTX_EU1_C1_CONTROL 0x29040184U -#define FPCI_INTX_EU1_C2_CONTROL 0x29050184U - -#define FPCI_INTX_CONTROL_NUM 6 /* Total number of controllers */ -#define FPCI_INTX_SATA_NUM 2 /* Total number of controllers */ - - -/* platform ahci host */ -#define PLAT_AHCI_HOST_MAX_COUNT 5 -#define AHCI_BASE_0 0 -#define AHCI_BASE_1 0 -#define AHCI_BASE_2 0 -#define AHCI_BASE_3 0 -#define AHCI_BASE_4 0 - -#define AHCI_IRQ_0 0 -#define AHCI_IRQ_1 0 -#define AHCI_IRQ_2 0 -#define AHCI_IRQ_3 0 -#define AHCI_IRQ_4 0 - -/* sata controller */ -#define FSATA0_BASE_ADDR 0x31A40000U -#define FSATA1_BASE_ADDR 0x32014000U - -#define FSATA0_IRQ_NUM 74 -#define FSATA1_IRQ_NUM 75 - -#if !defined(__ASSEMBLER__) -enum -{ - FSATA0_ID = 0, - FSATA1_ID = 1, - - FSATA_NUM -}; -#endif - -/* SCMI and MHU */ -#define FSCMI_MHU_BASE_ADDR 0x32a00000 -#define FSCMI_MHU_IRQ_NUM (22U + 32U) -#define FSCMI_SHR_MEM_ADDR 0x32a11400 -#define FSCMI_MEM_TX_OFSET 0x1400 -#define FSCMI_MEM_RX_OFSET 0x1000 -#define FSCMI_SHR_MEM_SIZE 0x400 - -#define FSCMI_MSG_SIZE 128 -#define FSCMI_MAX_STR_SIZE 16 -#define FSCMI_MAX_NUM_SENSOR 16 -#define FSCMI_MAX_PROTOCOLS_IMP 16 -#define FSCMI_MAX_PERF_DOMAINS 3 -#define FSCMI_MAX_OPPS 4 - -/* UART */ -#define FUART_NUM 4U -#define FUART_REG_LENGTH 0x18000U - -#define FUART0_ID 0U -#define FUART0_IRQ_NUM (85 + 30) -#define FUART0_BASE_ADDR 0x2800c000U -#define FUART0_CLK_FREQ_HZ 100000000U - -#define FUART1_ID 1U -#define FUART1_IRQ_NUM (86 + 30) -#define FUART1_BASE_ADDR 0x2800d000U -#define FUART1_CLK_FREQ_HZ 100000000U - -#define FUART2_ID 2U -#define FUART2_IRQ_NUM (87 + 30) -#define FUART2_BASE_ADDR 0x2800e000U -#define FUART2_CLK_FREQ_HZ 100000000U - -#define FUART3_BASE_ADDR 0x2800f000U -#define FUART3_ID 3U -#define FUART3_IRQ_NUM (88 + 30) -#define FUART3_CLK_FREQ_HZ 100000000U - -#define FT_STDOUT_BASE_ADDR FUART1_BASE_ADDR -#define FT_STDIN_BASE_ADDR FUART1_BASE_ADDR - -/****** GIC v3 *****/ -#define FT_GICV3_INSTANCES_NUM 1U -#define GICV3_REG_LENGTH 0x00009000U - -/* - * The maximum priority value that can be used in the GIC. - */ -#define GICV3_MAX_INTR_PRIO_VAL 240U -#define GICV3_INTR_PRIO_MASK 0x000000f0U - -#define ARM_GIC_NR_IRQS 270U -#define ARM_GIC_IRQ_START 0U -#define FGIC_NUM 1U - -#define ARM_GIC_IPI_COUNT 16U /* MPCore IPI count */ -#define SGI_INT_MAX 16U -#define SPI_START_INT_NUM 32U /* SPI start at ID32 */ -#define PPI_START_INT_NUM 16U /* PPI start at ID16 */ -#define GIC_INT_MAX_NUM 1020U /* GIC max interrupts count */ - -#define GICV3_BASE_ADDR 0x30800000U -#define GICV3_DISTRIBUTOR_BASE_ADDR (GICV3_BASE_ADDR + 0) -#define GICV3_RD_BASE_ADDR (GICV3_BASE_ADDR + 0x80000U) -#define GICV3_RD_OFFSET (2U << 16) -#define FT_GICV3_VECTORTABLE_NUM GIC_INT_MAX_NUM - -/* GPIO */ -#if !defined(__ASSEMBLER__) -enum -{ - FGPIO0_ID = 0, - FGPIO1_ID = 1, - FGPIO2_ID, - FGPIO3_ID, - FGPIO4_ID, - FGPIO5_ID, - - FGPIO_NUM -}; -#endif - -#define FGPIO_WITH_PIN_IRQ 2U /* max id of gpio assign irq for each pin */ - -#define FGPIO0_BASE_ADDR 0x28034000U -#define FGPIO1_BASE_ADDR 0x28035000U -#define FGPIO2_BASE_ADDR 0x28036000U -#define FGPIO3_BASE_ADDR 0x28037000U -#define FGPIO4_BASE_ADDR 0x28038000U -#define FGPIO5_BASE_ADDR 0x28039000U - -#define FGPIO_CTRL_PIN_NUM 16U - -#define FGPIO_PIN_IRQ_BASE 140U -#define FGPIO_PIN_IRQ_NUM_GET(id, pin) (FGPIO_PIN_IRQ_BASE + FGPIO_CTRL_PIN_NUM * (id) + (pin)) - -#define FGPIO_3_IRQ_NUM 188U -#define FGPIO_4_IRQ_NUM 189U -#define FGPIO_5_IRQ_NUM 190U - -#define FGPIO_PIN_IRQ_TOTAL 51U - -/* SPI */ -#define FSPI0_BASE_ADDR 0x2803A000U -#define FSPI1_BASE_ADDR 0x2803B000U -#define FSPI2_BASE 0x2803C000U -#define FSPI3_BASE 0x2803D000U -#define FSPI0_ID 0U -#define FSPI1_ID 1U -#define FSPI2_ID 2U -#define FSPI3_ID 3U - -#define FSPI0_IRQ_NUM 191U -#define FSPI1_IRQ_NUM 192U -#define FSPI2_IRQ_NUM 193U -#define FSPI3_IRQ_NUM 194U - -#define FSPI_CLK_FREQ_HZ 50000000U -#define FSPI_NUM 4U - -/* XMAC */ -#define FXMAC_NUM 4U - -#define FXMAC0_ID 0U -#define FXMAC1_ID 1U -#define FXMAC2_ID 2U -#define FXMAC3_ID 3U - -#define FXMAC0_BASE_ADDR 0x3200C000U -#define FXMAC1_BASE_ADDR 0x3200E000U -#define FXMAC2_BASE_ADDR 0x32010000U -#define FXMAC3_BASE_ADDR 0x32012000U - -#define FXMAC0_MODE_SEL_BASE_ADDR 0x3200DC00U -#define FXMAC0_LOOPBACK_SEL_BASE_ADDR 0x3200DC04U -#define FXMAC1_MODE_SEL_BASE_ADDR 0x3200FC00U -#define FXMAC1_LOOPBACK_SEL_BASE_ADDR 0x3200FC04U -#define FXMAC2_MODE_SEL_BASE_ADDR 0x32011C00U -#define FXMAC2_LOOPBACK_SEL_BASE_ADDR 0x32011C04U -#define FXMAC3_MODE_SEL_BASE_ADDR 0x32013C00U -#define FXMAC3_LOOPBACK_SEL_BASE_ADDR 0x32013C04U - -#define FXMAC0_PCLK 50000000U -#define FXMAC1_PCLK 50000000U -#define FXMAC2_PCLK 50000000U -#define FXMAC3_PCLK 50000000U -#define FXMAC0_HOTPLUG_IRQ_NUM (53U + 30U) -#define FXMAC1_HOTPLUG_IRQ_NUM (54U + 30U) -#define FXMAC2_HOTPLUG_IRQ_NUM (55U + 30U) -#define FXMAC3_HOTPLUG_IRQ_NUM (56U + 30U) - -#define FXMAC_QUEUE_MAX_NUM 16U - -#define FXMAC0_QUEUE0_IRQ_NUM (57U + 30U) -#define FXMAC0_QUEUE1_IRQ_NUM (58U + 30U) -#define FXMAC0_QUEUE2_IRQ_NUM (59U + 30U) -#define FXMAC0_QUEUE3_IRQ_NUM (60U + 30U) -#define FXMAC0_QUEUE4_IRQ_NUM (30U + 30U) -#define FXMAC0_QUEUE5_IRQ_NUM (31U + 30U) -#define FXMAC0_QUEUE6_IRQ_NUM (32U + 30U) -#define FXMAC0_QUEUE7_IRQ_NUM (33U + 30U) - -#define FXMAC1_QUEUE0_IRQ_NUM (61U + 30U) -#define FXMAC1_QUEUE1_IRQ_NUM (62U + 30U) -#define FXMAC1_QUEUE2_IRQ_NUM (63U + 30U) -#define FXMAC1_QUEUE3_IRQ_NUM (64U + 30U) - -#define FXMAC2_QUEUE0_IRQ_NUM (66U + 30U) -#define FXMAC2_QUEUE1_IRQ_NUM (67U + 30U) -#define FXMAC2_QUEUE2_IRQ_NUM (68U + 30U) -#define FXMAC2_QUEUE3_IRQ_NUM (69U + 30U) - -#define FXMAC3_QUEUE0_IRQ_NUM (70U + 30U) -#define FXMAC3_QUEUE1_IRQ_NUM (71U + 30U) -#define FXMAC3_QUEUE2_IRQ_NUM (72U + 30U) -#define FXMAC3_QUEUE3_IRQ_NUM (73U + 30U) - -#define FXMAC_PHY_MAX_NUM 32U - -#define FXMAC_CLK_TYPE_0 - -#if !defined(__ASSEMBLER__) -/* IOPAD */ -enum -{ - FIOPAD0_ID = 0, - - FIOPAD_NUM -}; -#endif - -/* QSPI */ -#if !defined(__ASSEMBLER__) -enum -{ - FQSPI0_ID = 0, - - FQSPI_NUM -}; - -#define FQSPI_BASE_ADDR 0x028008000U - -/* FQSPI cs 0_3, chip number */ -enum -{ - FQSPI_CS_0 = 0, - FQSPI_CS_1 = 1, - FQSPI_CS_2 = 2, - FQSPI_CS_3 = 3, - FQSPI_CS_NUM -}; - -#endif - -#define FQSPI_MEM_START_ADDR 0x0U -#define FQSPI_MEM_END_ADDR 0x0FFFFFFFU /* 256MB */ -#define FQSPI_MEM_START_ADDR_64 0x100000000U -#define FQSPI_MEM_END_ADDR_64 0x17FFFFFFFU /* 2GB */ - -/* TIMER and TACHO */ -#define FTIMER_NUM 38U -#define FTIMER_CLK_FREQ_HZ 50000000ULL /* 50MHz */ -#define FTIMER_TICK_PERIOD_NS 20U /* 20ns */ -#define FTIMER_TACHO_IRQ_NUM(n) (226U + (n)) -#define FTIMER_TACHO_BASE_ADDR(n) (0x28054000U + 0x1000U * (n)) - -#if !defined(__ASSEMBLER__) -enum -{ - FTACHO0_ID = 0, - FTACHO1_ID = 1, - FTACHO2_ID, - FTACHO3_ID, - FTACHO4_ID, - FTACHO5_ID, - FTACHO6_ID, - FTACHO7_ID, - FTACHO8_ID, - FTACHO9_ID, - FTACHO10_ID, - FTACHO11_ID, - FTACHO12_ID, - FTACHO13_ID, - FTACHO14_ID, - FTACHO15_ID, - - FTACHO_NUM -} ; -#endif - -/* GDMA */ -#define FGDMA0_ID 0U -#define FGDMA0_BASE_ADDR 0x32B34000U -#define FGDMA0_CHANNEL0_IRQ_NUM 266U -#define FGDMA_NUM_OF_CHAN 16 -#define FGDMA_INSTANCE_NUM 1U -#define FGDMA0_CAPACITY (1U<<0) - -/* CANFD */ -#define FCAN_CLK_FREQ_HZ 200000000U - -#define FCAN0_BASE_ADDR 0x2800A000U -#define FCAN1_BASE_ADDR 0x2800B000U - -#define FCAN0_IRQ_NUM 113U -#define FCAN1_IRQ_NUM 114U - -#if !defined(__ASSEMBLER__) -enum -{ - FCAN0_ID = 0, - FCAN1_ID = 1, - - FCAN_NUM -}; -#endif - -/* WDT */ -#if !defined(__ASSEMBLER__) -enum -{ - FWDT0_ID = 0, - FWDT1_ID, - - FWDT_NUM -}; -#endif - -#define FWDT0_REFRESH_BASE_ADDR 0x28040000U -#define FWDT1_REFRESH_BASE_ADDR 0x28042000U - -#define FWDT_CONTROL_BASE_ADDR(x) ((x)+0x1000) - -#define FWDT0_IRQ_NUM 196U -#define FWDT1_IRQ_NUM 197U - -#define FWDT_CLK_FREQ_HZ 48000000U /* 48MHz */ - -/*MIO*/ -#define FMIO_BASE_ADDR(n) (0x28014000 + 0x2000 * (n)) -#define FMIO_CONF_ADDR(n) FMIO_BASE_ADDR(n)+0x1000 -#define FMIO_IRQ_NUM(n) (124+n) -#define FMIO_CLK_FREQ_HZ 50000000 /* 50MHz */ - -#if !defined(__ASSEMBLER__) -enum -{ - FMIO0_ID = 0, - FMIO1_ID = 1, - FMIO2_ID, - FMIO3_ID, - FMIO4_ID, - FMIO5_ID, - FMIO6_ID, - FMIO7_ID, - FMIO8_ID, - FMIO9_ID, - FMIO10_ID, - FMIO11_ID, - FMIO12_ID, - FMIO13_ID, - FMIO14_ID, - FMIO15_ID, - - FMIO_NUM -}; -#endif - -#if !defined(__ASSEMBLER__) -/*I2C0 -> PMBUS0 -* I2C1 -> PMBUS1 -* I2C2 -> SMBUS0 -*/ -enum -{ - FI2C0_ID = 0, - FI2C1_ID, - FI2C2_ID, - - FI2C_NUM -}; -#endif - -#define FI2C0_BASE_ADDR 0x28011000 -#define FI2C1_BASE_ADDR 0x28012000 -#define FI2C2_BASE_ADDR 0x28013000 - -#define FI2C0_IRQ_NUM 121 -#define FI2C1_IRQ_NUM 122 -#define FI2C2_IRQ_NUM 123 - -#define FI2C_CLK_FREQ_HZ 50000000 /* 50MHz */ - -/* SDIO */ -#if !defined(__ASSEMBLER__) -enum -{ - FSDIO0_ID = 0, - FSDIO1_ID = 1, - - FSDIO_NUM -}; -#endif - -#define FSDIO0_BASE_ADDR 0x28000000U -#define FSDIO1_BASE_ADDR 0x28001000U - -#define FSDIO0_IRQ_NUM 104U -#define FSDIO1_IRQ_NUM 105U - -#define FSDIO_CLK_FREQ_HZ (1200000000UL) /* 1.2GHz */ - -/* NAND */ -#define FNAND_NUM 1U -#define FNAND_INSTANCE0 0U -#define FNAND_BASE_ADDR 0x28002000U -#define FNAND_IRQ_NUM (106U) -#define FNAND_CONNECT_MAX_NUM 1U - -#define FIOPAD_BASE_ADDR 0x32B30000U - -/* DDMA */ -#define FDDMA0_ID 0U -#define FDDMA0_BASE_ADDR 0x28003000U -#define FDDMA0_IRQ_NUM 107U - -#define FDDMA1_ID 1U -#define FDDMA1_BASE_ADDR 0x28004000U -#define FDDMA1_IRQ_NUM 108U - -#define FDDMA_INSTANCE_NUM 2U - -#define FDDMA0_UART0_TX_SLAVE_ID 2U /* uart0 tx slave-id */ -#define FDDMA0_UART1_TX_SLAVE_ID 3U /* uart1 tx slave-id */ -#define FDDMA0_UART2_TX_SLAVE_ID 4U /* uart2 tx slave-id */ -#define FDDMA0_UART3_TX_SLAVE_ID 5U /* uart3 tx slave-id */ - -#define FDDMA0_SPIM0_TX_SLAVE_ID 6U /* spi0 tx slave-id */ -#define FDDMA0_SPIM1_TX_SLAVE_ID 7U /* spi1 tx slave-id */ -#define FDDMA0_SPIM2_TX_SLAVE_ID 8U /* spi2 tx slave-id */ -#define FDDMA0_SPIM3_TX_SLAVE_ID 9U /* spi3 tx slave-id */ - -#define FDDMA0_UART0_RX_SLAVE_ID 15U /* uart0 rx slave-id */ -#define FDDMA0_UART1_RX_SLAVE_ID 16U /* uart1 rx slave-id */ -#define FDDMA0_UART2_RX_SLAVE_ID 17U /* uart2 rx slave-id */ -#define FDDMA0_UART3_RX_SLAVE_ID 18U /* uart3 rx slave-id */ - -#define FDDMA0_SPIM0_RX_SLAVE_ID 19U /* spi0 rx slave-id */ -#define FDDMA0_SPIM1_RX_SLAVE_ID 20U /* spi1 rx slave-id */ -#define FDDMA0_SPIM2_RX_SLAVE_ID 21U /* spi2 rx slave-id */ -#define FDDMA0_SPIM3_RX_SLAVE_ID 22U /* spi3 rx slave-id */ - -/* FDDMA1_ID */ -#define FDDMA1_MIO0_TX_SLAVE_ID 0U /* mio0 rx slave-id */ -#define FDDMA1_MIO1_TX_SLAVE_ID 1U /* mio1 rx slave-id */ -#define FDDMA1_MIO2_TX_SLAVE_ID 2U /* mio2 rx slave-id */ -#define FDDMA1_MIO3_TX_SLAVE_ID 3U /* mio3 rx slave-id */ -#define FDDMA1_MIO4_TX_SLAVE_ID 4U /* mio4 rx slave-id */ -#define FDDMA1_MIO5_TX_SLAVE_ID 5U /* mio5 rx slave-id */ -#define FDDMA1_MIO6_TX_SLAVE_ID 6U /* mio6 rx slave-id */ -#define FDDMA1_MIO7_TX_SLAVE_ID 7U /* mio7 rx slave-id */ -#define FDDMA1_MIO8_TX_SLAVE_ID 8U /* mio8 rx slave-id */ -#define FDDMA1_MIO9_TX_SLAVE_ID 9U /* mio9 rx slave-id */ -#define FDDMA1_MIO10_TX_SLAVE_ID 10U /* mio10 rx slave-id */ -#define FDDMA1_MIO11_TX_SLAVE_ID 11U /* mio11 rx slave-id */ -#define FDDMA1_MIO12_TX_SLAVE_ID 12U /* mio12 rx slave-id */ -#define FDDMA1_MIO13_TX_SLAVE_ID 13U /* mio13 rx slave-id */ -#define FDDMA1_MIO14_TX_SLAVE_ID 14U /* mio14 rx slave-id */ -#define FDDMA1_MIO15_TX_SLAVE_ID 15U /* mio15 rx slave-id */ - -#define FDDMA1_MIO0_RX_SLAVE_ID 16U /* mio0 tx slave-id */ -#define FDDMA1_MIO1_RX_SLAVE_ID 17U /* mio1 tx slave-id */ -#define FDDMA1_MIO2_RX_SLAVE_ID 18U /* mio2 tx slave-id */ -#define FDDMA1_MIO3_RX_SLAVE_ID 19U /* mio3 tx slave-id */ -#define FDDMA1_MIO4_RX_SLAVE_ID 20U /* mio4 tx slave-id */ -#define FDDMA1_MIO5_RX_SLAVE_ID 21U /* mio5 tx slave-id */ -#define FDDMA1_MIO6_RX_SLAVE_ID 22U /* mio6 tx slave-id */ -#define FDDMA1_MIO7_RX_SLAVE_ID 23U /* mio7 tx slave-id */ -#define FDDMA1_MIO8_RX_SLAVE_ID 24U /* mio8 tx slave-id */ -#define FDDMA1_MIO9_RX_SLAVE_ID 25U /* mio9 tx slave-id */ -#define FDDMA1_MIO10_RX_SLAVE_ID 26U /* mio10 tx slave-id */ -#define FDDMA1_MIO11_RX_SLAVE_ID 27U /* mio11 tx slave-id */ -#define FDDMA1_MIO12_RX_SLAVE_ID 28U /* mio12 tx slave-id */ -#define FDDMA1_MIO13_RX_SLAVE_ID 29U /* mio13 tx slave-id */ -#define FDDMA1_MIO14_RX_SLAVE_ID 30U /* mio14 tx slave-id */ -#define FDDMA1_MIO15_RX_SLAVE_ID 31U /* mio15 tx slave-id */ - -#define FDDMA_MIN_SLAVE_ID 0U -#define FDDMA_MAX_SLAVE_ID 31U - -/* ADC */ -#if !defined(__ASSEMBLER__) -enum -{ - FADC0_ID = 0, - - FADC_NUM -}; - -typedef enum -{ - FADC_CHANNEL_0 = 0, - FADC_CHANNEL_1 = 1, - FADC_CHANNEL_2, - FADC_CHANNEL_3, - FADC_CHANNEL_4, - FADC_CHANNEL_5, - FADC_CHANNEL_6, - FADC_CHANNEL_7, - - FADC_CHANNEL_NUM -} FAdcChannel; - -#endif - -#define FADC0_BASE_ADDR 0x2807B000U - -#define FADC0_IRQ_NUM 264U - -/* PWM */ -#if !defined(__ASSEMBLER__) -enum -{ - FPWM0_ID = 0, - FPWM1_ID = 1, - FPWM2_ID, - FPWM3_ID, - FPWM4_ID, - FPWM5_ID, - FPWM6_ID, - FPWM7_ID, - - FPWM_NUM -}; - -typedef enum -{ - FPWM_CHANNEL_0 = 0, - FPWM_CHANNEL_1, - - FPWM_CHANNEL_NUM -} FPwmChannel; -#endif - -#define FPWM_BASE_ADDR 0x2804A000U - -#define FPWM_CLK_FREQ_HZ 50000000U /* 50MHz */ - -#define FPWM0_IRQ_NUM 205U -#define FPWM1_IRQ_NUM 206U -#define FPWM2_IRQ_NUM 207U -#define FPWM3_IRQ_NUM 208U -#define FPWM4_IRQ_NUM 209U -#define FPWM5_IRQ_NUM 210U -#define FPWM6_IRQ_NUM 211U -#define FPWM7_IRQ_NUM 212U -#define FPWM8_IRQ_NUM 213U -#define FPWM9_IRQ_NUM 214U -#define FPWM10_IRQ_NUM 215U -#define FPWM11_IRQ_NUM 216U -#define FPWM12_IRQ_NUM 217U -#define FPWM13_IRQ_NUM 218U -#define FPWM14_IRQ_NUM 219U -#define FPWM15_IRQ_NUM 220U - -/* Semaphore */ -#define FSEMA0_ID 0U -#define FSEMA0_BASE_ADDR 0x32B36000U -#define FSEMA_INSTANCE_NUM 1U - -/* LSD Config */ -#define FLSD_CONFIG_BASE 0x2807E000U -#define FLSD_NAND_MMCSD_HADDR 0xC0U -#define FLSD_CK_STOP_CONFIG0_HADDR 0x10U - -/* USB3 */ -#define FUSB3_ID_0 0U -#define FUSB3_ID_1 1U -#define FUSB3_NUM 2U -#define FUSB3_XHCI_OFFSET 0x8000U -#define FUSB3_0_BASE_ADDR 0x31A00000U -#define FUSB3_1_BASE_ADDR 0x31A20000U -#define FUSB3_0_IRQ_NUM 48U -#define FUSB3_1_IRQ_NUM 49U - -/* DcDp */ -#if !defined(__ASSEMBLER__) - -typedef enum -{ - FDCDP_ID0 = 0, - FDCDP_ID1, - - FDCDP_INSTANCE_NUM -} FDcDpNum; - -#endif - -#define FDC_CTRL_BASE_OFFSET 0x32000000U - -#define FDC0_CHANNEL_BASE_OFFSET 0x32001000U -#define FDC1_CHANNEL_BASE_OFFSET (FDC0_CHANNEL_BASE_OFFSET + 0x1000U) - -#define FDP0_CHANNEL_BASE_OFFSET 0x32004000U -#define FDP1_CHANNEL_BASE_OFFSET (FDP0_CHANNEL_BASE_OFFSET + 0x1000U) - -#define FDP0_PHY_BASE_OFFSET 0x32300000U -#define FDP1_PHY_BASE_OFFSET (FDP0_PHY_BASE_OFFSET + 0x100000U) - -#define FDCDP_IRQ_NUM 76 - -/* generic timer */ -/* non-secure physical timer int id */ -#define GENERIC_TIMER_NS_IRQ_NUM 30U - -/* virtual timer int id */ -#define GENERIC_VTIMER_IRQ_NUM 27U - -#if !defined(__ASSEMBLER__) -enum -{ - GENERIC_TIMER_ID0 = 0, /* non-secure physical timer */ - GENERIC_TIMER_ID1 = 1, /* virtual timer */ - - GENERIC_TIMER_NUM -}; -#endif - -/*****************************************************************************/ - -#ifdef __cplusplus -} - -#endif - -#endif \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/board/e2000/q/fparameters.h b/bsp/phytium/libraries/standalone/board/e2000/q/fparameters.h deleted file mode 100644 index 033074ab7e..0000000000 --- a/bsp/phytium/libraries/standalone/board/e2000/q/fparameters.h +++ /dev/null @@ -1,297 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fparameters.h - * Date: 2022-02-11 13:33:28 - * LastEditTime: 2022-02-17 18:00:50 - * Description:  This file is for - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - */ - -#ifndef BOARD_E2000Q_PARAMTERERS_H -#define BOARD_E2000Q_PARAMTERERS_H - -#ifdef __cplusplus -extern "C" -{ -#endif - -/***************************** Include Files *********************************/ -#include "fparameters_comm.h" - -/************************** Constant Definitions *****************************/ -#define CORE0_AFF 0x000U -#define CORE1_AFF 0x100U -#define CORE2_AFF 0x200U -#define CORE3_AFF 0x201U -#define FCORE_NUM 4 - -#define FT_CPUS_NR 4U -/*****************************************************************************/ -/* register offset of iopad function / pull / driver strength */ -#define FIOPAD_AN59_REG0_OFFSET 0x0000U -#define FIOPAD_AW47_REG0_OFFSET 0x0004U -#define FIOPAD_AR55_REG0_OFFSET 0x0020U -#define FIOPAD_AJ55_REG0_OFFSET 0x0024U -#define FIOPAD_AL55_REG0_OFFSET 0x0028U -#define FIOPAD_AL53_REG0_OFFSET 0x002CU -#define FIOPAD_AN51_REG0_OFFSET 0x0030U -#define FIOPAD_AR51_REG0_OFFSET 0x0034U -#define FIOPAD_BA57_REG0_OFFSET 0x0038U -#define FIOPAD_BA59_REG0_OFFSET 0x003CU -#define FIOPAD_AW57_REG0_OFFSET 0x0040U -#define FIOPAD_AW59_REG0_OFFSET 0x0044U -#define FIOPAD_AU55_REG0_OFFSET 0x0048U -#define FIOPAD_AN57_REG0_OFFSET 0x004CU -#define FIOPAD_AL59_REG0_OFFSET 0x0050U -#define FIOPAD_AJ59_REG0_OFFSET 0x0054U -#define FIOPAD_AJ57_REG0_OFFSET 0x0058U -#define FIOPAD_AG59_REG0_OFFSET 0x005CU -#define FIOPAD_AG57_REG0_OFFSET 0x0060U -#define FIOPAD_AE59_REG0_OFFSET 0x0064U -#define FIOPAD_AC59_REG0_OFFSET 0x0068U -#define FIOPAD_AC57_REG0_OFFSET 0x006CU -#define FIOPAD_AR49_REG0_OFFSET 0x0070U -#define FIOPAD_BA55_REG0_OFFSET 0x0074U -#define FIOPAD_BA53_REG0_OFFSET 0x0078U -#define FIOPAD_AR59_REG0_OFFSET 0x007CU -#define FIOPAD_AU59_REG0_OFFSET 0x0080U -#define FIOPAD_AR57_REG0_OFFSET 0x0084U -#define FIOPAD_BA49_REG0_OFFSET 0x0088U -#define FIOPAD_AW55_REG0_OFFSET 0x008CU -#define FIOPAD_A35_REG0_OFFSET 0x0090U -#define FIOPAD_R57_REG0_OFFSET 0x0094U -#define FIOPAD_R59_REG0_OFFSET 0x0098U -#define FIOPAD_U59_REG0_OFFSET 0x009CU -#define FIOPAD_W59_REG0_OFFSET 0x00A0U -#define FIOPAD_U57_REG0_OFFSET 0x00A4U -#define FIOPAD_AA57_REG0_OFFSET 0x00A8U -#define FIOPAD_AA59_REG0_OFFSET 0x00ACU -#define FIOPAD_AW51_REG0_OFFSET 0x00B0U -#define FIOPAD_AU51_REG0_OFFSET 0x00B4U -#define FIOPAD_A39_REG0_OFFSET 0x00B8U -#define FIOPAD_C39_REG0_OFFSET 0x00BCU -#define FIOPAD_C37_REG0_OFFSET 0x00C0U -#define FIOPAD_A37_REG0_OFFSET 0x00C4U -#define FIOPAD_A41_REG0_OFFSET 0x00C8U -#define FIOPAD_A43_REG0_OFFSET 0x00CCU -#define FIOPAD_A45_REG0_OFFSET 0x00D0U -#define FIOPAD_C45_REG0_OFFSET 0x00D4U -#define FIOPAD_A47_REG0_OFFSET 0x00D8U -#define FIOPAD_A49_REG0_OFFSET 0x00DCU -#define FIOPAD_C49_REG0_OFFSET 0x00E0U -#define FIOPAD_A51_REG0_OFFSET 0x00E4U -#define FIOPAD_A33_REG0_OFFSET 0x00E8U -#define FIOPAD_C33_REG0_OFFSET 0x00ECU -#define FIOPAD_C31_REG0_OFFSET 0x00F0U -#define FIOPAD_A31_REG0_OFFSET 0x00F4U -#define FIOPAD_AJ53_REG0_OFFSET 0x00F8U -#define FIOPAD_AL49_REG0_OFFSET 0x00FCU -#define FIOPAD_AL47_REG0_OFFSET 0x0100U -#define FIOPAD_AN49_REG0_OFFSET 0x0104U -#define FIOPAD_AG51_REG0_OFFSET 0x0108U -#define FIOPAD_AJ51_REG0_OFFSET 0x010CU -#define FIOPAD_AG49_REG0_OFFSET 0x0110U -#define FIOPAD_AE55_REG0_OFFSET 0x0114U -#define FIOPAD_AE53_REG0_OFFSET 0x0118U -#define FIOPAD_AG55_REG0_OFFSET 0x011CU -#define FIOPAD_AJ49_REG0_OFFSET 0x0120U -#define FIOPAD_AC55_REG0_OFFSET 0x0124U -#define FIOPAD_AC53_REG0_OFFSET 0x0128U -#define FIOPAD_AE51_REG0_OFFSET 0x012CU -#define FIOPAD_W51_REG0_OFFSET 0x0130U -#define FIOPAD_W55_REG0_OFFSET 0x0134U -#define FIOPAD_W53_REG0_OFFSET 0x0138U -#define FIOPAD_U55_REG0_OFFSET 0x013CU -#define FIOPAD_U53_REG0_OFFSET 0x0140U -#define FIOPAD_AE49_REG0_OFFSET 0x0144U -#define FIOPAD_AC49_REG0_OFFSET 0x0148U -#define FIOPAD_AE47_REG0_OFFSET 0x014CU -#define FIOPAD_AA47_REG0_OFFSET 0x0150U -#define FIOPAD_AA49_REG0_OFFSET 0x0154U -#define FIOPAD_W49_REG0_OFFSET 0x0158U -#define FIOPAD_AA51_REG0_OFFSET 0x015CU -#define FIOPAD_U49_REG0_OFFSET 0x0160U -#define FIOPAD_G59_REG0_OFFSET 0x0164U -#define FIOPAD_J59_REG0_OFFSET 0x0168U -#define FIOPAD_L57_REG0_OFFSET 0x016CU -#define FIOPAD_C59_REG0_OFFSET 0x0170U -#define FIOPAD_E59_REG0_OFFSET 0x0174U -#define FIOPAD_J57_REG0_OFFSET 0x0178U -#define FIOPAD_L59_REG0_OFFSET 0x017CU -#define FIOPAD_N59_REG0_OFFSET 0x0180U -#define FIOPAD_C57_REG0_OFFSET 0x0184U -#define FIOPAD_E57_REG0_OFFSET 0x0188U -#define FIOPAD_E31_REG0_OFFSET 0x018CU -#define FIOPAD_G31_REG0_OFFSET 0x0190U -#define FIOPAD_N41_REG0_OFFSET 0x0194U -#define FIOPAD_N39_REG0_OFFSET 0x0198U -#define FIOPAD_J33_REG0_OFFSET 0x019CU -#define FIOPAD_N33_REG0_OFFSET 0x01A0U -#define FIOPAD_L33_REG0_OFFSET 0x01A4U -#define FIOPAD_N45_REG0_OFFSET 0x01A8U -#define FIOPAD_N43_REG0_OFFSET 0x01ACU -#define FIOPAD_L31_REG0_OFFSET 0x01B0U -#define FIOPAD_J31_REG0_OFFSET 0x01B4U -#define FIOPAD_J29_REG0_OFFSET 0x01B8U -#define FIOPAD_E29_REG0_OFFSET 0x01BCU -#define FIOPAD_G29_REG0_OFFSET 0x01C0U -#define FIOPAD_N27_REG0_OFFSET 0x01C4U -#define FIOPAD_L29_REG0_OFFSET 0x01C8U -#define FIOPAD_J37_REG0_OFFSET 0x01CCU -#define FIOPAD_J39_REG0_OFFSET 0x01D0U -#define FIOPAD_G41_REG0_OFFSET 0x01D4U -#define FIOPAD_E43_REG0_OFFSET 0x01D8U -#define FIOPAD_L43_REG0_OFFSET 0x01DCU -#define FIOPAD_C43_REG0_OFFSET 0x01E0U -#define FIOPAD_E41_REG0_OFFSET 0x01E4U -#define FIOPAD_L45_REG0_OFFSET 0x01E8U -#define FIOPAD_J43_REG0_OFFSET 0x01ECU -#define FIOPAD_J41_REG0_OFFSET 0x01F0U -#define FIOPAD_L39_REG0_OFFSET 0x01F4U -#define FIOPAD_E37_REG0_OFFSET 0x01F8U -#define FIOPAD_E35_REG0_OFFSET 0x01FCU -#define FIOPAD_G35_REG0_OFFSET 0x0200U -#define FIOPAD_J35_REG0_OFFSET 0x0204U -#define FIOPAD_L37_REG0_OFFSET 0x0208U -#define FIOPAD_N35_REG0_OFFSET 0x020CU -#define FIOPAD_R51_REG0_OFFSET 0x0210U -#define FIOPAD_R49_REG0_OFFSET 0x0214U -#define FIOPAD_N51_REG0_OFFSET 0x0218U -#define FIOPAD_N55_REG0_OFFSET 0x021CU -#define FIOPAD_L55_REG0_OFFSET 0x0220U -#define FIOPAD_J55_REG0_OFFSET 0x0224U -#define FIOPAD_J45_REG0_OFFSET 0x0228U -#define FIOPAD_E47_REG0_OFFSET 0x022CU -#define FIOPAD_G47_REG0_OFFSET 0x0230U -#define FIOPAD_J47_REG0_OFFSET 0x0234U -#define FIOPAD_J49_REG0_OFFSET 0x0238U -#define FIOPAD_N49_REG0_OFFSET 0x023CU -#define FIOPAD_L51_REG0_OFFSET 0x0240U -#define FIOPAD_L49_REG0_OFFSET 0x0244U -#define FIOPAD_N53_REG0_OFFSET 0x0248U -#define FIOPAD_J53_REG0_OFFSET 0x024CU - -#define FIOPAD_REG0_BEG_OFFSET FIOPAD_AN59_REG0_OFFSET -#define FIOPAD_REG0_END_OFFSET FIOPAD_J53_REG0_OFFSET - -/* register offset of iopad delay */ -#define FIOPAD_AJ55_REG1_OFFSET 0x1024U -#define FIOPAD_AL55_REG1_OFFSET 0x1028U -#define FIOPAD_AL53_REG1_OFFSET 0x102CU -#define FIOPAD_AN51_REG1_OFFSET 0x1030U -#define FIOPAD_AR51_REG1_OFFSET 0x1034U -#define FIOPAD_AJ57_REG1_OFFSET 0x1058U -#define FIOPAD_AG59_REG1_OFFSET 0x105CU -#define FIOPAD_AG57_REG1_OFFSET 0x1060U -#define FIOPAD_AE59_REG1_OFFSET 0x1064U -#define FIOPAD_BA55_REG1_OFFSET 0x1074U -#define FIOPAD_BA53_REG1_OFFSET 0x1078U -#define FIOPAD_AR59_REG1_OFFSET 0x107CU -#define FIOPAD_AU59_REG1_OFFSET 0x1080U -#define FIOPAD_A45_REG1_OFFSET 0x10D0U -#define FIOPAD_C45_REG1_OFFSET 0x10D4U -#define FIOPAD_A47_REG1_OFFSET 0x10D8U -#define FIOPAD_A49_REG1_OFFSET 0x10DCU -#define FIOPAD_C49_REG1_OFFSET 0x10E0U -#define FIOPAD_A51_REG1_OFFSET 0x10E4U -#define FIOPAD_A33_REG1_OFFSET 0x10E8U -#define FIOPAD_C33_REG1_OFFSET 0x10ECU -#define FIOPAD_C31_REG1_OFFSET 0x10F0U -#define FIOPAD_A31_REG1_OFFSET 0x10F4U -#define FIOPAD_AJ53_REG1_OFFSET 0x10F8U -#define FIOPAD_AL49_REG1_OFFSET 0x10FCU -#define FIOPAD_AL47_REG1_OFFSET 0x1100U -#define FIOPAD_AN49_REG1_OFFSET 0x1104U -#define FIOPAD_AG51_REG1_OFFSET 0x1108U -#define FIOPAD_AJ51_REG1_OFFSET 0x110CU -#define FIOPAD_AG49_REG1_OFFSET 0x1110U -#define FIOPAD_AE55_REG1_OFFSET 0x1114U -#define FIOPAD_AE53_REG1_OFFSET 0x1118U -#define FIOPAD_AG55_REG1_OFFSET 0x111CU -#define FIOPAD_AJ49_REG1_OFFSET 0x1120U -#define FIOPAD_AC55_REG1_OFFSET 0x1124U -#define FIOPAD_AC53_REG1_OFFSET 0x1128U -#define FIOPAD_AE51_REG1_OFFSET 0x112CU -#define FIOPAD_W51_REG1_OFFSET 0x1130U -#define FIOPAD_W53_REG1_OFFSET 0x1138U -#define FIOPAD_U55_REG1_OFFSET 0x113CU -#define FIOPAD_U53_REG1_OFFSET 0x1140U -#define FIOPAD_AE49_REG1_OFFSET 0x1144U -#define FIOPAD_AC49_REG1_OFFSET 0x1148U -#define FIOPAD_AE47_REG1_OFFSET 0x114CU -#define FIOPAD_AA47_REG1_OFFSET 0x1150U -#define FIOPAD_AA49_REG1_OFFSET 0x1154U -#define FIOPAD_W49_REG1_OFFSET 0x1158U -#define FIOPAD_AA51_REG1_OFFSET 0x115CU -#define FIOPAD_U49_REG1_OFFSET 0x1160U -#define FIOPAD_J59_REG1_OFFSET 0x1168U -#define FIOPAD_L57_REG1_OFFSET 0x116CU -#define FIOPAD_C59_REG1_OFFSET 0x1170U -#define FIOPAD_E59_REG1_OFFSET 0x1174U -#define FIOPAD_J57_REG1_OFFSET 0x1178U -#define FIOPAD_L59_REG1_OFFSET 0x117CU -#define FIOPAD_N59_REG1_OFFSET 0x1180U -#define FIOPAD_E31_REG1_OFFSET 0x118CU -#define FIOPAD_G31_REG1_OFFSET 0x1190U -#define FIOPAD_N41_REG1_OFFSET 0x1194U -#define FIOPAD_N39_REG1_OFFSET 0x1198U -#define FIOPAD_J33_REG1_OFFSET 0x119CU -#define FIOPAD_N33_REG1_OFFSET 0x11A0U -#define FIOPAD_L33_REG1_OFFSET 0x11A4U -#define FIOPAD_N45_REG1_OFFSET 0x11A8U -#define FIOPAD_N43_REG1_OFFSET 0x11ACU -#define FIOPAD_L31_REG1_OFFSET 0x11B0U -#define FIOPAD_J31_REG1_OFFSET 0x11B4U -#define FIOPAD_J29_REG1_OFFSET 0x11B8U -#define FIOPAD_E29_REG1_OFFSET 0x11BCU -#define FIOPAD_G29_REG1_OFFSET 0x11C0U -#define FIOPAD_J37_REG1_OFFSET 0x11CCU -#define FIOPAD_J39_REG1_OFFSET 0x11D0U -#define FIOPAD_G41_REG1_OFFSET 0x11D4U -#define FIOPAD_E43_REG1_OFFSET 0x11D8U -#define FIOPAD_L43_REG1_OFFSET 0x11DCU -#define FIOPAD_C43_REG1_OFFSET 0x11E0U -#define FIOPAD_E41_REG1_OFFSET 0x11E4U -#define FIOPAD_L45_REG1_OFFSET 0x11E8U -#define FIOPAD_J43_REG1_OFFSET 0x11ECU -#define FIOPAD_J41_REG1_OFFSET 0x11F0U -#define FIOPAD_L39_REG1_OFFSET 0x11F4U -#define FIOPAD_E37_REG1_OFFSET 0x11F8U -#define FIOPAD_E35_REG1_OFFSET 0x11FCU -#define FIOPAD_G35_REG1_OFFSET 0x1200U -#define FIOPAD_L55_REG1_OFFSET 0x1220U -#define FIOPAD_J55_REG1_OFFSET 0x1224U -#define FIOPAD_J45_REG1_OFFSET 0x1228U -#define FIOPAD_E47_REG1_OFFSET 0x122CU -#define FIOPAD_G47_REG1_OFFSET 0x1230U -#define FIOPAD_J47_REG1_OFFSET 0x1234U -#define FIOPAD_J49_REG1_OFFSET 0x1238U -#define FIOPAD_N49_REG1_OFFSET 0x123CU -#define FIOPAD_L51_REG1_OFFSET 0x1240U -#define FIOPAD_L49_REG1_OFFSET 0x1244U -#define FIOPAD_N53_REG1_OFFSET 0x1248U -#define FIOPAD_J53_REG1_OFFSET 0x124CU - -#define FIOPAD_REG1_BEG_OFFSET FIOPAD_AJ55_REG1_OFFSET -#define FIOPAD_REG1_END_OFFSET FIOPAD_J53_REG1_OFFSET - -#ifdef __cplusplus -} - -#endif - -#endif \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/board/e2000/s/fparameters.h b/bsp/phytium/libraries/standalone/board/e2000/s/fparameters.h deleted file mode 100644 index 1d02f993b0..0000000000 --- a/bsp/phytium/libraries/standalone/board/e2000/s/fparameters.h +++ /dev/null @@ -1,299 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fparameters.h - * Date: 2022-02-11 13:33:28 - * LastEditTime: 2022-02-17 18:00:50 - * Description:  This file is for - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - */ - -#ifndef BOARD_E2000S_PARAMTERERS_H -#define BOARD_E2000S_PARAMTERERS_H - -#ifdef __cplusplus -extern "C" -{ -#endif -/***************************** Include Files *********************************/ -#include "fparameters_comm.h" - -/************************** Constant Definitions *****************************/ -#define CORE0_AFF 0x200U -#define FCORE_NUM 1 - -#define FT_CPUS_NR 1U - -/* GIC offset */ -#define FT_GIC_REDISTRUBUTIOR_OFFSET 2 - -/* register offset of iopad function / pull / driver strength */ -#define FIOPAD_AN55_REG0_OFFSET 0x0000U -#define FIOPAD_AW43_REG0_OFFSET 0x0004U -#define FIOPAD_AR51_REG0_OFFSET 0x0020U -#define FIOPAD_AJ51_REG0_OFFSET 0x0024U -#define FIOPAD_AL51_REG0_OFFSET 0x0028U -#define FIOPAD_AL49_REG0_OFFSET 0x002CU -#define FIOPAD_AN47_REG0_OFFSET 0x0030U -#define FIOPAD_AR47_REG0_OFFSET 0x0034U -#define FIOPAD_BA53_REG0_OFFSET 0x0038U -#define FIOPAD_BA55_REG0_OFFSET 0x003CU -#define FIOPAD_AW53_REG0_OFFSET 0x0040U -#define FIOPAD_AW55_REG0_OFFSET 0x0044U -#define FIOPAD_AU51_REG0_OFFSET 0x0048U -#define FIOPAD_AN53_REG0_OFFSET 0x004CU -#define FIOPAD_AL55_REG0_OFFSET 0x0050U -#define FIOPAD_AJ55_REG0_OFFSET 0x0054U -#define FIOPAD_AJ53_REG0_OFFSET 0x0058U -#define FIOPAD_AG55_REG0_OFFSET 0x005CU -#define FIOPAD_AG53_REG0_OFFSET 0x0060U -#define FIOPAD_AE55_REG0_OFFSET 0x0064U -#define FIOPAD_AC55_REG0_OFFSET 0x0068U -#define FIOPAD_AC53_REG0_OFFSET 0x006CU -#define FIOPAD_AR45_REG0_OFFSET 0x0070U -#define FIOPAD_BA51_REG0_OFFSET 0x0074U -#define FIOPAD_BA49_REG0_OFFSET 0x0078U -#define FIOPAD_AR55_REG0_OFFSET 0x007CU -#define FIOPAD_AU55_REG0_OFFSET 0x0080U -#define FIOPAD_AR53_REG0_OFFSET 0x0084U -#define FIOPAD_BA45_REG0_OFFSET 0x0088U -#define FIOPAD_AW51_REG0_OFFSET 0x008CU -#define FIOPAD_A31_REG0_OFFSET 0x0090U -#define FIOPAD_R53_REG0_OFFSET 0x0094U -#define FIOPAD_R55_REG0_OFFSET 0x0098U -#define FIOPAD_U55_REG0_OFFSET 0x009CU -#define FIOPAD_W55_REG0_OFFSET 0x00A0U -#define FIOPAD_U53_REG0_OFFSET 0x00A4U -#define FIOPAD_AA53_REG0_OFFSET 0x00A8U -#define FIOPAD_AA55_REG0_OFFSET 0x00ACU -#define FIOPAD_AW47_REG0_OFFSET 0x00B0U -#define FIOPAD_AU47_REG0_OFFSET 0x00B4U -#define FIOPAD_A35_REG0_OFFSET 0x00B8U -#define FIOPAD_C35_REG0_OFFSET 0x00BCU -#define FIOPAD_C33_REG0_OFFSET 0x00C0U -#define FIOPAD_A33_REG0_OFFSET 0x00C4U -#define FIOPAD_A37_REG0_OFFSET 0x00C8U -#define FIOPAD_A39_REG0_OFFSET 0x00CCU -#define FIOPAD_A41_REG0_OFFSET 0x00D0U -#define FIOPAD_C41_REG0_OFFSET 0x00D4U -#define FIOPAD_A43_REG0_OFFSET 0x00D8U -#define FIOPAD_A45_REG0_OFFSET 0x00DCU -#define FIOPAD_C45_REG0_OFFSET 0x00E0U -#define FIOPAD_A47_REG0_OFFSET 0x00E4U -#define FIOPAD_A29_REG0_OFFSET 0x00E8U -#define FIOPAD_C29_REG0_OFFSET 0x00ECU -#define FIOPAD_C27_REG0_OFFSET 0x00F0U -#define FIOPAD_A27_REG0_OFFSET 0x00F4U -#define FIOPAD_AJ49_REG0_OFFSET 0x00F8U -#define FIOPAD_AL45_REG0_OFFSET 0x00FCU -#define FIOPAD_AL43_REG0_OFFSET 0x0100U -#define FIOPAD_AN45_REG0_OFFSET 0x0104U -#define FIOPAD_AG47_REG0_OFFSET 0x0108U -#define FIOPAD_AJ47_REG0_OFFSET 0x010CU -#define FIOPAD_AG45_REG0_OFFSET 0x0110U -#define FIOPAD_AE51_REG0_OFFSET 0x0114U -#define FIOPAD_AE49_REG0_OFFSET 0x0118U -#define FIOPAD_AG51_REG0_OFFSET 0x011CU -#define FIOPAD_AJ45_REG0_OFFSET 0x0120U -#define FIOPAD_AC51_REG0_OFFSET 0x0124U -#define FIOPAD_AC49_REG0_OFFSET 0x0128U -#define FIOPAD_AE47_REG0_OFFSET 0x012CU -#define FIOPAD_W47_REG0_OFFSET 0x0130U -#define FIOPAD_W51_REG0_OFFSET 0x0134U -#define FIOPAD_W49_REG0_OFFSET 0x0138U -#define FIOPAD_U51_REG0_OFFSET 0x013CU -#define FIOPAD_U49_REG0_OFFSET 0x0140U -#define FIOPAD_AE45_REG0_OFFSET 0x0144U -#define FIOPAD_AC45_REG0_OFFSET 0x0148U -#define FIOPAD_AE43_REG0_OFFSET 0x014CU -#define FIOPAD_AA43_REG0_OFFSET 0x0150U -#define FIOPAD_AA45_REG0_OFFSET 0x0154U -#define FIOPAD_W45_REG0_OFFSET 0x0158U -#define FIOPAD_AA47_REG0_OFFSET 0x015CU -#define FIOPAD_U45_REG0_OFFSET 0x0160U -#define FIOPAD_G55_REG0_OFFSET 0x0164U -#define FIOPAD_J55_REG0_OFFSET 0x0168U -#define FIOPAD_L53_REG0_OFFSET 0x016CU -#define FIOPAD_C55_REG0_OFFSET 0x0170U -#define FIOPAD_E55_REG0_OFFSET 0x0174U -#define FIOPAD_J53_REG0_OFFSET 0x0178U -#define FIOPAD_L55_REG0_OFFSET 0x017CU -#define FIOPAD_N55_REG0_OFFSET 0x0180U -#define FIOPAD_C53_REG0_OFFSET 0x0184U -#define FIOPAD_E53_REG0_OFFSET 0x0188U -#define FIOPAD_E27_REG0_OFFSET 0x018CU -#define FIOPAD_G27_REG0_OFFSET 0x0190U -#define FIOPAD_N37_REG0_OFFSET 0x0194U -#define FIOPAD_N35_REG0_OFFSET 0x0198U -#define FIOPAD_J29_REG0_OFFSET 0x019CU -#define FIOPAD_N29_REG0_OFFSET 0x01A0U -#define FIOPAD_L29_REG0_OFFSET 0x01A4U -#define FIOPAD_N41_REG0_OFFSET 0x01A8U -#define FIOPAD_N39_REG0_OFFSET 0x01ACU -#define FIOPAD_L27_REG0_OFFSET 0x01B0U -#define FIOPAD_J27_REG0_OFFSET 0x01B4U -#define FIOPAD_J25_REG0_OFFSET 0x01B8U -#define FIOPAD_E25_REG0_OFFSET 0x01BCU -#define FIOPAD_G25_REG0_OFFSET 0x01C0U -#define FIOPAD_N23_REG0_OFFSET 0x01C4U -#define FIOPAD_L25_REG0_OFFSET 0x01C8U -#define FIOPAD_J33_REG0_OFFSET 0x01CCU -#define FIOPAD_J35_REG0_OFFSET 0x01D0U -#define FIOPAD_G37_REG0_OFFSET 0x01D4U -#define FIOPAD_E39_REG0_OFFSET 0x01D8U -#define FIOPAD_L39_REG0_OFFSET 0x01DCU -#define FIOPAD_C39_REG0_OFFSET 0x01E0U -#define FIOPAD_E37_REG0_OFFSET 0x01E4U -#define FIOPAD_L41_REG0_OFFSET 0x01E8U -#define FIOPAD_J39_REG0_OFFSET 0x01ECU -#define FIOPAD_J37_REG0_OFFSET 0x01F0U -#define FIOPAD_L35_REG0_OFFSET 0x01F4U -#define FIOPAD_E33_REG0_OFFSET 0x01F8U -#define FIOPAD_E31_REG0_OFFSET 0x01FCU -#define FIOPAD_G31_REG0_OFFSET 0x0200U -#define FIOPAD_J31_REG0_OFFSET 0x0204U -#define FIOPAD_L33_REG0_OFFSET 0x0208U -#define FIOPAD_N31_REG0_OFFSET 0x020CU -#define FIOPAD_R47_REG0_OFFSET 0x0210U -#define FIOPAD_R45_REG0_OFFSET 0x0214U -#define FIOPAD_N47_REG0_OFFSET 0x0218U -#define FIOPAD_N51_REG0_OFFSET 0x021CU -#define FIOPAD_L51_REG0_OFFSET 0x0220U -#define FIOPAD_J51_REG0_OFFSET 0x0224U -#define FIOPAD_J41_REG0_OFFSET 0x0228U -#define FIOPAD_E43_REG0_OFFSET 0x022CU -#define FIOPAD_G43_REG0_OFFSET 0x0230U -#define FIOPAD_J43_REG0_OFFSET 0x0234U -#define FIOPAD_J45_REG0_OFFSET 0x0238U -#define FIOPAD_N45_REG0_OFFSET 0x023CU -#define FIOPAD_L47_REG0_OFFSET 0x0240U -#define FIOPAD_L45_REG0_OFFSET 0x0244U -#define FIOPAD_N49_REG0_OFFSET 0x0248U -#define FIOPAD_J49_REG0_OFFSET 0x024CU - -#define FIOPAD_REG0_BEG_OFFSET FIOPAD_AN55_REG0_OFFSET -#define FIOPAD_REG0_END_OFFSET FIOPAD_J49_REG0_OFFSET - -/* register offset of iopad delay */ -#define FIOPAD_AJ51_REG1_OFFSET 0x1024U -#define FIOPAD_AL51_REG1_OFFSET 0x1028U -#define FIOPAD_AL49_REG1_OFFSET 0x102CU -#define FIOPAD_AN47_REG1_OFFSET 0x1030U -#define FIOPAD_AR47_REG1_OFFSET 0x1034U -#define FIOPAD_AJ53_REG1_OFFSET 0x1058U -#define FIOPAD_AG55_REG1_OFFSET 0x105CU -#define FIOPAD_AG53_REG1_OFFSET 0x1060U -#define FIOPAD_AE55_REG1_OFFSET 0x1064U -#define FIOPAD_BA51_REG1_OFFSET 0x1074U -#define FIOPAD_BA49_REG1_OFFSET 0x1078U -#define FIOPAD_AR55_REG1_OFFSET 0x107CU -#define FIOPAD_AU55_REG1_OFFSET 0x1080U -#define FIOPAD_A41_REG1_OFFSET 0x10D0U -#define FIOPAD_C41_REG1_OFFSET 0x10D4U -#define FIOPAD_A43_REG1_OFFSET 0x10D8U -#define FIOPAD_A45_REG1_OFFSET 0x10DCU -#define FIOPAD_C45_REG1_OFFSET 0x10E0U -#define FIOPAD_A47_REG1_OFFSET 0x10E4U -#define FIOPAD_A29_REG1_OFFSET 0x10E8U -#define FIOPAD_C29_REG1_OFFSET 0x10ECU -#define FIOPAD_C27_REG1_OFFSET 0x10F0U -#define FIOPAD_A27_REG1_OFFSET 0x10F4U -#define FIOPAD_AJ49_REG1_OFFSET 0x10F8U -#define FIOPAD_AL45_REG1_OFFSET 0x10FCU -#define FIOPAD_AL43_REG1_OFFSET 0x1100U -#define FIOPAD_AN45_REG1_OFFSET 0x1104U -#define FIOPAD_AG47_REG1_OFFSET 0x1108U -#define FIOPAD_AJ47_REG1_OFFSET 0x110CU -#define FIOPAD_AG45_REG1_OFFSET 0x1110U -#define FIOPAD_AE51_REG1_OFFSET 0x1114U -#define FIOPAD_AE49_REG1_OFFSET 0x1118U -#define FIOPAD_AG51_REG1_OFFSET 0x111CU -#define FIOPAD_AJ45_REG1_OFFSET 0x1120U -#define FIOPAD_AC51_REG1_OFFSET 0x1124U -#define FIOPAD_AC49_REG1_OFFSET 0x1128U -#define FIOPAD_AE47_REG1_OFFSET 0x112CU -#define FIOPAD_W47_REG1_OFFSET 0x1130U -#define FIOPAD_W49_REG1_OFFSET 0x1138U -#define FIOPAD_U51_REG1_OFFSET 0x113CU -#define FIOPAD_U49_REG1_OFFSET 0x1140U -#define FIOPAD_AE45_REG1_OFFSET 0x1144U -#define FIOPAD_AC45_REG1_OFFSET 0x1148U -#define FIOPAD_AE43_REG1_OFFSET 0x114CU -#define FIOPAD_AA43_REG1_OFFSET 0x1150U -#define FIOPAD_AA45_REG1_OFFSET 0x1154U -#define FIOPAD_W45_REG1_OFFSET 0x1158U -#define FIOPAD_AA47_REG1_OFFSET 0x115CU -#define FIOPAD_U45_REG1_OFFSET 0x1160U -#define FIOPAD_J55_REG1_OFFSET 0x1168U -#define FIOPAD_L53_REG1_OFFSET 0x116CU -#define FIOPAD_C55_REG1_OFFSET 0x1170U -#define FIOPAD_E55_REG1_OFFSET 0x1174U -#define FIOPAD_J53_REG1_OFFSET 0x1178U -#define FIOPAD_L55_REG1_OFFSET 0x117CU -#define FIOPAD_N55_REG1_OFFSET 0x1180U -#define FIOPAD_E27_REG1_OFFSET 0x118CU -#define FIOPAD_G27_REG1_OFFSET 0x1190U -#define FIOPAD_N37_REG1_OFFSET 0x1194U -#define FIOPAD_N35_REG1_OFFSET 0x1198U -#define FIOPAD_J29_REG1_OFFSET 0x119CU -#define FIOPAD_N29_REG1_OFFSET 0x11A0U -#define FIOPAD_L29_REG1_OFFSET 0x11A4U -#define FIOPAD_N41_REG1_OFFSET 0x11A8U -#define FIOPAD_N39_REG1_OFFSET 0x11ACU -#define FIOPAD_L27_REG1_OFFSET 0x11B0U -#define FIOPAD_J27_REG1_OFFSET 0x11B4U -#define FIOPAD_J25_REG1_OFFSET 0x11B8U -#define FIOPAD_E25_REG1_OFFSET 0x11BCU -#define FIOPAD_G25_REG1_OFFSET 0x11C0U -#define FIOPAD_J33_REG1_OFFSET 0x11CCU -#define FIOPAD_J35_REG1_OFFSET 0x11D0U -#define FIOPAD_G37_REG1_OFFSET 0x11D4U -#define FIOPAD_E39_REG1_OFFSET 0x11D8U -#define FIOPAD_L39_REG1_OFFSET 0x11DCU -#define FIOPAD_C39_REG1_OFFSET 0x11E0U -#define FIOPAD_E37_REG1_OFFSET 0x11E4U -#define FIOPAD_L41_REG1_OFFSET 0x11E8U -#define FIOPAD_J39_REG1_OFFSET 0x11ECU -#define FIOPAD_J37_REG1_OFFSET 0x11F0U -#define FIOPAD_L35_REG1_OFFSET 0x11F4U -#define FIOPAD_E33_REG1_OFFSET 0x11F8U -#define FIOPAD_E31_REG1_OFFSET 0x11FCU -#define FIOPAD_G31_REG1_OFFSET 0x1200U -#define FIOPAD_L51_REG1_OFFSET 0x1220U -#define FIOPAD_J51_REG1_OFFSET 0x1224U -#define FIOPAD_J41_REG1_OFFSET 0x1228U -#define FIOPAD_E43_REG1_OFFSET 0x122CU -#define FIOPAD_G43_REG1_OFFSET 0x1230U -#define FIOPAD_J43_REG1_OFFSET 0x1234U -#define FIOPAD_J45_REG1_OFFSET 0x1238U -#define FIOPAD_N45_REG1_OFFSET 0x123CU -#define FIOPAD_L47_REG1_OFFSET 0x1240U -#define FIOPAD_L45_REG1_OFFSET 0x1244U -#define FIOPAD_N49_REG1_OFFSET 0x1248U -#define FIOPAD_J49_REG1_OFFSET 0x124CU - -#define FIOPAD_REG1_BEG_OFFSET FIOPAD_AJ51_REG1_OFFSET -#define FIOPAD_REG1_END_OFFSET FIOPAD_J49_REG1_OFFSET - -/*****************************************************************************/ - - -#ifdef __cplusplus -} - -#endif - -#endif diff --git a/bsp/phytium/libraries/standalone/board/phytium-pi/fparameters.h b/bsp/phytium/libraries/standalone/board/phytium-pi/fparameters.h deleted file mode 100644 index a8e22c79ce..0000000000 --- a/bsp/phytium/libraries/standalone/board/phytium-pi/fparameters.h +++ /dev/null @@ -1,297 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fparameters.h - * Date: 2022-02-11 13:33:28 - * LastEditTime: 2022-02-17 18:00:50 - * Description:  This file is for - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - */ - -#ifndef BOARD_PHYTIUM_PI_PARAMTERERS_H -#define BOARD_PHYTIUM_PI_PARAMTERERS_H - -#ifdef __cplusplus -extern "C" -{ -#endif - -/***************************** Include Files *********************************/ -#include "fparameters_comm.h" - -/************************** Constant Definitions *****************************/ -#define CORE0_AFF 0x000U -#define CORE1_AFF 0x100U -#define CORE2_AFF 0x200U -#define CORE3_AFF 0x201U -#define FCORE_NUM 4 - -#define FT_CPUS_NR 4U -/*****************************************************************************/ -/* register offset of iopad function / pull / driver strength */ -#define FIOPAD_AN59_REG0_OFFSET 0x0000U -#define FIOPAD_AW47_REG0_OFFSET 0x0004U -#define FIOPAD_AR55_REG0_OFFSET 0x0020U -#define FIOPAD_AJ55_REG0_OFFSET 0x0024U -#define FIOPAD_AL55_REG0_OFFSET 0x0028U -#define FIOPAD_AL53_REG0_OFFSET 0x002CU -#define FIOPAD_AN51_REG0_OFFSET 0x0030U -#define FIOPAD_AR51_REG0_OFFSET 0x0034U -#define FIOPAD_BA57_REG0_OFFSET 0x0038U -#define FIOPAD_BA59_REG0_OFFSET 0x003CU -#define FIOPAD_AW57_REG0_OFFSET 0x0040U -#define FIOPAD_AW59_REG0_OFFSET 0x0044U -#define FIOPAD_AU55_REG0_OFFSET 0x0048U -#define FIOPAD_AN57_REG0_OFFSET 0x004CU -#define FIOPAD_AL59_REG0_OFFSET 0x0050U -#define FIOPAD_AJ59_REG0_OFFSET 0x0054U -#define FIOPAD_AJ57_REG0_OFFSET 0x0058U -#define FIOPAD_AG59_REG0_OFFSET 0x005CU -#define FIOPAD_AG57_REG0_OFFSET 0x0060U -#define FIOPAD_AE59_REG0_OFFSET 0x0064U -#define FIOPAD_AC59_REG0_OFFSET 0x0068U -#define FIOPAD_AC57_REG0_OFFSET 0x006CU -#define FIOPAD_AR49_REG0_OFFSET 0x0070U -#define FIOPAD_BA55_REG0_OFFSET 0x0074U -#define FIOPAD_BA53_REG0_OFFSET 0x0078U -#define FIOPAD_AR59_REG0_OFFSET 0x007CU -#define FIOPAD_AU59_REG0_OFFSET 0x0080U -#define FIOPAD_AR57_REG0_OFFSET 0x0084U -#define FIOPAD_BA49_REG0_OFFSET 0x0088U -#define FIOPAD_AW55_REG0_OFFSET 0x008CU -#define FIOPAD_A35_REG0_OFFSET 0x0090U -#define FIOPAD_R57_REG0_OFFSET 0x0094U -#define FIOPAD_R59_REG0_OFFSET 0x0098U -#define FIOPAD_U59_REG0_OFFSET 0x009CU -#define FIOPAD_W59_REG0_OFFSET 0x00A0U -#define FIOPAD_U57_REG0_OFFSET 0x00A4U -#define FIOPAD_AA57_REG0_OFFSET 0x00A8U -#define FIOPAD_AA59_REG0_OFFSET 0x00ACU -#define FIOPAD_AW51_REG0_OFFSET 0x00B0U -#define FIOPAD_AU51_REG0_OFFSET 0x00B4U -#define FIOPAD_A39_REG0_OFFSET 0x00B8U -#define FIOPAD_C39_REG0_OFFSET 0x00BCU -#define FIOPAD_C37_REG0_OFFSET 0x00C0U -#define FIOPAD_A37_REG0_OFFSET 0x00C4U -#define FIOPAD_A41_REG0_OFFSET 0x00C8U -#define FIOPAD_A43_REG0_OFFSET 0x00CCU -#define FIOPAD_A45_REG0_OFFSET 0x00D0U -#define FIOPAD_C45_REG0_OFFSET 0x00D4U -#define FIOPAD_A47_REG0_OFFSET 0x00D8U -#define FIOPAD_A49_REG0_OFFSET 0x00DCU -#define FIOPAD_C49_REG0_OFFSET 0x00E0U -#define FIOPAD_A51_REG0_OFFSET 0x00E4U -#define FIOPAD_A33_REG0_OFFSET 0x00E8U -#define FIOPAD_C33_REG0_OFFSET 0x00ECU -#define FIOPAD_C31_REG0_OFFSET 0x00F0U -#define FIOPAD_A31_REG0_OFFSET 0x00F4U -#define FIOPAD_AJ53_REG0_OFFSET 0x00F8U -#define FIOPAD_AL49_REG0_OFFSET 0x00FCU -#define FIOPAD_AL47_REG0_OFFSET 0x0100U -#define FIOPAD_AN49_REG0_OFFSET 0x0104U -#define FIOPAD_AG51_REG0_OFFSET 0x0108U -#define FIOPAD_AJ51_REG0_OFFSET 0x010CU -#define FIOPAD_AG49_REG0_OFFSET 0x0110U -#define FIOPAD_AE55_REG0_OFFSET 0x0114U -#define FIOPAD_AE53_REG0_OFFSET 0x0118U -#define FIOPAD_AG55_REG0_OFFSET 0x011CU -#define FIOPAD_AJ49_REG0_OFFSET 0x0120U -#define FIOPAD_AC55_REG0_OFFSET 0x0124U -#define FIOPAD_AC53_REG0_OFFSET 0x0128U -#define FIOPAD_AE51_REG0_OFFSET 0x012CU -#define FIOPAD_W51_REG0_OFFSET 0x0130U -#define FIOPAD_W55_REG0_OFFSET 0x0134U -#define FIOPAD_W53_REG0_OFFSET 0x0138U -#define FIOPAD_U55_REG0_OFFSET 0x013CU -#define FIOPAD_U53_REG0_OFFSET 0x0140U -#define FIOPAD_AE49_REG0_OFFSET 0x0144U -#define FIOPAD_AC49_REG0_OFFSET 0x0148U -#define FIOPAD_AE47_REG0_OFFSET 0x014CU -#define FIOPAD_AA47_REG0_OFFSET 0x0150U -#define FIOPAD_AA49_REG0_OFFSET 0x0154U -#define FIOPAD_W49_REG0_OFFSET 0x0158U -#define FIOPAD_AA51_REG0_OFFSET 0x015CU -#define FIOPAD_U49_REG0_OFFSET 0x0160U -#define FIOPAD_G59_REG0_OFFSET 0x0164U -#define FIOPAD_J59_REG0_OFFSET 0x0168U -#define FIOPAD_L57_REG0_OFFSET 0x016CU -#define FIOPAD_C59_REG0_OFFSET 0x0170U -#define FIOPAD_E59_REG0_OFFSET 0x0174U -#define FIOPAD_J57_REG0_OFFSET 0x0178U -#define FIOPAD_L59_REG0_OFFSET 0x017CU -#define FIOPAD_N59_REG0_OFFSET 0x0180U -#define FIOPAD_C57_REG0_OFFSET 0x0184U -#define FIOPAD_E57_REG0_OFFSET 0x0188U -#define FIOPAD_E31_REG0_OFFSET 0x018CU -#define FIOPAD_G31_REG0_OFFSET 0x0190U -#define FIOPAD_N41_REG0_OFFSET 0x0194U -#define FIOPAD_N39_REG0_OFFSET 0x0198U -#define FIOPAD_J33_REG0_OFFSET 0x019CU -#define FIOPAD_N33_REG0_OFFSET 0x01A0U -#define FIOPAD_L33_REG0_OFFSET 0x01A4U -#define FIOPAD_N45_REG0_OFFSET 0x01A8U -#define FIOPAD_N43_REG0_OFFSET 0x01ACU -#define FIOPAD_L31_REG0_OFFSET 0x01B0U -#define FIOPAD_J31_REG0_OFFSET 0x01B4U -#define FIOPAD_J29_REG0_OFFSET 0x01B8U -#define FIOPAD_E29_REG0_OFFSET 0x01BCU -#define FIOPAD_G29_REG0_OFFSET 0x01C0U -#define FIOPAD_N27_REG0_OFFSET 0x01C4U -#define FIOPAD_L29_REG0_OFFSET 0x01C8U -#define FIOPAD_J37_REG0_OFFSET 0x01CCU -#define FIOPAD_J39_REG0_OFFSET 0x01D0U -#define FIOPAD_G41_REG0_OFFSET 0x01D4U -#define FIOPAD_E43_REG0_OFFSET 0x01D8U -#define FIOPAD_L43_REG0_OFFSET 0x01DCU -#define FIOPAD_C43_REG0_OFFSET 0x01E0U -#define FIOPAD_E41_REG0_OFFSET 0x01E4U -#define FIOPAD_L45_REG0_OFFSET 0x01E8U -#define FIOPAD_J43_REG0_OFFSET 0x01ECU -#define FIOPAD_J41_REG0_OFFSET 0x01F0U -#define FIOPAD_L39_REG0_OFFSET 0x01F4U -#define FIOPAD_E37_REG0_OFFSET 0x01F8U -#define FIOPAD_E35_REG0_OFFSET 0x01FCU -#define FIOPAD_G35_REG0_OFFSET 0x0200U -#define FIOPAD_J35_REG0_OFFSET 0x0204U -#define FIOPAD_L37_REG0_OFFSET 0x0208U -#define FIOPAD_N35_REG0_OFFSET 0x020CU -#define FIOPAD_R51_REG0_OFFSET 0x0210U -#define FIOPAD_R49_REG0_OFFSET 0x0214U -#define FIOPAD_N51_REG0_OFFSET 0x0218U -#define FIOPAD_N55_REG0_OFFSET 0x021CU -#define FIOPAD_L55_REG0_OFFSET 0x0220U -#define FIOPAD_J55_REG0_OFFSET 0x0224U -#define FIOPAD_J45_REG0_OFFSET 0x0228U -#define FIOPAD_E47_REG0_OFFSET 0x022CU -#define FIOPAD_G47_REG0_OFFSET 0x0230U -#define FIOPAD_J47_REG0_OFFSET 0x0234U -#define FIOPAD_J49_REG0_OFFSET 0x0238U -#define FIOPAD_N49_REG0_OFFSET 0x023CU -#define FIOPAD_L51_REG0_OFFSET 0x0240U -#define FIOPAD_L49_REG0_OFFSET 0x0244U -#define FIOPAD_N53_REG0_OFFSET 0x0248U -#define FIOPAD_J53_REG0_OFFSET 0x024CU - -#define FIOPAD_REG0_BEG_OFFSET FIOPAD_AN59_REG0_OFFSET -#define FIOPAD_REG0_END_OFFSET FIOPAD_J53_REG0_OFFSET - -/* register offset of iopad delay */ -#define FIOPAD_AJ55_REG1_OFFSET 0x1024U -#define FIOPAD_AL55_REG1_OFFSET 0x1028U -#define FIOPAD_AL53_REG1_OFFSET 0x102CU -#define FIOPAD_AN51_REG1_OFFSET 0x1030U -#define FIOPAD_AR51_REG1_OFFSET 0x1034U -#define FIOPAD_AJ57_REG1_OFFSET 0x1058U -#define FIOPAD_AG59_REG1_OFFSET 0x105CU -#define FIOPAD_AG57_REG1_OFFSET 0x1060U -#define FIOPAD_AE59_REG1_OFFSET 0x1064U -#define FIOPAD_BA55_REG1_OFFSET 0x1074U -#define FIOPAD_BA53_REG1_OFFSET 0x1078U -#define FIOPAD_AR59_REG1_OFFSET 0x107CU -#define FIOPAD_AU59_REG1_OFFSET 0x1080U -#define FIOPAD_A45_REG1_OFFSET 0x10D0U -#define FIOPAD_C45_REG1_OFFSET 0x10D4U -#define FIOPAD_A47_REG1_OFFSET 0x10D8U -#define FIOPAD_A49_REG1_OFFSET 0x10DCU -#define FIOPAD_C49_REG1_OFFSET 0x10E0U -#define FIOPAD_A51_REG1_OFFSET 0x10E4U -#define FIOPAD_A33_REG1_OFFSET 0x10E8U -#define FIOPAD_C33_REG1_OFFSET 0x10ECU -#define FIOPAD_C31_REG1_OFFSET 0x10F0U -#define FIOPAD_A31_REG1_OFFSET 0x10F4U -#define FIOPAD_AJ53_REG1_OFFSET 0x10F8U -#define FIOPAD_AL49_REG1_OFFSET 0x10FCU -#define FIOPAD_AL47_REG1_OFFSET 0x1100U -#define FIOPAD_AN49_REG1_OFFSET 0x1104U -#define FIOPAD_AG51_REG1_OFFSET 0x1108U -#define FIOPAD_AJ51_REG1_OFFSET 0x110CU -#define FIOPAD_AG49_REG1_OFFSET 0x1110U -#define FIOPAD_AE55_REG1_OFFSET 0x1114U -#define FIOPAD_AE53_REG1_OFFSET 0x1118U -#define FIOPAD_AG55_REG1_OFFSET 0x111CU -#define FIOPAD_AJ49_REG1_OFFSET 0x1120U -#define FIOPAD_AC55_REG1_OFFSET 0x1124U -#define FIOPAD_AC53_REG1_OFFSET 0x1128U -#define FIOPAD_AE51_REG1_OFFSET 0x112CU -#define FIOPAD_W51_REG1_OFFSET 0x1130U -#define FIOPAD_W53_REG1_OFFSET 0x1138U -#define FIOPAD_U55_REG1_OFFSET 0x113CU -#define FIOPAD_U53_REG1_OFFSET 0x1140U -#define FIOPAD_AE49_REG1_OFFSET 0x1144U -#define FIOPAD_AC49_REG1_OFFSET 0x1148U -#define FIOPAD_AE47_REG1_OFFSET 0x114CU -#define FIOPAD_AA47_REG1_OFFSET 0x1150U -#define FIOPAD_AA49_REG1_OFFSET 0x1154U -#define FIOPAD_W49_REG1_OFFSET 0x1158U -#define FIOPAD_AA51_REG1_OFFSET 0x115CU -#define FIOPAD_U49_REG1_OFFSET 0x1160U -#define FIOPAD_J59_REG1_OFFSET 0x1168U -#define FIOPAD_L57_REG1_OFFSET 0x116CU -#define FIOPAD_C59_REG1_OFFSET 0x1170U -#define FIOPAD_E59_REG1_OFFSET 0x1174U -#define FIOPAD_J57_REG1_OFFSET 0x1178U -#define FIOPAD_L59_REG1_OFFSET 0x117CU -#define FIOPAD_N59_REG1_OFFSET 0x1180U -#define FIOPAD_E31_REG1_OFFSET 0x118CU -#define FIOPAD_G31_REG1_OFFSET 0x1190U -#define FIOPAD_N41_REG1_OFFSET 0x1194U -#define FIOPAD_N39_REG1_OFFSET 0x1198U -#define FIOPAD_J33_REG1_OFFSET 0x119CU -#define FIOPAD_N33_REG1_OFFSET 0x11A0U -#define FIOPAD_L33_REG1_OFFSET 0x11A4U -#define FIOPAD_N45_REG1_OFFSET 0x11A8U -#define FIOPAD_N43_REG1_OFFSET 0x11ACU -#define FIOPAD_L31_REG1_OFFSET 0x11B0U -#define FIOPAD_J31_REG1_OFFSET 0x11B4U -#define FIOPAD_J29_REG1_OFFSET 0x11B8U -#define FIOPAD_E29_REG1_OFFSET 0x11BCU -#define FIOPAD_G29_REG1_OFFSET 0x11C0U -#define FIOPAD_J37_REG1_OFFSET 0x11CCU -#define FIOPAD_J39_REG1_OFFSET 0x11D0U -#define FIOPAD_G41_REG1_OFFSET 0x11D4U -#define FIOPAD_E43_REG1_OFFSET 0x11D8U -#define FIOPAD_L43_REG1_OFFSET 0x11DCU -#define FIOPAD_C43_REG1_OFFSET 0x11E0U -#define FIOPAD_E41_REG1_OFFSET 0x11E4U -#define FIOPAD_L45_REG1_OFFSET 0x11E8U -#define FIOPAD_J43_REG1_OFFSET 0x11ECU -#define FIOPAD_J41_REG1_OFFSET 0x11F0U -#define FIOPAD_L39_REG1_OFFSET 0x11F4U -#define FIOPAD_E37_REG1_OFFSET 0x11F8U -#define FIOPAD_E35_REG1_OFFSET 0x11FCU -#define FIOPAD_G35_REG1_OFFSET 0x1200U -#define FIOPAD_L55_REG1_OFFSET 0x1220U -#define FIOPAD_J55_REG1_OFFSET 0x1224U -#define FIOPAD_J45_REG1_OFFSET 0x1228U -#define FIOPAD_E47_REG1_OFFSET 0x122CU -#define FIOPAD_G47_REG1_OFFSET 0x1230U -#define FIOPAD_J47_REG1_OFFSET 0x1234U -#define FIOPAD_J49_REG1_OFFSET 0x1238U -#define FIOPAD_N49_REG1_OFFSET 0x123CU -#define FIOPAD_L51_REG1_OFFSET 0x1240U -#define FIOPAD_L49_REG1_OFFSET 0x1244U -#define FIOPAD_N53_REG1_OFFSET 0x1248U -#define FIOPAD_J53_REG1_OFFSET 0x124CU - -#define FIOPAD_REG1_BEG_OFFSET FIOPAD_AJ55_REG1_OFFSET -#define FIOPAD_REG1_END_OFFSET FIOPAD_J53_REG1_OFFSET - -#ifdef __cplusplus -} - -#endif - -#endif \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/board/phytium-pi/fparameters_comm.h b/bsp/phytium/libraries/standalone/board/phytium-pi/fparameters_comm.h deleted file mode 100644 index 43db98f094..0000000000 --- a/bsp/phytium/libraries/standalone/board/phytium-pi/fparameters_comm.h +++ /dev/null @@ -1,725 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fparameters_comm.h - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-17 18:01:11 - * Description:  This file is for - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - */ - -#ifndef BOARD_PHYTIUM_PI_PARAMTERERS_COMMON_H -#define BOARD_PHYTIUM_PI_PARAMTERERS_COMMON_H - -#ifdef __cplusplus -extern "C" -{ -#endif - -/***************************** Include Files *********************************/ -#if !defined(__ASSEMBLER__) -#include "ftypes.h" -#endif - -/************************** Constant Definitions *****************************/ -/* CACHE */ -#define CACHE_LINE_ADDR_MASK 0x3FUL -#define CACHE_LINE 64U - -/* DEVICE Register Address */ -#define FT_DEV_BASE_ADDR 0x28000000U -#define FT_DEV_END_ADDR 0x2FFFFFFFU - -/* PCI */ -#define FPCIE_NUM 1 -#define FPCIE0_ID 0 -#define FPCIE0_MISC_IRQ_NUM 40 - -#define FPCIE_CFG_MAX_NUM_OF_BUS 256 -#define FPCIE_CFG_MAX_NUM_OF_DEV 32 -#define FPCIE_CFG_MAX_NUM_OF_FUN 8 - -#define FPCI_CONFIG_BASE_ADDR 0x40000000U -#define FPCI_CONFIG_REG_LENGTH 0x10000000U - -#define FPCI_IO_CONFIG_BASE_ADDR 0x50000000U -#define FPCI_IO_CONFIG_REG_LENGTH 0x08000000U - -#define FPCI_MEM32_BASE_ADDR 0x58000000U -#define FPCI_MEM32_REG_LENGTH 0x27FFFFFFU - -#define FPCI_MEM64_BASE_ADDR 0x1000000000U -#define FPCI_MEM64_REG_LENGTH 0x1000000000U - -#define FPCI_EU0_C0_CONTROL_BASE_ADDR 0x29000000U -#define FPCI_EU0_C1_CONTROL_BASE_ADDR 0x29010000U -#define FPCI_EU0_C2_CONTROL_BASE_ADDR 0x29020000U -#define FPCI_EU1_C0_CONTROL_BASE_ADDR 0x29030000U -#define FPCI_EU1_C1_CONTROL_BASE_ADDR 0x29040000U -#define FPCI_EU1_C2_CONTROL_BASE_ADDR 0x29050000U - -#define FPCI_EU0_CONFIG_BASE_ADDR 0x29100000U -#define FPCI_EU1_CONFIG_BASE_ADDR 0x29101000U - -#define FPCI_INTA_IRQ_NUM 36 -#define FPCI_INTB_IRQ_NUM 37 -#define FPCI_INTC_IRQ_NUM 38 -#define FPCI_INTD_IRQ_NUM 39 - -#define FPCI_NEED_SKIP 0 - -#define FPCI_INTX_PEU0_STAT 0x29100000U -#define FPCI_INTX_PEU1_STAT 0x29101000U - -#define FPCI_INTX_EU0_C0_CONTROL 0x29000184U -#define FPCI_INTX_EU0_C1_CONTROL 0x29010184U -#define FPCI_INTX_EU0_C2_CONTROL 0x29020184U -#define FPCI_INTX_EU1_C0_CONTROL 0x29030184U -#define FPCI_INTX_EU1_C1_CONTROL 0x29040184U -#define FPCI_INTX_EU1_C2_CONTROL 0x29050184U - -#define FPCI_INTX_CONTROL_NUM 6 /* Total number of controllers */ -#define FPCI_INTX_SATA_NUM 2 /* Total number of controllers */ - - -/* platform ahci host */ -#define PLAT_AHCI_HOST_MAX_COUNT 5 -#define AHCI_BASE_0 0 -#define AHCI_BASE_1 0 -#define AHCI_BASE_2 0 -#define AHCI_BASE_3 0 -#define AHCI_BASE_4 0 - -#define AHCI_IRQ_0 0 -#define AHCI_IRQ_1 0 -#define AHCI_IRQ_2 0 -#define AHCI_IRQ_3 0 -#define AHCI_IRQ_4 0 - -/* sata controller */ -#define FSATA0_BASE_ADDR 0x31A40000U -#define FSATA1_BASE_ADDR 0x32014000U - -#define FSATA0_IRQ_NUM 74 -#define FSATA1_IRQ_NUM 75 - -#if !defined(__ASSEMBLER__) -enum -{ - FSATA0_ID = 0, - FSATA1_ID = 1, - - FSATA_NUM -}; -#endif - -/* SCMI and MHU */ -#define FSCMI_MHU_BASE_ADDR 0x32a00000 -#define FSCMI_MHU_IRQ_NUM (22U + 32U) -#define FSCMI_SHR_MEM_ADDR 0x32a11400 -#define FSCMI_MEM_TX_OFSET 0x1400 -#define FSCMI_MEM_RX_OFSET 0x1000 -#define FSCMI_SHR_MEM_SIZE 0x400 - -#define FSCMI_MSG_SIZE 128 -#define FSCMI_MAX_STR_SIZE 16 -#define FSCMI_MAX_NUM_SENSOR 16 -#define FSCMI_MAX_PROTOCOLS_IMP 16 -#define FSCMI_MAX_PERF_DOMAINS 3 -#define FSCMI_MAX_OPPS 4 - -/* UART */ -#define FUART_NUM 4U -#define FUART_REG_LENGTH 0x18000U - -#define FUART0_ID 0U -#define FUART0_IRQ_NUM (85 + 30) -#define FUART0_BASE_ADDR 0x2800c000U -#define FUART0_CLK_FREQ_HZ 100000000U - -#define FUART1_ID 1U -#define FUART1_IRQ_NUM (86 + 30) -#define FUART1_BASE_ADDR 0x2800d000U -#define FUART1_CLK_FREQ_HZ 100000000U - -#define FUART2_ID 2U -#define FUART2_IRQ_NUM (87 + 30) -#define FUART2_BASE_ADDR 0x2800e000U -#define FUART2_CLK_FREQ_HZ 100000000U - -#define FUART3_BASE_ADDR 0x2800f000U -#define FUART3_ID 3U -#define FUART3_IRQ_NUM (88 + 30) -#define FUART3_CLK_FREQ_HZ 100000000U - -#define FT_STDOUT_BASE_ADDR FUART1_BASE_ADDR -#define FT_STDIN_BASE_ADDR FUART1_BASE_ADDR - -/****** GIC v3 *****/ -#define FT_GICV3_INSTANCES_NUM 1U -#define GICV3_REG_LENGTH 0x00009000U - -/* - * The maximum priority value that can be used in the GIC. - */ -#define GICV3_MAX_INTR_PRIO_VAL 240U -#define GICV3_INTR_PRIO_MASK 0x000000f0U - -#define ARM_GIC_NR_IRQS 270U -#define ARM_GIC_IRQ_START 0U -#define FGIC_NUM 1U - -#define ARM_GIC_IPI_COUNT 16U /* MPCore IPI count */ -#define SGI_INT_MAX 16U -#define SPI_START_INT_NUM 32U /* SPI start at ID32 */ -#define PPI_START_INT_NUM 16U /* PPI start at ID16 */ -#define GIC_INT_MAX_NUM 1020U /* GIC max interrupts count */ - -#define GICV3_BASE_ADDR 0x30800000U -#define GICV3_DISTRIBUTOR_BASE_ADDR (GICV3_BASE_ADDR + 0) -#define GICV3_RD_BASE_ADDR (GICV3_BASE_ADDR + 0x80000U) -#define GICV3_RD_OFFSET (2U << 16) -#define FT_GICV3_VECTORTABLE_NUM GIC_INT_MAX_NUM - -/* GPIO */ -#if !defined(__ASSEMBLER__) -enum -{ - FGPIO0_ID = 0, - FGPIO1_ID = 1, - FGPIO2_ID, - FGPIO3_ID, - FGPIO4_ID, - FGPIO5_ID, - - FGPIO_NUM -}; -#endif - -#define FGPIO_WITH_PIN_IRQ 2U /* max id of gpio assign irq for each pin */ - -#define FGPIO0_BASE_ADDR 0x28034000U -#define FGPIO1_BASE_ADDR 0x28035000U -#define FGPIO2_BASE_ADDR 0x28036000U -#define FGPIO3_BASE_ADDR 0x28037000U -#define FGPIO4_BASE_ADDR 0x28038000U -#define FGPIO5_BASE_ADDR 0x28039000U - -#define FGPIO_CTRL_PIN_NUM 16U - -#define FGPIO_PIN_IRQ_BASE 140U -#define FGPIO_PIN_IRQ_NUM_GET(id, pin) (FGPIO_PIN_IRQ_BASE + FGPIO_CTRL_PIN_NUM * (id) + (pin)) - -#define FGPIO_3_IRQ_NUM 188U -#define FGPIO_4_IRQ_NUM 189U -#define FGPIO_5_IRQ_NUM 190U - -#define FGPIO_PIN_IRQ_TOTAL 51U - -/* SPI */ -#define FSPI0_BASE_ADDR 0x2803A000U -#define FSPI1_BASE_ADDR 0x2803B000U -#define FSPI2_BASE 0x2803C000U -#define FSPI3_BASE 0x2803D000U -#define FSPI0_ID 0U -#define FSPI1_ID 1U -#define FSPI2_ID 2U -#define FSPI3_ID 3U - -#define FSPI0_IRQ_NUM 191U -#define FSPI1_IRQ_NUM 192U -#define FSPI2_IRQ_NUM 193U -#define FSPI3_IRQ_NUM 194U - -#define FSPI_CLK_FREQ_HZ 50000000U -#define FSPI_NUM 4U - -/* XMAC */ -#define FXMAC_NUM 4U - -#define FXMAC0_ID 0U -#define FXMAC1_ID 1U -#define FXMAC2_ID 2U -#define FXMAC3_ID 3U - -#define FXMAC0_BASE_ADDR 0x3200C000U -#define FXMAC1_BASE_ADDR 0x3200E000U -#define FXMAC2_BASE_ADDR 0x32010000U -#define FXMAC3_BASE_ADDR 0x32012000U - -#define FXMAC0_MODE_SEL_BASE_ADDR 0x3200DC00U -#define FXMAC0_LOOPBACK_SEL_BASE_ADDR 0x3200DC04U -#define FXMAC1_MODE_SEL_BASE_ADDR 0x3200FC00U -#define FXMAC1_LOOPBACK_SEL_BASE_ADDR 0x3200FC04U -#define FXMAC2_MODE_SEL_BASE_ADDR 0x32011C00U -#define FXMAC2_LOOPBACK_SEL_BASE_ADDR 0x32011C04U -#define FXMAC3_MODE_SEL_BASE_ADDR 0x32013C00U -#define FXMAC3_LOOPBACK_SEL_BASE_ADDR 0x32013C04U - -#define FXMAC0_PCLK 50000000U -#define FXMAC1_PCLK 50000000U -#define FXMAC2_PCLK 50000000U -#define FXMAC3_PCLK 50000000U -#define FXMAC0_HOTPLUG_IRQ_NUM (53U + 30U) -#define FXMAC1_HOTPLUG_IRQ_NUM (54U + 30U) -#define FXMAC2_HOTPLUG_IRQ_NUM (55U + 30U) -#define FXMAC3_HOTPLUG_IRQ_NUM (56U + 30U) - -#define FXMAC_QUEUE_MAX_NUM 16U - -#define FXMAC0_QUEUE0_IRQ_NUM (57U + 30U) -#define FXMAC0_QUEUE1_IRQ_NUM (58U + 30U) -#define FXMAC0_QUEUE2_IRQ_NUM (59U + 30U) -#define FXMAC0_QUEUE3_IRQ_NUM (60U + 30U) -#define FXMAC0_QUEUE4_IRQ_NUM (30U + 30U) -#define FXMAC0_QUEUE5_IRQ_NUM (31U + 30U) -#define FXMAC0_QUEUE6_IRQ_NUM (32U + 30U) -#define FXMAC0_QUEUE7_IRQ_NUM (33U + 30U) - -#define FXMAC1_QUEUE0_IRQ_NUM (61U + 30U) -#define FXMAC1_QUEUE1_IRQ_NUM (62U + 30U) -#define FXMAC1_QUEUE2_IRQ_NUM (63U + 30U) -#define FXMAC1_QUEUE3_IRQ_NUM (64U + 30U) - -#define FXMAC2_QUEUE0_IRQ_NUM (66U + 30U) -#define FXMAC2_QUEUE1_IRQ_NUM (67U + 30U) -#define FXMAC2_QUEUE2_IRQ_NUM (68U + 30U) -#define FXMAC2_QUEUE3_IRQ_NUM (69U + 30U) - -#define FXMAC3_QUEUE0_IRQ_NUM (70U + 30U) -#define FXMAC3_QUEUE1_IRQ_NUM (71U + 30U) -#define FXMAC3_QUEUE2_IRQ_NUM (72U + 30U) -#define FXMAC3_QUEUE3_IRQ_NUM (73U + 30U) - -#define FXMAC_PHY_MAX_NUM 32U - -#define FXMAC_CLK_TYPE_0 - -#if !defined(__ASSEMBLER__) -/* IOPAD */ -enum -{ - FIOPAD0_ID = 0, - - FIOPAD_NUM -}; -#endif - -/* QSPI */ -#if !defined(__ASSEMBLER__) -enum -{ - FQSPI0_ID = 0, - - FQSPI_NUM -}; - -#define FQSPI_BASE_ADDR 0x028008000U - -/* FQSPI cs 0_3, chip number */ -enum -{ - FQSPI_CS_0 = 0, - FQSPI_CS_1 = 1, - FQSPI_CS_2 = 2, - FQSPI_CS_3 = 3, - FQSPI_CS_NUM -}; - -#endif - -#define FQSPI_MEM_START_ADDR 0x0U -#define FQSPI_MEM_END_ADDR 0x0FFFFFFFU /* 256MB */ -#define FQSPI_MEM_START_ADDR_64 0x100000000U -#define FQSPI_MEM_END_ADDR_64 0x17FFFFFFFU /* 2GB */ - -/* TIMER and TACHO */ -#define FTIMER_NUM 38U -#define FTIMER_CLK_FREQ_HZ 50000000ULL /* 50MHz */ -#define FTIMER_TICK_PERIOD_NS 20U /* 20ns */ -#define FTIMER_TACHO_IRQ_NUM(n) (226U + (n)) -#define FTIMER_TACHO_BASE_ADDR(n) (0x28054000U + 0x1000U * (n)) - -#if !defined(__ASSEMBLER__) -enum -{ - FTACHO0_ID = 0, - FTACHO1_ID = 1, - FTACHO2_ID, - FTACHO3_ID, - FTACHO4_ID, - FTACHO5_ID, - FTACHO6_ID, - FTACHO7_ID, - FTACHO8_ID, - FTACHO9_ID, - FTACHO10_ID, - FTACHO11_ID, - FTACHO12_ID, - FTACHO13_ID, - FTACHO14_ID, - FTACHO15_ID, - - FTACHO_NUM -} ; -#endif - -/* GDMA */ -#define FGDMA0_ID 0U -#define FGDMA0_BASE_ADDR 0x32B34000U -#define FGDMA0_CHANNEL0_IRQ_NUM 266U -#define FGDMA_NUM_OF_CHAN 16 -#define FGDMA_INSTANCE_NUM 1U -#define FGDMA0_CAPACITY (1U<<0) - -/* CANFD */ -#define FCAN_CLK_FREQ_HZ 200000000U - -#define FCAN0_BASE_ADDR 0x2800A000U -#define FCAN1_BASE_ADDR 0x2800B000U - -#define FCAN0_IRQ_NUM 113U -#define FCAN1_IRQ_NUM 114U - -#if !defined(__ASSEMBLER__) -enum -{ - FCAN0_ID = 0, - FCAN1_ID = 1, - - FCAN_NUM -}; -#endif - -/* WDT */ -#if !defined(__ASSEMBLER__) -enum -{ - FWDT0_ID = 0, - FWDT1_ID, - - FWDT_NUM -}; -#endif - -#define FWDT0_REFRESH_BASE_ADDR 0x28040000U -#define FWDT1_REFRESH_BASE_ADDR 0x28042000U - -#define FWDT_CONTROL_BASE_ADDR(x) ((x)+0x1000) - -#define FWDT0_IRQ_NUM 196U -#define FWDT1_IRQ_NUM 197U - -#define FWDT_CLK_FREQ_HZ 48000000U /* 48MHz */ - -/*MIO*/ -#define FMIO_BASE_ADDR(n) (0x28014000 + 0x2000 * (n)) -#define FMIO_CONF_ADDR(n) FMIO_BASE_ADDR(n)+0x1000 -#define FMIO_IRQ_NUM(n) (124+n) -#define FMIO_CLK_FREQ_HZ 50000000 /* 50MHz */ - -#if !defined(__ASSEMBLER__) -enum -{ - FMIO0_ID = 0, - FMIO1_ID = 1, - FMIO2_ID, - FMIO3_ID, - FMIO4_ID, - FMIO5_ID, - FMIO6_ID, - FMIO7_ID, - FMIO8_ID, - FMIO9_ID, - FMIO10_ID, - FMIO11_ID, - FMIO12_ID, - FMIO13_ID, - FMIO14_ID, - FMIO15_ID, - - FMIO_NUM -}; -#endif - -#if !defined(__ASSEMBLER__) -/*I2C0 -> PMBUS0 -* I2C1 -> PMBUS1 -* I2C2 -> SMBUS0 -*/ -enum -{ - FI2C0_ID = 0, - FI2C1_ID, - FI2C2_ID, - - FI2C_NUM -}; -#endif - -#define FI2C0_BASE_ADDR 0x28011000 -#define FI2C1_BASE_ADDR 0x28012000 -#define FI2C2_BASE_ADDR 0x28013000 - -#define FI2C0_IRQ_NUM 121 -#define FI2C1_IRQ_NUM 122 -#define FI2C2_IRQ_NUM 123 - -#define FI2C_CLK_FREQ_HZ 50000000 /* 50MHz */ - -/* SDIO */ -#if !defined(__ASSEMBLER__) -enum -{ - FSDIO0_ID = 0, - FSDIO1_ID = 1, - - FSDIO_NUM -}; -#endif - -#define FSDIO0_BASE_ADDR 0x28000000U -#define FSDIO1_BASE_ADDR 0x28001000U - -#define FSDIO0_IRQ_NUM 104U -#define FSDIO1_IRQ_NUM 105U - -#define FSDIO_CLK_FREQ_HZ (1200000000UL) /* 1.2GHz */ - -/* NAND */ -#define FNAND_NUM 1U -#define FNAND_INSTANCE0 0U -#define FNAND_BASE_ADDR 0x28002000U -#define FNAND_IRQ_NUM (106U) -#define FNAND_CONNECT_MAX_NUM 1U - -#define FIOPAD_BASE_ADDR 0x32B30000U - -/* DDMA */ -#define FDDMA0_ID 0U -#define FDDMA0_BASE_ADDR 0x28003000U -#define FDDMA0_IRQ_NUM 107U - -#define FDDMA1_ID 1U -#define FDDMA1_BASE_ADDR 0x28004000U -#define FDDMA1_IRQ_NUM 108U - -#define FDDMA_INSTANCE_NUM 2U - -#define FDDMA0_UART0_TX_SLAVE_ID 2U /* uart0 tx slave-id */ -#define FDDMA0_UART1_TX_SLAVE_ID 3U /* uart1 tx slave-id */ -#define FDDMA0_UART2_TX_SLAVE_ID 4U /* uart2 tx slave-id */ -#define FDDMA0_UART3_TX_SLAVE_ID 5U /* uart3 tx slave-id */ - -#define FDDMA0_SPIM0_TX_SLAVE_ID 6U /* spi0 tx slave-id */ -#define FDDMA0_SPIM1_TX_SLAVE_ID 7U /* spi1 tx slave-id */ -#define FDDMA0_SPIM2_TX_SLAVE_ID 8U /* spi2 tx slave-id */ -#define FDDMA0_SPIM3_TX_SLAVE_ID 9U /* spi3 tx slave-id */ - -#define FDDMA0_UART0_RX_SLAVE_ID 15U /* uart0 rx slave-id */ -#define FDDMA0_UART1_RX_SLAVE_ID 16U /* uart1 rx slave-id */ -#define FDDMA0_UART2_RX_SLAVE_ID 17U /* uart2 rx slave-id */ -#define FDDMA0_UART3_RX_SLAVE_ID 18U /* uart3 rx slave-id */ - -#define FDDMA0_SPIM0_RX_SLAVE_ID 19U /* spi0 rx slave-id */ -#define FDDMA0_SPIM1_RX_SLAVE_ID 20U /* spi1 rx slave-id */ -#define FDDMA0_SPIM2_RX_SLAVE_ID 21U /* spi2 rx slave-id */ -#define FDDMA0_SPIM3_RX_SLAVE_ID 22U /* spi3 rx slave-id */ - -/* FDDMA1_ID */ -#define FDDMA1_MIO0_TX_SLAVE_ID 0U /* mio0 rx slave-id */ -#define FDDMA1_MIO1_TX_SLAVE_ID 1U /* mio1 rx slave-id */ -#define FDDMA1_MIO2_TX_SLAVE_ID 2U /* mio2 rx slave-id */ -#define FDDMA1_MIO3_TX_SLAVE_ID 3U /* mio3 rx slave-id */ -#define FDDMA1_MIO4_TX_SLAVE_ID 4U /* mio4 rx slave-id */ -#define FDDMA1_MIO5_TX_SLAVE_ID 5U /* mio5 rx slave-id */ -#define FDDMA1_MIO6_TX_SLAVE_ID 6U /* mio6 rx slave-id */ -#define FDDMA1_MIO7_TX_SLAVE_ID 7U /* mio7 rx slave-id */ -#define FDDMA1_MIO8_TX_SLAVE_ID 8U /* mio8 rx slave-id */ -#define FDDMA1_MIO9_TX_SLAVE_ID 9U /* mio9 rx slave-id */ -#define FDDMA1_MIO10_TX_SLAVE_ID 10U /* mio10 rx slave-id */ -#define FDDMA1_MIO11_TX_SLAVE_ID 11U /* mio11 rx slave-id */ -#define FDDMA1_MIO12_TX_SLAVE_ID 12U /* mio12 rx slave-id */ -#define FDDMA1_MIO13_TX_SLAVE_ID 13U /* mio13 rx slave-id */ -#define FDDMA1_MIO14_TX_SLAVE_ID 14U /* mio14 rx slave-id */ -#define FDDMA1_MIO15_TX_SLAVE_ID 15U /* mio15 rx slave-id */ - -#define FDDMA1_MIO0_RX_SLAVE_ID 16U /* mio0 tx slave-id */ -#define FDDMA1_MIO1_RX_SLAVE_ID 17U /* mio1 tx slave-id */ -#define FDDMA1_MIO2_RX_SLAVE_ID 18U /* mio2 tx slave-id */ -#define FDDMA1_MIO3_RX_SLAVE_ID 19U /* mio3 tx slave-id */ -#define FDDMA1_MIO4_RX_SLAVE_ID 20U /* mio4 tx slave-id */ -#define FDDMA1_MIO5_RX_SLAVE_ID 21U /* mio5 tx slave-id */ -#define FDDMA1_MIO6_RX_SLAVE_ID 22U /* mio6 tx slave-id */ -#define FDDMA1_MIO7_RX_SLAVE_ID 23U /* mio7 tx slave-id */ -#define FDDMA1_MIO8_RX_SLAVE_ID 24U /* mio8 tx slave-id */ -#define FDDMA1_MIO9_RX_SLAVE_ID 25U /* mio9 tx slave-id */ -#define FDDMA1_MIO10_RX_SLAVE_ID 26U /* mio10 tx slave-id */ -#define FDDMA1_MIO11_RX_SLAVE_ID 27U /* mio11 tx slave-id */ -#define FDDMA1_MIO12_RX_SLAVE_ID 28U /* mio12 tx slave-id */ -#define FDDMA1_MIO13_RX_SLAVE_ID 29U /* mio13 tx slave-id */ -#define FDDMA1_MIO14_RX_SLAVE_ID 30U /* mio14 tx slave-id */ -#define FDDMA1_MIO15_RX_SLAVE_ID 31U /* mio15 tx slave-id */ - -#define FDDMA_MIN_SLAVE_ID 0U -#define FDDMA_MAX_SLAVE_ID 31U - -/* ADC */ -#if !defined(__ASSEMBLER__) -enum -{ - FADC0_ID = 0, - - FADC_NUM -}; - -typedef enum -{ - FADC_CHANNEL_0 = 0, - FADC_CHANNEL_1 = 1, - FADC_CHANNEL_2, - FADC_CHANNEL_3, - FADC_CHANNEL_4, - FADC_CHANNEL_5, - FADC_CHANNEL_6, - FADC_CHANNEL_7, - - FADC_CHANNEL_NUM -} FAdcChannel; - -#endif - -#define FADC0_BASE_ADDR 0x2807B000U - -#define FADC0_IRQ_NUM 264U - -/* PWM */ -#if !defined(__ASSEMBLER__) -enum -{ - FPWM0_ID = 0, - FPWM1_ID = 1, - FPWM2_ID, - FPWM3_ID, - FPWM4_ID, - FPWM5_ID, - FPWM6_ID, - FPWM7_ID, - - FPWM_NUM -}; - -typedef enum -{ - FPWM_CHANNEL_0 = 0, - FPWM_CHANNEL_1, - - FPWM_CHANNEL_NUM -} FPwmChannel; -#endif - -#define FPWM_BASE_ADDR 0x2804A000U - -#define FPWM_CLK_FREQ_HZ 50000000U /* 50MHz */ - -#define FPWM0_IRQ_NUM 205U -#define FPWM1_IRQ_NUM 206U -#define FPWM2_IRQ_NUM 207U -#define FPWM3_IRQ_NUM 208U -#define FPWM4_IRQ_NUM 209U -#define FPWM5_IRQ_NUM 210U -#define FPWM6_IRQ_NUM 211U -#define FPWM7_IRQ_NUM 212U -#define FPWM8_IRQ_NUM 213U -#define FPWM9_IRQ_NUM 214U -#define FPWM10_IRQ_NUM 215U -#define FPWM11_IRQ_NUM 216U -#define FPWM12_IRQ_NUM 217U -#define FPWM13_IRQ_NUM 218U -#define FPWM14_IRQ_NUM 219U -#define FPWM15_IRQ_NUM 220U - -/* Semaphore */ -#define FSEMA0_ID 0U -#define FSEMA0_BASE_ADDR 0x32B36000U -#define FSEMA_INSTANCE_NUM 1U - -/* LSD Config */ -#define FLSD_CONFIG_BASE 0x2807E000U -#define FLSD_NAND_MMCSD_HADDR 0xC0U -#define FLSD_CK_STOP_CONFIG0_HADDR 0x10U - -/* USB3 */ -#define FUSB3_ID_0 0U -#define FUSB3_ID_1 1U -#define FUSB3_NUM 2U -#define FUSB3_XHCI_OFFSET 0x8000U -#define FUSB3_0_BASE_ADDR 0x31A00000U -#define FUSB3_1_BASE_ADDR 0x31A20000U -#define FUSB3_0_IRQ_NUM 48U -#define FUSB3_1_IRQ_NUM 49U - -/* DcDp */ -#if !defined(__ASSEMBLER__) - -typedef enum -{ - FDCDP_ID0 = 0, - FDCDP_ID1, - - FDCDP_INSTANCE_NUM -} FDcDpNum; - -#endif - -#define FDC_CTRL_BASE_OFFSET 0x32000000U - -#define FDC0_CHANNEL_BASE_OFFSET 0x32001000U -#define FDC1_CHANNEL_BASE_OFFSET (FDC0_CHANNEL_BASE_OFFSET + 0x1000U) - -#define FDP0_CHANNEL_BASE_OFFSET 0x32004000U -#define FDP1_CHANNEL_BASE_OFFSET (FDP0_CHANNEL_BASE_OFFSET + 0x1000U) - -#define FDP0_PHY_BASE_OFFSET 0x32300000U -#define FDP1_PHY_BASE_OFFSET (FDP0_PHY_BASE_OFFSET + 0x100000U) - -#define FDCDP_IRQ_NUM 76 - -/* generic timer */ -/* non-secure physical timer int id */ -#define GENERIC_TIMER_NS_IRQ_NUM 30U - -/* virtual timer int id */ -#define GENERIC_VTIMER_IRQ_NUM 27U - -#if !defined(__ASSEMBLER__) -enum -{ - GENERIC_TIMER_ID0 = 0, /* non-secure physical timer */ - GENERIC_TIMER_ID1 = 1, /* virtual timer */ - - GENERIC_TIMER_NUM -}; -#endif - -/*****************************************************************************/ - -#ifdef __cplusplus -} - -#endif - -#endif \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/common/Kconfig b/bsp/phytium/libraries/standalone/common/Kconfig deleted file mode 100644 index 50288894b9..0000000000 --- a/bsp/phytium/libraries/standalone/common/Kconfig +++ /dev/null @@ -1,70 +0,0 @@ -menu "Sdk common configuration" -choice DEBUG_LOG_LEVEL - prompt "Debug log level" - default LOG_ERROR - help - VERBOS: Print bigger chunks of debugging information - DEBUG: Print extra information for debugging - INFO: Print necessary information messages - WARN: Print error conditions from which recovery measures have been taken - ERROR: Print critical errors, software module can not recover on its own - - config LOG_VERBOS - bool "Verbos" - config LOG_DEBUG - bool "Debug" - config LOG_INFO - bool "Info" - config LOG_WARN - bool "Warn" - config LOG_ERROR - bool "Error" - config LOG_NONE - bool "None" - -endchoice # DEBUG_LOG_LEVEL - -config LOG_EXTRA_INFO - bool "Debug log with extra info" - default n - help - Print debug information with source file name and source code line num. - -config LOG_DISPALY_CORE_NUM - bool "Debug display with core" - default n - help - To display CPU core information during debugging - -config BOOTUP_DEBUG_PRINTS - bool - prompt "Bootup debug" - default n - help - Enable Bootup debug printing - - - -config USE_DEFAULT_INTERRUPT_CONFIG - bool - prompt "Use default interrupt configuration" - default y - help - "If this option is not selected, core0 is used as the main core by default and all interrupt driver modules are initialized. Non-0 core initializes only the necessary interrupt driver modules. If this option is selected, the developer needs to initiate each module independently " - if USE_DEFAULT_INTERRUPT_CONFIG - choice INTERRUPT_ROLE_SELECT - prompt "Interrupt role select" - default INTERRUPT_ROLE_MASTER - help - "Select Interrupt role" - - config INTERRUPT_ROLE_MASTER - bool "Use master role" - - config INTERRUPT_ROLE_SLAVE - bool "Use slave role" - - endchoice # INTERRUPT_ROLE_SELECT - endif - -endmenu diff --git a/bsp/phytium/libraries/standalone/common/fassert.c b/bsp/phytium/libraries/standalone/common/fassert.c deleted file mode 100644 index ad23aeee26..0000000000 --- a/bsp/phytium/libraries/standalone/common/fassert.c +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fassert.c - * Date: 2021-04-07 09:53:07 - * LastEditTime: 2022-02-17 18:04:28 - * Description:  This file is for assertion implmentation. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2021/4/5 init commit - * 1.1 zhugengyu 2022/3/7 re-define assert macro - */ - -/***************************** Include Files *********************************/ -#include "ftypes.h" -#include "fassert.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ -typedef struct -{ - u32 status; /* 当前断言状态 */ - FAssertCB cb; /* 断言回调函数 */ -} FAssertInfo; /* 断言实例类型 */ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ -static void FAssertCallback(const char *file, s32 line, int ret); - -/************************** Variable Definitions *****************************/ -static FAssertInfo assert_info = -{ - .status = FASSERT_NONE, - .cb = FAssertCallback -}; /* 断言实例 */ - -/*****************************************************************************/ -/** - * @name: FAssertSetStatus - * @msg: 设置断言状态 - * @return {*} - * @param {FAssertStatus} status, 断言状态 - */ -void FAssertSetStatus(FAssertStatus status) -{ - assert_info.status = status; -} - -/** - * @name: FAssertGetStatus - * @msg: 获取当前断言状态 - * @return {FAssertStatus} 当前断言状态 - */ -FAssertStatus FAssertGetStatus(void) -{ - return assert_info.status; -} - -/** - * @name: FAssertCallback - * @msg: 默认的断言回调函数 - * @return {*} - * @param {char} *file, 断言发生的源文件 - * @param {s32} line, 断言发生的源文件行号 - * @param {int} ret, 保留给Non-block断言使用 - */ -static void FAssertCallback(const char *file, s32 line, int ret) -{ - f_printk("Assert Error at %s : %ld \r\n", file, line); -} - -/** - * @name: FAssertSetCB - * @msg: 设置断言回调函数 - * @return {*} - * @param {FAssertCB} cb, 断言回调函数 - */ -void FAssertSetCB(FAssertCB cb) -{ - if (NULL != cb) - { - assert_info.cb = cb; - } -} - -/** - * @name: FAssert - * @msg: 断言实现 - * @return {*} - * @param {char} *file, 断言发生的源文件 - * @param {s32} line, 断言发生的源文件行号 - * @param {int} code, 断言发生的退出码,保留给Non-block断言使用 - */ -void FAssert(const char *file, s32 line, int code) -{ - if (NULL != assert_info.cb) - { - /* 如果要实现Non-block断言,需要在回调中返回 */ - assert_info.cb(file, line, code); - } - - while (TRUE) - { - ; - } -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/common/fassert.h b/bsp/phytium/libraries/standalone/common/fassert.h deleted file mode 100644 index 47e3a44147..0000000000 --- a/bsp/phytium/libraries/standalone/common/fassert.h +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fassert.h - * Date: 2021-04-07 09:53:07 - * LastEditTime: 2022-02-17 18:04:35 - * Description:  This file is for assertion defintion. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2021/4/5 init commit - * 1.1 zhugengyu 2022/3/7 re-define assert macro - */ - -#ifndef FASSERT_H -#define FASSERT_H - -/***************************** Include Files *********************************/ -#include "fprintk.h" -#include "ferror_code.h" -#include "ftypes.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/**************************** Type Definitions *******************************/ -typedef enum -{ - FASSERT_NONE = 0, - FASSERT_OCCURRED -} FAssertStatus; /* 断言状态 */ - -/* 断言处理回调函数 */ -typedef void (*FAssertCB)(const char *file, s32 line, int ret); - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ -#define FASSERT_MSG(expression, fmt, ...) \ - { \ - if (expression) \ - { \ - FAssertSetStatus(FASSERT_NONE); \ - } \ - else \ - { \ - FAssertSetStatus(FASSERT_OCCURRED); \ - f_printk(fmt, ##__VA_ARGS__); \ - FAssert(__FILE__, __LINE__, 0xff); \ - } \ - } - -#define FASSERT(expression)\ - { \ - if (expression) \ - { \ - FAssertSetStatus(FASSERT_NONE); \ - } \ - else \ - { \ - FAssertSetStatus(FASSERT_OCCURRED); \ - FAssert(__FILE__, __LINE__, 0xff); \ - } \ - } - -/* 检查静态断言状态 */ -#define FASSERT_STATIC(expression) \ - extern int assert_static[(expression) ? 1 : -1] - -/************************** Function Prototypes ******************************/ -/* 设置断言状态 */ -void FAssertSetStatus(FAssertStatus status); - -/* 获取当前断言状态 */ -FAssertStatus FAssertGetStatus(void); - -/* 设置断言回调函数 */ -void FAssertSetCB(FAssertCB cb); - -/* 断言实现 */ -void FAssert(const char *file, s32 line, int code); - -#ifdef __cplusplus -} -#endif - -#endif // ! diff --git a/bsp/phytium/libraries/standalone/common/fdebug.c b/bsp/phytium/libraries/standalone/common/fdebug.c deleted file mode 100644 index 60a5f70e77..0000000000 --- a/bsp/phytium/libraries/standalone/common/fdebug.c +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fdebug.c - * Date: 2021-04-25 16:44:23 - * LastEditTime: 2022-02-17 18:04:50 - * Description:  This file is for providing debug functions. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/10/27 rename file name - */ - -#include "fdebug.h" -#include "fprintk.h" -#include "stdio.h" - -#define __is_print(ch) ((unsigned int)((ch) - ' ') < 127u - ' ') -void FtDumpHexByte(const u8 *ptr, u32 buflen) -{ - u8 *buf = (u8 *)ptr; - fsize_t i, j; - - for (i = 0; i < buflen; i += 16) - { - f_printk("%p: ", ptr + i); - - for (j = 0; j < 16; j++) - if (i + j < buflen) - { - f_printk("%02X ", buf[i + j]); - } - else - { - f_printk(" "); - } - f_printk(" "); - - for (j = 0; j < 16; j++) - if (i + j < buflen) - { - f_printk("%c", (char)(__is_print(buf[i + j]) ? buf[i + j] : '.')); - } - f_printk("\r\n"); - } -} - -void FtDumpHexByteDebug(const u8 *ptr, u32 buflen) -{ - u8 *buf = (u8 *)ptr; - fsize_t i, j; - - for (i = 0; i < buflen; i += 16) - { - f_printk("%x: ", ptr + i); - - for (j = 0; j < 16; j++) - if (i + j < buflen) - { - f_printk("%x ", buf[i + j]); - } - else - { - f_printk(" "); - } - f_printk(" "); - - for (j = 0; j < 16; j++) - if (i + j < buflen) - { - f_printk("%c", (char)(__is_print(buf[i + j]) ? buf[i + j] : '.')); - } - f_printk("\r\n"); - } -} - - -void FtDumpHexWord(const u32 *ptr, u32 buflen) -{ - u32 *buf = (u32 *)ptr; - u8 *char_data = (u8 *)ptr; - fsize_t i, j; - buflen = buflen / 4; - for (i = 0; i < buflen; i += 4) - { - f_printk("%p: ", ptr + i); - - for (j = 0; j < 4; j++) - { - if (i + j < buflen) - { - f_printk("%lx ", buf[i + j]); - } - else - { - f_printk(" "); - } - } - - f_printk(" "); - - for (j = 0; j < 16; j++) - if (i + j < buflen) - { - f_printk("%c", (char)(__is_print(char_data[i + j]) ? char_data[i + j] : '.')); - } - - f_printk("\r\n"); - } -} diff --git a/bsp/phytium/libraries/standalone/common/fdebug.h b/bsp/phytium/libraries/standalone/common/fdebug.h deleted file mode 100644 index 6ac4f83a00..0000000000 --- a/bsp/phytium/libraries/standalone/common/fdebug.h +++ /dev/null @@ -1,169 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fdebug.h - * Date: 2021-04-07 09:53:07 - * LastEditTime: 2022-02-17 18:04:58 - * Description:  This file is for showing debug api. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/10/27 rename file name - */ - -#ifndef FDEBUG_H -#define FDEBUG_H - -#include -#include "sdkconfig.h" -#include "ftypes.h" -#include "fprintk.h" -#ifdef CONFIG_USE_AMP -#include "fsmp.h" -#endif - -#include "fcpu_info.h" - - -#ifdef __cplusplus -extern "C" -{ -#endif - -typedef enum -{ - FT_LOG_NONE, /* No log output */ - FT_LOG_ERROR, /* Critical errors, software module can not recover on its own */ - FT_LOG_WARN, /* Error conditions from which recovery measures have been taken */ - FT_LOG_INFO, /* Information messages which describe normal flow of events */ - FT_LOG_DEBUG, /* Extra information which is not necessary for normal use (values, pointers, sizes, etc). */ - FT_LOG_VERBOSE /* Bigger chunks of debugging information, or frequent messages which can potentially flood the output. */ -} ft_log_level_t; - -#define LOG_COLOR_BLACK "30" -#define LOG_COLOR_RED "31" -#define LOG_COLOR_GREEN "32" -#define LOG_COLOR_BROWN "33" -#define LOG_COLOR_BLUE "34" -#define LOG_COLOR_PURPLE "35" -#define LOG_COLOR_CYAN "36" -#define LOG_COLOR(COLOR) "\033[0;" COLOR "m" -#define LOG_BOLD(COLOR) "\033[1;" COLOR "m" -#define LOG_RESET_COLOR "\033[0m" -#define LOG_COLOR_E LOG_COLOR(LOG_COLOR_RED) -#define LOG_COLOR_W LOG_COLOR(LOG_COLOR_BROWN) -#define LOG_COLOR_I LOG_COLOR(LOG_COLOR_GREEN) -#define LOG_COLOR_D LOG_COLOR(LOG_COLOR_CYAN) -#define LOG_COLOR_V LOG_COLOR(LOG_COLOR_PURPLE) - -/* select debug log level */ -#ifdef CONFIG_LOG_VERBOS - #define LOG_LOCAL_LEVEL FT_LOG_VERBOSE -#endif - -#ifdef CONFIG_LOG_ERROR - #define LOG_LOCAL_LEVEL FT_LOG_ERROR -#endif - -#ifdef CONFIG_LOG_WARN - #define LOG_LOCAL_LEVEL FT_LOG_WARN -#endif - -#ifdef CONFIG_LOG_INFO - #define LOG_LOCAL_LEVEL FT_LOG_INFO -#endif - -#ifdef CONFIG_LOG_DEBUG - #define LOG_LOCAL_LEVEL FT_LOG_DEBUG -#endif - -#define LOG_FORMAT(letter, format) LOG_COLOR_##letter " %s: " format LOG_RESET_COLOR "\r\n" - -#define PORT_KPRINTF f_printk - -#if defined(CONFIG_LOG_DISPALY_CORE_NUM) - #define DISPALY_CORE_NUM() \ - do {u32 cpu_id; \ - GetCpuId(&cpu_id); \ - PORT_KPRINTF("cpu%d:", cpu_id); } while(0) -#else -#define DISPALY_CORE_NUM() -#endif - - -#ifdef CONFIG_USE_AMP -#define LOG_SPIN_LOCK() SpinLock(); -#define LOG_SPIN_UNLOCK() SpinUnlock() ; -#else -#define LOG_SPIN_LOCK() -#define LOG_SPIN_UNLOCK() -#endif - - -#ifndef CONFIG_LOG_EXTRA_INFO -#define LOG_EARLY_IMPL(tag, format, log_level, log_tag_letter, ...) \ - do \ - { \ - if (LOG_LOCAL_LEVEL < log_level) \ - break; \ - LOG_SPIN_LOCK(); \ - DISPALY_CORE_NUM(); \ - PORT_KPRINTF(LOG_FORMAT(log_tag_letter, format), tag, ##__VA_ARGS__); \ - LOG_SPIN_UNLOCK(); \ - } while (0) -#else -#include -#define __FILENAME__ (strrchr(__FILE__, '/') ? (strrchr(__FILE__, '/') + 1):__FILE__) -/* print debug information with source file name and source code line num. */ -#define LOG_EARLY_IMPL(tag, format, log_level, log_tag_letter, ...) \ - do \ - { \ - if (LOG_LOCAL_LEVEL < log_level) \ - break; \ - DISPALY_CORE_NUM(); \ - PORT_KPRINTF(LOG_FORMAT(log_tag_letter, format" @%s:%d"), tag, ##__VA_ARGS__, __FILENAME__, __LINE__); \ - } while (0) -#endif - -#define EARLY_LOGE(tag, format, ...) LOG_EARLY_IMPL(tag, format, FT_LOG_ERROR, E, ##__VA_ARGS__) -#define EARLY_LOGI(tag, format, ...) LOG_EARLY_IMPL(tag, format, FT_LOG_INFO, I, ##__VA_ARGS__) -#define EARLY_LOGD(tag, format, ...) LOG_EARLY_IMPL(tag, format, FT_LOG_DEBUG, D, ##__VA_ARGS__) -#define EARLY_LOGW(tag, format, ...) LOG_EARLY_IMPL(tag, format, FT_LOG_WARN, W, ##__VA_ARGS__) -#define EARLY_LOGV(tag, format, ...) LOG_EARLY_IMPL(tag, format, FT_LOG_VERBOSE, W, ##__VA_ARGS__) - -/* do not compile log if define CONFIG_LOG_NONE */ -#ifndef CONFIG_LOG_NONE - #define FT_DEBUG_PRINT_I(TAG, format, ...) EARLY_LOGI(TAG, format, ##__VA_ARGS__) - #define FT_DEBUG_PRINT_E(TAG, format, ...) EARLY_LOGE(TAG, format, ##__VA_ARGS__) - #define FT_DEBUG_PRINT_D(TAG, format, ...) EARLY_LOGD(TAG, format, ##__VA_ARGS__) - #define FT_DEBUG_PRINT_W(TAG, format, ...) EARLY_LOGW(TAG, format, ##__VA_ARGS__) - #define FT_DEBUG_PRINT_V(TAG, format, ...) EARLY_LOGV(TAG, format, ##__VA_ARGS__) -#else - #define FT_DEBUG_PRINT_I(TAG, format, ...) - #define FT_DEBUG_PRINT_E(TAG, format, ...) - #define FT_DEBUG_PRINT_D(TAG, format, ...) - #define FT_DEBUG_PRINT_W(TAG, format, ...) - #define FT_DEBUG_PRINT_V(TAG, format, ...) -#endif - -#define FT_RAW_PRINTF(format, ...) PORT_KPRINTF(format, ##__VA_ARGS__) - -void FtDumpHexWord(const u32 *ptr, u32 buflen); -void FtDumpHexByte(const u8 *ptr, u32 buflen); - -#ifdef __cplusplus -} -#endif - -#endif // ! diff --git a/bsp/phytium/libraries/standalone/common/felf.c b/bsp/phytium/libraries/standalone/common/felf.c deleted file mode 100644 index 310166a67e..0000000000 --- a/bsp/phytium/libraries/standalone/common/felf.c +++ /dev/null @@ -1,1186 +0,0 @@ -/* - * @Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * @FilePath: felf.c - * @Date: 2023-05-25 19:27:49 - * @LastEditTime: 2023-06-05 14:11:48 - * Description:  This file is for providing elf functions. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/10/27 rename file name - * 1.1 huanghe 2023/06/05 add get section information - */ - -#include -#include "fkernel.h" -#include "felf.h" -#include "fcache.h" -#include "fdebug.h" -#include "fprintk.h" -/* This version doesn't work for 64-bit ABIs - Erik */ - -/* These typedefs need to be handled better */ -typedef u32 Elf32_Addr; /* Unsigned program address */ -typedef u32 Elf32_Off; /* Unsigned file offset */ -typedef s32 Elf32_Sword; /* Signed large integer */ -typedef u32 Elf32_Word; /* Unsigned large integer */ -typedef u16 Elf32_Half; /* Unsigned medium integer */ - -/* 64-bit ELF base types */ -typedef u64 Elf64_Addr; -typedef u16 Elf64_Half; -typedef s16 Elf64_SHalf; -typedef u64 Elf64_Off; -typedef s32 Elf64_Sword; -typedef u32 Elf64_Word; -typedef u64 Elf64_Xword; -typedef s64 Elf64_Sxword; - -/* e_ident[] identification indexes */ -#define EI_MAG0 0 /* file ID */ -#define EI_MAG1 1 /* file ID */ -#define EI_MAG2 2 /* file ID */ -#define EI_MAG3 3 /* file ID */ -#define EI_CLASS 4 /* file class */ -#define EI_DATA 5 /* data encoding */ -#define EI_VERSION 6 /* ELF header version */ -#define EI_OSABI 7 /* OS/ABI specific ELF extensions */ -#define EI_ABIVERSION 8 /* ABI target version */ -#define EI_PAD 9 /* start of pad bytes */ -#define EI_NIDENT 16 /* Size of e_ident[] */ - -/* ELF Header */ -typedef struct -{ - unsigned char e_ident[EI_NIDENT]; /* ELF Identification */ - Elf32_Half e_type; /* object file type */ - Elf32_Half e_machine; /* machine */ - Elf32_Word e_version; /* object file version */ - Elf32_Addr e_entry; /* virtual entry point */ - Elf32_Off e_phoff; /* program header table offset */ - Elf32_Off e_shoff; /* section header table offset */ - Elf32_Word e_flags; /* processor-specific flags */ - Elf32_Half e_ehsize; /* ELF header size */ - Elf32_Half e_phentsize; /* program header entry size */ - Elf32_Half e_phnum; /* number of program header entries */ - Elf32_Half e_shentsize; /* section header entry size */ - Elf32_Half e_shnum; /* number of section header entries */ - Elf32_Half e_shstrndx; /* section header table's "section - header string table" entry offset */ -} Elf32_Ehdr; - -typedef struct -{ - unsigned char e_ident[EI_NIDENT]; /* ELF Identification */ - Elf64_Half e_type; /* object file type */ - Elf64_Half e_machine; /* machine */ - Elf64_Word e_version; /* object file version */ - Elf64_Addr e_entry; /* virtual entry point */ - Elf64_Off e_phoff; /* program header table offset */ - Elf64_Off e_shoff; /* section header table offset */ - Elf64_Word e_flags; /* processor-specific flags */ - Elf64_Half e_ehsize; /* ELF header size */ - Elf64_Half e_phentsize; /* program header entry size */ - Elf64_Half e_phnum; /* number of program header entries */ - Elf64_Half e_shentsize; /* section header entry size */ - Elf64_Half e_shnum; /* number of section header entries */ - Elf64_Half e_shstrndx; /* section header table's "section - header string table" entry offset */ -} Elf64_Ehdr; - -/* Section Header */ -typedef struct -{ - Elf32_Word sh_name; /* name - index into section header - string table section */ - Elf32_Word sh_type; /* type */ - Elf32_Word sh_flags; /* flags */ - Elf32_Addr sh_addr; /* address */ - Elf32_Off sh_offset; /* file offset */ - Elf32_Word sh_size; /* section size */ - Elf32_Word sh_link; /* section header table index link */ - Elf32_Word sh_info; /* extra information */ - Elf32_Word sh_addralign; /* address alignment */ - Elf32_Word sh_entsize; /* section entry size */ -} Elf32_Shdr; - -typedef struct -{ - Elf64_Word sh_name; /* name - index into section header - string table section */ - Elf64_Word sh_type; /* type */ - Elf64_Xword sh_flags; /* flags */ - Elf64_Addr sh_addr; /* address */ - Elf64_Off sh_offset; /* file offset */ - Elf64_Xword sh_size; /* section size */ - Elf64_Word sh_link; /* section header table index link */ - Elf64_Word sh_info; /* extra information */ - Elf64_Xword sh_addralign; /* address alignment */ - Elf64_Xword sh_entsize; /* section entry size */ -} Elf64_Shdr; - -/* Symbol Table Entry */ -typedef struct -{ - Elf32_Word st_name; /* name - index into string table */ - Elf32_Addr st_value; /* symbol value */ - Elf32_Word st_size; /* symbol size */ - unsigned char st_info; /* type and binding */ - unsigned char st_other; /* 0 - no defined meaning */ - Elf32_Half st_shndx; /* section header index */ -} Elf32_Sym; - -/* Relocation entry with implicit addend */ -typedef struct -{ - Elf32_Addr r_offset; /* offset of relocation */ - Elf32_Word r_info; /* symbol table index and type */ -} Elf32_Rel; - -/* Relocation entry with explicit addend */ -typedef struct -{ - Elf32_Addr r_offset; /* offset of relocation */ - Elf32_Word r_info; /* symbol table index and type */ - Elf32_Sword r_addend; -} Elf32_Rela; - -typedef struct -{ - Elf64_Addr r_offset; /* Location at which to apply the action */ - Elf64_Xword r_info; /* index and type of relocation */ -} Elf64_Rel; - -typedef struct -{ - Elf64_Addr r_offset; /* Location at which to apply the action */ - Elf64_Xword r_info; /* index and type of relocation */ - Elf64_Sxword r_addend; /* Constant addend used to compute value */ -} Elf64_Rela; - -/* Program Header */ -typedef struct -{ - Elf32_Word p_type; /* segment type */ - Elf32_Off p_offset; /* segment offset */ - Elf32_Addr p_vaddr; /* virtual address of segment */ - Elf32_Addr p_paddr; /* physical address of segment */ - Elf32_Word p_filesz; /* number of bytes in file for seg */ - Elf32_Word p_memsz; /* number of bytes in mem. for seg */ - Elf32_Word p_flags; /* flags */ - Elf32_Word p_align; /* memory alignment */ -} Elf32_Phdr; - -typedef struct -{ - Elf64_Word p_type; /* segment type */ - Elf64_Word p_flags; /* flags */ - Elf64_Off p_offset; /* segment offset */ - Elf64_Addr p_vaddr; /* virtual address of segment */ - Elf64_Addr p_paddr; /* physical address of segment */ - Elf64_Xword p_filesz; /* number of bytes in file for seg */ - Elf64_Xword p_memsz; /* number of bytes in mem. for seg */ - Elf64_Xword p_align; /* memory alignment */ -} Elf64_Phdr; - -/* Dynamic structure */ -typedef struct -{ - Elf32_Sword d_tag; /* controls meaning of d_val */ - union - { - Elf32_Word d_val; /* Multiple meanings - see d_tag */ - Elf32_Addr d_ptr; /* program virtual address */ - } d_un; -} Elf32_Dyn; - -extern Elf32_Dyn _DYNAMIC[]; - -typedef struct -{ - Elf64_Sxword d_tag; /* entry tag value */ - union - { - Elf64_Xword d_val; - Elf64_Addr d_ptr; - } d_un; -} Elf64_Dyn; - -/* e_ident[] magic number */ -#define ELFMAG0 0x7f /* e_ident[EI_MAG0] */ -#define ELFMAG1 'E' /* e_ident[EI_MAG1] */ -#define ELFMAG2 'L' /* e_ident[EI_MAG2] */ -#define ELFMAG3 'F' /* e_ident[EI_MAG3] */ -#define ELFMAG "\177ELF" /* magic */ -#define SELFMAG 4 /* size of magic */ - -/* e_ident[] file class */ -#define ELFCLASSNONE 0 /* invalid */ -#define ELFCLASS32 1 /* 32-bit objs */ -#define ELFCLASS64 2 /* 64-bit objs */ -#define ELFCLASSNUM 3 /* number of classes */ - -/* e_ident[] data encoding */ -#define ELFDATANONE 0 /* invalid */ -#define ELFDATA2LSB 1 /* Little-Endian */ -#define ELFDATA2MSB 2 /* Big-Endian */ -#define ELFDATANUM 3 /* number of data encode defines */ - -/* e_ident[] OS/ABI specific ELF extensions */ -#define ELFOSABI_NONE 0 /* No extension specified */ -#define ELFOSABI_HPUX 1 /* Hewlett-Packard HP-UX */ -#define ELFOSABI_NETBSD 2 /* NetBSD */ -#define ELFOSABI_LINUX 3 /* Linux */ -#define ELFOSABI_SOLARIS 6 /* Sun Solaris */ -#define ELFOSABI_AIX 7 /* AIX */ -#define ELFOSABI_IRIX 8 /* IRIX */ -#define ELFOSABI_FREEBSD 9 /* FreeBSD */ -#define ELFOSABI_TRU64 10 /* Compaq TRU64 UNIX */ -#define ELFOSABI_MODESTO 11 /* Novell Modesto */ -#define ELFOSABI_OPENBSD 12 /* OpenBSD */ -/* 64-255 Architecture-specific value range */ - -/* e_ident[] ABI Version */ -#define ELFABIVERSION 0 - -/* e_ident */ -#define IS_ELF(ehdr) ((ehdr).e_ident[EI_MAG0] == ELFMAG0 && \ - (ehdr).e_ident[EI_MAG1] == ELFMAG1 && \ - (ehdr).e_ident[EI_MAG2] == ELFMAG2 && \ - (ehdr).e_ident[EI_MAG3] == ELFMAG3) - -/* e_type */ -#define ET_NONE 0 /* No file type */ -#define ET_REL 1 /* relocatable file */ -#define ET_EXEC 2 /* executable file */ -#define ET_DYN 3 /* shared object file */ -#define ET_CORE 4 /* core file */ -#define ET_NUM 5 /* number of types */ -#define ET_LOOS 0xfe00 /* reserved range for operating */ -#define ET_HIOS 0xfeff /* system specific e_type */ -#define ET_LOPROC 0xff00 /* reserved range for processor */ -#define ET_HIPROC 0xffff /* specific e_type */ - -/* e_machine */ -#define EM_NONE 0 /* No Machine */ -#define EM_M32 1 /* AT&T WE 32100 */ -#define EM_SPARC 2 /* SPARC */ -#define EM_386 3 /* Intel 80386 */ -#define EM_68K 4 /* Motorola 68000 */ -#define EM_88K 5 /* Motorola 88000 */ -#if 0 - #define EM_486 6 /* RESERVED - was Intel 80486 */ -#endif -#define EM_860 7 /* Intel 80860 */ -#define EM_MIPS 8 /* MIPS R3000 Big-Endian only */ -#define EM_S370 9 /* IBM System/370 Processor */ -#define EM_MIPS_RS4_BE 10 /* MIPS R4000 Big-Endian */ -#if 0 -#define EM_SPARC64 11 /* RESERVED - was SPARC v9 \ -64-bit unoffical */ -#endif -/* RESERVED 11-14 for future use */ -#define EM_PARISC 15 /* HPPA */ -/* RESERVED 16 for future use */ -#define EM_VPP500 17 /* Fujitsu VPP500 */ -#define EM_SPARC32PLUS 18 /* Enhanced instruction set SPARC */ -#define EM_960 19 /* Intel 80960 */ -#define EM_PPC 20 /* PowerPC */ -#define EM_PPC64 21 /* 64-bit PowerPC */ -#define EM_S390 22 /* IBM System/390 Processor */ -/* RESERVED 23-35 for future use */ -#define EM_V800 36 /* NEC V800 */ -#define EM_FR20 37 /* Fujitsu FR20 */ -#define EM_RH32 38 /* TRW RH-32 */ -#define EM_RCE 39 /* Motorola RCE */ -#define EM_ARM 40 /* Advanced Risc Machines ARM */ -#define EM_ALPHA 41 /* Digital Alpha */ -#define EM_SH 42 /* Hitachi SH */ -#define EM_SPARCV9 43 /* SPARC Version 9 */ -#define EM_TRICORE 44 /* Siemens TriCore embedded processor */ -#define EM_ARC 45 /* Argonaut RISC Core */ -#define EM_H8_300 46 /* Hitachi H8/300 */ -#define EM_H8_300H 47 /* Hitachi H8/300H */ -#define EM_H8S 48 /* Hitachi H8S */ -#define EM_H8_500 49 /* Hitachi H8/500 */ -#define EM_IA_64 50 /* Intel Merced */ -#define EM_MIPS_X 51 /* Stanford MIPS-X */ -#define EM_COLDFIRE 52 /* Motorola Coldfire */ -#define EM_68HC12 53 /* Motorola M68HC12 */ -#define EM_MMA 54 /* Fujitsu MMA Multimedia Accelerator*/ -#define EM_PCP 55 /* Siemens PCP */ -#define EM_NCPU 56 /* Sony nCPU embeeded RISC */ -#define EM_NDR1 57 /* Denso NDR1 microprocessor */ -#define EM_STARCORE 58 /* Motorola Start*Core processor */ -#define EM_ME16 59 /* Toyota ME16 processor */ -#define EM_ST100 60 /* STMicroelectronic ST100 processor */ -#define EM_TINYJ 61 /* Advanced Logic Corp. Tinyj emb.fam*/ -#define EM_X86_64 62 /* AMD x86-64 */ -#define EM_PDSP 63 /* Sony DSP Processor */ -/* RESERVED 64,65 for future use */ -#define EM_FX66 66 /* Siemens FX66 microcontroller */ -#define EM_ST9PLUS 67 /* STMicroelectronics ST9+ 8/16 mc */ -#define EM_ST7 68 /* STmicroelectronics ST7 8 bit mc */ -#define EM_68HC16 69 /* Motorola MC68HC16 microcontroller */ -#define EM_68HC11 70 /* Motorola MC68HC11 microcontroller */ -#define EM_68HC08 71 /* Motorola MC68HC08 microcontroller */ -#define EM_68HC05 72 /* Motorola MC68HC05 microcontroller */ -#define EM_SVX 73 /* Silicon Graphics SVx */ -#define EM_ST19 74 /* STMicroelectronics ST19 8 bit mc */ -#define EM_VAX 75 /* Digital VAX */ -#define EM_CHRIS 76 /* Axis Communications embedded proc. */ -#define EM_JAVELIN 77 /* Infineon Technologies emb. proc. */ -#define EM_FIREPATH 78 /* Element 14 64-bit DSP Processor */ -#define EM_ZSP 79 /* LSI Logic 16-bit DSP Processor */ -#define EM_MMIX 80 /* Donald Knuth's edu 64-bit proc. */ -#define EM_HUANY 81 /* Harvard University mach-indep objs */ -#define EM_PRISM 82 /* SiTera Prism */ -#define EM_AVR 83 /* Atmel AVR 8-bit microcontroller */ -#define EM_FR30 84 /* Fujitsu FR30 */ -#define EM_D10V 85 /* Mitsubishi DV10V */ -#define EM_D30V 86 /* Mitsubishi DV30V */ -#define EM_V850 87 /* NEC v850 */ -#define EM_M32R 88 /* Mitsubishi M32R */ -#define EM_MN10300 89 /* Matsushita MN10200 */ -#define EM_MN10200 90 /* Matsushita MN10200 */ -#define EM_PJ 91 /* picoJava */ -#define EM_NUM 92 /* number of machine types */ - -/* Version */ -#define EV_NONE 0 /* Invalid */ -#define EV_CURRENT 1 /* Current */ -#define EV_NUM 2 /* number of versions */ - -/* Special Section Indexes */ -#define SHN_UNDEF 0 /* undefined */ -#define SHN_LORESERVE 0xff00 /* lower bounds of reserved indexes */ -#define SHN_LOPROC 0xff00 /* reserved range for processor */ -#define SHN_HIPROC 0xff1f /* specific section indexes */ -#define SHN_LOOS 0xff20 /* reserved range for operating */ -#define SHN_HIOS 0xff3f /* specific semantics */ -#define SHN_ABS 0xfff1 /* absolute value */ -#define SHN_COMMON 0xfff2 /* common symbol */ -#define SHN_XINDEX 0xffff /* Index is an extra table */ -#define SHN_HIRESERVE 0xffff /* upper bounds of reserved indexes */ - -/* sh_type */ -#define SHT_NULL 0 /* inactive */ -#define SHT_PROGBITS 1 /* program defined information */ -#define SHT_SYMTAB 2 /* symbol table section */ -#define SHT_STRTAB 3 /* string table section */ -#define SHT_RELA 4 /* relocation section with addends*/ -#define SHT_HASH 5 /* symbol hash table section */ -#define SHT_DYNAMIC 6 /* dynamic section */ -#define SHT_NOTE 7 /* note section */ -#define SHT_NOBITS 8 /* no space section */ -#define SHT_REL 9 /* relation section without addends */ -#define SHT_SHLIB 10 /* reserved - purpose unknown */ -#define SHT_DYNSYM 11 /* dynamic symbol table section */ -#define SHT_INIT_ARRAY 14 /* Array of constructors */ -#define SHT_FINI_ARRAY 15 /* Array of destructors */ -#define SHT_PREINIT_ARRAY 16 /* Array of pre-constructors */ -#define SHT_GROUP 17 /* Section group */ -#define SHT_SYMTAB_SHNDX 18 /* Extended section indeces */ -#define SHT_NUM 19 /* number of section types */ -#define SHT_LOOS 0x60000000 /* Start OS-specific */ -#define SHT_HIOS 0x6fffffff /* End OS-specific */ -#define SHT_LOPROC 0x70000000 /* reserved range for processor */ -#define SHT_HIPROC 0x7fffffff /* specific section header types */ -#define SHT_LOUSER 0x80000000 /* reserved range for application */ -#define SHT_HIUSER 0xffffffff /* specific indexes */ - -/* Section names */ -#define ELF_BSS ".bss" /* uninitialized data */ -#define ELF_COMMENT ".comment" /* version control information */ -#define ELF_DATA ".data" /* initialized data */ -#define ELF_DATA1 ".data1" /* initialized data */ -#define ELF_DEBUG ".debug" /* debug */ -#define ELF_DYNAMIC ".dynamic" /* dynamic linking information */ -#define ELF_DYNSTR ".dynstr" /* dynamic string table */ -#define ELF_DYNSYM ".dynsym" /* dynamic symbol table */ -#define ELF_FINI ".fini" /* termination code */ -#define ELF_FINI_ARRAY ".fini_array" /* Array of destructors */ -#define ELF_GOT ".got" /* global offset table */ -#define ELF_HASH ".hash" /* symbol hash table */ -#define ELF_INIT ".init" /* initialization code */ -#define ELF_INIT_ARRAY ".init_array" /* Array of constuctors */ -#define ELF_INTERP ".interp" /* Pathname of program interpreter */ -#define ELF_LINE ".line" /* Symbolic line numnber information */ -#define ELF_NOTE ".note" /* Contains note section */ -#define ELF_PLT ".plt" /* Procedure linkage table */ -#define ELF_PREINIT_ARRAY ".preinit_array" /* Array of pre-constructors */ -#define ELF_REL_DATA ".rel.data" /* relocation data */ -#define ELF_REL_FINI ".rel.fini" /* relocation termination code */ -#define ELF_REL_INIT ".rel.init" /* relocation initialization code */ -#define ELF_REL_DYN ".rel.dyn" /* relocaltion dynamic link info */ -#define ELF_REL_RODATA ".rel.rodata" /* relocation read-only data */ -#define ELF_REL_TEXT ".rel.text" /* relocation code */ -#define ELF_RODATA ".rodata" /* read-only data */ -#define ELF_RODATA1 ".rodata1" /* read-only data */ -#define ELF_SHSTRTAB ".shstrtab" /* section header string table */ -#define ELF_STRTAB ".strtab" /* string table */ -#define ELF_SYMTAB ".symtab" /* symbol table */ -#define ELF_SYMTAB_SHNDX ".symtab_shndx" /* symbol table section index */ -#define ELF_TBSS ".tbss" /* thread local uninit data */ -#define ELF_TDATA ".tdata" /* thread local init data */ -#define ELF_TDATA1 ".tdata1" /* thread local init data */ -#define ELF_TEXT ".text" /* code */ - -/* Section Attribute Flags - sh_flags */ -#define SHF_WRITE 0x1 /* Writable */ -#define SHF_ALLOC 0x2 /* occupies memory */ -#define SHF_EXECINSTR 0x4 /* executable */ -#define SHF_MERGE 0x10 /* Might be merged */ -#define SHF_STRINGS 0x20 /* Contains NULL terminated strings */ -#define SHF_INFO_LINK 0x40 /* sh_info contains SHT index */ -#define SHF_LINK_ORDER 0x80 /* Preserve order after combining*/ -#define SHF_OS_NONCONFORMING 0x100 /* Non-standard OS specific handling */ -#define SHF_GROUP 0x200 /* Member of section group */ -#define SHF_TLS 0x400 /* Thread local storage */ -#define SHF_MASKOS 0x0ff00000 /* OS specific */ -#define SHF_MASKPROC 0xf0000000 /* reserved bits for processor */ -/* specific section attributes */ - -/* Section Group Flags */ -#define GRP_COMDAT 0x1 /* COMDAT group */ -#define GRP_MASKOS 0x0ff00000 /* Mask OS specific flags */ -#define GRP_MASKPROC 0xf0000000 /* Mask processor specific flags */ - -/* Symbol table index */ -#define STN_UNDEF 0 /* undefined */ - -/* Extract symbol info - st_info */ -#define ELF32_ST_BIND(x) ((x) >> 4) -#define ELF32_ST_TYPE(x) (((unsigned int)x) & 0xf) -#define ELF32_ST_INFO(b, t) (((b) << 4) + ((t)&0xf)) -#define ELF32_ST_VISIBILITY(x) ((x)&0x3) - -/* Symbol Binding - ELF32_ST_BIND - st_info */ -#define STB_LOCAL 0 /* Local symbol */ -#define STB_GLOBAL 1 /* Global symbol */ -#define STB_WEAK 2 /* like global - lower precedence */ -#define STB_NUM 3 /* number of symbol bindings */ -#define STB_LOOS 10 /* reserved range for operating */ -#define STB_HIOS 12 /* system specific symbol bindings */ -#define STB_LOPROC 13 /* reserved range for processor */ -#define STB_HIPROC 15 /* specific symbol bindings */ - -/* Symbol type - ELF32_ST_TYPE - st_info */ -#define STT_NOTYPE 0 /* not specified */ -#define STT_OBJECT 1 /* data object */ -#define STT_FUNC 2 /* function */ -#define STT_SECTION 3 /* section */ -#define STT_FILE 4 /* file */ -#define STT_NUM 5 /* number of symbol types */ -#define STT_TLS 6 /* Thread local storage symbol */ -#define STT_LOOS 10 /* reserved range for operating */ -#define STT_HIOS 12 /* system specific symbol types */ -#define STT_LOPROC 13 /* reserved range for processor */ -#define STT_HIPROC 15 /* specific symbol types */ - -/* Symbol visibility - ELF32_ST_VISIBILITY - st_other */ -#define STV_DEFAULT 0 /* Normal visibility rules */ -#define STV_INTERNAL 1 /* Processor specific hidden class */ -#define STV_HIDDEN 2 /* Symbol unavailable in other mods */ -#define STV_PROTECTED 3 /* Not preemptible, not exported */ - -/* Extract relocation info - r_info */ -#define ELF32_R_SYM(i) ((i) >> 8) -#define ELF32_R_TYPE(i) ((unsigned char)(i)) -#define ELF32_R_INFO(s, t) (((s) << 8) + (unsigned char)(t)) - -/* Segment types - p_type */ -#define PT_NULL 0 /* unused */ -#define PT_LOAD 1 /* loadable segment */ -#define PT_DYNAMIC 2 /* dynamic linking section */ -#define PT_INTERP 3 /* the RTLD */ -#define PT_NOTE 4 /* auxiliary information */ -#define PT_SHLIB 5 /* reserved - purpose undefined */ -#define PT_PHDR 6 /* program header */ -#define PT_TLS 7 /* Thread local storage template */ -#define PT_NUM 8 /* Number of segment types */ -#define PT_LOOS 0x60000000 /* reserved range for operating */ -#define PT_HIOS 0x6fffffff /* system specific segment types */ -#define PT_LOPROC 0x70000000 /* reserved range for processor */ -#define PT_HIPROC 0x7fffffff /* specific segment types */ - -/* Segment flags - p_flags */ -#define PF_X 0x1 /* Executable */ -#define PF_W 0x2 /* Writable */ -#define PF_R 0x4 /* Readable */ -#define PF_MASKOS 0x0ff00000 /* OS specific segment flags */ -#define PF_MASKPROC 0xf0000000 /* reserved bits for processor */ -/* specific segment flags */ - -#define ELF64_R_SYM(i) ((i) >> 32) -#define ELF64_R_TYPE(i) ((i)&0xffffffff) - -/* Dynamic Array Tags - d_tag */ -#define DT_NULL 0 /* marks end of _DYNAMIC array */ -#define DT_NEEDED 1 /* string table offset of needed lib */ -#define DT_PLTRELSZ 2 /* size of relocation entries in PLT */ -#define DT_PLTGOT 3 /* address PLT/GOT */ -#define DT_HASH 4 /* address of symbol hash table */ -#define DT_STRTAB 5 /* address of string table */ -#define DT_SYMTAB 6 /* address of symbol table */ -#define DT_RELA 7 /* address of relocation table */ -#define DT_RELASZ 8 /* size of relocation table */ -#define DT_RELAENT 9 /* size of relocation entry */ -#define DT_STRSZ 10 /* size of string table */ -#define DT_SYMENT 11 /* size of symbol table entry */ -#define DT_INIT 12 /* address of initialization func */ -#define DT_FINI 13 /* address of termination function */ -#define DT_SONAME 14 /* string table offset of shared obj */ -#define DT_RPATH 15 /* string table offset of library \ -search path */ -#define DT_SYMBOLIC 16 /* start sym search in shared obj */ -#define DT_REL 17 /* address of rel. tbl. w addends */ -#define DT_RELSZ 18 /* size of DT_REL relocation table */ -#define DT_RELENT 19 /* size of DT_REL relocation entry */ -#define DT_PLTREL 20 /* PLT referenced relocation entry */ -#define DT_DEBUG 21 /* bugger */ -#define DT_TEXTREL 22 /* Allow rel. mod. to unwritable seg */ -#define DT_JMPREL 23 /* add. of PLT's relocation entries */ -#define DT_BIND_NOW 24 /* Process relocations of object */ -#define DT_INIT_ARRAY 25 /* Array with addresses of init fct */ -#define DT_FINI_ARRAY 26 /* Array with addresses of fini fct */ -#define DT_INIT_ARRAYSZ 27 /* Size in bytes of DT_INIT_ARRAY */ -#define DT_FINI_ARRAYSZ 28 /* Size in bytes of DT_FINI_ARRAY */ -#define DT_RUNPATH 29 /* Library search path */ -#define DT_FLAGS 30 /* Flags for the object being loaded */ -#define DT_ENCODING 32 /* Start of encoded range */ -#define DT_PREINIT_ARRAY 32 /* Array with addresses of preinit fct*/ -#define DT_PREINIT_ARRAYSZ 33 /* size in bytes of DT_PREINIT_ARRAY */ -#define DT_NUM 34 /* Number used */ -#define DT_LOOS 0x60000000 /* reserved range for OS */ -#define DT_HIOS 0x6fffffff /* specific dynamic array tags */ -#define DT_LOPROC 0x70000000 /* reserved range for processor */ -#define DT_HIPROC 0x7fffffff /* specific dynamic array tags */ - -/* Dynamic Tag Flags - d_un.d_val */ -#define DF_ORIGIN 0x01 /* Object may use DF_ORIGIN */ -#define DF_SYMBOLIC 0x02 /* Symbol resolutions starts here */ -#define DF_TEXTREL 0x04 /* Object contains text relocations */ -#define DF_BIND_NOW 0x08 /* No lazy binding for this object */ -#define DF_STATIC_TLS 0x10 /* Static thread local storage */ - -/* Standard ELF hashing function */ -unsigned long elf_hash(const unsigned char *name); - -#define ELF_TARG_VER 1 /* The ver for which this code is intended */ - -/* ELF register definitions */ -#define R_386_NONE 0 -#define R_386_32 1 -#define R_386_PC32 2 -#define R_386_GOT32 3 -#define R_386_PLT32 4 -#define R_386_COPY 5 -#define R_386_GLOB_DAT 6 -#define R_386_JMP_SLOT 7 -#define R_386_RELATIVE 8 -#define R_386_GOTOFF 9 -#define R_386_GOTPC 10 -#define R_386_NUM 11 - -/* x86-64 relocation types */ -#define R_X86_64_NONE 0 /* No reloc */ -#define R_X86_64_64 1 /* Direct 64 bit */ -#define R_X86_64_PC32 2 /* PC relative 32 bit signed */ -#define R_X86_64_GOT32 3 /* 32 bit GOT entry */ -#define R_X86_64_PLT32 4 /* 32 bit PLT address */ -#define R_X86_64_COPY 5 /* Copy symbol at runtime */ -#define R_X86_64_GLOB_DAT 6 /* Create GOT entry */ -#define R_X86_64_JUMP_SLOT 7 /* Create PLT entry */ -#define R_X86_64_RELATIVE 8 /* Adjust by program base */ -/* 32 bit signed pc relative offset to GOT */ -#define R_X86_64_GOTPCREL 9 -#define R_X86_64_32 10 /* Direct 32 bit zero extended */ -#define R_X86_64_32S 11 /* Direct 32 bit sign extended */ -#define R_X86_64_16 12 /* Direct 16 bit zero extended */ -#define R_X86_64_PC16 13 /* 16 bit sign extended pc relative */ -#define R_X86_64_8 14 /* Direct 8 bit sign extended */ -#define R_X86_64_PC8 15 /* 8 bit sign extended pc relative */ - -#define R_X86_64_NUM 16 - -/* - * XXX - PowerPC defines really don't belong in here, - * but we'll put them in for simplicity. - */ - -/* Values for Elf32/64_Ehdr.e_flags */ -#define EF_PPC_EMB 0x80000000 /* PowerPC embedded flag */ - -#define EF_PPC64_ELFV1_ABI 0x00000001 -#define EF_PPC64_ELFV2_ABI 0x00000002 - -/* Cygnus local bits below */ -#define EF_PPC_RELOCATABLE 0x00010000 /* PowerPC -mrelocatable flag*/ -#define EF_PPC_RELOCATABLE_LIB 0x00008000 /* PowerPC -mrelocatable-lib \ -flag */ - -/* PowerPC relocations defined by the ABIs */ -#define R_PPC_NONE 0 -#define R_PPC_ADDR32 1 /* 32bit absolute address */ -#define R_PPC_ADDR24 2 /* 26bit address, 2 bits ignored */ -#define R_PPC_ADDR16 3 /* 16bit absolute address */ -#define R_PPC_ADDR16_LO 4 /* lower 16bit of absolute address */ -#define R_PPC_ADDR16_HI 5 /* high 16bit of absolute address */ -#define R_PPC_ADDR16_HA 6 /* adjusted high 16bit */ -#define R_PPC_ADDR14 7 /* 16bit address, 2 bits ignored */ -#define R_PPC_ADDR14_BRTAKEN 8 -#define R_PPC_ADDR14_BRNTAKEN 9 -#define R_PPC_REL24 10 /* PC relative 26 bit */ -#define R_PPC_REL14 11 /* PC relative 16 bit */ -#define R_PPC_REL14_BRTAKEN 12 -#define R_PPC_REL14_BRNTAKEN 13 -#define R_PPC_GOT16 14 -#define R_PPC_GOT16_LO 15 -#define R_PPC_GOT16_HI 16 -#define R_PPC_GOT16_HA 17 -#define R_PPC_PLTREL24 18 -#define R_PPC_COPY 19 -#define R_PPC_GLOB_DAT 20 -#define R_PPC_JMP_SLOT 21 -#define R_PPC_RELATIVE 22 -#define R_PPC_LOCAL24PC 23 -#define R_PPC_UADDR32 24 -#define R_PPC_UADDR16 25 -#define R_PPC_REL32 26 -#define R_PPC_PLT32 27 -#define R_PPC_PLTREL32 28 -#define R_PPC_PLT16_LO 29 -#define R_PPC_PLT16_HI 30 -#define R_PPC_PLT16_HA 31 -#define R_PPC_SDAREL16 32 -#define R_PPC_SECTOFF 33 -#define R_PPC_SECTOFF_LO 34 -#define R_PPC_SECTOFF_HI 35 -#define R_PPC_SECTOFF_HA 36 -/* Keep this the last entry */ -#define R_PPC_NUM 37 - -/* - * The remaining relocs are from the Embedded ELF ABI, and are not - * in the SVR4 ELF ABI. - */ -#define R_PPC_EMB_NADDR32 101 -#define R_PPC_EMB_NADDR16 102 -#define R_PPC_EMB_NADDR16_LO 103 -#define R_PPC_EMB_NADDR16_HI 104 -#define R_PPC_EMB_NADDR16_HA 105 -#define R_PPC_EMB_SDAI16 106 -#define R_PPC_EMB_SDA2I16 107 -#define R_PPC_EMB_SDA2REL 108 -#define R_PPC_EMB_SDA21 109 /* 16 bit offset in SDA */ -#define R_PPC_EMB_MRKREF 110 -#define R_PPC_EMB_RELSEC16 111 -#define R_PPC_EMB_RELST_LO 112 -#define R_PPC_EMB_RELST_HI 113 -#define R_PPC_EMB_RELST_HA 114 -#define R_PPC_EMB_BIT_FLD 115 -#define R_PPC_EMB_RELSDA 116 /* 16 bit relative offset in SDA */ - -/* Diab tool relocations */ -#define R_PPC_DIAB_SDA21_LO 180 /* like EMB_SDA21, but lower 16 bit */ -#define R_PPC_DIAB_SDA21_HI 181 /* like EMB_SDA21, but high 16 bit */ -#define R_PPC_DIAB_SDA21_HA 182 /* like EMB_SDA21, adjusted high 16 */ -#define R_PPC_DIAB_RELSDA_LO 183 /* like EMB_RELSDA, but lower 16 bit */ -#define R_PPC_DIAB_RELSDA_HI 184 /* like EMB_RELSDA, but high 16 bit */ -#define R_PPC_DIAB_RELSDA_HA 185 /* like EMB_RELSDA, adjusted high 16 */ - -/* - * This is a phony reloc to handle any old fashioned TOC16 references - * that may still be in object files. - */ -#define R_PPC_TOC16 255 - -/* ARM relocs */ -#define R_ARM_NONE 0 /* No reloc */ -#define R_ARM_RELATIVE 23 /* Adjust by program base */ - -/* AArch64 relocs */ -#define R_AARCH64_NONE 0 /* No relocation */ -#define R_AARCH64_RELATIVE 1027 /* Adjust by program base */ - -/* RISC-V relocations */ -#define R_RISCV_32 1 -#define R_RISCV_64 2 -#define R_RISCV_RELATIVE 3 - -/* - * A very simple ELF64 loader, assumes the image is valid, returns the - * entry point address. - * - * Note if U-Boot is 32-bit, the loader assumes the to segment's - * physical address and size is within the lower 32-bit address space. - */ -static unsigned long ElfLoadElf64ImagePhdr(unsigned long addr) -{ - Elf64_Ehdr *ehdr; /* Elf header structure pointer */ - Elf64_Phdr *phdr; /* Program header structure pointer */ - - int i; - - ehdr = (Elf64_Ehdr *)addr; - phdr = (Elf64_Phdr *)(addr + (unsigned long)ehdr->e_phoff); - - /* Load each program header */ - for (i = 0; i < ehdr->e_phnum; ++i) - { - void *dst = (void *)(unsigned long)phdr->p_paddr; - void *src = (void *)addr + phdr->p_offset; - - f_printk("Loading phdr %i to %p (%lu bytes) \r\n", - i, dst, (unsigned long)phdr->p_filesz); - if (phdr->p_filesz) - { - memcpy(dst, src, phdr->p_filesz); - } - - if (phdr->p_filesz != phdr->p_memsz) - { - memset(dst + phdr->p_filesz, 0x00, - phdr->p_memsz - phdr->p_filesz); - } - - FCacheDCacheFlushRange((uintptr)dst, phdr->p_memsz); - ++phdr; - } - - if (ehdr->e_machine == EM_PPC64 && (ehdr->e_flags & EF_PPC64_ELFV1_ABI)) - { - /* - * For the 64-bit PowerPC ELF V1 ABI, e_entry is a function - * descriptor pointer with the first double word being the - * address of the entry point of the function. - */ - uintptr_t addr = ehdr->e_entry; - - return *(Elf64_Addr *)addr; - } - - return ehdr->e_entry; -} - - - -static unsigned long ElfLoadElf64ImageShdr(unsigned long addr) -{ - Elf64_Ehdr *ehdr; /* Elf header structure pointer */ - Elf64_Shdr *shdr; /* Section header structure pointer */ - unsigned char *strtab = 0; /* String table pointer */ - unsigned char *image; /* Binary image pointer */ - int i; /* Loop counter */ - - ehdr = (Elf64_Ehdr *)addr; - - /* Find the section header string table for output info */ - shdr = (Elf64_Shdr *)(addr + (unsigned long)ehdr->e_shoff + - (ehdr->e_shstrndx * sizeof(Elf64_Shdr))); - - if (shdr->sh_type == SHT_STRTAB) - { - strtab = (unsigned char *)(addr + (unsigned long)shdr->sh_offset); - } - - /* Load each appropriate section */ - for (i = 0; i < ehdr->e_shnum; ++i) - { - shdr = (Elf64_Shdr *)(addr + (unsigned long)ehdr->e_shoff + - (i * sizeof(Elf64_Shdr))); - - if (!(shdr->sh_flags & SHF_ALLOC) || - shdr->sh_addr == 0 || shdr->sh_size == 0) - { - continue; - } - - if (strtab) - { - f_printk("%sing %s @ 0x%08lx (%ld bytes) \r\n", - (shdr->sh_type == SHT_NOBITS) ? "Clear" : "Load", - &strtab[shdr->sh_name], - (unsigned long)shdr->sh_addr, - (long)shdr->sh_size); - } - - if (shdr->sh_type == SHT_NOBITS) - { - memset((void *)(uintptr)shdr->sh_addr, 0, - shdr->sh_size); - } - else - { - image = (unsigned char *)addr + (unsigned long)shdr->sh_offset; - memcpy((void *)(uintptr)shdr->sh_addr, - (const void *)image, shdr->sh_size); - } - FCacheDCacheFlushRange((uintptr)shdr->sh_addr, shdr->sh_size); - } - - if (ehdr->e_machine == EM_PPC64 && (ehdr->e_flags & - EF_PPC64_ELFV1_ABI)) - { - /* - * For the 64-bit PowerPC ELF V1 ABI, e_entry is a function - * descriptor pointer with the first double word being the - * address of the entry point of the function. - */ - uintptr addr = ehdr->e_entry; - - return *(Elf64_Addr *)addr; - } - - return ehdr->e_entry; -} - -unsigned long ElfLoadElfImagePhdr(unsigned long addr) -{ - Elf32_Ehdr *ehdr; /* Elf header structure pointer */ - Elf32_Phdr *phdr; /* Program header structure pointer */ - int i; - - ehdr = (Elf32_Ehdr *)addr; - if (ehdr->e_ident[EI_CLASS] == ELFCLASS64) - { - return ElfLoadElf64ImagePhdr(addr); - } - - phdr = (Elf32_Phdr *)(addr + ehdr->e_phoff); - - /* Load each program header */ - for (i = 0; i < ehdr->e_phnum; ++i) - { - void *dst = (void *)(uintptr)phdr->p_paddr; - void *src = (void *)addr + phdr->p_offset; - - f_printk("Loading phdr %i to %p (%i bytes)", - i, dst, phdr->p_filesz); - if (phdr->p_filesz) - { - memcpy(dst, src, phdr->p_filesz); - } - if (phdr->p_filesz != phdr->p_memsz) - { - memset(dst + phdr->p_filesz, 0x00, - phdr->p_memsz - phdr->p_filesz); - } - - FCacheDCacheFlushRange((uintptr)dst, phdr->p_memsz); - ++phdr; - } - - return ehdr->e_entry; -} - -unsigned long ElfLoadElfImageShdr(unsigned long addr) -{ - Elf32_Ehdr *ehdr; /* Elf header structure pointer */ - Elf32_Shdr *shdr; /* Section header structure pointer */ - unsigned char *strtab = 0; /* String table pointer */ - unsigned char *image; /* Binary image pointer */ - int i; /* Loop counter */ - - ehdr = (Elf32_Ehdr *)addr; - if (ehdr->e_ident[EI_CLASS] == ELFCLASS64) - { - return ElfLoadElf64ImageShdr(addr); - } - - /* Find the section header string table for output info */ - shdr = (Elf32_Shdr *)(addr + ehdr->e_shoff + - (ehdr->e_shstrndx * sizeof(Elf32_Shdr))); - - if (shdr->sh_type == SHT_STRTAB) - { - strtab = (unsigned char *)(addr + shdr->sh_offset); - } - - /* Load each appropriate section */ - for (i = 0; i < ehdr->e_shnum; ++i) - { - shdr = (Elf32_Shdr *)(addr + ehdr->e_shoff + - (i * sizeof(Elf32_Shdr))); - - if (!(shdr->sh_flags & SHF_ALLOC) || - shdr->sh_addr == 0 || shdr->sh_size == 0) - { - continue; - } - - if (strtab) - { - f_printk("%sing %s @ 0x%08lx (%ld bytes)", - (shdr->sh_type == SHT_NOBITS) ? "Clear" : "Load", - &strtab[shdr->sh_name], - (unsigned long)shdr->sh_addr, - (long)shdr->sh_size); - } - - if (shdr->sh_type == SHT_NOBITS) - { - memset((void *)(uintptr)shdr->sh_addr, 0, - shdr->sh_size); - } - else - { - image = (unsigned char *)addr + shdr->sh_offset; - memcpy((void *)(uintptr)shdr->sh_addr, - (const void *)image, shdr->sh_size); - } - - FCacheDCacheFlushRange((uintptr)shdr->sh_addr, shdr->sh_size); - } - - return ehdr->e_entry; -} - -/* - * Determine if a valid ELF image exists at the given memory location. - * First look at the ELF header magic field, then make sure that it is - * executable. - */ -int ElfIsImageValid(unsigned long addr) -{ - Elf32_Ehdr *ehdr; /* Elf header structure pointer */ - - ehdr = (Elf32_Ehdr *)addr; - - if (!IS_ELF(*ehdr)) - { - return 0; - } - - if (ehdr->e_type != ET_EXEC) - { - return 0; - } - - return 1; -} - -/* Allow ports to override the default behavior */ -unsigned long ElfExecBootElf(unsigned long (*entry)(int, char *const[]), - int argc, char *const argv[]) -{ - unsigned long ret; - - /* - * pass address parameter as argv[0] (aka command name), - * and all remaining args - */ - ret = entry(argc, argv); - - return ret; -} - - - - -/** - * @name: Elf64GetTargetSection - * @msg: 从ELF文件中获取指定名称的section的数据 - * @return: FError,表示函数执行结果的错误码 - * @note: - * @param {Elf64_Ehdr} *ehdr,指向ELF文件头的指针 - * @param {char} *section_name,指定的section名称 - * @param {u8} *data_get,用于存储获取到的section数据的缓冲区指针 - * @param {u32} *length_p,用于存储获取到的section数据长度的指针 - */ -static FError Elf64GetTargetSection(unsigned long addr,char *section_name ,u8 *data_get,u32 *length_p) -{ - Elf64_Ehdr *ehdr; /* Elf header structure pointer */ - Elf64_Shdr *shdr; /* Section header structure pointer */ - unsigned char *strtab = 0; /* String table pointer */ - unsigned char *image; /* Binary image pointer */ - int i; /* Loop counter */ - - ehdr = (Elf64_Ehdr *)addr; - /* Find the section header string table for output info */ - shdr = (Elf64_Shdr *)(addr + (unsigned long)ehdr->e_shoff + - (ehdr->e_shstrndx * sizeof(Elf64_Shdr))); - - if (shdr->sh_type == SHT_STRTAB) - { - strtab = (unsigned char *)(addr + (unsigned long)shdr->sh_offset); - } - else - { - f_printk("There is no string table \r\n"); - return FELF_SECTION_NO_STRTAB; - } - - /* Load each appropriate section */ - for (i = 0; i < ehdr->e_shnum; ++i) - { - shdr = (Elf64_Shdr *)(addr + (unsigned long)ehdr->e_shoff + - (i * sizeof(Elf64_Shdr))); - - if (!(shdr->sh_flags & SHF_ALLOC) || - shdr->sh_addr == 0 || shdr->sh_size == 0) - { - continue; - } - - if(strcmp(section_name, &strtab[shdr->sh_name]) == 0) - { - f_printk("%sing %s @ 0x%08lx (%ld bytes) \r\n", - (shdr->sh_type == SHT_NOBITS) ? "Clear" : "Load", - &strtab[shdr->sh_name], - (unsigned long)shdr->sh_addr, - (long)shdr->sh_size); - - if(shdr->sh_type == SHT_NOBITS) - { - f_printk("There is no space section \r\n"); - return FELF_SECTION_NO_SPACE; - } - printf("*length_p is %d \r\n",*length_p); - if (shdr->sh_size < *length_p) - { - *length_p = shdr->sh_size; - } - - image = (unsigned char *)addr + (unsigned long)shdr->sh_offset; - memcpy((void *)(uintptr)data_get, - (const void *)image, *length_p); - - return FELF_SUCCESS; - } - - } - - f_printk("%s: No %s section exists in this elf file \r\n",__func__,section_name); - return FELF_SECTION_NOT_FIT; -} - - - -/** - * @name: - * @msg: - * @return {*} - * @note: - * @param {Elf32_Shdr} *ehdr - * @param {char} *section_name - * @param {u8} *data_get - * @param {u32} *length_p - */ -static FError Elf32GetTargetSection(unsigned long addr,char *section_name ,u8 *data_get,u32 *length_p) -{ - - Elf32_Ehdr *ehdr; /* Elf header structure pointer */ - Elf32_Shdr *shdr; /* Section header structure pointer */ - unsigned char *strtab = 0; /* String table pointer */ - unsigned char *image; /* Binary image pointer */ - int i; /* Loop counter */ - - ehdr = (Elf32_Ehdr *)addr; - /* Find the section header string table for output info */ - shdr = (Elf32_Shdr *)(addr + ehdr->e_shoff + - (ehdr->e_shstrndx * sizeof(Elf32_Shdr))); - - if (shdr->sh_type == SHT_STRTAB) - { - strtab = (unsigned char *)(addr + shdr->sh_offset); - } - else - { - f_printk("There is no string table \r\n"); - return FELF_SECTION_NO_STRTAB; - } - - /* Load each appropriate section */ - for (i = 0; i < ehdr->e_shnum; ++i) - { - shdr = (Elf32_Shdr *)(addr + ehdr->e_shoff + - (i * sizeof(Elf32_Shdr))); - - if (!(shdr->sh_flags & SHF_ALLOC) || - shdr->sh_addr == 0 || shdr->sh_size == 0) - { - continue; - } - - if (strcmp(section_name, &strtab[shdr->sh_name]) == 0) - { - printf("%sing %s @ 0x%08lx (%ld bytes)", - (shdr->sh_type == SHT_NOBITS) ? "Clear" : "Load", - &strtab[shdr->sh_name], - (unsigned long)shdr->sh_addr, - (long)shdr->sh_size); - - printf("copy num is \r\n"); - printf("*length_p is %d \r\n",*length_p); - if(shdr->sh_size < *length_p) - { - *length_p = shdr->sh_size; - } - - - image = (unsigned char *)addr + (unsigned long)shdr->sh_offset; - memcpy((void *)(uintptr)data_get, - (const void *)image, *length_p); - - return FELF_SUCCESS; - - } - } - - f_printk("%s: No %s section exists in this elf file \r\n",__func__,section_name); - return FELF_SECTION_NOT_FIT; -} - - - - -/** - * @name: ElfGetSection - * @msg: 获取 ELF 文件中指定节的内容 - * @return {FError} 返回错误码,表示获取节内容的结果 - * @note: 函数将根据 ELF 文件的类型(32位或64位)调用相应的函数来获取指定节的内容。 - * @param {unsigned long} addr ELF 文件的基地址 - * @param {char*} section_name 节的名称 - * @param {u8*} data_get 用于存储节内容的缓冲区 - * @param {u32*} length_p 存储获取到的节内容的长度 - */ -FError ElfGetSection(unsigned long addr, char *section_name, u8 *data_get, u32 *length_p) -{ - Elf32_Ehdr *ehdr; /* ELF 文件头指针 */ - Elf32_Shdr *shdr; /* 节头指针 */ - unsigned char *strtab = 0; /* 字符串表指针 */ - unsigned char *image; /* 二进制映像指针 */ - int i; /* 循环计数器 */ - - /* 检查 ELF 文件的类型 */ - ehdr = (Elf32_Ehdr *)addr; - if (ehdr->e_ident[EI_CLASS] == ELFCLASS64) - { - /* 如果是64位 ELF,则调用 Elf64GetTargetSection 函数获取指定节的内容 */ - return Elf64GetTargetSection(addr, section_name, data_get, length_p); - } - - /* 如果是32位 ELF,则调用 Elf32GetTargetSection 函数获取指定节的内容 */ - if (ehdr->e_ident[EI_CLASS] == ELFCLASS32) - { - return Elf32GetTargetSection(addr, section_name, data_get, length_p); - } - - /* 若未匹配到有效的 ELF 类型,则返回 FELF_SECTION_GET_ERROR 错误码 */ - return FELF_SECTION_GET_ERROR; -} - diff --git a/bsp/phytium/libraries/standalone/common/felf.h b/bsp/phytium/libraries/standalone/common/felf.h deleted file mode 100644 index 9fd51befeb..0000000000 --- a/bsp/phytium/libraries/standalone/common/felf.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: felf.h - * Date: 2021-08-31 11:16:49 - * LastEditTime: 2022-02-17 18:05:22 - * Description:  This file is for showing elf api. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/10/27 rename file name - */ - -#ifndef FELF_H -#define FELF_H - -#include "ftypes.h" -#include "ferror_code.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -#define FELF_SUCCESS FT_SUCCESS /* SUCCESS */ -#define FELF_SECTION_NO_STRTAB FT_MAKE_ERRCODE(ErrorModGeneral, ErrElf, 1) /* There is no string table */ -#define FELF_SECTION_NO_SPACE FT_MAKE_ERRCODE(ErrorModGeneral, ErrElf, 2) /* There is no space section */ -#define FELF_SECTION_NOT_FIT FT_MAKE_ERRCODE(ErrorModGeneral, ErrElf, 3) /* No corresponding section was matched */ -#define FELF_SECTION_GET_ERROR FT_MAKE_ERRCODE(ErrorModGeneral, ErrElf, 3) - -unsigned long ElfLoadElfImagePhdr(unsigned long addr); -unsigned long ElfLoadElfImageShdr(unsigned long addr); -int ElfIsImageValid(unsigned long addr); -unsigned long ElfExecBootElf(unsigned long (*entry)(int, char *const[]), - int argc, char *const argv[]); - -FError ElfGetSection(unsigned long addr, char *section_name, u8 *data_get, u32 *length_p); - -#ifdef __cplusplus -} -#endif - -#endif // ! \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/common/ferror_code.h b/bsp/phytium/libraries/standalone/common/ferror_code.h deleted file mode 100644 index be2012fc03..0000000000 --- a/bsp/phytium/libraries/standalone/common/ferror_code.h +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: ferror_code.h - * Date: 2021-04-07 09:53:30 - * LastEditTime: 2022-02-17 18:05:27 - * Description:  This file is for error code functions - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - */ -#ifndef FERROR_CODE_H -#define FERROR_CODE_H - -#include "ftypes.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -typedef u32 FError; - -#define FT_SUCCESS 0 - -/* 系统错误码模块定义 */ -typedef enum -{ - ErrorModGeneral = 0, - ErrModBsp, - ErrModAssert, - ErrModPort, - StatusModBsp, - ErrModMaxMask = 255, - -} FtErrorCodeModuleMask; - -/* COMMON组件的错误码子模块定义 */ -typedef enum -{ - ErrCommGeneral = 0, - ErrCommMemp, - ErrInterrupt, - ErrElf, -} FtErrCodeCommMask; - -/* BSP模块的错误子模块定义 */ -typedef enum -{ - ErrBspGeneral = 0, - ErrBspClk, - ErrBspScmi, - ErrBspRtc, - ErrBspTimer, - ErrBspUart, - ErrBspGpio, - ErrBspSpi, - ErrBspEth, - ErrBspCan, - ErrPcie, - ErrBspQSpi, - ErrBspMio, - ErrBspI2c, - ErrBspMmc, - ErrBspWdt, - ErrGic, - ErrGdma, - ErrNand, - ErrIoMux, - ErrBspSata, - ErrUsb, - ErrEthPhy, - ErrDdma, - ErrBspAdc, - ErrBspPwm, - ErrSema, - ErrBspMEDIA, - ErrBspMhu, - ErrBspIOPad, - - ErrBspModMaxMask = 255 -} FtErrCodeBspMask; - -#define FT_ERRCODE_SYS_MODULE_OFFSET (u32)24 -#define FT_ERRCODE_SUB_MODULE_OFFSET (u32)16 - -#define FT_ERRCODE_SYS_MODULE_MASK ((u32)0xff << FT_ERRCODE_SYS_MODULE_OFFSET) /* bit 24 .. 31 */ -#define FT_ERRCODE_SUB_MODULE_MASK ((u32)0xff << FT_ERRCODE_SUB_MODULE_OFFSET) /* bit 16 .. 23 */ -#define FT_ERRCODE_TAIL_VALUE_MASK ((u32)0xffff) /* bit 1 .. 15 */ - -/* Offset error code */ -#define FT_ERRCODE_OFFSET(code, offset, mask) \ - (((code) << (offset)) & (mask)) - -/* Assembly error code */ -#define FT_MAKE_ERRCODE(sys_mode, sub_mode, tail) \ - ((FT_ERRCODE_OFFSET((u32)sys_mode, FT_ERRCODE_SYS_MODULE_OFFSET, FT_ERRCODE_SYS_MODULE_MASK)) | \ - (FT_ERRCODE_OFFSET((u32)sub_mode, FT_ERRCODE_SUB_MODULE_OFFSET, FT_ERRCODE_SUB_MODULE_MASK)) | \ - ((u32)tail & FT_ERRCODE_TAIL_VALUE_MASK)) -#define FT_CODE_ERR FT_MAKE_ERRCODE - -#define ERR_SUCCESS FT_MAKE_ERRCODE(ErrorModGeneral, ErrBspGeneral, 0) /* 成功 */ -#define ERR_GENERAL FT_MAKE_ERRCODE(ErrorModGeneral, ErrBspGeneral, 1) /* 一般错误 */ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/bsp/phytium/libraries/standalone/common/fio.h b/bsp/phytium/libraries/standalone/common/fio.h deleted file mode 100644 index 66f60940ae..0000000000 --- a/bsp/phytium/libraries/standalone/common/fio.h +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fio.h - * Date: 2021-04-07 09:53:07 - * LastEditTime: 2022-02-18 08:24:01 - * Description:  This file is for general reigster io functions - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2021/04/07 init - * 1.1 zhugengyu 2022/02/18 add Phytium Public License 1.0 - */ - -#ifndef FIO_H -#define FIO_H - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include "ftypes.h" - -static _INLINE u8 FtIn8(uintptr addr) -{ - return *(volatile u8 *)addr; -} - -static _INLINE u16 FtIn16(uintptr addr) -{ - return *(volatile u16 *)addr; -} - -static _INLINE u32 FtIn32(uintptr addr) -{ - return *(volatile u32 *)addr; -} - -static _INLINE u64 FtIn64(uintptr addr) -{ - return *(volatile u64 *)addr; -} - -static _INLINE void FtOut8(uintptr addr, u8 value) -{ - volatile u8 *local_addr = (volatile u8 *)addr; - *local_addr = value; -} - -static _INLINE void FtOut16(uintptr addr, u16 value) -{ - volatile u16 *local_addr = (volatile u16 *)addr; - *local_addr = value; -} - -static _INLINE void FtOut32(uintptr addr, u32 value) -{ - volatile u32 *local_addr = (volatile u32 *)addr; - *local_addr = value; -} - -static _INLINE void FtOut64(uintptr addr, u64 value) -{ - volatile u64 *local_addr = (volatile u64 *)addr; - *local_addr = value; -} - -static _INLINE void FtSetBit32(uintptr addr, u32 value) -{ - volatile u32 last_value; - last_value = FtIn32(addr); - last_value |= value; - FtOut32(addr, last_value); -} - -static _INLINE void FtClearBit32(uintptr addr, u32 value) -{ - volatile u32 last_value; - last_value = FtIn32(addr); - last_value &= ~value; - FtOut32(addr, last_value); -} - -static _INLINE void FtToggleBit32(uintptr addr, u32 toggle_pos) -{ - volatile u32 value; - value = FtIn32(addr); - value ^= (1 << toggle_pos); - FtOut32(addr, value); -} - -static _INLINE u16 FtEndianSwap16(u16 data) -{ - return (u16)(((data & 0xFF00U) >> 8U) | ((data & 0x00FFU) << 8U)); -} -#define FT_WRITE32(_reg, _val) (*(volatile uint32_t *)&_reg = _val) -#define FT_READ32(_reg) (*(volatile uint32_t *)&_reg) - -#ifdef __cplusplus -} -#endif - -#endif // ! diff --git a/bsp/phytium/libraries/standalone/common/fkernel.h b/bsp/phytium/libraries/standalone/common/fkernel.h deleted file mode 100644 index b193920185..0000000000 --- a/bsp/phytium/libraries/standalone/common/fkernel.h +++ /dev/null @@ -1,344 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fkernel.h - * Date: 2022-02-10 14:53:41 - * LastEditTime: 2022-02-17 17:35:07 - * Description:  This file is for kernel definition functions - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2021/10/20 first release - * 1.1 zhugengyu 2022/2/17 add extra functionality - */ - - -#ifndef FKERNEL_H -#define FKERNEL_H - -#ifdef __cplusplus -extern "C" -{ -#endif - -#ifdef __ASSEMBLY__ - #define _AC(X, Y) X - #define _AT(T, X) X -#else - #define __AC(X, Y) (X##Y) - #define _AC(X, Y) __AC(X, Y) - #define _AT(T, X) ((T)(X)) -#endif - -#define _UL(x) (_AC(x, UL)) -#define _ULL(x) (_AC(x, ULL)) - -#define _BITUL(x) (_UL(1) << (x)) -#define _BITULL(x) (_ULL(1) << (x)) - -#define UL(x) (_UL(x)) -#define ULL(x) (_ULL(x)) - -#define min(x, y) ( \ -{ \ - typeof(x) _min1 = (x); \ - typeof(y) _min2 = (y); \ - (void)(&_min1 == &_min2); \ - _min1 < _min2 ? _min1 : _min2; \ -}) - -#define max(x, y) ( \ -{ \ - typeof(x) _max1 = (x); \ - typeof(y) _max2 = (y); \ - (void)(&_max1 == &_max2); \ - _max1 > _max2 ? _max1 : _max2; \ -}) - -#define min3(x, y, z) min((typeof(x))min(x, y), z) -#define max3(x, y, z) max((typeof(x))max(x, y), z) - -#define min_t(type, a, b) min(((type) a), ((type) b)) -#define max_t(type, a, b) max(((type) a), ((type) b)) - -/** - * clamp - return a value clamped to a given range with strict typechecking - * @val: current value - * @lo: lowest allowable value - * @hi: highest allowable value - * - * This macro does strict typechecking of @lo/@hi to make sure they are of the - * same type as @val. See the unnecessary pointer comparisons. - */ -#define clamp(val, lo, hi) min((typeof(val))max(val, lo), hi) - -/** - * do_div - returns 2 values: calculate remainder and update new dividend - * @n: uint64_t dividend (will be updated) - * @base: uint32_t divisor - * - * Summary: - * ``uint32_t remainder = n % base;`` - * ``n = n / base;`` - * - * Return: (uint32_t)remainder - * - * NOTE: macro parameter @n is evaluated multiple times, - * beware of side effects! - */ -#define do_div(n, base) ( \ -{ \ - uint32_t __base = (base); \ - uint32_t __rem; \ - __rem = ((uint64_t)(n)) % __base; \ - (n) = ((uint64_t)(n)) / __base; \ - __rem; \ -}) - -/* The `const' in roundup() prevents gcc-3.3 from calling __divdi3 */ -#define roundup(x, y) ( \ -{ \ - const typeof(y) __y = y; \ - ((x + (__y - 1)) / __y) * __y; \ -}) -#define rounddown(x, y) ( \ -{ \ - typeof(x) __x = (x); \ - __x - (__x % (y)); \ -}) - -#define DIV_ROUND_UP(n, d) (((n) + (d)-1) / (d)) - -#if defined(__aarch64__) - #define BITS_PER_LONG 64 -#else - #define BITS_PER_LONG 32 -#endif - -#ifndef BITS_PER_LONG_LONG - #define BITS_PER_LONG_LONG 64 -#endif - -#define BIT(nr) (1ULL << (nr)) -#define BIT_ULL(nr) (1ULL << (nr)) -#define BIT_MASK(nr) (BIT(nr) - 1UL) -#define BIT_WORD(nr) ((nr) / BITS_PER_LONG) -#define BIT_ULL_MASK(nr) (1ULL << ((nr) % BITS_PER_LONG_LONG)) -#define BIT_ULL_WORD(nr) ((nr) / BITS_PER_LONG_LONG) -#define BITS_PER_BYTE 8 - -#define DIV_ROUND_DOWN_ULL(ll, d) \ - ({ unsigned long long _tmp = (ll); do_div(_tmp, d); _tmp; }) -#define DIV_ROUND_UP_ULL(ll, d) DIV_ROUND_DOWN_ULL((ll) + (d) - 1, (d)) - -#if BITS_PER_LONG == 32 - #define DIV_ROUND_UP_SECTOR_T(ll,d) DIV_ROUND_UP_ULL(ll, d) -#else - #define DIV_ROUND_UP_SECTOR_T(ll,d) DIV_ROUND_UP(ll,d) -#endif - -/* - * Create a contiguous bitmask starting at bit position @l and ending at - * position @h. For example - * GENMASK_ULL(39, 21) gives us the 64bit vector 0x000000ffffe00000. - */ -#define GENMASK(h, l) \ - (((~0UL) - (1UL << (l)) + 1) & (~0UL >> (BITS_PER_LONG - 1 - (h)))) - -#define GENMASK_ULL(h, l) \ - (((~0ULL) - (1ULL << (l)) + 1) & \ - (~0ULL >> (BITS_PER_LONG_LONG - 1 - (h)))) - -#define SZ_1 0x00000001 -#define SZ_2 0x00000002 -#define SZ_4 0x00000004 -#define SZ_8 0x00000008 -#define SZ_16 0x00000010 -#define SZ_32 0x00000020 -#define SZ_64 0x00000040 -#define SZ_128 0x00000080 -#define SZ_256 0x00000100 -#define SZ_512 0x00000200 - -#define SZ_1K 0x00000400 -#define SZ_2K 0x00000800 -#define SZ_4K 0x00001000 -#define SZ_8K 0x00002000 -#define SZ_16K 0x00004000 -#define SZ_32K 0x00008000 -#define SZ_64K 0x00010000 -#define SZ_128K 0x00020000 -#define SZ_256K 0x00040000 -#define SZ_512K 0x00080000 - -#define SZ_1M 0x00100000 -#define SZ_2M 0x00200000 -#define SZ_4M 0x00400000 -#define SZ_8M 0x00800000 -#define SZ_16M 0x01000000 -#define SZ_32M 0x02000000 -#define SZ_64M 0x04000000 -#define SZ_128M 0x08000000 -#define SZ_256M 0x10000000 -#define SZ_512M 0x20000000 - -#define SZ_1G 0x40000000 -#define SZ_2G 0x80000000 -#define SZ_3G 0xC0000000 -#define SZ_4G 0x100000000ULL -#define SZ_8G 0x200000000ULL - -#define NANO_TO_MICRO 1000 -#define NANO_TO_KILO 1000000 - -/** - * UPPER_32_BITS - return bits 32-63 of a number - * @n: the number we're accessing - * - * A basic shift-right of a 64- or 32-bit quantity. Use this to suppress - * the "right shift count >= width of type" warning when that quantity is - * 32-bits. - * Note that do not input signed int 'n' - */ -#define UPPER_32_BITS(n) ((uint32_t)(((n) >> 16) >> 16)) - -/** - * LOWER_32_BITS - return bits 0-31 of a number - * @n: the number we're accessing - * Note that do not input signed int 'n' - */ -#define LOWER_32_BITS(n) ((uint32_t)((n)&0xffffffff)) -#define IS_ALIGNED(x, a) (((x) & ((typeof(x))(a)-1)) == 0) - -#ifndef __aligned - #define __aligned(x) __attribute__((__aligned__(x))) -#endif - -/** - * CONTAINER_OF - return the member address of ptr, if the type of ptr is the - * struct type. - */ -#define CONTAINER_OF(ptr, type, member) \ - ((type *)((char *)(ptr) - (unsigned long)(&((type *)0)->member))) - -#ifndef ARRAY_SIZE - #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0])) -#endif - -/* set 32-bit register [a:b] as x, where a is high bit, b is low bit, x is setting/getting value */ -#define GET_REG32_BITS(x, a, b) (u32)((((u32)(x)) & GENMASK(a, b)) >> b) -#define SET_REG32_BITS(x, a, b) (u32)((((u32)(x)) << b) & GENMASK(a, b)) - -/* Integer alignment down */ -#define PALIGN_DOWN(x,align) (x & ~(align-1)) -/* Integer alignment up */ -#define PALIGN_UP(x,align) ((x + (align-1)) & ~(align-1)) - -#define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)])) - -#define __BUILD_BUG_ON_NOT_POWER_OF_2(n) \ - BUILD_BUG_ON(((n) & ((n) - 1)) != 0) -#define BUILD_BUG_ON_NOT_POWER_OF_2(n) \ - BUILD_BUG_ON((n) == 0 || (((n) & ((n) - 1)) != 0)) - -/** - * COMILETIME_ASSERT - break build and emit msg if condition is false - * @condition: a compile-time constant condition to check - * @msg: a message to emit if condition is false - * - * In tradition of POSIX assert, this macro will break the build if the - * supplied condition is *false*, emitting the supplied error message if the - * compiler has support to do so. - */ -# define COMILETIME_ASSERT(condition, msg, prefix, suffix) \ - do { \ - extern void prefix ## suffix(void) __attribute__((error(msg))); \ - if (!(condition)) \ - prefix ## suffix(); \ - } while (0) - -/** - * BUILD_BUG_ON_MSG - break compile if a condition is true & emit supplied - * error message. - * @condition: the condition which the compiler should know is false. - * - * See BUILD_BUG_ON for description. - */ -#define BUILD_BUG_ON_MSG(cond, msg) COMILETIME_ASSERT(!(cond), msg, __compiletime_assert_, __COUNTER__) - -/* - * Bitfield access macros - * - * FIELD_{GET,PREP} macros take as first parameter shifted mask - * from which they extract the base mask and shift amount. - * Mask must be a compilation time constant. - * - * Example: - * - * #define REG_FIELD_A GENMASK(6, 0) - * #define REG_FIELD_B BIT(7) - * #define REG_FIELD_C GENMASK(15, 8) - * #define REG_FIELD_D GENMASK(31, 16) - * - * Get: - * a = FIELD_GET(REG_FIELD_A, reg); - * b = FIELD_GET(REG_FIELD_B, reg); - * - * Set: - * reg = FIELD_PREP(REG_FIELD_A, 1) | - * FIELD_PREP(REG_FIELD_B, 0) | - * FIELD_PREP(REG_FIELD_C, c) | - * FIELD_PREP(REG_FIELD_D, 0x40); - * - * Modify: - * reg &= ~REG_FIELD_C; - * reg |= FIELD_PREP(REG_FIELD_C, c); - */ - -#define BF_SHF(x) (__builtin_ffsll(x) - 1) - -#define BF_FIELD_CHECK(mask, reg, val, pfx) \ - ({ \ - BUILD_BUG_ON_MSG(!__builtin_constant_p(mask), \ - pfx "mask is not constant"); \ - BUILD_BUG_ON_MSG((mask) == 0, pfx "mask is zero"); \ - BUILD_BUG_ON_MSG(__builtin_constant_p(val) ? \ - ~((mask) >> BF_SHF(mask)) & (val) : 0, \ - pfx "value too large for the field"); \ - BUILD_BUG_ON_MSG((mask) > (typeof(reg))~0ull, \ - pfx "type of reg too small for mask"); \ - __BUILD_BUG_ON_NOT_POWER_OF_2((mask) + \ - (1ULL << BF_SHF(mask))); \ - }) - - -/** - * FIELD_PREP() - prepare a bitfield element - * @mask: shifted mask defining the field's length and position - * @val: value to put in the field - * - * FIELD_PREP() masks and shifts up the value. The result should - * be combined with other fields of the bitfield using logical OR. - */ -#define FIELD_PREP(mask, val) \ - ({ \ - BF_FIELD_CHECK(mask, 0ULL, val, "FIELD_PREP: "); \ - ((typeof(mask))(val) << BF_SHF(mask)) & (mask); \ - }) - -#ifdef __cplusplus -} -#endif - -#endif \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/common/fpinctrl.h b/bsp/phytium/libraries/standalone/common/fpinctrl.h deleted file mode 100644 index be817061a5..0000000000 --- a/bsp/phytium/libraries/standalone/common/fpinctrl.h +++ /dev/null @@ -1,149 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fpinctrl.h - * Date: 2022-03-28 14:16:09 - * LastEditTime: 2022-03-28 14:16:10 - * Description:  This file is for IO pin ctrl API definition - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/3/28 init commit - */ -#ifndef FPINCTRL_H -#define FPINCTRL_H - -#ifdef __cplusplus -extern "C" -{ -#endif - -/***************************** Include Files *********************************/ -#include "ftypes.h" -#include "sdkconfig.h" - -#if defined(CONFIG_TARGET_F2000_4) || defined(CONFIG_TARGET_D2000) -#include "fioctrl.h" - -/**************************** Type Definitions *******************************/ - -typedef enum -{ - FPIN_FUNC0 = 0b000, - FPIN_FUNC1, - FPIN_FUNC2, - FPIN_FUNC3 = 0b011, - - FPIN_NUM_OF_FUNC -} FPinFunc; /* 引脚复用功能配置, func0为默认功能 */ - -typedef enum -{ - FPIN_PULL_NONE = 0b00, - FPIN_PULL_DOWN = 0b01, - FPIN_PULL_UP = 0b10, - - FPIN_NUM_OF_PULL -} FPinPull; /* 引脚上下拉配置 */ - -typedef enum -{ - FPIN_OUTPUT_DELAY = 0, /* 延时设置方向为输出 */ - FPIN_INPUT_DELAY, /* 延时设置方向为输入 */ - - FPIN_NUM_OF_DELAY_DIR -} FPinDelayDir; /* 引脚延时配置方向 */ - -typedef enum -{ - FPIN_DELAY_COARSE_TUNING = 0, /* 延迟粗调档位 */ - FPIN_DELAY_FINE_TUNING, /* 延迟精调档位 */ - - FPIN_NUM_OF_DELAY_TYPE -} FPinDelayType; /* 引脚延时配置类型 */ - -typedef enum -{ - FPIN_DELAY_NONE = 0, - FPIN_DELAY_1, - FPIN_DELAY_2, - FPIN_DELAY_3, - FPIN_DELAY_4, - FPIN_DELAY_5, - FPIN_DELAY_6, - FPIN_DELAY_7, - - FPIN_NUM_OF_DELAY -} FPinDelay; - -typedef enum -{ - FPIN_DELAY_IN_TYPE = 0, /* input delay */ - FPIN_DELAY_OUT_TYPE = 1, /* output delay */ -} FPinDelayIOType; - -typedef struct -{ - u32 reg_off; /* 引脚配置寄存器偏移量 */ - u32 reg_bit; /* 引脚配置起始位 */ -} FPinIndex; /* 引脚索引 */ -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ -#define FPIN_NULL {0xffffffff, 0} - -/************************** Function Prototypes ******************************/ -/* 获取IO引脚当前的复用功能 */ -FPinFunc FPinGetFunc(const FPinIndex pin); - -/* 设置IO引脚复用功能 */ -void FPinSetFunc(const FPinIndex pin, FPinFunc func); - -/* 获取IO引脚当前的上下拉设置 */ -FPinPull FPinGetPull(const FPinIndex pin); - -/* 设置IO引脚的上下拉 */ -void FPinSetPull(const FPinIndex pin, FPinPull pull); - -/* 获取IO引脚的复用、上下拉和驱动能力设置 */ -void FPinGetConfig(const FPinIndex pin, FPinFunc *func, FPinPull *pull); - -/* 设置IO引脚的复用、上下拉和驱动能力 */ -void FPinSetConfig(const FPinIndex pin, FPinFunc func, FPinPull pull); - -/* 获取IO引脚当前的单项延时设置 */ -FPinDelay FPinGetDelay(const FPinIndex pin, FPinDelayDir dir, FPinDelayType type); - -/* 检查IO引脚延时是否使能 */ -boolean FPinGetDelayEn(const FPinIndex pin, FPinDelayDir dir); - -/* 设置IO引脚单项延时 */ -void FPinSetDelay(const FPinIndex pin, FPinDelayDir dir, FPinDelayType type, FPinDelay delay); - -/* 使能或去使能IO引脚延时 */ -void FPinSetDelayEn(const FPinIndex pin, FPinDelayDir dir, boolean enable); - -/* Update and enable common IO pin delay config */ -void FPinSetDelayConfig(const FPinIndex pin, FPinDelayIOType in_out_type, FPinDelay roungh_delay, FPinDelay delicate_delay, boolean enable); - -/* Get current common IO pin delay config */ -void FPinGetDelayConfig(const FPinIndex pin, FPinDelay *in_roungh_delay, FPinDelay *in_delicate_delay, - FPinDelay *out_roungh_delay, FPinDelay *out_delicate_delay); - -#ifdef __cplusplus -} -#endif - -#endif -#endif \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/common/fprintf.c b/bsp/phytium/libraries/standalone/common/fprintf.c deleted file mode 100644 index 5f6bb43935..0000000000 --- a/bsp/phytium/libraries/standalone/common/fprintf.c +++ /dev/null @@ -1,284 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fprintf.c - * Date: 2021-08-23 16:24:02 - * LastEditTime: 2022-02-17 18:01:19 - * Description:  This file is for creating custom print interface for standlone sdk. - * - * Modify History: - * Ver Who Date Changes - * ----- ------ -------- -------------------------------------- - * 1.0 huanghe 2022/7/23 first release - */ - - -#include -#include "fearly_uart.h" - -#define putchar(c) OutByte(c) -#define PAD_RIGHT 1 -#define PAD_ZERO 2 - -static void printchar(char **str, int c) -{ - if (str) - { - **str = c; - ++(*str); - } - else - { - (void)putchar((const char)c); - } -} - -static int prints(char **out, const char *string, int width, int pad) -{ - register int pc = 0, padchar = ' '; - - if (width > 0) - { - register int len = 0; - register const char *ptr; - for (ptr = string; *ptr; ++ptr) - { - ++len; - } - if (len >= width) - { - width = 0; - } - else - { - width -= len; - } - if (pad & PAD_ZERO) - { - padchar = '0'; - } - } - if (!(pad & PAD_RIGHT)) - { - for (; width > 0; --width) - { - printchar(out, padchar); - ++pc; - } - } - for (; *string; ++string) - { - printchar(out, *string); - ++pc; - } - for (; width > 0; --width) - { - printchar(out, padchar); - ++pc; - } - - return pc; -} - -/* the following should be enough for 32 bit int */ -#define PRINT_BUF_LEN 12 - -static int printi(char **out, int i, int b, int sg, int width, int pad, int letbase) -{ - char print_buf[PRINT_BUF_LEN]; - register char *s; - register int t, neg = 0, pc = 0; - register unsigned int u = i; - - if (i == 0) - { - print_buf[0] = '0'; - print_buf[1] = '\0'; - return prints(out, print_buf, width, pad); - } - - if (sg && b == 10 && i < 0) - { - neg = 1; - u = -i; - } - - s = print_buf + PRINT_BUF_LEN - 1; - *s = '\0'; - - while (u) - { - t = u % b; - if (t >= 10) - { - t += letbase - '0' - 10; - } - *--s = t + '0'; - u /= b; - } - - if (neg) - { - if (width && (pad & PAD_ZERO)) - { - printchar(out, '-'); - ++pc; - --width; - } - else - { - *--s = '-'; - } - } - - return pc + prints(out, s, width, pad); -} - -static int print(char **out, const char *format, va_list args) -{ - register int width, pad; - register int pc = 0; - char scr[2]; - - for (; *format != 0; ++format) - { - if (*format == '%') - { - ++format; - width = pad = 0; - if (*format == '\0') - { - break; - } - if (*format == '%') - { - goto out; - } - if (*format == '-') - { - ++format; - pad = PAD_RIGHT; - } - while (*format == '0') - { - ++format; - pad |= PAD_ZERO; - } - for (; *format >= '0' && *format <= '9'; ++format) - { - width *= 10; - width += *format - '0'; - } - if (*format == 's') - { - //register char *s = (char *)va_arg( args, int ); - register char *s = (char *)va_arg(args, char *); - pc += prints(out, s ? s : "(null)", width, pad); - continue; - } - if (*format == 'd') - { - pc += printi(out, va_arg(args, int), 10, 1, width, pad, 'a'); - continue; - } - if (*format == 'x') - { - pc += printi(out, va_arg(args, int), 16, 0, width, pad, 'a'); - continue; - } - if (*format == 'X') - { - pc += printi(out, va_arg(args, int), 16, 0, width, pad, 'A'); - continue; - } - if (*format == 'u') - { - pc += printi(out, va_arg(args, int), 10, 0, width, pad, 'a'); - continue; - } - if (*format == 'c') - { - /* char are converted to int then pushed on the stack */ - scr[0] = (char)va_arg(args, int); - scr[1] = '\0'; - pc += prints(out, scr, width, pad); - continue; - } - } - else - { -out: - printchar(out, *format); - ++pc; - } - } - if (out) - { - **out = '\0'; - } - va_end(args); - return pc; -} - -int f_printf(const char *format, ...) -{ - va_list args; - - va_start(args, format); - return print(0, format, args); -} - -#ifdef TEST_PRINTF -int test_printf(void) -{ - char *ptr = "Hello world!"; - char *np = 0; - int i = 5; - unsigned int bs = sizeof(int) * 8; - int mi; - char buf[80]; - - mi = (1 << (bs - 1)) + 1; - f_printf("%s\n", ptr); - f_printf("printf test\n"); - f_printf("%s is null pointer\n", np); - f_printf("%d = 5\n", i); - f_printf("%d = - max int\n", mi); - f_printf("char %c = 'a'\n", 'a'); - f_printf("hex %x = ff\n", 0xff); - f_printf("hex %02x = 00\n", 0); - f_printf("signed %d = unsigned %u = hex %x\n", -3, -3, -3); - f_printf("%d %s(s)%", 0, "message"); - f_printf("\n"); - f_printf("%d %s(s) with %%\n", 0, "message"); - sprintf(buf, "justif: \"%-10s\"\n", "left"); - f_printf("%s", buf); - sprintf(buf, "justif: \"%10s\"\n", "right"); - f_printf("%s", buf); - sprintf(buf, " 3: %04d zero padded\n", 3); - f_printf("%s", buf); - sprintf(buf, " 3: %-4d left justif.\n", 3); - f_printf("%s", buf); - sprintf(buf, " 3: %4d right justif.\n", 3); - f_printf("%s", buf); - sprintf(buf, "-3: %04d zero padded\n", -3); - f_printf("%s", buf); - sprintf(buf, "-3: %-4d left justif.\n", -3); - f_printf("%s", buf); - sprintf(buf, "-3: %4d right justif.\n", -3); - f_printf("%s", buf); - - return 0; -} - -#endif diff --git a/bsp/phytium/libraries/standalone/common/fprintf.h b/bsp/phytium/libraries/standalone/common/fprintf.h deleted file mode 100644 index 4659b76816..0000000000 --- a/bsp/phytium/libraries/standalone/common/fprintf.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fprintf.h - * Date: 2021-08-23 16:24:02 - * LastEditTime: 2022-02-17 18:01:24 - * Description:  This file is for creating custom print interface for standlone sdk. - * - * Modify History: - * Ver Who Date Changes - * ----- ------ -------- -------------------------------------- - * 1.0 huanghe 2022/7/23 first release - */ - -#ifndef FPRINTF_H -#define FPRINTF_H - -#ifdef __cplusplus -extern "C" -{ -#endif - -int f_printf(const char *format, ...) ; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/bsp/phytium/libraries/standalone/common/fprintk.c b/bsp/phytium/libraries/standalone/common/fprintk.c deleted file mode 100644 index 0852d52a72..0000000000 --- a/bsp/phytium/libraries/standalone/common/fprintk.c +++ /dev/null @@ -1,419 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fprintk.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-17 18:01:29 - * Description:  This file is for creating custom print interface for standlone sdk. - * - * Modify History: - * Ver Who Date Changes - * ----- ------ -------- -------------------------------------- - * 1.0 huanghe 2022/7/23 first release - */ - - -#include -#include -#include -#include "fkernel.h" -#include "ftypes.h" -#include "fearly_uart.h" - -#ifndef __fallthrough - #if __GNUC__ >= 7 - #define __fallthrough __attribute__((fallthrough)) - #else - #define __fallthrough - #endif /* __GNUC__ >= 7 */ -#endif - -typedef int (*cbprintf_cb)(int c, void *ctx); -#define CONFIG_CBPRINTF_FULL_INTEGRAL - -#ifdef CONFIG_CBPRINTF_FULL_INTEGRAL - typedef intmax_t int_value_type; - typedef uintmax_t uint_value_type; - #define DIGITS_BUFLEN 21 -#else - typedef s32 int_value_type; - typedef u32 uint_value_type; - #define DIGITS_BUFLEN 10 -#endif - -#define ALPHA(fmt) (((fmt)&0x60) - '0' - 10 + 1) - -struct str_context -{ - char *str; - int max; - int count; -}; - -static int char_out(int c, void *ctx_p) -{ - struct str_context *ctx = ctx_p; - - ctx->count++; - OutByte((s8)c); - return 1; -} - -/* Convert value to string, storing characters downwards */ -static inline int convert_value(uint_value_type num, unsigned int base, - unsigned int alpha, char *buftop) -{ - int i = 0; - - do - { - unsigned int c = num % base; - if (c >= 10) - { - c += alpha; - } - buftop[--i] = c + '0'; - num /= base; - } - while (num); - - return -i; -} - -#define OUTC(_c) \ - do \ - { \ - out((int)(_c), ctx); \ - count++; \ - } while (0) - -#define PAD_ZERO BIT(0) -#define PAD_TAIL BIT(1) - -/** - * @brief Printk internals - * - * See printk() for description. - * @param fmt Format string - * @param ap Variable parameters - * - * @return printed byte count if CONFIG_CBPRINTF_LIBC_SUBSTS is set - */ -int cbvprintf(cbprintf_cb out, void *ctx, const char *fmt, va_list ap) -{ - size_t count = 0; - char buf[DIGITS_BUFLEN]; - char *prefix, *data; - int min_width, precision, data_len; - char padding_mode, length_mod, special; - - /* we pre-increment in the loop afterwards */ - fmt--; - -start: - while (*++fmt != '%') - { - if (*fmt == '\0') - { - return count; - } - OUTC(*fmt); - } - - min_width = -1; - precision = -1; - prefix = ""; - padding_mode = 0; - length_mod = 0; - special = 0; - - for (fmt++;; fmt++) - { - switch (*fmt) - { - case 0: - return count; - - case '%': - OUTC('%'); - goto start; - - case '-': - padding_mode = PAD_TAIL; - continue; - - case '.': - precision = 0; - padding_mode &= (char)~PAD_ZERO; - continue; - - case '0': - if (min_width < 0 && precision < 0 && !padding_mode) - { - padding_mode = PAD_ZERO; - continue; - } - __fallthrough; - - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - if (precision >= 0) - { - precision = 10 * precision + *fmt - '0'; - } - else - { - if (min_width < 0) - { - min_width = 0; - } - min_width = 10 * min_width + *fmt - '0'; - } - continue; - - case '*': - if (precision >= 0) - { - precision = va_arg(ap, int); - } - else - { - min_width = va_arg(ap, int); - if (min_width < 0) - { - min_width = -min_width; - padding_mode = PAD_TAIL; - } - } - continue; - - case '+': - case ' ': - case '#': - special = *fmt; - continue; - - case 'h': - case 'l': - case 'z': - if (*fmt == 'h' && length_mod == 'h') - { - length_mod = 'H'; - } - else if (*fmt == 'l' && length_mod == 'l') - { - length_mod = 'L'; - } - else if (length_mod == '\0') - { - length_mod = *fmt; - } - else - { - OUTC('%'); - OUTC(*fmt); - goto start; - } - continue; - - case 'd': - case 'i': - case 'u': - { - uint_value_type d; - - if (length_mod == 'z') - { - d = va_arg(ap, ssize_t); - } - else if (length_mod == 'l') - { - d = va_arg(ap, long); - } - else if (length_mod == 'L') - { - long long lld = va_arg(ap, long long); - - if (sizeof(int_value_type) < 8U && - lld != (int_value_type)lld) - { - data = "ERR"; - data_len = 3; - precision = 0; - break; - } - d = (uint_value_type)lld; - } - else if (*fmt == 'u') - { - d = va_arg(ap, unsigned int); - } - else - { - d = va_arg(ap, int); - } - - if (*fmt != 'u' && (int_value_type)d < 0) - { - d = -d; - prefix = "-"; - min_width--; - } - else if (special == ' ') - { - prefix = " "; - min_width--; - } - else if (special == '+') - { - prefix = "+"; - min_width--; - } - else - { - ; - } - data_len = convert_value(d, 10, 0, buf + sizeof(buf)); - data = buf + sizeof(buf) - data_len; - break; - } - - case 'p': - case 'x': - case 'X': - { - uint_value_type x; - - if (*fmt == 'p') - { - x = (uintptr_t)va_arg(ap, void *); - if (x == (uint_value_type)0) - { - data = "(nil)"; - data_len = 5; - precision = 0; - break; - } - special = '#'; - } - else if (length_mod == 'l') - { - x = va_arg(ap, unsigned long); - } - else if (length_mod == 'L') - { - x = va_arg(ap, unsigned long long); - } - else - { - x = va_arg(ap, unsigned int); - } - if (special == '#') - { - prefix = (*fmt & 0x20) ? "0x" : "0x"; - min_width -= 2; - } - data_len = convert_value(x, 16, ALPHA(*fmt), - buf + sizeof(buf)); - data = buf + sizeof(buf) - data_len; - break; - } - - case 's': - { - data = va_arg(ap, char *); - data_len = strlen(data); - if (precision >= 0 && data_len > precision) - { - data_len = precision; - } - precision = 0; - break; - } - - case 'c': - { - int c = va_arg(ap, int); - - buf[0] = c; - data = buf; - data_len = 1; - precision = 0; - break; - } - - default: - OUTC('%'); - OUTC(*fmt); - goto start; - } - - if (precision < 0 && (padding_mode & PAD_ZERO)) - { - precision = min_width; - } - min_width -= data_len; - precision -= data_len; - if (precision > 0) - { - min_width -= precision; - } - - if (!(padding_mode & PAD_TAIL)) - { - while (--min_width >= 0) - { - OUTC(' '); - } - } - while (*prefix) - { - OUTC(*prefix++); - } - while (--precision >= 0) - { - OUTC('0'); - } - while (--data_len >= 0) - { - OUTC(*data++); - } - while (--min_width >= 0) - { - OUTC(' '); - } - - goto start; - } -} - -static int f_vprintf(const char *restrict format, va_list vargs) -{ - struct str_context ctx = {0}; - cbvprintf(char_out, &ctx, format, vargs); -} - -void f_printk(const char *fmt, ...) -{ - va_list ap; - va_start(ap, fmt); - f_vprintf(fmt, ap); - va_end(ap); -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/common/fprintk.h b/bsp/phytium/libraries/standalone/common/fprintk.h deleted file mode 100644 index 2e271b37e5..0000000000 --- a/bsp/phytium/libraries/standalone/common/fprintk.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fprintk.h - * Date: 2021-08-23 16:24:02 - * LastEditTime: 2022-02-17 18:01:35 - * Description:  This file is for creating custom print interface for standlone sdk. - * - * Modify History: - * Ver Who Date Changes - * ----- ------ -------- -------------------------------------- - * 1.0 huanghe 2022/7/23 first release - */ - -#ifndef FPRINTK_H -#define FPRINTK_H - -#ifdef __cplusplus -extern "C" -{ -#endif - -void f_printk(const char *format, ...) ; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/bsp/phytium/libraries/standalone/common/fswap.h b/bsp/phytium/libraries/standalone/common/fswap.h deleted file mode 100644 index 51d16593d9..0000000000 --- a/bsp/phytium/libraries/standalone/common/fswap.h +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fswap.h - * Date: 2022-02-10 14:53:41 - * LastEditTime: 2022-02-17 17:35:24 - * Description:  This files is for endian conversion. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2021/06/15 first release - */ - -#ifndef FSWAP_H -#define FSWAP_H - -#ifdef __cplusplus -extern "C" -{ -#endif - -#define __swab16(x) (uint16_t)__builtin_bswap16((uint16_t)(x)) -#define __swab32(x) (uint32_t)__builtin_bswap32((uint32_t)(x)) -#define __swab64(x) (uint64_t)__builtin_bswap64((uint64_t)(x)) - -#define cpu_to_le64(x) ((__u64)(x)) -#define le64_to_cpu(x) ((__le64)(x)) -#define cpu_to_le32(x) ((__u32)(x)) -#define le32_to_cpu(x) ((__le32)(x)) -#define cpu_to_le16(x) ((__u16)(x)) -#define le16_to_cpu(x) ((__le16)(x)) -#define cpu_to_be64(x) __swab64((x)) -#define be64_to_cpu(x) __swab64((x)) -#define cpu_to_be32(x) __swab32((x)) -#define be32_to_cpu(x) __swab32((x)) -#define cpu_to_be16(x) __swab16((x)) -#define be16_to_cpu(x) __swab16((x)) - -#define ___htonl(x) cpu_to_be32(x) -#define ___htons(x) cpu_to_be16(x) -#define ___ntohl(x) be32_to_cpu(x) -#define ___ntohs(x) be16_to_cpu(x) - -#define htonl(x) ___htonl(x) -#define ntohl(x) ___ntohl(x) -#define htons(x) ___htons(x) -#define ntohs(x) ___ntohs(x) - -#ifdef __cplusplus -} -#endif - -#endif \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/common/ftypes.h b/bsp/phytium/libraries/standalone/common/ftypes.h deleted file mode 100644 index dd27b1936d..0000000000 --- a/bsp/phytium/libraries/standalone/common/ftypes.h +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: ftypes.h - * Date: 2021-05-27 13:30:03 - * LastEditTime: 2022-02-18 08:24:15 - * Description:  This file is for variable type definition - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2021/05/27 init - * 1.1 zhugengyu 2022/02/18 add some typedef - */ - - -#ifndef FTYPES_H -#define FTYPES_H - -#include -#include - -#ifdef __cplusplus -extern "C" -{ -#endif - -#define FT_COMPONENT_IS_READY 0x11111111U -#define FT_COMPONENT_IS_STARTED 0x22222222U - -typedef uint8_t u8; /* unsigned 8-bit */ -typedef char s8; /* signed 8-bit */ -typedef uint16_t u16; /* unsigned 16-bit */ -typedef short s16; /* signed 16-bit */ -typedef uint32_t u32; /* unsigned 32-bit */ -typedef int32_t s32; /* signed 32-bit */ -typedef uint64_t u64; /* unsigned 64-bit */ -typedef int64_t s64; /* unsigned */ -typedef float f32; /* 32-bit floating point */ -typedef double f64; /* 64-bit double precision FP */ -typedef unsigned long boolean; /* boolean */ -typedef uint64_t _time_t; -typedef size_t fsize_t; - -typedef intptr_t intptr; /* intptr_t是为了跨平台,其长度总是所在平台的位数,所以用来存放地址。 */ -typedef uintptr_t uintptr; -typedef ptrdiff_t ptrdiff; - -#ifdef __aarch64__ -typedef u64 tick_t; -#else -typedef u32 tick_t; -#endif - -/** @}*/ -#if !defined(LONG) || !defined(ULONG) -typedef long LONG; -typedef unsigned long ULONG; -#endif - -#define ULONG64_HI_MASK 0xFFFFFFFF00000000U -#define ULONG64_LO_MASK ~ULONG64_HI_MASK - -#ifndef TRUE -#define TRUE 1U -#endif - -#ifndef FALSE -#define FALSE 0U -#endif - -#ifndef NULL -#define NULL 0U -#endif - -#define _INLINE inline -#define _ALWAYS_INLINE inline __attribute__((always_inline)) -#define _WEAK __attribute__((weak)) - -typedef void (*FIrqHandler)(void *InstancePtr); - -typedef void (*FExceptionHandler)(void *InstancePtr); - -#ifdef __cplusplus -} -#endif - -#endif // ! diff --git a/bsp/phytium/libraries/standalone/doc/ChangeLog.md b/bsp/phytium/libraries/standalone/doc/ChangeLog.md deleted file mode 100644 index c488fd977b..0000000000 --- a/bsp/phytium/libraries/standalone/doc/ChangeLog.md +++ /dev/null @@ -1,2576 +0,0 @@ -# Phytium Standalone SDK 2023-7-18 ChangeLog - -Change Log since 2023-07-11 - -## drivers - -- add iopad driver -# Phytium Standalone SDK 2023-7-14 ChangeLog - -Change Log since 2023-07-11 - -## tools - -- modify scripts to adapt freertos - -# Phytium Standalone SDK 2023-7-11 ChangeLog - -Change Log since 2023-07-11 - -## board - -- modify fearly uart - -# Phytium Standalone SDK 2023-7-06 ChangeLog - -Change Log since 2023-07-03 - -## tools - -- Resolved an issue where the header file could not be recognized after modification - -* Fixed a bug where C++ logic could not generate binary - -# Phytium Standalone SDK 2023-7-03 ChangeLog - -Change Log since 2023-06-30 - -## arch - -- added new features such as smcc and psci -- Remove the old smcc and psci methods - -## exampe - -- add psci example - -# Phytium Standalone SDK 2023-6-30 ChangeLog - -Change Log since 2023-06-28 - -## driver - -- change the struct of FDcDisplayTimmingConfig - -# Phytium Standalone SDK 2023-6-28 ChangeLog - -Change Log since 2023-06-26 - -## example - -- Add serial new examples - -## driver - -- Add new state clear function in fpl011_intr.c - -# Phytium Standalone SDK 2023-6-26 ChangeLog - -Change Log since 2023-06-21 - -## arch - -- Add fpen choice in fboot.S to compatible with rtos startup - -## driver - -- Modify the method of reading and writing gic 64-bit registers in aarch32 mode - -# Phytium Standalone SDK 2023-6-20 ChangeLog - -Change Log since 2023-06-12 - -## board - -- Added mio slave id - -## example - -- Added mio ddma example - -# Phytium Standalone SDK 2023-06-19 ChangeLog - -Change Log since 2023-06-19 - -## third-party - -- add callback function eth_poll in LwipPortInputThread: to enable the NIC to send and receive packets steadily in FreeRTOS. - -# Phytium Standalone SDK 2023-06-19 ChangeLog - -Change Log since 2023-06-08 - -## arch - -- restruct aarch32 system register access interface -- delete fcp15 file - -## driver - -- add windbond qspi flash support - -# Phytium Standalone SDK 2023-6-16 ChangeLog - -Change Log since 2023-06-15 - -## tools - -Added some memory check tools - -## doc - -Added user document - -## example - -Added libmetal example - -# Phytium Standalone SDK 2023-6-15 ChangeLog - -Change Log since 2023-6-12 - -## driver - -- Modify the framebuffer generate method and the driver lib - -## driver - -- adjust the lvgl and the driver relation - -## example - -- adapt the driver change - -# Phytium Standalone SDK 2023-6-15 ChangeLog - -Change Log since 2023-6-12 - -## sdmmc - -- Modify the variable name in sdmmc.mk to resolve the issue of variable name overloading. - -# Phytium Standalone SDK 2023-6-12 ChangeLog - -Change Log since 2023-6-12 - -## example - -- modify uart ddma example -- remove FDDMA_MAX_TRANSFER_LEN - -## drivers - -- remove FDDMA_MAX_TRANSFER_LEN - -# Phytium Standalone SDK 2023-6-12 ChangeLog - -Change Log since 2023-6-8 - -## drivers - -- modify annotation and variable name in gdma driver. -- solve customer issue in gdma. - -## example - -- modify gdma example. - -# Phytium Standalone SDK 2023-6-8 ChangeLog - -Change Log since 2023-6-8 - -## example - -- modify gic example Kconfig. -- gic example debug. - -# Phytium Standalone SDK 2023-6-8 ChangeLog - -Change Log since 2023-6-6 - -## arch - -- add gcc atomic api - -## example - -- add atomic test example. - -# Phytium Standalone SDK 2023-6-8 ChangeLog - -Change Log since 2023-06-7 - -## example - -- add cxx example -- add crypto++ example - -## arch - -- support c++ - -## lib - -- add some stub functions for std c++ library - -## third-party - -- add crypto++ - -# Phytium Standalone SDK 2023-6-7 ChangeLog - -Change Log since 2023-6-6 - -## example - -- network/raw_api/tcp_client example debug: Memory double free problem solved. -- network/raw_api/tcp_client example modified: The new code is more robust and secure. - -# Phytium Standalone SDK 2023-6-7 ChangeLog - -Change Log since 2023-6-2 - -## example - -- add wdt example. - -# Phytium Standalone SDK 2023-6-6 ChangeLog - -Change Log since 2023-6-6 - -## arch - -- modify generic timer api - -# Phytium Standalone SDK 2023-6-05 ChangeLog - -Change Log since 2023-05-31 - -## example - -- add timer example. - -# Phytium Standalone SDK 2023-6-05 ChangeLog - -Change Log since 2023-05-31 - -## baremetal - -- modified license of libmetal demo -- add loadelf function for openamp example - -## third-party - -- add image store file -- complete remote processor operation ports - -# Phytium Standalone SDK 2023-6-2 ChangeLog - -Change Log since 2023-6-1 - -## scrips - -- update settings.json (fileheader extentions update) - -# Phytium Standalone SDK 2023-5-31 ChangeLog - -Change Log since 2023-05-29 - -## tools - -Added a new compilation framework - -## baremetal - -Added a new test code - -## SDK - -Add a series of makefile scripts - -# Phytium Standalone SDK 2023-5-29 ChangeLog - -Change Log since 2023-05-25 - -## example - -- add ipc semaphore refactoring example. - -# Phytium Standalone SDK 2023-5-29 ChangeLog - -Change Log since 2023-05-23 - -## arch - -- modify generic timer api, add virtual timer's use -- delete USE_SYS_TICK kconfig - -## example - -- add generic_timer example to test physical and virtual timers - -# Phytium Standalone SDK 2023-05-24 v1.1.1 ChangeLog - -Change Log since 2023-05-23 - -## README - -- add developer infomation. -- install.py update including version infomation modified. - -## common - -- according to user issue, add a ; in fdebug.h - -# Phytium Standalone SDK 2023-5-23 ChangeLog - -Change Log since 2023-05-16 - -## example - -- add LwipEthProcessLoop call in LwipTestLoop. -- add new macro definition: CONFIG_LWIP_RX_POLL to control LwipEthProcessLoop calls. - -## drivers - -- add new member variable: mask in struct Fxmac,which can be used to manage TX and RX interrupts. -- add new macro definition: FXMAC_INTR_MASK,which can be used to enable TX and RX interrupts. - -## third-party - -- delete LWIP_DEBUG_ESP_LOG in /lwip-2.1.2/Kconfig -- add new function LwipEthProcessLoop. -- add new callback function ethernetif_poll,which can poll network packets. -- add new macro definitions: FXMAC_LWIP_PORT_CONFIG_RX_POLL_RECV,which controls whether Frame received interrupts are enabled or not. - -# Phytium Standalone SDK 2023-5-16 ChangeLog - -Change Log since 2023-05-12 - -## example - -- add new openamp demo,support manager core and remote core communicate always. -- Change openamp for linux demo folder name “openamp old”. - -## third-party - -- modified some const variable -- add some defines of service - -# Phytium Standalone SDK 2023-5-12 ChangeLog - -Change Log since 2023-05-10 - -## example - -- add pcie refactoring example. - -## driver - --little change to pcie driver - -# Phytium Standalone SDK 2023-5-10 ChangeLog - -Change Log since 2023-05-09 - -## board - -- Modify the description in the MMUs table in the aarch64. - -## aarch64 - -* Modify the execution mode in fmmu.c - -# Phytium Standalone SDK 2023-5-09 ChangeLog - -Change Log since 2023-04-28 - -## board - -- Change the suffix of CACHE_LINE_ADDR_MASK, resolve the problem that cache flush addresses are truncated . - -# Phytium Standalone SDK 2023-4-28 ChangeLog - -Change Log since 2023-04-24 - -## example - -- add gic refactoring example. - -# Phytium Standalone SDK 2023-04-24 v1.1.0 ChangeLog - -Change Log since 2023-04-20 - -## README - -- add developer infomation. -- install.py update including version infomation modified. - -## example - -- add new refactoring examples. - -# Phytium Standalone SDK 2023-4-21 ChangeLog - -Change Log since 2023-04-12 - -## example - -- add serial refactoring example. - -# Phytium Standalone SDK 2023-4-20 ChangeLog - -Change Log since 2023-04-15 - -## example - -- add new spim test refactoring example. - -# Phytium Standalone SDK 2023-4-18 ChangeLog - -Change Log since 2023-04-13 - -## common - -- finterrupt: modify priority icc_pmr set and icc_rpr get, according to different configurations. - -# Phytium Standalone SDK 2023-4-18 ChangeLog - -Change Log since 2023-04-10 - -## example - -- add new sata test refactoring example. - -# Phytium Standalone SDK 2023-4-11 ChangeLog - -Change Log since 2023-04-11 - -## driver - -- resolve the driver clock configuration in xmac cannot perform network auto-negotiation bug. - -# Phytium Standalone SDK 2023-4-11 ChangeLog - -Change Log since 2023-03-30 - -## example - -- update lwip_start_up README.md : add new description about jumbo mode enable and related operating instructions. - -## driver - -- modify macro definitions about jumbo registers and delete useless code. - -## third-party - -- add new instructions which can change netif mtu manually according to the actual transmission. -- modify pbuf alloc type and delete redundant code. - -# Phytium Standalone SDK 2023-3-30 ChangeLog - -Change Log since 2023-03-29 - -## example - -- lwip instructions has been updated by which we can choose driver type manually. -- update README.md : add new description about lwip probe instructions. - -# Phytium Standalone SDK 2023-3-29 ChangeLog - -Change Log since 2023-03-27 - -## example - -- add new gdma test refactoring example: gdma_direct_transfer_example, gdma_bdl_transfer_example, gdma_performance_test_example. -- little change in old gdma example. - -## driver - -- add wait mode feature in gdma driver. - -# Phytium Standalone SDK 2023-3-27 ChangeLog - -Change Log since 2023-03-24 - -## example - -- remove lib_core0 lib_core1 folder,add apu_running and rpu_running,support more example. -- modified README.md and update picture. -- fix atomic operation bug. - -## doc - -- add libmetal.md to introduce how to use it - -## third-party - -- remove extra code - -# Phytium Standalone SDK 2023-3-24 ChangeLog - -Change Log since 2023-03-20 - -## third-party - -- add apps lwiperf by which we can test mac bandwidth -- modify kconfig to add a new feature : LWIP_WND_SCALE,which can boost window maximum - -# Phytium Standalone SDK 2023-3-23 ChangeLog - -Change Log since 2023-03-20 - -## example - -- modify the lvgl example -- change the cmd, and interface , add the test fig and modify the readme - -## driver - -- modify the format -- add a dump function -- change some function and interface -- generate a new lib driver of dcdp - -## third-party - -- delete the unused part of port -- modify the format - -# Phytium Standalone SDK 2023-3-20 ChangeLog - -Change Log since 2023-03-17 - -## aarch - -- Adapt exception frame sequence - -## example - -- Add some exception test example - -# Phytium Standalone SDK 2023-3-17 ChangeLog - -Change Log since 2023-03-17 - -- add pwm example - -# Phytium Standalone SDK 2023-3-13 ChangeLog - -Change Log since 2023-03-3 - -## third-party - -- delete redundant code about NO_SYS macro definition -- modify kconfig :delete config_LWIP_PORT_DEBUG_EN and add config_LWIP_USE_MEM__HEAP_DEBUG, which can manage parameters in memory debug mode -- modify LwipPortStop function : add dhcp_cleanup api and free emac after sys_thread_delete - -# Phytium Standalone SDK 2023-3-3 ChangeLog - -Change Log since 2023-03-3 - -# third-party - -- delete redundant code about NO_SYS macro definition -- modify kconfig :delete config_LWIP_PORT_DEBUG_EN and add config_LWIP_USE_MEM__HEAP_DEBUG, which can manage parameters in memory debug mode -- modify LwipPortStop function : add dhcp_cleanup api and free emac after sys_thread_delete - -# Phytium Standalone SDK 2023-3-3 ChangeLog - -Change Log since 2023-03-1 - -- add qspi example - -# Phytium Standalone SDK 2023-3-2 ChangeLog - -Change Log since 2023-03-01 - -- modify for drvier and arch de-couple - -## aarch && common - -- move felf, finterrupt and fsleep from common to arch, which are arch related -- move fkernel, fswap from arch to common, which are not arch related -- fix issue that f_printk have different reture type in implmentation and declaration, which is considered a warning for compiler - -## make - -- add drviver.mk, board.mk, arch.mk and lib.mk, to seprate src and inc to groups -- remove un-used packsource.mk -- support compiling with makefile depends -- support compiling drviver only without arch support - -## drivers - -- remove un-used reference to finterrupt.h -- add port folder to implment stub function of arch - -## tools - -- add tool export-sdk, demo the usage in export rt-thread bsp -- remove un-used export_rtt_bsp.py - -# Phytium Standalone SDK 2023-3-2 ChangeLog - -Change Log since 2023-03-01 - -## baremetal - -- add multi-display test example - -## driver - -- add multi-display driver and change the config - -## third-party - -- change the lvgl/port config and adapt to the multi-display config - -# Phytium Standalone SDK 2023-03-01 ChangeLog - -Change Log since 2023-03-01 - -## example - -- add can example, modify adc example - -## driver - -- modify can driver - -# Phytium Standalone SDK 2023-3-1 ChangeLog - -Change Log since 2023-02-20 - -## aarch - -- Modify AARCH32 and AARCH32 interrupt handler function - -## driver - -- fix bug of can id handler - -## example - -- add system/nested_interrupt test example -- adapt gic sgi test example - -# Phytium Standalone SDK 2023-02-27 ChangeLog - -Change Log since 2023-02-22 - -## example - -- Adapt the OpenAMP routine to e2000q/d and fix some errors - -## third party - -* Fixed a flag bit error in non-IPi mode - -# Phytium Standalone SDK 2023-02-24 ChangeLog - -Change Log since 2023-02-22 - -## aarch - -- move BOOT_WITH_FLUSH_CACHE code into CONFIG_USE_AARCH64_L1_TO_AARCH32 - -## make - -- add E2000/D2000 board config loader/saver - -## tools - -- rename 'make boot' as 'make deploy' and move to console.mk -- add config of pre-upload image name and folder - -## example - -- reduce dupliace 'make boot' and unused makefile target - -# Phytium Standalone SDK 2023-02-22 ChangeLog - -Change Log since 2023-02-21 - -## aarch - -- add config BOOT_WITH_FLUSH_CACHE and support flush dcache before boot image - -# Phytium Standalone SDK 2023-02-21 ChangeLog - -Change Log since 2023-02-21 - -## example - -- modified uart fifo test display - -# Phytium Standalone SDK 2023-02-21 ChangeLog - -Change Log since 2023-02-16 - -## third party - -- modify sfud - -# Phytium Standalone SDK 2023-02-16 ChangeLog - -Change Log since 2023-02-15 - -## example - -- add uart FIFO test example -- refresh picture of uart test example - -## driver - -- fix bug of uart tx_send - -# Phytium Standalone SDK 2023-02-15 ChangeLog - -Change Log since 2023-02-13 - -## example - -- add sfud_test example - -## third party - -- modify sfud - -# Phytium Standalone SDK 2023-02-09 ChangeLog - -Change Log since 2023-02-07 - -## board - -- add E2000 MHU module define - -## example - -- add scmi example project - -## driver - -- add scmi base protocol support -- add mhu of E2000 support -- add scmi sensor protocol support -- add scmi performance protocol support -- add scmi communication to SCP - -## doc - -- add fscmi_mhu.md file that introduce how to use scmi_mhu drivers - -# Phytium Standalone SDK 2023-02-07 ChangeLog - -## example - -- remove build_all in example -- set CONFIG_OUTPUT_BINARY as defaut ON -- modify USR_SRC_DIR in raw_api example to absolute path - -## make - -- remove build_all.mk -- add default_load.mk -- modify compiling output style -- add make flash_serial to support ymodem image flash - -## script - -- add script to support ymodem flash and serial access - -# Phytium Standalone SDK 2023-01-30 ChangeLog - -Change Log since 2023-01-10 - -## example - -- Adapt to tardigrade - -## driver - -- Adapt to tardigrade - -# Phytium Standalone SDK 2023-01-18 v1.0.0 ChangeLog - -Change Log since 2023-01-12 - -## README - -- add developer infomation -- install.py update including version infomation modified - -## example - -- all example xxxx_eg_configs update -- all example sdkconfig sdkconfig.h update -- get-start/hello_world readme update -- peripheral/dma/fgdma_async_memcpy/README.md update -- peripheral/gic/fgic_test/README.md update -- peripheral/ipc/fsemaphore_test/README.md update -- storage/spi_sfud/README.md update -- peripheral/media/lvgl_test/README.md update -- peripheral/media/media_test/README.md update -- system/exception_debug/main.c add stdio.h,delete fprintk.h -- peripheral/qspi/qspi_nor_flash add flash type info -- peripheral/qspi/qspi_nor_flash cmd qspi auto related codes modified - -# Phytium Standalone SDK 2023-01-16 ChangeLog - -Change Log since 2023-01-11 - -## example - -- e2000q adds nand test configuration - -# Phytium Standalone SDK 2023-01-11 ChangeLog - -Change Log since 2023-01-11 - -## example - -- add header for some .c .h files in example folder of media. - -## driver - -- add header for some .c .h files in driver folder of media - -## third-party - -- change folder of lvgl name to lvgl-8.3 -- add header for some .c .h files in driver folder of third-party/lvgl-8.3/port - -# Phytium Standalone SDK 2023-01-11 ChangeLog - -Change Log since 2023-01-09 - -## example - -- add header for some .c .h files in example folder. - -## driver - -- add header for some .c .h files in driver folder. - -# Phytium Standalone SDK 2023-01-09 ChangeLog - -Change Log since 2022-12-30 - -## drivers - -- eth/nand/mmc module to add comments - -## third-party - -- libmetal/backtrace/openamp module to add comments - -## example - -- nand/amp module to add comments - -## common - -- finterrupt module to add comments - -# Phytium Standalone SDK 2023-01-09 ChangeLog - -Change Log since 2023-01-09 - -## example - -- network/lwip_startup add func sys_now -- The data type of timer_base_cnt is unified from u64 to u32. -- LwipTestLoop func modified. add LinkDetectLoop(netif). - -# Phytium Standalone SDK 2023-01-04 ChangeLog - -Change Log since 2023-01-03 - -## example - -- add header for all .c .h files in example/network - -## common - -- add header for files (fsleep fprintf fpritk) .c .h in common/ - -## third-party - -- modify lwip-2.1.2/ports/kconfig -- modify lwip-2.1.2/kconfig -- add header for all .c .h files in lwip-2.1.2/ports - -# Phytium Standalone SDK 2022-12-30 ChangeLog - -Change Log since 2022-12-27 - -## drivers - -- update format for eth, usb, pcie, sdmmc - -# Phytium Standalone SDK 2022-12-30 ChangeLog - -Change Log since 2022-12-23 - -## drivers - -- modify format issues in gic/i2c/ipc/pin/sata/timer/watchdog - -## third-party - -- add sata fatfs_0.1.4 port -- delete fatfs_0.1.3 content -- delete storage/sata_fatfs content - -# Phytium Standalone SDK 2022-12-30 ChangeLog - -Change Log since 2022-12-22 - -## example - -- modify peripheral/ adc nand serial - -## drivers - -- modify adc nand serial - -## common - -- Modify the header file name to be consistent with the header macro definition -- Print interface range adjustment - -# Phytium Standalone SDK 2022-12-27 ChangeLog - -Change Log since 2022-12-21 - -## example - -- update print info for gic example - -## drivers - -- update format for can/gic/rtc -- add file declare for pin/spi/usb - -## third-party - -- update fatfs/littlefs/lwip/sdmmc file declare - -# Phytium Standalone SDK 2022-12-21 ChangeLog - -Change Log since 2022-12-20 - -## drivers - -- modify format issues in spi -- modify format issues in pwm - -## third-party - -- modify format issues in sfud -- modify format issues in littlefs - -# Phytium Standalone SDK 2022-12-20 ChangeLog - -Change Log since 2022-12-14 - -## driver - -- modify format issues in dma - -## example - -- Modify format issues in dma example - -# Phytium Standalone SDK 2022-12-14 ChangeLog - -Change Log since 2022-12-08 - -## aarch64 - -- modify FilePath name -- adjust macro definit and c++ support - -## arch/common - -- modify FilePath name -- adjust macro definit and c++ support - -## example - -- adjust "printf" and remove "FT_DEBUG_PRINT_*" -- modify baremetal/example/storage/qspi_sfud/inc/qspi_sfud_example.h macro definit - -## common - -- modify FilePath name -- adjust macro definit and c++ support -- adjust Print interface that will be use f_printk - -## README.md - -- modify chip description - -# Phytium Standalone SDK 2022-12-14 ChangeLog - -Change Log since 2022-12-08 - -## third-party - -- freemodbus-v16/port/port.h ,modify the #include "fcp15.h" ,only used in _aarch32_ -- freemodbus-v16/port/porttimer.c,change the TIMER_CLK_FREQ_HZ as FTIMER_CLK_FREQ_HZ -- freemodbus-v16/port/porttimer.c,change the TIMER_TACHO_IRQ_ID as FTIMER_TACHO_IRQ_NUM - -# Phytium Standalone SDK 2022-12-08 ChangeLog - -Change Log since 2022-12-05 - -## example - -- add LSuserShellNoWaitLoop api.This api can enables the NIC to receive data without blocking. -- modify file format all file adopt lf format. -- add network/lwip_startup -- add network/raw_api/tcp_client -- add network/raw_api/tcp_server -- add network/raw_api/udp_client -- add network/raw_api/udp_server -- delete lwip_tftpclient -- delete lwip_echo - -## third-party - -- add lwip_port.c && lwip_port.h -- Restructuring the directory lwip-2.1.2/ports - -# Phytium Standalone SDK 2022-12-06 ChangeLog - -Change Log since 2022-12-06 - -## drivers - -- Add media drivers ,including the dc & dp - -## example - -- Add media test to light the screen -- Add LVGL demo to test the benchmark - -## third-party - -- Add LVGL library - -## README - -- Add media config - -# Phytium Standalone SDK 2022-12-06 ChangeLog - -Change Log since 2022-12-02 - -## example - -- merge fatfs tests (usb/sdmmc/sdio) -- merge sdmmc tests (fsdmmc/fsdio) - -## driver - -- fix fsdio multi-block issue -- add data barrier to avoid optim issue (fsdio/fsdmmc) - -## third-party - -- add fatfs 0.1.4 and related configs -- port multi storage type with glue, therefore multi storage can be used at one binary image - -# Phytium Standalone SDK 2022-12-02 ChangeLog - -Change Log since 2022-12-01 - -## example - -- add freemodbus test example -- add readme file and E2000Q and E2000D configs - -## third-party - -- add freemodbus V1.6 -- modified protocol port file of serial -- add Kconfig to select peripheral and chip -- modified third-party.mk to add complie freemodbus files - -# Phytium Standalone SDK 2022-12-1 ChangeLog - -Change Log sinc 2022-11-28 - -## board - -- Unified parameter format in fparameters.h -- Move fearly_uart module to common folder - -# Phytium Standalone SDK 2022-11-04 v0.4.0 ChangeLog - -Change Log since 2022-11-01 - -## README - -- add gitee branch description - -## example - -- add E2000D/Q default config -- add test picture -- modified example description -- adjust example cmd -- update get-start\hello_world readme -- add get-start\hello_world fig indicating test result -- update qspi/rtc/wdt_test/sdmmc_cmd/qspi_sfud config for d2000 board -- update letter_shell readme -- update adc/pcie/qspi example for E2000 Demo board -- update lwip_echo/exception_debug/letter_shell_test/memory_pool_test/newlibc_test readme -- update exception_debug/letter_shell_test/memory_pool_test/newlibc_test examples for E2000 Q Demo board - -# Phytium Standalone SDK 2022-11-01 ChangeLog - -Change Log since 2022-10-26 - -## drivers - -- fix bug in get pin pull mode -- fix bug in gpio 4/5, irq num mistype - -## example - -- update spi/sdio/gpio/usb example for E2000 Q Demo board - -# Phytium Standalone SDK 2022-10-26 ChangeLog - -Change Log sinc 2022-10-21 - -## aarch - -- rename system file with f prefix - -## board - -- rename system file with f prefix - -## common - -- rename system file with f prefix - -## board - -- adopt to new system header file - -## tools - -- add script to export rt-trhead BSP from SDK -- adjust Kconfig blank line to support scons - -# Phytium Standalone SDK 2022-10-21 ChangeLog - -Change Log sinc 2022-10-15 - -## drivers - -- Optimize sata -- Optimize can - -## third-party - -- Adapt fatfs to e2000 demo board for sata - -## Phytium Standalone SDK 2022-10-10 ChangeLog - -Change Log since 2022-9-26 - -## drivers - -- support fxhci in E2000 -- remove support of fxhci with PCIe in FT2000/4 - -## example - -- add hid support for fxhci_host, demo keyboard input - -## third-party - -- remove usb disk port in fatfs - -## Phytium Standalone SDK 2022-9-26 ChangeLog - -Change Log since 2022-9-23 - -## drivers - -- Move some function from fpl011.c to fpl011_options.c -- Add RTS CTS DDMA option define - -## example - -- add flow control and ddma example - -# Phytium Standalone SDK 2022-9-23 ChangeLog - -Change Log since 2022-9-15 - -## drivers - -- Optimize can drivers interface adapter freertos - -## example - -- Modify can test example, add auto loopback test - -# Phytium Standalone SDK 2022-9-7 ChangeLog - -Change Log since 2022-08-30 - -## drivers - -- Add qspi boya flash quad read function -- Optimize qspi drivers interface adapter freertos -- Optimize sata drivers interface adapter freertos - -## example - -- Modify qspi, sfud, spiffs test example, add auto test -- Modify sata test example, add auto test - -Change Log since 2022-08-29 - -## drivers - -- repair timer_tacho error - -## example - -- Modify i2c test example, add auto test -- Modify timer_tacho test example, add auto test -- remove E2000 i2c_master_slave example -- move E2000 RTC example to i2c - -# Phytium Standalone SDK 2022-8-29 ChangeLog - -Change Log since 2022-08-24 - -## drivers - -- Add adc drivers interface adapter freertos - -## example - -- Modify adc test example, add auto test - -# Phytium Standalone SDK 2022-8-18 ChangeLog - -Change Log since 2022-08-16 - -## drivers - -- Add pwm drivers interface adapter freertos - -## example - -- Modify pwm test example, add auto test - -# Phytium Standalone SDK 2022-8-11 ChangeLog - -Change Log since 2022-8-16 - -## common - -- fix generic timer tick bug -- fix early trace issue: extra operation for early trace call - -## drivers - -- delete spi poll-by-byte API and related code -- makeup FGpioGetPinIrqSourceType API -- fix uart compile issue - -## third-party - -- sdmmc: merge fsdmmc_irq and fsdmmc_poll -- sdmmc: fix csd issue, which is reversed in FT20004/D2000 -- sdmmc: remove cmd-23 for FT20004/D2000, since they do not support SD-3.0 -- fastfs-sd: compatible with sdmmc modifications - -## example - -- modify fspim_loopback, support FT20004/D2000/E2000 -- modify fgpio_test, simplify code implementation -- add fddma_spi, test ok in E2000 - -# Phytium Standalone SDK 2022-8-16 ChangeLog - -Change Log since 2022-08-11 - -## board/e2000/q - -- add E2000Q mio pin function,board support - -## example - -- Modify i2c fi2c_master_slave example to support e2000q,add e2000q default configs -- Modify serial example to support e2000q,add e2000q default configs -- Modify rtc rtc_ds1339 example to support e2000q,add e2000q default configs -- Modify timer timer_tacho example to support e2000q,add e2000q default configs - -# Phytium Standalone SDK 2022-8-11 v0.3.1 ChangeLog - -Change Log since v0.3.0 - -## README - -- add E2000D/S description - -# Phytium Standalone SDK 2022-8-5 v0.3.0 ChangeLog - -Change Log since 2022-08-04 - -## drivers - -- Add and restruct some drivers adapter e2000 interface - -## example - -- Add and restruct some test examples adapter e2000 interface -- Modify the example documentations and default configs - -## third-party - -- Restruct adapter e2000 - -# Phytium Standalone SDK 2022-08-04 ChangeLog - -Change Log since 2022-08-03 - -## example - -- Modify the delay interface function in the XMAC example - -# Phytium Standalone SDK 2022-08-04 ChangeLog - -Change Log since 2022-08-01 - -## common - -- add e2000d sata controller -- add can2.0 and canfd test choose config -- delete ddma and littlefs examples - -# Phytium Standalone SDK 2022-08-03 ChangeLog - -Change Log since 2022-08-02 - -## common - -- add e2000d some configuration for interrupt - -# Phytium Standalone SDK 2022-08-03 ChangeLog - -Change Log since 2022-08-02 - -## drivers - -- fix fgpio FGpioGetPinIrqSourceType bug - -# Phytium Standalone SDK 2022-08-02 ChangeLog - -Change Log since 2022-07-31 - -## example - -- fix tftp bug - -# Phytium Standalone SDK 2022-07-31 ChangeLog - -Change Log since 2022-07-30 - -## board - -- fix ROARSE and FRAC delay mis-typing, replace with ROUGH and DELICATE, for E2000 and D2000/FT2004 -- add shortcut API to support set delay and get delay - -## driver - -- remove is_busy flag from fspim -- fix cpol and cpha mistype in fspim -- fix register value overlapping in fspim -- simplify fgpio API FGpioGetPinIrqSourceType - -## third-party - -- support BY25Q32BS and BY25Q64BS in sfud - -# Phytium Standalone SDK 2022-07-30 ChangeLog - -Change Log since 2022-7-29 - -## driver - -- fix fnand bug -- fix fxmac bug - -## third-party - -- add lwip_port some user setting parameters - -## example - -- Modify the lwip_echo example - -# Phytium Standalone SDK 2022-07-29 ChangeLog - -Change Log since 2022-07-18 - -# board - -- fix parameters pcie mem32 space, support for pcie-sata aarch32 read/write - -# driver - -- modify qspi, support spiffs read/write -- modify wdt, support get timeout remaining time -- fix pwm config, support pwm 0~15 channel configuration - -# third-party - -- fix sfud, spiffs, fatfs modules - -# Phytium Standalone SDK 2022-07-27 ChangeLog - -Change Log since 2022-07-14 - -## board - -- fix parameters sdio clk hz - -## driver - -- modify fsdio, support DMA and PIO read/write - -## third-party - -- modify sdmmc, support eMMc - -# Phytium Standalone SDK 2022-07-14 ChangeLog - -Change Log since 2022-7-05 - -## driver - -- add fnand controler -- add fxmac controler - -## example - -- add fnand_example - -## third-party - -- Port the fnand controller to lwip - -# Phytium Standalone SDK 2022-07-13 ChangeLog - -Change Log since 2022-6-20 - -# board - -- modify e2000 iomux set function -- modify some parameters - -# driver - -- modify qspi read and write driver for E2000, add register port read and write data -- modify sata controller and pcie-sata read and write driver for E2000 -- modify can driver for E2000, support for can and canfd -- modify pwm driver for E2000 -- modify adc driver for E2000, support for adc0-0 -- modify wdt driver for E2000 - -# example - -- modify qspi norflash example -- modify sata controller read and write to support E2000 -- modify can send and receive example -- modify adc example to collect voltage - -# Phytium Standalone SDK 2022-07-12 ChangeLog - -Change Log since 2022-07-05 - -# driver - -- move spi dma function to fspim_dma -- modify gdma api - -# board - -- remove parameters of gdma1 - -# example - -- modify fgdma and fddma example - -# Phytium Standalone SDK 2022-07-05 ChangeLog - -Change Log since 2022-6-30 - -# board - -- modify e2000 fparameters_comm.h and add set mio function - -# driver - -- add fi2c configs and init things -- create Mio driver for E2000 -- modify uart configs to support E2000 - -# example - -- add RTC1339 example -- modify i2c/fi2c_master_slave to support E2000 -- modify serial/fpl011_test to support E2000 -- modify timer_tacho adapt to new iopad modifications - -# Phytium Standalone SDK 2022-06-30 ChangeLog - -Change Log since 2022-6-28 - -# board - -- modify GPIO parameters in FT2000/4 and D2000 -- add iopad configs for spi 0~3 - -# driver - -- fix bug that spi busy status mis-set in interrupt mode -- add cs-set function for E2000 - -# third-party - -- modify sfud fspim port to support cs-set - -# example - -- modify fspim_loopback and tested in E2000 -- modify spi_sfud and tested in E2000 -- modify littlefs_test and tested in E2000 -- modify spiffs_test and tested in E2000 - -# Phytium Standalone SDK 2022-06-28 ChangeLog - -Change Log since 2022-6-20 - -# board - -- merge common parameters / early uart implmenetation of E2000 D/Q/S -- implment all io pad definition -- add iopad function to set func, pull, drive strength at one call - -# driver - -- update fgpio for E2000 - -# Phytium Standalone SDK 2022-06-20 ChangeLog - -Change Log since 2022-6-16 - -## arch - -- fix aarch32 Bss clear bug - -# Phytium Standalone SDK 2022-6-16 v0.2.0 ChangeLog - -Change Log since 2022-5-30 - -## drivers - -- Restruct gmac driver -- adapt to freertos lwip function - -## example - -- Restruct lwip_echo example - -## third-party - -- modify lwip config - -# Phytium Standalone SDK 2022-06-15 ChangeLog - -Change Log since 2022-6-14 - -## drivers - -- add timer_tacho driver -- modified fi2c_g.c to support e2000 - -## example - -- add timer example -- add tacho example - -## board - -- Modify fparameters.h to support timer_tacho and i2c - -# Phytium Standalone SDK 2022-06-14 ChangeLog - -Change Log since 2022-6-10 - -## arch - -- Add aarch32/aarch64 trace uart in assembly -- Add trace stub function in bootup process - -## example - -- Add example to demo exception trap - -## board - -- Modify fparameters.h to support assembly - -# Phytium Standalone SDK 2022-6-09 ChangeLog - -Change Log since 2022-6-10 - -## drivers - -- Add nand driver - -## example - -- Add nand flash example - -## arch - -- clear HCR_EL2.TGE -- AARCH64 enable irq exception - -## board - -- FPinSetPull mistype - -## README - -- remove Linux arm aarch64 development environment - -# Phytium Standalone SDK 2022-6-10 ChangeLog - -Change Log since 2022-5-24 - -## drivers - -- Restruct SDIO driver - -## example - -- Delete fsdio_probe example -- Add fsdio_cmd example - -## third-party - -- port fsdio to sdmmc freamwork -- add shell title for E2000 D/Q/S -- add prompt info for building E2000 D/Q/S images - -# Phytium Standalone SDK 2022-5-24 ChangeLog - -Change Log since 2022-5-18 - -## drivers - -- Add Semaphore driver -- Restruct GDMA driver - -## example - -- Restruct GDMA async memcpy example -- Add Semaphore lock/unlock example - -## common - -- Change interrupt source trace to DEBUG level -- Fix memory-pool bug: not set is_ready flag when deinit memory-pool -- Add FASSERT_STATIC to check structure size - -# Phytium Standalone SDK 2022-5-18 ChangeLog - -Change Log since 2022-5-7 - -## drivers - -- Restruct can driver -- Add pwm driver to support E2000 -- Add adc driver to support E2000 - -## example - -- Add can send and recv test -- Add pwm test -- Add adc test - -## doc - -- Add fcan.md - -# Phytium Standalone SDK 2022-5-13 ChangeLog - -Change Log since 2022-5-5 - -## drivers - -- Add DDMA driver -- Modify SPIM driver to support E2000 -- Modify GPIO driver to support E2000 - -## example - -- Add SPI + DDMA loopback test -- Modify SPI loopback test to support E2000 - -## common - -- Add interrupt source trace -- Skip l3 cache operations when it disabled - -## doc - -- Update code_convention.md -- Update PR check list - -# Phytium Standalone SDK 2022-5-5 ChangeLog - -Change Log since 2022-4-15 - -## drivers - -- Slave interrupt handle modified - -## example - -- Change the command interface -- Add virtual eeprom -- Simulate master-slave communication at D2000 - -# Phytium Standalone SDK 2022-4-22 ChangeLog - -Change Log since 2022-4-15 - -## drivers - -- Restruct I2C driver -- modified master poll write read -- add master intr poll write read - -## example - -- Restruct fi2c_eeprom example -- Solve the problem of reading across pages -- complete eeprom page alignment - -# Phytium Standalone SDK 2022-4-20 ChangeLog - -Change Log since 2022-4-11 - -## drivers - -- Restruct gmac driver -- Restruct xmac driver - -## example - -- Restruct ipv4 test -- Add ipv4 dhcp test -- Add ipv6 test - -## third-party - -- Add mac lwip port layer to support gmac and xmac -- Restruct gmac and xmac lwip interface - -# Phytium Standalone SDK 2022-4-15 ChangeLog - -Change Log since 2022-4-8 - -## drivers - -- Restruct GIC driver - -## common - -- Restruct Interrupt code - -## arch - -- aarch32/64 support for interrupt preemption - -# Phytium Standalone SDK 2022-4-14 ChangeLog - -Change Log since 2022-4-8 - -## drivers - -- support test mode in fspim -- support tx and rx run at the same transfer api call - -## example - -- add fspim loopback test -- add fspim sfud test -- add spiffs filesystem test -- add littlefs filesystem test - -## third-party - -- add spiffs -- add littlefs, support littlefs dry-run - -## common - -- modify the way debug trace to have src file + src line tag - -# Phytium Standalone SDK 2022-4-8 v0.1.17 ChangeLog - -Change Log since 2022-2-18 - -- update openamp function -- update assert method -- re-construct fgpio, support gpio interrupt -- re-construct qspi norflash and watchdog driver - -# Phytium Standalone SDK 2022-3-31 ChangeLog - -## drivers - -- Restruct watch dog driver, add some additional functions - -## example - -- Restruct example of wdt test -- Improve manual documentation - -# Phytium Standalone SDK 2022-3-28 ChangeLog - -## drivers - -- Restruct qspi norflash driver, add some additional functions -- Adapt to different norflash manufacturers - -## example - -- re-organize example of qspi test, broken down into peripheral and storage - -# Phytium Standalone SDK 2022-3-25 ChangeLog - -Chang Log since 2022-3-18 - -## driver - -- re-construct fgpio, support gpio interrupt -- re-construct fioctrl and fiopad - -## example - -- add fgpio-irq to demo usage of gpio interrupt -- add fgpio-softpwm to demo generate pwm with gpio -- add fioctrl-test to demo usage of ioctrl -- add fiopad-test to demo usage of iopad - -## common - -- add e2000 s/d/q default configs -- support print source file and source code line in FT_DEBUG -- convert config item DON_T_BINARY_OUTPUT to OUTPUT_BINARY - -# Phytium Standalone SDK 2022-3-18 ChangeLog - -Chang Log since 2022-2-18 - -## script - -- Support SDK version -- Move uninstall.py to unsetup.py - -## common - -- Unify assert api with FASSERT and FASSERT_MSG - -## third-party - -- Letter-shell: add SHELL_EXPORT_EXIT_MSG and SHELL_EXPORT_EXIT_MSG to support exit msg print when return from cmd rountine - -## tools - -- Remove build_all_app and intergrate_test_app - -# Phytium Standalone SDK 2022-3-09 ChangeLog - -Change Log since 2022-2-18 - -## arch - -- Modified some parameters in the MMU and added FSetTlbAttributes interfaces - -## third-party - -- Add OpenAMP library - -## example - -- Add OpenAMP example - -# Phytium Standalone SDK 2022-2-18 v0.1.16 ChangeLog - -Change Log since 2022-2-15 - -- replace LICENSE with Phytium Public License 1.0 (PPL-1.0) -- update file COPYRIGHT declaration with PPL-1.0 - -# Phytium Standalone SDK 2022-2-15 ChangeLog - -Change Log since 2022-2-7 - -## drivers - -- add fusb driver -- add fxhci driver - -## example - -- add fxhci-pcie-usb example to support usb device discovery -- add fusbdisk example to port fatfs for usb mass storage device - -# Phytium Standalone SDK 2022-2-10 ChangeLog - -Change Log since 2021-02-7 - -## arch - -- Modifying Some variable definitions in cache - -## common - -- Modify the function interface in the _cpu.c document to change the core content not to respond when the work core does not support it -- Fixing interrupt.c initialization problems - -## gicv3 - -- Modifying cpu interface processing of multi-core interfaces in gicv3 - -## example - -- Modifying the handling of multi-core function interfaces in Libmetal - -## board - -- Add a new cpu directory - -# Phytium Standalone SDK 2022-2-07 ChangeLog - -Change Log since 2021-12-10 - -## drivers - -- add sata driver -- add fpcie driver - -## example - -- add sata test example -- add sata fatfs test example -- add pcie probe test example - -# Phytium Standalone SDK 2021-12-10 v0.1.15 ChangeLog - -Change Log since 2021-12-07 - -## third-party - -- fix get ocr timeout in ft2004 -- rename assert and delay macro -- rename ymodem - -## example - -- unify example makefile setting - -# Phytium Standalone SDK 2021-12-07 ChangeLog - -Change Log since 2021-12-6 - -## third-party - -- add ymodem transfer - -## example - -- add rtc module test function - -# Phytium Standalone SDK 2021-12-6 ChangeLog - -Change Log since 2021-11-29 - -## drivers - -1. re-construct fsdio and fsdmmc - -## example - -1. add memory test example -2. add fsdio probe example -3. add fsdmmc probe example -4. add fsdmmc cmd example -5. add fsdmmc fatfs example - -## common - -1. add slink fslink_list.c -2. add memory pool fmemory_pool.c - -## configs - -1. update default configs for all platform - -## third-party - -1. re-construct sdmmc port in poll and irq -2. add tlfs to support fmemory_pool.c - -## script - -1. modify serial_trans.py to improve cmd-trans in D2000 - -# Phytium Standalone SDK 2021-11-29 ChangeLog - -Change Log since 2021-11-25 - -## arch - -1. Add stack initialization -2. Locate the final mode in SVC mode -3. Initialize the BSS and SBSS segments -4. Copy data to the RAM -5. Enable the FPU function -6. Fpu is pushed when irq is abnormal -7. Other exceptions are treated as error exceptions - -## ld - -1. Add stack parameter Settings for different exceptions -2. Rename variables in different sections - -## example - -1. Letter_shell test modifies the makefile - -# Phytium Standalone SDK 2021-11-25 ChangeLog - -Change Log since v0.1.14 - -## third-party - -- add sfud qspi test -- restruct sfud_port.c, add spi and qspi probe - -## drivers - -- restruct qspi norflash driver - -## example - -- re-organize example of qspi test -- make spi and qspi compatible in sfud - -# Phytium Standalone SDK 2021-11-23 ChangeLog - -Change Log since v0.1.13 - -## third-party - -- add coremark 1.01 for core performace test -- add llcbench for cache performance test -- add memperf for memory performace test -- add unity-2.5.2 to support unit test - -## drivers - -- rename fxmac according to name convention -- update user interface of frtc - -## example - -- re-organize example with category, e.g. benchmark, eth -- add catche_bench、cormark_bench and memperf_bench - -## tools - -- add intergrate_test_app and unit_test_app to demo usage of two - -# Phytium Standalone SDK 2021-11-17 ChangeLog - -Change Log since v0.1.12 - -## aarch64/gcc - -- remodify boot.S -- remodify crt0.S -- remodify vector.S - -## aarch64 - -- remodify exception.c -- remodify mmu.c -- add l3cache.c - -## board - -- remodify parameters.c - -# Phytium Standalone SDK v0.1.12 ChangeLog - -Change Log since v0.1.11, 2021.11.15 - -## example - -- add fgmac link example -- add fgmac lwip echo-ping example -- add fgmac lwip tftp example - -## driver - -- re-construct fgmac driver - -## third-party - -- modify port of fgmac lwip -- add fatfs, port for ramdisk - -# Phytium Standalone SDK v0.1.11 ChangeLog - -Change Log since v0.1.10, 2021.11.9 - -## example - -- add fspi nor flash example - -## driver - -- re-construct fspim driver - -## script - -- add flash_boot.mk, support make flash monitor - -## doc - -- add fspim driver api reference -- add sfud reference - -# Phytium Standalone SDK v0.1.10 ChangeLog - -Change Log since v0.1.9, 2021.11.5 - -## example - -- add rtc driver and test example - -## driver - -- re-construct wdt drivers -- add rtc driver - -## doc - -- add wdt driver api reference -- add rtc driver api reference - -# Phytium Standalone SDK v0.1.9 ChangeLog - -Change Log since v0.1.8, 2021.11.1 - -## example - -- add uart test example - -## driver - -- re-construct uart fpl011 drivers - -## doc - -- add fpl011 driver api reference -- add uart test readme - -## arch - -- add L3 cache disable -- modify the savefloatRegister location -- add - -# Phytium Standalone SDK v0.1.8 ChangeLog - -Change Log since v0.1.7, 2021.11.1 - -## example - -- add i2c eeprom example -- add i2c slave example - -## driver - -- re-construct i2c drivers -- support i2c slave - -## tools - -- add test utility to build example images for all supported platform - -## script - -- add build_all.mk to support test utility -- support make ldconfig and make setconfig - -## doc - -- add i2c driver api refernce -- add i2c slave & i2c eeprom readme -- add driver template -- add more design figure *.dio - -## bug-fix - -- fix CONFIG_USE_LIBC bug, which is converted to CONFIG_USE_G_LIBC in all example - -# Phytium Standalone SDK v0.1.7 ChangeLog - -Change Log since v0.1.6, 2021.10.20 - -- re-organize readme and docs - -# Phytium Standalone SDK v0.1.6 ChangeLog - -Change Log since v0.1.5, 2021.10.19 - -## example - -- add project to demo usage of newlib - -## script - -- add `PHYTIUM_DEV_PATH` for all platforms -- install cross tool to `PHYTIUM_DEV_PATH` -- update GNU CC version to 10.3.1-2021.07 -- modify CC libc.a for printf issue -- merge newlib to CC tool - -# Phytium Standalone SDK v0.1.5 ChangeLog - -Change Log since v0.1.4, 2021.10.14 - -## example - -- add project template to support Windows10 + mingw64 developing - -## script - -- modify install.py to support Windows10 + mingw64 -- add Windows10 cmd script to access mingw64 shell and Windows tftpd tool -- modify compiler.mk to support Windows10 + mingw64 -- add uninstall.py to support uninstall sdk - -# Phytium Standalone SDK v0.1.4 ChangeLog - -Change Log since v0.1.3, 2021.10.13 - -## driver - -- add iomux for E2000 -- add nandflash driver for E2000 - -## third-party - -- add yaffs2 for ramsim - -## lib - -- Modify the standard system call implementation - -## common - -- add printf for trap functions - -# Phytium Standalone SDK v0.1.3 ChangeLog - -Change Log since v0.1.2, 2021.10.08 - -## drivers - -- modify sdmmc drivers for FT2000/4 and D2000 to adopt sdmmc cmd component -- add sdio driver for E2000 - -## example - -- add mmc cmds for overall_test example - -## third-party - -- modify letter shell to get reture result -- add sdmmc cmd component - -## script - -- add install.py as alternative install script - -# Phytium Standalone SDK v0.1.2 ChangeLog - -Change Log since v0.1.1, 2021.9.24 - -## drivers - -- modify gmac_dma driver adapting to freertos lwip - -# Phytium Standalone SDK v0.1.1 ChangeLog - -Change Log since v0.1.0 - -## drivers - -- support watchdog timer - -## baremetal/example - -- add wdt_test example - -# Phytium Standalone SDK v0.1.0 ChangeLog - -Change Log since v0.0.11 - -## drivers - -- support gicv3 init with multiple cores -- support watchdog timer - -## baremetal/example - -- add letter shell test to demo application of shell -- add libmetal test to demo core0 - core1 commuication with libmetal support - -## third-party - -- add letter shell 3.1 -- add libmetal 1.0.0 - -## tools - -- include elfio tools - -## script - -- support linkscript config with sdkconfig.h - -# Phytium Standalone SDK v0.0.11 ChangeLog - -Change Log since v0.0.10 - -## drivers - -- add f_gmac for FT2000-4 and D2000 -- support generic timer tick -- unify api interface for cache operation - -## baremetal/example - -- add gmac_test example to support gmac 'recv intrrupt' -- add lwip_test example to support 'host ping' - -## third-party - -- port lwip 2.1.2 for FT2000-4 and D2000 with f_gmac - -# Phytium Standalone SDK v0.0.10 ChangeLog - -Change Log since v0.0.9 - -## drivers - -- add gdma for E2000 - -## baremetal/example - -- add gdma example for aarch32/aarch64 -- gdma example surpport direct and bdl mode - -# Phytium Standalone SDK v0.0.9 ChangeLog - -Change Log since v0.0.8 - -## drivers - -- add pcie for FT200-4 - -## board - -- merge D2000 board - -## baremetal/example - -- add pcie example for aarch32/aarch64 -- pcie example surpport dma and mmio - -# Phytium Standalone SDK v0.0.8 ChangeLog - -Change Log since v0.0.7 - -## board - -- support D2000 -- add D2000 AARCH32/AARCH64 deconfigs - -## drivers - -- add sdci for D2000/FT2000-4 -- add mci for E2000 (to do) -- fix timer & tacho review issues - -## make - -- support switch platform - -Change Log sinc v0.0.6 - -## board - -- add ft2004 io mux parameters - -## common - -- support delay sleep by ms and us - -## configs - -- add default configs for supported platform - -## drivers - -- add i2c drivers -- add qspi drivers -- add timer & tacho drivers - -## example - -- add i2c eeprom master example -- add qspi nor flash example -- add timer example for e2000 - -# Phytium Standalone SDK v0.0.6 ChangeLog - -Change Log sinc v0.0.5 - -## driver - -- add canfd -- xmac -- spi - -## baremetal/example - -- add can_test -- add spi_test - -# Phytium Standalone SDK v0.0.5 ChangeLog - -Change Log sinc v0.0.4 - -## BSP - -- add board to support platforms -- support iomux, gpio and eth drivers - -## Scripts - -- update install.sh - -## Others - -- add git attr to fix cr/lr issue - -# Phytium Standalone SDK v0.0.4 ChangeLog - -Change Log sinc v0.0.2 - -## BSP - -- support Rt-Thread 32 bit single and smp Mode -- Support Rt-Thread 64 bit single Mode -- 32bit , 64 bit baremetal support libc -- 32bit , 64 bit support fpu - -## baremetal/example - -- aarch32_math_test - -## tools - -- add sdkconfig.h header - -# Phytium Standalone SDK v0.0.2 ChangeLog - -Change Log sinc v0.0.1 - -## BSP - -- support SYS Mode for Freertos -- support OS defined Irq/Swi handler for FreeRTOS - -## Doc - -- add checklist for pre-release check -- update Readme - -Change Log since init - -## Baremetal - -### add aarch32 & aarch64 example - -- aarch32_hello_world: hello world run in ft2000-4/e2000 -- aarch32_qemu_debug: hello world and step debug in qemu -- aarch32_timer_irq: run with generic timer tick irq -- aarch32_cache_mmu_wr: run with cache (L1/L2/L3) and mmu enabled -- aarch32_uart_irq: run with uart tx and rx irq -- aarch64_uart_irq_send: run with uart tx and rx irq in aarch64 - -## BSP - -- support armv8 aarch32/aarch64 -- support platform FT2000-4/E2000/Qemu-AARCH32 -- support cache and mmu -- support irq, system trap -- support generic timer -- support assert and debug trace -- support early uart print during system init -- support system error coding - -## Lib - -- support c standard lib -- support c no standard lib -- add kconfiglib to support menuconfig - -## Make - -- add basic compile scripts, 'complier.mk' 'ld.mk' -- add compile info print script, 'buildinfo.mk' -- add menuconfig setting script, 'preconfig.mk' -- add source code export script, 'packsource.mk' - -## Scripts - -- add sdk install and register script, 'export.sh' -- add utility script diff --git a/bsp/phytium/libraries/standalone/doc/design/baremetal.dio b/bsp/phytium/libraries/standalone/doc/design/baremetal.dio deleted file mode 100644 index 34341657ca..0000000000 --- a/bsp/phytium/libraries/standalone/doc/design/baremetal.dio +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/doc/design/build.dio b/bsp/phytium/libraries/standalone/doc/design/build.dio deleted file mode 100644 index 080a9d64b6..0000000000 --- a/bsp/phytium/libraries/standalone/doc/design/build.dio +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/doc/design/driver.dio b/bsp/phytium/libraries/standalone/doc/design/driver.dio deleted file mode 100644 index 0c0205c4c5..0000000000 --- a/bsp/phytium/libraries/standalone/doc/design/driver.dio +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/doc/design/framework.dio b/bsp/phytium/libraries/standalone/doc/design/framework.dio deleted file mode 100644 index 0e48de454e..0000000000 --- a/bsp/phytium/libraries/standalone/doc/design/framework.dio +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/doc/design/freertos_system.dio b/bsp/phytium/libraries/standalone/doc/design/freertos_system.dio deleted file mode 100644 index ee395bec82..0000000000 --- a/bsp/phytium/libraries/standalone/doc/design/freertos_system.dio +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/doc/design/freertos_system.png b/bsp/phytium/libraries/standalone/doc/design/freertos_system.png deleted file mode 100644 index ed6d47af0d..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/design/freertos_system.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/design/freertos_system_deps.dio b/bsp/phytium/libraries/standalone/doc/design/freertos_system_deps.dio deleted file mode 100644 index e1424158df..0000000000 --- a/bsp/phytium/libraries/standalone/doc/design/freertos_system_deps.dio +++ /dev/null @@ -1,202 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/doc/design/freertos_system_deps.png b/bsp/phytium/libraries/standalone/doc/design/freertos_system_deps.png deleted file mode 100644 index 5e85f2ac14..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/design/freertos_system_deps.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/design/middleware.dio b/bsp/phytium/libraries/standalone/doc/design/middleware.dio deleted file mode 100644 index ecfe1e64b4..0000000000 --- a/bsp/phytium/libraries/standalone/doc/design/middleware.dio +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/doc/design/platform_test.dio b/bsp/phytium/libraries/standalone/doc/design/platform_test.dio deleted file mode 100644 index a557546310..0000000000 --- a/bsp/phytium/libraries/standalone/doc/design/platform_test.dio +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/doc/design/system.dio b/bsp/phytium/libraries/standalone/doc/design/system.dio deleted file mode 100644 index 1dc4317445..0000000000 --- a/bsp/phytium/libraries/standalone/doc/design/system.dio +++ /dev/null @@ -1,253 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/doc/design/system.png b/bsp/phytium/libraries/standalone/doc/design/system.png deleted file mode 100644 index a6919e5ff1..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/design/system.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/design/system_2.dio b/bsp/phytium/libraries/standalone/doc/design/system_2.dio deleted file mode 100644 index 223e2bf0d6..0000000000 --- a/bsp/phytium/libraries/standalone/doc/design/system_2.dio +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/doc/design/system_2.png b/bsp/phytium/libraries/standalone/doc/design/system_2.png deleted file mode 100644 index 33d0803e34..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/design/system_2.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/design/system_2_deps.dio b/bsp/phytium/libraries/standalone/doc/design/system_2_deps.dio deleted file mode 100644 index 7e5258f8f9..0000000000 --- a/bsp/phytium/libraries/standalone/doc/design/system_2_deps.dio +++ /dev/null @@ -1,229 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/doc/design/system_2_deps.png b/bsp/phytium/libraries/standalone/doc/design/system_2_deps.png deleted file mode 100644 index dbc5e89b2f..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/design/system_2_deps.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/driver_template/foox_hw.c b/bsp/phytium/libraries/standalone/doc/driver_template/foox_hw.c deleted file mode 100644 index 3020d9173e..0000000000 --- a/bsp/phytium/libraries/standalone/doc/driver_template/foox_hw.c +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: foox_hw.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:24:47 - * Description:  This file is for - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - */ - - -#include "foox_hw.h" -#include "fooxx.h" - - -/***************************** Include Files *********************************/ - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ - -void FooxHwWrite(uintptr base, char byte) -{ - -} - -char FooxHwRead(uintptr base) -{ - -} - -void FooxxReset(Fooxx *instance_p) -{ - -} diff --git a/bsp/phytium/libraries/standalone/doc/driver_template/foox_hw.h b/bsp/phytium/libraries/standalone/doc/driver_template/foox_hw.h deleted file mode 100644 index 13748650f7..0000000000 --- a/bsp/phytium/libraries/standalone/doc/driver_template/foox_hw.h +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: foox_hw.h - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:24:52 - * Description:  This file is for - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - */ - - -#ifndef DRIVERS_XXXX_FOOXX_HW_H -#define DRIVERS_XXXX_FOOXX_HW_H - - -/* - 传入模块基地址,不能复杂结构体 -- hardware interface of device || low-level driver function prototypes - -- 包括驱动寄存器参数和low-level操作定义 -1. 定义寄存器偏移 -2. 对上提供该模块寄存器操作的接口 -3. 一些简单外设提供直接操作接口 -4. 可以定义一些状态的接口,用于响应驱动状态的变化 - -note: 本文件不能引用fooxx.h -*/ - -#ifdef __cplusplus -extern "C" -{ -#endif -/***************************** Include Files *********************************/ - -#include "fparameters.h" -#include "fio.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/** @name Register Map - * - * Register offsets from the base address of an SD device. - * @{ - */ - -#define FOOXX_XX_OFFSET - -/** @name FOOXX_XX_OFFSET Register - */ - -#define FOOXX_XX_STATE - - -#define FOOXX_READ_REG32(addr, reg_offset) FtIn32((addr) + (u32)(reg_offset)) -#define FOOXX_WRITE_REG32(addr, reg_offset, reg_value) FtOut32((addr) + (u32)(reg_offset), (u32)(reg_value)) - - -/************************** Function Prototypes ******************************/ -void FooxHwWrite(uintptr base, char byte); - -char FooxHwRead(uintptr base); - -#ifdef __cplusplus -} -#endif - diff --git a/bsp/phytium/libraries/standalone/doc/driver_template/foox_options.c b/bsp/phytium/libraries/standalone/doc/driver_template/foox_options.c deleted file mode 100644 index 6e132fe9a8..0000000000 --- a/bsp/phytium/libraries/standalone/doc/driver_template/foox_options.c +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: foox_options.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:24:58 - * Description:  This file is for - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - */ - - -/* - - The implementation of the options functions for the driver. - - 用户选项实现 - 1. 速度参数配置 - 2. 工作模式参数 - 3. fifo功能 - 1. 深度 - 2. 使能 - - 用户常用的功能寄存器读写动作,建议通过option提供快捷方式 - -*/ - -/***************************** Include Files *********************************/ - -#include "fooxx.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Variable Definitions *****************************/ - -/************************** Function Prototypes ******************************/ - - - -u32 FXxxGetOptions(FXxx *instance_p) -{ - -} - -u32 FXxxSetOptions(FXxx *instance_p, u32 options) -{ - -} - -u32 FXxxSetData(FXxx *instance_p, void *data_struct) -{ - -} - -u32 FXxxGetOptions(FXxx *instance_p, void *data_struct) -{ - -} - - diff --git a/bsp/phytium/libraries/standalone/doc/driver_template/foox_role.c b/bsp/phytium/libraries/standalone/doc/driver_template/foox_role.c deleted file mode 100644 index b3ed3ab919..0000000000 --- a/bsp/phytium/libraries/standalone/doc/driver_template/foox_role.c +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: foox_role.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:25:03 - * Description:  This file is for - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - */ - - -/* - - 一些驱动模块,直接操作硬件的I/O接口,无法实现有意义的操作,此时需要针对中间件或者用户使用习惯设计此模块 (i2c,nand,eth) - - 部分场景适用, 分角色的 I/O 操作 - - 此模块的函数原型,在fooxx.h 中声明一次,方便用户或者中间件层调用 - -*/ - - -/***************************** Include Files *********************************/ - -#include "fio.h" -#include "foox_hw.h" -#include "fooxx.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ - -/************************** Variable Definitions *****************************/ - -/*****************************************************************************/ - diff --git a/bsp/phytium/libraries/standalone/doc/driver_template/fooxx.c b/bsp/phytium/libraries/standalone/doc/driver_template/fooxx.c deleted file mode 100644 index 5efc3ab35b..0000000000 --- a/bsp/phytium/libraries/standalone/doc/driver_template/fooxx.c +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fooxx.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:25:29 - * Description:  This file is for - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - */ - - -/***************************** Include Files *********************************/ - -#include "fio.h" -#include "ferror_code.h" -#include "ftypes.h" -#include "foox_hw.h" -#include "fooxx.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ - -/************************** Variable Definitions *****************************/ - -/*****************************************************************************/ - -/* 此文件主要为了完成用户对外接口,用户可以使用这些接口直接开始工作 */ - -/* - 包括用户API的定义和实现 - - 同时包含必要的OPTION方法,方便用户进行配置 - - 如果驱动可以直接进行I/O操作,在此源文件下可以将API 进行实现 */ - -/** - * @name: FooxxCfgInitialize - * @msg: Initializes a specific instance such that it is ready to be used. - * @param {Fooxx} *instance_p is a pointer to the driver instance. - * @param {FooxxConfig} *config_p is a reference to a structure containing information - * about a specific driver. - * @return SUCCESS if initialization was successful - * ERROR - */ -FError FooxxCfgInitialize(Fooxx *instance_p, FooxxConfig *config_p) -{ - -} - -/* - 包括用户API的定义和实现 - - 同时包含必要的OPTION方法,方便用户进行配置 - - 如果驱动可以直接进行I/O操作,在此源文件下可以将API 进行实现 */ \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/doc/driver_template/fooxx.h b/bsp/phytium/libraries/standalone/doc/driver_template/fooxx.h deleted file mode 100644 index 023bbfbe31..0000000000 --- a/bsp/phytium/libraries/standalone/doc/driver_template/fooxx.h +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fooxx.h - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:25:35 - * Description:  This file is for - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - */ - - -#ifndef DRIVERS_模块名_FOOXX_H -#define DRIVERS_模块名_FOOXX_H - -#ifdef __cplusplus -extern "C" -{ -#endif - -/***************************** Include Files *********************************/ - -#include "ftypes.h" -#include "fassert.h" - -/************************** Constant Definitions *****************************/ - -/* Configuration options */ -#define FOOXX_OPTION_XX - -/* Operational Mode */ - -#define FOOXX_OPER_MODE_XX - -/**************************** Type Definitions *******************************/ - -/** - * This typedef contains configuration information for the device. - */ -typedef struct -{ - u32 instance_id; /**< Device instance id */ - uintptr base_addr; /**< Device base address */ -} FooxxConfig; - -/** - * This typedef contains driver instance data. The user is required to allocate a - * variable of this type for every device in the system. A pointer - * to a variable of this type is then passed to the driver API functions. - */ -typedef struct -{ - FooxxConfig config; /**< Current active configs */ - u32 is_ready; /**< Device is initialized and ready */ -} Fooxx; /**< Device instance */ - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ -/** - * @name: FXxxLookupConfig - * @msg: Get the device instance default configure - * @return {*} - * @param {u32} instance_id - */ -const FooxxConfig *FXxxLookupConfig(u32 instance_id); - -/* - * @name: FooxxCfgInitialize - * @msg: Initializes a specific instance such that it is ready to be used. - * @param {Fooxx} *instance_p is a pointer to the driver instance. - * @param {FooxxConfig} *config_p is a reference to a structure containing information - * about a specific driver. - * @return SUCCESS if initialization was successful - * ERROR - */ -FError FooxxCfgInitialize(Fooxx *instance_p, const FooxxConfig *cofig_p); - -/** - * @name: FooxxDeInitialize - * @msg: DeInitialization function for the device instance - * @return {*} - * @param {Fooxx} *instance_p - */ -void FooxxDeInitialize(Fooxx *instance_p); - -#ifdef __cplusplus -} -#endif - - -#endif diff --git a/bsp/phytium/libraries/standalone/doc/driver_template/fooxx_g.c b/bsp/phytium/libraries/standalone/doc/driver_template/fooxx_g.c deleted file mode 100644 index a5ce6f65ae..0000000000 --- a/bsp/phytium/libraries/standalone/doc/driver_template/fooxx_g.c +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fooxx_g.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:25:09 - * Description:  This file is for - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - */ - - -/* - This file contains a configuration table that specifies the configuration -- 驱动全局变量定义,包括静态配置参数 */ - -/***************************** Include Files *********************************/ - -#include "ftypes.h" -#include "fparameters.h" -#include "fooxx.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ - -/************************** Variable Definitions *****************************/ - -const FooxxConfig FOOXX_CONFIG_TBL[NUM] = -{ - { - .instance_id = 0, /* Id of device*/ - .base_address = FOOXX_BASE, - }, -}; - - -/*****************************************************************************/ diff --git a/bsp/phytium/libraries/standalone/doc/driver_template/fooxx_sinit.c b/bsp/phytium/libraries/standalone/doc/driver_template/fooxx_sinit.c deleted file mode 100644 index 2fbe421f64..0000000000 --- a/bsp/phytium/libraries/standalone/doc/driver_template/fooxx_sinit.c +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fooxx_sinit.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:25:15 - * Description:  This file is for - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - */ - - - -/* - This file contains the implementation of driver's static initialization functionality. -- 驱动静态初始化 */ - -/***************************** Include Files *********************************/ - -#include "ftypes.h" -#include "fparameters.h" -#include "fooxx.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Variable Definitions *****************************/ - -extern const FooxxConfig FOOXX_CONFIG_TBL[NUM]; - -/************************** Function Prototypes ******************************/ -const FooxxConfig *FooxxLookupConfig(u32 instance_id) -{ - const FooxxConfig *ptr = NULL; - u32 index; - - for (index = 0; index < (u32)NUM; index++) - { - if (FOOXX_CONFIG_TBL[index].instance_id == instance_id) - { - ptr = &FOOXX_CONFIG_TBL[index]; - break; - } - } - - return (const FooxxConfig *)ptr; -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/doc/fig/Serial_inform.png b/bsp/phytium/libraries/standalone/doc/fig/Serial_inform.png deleted file mode 100644 index ea19d25db3..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/fig/Serial_inform.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/fig/add_path_for_win.png b/bsp/phytium/libraries/standalone/doc/fig/add_path_for_win.png deleted file mode 100644 index 4299c540eb..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/fig/add_path_for_win.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/fig/admin_rights.png b/bsp/phytium/libraries/standalone/doc/fig/admin_rights.png deleted file mode 100644 index 66a6320f6b..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/fig/admin_rights.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/fig/bin_show.png b/bsp/phytium/libraries/standalone/doc/fig/bin_show.png deleted file mode 100644 index a7ac6c10bb..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/fig/bin_show.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/fig/check_env_for_aarch64.png b/bsp/phytium/libraries/standalone/doc/fig/check_env_for_aarch64.png deleted file mode 100644 index 6b02afe82d..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/fig/check_env_for_aarch64.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/fig/check_env_for_win.png b/bsp/phytium/libraries/standalone/doc/fig/check_env_for_win.png deleted file mode 100644 index fa1e3f6f5e..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/fig/check_env_for_win.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/fig/check_env_for_x86.png b/bsp/phytium/libraries/standalone/doc/fig/check_env_for_x86.png deleted file mode 100644 index 26a7f2d2c8..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/fig/check_env_for_x86.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/fig/compiling.png b/bsp/phytium/libraries/standalone/doc/fig/compiling.png deleted file mode 100644 index d1ee3cef6b..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/fig/compiling.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/fig/config_tftp32.png b/bsp/phytium/libraries/standalone/doc/fig/config_tftp32.png deleted file mode 100644 index 3e52a8d10b..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/fig/config_tftp32.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/fig/disk_manager.png b/bsp/phytium/libraries/standalone/doc/fig/disk_manager.png deleted file mode 100644 index cfc5173175..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/fig/disk_manager.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/fig/flush_cache.png b/bsp/phytium/libraries/standalone/doc/fig/flush_cache.png deleted file mode 100644 index ca79e63a07..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/fig/flush_cache.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/fig/git_url.png b/bsp/phytium/libraries/standalone/doc/fig/git_url.png deleted file mode 100644 index 93cc44497e..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/fig/git_url.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/fig/install_for_aarch64.png b/bsp/phytium/libraries/standalone/doc/fig/install_for_aarch64.png deleted file mode 100644 index d6d81a2cf7..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/fig/install_for_aarch64.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/fig/install_for_mingw.png b/bsp/phytium/libraries/standalone/doc/fig/install_for_mingw.png deleted file mode 100644 index 1b7ff94d9b..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/fig/install_for_mingw.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/fig/install_for_x86.png b/bsp/phytium/libraries/standalone/doc/fig/install_for_x86.png deleted file mode 100644 index be52daa09b..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/fig/install_for_x86.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/fig/install_msys2.png b/bsp/phytium/libraries/standalone/doc/fig/install_msys2.png deleted file mode 100644 index 9aa9105490..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/fig/install_msys2.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/fig/installing_msys2.png b/bsp/phytium/libraries/standalone/doc/fig/installing_msys2.png deleted file mode 100644 index d48d93a074..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/fig/installing_msys2.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/fig/ipv4_setting.png b/bsp/phytium/libraries/standalone/doc/fig/ipv4_setting.png deleted file mode 100644 index f18182064e..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/fig/ipv4_setting.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/fig/is_aarch64.png b/bsp/phytium/libraries/standalone/doc/fig/is_aarch64.png deleted file mode 100644 index 7ff6724a89..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/fig/is_aarch64.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/fig/is_x86_64.png b/bsp/phytium/libraries/standalone/doc/fig/is_x86_64.png deleted file mode 100644 index 1424e80a46..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/fig/is_x86_64.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/fig/kylin.png b/bsp/phytium/libraries/standalone/doc/fig/kylin.png deleted file mode 100644 index 034448a821..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/fig/kylin.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/fig/letter_shell.png b/bsp/phytium/libraries/standalone/doc/fig/letter_shell.png deleted file mode 100644 index 1c36452e7e..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/fig/letter_shell.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/fig/linux.png b/bsp/phytium/libraries/standalone/doc/fig/linux.png deleted file mode 100644 index a9e7c11a6a..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/fig/linux.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/fig/load_image.png b/bsp/phytium/libraries/standalone/doc/fig/load_image.png deleted file mode 100644 index 83a6ee5470..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/fig/load_image.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/fig/sd_image.png b/bsp/phytium/libraries/standalone/doc/fig/sd_image.png deleted file mode 100644 index cdbbf23475..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/fig/sd_image.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/fig/sd_insert.png b/bsp/phytium/libraries/standalone/doc/fig/sd_insert.png deleted file mode 100644 index 9d9623cbc8..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/fig/sd_insert.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/fig/sd_partinfo.png b/bsp/phytium/libraries/standalone/doc/fig/sd_partinfo.png deleted file mode 100644 index cb186a2aaf..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/fig/sd_partinfo.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/fig/sd_segement.png b/bsp/phytium/libraries/standalone/doc/fig/sd_segement.png deleted file mode 100644 index b32d0a58f5..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/fig/sd_segement.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/fig/setup_aarch64_dev.png b/bsp/phytium/libraries/standalone/doc/fig/setup_aarch64_dev.png deleted file mode 100644 index f9775e8520..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/fig/setup_aarch64_dev.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/fig/setup_win.png b/bsp/phytium/libraries/standalone/doc/fig/setup_win.png deleted file mode 100644 index 5b287cf745..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/fig/setup_win.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/fig/setup_x86_dev.png b/bsp/phytium/libraries/standalone/doc/fig/setup_x86_dev.png deleted file mode 100644 index f9775e8520..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/fig/setup_x86_dev.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/fig/tftp32_srv.png b/bsp/phytium/libraries/standalone/doc/fig/tftp32_srv.png deleted file mode 100644 index 6fedb850f4..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/fig/tftp32_srv.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/fig/uncompress_for_x86.png b/bsp/phytium/libraries/standalone/doc/fig/uncompress_for_x86.png deleted file mode 100644 index 9a4f434237..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/fig/uncompress_for_x86.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/fig/update_packman.png b/bsp/phytium/libraries/standalone/doc/fig/update_packman.png deleted file mode 100644 index 13566d39f7..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/fig/update_packman.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/fig/usb_disk.png b/bsp/phytium/libraries/standalone/doc/fig/usb_disk.png deleted file mode 100644 index 63a0fa9459..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/fig/usb_disk.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/fig/usb_image.png b/bsp/phytium/libraries/standalone/doc/fig/usb_image.png deleted file mode 100644 index a92593a6fa..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/fig/usb_image.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/fig/usb_insert.png b/bsp/phytium/libraries/standalone/doc/fig/usb_insert.png deleted file mode 100644 index a0e70a9050..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/fig/usb_insert.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/fig/windows.png b/bsp/phytium/libraries/standalone/doc/fig/windows.png deleted file mode 100644 index 4389fb08c7..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/fig/windows.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/fig/wsl_l_v.png b/bsp/phytium/libraries/standalone/doc/fig/wsl_l_v.png deleted file mode 100644 index a6def1b048..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/fig/wsl_l_v.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/fig/wsl_make_success.png b/bsp/phytium/libraries/standalone/doc/fig/wsl_make_success.png deleted file mode 100644 index 3cf3f5281f..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/fig/wsl_make_success.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/fig/wsl_teiminal.png b/bsp/phytium/libraries/standalone/doc/fig/wsl_teiminal.png deleted file mode 100644 index 740ced10c9..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/fig/wsl_teiminal.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/reference/cpu/figs/NotUseDefaultConfig.png b/bsp/phytium/libraries/standalone/doc/reference/cpu/figs/NotUseDefaultConfig.png deleted file mode 100644 index bb48e1143d..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/reference/cpu/figs/NotUseDefaultConfig.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/reference/cpu/figs/UseDefaultConfig.png b/bsp/phytium/libraries/standalone/doc/reference/cpu/figs/UseDefaultConfig.png deleted file mode 100644 index b05944de3e..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/reference/cpu/figs/UseDefaultConfig.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/reference/cpu/finterrupt.md b/bsp/phytium/libraries/standalone/doc/reference/cpu/finterrupt.md deleted file mode 100644 index 98d497e8dd..0000000000 --- a/bsp/phytium/libraries/standalone/doc/reference/cpu/finterrupt.md +++ /dev/null @@ -1,502 +0,0 @@ - - -# finterrupt - -## 1概述 - -此处提到的中断,主要是面向与Armv8 架构中异步异常IRQ 这个中断这个概念进行对齐,本模块主要为开发者提供软件层面管理中断相关接口,具体实现了以下这些特性: -1.基于中断id 的开关功能 -2.中断生命周期中需要使用到的,模式切换函数。(sdk 自动调用,一般不需要开发者操作) -3.核间中断触发接口 -4.中断优先级相关接口(优先级设置、优先级掩码、优先级抢占分组设置) -5.提供两种角色选择初始化中断 - -## 2驱动功能 - -驱动组成由以下所示 -. -├── finterrupt.c -└── finterrupt.h - -为用户提供两种初始化中断的方式: -1.不使用默认初始化的方式,在参数配置项选择“Not use default interrupt configuration”,参数配置如下: - -![](./figs/NotUseDefaultConfig.png) - -用户在这种模式下手动编写初始化代码,具体可以参考 /baremetal/example/peripheral/gic/fgic_test 下例程 - -2.使用默认初始化的方式,此时默认以CORE0 作为主核,默认会初始化中断驱动中的所有组件,非0核 将只会初始化与多核特性相关的部分组件。具体配置如下: - -![](./figs/UseDefaultConfig.png) - -## 3数据结构 - -``` -typedef void (*IrqHandler)(s32 vector, void *param); /* IRQ 中断回调函数的类型 */ - -``` - -``` -struct IrqDesc -{ - IrqHandler handler; /* IRQ 中断回调函数的指针 */ - void *param; /* IRQ 中断回调函数的变量 */ -}; -``` - -``` -#define INTERRUPT_CPU_ALL_SELECT 0xffffffffffffffffULL /* 当进行核间,发送给所有核心时需要用到的参数 */ -#define INTERRUPT_CPU_TARGET_ALL_SET 0xffffffffUL /* 设置SPI 中断亲和度时,此值默认SPI 中断发送给所有人 */ - -#define IRQ_MODE_TRIG_LEVEL (0x00) /* Trigger: level triggered interrupt */ -#define IRQ_MODE_TRIG_EDGE (0x01) /* Trigger: edge triggered interrupt */ -``` - -``` -typedef enum -{ - INTERRUPT_ROLE_MASTER = 0 , /* 作为主核模式进行中断初始化,会初始化中断驱动中的所有组件 */ - INTERRUPT_ROLE_SLAVE, /* 作为从核模式进行中断初始化,会初始化与多核特性相关的部分组件 */ -}INTERRUPT_ROLE_SELECT; /* 此枚举应用于手动初始化中断的接口中 */ -``` - -``` -#define IRQ_GROUP_PRIORITY_3 3 /* group priority valid mask is bit[7:3],subpriority valid mask is bit[4:0] */ -#define IRQ_GROUP_PRIORITY_4 4 /* group priority valid mask is bit[7:4],subpriority valid mask is bit[3:0] */ -#define IRQ_GROUP_PRIORITY_5 5 /* group priority valid mask is bit[7:5],subpriority valid mask is bit[4:0] */ -#define IRQ_GROUP_PRIORITY_6 6 /* group priority valid mask is bit[7:6],subpriority valid mask is bit[5:0] */ -#define IRQ_GROUP_PRIORITY_7 7 /* group priority valid mask is bit[7],subpriority valid mask is bit[6:0] */ -``` - -IRQ_GROUP_PRIORITY_* 用于定义组优先级的有效位。 当存在抢占中断时,group priority 为抢占优先级,subpriority 为子优先级,如果某个中断的组优先级的值比当前正在运行中断的组优先级要小,则此中断将会抢占当前运行的优先级 。 - -``` -#define IRQ_PRIORITY_VALUE_0 0 -#define IRQ_PRIORITY_VALUE_1 0x10 -#define IRQ_PRIORITY_VALUE_2 0x20 -#define IRQ_PRIORITY_VALUE_3 0x30 -#define IRQ_PRIORITY_VALUE_4 0x40 -#define IRQ_PRIORITY_VALUE_5 0x50 -#define IRQ_PRIORITY_VALUE_6 0x60 -#define IRQ_PRIORITY_VALUE_7 0x70 -#define IRQ_PRIORITY_VALUE_8 0x80 -#define IRQ_PRIORITY_VALUE_9 0x90 -#define IRQ_PRIORITY_VALUE_10 0xa0 -#define IRQ_PRIORITY_VALUE_11 0xb0 -#define IRQ_PRIORITY_VALUE_12 0xc0 -#define IRQ_PRIORITY_VALUE_13 0xe0 -#define IRQ_PRIORITY_VALUE_14 0xf0 -``` - -IRQ_PRIORITY_VALUE_* 中断优先级一共支持以上这16个挡位,优先级的值越低优先级越高。 - -``` -#define IRQ_PRIORITY_MASK_0 0 -#define IRQ_PRIORITY_MASK_1 0x10 -#define IRQ_PRIORITY_MASK_2 0x20 -#define IRQ_PRIORITY_MASK_3 0x30 -#define IRQ_PRIORITY_MASK_4 0x40 -#define IRQ_PRIORITY_MASK_5 0x50 -#define IRQ_PRIORITY_MASK_6 0x60 -#define IRQ_PRIORITY_MASK_7 0x70 -#define IRQ_PRIORITY_MASK_8 0x80 -#define IRQ_PRIORITY_MASK_9 0x90 -#define IRQ_PRIORITY_MASK_10 0xa0 -#define IRQ_PRIORITY_MASK_11 0xb0 -#define IRQ_PRIORITY_MASK_12 0xc0 -#define IRQ_PRIORITY_MASK_13 0xe0 -#define IRQ_PRIORITY_MASK_14 0xf0 -``` - -IRQ_PRIORITY_MASK_* 中断优先级掩码一共支持以上这16个挡位,当设置掩码之后,中断优先级的值必须比此值小,才能被CPU进行响应 - -## 4错误码定义 - -#define FINT_SET_TARGET_ERR /* 涉及到CPU id 的配置时,CPU 不具有此ID 信息 */ -#define FINT_INT_NUM_NOT_FIT /* 使用中断号不符合当前实际情况 */ - -## 5应用示例 - -/baremetal/example/peripheral/gic/fgic_test gic与interrupt 特性例程 - -## 6API使用步骤 - -1. 初始化中断模块,根据当前使用此核心角色的定位(主核、从核),进行初始化 - -``` -InterruptInit(&interrupt_instance,INTERRUPT_DRV_INTS_ID,INTERRUPT_ROLE_MASTER); -``` - -2. 全局设置组优先级 ,此接口影响中断嵌套过程中的抢占优先级有效位 - -``` -InterruptSetPriorityGroupBits(IRQ_GROUP_PRIORITY_*); -``` - -3. 全局设置中断优先级掩码,此参数设置之后,CPU响应中断优先级的值必须比此值小 - -``` -InterruptSetPriorityMask(IRQ_PRIORITY_MASK_*); -``` - -4. 设置具体中断的优先级。此优先级由抢占优先级与子优先级组成,具体优先级的划分由 InterruptSetPriorityGroupBits 决定。 - -``` -InterruptSetPriority(INT_NUM,priority); -``` - -5. 设置中断路由至特定CPU - -``` -InterruptSetTargetCpus(INT_NUM,CPU_ID) -``` - -6. 中断回调函数注册,当中断事件出现时,回调此注册函数 - -``` -InterruptInstall(INT_NUM,int_handler,int_args,"int_name") -``` - -7. 使能具体中断号的中断 - -``` -InterruptUmask(INT_NUM) -``` - -8. 如果是使用核间中断,使用以下接口进行触发 - -``` -InterruptCoreInterSend(INT_NUM,CPU_MASK) -``` - -9. 关闭具体中断号的中断 - -``` -InterruptMask(INT_NUM) -``` - -## 7API介绍 - -### 1. InterruptInit - -``` -void InterruptInit(InterruptDrvType * int_driver_p,u32 instance_id,INTERRUPT_ROLE_SELECT role_select) -``` - -#### 介绍 - -初始化中断模块的接口函数 - -#### 参数 - -- InterruptDrvType * int_driver_p : 指向中断驱动实例的指针 -- u32 instance_id: 驱动实例的标号 -- INTERRUPT_ROLE_SELECT role_select :初始化中断接口时的角色选择。INTERRUPT_ROLE_MASTER 作为主核角色,INTERRUPT_ROLE_SLAVE 作为从核角色。具体特点参照数据结构中的描述 - -#### 返回 - -无 - -### 2. InterruptMask - -``` -void InterruptMask(int int_id) -``` - -#### 介绍 - -基于中断ID关闭对应的中断 - -#### 参数 - -- int int_id :中断的id 编号 - -#### 返回 - -无 - -### 3. InterruptUmask - -``` -void InterruptUmask(int int_id) -``` - -#### 介绍 - -基于中断ID开启对应的中断 - -#### 参数 - -- int int_id :中断的id 编号 - -#### 返回 - -无 - -### 4. InterruptSetTargetCpus - -``` -FError InterruptSetTargetCpus(int int_id,u32 cpu_id) -``` - -#### 介绍 - -将中断路由给特定的CPU,或者路由给所有的CPU - -#### 参数 - -- int int_id :中断的id 编号 ,中断优先级范围为 32-1019 -- u32 cpu_id : 需要路由给CPU的编号,如果值为INTERRUPT_CPU_TARGET_ALL_SET 则路由给芯片中所有可以接收此中断的CPU - -#### 返回 - -FError FINT_SUCCESS:设置成功,FINT_INT_NUM_NOT_FIT:使用中断号不符合当前实际情况 ,FINT_SET_TARGET_ERR: 涉及到CPU id 的配置时,CPU 不具有此ID 信息 - -### 5. InterruptGetTargetCpus - -``` -FError InterruptGetTargetCpus(int int_id,u32 *cpu_p) -``` - -#### 介绍 - -基于中断ID 获取中断的路由信息 - -#### 参数 - -- int int_id :中断的id 编号 -- u32 *cpu_p : 它的值为:需要路由给CPU的编号,如果值为INTERRUPT_CPU_TARGET_ALL_SET 则路由给芯片中所有可以接收此中断的CPU - -#### 返回 - -FError FINT_SUCCESS:设置成功,FINT_INT_NUM_NOT_FIT:使用中断号不符合当前实际情况 ,FINT_SET_TARGET_ERR: 涉及到CPU id 的配置时,CPU 不具有此ID 信息 - -### 6. InterruptSetTrigerMode - -``` -void InterruptSetTrigerMode(int int_id, unsigned int mode) -``` - -#### 介绍 - -基于中断ID 设置中断的触发方式 - -#### 参数 - -- int int_id :中断的id 编号 -- unsigned int mode : IRQ_MODE_TRIG_LEVEL :(0x00) /* Trigger: level triggered interrupt */ -- IRQ_MODE_TRIG_EDGE :(0x01) /* Trigger: edge triggered interrupt */ - -#### 返回 - -无 - -### 7. InterruptGetTrigerMode - -``` -unsigned int InterruptGetTrigerMode(int int_id) -``` - -#### 介绍 - -基于中断ID 获取中断的触发方式 - -#### 参数 - -- int int_id :中断的id 编号 - -#### 返回 - -- unsigned int mode : IRQ_MODE_TRIG_LEVEL :(0x00) /* Trigger: level triggered interrupt */ -- IRQ_MODE_TRIG_EDGE :(0x01) /* Trigger: edge triggered interrupt */ - -### 8. InterruptSetPriority - -``` -void InterruptSetPriority(int int_id, unsigned int priority) -``` - -#### 介绍 - -基于中断ID 设置中断的触发方式 - -#### 参数 - -- int int_id :中断的id 编号 -- unsigned int priority :中断优先级的值 ,采用IRQ_PRIORITY_VALUE_*的值作为输入 - -#### 返回 - -无 - -### 9. InterruptGetPriority - -``` - unsigned int InterruptGetPriority(int int_id) -``` - -#### 介绍 - -基于中断ID获取中断的触发方式 - -#### 参数 - -- int int_id :中断的id 编号 -- unsigned int priority :中断优先级的值 - -#### 返回 - -无 - -### 10. InterruptSetPriorityMask - -``` -void InterruptSetPriorityMask(unsigned int priority) -``` - -#### 介绍 - -设置中断优先级掩码 - -#### 参数 - -- unsigned int priority :中断掩码值,当设置此掩码之后,各个中断优先级的值必须小于此值,才能被CPU 承认,并且转为激活态 。采用IRQ_PRIORITY_MASK_* 参数作为输入 - -#### 返回 - -无 - -### 11. InterruptGetPriorityMask - -``` -void InterruptGetPriorityMask(void) -``` - -#### 介绍 - -获取中断优先级掩码 - -#### 参数 - -#### 返回 - -- unsigned int priority :中断掩码值,当设置此掩码之后,各个中断优先级的值必须小于此值,才能被CPU 承认,并且转为激活态 - -### 12. InterruptSetPriorityGroupBits - -``` -void InterruptSetPriorityGroupBits(unsigned int bits) -``` - -#### 介绍 - -设置中断优先级分组位 - -#### 参数 - -- unsigned int bits :该字段的值控制如何将8位中断优先级字段拆分为组优先级字段与子优先级字段,采用IRQ_GROUP_PRIORITY_*参数作为输入。 分组关系如下: - -* |bits 取值 ----------------0-------1--------2------3-------4------5-------6-------7 -* |组 优先级有效值取值------[---]----[7:1]---[7:2]--[7:3]---[7:4]--[7:5]--[7:6]---[7] -* |子 优先级有效值取值------[---]-----[0]----[1:0]--[2:0]---[3:0]---[4:0]--[5:0]--[6:0] - -#### 返回 - -无 - -### 13. InterruptInstall - -``` -IrqHandler InterruptInstall(int int_id, IrqHandler handler,void *param, const char *name) -``` - -#### 介绍 - -本函数将自定义的中断回调函数与回调参数注册至对应中断id数据结构中 - -#### 参数 - -- int int_id:中断的id 编号 -- IrqHandler handler:中断回调函数 -- void *param:中断回调参数 -- const char *name:中断函数的命名 - -#### 返回 - -无 - -### 14. InterruptCoreInterSend - -``` -void InterruptCoreInterSend(int ipi_vector, u64 cpu_mask) -``` - -#### 介绍 - -核心间中断触发函数 - -#### 参数 - -- int int_id:中断的id 编号 ,中断范围 0~15 -- u64 cpu_mask:cpu_mask表示每一位代表所选CPU,例如,0x3代表core0和CORE1。 - -#### 返回 - -无 - -### 15. InterruptEarlyInit - -``` -void InterruptEarlyInit(void) -``` - -#### 介绍 - -中断提前初始化函数,此函数一般在汇编代码时被调用,当用户设置默认初始化模式时,本函数将会使用CORE0为主核心并且初始化中断驱动中所有组件,其他CORE为从属核心将初始化中断驱动中必备的组件。 - -#### 参数 - -无 - -#### 返回 - -无 - -### 16. InterruptGetPriorityConfig - -``` -u8 InterruptGetPriorityConfig(void) -``` - -#### 介绍 - -根据uboot差异,返回是否需要对ICC_PMR和ICC_RPR的值进行转换。 - -#### 参数 - -无 - -#### 返回 - -u8 需要转换返回1,不需要转换返回0 \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/doc/reference/cpu/libmetal.dio b/bsp/phytium/libraries/standalone/doc/reference/cpu/libmetal.dio deleted file mode 100644 index 2bbbf53582..0000000000 --- a/bsp/phytium/libraries/standalone/doc/reference/cpu/libmetal.dio +++ /dev/null @@ -1,540 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/doc/reference/cpu/libmetal.md b/bsp/phytium/libraries/standalone/doc/reference/cpu/libmetal.md deleted file mode 100644 index bec5af72ff..0000000000 --- a/bsp/phytium/libraries/standalone/doc/reference/cpu/libmetal.md +++ /dev/null @@ -1,75 +0,0 @@ -# libmetal - -## 1. 概述 - -- libmetal 是一个用于处理嵌入式系统中硬件访问和共享资源的库,其提供了一套简单易用的 API 接口,可以用于开发各种类型的嵌入式系统应用程序。 - -- 在本例程中,采用的APU与RPU的简称来模拟。 - -## 2. 功能 - -ARM 处理器可以分为两种类型:Application Processing Unit(APU)和 Real-time Processing Unit(RPU)。 - -APU 是系统中的主要处理器,它运行 Linux 或其他操作系统,用于执行应用程序和高层次的系统功能。APU 具有更高的性能和功能,可以支持多任务、多线程、虚拟化等复杂的应用场景。 - -RPU 是系统中的实时处理器,它专门用于处理实时任务和低延迟的操作,例如实时控制、数据采集和处理等。RPU 具有更低的延迟和更可靠的性能,可以保证实时任务的及时响应和稳定性。 - -## 3. 配置方法 - -在使用 libmetal 库时,可以针对不同的处理器核心和应用场景选择合适的 API 接口和驱动程序。例如,在 APU 上运行 Linux 操作系统时,可以使用 libmetal 提供的 Linux 驱动程序和 API 接口,以实现对硬件资源的访问和管理;而在 RPU 上运行裸机程序时,可以使用 libmetal 提供的裸机驱动程序和 API 接口,以实现对硬件资源的低延迟访问和控制。 - -但是本例程APU也采用裸机程序去运行。 - -## 4. 应用示例 - -"baremetal/example/system/amp/libmetal_test" - -## 5. API参考设计 - -- 流程图解 - -![流程图解](./libmetal.svg) - -### 5.1 用户定义 - -- 主要使用的结构体 - -![主要使用的结构体](./libmetal_struct.svg) - -在common文件夹的sys_init.c文件中,我们定义了三种metal_device,并对其进行了实例化,特别是shm的内存分配,需要根据实际需要进行配置。 - -- TTC(Time-Triggered Communication)是一种基于时间触发的通信机制,用于实时系统和分布式系统中的通信和同步。在 Libmetal 库中,TTC API 提供了时间触发机制和通信机制,用于周期性地触发事件和实现处理器之间的数据共享、通信和同步等操作。 - -- SHM(Shared Memory)是一种共享内存机制,用于在不同的处理器之间共享数据。在 Libmetal 库中,SHM API 提供了共享内存管理功能,包括创建共享内存区域、映射共享内存区域等。 - -- IPI(Inter-Processor Interrupt)是一种处理器之间的中断机制,用于实现处理器之间的通信和同步。在 Libmetal 库中,IPI API 提供了处理器之间的中断管理功能,包括注册中断处理函数、发送中断等。 - -其中结构体成员 '.regions' 可以根据自己的实际需求进行定义。如果您有多个物理地址空间需要描述,可以更改sys.h文件中的METAL_MAX_DEVICE_REGIONS来扩展多个地址空间,物理地址区域可以用于地址映射和访问设备的寄存器和内存空间。 - -结构体成员 ' metal_bus ' 在libmetal/metal/device.c中进行实例化 struct metal_bus metal_weak metal_generic_bus,采用弱符合定义的方式,也可根据自己的需求进行修改,决定后续的设备打开参数传递,后续初始化会进行说明。 - -### 5.2 初始化 - -#### 5.2.1 libmetal环境初始化 - -在shell下运行libmetalapu 后执行 FLibmetalSysInit() 函数: - -- FLibmetalSysInit -> ' metal_init(&metal_param); ' 初始化libmetal环境,首先进行log日志的打印初始化,然后执行metal_sys_init(),进行总线的注册,注意上述两个文件虽然都采用init.c的命名方式,但是其结构作用是单向依赖的关系,我们将上述metal_generic_bus的实例注册到链表中,方便后续查找打开设备。 - -- ' FRegisterMetalDevice() ' 进行设备的注册,将实例化的设备参数进行注册,将bus实例的指针指向初始化设备中的bus成员(其中static struct metal_device metal_dev_table[]与后面在实际例程中关系紧密,成员.regions是主要的操作对象)。 - -- ' FOpenMetalDevice() ' 根据bus的名字以及设备名称查找对应的内存空间以及操作,bus->ops.dev_open 可以在 metal_generic_bus实例中找到对应操作metal_generic_dev_open,直到找到并设置内存属性。 - -初始化完成后,我们就可以进行实例的演示。 - -#### 5.2.2 构建例程(以ipi_latency_demo.c、ipi_latency_demod.c为例) - -- 首先申明metal_device、metal_io_region的结构体指针,用于临时储存通过bus_name和设备名字查询到得设备.(环境初始化注册的metal_dev_table[]) -- 然后打开三种设备SHM、TTC、IPI,也可以根据需要使用部分设备,获取到已经注册的设备结构体地址. -- 进行中断绑定、原子标志位初始化(用于休眠等待,中断服务函数中结束休眠)和使能操作, 因为本项目并未使用ipi来绑定中断控制器得地址,所以采用软中断的操作来控制中断触发和绑定。 -- 运行measure_ipi_latency示例 -- 中断失能,关闭打开的设备 - -#### 5.2.3 关闭libmetal环境 - -- 如果不再使用libmetal环境可以使用 FLibmetalSysCleanup()关闭. \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/doc/reference/cpu/libmetal.svg b/bsp/phytium/libraries/standalone/doc/reference/cpu/libmetal.svg deleted file mode 100644 index 8b8f975474..0000000000 --- a/bsp/phytium/libraries/standalone/doc/reference/cpu/libmetal.svg +++ /dev/null @@ -1,4 +0,0 @@ -
metal_device
metal_device
IPI metal device
IPI metal device
TTC metal device
TTC metal device
SHM metal device
SHM metal device

(处理器间中断)是一个处理器中断另一个处理器的机制。 这通常用于多处理器系统中的处理器间通信和同步。 Libmetal 提供了一个 IPI API,允许软件在不同的处理器之间发送和接收中断,而不管它们的架构如何。

(处理器间中断)是一个处理器中断另一个处理器的机制。 这通常用于多处理器系统中的处理器间通信和同步。 Libmetal 提供了一个 IPI API,允许软件在不同的处理器之间发送和接收中断,而不管它们的架构如何。 -

(时间触发通信)是一种基于公共时钟同步两个或多个处理器的机制。 这对于实现实时系统非常有用,其中精确计时至关重要。 Libmetal 提供了一个 TTC API,允许软件配置和管理 TTC 硬件,以及基于 TTC 时钟发送和接收消息。

(时间触发通信)是一种基于公共时钟同步两个或多个处理器的机制。 这对于实现实时系统非常有用,其中精确计时至关重要。 Libmetal 提供了一个 TTC API,允许软件配置和管理 TTC 硬件,以及基于 TTC 时钟发送和接收消息。 -

(共享内存) 是一种让两个或多个处理器共享公共内存区域的机制。 这对于实现处理器间通信和同步以及在不同处理器之间共享数据很有用。 Libmetal 提供了一个 SHM API,允许软件分配和释放共享内存区域,以及读取和写入这些区域的数据。

(共享内存) 是一种让两个或多个处理器共享公共内存区域的机制。 这对于实现处理器间通信和同步以及在不同处理器之间共享数据很有用。 Libmetal 提供了一个 SHM API,允许软件分配和释放共享内存区域,以及读取和写入这些区域的数据。 -
int ipi_latency_demod()
int ipi_latency_demod()
struct channel_s
struct channel_s
struct metal_io_region *ipi_io; /* IPI metal i/o region */
struct metal_io_region *ipi_io; /* IPI meta...
struct metal_io_region *shm_io; /* Shared memory metal i/o region */
struct metal_io_region *shm_io; /* Shared m...
struct metal_io_region *ttc_io; /* TTC metal i/o region */
struct metal_io_region *ttc_io; /* TTC meta...
uint32_t ipi_mask;             /* RPU IPI mask */
uint32_t ipi_mask;             /* RPU IPI m...
atomic_int remote_nkicked;     /* 0 - kicked from remote */
atomic_int remote_nkicked;     /* 0 - kicke...
ch
ch
int sys_init()
int sys_init()
enable_caches();
enable_caches();
struct metal_init_params metal_param
struct metal_init_params metal_param
metal_log_handler      log_handler;
metal_log_handler      log_handler;
enum metal_log_level       log_level;
enum metal_log_level       log_level;
init_uart();
init_uart();
init_irq()
init_irq()
port
port
port
port
port
port
/* Initialize libmetal environment */
  metal_init(&metal_param);
/* Initialize libmetal environment */...
/* Initialize metal Xilinx IRQ controller */
    ret = metal_xlnx_irq_init();
/* Initialize metal Xilinx IRQ controller */...
port
port
/* Register libmetal devices */
platform_register_metal_device();
/* Register libmetal devices */...
/* Open libmetal devices which have been registered */
open_metal_devices();
/* Open libmetal devices which have been registered */...
int open_metal_devices(void)
int open_metal_devices(void)
/* Open TTC device */
    ret = metal_device_open(BUS_NAME, TTC_DEV_NAME,&ttc_dev);
/* Open TTC device */...
/* Open shared memory device */
    ret = metal_device_open(BUS_NAME, SHM_DEV_NAME,&shm_dev);
/* Open shared memory device */...
/* Open IPI device */
    ret = metal_device_open(BUS_NAME, IPI_DEV_NAME,&ipi_dev);
/* Open IPI device */...
application
applica...
void close_metal_devices(void)
void close_metal_devices(void)
/* Close IPI device */
metal_device_close(ipi_dev);
/* Close IPI device */...
/* Close TTC device */
metal_device_close(ttc_dev);
/* Close TTC device */...
/* Close shared memory device */
metal_device_close(shm_dev);
/* Close shared memory device */...
void sys_cleanup()
void sys_cleanup()
/* Close libmetal devices which have been opened */
close_metal_devices();
/* Close libmetal devices which have been...
/* Finish libmetal environment */
    metal_finish();
/* Finish libmetal environment */...
disable_caches();
disable_caches();
static struct metal_device metal_dev_table[]
{
/* IPI device */
        .name = IPI_DEV_NAME,
        .bus = NULL,
        .num_regions = 1,
        .regions = {
            {
                .virt = (void *)IPI_BASE_ADDR,
                .physmap = &metal_phys[0],
                .size = 0x1000,
                .page_shift = DEFAULT_PAGE_SHIFT,
                .page_mask = DEFAULT_PAGE_MASK,
                .mem_flags = DEVICE_NONSHARED | PRIV_RW_USER_RW,
                .ops = {NULL},
            }},
        .node = {NULL},
        .irq_num = 1,
        .irq_info = (void *)IPI_IRQ_VECT_ID,
}
static struct metal_device metal_dev_table[] =...
const metal_phys_addr_t metal_phys[]
const metal_phys_addr_t metal...
IPI_BASE_ADDR
IPI_BASE_ADDR
SHM_BASE_ADDR
SHM_BASE_ADDR
TTC0_BASE_ADDR
TTC0_BASE_ADDR
struct metal_device
struct metal_device
*ipi_dev
*ipi_dev
*shm_dev
*shm_dev
*ttc_dev
*ttc_dev
sys_init.c
sys_init.c
实例化设备
实例化设备
main()
main()
libmetal_amp_demod.c
libmetal_amp_demod.c
Setup libmetal resources
sys_init();
Setup libmetal resources...
Run the shared memory throughput demo
shmem_throughput_demod();
Run the shared memory throughput demo...
Run the shared memory latency demo
shmem_latency_demod();
Run the shared memory latency demo...
Run the ipi latency demo
ipi_latency_demod();
Run the ipi latency demo...
Run the IPI with shared memory demo
ipi_shmem_demod();
Run the IPI with shared memory demo...
Run the atomic across shared memory demo
atomic_shmem_demod();
Run the atomic across shared memory demo...
Run the shared memory demo
shmem_demod();
Run the shared memory demo...
Cleanup libmetal resources
sys_cleanup();
Cleanup libmetal resources...
shmem_echod() - Show use of shared memory with libmetal.
Wait for message from APU. Once received, read and echo it back.
shmem_echod() - Show use of shared memory wit...
reset_timer() - function to reset TTC counter
Set the RST bit in the Count Control Reg.
stop_timer() - function to stop TTC counter
Set the disable bit in the Count Control Reg.
reset_timer() - function to reset TTC counter...
ipi_irq_handler() - IPI interrupt handler
measure_ipi_latencyd() - measure IPI latency with libmetal Loop until APU tells RPU to stop via shared memory.
ipi_irq_handler() - IPI interrupt handler...
shm
shm
ttc
ttc
ipi
ipi
shmem_demo.c(主机 APU)
shmem_demo.c(主机 APU)
1.Open the shared memory device.
1.Open the shared memory device.
2.Clear the demo control TX/RX available values in shared memory.
2.Clear the demo control TX/RX available value...
3.APU set demo control in shared memory to notify RPU demo has started
3.APU set demo control in shared memory to not...
4.APU will write message to the shared memory.
4.APU will write message to the shared memory.
5.APU will increase TX avail values in the shared memory to notify RPU there is a message ready to read.
5.APU will increase TX avail values in the sha...
6.APU will poll the RX avail value in th shared memory to see if RPU has echoed back the message into the shared memory.
6.APU will poll the RX avail value in th share...
7.When APU knows there is new RX message available, it will read the RX message from the shared memory.
7.When APU knows there is new RX message avail...
8.APU will verify the message to see if it matches the one it has sent.
8.APU will verify the message to see if it mat...
9.Close the shared memory device.
9.Close the shared memory device.
shmem_demo.c(从机 RPU)
shmem_demo.c(从机 RPU)
1.Get the shared memory device I/O region.
1.Get the shared memory device I/O region.
2.Clear the demo control value in shared memory.
2.Clear the demo control value in shared memor...
3.Check the demo control value in the shared memory to wait for APU to start the demo.
3.Check the demo control value in the shared m...
4.Once the demo control value indicates the demo starts, it polls on RX available value to see if there is new RX message available.
4.Once the demo control value indicates the de...
5.If there is a new RX message available, it reads the message from the shared memory.
5.If there is a new RX message available, it r...
6.It echos back the message to the shared memory.
6.It echos back the message to the shared memo...
7.AIt increases the TX available value in the shared memory to notify the other end there is a message available to read.
7.AIt increases the TX available value in the...
8.Check if the demo control value and the RX available values to see if demo finishes and if there is new RX data available.
8.Check if the demo control value and the RX a...
主从机通信交互
主从机通信交互
Table
偏移
偏移
大小
大小
说明
说明
0
0
4Bytes
4Bytes
DEMO control status shows if demo starts or not
DEMO control status shows if demo starts or not
0x04
0x04
4Bytes
4Bytes
number of APU to RPU buffers available to RPU
number of APU to RPU buffers available to RPU
0x08
0x08
4Bytes
4Bytes
number of APU to RPU buffers consumed by RPU
number of APU to RPU buffers consumed by RPU
0x0c
0x0c
4Bytes
4Bytes
number of RPU to APU buffers available to APU
number of RPU to APU buffers available to APU
0x10
0x10
4Bytes
4Bytes
number of RPU to APU buffers consumed by APU
number of RPU to APU buffers consumed by APU
0x14
0x14
1KBytes
1KBytes
APU to RPU buffer
APU to RPU buffer
0x800
0x800
1KBytes
1KBytes
RPU to APU buffer
RPU to APU buffer
Text is not SVG - cannot display
\ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/doc/reference/cpu/libmetal_struct.dio b/bsp/phytium/libraries/standalone/doc/reference/cpu/libmetal_struct.dio deleted file mode 100644 index 0dfa962253..0000000000 --- a/bsp/phytium/libraries/standalone/doc/reference/cpu/libmetal_struct.dio +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/doc/reference/cpu/libmetal_struct.svg b/bsp/phytium/libraries/standalone/doc/reference/cpu/libmetal_struct.svg deleted file mode 100644 index 0299cca6e2..0000000000 --- a/bsp/phytium/libraries/standalone/doc/reference/cpu/libmetal_struct.svg +++ /dev/null @@ -1 +0,0 @@ -
metal_device
metal_device
const char             *name;       /**< Device name */
const char             *name;       /**< Device name */
struct metal_bus
struct metal_bus
const char     *name;
const char     *name;
/** Bus operations. */


struct metal_bus_ops {
void        (*bus_close)(struct metal_bus *bus);
int     (*dev_open)(struct metal_bus *bus,
                    const char *dev_name,
                    struct metal_device **device);
void        (*dev_close)(struct metal_bus *bus,
                     struct metal_device *device);
void        (*dev_irq_ack)(struct metal_bus *bus,
                       struct metal_device *device,
                       int irq);
int     (*dev_dma_map)(struct metal_bus *bus,
                       struct metal_device *device,
                       uint32_t dir,
                       struct metal_sg *sg_in,
                       int nents_in,
                       struct metal_sg *sg_out);
 void        (*dev_dma_unmap)(struct metal_bus *bus,
                     struct metal_device *device,
                     uint32_t dir,
                     struct metal_sg *sg,
                     int nents);
};
/** Bus operations. */...
struct metal_list  devices;
struct metal_list  devices;
struct metal_list  node;
struct metal_list  node;
unsigned int           num_regions; /**< Number of I/O regions indevice */
unsigned int           num_regions; /**< Number of I/O regions indevice */

struct metal_io_region regions[METAL_MAX_DEVICE_REGIONS]; /**< Array of I/O regions in device*/

struct metal_io_region regions[METAL_MAX_DEVICE_REGIONS]; /**< Array of I/O regions in device*/...
void                   *irq_info;  /**< IRQ ID */
void                   *irq_info;  /**< IRQ ID */
int                    irq_num;    /**< Number of IRQs per device */
int                    irq_num;    /**< Number of IRQs per device */
struct metal_list      node;       /**< Node on bus' list of devices */
struct metal_list      node;       /**< Node on bus' list of devices */
struct metal_io_region
struct metal_io_region
struct metal_bus       *bus;        /**< Bus that contains device */
struct metal_bus       *bus;        /**< Bus that contains device */
struct metal_bus_ops   ops;
struct metal_bus_ops   ops;
void           *virt;      /**< base virtual address */
void           *virt;      /**< base virtual address...
const metal_phys_addr_t    *physmap;   /**< table of base physical address
 of each of the pages in the I/O region*/
const metal_phys_addr_t    *physmap;   /**< table of...
size_t         size;/**< size of the I/O region */
size_t         size;/**< size of the I/O region */
unsigned long      page_shift; /**< page shift of I/O region */
unsigned long      page_shift; /**< page shift of I/...
metal_phys_addr_t  page_mask;  /**< page mask of I/O region */
metal_phys_addr_t  page_mask;  /**< page mask of I/O...
unsigned int       mem_flags;  /**< memory attribute of the I/O region */
unsigned int       mem_flags;  /**< memory attribute...
struct metal_io_ops    ops;        /**< I/O region operations */
struct metal_io_ops    ops;        /**< I/O region o...
Text is not SVG - cannot display
\ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/doc/reference/cpu/mmu.md b/bsp/phytium/libraries/standalone/doc/reference/cpu/mmu.md deleted file mode 100644 index d7389a32df..0000000000 --- a/bsp/phytium/libraries/standalone/doc/reference/cpu/mmu.md +++ /dev/null @@ -1,98 +0,0 @@ - - -# MMU - -## 1. 概述 - -- 虚拟内存系统(VMSA)提供了一套内存管理单元(MMU), 它控制着地址转换、访问权限和内存属性的确定和检查。 - -- 地址转换过程将CPU使用的虚拟地址(VAs)映射到物理内存系统的物理地址(PAs)上。 - -- 在本SDK中 aarch32 state 采用 section 格式的转换表 -- 在本SDK中 aarch64 state 采用 4KB 粒度 格式的转换表 - -## 2. 功能 - -- MMU功能支持用户根据需要修改MMU表的默认内存属性。 - -## 3. 配置方法 - -## 4. 应用示例 - -"baremetal/example/system/amp/libmetal_test" -"baremetal/example/system/amp/openamp" - -## 5. API参考 - - -### 5.1 用户定义 - - -/* 访问权限 */ -``` -#define MT_P_NA_U_NA /* higher Exception level access=NA, user=NA */ -#define MT_P_RW_U_NA /* higher Exception level access=RW, user=NA */ -#define MT_P_RW_U_RO /* higher Exception level access=RW, user=RO */ -#define MT_P_RW_U_RW /* higher Exception level access=RW, user=RW */ -#define MT_P_RO_U_NA /* higher Exception level access=RO, user=NA */ -#define MT_P_RO_U_RO /* higher Exception level access=RO, user=RO */ -``` - -/* 内存属性参数 */ -``` -#define MT_DEVICE_NGNRNE /* Device-nGnRnE , Outer Shareable */ -#define MT_DEVICE_NGNRE /* Device-nGnRE , Outer Shareable */ - -#define MT_NORMAL_WT /* Outer and Inner Write-Through, Read-Allocate No Write-Allocate , Outer Shareable */ - -#define MT_NORMAL_WB_WCN /* Outer and Inner Write-Back, Read-Allocate No Write-Allocate , Outer Shareable */ - -#define MT_NORMAL_NC /* Outer and Inner Non-cacheable , Outer Shareable , Outer Shareable */ -#define MT_NORMAL /* Outer and Inner Write-Back, Read-Allocate Write-Allocate , Outer Shareable , Outer Shareable */ - -``` - -### 5.2 用户API接口 - -- 此函数用于配置转换表中地址对应条目的内存属性与访问权限 - -```c -void FSetTlbAttributes(uintptr addr, fsize_t size, u32 attrib); -``` - - Note: - aarch32 state 采用 section 页表,由此addr 建议采用1MB 地址对齐,size 建议为MB的整数倍。 - aarch64 state 采用 4KB 粒度 页表,由此addr 建议采用4KB 地址对齐,size 建议为4KB的整数倍。 - - Input: - - - addr , 需要为内存区域设置属性与权限的起始地址 - - - size , 内存区域的范围 - - - attrib,指定内存区域的属性 ,内存属性的取值由 访问权限 与 内存属性参数 组成,具体类型参考 ### 5.1 用户定义 - - Return: - - - void diff --git a/bsp/phytium/libraries/standalone/doc/reference/cpu/psci.md b/bsp/phytium/libraries/standalone/doc/reference/cpu/psci.md deleted file mode 100644 index 62d704f644..0000000000 --- a/bsp/phytium/libraries/standalone/doc/reference/cpu/psci.md +++ /dev/null @@ -1,334 +0,0 @@ -# fpsci - -## 1概述 - -PSCI 规范关注的是安全世界和正常世界之间进行电源管理的接口。 -PSCI具有以下预期用途: - -- 提供一个通用接口,监管软件可以使用该接口在以下情况下管理电源: - - 核心空闲管理。(core idle management) - - 动态添加和移除系统中的核心,通常称为热插拔。 (hotplug) - - 辅助核心引导。(Secibdary core boot) - - 在不同核心之间移动可信操作系统上下文。 (trusted) - - 系统关机和重启。(system shutdown and reset) -- 提供一个接口,监管软件可以与固件表(FDT和ACPI)描述一起使用,以支持电源管理代码的通用化。 - -## 2驱动功能 - -组成由以下所示 -. -├── fpsci.c -└── fpsci.h - -本驱动为开发者提供了特性: - -1. PSCI接口初始化以及function id 检查 -2. 查看PSCI 版本信息功能 -3. CPU_SUSPEND接口支持 -4. CPU hotplug 接口支持 -5. CPU Affinity power state 查看接口支持 -6. 冷启动接口支持 - -## 3数据结构 - -## 4错误码定义 - -```c -#define FPSCI_SUCCESS 0 -#define FPSCI_NOT_SUPPORTED -1 -#define FPSCI_INVALID_PARAMS -2 -#define FPSCI_DENIED -3 -#define FPSCI_ALREADY_ON -4 -#define FPSCI_ON_PENDING -5 -#define FPSCI_INTERNAL_FAILURE -6 -#define FPSCI_NOT_PRESENT -7 -#define FPSCI_DISABLED -8 -#define FPSCI_INVALID_ADDRESS -9 -``` - -## 5应用示例 - -/example/arch/armv8/fpsci --- 展示接口特性以及cpu hotplug 特性 - -## 6API使用步骤 - -1. 初始化PSCI模块,并且确定当前soc下支持哪些psci的functions - - ```c - FPsciInit() ; - ``` -2. 初始化之后以下接口可以被正常使用: - - ```c - FPsciVersion - FPsciCpuSuspend - FPsciCpuOn - FPsciAffinityInfo - FPsciSystemReset - FPsciFeatureCheck - FPsciCpuOff - ``` -3. hotplug 功能示例 - - ```c - /* 需要power down 的核心,假设次核心ID为1,主动调用以下接口实现CPU_OFF */ - FPsciCpuOff() ; - /* Never get here */ - ``` - - ```c - /* 准备唤醒核心ID为1的CPU */ - unsigned long cpu_affinity ; - GetCpuAffinity(1,&cpu_affinity) ; - /* 其中0x80100000为核心1需要执行的地址 */ - FPsciCpuOn(cpu_affinity,0x80100000,0) ; - ``` - -## 7API介绍 - -### 1. FPsciInit - -```c -int FPsciInit(void) -``` - -#### 介绍 - -初始化 PSCI 驱动的接口函数。 - -#### 参数 - -无 - -#### 返回 - -- int: 返回值表示初始化结果,0 表示初始化成功,其他值表示初始化失败。 - -#### 功能描述 - -- 调用 FSmccInit 函数对 SMCC 接口进行初始化。 -- 调用 FPsciVersion 函数获取 PSCI 的版本信息,并打印主版本号和次版本号。 -- 调用 FPsciCheckFeatures 函数检查 PSCI 支持的接口是否可用。 - -### 2. FPsciSystemReset - -```c -void FPsciSystemReset(u32 reset_type) -``` - -#### 介绍 - -重置系统的接口函数。 - -#### 参数 - -- u32 reset_type: 系统重置的类型(冷启动/热启动)。使用FPSCI_SYSTEM_RESET_TYPE_COLD 、FPSCI_SYSTEM_RESET_TYPE_WARM - -#### 返回 - -无 - -#### 功能描述 - -- 该函数用于重置系统。通过 reset_type 参数指定重置的类型。 -- 在调用此函数之前,请确保 PSCI 驱动已经初始化。 -- 函数内部通过调用 f_psci_invoke 函数实现 PSCI 接口的调用,并传递相应的参数。 -- 使用 FASSERT 宏来检查相关条件是否满足,例如检查 fpsci_ringt_bit_flg 和 f_psci_invoke 是否已经初始化。 - -注意: - -- 调用该函数将会重置整个系统,请谨慎使用。该接口是否有效也与固件有关 - -### 3. FPsciVersion - -```c -int FPsciVersion(void) -``` - -#### 介绍 - -获取 PSCI 实现的版本信息的接口函数。 - -#### 返回 - -- int: PSCI 实现的版本信息。配合FPSCI_MAJOR_VERSION与 FPSCI_MINOR_VERSION 可以解析出版本号 - -#### 功能描述 - -- 该函数用于获取 PSCI 实现的版本信息,该信息从 PSCI VERSION 接口中获取。 -- 在调用此函数之前,请确保 PSCI 驱动已经初始化。 -- 函数内部通过调用 f_psci_invoke 函数实现 PSCI 接口的调用,并传递相应的参数。 -- 使用 FASSERT 宏来检查相关条件是否满足,例如检查 f_psci_invoke 是否已经初始化。 -- 函数返回 PSCI 实现的版本信息,该信息存储在 f_psci_invoke 的返回值 res.a0 中。 - -### 4. FPsciCpuSuspend - -```c -int FPsciCpuSuspend(u32 power_state, unsigned long entry_point_address, unsigned long context_id) -``` - -#### 介绍 - -暂停特定 CPU 的执行的接口函数。 - -#### 参数 - -- u32 power_state: 要进入的电源状态。 -- unsigned long entry_point_address: 在唤醒时要执行的地址。 -- unsigned long context_id: 上下文特定的标识符。 - -#### 返回 - -- int: 操作的状态代码,根据 PSCI 规范定义。 - -#### 功能描述 - -- 该函数用于暂停特定 CPU 的执行,并返回指示操作是否成功的状态代码。 -- 函数参数 power_state 指定要进入的电源状态,entry_point_address 指定唤醒时要执行的地址,context_id 为上下文特定的标识符。 -- 在调用此函数之前,请确保 PSCI 驱动已经初始化。 -- 函数内部通过调用 f_psci_invoke 函数实现 PSCI 接口的调用,并传递相应的参数。 -- 使用 FASSERT 宏来检查相关条件是否满足,例如检查 f_psci_invoke 是否已经初始化。 -- 函数返回操作的状态代码,该代码存储在 f_psci_invoke 的返回值 res.a0 中,状态代码的含义由 PSCI 规范定义。 - -### 5. FPsciCpuOn - -```c -int FPsciCpuOn(unsigned long target_cpu, unsigned long entry_point_address, unsigned long context_id) -``` - -#### 介绍 - -启动特定 CPU 的接口函数。 - -#### 参数 - -- unsigned long target_cpu: 要启动的目标 CPU。 -- unsigned long entry_point_address: 在唤醒时要执行的地址。 -- unsigned long context_id: 上下文特定的标识符。 - -#### 返回 - -- int: 操作的状态代码,根据 PSCI 规范定义。 - -#### 功能描述 - -- 该函数用于启动特定 CPU,并返回指示操作是否成功的状态代码。 -- 函数参数 target_cpu 指定要启动的目标 CPU,entry_point_address 指定唤醒时要执行的地址,context_id 为上下文特定的标识符。 -- 根据目标 CPU 的位宽,选择相应的 PSCI_CPU_ON 接口 ID。 -- 在调用此函数之前,请确保 PSCI 驱动已经初始化。 -- 函数内部通过调用 f_psci_invoke 函数实现 PSCI 接口的调用,并传递相应的参数。 -- 使用 FASSERT 宏来检查相关条件是否满足,例如检查 f_psci_invoke 是否已经初始化。 -- 函数返回操作的状态代码,该代码存储在 f_psci_invoke 的返回值 res.a0 中,状态代码的含义由 PSCI 规范定义。 - -### 6. FPsciAffinityInfo - -```c -int FPsciAffinityInfo(unsigned long target_affinity, u32 lowest_affinity_level) -``` - -#### 介绍 - -获取特定关联级别的电源状态的接口函数。 - -#### 参数 - -- unsigned long target_affinity: 目标关联级别。 -- u32 lowest_affinity_level: 最低关联级别。 - -#### 返回 - -- int: 指定关联级别的电源状态,根据 PSCI 规范定义。 - -#### 功能描述 - -- 该函数用于获取特定关联级别的电源状态,并返回该电源状态的代码。 -- 函数参数 target_affinity 指定要获取电源状态的关联级别,lowest_affinity_level 指定最低关联级别。 -- 根据目标关联级别的位宽,选择相应的 PSCI_AFFINITY_INFO 接口 ID。 -- 在调用此函数之前,请确保 PSCI 驱动已经初始化。 -- 函数内部通过调用 f_psci_invoke 函数实现 PSCI 接口的调用,并传递相应的参数。 -- 使用 FASSERT 宏来检查相关条件是否满足,例如检查 f_psci_invoke 是否已经初始化。 -- 函数返回指定关联级别的电源状态代码,该代码存储在 f_psci_invoke 的返回值 res.a0 中,电源状态的含义由 PSCI 规范定义。 - -### 7. FPsciFeatures - -```c -int FPsciFeatures(u32 psci_fid) -``` - -#### 介绍 - -检查是否支持某个 PSCI 功能的接口函数。 - -#### 参数 - -- u32 psci_fid: 要检查的 PSCI 功能的功能 ID。 - -#### 返回 - -- int: 如果支持该功能,则返回1;否则返回0。 - -#### 功能描述 - -- 该函数用于检查是否支持指定的 PSCI 功能。 -- 在调用此函数之前,请确保 PSCI 驱动已经初始化。 -- 使用 FASSERT 宏来检查 f_psci_invoke 是否已经初始化。 -- 函数内部通过调用 f_psci_invoke 函数实现 PSCI 接口的调用,并传递相应的参数。 -- 函数返回值为1表示支持指定的 PSCI 功能,返回值为0表示不支持。 - -### 8. FPsciCpuOff - -```c -int FPsciCpuOff(void) -``` - -#### 介绍 - -这是 PSCI CPU_Off 接口的包装函数,用于关闭当前 CPU。 - -#### 返回 - -- int: 返回 'FSmcccRes' 结构体的 'a0' 字段,表示调用的结果。返回值为 0 (PSCI_SUCCESS) 表示成功,其他任何值表示发生了错误。 - -#### 功能描述 - -- 该函数用于关闭当前 CPU,即将当前 CPU 关机。 -- 在调用此函数之前,请确保 PSCI 驱动已经初始化。 -- 使用 FASSERT 宏来检查 f_psci_invoke 是否已经初始化。 -- 函数内部通过调用 f_psci_invoke 函数实现 PSCI 接口的调用,并传递相应的参数。 -- 函数返回值为 'a0' 字段,表示 PSCI 调用的结果。返回值为 0 表示成功,其他任何值表示发生了错误。 - -注意事项: - -- 被 CPU_OFF 关闭的核心只能通过 CPU_ON 命令重新启动。 - - -### 10. FPsciCpuMaskOn - -```c -int FPsciCpuMaskOn(s32 cpu_id_mask, uintptr bootaddr) -``` - -#### 介绍 - -此函数用于根据 CPU ID 掩码将指定的 CPU 打开并进入指定的入口地址。 - -#### 参数 - -- s32 cpu_id_mask: CPU ID 掩码,用于指定要打开的 CPU。 -- uintptr bootaddr: 要执行的入口地址。 - -#### 返回 - -- int: 函数执行的结果代码。返回值为 FPSCI_SUCCESS 表示成功,其他值表示错误。 - -#### 功能描述 - -- 通过调用 `GetCpuAffinityByMask` 函数获取与 CPU ID 掩码对应的 CPU 所属的集群。 -- 如果获取集群失败,则返回 `FPSCI_INVALID_PARAMS` 错误。 -- 否则,调用 `FPsciCpuOn` 函数将指定的集群打开,并进入指定的入口地址。 -- 函数返回 `FPsciCpuOn` 函数的执行结果。 - -注意事项: - -- 在调用此函数之前,请确保 PSCI 驱动已经初始化。 -- 请确保 `GetCpuAffinityByMask` 函数已经正确实现,并能根据 CPU ID 掩码获取正确的 CPU 所属的集群信息。 diff --git a/bsp/phytium/libraries/standalone/doc/reference/driver/fadc.md b/bsp/phytium/libraries/standalone/doc/reference/driver/fadc.md deleted file mode 100644 index 47f22ea096..0000000000 --- a/bsp/phytium/libraries/standalone/doc/reference/driver/fadc.md +++ /dev/null @@ -1,327 +0,0 @@ -# FADC 驱动程序 - -## 1. 概述 - -ADC,Analog-to-Digital Converter的缩写,指模/数转换器或者模拟/数字转换器。是将连续变量的模拟信号转换为离散的数字信号的器件。真实世界的模拟信号,例如温度、压力、声音或者图像等,需要转换成更容易储存、处理和发射的数字形式。模/数转换器可以实现这个功能,典型的模拟数字转换器将模拟信号转换为表示一定比例电压值的数字信号。 - -## 2. 功能 - -adc控制器驱动提供了adc的控制访问方法, -- 初始化adc控制器,配置相关参数,如转换模式,通道使能等 -- 读adc转换数据 -- 转换完成与结果阈值的中断触发 - -驱动相关的源文件包括 -``` -. -├── fadc_g.c -├── fadc_hw.c -├── fadc_hw.h -├── fadc_intr.c -├── fadc_sinit.c -├── fadc.c -└── fadc.h -``` - -## 3. 配置方法 - -以下部分将指导您完成 fadc 驱动的软件配置: - -- 初始化adc控制器 -- 设置adc的中断处理函数 -- 根据adc转换完成状态读取adc转换结果 - -## 4 应用示例 - -### [adc收发数据](../../../baremetal/example/peripheral/adc) - -## 5. API参考 - -### 5.1. 用户数据结构 - -- fadc控制数据 - -```c -typedef struct -{ - FAdcConfig config;/* adc config */ - FAdcConvertConfig convert_config; /* adc convert config */ - FAdcThresholdConfig threshold_config; /* adc channel threshold config */ - u32 is_ready;/* adc init ready flag */ - u16 value[FADC_CHANNEL_NUM]; /* adc value */ - boolean convert_complete[FADC_CHANNEL_NUM]; /*!< Specifies whether the conversion is complete> */ - FAdcIntrEventHandler event_handler[FADC_INTR_EVENT_NUM]; /* event handler for interrupt */ - void *event_param[FADC_INTR_EVENT_NUM]; /* parameters of event handler */ - -}FAdcCtrl; -``` - -- fadc配置数据,FAdcConfig主要是adc控制器id、基地址和中断号,FAdcConvertConfig主要包括用户可配置的参数,包括转换间隔时间、转换模式、通道模式等,FAdcThresholdConfig主要包含具体通道的结果阈值 - -```c -typedef struct -{ - u32 instance_id;/* adc id */ - uintptr base_addr;/* adc control register base address*/ - u32 irq_num;/* adc interrupt number */ - u32 irq_prority;/* adc interrupt priority*/ - const char *instance_name;/* instance name */ - -} FAdcConfig; - -typedef struct -{ - u32 convert_interval; /* convert interval time */ - u32 clk_div; /* clock divider */ - FAdcConvertMode convert_mode;/*!< convert mode */ - FAdcChannelMode channel_mode;/*!< channel mode */ - -} FAdcConvertConfig; - -typedef struct -{ - u16 high_threshold[FADC_CHANNEL_NUM]; /*!< Configures the ADC analog high threshold value. - This parameter must be a 10-bit value. */ - u16 low_threshold[FADC_CHANNEL_NUM]; /*!< Configures the ADC analog low threshold value. - This parameter must be a 10-bit value. */ -} FAdcThresholdConfig; -``` - -- fadc转换模式,单次转换和连续转换 -```c -typedef enum -{ - FADC_CONTINUOUS_CONVERT = 0,/* continuous conversion*/ - FADC_SINGLE_CONVERT = 1, /* single conversion*/ - - FADC_CONVERT_MODE_NUM - -} FAdcCovertMode; -``` - -- fadc通道模式,多通道顺序转换和固定通道转换 -```c -typedef enum -{ - FADC_MULTI_CHANNEL = 0, /* multi channel conversion*/ - FADC_FIXED_CHANNEL = 1, /* fixed channel conversion*/ - - FADC_CHANNEL_MODE_NUM -} FAdcChannelMode; -``` - -- fadc中断事件类型 -```c -typedef enum -{ - FADC_INTR_EVENT_COVFIN = 0, /**< Handler type for convert finish interrupt */ - FADC_INTR_EVENT_DLIMIT = 1, /**< Handler type for low limit interrupt*/ - FADC_INTR_EVENT_ULIMIT = 2, /**< Handler type for high limit interrupt*/ - FADC_INTR_EVENT_ERROR = 3, /**< Handler type for error interrupt*/ - - FADC_INTR_EVENT_NUM -} FAdcIntrEventType; - -``` - -### 5.2 错误码定义 - -- FADC_SUCCESS 执行成功 -- FADC_ERR_INVAL_PARM 参数无效 -- FADC_ERR_NOT_READY 驱动未初始化 -- FADC_ERR_TIMEOUT 超时 -- FADC_ERR_CMD_FAILED 执行失败 - -### 5.3. 用户API接口 - -#### FAdcLookupConfig - -- 获取fadc控制器默认配置 - -```c -const FAdcConfig *FAdcLookupConfig(u32 instance_id); -``` - -Note: - -- 获取默认配置参数,包括基地址、中断号等 - -Input: - -- {u32} instance_id,adc控制器id号 - -Return: - -- {const FAdcConfig *} adc默认配置,返回NULL如果找不到默认配置 - -#### FAdcCfgInitialize - -- 初始化fadc控制器, 使之可以使用 - -```c -FError FAdcCfgInitialize(FAdcCtrl *pctrl, const FAdcConfig *input_config_p); -``` - -Note: - -- 输入配置通过FAdcLookupConfig获取,用户按照需要修改后传入此函数 - -Input: - -- {FAdcCtrl} *pctrl,adc驱动控制数据 -- {FAdcConfig} *input_config_p,adc用户输入配置 - -Return: - -- {FError} 驱动初始化的错误码信息,FADC_SUCCESS 表示初始化成功,其它返回值表示初始化失败 - -#### FAdcVariableConfig - -- 设置adc可配置参数 - -```c -FError FAdcVariableConfig(FAdcCtrl *pctrl, u8 channel, FAdcConvertConfig *convert_config, - FAdcThresholdConfig *threshold_config); -``` - -Note: - -- 设置指定adc控制器的可配置参数,包括转换模式,通道阈值等 - -Input: - -- {FAdcCtrl} *pctrl,adc驱动控制数据 -- {u8} channel,adc通道号 -- {FAdcConvertConfig} *convert_config,adc转换参数配置 -- {FAdcThresholdConfig} *threshold_config,adc通道转换结果阈值配置 - -Return: - -- {FError} 驱动初始化的错误码信息,FADC_SUCCESS 表示初始化成功,其它返回值表示初始化失败 - -#### FAdcChannelThresholdSet - -- 设置adc通道的转换结果阈值,使能该通道 - -```c -FError FAdcChannelThresholdSet(FAdcCtrl *pctrl, u8 channel, FAdcThresholdConfig *threshold_config); -``` - -Note: - -- 设置指定adc控制器的指定通道的转换结果阈值,使能该通道 - -Input: - -- {FAdcCtrl} *pctrl,adc驱动控制数据 -- {u8} channel,adc通道号 -- {FAdcThresholdConfig} *threshold_config,adc通道转换结果阈值配置 - -Return: - -- {FError} 驱动初始化的错误码信息,FADC_SUCCESS 表示初始化成功,其它返回值表示初始化失败 - -#### FAdcConvertStart - -- 设置adc控制器转换开始 - -```c -FError FAdcConvertStart(FAdcCtrl *pctrl); -``` - -Note: - -- 设置指定adc控制器转换开始 - -Input: - -- {FAdcCtrl} *pctrl,adc驱动控制数据 - -Return: - -- {FError} 驱动初始化的错误码信息,FADC_SUCCESS 表示初始化成功,其它返回值表示初始化失败 - -#### FAdcInterruptEnable - -- 使能adc通道的中断 - -```c -FError FAdcInterruptEnable(FAdcCtrl *pctrl, u8 channel, FAdcIntrEventType event_type); -``` - -Note: - -- 使能指定adc控制器的指定通道的中断 - -Input: - -- {FAdcCtrl} *pctrl,adc驱动控制数据 -- {u8} channel,adc通道号 -- {FAdcIntrEventType} event_type,中断事件类型 - -Return: - -- {FError} 驱动初始化的错误码信息,FADC_SUCCESS 表示初始化成功,其它返回值表示初始化失败 - - -#### FAdcReadConvertResult - -- 读adc通道的转换结果 - -```c -FError FAdcReadConvertResult(FAdcCtrl *pctrl, u8 channel, u16 *val); -``` - -Note: - -- 读指定adc控制器的指定通道的转换结果 - -Input: - -- {FAdcCtrl} *pctrl,adc驱动控制数据 -- {u8} channel,adc通道号 -- {u16} *val,存储转换结果的指针 - -Return: - -- {FError} 驱动初始化的错误码信息,FADC_SUCCESS 表示初始化成功,其它返回值表示初始化失败 - - -#### FAdcRegisterInterruptHandler - -- 注册adc中断事件函数 - -```c -void FAdcRegisterInterruptHandler(FAdcCtrl *instance_p, FAdcIntrEventType event_type, - FAdcIntrEventHandler handler, void *param); -``` - -Note: -- 无 - -Input: -- {FAdcCtrl} *instance_p,fadc驱动控制数据 -- {FAdcIntrEventType} event_type,中断事件类型 -- {FAdcIntrEventHandler} handler,中断事件回调函数 -- {void} *param,回调函数参数 - -Return: -- 无 - -#### FAdcIntrHandler - -- adc中断处理函数入口 - -```c -void FAdcIntrHandler(s32 vector, void *args); -``` - -Note: -- 根据中断类型,设置对应的回调函数和参数传入 - -Input: -- {s32} vector -- {void} *param, 输入参数,指向fadc驱动控制数据 - -Return: -- 无 diff --git a/bsp/phytium/libraries/standalone/doc/reference/driver/fcan.md b/bsp/phytium/libraries/standalone/doc/reference/driver/fcan.md deleted file mode 100644 index 53e2c19038..0000000000 --- a/bsp/phytium/libraries/standalone/doc/reference/driver/fcan.md +++ /dev/null @@ -1,248 +0,0 @@ -# FCAN 驱动程序 - -## 1. 概述 - -CAN 是控制器局域网络(Controller Area Network)的缩写,由以研发和生产汽车电子产品著称的德国BOSCH公司开发,并最终成为国际标准(ISO 11898),是国际上应用最广泛的现场总线之一。 - -## 2. 功能 - -CAN控制器驱动提供了CAN的控制访问方法, -- 初始化CAN控制器 -- 以轮询方式发送/接收数据 -- 发送/接收数据的中断触发 - -驱动相关的源文件包括, -``` -. -├── fcan_g.c -├── fcan_hw.c -├── fcan_hw.h -├── fcan_intr.c -├── fcan_sinit.c -├── fcan.c -└── fcan.h -``` - -## 3. 配置方法 - -以下部分将指导您完成 fcan 驱动的软件配置: - -- 初始化CAN控制器 -- 设置CAN的中断处理函数,包括收发中断 - -## 4 应用示例 - -### [can收发数据](../../../baremetal/example/peripheral/can) - -## 5. API参考 - -### 5.1. 用户数据结构 - -- fcan控制数据 - -```c -typedef struct -{ - FCanConfig config; - u32 is_ready; /* Device is initialized and ready */ - boolean use_canfd; /* if use canfd function */ - - FCanIntrEventConfig intr_event[FCAN_INTR_EVENT_NUM];/* event handler and parameters for interrupt */ -} FCanCtrl; -``` - -- fcan配置数据,FCanConfig主要是can控制器id、基地址和中断号,FCanIntrEventConfig主要包括中断处理函数 - -```c -typedef struct -{ - u32 instance_id; /* Id of device */ - uintptr base_address; /* Can base Address */ - u32 irq_num; /* interrupt number */ - u32 irq_prority;/* interrupt priority*/ -}FCanConfig; -``` - -- fcan波特率配置 -```c -typedef struct -{ - FCanSegmentType segment; - boolean auto_calc; /* if auto calculate baudrate parameters */ - u32 baudrate; /* baudrate */ - u32 sample_point; /* sample point */ - u32 prop_seg; /* Propagation segment in TQs */ - u32 phase_seg1; /* Phase buffer segment 1 in TQs */ - u32 phase_seg2; /* Phase buffer segment 2 in TQs */ - u32 sjw; /* Synchronisation jump width in TQs */ - u32 brp; /* Baudrate prescaler */ -}FCanBaudrateConfig; -``` - -- fcan报文 -```c -typedef struct -{ - u32 canid; - u8 candlc; - u8 flags; /* additional flags for CAN FD */ - u8 data[FCAN_DATA_LENGTH] __attribute__((aligned(8))); -}FCanFrame; -``` - -- fcan中断事件类型 -```c -typedef enum -{ - FCAN_INTR_EVENT_SEND = 0, /* Handler type for frame sending interrupt */ - FCAN_INTR_EVENT_RECV = 1, /* Handler type for frame reception interrupt */ - FCAN_INTR_EVENT_ERROR, /* Handler type for error interrupt */ - FCAN_INTR_EVENT_NUM -} FCanIntrEventType; -``` - -### 5.2 错误码定义 - -- FCAN_SUCCESS 执行成功 -- FCAN_NOT_READY 驱动未初始化 -- FCAN_FAILURE 执行失败 -- FCAN_INVAL_PARAM 参数无效 - -### 5.3. 用户API接口 - -#### FCanLookupConfig - -- 获取Fata控制器默认配置 - -```c -const FCanConfig *FCanLookupConfig(u32 instance_id); -``` - -Note: - -- 获取默认配置参数,包括基地址、中断号等 - -Input: - -- {u32} instance_id,控制器id号 - -Return: - -- {const FCanConfig *} fcan默认配置,返回NULL如果找不到默认配置 - -#### FCanCfgInitialize - -- 初始化fcan控制器, 使之可以使用 - -```c -FError FCanCfgInitialize(FCanCtrl *instance_p, const FCanConfig *input_config_p); -``` - -Note: - -- 输入配置通过FCanLookupConfig获取,用户按照需要修改后传入此函数 - -Input: - -- {FCanCtrl} *instance_p fcan驱动控制数据 -- {FCanConfig} *input_config_p fcan用户输入配置 - -Return: - -- {FError} 驱动初始化的错误码信息,FCAN_SUCCESS 表示初始化成功,其它返回值表示初始化失败 - -#### FCanSend - -- 发送can数据 - -```c -FError FCanSend(FCanCtrl *instance_p, FCanFrame *frame_p); -``` - -Note: - -- 指定can控制器发送can数据 - -Input: - -- {FCanCtrl} *instance_p,fcan驱动控制数据 -- {FCanFrame} *frame_p,can数据 - -Return: - -- {FError} 驱动初始化的错误码信息,FCAN_SUCCESS 表示初始化成功,其它返回值表示初始化失败 - -#### FCanRecv - -- 接收can数据 - -```c -FError FCanRecv(FCanCtrl *instance_p, FCanFrame *frame_p); -``` - -Note: - -- 指定can控制器接收can数据 - -Input: - -- {FCanCtrl} *instance_p,fcan驱动控制数据 -- {FCanFrame} *frame_p,can数据 - -Return: - -- {FError} 驱动初始化的错误码信息,FCAN_SUCCESS 表示初始化成功,其它返回值表示初始化失败 - -#### FCanRegisterInterruptHandler - -- 注册can中断事件函数 - -```c -void FCanRegisterInterruptHandler(FCanCtrl *instance_p, FCanIntrEventConfig *intr_event_p); -``` - -Note: -- 无 - -Input: -- {FCanCtrl} *instance_p,fcan驱动控制数据 -- {FCanIntrEventConfig} *intr_event_p,中断事件类型,回调函数,回调函数参数 - -Return: -- 无 - -#### FCanIntrHandler - -- can中断处理函数入口 - -```c -void FCanIntrHandler(s32 vector, void *args); -``` - -Note: -- 根据中断类型,设置对应的回调函数和参数传入 - -Input: -- {s32} vector -- {void} *param, 输入参数,指向fcan驱动控制数据 - -Return: -- 无 - -#### FCanIdMaskFilterSet - -- can id过滤设置 - -```c -FError FCanIdMaskFilterSet(FCanCtrl *instance_p, FCanIdMaskConfig *id_mask_p); -``` - -Note: -- 设置可接收帧id值和掩码 - -Input: -- {FCanCtrl} *instance_p, fcan驱动控制数据 -- {FCanIdMaskConfig} *id_mask_p, 过滤寄存器序号,可接收帧id,可接收帧id掩码 - -Return: -- {FError} 驱动初始化的错误码信息,FCAN_SUCCESS 表示初始化成功,其它返回值表示初始化失败 \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/doc/reference/driver/fddma.md b/bsp/phytium/libraries/standalone/doc/reference/driver/fddma.md deleted file mode 100644 index e45c959d86..0000000000 --- a/bsp/phytium/libraries/standalone/doc/reference/driver/fddma.md +++ /dev/null @@ -1,287 +0,0 @@ -# FDDMA 驱动程序 - -## 1. 概述 - -DDMA(Device Direct Memory Access)是E2000提供的一个通用DMA控制模块,支持典型的DMA操作,提供多个DMA通道,多个通道可以同时工作,独立配置给不同外设使用 - -## 2. 功能 - -FDDMA 驱动程序主要完成 DDMA 模块的初始化,DDMA通道的分配与释放, -相关源文件为: -``` -fddma - . - ├── fddma.c - ├── fddma.h - ├── fddma_g.c - ├── fddma_hw.c - ├── fddma_hw.h - ├── fddma_intr.c - ├── fddma_selftest.c - └── fddma_sinit.c -``` - -## 3. 配置方法 - -以下部分将指导您完成 FDDMA 驱动的软件配置: - -- 初始化 DDMA 控制器 -- 配置 DDMA 通道,与外设完成绑定 -- 启动 DDMA 通道 - -## 4 应用示例 - -### [通过DDMA搬运SPI数据完成回环测试](../../../baremetal/example/peripheral/dma/fddma_spi) - -## 5. API参考 - -### 5.1. 用户数据结构 - -#### FDdmaConfig - -- DDMA 实例配置 - -```c -typedef struct -{ - u32 id; /* DDMA ctrl id */ - uintptr base_addr; /* DDMA ctrl base address */ - u32 irq_num; /* DDMA ctrl interrupt id */ - u32 irq_prority; /* DDMA ctrl interrupt priority */ -} FDdmaConfig; /* DDMA instance configuration */ -``` - -#### FDdmaChanConfig - -- DDMA 通道配置 - -```c -typedef struct -{ - FDdmaChanIndex id; /* DMA channel index */ - u32 slave_id; /* Perpherial slave id for DDMA */ - FDdmaChanRequst req_mode; /* DMA transfer direction */ - uintptr ddr_addr; /* DMA channel DDR address, could be source or destination */ - u32 dev_addr; /* DMA channel Perpherial, could be source or destination */ - u32 trans_len; /* DMA channel transfer length */ -#define FDDMA_MIN_TRANSFER_LEN 4 /* min bytes in transfer */ - u32 timeout; /* timeout = 0 means no use DMA timeout */ -} FDdmaChanConfig; /* DDMA channel instance */ -``` - -#### FDdmaChan - -- DDMA 通道实例 - -```c -typedef struct FDdmaChan_ -{ - FDdmaChanConfig config; /* DDMA channel configuration */ - boolean is_used; /* TRUE means channel is in use */ - FDdma *dma; /* DMA instance of this channel */ - FDdmaChanEvtHandler evt_handler[FDDMA_NUM_OF_CHAN_EVT]; /* interrupt evt */ - void *evt_handler_args[FDDMA_NUM_OF_CHAN_EVT]; /* interrupt evt args */ -} FDdmaChan; /* DDMA channel instance */ -``` - -#### FDdma - -- DDMA 控制器实例 - -```c -typedef struct FDdma_ -{ - FDdmaConfig config; /* DDMA instance configuration */ - FDdmaChan *chan[FDDMA_NUM_OF_CHAN]; /* DDMA channel instance, NULL means channel not yet allocate */ - u32 is_ready; /* TRUE means DDMA init ok */ - u32 bind_status; /* channel bind status, BIT(n) = 1 means channel n is allocated */ -} FDdma; /* DDMA instance */ -``` - -### 5.2 错误码定义 - - -- FDDMA_SUCCESS : 成功 -- FDDMA_ERR_NOT_INIT :驱动未初始化 -- FDDMA_ERR_CHAN_BINDED :通道已经绑定无法分配 -- FDDMA_ERR_CHAN_RUNNING : 通道正在工作无法分配 -- FDDMA_ERR_INVALID_TRANS_SIZE : DMA传输字节数不合法 -- FDDMA_ERR_WAIT_TIMEOUT : DMA等待超时 -- FDDMA_ERR_INVALID_DDR_ADDR : DMA传输地址不合法 - -### 5.3. 用户API接口 - -#### FDdmaLookupConfig - - -```c -const FDdmaConfig *FDdmaLookupConfig(u32 instance_id); -``` - -Note: - -- 获取DDMA实例默认配置 - -Input: - -- {u32} instance_id, DDMA实例号 - -Return: - -- {const FDdmaConfig *} DDMA控制器默认配置 - -#### FDdmaCfgInitialization - - -```c -FError FDdmaCfgInitialization(FDdma *const instance, const FDdmaConfig *input_config); -``` - -Note: - -- 初始化DDMA控制器 - -Input: - -- {FDdma} *instance, DDMA控制器实例 -- {FDdmaConfig} *input_config, DDMA控制器配置 - -Return: - -- {FError} FDDMA_SUCCESS表示初始化成功,其它返回值表示初始化失败 - -#### FDdmaDeInitialization - - -```c -void FDdmaDeInitialization(FDdma *const instance); -``` - -Note: - -- 去初始化DDMA控制器 - -Input: - -- {FDdma} *instance, DDMA控制器实例 - -Return: - -- 无 - -#### FDdmaAllocateChan - -```c -FError FDdmaAllocateChan(FDdma *const instance, FDdmaChan *const dma_chan, const FDdmaChanConfig *dma_chan_config); -``` - -Note: - -- 按照配置分配并使能DDMA通道 - -Input: - -- {FDdma} *instance, DDMA控制器实例 -- {FDdmaChan} *dma_chan, DDMA通道实例 -- {FDdmaChanConfig} *dma_chan_config, DDMA通道配置 - -Return: - -- {FError} FDDMA_SUCCESS表示分配成功,其它返回值表示分配失败 - -#### FDdmaDellocateChan - -```c -FError FDdmaDellocateChan(FDdmaChan *const dma_chan); -``` - -Note: - -- 释放之前分配的DDMA通道 - -Input: - -- {FDdmaChan} *dma_chan, DDMA控制器实例 - -Return: - -- {FError} FDDMA_SUCCESS表示释放成功,其它返回值表示释放失败 - -#### FDdmaStart - -```c -FError FDdmaStart(FDdma *const instance); -``` - -Note: - -- 启动DDMA控制器,开始传输 - -Input: - -- {FDdma} *instance, DDMA控制器实例 - -Return: - -- {FError} FDDMA_SUCCESS表示启动成功,其它返回值表示启动失败 - -#### FDdmaStop - -```c -FError FDdmaStop(FDdma *const instance); -``` - -Note: - -- 停止DDMA控制器 - -Input: - -- {FDdma} *instance, DDMA控制器实例 - -Return: - -- {FError} FDDMA_SUCCESS表示停止成功,其它返回值表示停止失败 - -#### FDdmaIrqHandler - -```c -void FDdmaIrqHandler(s32 vector, void *args) -``` - -Note: - -- DDMA中断处理函数 - -Input: - -- {s32} vector -- {void} *param, 输入参数 - -Return: - -- 无 - -#### FDdmaRegisterChanEvtHandler - -```c -void FDdmaRegisterChanEvtHandler(FDdmaChan *const dma_chan, - FDdmaChanEvt evt, - FDdmaChanEvtHandler handler, - void *handler_arg); -``` - -Note: - -- 注册DDMA通道中断响应事件函数 - -Input: - -- {FDdmaChan} *dma_chan, DDMA通道 -- {FDdmaChanEvt} evt, 中断事件 -- {FDdmaChanEvtHandler} handler, 中断响应事件函数 -- {void} *handler_arg, 中断响应事件函数输入参数 - -Return: - -- 无 \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/doc/reference/driver/fgdma.md b/bsp/phytium/libraries/standalone/doc/reference/driver/fgdma.md deleted file mode 100644 index 0fa20eb345..0000000000 --- a/bsp/phytium/libraries/standalone/doc/reference/driver/fgdma.md +++ /dev/null @@ -1,402 +0,0 @@ -# FGDMA 驱动程序 - -## 1. 概述 - -GDMA(Generic Direct Memory Access),提供多个DMA通道,多个通道可以同时工作,独立配置给不同内存数据搬运使用 - - -## 2. 功能 - -FGDMA 驱动程序主要完成 GDMA 模块的初始化,GDMA 通道的分配与释放, -相关源文件为: -``` -fgdma - . - ├── fgdma.c - ├── fgdma.h - ├── fgdma_g.c - ├── fgdma_hw.h - ├── fgdma_intr.c - ├── fgdma_selftest.c - └── fgdma_sinit.c -``` - -## 3. 配置方法 - -以下部分将指导您完成 FGDMA 驱动的软件配置: - -- 初始化 GDMA 控制器 -- 配置 GDMA 通道,使用直接模式或者 BDL 模式进行操作 -- 启动 GDMA 通道 - -## 4. 应用示例 - -### [通过GDMA拷贝内存数据](../../../baremetal/example/peripheral/dma/fgdma_async_memcpy) - -## 5. API参考 - -### 5.1. 用户数据结构 - -#### FGdmaConfig - -- GDMA控制器配置 - -```c -typedef struct -{ - u32 instance_id; /* GDMA控制器ID */ - u32 irq_num[FGDMA_NUM_OF_CHAN]; /* GDMA控制器中断号 */ - u32 irq_prority; /* GDMA控制器中断优先级 */ - volatile uintptr_t base_addr; /* GDMA控制器基地址 */ - FGdmaOperPriority rd_qos; /* 读操作优先级 */ - FGdmaOperPriority wr_qos; /* 写操作优先级 */ - u32 caps; /* driver capacity */ -} FGdmaConfig; /* GDMA控制器配置 */ -``` - -#### FGdmaChanConfig - -- DMA通道配置 - -```c -typedef struct -{ - FGdmaChanIndex chan_id; /* DMA通道ID */ - FGdmaOperPriority rd_qos; /* DMA通道读Qos配置 */ - FGdmaOperPriority wr_qos; /* DMA通道写Qos配置 */ - FGdmaOperMode trans_mode; /* DMA通道的操作模式,直接模式或者BDL模式 */ - /* Direct模式有效 */ - FGdmaBurstSize rd_size; /* DMA读请求的burst size */ - FGdmaBurstSize wr_size; /* DMA写请求的burst size */ - /* BDL模式有效 */ - boolean roll_back; /* 循环模式,TRUE: 当前BDL列表完成后,从第一个BDL项从新开始传输 */ - FGdmaBdlDesc *descs; - u32 total_desc_num; - u32 valid_desc_num; -} FGdmaChanConfig; /* DMA通道配置 */ -``` - -#### FGdmaChan - -- GDMA通道实例 - -```c -typedef struct _FGdmaChan -{ - FGdmaChanConfig config; /* DMA通道配置 */ - FGdma *gdma; /* DMA控制器实例 */ - FGdmaChanEvtHandler evt_handlers[FGDMA_CHAN_NUM_OF_EVT]; /* DMA通道事件回调函数 */ - void *evt_handler_args[FGDMA_CHAN_NUM_OF_EVT]; /* DMA通道事件回调函数入参 */ -} FGdmaChan; /* GDMA通道实例 */ -``` - -#### FGdma - -- GDMA控制器实例 - -```c -typedef struct _FGdma -{ - FGdmaConfig config; /* GDMA控制器配置 */ - u32 is_ready; /* GDMA控制器初始化是否完成 */ - FGdmaChan *chans[FGDMA_NUM_OF_CHAN]; /* GDMA通道实例,如果通道没有分配,值为NULL */ -} FGdma; /* GDMA控制器实例 */ -``` - -#### FGdmaBdlDesc - -- BDL描述符 - -```c -typedef struct -{ - u32 src_addr_l; /* 0x0, 数据源地址低32位 */ - u32 src_addr_h; /* 0x4, 数据源地址高32位 */ - u32 dst_addr_l; /* 0x8, 数据目的地址低32位 */ - u32 dst_addr_h; /* 0xc, 数据目的地址高32位 */ -#define FGDMA_SRC_TC_BDL_BURST_SET(x) SET_REG32_BITS((x), 1U, 0U) -#define FGDMA_SRC_TC_BDL_SIZE_SET(x) SET_REG32_BITS((x), 6U, 4U) -#define FGDMA_SRC_TC_BDL_LEN_SET(x) SET_REG32_BITS((x), 15U, 8U) - u32 src_tc; /* 0x10, 源传输控制位 */ -#define FGDMA_DST_TC_BDL_BURST_SET(x) SET_REG32_BITS((x), 1U, 0U) -#define FGDMA_DST_TC_BDL_SIZE_SET(x) SET_REG32_BITS((x), 6U, 4U) -#define FGDMA_DST_TC_BDL_LEN_SET(x) SET_REG32_BITS((x), 15U, 8U) - u32 dst_tc; /* 0x14, 目的传输控制 */ - u32 total_bytes;/* 0x18, 传输数据总量,以Byte为单位 */ - u32 ioc; /* 0x1c, 该条目传输完成中断产生控制位 */ -} __attribute__((__packed__)) FGdmaBdlDesc; /* BDL描述符 */ -``` - -```c -/* gdma capacity mask */ - -#define FGDMA_IRQ1_MASK BIT(0) /* All Gdma channel share a single interrupt */ -#define FGDMA_IRQ2_MASK BIT(1) /* Each gdma channel owns an independent interrupt */ -#define FGDMA_TRANS_NEED_RESET_MASK BIT(2) /* Gdma needs to be reset before transmission */ - -``` - - -### 5.2 错误码定义 - -#define FGDMA_SUCCESS : 成功 -#define FGDMA_ERR_NOT_INIT : 驱动未初始化 -#define FGDMA_ERR_CHAN_IN_USE : 通道已经绑定无法分配 -#define FGDMA_ERR_CHAN_NOT_INIT : 通道未初始化 -#define FGDMA_ERR_INVALID_ADDR : 传输地址非法 -#define FGDMA_ERR_INVALID_SIZE : 传输字节数非法 -#define FGDMA_ERR_BDL_NOT_ENOUGH : BDL已经使用完 - - -### 5.3. 用户API接口 - -#### FGdmaLookupConfig - -```c -const FGdmaConfig *FGdmaLookupConfig(u32 instance_id) -``` - -Note: - -- 获取GDMA控制器默认配置 - -Input: - -- {u32} instance_id, GDMA控制器ID - -Return: - -- {const FGdmaConfig *} 控制器默认配置 - -#### FGdmaCfgInitialize - -```c -FError FGdmaCfgInitialize(FGdma *const instance_p, const FGdmaConfig *input_config) -``` - -Note: - -- 初始化GDMA控制器实例 - -Input: - -- FGdma *const instance_p, GDMA控制器实例 -- const FGdmaConfig *input_config, GDMA控制器配置 - -Return: - -- {FError} 返回FGDMA_SUCCESS表示初始化成功,返回其它表示失败 - -#### FGdmaDeInitialize - -```c -void FGdmaDeInitialize(FGdma *const instance_p) -``` - -Note: - -- 去初始化GDMA控制器实例 - -Input: - -- FGdma *const instance_p, GDMA控制器实例 - -Return: - -- 无 - -#### FGdmaAllocateChan - -```c -FError FGdmaAllocateChan(FGdma *const instance_p, FGdmaChan *const dma_chan, - const FGdmaChanConfig *dma_chan_config) -``` - -Note: - -- 分配指定GDMA通道 - -Input: - -- FGdma *const instance_p, GDMA控制器实例 -- FGdmaChan *const dma_chan, GDMA通道实例 -- const FGdmaChanConfig *dma_chan_config, GDMA通道配置 - -Return: - -- {FError} FGDMA_SUCCESS表示分配成功,返回其它值表示分配失败 - -#### FGdmaDellocateChan - -```c -FError FGdmaDellocateChan(FGdmaChan *const dma_chan) -``` - -Note: - -- 释放GDMA通道 - -Input: - -- FGdmaChan *const dma_chan, GDMA通道实例 - -Return: - -- {FError} FGDMA_SUCCESS表示处理成功 - -#### FGdmaDirectTransfer - -```c -FError FGdmaDirectTransfer(FGdmaChan *const chan_p, uintptr src_addr, uintptr dst_addr, fsize_t data_len); - -``` - -Note: - -- 直接操作模式下发起DMA传输 - -Input: - -- FGdmaChan *const chan_p, GDMA通道实例 -- uintptr src_addr, 传输源地址 -- uintptr dst_addr, 传输目的地址 - -Return: - -- {FError} FGDMA_SUCCESS表示传输成功 - -#### FGdmaAppendBDLEntry - -```c -FError FGdmaAppendBDLEntry(FGdmaChan *const chan_p, uintptr src_addr, uintptr dst_addr, fsize_t data_len) -``` - -Note: - -- 设置BDL描述符的一个条目 - -Input: - -- FGdmaBdlDesc *desc_entry, 一条BDL描述符 -- uintptr src_addr, 传输源地址 -- uintptr dst_addr, 传输目的地址 -- fsize_t data_len, 传输数据长度 - -Return: - -- {FError} FGDMA_SUCCESS 表示设置成功 - -#### FGdmaBDLTransfer - -```c -FError FGdmaBDLTransfer(FGdmaChan *const chan_p) -``` - -Note: - -- BDL操作模式下发起DMA传输 - -Input: - -- FGdmaChan *const chan_p, DMA通道实例 - -Return: - -- {FError} FGDMA_SUCCESS 表示传输成功 - -#### FGdmaStart - -```c -FError FGdmaStart(FGdma *const instance_p) -``` - -Note: - -- 使能启动GDMA控制器 -- 先调用此函数,后调用FGdmaAllocateChan配置特定通道 - -Input: - -- FGdma *const instance_p, GDMA控制器实例 - -Return: - -- {FError} FGDMA_SUCCESS表示启动成功 - -#### FGdmaStop - -```c -FError FGdmaStop(FGdma *const instance_p) -``` - -Note: - -- 停止GDMA控制器 - -Input: - -- FGdma *const instance_p, GDMA控制器实例 - -Return: - -- {FError} FGDMA_SUCCESS表示处理成功 - -#### FGdmaIrqHandler - -```c -void FGdmaIrqHandler(s32 vector, void *args) -``` - -Note: - -- 当 FGdmaConfig.caps 为FGDMA_IRQ1_MASK 特性时,各通道统一上报至一个中断,选择使用此函数作为中断处理函数 - -Input: - -- {s32} vector, 中断号 -- {void} *args, 中断参数 - -Return: - -- 无 - - -#### FGdmaIrqHandlerPrivateChannel -```c -void FGdmaIrqHandlerPrivateChannel(s32 vector, void *args) -``` - -Note: - -- 当 FGdmaConfig.caps 为FGDMA_IRQ2_MASK 特性时,各通道独立上报中断,选择使用此函数作为中断处理函数 - -Input: - -- {s32} vector, 中断号 -- {void} *args, 中断参数 - -Return: - -- 无 - -#### FGdmaChanRegisterEvtHandler - -```c -void FGdmaChanRegisterEvtHandler(FGdmaChan *const chan_p, FGdmaChanEvtType evt, - FGdmaChanEvtHandler handler, void *handler_arg) -``` - -Note: - -- 注册GDMA通道事件回调函数 - -Input: - -- {FGdmaChan} *chan_p, GDMA通道实例 -- {FGdmaChanEvtType} evt, 通道事件 -- {FGdmaChanEvtHandler} handler, 事件回调函数 -- {void} *handler_arg, 事件回调函数输入参数 - -Return: - -- 无 diff --git a/bsp/phytium/libraries/standalone/doc/reference/driver/fgic.md b/bsp/phytium/libraries/standalone/doc/reference/driver/fgic.md deleted file mode 100644 index 88ca7a1ee8..0000000000 --- a/bsp/phytium/libraries/standalone/doc/reference/driver/fgic.md +++ /dev/null @@ -1,441 +0,0 @@ - - - -# GIC 驱动说明 - -## 1.驱动概述 - -GIC 是通用中断控制器,它为ARM CPU提供外设中断与软件中断的控制,GIC主要支持SPI\SGI\PPI等不同类型的中断,本版本支持的驱动版本为GICv3,并且支持了以下特性: -1.SPI支持多核心路由配置、优先级配置、使能关闭功能 -2.SGI提供软件触发接口、优先级配置、支持多核触发、目标核心触发、使能关闭功能 -3.PPI 提供优先级配置、使能关闭功能 -4.支持CPU interface 中断掩码配置 -5.支持组优先级分组配置 -6.当前仅支持双安全态下的Non-secure访问 - -## 2.驱动功能 - -驱动组成由以下所示 -``` -. -├── fgic.c -├── fgic.h -├── fgic_cpu_interface.S -├── fgic_cpu_interface.h -├── fgic_distributor.h -├── fgic_g.c -├── fgic_hw.h -├── fgic_redistributor.h -└── fgic_sinit.c -``` -- 其中fgic.c/h 为开发者提供以下功能: -1. 初始化GIC 中断实例 -2. 提供基于中断号中断开关功能 -3. 提供基于中断号中断优先级设置与获取功能 -4. 提供基于中断号触发方式 -5. 提供SGI中断触发功能 -6. 提供中断承认(Acknowledge)接口 -7. 提供中断优先级掩码配置与获取功能 -8. 提供Distrutior、Redistrubutior、CPU interface 的 初始化功能 - -## 3.数据结构 - -``` -typedef struct -{ -    u32 instance_id; /*Gic 实例编号*/ -    uintptr dis_base; /* Distributor 基地址*/ -    -} FGicConfig; - -``` - -``` -typedef struct -{ -    FGicConfig config; /* 配置数据结构*/ -    u32 is_ready;       /* 驱动实例的状态 */ -    uintptr redis_base; /* 当前实例核心对应的Redistributor 地址  */ -    SECURITY_STATE security ; /* GIC 驱动当前支持的安全态模式 */ -    s32 max_spi_num;    /* SPI 最大中断优先级ID */ -} FGic; -``` - -## 4.错误码定义 - -``` -FGIC_CTLR_ERR_TYPE   /* 错误选择CTLR 寄存器 */ -FGIC_CTLR_ERR_NUM     /* 当前控制器不支持此中断id */ -FGIC_CTLR_ERR_IN_SET   /* 在设置过程中出现的异常 */ -FGIC_CTLR_ERR_IN_GET   /* 在获取过程中出现的异常 */ -``` - -## 5.应用示例 - -common/interrupt.c 中断接口提供底层支持 -/baremetal/example/peripheral/gic/fgic_test gic特性例程 - -## 6.API介绍 - -### 1. FGicLookupConfig - -``` -FGicConfig *FGicLookupConfig(u32 instance_id) -``` - -#### 介绍 -获取当前GIC 驱动默认配置 -#### 参数 -- u32 instance_id :当前GIC 驱动中对应的ID - -#### 返回 -- FGicConfig * :静态默认配置 - -### 2. FGicCfgInitialize - -``` -FError FGicCfgInitialize(FGic *instance_p, const FGicConfig *input_config_p , uintptr redis_base) -``` - -#### 介绍 -根据传入配置,初始化GIC 驱动实例 - -#### 参数 -- FGic *instance_p:指向FGic实例的指针 -- const FGicConfig *input_config_p:需要应用于示例中的配置项 -- redis_base:是当前内核的重分发地址 - -#### 返回 -- FError :FGIC_SUCCESS 为初始成功 - - -### 3. FGicDistrubutiorInit - -``` -void FGicDistrubutiorInit(FGic *instance_p) -``` - -#### 介绍 -初始化Distrubutior 模块 - -#### 参数 -- FGic *instance_p:指向FGic实例的指针 - -#### 返回 -无 - -### 4. FGicRedistrubutiorInit - -``` -FError FGicRedistrubutiorInit(FGic *instance_p) -``` - -#### 介绍 -初始化Redistrubutior 模块 - -#### 参数 -- FGic *instance_p:指向FGic实例的指针 - -#### 返回 -- {FError} FGIC_SUCCESS is success ,FGIC_ERR_IN_TIMEOUT is timeout - -### 5. FGicCpuInterfaceInit - -``` -void FGicCpuInterfaceInit(void) -``` - -#### 介绍 -初始化当前核心下的cpu interface模块 - -#### 返回 -无 - -### 6. FGicIntEnable - -``` -FError FGicIntEnable(FGic *instance_p,s32 int_id) -``` - -#### 介绍 -基于中断号使能中断功能 - -#### 参数 -- FGic *instance_p:指向FGic实例的指针 -- s32 int_id:中断ID - -#### 返回 -- FError :FGIC_SUCCESS 为操作成功 - -### 7. FGicIntDisable - -``` -FError FGicIntDisable(FGic *instance_p,s32 int_id) -``` - -#### 介绍 -基于中断号关闭中断功能 - -#### 参数 -- FGic *instance_p:指向FGic实例的指针 -- s32 int_id:中断ID - -#### 返回 -- FError :FGIC_SUCCESS 为操作成功 - -### 8. FGicSetPriority - -``` -FError FGicSetPriority(FGic *instance_p,s32 int_id,u32 priority) -``` - -#### 介绍 -基于中断号设置当前中断优先级的值 - -#### 参数 -- FGic *instance_p:指向FGic实例的指针 -- s32 int_id:中断ID -- u32 priority: 中断优先级的值,有效值8bit - -#### 返回 -- FError :FGIC_SUCCESS 为操作成功 ,当反馈为FGIC_CTLR_ERR_IN_GET 时,表示中断ID超过范围 - -### 9. FGicGetPriority - -``` -u32 FGicGetPriority(FGic *instance_p,s32 int_id) -``` - -#### 介绍 -基于中断号获取当前中断优先级的值 - -#### 参数 -- FGic *instance_p:指向FGic实例的指针 -- s32 int_id:中断ID - -#### 返回 -- u32 :中断优先级的值,有效值8bit 。当反馈为FGIC_CTLR_ERR_IN_GET 时,表示中断ID超过范围 - -### 10. FGicSetTriggerLevel - -``` -FError FGicSetTriggerLevel(FGic *instance_p,s32 int_id,TRIGGER_LEVEL trigger_way) -``` - -#### 介绍 -基于当前中断号配置中断触发模式 - -#### 参数 -- FGic *instance_p:指向FGic实例的指针 -- s32 int_id:中断ID -- TRIGGER_LEVEL trigger_way:中断触发模式 , 参数为0的时为电平触发,参数为1的时为电平触发 - -#### 返回 -- FError :FGIC_SUCCESS 为操作成功 ,当反馈为FGIC_CTLR_ERR_IN_GET 时,表示中断ID超过范围 - -### 11. FGicGetTriggerLevel - -``` -u32 FGicGetTriggerLevel(FGic *instance_p,s32 int_id) -``` - -#### 介绍 -基于当前中断号获取中断触发模式 - -#### 参数 -- FGic *instance_p:指向FGic实例的指针 -- s32 int_id:中断ID - -#### 返回 -- TRIGGER_LEVEL trigger_way:中断触发模式 , 参数为0的时为电平触发,参数为1的时为电平触发 - -### 12. FGicSetSpiAffinityRouting - -``` -FError FGicSetSpiAffinityRouting(FGic *instance_p,s32 int_id,SPI_ROUTING_MODE route_mode,u64 affinity) -``` - -#### 介绍 -为特定的SPI中断设置中间路由信息 - -#### 参数 -- FGic *instance_p:指向FGic实例的指针 -- s32 int_id:中断ID -- SPI_ROUTING_MODE route_mode:中断路由模式 ,SPI_ROUTING_TO_SPECIFIC spi 中断路由给特定PE ,SPI_ROUTING_TO_ANY spi 中断将路由给任何开启本SPI 的PE处 -- u64 affinity:亲和度参数,它的格式为: - * |--------[bit39-32]-------[bit23-16]-------------[bit15-8]--------[bit7-0] - * |--------Affinity level3-----Affinity level2-----Affinity level1---Affinity level0 - -#### 返回 -- FError :FGIC_SUCCESS 为操作成功,FGIC_CTLR_ERR_IN_SET 为中断ID 不符合SPI的范围 - - -### 13. FGicGetAffinityRouting - -``` -FError FGicGetAffinityRouting(FGic *instance_p,s32 int_id,SPI_ROUTING_MODE *route_mode_p,u64 *affinity_p) -``` - -#### 介绍 -获取特定的SPI中断设置路由信息 - -#### 参数 -- FGic *instance_p:指向FGic实例的指针 -- s32 int_id:中断ID -- SPI_ROUTING_MODE *route_mode_p:中断路由模式实例的指针 ,当参数为SPI_ROUTING_TO_SPECIFIC spi 中断路由给特定PE , SPI_ROUTING_TO_ANY spi 中断将路由给任何开启本SPI 中断的PE处 -- u64 *affinity_p:亲和度参数实例的指针,它的值格式为: - * |--------[bit39-32]-------[bit23-16]-------------[bit15-8]--------[bit7-0] - * |--------Affinity level3-----Affinity level2-----Affinity level1---Affinity level0 - -#### 返回 -- FError :FGIC_SUCCESS 为操作成功,FGIC_CTLR_ERR_IN_GET 为中断ID 不符合SPI的范围 - -### 14. FGicGenerateSgi -``` -FError FGicGenerateSgi(FGic *instance_p,s32 int_id,u32 target_list,SGI_ROUTING_MODE routing_mode,u64 affinity) -``` - -#### 介绍 -基于中断id产生SGI中断的接口 - -#### 参数 -- FGic *instance_p:指向FGic实例的指针 -- s32 int_id:中断ID -- u32 target_list:将为其生成SGI中断的pe集合 。每一位对应一个集群内的一个PE -SGI_ROUTING_MODE routing_mode:SGI 的路由模式,SGI_ROUTING_TO_SPECIFIC 为特定的PE,SGI_ROUTING_TO_ANY 为所有的PE 除开自己这个核心。 -- u64 affinity :亲和度参数,它的格式为: - * |--------[bit55-48]-------[bit39-32]-------------[bit23-16] - * |--------Affinity level3-----Affinity level2-----Affinity level1 - -#### 返回 -- FError :FGIC_SUCCESS 为操作成功,FGIC_CTLR_ERR_IN_SET 为中断ID 不符合SGI的范围 - -### 15. FGicDeactionInterrupt - -``` -void FGicDeactionInterrupt(FGic *instance_p,s32 int_id) -``` - -#### 介绍 -钝化正处于激活态的中断 - -#### 参数 -- FGic *instance_p:指向FGic实例的指针 -- s32 int_id:中断ID - -#### 返回 -无 - -### 16. FGicAcknowledgeInt - -``` -s32 FGicAcknowledgeInt(FGic *instance_p) -``` - -#### 介绍 -承认当前被挂起的中断 - -#### 参数 -- FGic *instance_p:指向FGic实例的指针 - -#### 返回 -- s32 int_id:被承认的中断ID - - -### 17. FGicSetPriorityFilter - -``` -void FGicSetPriorityFilter(FGic *instance_p,u32 priority_mask) -``` - -#### 介绍 -通过设置ICC_PMR参数,确定中断控制器可以响应的中断范围 - -#### 参数 -- FGic *instance_p:指向FGic实例的指针 -- u32 priority_mask:如果一个中断的优先级低于该字段所指定的值,则接口向PE发送中断信号。 priority_mask的参考值如下所示 : - * |priority_mask---------------256-------254--------252------248-------240 - * |Implemented priority bits---[7:0]----[7:1]------[7:2]-----[7:3]-----[7:4] - * |priority the growing steps--any-----even value----4---------8--------16 - -#### 返回 -无 - -### 18. FGicSetPriorityGroup - -``` -void FGicSetPriorityGroup(FGic *instance_p,u32 binary_point) -``` - -#### 介绍 -设置当前组优先级的值 - -#### 参数 -- FGic *instance_p:指向FGic实例的指针 -- u32 binary_point:该字段的值控制如何将8位中断优先级字段拆分为组优先级和子优先级, -- binary_point值与分组的关系如下所示 - * |return value----------------0-------1--------2------3-------4------5------6-------7 - * |Group priority field------[---]----[7:1]---[7:2]--[7:3]---[7:4]---[7:5]---[7:6]---[7] - * |Subpriority field---------[---]-----[0]----[1:0]--[2:0]---[3:0]---[4:0]---[5:0]---[6:0] - -#### 返回 -无 - - -### 19. FGicGetPriorityFilter - -``` -u32 FGicGetPriorityFilter(FGic *instance_p) -``` - -#### 介绍 -获取当前优先级过滤值 - -#### 参数 -- FGic *instance_p:指向FGic实例的指针 - -#### 返回 -- u32 Priority Mask,CPU接口中的优先级掩码 ,如果一个中断的优先级低于该字段所指定的值,则接口向PE发送中断信号。 priority_mask的参考值如下所示 : - * |return value------------------256------254--------252------248-------240 - * |Implemented priority bits---[7:0]----[7:1]------[7:2]-----[7:3]-----[7:4] - * |priority the growing steps---any-----even value----4--------8-------16 - -### 20. FGicGetPriorityGroup - -``` -u32 FGicGetPriorityGroup(FGic *instance_p) -``` - -#### 介绍 -获取当前CPU interface 中的分组值 - -#### 参数 -- FGic *instance_p:指向FGic实例的指针 - -#### 返回 -- u32 Priority group,该字段的值控制如何将8位中断优先级字段拆分为组优先级和子优先级, -binary_point值与分组的关系如下所示 - * |return value----------------0-------1--------2------3-------4------5------6-------7 - * |Group priority field------[---]----[7:1]---[7:2]--[7:3]---[7:4]---[7:5]---[7:6]---[7] - * |Subpriority field---------[---]-----[0]----[1:0]--[2:0]---[3:0]---[4:0]---[5:0]---[6:0] \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/doc/reference/driver/fgmac.md b/bsp/phytium/libraries/standalone/doc/reference/driver/fgmac.md deleted file mode 100644 index 6fa5768cf2..0000000000 --- a/bsp/phytium/libraries/standalone/doc/reference/driver/fgmac.md +++ /dev/null @@ -1,466 +0,0 @@ -# FGMAC 驱动程序 - -## 1. 概述 - -以太网控制器(GMAC)的主要功能是在兼容 IEEE802.3-2005 标准的以太网中发送和接收数据,支持 RGMII 的 PHY 接口 - -GMAC 接口特点包括 -- 支持速率 1000Mbps/100Mbps/10Mbps -- 支持 IEEE 802.3-2005 Ethernet MAC,Reduced Gigabit Media Independent Interface (RGMII) - -## 2. 功能 - -FGMAC 驱动程序提供了以太网控制器初始化,发送/接收数据和配置PHY接口等功能 - -FGMAC 驱动程序的源文件包括, - -``` -├── Kconfig -├── fgmac.c -├── fgmac.h -├── fgmac_dma.c -├── fgmac_g.c -├── fgmac_hw.c -├── fgmac_hw.h -├── fgmac_intr.c -├── fgmac_sinit.c -└── phy - ├── ar803x - │   ├── fgmac_ar803x.c - │   └── fgmac_ar803x.h - ├── fgmac_phy.c - └── fgmac_phy.h -``` - -## 3. 配置方法 - -以下部分将指导您完成 FGMAC 驱动的硬件/软件配置: - -- 选择开发板上的特定 GMAC 控制器,连通网线 -- 通过驱动 API,获取指定 GMAC 控制器的默认配置 -- 按需要修改获取的 GMAC 默认配置,通过驱动API,进行 GMAC 控制器的初始化 -- 通过驱动API,获取 PHY 的默认配置 -- 按需要修改获取的 PHY 默认配置,通过驱动API,进行 PHY 的初始化 -- 分配 GMAC 数据传输使用的 DMA 描述符和 DMA 缓存区,通过驱动 API 进行注册 -- 通过驱动 API 发送/接收数据 - -网络通信依赖协议栈,可以参考应用例程,使用LWIP网络协议栈进行通信, - -## 4 应用示例 - -### [fgmac_link](../../../baremetal/example/fgmac_link/README.md) - -启动GMAC,接收网络数据并打印 - -### [fgmac_lwip_echo](../../../baremetal/example/fgmac_lwip_echo/README.md) - -启动LWIP网络协议栈,通过FGMAC驱动,支持开发板和网络主机的ping通 - -### [fgmac_lwip_tftp](../../../baremetal/example/fgmac_lwip_tftp/README.md) - -启动LWIP网络协议栈,通过FGMAC驱动,支持开发板通过tftp服务获取文件 - -## 5. API参考 - -### 5.1. 用户数据结构 - -- FGMAC 驱动配置数据 -```c -typedef struct -{ - u32 instance_id; /* device instance id */ - uintptr base_addr; /* device base address */ - u32 irq_num; /* irq num */ - u32 cheksum_mode; /* hardware or software checksum */ - u32 duplex_mode; /* selects the MAC duplex mode: Half-Duplex or Full-Duplex mode */ - u32 max_packet_size; /* max num of bytes in frame transfer */ - u32 mdc_clk_hz; /* MDC clock access PHY. [1.0MHz ~2.5MHz] */ - boolean en_auto_negtiation; /* auto-negotiation or not */ - u32 speed; /* sets the Ethernet speed: 10/100/1000 Mbps.*/ - -} FGmacConfig; /* FGMAC 驱动配置数据 */ -``` - -- FGMAC 驱动控制数据 -```c - -typedef struct -{ - FGmacConfig config; /* Current active configs */ - u32 is_ready; /* Device is initialized and ready */ - FGmacRingDescData rx_ring; /* RX DMA descriptor data (idx, length) */ - volatile FGmacDmaDesc *rx_desc; /* RX DMA descriptor table in ring */ - FGmacRingDescData tx_ring; /* TX DMA descriptor data (idx, length) */ - volatile FGmacDmaDesc *tx_desc; /* TX DMA descriptor table in ring */ - FGmacEvtHandler evt_handler[FGMAC_INTR_EVT_NUM]; /* User registered interrupt handler */ - u32 phy_valid_mask; - u32 phy_speed; - u32 phy_addr; /* phy ic addr */ -} FGmac; /* FGMAC 驱动控制数据 */ -``` - -- FGMAC DMA描述符 - -```c -typedef struct -{ - volatile u32 status; - u32 ctrl; - u32 buf_addr; - u32 next; -} FGmacDmaDesc; -``` - -- FGMAC DMA描述符表(链式)相关数据 -```c -typedef struct -{ - u32 desc_idx; /* For Current Desc position */ - u32 desc_buf_idx; /* For Current Desc buffer buf position */ - u32 desc_max_num; /* Max Number for Desc and Desc buffer */ - u8 *desc_buf_base; /* Desc buffer Base */ -} FGmacRingDescData; -``` - -- FGMAC 校验方法选择 -```c -enum -{ - FGMAC_CHECKSUM_BY_SOFTWARE = 0, - FGMAC_CHECKSUM_BY_HARDWARE -}; -``` - -- FGMAC 中断事件类型 -```c -enum -{ - FGMAC_TX_COMPLETE_EVT = 0, - FGMAC_RX_COMPLETE_EVT, - FGMAC_LINK_STATUS_EVT, - FGMAC_PHY_STATUS_EVT, - FGMAC_DMA_ERR_EVT, - - FGMAC_INTR_EVT_NUM -}; -``` - -### 5.2 错误码定义 - -- 模块错误码编号:0x1070000 -- [0x0] FGMAC: Success -- [0x1070001] FGMAC: wait timeout -- [0x1070002] FGMAC: DMA address invalid -- [0x1070003] FGMAC: driver not ready -- [0x1070004] FGMAC: data transaction failed -- [0x1070005] FGMAC: PHY type not support -- [0x1070006] FGMAC: PHY is not found - -### 5.3. 用户API接口 - -#### FGmacLookupConfig - -- 获取FGMAC驱动的默认配置参数 - -```c -const FGmacConfig *FGmacLookupConfig(u32 instance_id); -``` - -Note: - -- 返回FGMAC的默认配置,复制后修改配置 -- 需要确认当前平台支持输入的instance_id - -Input: - -- {u32} instance_id, 驱动控制器号 - -Return: - -- {const FGmacConfig *}, 驱动默认配置 -#### FGmacCfgInitialize - -- 完成FGMAC驱动实例的初始化,使之可以使用 - -```c -FError FGmacCfgInitialize(FGmac *instance_p, const FGmacConfig *cofig_p); -``` - -Note: - -- 此函数会重置FGMAC控制器和FGMAC控制数据 - -Input: - -- {FGmac} *instance_p 驱动控制数据 - -- {FGmacConfig} *cofig_p 驱动配置数据 - -Return: - -- {FError} 驱动初始化的错误码信息,FGMAC_SUCCESS 表示初始化成功,其它返回值表示初始化失败 - -#### FGmacDeInitialize - -- 完成FGMAC驱动实例去使能,清零实例数据 - -```c -FError FGmacDeInitialize(FGmac *instance_p); -``` - -Note: - -- 此函数会重置FGMAC控制数据 - -Input: - -- {FGmac} *instance_p 驱动控制数据 - -Return: - -- {FError} 驱动初始化的错误码信息,FGMAC_SUCCESS 表示去初始化成功,其它返回值表示去初始化失败 - -#### FGmacSetupTxDescRing - -- 配置FGMAC的发送DMA描述符和缓冲区 - -```c -FError FGmacSetupTxDescRing(FGmac *instance_p, volatile FGmacDmaDesc *tx_desc_tbl, u8 *tx_buf, const fsize_t tx_pre_buf_len, const fsize_t tx_buf_num); -``` - -Note: - -- 传入的tx_desc_tbl和tx_buf必须为32位空间地址 - -Input: - -- {FGmac *}instance_p 驱动控制数据 - -- {volatile FGmacDmaDesc *} tx_desc_tbl 发送DMA描述符表(数组) - -- {u8} *tx_buf 发送DMA缓冲区(数组,每一个描述符对应一个缓冲区) - -- {const fsize_t} tx_pre_buf_len 单个DMA缓冲区的字节数 - -- {const fsize_t} tx_buf_num DMA描述符或者DMA缓存区的数目 - -Return: - -- {FError} TX DMA初始化的错误码信息,FGMAC_SUCCESS 表示TX DMA初始化成功,其它返回值表示TX DMA初始化失败 - -#### FGmacSetupRxDescRing - -- 配置FGMAC的接收DMA描述符和缓冲区 - -```c -FError FGmacSetupRxDescRing(FGmac *instance_p, volatile FGmacDmaDesc *rx_desc_tbl, u8 *rx_buf, const fsize_t rx_pre_buf_len, const fsize_t rx_buf_num); -``` - -Note: - -- 传入的rx_desc_tbl和rx_buf必须为32位空间地址 - -Input: - -- {FGmac *}instance_p 驱动控制数据 -- {volatile FGmacDmaDesc *} rx_desc_tbl 接收DMA描述符表(数组) -- {u8} *rx_buf 接收DMA缓冲区(数组,每一个描述符对应一个缓冲区) -- {const fsize_t} rx_pre_buf_len 单个DMA缓冲区的字节数 -- {const fsize_t} rx_buf_num DMA描述符或者DMA缓存区的数目 - -Return: - -- {FError} RX DMA初始化的错误码信息,FGMAC_SUCCESS 表示RX DMA初始化成功,其它返回值表示RX DMA初始化失败 - -#### FGmacInterruptHandler - -- FGMAC中断处理函数 - -```c -void FGmacInterruptHandler(s32 vector, void *param); -``` - -Note: - -- 此函数运行在中断上下文 - -Input: - -- {s32} vector, 中断向量号,此处没有用到 -- {void} *param, 中断输入参数,此处传入的是FGMAC的驱动控制数据 - -Return: - -无 - -#### FGmacRegisterEvtHandler - -- 注册FGMAC中断事件响应函数 - -```c -void FGmacRegisterEvtHandler(FGmac *instance_p, u32 evt, FGmacEvtHandler handler); -``` - -Note: - -- 注册的函数handler会在中断上下文执行 - -Input: - -- {FGmac} *instance_p 驱动控制数据 -- {u32} evt 中断事件类型 -- {FGmacEvtHandler} handler 中断事件响应函数 - -Return: - -无 - -#### FGmacStartTrans - -- 使能FGMAC DMA,使之可以接收/发送数据 - -```c -FError FGmacStartTrans(FGmac *instance_p); -``` - -Note: - -- 调用函数前需要确保FGMAC驱动初始化成功 - -Input: - -- {FGmac} *instance_p 驱动控制数据 - -Return: - -- {FError} FGMAC_SUCCESS 表示启动成功,其它返回值表示启动失败 - -#### FGmacStopTrans - -- 去使能FGMAC DMA, 使之不再能接收/发送数据 - -```c -FError FGmacStopTrans(FGmac *instance_p); -``` - -Note: - -- 调用函数前需要确保FGMAC驱动初始化成功 - -Input: - -- {FGmac} *instance_p 驱动控制数据 - -Return: - -- {FError} FGMAC_SUCCESS 表示去启动成功,其它返回值表示去启动失败 - -#### FGmacRecvFrame - -- 通过FGMAC接收数据帧 - -```c -FError FGmacRecvFrame(FGmac *instance_p) -``` - -Note: - -- 调用函数前需要确保FGMAC驱动初始化成功 - -Input: - -- {FGmac} *instance_p 驱动控制数据 - -Return: - -- {FError} FGMAC_SUCCESS 表示接收数据帧成功,其它返回值表示接收数据帧失败 - -#### FGmacSendFrame - -- 通过FGMAC发送数据帧 - -```c -FError FGmacSendFrame(FGmac *instance_p, u32 frame_len); -``` - -Note: - -- 通过FGMAC发送数据帧 - -Input: - -- {FGmac} *instance_p 驱动控制数据 - -- {u32} frame_len 数据帧长度 - -Return: - -- {FError} FGMAC_SUCCESS 表示发送数据帧成功,其它返回值表示发送数据帧失败 - - -#### FGmacPhyLookupConfig - -- 获取FGMAC PHY默认配置参数 - -```c -void FGmacPhyLookupConfig(u32 gmac_instance_id, FGmac *instance_p); -``` - -Note: - -调用此函数前确保 FGMAC 驱动初始化已经成功 - -Input: - -- {u32} gmac_instance_id FGMAC id -- {FGmac} *instance_p FGMAC 控制数据 - -Return: - -无 - -#### FGmacPhyCfgInitialize - -- 查找GMAC连接的phy芯片地址,完成FGMAC PHY驱动实例的初始化,使之可以使用 - -```c -FError FGmacPhyCfgInitialize(FGmac *instance_p); -``` - -Note: - -- 调用此函数前确保 FGMAC 驱动初始化已经成功 - -Input: - -- {FGmac} *instance_p GMAC控制数据 - -Return: - -- {FError} FGMAC_SUCCESS 表示PHY设置成功,其它返回值表示PHY设置失败 - -#### FGmacSetInterruptMask - -- 设置FGMAC中断屏蔽位 - -```c -void FGmacSetInterruptMask(FGmac *instance_p, u32 intr_type, u32 mask, boolean enable); -``` - -Note: - -- 在FGMAC驱动初始化成功后调用此函数 - -Input: - -- {FGmac} *instance_p 驱动控制数据 - -- {u32} intr_type 中断类型 GMAC中断/DMA中断 - -- {u32} mask 中断屏蔽标志位 - -- {boolean} enable TRUE: 使能中断,FALSE: 去使能中断 - -Return: - -无 diff --git a/bsp/phytium/libraries/standalone/doc/reference/driver/fgpio.md b/bsp/phytium/libraries/standalone/doc/reference/driver/fgpio.md deleted file mode 100644 index 26010668e1..0000000000 --- a/bsp/phytium/libraries/standalone/doc/reference/driver/fgpio.md +++ /dev/null @@ -1,454 +0,0 @@ -# FGPIO 驱动程序 - -## 1. 概述 - -- GPIO(General-purpose input/output),即通用型输入输出,其引脚可以供使用者通过程序控制其输入、输出,常用于产生时钟,作为片选信号和模拟低速通信协议等场景 - -- FT2000/4和D2000提供两个 GPIO 模块,每个 GPIO 模块有 16 位接口,每8位一组,分别是A组和B组,GPIO可以控制外部IO的输入输出方向,作为输出时,内部寄存器的数据输出到片外,作为输入时,片外的数据被锁存在内部寄存器 - -- FGPIO 驱动支持配置 GPIO 引脚的输入输出方向,输出高低电平,或者获取输入电平,配置引脚的中断触发模式,配置引脚的中断响应回调函数等 - -- FGPIO_VERSION_1 对应 FT2000/4和D2000 的 GPIO,FGPIO_VERSION_2 对应 E2000的 GPIO,具体差异请参考软件编程手册 - -## 2. 功能 - -- FGPIO 驱动程序主要完成GPIO相关的功能配置,包括 - -- 1. GPIO 控制器初始化 -- 2. GPIO 引脚输入输出方向设置 -- 3. GPIO 引脚输出和输入 -- 4. GPIO 引脚中断使能和屏蔽 -- 5. GPIO 引脚中断类型设置 -- 6. GPIO 引脚中断回调函数注册 - -- 驱动相关的源文件如下, -- drivers/pin/fgpio -``` -. -├── Kconfig -├── fgpio.c -├── fgpio.h -├── fgpio_g.c -├── fgpio_hw.h -├── fgpio_selftest.c -├── fgpio_intr.c -└── fgpio_sinit.c -``` - -## 3. 配置方法 - -- FGPIO 驱动支持 FT2000/4, D2000和E2000,在 D2000 和 E2000 上完成测试 - -- 参考以下步骤完成 FGPIO 硬件配置, -- 1. 获取FT2000/4, D2000或E2000的软件编程手册,参考引脚复用表,设置引脚复用为 GPIO -- 2. 初始化 GPIO 控制器实例 -- 3. 设置 GPIO 引脚的输入,输出方向 -- 4. 获取 GPIO 引脚上的输入,或者设置 GPIO 引脚的输出电平 -- 5. 设置 GPIO 引脚的中断屏蔽位和中断触发类型,注册引脚的中断回调函数 - -## 4 应用示例 - -- 设置 GPIO 引脚的输出电平,获取引脚的输入电平,通过外部输入触发 GPIO 中断 - -### [fgpio_irq](../../../baremetal/example/peripheral/pin/fgpio_irq) - -- 通过 GPIO 产生占空比和频率可配的 PWM 波形 - -### [fgpio_soft_pwm](../../../baremetal/example/peripheral/pin/fgpio_soft_pwm) - -## 5. API参考 - -### 5.1. 用户数据结构 - -#### FGpioConfig - -```c -typedef struct -{ - u32 instance_id; /* GPIO实例ID */ - uintptr base_addr; /* GPIO控制器基地址 */ -#if defined(FGPIO_VERSION_1) /* FT2000-4, D2000 */ - u32 irq_num; /* GPIO控制器中断号 */ -#elif defined(FGPIO_VERSION_2) /* E2000 GPIO 0 ~ 5 */ - u32 irq_num[FGPIO_PIN_NUM]; /* GPIO各引脚的中断号 */ -#endif - u32 irq_priority; /* 中断优先级 */ -} FGpioConfig; /* GPIO控制器配置 */ -``` - -#### FGpioPin - -```c -typedef struct _FGpioPin -{ - FGpioPinId index; /* 索引 */ - u32 is_ready; - FGpio *instance; - FGpioInterruptCallback irq_cb; /* 中断回调函数, Port-A有效 */ - void *irq_cb_params; /* 中断回调函数的入参, Port-A有效 */ - boolean irq_one_time; /* Port-A有效, TRUE: 进入中断后关闭该引脚的中断,用于电平敏感中断,防止一直进入中断 */ -} FGpioPin; /* GPIO引脚实例 */ -``` - -#### FGpio - -```c -typedef struct _FGpio -{ - FGpioConfig config; - u32 is_ready; - FGpioPin *pins[FGPIO_PORT_NUM][FGPIO_PIN_NUM]; -} FGpio; /* GPIO控制器实例 */ -``` -### 5.2 错误码定义 - -- [0x0] FGPIO_SUCCESS : success - -- [0x1050000] FGPIO_ERR_INVALID_PARA : invalid input parameters - -- [0x1050001] FGPIO_ERR_INVALID_STATE : invalid state - - -### 5.3 用户API接口 - -#### FGpioLookupConfig - -```c -const FGpioConfig *FGpioLookupConfig(u32 instance_id); -``` - -Note: - -- 获取GPIO控制器的默认配置 - -Input: - -- {u32} instance_id, GPIO控制器实例号 - -Return: - -- {const FGpioConfig *} GPIO控制器的默认配置 - -#### FGpioCfgInitialize - -```c -FError FGpioCfgInitialize(FGpio *const instance, const FGpioConfig *const config); -``` - -Note: - -- 初始化GPIO控制器实例 - -Input: - -- {FGpio} *instance, GPIO控制器实例 -- {FGpioConfig} *config, GPIO控制器配置 - -Return: - -- {FError} FGPIO_SUCCESS 表示初始化成功 - -#### FGpioDeInitialize - -```c -void FGpioDeInitialize(FGpio *const instance); -``` - -Note: - -- 去初始化GPIO控制器实例 - -Input: - -- {FGpio} *instance, GPIO控制器实例 - -Return: - -- 无 - -#### FGpioPinInitialize - -```c -FError FGpioPinInitialize(FGpio *const instance, FGpioPin *const pin, - const FGpioPinId pin_id); -``` - -Note: - -- 初始化GPIO引脚实例 - -Input: - -- {FGpio} *instance, GPIO控制器实例 -- {FGpioPin} *pin_instance, GPIO引脚实例 -- {FGpioPinId} index, GPIO引脚索引 - -Return: - -- {FError} FGPIO_SUCCESS 表示初始化成功 - -#### FGpioPinDeInitialize - -```c -void FGpioPinDeInitialize(FGpioPin *const pin); -``` - -Note: - -- 去初始化GPIO引脚实例 - -Input: - -- {FGpioPin} *pin_instance, GPIO引脚实例 - -Return: - -- {FError} FGPIO_SUCCESS 表示初始化成功 - -#### FGpioGetPinIrqSourceType - -```c -FGpioIrqSourceType FGpioGetPinIrqSourceType(FGpioPin *const pin); -``` - -Note: - -- 获取引脚中断的上报方式 - -Input: - -- {FGpioPin} *pin_instance, GPIO引脚实例 - -Return: - -- {FGpioIrqSourceType} 引脚中断的上报方式 - -#### FGpioSetDirection - -```c -void FGpioSetDirection(FGpioPin *const pin, FGpioDirection dir); -``` - -Note: - -- 设置GPIO引脚的输入输出方向 -- 初始化 GPIO 实例后使用此函数 - -Input: - -- @param {FGpioPin} *instance, GPIO控制器实例 -- @param {FGpioDirection} dir, 待设置的GPIO的方向 - -Return: - -- 无 - -#### FGpioGetDirection - -```c -FGpioDirection FGpioGetDirection(FGpioPin *const pin); -``` - -Note: - -- 获取GPIO引脚的输入输出方向 -- 初始化 GPIO 实例后使用此函数 - -Input: - -- {FGpioPin} *pin, GPIO引脚实例 - -Return: - -- {FGpioDirection} GPIO引脚方向 - -#### FGpioSetOutputValue - -```c -FError FGpioSetOutputValue(FGpioPin *const pin, const FGpioPinVal output); -``` - -Note: - -- 设置GPIO引脚的输出值 -- 初始化 GPIO 实例后使用此函数,先设置 GPIO 引脚为输出后调用此函数 - -Input: - -- {FGpioPin} *pin, GPIO引脚实例 -- {FGpioPinVal} output, GPIO引脚的输出值 - -Return: - -- {FError} FGPIO_SUCCESS 表示设置成功 - -#### FGpioGetInputValue - -- 获取GPIO引脚的输入值 - -```c -FGpioPinVal FGpioGetInputValue(FGpioPin *const pin); -``` - -Note: - -- 初始化 GPIO 实例后使用此函数,先设置 GPIO 引脚为输入后调用此函数 - -Input: - -- {FGpioPin} *instance, GPIO引脚实例 -- {FGpioPinVal} output, GPIO引脚的输出值 - -Return: - -- {FGpioPinVal} 获取的输入值,高电平/低电平 - -#### FGpioGetInterruptMask - -- 获取GPIO A组引脚的中断屏蔽位 - -```c -void FGpioGetInterruptMask(FGpio *const instance, u32 *mask, u32 *enabled) -``` - -Note: - -- 获取的是A组所有Pin的中断屏蔽位和中断使能位 - -Input: - -- {FGpio} *instance, GPIO控制器实例 -- {u32} *mask, 返回的GPIO A组引脚中断屏蔽位 -- {u32} *enabled, 返回的GPIO A组中断使能位 - -Return: - -- 无 -#### FGpioSetInterruptMask - -- 设置GPIO A组引脚的中断屏蔽位 - -```c -void FGpioSetInterruptMask(FGpioPin *const pin, boolean enable); -``` - -Note: - -- index对应的引脚必须为A组引脚,B组引脚不支持中断 - -Input: - -- {FGpioPin} *pin, GPIO引脚实例 -- {boolean} enable, TRUE表示使能GPIO引脚中断,FALSE表示去使能GPIO引脚中断 - -Return: - -- 无 -#### FGpioGetInterruptType - -- 获取GPIO A组引脚的中断类型和中断极性 - -```c -void FGpioGetInterruptType(FGpio *const instance, u32 *levels, u32 *polarity) -``` - -Note: - -- 获取的是A组所有Pin的电平和极性 - -Input: - -- {FGpio} *instance, GPIO控制器实例 -- {u32} *levels, GPIO A组引脚中断电平类型 -- {u32} *polarity, GPIO A组引脚中断极性类型 - -Return: - -- 无 - -#### FGpioSetInterruptType - -- 设置GPIO引脚的中断类型 - -```c -void FGpioSetInterruptType(FGpioPin *const pin, const FGpioIrqType type) -``` - -Note: - -- index对应的引脚必须为A组引脚,B组引脚不支持中断 - -Input: - -- {FGpioPin} *pin, GPIO引脚实例 -- {FGpioIrqType} type, GPIO引脚中断触发类型 - -Return: - -- 无 - -#### FGpioInterruptHandler - -- GPIO中断处理函数 - -```c -void FGpioInterruptHandler(s32 vector, void *param) -``` - -Note: - -- 需要用户将此函数注册到Interrtup上,使能GPIO中断才能生效 - -Input: - -- {s32} vector, 中断输入参数1 -- {void} *param, 中断输入参数2 - -Return: - -- 无 - - -#### FGpioPinInterruptHandler - -- GPIO中断处理函数 - -```c -void FGpioPinInterruptHandler(s32 vector, void *param) -``` - -Note: - -- 需要用户将此函数注册Gic上,才能生效 - -Input: - -- {s32} vector, 中断输入参数1 -- {void} *param, 中断输入参数2 - -Return: - -- 无 - -#### FGpioRegisterInterruptCB - -- 注册GPIO引脚中断回调函数 - -```c -void FGpioRegisterInterruptCB(FGpioPin *const pin, FGpioInterruptCallback cb, void *cb_param, boolean irq_one_time) -``` - -Note: - -- 注册的回调函数在`FGpioInterruptHandler`中被调用 - -Input: - -- {FGpioPin} pin, GPIO引脚实例 -- {FGpioInterruptCallback} cb, GPIO引脚中断回调函数 -- {void} *cb_param, GPIO引脚中断回调函数输入参数 -- {boolean} irq_one_time, TRUE表示引脚中断触发一次后自动关闭中断,用于电平敏感中断 - -Return: - -- 无 diff --git a/bsp/phytium/libraries/standalone/doc/reference/driver/fi2c.md b/bsp/phytium/libraries/standalone/doc/reference/driver/fi2c.md deleted file mode 100644 index 0da1beb61a..0000000000 --- a/bsp/phytium/libraries/standalone/doc/reference/driver/fi2c.md +++ /dev/null @@ -1,340 +0,0 @@ -# I2C 驱动程序 - -## 1. 概述 - - -- I2C 是一种串行同步半双工通信协议,总线上可以同时挂载多个主机和从机。I2C 总线由串行数据线 (SDA) 和串行时钟线 (SCL) 线构成。这些线都需要上拉电阻。 - -- I2C 具有简单且制造成本低廉等优点,主要用于低速外围设备的短距离通信(一英尺以内)。 - -- I2C 驱动支持的平台包括 FT2000/4、D2000、E2000。 - - -## 2. 驱动功能 - -I2C 驱动程序管理在 I2C 总线上设备的通信,该驱动程序具备以下功能: - -- 在主机模式下读写字节 -- 支持从机模式 - -## 3. 使用方法 - -以下部分将指导您完成 I2C 驱动的硬件配置: - -- 1. I2C驱动支持 FT2000/4, D2000和E2000,在FT2000/4上完成测试 -- 2. FT2000/4, D2000上,使用I2C驱动需要打开IO复用,I2C0的引脚默认设置为给I2C使用,I2C1/I2C2/I2C3需要先设置IO复用才能使用 -- 3. E2000上,使用MIO的的IIC驱动需要打开MIO配置功能寄存器,设置IIC模式,引脚复用设置为MIO功能,才能使用 -- 4. FT2000/4, D2000上,I2C的参考时钟为48MHz,在E2000上,I2C的参考时钟为50MHz 不支持修改设置 - -以下部分将指导您完成 I2C 驱动的软件配置: - -- 1. 配置驱动程序,新建应用工程,使能I2C驱动模块 -- 2. 设置配置参数,选择为 I2C 主机还是从机,调整默认的 I2C 通信参数(如时序、位序等) -- 3. 配置中断服务 -- 4. 处理错误码 -- 5. 去使能驱动程序 - -## 4. 应用示例 - -### [fi2c_eeprom](../../../baremetal/example/peripheral/i2c/fi2c_eeprom/README.md) - -### [fi2c_slave](../../../baremetal/example/peripheral/i2c/fi2c_master_slave/README.md) - - -## 5. API参考 - - -### 5.1. 用户数据结构 - -- drivers/i2c/fi2c/fi2c.h - -```c - -typedef struct -{ - u32 instance_id; /* Device instance id */ - uintptr base_addr; /* Device base address */ - u32 irq_num; /* Device intrrupt id */ - u32 irq_prority; /* Device intrrupt priority */ - u32 ref_clk_hz; /* Input reference clock frequency in Hz */ - u32 work_mode; /* Device work mode Slave or Master */ - u32 slave_addr; /* Slave Address writing/reading to/from */ - boolean use_7bit_addr; /* Slave in-chip address offset in 7bit or 10bit */ - u32 speed_rate; /* I2C speed rate */ -} FI2cConfig; /* Device configure setting */ -``` - -- I2C驱动实例配置 - -```c - -typedef struct -{ - FI2cConfig config; /* Current active configs */ - u32 is_ready; /* Device is initialized and ready */ - volatile u32 status; - FI2cFrameTX txframe; - FI2cFrameRX rxframe; - /** only apply to master device **/ - /* Master intrrupt handler */ - FI2cEvtHandler master_evt_handlers[FI2C_MASTER_INTR_EVT_NUM]; - - /** only apply to slave device **/ - /* Slave intrrupt handler */ - FI2cEvtHandler slave_evt_handlers[FI2C_SLAVE_INTR_EVT_NUM]; - -} FI2c; /* Device instance */ -``` - -- I2C驱动实例 - -### 5.2 错误码定义 - -- 模块错误码编号 `0x10b0000` - -- [0x0] FI2C_SUCCESS : fi2c success - -- [0x10b0001] FI2C_ERR_INVAL_PARM : fi2c invalid input parameters - -- [0x10b0002] FI2C_ERR_NOT_READY : fi2c driver not ready - -- [0x10b0001] FI2C_ERR_INVAL_PARM : fi2c invalid input parameters - -- [0x10b0003] FI2C_ERR_TIMEOUT : fi2c wait timeout - -- [0x10b0004] FI2C_ERR_NOT_SUPPORT : fi2c non support operation - -- [0x10b0005] FI2C_ERR_INVAL_STATE : fi2c invalid state - -### 5.3 用户API接口 - - -```c -const FI2cConfig *FI2cLookupConfig(u32 instance_id); -``` -- 获取I2C驱动的默认配置参数 - -Note: - - - 用户需要修改配置参数时,可以通过修改返回的FI2cConfig副本,作为FI2cCfgInitialize函数的入参, - -Input: - - - u32 instance_id, 当前控制的I2C控制器实例号 - -Return: - - - const FI2cConfig *, 返回驱动默认参数, NULL表示失败 - - -```c -FError FI2cCfgInitialize(FI2c *instance_p, const FI2cConfig *cofig_p); -``` -- 完成I2C驱动实例的初始化,使之可以使用 - -Note: - - - 此函数会将驱动实例中的所有数据全部重置,同时会进行I2C控制器的重置,请不要在I2C数据传输过程中调用此函数 - -Input: - - - FI2c *instance_p, I2C驱动实例数据 - - - const FI2cConfig *cofig_p, I2C驱动配置数据 - -Return: - - FError,参考6.2章错误码定义 - -```c -void FI2cDeInitialize(FI2c *instance_p); -``` - -- 完成I2C驱动实例去使能,清零实例数据 - -Note: - - - 此函数会将驱动实例中的所有数据全部重置, - -Input: - - - FI2c *instance_p, I2C驱动实例数据 - -Return: - - 无 - -```c -const char *FI2cErrorToMessage(FError error); -``` - -- 获取I2C模块错误码对应的错误信息 - -Note: - - - 请输入属于FI2C模块的错误码,否则返回的错误信息为空 - -Input: - - - {FError} error, I2C输入错误码 - -Return: - - - {const char *}, 错误码信息,NULL表示失败 - -```c -FError FI2cMasterReadPoll(FI2c *instance_p, u32 mem_addr, u8 mem_byte_len, u8 *buf_p, u32 buf_len); -``` -- I2C主机读,阻塞直到完成读操作或失败 - -Note: - - 请先初始化I2C驱动再调用此函数 - - 请在Master工作模式下调用此函数 - -Input: - - @param {FI2c} *instance_p I2C驱动实例数据 - - @param {u32} inchip_addr 从机的内部偏移地址 - - @param {u8} mem_byte_len, Size of internal memory address 1->8bit ~ 4->32bit - - @param {u8} *buf_p 读目的缓冲区 - - @param {int} buf_len 读目的缓冲区长度 - -Return: - - @return {FError *} 返回错误码 - -```c -FError FI2cMasterReadIntr(FI2c *instance_p, u32 mem_addr, u8 mem_byte_len, u8 *buf_p, u32 buf_len); -``` -- I2C主机读,接收中断读操作或者失败 - -Note: - - 请先初始化I2C驱动再调用此函数 - - 请在Master工作模式下调用此函数 - -Input: - - @param {FI2c} *instance_p I2C驱动实例数据 - - @param {u32} inchip_addr 从机的内部偏移地址 - - @param {u8} *buf_p 读目的缓冲区 - - @param {u8} mem_byte_len, Size of internal memory address 1->8bit ~ 4->32bit - - @param {int} buf_len 读目的缓冲区长度 - -Return: - - @return {FError *} 返回错误码 - -```c -FError FI2cMasterWriteIntr(FI2c *instance_p, u32 mem_addr, u8 mem_byte_len, const u8 *buf_p, u32 buf_len); -``` -- I2C主机读,中断发送直到完成写操作或失败 -Note: - - 请先初始化I2C驱动再调用此函数 - - 请在Master工作模式下调用此函数 - -Input: - - @param {FI2c} *instance_p I2C驱动实例数据 - - @param {u32} inchip_addr 从机的内部偏移地址 - - @param {u8} mem_byte_len, Size of internal memory address 1->8bit ~ 4->32bit - - @param {u8} *buf_p 写源缓冲区 - - @param {size_t} buf_len 写源缓冲区长度 - -Return: - - @return {FError *} 返回错误码 - -```c -FError FError FI2cMasterWritePoll(FI2c *instance_p, u32 mem_addr, u8 mem_byte_len, const u8 *buf_p, u32 buf_len); -``` -- I2C主机写,阻塞直到完成写操作或失败 - -Note: - - 请先初始化I2C驱动再调用此函数 - - 请在Master工作模式下调用此函数 - -Input: - - @param {FI2c} *instance_p I2C驱动实例数据 - - @param {u32} inchip_addr 从机的内部偏移地址 - - @param {u8} mem_byte_len, Size of internal memory address 1->8bit ~ 4->32bit - - @param {u8} *buf_p 写源缓冲区 - - @param {size_t} buf_len 写源缓冲区长度 - -Return: - - @return {FError *} 返回错误码 - -```c -u32 FI2cGetIntr(FI2c *instance_p); -``` -- 获取I2C instance_p的中断值 - -Note: - - 请先初始化I2C驱动再调用此函数 - -Input: - - @param {FI2c} *instance_p I2C驱动实例数据 - -Return: - - @return {u32} 中断状态寄存器的值 - -```c -FError FI2cMasterSetupIntr(FI2c *instance_p,u32 mask); -``` -- 设置I2C主机的中断 - -Note: - - 请先初始化I2C驱动再调用此函数 - - 请在Master工作模式下调用此函数 - -Input: - - {FI2c} *instance_p I2C驱动实例数据 - - {u32} mask 需要操作的中断寄存器位 -Return: - - {FError *} 返回错误码 - -```c -void FI2cMasterRegisterIntrHandler(FI2c *instance_p, u32 evt, FI2cEvtHandler handler); -``` -- 注册I2C主机中断事件函数 - -Note: - 无 - -Input: - - @param {FI2c} *instance_p I2C驱动实例数据 - - @param {u32} evt 中断事件,参考 FI2C_MASTER_INTR_EVT_NUM - - @param {FI2cEvtHandler} handler 中断事件回调函数 - -Return: - - 无 - -```c -FError FI2cSlaveSetupIntr(FI2c *instance_p); -``` - -- 设置I2C从机的中断 - -Note: - - 请先初始化I2C驱动再调用此函数 - - 请在Slave工作模式下调用此函数 - -Input: - - @param {FI2c} *instance_p I2C驱动实例数据 - - @param {u32} evt 中断事件,参考 FI2C_MASTER_INTR_EVT_NUM - - @param {FI2cEvtHandler} handler 中断事件回调函数 - -Return: - - {FError *} 返回错误码 - -```c -void FI2cSlaveRegisterIntrHandler(FI2c *instance_p, u32 evt, FI2cEvtHandler handler); -``` - -- 注册I2C从机中断事件函数 - -Note: - 无 - -Input: - - @param {FI2c} *instance_p I2C驱动实例数据 - - @param {u32} evt 中断事件,参考 FI2C_SLAVE_INTR_EVT_NUM - - @param {FI2cEvtHandler} handler 中断事件回调函数 - -Return: - - 无 diff --git a/bsp/phytium/libraries/standalone/doc/reference/driver/figs/pwm_duty.png b/bsp/phytium/libraries/standalone/doc/reference/driver/figs/pwm_duty.png deleted file mode 100644 index 8de9c1cd82..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/reference/driver/figs/pwm_duty.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/reference/driver/figs/spi_app.dio b/bsp/phytium/libraries/standalone/doc/reference/driver/figs/spi_app.dio deleted file mode 100644 index 3e019f2ea7..0000000000 --- a/bsp/phytium/libraries/standalone/doc/reference/driver/figs/spi_app.dio +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/doc/reference/driver/figs/spi_app.png b/bsp/phytium/libraries/standalone/doc/reference/driver/figs/spi_app.png deleted file mode 100644 index 8dbd4fcdc1..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/reference/driver/figs/spi_app.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/reference/driver/fiopad.md b/bsp/phytium/libraries/standalone/doc/reference/driver/fiopad.md deleted file mode 100644 index a9a095ed4f..0000000000 --- a/bsp/phytium/libraries/standalone/doc/reference/driver/fiopad.md +++ /dev/null @@ -1,470 +0,0 @@ -# FIOPAD 驱动程序 - -## 1. 概述 -IOPad,是输入/输出(Input/Output)引脚。嵌入式系统通常由处理器、内存、外设和输入/输出接口组成。输入/输出引脚是用于连接外部设备和嵌入式系统的接口。它们用于数据和控制信号的输入和输出,可以连接各种传感器、执行器、存储设备等外围设备。IOPad通常由特定的计算机芯片或微控制器提供,并通过编程方式进行配置和控制 - -## 2. 功能 - -iopad控制器驱动提供了iopad的控制访问方法, -- 初始化iopad控制器 -- 配置引脚复用,引脚输入输出延迟等 - -驱动相关的源文件包括 -``` -. -├── fiopad_g.c -├── fiopad_hw.c -├── fiopad_hw.h -├── fiopad_intr.c -├── fiopad_sinit.c -├── fiopad.c -└── fiopad.h -``` - -## 3. 配置方法 - -以下部分将指导您完成 fiopad 驱动的软件配置: - -- 初始化iopad控制器 -- 设置引脚功能复用,设置引脚延时 - -## 4 应用示例 - - -## 5. API参考 - -### 5.1. 用户数据结构 - -- fiopad控制数据 - -```c -typedef struct -{ - FIOPadConfig config;/* iopad config */ - u32 is_ready;/* iopad init ready flag */ - -} FIOPadCtrl; -``` - -- fiopad配置数据,FIOPadConfig主要是iopad控制器id、基地址,FIOPadMulConfig主要包括用户可配置的复用参数,包括复用功能,上下拉,驱动能力等,FIOPadDelayConfig主要用户可配置的延时参数,输入输出方向,粗调延时,精调延时等 - -```c -typedef struct -{ - u32 instance_id; /* Device instance id */ - uintptr base_address; /* iopad control register base address */ - -} FIOPadConfig; -``` - -- fiopad复用功能,E2000最多支持8种功能 -```c -typedef enum -{ - FIOPAD_FUNC0 = 0b000, - FIOPAD_FUNC1, - FIOPAD_FUNC2, - FIOPAD_FUNC3 = 0b011, - FIOPAD_FUNC4, - FIOPAD_FUNC5, - FIOPAD_FUNC6, - FIOPAD_FUNC7 = 0b111, - - FIOPAD_NUM_OF_FUNC -} FIOPadFunc; /* Pin multiplexing function configuration, func0 is the default function */ -``` - -- fiopad驱动能力 -```c -typedef enum -{ - FIOPAD_DRV0 = 0b0000, - FIOPAD_DRV1, - FIOPAD_DRV2, - FIOPAD_DRV3, - FIOPAD_DRV4, - FIOPAD_DRV5, - FIOPAD_DRV6, - FIOPAD_DRV7, - FIOPAD_DRV8, - FIOPAD_DRV9, - FIOPAD_DRV10, - FIOPAD_DRV11, - FIOPAD_DRV12, - FIOPAD_DRV13, - FIOPAD_DRV14, - FIOPAD_DRV15 = 0b1111, - - FIOPAD_NUM_OF_DRIVE -} FIOPadDrive; /* Pin drive capability configuration ,divided into 16 levels*/ -``` - -- fiopad上下拉配置 -```c -typedef enum -{ - FIOPAD_PULL_NONE = 0b00, - FIOPAD_PULL_DOWN = 0b01, - FIOPAD_PULL_UP = 0b10, - - FIOPAD_NUM_OF_PULL -} FIOPadPull; /* Pin up pull-down configuration */ - -``` - -- fiopad延迟输入输出方向配置 -```c -typedef enum -{ - FIOPAD_OUTPUT_DELAY = 0, /* Delay setting direction to output */ - FIOPAD_INPUT_DELAY, /* Delay setting direction to input */ - - FIOPAD_NUM_OF_DELAY_DIR -} FIOPadDelayDir; /* Pin delay configuration direction */ - -``` - -- fiopad粗调,精调类型配置 -```c -typedef enum -{ - FIOPAD_DELAY_COARSE_TUNING = 0, /*delay coarse tuning */ - FIOPAD_DELAY_FINE_TUNING, /*delay fine tuning */ - - FIOPAD_NUM_OF_DELAY_TYPE -} FIOPadDelayType; /* Pin delay configuration type */ - -``` - -- fiopad粗调,精调类型配置,粗调每级延时均值约360ps,精调每级延时均值约100ps -```c -typedef enum -{ - FIOPAD_DELAY_NONE = 0, - FIOPAD_DELAY_1, - FIOPAD_DELAY_2, - FIOPAD_DELAY_3, - FIOPAD_DELAY_4, - FIOPAD_DELAY_5, - FIOPAD_DELAY_6, - FIOPAD_DELAY_7, - - FIOPAD_NUM_OF_DELAY -} FIOPadDelay;/* Pin delay level configuration */ - -``` - -### 5.2 错误码定义 -- FIOPAD_SUCCESS 执行成功 -- FIOPAD_INVAL_PARAM 参数无效 -- FIOPAD_NOT_READY 驱动未初始化 -- FIOPAD_NOT_SUPPORT 驱动不支持 - -### 5.3. 用户API接口 - -#### FIOPadLookupConfig - -- 获取fiopad控制器默认配置 - -```c -const FIOPadConfig *FIOPadLookupConfig(u32 instance_id); -``` - -Note: - -- 获取默认配置参数,包括基地址等 - -Input: - -- {u32} instance_id,iopad控制器id号 - -Return: - -- {const FIOPadConfig *} iopad默认配置,返回NULL如果找不到默认配置 - -#### FIOPadCfgInitialize - -- 初始化fiopad控制器, 使之可以使用 - -```c -FError FIOPadCfgInitialize(FIOPadCtrl *instance_p, const FIOPadConfig *input_config_p); -``` - -Note: - -- 输入配置通过FIOPadLookupConfig获取,用户按照需要修改后传入此函数 - -Input: - -- {FIOPadCtrl} *instance_p,iopad驱动控制数据 -- {FIOPadConfig} *input_config_p,iopad用户输入配置 - -Return: - -- {FError} 驱动初始化的错误码信息,FIOPAD_SUCCESS 表示初始化成功,其它返回值表示初始化失败 - -#### FIOPadGetFunc - -- 获取iopad pin当前复用功能 - -```c -FIOPadFunc FIOPadGetFunc(FIOPadCtrl *instance_p, const u32 pin_reg_off); -``` - -Note: - -- 获取iopad pin当前复用功能 - -Input: - -- {FIOPadCtrl} *instance_p,iopad驱动控制数据 -- {u32} pin_reg_off,对应pin地址偏移量 - -Return: - -- {FIOPadFunc} iopad pin当前复用功能 - -#### FIOPadSetFunc - -- 设置iopad pin复用功能 - -```c -FError FIOPadSetFunc(FIOPadCtrl *instance_p, const u32 pin_reg_off, FIOPadFunc func); -``` - -Note: - -- 设置iopad pin复用功能 - -Input: - -- {FIOPadCtrl} *instance_p,iopad驱动控制数据 -- {u32} pin_reg_off,对应pin地址偏移量 -- {FIOPadFunc} func, 具体复用功能 - -Return: - -- {FError} 驱动初始化的错误码信息,FIOPAD_SUCCESS 表示初始化成功,其它返回值表示初始化失败 - -#### FIOPadGetPull - -- 获取iopad pin当前上下拉配置 - -```c -FIOPadPull FIOPadGetPull(FIOPadCtrl *instance_p, const u32 pin_reg_off); -``` - -Note: - -- 获取iopad pin当前上下拉配置 - -Input: - -- {FIOPadCtrl} *instance_p,iopad驱动控制数据 -- {u32} pin_reg_off,对应pin地址偏移量 - -Return: - -- {FIOPadFunc} iopad pin当前上下拉配置 - -#### FIOPadSetPull - -- 设置iopad pin上下拉 - -```c -FError FIOPadSetPull(FIOPadCtrl *instance_p, const u32 pin_reg_off, FIOPadPull pull); -``` - -Note: - -- 设置iopad pin上下拉 - -Input: - -- {FIOPadCtrl} *instance_p,iopad驱动控制数据 -- {u32} pin_reg_off,对应pin地址偏移量 -- {FIOPadPull} pull, 具体上下拉配置 - -Return: - -- {FError} 驱动初始化的错误码信息,FIOPAD_SUCCESS 表示初始化成功,其它返回值表示初始化失败 - -#### FIOPadGetDriver - -- 获取iopad pin当前驱动能力 - -```c -FIOPadDrive FIOPadGetDriver(FIOPadCtrl *instance_p, const u32 pin_reg_off); -``` - -Note: - -- 获取iopad pin当前驱动能力 - -Input: - -- {FIOPadCtrl} *instance_p,iopad驱动控制数据 -- {u32} pin_reg_off,对应pin地址偏移量 - -Return: - -- {FIOPadDrive} iopad pin当前驱动能力 - -#### FIOPadSetDriver - -- 设置iopad pin驱动能力 - -```c -FError FIOPadSetDriver(FIOPadCtrl *instance_p, const u32 pin_reg_off, FIOPadDrive drive); -``` - -Note: - -- 设置iopad pin驱动能力 - -Input: - -- {FIOPadCtrl} *instance_p,iopad驱动控制数据 -- {u32} pin_reg_off,对应pin地址偏移量 -- {FIOPadDrive} Driver, 具体驱动能力参数 - -Return: - -- {FError} 驱动初始化的错误码信息,FIOPAD_SUCCESS 表示初始化成功,其它返回值表示初始化失败 - -#### FIOPadSetConfig - -- 设置iopad pin复用功能,上下拉配置,驱动能力 - -```c -FError FIOPadSetConfig(FIOPadCtrl *instance_p, const u32 pin_reg_off, FIOPadFunc func, FIOPadPull pull, FIOPadDrive drive); -``` - -Note: - -- 设置iopad pin复用功能,上下拉配置,驱动能力,此接口一次性设置三种配置 - -Input: - -- {FIOPadCtrl} *instance_p,iopad驱动控制数据 -- {u32} pin_reg_off,对应pin地址偏移量 -- {FIOPadFunc} func, 具体复用功能 -- {FIOPadPull} pull, 具体上下拉配置 -- {FIOPadDrive} Driver, 具体驱动能力参数 - -Return: - -- {FError} 驱动初始化的错误码信息,FIOPAD_SUCCESS 表示初始化成功,其它返回值表示初始化失败 - -#### FIOPadGetConfig - -- 获取iopad pin复用功能,上下拉配置,驱动能力 - -```c -FError FIOPadGetConfig(FIOPadCtrl *instance_p, const u32 pin_reg_off, FIOPadFunc *func, FIOPadPull *pull, FIOPadDrive *drive) -``` - -Note: - -- 胡去哦去iopad pin复用功能,上下拉配置,驱动能力,此接口一次性获取三种配置 - -Input: - -- {FIOPadCtrl} *instance_p,iopad驱动控制数据 -- {u32} pin_reg_off,对应pin地址偏移量 -- {FIOPadFunc} *func, 具体复用功能 -- {FIOPadPull} *pull, 具体上下拉配置 -- {FIOPadDrive} *Driver, 具体驱动能力参数 - -Return: - -- {FError} 驱动初始化的错误码信息,FIOPAD_SUCCESS 表示初始化成功,其它返回值表示初始化失败 - -#### FIOPadGetDelay - -- 获取iopad pin当前延迟相关配置 - -```c -FIOPadDelay FIOPadGetDelay(FIOPadCtrl *instance_p, const u32 pin_reg_off, FIOPadDelayDir dir, FIOPadDelayType type); -``` - -Note: - -- 获取iopad pin当前延迟相关配置 - -Input: - -- {FIOPadCtrl} *instance_p,iopad驱动控制数据 -- {u32} pin_reg_off,对应pin地址偏移量 -- {FIOPadDelayDir} dir,延迟配置方向 -- {FIOPadDelayType} type,延迟配置类型 - -Return: - -- {FIOPadDelay} iopad pin在具体方向和类型下延迟的具体挡位 - -#### FIOPadSetDelay - -- 设置iopad pin延迟挡位 - -```c -FError FIOPadSetDelay(FIOPadCtrl *instance_p, const u32 pin_reg_off, FIOPadDelayDir dir, FIOPadDelayType type, FIOPadDelay delay); -``` - -Note: - -- 设置iopad pin延迟在具体方向和类型下的挡位 - -Input: - -- {FIOPadCtrl} *instance_p,iopad驱动控制数据 -- {u32} pin_reg_off,对应pin地址偏移量 -- {FIOPadDelayDir} dir,延迟配置方向 -- {FIOPadDelayType} type,延迟配置类型 -- {FIOPadDelay} delay,要设置的延迟具体值 - -Return: - -- {FError} 驱动初始化的错误码信息,FIOPAD_SUCCESS 表示初始化成功,其它返回值表示初始化失败 - -#### FIOPadSetDelayEn - -- 设置iopad pin延迟使能 - -```c -FError FIOPadSetDelayEn(FIOPadCtrl *instance_p, const u32 pin_reg_off, FIOPadDelayDir dir, boolean enable); -``` - -Note: - -- 设置iopad pin在具体方向和类型下的延迟使能 - -Input: - -- {FIOPadCtrl} *instance_p,iopad驱动控制数据 -- {u32} pin_reg_off,对应pin地址偏移量 -- {FIOPadDelayDir} dir,延迟配置方向 -- {FIOPadDelayType} type,延迟配置类型 -- {boolean}enable,ture 使能;false 去使能 - -Return: - -- {FError} 驱动初始化的错误码信息,FIOPAD_SUCCESS 表示初始化成功,其它返回值表示初始化失败 - -#### FIOPadDeInitialize - -```c -FError FIOPadDeInitialize(FIOPadCtrl *instance_p) -``` - -Note: - -- 去初始化FIOPAD控制器实例 - -Input: - -- {FIOPadCtrl}instance_p, FIOPAD控制器实例 - -Return: - -- {FError} 驱动初始化的错误码信息,FIOPAD_SUCCESS 表示初始化成功,其它返回值表示初始化失败 \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/doc/reference/driver/fmedia.md b/bsp/phytium/libraries/standalone/doc/reference/driver/fmedia.md deleted file mode 100644 index ac4777e788..0000000000 --- a/bsp/phytium/libraries/standalone/doc/reference/driver/fmedia.md +++ /dev/null @@ -1,354 +0,0 @@ - - -# 驱动概述 - -- DC 是一个显示控制器,主要完成将 CPU/GPU/VPU 处理后的图像数据,按照 Display 协议处理后送给 DP PHY 接入显示器。E2000 下 DC 主要有以下特性 - -1. 支持两路Display,两路Display相互独立 -2. 支持的 size 有 640×480、800×600、1024×768、1152×864、1280×720、1280×960、1366×768、1440×900、1600×90、1920×1080,最大帧率为 2.7G/(size*32) -3. 支持AHB配置寄存器 -4. 支持Hsync,Vsync配置 -5. 输出支持像素格式:RGB2101010,RGB888,RGB666,RGB555 -6. 输入图像格式:ARGB2101010,A/XRGB8888,A/XRGB1555,A/XRGB4444,RGB565;YUV422(YUY2,UYVY,NV16);YUV420(YUY2(P010)YV12,NV12,NV21) - -当前Media 驱动控制器主要为用户提供了以下功能接口 - -1. DC,DP 控制器状态初始化函数 -2. 中断接口 -3. 热插拔检测处理接口 -4. 多屏模式处理接口 - - -## 驱动功能 - -驱动组成由以下所示 : - -. -├── fdc.c -├── fdc.h -├── fdc_static.c -├── fdc_hw.c -├── fdc_hw.h -├── fdc_g.c -├── fdc_common_hw.c -├── fdc_common_hw.h -├── fdp.c -├── fdp.h -├── fdp_static.c -├── fdp_phy.c -├── fdp_phy.h -├── fdp_hw.c -├── fdp_hw.h -├── fdp_g.c -├── fdp_aux.c -├── fdp_aux.h -├── fdcdp.c -├── fdcdp.h -├── fdcdp_intr.c -├── fdcdp_multi_display.c -├── fdcdp_multi_display.h - - -其中fdcdp.h 为用户开发者主要使用接口,提供了以下功能: -1. DC,DP 控制器控制器初始化接口 -2. DC,DP 控制器相关状态位的回调函数注册 -3. DC,DP 控制器中断处理函数 -4. DP热插拔检测处理函数 - - -## 数据结构 -```c -typedef struct -{ - /* fdc instace object */ - FDcCtrl dc_instance_p[FDCDP_INSTANCE_NUM]; - /* fdp instace object */ - FDpCtrl dp_instance_p[FDCDP_INSTANCE_NUM]; - /* uintptr fb_config[FDCDP_INSTANCE_NUM];*/ - uintptr fb_config[FDCDP_INSTANCE_NUM]; - /*the intr config of dcdp*/ - FMediaIntrConfig intr_event[FDCDP_INTR_MAX_NUM]; - /*connect status ,1 :connected,0:disconnected*/ - u32 connect_flg[FDCDP_INSTANCE_NUM]; - /* Device is ininitialized and ready*/ - u32 is_ready; -} FDcDp; -其中FdcPrivateParams结构体为dc模块相关变量,包含有时序,frambuffer,pannel,gamma,dither,cursor等等;FdpPrivateParams结构体为dp模块相关变量,包括有时序,传输参数,phy等等。 - -```c -dc 相关结构体定义 -typedef struct -{ - FDcDtdTable dtd_table; /*the table of dtd params*/ - FDcSyncParameter sync_parameter[FDC_GOP_MAX_MODENUM]; - FDcDisplayFramebuffer framebuffer; - FDcDisplayPanel panel; - FDcDisplayGamma gamma; - FDcDisplayDither dither; - FDcDisplayDpMode dp_mode; - FDcDisplayVideoMode video_mode; /*the params of video*/ - FDcDisplayCursor cursor; - FDcDisplaySetting display_setting[FDC_DISPLAY_ID_MAX_NUM]; -} FDcCurrentConfig; - -typedef struct -{ - u32 instance_id; /* dc id */ - uintptr dcch_baseaddr; /* DC channel register address*/ - uintptr dcctrl_baseaddr; /* DC control register address */ - u32 irq_num; /* Device intrrupt id */ -} FDcConfig; - -typedef struct -{ - FDcCurrentConfig fdc_currentconfig; - FDcConfig config; - u32 multi_mode; /* The display mode of the device , including clone, horizontal and vertical display*/ - -} FDcCtrl; - -dp 相关结构体 - -typedef struct -{ - /* 设置参数 */ - FDpSyncParameter sync_parameter[DP_GOP_MAX_MODENUM]; - - FDpTransmissionConfig transmission_config; - - /* 当前状态 */ - FDpStatus status; - - u8 down_spread_enable; -#define DTD_MAX 4 - /* edid 缓冲数据 */ - FDpDtdTable dtd_table[DTD_MAX]; /* the max dtd num is 4 */ - -} FDpCurrentConfig; - -typedef struct -{ - u32 instance_id; - uintptr dp_channe_base_addr; - uintptr dp_phy_base_addr; - u32 irq_num; -} FDpConfig; - -typedef struct -{ - FDpCurrentConfig fdp_current_config; - FDpConfig config; -} FDpCtrl; - -中断 相关结构体 - -typedef enum -{ - FDCDP_HPD_IRQ_CONNECTED = 0, /* hpd 中断 */ - FDCDP_HPD_IRQ_DISCONNECTED, - FDCDP_AUX_REPLY_TIMEOUT, - FDCDP_AUX_REPLY_ERROR, - - FDCDP_INTR_MAX_NUM -} FDcDpIntrEventType; - -typedef void (*FDcDpIntrHandler )(void *param, u32 index); - -typedef struct -{ - FMediaIntrConfigtype; /* data */ - FDcDpIntrHandler handler; - void *param; -} FMediaIntrConfig; -``` - -## 错误码定义 -`` -FMEDIA_DEFAULT_PARAM_ERR /*获取默认参数失败 */ -FMEDIA_ERR_PIXEL /* 时钟设置错误 */ -FMEDIA_ERR_EDID /* EDID参数获取错误*/ -FMEDIA_AUX_CONNECT_FAILED /* AUX连接失败 */ -FMEDIA_TRAIN_TIME_ERR /* dp train次数超过5次还未能连接 */ -FMEDIA_REACH_MAX_VOLTAGE /*已经达到最大电压设置 */ - -`` -## 关键配置参数介绍 - -当您在使用显示驱动时,有必要将显示系统中的关键参数为您介绍: - -- resolution 分辨率 - -显示器能够呈现的最基本的单元是像素,显示器的显示区域正是被像素点所填充,显示器的分辨率就代表了显示器所能呈现的最大像素点,通常使用较多的是1024*768,1920*1080几种,在本驱动中,已将板卡支持分辨率统一至dpSyncTable,dcSyncTable中 - -- color depth 色深 - -色彩深度是用「n位元颜色」(n-bit colour)来作为单位的。若色彩深度是n位元,即有2的n次方种颜色选择,而储存每像素所用的位数目就是n,通常您见到最多的一般是16bit或32bit - -- fresh rate 刷新率 - -显示器每秒刷新画面的次数;单位是Hz;例如60Hz,120Hz - -- pixel clock 像素时钟 - -像素时钟 = 实际的水平像素*垂直像素*刷新率(像素数包括消隐数据) - -比如 {800 , 525 , 1 , 1 , 96 , 2 , 640 , 480 , 144 , 35 , 0 , 0 } 640*480@60Hz - -像素时钟 = 800*525*60 = 25.2 Mhz Vesa标准采用25.175 - -## 应用例程 -`` -- baremetal/example/peripheral/media/media_test -- baremetal/example/peripheral/media/lvgl - - 其中第一个例程只是点亮屏幕;第二个例程可与lvgl库进行连接,测试 - -## API 介绍 - -### 1. FDcConfig && FDpConfig - -``` -FDcConfig *FDcLookupConfig(u32 instance_id) -FDpConfig *FDpLookupConfig(u32 instance_id) -``` -#### 介绍 - -- 获取当前FDC驱动默认配置 - -- 获取当前FDP驱动默认配置 -#### 参数 -- u32 instance_id :当前media驱动中对应的ID - -#### 返回 -FDcConfig * :dc静态默认配置 -FDpConfig * :dp静态默认配置 - - -### 2. FDcDpSetBasicParam - -``` -FError FDcDpSetBasicParam(FDcDp *instance_p, u32 mode_id, u32 color_depth, u32 refresh_rate); -``` -#### 介绍 -- 根据传入配置,初始化MEDIA驱动实例,设置基本参数 - -#### 参数 -- FDcDp *instance_p FDcDp 控制器实例的指针 -- u32 channel_num DP通道号 -- u32 mode_id sync时序模式 -- u32 color_depth 色深 --u32 refresh_rate 刷新率 - -#### 返回 -- FError :FMEDIA_DP_SUCCESS 为初始成功 - -### 3. FDcDpInitial - -``` -FError FDcDpInitial(FDcDp *instance_p, u32 channel_num, u32 mode_id, u32 multi_mode); -``` -#### 介绍 -- 初始化DC,DP,设置参数,包括dc,dp的初始化和连接 - -#### 参数 -- FDcDp *instance_p FDcDp 控制器实例的指针 -- u32 channel_num DP通道号 -- u32 mode_id sync时序模式 -- u32 multi_mode 单屏/多屏 - -#### 返回 -- FError :FMEDIA_DP_SUCCESS 为初始成功 - - -### 4. FDcDpRegisterHandler - -``` -void FDcDpRegisterHandler(FDcDp *instance_p, FDcDpIntrEventType type,FMediaIntrHandler handler,void *param) -``` -#### 介绍 - -- 中断注册函数 - -#### 参数 -- FDcDp *instance_p FDcDp 控制器实例的指针 -- FDcDpIntrEventType type 中断事件 -- FMediaIntrHandler 中断事件响应函数 -- void *param 回调函数参数 - -### 5. FDcDpInterruptHandler - -``` -void FDcDpInterruptHandler(s32 vector, void *args); -``` - -#### 介绍 --中断handle处理函数 - -#### 参数 -``` -s32 vector 中断返回值 -void *irq_args 回调结构体指针 -``` -#### 返回 -- NULL - -### 6. FDcDpIrqEnable - -``` -void FDcDpIrqEnable(FDcDp *instance_p,u32 index, FDcDpIntrEventType intr_event_p); -``` - -#### 介绍 --中断使能函数 - -#### 参数 -``` -FDcDp *instance_p dcdp驱动实例 -u32 index 通道序号 -FMediaIntrConfig intr_event_p 中断类型 -``` -#### 返回 -- NULL - -### 7. FDcDpMultiDisplayFrameBufferSet - -disp_parm *FDcDpMultiDisplayFrameBufferSet(u32 channel, u32 width,u32 height,u32 color_depth,u32 multi_mode); - -``` - -#### 介绍 --设置多屏模式下framebuffer参数 - -#### 参数 -``` -u32 channel 通道号 -u32 width 宽度 -u32 height 高度 -u32 color_depth 色深 -u32 multi_mode 多频模式 -``` -#### 返回 -- &disp_parm - - diff --git a/bsp/phytium/libraries/standalone/doc/reference/driver/fmio.md b/bsp/phytium/libraries/standalone/doc/reference/driver/fmio.md deleted file mode 100644 index 02fd557322..0000000000 --- a/bsp/phytium/libraries/standalone/doc/reference/driver/fmio.md +++ /dev/null @@ -1,180 +0,0 @@ -# I2C 驱动程序 - -## 1. 概述 - -- E2000 的 MIO 接口可配置为 UART 或 I2C,具体时序特性要求需满足复用功能的时序特性要求。当需要使用对应的功能时,只需要软件进行相应配置. -- MIO 仅仅支持E2000系列芯片 - -## 2. 驱动功能 - -MIO 驱动程序管理MIO的功能复用,该驱动程序具备以下功能: - -- 选择设置I2C模式或者串口模式 -- 获取状态信息和版本信息 - -## 3. 使用方法 - -以下部分将指导您完成 MIO 驱动的硬件配置: - -- 1. MIO驱动支持 E2000 Q D S,在E2000上完成测试 -- 2. 本驱动仅仅作为IIC、串口的功能开启关闭使用,搭配串口驱动,与IIC驱动去使用,无法单独调用去实现具体功能 - -以下部分将指导您完成 MIO 驱动的软件配置: - -- 1. 配置驱动程序,新建应用工程,传入设备ID参数,获取设备参数 -- 2. 得到设备参数,操作设置配置项目 -- 3. 进行I2C或者uart操作配置流程 - -## 5. API参考 - -### 5.1. 用户数据结构 - -- drivers/mio/fmio/fmio.h - -```c - -typedef struct -{ - FMioConfig config; /* mio config */ - u32 is_ready; /* mio initialize the complete flag */ -}FMioCtrl; - -``` - -```c - -typedef struct -{ - u32 instance_id; /*mio id*/ - uintptr func_base_addr; /*I2C or UART function address*/ - u32 irq_num; /* Device intrrupt id */ - uintptr mio_base_addr; /*MIO control address*/ - u32 version; /*mio version*/ - u32 function_type; /*mio function type*/ - u32 mio_status; /*mio function type status*/ -} FMioConfig; /*mio configs*/ - -``` -- MIO驱动实例 - -### 5.3 用户API接口 - -```c -const FMioConfig *FMioLookupConfig(u32 instance_id); -``` -- 获取MIO驱动的默认配置参数 - -Note: - - - 用户需要修改配置参数时,可以通过修改返回的FMioConfig副本,作为FMioSelectFunc函数的入参, - -Input: - - - u32 instance_id, 当前控制的MIO控制器实例号 - -Return: - - - const FMioConfig *, 返回驱动默认参数, NULL表示失败 - - -```c -FError FMioSelectFunc(uintptr addr, u32 mio_type); -``` -- 设置MIO驱动的功能配置 - -Note: - - 设置Mio功能 - -Input: - - uintptr addr, 当前控制器的MIO基地址 - - u32 mio_type, 想要设置的MIO功能 -Return: - - @return {FError *} 返回错误码 - -```c -u32 FMioGetFunc(uintptr addr); -``` -- 获取当前MIO的配置 - -Note: - - 获取Mio功能 - -Input: - - uintptr addr, 当前控制器的MIO基地址 - -Return: - - @return {u32} 返回MIO的状态 - -```c -u32 FMioGetVersion(uintptr addr); -``` -- 获取版本信息 - -Note: - - 获取Mio版本 - -Input: - - uintptr addr, 当前控制器的MIO基地址 - -Return: - - @return {u32} 返回MIO的版本 - -```c -FError FMioFuncInit(FMioCtrl *instance_p, u32 mio_type) -``` -- 初始化MIO - -Note: - - 初始化MIO的功能 - -Input: - - FMioCtrl *instance_p, 当前控制器的结构体 - - u32 mio_type,需要配置的选项,串口还是IIC - -Return: - - @return {u32} 返回初始化的状态 - -```c -FError FMioFuncDeinit(FMioCtrl *instance_p) -``` - -- 去初始化MIO - -Note: - - 去初始化MIO的结构体,和相关寄存器 - -Input: - - FMioCtrl *instance_p, 当前控制器的结构体 - -Return: - - @return {u32} 返回去初始化的状态 - -```c -uintptr FMioFuncGetAddress(FMioCtrl *instance_p,u32 mio_type); -``` -- 获取功能配置的基地址 - -Note: - - 获取功能配置的基地址,如果当前配置和目标配置不一致,则失败 - -Input: - - FMioCtrl *instance_p, 当前控制器的结构体 - - u32 mio_type, 目标配置的类型UART或者I2c - -Return: - - @return {uintptr} 返回基地址的值 - -```c -u32 FMioFuncGetIrqNum(FMioCtrl *instance_p,u32 mio_type); -``` -- 获取功能的中断号 - -Note: - - 获取功能配置的中断号,如果当前配置和目标配置不一致,则失败 - -Input: - - FMioCtrl *instance_p, 当前控制器的结构体 - - u32 mio_type, 目标配置的类型UART或者I2c - -Return: - - @return {u32} 返回中断号 \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/doc/reference/driver/fnand.md b/bsp/phytium/libraries/standalone/doc/reference/driver/fnand.md deleted file mode 100644 index 75e7aab9e4..0000000000 --- a/bsp/phytium/libraries/standalone/doc/reference/driver/fnand.md +++ /dev/null @@ -1,447 +0,0 @@ - - -# 驱动概述 -- NAND 作为廉价的存储介质,在大文件的存储场景中占有重要的地位,由此在嵌入式方案中,如何将此驱动做稳定做易用,尤为重要。NAND 控制器驱动具有以下特性: - -1. 支持模式 Toggle 介质模式 -2. 支持模式时序配置 ,同步模式,异步模式 -3. 支持请求之间时间间隔 -4. 采用dma 数据方式进行传输 -5. 支持时序模式下的高频时钟采样相位调节 -6. 支持硬件ECC纠错 -当前NAND 驱动控制器主要为用户提供了以下功能接口: -1. NAND 控制器状态初始化函数 -2. NAND 介质扫描接口 -3. NAND 介质page读/写接口,块擦除接口,spare space 读写接口 -4. 中断相关接口 -5. 坏块管理接口 - -## 驱动功能 - -驱动组成由以下所示 : - -. -├── fnand_bbm.c -├── fnand_bbm.h -├── fnand.c -├── fnand_dma.c -├── fnand_dma.h -├── fnand_ecc.c -├── fnand_ecc.h -├── fnand_g.c -├── fnand.h -├── fnand_hw.c -├── fnand_hw.h -├── fnand_intr.c -├── fnand_option.c -├── fnand_sinit.c -├── fnand_timing.c -├── fnand_timing.h -├── fnand_toggle.c -└── fnand_toggle.h - -其中fnand.h 为用户开发者主要使用接口,提供了以下功能: -1. Nand 控制器初始化接口 -2. 根据Nand 介质id 初始化介质页/块的大小 -3. Nand 控制器相关状态位的回调函数注册 -4. Nand 控制器中断处理函数 -5. Nand 坏块管理函数 - - -## 数据结构 -```c - typedef struct _FNand - { - u32 is_ready; /* Device is ininitialized and ready*/ - FNandConfig config; - u32 work_mode; /* NAND controler work mode */ - - /* nand flash info */ - FNandInterMode inter_mode[FNAND_CONNECT_MAX_NUM]; /* NAND controler timing work mode */ - FNandTimingMode timing_mode[FNAND_CONNECT_MAX_NUM]; - u32 nand_flash_interface[FNAND_CONNECT_MAX_NUM] ; /* Nand Flash Interface , followed by FNAND_ONFI_MODE \ FNAND_TOGGLE_MODE*/ - - struct FNandDmaBuffer dma_data_buffer; /* DMA data buffer */ - struct FNandDmaBuffer descriptor_buffer; /* DMA descriptor */ - struct FNandDmaDescriptor descriptor[2]; /* DMA descriptor */ - struct FNandSdrTimings sdr_timing; /* SDR NAND chip timings */ - - /* bbm */ - FNandBadBlockManager bbt_manager[FNAND_CONNECT_MAX_NUM]; /* bad block manager handler */ - /* nand detect */ - FNandNandGeometry nand_geometry[FNAND_CONNECT_MAX_NUM]; /* nand flash infomation */ - /* dma 页操作 */ - FnandIrqEventHandler irq_event_fun_p; /* Interrupt event response function */ - void *irq_args; - - FNandOperationWaitIrqCallback wait_irq_fun_p; /* The NAND controller operates the wait function */ - void *wait_args; - - /* operations */ - FNandTransferP write_p ; /* Write page function */ - FNandTransferP read_p ; /* Read page function */ - FNandTransferP write_oob_p ; /* Write page spare space function */ - FNandTransferP read_oob_p ; /* Read page spare space function */ - FNandTransferP write_hw_ecc_p ; /* Write page with hardware function */ - FNandTransferP read_hw_ecc_p ; /* Read page with hardware function */ - FNandEraseP erase_p; /* Erase block function */ - } FNand; -``` - -## 错误码定义 -``` -FNAND_ERR_OPERATION /* NAND 控制器操作NAND flash 失败 */ -FNAND_ERR_INVAILD_PARAMETER /* 当NAND 控制器配置信息不存在 */ -FNAND_IS_BUSY /* NAND 控制器操作NAND flash ,控制器正忙 */ -FNAND_OP_TIMEOUT /* NAND 控制器操作超时*/ -FNAND_VALUE_ERROR /* NAND 控制器在进行BBM 搜索过程时,获取坏块管理信息不匹配 */ -FNAND_VALUE_FAILURE /* 获取的数据与预期不相符合 */ -FNAND_NOT_FET_TOGGLE_MODE /* toggle 模式 */ -FNAND_ERR_READ_ECC /* 读取过程中,进行硬件ecc ,错误超过纠错的范围 */ -FNAND_ERR_IRQ_OP_FAILED /* 中断进行读/写/擦操作时,回调函数反馈错误 */ -FNAND_ERR_IRQ_LACK_OF_CALLBACK /* 中断进行读/写/擦操作时,缺少回调函数 */ -FNAND_ERR_IRQ_OP_FAILED /* 等待中断回应失败 */ -FNAND_ERR_NOT_MATCH /* 进行flash id 检测时,检测结果与预期不符合 */ -``` -## 应用例程 -- baremetal/example/peripheral/nand/nand_test -## API 介绍 - -### 1. FNandLookupConfig - -``` -FNandConfig *FNandLookupConfig(u32 instance_id) -``` - -#### 介绍 -- 获取当前FNand驱动默认配置 - -#### 参数 -- u32 instance_id :当前Nand驱动中对应的ID - -#### 返回 -FGicConfig * :静态默认配置 - - -### 2. FNandCfgInitialize - -``` -FError FNandCfgInitialize(FNand *instance_p,FNandConfig *config_p) -``` - -#### 介绍 -- 根据传入配置,初始化NAND驱动实例 - -#### 参数 -- FNand *instance_p FNand 控制器实例的指针 -- FNandConfig * 需要应用于示例中的配置项 - -#### 返回 -- FError :FT_SUCCESS 为初始成功 - -### 3. FNandScan - -``` -FError FNandScan(FNand *instance_p) -``` - -#### 介绍 -- Nand flash 扫描,此接口调用之后会自动扫描Nand flash 介质信息 - -#### 参数 -- FNand *instance_p FNand 控制器实例的指针 - -#### 返回 -- FError :FT_SUCCESS 为初始成功 - -### 4. FNandWritePage - -``` -FError FNandWritePage(FNand *instance_p,u32 page_addr,u8 *buffer,u32 page_copy_offset ,u32 length,u8 *oob_buffer,u32 oob_copy_offset,u32 oob_length,u32 chip_addr) -``` - -#### 介绍 -- 每次写一个页面的操作,包括写页面数据和空闲数据 ,默认会进行硬件ecc 编码写入 - -#### 参数 -- FNand *instance_p FNand 控制器实例的指针 -- u32 page_addr 页操作地址,单位为页 -- u8 *buffer 指向写入内容缓冲区的指针 -- u32 page_copy_offset 写入某一页中的具体位置,当此参数非0 时,写入的地址为 ,在page_addr 对应的页面下,0 + page_copy_offset 开始的地址,未覆盖的地方默认填入0xff -- u32 length 数据写入页面下的长度 -- u8 *oob_buffer 指向写入spare space内容 缓冲区的指针 -- u32 oob_copy_offset 写入某一页中spare space 的具体位置,当此参数非0 时,在page_addr 对应的页面下,写入的地址为 页长度 + page_copy_offset 开始的地址,未覆盖的地方默认填入0xff -- u32 oob_length spare space数据写入页面下的长度 -- u32 chip_addr 芯片地址 - -#### 返回 -- FError :FT_SUCCESS 为写入成功 - -### 5. FNandWritePageRaw - -``` -FError FNandWritePageRaw(FNand *instance_p,u32 page_addr,u8 *buffer,u32 page_copy_offset ,u32 length,u8 *oob_buffer,u32 oob_copy_offset,u32 oob_length,u32 chip_addr) -``` - -#### 介绍 -- 每次写一个页面的操作,包括写页面数据和空闲数据 ,默认不会进行硬件ecc 编码写入 - -#### 参数 -- FNand *instance_p FNand 控制器实例的指针 -- u32 page_addr 页操作地址,单位为页 -- u8 *buffer 指向写入内容缓冲区的指针 -- u32 page_copy_offset 写入某一页中的具体位置,当此参数非0 时,写入的地址为 ,在page_addr 对应的页面下,0 + page_copy_offset 开始的地址,未覆盖的地方默认填入0xff -- u32 length 数据写入页面下的长度 -- u8 *oob_buffer 指向写入spare space内容 缓冲区的指针 -- u32 oob_copy_offset 写入某一页中spare space 的具体位置,当此参数非0 时,在page_addr 对应的页面下,写入的地址为 页长度 + page_copy_offset 开始的地址,未覆盖的地方默认填入0xff -- u32 oob_length spare space数据写入页面下的长度 -- u32 chip_addr 芯片地址 - -#### 返回 -- FError :FT_SUCCESS 为写入成功 - - -### 6. FNandReadPage - -``` -FError FNandReadPage(FNand *instance_p,u32 page_addr,u8 *buffer,u32 page_copy_offset,u32 length,u8 *oob_buffer,u32 oob_copy_offset,u32 oob_length,u32 chip_addr) -``` - -#### 介绍 -- 每次读出一个页面的操作,包括读页面数据和空闲数据 ,默认会进行ecc 纠错 - -#### 参数 -``` -FNand *instance_p FNand 控制器实例的指针 -u32 page_addr 页操作地址,单位为页 -u8 *buffer 指向读出内容缓冲区的指针 -u32 page_copy_offset 读出某一页中的具体位置,当此参数非0 时,读出的地址为 ,在page_addr 对应的页面下 0 + page_copy_offset 开始的地址 -u32 length 数据读出页面下的长度 -u8 *oob_buffer 指向读出spare space内容 缓冲区的指针 -u32 oob_copy_offset 读出某一页中spare space 的具体位置,当此参数非0 时,在page_addr 对应的页面下,读出的地址为 页长度 + page_copy_offset 开始的地址 -u32 oob_length spare space数据读出的长度 -u32 chip_addr 芯片地址 -``` - - -#### 返回 -- FError :FT_SUCCESS 为读出成功 - -### 7. FNandReadPageRaw - -``` -FError FNandReadPageRaw(FNand *instance_p,u32 page_addr,u8 *buffer,u32 page_copy_offset,u32 length,u8 *oob_buffer,u32 oob_copy_offset,u32 oob_length,u32 chip_addr) -``` - -#### 介绍 -- 每次读出一个页面的操作,包括读页面数据和空闲数据 ,不会进行ecc 纠错 - -#### 参数 -``` -FNand *instance_p FNand 控制器实例的指针 -u32 page_addr 页操作地址,单位为页 -u8 *buffer 指向读出内容缓冲区的指针 -u32 page_copy_offset 读出某一页中的具体位置,当此参数非0 时,读出的地址为 ,在page_addr 对应的页面下 0 + page_copy_offset 开始的地址 -u32 length 数据读出页面下的长度 -u8 *oob_buffer 指向读出spare space内容 缓冲区的指针 -u32 oob_copy_offset 读出某一页中spare space 的具体位置,当此参数非0 时,在page_addr 对应的页面下,读出的地址为 页长度 + page_copy_offset 开始的地址 -u32 oob_length spare space数据读出的长度 -u32 chip_addr 芯片地址 -``` - - -#### 返回 -- FError :FT_SUCCESS 为读出成功 - -### 8. FNandEraseBlock - -``` -FError FNandEraseBlock(FNand *instance_p, u32 block, u32 chip_addr) -``` - -#### 介绍 -- 擦除块数据 - -#### 参数 -FNand *instance_p FNand 控制器实例的指针 -u32 block 块的位置号 -u32 chip_addr 芯片地址 - -#### 返回 -- FError :FT_SUCCESS 为写入成功 - - - -### 9. FNandReadPageOOb - -``` -FError FNandReadPageOOb(FNand *instance_p,u32 page_addr,u8 *oob_buffer,u32 oob_copy_offset,u32 oob_length,u32 chip_addr) -``` - -#### 介绍 -- 读取每一页中的 spare space 内容 - -#### 参数 -- FNand *instance_p FNand 控制器实例的指针 -- u32 page_addr 需要读取空闲空间的Row Address -- u8 * oob_buffer 指向读取数据的缓冲区 -- u32 oob_copy_offset 读出某一页中spare space 中位置的偏移,当此参数非0 时,读出的地址为 ,在page_addr 对应的页面下 page length + oob_copy_offset 开始的地址 -- u32 oob_length 需要读取是页面中spare space 中的长度 -- u32 chip_addr 芯片地址 - -#### 返回 -- FError :FT_SUCCESS 为写入成功 - -### 10. FNandWritePageOOb - - -``` -FError FNandWritePageOOb(FNand *instance_p,u32 page_addr,u8 *oob_buffer,u32 page_copy_offset,u32 oob_length,u32 chip_addr) -``` - -#### 介绍 -- 读取每一页中的 spare space 内容 - -#### 参数 -- FNand *instance_p FNand 控制器实例的指针 -- u32 page_addr 需要写入空闲空间的Row Address -- u8 * oob_buffer 指向写入数据的缓冲区 -- u32 oob_copy_offset 写入某一页中spare space 中位置的偏移,当此参数非0时,写入的地址为 ,在page_addr 对应的页面下 page length + oob_copy_offset 开始的地址 -- u32 oob_length 需要写入是页面中spare space 中的长度 -- u32 chip_addr 芯片地址 - -#### 返回 -- FError :FT_SUCCESS 为写入成功 - - -### 11. FNandSetIsrHandler - -``` -void FNandSetIsrHandler(FNand *instance_p, FnandIrqEventHandler event_p, void *irq_args) -``` - -#### 介绍 -- 初始化中断事件回调函数 - -#### 参数 -- FNand *instance_p FNand 控制器实例的指针 -- FnandIrqEventHandler event_p 中断事件回调函数 -- void *irq_args 回调函数传入参数 - -#### 返回 -无 - -### 12. FNandIrqHandler - -``` -void FNandIrqHandler(s32 vector, void *param) -``` - -#### 介绍 -- Nand 控制器中断响应函数 - -#### 参数 -- s32 vector 中断ID -- void * param 中断传入参数 - -#### 返回 -- 无 - -### 13. FNandInitBbtDesc - -``` -void FNandInitBbtDesc(FNand *instance_p) -``` - -#### 介绍 -- 坏块表初始化 - -#### 参数 -- FNand *instance_p FNand 控制器实例的指针 - -#### 返回 -- 无 - - -### 10. FNandScanBbt - -``` -FError FNandScanBbt(FNand *instance_p, u32 target_addr) -``` - -#### 介绍 -- 在Nand flash中扫描具体目标地址的坏块表 - -#### 参数 -- FNand *instance_p FNand 控制器实例的指针 -- u32 chip_addr 芯片地址 - -#### 返回 -- FError :FT_SUCCESS 为扫描成功 - -### 11. FNandIsBlockBad - -``` -FError FNandIsBlockBad(FNand *instance_p, u32 block, u32 target_addr) -``` -#### 介绍 -- 检查当前块是否为坏块 - -#### 参数 -- FNand *instance_p FNand 控制器实例的指针 -- u32 block 需要检查的块ID号 -- u32 chip_addr 芯片地址 - -#### 返回 -- FError :FT_SUCCESS 为当前块为坏块 - -### 12. FNandOperationWaitIrqRegister - -``` -void FNandOperationWaitIrqRegister(FNand *instance_p,FNandOperationWaitIrqCallback wait_irq_fun_p ,void *wait_args) -``` - -#### 参数 -- FNand *instance_p FNand 控制器实例的指针 -- FNandOperationWaitIrqCallback 用户使用读/写/擦接口过程中,等待中断完成的回调函数接口 ,用户的回调函数,驱动以FT_SUCCESS 作为成功判断,否则为失败 -- void *wait_args 用户需要传入至回调函数中的参数 - -### 返回 - -无 - - -### 13. FNandSetOption - -- 依据options 选项参数,配置对应参数 - -```c -FError FNandSetOption(FNand *instance_p,u32 options,u32 value) -``` - -#### 参数 -- FNand *instance_p FNand 控制器实例的指针 -- u32 option 具体配置项 -- u32 value 配置项中对应的参数 - diff --git a/bsp/phytium/libraries/standalone/doc/reference/driver/fpcie.md b/bsp/phytium/libraries/standalone/doc/reference/driver/fpcie.md deleted file mode 100644 index 4a93dd9539..0000000000 --- a/bsp/phytium/libraries/standalone/doc/reference/driver/fpcie.md +++ /dev/null @@ -1,450 +0,0 @@ -# FPCIE 驱动程序 - -## 1. 概述 - - -- PCIe总线使用端到端的连接方式,在一条PCIe链路的两端只能各连接一个设备,这两个设备互为是数据发送端和数据接收端。PCIe总线除了总线链路外,还具有多个层次,发送端发送数据时将通过这些层次,而接收端接收数据时也使用这些层次。似 - -- FPCIE 模块内置两个 PCIE 单元(PCI-E Unit,PEU),分别为 PEU0 和 PEU1。每个 PEU 包含 3 个控制器:C0、C1 和 C2。当 PEU 拆分模式为 X16 时,C1 不可见。 - -- 本模块特点如下 - -1. 支持 Root Complex 和 End Point 两种模式; -2. 共 34 lane,两路 X16(可拆分为 2 个 X8)和两路 X1; -3. 内部集成 DMA 引擎,一读一写两个通道。 - -## 2. 功能 - - -- 驱动相关的源文件如下, -- drivers/pcie/fpcie - -``` -. -├── fpcie.c -├── fpcie.h -├── fpcie.md -├── fpcie_common.h -├── fpcie_config.c -├── fpcie_dma.c -├── fpcie_dma.h -├── fpcie_ep.c -├── fpcie_g.c -├── fpcie_hw.c -├── fpcie_hw.h -├── fpcie_misc.c -├── fpcie_sinit.c -├── fpcir_intx.c -└── fspim.md -``` - -## 3. 配置方法 - -以下部分将指导您完成 PCIE 驱动的软件配置: - -- 初始化PCIE控制器 -- 通过API 获取特定设备的 bar 空间地址 -- 使用INTX 中断响应设备中断响应函数 -- 使用DMA模式完成数据通信 - -## 4. 应用示例 - -"/baremetal/example/peripheral/fpcie_probe " - -## 5. API参考 - -### 5.1 用户数据结构 - - - -- 中断注册回调函数 - -```c - typedef struct - { - void (*IntxCallBack)(void *args) ; - void *args ; - s32 bdf ; - } FPcieIntxFun; -``` - -- 初始化配置空间地址 - -```c - struct FPcieRegion { - FPcieAddr bus_start; /* Start on the bus */ - FPciePhysAddr phys_start; /* Start in physical address space */ - FPcieSize size; /* Size */ - unsigned long flags; /* Resource flags */ - FPcieAddr bus_lower; - u32 exist_flg; /* exist flg */ - }; -``` - -- 驱动配置数据 - -```c - typedef struct - { - u32 instance_id; /* Id of device */ - u32 irq_num; /* Irq number */ - uintptr_t ecam; /* The Memory way */ - uintptr_t peu0_config_address; - uintptr_t peu1_config_address; - - uintptr_t control_c0_address; - uintptr_t control_c1_address; - uintptr_t control_c2_address; - uintptr_t control_c3_address; - uintptr_t control_c4_address; - uintptr_t control_c5_address; - - u32 io_base_addr; - u32 io_size ; - u32 npmem_base_addr; - u32 npmem_size; - u64 pmem_base_addr; /* Prefetchable memory */ - u64 pmem_size; - - u8 inta_irq_num ; - u8 intb_irq_num ; - u8 intc_irq_num ; - u8 intd_irq_num ; - u8 need_skip ; - - } FPcieConfig; -``` - -- 驱动控制数据 - -```c - typedef struct - { - u32 is_ready; /* Device is ininitialized and ready*/ - FPcieConfig config; - - struct FPcieRegion mem; - struct FPcieRegion mem_prefetch; - struct FPcieRegion mem_io; - - s32 bus_max; /* 当前最大bus num */ - - FPcieIrqCallBack fpcie_dma_rx_cb; - void *dma_rx_args; - - FPcieIrqCallBack fpcie_dma_tx_cb; - void *dma_tx_args; - - FPcieIrqCallBack fpcie_dma_rx_error_cb; - void *dma_rx_error_args; - - FPcieIrqCallBack fpcie_dma_tx_error_cb; - void *dma_tx_error_args; - - FPcieIntxFun inta_fun; - - FPcieIntxFun intb_fun; - - FPcieIntxFun intc_fun; - - FPcieIntxFun intd_fun; - - } FPcie; -``` - - -- 配置空间标记参数 - -``` -#define FPCIE_REGION_MEM 0x00000000 /* PCI memory space */ -#define FPCIE_REGION_IO 0x00000001 /* PCI IO space */ -#define PCI_REGION_PREFETCH 0x00000008 /* prefetchable PCI memory */ -``` - - -- 配置空间中对应的bar 标号 - -``` -#define FPCIE_BAR_0 0 -#define FPCIE_BAR_1 1 -#define FPCIE_BAR_2 2 -#define FPCIE_BAR_3 3 -#define FPCIE_BAR_4 4 -#define FPCIE_BAR_5 5 -``` - - -### 5.2 错误码定义 - -- 模块错误码编号:0x1090000 -- [0x0] FT_SUCCESS -- [0x1090001] FPCIE_ERR_INVALID_PARAM -- [0x1090002] FPCIE_ERR_OUTOF_BUS -- [0x1090003] FPCIE_ERR_CONFIG_WRITE -- [0x1090004] FPCIE_ERR_TYPE0 -- [0x1090005] FPCIE_ERR_TIMEOUT -- [0x1090006] FPCIE_NEED_SKIP -- [0x1090007] FPCIE_NOT_FOUND - - -### 5.3 用户API接口 - - -#### FPcieLookupConfig - -- 获取FPCIE驱动的默认配置参数 - -```c -const FPcieConfig *FPcieLookupConfig(u32 instance_id) -``` - -Note: - -- 用户可以通过此接口获取驱动默认配置的副本,进行修改后,作为`FPcieCfgInitialize`函数的入参使用 - -Input: - -- u32 instance_id, 选择的FPcie控制器实例号 - -Return: - -- const FPcieConfig *, 返回的默认驱动配置,返回NULL表示失败 - - - -#### FPcieCfgInitialize - -- 初始化配置空间和FPCIE 实例 - -```c -FError FPcieCfgInitialize(FPcie *instance_p, FPcieConfig *config_p) -``` - -Note: - -- 用户可以使用'FPcieLookupConfig'所产生的配置参数进行初始化,也可以自己组织配置参数进行初始化 - -Input: - -- FPcie *instance_p 指向FPcie实例的指针。 - -- FPcieConfig *config_p 指向FPcieConfig的指针。 - -Return : - -- 成功返回 FT_SUCCESS - - -#### FPcieDmaDescSet - -- PCIE DMA描述符分组包 - -```c -FError FPcieDmaDescSet(uintptr axi_addr, - uintptr bar_addr, - u32 length, - struct FPcieDmaDescriptor *desc, - struct FPcieDmaDescriptor *next_desc) -``` - -Note: - -- 用户使用dma 方式进行PCIE 数据传输时,用此函数将源地址与目标地址进行组合打包 - - -Input: - -- uintptr axi_addr 内存地址,可以为接收地址也可为发送地址 - -- uintptr bar_addr 需要通信function中对应的bar寄存器中分配的地址空间,可以为接收地址也可为发送地址 - -- u32 length 需要传输的字节长度 - -- struct FPcieDmaDescriptor *next_desc 是下一个需要发送的描述符 - -Output: - -- struct FPcieDmaDescriptor *desc 需要要配置的描述符 - - - -#### FPcieDmaRead - -Note: - -- 通过dma的方式读取Pcie function - -```c -void FPcieDmaRead(uintptr bar_address, struct FPcieDmaDescriptor *desc) -``` - -Input: - -- uintptr bar_address 基地地址寄存器的值 - -- struct FPcieDmaDescriptor *desc 接收描述符的起始地址 - -#### FPcieDmaWrite - -- 通过dma的方式写入Pcie function - -```c -void FPcieDmaWrite(uintptr bar_address, struct FPcieDmaDescriptor *desc) -``` - -Input: - -- uintptr bar_address 基地地址寄存器的值 - -- struct FPcieDmaDescriptor *desc 发送描述符的起始地址 - - -#### FPcieDmaPollDone - -- 轮询等待DMA完成 - -```c -FError FPcieDmaPollDone(struct FPcieDmaDescriptor *desc, u32 wait_cnt) -``` - -Input: - -- struct FPcieDmaDescriptor *desc Desc是需要等待完成的dma 描述符 - -- u32 wait_cnt 是需要等待结束的计数 - -#### FPcieFetchDeviceInBus - -- 该功能用于扫描整个总线上的树形结构,并且对其中的节点进行初始化与配置空间的设置 - -```c -FError FPcieFetchDeviceInBus(FPcie *instance_p, u32 bus_num) -``` - -Input: - -- FPcie *instance_p 指向FPcie实例的指针。 - -- u32 bus_num 扫描对应总线上已经连接的网桥/端点。 - -Output: - -- FError FT_SUCCESS 为成功 - - -#### FPcieFindDeviceNum - -- 根据输入的Vendor ID 与 Device ID ,获取当前PCIE 总线上一共存在多少此类设备 - -```c -u32 FPcieFindDeviceNum(FPcie *instance_p, u32 bus_num,u32 vendor_id,u32 device_id) -``` - -Input: - -- FPcie *instance_p 指向FPcie实例的指针。 - -- u32 bus_num 需要查找的bus号 - -- u32 vendor_id 目标 Vendor ID - -- u32 device_id 目标 Device ID - -Output: - -- u32 return 所需查找设备的数量 - - - -#### FPcieGetBusDeviceBarInfo - -- 通过Vendor ID和device ID获取对应的function id、device id 和 bar 空间 - -```c -FError FPcieGetBusDeviceBarInfo(FPcie *instance_p,u32 bus,u32 vendor_id,u32 device_id,u32 bar_num ,u32 *device_p,u32 *function_p,uintptr *bar_addr_p) -``` - -Input: -- FPcie *instance_p 指向FPcie实例的指针。 - -- u32 bus 需要查找的bus号 - -- u32 vendor_id 目标 Vendor ID - -- u32 device_id 目标 Device ID - -- u32 bar_num 需要查找对应bar空间的编号 - -Output: - -- u32 * device_p 需要获取对应设备号的指针 - -- u32 * function_p 需要获取对应功能号的指针 - -- uintptr * bar_addr_p 需要获取对应bar地址空间的指针 - -- FError return FT_SUCCESS 为成功 - - -#### FPcieSearchFunByClass - -- 使用 class code 获取设备的信息 - -```c -u32 FPcieSearchFunByClass(FPcie *instance_p,u32 class_code,FPcieSearchFunNode *node_p ,u32 node_num) -``` - -Input: - -- FPcie *instance_p 指向FPcie实例的指针。 - -- u32 class_code 对应的类号 - -- FPcieSearchFunNode * node_p 是一个存放特定函数信息缓冲区的指针 - -- u32 node_num 缓冲器的数量 - -Output: - -- u32 return 输出中的实际节点的个数 - - - -#### FPcieIntxIrqHandler - -- fpcie的Intx中断服务函数 - -```c -void FPcieIntxIrqHandler(s32 vector, void *args) -``` - -Input: - -- s32 vector 中断向量号 - -- void * args 需要传入的参数 - - -#### FPcieIntxRegiterIrqHandler - -- 使用bus id、device id 和function id在INTX上注册中断响应函数 - -```c -FError FPcieIntxRegiterIrqHandler(FPcie *instance_p, - u32 bus, - u32 device, - u32 function, - FPcieIntxFun *intx_fun_p) -``` - -Input: - -- FPcie *instance_p 指向FPcie实例的指针。 - -- u32 bus 需要配置的bus id - -- u32 device 需要配置的device id - -- u32 function 需要配置的function id - -- FPcieIntxFun * intx_fun_p 是用户用来注册回调函数信息的指针 diff --git a/bsp/phytium/libraries/standalone/doc/reference/driver/fpl011.md b/bsp/phytium/libraries/standalone/doc/reference/driver/fpl011.md deleted file mode 100644 index 0cff6c4bba..0000000000 --- a/bsp/phytium/libraries/standalone/doc/reference/driver/fpl011.md +++ /dev/null @@ -1,368 +0,0 @@ -# FPL011 驱动程序 - -## 1. 概述 - -- 通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART。它将要传输的资料在串行通信与并行通信之间加以转换。作为把并行输入信号转成串行输出信号的芯片,UART通常被集成于其他通讯接口的连结上。 - -- 本模块目前支持FT2000-4/D2000/E2000 - -- 本模块可使用MIO的uart功能 -## 2. 功能 - -- 1. 支持轮询接收发送数据 - 2. 中断接收发送数据 - 3. 接收发送有独立fifo - 4. 支持回传测试模式 - -相关源文件为: -``` -fpl011 - ├── fpl011.c - ├── fpl011.h - ├── fpl011_g.c - ├── fpl011_hw.c - ├── fpl011_hw.h - ├── fpl011_intr.c - ├── fpl011_options.c - └── fpl011_sinit.c -``` - - -## 3. 配置方法 - -### 参数配置 - -#### 通信参数配置 - -FPl011SetDataFormat()并将一个FPl011Format结构传递给它。FPl011Format结构应该包含所有必需的参数。参见下面的示例。 - -``` -FPl011Format format = -{ - u32 baudrate = 115200; /* In bps, ie 1200 */ - u32 data_bits = FPL011_FORMAT_WORDLENGTH_8BIT ; /* Number of data bits */ - u32 parity = FPL011_FORMAT_NO_PARITY ; /* Parity */ - u8 stopbits = FPL011_FORMAT_1_STOP_BIT ; /* Number of stop bits */ -}; - -FPl011SetDataFormat(&uart,&format); - -``` - -#### Running UART Communication - -- Transmitting ,此接口兼容轮询与中断模式,用户传入特定buffer,函数外通过判断标志位确认发送是否完成。 - -``` -u8 buffer_p[10] ; -u32 len = 0 ; -len = FPl011Send(&uart,buffer_p,sizeof(buffer_p)) ; -``` - -- Receiving ,此接口兼容轮询与中断模式,用户传入特定buffer,函数外通过判断标志位确认发送是否完成。 - -``` -u8 buffer_p[10] ; -u32 len = 0 ; -len = FPl011Receive(&uart,buffer_p,sizeof(buffer_p)) ; -``` - -## 4 应用示例 - -baremetal/example/uart_test - -## 4. API参考 - -## FPl011Config *FPl011LookupConfig(u32 instance_id) - -初始化特定的FPl011实例,以便它可以被使用。 -Initializes a specific FPl011 instance such that it is ready to be used. - -- 参数 -instance_id 是对应驱动的编号 - - -- Parameters - -instance_id contains the ID of the device - -- 返回 - -FPl011Config *指向配置结构的指针,如果指定的设备不在系统中,则为NULL。 - - -- Return - -FPl011Config *A pointer to the configuration structure or NULL if the specified device is not in the system. - - -## u32 FPl011Send(FPl011 *uart_p, u8 *byte_p, u32 length) - -这个函数使用设备发送指定的缓冲区,采用轮询或中断驱动模式。 - -This functions sends the specified buffer using the device in either - polled or interrupt driven mode. - - -- 参数 - -uart_p 是指向FPl011实例的指针。 -byte_p 是指向要发送的数据缓冲区的指针。 -length 表示发送的字节数。任何已经放入传输FIFO的数据将被发送。 - -- Parameters -uart_p is a pointer to the FPl011 instance. -byte_p is pointer to a buffer of data to be sent. -length contains the number of bytes to be sent. Any data that was already put into the transmit FIFO will be sent. - -- 返回 - -实际发送的字节数。 - - -- Return - -The number of bytes actually sent. - -## u32 FPl011Receive(FPl011 *uart_p, u8 *byte_p, u32 length) - -此函数尝试从设备接收指定字节数的数据,并将其存储到指定的缓冲区中。 - -This function attempts to receive a specified number of bytes of data from the device and store it into the specified buffer. - -- 参数 - -uart_p 是指向FPl011实例的指针 -byte_p 是用于接收数据的缓冲区指针 -length 表示接收的字节数。 - -- Parameters - -uart_p is a pointer to the FPl011 instance -byte_p is pointer to buffer for data to be received into -length is the number of bytes to be received. - -- 返回 - -接收的字节数。 - -- Return - -The number of bytes received. - - -## void FPl011ProgramCtlReg(FPl011 *uart_p,u32 ctrl_reg) - - This function reprograms the control register according to the following - sequence mentioned in the TRM - -- 参数 -uart_p 是指向FPl011实例的指针 -ctrl_reg 想要被写入的控制寄存器的参数 - - - Parameters - -uart_p is a pointer to the FPl011 instance -ctrl_reg value to be written - - - -## void FPl011SetOperMode(FPl011 *uart_p,u8 operation_mode) - -该函数设置UART的操作模式。 UART可以操作 两种模式之一:正常模式、本地环回模式。 - -This function sets the operational mode of the UART. The UART can operate - in one of four modes: Normal, Local Loopback. - -- 参数 - -uart_p是指向FPl011实例的指针。 - -operation mode为UART模式。 - -- Parameters - - uart_p is a pointer to the FPl011 instance. - - operation_mode is the mode of the UART. - -## void FPl011SetSpecificOptions(FPl011 *uart_p, u32 options) - -为指定的驱动程序实例设置选项。 - -Sets the options for the specified driver instance. - -- Parameters - -uart_p是指向FPl011实例的指针。 - -uart_p is a pointer to the FPl011 instance. - -options contains the options to be set which are bit masks contained in the file FPl011_uart.h and named FUART_OPTION_*. - - -## void FPl011ClearSpecificOptions(FPl011 *uart_p, u32 options) - - -清除指定驱动程序实例的选项。 - -Clear the options for the specified driver instance. - -- 参数 - -uart_p是指向fpl011实例的指针。 - -options 包含要设置的选项,这些选项是包含在文件FPl011_uart.h和名为FUART_OPTION_*的位掩码。 - -- Parameters - -uart_p is a pointer to the fpl011 instance. - -options contains the options to be set which are bit masks contained in the file FPl011_uart.h and named FUART_OPTION_*. - -## FError FPl011SetBaudRate(FPl011 *uart_p, u32 baudrate) - -设置设备波特率。 - -Sets the baud rate for the device. - -- 参数 - -uart p是指向FPl011实例的指针 - -BaudRate 所要设置波特率 - -- Parameters - -uart_p is a pointer to the FPl011 instance - -BaudRate to be set - -- 返回 - -如果一切都按照预期配置,则返回FT_SUCCESS - -如果请求的速率不可用,则返回FPL011_ERROR_PARAM - -- Return - - FT_SUCCESS if everything configured as expected - - FPL011_ERROR_PARAM if the requested rate is not available - because there was too much error - -## void FPl011GetDataFormat(FPl011 *uart_p,FPl011Format *format_p) - -获取指定UART的数据格式。 - -Gets the data format for the specified UART. - -- 参数 - -uart_p 是指向fpl011实例的指针。 - -format_p 是一个指向格式结构的指针,该结构将在调用完成后包含数据格式。 - -- Parameters - -uart_p is a pointer to the fpl011 instance. - -format_p is a pointer to a format structure that will contain the data format after this call completes. - -## FError FPl011SetDataFormat(FPl011 *uart_p,FPl011Format *format_p) - -将需要的参数格式,设置至特定的串口驱动中 - -Sets the data format for the specified UART. - -- 参数 - -Uart_p 是指向fpl011实例的指针。 - -format_p 是一个指向格式结构的指针,该结构将在调用完成后包含数据格式。 - -- Parameters - -uart_p is a pointer to the fpl011 instance. - -format_p is a pointer to a format structure that will contain the data format after this call completes. - -- 返回 - - 如果一切都按照预期配置,则使用FT_SUCCESS - 如果其中一个参数无效,则返回FPL011_ERROR_PARAM - -- Return - - FT_SUCCESS if everything configured as expected - FPL011_ERROR_PARAM if one of the parameters was not valid. - - -## void FPl011SetTxFifoThreadHold(FPl011 *uart_p, u8 trigger_level) - -这个函数设置Tx FIFO触发器级别为'TriggerLevel'参数。 - -This functions sets the Tx FIFO trigger level to the 'TriggerLevel' argument. - -- 参数 - -uart_p 是指向fpl011实例的指针。 -Trigger_level包含要设置的触发器级别。 这个值从0-32 (FPL011IFLS_TXIFLSEL_1_8 - FPL011IFLS_TXIFLSEL_7_8) - - -- Parameters - -uart_p is a pointer to the fpl011 instance. - -trigger_level contains the trigger level to set. This is a value from 0-32 (FPL011IFLS_TXIFLSEL_1_8 - FPL011IFLS_TXIFLSEL_7_8) - - -## void FPl011SetRxFifoThreadhold(FPl011 *uart_p, u8 trigger_level) - -这个函数将Rx FIFO触发器级别设置为'TriggerLevel'参数。 - -This functions sets the Rx FIFO trigger level to the 'TriggerLevel' argument. - -- 参数 - -uart_p 是指向fpl011实例的指针。 -Trigger_level包含要设置的触发器级别。 这个值从0-32 (FPL011IFLS_RXIFLSEL_1_8 - FPL011IFLS_RXIFLSEL_7_8) - -- Parameters - -uart_p is a pointer to the fpl011 instance. - -trigger_level contains the trigger level to set. This is a value from 0-32 (FPL011IFLS_RXIFLSEL_1_8 - FPL011IFLS_RXIFLSEL_7_8) - -## u32 FPl011GetInterruptMask(FPl011 *uart_p) - -这个函数获取中断掩码。 - -This function gets the interrupt mask. - -- 参数 - -uart_p是指向PFl011实例的指针 - -- Parameters - -uart_p is a pointer to the PFl011 instance - - -## void FPl011SetInterruptMask(FPl011 *uart_p, u32 mask) - -这个函数设置中断掩码。 - -This function sets the interrupt mask. - -- 参数 - -uart_p是指向PFl011实例的指针 - -mask包含要启用或禁用的中断。 '1'启用中断,'0'禁用中断。 - -- Parameters - -uart_p is a pointer to the PFl011 instance - -mask contains the interrupts to be enabled or disabled. A '1' enables an interrupt, and a '0' disables. diff --git a/bsp/phytium/libraries/standalone/doc/reference/driver/fpwm.md b/bsp/phytium/libraries/standalone/doc/reference/driver/fpwm.md deleted file mode 100644 index 90bced080e..0000000000 --- a/bsp/phytium/libraries/standalone/doc/reference/driver/fpwm.md +++ /dev/null @@ -1,313 +0,0 @@ -# FPWM 驱动程序 - -## 1. 概述 - -PWM(Pulse Width Modulation)简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在测量、通信、工控等方面。 - -## 2. 功能 - -pwm控制器驱动提供了pwm的控制访问方法, -- 初始化pwm控制器,配置相关参数,如时钟分频,周期,占空比,输出极性等 -- 计数中断与FIFO_EMPTY中断的触发等 -- E2000共有8个PWM模块(控制器),每个模块集成了两个子模块pwm0和pwm1,我们习惯性的称为channel0和channel1,在死区输出模式配置为bypass时,这两个channel可以作为两路独立的pwm输出使用,在非bypass模式下,则输出为死区配置,此时需要选择输入源是channel0还是channel1,然后配置对应项即可 - -驱动相关的源文件包括 -``` -. -├── fpwm_g.c -├── fpwm_hw.c -├── fpwm_hw.h -├── fpwm_intr.c -├── fpwm_sinit.c -├── fpwm.c -└── fpwm.h -``` - -## 3. 配置方法 - -以下部分将指导您完成 fpwm 驱动的软件配置: - -- 初始化pwm控制器 -- 配置pwm的两个通道的输出模式,以及是否死区输出等 -- 注册中断处理函数,使能中断 -- pwm的周期,频率,占空比设置方法如下: -![pwm_duty](./figs/pwm_duty.png) - -e2000的参考时钟是50M,freq为频率,duty为占空比,1/freq就是周期; -perioad对应寄存器FPWM_PERIOD_OFFSET,div对应FPWM_TIM_CTRL_OFFSET寄存器中的DIV,ccr对应寄存器FPWM_CCR_OFFSET; - -## 4 应用示例 - -### [pwm波形输出](../../../baremetal/example/peripheral/pwm) - -## 5. API参考 - -### 5.1. 用户数据结构 - -- fpwm控制数据 - -```c -typedef struct -{ - FPwmConfig config;/* Pwm配置 */ - u32 is_ready;/* Pwm初始化完成标志 */ - - u8 channel_ctrl_enable[2]; /* pwm channel ctrl enable state */ - - FPwmIntrEventHandler event_handler[FPWM_INTR_EVENT_NUM]; /* event handler for interrupt */ - void *event_param[FPWM_INTR_EVENT_NUM]; /* parameters ptr of event handler */ - -} FPwmCtrl; -``` - -- fpwm配置数据,FPwmConfig主要是pwm控制器id、基地址和中断号,FPwmDbVariableConfig主要包括用户可配置的死区参数,包括死区输出模式、输出极性、输入源选择、上下沿延迟等,FPwmVariableConfig主要包含pwm的输出参数,包括分频、周期、占空比、极性等 - -```c -typedef struct -{ - u8 instance_id;/* pwm id */ - uintptr db_base_addr; - uintptr pwm_base_addr; - - u64 base_clk; - u32 irq_num; /* pwm irq num*/ - u32 irq_prority; /* pwm irq priority */ - const char *instance_name;/* instance name */ - -}FPwmConfig;/* Pwm配置 */; - -typedef struct -{ - FPwmDbPolarity db_polarity_sel; - FPwmDbOutMode db_out_mode; - FPwmDbInMode db_in_mode; - u16 db_fall_cycle; - u16 db_rise_cycle; -}FPwmDbVariableConfig; - -typedef struct -{ - u8 tim_ctrl_enable;/* pwm time ctrl enable state */ - FPwmTimCtrlMode tim_ctrl_mode; - u16 tim_ctrl_div; - u16 pwm_period; - FPwmCtrlMode pwm_mode; - FPwmPolarity pwm_polarity; - FPwmDutySourceMode pwm_duty_source_mode; - u16 pwm_pulse; - -}FPwmVariableConfig; -``` - -- 死区输出模式 -```c -typedef enum -{ - FPWM_DB_OUT_MODE_BYPASS = 0b00, - FPWM_DB_OUT_MODE_FORBID_RISE = 0b01, - FPWM_DB_OUT_MODE_FORBID_FALL = 0b10, - FPWM_DB_OUT_MODE_ENABLE_RISE_FALL = 0b11, - FPWM_DB_OUT_MODE_NUM -} FPwmDbOutMode; -``` - -- fpwm duty比较值来源选择 -```c -typedef enum -{ - FPWM_DUTY_CCR = 0, - FPWM_DUTY_FIFO = 1, - - FPWM_DUTY_SEL_MODE_NUM - -} FPwmDutySourceMode;; -``` - -- fpwm中断事件类型 -```c -typedef enum -{ - FPWM_INTR_EVENT_COUNTER = 0, /**< Handler type for counter interrupt */ - FPWM_INTR_EVENT_FIFO_EMPTY = 1, /**< Handler type for fifo empty interrupt*/ - FPWM_INTR_EVENT_NUM -} FPwmIntrEventType; - -``` - -### 5.2 错误码定义 - -- FPWM_SUCCESS 执行成功 -- FPWM_ERR_INVAL_PARM 参数无效 -- FPWM_ERR_NOT_READY 驱动未初始化 -- FPWM_ERR_TIMEOUT 超时 -- FPWM_ERR_NOT_SUPPORT 不支持 -- FPWM_ERR_CMD_FAILED 执行失败 - -### 5.3. 用户API接口 - -#### FPwmLookupConfig - -- 获取Fata控制器默认配置 - -```c -const FPwmConfig *FPwmLookupConfig(u32 instance_id); -``` - -Note: - -- 获取默认配置参数,包括基地址、中断号等 - -Input: - -- {u32} instance_id,pwm控制器id号 - -Return: - -- {const FPwmConfig *} pwm默认配置,返回NULL如果找不到默认配置 - -#### FPwmCfgInitialize - -- 初始化fpwm控制器, 使之可以使用 - -```c -FError FPwmCfgInitialize(FPwmCtrl *pctrl, const FPwmConfig *input_config_p); -``` - -Note: - -- 输入配置通过FPwmLookupConfig获取,用户按照需要修改后传入此函数 - -Input: - -- {FPwmCtrl} *pctrl,pwm驱动控制数据 -- {FPwmConfig} *input_config_p,pwm用户输入配置 - -Return: - -- {FError} 驱动初始化的错误码信息,FPWM_SUCCESS 表示初始化成功,其它返回值表示初始化失败 - -#### FPwmDbVariableSet - -- 设置pwm死区输出的配置参数 - -```c -FError FPwmDbVariableSet(FPwmCtrl *pctrl, FPwmDbVariableConfig *db_cfg); -``` - -Note: - -- 设置指定pwm控制器的死区可配置参数,包括死区输出模式、输出极性、输入源选择、上下沿延迟等 - -Input: - -- {FPwmCtrl} *pctrl,pwm驱动控制数据 -- {FPwmDbVariableConfig} *db_cfg,pwm死区参数配置 - -Return: - -- {FError} 驱动初始化的错误码信息,FPWM_SUCCESS 表示初始化成功,其它返回值表示初始化失败 - -#### FPwmVariableSet - -- 设置pwm通道的参数,使能该通道 - -```c -FError FPwmVariableSet(FPwmCtrl *pctrl, u32 channel, FPwmVariableConfig *pwm_cfg); -``` - -Note: - -- 设置指定pwm控制器的指定通道的分频、周期、占空比、极性,使能该通道 - -Input: - -- {FPwmCtrl} *pctrl,pwm驱动控制数据 -- {u32} channel,pwm通道号 -- {FPwmVariableConfig} *pwm_cfg,pwm通道配置 - -Return: - -- {FError} 驱动初始化的错误码信息,FPWM_SUCCESS 表示初始化成功,其它返回值表示初始化失败 - - -#### FPwmPulseSet - -- 设置pwm通道的占空比比较值 - -```c -FError FPwmPulseSet(FPwmCtrl *pctrl, u32 channel, u16 pwm_ccr); -``` - -Note: - -- 设置指定pwm控制器的指定通道的占空比比较值 - -Input: - -- {FPwmCtrl} *pctrl,pwm驱动控制数据 -- {u32} channel,pwm通道号 -- {u16} pwm_ccr,占空比比较值 - -Return: - -- {FError} 驱动初始化的错误码信息,FPWM_SUCCESS 表示初始化成功,其它返回值表示初始化失败 - -#### FPwmEnable - -- 使能pwm控制器 - -```c -void FPwmEnable(FPwmCtrl *pctrl, u32 channel); -``` - -Note: - -- 使能指定pwm控制器的指定通道 - -Input: - -- {FPwmCtrl} *pctrl,pwm驱动控制数据 -- {u32} channel,pwm通道号 - -Return: - -- {FError} 驱动初始化的错误码信息,FPWM_SUCCESS 表示初始化成功,其它返回值表示初始化失败 - -#### FPwmRegisterInterruptHandler - -- 注册pwm中断事件函数 - -```c -void FPwmRegisterInterruptHandler(FPwmCtrl *instance_p, FPwmIntrEventType event_type, - FPwmIntrEventHandler handler, void *param); -``` - -Note: -- 无 - -Input: -- {FPwmCtrl} *instance_p,fpwm驱动控制数据 -- {FPwmIntrEventType} event_type,中断事件类型 -- {FPwmIntrEventHandler} handler,中断事件回调函数 -- {void} *param,回调函数参数 - -Return: -- 无 - -#### FPwmIntrHandler - -- pwm中断处理函数入口 - -```c -void FPwmIntrHandler(s32 vector, void *args); -``` - -Note: -- 根据中断类型,设置对应的回调函数和参数传入 - -Input: -- {s32} vector -- {void} *param, 输入参数,指向fpwm驱动控制数据 - -Return: -- 无 diff --git a/bsp/phytium/libraries/standalone/doc/reference/driver/fqspi.md b/bsp/phytium/libraries/standalone/doc/reference/driver/fqspi.md deleted file mode 100644 index 1cbb485681..0000000000 --- a/bsp/phytium/libraries/standalone/doc/reference/driver/fqspi.md +++ /dev/null @@ -1,409 +0,0 @@ -# FQSPI 驱动程序 - -## 1. 概述 - -- QSPI是Motorola公司推出的SPI接口的扩展,比SPI应用更加广泛。在SPI协议的基础上,Motorola公司对其功能进行了增强,大幅提升了数据交换能力。QSPI 是一种专用的通信接口,连接单、双或四(条数据线) SPI Flash 存储介质。 - -- 本驱动程序提供了FT2000/4、D2000、E2000平台的QSPI功能 - -- FT2000/4、D2000上包含 1 个通用 QSPI 接口控制器,作为QSPI Flash接口使用,片最大支持 2Gb(256MB)的容量,最大支持连接四个相同容量的Flash - - -## 2. 功能 - - -- 驱动相关的源文件如下, -- drivers/qspi/fqspi - -``` -. -├── fqspi_norflash.c -├── fqspi_norflash.h -├── fqspi_g.c -├── fqspi_hw.c -├── fqspi_hw.h -├── fqspi_sinit.c -├── fqspi.h -└── fqspi.c -``` - - -## 3. 配置方法 - - -以下部分将指导您完成 FQSPI 驱动的软件配置: - -### 3.1 使用 SFUD 通用SPI协议框架 - -- 使能 CONFIG_USE_QSPI 和 CONFIG_USE_SFUD 配置 -- 初始化 SFUD 框架 -- 调用 SFUD 提供的 API 读写 QSPI 设备 - -关于 SFUD 框架的使用,可以参考[sfud.md](./sfud.md) - -### 3.2 不使用 SFUD 通用SPI协议框架 - -- 使能 CONFIG_USE_QSPI 配置 -- 初始 QSPI 驱动 -- 调用 QSPI 提供的 API 读写 QSPI 设备,需要按照 QSPI 设备的手册实现相关的命令和协议 - -## 4 应用示例 - -### [fqspi_nor_flash](../../../baremetal/example/peripheral/qspi/qspi_nor_flash/README.md) - -### [qspi_sfud](../../../baremetal/example/storage/qspi_sfud/README.md) - -## 4. API参考 - -### 4.1 用户数据结构 - -- QSPI 驱动配置数据 -```c -typedef struct -{ - u32 instance_id; /* Id of device */ - uintptr base_addr; /* Base address of qspi */ - uintptr mem_start; /* Start address of qspi memory */ - u32 capacity; /* Flash capacity */ - u32 dev_num; /* Qspi device number */ - u32 channel; /* channel number */ -} FQspiConfig; -``` - -- QSPI 驱动控制数据 -```c -typedef struct -{ - FQspiConfig config; - FQspiRdCfgDef rd_cfg; - FQspiWrCfgDef wr_cfg; - FQspiCommandPortDef cmd_def; - FQspiCsTimingCfgDef cs_timing_cfg; - u32 is_ready; /**< Device is initialized and ready */ - u32 flash_size; /* size of QSPI flash */ -} FQspiCtrl; -``` - -- QSPI 传输命令协议,指定传输的指令、地址和修饰符、数据三者的宽度 -```c -typedef enum -{ - FQSPI_TRANSFER_1_1_1 = 0x0, - FQSPI_TRANSFER_1_1_2 = 0x1, - FQSPI_TRANSFER_1_1_4 = 0x2, - FQSPI_TRANSFER_1_2_2 = 0x3, - FQSPI_TRANSFER_1_4_4 = 0x4, - FQSPI_TRANSFER_2_2_2 = 0x5, - FQSPI_TRANSFER_4_4_4 = 0x6 -}FQspiTransferMode; -``` - -- QSPI Flash的容量大小 -```c -typedef enum -{ - FQSPI_FLASH_CAP_4MB = 0b000, - FQSPI_FLASH_CAP_8MB = 0b001, - FQSPI_FLASH_CAP_16MB = 0b010, - FQSPI_FLASH_CAP_32MB = 0b011, - FQSPI_FLASH_CAP_64MB = 0b100, - FQSPI_FLASH_CAP_128MB = 0b101, - FQSPI_FLASH_CAP_256MB = 0b110, -} FQspiFlashCapcityType; -``` - -- QSPI的SCK分频系数 -```c -typedef enum -{ - FQSPI_SCK_DIV_128 = 0x0, - FQSPI_SCK_DIV_2 = 0x1, - FQSPI_SCK_DIV_4 = 0x2, - FQSPI_SCK_DIV_8 = 0x3, - FQSPI_SCK_DIV_16 = 0x4, - FQSPI_SCK_DIV_32 = 0x5, - FQSPI_SCK_DIV_64 = 0x6 -}FQspiSckDivType; -``` - -- QSPI的地址长度格式 -```c -typedef enum -{ - FQSPI_ADDR_SEL_3 = 0x0, - FQSPI_ADDR_SEL_4 = 0x1, -}FQspiAddrType; -``` - -### 4.2 错误码定义 - -- FQSPI_SUCCESS : fqspi success -- FQSPI_INVAL_PARAM : fqspi invalid input parameters -- FQSPI_NOT_READY : fqspi driver not ready -- FQSPI_NOT_ALLIGN : fqspi address not alligned -- FQSPI_NOT_SUPPORT : fqspi not support operation -- FQSPI_TIMEOUT : fqspi wait timeout - -### 4.3 用户API接口 - -#### FQspiLookupConfig - -- 获取FQSPI驱动的默认配置参数 - -```c -const FQspiConfig *FQspiLookupConfig(u32 instance_id) -``` - -Note: - -- 用户可以通过此接口获取驱动默认配置的副本,进行修改后,作为`FQspiCfgInitialize`函数的入参使用 - -Input: - -- u32 instance_id, 选择的FQSPI控制器实例号 - -Return: - -- const FQspiConfig *, 返回的默认驱动配置,返回NULL表示失败 - - -#### FQspiCfgInitialize - -- 完成FQSPI驱动实例的初始化,使之可以使用 - -```c -FError FQspiCfgInitialize(FQspiCtrl *instance_p, const FQspiConfig *input_config_p); -``` - -Note: - -- 此函数会重置FQSPI控制器和FQSPI控制数据 - -Input: - -- FQspiCtrl *instance_p, FQSPI驱动控制数据 - -- const FQspiConfig *input_config_p, FQSPI驱动配置数据 - -Return: - -- FError, 错误码信息,FQSPI_SUCCESS 表示初始化成功,其它返回值表示初始化失败 - - -#### FQspiDeInitialize - -- 完成FQSPI驱动实例去初始化,之后不能使用 - -```c -void FQspiDeInitialize(FQspiCtrl *instance_p) -``` - -Note: - -- 此函数会重置FQSPI控制数据 - -Input: - -- FQspiCtrl *instance_p, FQSPI驱动控制数据 - -Return: - -无 - - -#### FQspiCommandPortConfig -- 配置FQSPI命令端口寄存器的值 - -```c -FError FQspiCommandPortConfig(FQspiCtrl *pctrl) -``` - -Note: - -- 使用此函数前需要确保FQSPI驱动初始化成功 -- 配置FQSPI命令端口寄存器 - -Input: - -- FQspiCtrl *pctrl, FQSPI驱动控制数据 - -Return: - -- FError, 错误码信息,FQSPI_SUCCESS 表示数据读取成功,其它返回值表示读取失败 - - -#### FQspiRdCfgConfig - -- 配置FQSPI地址访问读配置寄存器的值 - -```c -FError FQspiRdCfgConfig(FQspiCtrl *pctrl) -``` - -Note: - -- 使用此函数前需要确保FQSPI驱动初始化成功 -- 配置QSPI地址访问读配置寄存器 - -Input: - -- FQspiCtrl *pctrl, FQSPI驱动控制数据 - -Return: - -- FError, 错误码信息,FQSPI_SUCCESS 表示数据读取成功,其它返回值表示读取失败 - - -#### FQspiSetLdPortData - -- 写FQSPI低位数据端口寄存器的值 - -```c -FError FQspiSetLdPortData(FQspiCtrl *pctrl, const u8 *buf, size_t len) -``` - -Note: - -- 使用此函数前需要确保FQSPI驱动初始化成功 -- 设置寄存器的值,可用于向flash传送数据 - -Input: - -- FQspiCtrl *pctrl, FQSPI驱动控制数据 - -- const u8 *buf, 写缓存,存储要写入的数据 - -- size_t len, 要读取的buf长度 - -Return: - -- FError, 错误码信息,FQSPI_SUCCESS 表示数据写入成功,其它返回值表示写入失败 - -#### FQspiFlashSpecialInstruction -- 读flash某些状态寄存器的值,此函数适配的flash型号为S25FS256S NorFlash芯片 - -```c -FError FQspiFlashSpecialInstruction(FQspiCtrl *pctrl, u8 cmd, u8 *buf, size_t len); -``` - -Note: - -- 使用此函数前需要确保FQSPI驱动初始化成功 -- 读取flash寄存器的值,主要支持RDID, RDSR1, RDSR2, RDCR指令 - -Input: - -- FQspiCtrl *pctrl, FQSPI驱动控制数据 - -- u8 cmd, 读寄存器状态的指令,具体参见flash芯片手册 - -- u8 *buf, 读缓存,存储读到的寄存器值 - -- size_t len, 要读取的buf长度 - -Return: - -- FError, 错误码信息,FQSPI_SUCCESS 表示数据读取成功,其它返回值表示读取失败 - -#### FQspiFlashWriteReg -- 写flash寄存器的值 - -```c -FError FQspiFlashWriteReg(FQspiCtrl *pctrl, u8 command, const u8 *buf, size_t len) -``` - -Note: - -- 使用此函数前需要确保FQSPI驱动初始化成功 - -Input: - -- FQspiCtrl *pctrl, FQSPI驱动控制数据 - -- u8 command, 写寄存器的指令 - -- const u8 *buf, 写缓存,存储写入的寄存器值 - -- size_t len, 要写入的buf长度 - -Return: - -- FError, 错误码信息,FQSPI_SUCCESS 表示数据写入成功,其它返回值表示写入失败 - -#### FQspiFlashReadDataConfig - -- 读flash配置 - -```c -FError FQspiFlashReadDataConfig(FQspiCtrl *pctrl, u8 command) -``` - -Note: - -- 使用此函数前需要确保FQSPI驱动初始化成功 -- 配置采用何种方式读flash中的数据,read、fast read、quad read - -Input: - -- FQspiCtrl *pctrl, FQSPI驱动控制数据 - -- u8 command 读flash数据的指令,具体参见flash芯片手册 - -Return: - -- FError, 错误码信息,FQSPI_SUCCESS 表示读配置成功,其它返回值表示读配置失败 - -#### FQspiFlashReadData - -- 读取norflash的数据 - -```c -size_t FQspiFlashReadData(FQspiCtrl *pctrl, u32 chip_addr, u8 *buf, size_t len) -``` - -Note: - -- 使用此函数前需要确保FQSPI驱动初始化成功 -- 使用此函数前需要使用FQspiFlashReadDataConfig函数配置读方式 - -Input: - -- FQspiCtrl *pctrl, FQSPI驱动控制数据 - -- u32 chip_addr, 读数据的起始地址 - -- u8 *buf 读缓存, 存储读到的数据 - -- size_t len, 要读取的buf长度 - -Return: - -- FError, 错误码信息,FQSPI_SUCCESS 表示数据读取成功,其它返回值表示读取失败 - -#### FQspiNorFlashWrite - -- 写norflash数据函数 - -```c -FError FQspiFlashWriteData(FQspiCtrl *pctrl, u8 command, u32 chip_addr, const u8 *buf, size_t len) -``` - -Note: - -- 使用此函数前需要确保FQSPI驱动初始化成功 - -Input: - -- FQspiCtrl *pctrl, FQSPI驱动控制数据 - -- u8 command 写flash数据的指令,具体参见flash手册 - -- u32 chip_addr, 写数据的起始地址 - -- u8 *buf 写缓存, 存储要写入的数据 - -- size_t len, 要写入的buf长度 - -Return: - -- FError, 错误码信息,FQSPI_SUCCESS 表示数据写入成功,其它返回值表示写入失败 diff --git a/bsp/phytium/libraries/standalone/doc/reference/driver/frtc.md b/bsp/phytium/libraries/standalone/doc/reference/driver/frtc.md deleted file mode 100644 index 3458c320f8..0000000000 --- a/bsp/phytium/libraries/standalone/doc/reference/driver/frtc.md +++ /dev/null @@ -1,196 +0,0 @@ -# RTC 驱动程序 - -## 1. 概述 - -- 实时时钟(RTC)提供可靠的系统时间,包括年月日和时分秒。 - -- 通过采用电池供电,在系统处于关机状态时,RTC也能正常工作。 - -- RTC 驱动支持的平台包括 FT2000/4、D2000。 - -## 2. 功能 - -RTC 驱动程序主要完成RTC模块的初始化、时间设置和读取,该驱动程序具备以下功能: -- 初始化RTC模块 -- 设置RTC时间 -- 读取RTC时间 - -相关源文件为: -``` -frtc - ├── frtc.c - ├── frtc.h - ├── frtc_g.c - ├── frtc_hw.c - ├── frtc_hw.h - ├── frtc_intr.c - └── frtc_sinit.c -``` - - -## 3. 配置方法 - -以下部分将指导您完成 RTC 驱动的软件配置: - -- 配置驱动程序,新建应用工程,使能RTC驱动模块 -- 设置配置参数 -- 设置RTC时间 -- 读取RTC时间 - -## 4. 应用示例 - - -### [rtc_test](../../../baremetal/example/rtc_test/README.md) - - -## 5. API参考 - - -### 5.1. 用户数据结构 - -- drivers/rtc/frtc/frtc.h - -```c -typedef struct -{ - uintptr control_base_addr; /* rtc控制寄存器基地址 */ - const char *instance_name; /* instance name */ -} FRtcConfig; /* rtc配置 */ - -typedef struct -{ - FRtcConfig config; /* rtc配置 */ - u32 is_ready; /* rtc初始化完成标志 */ -} FRtcCtrl; -``` - -- RTC时间实例配置 - -```c -typedef struct -{ - u16 year; /*Specifies the RTC Date Year. - This parameter must be a number between Min_Data = 2000 and Max_Data = 2099 */ - u8 month; /*Specifies the RTC Date Month. - This parameter must be a number between Min_Data = 1 and Max_Data = 12 */ - u8 mday; /*Specifies the RTC day of Month. - This parameter must be a number between Min_Data = 1 and Max_Data = 31 */ - u8 hour; /*Specifies the RTC Time Hour. - This parameter must be a number between Min_Data = 0 and Max_Data = 23 */ - u8 minute; /*Specifies the RTC Time Minute. - This parameter must be a number between Min_Data = 0 and Max_Data = 59 */ - u8 second; /*Specifies the RTC Time Second. - This parameter must be a number between Min_Data = 0 and Max_Data = 59 */ -} FRtcDateTime; -``` -### 5.2 错误码定义 - -- 模块错误码编号 `0x1020000` - -- [0x0] FRTC_SUCCESS : success - -- [0x1020001] FRTC_ERR_DATE_INVALID : invalid date parameters - -- [0x1020002] FRTC_ERR_TIME_INVALID : invalid time parameters - - -### 5.3. 用户API接口 - -- 获取RTC驱动的默认配置参数 - -```c -const FRtcConfig *FRtcLookupConfig(void); -``` - - Note: - - - 用户需要修改配置参数时,可以通过修改返回的FRtcConfig副本,作为后续使用函数的入参, - - Input: - - - void, 只有一个RTC模块 - - Return: - - - const FRTCConfig *, 返回驱动默认参数, NULL表示失败 - - -- 初始化RTC驱动 -```c -FError FRtcCfgInitialize(FRtcCtrl *instance_p, const FRtcConfig *config_p); -``` - - Note: - - - 用户需要修改配置参数时,可以通过修改返回的FRtcConfig副本,作为后续使用函数的入参, - - Input: - - - FRtcCtrl *instance_p, RTC驱动控制块 - - const FRtcConfig *config_p, RTC驱动配置数据 - - Return: - - - 返回初始化错误码,FRTC_SUCCESS表示初始化成功 - -- 设置RTC时间 - -```c -FError FRtcSetDateTime(FRtcCtrl *pctrl, const FRtcDateTime *date_time); -``` - - Note: - - - 此函数会根据传入的时间初始化RTC时间寄存器 - - Input: - - - FRtcCtrl *pctrl, RTC驱动实例数据 - - - const FRtcDateTime *date, 设置的RTC时间年月日时分秒 - - Return: - - - u32, 参考5.2章错误码定义 - -- 读取RTC时间 - -```c -FError FRtcGetDateTime(FRtcCtrl *pctrl, FRtcDateTime *date_time); -``` - - Note: - - - 此函数会获取当前的RTC时间 - - Input: - - - FRtcCtrl *pctrl, RTC驱动实例数据 - - - FRtcDateTime *date, 获取的RTC时间年月日时分秒 - - Return: - - - u32, 参考5.2章错误码定义 - -- 读取RTC时间戳 - -```c -time_t FRtcReadTimeStamp(FRtcCtrl *pctrl, time_t *sec, time_t *msec); -``` - - Note: - - - 此函数会读取RTC时间,并返回time_t格式的时间值 - - Input: - - - FRtcCtrl *pctrl, RTC驱动实例数据 - - - time_t *sec, 获取的秒时间戳,传入NULL表示不需要获取 - - - time_t *msec, 获取的毫秒时间戳,传入NULL表示不需要获取 - - Return: - - - time_t, 详见中的定义 diff --git a/bsp/phytium/libraries/standalone/doc/reference/driver/fsata.md b/bsp/phytium/libraries/standalone/doc/reference/driver/fsata.md deleted file mode 100644 index 7ac282a90c..0000000000 --- a/bsp/phytium/libraries/standalone/doc/reference/driver/fsata.md +++ /dev/null @@ -1,310 +0,0 @@ -# FSATA 驱动程序 - -## 1. 概述 - -串口硬盘SATA(Serial ATA)与以往的并口硬盘PATA(Parallel ATA)相比,数据传输速度更加快捷,并支持热插拔; -SATA总线使用嵌入式时钟信号,具备了更强的纠错能力,能对传输指令进行检查,如果发现错误会自动矫正,提高了数据传输的可靠性; - -## 2. 功能 - -AHCI控制器驱动提供了SATA的控制访问方法, -- 初始化AHCI控制器 -- 以PIO方式发送/接收数据和命令 -- 以DMA方式发送/接收数据和命令 -- 设置AHCI控制器的中断工作模式和中断响应函数 - -驱动相关的源文件包括, -``` -fsata - - ├── fsata_g.c - ├── fsata_hw.c - ├── fsata_hw.h - ├── fsata_intr.c - ├── fsata_sinit.c - ├── fsata.c - └── fsata.h -``` - -## 3. 配置方法 - -以下部分将指导您完成 fsata 驱动的软件配置: - -- 初始化ahci控制器 -- 通过协议命令读写sata数据 - -## 4 应用示例 - -### [读写sata二进制数据](../../../baremetal/example/peripheral/sata) - -### [通过文件系统使用sata](../../../baremetal/example/storage/sata_fatfs) - -## 5. API参考 - -### 5.1. 用户数据结构 - -- fsata控制数据 - -```c -typedef struct -{ - FSataConfig config; /* sata配置 */ - u32 is_ready; /* sata初始化完成标志 */ - u32 private_data; - FSataAhciIoPorts port[FSATA_AHCI_MAX_PORTS]; - u16 *ataid[FSATA_AHCI_MAX_PORTS]; - u32 n_ports; - u32 cap; /* cache of HOST_CAP register */ - u32 port_map; /* cache of HOST_PORTS_IMPL reg */ - u32 link_port_map; /*linkup port map*/ - - FSataIrqCallBack fsata_dhrs_cb; /* device-to-host register fis interrupt */ - void *dhrs_args; - FSataIrqCallBack fsata_pss_cb; /* pio setup fis interrupt */ - void *pss_args; - FSataIrqCallBack fsata_dss_cb; /* dma setup fis interrupt */ - void *dss_args; - FSataIrqCallBack fsata_sdbs_cb; /* set device bits interrupt */ - void *sdbs_args; - FSataIrqCallBack fsata_pcs_cb; /* port connect change status interrupt */ - void *pcs_args; -} FSataCtrl; -``` - -- fsata配置数据 - -```c -typedef struct -{ - uintptr base_addr; /* sata控制寄存器基地址 */ - const char *instance_name; /* instance name */ - u32 irq_num; /* Irq number */ -} FSataConfig; /* sata配置 */ -``` - -- fsata port memmory -```c -typedef struct -{ - uintptr port_mmio; - FSataAhciCommandList *cmd_list; /* Command List structure, will include cmd_tbl's address */ - uintptr cmd_tbl_base_addr; /* command table addr, also the command table's first part */ - FSataAhciCommandTablePrdt *cmd_tbl_prdt; /* command table's second part , cmd_tbl + cmd_tbl_prdt = command table*/ - FSataAhciRecvFis *rx_fis; /* Received FIS Structure */ - uintptr mem; - FSataInfo dev_info; -} FSataAhciIoPorts; -``` - -- fsata属性 -```c -typedef struct -{ - unsigned char if_type; /* type of the interface */ - unsigned char part_type; /* partition type */ - unsigned char type; /* device type */ - unsigned char removable; /* removable device */ - char vendor[BLK_VEN_SIZE + 1]; /* device vendor string */ - char product[BLK_PRD_SIZE + 1]; /* device product number */ - char revision[BLK_REV_SIZE + 1]; /* firmware revision */ - unsigned long lba; /* number of blocks */ - unsigned long blksz; /* block size */ - -}FSataInfo; -``` - -- fsata中断类型和中断事件 -```c -#define FSATA_PORT_IRQ_COLD_PRES BIT(31) /* cold presence detect */ -#define FSATA_PORT_IRQ_TF_ERR BIT(30) /* task file error */ -#define FSATA_PORT_IRQ_HBUS_ERR BIT(29) /* host bus fatal error */ -#define FSATA_PORT_IRQ_HBUS_DATA_ERR BIT(28) /* host bus data error */ -#define FSATA_PORT_IRQ_IF_ERR BIT(27) /* interface fatal error */ -#define FSATA_PORT_IRQ_IF_NONFATAL BIT(26) /* interface non-fatal error */ -#define FSATA_PORT_IRQ_OVERFLOW BIT(24) /* xfer exhausted available S/G */ -#define FSATA_PORT_IRQ_BAD_PMP BIT(23) /* incorrect port multiplier */ - -#define FSATA_PORT_IRQ_PHYRDY BIT(22) /* PhyRdy changed */ -#define FSATA_PORT_IRQ_DEV_ILCK BIT(7) /* device interlock */ -#define FSATA_PORT_IRQ_CONNECT BIT(6) /* port connect change status */ -#define FSATA_PORT_IRQ_SG_DONE BIT(5) /* descriptor processed */ -#define FSATA_PORT_IRQ_UNK_FIS BIT(4) /* unknown FIS rx'd */ -#define FSATA_PORT_IRQ_SDB_FIS BIT(3) /* Set Device Bits FIS rx'd */ -#define FSATA_PORT_IRQ_DMAS_FIS BIT(2) /* DMA Setup FIS rx'd */ -#define FSATA_PORT_IRQ_PIOS_FIS BIT(1) /* PIO Setup FIS rx'd */ -#define FSATA_PORT_IRQ_D2H_REG_FIS BIT(0) /* D2H Register FIS rx'd */ -``` - -### 5.2 错误码定义 - -- FSATA_SUCCESS : success -- FSATA_ERR_INVAILD_PARAMETER : 参数无效 -- FSATA_ERR_TIMEOUT : 数据或者命令传输等待超时 -- FSATA_ERR_OPERATION : 错误操作 -- FSATA_UNKNOWN_DEVICE : 未知设备 - -### 5.3. 用户API接口 - -#### FSataLookupConfig - -- 获取Fata控制器默认配置 - -```c -const FSataConfig *FSataLookupConfig(void); -``` - -Note: - -- 获取默认配置参数,包括中断号,instance_name等 - -Input: - -- {void} - -Return: - -- {const FSataConfig *} fsata默认配置,返回NULL如果找不到默认配置 - -#### FSataCfgInitialize - -- 初始化fsata控制器, 使之可以使用 - -```c -FError FSataCfgInitialize(FSataCtrl *instance_p, const FSataConfig *input_config_p); -``` - -Note: - -- 输入配置通过FSataLookupConfig获取,用户按照需要修改后传入此函数 - -Input: - -- {FSataCtrl} *instance_p fsata驱动控制数据 -- {FSataConfig} *input_config_p fsata用户输入配置 - -Return: - -- {FError} 驱动初始化的错误码信息,FSATA_SUCCESS 表示初始化成功,其它返回值表示初始化失败 - -#### FSataAhciInit - -- 初始化ahci, 使之可以使用 - -```c -FError FSataAhciInit(FSataCtrl *instance_p); -``` - -Note: - -- 包含ahci初始化和port memory的内存分配输入,用户需保证mem的大小足够 - -Input: - -- {FSataCtrl} *instance_p fsata驱动控制数据 - -Return: - -- {FError} 驱动初始化的错误码信息,FSATA_SUCCESS 表示初始化成功,其它返回值表示初始化失败 - - -#### FSataAhciReadInfo - -- 读取sata信息,包括型号、容量等,通过串口输出 - -```c -FError FSataAhciReadInfo(FSataCtrl *instance_p, u8 port); -``` - -Note: - -- 输入配置通过FSataLookupConfig获取,用户按照需要修改后传入此函数 - -Input: - -- {FSataCtrl} *instance_p fsata驱动控制数据 -- {u8} port fsata的port端口号 - -Return: - -- {FError} 驱动初始化的错误码信息,FSATA_SUCCESS 表示初始化成功,其它返回值表示初始化失败 - -#### FSataReadWrite - -- pio方式读写sata数据 - -```c -FError FSataReadWrite(FSataCtrl *instance_p, u8 port, u32 start, - u16 blk_cnt, u8 *buffer, u8 is_write); -``` - -Note: - -- 以pio方式读写sata数据,需注意传入的buffer是否完整 - -Input: - -- {FSataCtrl} *instance_p fsata驱动控制数据 -- {u8} port fsata的port端口号 -- {u32} start 读写的起始block -- {u16} blk_cnt 读写的block个数 -- {u8} *buffer 读写数据的缓存地址 -- {u8} is_write 读/写的标志位 - -Return: - -- {FError} 驱动初始化的错误码信息,FSATA_SUCCESS 表示初始化成功,其它返回值表示初始化失败 - -#### FSataFPDmaReadWrite - -- dma方式读写sata数据 - -```c -FError FSataFPDmaReadWrite(FSataCtrl *instance_p, u8 port, u32 start, - u16 blk_cnt, u8 *buffer, u8 is_write); -``` - -Note: - -- 以dma方式读写sata数据,需注意传入的buffer是否完整 - -Input: - -- {FSataCtrl} *instance_p fsata驱动控制数据 -- {u8} port fsata的port端口号 -- {u32} start 读写的起始block -- {u16} blk_cnt 读写的block个数 -- {u8} *buffer 读写数据的缓存地址 -- {u8} is_write 读/写的标志位 - -Return: - -- {FError} 驱动初始化的错误码信息,FSATA_SUCCESS 表示初始化成功,其它返回值表示初始化失败 - -/* set specific sata irq function entry */ -FError FSataSetHandler(FSataCtrl *instance_p, u32 handler_type, - void *func_pointer, void *call_back_ref); - - -#### FSataSetHandler - -- 设置各中断的处理函数 - -```c -FError FSataSetHandler(FSataCtrl *instance_p, u32 handler_type, - void *func_pointer, void *call_back_ref); -``` - -Note: - -- 根据中断类型,设置对应的回调函数和参数传入 - -Input: - -- {FSataCtrl} *instance_p fsata驱动控制数据 -- {u32} handler_type 中断类型 -- {void} *func_pointer 回调函数入口 -- {void} *call_back_ref 回调函数参数 - -Return: - -- {FError} 驱动初始化的错误码信息,FSATA_SUCCESS 表示初始化成功,其它返回值表示初始化失败 diff --git a/bsp/phytium/libraries/standalone/doc/reference/driver/fscmi_mhu.md b/bsp/phytium/libraries/standalone/doc/reference/driver/fscmi_mhu.md deleted file mode 100644 index f29254fadc..0000000000 --- a/bsp/phytium/libraries/standalone/doc/reference/driver/fscmi_mhu.md +++ /dev/null @@ -1,282 +0,0 @@ -# SCMI_MHU 驱动程序 - -## 1. 概述 - -- SCMI_MHU(System Control and Management Interface)(Message Handling Unit)SCMI是用于系统管理的一组独立于操作系统的软件接口,MHU模块是SCP(System Control Processor)子系统的一个模块因为存在安全访问与非安全访问的区分所以采用APB4接口与SCP子系统和CPU核相连。 - -- AP与SCP之间的通信通过MHU与Shared memory实现。 - -- MHU模块主要实现CPU核与MCU通信通道的定义,分为物理通道和虚拟通道以及二者消息传递的控制功能,可实现双向通信。 - -``` - ______________________ ___________________________ __________________________ -|Application processor | |Message Handling Unit(MHU) | |System Control Processor | -| (AP) | <---> | Shared Memory | <---> | (SCP) | - —————————————————————— ——————————————————————————— —————————————————————————— -``` - -## 2. 功能 - -SCMI_MHU 驱动程序主要完成SCMI协议和MHU模块的初始化、MHU模块的收发置位、协议的组包和内存读写解析函数,该驱动程序具备以下功能: - -- 模块初始化 -- 模块的设置 -- 协议的组包 -- 共享内存的解析 - -相关源文件为: - -``` -fscmi_mhu - ├── fmhu_g.c - ├── fnhu_hw.h - ├── fmhu_intr.c(暂未实现) - ├── fmhu.c - ├── fmhu.h - ├── fscmi_base.c - ├── fscmi_base.h - ├── fscmi_perf.c - ├── fscmi_perf.h - ├── fscmi_sensors.c - ├── fscmi_sensors.h - ├── fscmi.c - └── fscmi.h -``` - -## 3. 配置方法 - -以下部分将指导您完成 SCMI_MHU 驱动的软件配置: - -- 配置驱动程序,新建应用工程,make menuconfig使能SCMI_MHU驱动模块 -- 设置配置参数,使用虚拟通道1,poll模式。(后续增加中断模式) -- 获取默认配置,设置使用MHU和shared memory地址 -- 调用API函数,获取或者设置SCP参数 - -## 4. 应用示例 - - -### [scmi_mhu](../../../baremetal/example/system/scmi_mhu/README.md) - - -## 5. API参考 - - -### 5.1. 用户数据结构 - -- drivers/scmi/fscmi_mhu/fscmi.h - -- scmi_mhu实例配置 - -```c -typedef struct -{ - u32 is_ready; /* Device is ininitialized and ready*/ - struct FScmiConfig config; - struct FScmiRevisionInfo revision; - struct FScmiSensorsInfo sensors; - struct FScmiPerfInfo perf; - struct FScmiTransferInfo info[FSCMI_SUPPORT_PROTOCOL_NUM]; - u8 protocols_imp[FSCMI_MAX_PROTOCOLS_IMP];/* List of protocols implemented, currently maximum of FSCMI_MAX_PROTOCOLS_IMP elements allocated by the base protocol */ - FScmiMhu scmi_mhu; -} FScmi; -``` - -```c -struct FScmiConfig -{ - uintptr share_mem; /* Chan transport protocol shared memory */ - u32 mbox_type; /* select mbox driver */ -}; -``` - -- 协议消息结构类型 - -```c -struct FScmiMsgHdr -{ - u8 id; /* message id */ - u8 protocol_id; /* protocol id */ - u16 seq; /* message token */ - u32 status; /* protocal status */ -}; - -struct FScmiMsg -{ - u8 buf[FSCMI_MSG_SIZE]; /* buffer in normal memory */ - fsize_t len; /* buffer length */ -}; - -struct FScmiTransferInfo -{ - struct FScmiMsgHdr hdr ; /* Message(Tx/Rx) header */ - struct FScmiMsg tx ; - struct FScmiMsg rx ; - boolean poll_completion; -}; -``` - -- 传感器信息结构 - -```c -struct FScmiSensorsInfo { - u32 version; - u16 major_ver; - u16 minor_ver; - u32 num_sensors; - u32 max_requests; - u64 reg_addr; - u32 reg_size; - struct FScmiSensorInfo sensor_info[FSCMI_MAX_NUM_SENSOR];/* TS0 TS1 */ -}; -``` - -```c -struct FScmiSensorInfo { - u32 id; - u8 type; - char name[FSCMI_MAX_STR_SIZE]; -}; -``` - -- Performance domain protocol - -```c -struct FScmiOpp { - u32 perf; - u32 power; - u32 trans_latency_us; -}; - -struct FPerfDomInfo { - boolean set_limits; - boolean set_perf; - boolean perf_limit_notify; - boolean perf_level_notify; - u32 opp_count; - u32 sustained_freq_khz; - u32 sustained_perf_level; - u32 mult_factor; - char name[FSCMI_MAX_STR_SIZE]; - struct FScmiOpp opp[FSCMI_MAX_OPPS]; -}; - -struct FScmiPerfInfo { - u32 version; - u16 major_ver; - u16 minor_ver; - u32 num_domains; - boolean power_scale_mw; - u64 stats_addr; - u32 stats_size; - struct FPerfDomInfo dom_info[FSCMI_MAX_PERF_DOMAINS]; -}; -``` - -- 基础协议信息结构 - -```c -struct FScmiRevisionInfo /* base protocol */ -{ - u32 version; - u16 major_ver; - u16 minor_ver; - u8 num_protocols; - u8 num_agents; - u32 impl_ver; - char vendor_id[FSCMI_MAX_STR_SIZE]; - char sub_vendor_id[FSCMI_MAX_STR_SIZE]; -}; -``` - -### 5.2 错误码定义 - -- FSCMI_ERROR_TYPE : 使用错误的驱动类型 -- FSCMI_ERROR_RANGE : 超出设定值范围 -- FSCMI_ERROR_NOT_FOUND : 没有找的对应的协议类型 -- FSCMI_ERROR_NULL_POINTER : 空指针 -- FSCMI_ERROR_WAIT_MBOX_TIMEOUT : mailbox超时 -- FSCMI_ERROR_WAIT_MEM_TIMEOUT : 共享内存访问超时 -- FSCMI_ERROR_FETCH_RESPONSE : 回复错误 -- FSCMI_ERROR_REQUEST : 错误请求 -- FSCMI_ERROR_VERSION : 版本号错误 -- FSCMI_ERROR_INIT : 初始化错误 - -### 5.3. 用户API接口 - -- 配置scmi初始化参数 - -```c -FError FScmiCfgInitialize(FScmi *instance_p, const struct FScmiConfig *config); -``` - -- 获取传感器的信息 - -```c -FError FScmiSensorGetInfo(FScmi *instance_p); -``` - -- scmi协议消息的初始化 - -```c -FError FScmiMessageInit(FScmi *instance_p, u8 msg_id, u8 pro_id, u32 tx_size, u32 rx_size, u8 *tx_buffer); -``` - -- scmi协议发送准备,将初始化完成消息协议写入共享内存 - -```c -FError FScmiProtocolTxPrepare(FScmi *instance_p, u8 pro_id); -``` - -- 等待共享内存的协议完成 - -```c -FError FScmiProtocolPollDone(FScmi *instance_p, u8 pro_id); -``` - -- 获取共享内存SCP的回复数据 - -```c -FError FScmiFetchResponse(FScmi *instance_p, u8 pro_id); -``` - -- 获取对应协议的消息表指针 - -```c -struct FScmiTransferInfo *FScmiGetInfo(FScmi *instance_p, u8 pro_id); -``` - -- 进行传输 - -```c -FError FScmiDoTransport(FScmi *instance_p, struct FScmiTransferInfo *info, u32 protocol_index); -``` - -- 传感器初始化 - -```c -FError FScmiSensorInit(FScmi *instance_p); -``` - -- 传感器温度的获取,需要初始化成功 - -```c -FError FScmiSensorGetTemp(FScmi *instance_p, u32 sensor_id,s64 *temp); -``` - -- 性能域的初始化 - -```c -FError FScmiPerfInit(FScmi *instance_p); -``` - -- 设置域性能 - -```c -FError FScmiDvfsFreqSet(FScmi *instance_p, u32 domain, u64 freq, boolean poll); -``` - -- 获取域性能 - -```c -FError FScmiDvfsFreqGet(FScmi *instance_p, u32 domain, u64 *freq, boolean poll); -``` diff --git a/bsp/phytium/libraries/standalone/doc/reference/driver/fsdio.md b/bsp/phytium/libraries/standalone/doc/reference/driver/fsdio.md deleted file mode 100644 index 606c7154c7..0000000000 --- a/bsp/phytium/libraries/standalone/doc/reference/driver/fsdio.md +++ /dev/null @@ -1,458 +0,0 @@ -# FSDIO 驱动程序 - -## 1. 概述 - -SD/SDIO/eMMC控制器,主要支持SD卡,eMMC介质的访问能力,同时支持连接SDIO接口设备,目前 FSDIO 驱动已经支持 SD 卡的访问 - -## 2. 功能 - -FSDIO 驱动提供了SD/MMC卡的控制访问方法, -- 初始化SD/MMC控制器 -- 以轮询方式发送/接收数据和命令 - -访问SD/MMC卡需要兼容一系列协议命令,这一部分驱动不提供,可以通过第三方框架sdmmc使用 - -驱动相关的源文件包括, -``` -fsdio - ├── fsdio.c - ├── fsdio.h - ├── fsdio_cmd.c - ├── fsdio_dma.c - ├── fsdio_g.c - ├── fsdio_hw.h - ├── fsdio_intr.c - ├── fsdio_pio.c - ├── fsdio_selftest. -``` - -## 3. 配置方法 - -以下部分将指导您完成 FSDIO 驱动的软件配置: - -- 初始化 FSDIO 控制器 -- 通过协议命令完成 SD/MMC 卡初始化 -- 通过协议命令读写 SD/MMC 卡数据 - -## 4 应用示例 - - -### [通过协议命令读写SD卡](../../../baremetal/example/storage/sdio_cmds) - -## 5. API参考 - -### 5.1. 用户数据结构 - -#### FSdio - -- SDIO intance - -```c -typedef struct _FSdio -{ - FSdioConfig config; /* Current active configs */ - u32 is_ready; /* Device is initialized and ready */ - FSdioIDmaDescList desc_list; /* DMA descriptor list, valid in DMA trans mode */ - FSdioEvtHandler evt_handlers[FSDIO_NUM_OF_EVT]; /* call-backs for interrupt event */ - void *evt_args[FSDIO_NUM_OF_EVT]; /* arguments for event call-backs */ - FSdioRelaxHandler relax_handler; - u32 prev_cmd; /* record previous command code */ -} FSdio; /* SDIO intance */ -``` - -#### FSdioConfig - -- SDIO intance configuration - -```c -typedef struct -{ - u32 instance_id; /* Device instance id */ - uintptr base_addr; /* Device base address */ - u32 irq_num; /* Interrupt num */ - FSdioTransMode trans_mode; /* Trans mode, PIO/DMA */ - FSdioSpeedType speed; /* Trans speed type */ - FSdioVoltageType voltage; /* Card voltage type */ - boolean non_removable; /* No removeable media, e.g eMMC */ - boolean filp_resp_byte_order; /* Some SD protocol implmentation may not do byte-order filp */ -} FSdioConfig; /* SDIO intance configuration */ -``` -#### FSdioCmdData - -- SDIO trans command and data - -```c -typedef struct -{ - u32 cmdidx; /* command index */ - u32 cmdarg; /* command argument */ - u32 response[4]; /* command response buffer */ - u32 flag; /* command flags */ -#define FSDIO_CMD_FLAG_NEED_INIT BIT(1) /* need initialization */ -#define FSDIO_CMD_FLAG_EXP_RESP BIT(2) /* need reply */ -#define FSDIO_CMD_FLAG_EXP_LONG_RESP BIT(3) /* need 136 bits long reply */ -#define FSDIO_CMD_FLAG_NEED_RESP_CRC BIT(4) /* need CRC */ -#define FSDIO_CMD_FLAG_EXP_DATA BIT(5) /* need trans data */ -#define FSDIO_CMD_FLAG_WRITE_DATA BIT(6) /* need trans data to write card */ -#define FSDIO_CMD_FLAG_READ_DATA BIT(7) /* need trans data to read card */ -#define FSDIO_CMD_FLAG_NEED_AUTO_STOP BIT(8) /* need auto stop after command */ -#define FSDIO_CMD_FLAG_ADTC BIT(9) /* need ADTC */ -#define FSDIO_CMD_FLAG_SWITCH_VOLTAGE BIT(10) /* need switch voltage */ - FSdioData *data_p; /* SDIO trans data */ -} FSdioCmdData; /* SDIO trans command and data */ -``` -#### FSdioIDmaDesc - -- SDIO DMA descriptor - -```c -typedef struct -{ - u32 attribute; /* ds0 */ -#define FSDIO_IDMAC_DES0_DIC BIT(1)/* 内部描述表不触发TI/RI中断 */ -#define FSDIO_IDMAC_DES0_LD BIT(2)/* 数据的最后一个描述符 */ -#define FSDIO_IDMAC_DES0_FD BIT(3)/* 数据的第一个描述符 */ -#define FSDIO_IDMAC_DES0_CH BIT(4)/* 链接下一个描述符地址 */ -#define FSDIO_IDMAC_DES0_ER BIT(5)/* 链表已经到达最后一个链表 */ -#define FSDIO_IDMAC_DES0_CES BIT(30)/* RINTSTS寄存器错误汇总 */ -#define FSDIO_IDMAC_DES0_OWN BIT(31)/* 描述符关联DMA,完成传输后该位置置0 */ - u32 non1; /* ds1 --> unused */ - u32 len; /* ds2 bit[25:13] buffer2 size,bit[12:0] buffer1 size*/ -#define FSDIO_IDMAC_DES2_BUF1_MASK GENMASK(12, 0) -#define FSDIO_IDMAC_DES2_BUF1_SIZE(x) (FSDIO_IDMAC_DES2_BUF1_MASK & (x)) -#define FSDIO_IDMAC_DES2_BUF2_MASK GENMASK(25, 13) -#define FSDIO_IDMAC_DES2_BUF2_SIZE(x) (FSDIO_IDMAC_DES2_BUF2_MASK & (x << 13)) - u32 non2; /* ds3 --> unused */ - u32 addr_lo; /* ds4 Lower 32-bits of Buffer Address Pointer 1 --> buffer 1 */ - u32 addr_hi; /* ds5 Upper 32-bits of Buffer Address Pointer 1 */ - u32 desc_lo; /* ds6 Lower 32-bits of Next Descriptor Address --> buffer 2 */ - u32 desc_hi; /* ds7 Upper 32-bits of Next Descriptor Address */ -} __attribute__ ((packed)) __attribute((aligned(4))) FSdioIDmaDesc; /* SDIO DMA descriptor */ - -``` - -### 5.2 错误码定义 - -- FSDIO_SUCCESS : 操作成功 -- FSDIO_ERR_TIMEOUT :操作超时失败 -- FSDIO_ERR_NOT_INIT :控制器未初始化 -- FSDIO_ERR_SHORT_BUF :缓冲区大小不足 -- FSDIO_ERR_NOT_SUPPORT :操作不支持 -- FSDIO_ERR_INVALID_STATE :控制器的状态不合法 -- FSDIO_ERR_TRANS_TIMEOUT :传输数据超时失败 -- FSDIO_ERR_CMD_TIMEOUT :传输命令超时失败 -- FSDIO_ERR_NO_CARD :卡不在位 -- FSDIO_ERR_BUSY : 卡处于繁忙状态 - -### 5.3. 用户API接口 - -#### FSdioLookupConfig - -```c -const FSdioConfig *FSdioLookupConfig(u32 instance_id) -``` - -Note: - -- Get the device instance default configure - -Input: - -- {u32} instance_id - -Return: - -- {const FSdioConfig *} default configure - -#### FSdioCfgInitialize - -```c -FError FSdioCfgInitialize(FSdio *const instance_p, const FSdioConfig *input_config_p) -``` - -Note: - -- initialization SDIO controller instance -- get into card-detect mode after initialization, bus width = 1, card freq = 400kHz - -Input: - -- {FSdio} *instance_p, SDIO controller instance -- {FSdioConfig} *input_config_p, SDIO controller configure - -Return: - -- {FError} FSDIO_SUCCESS if initialization success, otherwise failed - -#### FSdioDeInitialize - -```c -void FSdioDeInitialize(FSdio *const instance_p) -``` - -Note: - -- deinitialization SDIO controller instance - -Input: - -- {FSdio} *instance_p, SDIO controller instance - -Return: - -- {NONE} - -#### FSdioSetIDMAList - -```c -FError FSdioSetIDMAList(FSdio *const instance_p, volatile FSdioIDmaDesc *desc, u32 desc_num) -``` - -Note: - -- Setup DMA descriptor for SDIO controller instance - -Input: - -- {FSdio} *instance_p, SDIO controller instance -- {volatile FSdioIDmaDesc} *desc, first item in DMA descriptor lists -- {u32} desc_num, number of items in DMA descriptor lists - -Return: - -- {FError} FSDIO_SUCCESS if setup done, otherwise failed - -#### FSdioSetClkFreq - -```c -void FSdioSetClkFreq(FSdio *const instance_p, u32 input_clk_hz) -``` - -Note: - -- Set the Card clock freqency - -Input: - -- {FSdio} *instance_p, SDIO controller instance -- {u32} input_clk_hz, Card clock freqency in Hz - -Return: - -- {None} - -#### FSdioGetClkFreq - -```c -u32 FSdioGetClkFreq(FSdio *const instance_p) -``` - -Note: - -- Get the Card clock freqency - -Input: - -- {FSdio} *instance_p, SDIO controller instance - -Return: - -- {u32} real clock in Hz - - - -#### FSdioDMATransfer - -```c -FError FSdioDMATransfer(FSdio *const instance_p, FSdioCmdData *const cmd_data_p) -``` - -Note: - -- Start command and data transfer in DMA mode - -Input: - -- {FSdio} *instance_p, SDIO controller instance -- {FSdioCmdData} *cmd_data_p, contents of transfer command and data - -Return: - -- {FError} FSDIO_SUCCESS if transfer success, otherwise failed - -#### FSdioPollWaitDMAEnd - -```c -FError FSdioPollWaitDMAEnd(FSdio *const instance_p, FSdioCmdData *const cmd_data_p) -``` - -Note: - -- Wait DMA transfer finished by poll - -Input: - -- {FSdio} *instance_p, SDIO controller instance -- {FSdioCmdData} *cmd_data_p, contents of transfer command and data - -Return: - -- {FError} FSDIO_SUCCESS if wait success, otherwise wait failed - -#### FSdioGetInterruptMask - - -```c -u32 FSdioGetInterruptMask(FSdio *const instance_p, FSdioIntrType type) -``` - -Note: - -- Get SDIO controller interrupt mask - -Input: - -- {FSdio} *instance_p, SDIO controller instance -- {FSdioIntrType} type, Type of interrupt, controller/DMA interrupt - -Return: - -- {u32} interrupt mask bits - -#### FSdioSetInterruptMask - - -```c -void FSdioSetInterruptMask(FSdio *const instance_p, FSdioIntrType type, u32 set_mask, boolean enable) -``` - -Note: - -- Enable/Disable SDIO controller interrupt - -Input: - -- {FSdio} *instance_p, SDIO controller instance -- {FSdioIntrType} type, Type of interrupt, controller/DMA interrupt -- {u32} set_mask, interrupt mask bits -- {boolean} enable, TRUE: enable interrupt mask bits - -Return: - -- {NONE} - -#### FSdioInterruptHandler - -```c -void FSdioInterruptHandler(s32 vector, void *param) -``` - -Note: - -- Interrupt handler for SDIO instance - -Input: - -- {s32} vector, Interrupt id -- {void} *param, Interrupt params, is SDIO instance - -Return: - -- {NONE} - -#### FSdioRegisterEvtHandler - -```c -void FSdioRegisterEvtHandler(FSdio *const instance_p, FSdioEvtType evt, FSdioEvtHandler handler, void *handler_arg) -``` - -Note: - -- Register event call-back function as handler for interrupt events - -Input: - -- {FSdio} *instance_p, SDIO controller instance -- {FSdioEvtType} evt, interrupt event -- {FSdioEvtHandler} handler, event call-back function -- {void} *handler_arg, argument of event call-back function - -Return: - -- {NONE} - - -#### FSdioPIOTransfer - -```c -FError FSdioPIOTransfer(FSdio *const instance_p, FSdioCmdData *const cmd_data_p) -``` - -Note: - -- Start command and data transfer in PIO mode - -Input: - -- {FSdio} *instance_p, SDIO controller instance -- {FSdioCmdData} *cmd_data_p, contents of transfer command and data - -Return: - -- {FError} FSDIO_SUCCESS if transfer success, otherwise failed - -#### FSdioPollWaitPIOEnd - -```c -FError FSdioPollWaitPIOEnd(FSdio *const instance_p, FSdioCmdData *const cmd_data_p); -``` - -Note: - -- Wait PIO transfer finished by poll - -Input: - -- {FSdio} *instance_p, SDIO controller instance -- {FSdioCmdData} *cmd_data_p, contents of transfer command and data - -Return: - -- {FError} FSDIO_SUCCESS if wait success, otherwise wait failed - -#### FSdioGetCmdResponse - -```c -FError FSdioGetCmdResponse(FSdio *const instance_p, FSdioCmdData *const cmd_data_p) -``` - -Note: - -- Get cmd response and received data after wait poll status or interrupt signal - -Input: - -- {FSdio} *instance_p, SDIO controller instance -- {FSdioCmdData} *cmd_data_p, contents of transfer command and data - -Return: - -- {FError} FSDIO_SUCCESS if get success - -#### FSdioRestart - -```c -FError FSdioRestart(FSdio *const instance_p) -``` - -Note: - -- reset controller from error state - -Input: - -- {FSdio} *instance_p, instance of controller - -Return: - -- {FError} FSDIO_SUCCESS if restart success diff --git a/bsp/phytium/libraries/standalone/doc/reference/driver/fsdmmc.md b/bsp/phytium/libraries/standalone/doc/reference/driver/fsdmmc.md deleted file mode 100644 index 5994269b45..0000000000 --- a/bsp/phytium/libraries/standalone/doc/reference/driver/fsdmmc.md +++ /dev/null @@ -1,384 +0,0 @@ -# FSDMMC 驱动程序 - -## 1. 概述 - -SD/MMC控制器主要提供对固态非易失性存储的内存卡的访问能力,包括多媒体存储卡(MMC,MultiMedia Card)和安全和数据保护卡(SD,Secure Digital Card)。 - -## 2. 功能 - -SD/MMC控制器驱动提供了SD/MMC卡的控制访问方法, -- 初始化SD/MMC控制器 -- 以轮询方式发送/接收数据和命令 -- 以中断方式发送/接收数据和命令 -- 设置SD/MMC控制器的中断工作模式和中断响应函数 - -访问SD/MMC卡需要兼容一系列协议命令,这一部分驱动不提供,可以通过第三方框架sdmmc使用 - -驱动相关的源文件包括, -``` -fsdmmc - ├── fsdmmc.c - ├── fsdmmc.h - ├── fsdmmc_dma.c - ├── fsdmmc_dma.h - ├── fsdmmc_g.c - ├── fsdmmc_hw.c - ├── fsdmmc_hw.h - ├── fsdmmc_intr.c - └── fsdmmc_sinit.c -``` - -## 3. 配置方法 - -以下部分将指导您完成 FSDMMC 驱动的软件配置: - -- 初始化FSDMMC控制器 -- 通过协议命令完成SD/MMC卡初始化 -- 通过协议命令读写SD/MMC卡数据 - -## 4 应用示例 - -### [检测SD卡](../../../baremetal/example/peripheral/mmc/fsdmmc_probe) - -### [SD/MMC卡协议实现](../../../third-party/sdmmc) - -### [通过协议命令读写SD卡](../../../baremetal/example/storage/sdmmc_cmds) - -### [通过文件系统使用SD卡](../../../baremetal/example/storage/sdmmc_fatfs) - -## 5. API参考 - -### 5.1. 用户数据结构 - -- FSDMMC控制数据 - -```c -typedef struct -{ - FSdmmcConfig config; /* Current active configs */ - u32 is_ready; /* Device is initialized and ready */ - FSdmmcEventHandler evt_handler[FSDMMC_EVT_NUM]; - void *evt_args[FSDMMC_EVT_NUM]; -} FSdmmc; /* Device instance */ -``` - -- FSDMMC配置数据 - -```c -typedef struct -{ - u32 instance_id; /* Device instance id */ - uintptr base_addr; /* Device base address */ - u32 irq_num[FSDMMC_INTR_NUM]; -} FSdmmcConfig; -``` - -- FSDMMC命令结构 -```c -typedef struct -{ - u32 cmdidx; - u32 cmdarg; - u32 resptype; - u32 response[4]; - u32 flag; -#define FSDMMC_CMD_FLAG_NEED_STOP BIT(0) -#define FSDMMC_CMD_FLAG_NEED_INIT BIT(1) -#define FSDMMC_CMD_FLAG_EXP_RESP BIT(2) -#define FSDMMC_CMD_FLAG_EXP_LONG_RESP BIT(3) -#define FSDMMC_CMD_FLAG_NEED_RESP_CRC BIT(4) -#define FSDMMC_CMD_FLAG_EXP_DATA BIT(5) -#define FSDMMC_CMD_FLAG_WRITE_DATA BIT(6) -#define FSDMMC_CMD_FLAG_READ_DATA BIT(7) -#define FSDMMC_CMD_FLAG_NEED_AUTO_STOP BIT(8) -#define FSDMMC_CMD_FLAG_ADTC BIT(9) - FSdmmcData *data_p; -} FSdmmcCmd; -``` - -- FSDMMC数据结构 -```c -typedef struct -{ - u8 *buf; - u32 blksz; - u32 blkcnt; - u32 datalen; -} FSdmmcData; -``` - -- FSDMMC中断类型和中断事件 -```c -enum -{ - FSDMMC_DMA_BD_INTR = 0, - FSDMMC_CMD_INTR, - FSDMMC_ERROR_INTR, - - FSDMMC_INTR_NUM -}; /* 中断类型 */ - -enum -{ - FSDMMC_EVT_CARD_REMOVED = 0, - FSDMMC_EVT_CMD_DONE, - FSDMMC_EVT_CMD_ERROR, - FSDMMC_EVT_CMD_RESP_ERROR, - FSDMMC_EVT_DATA_ERROR, - FSDMMC_EVT_DATA_READ_DONE, - FSDMMC_EVT_DATA_WRITE_DONE, - - FSDMMC_EVT_NUM -}; /* 事件类型 */ -``` - -### 5.2 错误码定义 - -- [0x0] FSDMMC_SUCCESS : success - -- [0x10c0001] FSDMMC_ERR_NOT_READY : FSDMMC控制器未初始化 - -- [0x10c0001] FSDMMC_ERR_TIMEOUT : 数据或者命令传输等待超时 - -- [0x10c0001] FSDMMC_ERR_CMD_FAILED : 命令传输失败 - -- [0x10c0001] FSDMMC_ERR_DATA_FAILED : 数据传输失败 - -- [0x10c0001] FSDMMC_ERR_CARD_NO_FOUND : 卡未检测到 - -- [0x10c0001] FSDMMC_ERR_INVALID_BUF : 数据缓冲区不合法 - -### 5.3. 用户API接口 - -#### FSdmmcLookupConfig - -- 获取FSDMMC控制器默认配置 - -```c -const FSdmmcConfig *FSdmmcLookupConfig(u32 instance_id); -``` - -Note: - -- instance_id从0开始,取决于FSDMMC控制器的个数 - -Input: - -- {u32} instance_id 驱动控制器ID - -Return: - -- {const FSdmmcConfig *} FSDMMC默认配置,返回NULL如果找不到默认配置 - -#### FSdmmcCfgInitialize - -- 初始化FSDMMC控制器, 使之可以使用 - -```c -FError FSdmmcCfgInitialize(FSdmmc *instance_p, const FSdmmcConfig *input_config_p); -``` - -Note: - -- 输入配置通过FSdmmcLookupConfig获取,用户按照需要修改后传入此函数 - -Input: - -- {FSdmmc} *instance_p FSDMMC驱动控制数据 -- {FSdmmcConfig} *input_config_p FSDMMC用户输入配置 - -Return: - -- {FError} 驱动初始化的错误码信息,FSDMMC_SUCCESS 表示初始化成功,其它返回值表示初始化失败 - -#### FSdmmcDeInitialize - -- 去使能FSDMMC控制器, 清零实例数据 - -```c -void FSdmmcDeInitialize(FSdmmc *instance_p); -``` - -Note: - -- 无 - -Input: - -- {FSdmmc} *instance_p FSDMMC驱动控制数据 - -Return: - -- 无 - -#### FSdmmcPollTransfer - -- 通过FSDMMC轮询方式发送/接收数据和命令 - -```c -FError FSdmmcPollTransfer(FSdmmc *instance_p, FSdmmcCmd *cmd_data_p); -``` - -Note: - -- FSDMMC控制器初始化后才能调用此函数 - -Input: - -- {FSdmmc} *instance_p FSDMMC驱动控制数据 -- {FSdmmcCmd} *cmd_data_p FSDMMC数据和命令 - -Return: - -- {FError} 驱动初始化的错误码信息,FSDMMC_SUCCESS 表示发送/接收成功,其它返回值表示发送/接收失败 - -#### FSdmmcInterruptTransfer - -- 通过FSDMMC中断方式发送/接收数据和命令 - -```c -FError FSdmmcInterruptTransfer(FSdmmc *instance_p, FSdmmcCmd *cmd_data_p); -``` - -Note: - -- FSDMMC控制器初始化后才能调用此函数,使用前需要确保FSDMMC中断设置完成 - -Input: - -- {FSdmmc} *instance_p FSDMMC驱动控制数据 -- {FSdmmcCmd} *cmd_data_p FSDMMC数据和命令 - -Return: - -- {FError} 驱动初始化的错误码信息,FSDMMC_SUCCESS 表示发送/接收成功,其它返回值表示发送/接收失败 - -#### FSdmmcGetInterruptMask - -- 获取FSDMMC的中断掩码 - -```c -u32 FSdmmcGetInterruptMask(uintptr base_addr, u32 intr_type); -``` - -Note: - -- FSDMMC控制器初始化后才能调用此函数 - -Input: - -- {uintptr} base_addr FSDMMC控制器基地址 -- {u32} intr_type FSDMMC中断类型, 参考FSDMMC_INTR_NUM - -Return: - -- {u32} 中断掩码 - -#### FSdmmcSetInterruptMask - -- 设置FSDMMC的中断掩码 - -```c -void FSdmmcSetInterruptMask(uintptr base_addr, u32 intr_type, u32 mask, boolean enable); -``` - -Note: - -- FSDMMC控制器初始化后才能调用此函数 - -Input: - -- {uintptr} base_addr FSDMMC控制器基地址 -- {u32} intr_type FSDMMC中断类型, 参考FSDMMC_INTR_NUM -- {u32} mask 中断掩码 -- {boolean} enable TRUE:打开中断, FALSE:关闭中断 - -Return: - -- 无 - -#### FSdmmcCmdInterrupHandler - -- 命令中断响应函数 - -```c -void FSdmmcCmdInterrupHandler(s32 vector, void *param); -``` - -Note: - -- 此函数用于设置FSDMMC中断时注册,用户可以自定义一个中断响应函数替换此函数 - -Input: - -- vector 中断向量号 -- {void} *param 中断响应输入参数 - -Return: - -- 无 - -#### FSdmmcDmaInterrupHandler - -- DMA中断响应函数 - -```c -void FSdmmcDmaInterrupHandler(s32 vector, void *param); -``` - -Note: - -- 此函数用于设置FSDMMC中断时注册,用户可以自定义一个中断响应函数替换此函数 - -Input: - -- {s32} vector 中断向量号 -- {void} *param 中断响应输入参数 - -Return: - -- 无 - -#### FSdmmcErrInterrupHandler - -- 错误中断响应函数 - -```c -void FSdmmcErrInterrupHandler(s32 vector, void *param); -``` - -Note: - -- 此函数用于设置FSDMMC中断时注册,用户可以自定义一个中断响应函数替换此函数 - -Input: - -- {s32} vector 中断向量号 -- {void} *param 中断响应输入参数 - -Return: - -- 无 - -#### FSdmmcRegisterInterruptHandler - -- 注册中断事件响应函数 - -```c -void FSdmmcRegisterInterruptHandler(FSdmmc *instance_p, u32 event, FSdmmcEventHandler handler, void *args); -``` - -Note: - -- 此函数用于设置FSDMMC中断时注册,被注册的函数被FSdmmcCmdInterrupHandler、FSdmmcErrInterrupHandler - * 和FSdmmcDmaInterrupHandler调用 - -Input: - -- {FSdmmc} *instance_p FSDMMC驱动控制数据 -- {u32} event FSDMMC中断事件类型,参考FSDMMC_EVT_NUM -- {FSdmmcEventHandler} handler, FSDMMC中断事件响应函数 - -Return: - -- 无 diff --git a/bsp/phytium/libraries/standalone/doc/reference/driver/fsemaphore.md b/bsp/phytium/libraries/standalone/doc/reference/driver/fsemaphore.md deleted file mode 100644 index 8419c8d613..0000000000 --- a/bsp/phytium/libraries/standalone/doc/reference/driver/fsemaphore.md +++ /dev/null @@ -1,254 +0,0 @@ -# FSemaphore 驱动程序 - -## 1. 概述 - -硬件信号量(Semaphore)是E2000提供的一个二值信号量模块,支持 32 个硬件信号量。每个信号量包括 UNLOCK 和 LOCKED 两个状态 - -## 2. 功能 - -FSemaphore 驱动程序主要完成 Semaphore 模块的初始化,锁的分配、获取与释放, -相关源文件为: -``` -fsemaphore - . - ├── fsemaphore.c - ├── fsemaphore.h - ├── fsemaphore_g.c - ├── fsemaphore_hw.h - └── fsemaphore_sinit.c -``` - -## 3. 配置方法 - -以下部分将指导您完成 FSemaphore 驱动的软件配置: - -- 初始化 Semaphore 控制器 -- 获取 Semaphore 锁 -- 加锁/解锁操作 - -## 4. 应用示例 - -### [Semaphore加锁解锁测试](../../../baremetal/example/peripheral/ipc/fsemaphore_test) - -## 5. API参考 - - -### 5.1. 用户数据结构 - -#### FSemaConfig - -- Semaphore控制器配置 - -```c -typedef struct -{ - u32 id; /* Semaphore控制器id */ - uintptr base_addr; /* Semaphore控制器基地址 */ -} FSemaConfig; /* Semaphore控制器配置 */ -``` - -#### FSemaLocker - -- Semaphore锁实例 - -```c -typedef struct -{ - u32 index; /* Semaphore锁id */ -#define FSEMA_LOCKER_NAME_LEN 32U - char name[FSEMA_LOCKER_NAME_LEN]; /* Semaphore锁的名字 */ - u32 owner; /* Semaphore锁的拥有者 */ - FSema *sema; /* Semaphore控制器实例 */ -} FSemaLocker; /* Semaphore锁实例 */ -``` - -#### FSema - -- Semaphore控制器实例 - -```c -typedef struct _FSema -{ - FSemaConfig config; /* Semaphore控制器配置 */ - u32 is_ready; /* Semaphore控制器初始化是否完成 */ - FSemaLocker *locker[FSEMA_NUM_OF_LOCKER]; /* Semaphore锁实例,locker[i] == NULL 表示锁尚未分配 */ -} FSema; /* Semaphore控制器实例 */ -``` -### 5.2 错误码定义 - -FSEMA_SUCCESS :成功 -FSEMA_ERR_NOT_INIT :控制器未初始化 -FSEMA_ERR_NO_AVAILABLE_LOCKER :没有空闲的锁可以分配 -FSEMA_ERR_LOCK_TIMEOUT :锁被占用,获取锁失败 -FSEMA_ERR_NO_PERMISSION :当前角色没有权限操作 - -### 5.3. 用户API接口 - -#### FSemaLoopkupConfig - -```c -const FSemaConfig *FSemaLoopkupConfig(u32 instance_id) -``` - -Note: - -- 获取Semaphore的默认配置 - -Input: - -- {u32} instance_id, Semaphore的实例id - -Return: - -- {const FSemaConfig *} Semaphore的默认配置 - -#### FSemaCfgInitialize - -```c -FError FSemaCfgInitialize(FSema *const instance, const FSemaConfig *input_config) -``` - -Note: - -- 初始化Semaphore控制器 - -Input: - -- {FSema} *instance, Semaphore控制器实例 -- {FSemaConfig} *input_config, Semaphore控制器配置 - -Return: - -- {FError} FSEMA_SUCCESS 表示初始化成功 - -#### FSemaDeInitialize - -```c -void FSemaDeInitialize(FSema *const instance) -``` - -Note: - -- 去初始化Semaphore控制器 - -Input: - -- {FSema} *instance, Semaphore控制器实例 - -Return: - -- 无 - -#### FSemaCreateLocker - -```c -FError FSemaCreateLocker(FSema *const instance, FSemaLocker *const locker) -``` - -Note: - -- 分配和创建Semaphore锁 - -Input: - -- {FSema} *instance, Semaphore控制器实例 -- {FSemaLocker} *locker, Semaphore锁的实例 - -Return: - -- {FError} FSEMA_SUCCESS 表示分配成功 - -#### FSemaDeleteLocker - -```c -FError FSemaDeleteLocker(FSemaLocker *const locker) -``` - -Note: - -- 强制解除Semaphore锁并删除锁实例 - -Input: - -- {FSemaLocker} *locker, Semaphore锁实例 - -Return: - -- {FError} FSEMA_SUCCESS 表示删除锁成功 - -#### FSemaTryLock - -```c -FError FSemaTryLock(FSemaLocker *const locker, u32 owner, u32 try_times, FSemaRelaxHandler relax_handler) -``` - -Note: - -- 尝试获取Semaphore锁 - -Input: - -- {FSemaLocker} *locker, Semaphore锁的实例 -- {u32} owner, 当前尝试获取锁的是谁 -- {u32} try_times, 尝试获取的次数 -- {FSemaRelaxHandler} relax_handler, 每次尝试获取锁失败后的relax函数 - -Return: - -- {FError} FSEMA_SUCCESS 表示成功获取锁,FSEMA_ERR_LOCK_TIMEOUT 表示锁已经被占用 - -#### FSemaUnlock - -```c -FError FSemaUnlock(FSemaLocker *const locker, u32 owner) -``` - -Note: - -- 尝试释放Semaphore锁 - -Input: - -- {FSemaLocker} *locker, Semaphore锁实例 -- {u32} owner, 当前尝试释放锁的身份 - -Return: - -- {FError} FSEMA_SUCCESS释放锁成功 - -#### FSemaUnlockAll - -```c -FError FSemaUnlockAll(FSema *const instance) -``` - -Note: - -- 强制解除所有Semaphore锁 - -Input: - -- {FSema} *instance, Semaphore控制器实例 - -Return: - -- {FError} FSEMA_SUCCESS表示强制解锁成功 - -#### FSemaIsLocked - -```c -boolean FSemaIsLocked(FSemaLocker *locker) -``` - -Note: - -- 检查指定Semaphore锁是否处于锁定状态 - -Input: - -- {FSemaLocker} *locker, Semaphore锁实例 - -Return: - -- {boolean} TRUE: 处于锁定状态 - diff --git a/bsp/phytium/libraries/standalone/doc/reference/driver/fspim.md b/bsp/phytium/libraries/standalone/doc/reference/driver/fspim.md deleted file mode 100644 index 909cd4dfe5..0000000000 --- a/bsp/phytium/libraries/standalone/doc/reference/driver/fspim.md +++ /dev/null @@ -1,374 +0,0 @@ -# FSPIM 驱动程序 - -## 1. 概述 - - -- SPI 总线是一种4线总线,提供了一种高速、高效率的串行通信技术。SPI 通信通常有一个主设备和一个或多个从设备,需要至少4根线,它们是 MISO(主设备数据输入)、MOSI(主设备数据输出)、SCLK(时钟)、CS(片选) - -- 其中,CS是从芯片是否被主芯片选中的控制信号,SCLK提供时钟脉冲,SDI,SDO则基于此脉冲完成数据传输 - -- 本驱动程序提供了FT2000/4、D2000平台的SPI主设备功能 - -- FT2000/4、D2000上包含 2 个通用 SPI 接口,仅作为通用 SPI 主设备使用,外部最多挂载 4 个 SPI 从设备 - - -## 2. 功能 - - -- 驱动相关的源文件如下, -- drivers/spi/fspim - -``` -. -├── fspim.c -├── fspim.h -├── fspim_g.c -├── fspim_hw.c -├── fspim_hw.h -├── fspim_intr.c -├── fspim_options.c -└── fspim_sinit.c -``` - -- FSPIM 常用于读写Nor-flash,其应用可以参考以下结构,最底层的硬件是 SPI 主机控制器和 Nor-flash, 其上由 FSPIM 驱动和 SFUD 提供 Spi Nor-flash的读写接口,面向SPI文件系统,如 LittleFS 和 SPIFFS,文件系统提供负载均衡、坏块检测和断电保护等特性,并为上层应用提供文件创建/读写等接口,使用方法参考`4 应用示例` - -![spi_app](./figs/spi_app.png) - -## 3. 配置方法 - - -以下部分将指导您完成 FSPIM 驱动的软件配置: - -### 3.1 使用 SFUD 通用SPI协议框架 - -- 使能 CONFIG_USE_FSPIM 和 CONFIG_USE_SFUD 配置 -- 初始化 SFUD 框架 -- 调用 SFUD 提供的 API 读写 SPI 从设备 - -关于 SFUD 框架的使用,可以参考[sfud.md](./sfud.md) - -### 3.2 不使用 SFUD 通用SPI协议框架 - -- 使能 CONFIG_USE_FSPIM 配置 -- 初始 FSPIM 驱动 -- 调用 FSPIM 提供的 API 读写 SPI 从设备,需要按照 SPI 从设备的手册实现相关的命令和协议 - -## 4 应用示例 - -### [SPI 回环测试](../../../baremetal/example/peripheral/spi/fspim_loopback/README.md) - -### [SPI Norflash读写测试](../../../baremetal/example/storage/spi_sfud/README.md) - -### [SPI Norflash文件系统测试-LittleFS](../../../baremetal/example/storage/littlefs_test/README.md) - -### [SPI Norflash文件系统测试-SPIFFS](../../../baremetal/example/storage/spiffs_test/README.md) - -## 4. API参考 - -### 4.1 用户数据结构 - -- SPIM 驱动配置数据 -```c -typedef struct -{ - u32 instance_id; /* Device instance id */ - uintptr base_addr; /* Device base address */ - u32 irq_num; /* Device intrrupt id */ - u32 irq_prority; /* Device intrrupt priority */ - FSpimSlaveDevice slave_dev_id; /* Slave device id */ - u32 max_freq_hz; /* Clock frequency in Hz */ - FSpimTransByte n_bytes; /* Bytes in transfer */ - FSpimCpolType cpol; /* Polarity of the clock */ - FSpimCphaType cpha; /* Phase of the clock */ - boolean en_test; /* Enable test mode */ -} FSpimConfig; -``` - -- SPIM 驱动控制数据 -```c -typedef struct -{ - FSpimConfig config; /* Current active configs */ - u32 is_ready; /* Device is initialized and ready */ - u32 length; /* Data length in transfer */ - const void *tx_buff; /* Tx buffer beg */ - void *rx_buff; /* Rx buffer beg */ - const void *tx_buff_end; /* Tx buffer end */ - void *rx_buff_end; /* Rx buffer end */ - u32 tx_fifo_len; /* Depth of tx fifo */ - u32 rx_fifo_len; /* Depth of rx fifo */ - FSpimEvtHandler evt_handler[FSPIM_INTR_EVT_NUM]; /* event handler for interrupt */ - void *evt_param[FSPIM_INTR_EVT_NUM]; /* parameters ptr of event handler */ -} FSpim; -``` - -- SPI 从设备ID,最多支持4个从设备 -```c -enum -{ - FSPIM_SLAVE_DEV_0 = 0, - FSPIM_SLAVE_DEV_1, - FSPIM_SLAVE_DEV_2, - FSPIM_SLAVE_DEV_3, - - FSPIM_NUM_OF_SLAVE_DEV -}; -``` - -- 一次 SPI 传输的数据量,一个字节或者两个字节 -```c -enum -{ - FSPIM_1_BYTE = 1, - FSPIM_2_BYTE = 2, - - FSPIM_MAX_BYTES_NUM -}; -``` - -- SPI传输,选择接收/发送 -```c -enum -{ - FSPIM_TRANS_MODE_RX_TX = 0x0, - FSPIM_TRANS_MODE_TX_ONLY = 0x1, - FSPIM_TRANS_MODE_RX_ONLY = 0x2, - FSPIM_TRANS_MODE_READ_EEPROM = 0x3, - - FSPIM_TRANS_MODE_MAX -}; -``` - -- SPI的时钟极性和相位 -```c -enum -{ - FSPIM_CPOL_LOW = 0, - FSPIM_CPOL_HIGH -}; - -enum -{ - FSPIM_CPHA_1_EDGE = 0, - FSPIM_CPHA_2_EDGE -}; -``` - -### 4.2 错误码定义 - -- 模块错误码编号:0x1060000 -- [0x0] FSPIM_SUCCESS : fspim success -- [0x1060000] FSPIM_SUCCESS : fspim success -- [0x1060001] FSPIM_ERR_INVAL_STATE : fspim invalid state -- [0x1060002] FSPIM_ERR_NOT_READY : fspim driver not ready -- [0x1060003] FSPIM_ERR_INVAL_PARAM : fspim invalid input parameters -- [0x1060004] FSPIM_ERR_BUS_BUSY : fspim bus is busy -- [0x1060005] FSPIM_ERR_NOT_SUPPORT : fspim not support operation -- [0x1060006] FSPIM_ERR_TIMEOUT : fspim wait timeout - -### 4.3 用户API接口 - -#### FSpimLookupConfig - -- 获取FSPIM驱动的默认配置参数 - -```c -const FSpimConfig *FSpimLookupConfig(u32 instance_id) -``` - -Note: - -- 用户可以通过此接口获取驱动默认配置的副本,进行修改后,作为`FSpimCfgInitialize`函数的入参使用 - -Input: - -- u32 instance_id, 选择的FSPIM控制器实例号 - -Return: - -- const FSpimConfig *, 返回的默认驱动配置,返回NULL表示失败 - - -#### FSpimCfgInitialize - -- 完成FSPIM驱动实例的初始化,使之可以使用 - -```c -FError FSpimCfgInitialize(FSpim *instance_p, const FSpimConfig *cofig_p); -``` - -Note: - -- 此函数会重置FSPIM控制器和FSPIM控制数据 - -Input: - -- FSpim *instance_p, FSPIM驱动控制数据 - -- const FSpimConfig *input_config_p, FSPIM驱动配置数据 - -Return: - -- FError, 驱动初始化的错误码信息,FSPIM_SUCCESS 表示初始化成功,其它返回值表示初始化失败 - -#### FSpimDeInitialize - -- 完成FSPIM驱动实例去初始化,之后不能使用 - -```c -void FSpimDeInitialize(FSpim *instance_p) -``` - -Note: - -- 此函数会重置FSPIM控制数据 - -Input: - -- FSpim *instance_p, FSPIM驱动控制数据 - -Return: - -无 - -#### FSpimTransferPollFifo -- 先发送后接收数据 (阻塞处理),利用Fifo进行处理 - -```c -FError FSpimTransferPollFifo(FSpim *instance_p, const void *tx_buf, void *rx_buf, fsize_t len); -``` - -Note: - -- 使用此函数前需要确保FSPIM驱动初始化成功 -- 从函数不会使用中断,会按照TX FIFO的深度进行传输,每次发送填满TX FIFO后触发发送/接收动作 - -Input: - -- FSpim *instance_p, FSPIM驱动控制数据 - -- const void *tx_buf, 写缓冲区,可以为空,为空时表示只关注读数据,此时驱动会发送0xff读数据 - -- void *rx_buf, 读缓冲区, 可以为空,为空时表示值关注写数据,此时SPI总线上返回的数据会被抛弃 - -- fsize_t len, 进行传输的长度,如果tx_buf或者rx_buf不为空,则两个buf的长度必须为len - -Return: - -- FError, 驱动初始化的错误码信息,FSPIM_SUCCESS 表示数据交换成功,其它返回值表示交换失败 - -#### FSpimTransferByInterrupt - -- 先发送后接收数据 (中断处理),利用Fifo进行处理 - -```c -FError FSpimTransferByInterrupt(FSpim *instance_p, const void *tx_buf, void *rx_buf, fsize_t len); -``` - -Note: - -- 使用此函数前需要确保FSPIM驱动初始化成功 -- 此函数会安装TX FIFO的深度进行传输,每次发送填满TX FIFO后在中断中处理发送/接收动作,用户需要注册FSPIM_INTR_EVT_RX_DONE事件,传输过程中用户处理其它任务,等待传输完成后从tx_buf和rx_buf中读数据 - -Input: - -- FSpim *instance_p, FSPIM驱动控制数据 - -- const void *tx_buf, 写缓冲区,可以为空,为空时表示只关注读数据,此时驱动会发送0xff读数据 - -- void *rx_buf, 读缓冲区, 可以为空,为空时表示值关注写数据,此时SPI总线上返回的数据会被抛弃 - -- fsize_t len, 进行传输的长度,如果tx_buf或者rx_buf不为空,则两个buf的长度必须为len - -Return: - -- FError, 驱动初始化的错误码信息,FSPIM_SUCCESS 表示数据交换成功,其它返回值表示交换失败 - -#### FSpimInterruptHandler - -- SPIM中断处理函数 - -```c -void FSpimInterruptHandler(s32 vector, void *param); -``` - -Note: - -- 此函数给用户注册在中断处理模块中,从而在中断触发时进行处理 -- 使用此函数前,用户需要打开部分中断屏蔽位 - -Input: - -- s32 vector, 中断向量号,此处不关心此参数 - -- void *param, 中断输入参数, 指向FSPIM的驱动控制实例 - -Return: - -无 - -#### FSpimRegisterIntrruptHandler -- SPIM中断事件注册函数 - -```c -void FSpimRegisterIntrruptHandler(FSpim *instance_p, u32 evt, FSpimEvtHandler handler, void *param) -``` - -Note: - -- 此函数与FSpimInterruptHandler配套使用,为中断处理注册事件回调函数 - -Input: - -- FSpim *instance_p, FSPIM驱动控制数据 - -- u32 evt, 中断事件号码,参考FSPIM_INTR_EVT_NUM - -- FSpimEvtHandler handler, 中断事件回调函数 - -- void *param, 中断事件回调函数的入参,取决于中断事件回调函数的实现 - -Return: - -无 - -#### FSpimErrorToMessage - -- 获取FSPIM驱动错误码 - -```c -const char *FSpimErrorToMessage(FError error); -``` - -Note: - -无 - -Input: - -- FError error, FSPIM模块错误码 - -Return: - -const char *, FSPIM模块错误码对应的信息 - -#### FSpimSetChipSelection - -- 获取FSPIM驱动错误码 - -```c -void FSpimSetChipSelection(FSpim *instance_p, boolean on); -``` - -Note: - -无 - -Input: - -- {FSpim} *instance_p, 驱动控制数据 -- {boolean} on, TRUE: 片选打开, FALSE: 片选关闭 - -Return: - -- 无 diff --git a/bsp/phytium/libraries/standalone/doc/reference/driver/fusb.md b/bsp/phytium/libraries/standalone/doc/reference/driver/fusb.md deleted file mode 100644 index 16c74266ae..0000000000 --- a/bsp/phytium/libraries/standalone/doc/reference/driver/fusb.md +++ /dev/null @@ -1,535 +0,0 @@ - -# FUSB 驱动程序 - -## 1. 概述 - -USB是通用串行总线(Universal Serial Bus)的缩写, USB是一种简易、双向、快速、同步、即插即用(Plug and Play,PnP)且支持热插拔功能的串行接口。USB设备现在已经非常普及,如U盘、鼠标、键盘等。USB协议曾经出现过多种版本,如USB1.0、USB1.1、USB2.0、USB3.0等 - -USB总线体系中, USB主机(Host)是系统的主人, 负责USB通信过程中数据的控制和处理, USB设备(Device)是系统的从机,用于实现特定的功能,如常用的U盘、移动硬盘、鼠标、键盘、游戏手柄等,在USB传输过程中,USB主机处于主导地位,由USB主机发起数据和命令的传输,USB设备被动响应USB主机发来的请求命令,USB总线中的主要角色包括USB主机、根Hub、USB Hub和USB设备等 - -USB主机和USB设备间的通信是通过管道(Pipe)进行的,管道是指在USB主机端的一组缓冲区,用于管道中数据的收发;在USB设备端,有一个特定端点(Endpoint,ENDP)与管道对接 - -USB可靠传输(具有反馈机制)的最小单位是事务,事务就是利用令牌包、数据包和握手包实现一个带有错误反馈机制的通信,使USB传输更加安全可靠,按照令牌包的类型可以分为,Setup事务、IN事务、OUT事务等。基于事务,USB协议定义了传输(Transfer)用于完成一组具有特定目的的事务,包括控制传输、中断传输、批量传输和同步传输 - -## 2. 功能 - -- 驱动相关的源文件如下, -- drivers/usb -``` -. -├── Kconfig -├── fusb.c -├── fusb.h -├── fusb_debug.c -├── fusb_def.h -├── fusb_dev.c -├── fusb_g.c -├── fusb_generic_hub.c -├── fusb_generic_hub.h -├── fusb_hid.c -├── fusb_hid.h -├── fusb_hub.c -├── fusb_hub.h -├── fusb_msc.c -├── fusb_msc.h -├── fusb_private.h -├── fusb_sinit.c -``` - -- 关于 [XHCI](./fxhci.md) - -## 3. 配置方法 - -参考以下步骤完成 FUSB 硬件配置, - -- 1. FUSB驱动支持 E2000,在 E2000 上完成测试 - -参考以下步骤完成 FUSB 软件配置, - -- 1. 选择USB控制器类型为 XHCI -- 2. 配置 FUSB 的内存池空间,推荐在1Mb以上 -- 3. 注册USB设备驱动 -- 4. 调用USB控制器驱动接口启动FUSB实例 -- 5. 调用USB控制器驱动接口轮询FUSB,更新USB设备状态 -- 6. 调用USB设备驱动操作USB设备 - -## 4 应用示例 - -- USB主机操作和USB设备发现 -### [fxhci_host](../../../baremetal/example/peripheral/usb/fxhci_host) - -- USB大容量存储器读写 -### [fusb_fatfs](../../../baremetal/example/storage/fusb_fatfs) - -## 5. API参考 - -### 5.1. 用户数据结构 - -#### 5.1.1 USB端点 - -```c -typedef struct -{ - FUsbDev *dev; /* device instance of this endpoint */ - int endpoint; /* endpoint address ep0 = 0, epn = n */ - FUsbDirection direction; /* type or direction of ep */ - int toggle; /* ep state for some device to toggle */ - int maxpacketsize; /* max packet size for ep transfer */ - FUsbEpType type; /* transfer type of ep, control, bulk or so on */ - int interval; /* expressed as binary logarithm of the number - of microframes (i.e. t = 125us * 2^interval) */ -} FUsbEndpoint; /* encapsulates a single endpoint of an USB device */ -``` - -#### 5.1.2 USB设备 - -```c -typedef struct _FUsbDev -{ - FUsbHc *controller; /* Hc instance where device attached */ - FUsbEndpoint endpoints[FUSB_MAX_EP_NUM]; /* all Ep instance of device */ - int num_endp; /* num of Ep in use */ - FUsbDevAddr address; /* USB address */ - FUsbDevClass class; /* USB device class, e.g hid */ - int hub; /* hub where device is attached to */ - int port; /* port where device is attached */ - FUsbSpeed speed; /* speed type of device */ - void *data; /* private data for specific type of device */ - FUsbDeviceDescriptor *descriptor; /* device descriptor ever get from device hw */ - FUsbConfigurationDescriptor *configuration; /* configure descriptor followed with interface descriptor ever get from device hw */ - FUsbConfigParser config_parser; /* parser for configure descriptor */ - FUsbStringParser string_parser; /* parser for string descriptor */ - void (*init)(FUsbDev *dev); /* device init function of specific device type for register */ - void (*destroy) (FUsbDev *dev); /* device deinit function of specific device type for register */ - void (*poll) (FUsbDev *dev); /* device poll function of specific device type for register */ -} FUsbDev; /* encapsulates a single USB device */ -``` - -#### 5.1.3 USB主机 - -```c -typedef struct _FUsbHc -{ - FUsbHc *next; /* next Hc instance in the list */ - uintptr reg_base; /* base address of Hc register */ - FUsb *usb; /* instance of USB system */ - FUsbHcType type; /* type of Hc, e.g XHCI */ - FUsbDev *devices[FUSB_MAX_DEV_NUM]; /* dev 0 is root hub, 127 is last addressable */ - - /* start(): Resume operation. */ - void (*start) (FUsbHc *controller); - /* stop(): Stop operation but keep controller initialized. */ - void (*stop) (FUsbHc *controller); - /* reset(): Perform a controller reset. The controller needs to - be (re)initialized afterwards to work (again). */ - void (*reset) (FUsbHc *controller); - /* init(): Initialize a (previously reset) controller - to a working state. */ - void (*init) (FUsbHc *controller); - /* shutdown(): Stop operation, detach host controller and shutdown - this driver instance. After calling shutdown() any - other usage of this hci_t* is invalid. */ - void (*shutdown) (FUsbHc *controller); - - FUsbTransCode (*bulk) (FUsbEndpoint *ep, int size, u8 *data, int finalize); - FUsbTransCode (*control) (FUsbDev *dev, FUsbDirection pid, int dr_length, - void *devreq, int data_length, u8 *data); - void* (*create_intr_queue) (FUsbEndpoint *ep, int reqsize, int reqcount, int reqtiming); - void (*destroy_intr_queue) (FUsbEndpoint *ep, void *queue); - u8* (*poll_intr_queue) (void *queue); - void *instance; /* instance to specific Hc implementation, e.g XHCI */ - - /* set_address(): Tell the USB device its address (xHCI - controllers want to do this by - themselves). Also, allocate the FUsbDev - structure, initialize enpoint 0 - (including MPS) and return it. */ - FUsbDev *(*set_address) (FUsbHc *controller, FUsbSpeed speed, - int hubport, int hubaddr); - /* finish_device_config(): Another hook for xHCI, returns 0 on success. */ - int (*finish_device_config) (FUsbDev *dev); - /* destroy_device(): Finally, destroy all structures that - were allocated during set_address() - and finish_device_config(). */ - void (*destroy_device) (FUsbHc *controller, int devaddr); -} FUsbHc; /* encapsulates a single USB host */ -``` - -#### 5.1.4 USB系统配置 - -```c -typedef struct -{ - void *(*malloc_align)(size_t size, size_t align); - void (*free)(void *mem); -} FUsbMemAllocator; /* memory allocator used in USB system */ - -typedef struct -{ - u32 instance_id; /* id for this USB system */ - uintptr base_addr; /* base addr of Hc register, set as 0 for pci-usb */ - u32 irq_num; - u32 irq_priority; - FUsbMemAllocator allocator; /* memory allocator to support dynamic memory */ -} FUsbConfig; /* configure data of the USB system */ -``` - -#### 5.1.4 USB系统 - -```c -typedef struct _FUsb -{ - FUsbConfig config; /* configuration of USB system */ - void *pcie_instance; /* NULL if unused */ - void *pcie_info[FUSB_MAX_CTRL_NUM]; /* NULL if unused */ - FUsbHc *hc; /* first hc, there might have multiple hc in pcie-mode */ - /* hook to set init function for specific device type */ - FUsbDevInitFunc dev_init[FUSB_MAX_DEV_TYPE_NUM]; - u32 dev_init_num; /* number of init function in used */ - u32 is_ready; /* indicator of system okay */ -} FUsb; /* instance of the USB system */ -``` - -### 5.2 错误码定义 - - -- 模块错误码编号 `0x1110000` - -- [0x0] FUSB_SUCCESS : success -- [0x1110000] FUSB_ERR_WAIT_TIMEOUT : wait for status timeout -- [0x1110001] FUSB_ERR_INVALID_PARA : invalid input parameters -- [0x1110002] FUSB_ERR_NOT_SUPPORT : parameters or feature not supported -- [0x1110003] FUSB_ERR_NON_INSTANCE : cannot find instance -- [0x1110004] FUSB_ERR_INVALID_DATA : invalid input data -- [0x1110005] FUSB_ERR_DESC_PARSE_ERR : failed to parse descriptor -- [0x1110006] FUSB_ERR_ALLOCATE_FAIL : failed to allocate memory from memory pool -- [0x1110007] FUSB_ERR_TRANS_FAIL : failed to transfer data - - -- 传输过程完成错误码 - -- [0] FUSB_CC_ZERO_BYTES : failed, transfer zero bytes -- [1] FUSB_CC_SUCCESS : transfer success with bytes unkonwn - -### 5.3. 用户API接口 - -#### FUsbLookupConfig - -```c -const FUsbConfig *FUsbLookupConfig(u32 instance_id) -``` - -Note: - -- 获取USB的默认配置 - -Input: - -- {u32} instance_id USB实例号 - -Return: - -- {const FUsbConfig *} USB默认配置 - -#### FUsbCfgInitialize - -```c -FError FUsbCfgInitialize(FUsb *instance, const FUsbConfig *input_config) -``` - -Note: - -- 初始化USB实例 -- 在PCIE模式下,USB Hc实例在PCIE总线发现控制器后创建 - -Input: - -- {FUsb} *instance, USB实例 -- {const FUsbConfig} *input_config, USB输入配置 - -Return: - -- {FError} 初始化错误码 - -#### FUsbDeInitialize - -```c -void FUsbDeInitialize(FUsb *instance); -``` - -Note: - -- 去初始化USB实例 - -Input: - -- {FUsb} *instance, USB实例 - -Return: - -- 无 - -#### FUsbPoll - -```c -void FUsbPoll(FUsb *instance) -``` - -Note: - -- 轮询USB控制器连接的所有设备, 更新设备拓扑 - -Input: - -- {FUsb} *instance, USB实例 - -Return: - -- 无 - -#### FUsbExit - -```c -void FUsbExit(FUsb *instance) -``` - -Note: - -- 关闭所有的USB控制器,移除所有连接的设备 - -Input: - -- {FUsb} *instance, USB实例 - -Return: - -- 无 - - -#### FUsbAssignDevInitFunc - -```c -FError FUsbAssignDevInitFunc(FUsb *instance, const FUsbDevIndex *index, FUsbDevInitHandler handler) -``` - -Note: - -- 指定特定USB设备的初始化函数,供创建USB设备实例时使用 - -Input: - -- {FUsb} *instance, USB实例 -- {FUsbDevIndex} *index, 特定USB设备的索引 -- {FUsbDevInitHandler} handler, 特定USB设备的初始化函数 - -Return: - -- {FError} 处理返回错误码 - -#### FUsbGetAllDevEntries - -```c -size_t FUsbGetAllDevEntries(FUsbHc *controller, FUsbDev *devs[], size_t max_dev_num) -``` - -Note: - -- 获取USB控制器上连接的所有USB设备实例 - -Input: - -- {FUsbHc} *controller, USB控制器实例 -- {FUsbDev} *devs, 放置USB设备实例的缓冲区 -- {size_t} max_dev_num, 最多可以获取的USB设备实例数目 - -Return: - -- {size_t} 实际获取的USB设备实例数目 - -#### FUsbSetFeature - -```c -FUsbTransCode FUsbSetFeature(FUsbDev *dev, int endp, int feature, int rtype) -``` - -Note: - -- 标准USB主机请求,使能设备/接口/端点的某个特性 - -Input: - -- {FUsbDev} *dev, USB设备实例 -- {int} endp, 设备号(0x00)/接口号/端点号 -- {int} feature, 待使能的特性 -- {int} rtype, 请求类型,由FUsbGenerateReqType生成 - -Return: - -- {FUsbTransCode} 控制传输的返回值,小于0表示失败,大于0表示成功传输的字节数目 - -#### FUsbGetStatus - -```c -FUsbTransCode FUsbGetStatus(FUsbDev *dev, int intf, int rtype, int len, void *data) -``` - -Note: - -- 标准USB主机请求,获取设备/接口/端点的状态 - -Input: - -- {FUsbDev} *dev, USB设备实例 -- {int} intf,设备号(0x00)/接口号/端点号 -- {int} rtype, 请求类型,由FUsbGenerateReqType生成 -- {int} len, Data Stage的数据长度 -- {void} *data, Data Stage的数据缓冲区 - -Return: - -- {FUsbTransCode} 控制传输的返回值,小于0表示失败,大于0表示成功传输的字节数目 - -#### FUsbGetDescriptor - -```c -FUsbTransCode FUsbGetDescriptor(FUsbDev *dev, int rtype, FUsbDescriptorType desc_type, int desc_idx, void *data, size_t len) -``` - -Note: - -- 标准USB主机请求,获取指定描述符 - -Input: - -- {FUsbDev} *dev, USB设备实例 -- {int} rtype, 请求类型,由FUsbGenerateReqType生成 -- {FUsbDescriptorType} desc_type, 描述符类型 -- {int} desc_idx, 描述符索引 -- {void} *data, Data Stage的数据缓冲区 -- {size_t} len, Data Stage的数据长度 - -Return: - -- {FUsbTransCode} 控制传输的返回值,小于0表示失败,大于0表示成功传输的字节数目 - -#### FUsbGetStringDescriptor - -```c -FUsbTransCode FUsbGetStringDescriptor(FUsbDev *dev, int rtype, FUsbDescriptorType desc_type, int desc_idx, int lang_id, void *data, size_t len) -``` - -Note: - -- USB主机请求,获取字符串描述符 - -Input: - -- {FUsbDev} *dev, USB设备实例 -- {int} rtype, 请求类型,由FUsbGenerateReqType生成 -- {int} desc_type, 描述符类型 -- {int} desc_idx, 描述符索引 -- {int} lang_id, 语言类型 -- {void} *data, Data Stage的数据缓冲区 -- {size_t} len, Data Stage的数据长度 - -Return: - -- {int} 控制传输的返回值,小于0表示失败,大于0表示成功传输的字节数目 - -#### FUsbSetConfiguration - -```c -FUsbTransCode FUsbSetConfiguration(FUsbDev *dev) -``` - -Note: - -- 标准USB主机请求,设置配置值 - -Input: - -- {FUsbDev} *dev, USB设备实例 - -Return: - -- {FUsbTransCode} 控制传输的返回值,小于0表示失败,大于0表示成功传输的字节数目 - -#### FUsbClearFeature - -```c -FUsbTransCode FUsbClearFeature(FUsbDev *dev, int endp, int feature, int rtype) -``` - -Note: - -- 标准USB主机请求,去使能设备/接口/端点的某个特性 - -Input: - -- {FUsbDev} *dev, USB设备实例 -- {int} endp, 设备号(0x00)/接口号/端点号 -- {int} feature,待去除的特性 -- {int} rtype, 请求类型,由FUsbGenerateReqType生成 - -Return: - -- {FUsbTransCode} 控制传输的返回值,小于0表示失败,大于0表示成功传输的字节数目 - -#### FUsbDumpAllDescriptors - -```c -void FUsbDumpAllDescriptors(FUsbDev *dev) -``` - -Note: - -- 打印USB设备的描述符信息(设备描述符,配置描述符和接口描述符) - -Input: - -- {FUsbDev} *dev, USB设备实例,已完成初始化 - -Return: - -- 无 - -#### FUsbDetachDev - -```c -void FUsbDetachDev(FUsbHc *controller, int devno) -``` - -Note: - -- 从USB主机移除指定USB设备(USB设备驱动使用) - -Input: - -- {FUsbHc} *controller, USB控制器实例 -- {int} devno, USB设备地址 - -Return: - -- 无 - - -#### FUsbAttachDev - -```c -FUsbDevAddr FUsbAttachDev(FUsbHc *controller, int hubaddress, int port, FUsbSpeed speed) -``` - -Note: - -- 向USB主机添加USB设备(USB设备驱动使用) - -Input: - -- {FUsbHc} *controller, USB控制器实例 -- {int} hubaddress, Hub地址 -- {int} port, 连接的Port -- {FUsbSpeed} speed, USB设备的设置速度类型 - -Return: - -- {FUsbDevAddr} 分配的USB设备地址 diff --git a/bsp/phytium/libraries/standalone/doc/reference/driver/fwdt.md b/bsp/phytium/libraries/standalone/doc/reference/driver/fwdt.md deleted file mode 100644 index c24f78e303..0000000000 --- a/bsp/phytium/libraries/standalone/doc/reference/driver/fwdt.md +++ /dev/null @@ -1,171 +0,0 @@ -# WDT 驱动程序 - -## 1. 概述 - -- WDT(watchdog timer)看门狗定时器是一种监控系统运行状况的手段,软件需在运行过程中定时向看门狗发送喂狗信号。 - -- 若看门狗定时器在一段时间内没有收到来自软件的喂狗信号,则认为系统故障,会强制系统复位。 - -- WDT 驱动支持的平台包括 FT2000/4、D2000、E2000。 - -## 2. 功能 - -WDT 驱动程序主要完成WDT模块的初始化、超时时间设置和超时中断函数,该驱动程序具备以下功能: - -- 模块初始化 -- 超时时间设置 -- 超时中断函数设置 - -相关源文件为: -``` -fwdt - ├── fwdt.c - ├── fwdt.h - ├── fwdt_g.c - ├── fwdt_hw.c - ├── fwdt_hw.h - ├── fwdt_intr.c - └── fwdt_sinit.c -``` - -## 3. 配置方法 - -以下部分将指导您完成 WDT 驱动的软件配置: - -- 配置驱动程序,新建应用工程,使能WDT驱动模块 -- 设置配置参数 -- 设置超时时间 -- 设置超时中断函数喂狗 - -## 4. 应用示例 - - -### [wdt_test](../../../baremetal/example/peripheral/timer/wdt_test/README.md) - - -## 5. API参考 - - -### 5.1. 用户数据结构 - -- drivers/wdt/fwdt/fwdt.h - -- wdt实例配置 - -```c -typedef struct -{ - u32 instance_id;/* wdt id */ - uintptr refresh_base_addr;/* wdt refresh base addr */ - uintptr control_base_addr;/* wdt control base addr */ - u32 irq_num; /* wdt ir num */ - u32 irq_prority;/* wdt irq priority */ - const char *instance_name;/* instance name */ -}FWdtConfig;/* wdt config */ -``` - -### 5.2 错误码定义 - -- FWDT_SUCCESS : success -- FWDT_ERR_INVAL_PARM : invalid input parameters -- FWDT_NOT_READY : driver not ready -- FWDT_NOT_SUPPORT : not support operation -- FWDT_TIMEOUT : wait timeout - -### 5.3. 用户API接口 - -- 获取wdt驱动的默认配置参数 - -```c -const FWdtConfig *FWdtLookupConfig(u32 instance_id); -``` - - Note: - - - 用户需要修改配置参数时,可以通过修改返回的FWdtConfig副本,作为后续使用函数的入参, - - Input: - - - u32 instance_id, 当前控制的WDT控制器实例号 - - Return: - - - const FWdtConfig *, 返回驱动默认参数, NULL表示失败 - - -- 设置wdt超时时间 - -```c -u32 FWdtSetTimeout(FWdtCtrl *pCtrl, u32 timeout); -``` - - Note: - - - 此函数会根据传入的超时时间初始化WDT寄存器; - - WDT两次超时后,才执行系统复位操作;例如希望WDT 6s后复位,则应设置timeout=3; - - Input: - - - FWdtCtrl *pCtrl, WDT驱动实例数据 - - - u32 timeout, 设置的WDT超时时间,最大不超过89 - - Return: - - - u32, 参考5.2章错误码定义 - - -- WDT喂狗函数 - -```c -u32 FWdtRefresh(FWdtCtrl *pCtrl); -``` - - Note: - - - 此函数会刷新wdt寄存器,重新开始计时 - - Input: - - - FWdtCtrl *pCtrl, WDT驱动实例数据 - - Return: - - - u32, 参考5.2章错误码定义 - -- WDT使能函数 - -```c -u32 FWdtStart(FWdtCtrl *pCtrl); -``` - - Note: - - - 此函数会使能wdt - - Input: - - - FWdtCtrl *pCtrl, WDT驱动实例数据 - - Return: - - - u32, 参考5.2章错误码定义 - - -- WDT停止函数 - -```c -u32 FWdtStop(FWdtCtrl *pCtrl); -``` - - Note: - - - 此函数会停止wdt - - Input: - - - FWdtCtrl *pCtrl, WDT驱动实例数据 - - Return: - - - u32, 参考5.2章错误码定义 \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/doc/reference/driver/fxhci.md b/bsp/phytium/libraries/standalone/doc/reference/driver/fxhci.md deleted file mode 100644 index 6be1857604..0000000000 --- a/bsp/phytium/libraries/standalone/doc/reference/driver/fxhci.md +++ /dev/null @@ -1,104 +0,0 @@ -# FXHCI 驱动程序 - -## 1. 概述 - -XHCI,即可扩展的主机控制器接口,是英特尔公司开发的一个USB主机控制器接口,它主要是面向USB 3.0的,同时它也支持USB 2.0及以下的设备,包括所有种类速度的USB设备(USB 3.0 SuperSpeed, USB 2.0 Low-, Full-, and High-speed, USB 1.1 Low- and Full-speed),是UHCI/OHCI/EHCI等接口标准的升级版本 - -XHCI接口架构主要包括三大部分, - -1. 主机配置空间(Host Configuration Space) - -- 每个xHC实现都应包括一种通过系统软件识别和枚举主机控制器的方法。本规范提供了一个主机配置空间的PCI示例,它被称为PCI配置空间。PCI配置空间定义提供了一个关于系统xHC枚举和资源(中断、电源、虚拟化等)的配置空间使用的工作示例 - -2. 寄存器空间(MMIO Space) - -- 寄存器空间表示xHC向驻留在内存地址空间中的系统软件提供的硬件寄存器。寄存器空间提供了在xHCI正常和扩展功能寄存器中定义的实现特定参数、操作和运行时控制和状态寄存器,以及用于标记对单个USB设备的访问的门钟阵列。该空间,通常被称为I/O空间,被实现为内存映射的I/O(MMIO)空间 - -3. 主机空间(Host Memory) - -- 主机空间由控制数据结构(设备上下文基地址阵列、设备上下文、传输环等)定义。以及由xHC驱动程序分配和管理的数据缓冲区,以启用单个设备的端点流量。此空间将在内存地址空间的内核和用户区域中分配 - -## 2. 功能 - -- 驱动相关的源文件如下, - -``` -drivers/usb/fxhci -├── fxhci.c -├── fxhci.h -├── fxhci_cmd.c -├── fxhci_debug.c -├── fxhci_dev.c -├── fxhci_evt.c -├── fxhci_hw.c -├── fxhci_hw.h -├── fxhci_private.h -└── fxhci_roothub.c -``` - -## 3. 配置方法 - -- 1. 通过 PCIe 总线连接或者板载外设, 连接 XHCI 控制器 -- 2. 如果使用 PCIe 总线连接的 XHCI 控制器,先调用 FPCIE 驱动完成设备枚举和 PCIe 配置 -- 3. 初始化 FUSB 驱动,通过 FUSB 驱动框架,初始化 FXHCI 控制器驱动 -- 4. 通过 FUSB 驱动完成控制器和设备初始化 -- 5. 调用 FUSB 轮询接口更新设备状态 - -## 4 应用示例 - -- USB主机操作和USB设备发现 -### [fxhci_host_pcie](../../../baremetal/example/peripheral/usb/fxhci_host_pcie) - -- USB大容量存储器读写 -### [fusb_fatfs](../../../baremetal/example/storage/fusb_fatfs) - -## 5. API参考 - -### 5.1. 用户数据结构 - -无 - -### 5.2 错误码定义 - -- [1] FXHCI_CC_SUCCESS : success -- [-65] FXHCI_CC_TIMEOUT : wait transfer timeout -- [-66] FXHCI_CC_CONTROLLER_ERROR : usb controller in wrong state -- [-67] FXHCI_CC_COMMUNICATION_ERROR : communication error -- [-68] FXHCI_CC_OUT_OF_MEMORY : memory used up -- [-69] FXHCI_CC_DRIVER_ERROR : driver in wrong state -- [-1] FXHCI_CC_GENERAL_ERROR : general error -- [0] FXHCI_CC_ZERO_BYTES : failed, transfer zero bytes - ->下列错误码来自XHCI标准 -- [5] FXHCI_CC_TRB_ERROR : TRB error (XHCI spec.) -- [6] FXHCI_CC_STALL_ERROR : stall error (XHCI spec.) -- [7] FXHCI_CC_RESOURCE_ERROR : resource error (XHCI spec.) -- [8] FXHCI_CC_BANDWIDTH_ERROR : bandwidth error (XHCI spec.) -- [9] FXHCI_CC_NO_SLOTS_AVAILABLE : No available slot error (XHCI spec.) -- [13] FXHCI_CC_SHORT_PACKET : short packet error (XHCI spec.) -- [21] FXHCI_CC_EVENT_RING_FULL_ERROR : event ring full error (XHCI spec.) -- [24] FXHCI_CC_COMMAND_RING_STOPPED : command ring stopped error (XHCI spec.) -- [25] FXHCI_CC_STOPPED : command abort error (XHCI spec.) -- [26] FXHCI_CC_TRB_ERROR : stopped error (XHCI spec.) -- [27] FXHCI_CC_STOPPED_LENGTH_INVALID : stopped invalid length error (XHCI spec.) - -### 5.3. 用户API接口 - -#### FXhciHcInit - -```c -FUsbHc *FXhciHcInit (FUsb *instance, uintptr base_addr) -``` - -Note: - -- 创建XHCI USB 控制器实例,完成初始化 - -Input: - -- {FUsb} *instance, USB实例 -- {uintptr} base_addr, XHCI控制器基地址 - -Return: - -- {FUsbHc *} 类型为XHCI的USB控制器实例 diff --git a/bsp/phytium/libraries/standalone/doc/reference/driver/fxmac.md b/bsp/phytium/libraries/standalone/doc/reference/driver/fxmac.md deleted file mode 100644 index 1c626dc5a4..0000000000 --- a/bsp/phytium/libraries/standalone/doc/reference/driver/fxmac.md +++ /dev/null @@ -1,511 +0,0 @@ - - -# FXMAC 驱动程序 - -## 1. 概述 - -以太网控制器(XMAC)的主要功能是在兼容 IEEE802.3 standard 标准的以太网中发送和接收数据,当前支持 SGMII/RGMII 的 PHY 接口 - -XMAC 接口特点包括 - -- 支持速率 1000Mbps/100Mbps/10Mbps -- 支持 Reduced Gigabit Media Independent Interface (RGMII) -- 支持 SGMII Serial Gigabit Media-Independent Interface (SGMII) - -## 2. 功能 - -XMAC 驱动提供了以太网控制器的初始化,DMA 环形队列使用函数,外部PHY 接口相关的配置功能 - -XMAC 驱动程序的源文件包括, - -``` -. -├── fxmac_bd.h -├── fxmac_bdring.c -├── fxmac_bdring.h -├── fxmac.c -├── fxmac_g.c -├── fxmac.h -├── fxmac_hw.h -├── fxmac_intr.c -├── fxmac_options.c -├── fxmac_phy.c -├── fxmac_phy.h -├── fxmac_sinit.c -├── Kconfig -└── phy - ├── eth_ieee_reg.h - └── yt - ├── phy_yt.c - └── phy_yt.h -``` - -- 其中fxmac.h/fxmac.c 为开发者提供以下功能: - -1. mac 控制器实例初始化 -2. 设置每个控制器实例中4个mac地址的接口 -3. 设置每个控制器实例中4个mac匹配地址的接口 -4. 外置phy 芯片交互接口 -5. 中断相关接口 - -- 其中fxmac_bdring.h/fxmac_bdring.c 为开发者提供了以下功能: - -1. 创建dma 环形队列 -2. 环形队列数据拷贝 -3. 环形队列描述符分配 -4. 环形队列描述符释放 - -## 4 应用示例 - -### [fgmac_lwip_echo](../../../baremetal/example/fgmac_lwip_echo/README.md) - -- 启动LWIP网络协议栈,通过FXMAC驱动,支持开发板和网络主机的ping通 - -### [lwip port](../../../third-party/lwip-2.1.2/ports/fxmac/) - -- fxmac 耦合lwip 功能 - -## 5. API参考 - -### 5.1. 用户数据结构 - -- FXMAC 驱动配置数据 - -```c - typedef struct - { - u32 instance_id; /* Id of device*/ - volatile uintptr_t base_address; - volatile uintptr_t extral_mode_base; - volatile uintptr_t extral_loopback_base; - FXmacPhyInterface interface; /* 接口类型,提供SGMII/RGMII 选择 */ - u32 speed; /* FXMAC_SPEED_XXX */ - u32 duplex; /* 1 is full-duplex , 0 is half-duplex */ - u32 auto_neg; /* Enable auto-negotiation - when set active high, autonegotiation operation is enabled. */ - u32 pclk_hz; - u32 max_queue_num; /* Number of Xmac Controller Queues */ - u32 tx_queue_id; /* 0 ~ FXMAC_QUEUE_MAX_NUM ,Index queue number */ - u32 rx_queue_id; /* 0 ~ FXMAC_QUEUE_MAX_NUM ,Index queue number */ - u32 hotplug_irq_num; - u32 dma_brust_length; /* burst length */ - u32 network_default_config; /* mac 控制器默认配置 */ - u32 queue_irq_num[FXMAC_QUEUE_MAX_NUM]; /* mac0 8个 ,其他的 4个 */ - } FXmacConfig; -``` - -- FGMAC 驱动控制数据 - -```c - typedef struct - { - FXmacConfig config; - u32 is_ready; /* Device is ininitialized and ready*/ - u32 is_started; - u32 link_status; /* indicates link status ,FXMAC_LINKUP is link up ,FXMAC_LINKDOWN is link down,FXMAC_NEGOTIATING is need to negotiating*/ - u32 options; - - FXmacQueue tx_bd_queue; /* Transmit Queue */ - FXmacQueue rx_bd_queue; /* Receive Queue */ - - FXmacIrqHandler send_irq_handler; - void *send_args; - - FXmacIrqHandler recv_irq_handler; - void *recv_args; - - FXmacErrorIrqHandler error_irq_handler; - void *error_args; - - FXmacIrqHandler link_change_handler; - void *link_change_args; - - FXmacIrqHandler restart_handler; - void *restart_args; - - u32 moudle_id; /* Module identification number */ - u32 max_mtu_size; - u32 max_frame_size; - - u32 phy_address; /* phy address */ - u32 rxbuf_mask; /* Filter length */ /* 1000,100,10 */ - - } FXmac; -``` - -- FGMAC DMA描述符 - -```c - typedef struct - { - uintptr phys_base_addr; /* Physical address of 1st BD in list */ - uintptr base_bd_addr; /* Virtual address of 1st BD in list */ - uintptr high_bd_addr; /* Virtual address of last BD in the list */ - u32 length; /* Total size of ring in bytes */ - u32 run_state; /* Flag to indicate DMA is started */ - u32 separation; /* Number of bytes between the starting address - of adjacent BDs */ - FXmacBd *free_head; - /* First BD in the free group */ - FXmacBd *pre_head; /* First BD in the pre-work group */ - FXmacBd *hw_head; /* First BD in the work group */ - FXmacBd *hw_tail; /* Last BD in the work group */ - FXmacBd *post_head; - /* First BD in the post-work group */ - FXmacBd *bda_restart; - /* BDA to load when channel is started */ - - volatile u32 hw_cnt; /* Number of BDs in work group */ - u32 pre_cnt; /* Number of BDs in pre-work group */ - u32 free_cnt; /* Number of allocatable BDs in the free group */ - u32 post_cnt; /* Number of BDs in post-work group */ - u32 all_cnt; /* Total Number of BDs for channel */ - } FXmacBdRing; -``` - -- FGMAC DMA描述符表(链式)相关数据 - -```c -typedef struct -{ - u32 desc_idx; /* For Current Desc position */ - u32 desc_buf_idx; /* For Current Desc buffer buf position */ - u32 desc_max_num; /* Max Number for Desc and Desc buffer */ - u8 *desc_buf_base; /* Desc buffer Base */ -} FGmacRingDescData; -``` - -- NOTE: - E2000 系列CPU 需要在参数表中增加 FXMAC_CLK_TYPE_0 - -### 5.2 错误码定义 - -- 模块错误码编号:0x1070000 -- [0x0] FGMAC: Success -- FXMAC_ERR_INVALID_PARAM : Invalid parameter -- FXMAC_ERR_SG_LIST : dma ring out of sequence -- FXMAC_ERR_GENERAL :the number of BDs to allocate greater that the number of BDs in the preprocessing state. -- FXMAC_ERR_SG_NO_LIST : dma ring is not allocated -- FXMAC_ERR_PHY_BUSY : if there is another PHY operation in progress -- FXMAC_PHY_IS_NOT_FOUND : phy is not found -- FXMAC_PHY_AUTO_AUTONEGOTIATION_FAILED : PHY autonegotiation is error -- FXMAC_ERR_MAC_IS_PROCESSING : MAC controllers are enabled together. As a result, some operations cannot be mirrored - -### 5.3 初始化流程 - -1. FXmacLookupConfig 获取默认配置 -2. 修改默认配置 中 phy interface 类型、协商模式 -3. 初始化mac 模块 -4. 初始化phy 模块 -5. 初始化mac 中断 -6. 初始化dma 模块 -7. 根据mac 默认配置启动mac 功能 - -### 5.4. 用户API接口 - -#### FXmacLookupConfig - -- 获取FXMAC驱动的默认配置参数 - -```c -const FXmacConfig *FXmacLookupConfig(u32 instance_id); -``` - -Note: - -- 返回FXMAC的默认配置,复制后修改配置 -- 需要确认当前平台支持输入的instance_id - -Input: - -- {u32} instance_id, 驱动控制器号 - -Return: - -- {const FXmacConfig *}, 驱动默认配置 - -#### FXmacCfgInitialize - -- 完成FGMAC驱动实例的初始化,使之可以使用 - -```c -FError FXmacCfgInitialize(FXmac *instance_p, const FXmacConfig *config_p) -``` - -Note: - -- 此函数会重置FGMAC控制器和FGMAC控制数据 - -Input: - -- {FXmac} *instance_p MAC 控制器实例指针 -- {FXmacConfig} *cofig_p 控制器驱动配置数据 - -Return: - -- {FError} 驱动初始化的错误码信息,FGMAC_SUCCESS 表示初始化成功,其它返回值表示初始化失败 - -#### FXmacInitInterface - -- 根据phy 接口类型 ,初始化mac 控制器配置 - -```c -void FXmacInitInterface(FXmac *instance_p) -``` - -Note: - -- 此函数一般用于 PHY 芯片协商完成之后被调用,与PHY配置进行适配 - -Input: - -- {FXmac} *instance_p MAC 控制器实例指针 - -#### FXmacGetMacAddress - -- 根据index 获取mac 地址 - -```c -void FXmacGetMacAddress(FXmac *instance_p, u8 *address_ptr, u8 index) -``` - -Input : - -- {FGmac} *instance_p MAC 控制器实例指针 -- {u8} index MAC(0-3)地址的索引 - -Output : - -- {u8} *address_ptr 是指向缓冲区的指针当前MAC地址将被复制。 - -#### FXmacSetMacAddress - -- 根据index 写入mac 地址 - -```c -FError FXmacSetMacAddress(FXmac *instance_p, u8 *address_ptr, u8 index); -``` - -Input : - -- {FGmac} *instance_p MAC 控制器实例指针 -- {u8} *address_ptr 是指向缓冲区的指针当前MAC地址将被复制。 -- {u8} index MAC(0-3)地址的索引 - -Output : - -- {FError} FT_SUCCESS 如果MAC地址设置成功 - -#### FXmacSetOptions - -- 设置FXmac 中的相关配置信息 - -```c -FError FXmacSetOptions(FXmac *instance_p, u32 options, u32 queue_num) -``` - -Note: - -- 必须在mac 控制器关闭的情况被调用 - -Input: - -- {FGmac} *instance_p MAC 控制器实例指针 -- {u32} options 是要设置的选项。 选项参数位于 fxmac.h 中的 FXMAC_****_OPTION -- {u32} queue_num mac控制器中队列的选项,仅在 FXMAC_JUMBO_ENABLE_OPTION 配置时被使用 - -Return: - -- {FError} FT_SUCCESS 设置成功 - -#### FXmacClearOptions - -- 清除FXmac 中的相关配置信息 - -```c -FError FXmacClearOptions(FXmac *instance_p, u32 options, u32 queue_num) -``` - -Note: - -- 必须在mac 控制器关闭的情况被调用 - -Input: - -- {FGmac} *instance_p MAC 控制器实例指针 -- {u32} options 是要设置的选项。 选项参数位于 fxmac.h 中的 FXMAC_****_OPTION -- {u32} queue_num mac控制器中队列的选项,仅在 FXMAC_JUMBO_ENABLE_OPTION 配置时被使用 - -Return: - -- {FError} FT_SUCCESS 清除成功 - -#### FXmacStart - -- 启动以太网控制器 - -```c -void FXmacStart(FXmac *instance_p) -``` - -note: - -- 根据 network_default_config 中的 FXMAC_TRANSMIT_ENABLE_OPTION 与 - FXMAC_RECEIVER_ENABLE_OPTION ,决定是否开启控制器的接收与发送功能。并且默认开启接收与发送相关中断 - -Input: - -- {FGmac} *instance_p MAC 控制器实例指针 - -#### FXmacStop - -- 关闭以太网控制器 - -```c -void FXmacStop(FXmac *instance_p) -``` - -note: - -- 关闭所有中断,关闭接收与发送功能 - -Input: - -- {FGmac} *instance_p MAC 控制器实例指针 - -#### FXmacSetQueuePtr - -- 设置mac 控制器中接收/发送缓冲区 的描述符环形队列的首地址 - -```c -void FXmacSetQueuePtr(FXmac *instance_p, uintptr queue_p, u8 queue_num, - u32 direction) -``` - -Note: - -- 描述符环形队列的首地址按照128bit 对其 - -Input: - -- {FXmac} *instance_p MAC 控制器实例指针 -- {uintptr} queue_p 写入队列的地址 -- {u8} queue_num 缓冲队列索引 -- {u32} direction 当为 FXMAC_SEND 表示方向为发送,当为 FXMAC_RECV 表示方向为接收 - -#### FXmacPhyWrite - -- 将数据写入指定的PHY寄存器。 - -```c -FError FXmacPhyWrite(FXmac *instance_p, u32 phy_address, - u32 register_num, u16 phy_data) -``` - -Note: - -- 这个函数不是线程安全的。 用户必须提供互斥的如果有多个线程可以调用该函数,则访问该函数。 - -Input: - -- {FXmac} *instance_p MAC 控制器实例指针 -- {u32} phy_address 要写入的PHY的地址 -- {u32} register_num 要写入的PHY的地址,特定PHY寄存器的寄存器号0-31 -- {u16} phy_data 需要写入对应PHY 芯片中 对应register_num 的参数 - -Return: - -- {FError} FT_SUCCESS PHY 写入成功 - -#### FXmacPhyRead - -- 指定PHY 芯片中对应的寄存器号,读出其中对应的参数 - -```c -FError FXmacPhyRead(FXmac *instance_p, u32 phy_address, - u32 register_num, u16 *phydat_aptr) -``` - -Note: - -- 这个函数不是线程安全的。 用户必须提供互斥的如果有多个线程可以调用该函数,则访问该函数。 - -Input: - -- {FXmac} *instance_p MAC 控制器实例指针 -- {u32} phy_address 要写入的PHY的地址 -- {u32} register_num 要写入的PHY的地址,特定PHY寄存器的寄存器号0-31 - -Output: - -- {u16} *phydat_aptr 需要读出对应PHY 芯片中 对应register_num中值的指针 - -Return: - -- {FError} FT_SUCCESS PHY 读入成功 - -#### FXmacPhyInit - -- 初始化PHY 芯片 ,首先检查出当前已连接的PHY 芯片地址,然后根据协商方式,确定 - -```c -FError FXmacPhyInit(FXmac *instance_p, u32 speed,u32 duplex_mode, u32 autonegotiation_en); -``` - -Input: - -- {FXmac} *instance_p MAC 控制器实例指针 -- {u32} speed 需要设置的速度 -- {u32} duplex_mode 双工模式配置,1为全双工,0 为半双工 -- {u32} autonegotiation_en 为1 时,PHY 会进行自协商操作。为0时 ,将根据配置项进行协商 - -Return: - -- FError FT_SUCCESS 初始化成功 - -#### FXmacSelectClk - -- 根据MAC 与 PHY 芯片连接的情况,设置相关时钟参数 - -```c -void FXmacSelectClk(FXmac *instance_p ) -``` - -Input: - -- {FXmac} *instance_p MAC 控制器实例指针 - -#### FXmacSetHandler - -- 设置中断回调函数 - -```c -FError FXmacSetHandler(FXmac *instance_p, u32 handler_type, void *func_pointer, void *call_back_ref) -``` - -Input: - -- {FXmac} *instance_p MAC 控制器实例指针 -- {u32} handler_type 指示中断处理程序类型 ,具体参数参考 FXMAC_HANDLER_*** -- {void } *func_pointer 回调函数接口 -- {void } *call_back_ref 回调函数的传入参数 diff --git a/bsp/phytium/libraries/standalone/doc/reference/driver/sfud.md b/bsp/phytium/libraries/standalone/doc/reference/driver/sfud.md deleted file mode 100644 index 1d4d042466..0000000000 --- a/bsp/phytium/libraries/standalone/doc/reference/driver/sfud.md +++ /dev/null @@ -1,42 +0,0 @@ -# SFUD 驱动框架 - -## 1. 概述 - - -- [SFUD Gitee](https://gitee.com/Armink/SFUD) -- SFUD 是一款开源的串行 SPI Flash 通用驱动库 - -## 2. 功能 - -- third-party/sfud-1.1.0 -- 目前SFUD框架实现对接FSPIM驱动的对接,用于读写SPI Flash -``` -├── Kconfig -├── inc -│   ├── sfud.h -│   ├── sfud_cfg.h -│   ├── sfud_def.h -│   └── sfud_flash_def.h -├── library.json -├── ports -│   └── f_spim -│   └── sfud_port.c -└── src - ├── sfud.c - └── sfud_sfdp.c -``` - -## 3. 配置方法 - -- 使能 CONFIG_USE_SFUD 配置 -- 选择底层的SPI驱动,如CONFIG_USE_FSPIM -- 调用 SFUD 提供的 API 读写 SPI 从设备 - -## 4 应用示例 - -### [fspim_nor_flash](../../../baremetal/example/fspim_nor_flash/README.md) - -## 4. API参考 - -- sfud.h 和 sfud_port.c 是主要需要对接的源文件 -- 参考[SFUD API指南](https://gitee.com/Armink/SFUD/) \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/doc/reference/driver/template.md b/bsp/phytium/libraries/standalone/doc/reference/driver/template.md deleted file mode 100644 index 37a6cf3ec8..0000000000 --- a/bsp/phytium/libraries/standalone/doc/reference/driver/template.md +++ /dev/null @@ -1,22 +0,0 @@ -# XX 驱动程序 - -## 1. 概述 - -`XX的基本概念, XX驱动支持的硬件平台` - -## 2. 功能 - -`XX驱动程序支持的功能,关联的源文件` - -## 3. 配置方法 - -`XX驱动使用的一般过程和方法` -`XX驱动的配置方法和参数设置` - -## 4 应用示例 - -`XX驱动的example使用` - -## 5. API参考 - -`XX驱动用户API说明` \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/doc/reference/driver/timer_tacho.md b/bsp/phytium/libraries/standalone/doc/reference/driver/timer_tacho.md deleted file mode 100644 index 5941cf2064..0000000000 --- a/bsp/phytium/libraries/standalone/doc/reference/driver/timer_tacho.md +++ /dev/null @@ -1,454 +0,0 @@ -# TIMER_TACHO 驱动程序 - -## 1. 概述 - - -- TIMER_TACHO包含了2种功能,定时器和输入捕获。其中定时计数作为通用定时器供软件使用,输入捕获功能主要用来测试输入方波的高电平持续时间,该方波是由风扇设备设备发出,通过PAD直接连接到控制器模块输入端。 -- 对于定时功能,有若干可配置参数,例如产生中断次数,是否对当前计数值进行清空,是否使能计数器,计数器位宽选择(32/64),或者是restart/free模式,以及当进行了初值配置是否需要强制更新,以及可以通过配置寄存器对控制器模块进行复位操作。 -- 对于输入捕获,控制器模块设置了上下阈值,也就是当捕获到的高电平时间低于或者高于阈值都会发出中断(此时分别对应风扇不同的故障)。同时对输入信号进行消抖处理,也可以对消抖级数进行配置。 -- 本驱动程序提供了E2000(D、Q、S)平台的定时器和输入捕获功能 -- E2000(D、Q、S)上包含了38个定时器控制器,(D、Q)上包含了4个tacho输入捕获接口,(S)上包含了16个输入捕获接口 - -## 2. 功能 - -- 驱动相关的源文件如下: -- drivers/timer/ftimer_tacho - -``` -. -├── ftacho.c --> 转速计功能实现 -├── ftimer_tacho_g.c --> 相关配置和全局变量 -├── ftimer_tacho_hw.h --> 寄存器操作 -├── ftimer_tacho_intr.c --> 中断相关处理 -├── ftimer_tacho.h --> 用户接口 -└── ftimer.c --> 定时器功能实现 -``` - -## 3. 配置方法 - -以下部分将指导您完成ftimer_tacho驱动的软件配置: - -- 初始化timer_tacho控制器,使用timer功能还是tacho功能 -- 分别配置两个功能的参数,配置使用timer功能的id,定时时间,计数方式等;配置使用tacho功能的id,阈值,输入消抖级数等。 -- 注册中断处理函数,使能中断 - -## 4. 应用示例 - -### [timer定时器](../../../baremetal/example/peripheral/timer/timer_tacho/README.md) - -#### timer -- FTimerFunctionInit 获取cmd传递进来的最基本参数 -- FTimerCfgInit 对传递的参数以及默认参数进行配置,并启动中断 -- FTimerStartTest 定时器开始工作,如果是单次计时,则可以传递新的参数并计时,循环模式则仅仅进行启动 -- 在中断中进行回调 - -#### tacho -- FTachoFunctionInit 获取cmd传递进来的参数,使用计时器的id以及工作模式 -- FTachoCfgInit 配置工作参数 -- TachoEnableIntr 启用事件中断 -- FTimerStart tacho开始工作 -- FTachoGetRPM 可以获取RPM参数了 - -#### timer与tacho的切换 -- 注意需要对定时器控制器进行disable,可以调用各自的F****DeInit函数,也可以FTimerSwithMode进行操作 - -## 5. API参考 - -### 5.1 用户数据结构 - -- ftimer_tacho控制数据 - -```c -typedef struct -{ - FTimerTachoConfig config; /* Current active configs */ - boolean isready; /* Device is initialized and ready */ - FTimerEventHandler evt_handlers[FMAX_TIMER_TACHO_EVENT];/* event handler for interrupt */ -}FTimerTachoCtrl; -``` - -- ftimer_tacho配置数据 - -```c -typedef struct -{ - u32 id; /* id of timer tacho */ - char name[12]; /* instance name */ - u32 irq_priority; /* intr priority */ - u32 work_mode; /* timer/tacho/capture mode */ - /* for timer function */ - u32 timer_mode; /* free-run/restart */ - u32 timer_bits; /* 32/64 bits */ - u32 cmp_type; /* once/cycle cmp */ - boolean clear_cnt; /* clear timer counts */ - boolean force_load; /* start count from start val */ - /* for tacho function */ - u32 edge_mode; /* rising/falling/double */ - u32 jitter_level; /* jitter level */ - u32 plus_num; /* plus_num of period to calculate rpm */ - u32 captue_cnt; /* in capture mode, when cnt reach this val, intr asserted */ -}FTimerTachoConfig; -``` - -- ftimer_tacho工作模式 -```c -typedef enum -{ - /*TimerTacho mode */ - FTIMER_WORK_MODE_TIMER = 0, - FTIMER_WORK_MODE_TACHO, - FTIMER_WORK_MODE_CAPTURE -}FTimerTachoModeType; -``` - -- timer计数模式 -```c -typedef enum -{ - /*Timer count mode*/ - FTIMER_FREE_RUN = 0, - FTIMER_RESTART -}FTimerCntModeType; -``` - -- ftimer_tacho中断事件类型 -```c -typedef enum -{ - FTACHO_EVENT_OVER = 0, /*tacho超速事件*/ - FTACHO_EVENT_UNDER, /*tacho低速事件*/ - FTIMER_EVENT_ROLL_OVER, /*计数器翻转事件*/ - FTIMER_EVENT_ONCE_CMP, /*单次定时输出事件*/ - FTIMER_EVENT_CYC_CMP, /*重复定时输出事件*/ - FTACHO_EVENT_CAPTURE, /*tacho输入捕获事件*/ - - FMAX_TIMER_TACHO_EVENT -}FTimerTachoEventType; -``` - -- tacho输入模式选择 -```c -typedef enum -{ - FTACHO_FALLING_EDGE = 0, - FTACHO_RISING_EDGE, - FTACHO_DOUBLE_EDGE -}FTachoEdgeType; -``` - -- tacho消抖级数选择 -```c -typedef enum -{ - FTACHO_JITTER_LEVEL0 = 0, - FTACHO_JITTER_LEVEL1, - FTACHO_JITTER_LEVEL2, - FTACHO_JITTER_LEVEL3, -}FTachoJitterLevelType; -``` - -### 5.2 错误码定义 - -- FTIMER_TACHO_ERR_IS_READ 已经初始化 -- FTIMER_TACHO_ERR_NOT_READY 未初始化 -- FTIMER_TACHO_ERR_INVAL_PARM 参数错误 -- FTIMER_TACHO_ERR_INIT_FAILED 初始化错误 -- FTIMER_TACHO_ERR_ABORT 运行中止 -- FTIMER_TACHO_ERR_FAILED 运行错误 -- FTIMER_TACHO_ERR_NOT_SUPPORT 不支持此配置 - -### 5.3 用户API接口 - -#### Time & Tacho API - -##### FTimerSoftwareReset - -- 将控制器复位 - -```c -FError FTimerSoftwareReset(FTimerTachoCtrl *instance_p); -``` - -Note: - -- 复位控制器 - -Input: - -- {FTimerTachoCtrl} *instance_p,timer_tacho驱动控制数据 - -Return: - -- {FError} 驱动的错误码信息 - -##### FTimerSetInterruptMask - -- 设置中断 - -```c -void FTimerSetInterruptMask(FTimerTachoCtrl *instance_p, - FTimerTachoEventType intrType, - boolean enable); -``` - -Note: - -- 设置中断,根据不同的intrType,将对于的中断mask置位 - -Input: - -- {FTimerTachoCtrl} *instance_p,timer_tacho驱动控制数据 -- {FTimerTachoEventType} intrType,timer_tacho中断类型 -- {boolean} enable,开启还是关闭中断 - -Return: - -- void 无 - -##### FTimerStart - -- 启动timer_tacho - -```c -FError FTimerStart(FTimerTachoCtrl *instance_p); -``` - -Note: - -- 启动已经初始化完成的timer_tacho外设,根据不同的功能,开启使能位 - -Input: - -- {FTimerTachoCtrl} *instance_p,timer_tacho驱动控制数据 - -Return: - -- {FError} 驱动的错误码信息 - -##### FTimerStop - -- 停止timer外设 - -```c -FError FTimerStop(FTimerTachoCtrl *instance_p); -``` - -Note: - -- 停止timer外设,根据不同的功能,关闭使能位,计数值停止并冻结 - -Input: - -- {FTimerTachoCtrl} *instance_p,timer_tacho驱动控制数据 - -Return: - -- {FError} 驱动的错误码信息 - -##### FTimerSwithMode - -- timer 与 tacho-capture两种模式的切换 - -```c -FError FTimerSwithMode(FTimerTachoCtrl *instance_p, FTimerTachoConfig *new_config_p); -``` - -Note: - -- 用于timer 与 tacho-capture两种模式的切换,切换需要失能和清除计数器 - -Input: - -- {FTimerTachoCtrl} *instance_p,timer_tacho驱动控制数据 -- {FTimerTachoConfig} *new_config_p,timer_tacho配置数据 - -Return: - -- {FError} 驱动的错误码信息 - -##### FTimerRegisterEvtCallback - -- 注册中断事件处理回调函数 - -```c -void FTimerRegisterEvtCallback(FTimerTachoCtrl *instance_p, - FTimerTachoEventType evt, - FTimerEventHandler callback); -``` - -Note: - -- 注册中断事件处理回调函数,根据不同的中断事件类型,当发生中断后,会跳转到注册的函数中 - -Input: - -- {FTimerTachoCtrl} *instance_p,timer_tacho驱动控制数据 -- {FTimerTachoEventType} evt,中断事件类型 -- {FTimerEventHandler} callback,用户自己定义的中断回调函数 - -Return: - -- void 无 - -##### FTimeSettingDump - -- 打印寄存器信息 - -```c -FError FTimeSettingDump(const FTimerTachoCtrl *instance_p); -``` - -Note: - -- 打印已经初始化成功的timer_tacho控制器寄存器信息 - -Input: - -- {FTimerTachoCtrl} *instance_p,timer_tacho驱动控制数据 - -Return: - -- {FError} 驱动的错误码信息 - -##### FTimerTachoIntrHandler - -- TimerTacho中断处理函数 - -```c -void FTimerTachoIntrHandler(s32 vector, void *param); -``` - -Note: - -- TimerTacho中断处理函数,如果注册回调函数,则跳转到回调函数 - -Input: - -- {s32} vector,中断向量号 -- {void} *param, 中断输入参数, 指向FTimerTachoCtrl的驱动控制实例 - -Return: - -- void 无 - -##### FTimerTachoSetIntr - -- 根据工作模式和状态设置相应的中断 - -```c -void FTimerTachoSetIntr(FTimerTachoCtrl *instance_p); -``` - -Note: - -- 根据工作模式和状态设置相应的中断,此函数根据设置的模式自动配置中断,特殊需求可更改 - -Input: - -- {FTimerTachoCtrl} *instance_p,timer_tacho驱动控制数据 - -Return: - -- void 无 - -##### FTimerInit - -- TimerTacho驱动实例的初始化 - -```c -FError FTimerInit(FTimerTachoCtrl *instance_p, const FTimerTachoConfig *config_p); -``` - -Note: - -- 完成TimerTacho驱动实例的初始化,使之在就绪状态,配合FTimerStart使用 - -Input: - -- {FTimerTachoCtrl} *instance_p,timer_tacho驱动控制数据 -- {FTimerTachoConfig} *config_p,timer_tacho配置数据 - -Return: - -- {FError} 驱动的错误码信息 - -##### FTimerDeInit - -- Timer驱动实例去使能,清零实例数据 - -```c -void FTimerDeInit(FTimerTachoCtrl *instance_p); -``` - -Note: - -- 对已经完成初始化的实例,进行Timer驱动实例去使能,清零实例数据 - -Input: - -- {FTimerTachoCtrl} *instance_p,timer_tacho驱动控制数据 - -Return: - -- void 无 - -##### FTachoInit - -- 完成Tacho驱动实例的初始化 - -```c -FError FTachoInit(FTimerTachoCtrl *instance_p, const FTimerTachoConfig *config_p); -``` - -Note: - -- 完成Tacho驱动实例的初始化,使之在就绪状态 - -Input: - -- {FTimerTachoCtrl} *instance_p,timer_tacho驱动控制数据 - -Return: - -- void 无 - -##### FTachoGetFanRPM - -- 获取风扇的转速值 - -```c -FError FTachoGetFanRPM(FTimerTachoCtrl *instance_p,u32 *rpm); -``` - -Note: - -- 根据预设采样周期的值,来获取风扇的转速值 - -Input: - -- {FTimerTachoCtrl} *instance_p,timer_tacho驱动控制数据 -- {u32} *rpm,传入保存转数数据的指针 - -Return: - -- {FError} 驱动的错误码信息 - -##### FTachoDeInit - -- Tacho驱动实例去使能,清零实例数据 - -```c -void FTachoDeInit(FTimerTachoCtrl *instance_p); -``` - -Note: - -- 完成Tacho驱动实例去使能,清零实例数据 - -Input: - -- {FTimerTachoCtrl} *instance_p,timer_tacho驱动控制数据 - -Return: - -- void 无 diff --git a/bsp/phytium/libraries/standalone/doc/reference/hw/template.md b/bsp/phytium/libraries/standalone/doc/reference/hw/template.md deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/bsp/phytium/libraries/standalone/doc/reference/sdk/flwip_port.md b/bsp/phytium/libraries/standalone/doc/reference/sdk/flwip_port.md deleted file mode 100644 index c358fc95c5..0000000000 --- a/bsp/phytium/libraries/standalone/doc/reference/sdk/flwip_port.md +++ /dev/null @@ -1,205 +0,0 @@ - -# Lwip Port - -## 1. 概述 - -Lwip Port为开发者提供了一系列接口,驱动开发者在完成GMAC/XMAC 驱动之后,只需根据lwip要求的接口,将驱动内容填入,即可完成lwip port适配层功能。lwip port 会在初始化阶段,初始化协议栈,并且会根据用户传入的配置参数,并初始化netif参数。 - -## 2. 功能 - -1. 为开发者提供lwip功能与mac控制驱动耦合的相关接口 -2. 统一后续mac控制器接入lwip 协议栈的方式 -3. 简化mac 控制器适配lwip 的难度 -4. 统一不同mac 控制器下应用程序 -5. 提供上层用户配置mac 控制器的统一接口 -6. 管理mac 控制器的状态(phy link status) -7. 管理lwip 中link up/down 状态 -8. 提供多网卡检索功能 -9. 提供巨帧模式使能 -10.提供轮询模式接收数据包使能 - -相关源文件为: -``` -lwip_port - ├── lwip_port.c - └── lwip_port.h -``` - - -## 3. 配置方法 - -默认配置已经保存在config中,用户可根据实际需要自行扩展,该部分操作参考readme即可 - -## 4. 应用示例 - -### [lwip port](../../../baremetal/example/network/lwip_startup/) - -## 5. API参考 - -### 5.1. 用户数据结构 - -- lwip_port.h - -```c -typedef struct -{ - u32 magic_code; /* LWIP_PORT_CONFIG_MAGIC_CODE */ - char name[2]; /* Used to name netif */ - u32 driver_type; /* driver type */ - u32 mac_instance; /* mac controler id */ - u32 mii_interface; /* LWIP_PORT_INTERFACE_XXX */ - u32 autonegotiation; /* 1 is autonegotiation ,0 is manually set */ - u32 phy_speed; /* LWIP_PORT_SPEED_XXX */ - u32 phy_duplex; /* 1 is LWIP_PORT_FULL_DUPLEX,0 is LWIP_PORT_HALF_DUPLE*/ -} UserConfig; /*用户初始化配置数据 */ - -typedef struct -{ - void (*eth_input)(struct netif *netif); - enum lwip_port_link_status (*eth_detect)(struct netif *netif); - void (*eth_deinit)(struct netif *netif); - void (*eth_start)(struct netif *netif); - void (*eth_poll)(struct netif *netif); -} LwipPortOps; /* lwip port 网卡注册函数*/ - -struct LwipPort { - void *state; /* mac controler */ - LwipPortOps ops; -}; /*lwip port控制数据 */ -``` - -### 5.2 错误码定义 -无 -### 5.3. 用户API接口 - -#### LwipPortAdd -- 作为 lwip 的netif_add 的一个封装,开发者可以通过此接口对不同mac 控制器进行初始化 - -```c -struct netif * LwipPortAdd(struct netif *netif, -ip_addr_t *ipaddr, ip_addr_t *netmask, ip_addr_t *gw, -unsigned char *mac_ethernet_address, -UserConfig *user_config, u32 dhcp_en); -``` - -Note: - -- begin_addr end_addr 指向为内存池指定的缓冲区的起止地址 - -Input: - -- {struct netif } *netif, 需要初始化的网卡对象 -- {ip_addr_t} *ipaddr, 分配给网卡的IP初始地址 -- {ip_addr_t} *netmask, 分配给掩码的IP初始地址 -- {ip_addr_t} *gw, 分配给网关的IP初始地址 -- {unsigned char } *mac_ethernet_address, 分配给网卡的mac初始地址 -- {UserConfig} *user_config, 网卡初始化所需要的用户配置数据 -- {u32} dhcp_en, 网卡是否使用dhcp服务控制数据 -Return: - -- {struct netif *} 返回初始化成功的netif网卡对象,返回NULL表示初始化失败 - -#### LwipPortInput - -- lwip协议栈获取驱动数据包的接口,客户可以使用此接口在裸跑中运行lwip 协议栈 - -```c -void LwipPortInput(struct netif *netif) -``` - -Note: - -- 需要初始化后才能调用,调用此函数后,lwip会获取网卡收到的数据包并进行处理 - -Input: - -- {struct netif } *netif 已经实例化的网卡netif - -Return: - -- 无 - -#### LwipPortStop - -- 使用此接口可以达到两个目标: -1. 关闭当前mac 控制器工作状态 -2. 将netif 移除lwip 协议栈 - - -```c -void LwipPortStop(struct netif *netif); -``` - -Note: - -- 需要初始化后才能调用,调用该函数后,网卡将停止功能,若想继续工作需要重新进行网卡初始化 - -Input: - -- {struct netif } *netif 已经实例化的网卡netif - -Return: - -- 无 -#### LwipPortGetByName - -- 通过netif名字找到netif对象 - -```c -struct netif* LwipPortGetByName(const char *name); -``` - -Note: - -- 需要初始化后才能调用,调用该函数将在已经初始化的netif链表中寻找name字段相对应的netif,并返回该netif - -Input: - -- {const char} *name 网卡名字 - -Return: - -- {struct netif*} 寻找到的netif对象,如果未找到返回NULL - -#### LwipPortDhcpSet - -- 网卡dhcp控制 - -```c -void LwipPortDhcpSet(struct netif *netif, boolean is_enabled); -``` - -Note: - -- 需要初始化后才能调用,调用该函数可以打开或关闭网卡的dhcp服务 - -Input: - -- {struct netif} *netif 网卡对象 -- {boolean} is_enabled DHCP使能控制参数 - - -Return: - -- 无 - - -#### LwipEthProcessLoop - -- 网卡接收数据包底层处理 - -```c -void LwipEthProcessLoop(struct netif *netif); -``` - -Note: - -- 在main函数中循环调用,轮询处理到来的网络数据包 - -Input: - -- {struct netif} *netif 网卡对象 - -Return: - -- 无 \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/doc/reference/sdk/fmemory_pool.md b/bsp/phytium/libraries/standalone/doc/reference/sdk/fmemory_pool.md deleted file mode 100644 index 3af23ce41b..0000000000 --- a/bsp/phytium/libraries/standalone/doc/reference/sdk/fmemory_pool.md +++ /dev/null @@ -1,279 +0,0 @@ - -# Memory pool - -## 1. 概述 - -内存池 (Memory Pool)是一种内存分配方式,是为了减少频繁使用 malloc/free new/delete 等系统调用而造成的性能损耗而设计的,具有效率高、内存碎片少和防止内存泄漏等特性。内存池根据实际需要,在初始状态获取一大块内存(堆区或者静态内存),然后划分成若干内存页,进行管理,将内存页中的块传递给申请者使用。SDK中采用TLSF内存分配器管理,专门设计用于满足实时要求。 - -TLSF (Two-Level Segregated Fit memory allocator), 是一款通用的动态内存分配器,具有以下特点, - -- malloc,free,realloc,memalign的算法复杂度变为O(1) -- 每次分配的开销极低(4字节) -- 低碎片化 -- 支持动态添加和删除内存池区域 - -TLSF主要采用两级位图(Two-Level Bitmap)与分级空闲块链表(Segregated Free List)的数据结构管理动态内存池(memory pool)以及其中的空闲块(free blocks),用Good-Fit的策略进行分配。 - -TLSF算法分配速度不一定快,只是说能保证分配的时间是个常数(malloc不能保证)。 - -TLSF也叫多内存堆管理算法,支持动态增加或者删除多块不连续的内存,将它们作为一个内存堆使用。 - -## 2. 功能 - -FMemory Pool主要完成内存池的初始化,为用户提供多种内存申请方法,支持内存池的使用情况监测, -- 初始化内存池 -- 删除内存池 -- 申请一段空间(不要求对齐) -- 按指定字节数申请一段对齐的内存 -- 申请一段数组,返回被清零的空间 -- 回收原来申请的空间并重新分配 -- 跟踪当前内存池的使用情况 - -相关源文件为: -``` -fmempory_pool - ├── fmempory_pool.c - └── fmempory_pool.h -``` - -``` -tlsf - ├── tlsf.c - └── tlsf.h -``` - -## 3. 配置方法 - -以下部分将指导您完成 FMemory Pool 的软件配置: -- 使能TLSF组件 - -## 4. 应用示例 - -### [memory pool](../../../baremetal/example/system/memory_pool_test) - -## 5. API参考 - -### 5.1. 用户数据结构 - -- common/fmempory_pool.h - -```c -typedef struct -{ - pool_t pool_addr; - FSListNode list; -} FMempPoolList; /* 内存池控制数据 */ - -typedef struct -{ - FMempPoolList *pools_list; /* 内存池链表 */ - tlsf_t tlsf_ptr; /* tlsf内存池 */ - u32 is_ready; /* 内存池初始化完成标志 */ -} FMemp; /* 内存池控制数据 */ -``` - -### 5.2 错误码定义 - -- 模块错误码编号 `0x0010000` - -- [0x0] FMEMP_SUCCESS : success - -- [0x0010000] FMEMP_ERR_INVALID_BUF : 输入的内存池缓存区不合法 - -- [0x0010001] FMEMP_ERR_INIT_TLFS : 初始化TLFS内存池失败 - -- [0x0010002] FMEMP_ERR_BAD_MALLOC : 从TLFS内存池分配空间失败 - -### 5.3. 用户API接口 - -#### FMempInit -- 初始化内存池, 分配内存池的内存空间 - -```c -FError FMempInit(FMemp *memp, void *begin_addr, void *end_addr); -``` - -Note: - -- begin_addr end_addr 指向为内存池指定的缓冲区的起止地址 - -Input: - -- {FMemp} *memp, 内存池的控制数据 -- {void} *begin_addr, 分配给内存池的空间起始地址 -- {void} *end_addr, 分配给内存池的空间结束地址 - -Return: - -- {FError} FMEMP_SUCCESS表示初始化成功,返回其它值表示初始化失败 - -#### FMempRemove - -- 释放所有分配的内存,删除内存池 - -```c -void FMempRemove(FMemp *memp); -``` - -Note: - -- 需要初始化后才能调用,调用此函数后,内存池分配的空间不再能使用 - -Input: - -- {FMemp} *memp 内存池控制数据 - -Return: - -- 无 - -#### FMempMalloc - -- 从内存池申请一段空间 - -```c -void *FMempMalloc(FMemp *memp, fsize_t nbytes); -``` - -Note: - -- 需要初始化后才能调用,申请的空间再不再使用后需要调用FMempFree释放 - -Input: - -- {FMemp} *memp 内存池控制数据 -- {fsize_t} nbytes 申请的字节数 - -Return: - -- {void *} 申请到的空间,如果申请失败,返回NULL - -#### FMempCalloc - -- 从内存池申请一段数组空间并清零 - -```c -void *FMempCalloc(FMemp *memp, fsize_t count, fsize_t size) -``` - -Note: - -- 需要初始化后才能调用,申请的空间再不再使用后需要调用FMempFree释放 - -Input: - -- {FMemp} *memp 内存池控制数据 -- {fsize_t} count 数据成员格式 -- {fsize_t} size 单个数据成员的字节数 - -Return: - -- {void *} 申请到的空间,如果申请失败,返回NULL - -#### FMempMallocAlign - -- 按指定对齐方式申请一段空间 - -```c -void *FMempMallocAlign(FMemp *memp, fsize_t size, fsize_t align); -``` - -Note: - -- 需要初始化后才能调用,申请的空间再不再使用后需要调用FMempFree释放 - -Input: - -- {FMemp} *memp 内存池控制数据 -- {fsize_t} size 申请的字节数 -- {fsize_t} align 对齐字节数 - -Return: - -- {void *} 申请到的空间,如果申请失败,返回NULL - -#### FMempRealloc - -- 回收原来申请的空间并重新分配 - -```c -void *FMempRealloc(FMemp *memp, void *ptr, fsize_t nbytes); -``` - -Note: - -- 需要初始化后才能调用,申请的空间再不再使用后需要调用FMempFree释放,调用函数后,原来的空间不再能使用,原空间的数据被移动到返回指针指向的空间 - -Input: - -- {FMemp} *memp 内存池控制数据 -- {void} *ptr 原来的空间 -- {fsize_t} nbytes 新申请的字节数 - -Return: - -- {void *} 替换后空间,如果替换失败,返回NULL - -#### FMempFree - -- 释放一段从内存池申请的空间 - -```c -void FMempFree(FMemp *memp, void *ptr); -``` - -Note: - -- 需要初始化后才能调用,传入的指针需要是FMempMalloc/FMempCalloc/FMempMallocAlign/FMempRealloc返回的 - -Input: - -- {FMemp} *memp 内存池控制数据 -- {void} *ptr 待释放的空间地址 - -Return: - -- 无 - -#### FMemProbe - -- 跟踪当前内存池的使用情况 - -```c -void FMemProbe(FMemp *memp, u32 *total, u32 *used, u32 *max_used); -``` - -Note: - -- 需要初始化后才能调用 - -Input: - -- {FMemp} *memp 内存池控制数据 -- {u32} *total 总可用字节数 -- {u32} *used 已使用字节数 -- {u32} *max_used 已使用字节数的峰值 - -Return: - -- 无 - -#### FMemListAll - -- 打印当前分配的内存块信息 - -```c -void FMemListAll(FMemp *memp); -``` - -Note: - -- 需要初始化后才能调用 - -Input: - -- {FMemp} *memp 内存池控制数据 - -Return: - -- 无 \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/doc/reference/sdk/fpinctrl.md b/bsp/phytium/libraries/standalone/doc/reference/sdk/fpinctrl.md deleted file mode 100644 index 958156f695..0000000000 --- a/bsp/phytium/libraries/standalone/doc/reference/sdk/fpinctrl.md +++ /dev/null @@ -1,266 +0,0 @@ -# 芯片引脚控制 - -## 1. 概述 - -- 芯片引脚控制 (Pin Ctrl)用于引脚功能配置和引脚延迟配置,开发板上常存在某些 IO 之间存在共用同一物理引脚情况,即引脚复用,同时,通用 IO 引脚还可以配置引脚延迟 -- FPinCtrl 支持芯片引脚控制功能,支持 FT2000/4、D2000 和 E2000 - -## 2. 功能 - -- FPinCtrl 主要提供引脚控制相关的功能配置,包括 -- 1. 控制复用功能 -- 2. 控制引脚驱动能力,只支持E2000平台 -- 3. 配置引脚的上下拉电阻 -- 4. 调节引脚的输入输出延迟 - -- 相关的源文件包括 -``` -fpinctrl.h - fiopad.h --> E2000 - fiopad.c - - fioctrl.h --> FT2000/4, D2000 - fioctrl.c -``` - -## 3. 配置方法 - -- 不需要特别配置 - -## 4. 应用示例 - -- 设置引脚的复用,驱动能力和上下拉电阻等 - -### [fpin_test](../../../baremetal/example/peripheral/pin/fioctrl_test) - -- IO 引脚延时配置索引,参考 D2000/FT2000-4 数据手册的"表 5-32 通用 IO 引脚延时配置寄存 - -> 调用 FIOCTRL_INDEX 生成PAD对应的索引,e.g. - -| 偏移 | 位域 | 说明 | -| -------- | ------- | ------- | -|0x0208 | [27 : 26] | 控制 i2c_0_scl_pad 的上下拉 2'b10 | -| | [25 : 24] | 控制 i2c_0_scl_pad 的复用功能 2'b00 | - -```c - #define FIOCTRL_I2C0_SCL_PAD (FPinIndex)FIOCTRL_INDEX(0x208, 24) /* i2c0-scl: func 0 */ -``` -> 定义控制域为 i2c0_scl_pad 的PAD,其中延时配置寄存器偏移量为0x208, 输入延时配置位从第24位开始 - -## 5. API参考 - -Note: - -- FT2000/4 和 D2000 平台,使用FIOCTRL_INDEX 宏定义的 index 作为引脚索引 -- E2000 平台,使用 FIOPAD_INDEX 宏定义的 index 作为引脚索引 - -#### FPinGetFunc - -```c -FPinFunc FPinGetFunc(const FPinIndex pin); -``` - -Note: - -- 获取IO引脚当前的复用功能 - -Input: - -- {FPinIndex} pin IO引脚索引 - -Return: - -- {FPinFunc} 当前的复用功能 - -#### FPinSetFunc - -```c -void FPinSetFunc(const FPinIndex pin, FPinFunc func); -``` - -Note: - -- 设置IO引脚复用功能 - -Input: - -- {FPinIndex} pin IO引脚索引 -- {FPinFunc} func IO复用功能 - -Return: - -- 无 - -#### FPinGetPull - -```c -FPinPull FPinGetPull(const FPinIndex pin); -``` - -Note: - -- 获取IO引脚当前的上下拉设置 - -Input: - -- {FPinIndex} pin IO引脚索引 - -Return: - -- {FPinPull} 当前的上下拉设置 - -#### FPinSetPull - -```c -void FPinSetPull(const FPinIndex pin, FPinPull pull); -``` - -Note: - -- 设置IO引脚当前的上下拉 - -Input: - -- {FPinIndex} pin IO引脚索引 -- {FPinPull} pull 上下拉设置 - -Return: - -- 无 - -#### FPinGetDelay - -```c -FPinDelay FPinGetDelay(const FPinIndex pin, FPinDelayDir dir, FPinDelayType type); -``` - -Note: - -- 获取IO引脚当前的延时设置 - -Input: - -- {FPinIndex} pin IO引脚延时设置索引 -- {FPinDelayDir} dir 输入/输出延时 -- {FPinDelayType} type 精调/粗调延时 - -Return: - -- {FPinDelay} 当前的延时设置 - -#### FPinGetDelayEn - -```c -boolean FPinGetDelayEn(const FPinIndex pin, FPinDelayDir dir); -``` - -Note: - -- 获取IO引脚当前的延时使能标志位 - -Input: - -- {FPinIndex} pin IO引脚延时设置索引 -- {FPinDelayDir} dir 输入/输出延时 - -Return: - -- {boolean} TRUE: 使能延时, FALSE: 去使能延时 - -#### FPinSetDelay - -```c -void FPinSetDelay(const FPinIndex pin, FPinDelayDir dir, FPinDelayType type, FPinDelay delay); -``` - -Note: - -- 设置IO引脚延时 - -Input: - -- {FPinIndex} pin IO引脚延时设置索引 -- {FPinDelayDir} dir 输入/输出延时 -- {FPinDelayType} type 精调/粗调延时 -- {FPinDelay} delay 延时设置 - -Return: - -- 无 - -#### FPinSetDelayEn - -```c -void FPinSetDelayEn(const FPinIndex pin, FPinDelayDir dir, boolean enable); -``` - -Note: - -- 使能/去使能IO引脚延时 - -Input: - -- {FPinIndex} pin IO引脚延时设置索引 -- {FPinDelayDir} dir 输入/输出延时 -- {boolean} enable TRUE: 使能, FALSE: 去使能 - -Return: - -- 无 - -#### FPinGetDrive - -```c -FPinDrive FPinGetDrive(const FPinIndex pin); -``` - -Note: - -- 获取IO引脚的驱动能力 -- 只支持 E2000 平台 - -Input: - -- {FPinIndex} pin IO引脚索引 - -Return: - -- {FPinDrive} 引脚的当前的驱动能力 - -#### FPinSetDrive - -```c -void FPinSetDrive(const FPinIndex pin, FPinDrive drive); -``` - -Note: - -- 设置IO引脚的驱动能力 -- 只支持 E2000 平台 - -Input: - -- {FPinIndex} pin, IO引脚索引 -- {FPinDrive} drive, 引脚驱动能力设置 - -Return: - -- 无 - -#### - -```c - -``` - -Note: - -- - -Input: - -- - -Return: - -- \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/doc/reference/sdk_reference.md b/bsp/phytium/libraries/standalone/doc/reference/sdk_reference.md deleted file mode 100644 index d8096d7960..0000000000 --- a/bsp/phytium/libraries/standalone/doc/reference/sdk_reference.md +++ /dev/null @@ -1,42 +0,0 @@ -# SDK参考手册 - -`SDK参考手册模板` - -- 版本:v0.1 - -## 1. SDK用户指南 - -`提供使用API过程中可能遇到的问题,按照用户使用的一般顺序排列` - -### 1.1 配套目标平台 - -### 1.2 使用构建系统 - -### 1.3 使用驱动组件 - -### 1.4 生成链接器脚本 - -### 1.5 完成引导加载 - -### 1.6 处理API错误码 - -## 2. 组件使用指南 - -`提供分模块的具体API说明,按照模块分类说明,模块内按照字母顺序排列,方便检索` - -### I2C - -(./driver_reference/i2c.md) - - - -## 3. 硬件使用指南 - -`提供硬件平台的参考资料,按字母顺序排列` - -### D2000 - -### E2000 - -### FT2000/4 - diff --git a/bsp/phytium/libraries/standalone/doc/reference/usr/how_to_use.md b/bsp/phytium/libraries/standalone/doc/reference/usr/how_to_use.md deleted file mode 100644 index 95ee5caee7..0000000000 --- a/bsp/phytium/libraries/standalone/doc/reference/usr/how_to_use.md +++ /dev/null @@ -1,199 +0,0 @@ -# 工程编译构建软件使用文档 - -## 一、概述 - -本节例程主要向开发者介绍如何利用SDK 自带脚本与构建工具一步一步完成工程的搭建 - -## 二、单核工程构建 - -### 1. 编写makefile文件 - -在工程目录下创建一个新的 `makefile`文件,并按照下列步骤进行编辑: - -- 设置 `PROJECT_DIR`变量,该变量应指向当前工程的路径,需要使用绝对路径。 -- 设置 `SDK_DIR`变量,该变量用于指定使用的sdk的路径,如需更换sdk,只需修改此变量,需要使用绝对路径。 -- 设置 `USER_CSRC`变量,该变量应包含开发者需要添加并且参与编译的C语言源代码的名称,应使用相对于 `PROJECT_DIR`的相对路径名。 -- 设置 `USER_CXXSRC`变量,该变量应包含开发者需要添加并且参与编译的C++语言源代码的名称,应使用相对于 `PROJECT_DIR`的相对路径名。 -- 设置 `USER_ASRC`变量,该变量应包含开发者需要添加并且参与编译的汇编语言源代码的名称,应使用相对于 `PROJECT_DIR`的相对路径名。 -- 设置 `EXTEND_CSRC`变量,该变量应包含开发者需要添加并且参与编译的C语言源代码的名称,该变量为外部扩展的源代码,请使用绝对地址。 -- 设置 `EXTEND_CXXSRC`变量,该变量应包含开发者需要添加并且参与编译的C++语言源代码的名称,该变量为外部扩展的源代码,请使用绝对地址。 -- 设置 `EXTEND_ASRC`变量,该变量应包含开发者需要添加并且参与编译的汇编语言源代码的名称,该变量为外部扩展的源代码,请使用绝对地址。 -- 设置 `USER_INCLUDE`变量,该变量应包含开发者需要引用的自定义头文件的绝对路径。 -- 引用 `include $(SDK_DIR)/tools/build/makeall.mk`。 - -```makefile -PROJECT_DIR = $(CURDIR) -SDK_DIR = $(CURDIR)/../../../.. - - -USER_CSRC := main.c -USER_CSRC += $(wildcard src/*.c) -USER_CSRC += $(wildcard ../common/*.c) - -USER_ASRC := -USER_CXXSRC := - -USER_INCLUDE := $(PROJECT_DIR) \ - $(PROJECT_DIR)/inc \ - $(PROJECT_DIR)/../common - - -include $(SDK_DIR)/tools/build/makeall.mk -``` - -### 2. 编写kconfig文件 - -在工程目录下创建一个新的 `kconfig`文件,并按照下列步骤进行编辑: - -- 添加一个顶级菜单 `mainmenu`。 -- 添加一个kconfig配置项的依赖 `source "$(SDK_DIR)/standalone.kconfig"`。 - -```c -mainmenu "Phytium Baremetal Configuration" - -source "$(SDK_DIR)/standalone.kconfig" -``` - -### 3. 添加sdkconfig文件 - -在工程目录下添加一个新的、空白的 `sdkconfig`文件。 - -![1686017484866](image/how_to_use/1686017484866.png) - - 图1. 添加 sdkconfig - -### 4. 配置工程 - -运行 `make menuconfig`命令,按照下列步骤进行配置: - -- 在 `Arch Configuration`中选择目标架构,例如 `armv8`。 -- 在 `Arm architecture configuration`中选择对应的执行状态。 -- 在 `Soc configuration`中选择对应soc,并选择调试uart。 -- 在 `Sdk common configuration`中选择 `Debug log level`,确定调试打印的等级。 -- 在 `Drivers configuration`中选择需要参与编译的外设。 -- 在 `Third-party configuration`中选择第三方仓库的配置。 -- 在 `User configuration`设置board和project的命名,这两个命名将会影响kconfig备份以及镜像输出的命名。 -- 在 `Build setup`中的 `Linker Options`中选择”Use sdk default linker script“,并根据实际情况配置。 - -![1686017538445](image/how_to_use/1686017538445.png) - - 图2. make menuconfig 效果图 - -![1686019401543](image/how_to_use/1686019401543.png) - - 图3. 链接脚本配置效果图 - -### 5. 编译和调试 - -完成基础配置后,可以使用以下命令对代码进行编译和调试: - -- 使用 `make + 'table'`按键可以查看支持哪些目标。 -- 使用 `make backup_kconfig`备份已经完成的配置项。 -- 使用 `make list_kconfig`查看当前工程支持哪些已经备份好的配置项,kconfig配置项的命名方式为 `soc名称_执行状态_板子命名_项目命名`。 -- 使用 `make load_kconfig l=`加载已经备份好的配置项。 -- 使用 `make xxx.a`,单独编译某个特定的模块,例如 `libarch.a`。 -- 使用 `make`指令,完整编译一个工程。 - -![1686017723541](image/how_to_use/1686017723541.png) - - 图4. make +'table' 效果图 - -![1686017806288](image/how_to_use/1686017806288.png) - - 图5. make`backup_kconfig` 备份现有配置效果图 - -### 6. 编译调试 - -当编译过程出现问题时,可以使用以下方式进行调试: - -- 使用 `make `libuser_debug,对用户模块进行预编译。 -- 使用 `make xxx_info`,对模块编译条件进行打印。 - -![1686018164493](image/how_to_use/1686018164493.png) - -![1686018209933](image/how_to_use/1686018209933.png) - - 图6. make `libuser_debug` 对用户的代码进行预编译 - -## 三、多核工程构建 - -若需要构建一个多核工程,可以按照以下的步骤进行: - -### 1. 编写makefile文件 - -在一个独立的目录下创建一个新的 `makefile`文件,并进行如下配置: - -- 设置 `PROJECT_DIR`变量,该变量应指向当前工程的路径,需要使用绝对路径。 -- 设置 `SDK_DIR`变量,该变量用于指定当前引导程序会使用的sdk的路径,如需更换sdk,只需修改此变量,需要使用绝对路径。 -- 设置 `AMP_PATH`变量,该变量表示需要参与多核构建的工程路径 -- 引用 `include $(SDK_DIR)/tools/build/amp_makeall.mk`。 - -```makefile -PROJECT_DIR = $(CURDIR) - -SDK_DIR = $(CURDIR)/../../.. - - -AMP_PATH += $(PROJECT_DIR)/apu_running -AMP_PATH += $(PROJECT_DIR)/rpu_running - -include $(SDK_DIR)/tools/build/amp_makeall.mk - -USR_BOOT_DIR ?= /mnt/d/tftboot -``` - -如图5 所示,如果需要建立多核异构工程,可以按照图中的结构构建 - -![1686018381398](image/how_to_use/1686018381398.png) - -图5. 多核异构程序文件结构 - -### 2. 配置工程 - -多核工程会引入一个boot 程序会根据每个多核工程中配置信息自动将工程加载至指定的核心之上,多核工程的配置需要按照以下几个步骤进行: - - 1. 在每个参与构建的工程中,使用make menuconfig ,配置当前工程工作的核心位置,以及当前工程特定的链接加载地址 - -![1686019565525](image/how_to_use/1686019565525.png) - -图6. 镜像工作核心配置 - - 2. 在每个参与构建的工程中,使用make menuconfig ,将所有参与构建的工程的soc 内容进行统一 - -![1686019757548](image/how_to_use/1686019757548.png) - -图7. 镜像soc配置 - -3. 在每个参与构建的工程中,使用make menuconfig ,将所有参与构建的工程的cpu 架构 内容进行统一 - -![1686019830855](image/how_to_use/1686019830855.png) - -图8. 执行架构配置 - - 4. 在多核工程的根目录下通过,make menuconfig 配置boot 程序,要求与其他参与构建的工程在soc 与 cpu架构方面保持一致 - -### 3. 编译调试过程 - - 多核构建工具具备工程镜像检查功能,会对soc\cpu架构 和 链接加载地址方面的问题进行检查,本节将会从一些具体的问题现象上指导开发者,如何调整自己多核异构的方案 - -Q : 当出现下图问题时 - -![1686020115768](image/how_to_use/1686020115768.png) - -A: 此问题为soc 对应的执行状态不一致导致,其中rpu_runing 工程的执行状态为aarch32 ,需要将其与其他工程进行统一 - -Q: 当出现下图问题时 - -![1686020270939](image/how_to_use/1686020270939.png) - -A: 此问题的原因是 apu_runing 与 rpu_runing 的工程中加载地址存在重叠的情况,请调整两个工程,以达到合适的区间 - -Q: 当出现下图问题时 - -![1686020499979](image/how_to_use/1686020499979.png) - -A: 此问题的原因是,boot 的加载地址与其他工程的地址存在冲突,此时在多核的根目录下通过make menuconfig 指令重新调整boot 程序的链接地址,以保证链接地址能够在上图的范围之内。 - -# 四、结语 - -完成以上步骤后,即可成功构建单核或多核工程。如果在使用过程中遇到问题,可以查阅相关文档或者与我们的技术团队联系。 diff --git a/bsp/phytium/libraries/standalone/doc/reference/usr/image/how_to_use/1686017484866.png b/bsp/phytium/libraries/standalone/doc/reference/usr/image/how_to_use/1686017484866.png deleted file mode 100644 index 9045d33c4a..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/reference/usr/image/how_to_use/1686017484866.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/reference/usr/image/how_to_use/1686017538445.png b/bsp/phytium/libraries/standalone/doc/reference/usr/image/how_to_use/1686017538445.png deleted file mode 100644 index f45234180c..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/reference/usr/image/how_to_use/1686017538445.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/reference/usr/image/how_to_use/1686017723541.png b/bsp/phytium/libraries/standalone/doc/reference/usr/image/how_to_use/1686017723541.png deleted file mode 100644 index d22df86c29..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/reference/usr/image/how_to_use/1686017723541.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/reference/usr/image/how_to_use/1686017806288.png b/bsp/phytium/libraries/standalone/doc/reference/usr/image/how_to_use/1686017806288.png deleted file mode 100644 index 3407c2a9fe..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/reference/usr/image/how_to_use/1686017806288.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/reference/usr/image/how_to_use/1686018164493.png b/bsp/phytium/libraries/standalone/doc/reference/usr/image/how_to_use/1686018164493.png deleted file mode 100644 index e3c2734135..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/reference/usr/image/how_to_use/1686018164493.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/reference/usr/image/how_to_use/1686018209933.png b/bsp/phytium/libraries/standalone/doc/reference/usr/image/how_to_use/1686018209933.png deleted file mode 100644 index fa4682ae4d..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/reference/usr/image/how_to_use/1686018209933.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/reference/usr/image/how_to_use/1686018381398.png b/bsp/phytium/libraries/standalone/doc/reference/usr/image/how_to_use/1686018381398.png deleted file mode 100644 index fd24b680de..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/reference/usr/image/how_to_use/1686018381398.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/reference/usr/image/how_to_use/1686019401543.png b/bsp/phytium/libraries/standalone/doc/reference/usr/image/how_to_use/1686019401543.png deleted file mode 100644 index b1fe969c6f..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/reference/usr/image/how_to_use/1686019401543.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/reference/usr/image/how_to_use/1686019565525.png b/bsp/phytium/libraries/standalone/doc/reference/usr/image/how_to_use/1686019565525.png deleted file mode 100644 index 20f228659e..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/reference/usr/image/how_to_use/1686019565525.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/reference/usr/image/how_to_use/1686019757548.png b/bsp/phytium/libraries/standalone/doc/reference/usr/image/how_to_use/1686019757548.png deleted file mode 100644 index b8b8f6cd64..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/reference/usr/image/how_to_use/1686019757548.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/reference/usr/image/how_to_use/1686019830855.png b/bsp/phytium/libraries/standalone/doc/reference/usr/image/how_to_use/1686019830855.png deleted file mode 100644 index 989d6e8cc5..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/reference/usr/image/how_to_use/1686019830855.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/reference/usr/image/how_to_use/1686020115768.png b/bsp/phytium/libraries/standalone/doc/reference/usr/image/how_to_use/1686020115768.png deleted file mode 100644 index 75e6a7d1f8..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/reference/usr/image/how_to_use/1686020115768.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/reference/usr/image/how_to_use/1686020270939.png b/bsp/phytium/libraries/standalone/doc/reference/usr/image/how_to_use/1686020270939.png deleted file mode 100644 index 9f189822de..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/reference/usr/image/how_to_use/1686020270939.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/reference/usr/image/how_to_use/1686020499979.png b/bsp/phytium/libraries/standalone/doc/reference/usr/image/how_to_use/1686020499979.png deleted file mode 100644 index ab11a517f4..0000000000 Binary files a/bsp/phytium/libraries/standalone/doc/reference/usr/image/how_to_use/1686020499979.png and /dev/null differ diff --git a/bsp/phytium/libraries/standalone/doc/reference/usr/install_linux_aarch64.md b/bsp/phytium/libraries/standalone/doc/reference/usr/install_linux_aarch64.md deleted file mode 100644 index e5deacef74..0000000000 --- a/bsp/phytium/libraries/standalone/doc/reference/usr/install_linux_aarch64.md +++ /dev/null @@ -1,77 +0,0 @@ -# 1. Linux arm aarch64 SDK安装方法 - -Linux arm aarch64下通过通过下载SDK开发工具包完成安装,运行脚本`./setup_dev.py`完成安装,安装前请先确认当前设备属于`Linux arm aarch64` - -![linux-aarch64](../../fig/is_aarch64.png) - -Linux arm aarch64安装包集成了: -- `gcc-arm-10.3-2021.07-aarch64-aarch64-none-elf.tar.xz`和`gcc-arm-10.3-2021.07-aarch64-arm-none-eabi.tar.xz`,aarch64交叉编译链,SDK安装过程中会被解压到DEV目录的`cross_tool`目录下 -- `setup_dev.py`, 安装脚本,主要的功能包括创建sdk的profile文件,创建`PHYTIUM_DEV_PATH`环境变量,通过git拉取SDK源码,以及完成SDK安装 - - -## 1.1 获取SDK的开发环境 - -- [Linux arm aarch64](https://pan.baidu.com/s/1lQC4n8wRDSLAMTXvzPn98g) - -> 提取码:LA64 - -- Linux环境下可以用unzip命令解压 -- Linux环境下需要通过`sudo apt-get install build-essential`安装git, make和python3等工具 - -## 1.2 安装SDK开发环境 - -- (1). 解压开发环境压缩包,形成DEV目录 - -- (2). 进入DEV目录,运行`./setup_dev.py`,安装开发环境 - -![安装开发环境](../../fig/setup_aarch64_dev.png) - -- (3). 通过git拉取Phytium Standalone SDK的代码,如 - -``` -git clone https://gitee.com/phytium_embedded/phytium-standalone-sdk.git ./phytium-standalone-sdk -``` - -- (4). 进入Phytium Standalone SDK代码目录,运行`./install.py` - -``` -cd ./phytium-standalone-sdk -./install.py -``` - -![输入图片说明](../../fig/install_for_aarch64.png) - -- (5). 安装完成后重启系统 - -### Q: 如果当前环境无法连接互联网 - -- 在执行第(2)步前,需要手动下载Phytium Standalone SDK,放置在DEV目录下 -- https://gitee.com/phytium_embedded/phytium-standalone-sdk - -## 1.3 检查安装是否成功 - -- 打印下列环境变量,观察各变量是否存在,指向的目录是否正确 -> `PHYTIUM_DEV_PATH`指向DEV目录 - -> `STANDALONE_SDK_ROOT`指向SDK源文件目录 - -> `AARCH32_CROSS_PATH`指向32位交叉编译链目录 - -> `AARCH64_CROSS_PATH`指向64位交叉编译链目录 - -``` -echo $PHYTIUM_DEV_PATH -echo $STANDALONE_SDK_ROOT -echo $AARCH32_CROSS_PATH -echo $AARCH64_CROSS_PATH -``` -![检查环境变量](../../fig/check_env_for_aarch64.png) - -- 环境变量打印正确无误,表示**安装成功** -## 1.4 卸载开发环境 - -- 在DEV目录运行`./uninstall.py`完成SDK卸载 - -- 运行`rm /etc/profile.d/phytium_standalone_sdk.sh`,删除SDK配置文件 - -- 重启系统完成卸载 \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/doc/reference/usr/install_linux_x86_64.md b/bsp/phytium/libraries/standalone/doc/reference/usr/install_linux_x86_64.md deleted file mode 100644 index d90077e33a..0000000000 --- a/bsp/phytium/libraries/standalone/doc/reference/usr/install_linux_x86_64.md +++ /dev/null @@ -1,75 +0,0 @@ - -# 1. Linux x86_64 SDK安装方法 - -Linux x86_64下通过通过下载SDK开发工具包完成安装,运行脚本`./setup_dev.py`完成安装,安装前请先确认当前设备属于`Linux x86_64` - -![linux-x86_64](../../fig/is_x86_64.png) - -Linux x86_64安装包集成了, -- `gcc-arm-10.3-2021.07-x86_64-aarch64-none-elf.tar.xz`和`gcc-arm-10.3-2021.07-x86_64-arm-none-eabi.tar.xz`,aarch64交叉编译链,SDK安装过程中会被解压到DEV目录的`cross_tool`目录下 -- `setup_dev.py`, 安装脚本,主要的功能包括创建sdk的profile文件,创建`PHYTIUM_DEV_PATH`环境变量,通过git拉取SDK源码,以及完成SDK安装 - -## 1.1 获取SDK的开发环境 - -- [Linux x86_64](https://pan.baidu.com/s/1KsGcHoqOJ8nv4G1G-L5gtQ ) - ->提取码:LX64 - -- Linux环境下可以用unzip命令解压 -- Linux环境下需要通过`sudo apt-get install build-essential`安装git, make和python3等工具 - -## 1.2 安装SDK开发环境 - -- (1). 解压开发环境压缩包,形成DEV目录 - -![解压DEV](../../fig/uncompress_for_x86.png) - -- (2). 进入DEV目录,运行`./setup_dev.py`,安装开发环境 - -![安装开发环境](../../fig/setup_x86_dev.png) - --(3). 通过git拉取Phytium Standalone SDK的代码,如 - -``` -git clone https://gitee.com/phytium_embedded/phytium-standalone-sdk.git ./phytium-standalone-sdk -``` - -- (4). 进入Phytium Standalone SDK代码目录,运行`./install.py` - -``` -cd ./phytium-standalone-sdk -./install.py -``` -![安装完成](../../fig/install_for_x86.png) - -- (3). 安装完成后重启系统 - -### Q: 如果当前环境无法连接互联网 - -- 在执行第(2)步前,需要手动下载Phytium Standalone SDK,放置在DEV目录下 -- https://gitee.com/phytium_embedded/phytium-standalone-sdk - -## 1.3 检查安装是否成功 - -- 打印下列环境变量,观察各变量是否存在,指向的目录是否正确 -> `PHYTIUM_DEV_PATH`指向DEV目录 - -> `STANDALONE_SDK_ROOT`指向SDK源文件目录 - -> `AARCH32_CROSS_PATH`指向32位交叉编译链目录 - -> `AARCH64_CROSS_PATH`指向64位交叉编译链目录 - -``` -echo $PHYTIUM_DEV_PATH $STANDALONE_SDK_ROOT $AARCH32_CROSS_PATH $AARCH64_CROSS_PATH -``` -![检查环境变量](../../fig/check_env_for_x86.png) - -- 环境变量打印正确无误,表示**安装成功** -## 1.4 卸载开发环境 - -- 在DEV目录运行`./uninstall.py`完成SDK卸载 - -- 运行`rm /etc/profile.d/phytium_standalone_sdk.sh`,删除SDK配置文件 - -- 重启系统完成卸载 diff --git a/bsp/phytium/libraries/standalone/doc/reference/usr/install_windos_wsl.md b/bsp/phytium/libraries/standalone/doc/reference/usr/install_windos_wsl.md deleted file mode 100644 index 98ee0ab9df..0000000000 --- a/bsp/phytium/libraries/standalone/doc/reference/usr/install_windos_wsl.md +++ /dev/null @@ -1,113 +0,0 @@ - -# 1. Windows下WSL Linux子系统 SDK安装方法 - - -在Windows下,可以通过WSL Linux子系统来获得Linux环境,并且,这种环境下的Linux系统与Windows系统的文件是完全共享的 -Linux x86_64下通过通过下载SDK开发工具包完成安装,安装前请先确认当前设备属于`Linux x86_64` -``` -uname -a -``` -![linux-x86_64](../../fig/is_x86_64.png) - -接下来正式开始安装SDK开发环境 - -## 1.1 系统安装与获取SDK的开发环境 - -- [Linux x86_64](https://pan.baidu.com/s/1KsGcHoqOJ8nv4G1G-L5gtQ ) - ->提取码:LX64 - -Windows用户可以参考此链接,安装WSL Linux子系统,并做好相应准备工作: -- [WSL Linux子系统安装教程](https://zhuanlan.zhihu.com/p/146545159) - -安装完毕后,启动Ubuntu,如果出现运行问题,可参考 -- [WSL 无法安装解决方法](https://blog.csdn.net/qq_18625805/article/details/109732122) - -在cmd上输入如下指令,查看WSL版本 -``` -wsl -l -v -``` -由于WSL2不支持本地网线连接,如果发现目前版本是WSL2,需要退回到WSL1 -``` -wsl --set-version Ubuntu-20.04 1 -``` - ->这里的20.04是Ubuntu的版本号,根据实际情况调整 - -正确结果如下 -![wsl_l_v](../../fig/wsl_l_v.png) -通过下面的指令完成对Linux系统的更新 -``` -apt update -apt upgrade -``` -Linux环境下需要通过代码安装git, make和python3等工具 -``` -sudo apt-get install build-essential -``` - -## 1.2 安装SDK开发环境 - -- (1). 解压开发环境压缩包,形成DEV目录 - -![解压DEV](../../fig/uncompress_for_x86.png) - -Linux x86_64安装包集成了: -- `gcc-arm-10.3-2021.07-x86_64-aarch64-none-elf.tar.xz`和`gcc-arm-10.3-2021.07-x86_64-arm-none-eabi.tar.xz`,aarch64交叉编译链,在SDK安装过程中会被解压到DEV目录的`cross_tool`目录下 -- `setup_dev.py`, 一种安装脚本,主要的功能包括创建sdk的profile文件,创建`PHYTIUM_DEV_PATH`环境变量,通过git拉取SDK源码,以及完成SDK安装 - - -- (2). 进入DEV目录,运行`./setup_dev.py`,安装开发环境 - -![安装开发环境](../../fig/setup_x86_dev.png) -*如果无法正常运行请使用如下代码或者重启系统* -``` -python3 setup_dev.py -``` ->指令执行完毕后,请关注回执信息中[5],按要求输入`source /etc/profile.d/phytium_dev.sh`指令获取环境变量或者重启系统 - -- (3). 通过git拉取Phytium Standalone SDK的代码,如 - -``` -git clone https://gitee.com/phytium_embedded/phytium-standalone-sdk.git ./phytium-standalone-sdk -``` - -- (4). 进入Phytium Standalone SDK代码目录,运行`./install.py` - -``` -cd ./phytium-standalone-sdk -./install.py -``` -![安装完成](../../fig/install_for_x86.png) - -- (5). 安装完成后重启系统 - -### Q: 如果当前环境无法连接互联网 - -- 在执行第(2)步前,需要手动下载Phytium Standalone SDK,放置在DEV目录下 -- https://gitee.com/phytium_embedded/phytium-standalone-sdk - -## 1.3 检查安装是否成功 - -- 打印下列环境变量,观察各变量是否存在,指向的目录是否正确 -> `PHYTIUM_DEV_PATH`指向DEV目录 - -> `STANDALONE_SDK_ROOT`指向SDK源文件目录 - -> `AARCH32_CROSS_PATH`指向32位交叉编译链目录 - -> `AARCH64_CROSS_PATH`指向64位交叉编译链目录 - -``` -echo $PHYTIUM_DEV_PATH $STANDALONE_SDK_ROOT $AARCH32_CROSS_PATH $AARCH64_CROSS_PATH -``` -![检查环境变量](../../fig/check_env_for_x86.png) - -- 环境变量打印正确无误,表示**安装成功** -## 1.4 如何卸载开发环境 - -- 在DEV目录运行`./uninstall.py`完成SDK卸载 - -- 运行`rm /etc/profile.d/phytium_standalone_sdk.sh`,删除SDK配置文件 - -- 重启系统完成卸载 diff --git a/bsp/phytium/libraries/standalone/doc/reference/usr/install_windows.md b/bsp/phytium/libraries/standalone/doc/reference/usr/install_windows.md deleted file mode 100644 index e73ae689ed..0000000000 --- a/bsp/phytium/libraries/standalone/doc/reference/usr/install_windows.md +++ /dev/null @@ -1,142 +0,0 @@ -# 1. Windows10 SDK安装方法 - -Windows 10 SDK开发环境集成了, -- `msys64`,Msys2 portable环境, 主要提供Windows上的shell命令行开发环境,包括了Cygwin (POSIX 兼容性层) 和 MinGW-w64(从"MinGW-生成") -- `setup_dev.py`, 安装脚本,主要的功能包括创建sdk的profile文件,创建`PHYTIUM_DEV_PATH`环境变量,通过git拉取SDK源码,以及完成SDK安装 -- `gcc-arm-10.3-2021.07-mingw-w64-i686-aarch64-none-elf.tar.xz`和`gcc-arm-10.3-2021.07-mingw-w64-i686-arm-none-eabi.tar.xz`, mingw64交叉编译链, SDK安装过程中会被解压到DEV目录的`cross_tool`目录下 -- `tftp`, tftp工具, 提供tftp服务,用于开发板下载二进制镜像文件,主要的功能包括安装tftp32服务和配置tftp目录 -- `run_msys2.cmd`,用于打开和配置msys2 shell的脚本,需要设置`PHYTIUM_DEV_PATH`后才能使用 -- `run_tftd.cmd`,用于打开tftpd工具的脚本,需要设置`PHYTIUM_DEV_PATH`后才能使用 -- `tftp/reinstall.cmd`, 用于安装和配置tftpd服务的脚本 -- `tftp/uninstall.cmd`, 用于卸载tftpd服务的脚本 - -## 1.1 获取SDK的开发环境 - -- [Windows10](https://pan.baidu.com/s/1V96isNcPq4F7nKi3_8GoGg) ->提取码:WX64 - -- Windows环境下可以用通用的unzip工具解压,如7zip和winrar - -## 1.2 安装SDK开发环境 - -- (1). 添加Windows环境变量,`PHYTIUM_DEV_PATH`(环境变量名**不能自定义**),例如,指向文件夹`E:\phytium-dev-windows-nt`(可以自定义) - -![配置环境变量](../../fig/add_path_for_win.png) - -- (2). 进入DEV目录,双击脚本`run_msys2.cmd`, 进入msys2控制台, 运行`./setup_dev.py`,注册开发环境 - -![安装开发环境](../../fig/install_for_mingw.png) - --(3). DEV目录注册完成后,通过git拉取Phytium Standalone SDK的代码,如 - -``` -git clone https://gitee.com/phytium_embedded/phytium-standalone-sdk.git ./phytium-standalone-sdk -``` - -- (4). 进入Phytium Standalone SDK代码目录,运行`./install.py` - -``` -cd ./phytium-standalone-sdk -./install.py -``` - -![开发环境安装完成](../../fig/setup_win.png) - -- (5). 安装完成后重启系统 - -### Q: 如果当前环境无法连接互联网 - -- 在执行第(2)步前,需要手动下载Phytium Standalone SDK,放置在DEV目录下 -- https://gitee.com/phytium_embedded/phytium-standalone-sdk - -![手动下载SDK](../../fig/git_url.png) - -## 1.3 检查安装是否成功 - -- 打印下列环境变量,观察各变量是否存在,指向的目录是否正确 -> `PHYTIUM_DEV_PATH`指向DEV目录 - -> `STANDALONE_SDK_ROOT`指向SDK源文件目录 - -> `AARCH32_CROSS_PATH`指向32位交叉编译链目录 - -> `AARCH64_CROSS_PATH`指向64位交叉编译链目录 - -``` -echo $PHYTIUM_DEV_PATH $STANDALONE_SDK_ROOT $AARCH32_CROSS_PATH $AARCH64_CROSS_PATH -``` - -- 环境变量打印正确无误,表示**安装成功** -## 1.4 Windows 10安装Msys2(可选) - -- (1). 获取[Windows环境安装包](https://pan.baidu.com/s/17WX5hec7t8_ubAKzFCwQAA) - -> 提取码:MGW6 - -- msys2, `msys2-x86_64-20210725.exe` -- mingw64-arm交叉编译链, `gcc-arm-10.3-2021.07-mingw-w64-i686-arm-none-eabi.tar.xz`, `gcc-arm-10.3-2021.07-mingw-w64-i686-aarch64-none-elf.tar.xz` -- tftp工具,`tftp.zip` - -- (2). 创建Windows集成开发环境(DEV目录),如`D:/phytium-dev`, 将DEV目录添加在Windows环境变量中,变量名为`PHYTIUM_DEV_PATH`,如下图所示,保存环境变量, - -> 对于Windows 10,在桌面左下角系统搜索框中输入“环境变量”即可进入环境变量编辑界面 - -> DEV目录中不要留空格 - -![输入图片说明](../../fig/add_path_for_win.png) - -- (3). 保存DEV环境变量后,打开一个控制台,输入`echo %PHYTIUM_DEV_PATH%`,检查环境变量是否设置成功, - -![输入图片说明](../../fig/check_env_for_win.png) - -- (4). 双击`msys2-x86_64-20210725.exe`,设置`Msys2`的安装路径在DEV路径下,其余设置按默认安装,注意安装完成后不要马上启动,最后一步取消勾选“马上启动Msys2” - -![输入图片说明](../../fig/install_msys2.png) - -![Msys2安装过程](../../fig/installing_msys2.png) - -- (5). `Msys2`安装完成后,需要添加国内软件源,否则下载速度会很慢,进入`D:\phytium-dev\msys64\etc\pacman.d`目录下,找到以下三个文件,在文件末尾分别添加对应的软件源 - -- mirrorlist.mingw32 -``` -Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/i686 -``` - -- mirrorlist.mingw64 -``` -Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/x86_64 -``` - -- mirrorlist.msys -``` -Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/msys/$arch -``` - -- (6). 进入`D:\phytium-dev\msys64`目录,双击`msys2_shell.cmd`启动运行`Msys2`,输入以下命令,更新`Msys2`软件,安装必要组件 - -> 如果执行失败,可以多次尝试,直到没有报错 - -> 安装过程全部选用默认方式`default`或选择`y`,注意如果没有`default = all`,需要输入`y` - -``` -$ pacman -Syu -$ pacman -S mingw-w64-x86_64-toolchain -$ pacman -S base-devel git python3 python3-pip -``` - -![更新Msys2软件源](../../fig/update_packman.png) - -- (7). 运行以下命令,检查组件是否安装完全 -``` -$ pacman -Q make git wget python3 python3-pip -``` - -## 1.5 卸载开发环境 - -- 在DEV目录下双击`run_msys2.cmd`, 启动`Msys2`控制台,在控制台输入`./uninstall.py`完成SDK卸载 - -- 在`Msys2`控制台运行`rm /etc/profile.d/phytium_standalone_sdk.sh`,删除SDK配置文件 - -- 在DEV目录`D:\phytium-dev\tftp`下以**管理员权限**打开Windows命令行中断,运行`uninstall.cmd`完成Tftd卸载 - -- 重启系统完成卸载 \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/doc/reference/usr/usage.md b/bsp/phytium/libraries/standalone/doc/reference/usr/usage.md deleted file mode 100644 index f1eef5c8b8..0000000000 --- a/bsp/phytium/libraries/standalone/doc/reference/usr/usage.md +++ /dev/null @@ -1,356 +0,0 @@ -# 使用方法 -## 1.1前期配置 -在正式调用SDK实例前,需要对tftp进行一系列配置,Windows下与Linux下的方法有很大的区别,下面我们正式开始 ->对于权限不够的问题,普通用户可以在指令前加上`sudo`来暂时获得root权限 - -### 1.1.1 在 host 侧(Ubuntu 20.04)配置 tftp 服务 - -- 在开发环境`host`侧安装`tftp`服务 - -``` -sudo apt-get install tftp-hpa tftpd-hpa -sudo apt-get install xinetd -``` - -- 新建 `tftboot`目录, `/mnt/d/tftboot`, 此目录应与项目编译脚本makefile中的USR_BOOT_DIR一致, 并确保 tftboot 目录有执行权限`chmod 777 /**/tftboot` - -- 配置主机 tftpboot 服务, 新建并配置文件`/etc/xinetd.d/tftp` - -``` -# /etc/xinetd.d/tftp - -server tftp -{ - socket_type = dgram - protocol = udp - wait = yes - user = root - server = /usr/sbin/in.tftpd - server_args = -s /mnt/d/tftboot - disable = no - per_source = 11 - cps = 100 2 - flags = IPv4 -} -``` ---- -在配置上述文件时,如果之前没有使用过Linux文件编写,可以使用自带的vim编辑器 -``` -vim /etc/xinetd.d/tftp -``` ---- -- 启动主机`tftp`服务,生成默认配置 - -``` -$ sudo service tftpd-hpa start -``` - -- 修改主机`tftp`配置,指向`tftboot`目录 - 修改/etc/default/tftpd-hpa -``` -vim /etc/default/tftpd-hpa -``` - -``` -$ sudo vim /etc/default/tftpd-hpa -# /etc/default/tftpd-hpa - -TFTP_USERNAME="tftp" -TFTP_DIRECTORY="/mnt/d/tftboot" -TFTP_ADDRESS=":69" -TFTP_OPTIONS="-l -c -s" -``` - -- 重启主机`tftp`服务 - -``` -$ sudo service tftpd-hpa restart -``` ->注意,每次进入Linux系统时都需要使用该代码重启主机`tftp`服务 -- 测试主机`tftp`服务的可用性 -登录`tftp`服务,获取`tftboot`目录下的一个文件 - -``` -$ tftp 192.168.4.50 -tftp> get test1234 -tftp> q -``` - -### 1.1.2 在 host 侧(Windows)配置 tftp 服务 - -- 将`tftp.zip`解压到开发环境,如`D:\**\phytium-dev-windows-nt\tftp` - >如果`phytium-dev-windows-nt\tftp`已经存在,则直接进行下一步 -- 以**管理员权限**打开Windows cmd,进入`D:\**\phytium-dev-windows-nt\tftp`,运行`.\reinstall.cmd`完成Tftpd服务安装 -![输入图片说明](../../fig/admin_rights.png) -![输入图片说明](../../fig/tftp32_srv.png) - >注意每次使用前,都需要进入Windows服务,手动将tftp服务打开 - -### 1.1.3 配置以太网ipv4设置 -- 为了连接串口,打开windows下的以太网设置界面,选择手动设置,配置相关地址 -![输入图片说明](../../fig/ipv4_setting.png) - -## 1.2 连接开发板,着手跑通用例 -- 在完成前面的步骤后,就可以着手连接开发板。连接之前,需要下载Windows下与的开发板配套软件 -[MobaXterm_Portable_v22.0](https://pan.baidu.com/s/1IjDG2j5YwK9IhpBR4ChoYA ) - >提取码:ROOT - -- 如果是不用内置Linux子系统的windows用户还需要在`tftp`中配置。配置完成后,进入SDK,双击`D:\phytium-dev\phytium-standalone-sdk`目录下的`run_tftd.cmd`,启动tftp工具,设置tftp目录和ip -![输入图片说明](../../fig/config_tftp32.png) - -### 1.2.1 编译获取.elf与.bin文件 -以WSL为例: -- 进入SDK所在目录,右键打开Windows终端,输入以下指令 - ``` - wsl - ``` - ![输入图片说明](../../fig/wsl_teiminal.png) -- 进入`baremetal`文件夹,选取一个希望执行的用例。以`uart测试`为例,在wsl下输入如下指令,进入测试用例所在文件夹 - ``` - cd baremetal/example/peripheral/serial/fpl011_test - ``` -- 根据需求,配置在不同芯片下32位或64位的编译模式,这里以`飞腾新四核芯片`的32位为例,输入以下指令 - ``` - make load_ft2004_aarch32 - ``` -- 编译测试用例,输入以下指令 - ``` - make clean boot - ``` -- 出现如下信息,表示编译成功,编译结果.elf与.bin文件已经保存至tftboot文件夹内 -![输入图片说明](../../fig/wsl_make_success.png) -![输入图片说明](../../fig/bin_show.png) - -### 1.2.2 配置开发板ip,连通host下载启动镜像 -- 连通开发板串口,打开windows的设备管理器,在端口栏确认串口是否成果接入 -![输入图片说明](../../fig/Serial_inform.png) - -- 打开MobaXterm_Portable软件,选择`Session`,然后选择`Serial`,选择串口(如上图所示串口号为`COM3`),设置波特率`bps`为115200 - -- 进入`u-boot`界面,输入如下指令,配置开发板ip,`host`侧ip和网关地址 - ``` - setenv ipaddr 192.168.4.20 - setenv serverip 192.168.4.50 - setenv gatewayip 192.168.4.1 - ``` -- 随后烧录`tftboot`文件夹下的文件到开发板,输入以下指令 - ``` - tftpboot 0x90100000 baremetal.elf - bootelf -p 0x90100000 - ``` - - > 镜像启动的地址为`0x80100000`, 对于`BIN`文件,需要直接加载到`0x80100000`,对于`ELF`文件,启动地址会自动获取,需要加载到`DRAM`中一段可用的地址,这里选择`0x90100000` - -- 见到如下结果,表示成功进入测试环境,可以自行浏览每个测试用例文件夹下对应的`README.md`文件,根据其中的提示,进行用例调试 -![输入图片说明](../../fig/letter_shell.png) - - - - - - - -### 1.2.3 设置板载FLASH自动启动,避免人工干预 - -- 此项设置是把bin镜像保存到和UBOOT相同的NOR FLASH芯片里。此芯片一般8MB。目前uboot里的flash读写命令,最大支持16MB -- uboot固件一般4MB左右。以下命令例子,把前6MB给uboot,从6MB到7MB的空间给bin镜像使用,操作命令如下, - -- 通过串口或者网络下载到内存 -``` -loadx 0x90100000 -tftpboot 0x90100000 baremetal.elf -``` - -- 将下载的镜像写入 QSPI NOR-Flash,位置为 0x600000,镜像大小为 0x100000 -> 如果下载的 bin/elf 镜像大小超过 0x100000 字节,需要随镜像大小进行调整 -``` -flashe 0x600000 0x100000 -flashw 0x90100000 0x600000 0x100000 -cmp.b 0x600000 0x90100000 0x100000 -cp.b 0x600000 0x90100000 0x100000 -``` - -- 然后就可以下电、上电启动,自动从 QSPI NOR-Flash 引导系统 -> 使用 saveenv 前,需要找 FAE 确认 u-boot 版本是否支持 -``` -csetenv bootcmd "cp.b 0x600000 0x90100000 0xa00000; bootvx32 0x90100000" -saveenv -``` - -- 如果用baremetal.bin文件,则把0x90100000改成0x80100000即可 - -### 1.2.4 将镜像放置在 SD 卡文件系统中,进行启动 - -- 以 Windows 10为例, 首先利用读卡器或者 SD 卡套将 SD 插入 Windows10 电脑接口,找到 SD 卡对应的磁盘 - -![](../../fig/disk_manager.png) - -- 在 SD 卡磁盘上创建一个分区,格式为 FAT,由于 FAT 格式限制,分区不能超过太大,我们这里创建 256 MB 分区就可以了 - -![](../../fig/sd_segement.png) - -- 将编译生成的 bin 文件或者 elf 文件放置在刚刚创建的 FAT 格式分区中 - -![](../../fig/sd_image.png) - -- 将 SD 卡从 Windows10 电脑中正常弹出,将 SD 卡插入开发板卡槽 - -![](../../fig/sd_insert.png) - -- 启动开发板,进入 u-boot 控制台,输入下列命令找到 bin/elf 镜像文件 -> 以 E2000-Demo 板为例,SD 卡槽连接的是 SD-1 控制器, - -``` -mmc dev 1 -mmc info -fatls mmc 1:1 -``` - -![](../../fig/sd_partinfo.png) - -- 输入下列命令加载 elf 镜像,开始启动 - -``` -fatload mmc 1:1 0xa0100000 baremetal.elf -bootelf -p 0xa0100000 -``` - -- 使用 bin 镜像启动前,需要确保刷新过 cache -``` -fatload mmc 1:1 0x80100000 baremetal.bin -dcache flush -go 0x80100000 -``` -- 如果固件中没有 ```dcache flush```指令,可以在编译镜像时,将刷新cache的配置选择 - -![](../../fig/flush_cache.png) - - -- 输入下列命令,可以下电、上电启动,自动从 SD 卡介质中引导系统 -> 使用 saveenv 前,需要找 FAE 确认 u-boot 版本是否支持 -``` -setenv bootcmd "mmc dev 1; fatload mmc 1:1 0x90100000 baremetal.elf; bootelf -p 0x90100000" -saveenv -``` - - -### 1.2.5 将镜像放置在 U盘文件系统中,进行启动 - -- 以 Windows 10为例, 首先将 U 盘插入 Windows10 电脑接口,找到 SD 卡对应的磁盘 -- 在 U 盘上创建一个分区,格式为 FAT,由于 FAT 格式限制,分区不能超过太大,我们这里创建 128 MB 分区就可以了 - -![](../../fig/usb_disk.png) - -- 将编译生成的 bin 文件或者 elf 文件放置在刚刚创建的 FAT 格式分区中 - -- 将 U 盘从 Windows10 电脑中正常弹出,将 U 盘插入开发板USB插槽 - -![](../../fig/usb_insert.png) - -- 启动 USB 控制器,找到 U 盘中的 - -``` -usb start -usb storage -fatls usb 0 -``` - -![](../../fig/usb_image.png) - - -- 输入下列命令加载 elf 镜像,开始启动 - -``` -fatload usb 0 0xa0100000 baremetal.elf -bootelf -p 0xa0100000 -``` - -- 使用 bin 镜像启动前,需要确保刷新过 cache - -``` -ffatload usb 0 0x80100000 baremetal.bin -dcache flush -go 0x80100000 -``` - -- 输入下列命令,可以下电、上电启动,自动从 U盘引导系统 -> 使用 saveenv 前,需要找 FAE 确认 u-boot 版本是否支持 -``` -setenv bootcmd "usb start; fatload usb 0 0x90100000 baremetal.elf; bootelf -p 0x90100000" -saveenv -``` - -## 1.3 新建一个baremetal应用工程 -如果您希望自己建立一个应用工程,可以参考下面的流程 -### 1.3.1 选择工程模板 - -- 复制`~/standalone-sdk/example/template`目录,作为 baremetal 应用工程 - - > `*` 表示可选文件/目录 - ``` - $ ls - Kconfig --> 应用工程配置menu文件 - makefile --> makefile - main.c --> 包含main函数 - sdkconfig --> 配置输出 - sdkconfig.h --> 配置输出 - inc --> 用户头文件* - src --> 用户源文件* - ``` - >请注意使用小写makefile,使用Makefile在部分平台不能被识别 - -### 1.3.2 选择目标平台 - -- 切换目标平台, e.g `FT2000/4 AARCH32`, 加载默认配置 - - ``` - make config_ft2004_aarch32 - ``` - - > 使用`FT2000-4`作为目标编译平台,通过`make config_ft2004_aarch32`和`make config_ft2004_aarch64`加载默认配置 - - > 使用`D2000`作为目标编译平台,通过`make config_d2000_aarch32`和`make config_d2000_aarch64`加载默认配置 - -- 编译应用工程, 生成`*.bin`文件用于下载到开发板 - ``` - $ make - $ ls - template.bin --> 二进制文件 - template.dis --> 反汇编文件 - template.elf --> ELF文件 - template.map --> 内存布局文件 - ``` - ![输入图片说明](../../fig/compiling.png) - -### 1.3.3 快速使用例程 - -- 将`BIN`文件或者`ELF`文件复制到`tftpboot`目录 - ``` - $ cp ./baremetal.bin /mnt/d/tftboot - $ cp ./baremetal.elf /mnt/d/tftboot - ``` - > ~/standalone-sdk/example/aarch32_hello_world - ![输入图片说明](../../fig/load_image.png) -- 结合1.2节中的操作,即可快速使用自己创建的例程 \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/Kconfig b/bsp/phytium/libraries/standalone/drivers/Kconfig deleted file mode 100644 index 32a49bb715..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/Kconfig +++ /dev/null @@ -1,270 +0,0 @@ -menu "Components Configuration" -config USE_SPI - bool - prompt "Use Spi" - default n - help - Include SPI modules and enable SPI - - if USE_SPI - source "$STANDALONE_DIR/drivers/spi/Kconfig" - endif - -config USE_QSPI - bool - prompt "Use QSpi" - default n - help - Include QSPI modules and enable QSPI - - if USE_QSPI - source "$STANDALONE_DIR/drivers/qspi/Kconfig" - endif - -config USE_GIC - bool - prompt "Use Gic" - default y - help - Include Generic Interrupt Controllor - - if USE_GIC - source "$STANDALONE_DIR/drivers/gic/Kconfig" - endif - -config USE_IOPAD - bool - prompt "Use Iopad" - depends on TARGET_E2000 - help - Include Iopad - - if USE_IOPAD - source "$STANDALONE_DIR/drivers/iopad/Kconfig" - endif - -config USE_SERIAL - bool - prompt "Use SERIAL" - default n - help - Include serial modules and enable serial - - if USE_SERIAL - source "$STANDALONE_DIR/drivers/serial/Kconfig" - endif - - -config USE_GPIO - bool - prompt "Use Gpio" - default n - help - Include GPIO modules and enable GPIO - - if USE_GPIO - source "$STANDALONE_DIR/drivers/pin/fgpio/Kconfig" - endif - -config USE_ETH - bool - prompt "Use Eth" - default n - help - Include eth - - if USE_ETH - source "$STANDALONE_DIR/drivers/eth/Kconfig" - endif - -config USE_CAN - bool - prompt "Use Can" - default n - help - Include can - - if USE_CAN - source "$STANDALONE_DIR/drivers/can/Kconfig" - endif - -config USE_I2C - bool - prompt "Use I2C" - default n - help - Include I2C modules and enable I2C - - if USE_I2C - source "$STANDALONE_DIR/drivers/i2c/Kconfig" - endif - - -config USE_TIMER - bool - prompt "Use Timer" - default n - help - Include Timer modules and enable Timer - - if USE_TIMER - source "$STANDALONE_DIR/drivers/timer/Kconfig" - endif - -config USE_MIO - bool - prompt "Use Mio" - default n - help - Include Mio modules and enable Mio - - if USE_MIO - source "$STANDALONE_DIR/drivers/mio/Kconfig" - endif - -config USE_SDMMC - bool - prompt "Use SD/MMC" - default n - help - Include SD/MMC modules and enable Timer - - if USE_SDMMC - source "$STANDALONE_DIR/drivers/mmc/Kconfig" - endif - -config USE_PCIE - bool - prompt "Use PCIE" - default n - help - Include PCIE - - if USE_PCIE - source "$STANDALONE_DIR/drivers/pcie/Kconfig" - endif - -config USE_WDT - bool - prompt "Use WDT" - default n - help - Include watchdog timer modules and enable watchdog timer - - if USE_WDT - source "$STANDALONE_DIR/drivers/watchdog/Kconfig" - endif - - -config USE_DMA - bool - prompt "Use DMA" - default n - help - Include DMA - - if USE_DMA - source "$STANDALONE_DIR/drivers/dma/Kconfig" - endif - -config USE_NAND - bool - prompt "Use NAND" - help - Include NAND - - if USE_NAND - source "$STANDALONE_DIR/drivers/nand/Kconfig" - endif - -config USE_RTC - bool - prompt "Use RTC" - default n - help - Include system rtc service - - if USE_RTC - source "$STANDALONE_DIR/drivers/rtc/Kconfig" - endif - -config USE_SATA - bool - prompt "Use SATA" - default n - help - Include system sata service - - if USE_SATA - source "$STANDALONE_DIR/drivers/sata/Kconfig" - endif - -config USE_USB - bool - prompt "Use USB" - default n - help - Include USB Subsystem - - if USE_USB - source "$STANDALONE_DIR/drivers/usb/Kconfig" - endif - -config USE_ADC - bool - prompt "Use ADC" - default n - help - Include adc modules and enable adc - - if USE_ADC - source "$STANDALONE_DIR/drivers/adc/Kconfig" - endif - -config USE_PWM - bool - prompt "Use PWM" - default n - help - Include system pwm - - if USE_PWM - source "$STANDALONE_DIR/drivers/pwm/Kconfig" - endif - -config USE_IPC - bool - prompt "Use IPC" - default n - help - Include IPC Service - - if USE_IPC - source "$STANDALONE_DIR/drivers/ipc/Kconfig" - endif - - -config USE_MEDIA - bool - prompt "USE MEDIA" - default n - help - Include media drivers - - if USE_MEDIA - source "$STANDALONE_DIR/drivers/media/Kconfig" - endif - -config USE_SCMI_MHU - bool - prompt "USE SCMI_MHU" - default n - help - Include scmi_mhu drivers - - if USE_SCMI_MHU - source "$STANDALONE_DIR/drivers/scmi/Kconfig" - endif - -endmenu - diff --git a/bsp/phytium/libraries/standalone/drivers/adc/Kconfig b/bsp/phytium/libraries/standalone/drivers/adc/Kconfig deleted file mode 100644 index 58f7dd8a6f..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/adc/Kconfig +++ /dev/null @@ -1,10 +0,0 @@ - -menu "ADC Configuration" - config USE_FADC - bool - prompt "Use FADC" - default n - -endmenu - - diff --git a/bsp/phytium/libraries/standalone/drivers/adc/fadc/fadc.c b/bsp/phytium/libraries/standalone/drivers/adc/fadc/fadc.c deleted file mode 100644 index 2cd42b1538..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/adc/fadc/fadc.c +++ /dev/null @@ -1,537 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fadc.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:28:45 - * Description: This file is for the minimum required function implementations for this driver. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 wangxiaodong 2022/8/15 init commit - */ - -#include -#include "fgeneric_timer.h" -#include "fkernel.h" -#include "ftypes.h" -#include "ferror_code.h" -#include "fdebug.h" -#include "fadc.h" -#include "fadc_hw.h" -#include "fparameters.h" -#include "fassert.h" -#include "fsleep.h" - -#define FADC_DEBUG_TAG "FT_ADC" -#define FADC_DEBUG(format, ...) FT_DEBUG_PRINT_D(FADC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FADC_INFO(format, ...) FT_DEBUG_PRINT_I(FADC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FADC_WARN(format, ...) FT_DEBUG_PRINT_W(FADC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FADC_ERROR(format, ...) FT_DEBUG_PRINT_E(FADC_DEBUG_TAG, format, ##__VA_ARGS__) - -#define FADC_MAX_CLOCK_PRESC 16 - -#define FADC_MAX_THRESHOLD 0x400 - - -/** - * @name: FAdcPowerDownControl - * @msg: Set power down signal - * @param {FAdcCtrl} *pctrl, pointer to a FAdcCtrl structure that contains - * the configuration information for the specified adc module. - * @param {u8} power_state, this parameter must be enable or disable. - * @return err code information, FADC_SUCCESS indicates success,others indicates failed - */ -static FError FAdcPowerDownControl(FAdcCtrl *pctrl, u8 power_state) -{ - - FASSERT(pctrl != NULL); - FASSERT(FT_COMPONENT_IS_READY == pctrl->is_ready); - u32 reg_val = 0; - uintptr base_addr = pctrl->config.base_addr; - reg_val = FADC_READ_REG32(base_addr, FADC_CTRL_REG_OFFSET); - if (power_state == FADC_CTRL_PD_ENABLE) - { - reg_val |= FADC_CTRL_REG_PD_EN; - } - else - { - reg_val &= ~(FADC_CTRL_REG_PD_EN); - } - - FADC_WRITE_REG32(base_addr, FADC_CTRL_REG_OFFSET, reg_val); - - return FADC_SUCCESS; -} - -/** - * @name: FAdcChannelEnable - * @msg: enable channel, corresponding to fix channel mode or multi channel mode. - * @param {FAdcCtrl} *pctrl, pointer to a FAdcCtrl structure that contains - * the configuration information for the specified adc module. - * @param {FAdcChannel} channel, adc channel number. - * @param {boolean} state, TRUE-enable, FALSE-disable - * @return void - */ -void FAdcChannelEnable(FAdcCtrl *pctrl, FAdcChannel channel, boolean state) -{ - FASSERT(pctrl != NULL); - FASSERT(FT_COMPONENT_IS_READY == pctrl->is_ready); - FASSERT(channel < FADC_CHANNEL_NUM); - u32 reg_val = 0; - uintptr base_addr = pctrl->config.base_addr; - reg_val = FADC_READ_REG32(base_addr, FADC_CTRL_REG_OFFSET); - - if (state == TRUE) - { - if (reg_val & FADC_CTRL_REG_FIX_CHANNEL) - { - reg_val &= ~(FADC_CTRL_REG_FIX_CHANNEL_NUM_MASK); - reg_val |= FADC_CTRL_REG_FIX_CHANNEL_NUM(channel); - } - else - { - reg_val |= FADC_CTRL_REG_CHANNEL_EN(channel); - } - } - else - { - /* fix channel mode, disable means stop convert */ - if (reg_val & FADC_CTRL_REG_FIX_CHANNEL) - { - reg_val &= ~(FADC_CTRL_REG_SOC_EN); - - } - else - { - reg_val &= ~(FADC_CTRL_REG_CHANNEL_EN(channel)); - } - } - - - FADC_WRITE_REG32(base_addr, FADC_CTRL_REG_OFFSET, reg_val); - -} - -/** - * @name: FAdcChannelThresholdSet - * @msg: Set adc channel high_threshold and low_threshold. - * you need use this function after FAdcConvertSet. If you want to use this function to - * add other channel enable when the adc conversion is started, you need to restart the - * adc convert start signal(adc_soc_en) after use to make the operation valid. - * @param {FAdcCtrl} *pctrl, pointer to a FAdcCtrl structure that contains - * the configuration information for the specified adc module. - * @param {FAdcChannel} channel, adc channel number. - * @param {FAdcThresholdConfig} *threshold_config, pointer to adc channel threshold value struct. - * @return err code information, FADC_SUCCESS indicates success,others indicates failed - */ -FError FAdcChannelThresholdSet(FAdcCtrl *pctrl, FAdcChannel channel, FAdcThresholdConfig *threshold_config) -{ - FASSERT(pctrl != NULL); - FASSERT(FT_COMPONENT_IS_READY == pctrl->is_ready); - FASSERT(channel < FADC_CHANNEL_NUM); - - u16 low_threshold = threshold_config->low_threshold; - u16 high_threshold = threshold_config->high_threshold; - - FASSERT(high_threshold < FADC_MAX_THRESHOLD); - FASSERT(low_threshold < high_threshold); - - uintptr base_addr = pctrl->config.base_addr; - - u32 threshold = (FADC_LEVEL_REG_HIGH_LEVEL(high_threshold)) | - (FADC_LEVEL_REG_LOW_LEVEL(low_threshold)); - FADC_WRITE_REG32(base_addr, (FADC_LEVEL_REG_OFFSET(channel)), threshold); - - return FADC_SUCCESS; -} - -/** - * @name: FAdcConvertSet - * @msg: config adc convert parameters. - * @param {FAdcCtrl} *pctrl, pointer to a FAdcCtrl structure that contains - * the configuration information for the specified adc module. - * @param {FAdcConvertConfig} *convert_config, include convert mode,channel mode, - * clock divider and convert_interval. - * @return err code information, FADC_SUCCESS indicates success,others indicates failed - */ -FError FAdcConvertSet(FAdcCtrl *pctrl, FAdcConvertConfig *convert_config) -{ - FASSERT(pctrl != NULL); - FASSERT(FT_COMPONENT_IS_READY == pctrl->is_ready); - - u32 reg_val = 0; - uintptr base_addr = pctrl->config.base_addr; - reg_val = FADC_READ_REG32(base_addr, FADC_CTRL_REG_OFFSET); - - /* clk_div config */ - u32 clk_div = convert_config->clk_div; - FASSERT(clk_div < FADC_MAX_CLOCK_PRESC); - if (clk_div % 2 == 1) - { - FADC_ERROR("Clk_div is not even."); - return FADC_ERR_INVAL_PARM; - } - reg_val &= (~FADC_CTRL_REG_CLK_DIV_MASK); - reg_val |= FADC_CTRL_REG_CLK_DIV(clk_div); - - /* config convert mode */ - FAdcConvertMode convert_mode = convert_config->convert_mode; - FASSERT(convert_mode < FADC_CONVERT_MODE_NUM); - if (convert_mode == FADC_SINGLE_CONVERT) - { - reg_val |= FADC_CTRL_REG_SINGLE_CONVERT; - } - else - { - reg_val &= ~(FADC_CTRL_REG_SINGLE_CONVERT); - } - - /* config channel mode */ - FAdcChannelMode channel_mode = convert_config->channel_mode; - FASSERT(channel_mode < FADC_CHANNEL_MODE_NUM); - - if (channel_mode == FADC_FIXED_CHANNEL) - { - reg_val |= FADC_CTRL_REG_FIX_CHANNEL; - } - else - { - reg_val &= ~(FADC_CTRL_REG_FIX_CHANNEL); - } - FADC_WRITE_REG32(base_addr, FADC_CTRL_REG_OFFSET, reg_val); - - /* config time interval between two converts */ - FADC_WRITE_REG32(base_addr, FADC_INTER_REG_OFFSET, convert_config->convert_interval); - - return FADC_SUCCESS; -} - - -/** - * @name: FAdcInterruptEnable - * @msg: enable channel interrupt. - * @param {FAdcCtrl} *pctrl, pointer to a FAdcCtrl structure that contains - * the configuration information for the specified adc module. - * @param {FAdcChannel} channel, adc channel number. - * @param {FAdcIntrEvtType} event_type, interrupt event type - * @return err code information, FADC_SUCCESS indicates success,others indicates failed - */ -FError FAdcInterruptEnable(FAdcCtrl *pctrl, FAdcChannel channel, FAdcIntrEventType event_type) -{ - FASSERT(pctrl != NULL); - FASSERT(FT_COMPONENT_IS_READY == pctrl->is_ready); - - uintptr base_addr = pctrl->config.base_addr; - u32 reg_val = 0; - reg_val = FADC_READ_REG32(base_addr, FADC_INTRMASK_REG_OFFSET); - switch (event_type) - { - case FADC_INTR_EVENT_COVFIN: /* enable channel convert complete irq */ - reg_val &= ~(FADC_INTRMASK_REG_COVFIN_MASK(channel)); - break; - - case FADC_INTR_EVENT_DLIMIT: - reg_val &= ~(FADC_INTRMASK_REG_DLIMIT_MASK(channel)); - break; - - case FADC_INTR_EVENT_ULIMIT: - reg_val &= ~(FADC_INTRMASK_REG_ULIMIT_MASK(channel)); - break; - - case FADC_INTR_EVENT_ERROR: - reg_val &= ~(FADC_INTRMASK_REG_ERR_MASK); - break; - - default: - break; - } - - FADC_WRITE_REG32(base_addr, FADC_INTRMASK_REG_OFFSET, reg_val); - - return FADC_SUCCESS; -} - -/** - * @name: FAdcInterruptDisable - * @msg: disable channel interrupt. - * @param {FAdcCtrl} *pctrl, pointer to a FAdcCtrl structure that contains - * the configuration information for the specified adc module. - * @param {FAdcChannel} channel, adc channel number. - * @param {FAdcIntrEvtType} event_type, interrupt event type - * @return err code information, FADC_SUCCESS indicates success,others indicates failed - */ -FError FAdcInterruptDisable(FAdcCtrl *pctrl, FAdcChannel channel, FAdcIntrEventType event_type) -{ - FASSERT(pctrl != NULL); - FASSERT(FT_COMPONENT_IS_READY == pctrl->is_ready); - FASSERT(channel < FADC_CHANNEL_NUM); - - uintptr base_addr = pctrl->config.base_addr; - u32 reg_val = 0; - reg_val = FADC_READ_REG32(base_addr, FADC_INTRMASK_REG_OFFSET); - switch (event_type) - { - case FADC_INTR_EVENT_COVFIN: /* enable channel convert complete irq */ - reg_val |= (FADC_INTRMASK_REG_COVFIN_MASK(channel)); - break; - - case FADC_INTR_EVENT_DLIMIT: - reg_val |= (FADC_INTRMASK_REG_DLIMIT_MASK(channel)); - break; - - case FADC_INTR_EVENT_ULIMIT: - reg_val |= (FADC_INTRMASK_REG_ULIMIT_MASK(channel)); - break; - - case FADC_INTR_EVENT_ERROR: - reg_val |= (FADC_INTRMASK_REG_ERR_MASK); - break; - - default: - break; - } - - FADC_WRITE_REG32(base_addr, FADC_INTRMASK_REG_OFFSET, reg_val); - - return FADC_SUCCESS; -} - -/** - * @name: FAdcConvertStart - * @msg: Start adc convert. - * @param {FAdcCtrl} *pctrl, pointer to a FAdcCtrl structure that contains - * the configuration information for the specified adc module. - * @return - */ -void FAdcConvertStart(FAdcCtrl *pctrl) -{ - FASSERT(pctrl != NULL); - FASSERT(FT_COMPONENT_IS_READY == pctrl->is_ready); - u32 reg_val = 0; - uintptr base_addr = pctrl->config.base_addr; - reg_val = FADC_READ_REG32(base_addr, FADC_CTRL_REG_OFFSET); - reg_val |= FADC_CTRL_REG_SOC_EN; - FADC_WRITE_REG32(base_addr, FADC_CTRL_REG_OFFSET, reg_val); - -} - -/** - * @name: FAdcConvertStop - * @msg: Stop adc convert. - * @param {FAdcCtrl} *pctrl, pointer to a FAdcCtrl structure that contains - * the configuration information for the specified adc module. - * @return - */ -void FAdcConvertStop(FAdcCtrl *pctrl) -{ - FASSERT(pctrl != NULL); - FASSERT(FT_COMPONENT_IS_READY == pctrl->is_ready); - u32 reg_val = 0; - uintptr base_addr = pctrl->config.base_addr; - reg_val = FADC_READ_REG32(base_addr, FADC_CTRL_REG_OFFSET); - reg_val &= (~FADC_CTRL_REG_SOC_EN); - FADC_WRITE_REG32(base_addr, FADC_CTRL_REG_OFFSET, reg_val); - -} - -/** - * @name: FAdcInit - * @msg: init adc variable configuration. - * @param {FAdcCtrl} *pctrl, pointer to a FAdcCtrl structure that contains - * the configuration information for the specified adc module. - * @param {FAdcConvertConfig} *convert_config, pointer to adc convert configuration - * @return err code information, FADC_SUCCESS indicates success,others indicates failed - */ -FError FAdcVariableConfig(FAdcCtrl *pctrl, FAdcConvertConfig *convert_config) -{ - FASSERT(pctrl != NULL); - FASSERT(convert_config != NULL); - - FError ret = FADC_SUCCESS; - - /* disable power down signal */ - ret = FAdcPowerDownControl(pctrl, FADC_CTRL_PD_DISABLE); - if (ret != FADC_SUCCESS) - { - FADC_ERROR("FAdcPowerDownControl failed."); - return FADC_ERR_CMD_FAILED; - } - - /* set time interval between two converts */ - ret = FAdcConvertSet(pctrl, convert_config); - if (ret != FADC_SUCCESS) - { - FADC_ERROR("FAdcConvertSet failed."); - return FADC_ERR_CMD_FAILED; - } - - return ret; -} - -/** - * @name: FAdcSingleConvertEnable - * @msg: Enable single convert signal, when convert mode is set to single conversion. - * @param {FAdcCtrl} *pctrl, pointer to a FAdcCtrl structure that contains - * the configuration information for the specified adc module. - * @return err code information, FADC_SUCCESS indicates success,others indicates failed - */ -static FError FAdcSingleConvertEnable(FAdcCtrl *pctrl) -{ - FASSERT(pctrl != NULL); - FASSERT(FT_COMPONENT_IS_READY == pctrl->is_ready); - u32 reg_val = 0; - uintptr base_addr = pctrl->config.base_addr; - reg_val = FADC_READ_REG32(base_addr, FADC_CTRL_REG_OFFSET); - reg_val |= FADC_CTRL_REG_SINGLE_CONVERT_EN; - FADC_WRITE_REG32(base_addr, FADC_CTRL_REG_OFFSET, reg_val); - - return FADC_SUCCESS; -} - -/** - * @name: FAdcReadConvertResult - * @msg: read adc channel convert result value. - * @param {FAdcCtrl} *pctrl, pointer to a FAdcCtrl structure that contains - * the configuration information for the specified adc module. - * @param {FAdcChannel} channel, adc channel number. - * @param {u16} *val, pointer to adc convert result value. - * @return err code information, FADC_SUCCESS indicates success,others indicates failed. - */ -FError FAdcReadConvertResult(FAdcCtrl *pctrl, FAdcChannel channel, u16 *val) -{ - FASSERT(pctrl != NULL); - FASSERT(channel < FADC_CHANNEL_NUM); - FASSERT(FT_COMPONENT_IS_READY == pctrl->is_ready); - int timeout = FADC_READ_DELAY; - uintptr base_addr = pctrl->config.base_addr; - - u32 reg_val = FADC_READ_REG32(base_addr, FADC_CTRL_REG_OFFSET); - /* single conversion */ - if (reg_val & FADC_CTRL_REG_SINGLE_CONVERT) - { - FAdcSingleConvertEnable(pctrl); - } - - do - { - fsleep_millisec(10); - } - while ((!pctrl->convert_complete[channel]) && (0 <= --timeout)); - - if (0 >= timeout) - { - FADC_ERROR("Timeout when reading adc-data, the conversion is not finished."); - *val = 0; - return FADC_ERR_TIMEOUT; - } - - FADC_CONVERT_UNCOMPLETE(pctrl->convert_complete[channel]); - *val = pctrl->value[channel]; - - return FADC_SUCCESS; -} - -/** - * @name: FAdcReadFinishCnt - * @msg: read adc channel convert finish count. - * @param {FAdcCtrl} *pctrl, pointer to a FAdcCtrl structure that contains - * the configuration information for the specified adc module. - * @param {FAdcChannel} channel, adc channel number. - * @param {u32} *count, pointer to adc convert finish count. - * @return err code information, FADC_SUCCESS indicates success,others indicates failed. - */ -FError FAdcReadFinishCnt(FAdcCtrl *pctrl, FAdcChannel channel, u32 *count) -{ - FASSERT(pctrl != NULL); - FASSERT(FT_COMPONENT_IS_READY == pctrl->is_ready); - - uintptr base_addr = pctrl->config.base_addr; - *count = FADC_READ_REG32(base_addr, FADC_FINISH_CNT_REG_OFFSET(channel)); - return FADC_SUCCESS; -} - -/** - * @name: FAdcReadHisLimit - * @msg: read adc channel history limit value, include upper limit and lower limit. - * @param {FAdcCtrl} *pctrl, pointer to a FAdcCtrl structure that contains - * the configuration information for the specified adc module. - * @param {FAdcChannel} channel, adc channel number. - * @param {u16} *u_his_limit, pointer to adc convert history upper limit value. - * @param {u16} *d_his_limit, pointer to adc convert history lower limit value. - * @return err code information, FADC_SUCCESS indicates success,others indicates failed. - */ -FError FAdcReadHisLimit(FAdcCtrl *pctrl, FAdcChannel channel, u16 *u_his_limit, u16 *d_his_limit) -{ - FASSERT(pctrl != NULL); - FASSERT(FT_COMPONENT_IS_READY == pctrl->is_ready); - u32 reg_val = 0; - uintptr base_addr = pctrl->config.base_addr; - - reg_val = FADC_READ_REG32(base_addr, FADC_HIS_LIMIT_REG_OFFSET(channel)); - - *u_his_limit = (reg_val & FADC_HIS_LIMIT_REG_UMASK) >> 16; - *d_his_limit = (reg_val & FADC_HIS_LIMIT_REG_DMASK) ; - - return FADC_SUCCESS; -} - -/** - * @name: FAdcDeInitialize - * @msg: DeInitialization function for the device instance - * @param {FAdcCtrl} *pctrl, instance of FADC controller - * @return {*} - */ -void FAdcDeInitialize(FAdcCtrl *pctrl) -{ - FASSERT(pctrl); - - pctrl->is_ready = 0; - memset(pctrl, 0, sizeof(*pctrl)); - - return; -} - -/** - * @name: FAdcCfgInitialize - * @msg: Initializes a specific instance such that it is ready to be used. - * @param {FAdcCtrl} *pctrl, instance of FADC controller - * @param {FAdcConfig} *input_config_p, Default configuration parameters of FADC - * @return err code information, FADC_SUCCESS indicates success,others indicates failed - */ -FError FAdcCfgInitialize(FAdcCtrl *pctrl, const FAdcConfig *input_config_p) -{ - FASSERT(pctrl && input_config_p); - - FError ret = FADC_SUCCESS; - /* - * If the device is started, disallow the initialize and return a Status - * indicating it is started. This allows the user to de-initialize the device - * and reinitialize, but prevents a user from inadvertently - * initializing. - */ - if (FT_COMPONENT_IS_READY == pctrl->is_ready) - { - FADC_WARN("The device was already initialized!"); - } - - /*Set default values and configuration data */ - FAdcDeInitialize(pctrl); - - pctrl->config = *input_config_p; - - pctrl->is_ready = FT_COMPONENT_IS_READY; - - return ret; -} diff --git a/bsp/phytium/libraries/standalone/drivers/adc/fadc/fadc.h b/bsp/phytium/libraries/standalone/drivers/adc/fadc/fadc.h deleted file mode 100644 index 118ba1294c..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/adc/fadc/fadc.h +++ /dev/null @@ -1,181 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fadc.h - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:29:10 - * Description: This file is for detailed description of the device configuration and driver. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 wangxiaodong 2022/4/15 init commit - */ - -#ifndef FADC_H -#define FADC_H - -#include "ftypes.h" -#include "fdebug.h" -#include "ferror_code.h" -#include "fkernel.h" -#include "fparameters.h" - - -#ifdef __cplusplus -extern "C" -{ -#endif - - -#define FADC_SUCCESS FT_SUCCESS -#define FADC_ERR_INVAL_PARM FT_MAKE_ERRCODE(ErrModBsp, ErrBspAdc, 1) -#define FADC_ERR_NOT_READY FT_MAKE_ERRCODE(ErrModBsp, ErrBspAdc, 2) -#define FADC_ERR_TIMEOUT FT_MAKE_ERRCODE(ErrModBsp, ErrBspAdc, 3) -#define FADC_ERR_CMD_FAILED FT_MAKE_ERRCODE(ErrModBsp, ErrBspAdc, 4) -#define FADC_ERR_NOT_SUPPORT FT_MAKE_ERRCODE(ErrModBsp, ErrBspAdc, 5) - -#define FADC_CTRL_PD_DISABLE 0 -#define FADC_CTRL_PD_ENABLE 1 - -#define FADC_CONVERT_COMPLETE(x) (x=TRUE) -#define FADC_CONVERT_UNCOMPLETE(x) (x=FALSE) -#define FADC_READ_TIMEOUT (600) -#define FADC_READ_DELAY (10) - -/* adc interrupt event type */ -typedef enum -{ - FADC_INTR_EVENT_COVFIN = 0, /**< Handler type for convert finish interrupt */ - FADC_INTR_EVENT_DLIMIT = 1, /**< Handler type for low limit interrupt*/ - FADC_INTR_EVENT_ULIMIT = 2, /**< Handler type for high limit interrupt*/ - FADC_INTR_EVENT_ERROR = 3, /**< Handler type for error interrupt*/ - - FADC_INTR_EVENT_NUM -} FAdcIntrEventType; - -/* adc convert mode */ -typedef enum -{ - FADC_CONTINUOUS_CONVERT = 0,/* continuous conversion*/ - FADC_SINGLE_CONVERT = 1, /* single conversion*/ - - FADC_CONVERT_MODE_NUM - -} FAdcConvertMode; - -/* adc channel mode */ -typedef enum -{ - FADC_MULTI_CHANNEL = 0, /* multi channel conversion*/ - FADC_FIXED_CHANNEL = 1, /* fixed channel conversion*/ - - FADC_CHANNEL_MODE_NUM -} FAdcChannelMode; - -/* adc base configuration */ -typedef struct -{ - u32 instance_id;/* adc id */ - uintptr base_addr;/* adc control register base address*/ - u32 irq_num;/* adc interrupt number */ - u32 irq_prority;/* adc interrupt priority*/ - const char *instance_name;/* instance name */ - -} FAdcConfig; - -typedef struct -{ - u32 convert_interval; /* convert interval time */ - u32 clk_div; /* clock divider, must be even*/ - FAdcConvertMode convert_mode;/*!< convert mode */ - FAdcChannelMode channel_mode;/*!< channel mode */ - -} FAdcConvertConfig; - -/* adc variable config */ -typedef struct -{ - u16 high_threshold; /*!< Configures the ADC analog high threshold value. - This parameter must be a 10-bit value. */ - u16 low_threshold; /*!< Configures the ADC analog low threshold value. - This parameter must be a 10-bit value. */ -} FAdcThresholdConfig; - - -typedef void (*FAdcIntrEventHandler)(void *param); - -typedef struct -{ - FAdcConfig config;/* adc config */ - u32 is_ready;/* adc init ready flag */ - u16 value[FADC_CHANNEL_NUM]; /* adc value */ - boolean convert_complete[FADC_CHANNEL_NUM]; /*!< Specifies whether the conversion is complete> */ - FAdcIntrEventHandler event_handler[FADC_INTR_EVENT_NUM]; /* event handler for interrupt */ - void *event_param[FADC_INTR_EVENT_NUM]; /* parameters of event handler */ - -} FAdcCtrl; - -/* get default configuration of specific adc id */ -const FAdcConfig *FAdcLookupConfig(u32 instance_id); - -/* DeInitialization function for the device instance */ -void FAdcDeInitialize(FAdcCtrl *pctrl); - -/* Initializes a specific instance such that it is ready to be used */ -FError FAdcCfgInitialize(FAdcCtrl *pctrl, const FAdcConfig *input_config_p); - -/* config adc convert parameters */ -FError FAdcConvertSet(FAdcCtrl *pctrl, FAdcConvertConfig *convert_config); - -/* Set adc channel high_threshold and low_threshold */ -FError FAdcChannelThresholdSet(FAdcCtrl *pctrl, FAdcChannel channel, FAdcThresholdConfig *threshold_config); - -/* init adc variable configuration */ -FError FAdcVariableConfig(FAdcCtrl *pctrl, FAdcConvertConfig *convert_config); - -/* enable channel interrupt */ -FError FAdcInterruptEnable(FAdcCtrl *pctrl, FAdcChannel channel, FAdcIntrEventType event_type); - -/* disable channel interrupt */ -FError FAdcInterruptDisable(FAdcCtrl *pctrl, FAdcChannel channel, FAdcIntrEventType event_type); - -void FAdcChannelEnable(FAdcCtrl *pctrl, FAdcChannel channel, boolean state); - -/* Start adc convert */ -void FAdcConvertStart(FAdcCtrl *pctrl); - -/* Stop adc convert */ -void FAdcConvertStop(FAdcCtrl *pctrl); - -/* read adc channel convert result value */ -FError FAdcReadConvertResult(FAdcCtrl *pctrl, FAdcChannel channel, u16 *val); - -/* read adc channel convert finish count */ -FError FAdcReadFinishCnt(FAdcCtrl *pctrl, FAdcChannel channel, u32 *count); - -/* read adc channel history limit value, include high limit and low limit */ -FError FAdcReadHisLimit(FAdcCtrl *pctrl, FAdcChannel channel, u16 *u_his_limit, u16 *d_his_limit); - -/* interrupt handler for the driver */ -void FAdcIntrHandler(s32 vector, void *args); - -/* register FAdc interrupt handler function */ -void FAdcRegisterInterruptHandler(FAdcCtrl *instance_p, FAdcIntrEventType event_type, - FAdcIntrEventHandler handler, void *param); - -#ifdef __cplusplus -} -#endif - -#endif \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/adc/fadc/fadc_g.c b/bsp/phytium/libraries/standalone/drivers/adc/fadc/fadc_g.c deleted file mode 100644 index 925692589a..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/adc/fadc/fadc_g.c +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fadc_g.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:28:45 - * Description: This file is for adc static configuration implementation. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 wangxiaodong 2022/4/16 init commit - */ - -#include "fparameters.h" -#include "fadc.h" - -/* default configs of adc ctrl */ -const FAdcConfig FAdcConfigTbl[FADC_NUM] = -{ - { - .instance_id = FADC0_ID, - .base_addr = FADC0_BASE_ADDR, - .irq_num = FADC0_IRQ_NUM, - .irq_prority = 0, - .instance_name = "ADC-0" - } -}; \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/adc/fadc/fadc_hw.c b/bsp/phytium/libraries/standalone/drivers/adc/fadc/fadc_hw.c deleted file mode 100644 index 9695f562cd..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/adc/fadc/fadc_hw.c +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fadc_hw.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-25 11:45:05 - * Description: This file is for adc register implementation. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 wangxiaodong 2022/4/15 init commit - */ - -#include "fparameters.h" -#include "fadc_hw.h" -#include "stdio.h" - -#define FADC_DEBUG_TAG "FT_ADC_HW" -#define FADC_DEBUG(format, ...) FT_DEBUG_PRINT_D(FADC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FADC_INFO(format, ...) FT_DEBUG_PRINT_I(FADC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FADC_WARN(format, ...) FT_DEBUG_PRINT_W(FADC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FADC_ERROR(format, ...) FT_DEBUG_PRINT_E(FADC_DEBUG_TAG, format, ##__VA_ARGS__) - -/** - * @name: FAdcDump - * @msg: debug register value for adc channel. - * @param {uintptr} base_addr, base address of FADC controller - * @param {u8} channel, adc channel number - * @return {*} - */ -void FAdcDump(uintptr base_addr, u8 channel) -{ - FADC_INFO("Off[0x%02x]: = 0x%08x", FADC_CTRL_REG_OFFSET, FADC_READ_REG32(base_addr, FADC_CTRL_REG_OFFSET)); - FADC_INFO("Off[0x%02x]: = 0x%08x", FADC_INTER_REG_OFFSET, FADC_READ_REG32(base_addr, FADC_INTER_REG_OFFSET)); - FADC_INFO("Off[0x%02x]: = 0x%08x", FADC_STATE_REG_OFFSET, FADC_READ_REG32(base_addr, FADC_STATE_REG_OFFSET)); - FADC_INFO("Off[0x%02x]: = 0x%08x", FADC_INTRMASK_REG_OFFSET, FADC_READ_REG32(base_addr, FADC_INTRMASK_REG_OFFSET)); - FADC_INFO("Off[0x%02x]: = 0x%08x", FADC_INTR_REG_OFFSET, FADC_READ_REG32(base_addr, FADC_INTR_REG_OFFSET)); - FADC_INFO("Off[0x%02x]: = 0x%08x", FADC_COV_RESULT_REG_OFFSET(channel), FADC_READ_REG32(base_addr, FADC_COV_RESULT_REG_OFFSET(channel))); - FADC_INFO("Off[0x%02x]: = 0x%08x", FADC_FINISH_CNT_REG_OFFSET(channel), FADC_READ_REG32(base_addr, FADC_FINISH_CNT_REG_OFFSET(channel))); - FADC_INFO("Off[0x%02x]: = 0x%08x", FADC_HIS_LIMIT_REG_OFFSET(channel), FADC_READ_REG32(base_addr, FADC_HIS_LIMIT_REG_OFFSET(channel))); - - FADC_INFO(""); - -} diff --git a/bsp/phytium/libraries/standalone/drivers/adc/fadc/fadc_hw.h b/bsp/phytium/libraries/standalone/drivers/adc/fadc/fadc_hw.h deleted file mode 100644 index 0796906dd9..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/adc/fadc/fadc_hw.h +++ /dev/null @@ -1,124 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fadc_hw.h - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:28:45 - * Description: This file is for adc register definition. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 wangxiaodong 2022/4/15 init commit - */ - -#ifndef FADC_HW_H -#define FADC_HW_H - -#include "fkernel.h" -#include "ftypes.h" -#include "fio.h" -#include "fdebug.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/* Generic ADC register definitions */ - -/* FADC register */ -#define FADC_CTRL_REG_OFFSET 0x00 -#define FADC_INTER_REG_OFFSET 0x04 -#define FADC_STATE_REG_OFFSET 0x08 -#define FADC_ERRCLR_REG_OFFSET 0x0c -#define FADC_LEVEL_REG_OFFSET(x) (0x10+(x)*4) -#define FADC_INTRMASK_REG_OFFSET 0x30 -#define FADC_INTR_REG_OFFSET 0x34 -#define FADC_COV_RESULT_REG_OFFSET(x) (0x38+(x)*4) -#define FADC_FINISH_CNT_REG_OFFSET(x) (0x58+(x)*4) -#define FADC_HIS_LIMIT_REG_OFFSET(x) (0x78+(x)*4) - -#define FADC_CTRL_REG_PD_EN BIT(31) -#define FADC_CTRL_REG_FIX_CHANNEL_NUM_MASK GENMASK(18, 16) -#define FADC_CTRL_REG_FIX_CHANNEL_NUM(x) ((x)<<16) -#define FADC_CTRL_REG_CLK_DIV(x) ((x)<<12) -#define FADC_CTRL_REG_CLK_DIV_MASK GENMASK(15, 12) -#define FADC_CTRL_REG_CHANNEL_EN(x) BIT((x)+4) -#define FADC_CTRL_REG_FIX_CHANNEL BIT(3) -#define FADC_CTRL_REG_SINGLE_CONVERT_EN BIT(2) -#define FADC_CTRL_REG_SINGLE_CONVERT BIT(1) -#define FADC_CTRL_REG_SOC_EN BIT(0) - -#define FADC_STATE_REG_B_STA(x) ((x)<<8) -#define FADC_STATE_REG_EOC_STA BIT(7) -#define FADC_STATE_REG_S_STA(x) ((x)<<4) -#define FADC_STATE_REG_SOC_STA BIT(3) -#define FADC_STATE_REG_ERR_STA BIT(2) -#define FADC_STATE_REG_COV_FINISH_STA BIT(1) -#define FADC_STATE_REG_CTL_BUSY_STA BIT(0) - -#define FADC_LEVEL_REG_HIGH_LEVEL(x) ((x)<<16) -#define FADC_LEVEL_REG_LOW_LEVEL(x) ((x)<<0) - -#define FADC_INTRMASK_REG_ERR_MASK BIT(24) -#define FADC_INTRMASK_REG_ULIMIT_MASK(x) BIT((x)*2+9) -#define FADC_INTRMASK_REG_DLIMIT_MASK(x) BIT((x)*2+8) -#define FADC_INTRMASK_REG_COVFIN_MASK(x) BIT((x)) - -#define FADC_INTR_REG_ERR BIT(24) -#define FADC_INTR_REG_ULIMIT(x) BIT((x)*2+9) -#define FADC_INTR_REG_DLIMIT(x) BIT((x)*2+8) -#define FADC_INTR_REG_COVFIN(x) BIT((x)) -#define FADC_INTR_REG_COVFIN_MASK GENMASK(7, 0) -#define FADC_INTR_REG_LIMIT_MASK GENMASK(23, 8) - -/* convert result range */ -#define FADC_COV_RESULT_REG_MASK GENMASK(9, 0) - -#define FADC_HIS_LIMIT_REG_UMASK GENMASK(25, 16) -#define FADC_HIS_LIMIT_REG_DMASK GENMASK(9, 0) - -/***************** Macros (Inline Functions) Definitions *********************/ - -/** - * @name: FADC_READ_REG32 - * @msg: 读取FADC寄存器 - * @param {u32} addr 定时器的基地址 - * @param {u32} reg_offset 定时器的寄存器的偏移 - * @return {u32} 寄存器参数 - */ -#define FADC_READ_REG32(addr, reg_offset) FtIn32(addr + (u32)(reg_offset)) - -/** - * @name: FADC_WRITE_REG32 - * @msg: 写入FADC寄存器 - * @param {u32} addr 定时器的基地址 - * @param {u32} reg_offset 定时器的寄存器的偏移 - * @param {u32} reg_value 写入寄存器参数 - * @return {void} - */ -#define FADC_WRITE_REG32(addr, reg_offset, reg_value) FtOut32((addr) + (u32)(reg_offset), (u32)(reg_value)) - -#define FADC_SETBIT(base_addr, reg_offset, data) FtSetBit32((base_addr) + (u32)(reg_offset), (u32)(data)) - -#define FADC_CLEARBIT(base_addr, reg_offset, data) FtClearBit32((base_addr) + (u32)(reg_offset), (u32)(data)) - -/* debug register value for adc channel */ -void FAdcDump(uintptr base_addr, u8 channel); - -#ifdef __cplusplus -} -#endif - -#endif \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/adc/fadc/fadc_intr.c b/bsp/phytium/libraries/standalone/drivers/adc/fadc/fadc_intr.c deleted file mode 100644 index f161eb64c4..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/adc/fadc/fadc_intr.c +++ /dev/null @@ -1,133 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fadc_intr.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:28:45 - * Description:  This file is for adc interrupt handler implementation. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 wangxiaodong 2022/4/25 init commit - */ - -#include "fparameters.h" -#include "fassert.h" -#include "fadc.h" -#include "fadc_hw.h" - -#define FADC_DEBUG_TAG "FT_ADC_INTR" -#define FADC_DEBUG(format, ...) FT_DEBUG_PRINT_D(FADC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FADC_INFO(format, ...) FT_DEBUG_PRINT_I(FADC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FADC_WARN(format, ...) FT_DEBUG_PRINT_W(FADC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FADC_ERROR(format, ...) FT_DEBUG_PRINT_E(FADC_DEBUG_TAG, format, ##__VA_ARGS__) - -#define FADC_CALL_INTR_EVENT_HANDLDER(instance_p, event) \ - if (instance_p->event_handler[event]) \ - instance_p->event_handler[event](instance_p->event_param[event]) - -/** - * @name: FAdcRegisterInterruptHandler - * @msg: register FAdc interrupt handler function - * @param {FAdc} *instance_p, pointer to the adc instance - * @param {FAdcIntrEvtType} event_type, interrupt event type - * @param {FAdcEvtHandler} handler, interrupt event handler - * @param {void} *param, contains a pointer to the driver instance - * @return {*} - */ -void FAdcRegisterInterruptHandler(FAdcCtrl *instance_p, FAdcIntrEventType event_type, - FAdcIntrEventHandler handler, void *param) -{ - FASSERT(instance_p); - FASSERT(event_type < FADC_INTR_EVENT_NUM); - instance_p->event_handler[event_type] = handler; - instance_p->event_param[event_type] = param; -} - -/** - * @name: FAdcIntrHandler - * @msg: This function is the interrupt handler for the driver. - * It must be connected to an interrupt system by the application such that it - * can be called when an interrupt occurs. - * @param vector Irq num ,Don't need attention . - * @param args contains a pointer to the driver instance - */ -void FAdcIntrHandler(s32 vector, void *args) -{ - FASSERT(args != NULL); - FAdcCtrl *pctrl = (FAdcCtrl *)args; - u32 status = 0; - u32 intrmask = 0; - u32 channel = 0; - uintptr base_addr = pctrl->config.base_addr; - - status = FADC_READ_REG32(base_addr, FADC_INTR_REG_OFFSET); - /* channel convert complete irq mask */ - intrmask = FADC_READ_REG32(base_addr, FADC_INTRMASK_REG_OFFSET); - - /* adc error interrupt */ - if (status & FADC_INTR_REG_ERR) - { - /* clear error interrupt status */ - FADC_SETBIT(base_addr, FADC_INTR_REG_OFFSET, FADC_INTR_REG_ERR); - - /* write error clear register, adc_errclr_reg=0 */ - FADC_WRITE_REG32(base_addr, FADC_ERRCLR_REG_OFFSET, 0); - - FADC_CALL_INTR_EVENT_HANDLDER(pctrl, FADC_INTR_EVENT_ERROR); - } - - if (status & FADC_INTR_REG_LIMIT_MASK) - { - for (channel = 0; channel < FADC_CHANNEL_NUM; channel++) - { - if (status & FADC_INTR_REG_DLIMIT(channel)) - { - /* clear dlimit interrupt status */ - FADC_SETBIT(base_addr, FADC_INTR_REG_OFFSET, FADC_INTR_REG_DLIMIT(channel)); - FADC_CALL_INTR_EVENT_HANDLDER(pctrl, FADC_INTR_EVENT_DLIMIT); - } - if (status & FADC_INTR_REG_ULIMIT(channel)) - { - /* clear ulimit interrupt status */ - FADC_SETBIT(base_addr, FADC_INTR_REG_OFFSET, FADC_INTR_REG_ULIMIT(channel)); - FADC_CALL_INTR_EVENT_HANDLDER(pctrl, FADC_INTR_EVENT_ULIMIT); - } - } - } - - /* 有中断转换完成的情况下,根据adc_intr_reg寄存器的通道转换完成中断标志位bit0~7,读取转换结果 */ - if (status & FADC_INTR_REG_COVFIN_MASK) - { - for (channel = 0; channel < FADC_CHANNEL_NUM; channel++) - { - if (status & FADC_INTR_REG_COVFIN(channel)) - { - pctrl->value[channel] = FADC_READ_REG32(base_addr, FADC_COV_RESULT_REG_OFFSET(channel)) & FADC_COV_RESULT_REG_MASK; - FADC_CONVERT_COMPLETE(pctrl->convert_complete[channel]); - /* clear convert finish interrupt status */ - FADC_SETBIT(base_addr, FADC_INTR_REG_OFFSET, FADC_INTR_REG_COVFIN(channel)); - } - } - - FADC_CALL_INTR_EVENT_HANDLDER(pctrl, FADC_INTR_EVENT_COVFIN); - } - else - { - - } - - return; -} - diff --git a/bsp/phytium/libraries/standalone/drivers/adc/fadc/fadc_sinit.c b/bsp/phytium/libraries/standalone/drivers/adc/fadc/fadc_sinit.c deleted file mode 100644 index 1335e3bd0c..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/adc/fadc/fadc_sinit.c +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fadc_sinit.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-25 11:45:05 - * Description: This file is for adc static variables implementation. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 wangxiaodong 2022/4/25 init commit - */ - - -/***************************** Include Files *********************************/ - - -#include "fparameters.h" -#include "fadc.h" -#include "fassert.h" - -extern FAdcConfig FAdcConfigTbl[FADC_NUM]; - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ - -/*****************************************************************************/ - -/** - * @name: FAdcLookupConfig - * @msg: get default configuration of specific adc id. - * @param {u32} instance_id, instance id of FADC controller - * @return {FAdcConfig*} Default configuration parameters of FADC - */ -const FAdcConfig *FAdcLookupConfig(u32 instance_id) -{ - const FAdcConfig *pconfig = NULL; - FASSERT(instance_id < FADC_NUM); - - u32 index = 0; - - for (index = 0; index < (u32)FADC_NUM; index++) - { - if (FAdcConfigTbl[index].instance_id == instance_id) - { - pconfig = &FAdcConfigTbl[index]; - break; - } - } - - return (FAdcConfig *)pconfig; -} diff --git a/bsp/phytium/libraries/standalone/drivers/can/Kconfig b/bsp/phytium/libraries/standalone/drivers/can/Kconfig deleted file mode 100644 index 33dfe2855f..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/can/Kconfig +++ /dev/null @@ -1,18 +0,0 @@ - -menu "CAN Configuration" - config USE_FCAN - bool - prompt "Use FCAN" - default n - if USE_FCAN - config FCAN_USE_CANFD - depends on TARGET_E2000 || TARGET_TARDIGRADE - bool - prompt "Use CanFD" - default n - help - use canfd protocol - endif - -endmenu - diff --git a/bsp/phytium/libraries/standalone/drivers/can/fcan/fcan.c b/bsp/phytium/libraries/standalone/drivers/can/fcan/fcan.c deleted file mode 100644 index 83058453b1..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/can/fcan/fcan.c +++ /dev/null @@ -1,1153 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fcan.c - * Date: 2021-04-29 10:21:53 - * LastEditTime: 2022-02-18 08:29:20 - * Description:  This files is for the can functions - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 wangxiaodong 2022/5/26 first release - * 1.1 wangxiaodong 2022/9/23 improve functions - * 1.2 zhangyan 2022/12/7 improve functions - */ - -#include "string.h" -#include -#include -#include "fkernel.h" -#include "fcan.h" -#include "fcan_hw.h" -#include "fassert.h" -#include "fdebug.h" -#include "fswap.h" -#include "fparameters.h" -#include "fsleep.h" - - -#define FT_CAN_DEBUG_TAG "FT_CAN" -#define FCAN_DEBUG(format, ...) FT_DEBUG_PRINT_D(FT_CAN_DEBUG_TAG, format, ##__VA_ARGS__) -#define FCAN_INFO(format, ...) FT_DEBUG_PRINT_I(FT_CAN_DEBUG_TAG, format, ##__VA_ARGS__) -#define FCAN_WARN(format, ...) FT_DEBUG_PRINT_W(FT_CAN_DEBUG_TAG, format, ##__VA_ARGS__) -#define FCAN_ERROR(format, ...) FT_DEBUG_PRINT_E(FT_CAN_DEBUG_TAG, format, ##__VA_ARGS__) - -typedef struct -{ - u32 tseg1_min; /* Time segement 1 = prop_seg + phase_seg1 */ - u32 tseg1_max; - u32 tseg2_min; /* Time segement 2 = phase_seg2 */ - u32 tseg2_max; - u32 sjw_max; /* Synchronisation jump width */ - u32 brp_min; /* Bit-rate prescaler */ - u32 brp_max; - u32 brp_inc; -} FCanBittimingConst; - -/* 仲裁段速率默认值 */ -static const FCanBittimingConst FCanArbBitConst = -{ - .tseg1_min = FCAN_ARB_TSEG1_MIN, /* Time segement 1 = prop_seg + phase_seg1 */ - .tseg1_max = FCAN_ARB_TSEG1_MAX, - .tseg2_min = FCAN_ARB_TSEG2_MIN, /* Time segement 2 = phase_seg2 */ - .tseg2_max = FCAN_ARB_TSEG2_MAX, - .sjw_max = FCAN_ARB_SJW_MAX, /* Synchronisation jump width */ - .brp_min = FCAN_ARB_BRP_MIN, /* Bit-rate prescaler */ - .brp_max = FCAN_ARB_BRP_MAX, - .brp_inc = FCAN_ARB_BRP_INC, -}; - -/* 数据段速率默认值 */ -static const FCanBittimingConst FCanDataBitConst = -{ - .tseg1_min = FCAN_DATA_TSEG1_MIN, /* Time segement 1 = prop_seg + phase_seg1 */ - .tseg1_max = FCAN_DATA_TSEG1_MAX, - .tseg2_min = FCAN_DATA_TSEG2_MIN, /* Time segement 2 = phase_seg2 */ - .tseg2_max = FCAN_DATA_TSEG2_MAX, - .sjw_max = FCAN_DATA_SJW_MAX, /* Synchronisation jump width */ - .brp_min = FCAN_DATA_BRP_MIN, /* Bit-rate prescaler */ - .brp_max = FCAN_DATA_BRP_MAX, - .brp_inc = FCAN_DATA_BRP_INC, -}; - -/* calculate the can sample point */ -static s32 FCanUpdateSamplePoint(const FCanBittimingConst *btc, - u32 sample_point_nominal, u32 tseg, - u32 *tseg1_ptr, u32 *tseg2_ptr, - u32 *sample_point_error_ptr) -{ - u32 sample_point_error, best_sample_point_error = UINT_MAX; - u32 sample_point, best_sample_point = 0; - u32 tseg1, tseg2; - s32 i; - - for (i = 0; i <= 1; i++) - { - tseg2 = tseg + CAN_CALC_SYNC_SEG - (sample_point_nominal * (tseg + CAN_CALC_SYNC_SEG)) / 1000 - i; - tseg2 = clamp(tseg2, btc->tseg2_min, btc->tseg2_max); - tseg1 = tseg - tseg2; - if (tseg1 > btc->tseg1_max) - { - tseg1 = btc->tseg1_max; - tseg2 = tseg - tseg1; - } - - sample_point = 1000 * (tseg + CAN_CALC_SYNC_SEG - tseg2) / (tseg + CAN_CALC_SYNC_SEG); - sample_point_error = abs(sample_point_nominal - sample_point); - - if ((sample_point <= sample_point_nominal) && (sample_point_error < best_sample_point_error)) - { - best_sample_point = sample_point; - best_sample_point_error = sample_point_error; - *tseg1_ptr = tseg1; - *tseg2_ptr = tseg2; - } - } - - if (sample_point_error_ptr) - { - *sample_point_error_ptr = best_sample_point_error; - } - - return best_sample_point; -} - -/** - * @name: FCanCalcBittiming - * @msg: This routine calculate Bit timing - * @param {structFCanBittiming} *bt_p is is a structure that contains the CAN baud rate configuration parameter , The user needs to fill in the baudrate first - * @param {u32} target_baudrate, parameters of target baudrate - * @param {u32} target_sample_point, parameters of target sample point, 0 means the general configuration is used - * @param {FCanSegmentType} target_segment, specifies which target is to be selected. followed by FCAN_ARB_SEGMENT or FCAN_DATA_SEGMENT - * @return err code information, FCAN_SUCCESS indicates success,others indicates failed - */ -static FError FCanCalcBittiming(FCanBaudrateConfig *bt_p, u32 target_baudrate, u32 target_sample_point, FCanSegmentType target_segment) -{ - u32 baudrate; /* current baudrate */ - u32 baudrate_error; /* difference between current and nominal value */ - u32 best_baudrate_error = UINT_MAX; - u32 sample_point_error; /* difference between current and nominal value */ - u32 best_sample_point_error = UINT_MAX; - u32 sample_point_nominal; /* nominal sample point */ - u32 best_tseg = 0; /* current best value for tseg */ - u32 best_brp = 0; /* current best value for brp */ - u32 brp, tsegall, tseg, tseg1 = 0, tseg2 = 0; - u64 v64; - - u32 reg_val; - - const FCanBittimingConst *btc; - FCanBaudrateConfig *bt = bt_p; - FASSERT(bt_p != NULL); - FASSERT(target_segment < FCAN_SEGMENT_TYPE_NUM); - - if (target_segment == FCAN_DATA_SEGMENT) - { - btc = &FCanDataBitConst; - } - else - { - btc = &FCanArbBitConst; - } - - if (target_sample_point) - { - sample_point_nominal = target_sample_point; - } - else - { - if (target_baudrate > 4000000) - { - sample_point_nominal = 650; - } - else if (target_baudrate > 2000000) - { - sample_point_nominal = 680; - } - else if (target_baudrate > 1000000) - { - sample_point_nominal = 725; - } - else if (target_baudrate > 800000) - { - sample_point_nominal = 750; - } - else if (target_baudrate > 500000) - { - sample_point_nominal = 800; - } - else - { - sample_point_nominal = 875; - } - } - - for (tseg = (btc->tseg1_max + btc->tseg2_max) * 2 + 1; - tseg >= (btc->tseg1_min + btc->tseg2_min) * 2; tseg--) - { - tsegall = CAN_CALC_SYNC_SEG + tseg / 2; - - /* Compute all possible tseg choices (tseg=tseg1+tseg2) */ - brp = FCAN_CLK_FREQ_HZ / (tsegall * target_baudrate) + tseg % 2; - - /* choose brp step which is possible in system */ - brp = (brp / btc->brp_inc) * btc->brp_inc; - - if ((brp < btc->brp_min) || (brp > btc->brp_max)) - { - continue; - } - - baudrate = FCAN_CLK_FREQ_HZ / (brp * tsegall); - baudrate_error = abs(target_baudrate - baudrate); - - /* tseg brp biterror */ - if (baudrate_error > best_baudrate_error) - { - continue; - } - - /* reset sample point error if we have a better baudrate */ - if (baudrate_error < best_baudrate_error) - { - best_sample_point_error = UINT_MAX; - } - - FCanUpdateSamplePoint(btc, sample_point_nominal, tseg / 2, &tseg1, &tseg2, &sample_point_error); - - FCAN_DEBUG("target_segment=%d, brp=%d, tseg=%d, tseg1=%d, tseg2=%d, sample_point_nominal=%d", - target_segment, brp, tseg, tseg1, tseg2, sample_point_nominal); - - u32 prop_seg = tseg1 / 2; - u32 phase_seg1 = tseg1 - prop_seg; - u32 phase_seg2 = tseg2; - u32 sjw = 1; - - /* Setting Baud Rate prescalar value in BRPR Register */ - reg_val = (brp - 1) << 16; - reg_val |= (prop_seg - 1) << 2; - reg_val |= (phase_seg1 - 1) << 5; - reg_val |= (phase_seg2 - 1) << 8; - reg_val |= (sjw - 1); - FCAN_DEBUG("reg_val=%#x\n", reg_val); - - if (sample_point_error > best_sample_point_error) - { - continue; - } - - best_sample_point_error = sample_point_error; - best_baudrate_error = baudrate_error; - best_tseg = tseg / 2; - best_brp = brp; - - if (baudrate_error == 0 && sample_point_error == 0) - { - break; - } - } - - if (best_baudrate_error) - { - /* Error in one-tenth of a percent */ - v64 = (u64)best_baudrate_error * 1000; - do_div(v64, target_baudrate); - baudrate_error = (u32)v64; - if (baudrate_error > CAN_CALC_MAX_ERROR) - { - FCAN_ERROR("Baudrate error."); - return FCAN_FAILURE; - } - } - - /* real sample point */ - FCanUpdateSamplePoint(btc, sample_point_nominal, best_tseg, - &tseg1, &tseg2, NULL); - FCAN_DEBUG("tseg1=%d, tseg2=%d, sample_point_nominal=%d", tseg1, tseg2, sample_point_nominal); - - bt->prop_seg = tseg1 / 2; - bt->phase_seg1 = tseg1 - bt->prop_seg; - bt->phase_seg2 = tseg2; - - /* check for sjw user settings */ - if (!bt->sjw || !btc->sjw_max) - { - bt->sjw = 1; - } - else - { - /* bt->sjw is at least 1 -> sanitize upper bound to sjw_max */ - if (bt->sjw > btc->sjw_max) - { - bt->sjw = btc->sjw_max; - } - /* bt->sjw must not be higher than tseg2 */ - if (tseg2 < bt->sjw) - { - bt->sjw = tseg2; - } - } - - bt->brp = best_brp; - - /* real baudrate */ - if (target_baudrate != FCAN_CLK_FREQ_HZ / (bt->brp * (CAN_CALC_SYNC_SEG + tseg1 + tseg2))) - { - FCAN_ERROR("Target baudrate calculate timing failed."); - return FCAN_FAILURE; - } - - FCAN_DEBUG("bt->prop_seg=%d, bt->phase_seg1=%d, bt->phase_seg2=%d, bt->sjw=%d, bt->brp=%d", - bt->prop_seg, bt->phase_seg1, bt->phase_seg2, bt->sjw, bt->brp); - - return FCAN_SUCCESS; -} - -static u32 FCanGetDlcLen(u32 dlc) -{ - u32 dlc_len = 0; - if (dlc == 0) - { - dlc_len = 8; - } - - switch (dlc) - { - case 1: - dlc_len = 1; - break; - case 2: - dlc_len = 2; - break; - case 3: - dlc_len = 3; - break; - case 4: - dlc_len = 4; - break; - case 5: - dlc_len = 5; - break; - case 6: - dlc_len = 6; - break; - case 7: - dlc_len = 7; - break; - case 8: - dlc_len = 8; - break; - case 9: - dlc_len = 12; - break; - case 10: - dlc_len = 16; - break; - case 11: - dlc_len = 20; - break; - case 12: - dlc_len = 24; - break; - case 13: - dlc_len = 32; - break; - case 14: - dlc_len = 48; - break; - case 15: - dlc_len = 64; - break; - default : - dlc_len = 0; - break; - } - - return dlc_len; - -} - -static u32 FCanSetDlcLen(u32 len) -{ - if (len <= 8) - { - return len; - } - else if (len <= 12) - { - return 9; - } - else if (len <= 16) - { - return 10; - } - else if (len <= 20) - { - return 11; - } - else if (len <= 24) - { - return 12; - } - else if (len <= 32) - { - return 13; - } - else if (len <= 48) - { - return 14; - } - else if (len <= 64) - { - return 15; - } - else - { - return 0; - } -} - -/** - * @name: FCanReset - * @msg: reset a specific can instance - * @param {FCanCtrl} *pctrl, instance of FCan controller - * @return {*} - */ -void FCanReset(FCanCtrl *instance_p) -{ - u32 reg_value; - FCanConfig *config_p; - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - config_p = &instance_p->config; - - FCAN_WRITE_REG32(config_p->base_address, FCAN_CTRL_OFFSET, 0); - reg_value = FCAN_READ_REG32(config_p->base_address, FCAN_CTRL_OFFSET); - if (reg_value & FCAN_CTRL_XFER_MASK) - { - FCAN_ERROR("Can is not in configration mode."); - return; - } - - /* reset can */ - FCAN_WRITE_REG32(config_p->base_address, FCAN_CTRL_OFFSET, FCAN_CTRL_RST_MASK); -} - -/** - * @name: FCanDeInitialize - * @msg: Deinitializes a specific can instance - * @param {FCanCtrl} *pctrl, instance of FCan controller - * @return {*} - */ -void FCanDeInitialize(FCanCtrl *instance_p) -{ - FASSERT(instance_p); - instance_p->is_ready = 0; - memset(instance_p, 0, sizeof(*instance_p)); - return; -} - -/** - * @name: FCanCfgInitialize - * @msg: Initializes a specific instance such that it is ready to be used. - * @param {FCanCtrl} *instance_p, instance of FCanCtrl controller - * @param {FCanConfig} *input_config_p, configuration parameters of FCanCtrl - * @return err code information, FCAN_SUCCESS indicates success,others indicates failed - */ -FError FCanCfgInitialize(FCanCtrl *instance_p, const FCanConfig *input_config_p) -{ - FASSERT(instance_p != NULL); - FASSERT(input_config_p != NULL); - - FError ret = FCAN_SUCCESS; - /* - * If the device is started, disallow the initialize and return a Status - * indicating it is started. This allows the user to de-initialize the device - * and reinitialize, but prevents a user from inadvertently - * initializing. - */ - if (FT_COMPONENT_IS_READY == instance_p->is_ready) - { - FCAN_WARN("Device is already initialized."); - } - - /*Set default values and configuration data */ - FCanDeInitialize(instance_p); - - instance_p->config = *input_config_p; - - instance_p->is_ready = FT_COMPONENT_IS_READY; - - FCanReset(instance_p); - - return ret; -} - -/** - * @name: FCanStatusGet - * @msg: read can status, include transfer status, error and fifo count. - * @param {FCanCtrl} *instance_p, pointer to a FCanCtrl structure that contains - * the configuration information for the specified can module. - * @param {FCanStatus} *status_p, pointer to can status, include send and receive, error and fifo count . - * @return err code information, FCAN_SUCCESS indicates success,others indicates failed. - */ -FError FCanStatusGet(FCanCtrl *instance_p, FCanStatus *status_p) -{ - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - FASSERT(status_p != NULL); - uintptr base_address = instance_p->config.base_address; - - u32 reg_val = 0; - reg_val = FCAN_READ_REG32(base_address, FCAN_XFER_STS_OFFSET); - - status_p->xfer_status.xfers = FCAN_XFER_STS_XFERS_GET(reg_val); - status_p->xfer_status.rs = FCAN_XFER_STS_RS_GET(reg_val); - status_p->xfer_status.ts = FCAN_XFER_STS_TS_GET(reg_val); - status_p->xfer_status.fies = FCAN_XFER_STS_FIES_GET(reg_val); - status_p->xfer_status.fras = FCAN_XFER_STS_FRAS_GET(reg_val); - - reg_val = FCAN_READ_REG32(base_address, FCAN_ERR_CNT_OFFSET); - status_p->rx_err_cnt = FCAN_ERR_CNT_RFN_GET(reg_val); - status_p->tx_err_cnt = FCAN_ERR_CNT_TFN_GET(reg_val); - - reg_val = FCAN_READ_REG32(base_address, FCAN_FIFO_CNT_OFFSET); - status_p->tx_fifo_cnt = FCAN_FIFO_CNT_TFN_GET(reg_val); - status_p->rx_fifo_cnt = FCAN_FIFO_CNT_RFN_GET(reg_val); - - return FCAN_SUCCESS; -} - -/** - * @name: FCanRecv - * @msg: receive can message by specific can instance. - * @param {FCanCtrl} *instance_p, pointer to a FCanCtrl structure that contains - * the configuration information for the specific can module. - * @param {FCanFrame} *frame_p, can message receive struct. - * @return err code information, FCAN_SUCCESS indicates success,others indicates failed. - */ -FError FCanRecv(FCanCtrl *instance_p, FCanFrame *frame_p) -{ - u32 canid; - u32 dlc; - int i = 0, j = 0; - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - FASSERT(frame_p != NULL); - uintptr base_address = instance_p->config.base_address; - - memset(frame_p, 0, sizeof(FCanFrame)); - - /* Read a frame from Phytium CAN */ - canid = FCAN_READ_REG32(base_address, FCAN_RX_FIFO_OFFSET); - /* if canid is big-endian ,use swap change to little-endian */ - canid = be32_to_cpu(canid); - - FCAN_DEBUG("FCanRecv canid = %#x\n", canid); - - /* identifier extension */ - if (canid & FCAN_IDR_IDE_MASK) - { - dlc = FCAN_READ_REG32(base_address, FCAN_RX_FIFO_OFFSET); - dlc = be32_to_cpu(dlc); - FCAN_DEBUG("FCanRecv dlc = %#x\n", dlc); - - if (dlc & FTCANFD_ID2_FDL_MASK) - { - if (dlc & FTCANFD_ID2_BRS_MASK) - { - frame_p->flags |= CANFD_BRS; - } - - if (dlc & FTCANFD_ID2_ESI_MASK) - { - frame_p->flags |= CANFD_ESI; - } - dlc = FTCANFD_ID2_EDLC_GET(dlc); - } - else - { - dlc = FCAN_IDR_EDLC_GET(dlc); - } - - frame_p->canid = FCAN_IDR_ID1_GET(canid) << FCAN_ACC_IDN_SHIFT; - frame_p->canid |= FCAN_IDR_ID2_GET(canid); - frame_p->canid |= CAN_EFF_FLAG; - - if (canid & FCAN_IDR_RTR_MASK) - { - frame_p->canid |= CAN_RTR_FLAG; - } - } - else - { - if (canid & FTCANFD_ID1_FDL_MASK) - { - if (canid & FTCANFD_ID1_BRS_MASK) - { - frame_p->flags |= CANFD_BRS; - } - - if (canid & FTCANFD_ID1_ESI_MASK) - { - frame_p->flags |= CANFD_ESI; - } - dlc = FTCANFD_ID1_SDLC_GET(canid); - } - else - { - dlc = FCAN_IDR_DLC_GET(canid); - } - - /* The received frame is a standard format frame */ - frame_p->canid = FCAN_IDR_ID1_GET(canid); - if (canid & FCAN_IDR_SRR_MASK) - { - frame_p->canid |= CAN_RTR_FLAG; - } - } - - frame_p->candlc = FCanGetDlcLen(dlc); - FCAN_DEBUG("FCanRecv frame_p->candlc = %d\n", frame_p->candlc); - - if (!(frame_p->canid & CAN_RTR_FLAG)) - { - j = 0; - for (i = frame_p->candlc; i > 0; i -= 4) - { - *(u32 *)(frame_p->data + j) = FCAN_READ_REG32(base_address, FCAN_RX_FIFO_OFFSET); - j += 4; - } - - if (i > 0) - { - *(u32 *)(frame_p->data + j) = FCAN_READ_REG32(base_address, FCAN_RX_FIFO_OFFSET); - } - } - - return FCAN_SUCCESS; -} - -/** - * @name: FCanSend - * @msg: send can message by specific can instance. - * @param {FCanCtrl} *instance_p, pointer to a FCanCtrl structure that contains - * the configuration information for the specific can module. - * @param {FCanFrame} *frame_p, can message send struct. - * @return err code information, FCAN_SUCCESS indicates success,others indicates failed. - */ -FError FCanSend(FCanCtrl *instance_p, FCanFrame *frame_p) -{ - u32 id, dlc; - - int i = 0, j = 0; - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - uintptr base_address = instance_p->config.base_address; - - while (FCAN_TX_FIFO_FULL(instance_p)); - - u32 can_send_dlc = FCanSetDlcLen(frame_p->candlc); - - if (frame_p->canid & CAN_EFF_FLAG) - { - /* Extended CAN id format */ - id = FCAN_IDR_ID2_SET(frame_p->canid & CAN_EFF_MASK); - id |= FCAN_IDR_ID1_SET((frame_p->canid & CAN_EFF_MASK) >> - (CAN_EFF_ID_BITS - CAN_SFF_ID_BITS)); - - /* The substibute remote TX request bit should be "1" - * for extended frames as in the Phytium CAN datasheet - */ - id |= FCAN_IDR_IDE_MASK | FCAN_IDR_SRR_MASK; - if (frame_p->canid & CAN_RTR_FLAG) - { - id |= FCAN_IDR_RTR_MASK; - } - - if (instance_p->use_canfd == TRUE) - { - dlc = can_send_dlc << FCANFD_IDR_EDLC_SHIFT; - dlc |= FTCANFD_ID2_FDL_MASK; - - /* enable brs-Bit Rate Switch */ - frame_p->flags |= CANFD_BRS; - - if (frame_p->flags & CANFD_BRS) - { - dlc |= FTCANFD_ID2_BRS_MASK; - } - - if (frame_p->flags & CANFD_ESI) - { - dlc |= FTCANFD_ID2_ESI_MASK; - } - } - else - { - dlc = can_send_dlc << FCAN_IDR_EDLC_SHIFT; - } - - FCAN_DEBUG("FCanSend id = %#x\n", id); - FCAN_DEBUG("FCanSend dlc = %#x\n", dlc); - FCAN_WRITE_REG32(base_address, FCAN_TX_FIFO_OFFSET, be32_to_cpu(id)); - FCAN_WRITE_REG32(base_address, FCAN_TX_FIFO_OFFSET, be32_to_cpu(dlc)); - } - else - { - /* Standard CAN id format */ - id = FCAN_IDR_ID1_SET(frame_p->canid & CAN_SFF_MASK); - - if (frame_p->canid & CAN_RTR_FLAG) - { - id |= FCAN_IDR_SRR_MASK; - } - - FCAN_DEBUG("instance_p->use_canfd = %d, can_send_dlc = %d \n", - instance_p->use_canfd, can_send_dlc); - - if (instance_p->use_canfd == TRUE) - { - dlc = ((can_send_dlc << FCANFD_IDR1_SDLC_SHIFT) | FTCANFD_IDR_PAD_MASK); - - dlc |= FTCANFD_ID1_FDL_MASK; - - /* enable brs-Bit Rate Switch */ - frame_p->flags |= CANFD_BRS; - - if (frame_p->flags & CANFD_BRS) - { - dlc |= FTCANFD_ID1_BRS_MASK; - } - - if (frame_p->flags & CANFD_ESI) - { - dlc |= FTCANFD_ID1_ESI_MASK; - } - } - else - { - dlc = ((can_send_dlc << FCAN_IDR_SDLC_SHIFT) | FCAN_IDR_PAD_MASK); - } - - id |= dlc; - FCAN_DEBUG("FCanSend id = %#x\n", id); - FCAN_WRITE_REG32(base_address, FCAN_TX_FIFO_OFFSET, be32_to_cpu(id)); - - } - - if (!(frame_p->canid & CAN_RTR_FLAG)) - { - j = 0; - FCAN_DEBUG("frame_p->canid=%#x, frame_p->candlc = %d\n", frame_p->canid, frame_p->candlc); - for (i = frame_p->candlc; i > 0; i -= 4) - { - FCAN_WRITE_REG32(base_address, FCAN_TX_FIFO_OFFSET, *(u32 *)(frame_p->data + j)); - j += 4; - } - - if (i > 0) - { - FCAN_WRITE_REG32(base_address, FCAN_TX_FIFO_OFFSET, *(u32 *)(frame_p->data + j)); - } - - } - - /* triggers tranmission */ - if (FCAN_READ_REG32(base_address, FCAN_CTRL_OFFSET) & FCAN_CTRL_TXREQ_MASK) - { - FCAN_CLEARBIT(base_address, FCAN_CTRL_OFFSET, FCAN_CTRL_XFER_MASK); - FCAN_SETBIT(base_address, FCAN_CTRL_OFFSET, FCAN_CTRL_TXREQ_MASK | FCAN_CTRL_XFER_MASK); - return FCAN_SUCCESS; - } - else - { - FCAN_WARN("Monitoring mode cannot send message!!!"); - return FCAN_FAILURE; - } - -} - -/** - * @name: FCan_SetTiming - * @msg: This routine sets Bit time - * @param {FCanCtrl} *instance_p is a pointer to the FCanCtrl instance. - * @param {FCanBaudrateConfig} *bittiming_p, parameters of arbitration or data segment baudrate - * @param {FCanSegmentType} target_segment, specifies which target is to be selected. followed by FCAN_ARB_SEGMENT or FCAN_DATA_SEGMENT - * @out param: - * @return {*} - */ -static FError FCanSetTiming(FCanCtrl *instance_p, FCanBaudrateConfig *bittiming_p, FCanSegmentType target_segment) -{ - u32 reg_val = 0; - u32 transfer_enable; - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - FASSERT(target_segment < FCAN_SEGMENT_TYPE_NUM); - uintptr base_address = instance_p->config.base_address; - - FASSERT(bittiming_p->brp != 0); - FASSERT(bittiming_p->prop_seg != 0); - FASSERT(bittiming_p->phase_seg1 != 0); - FASSERT(bittiming_p->phase_seg2 != 0); - - FCAN_DEBUG("brp=%d, prop_seg=%d, phase_seg1=%d, phase_seg2=%d, sjw=%d", - bittiming_p->brp, bittiming_p->prop_seg, bittiming_p->phase_seg1, - bittiming_p->phase_seg2, bittiming_p->sjw); - - /* Setting Baud Rate prescalar value in BRPR Register */ - reg_val = (bittiming_p->brp - 1) << 16; - reg_val |= (bittiming_p->prop_seg - 1) << 2; - reg_val |= (bittiming_p->phase_seg1 - 1) << 5; - reg_val |= (bittiming_p->phase_seg2 - 1) << 8; - reg_val |= (bittiming_p->sjw - 1); - - transfer_enable = (FCAN_READ_REG32(base_address, FCAN_CTRL_OFFSET) & FCAN_CTRL_XFER_MASK); - if (transfer_enable) - { - FCAN_CLEARBIT(base_address, FCAN_CTRL_OFFSET, FCAN_CTRL_XFER_MASK); - } - - if (reg_val) - { - if (target_segment == FCAN_DATA_SEGMENT) - { - FCAN_WRITE_REG32(base_address, FCAN_DAT_RATE_CTRL_OFFSET, reg_val); - } - else - { - FCAN_WRITE_REG32(base_address, FCAN_ARB_RATE_CTRL_OFFSET, reg_val); - } - } - else - { - FCAN_ERROR("FCanSetTiming reg_val failed"); - return FCAN_FAILURE; - } - - return FCAN_SUCCESS; -} - -/** - * @name: FCanBaudrateSet - * @msg: Set the fcan baudrate by FCanBaudrateConfig parameters. - * @param {FCanCtrl} *instance_p, instance of FCanCtrl controller - * @param {FCanBaudrateConfig} *baudrate_p, parameters of arbitration or data segment baudrate - * include baudrate, parameters of target baudrate - * include sample_point, parameters of target sample point, 0 means the general configuration is used. - * The value is the percentage of sampling points multiplied by 1000. - * For example, if sample point is 0.75, set target_sample_point = 750. - * Or manual config baudrate parameters. - * @param {FCanSegmentType} segment, specifies data segment or arbitration segment is selected. followed by FCAN_ARB_SEGMENT or FCAN_DATA_SEGMENT - * @return err code information, FQSPI_SUCCESS indicates success,others indicates failed - * @note this function is to set arb and data segment baudrate, according to the prop_seg, - * phase_seg1, phase_seg2 ,brp and sjw parameters, users can use this function to set can baudrate. - * A formula to calculate baudrate is: - * baudrate = FCAN_CLK_FREQ_HZ/(brp*(sjw+prop_seg+phase_seg1++phase_seg2)) - * sample point = (sjw+prop_seg+phase_seg1)/(sjw+prop_seg+phase_seg1++phase_seg2) - * Recommended sample point : - * 75.0% : baudrate > 800000 - * 80.0% : baudrate > 500000 - * 87.5% : baudrate <= 500000 - */ -FError FCanBaudrateSet(FCanCtrl *instance_p, FCanBaudrateConfig *baudrate_p) -{ - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - FCanSegmentType segment = baudrate_p->segment; - FASSERT(segment < FCAN_SEGMENT_TYPE_NUM); - u32 baudrate = baudrate_p->baudrate; - u32 sample_point = baudrate_p->sample_point; - if (baudrate_p->auto_calc == TRUE) - { -#if defined(CONFIG_TARGET_F2000_4) || defined(CONFIG_TARGET_D2000) - if ((segment == FCAN_ARB_SEGMENT) && ((baudrate > FCAN_BAUDRATE_1000K) || (baudrate < FCAN_BAUDRATE_50K))) - { - FCAN_ERROR("FCanBaudrateSet FCAN_ARB_SEGMENT baudrate = %d invalid", baudrate); - return FCAN_INVAL_PARAM; - } - if ((segment == FCAN_DATA_SEGMENT) && ((baudrate > FCAN_BAUDRATE_1000K) || (baudrate < FCAN_BAUDRATE_50K))) - { - FCAN_ERROR("FCanBaudrateSet FCAN_DATA_SEGMENT baudrate = %d invalid", baudrate); - return FCAN_INVAL_PARAM; - } -#elif defined(CONFIG_TARGET_E2000) || defined(TARDIGRADE) - if ((segment == FCAN_ARB_SEGMENT) && ((baudrate > FCAN_BAUDRATE_1000K) || (baudrate < FCAN_BAUDRATE_10K))) - { - FCAN_ERROR("FCanBaudrateSet FCAN_ARB_SEGMENT baudrate = %d invalid", baudrate); - return FCAN_INVAL_PARAM; - } - if ((segment == FCAN_DATA_SEGMENT) && ((baudrate > FCAN_BAUDRATE_5000K) || (baudrate < FCAN_BAUDRATE_10K))) - { - FCAN_ERROR("FCanBaudrateSet FCAN_DATA_SEGMENT baudrate = %d invalid", baudrate); - return FCAN_INVAL_PARAM; - } -#endif - } - - FError ret = FCAN_SUCCESS; - FCanBaudrateConfig timing_config; - memset(&timing_config, 0, sizeof(timing_config)); - - /* Automatically calculate parameters based on baudrate and sample point */ - if (baudrate_p->auto_calc == TRUE) - { - ret = FCanCalcBittiming(&timing_config, baudrate, sample_point, segment); - if (ret != FCAN_SUCCESS) - { - FCAN_ERROR("FCanCalcBittiming %d failed", segment); - return FCAN_FAILURE; - } - - ret = FCanSetTiming(instance_p, &timing_config, segment); - if (ret != FCAN_SUCCESS) - { - FCAN_ERROR("FCanSetTiming %d failed", segment); - return FCAN_FAILURE; - } - } - else - { - ret = FCanSetTiming(instance_p, baudrate_p, segment); - if (ret != FCAN_SUCCESS) - { - FCAN_ERROR("FCanSetTiming failed"); - return FCAN_FAILURE; - } - } - - return ret; -} - -/** - * @name: FCanFdEnable - * @msg: Enable or disable can. - * @param {FCanCtrl} *instance_p, instance of FCanCtrl controller - * @param {boolean} enable, TRUE-enable canfd, FALSE-disable canfd. - * @return err code information, FCAN_SUCCESS indicates success,others indicates failed - */ -FError FCanEnable(FCanCtrl *instance_p, boolean enable) -{ - FASSERT(instance_p); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - - uintptr base_addr = instance_p->config.base_address; - if (enable == TRUE) - { - FCAN_SETBIT(base_addr, FCAN_CTRL_OFFSET, FCAN_CTRL_XFER_MASK); - } - else - { - FCAN_CLEARBIT(base_addr, FCAN_CTRL_OFFSET, FCAN_CTRL_XFER_MASK); - } - return FCAN_SUCCESS; -} - -/** - * @name: FCanIdMaskFilterSet - * @msg: Set the can mask and umask id. - * @param {FCanCtrl} *instance_p, instance of FCanCtrl controller - * @param {FCanIdMaskConfig} *id_mask_p, include filter register index, umask id and mask id - * id indicates a specific ID can receive - * mask indicates mask the corresponding bit of the id - * @return err code information, FCAN_SUCCESS indicates success,others indicates failed - */ -FError FCanIdMaskFilterSet(FCanCtrl *instance_p, FCanIdMaskConfig *id_mask_p) -{ - FASSERT(instance_p); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - FASSERT(id_mask_p); - u32 filter_index = id_mask_p->filter_index; - FASSERT(filter_index < FCAN_ACC_ID_REG_NUM); - uintptr base_address = instance_p->config.base_address; - u32 id_reg_offset = 0; - u32 mask_reg_offset = 0; - u32 id = 0; - u32 mask = 0; - - switch (filter_index) - { - case 0: - id_reg_offset = FCAN_ACC_ID0_OFFSET; - mask_reg_offset = FCAN_ACC_ID0_MASK_OFFSET; - break; - case 1: - id_reg_offset = FCAN_ACC_ID1_OFFSET; - mask_reg_offset = FCAN_ACC_ID1_MASK_OFFSET; - break; - case 2: - id_reg_offset = FCAN_ACC_ID2_OFFSET; - mask_reg_offset = FCAN_ACC_ID2_MASK_OFFSET; - break; - case 3: - id_reg_offset = FCAN_ACC_ID3_OFFSET; - mask_reg_offset = FCAN_ACC_ID3_MASK_OFFSET; - break; - default: - return FCAN_FAILURE; - } - - if (id_mask_p->type == FCAN_STANDARD_FRAME) - { - id = id_mask_p->id << FCAN_ACC_IDN_SHIFT; - mask = id_mask_p->mask << FCAN_ACC_IDN_SHIFT; - } - - FCAN_WRITE_REG32(base_address, id_reg_offset, id); - FCAN_WRITE_REG32(base_address, mask_reg_offset, mask); - - return FCAN_SUCCESS; -} - -/** - * @name: FCanIdMaskFilterEnable - * @msg: Set the can id mask filter enable. - * @param {FCanCtrl} *instance_p, instance of FCanCtrl controller - * @return {*} - */ -void FCanIdMaskFilterEnable(FCanCtrl *instance_p) -{ - FCanConfig *config_p; - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - config_p = &instance_p->config; - FCAN_SETBIT(config_p->base_address, FCAN_CTRL_OFFSET, FCAN_CTRL_AIME_MASK); -} - -/** - * @name: FCanIdMaskFilterDisable - * @msg: Set the can id mask filter disable. - * @param {FCanCtrl} *instance_p, instance of FCanCtrl controller - * @return {*} - */ -void FCanIdMaskFilterDisable(FCanCtrl *instance_p) -{ - FCanConfig *config_p; - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - config_p = &instance_p->config; - FCAN_CLEARBIT(config_p->base_address, FCAN_CTRL_OFFSET, FCAN_CTRL_AIME_MASK); -} - -/** - * @name: FCanInterruptEnable - * @msg: Enable can interrupt. - * @param {FCanCtrl} *instance_p, instance of FCanCtrl controller - * @param {FCanIntrEventType} event_type, interrupt event type - * @return err code information, FCAN_SUCCESS indicates success,others indicates failed - */ -FError FCanInterruptEnable(FCanCtrl *instance_p, FCanIntrEventType event_type) -{ - FASSERT(instance_p != NULL); - FASSERT(FT_COMPONENT_IS_READY == instance_p->is_ready); - - uintptr base_addr = instance_p->config.base_address; - u32 reg_val = 0; - reg_val = FCAN_READ_REG32(base_addr, FCAN_INTR_OFFSET); - - switch (event_type) - { - case FCAN_INTR_EVENT_SEND: - reg_val |= FCAN_INTR_TEIE_MASK; - break; - - case FCAN_INTR_EVENT_RECV: - reg_val |= FCAN_INTR_REIE_MASK; - break; - - case FCAN_INTR_EVENT_ERROR: - reg_val |= FCAN_INTR_EIE_MASK; - break; - - case FCAN_INTR_EVENT_BUSOFF: - reg_val |= FCAN_INTR_BOIE_MASK; - break; - - case FCAN_INTR_EVENT_PERROE: - reg_val |= FCAN_INTR_PEIE_MASK; - break; - - case FCAN_INTR_EVENT_PWARN: - reg_val |= FCAN_INTR_PWIE_MASK; - break; - - case FCAN_INTR_EVENT_FIFOFULL: - reg_val |= FCAN_INTR_RFIE_MASK; - break; - - case FCAN_INTR_EVENT_FIFOEMPTY: - reg_val |= FCAN_INTR_TFIE_MASK; - break; - default: - break; - } - - FCAN_WRITE_REG32(base_addr, FCAN_INTR_OFFSET, reg_val); - - return FCAN_SUCCESS; -} - -/** - * @name: FCanFdEnable - * @msg: Enable or disable can fd. - * @param {FCanCtrl} *instance_p, instance of FCanCtrl controller - * @param {boolean} enable, TRUE-enable canfd, FALSE-disable canfd. - * @return err code information, FCAN_SUCCESS indicates success,others indicates failed - */ -FError FCanFdEnable(FCanCtrl *instance_p, boolean enable) -{ - FASSERT(instance_p != NULL); - FASSERT(FT_COMPONENT_IS_READY == instance_p->is_ready); - uintptr base_addr = instance_p->config.base_address; - - if (enable == TRUE) - { - instance_p->use_canfd = TRUE; - FCAN_SETBIT(base_addr, FCAN_CTRL_OFFSET, FCAN_CTRL_FDCRC_MASK | FCAN_CTRL_IOF_MASK); - } - else - { - instance_p->use_canfd = FALSE; - FCAN_SETBIT(base_addr, FCAN_CTRL_OFFSET, FCAN_CTRL_IOF_MASK); - FCAN_CLEARBIT(base_addr, FCAN_CTRL_OFFSET, FCAN_CTRL_FDCRC_MASK); - } - - return FCAN_SUCCESS; -} - -/** - * @name: FCanSetMode - * @msg: Set the transmit mode, Monitor or Normal - * @param {FCanCtrl} *instance_p, instance of FCanCtrl controller - * @param {u32} tran_mode,parameters of target mode,0 Monitor mode,1 Normal mode - * @return err code information, FCAN_SUCCESS indicates success,others indicates failed - */ -FError FCanSetMode(FCanCtrl *instance_p, u32 tran_mode) -{ - FASSERT(instance_p != NULL); - FASSERT(FT_COMPONENT_IS_READY == instance_p->is_ready); - uintptr base_addr = instance_p->config.base_address; - - if (tran_mode == FCAN_PROBE_MONITOR_MODE) - { - FCAN_CLEARBIT(base_addr, FCAN_CTRL_OFFSET, FCAN_CTRL_TXREQ_MASK); - } - if (tran_mode == FCAN_PROBE_NORMAL_MODE) - { - FCAN_SETBIT(base_addr, FCAN_CTRL_OFFSET, FCAN_CTRL_TXREQ_MASK); - } - - return FCAN_SUCCESS; -} - diff --git a/bsp/phytium/libraries/standalone/drivers/can/fcan/fcan.h b/bsp/phytium/libraries/standalone/drivers/can/fcan/fcan.h deleted file mode 100644 index b036f435d0..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/can/fcan/fcan.h +++ /dev/null @@ -1,273 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fcan.h - * Date: 2021-04-27 15:08:44 - * LastEditTime: 2022-02-18 08:29:25 - * Description:  This files is for the can function related definitions - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 wangxiaodong 2022/5/26 first release - * 1.1 wangxiaodong 2022/9/23 improve functions - * 1.2 zhangyan 2022/12/7 improve functions - */ - - -#ifndef FCAN_H -#define FCAN_H - -#include "ftypes.h" -#include "ferror_code.h" -#include "fparameters.h" -#include "fkernel.h" -#include "fcan_hw.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -typedef enum -{ - FCAN_INTR_EVENT_SEND = 0, /* Handler type for frame sending interrupt */ - FCAN_INTR_EVENT_RECV = 1, /* Handler type for frame reception interrupt */ - FCAN_INTR_EVENT_ERROR = 2, /* Handler type for error interrupt */ - FCAN_INTR_EVENT_BUSOFF = 3, /* Handler type for bus off interrupt */ - FCAN_INTR_EVENT_PERROE = 4, /* Handler type for passion error interrupt */ - FCAN_INTR_EVENT_PWARN = 5, /* Handler type for passion warn interrupt */ - FCAN_INTR_EVENT_FIFOFULL = 6, /* Handler type for rx fifo register full */ - FCAN_INTR_EVENT_FIFOEMPTY = 7,/* Handler type for tx fifo register empty */ - FCAN_INTR_EVENT_NUM -} FCanIntrEventType; - -#define FCAN_SUCCESS FT_SUCCESS /* SUCCESS */ -#define FCAN_NOT_READY FT_MAKE_ERRCODE(ErrModBsp, ErrBspCan, 1) -#define FCAN_FAILURE FT_MAKE_ERRCODE(ErrModBsp, ErrBspCan, 2) /* failed */ -#define FCAN_INVAL_PARAM FT_MAKE_ERRCODE(ErrModBsp, ErrBspCan, 3) /* invalid parameters */ - -#if defined(CONFIG_FCAN_USE_CANFD) - #define FCAN_DATA_LENGTH 64U -#else - #define FCAN_DATA_LENGTH 8U -#endif - -/* CAN payload length and DLC definitions according to ISO 11898-1 */ -#define CAN_MAX_DLC 8 -#define CAN_MAX_DLEN 8 -#define CAN_MAX_CTL 3 -#define CAN_SFF_ID_BITS 11 -#define CAN_EFF_ID_BITS 29 - -/* special address description flags for the CAN_ID */ -#define CAN_EFF_FLAG 0x80000000U /* EFF/SFF is set in the MSB */ -#define CAN_RTR_FLAG 0x40000000U /* remote transmission request */ -#define CAN_ERR_FLAG 0x20000000U /* error message frame */ - -/* valid bits in CAN ID for frame formats */ -#define CAN_SFF_MASK 0x000007FFU /* standard frame format (SFF) */ -#define CAN_EFF_MASK 0x1FFFFFFFU /* extended frame format (EFF) */ -#define CAN_ERR_MASK 0x1FFFFFFFU /* omit EFF, RTR, ERR flags */ - -/* Frame type */ -#define STANDARD_FRAME 0 /* standard frame */ -#define EXTEND_FRAME 1 /* extended frame */ - -/* Bit timing calculate */ -#define CAN_CALC_MAX_ERROR 50 /* in one-tenth of a percent */ -#define CAN_CALC_SYNC_SEG 1 - -/*Transmit mode*/ -#define FCAN_PROBE_MONITOR_MODE 0 /* Monitor mode */ -#define FCAN_PROBE_NORMAL_MODE 1 /* Normal mode */ - -/* can segment type */ -typedef enum -{ - FCAN_ARB_SEGMENT = 0, /* Arbitration segment */ - FCAN_DATA_SEGMENT = 1, /* Data segment */ - FCAN_SEGMENT_TYPE_NUM -} FCanSegmentType; - -/* Can error status bit mask */ -#define FCAN_BUS_ERROR_MASK 1 -#define FCAN_PASSIVE_ERROR_MASK 2 -#define FCAN_PASSIVE_WARNING_MASK 4 -#define FCAN_FIFO_RX_OVERFLOW_MASK 8 - -/* Can frame select */ -#define FCAN_STANDARD_FRAME 0 -#define FCAN_EXTENDARD_FRAME 1 - -/* can baudrate */ -#define FCAN_BAUDRATE_10K 10000 -#define FCAN_BAUDRATE_50K 50000 -#define FCAN_BAUDRATE_100K 100000 -#define FCAN_BAUDRATE_200K 200000 -#define FCAN_BAUDRATE_250K 250000 -#define FCAN_BAUDRATE_500K 500000 -#define FCAN_BAUDRATE_1000K 1000000 -#define FCAN_BAUDRATE_2000K 2000000 -#define FCAN_BAUDRATE_3000K 3000000 -#define FCAN_BAUDRATE_4000K 4000000 -#define FCAN_BAUDRATE_5000K 5000000 - -/* - * defined bits for FCanFrame.flags - * - * The use of struct FCanFrame implies the Extended Data Length (EDL) bit to - * be set in the CAN frame bitstream on the wire. The EDL bit switch turns - * the CAN controllers bitstream processor into the CAN FD mode which creates - * two new options within the CAN FD frame specification: - * - * Bit Rate Switch - to indicate a second baudrate is/was used for the payload - * Error State Indicator - represents the error state of the transmitting node - * - * As the CANFD_ESI bit is internally generated by the transmitting CAN - * controller only the CANFD_BRS bit is relevant for real CAN controllers when - * building a CAN FD frame for transmission. Setting the CANFD_ESI bit can make - * sense for virtual CAN interfaces to test applications with echoed frames. - */ -#define CANFD_BRS 0x02 /* bit rate switch (second baudrate for payload data) */ -#define CANFD_ESI 0x04 /* error state indicator of the transmitting node */ - -typedef void (*FCanIntrEventHandler)(void *param); - -typedef struct -{ - FCanIntrEventType type; - FCanIntrEventHandler handler; - void *param; -} FCanIntrEventConfig; - -typedef struct -{ - u32 filter_index;/* filter register index*/ - u32 id; /* id bit to receive */ - u32 mask;/* id mask bit to receive */ - u32 type;/* frame type, standard or extended*/ -} FCanIdMaskConfig; - -typedef struct -{ - u32 canid;/* can frame id */ - u8 candlc;/* can frame length */ - u8 flags; /* additional flags for CAN FD */ - u8 data[FCAN_DATA_LENGTH] __attribute__((aligned(8))); -} FCanFrame; - -typedef struct -{ - u32 instance_id; /* Id of device */ - uintptr base_address; /* Can base Address */ - u32 irq_num; /* interrupt number */ - u32 irq_prority;/* interrupt priority*/ -} FCanConfig; - -typedef struct -{ - FCanSegmentType segment; - boolean auto_calc; /* if auto calculate baudrate parameters */ - u32 baudrate; /* baudrate */ - u32 sample_point; /* sample point */ - u32 prop_seg; /* Propagation segment in TQs */ - u32 phase_seg1; /* Phase buffer segment 1 in TQs */ - u32 phase_seg2; /* Phase buffer segment 2 in TQs */ - u32 sjw; /* Synchronisation jump width in TQs */ - u32 brp; /* Baudrate prescaler */ -} FCanBaudrateConfig; - -typedef struct -{ - u8 xfers;/* transfer status */ - u8 rs; /* receive status */ - u8 ts; /* transmit status */ - u8 fies; /* Current status of the controller state machine */ - u8 fras; /* Frame tagging status */ -} FCanXferStatus; - -typedef struct -{ - FCanXferStatus xfer_status; - u32 tx_err_cnt; - u32 rx_err_cnt; - u32 tx_fifo_cnt; - u32 rx_fifo_cnt; -} FCanStatus; - -typedef struct -{ - FCanConfig config; - u32 is_ready; /* Device is initialized and ready */ - boolean use_canfd; /* if use canfd function */ - - FCanIntrEventConfig intr_event[FCAN_INTR_EVENT_NUM];/* event handler and parameters for interrupt */ -} FCanCtrl; - -/* get default configuration of specific can id */ -const FCanConfig *FCanLookupConfig(u32 instance_id); - -/* reset a specific can instance */ -void FCanReset(FCanCtrl *instance_p); - -/* Deinitializes a specific can instance */ -void FCanDeInitialize(FCanCtrl *instance_p); - -/* Initializes a specific can instance */ -FError FCanCfgInitialize(FCanCtrl *instance_p, const FCanConfig *input_config_p); - -/* Set the fcan baudrate */ -FError FCanBaudrateSet(FCanCtrl *instance_p, FCanBaudrateConfig *baudrate_p); - -/* interrupt handler for the driver */ -void FCanIntrHandler(s32 vector, void *args); - -/* register FCanCtrl interrupt handler function */ -void FCanRegisterInterruptHandler(FCanCtrl *instance_p, FCanIntrEventConfig *intr_event_p); - -/* receive can message by specific can instance */ -FError FCanRecv(FCanCtrl *instance_p, FCanFrame *frame_p); - -/* send can message by specific can instance */ -FError FCanSend(FCanCtrl *instance_p, FCanFrame *frame_p); - -/* Enable the specific can instance */ -FError FCanEnable(FCanCtrl *instance_p, boolean enable); - -/* read can status, include send and receive error count */ -FError FCanStatusGet(FCanCtrl *instance_p, FCanStatus *status_p); - -/* Set the can mask and umask id */ -FError FCanIdMaskFilterSet(FCanCtrl *instance_p, FCanIdMaskConfig *id_mask_p); - -/* Set the can id mask filter enable */ -void FCanIdMaskFilterEnable(FCanCtrl *instance_p); - -/* Set the can id mask filter disable */ -void FCanIdMaskFilterDisable(FCanCtrl *instance_p); - -/* Enable can interrupt */ -FError FCanInterruptEnable(FCanCtrl *instance_p, FCanIntrEventType event_type); - -/* Enable or disable can fd */ -FError FCanFdEnable(FCanCtrl *instance_p, boolean enable); - -/* Set the transmit mode */ -FError FCanSetMode(FCanCtrl *instance_p, u32 tran_mode); - -#ifdef __cplusplus -} -#endif - -#endif // !FT_CAN_H diff --git a/bsp/phytium/libraries/standalone/drivers/can/fcan/fcan_g.c b/bsp/phytium/libraries/standalone/drivers/can/fcan/fcan_g.c deleted file mode 100644 index b1a59bf2bd..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/can/fcan/fcan_g.c +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fcan_g.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:28:45 - * Description:  This files is for the can default configuration - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 wangxiaodong 2022/5/26 first release - */ - -#include "sdkconfig.h" -#include "fcan.h" -#include "fparameters.h" - -const FCanConfig FCanConfigTbl[FCAN_NUM] = -{ - { - .instance_id = FCAN0_ID, /* Id of device */ - .base_address = FCAN0_BASE_ADDR, /* Can base Address */ - .irq_num = FCAN0_IRQ_NUM, - }, - { - .instance_id = FCAN1_ID, /* Id of device */ - .base_address = FCAN1_BASE_ADDR, /* Can base Address */ - .irq_num = FCAN1_IRQ_NUM, - }, -#if defined(CONFIG_TARGET_F2000_4) || defined(CONFIG_TARGET_D2000) - { - .instance_id = FCAN2_ID, /* Id of device */ - .base_address = FCAN2_BASE_ADDR, /* Can base Address */ - .irq_num = FCAN2_IRQNUM, - } -#endif - -}; diff --git a/bsp/phytium/libraries/standalone/drivers/can/fcan/fcan_hw.c b/bsp/phytium/libraries/standalone/drivers/can/fcan/fcan_hw.c deleted file mode 100644 index b06da31ebc..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/can/fcan/fcan_hw.c +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fcan_hw.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:28:50 - * Description:  This files is for the can register related functions - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 wangxiaodong 2022/5/26 first release - */ - - -#include "fcan_hw.h" -#include "fparameters.h" -#include "fassert.h" -#include "fdebug.h" - -#define CAN_HW_DEBUG_TAG "CAN_HW" -#define FCAN_DEBUG(format, ...) FT_DEBUG_PRINT_D(CAN_HW_DEBUG_TAG, format, ##__VA_ARGS__) -#define FCAN_INFO(format, ...) FT_DEBUG_PRINT_I(CAN_HW_DEBUG_TAG, format, ##__VA_ARGS__) -#define FCAN_WARN(format, ...) FT_DEBUG_PRINT_W(CAN_HW_DEBUG_TAG, format, ##__VA_ARGS__) -#define FCAN_ERROR(format, ...) FT_DEBUG_PRINT_E(CAN_HW_DEBUG_TAG, format, ##__VA_ARGS__) - - -void FCanDump(uintptr base_addr) -{ - - FCAN_DEBUG("Off[0x%x]: FCAN_CTRL_OFFSET = 0x%08x\r\n", base_addr + FCAN_CTRL_OFFSET, FCAN_READ_REG32(base_addr, FCAN_CTRL_OFFSET)); - FCAN_DEBUG("Off[0x%x]: FCAN_INTR_OFFSET = 0x%08x\r\n", base_addr + FCAN_INTR_OFFSET, FCAN_READ_REG32(base_addr, FCAN_INTR_OFFSET)); - FCAN_DEBUG("Off[0x%x]: FCAN_ARB_RATE_CTRL_OFFSET = 0x%08x\r\n", base_addr + FCAN_ARB_RATE_CTRL_OFFSET, FCAN_READ_REG32(base_addr, FCAN_ARB_RATE_CTRL_OFFSET)); - FCAN_DEBUG("Off[0x%x]: FCAN_DAT_RATE_CTRL_OFFSET = 0x%08x\r\n", base_addr + FCAN_DAT_RATE_CTRL_OFFSET, FCAN_READ_REG32(base_addr, FCAN_DAT_RATE_CTRL_OFFSET)); - FCAN_DEBUG("Off[0x%x]: FCAN_ACC_ID0_OFFSET = 0x%08x\r\n", base_addr + FCAN_ACC_ID0_OFFSET, FCAN_READ_REG32(base_addr, FCAN_ACC_ID0_OFFSET)); - FCAN_DEBUG("Off[0x%x]: FCAN_ACC_ID1_OFFSET = 0x%08x\r\n", base_addr + FCAN_ACC_ID1_OFFSET, FCAN_READ_REG32(base_addr, FCAN_ACC_ID1_OFFSET)); - FCAN_DEBUG("Off[0x%x]: FCAN_ACC_ID2_OFFSET = 0x%08x\r\n", base_addr + FCAN_ACC_ID2_OFFSET, FCAN_READ_REG32(base_addr, FCAN_ACC_ID2_OFFSET)); - FCAN_DEBUG("Off[0x%x]: FCAN_ACC_ID3_OFFSET = 0x%08x\r\n", base_addr + FCAN_ACC_ID3_OFFSET, FCAN_READ_REG32(base_addr, FCAN_ACC_ID3_OFFSET)); - FCAN_DEBUG("Off[0x%x]: FCAN_ACC_ID0_MASK_OFFSET = 0x%08x\r\n", base_addr + FCAN_ACC_ID0_MASK_OFFSET, FCAN_READ_REG32(base_addr, FCAN_ACC_ID0_MASK_OFFSET)); - FCAN_DEBUG("Off[0x%x]: FCAN_ACC_ID1_MASK_OFFSET = 0x%08x\r\n", base_addr + FCAN_ACC_ID1_MASK_OFFSET, FCAN_READ_REG32(base_addr, FCAN_ACC_ID1_MASK_OFFSET)); - FCAN_DEBUG("Off[0x%x]: FCAN_ACC_ID2_MASK_OFFSET = 0x%08x\r\n", base_addr + FCAN_ACC_ID2_MASK_OFFSET, FCAN_READ_REG32(base_addr, FCAN_ACC_ID2_MASK_OFFSET)); - FCAN_DEBUG("Off[0x%x]: FCAN_ACC_ID3_MASK_OFFSET = 0x%08x\r\n", base_addr + FCAN_ACC_ID3_MASK_OFFSET, FCAN_READ_REG32(base_addr, FCAN_ACC_ID3_MASK_OFFSET)); - FCAN_DEBUG("Off[0x%x]: FCAN_XFER_STS_OFFSET = 0x%08x\r\n", base_addr + FCAN_XFER_STS_OFFSET, FCAN_READ_REG32(base_addr, FCAN_XFER_STS_OFFSET)); - FCAN_DEBUG("Off[0x%x]: FCAN_ERR_CNT_OFFSET = 0x%08x\r\n", base_addr + FCAN_ERR_CNT_OFFSET, FCAN_READ_REG32(base_addr, FCAN_ERR_CNT_OFFSET)); - - FCAN_DEBUG("Off[0x%x]: FCAN_FIFO_CNT_OFFSET = 0x%08x\r\n", base_addr + FCAN_FIFO_CNT_OFFSET, FCAN_READ_REG32(base_addr, FCAN_FIFO_CNT_OFFSET)); - FCAN_DEBUG("Off[0x%x]: FCAN_DMA_CTRL_OFFSET = 0x%08x\r\n", base_addr + FCAN_DMA_CTRL_OFFSET, FCAN_READ_REG32(base_addr, FCAN_DMA_CTRL_OFFSET)); - - FCAN_DEBUG("Off[0x%x]: FCAN_XFER_EN_OFFSET = 0x%08x\r\n", base_addr + FCAN_XFER_EN_OFFSET, FCAN_READ_REG32(base_addr, FCAN_XFER_EN_OFFSET)); - - FCAN_DEBUG("Off[0x%x]: FCAN_FRM_INFO_OFFSET = 0x%08x\r\n", base_addr + FCAN_FRM_INFO_OFFSET, FCAN_READ_REG32(base_addr, FCAN_FRM_INFO_OFFSET)); - - FCAN_DEBUG("Off[0x%x]: FCAN_TX_FIFO_OFFSET = 0x%08x\r\n", base_addr + FCAN_TX_FIFO_OFFSET, FCAN_READ_REG32(base_addr, FCAN_TX_FIFO_OFFSET)); - FCAN_DEBUG("Off[0x%x]: FCAN_RX_FIFO_OFFSET = 0x%08x\r\n", base_addr + FCAN_RX_FIFO_OFFSET, FCAN_READ_REG32(base_addr, FCAN_RX_FIFO_OFFSET)); - - FCAN_DEBUG("\r\n"); - -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/can/fcan/fcan_hw.h b/bsp/phytium/libraries/standalone/drivers/can/fcan/fcan_hw.h deleted file mode 100644 index 0f59b3f2be..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/can/fcan/fcan_hw.h +++ /dev/null @@ -1,257 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fcan_hw.h - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:29:05 - * Description:  This files is for the can register related definition - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 wangxiaodong 2022/5/26 first release - * 1.1 zhangyan 2022/12/7 improve functions - */ - - -#ifndef FCAN_HW_H -#define FCAN_HW_H - -#include "fparameters.h" -#include "ftypes.h" -#include "fio.h" -#include "sdkconfig.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/***ft CAN REGISTER offset*/ -#define FCAN_CTRL_OFFSET 0x00 /* Global control register */ -#define FCAN_INTR_OFFSET 0x04 /* Interrupt register */ -#define FCAN_ARB_RATE_CTRL_OFFSET 0x08 /* Arbitration rate control register */ -#define FCAN_DAT_RATE_CTRL_OFFSET 0x0C /* Data rate control register */ -#define FCAN_ACC_ID0_OFFSET 0x10 /* Acceptance identifier0 register */ -#define FCAN_ACC_ID1_OFFSET 0x14 /* Acceptance identifier1 register */ -#define FCAN_ACC_ID2_OFFSET 0x18 /* Acceptance identifier2 register */ -#define FCAN_ACC_ID3_OFFSET 0x1C /* Acceptance identifier3 register */ -#define FCAN_ACC_ID0_MASK_OFFSET 0x20 /* Acceptance identifier0 mask register */ -#define FCAN_ACC_ID1_MASK_OFFSET 0x24 /* Acceptance identifier1 mask register */ -#define FCAN_ACC_ID2_MASK_OFFSET 0x28 /* Acceptance identifier2 mask register */ -#define FCAN_ACC_ID3_MASK_OFFSET 0x2C /* Acceptance identifier3 mask register */ -#define FCAN_XFER_STS_OFFSET 0x30 /* Transfer status register */ -#define FCAN_ERR_CNT_OFFSET 0x34 /* Error counter register */ -#define FCAN_FIFO_CNT_OFFSET 0x38 /* FIFO counter register */ -#define FCAN_DMA_CTRL_OFFSET 0x3C /* DMA request control register */ -#define FCAN_XFER_EN_OFFSET 0x40 /* Transfer enable register */ -#define FCAN_FRM_INFO_OFFSET 0x48 /* Frame valid number register */ -#define FCAN_TX_FIFO_OFFSET 0x100/* TX FIFO shadow register */ -#define FCAN_RX_FIFO_OFFSET 0x200/* RX FIFO shadow register */ - -/*----------------------------------------------------------------------------*/ -/* CAN register bit masks - FCAN___MASK */ -/*----------------------------------------------------------------------------*/ - -/* FCAN_CTRL mask */ -#define FCAN_CTRL_XFER_MASK BIT(0) /*Transfer enable*/ -#define FCAN_CTRL_TXREQ_MASK BIT(1) /*Transmit request*/ -#define FCAN_CTRL_AIME_MASK BIT(2) /*Acceptance identifier mask enable*/ -#define FCAN_CTRL_RST_MASK BIT(7) /* Soft rest 1:reset and auto clear */ -#define FCAN_CTRL_RFEIDF_MASK BIT(8) /* whether generates frame recv completion interrupt when filtering frames */ -#define FCAN_CTRL_IRFEDT_MASK BIT(9) /* whether generates frame recv completion interrupt when sending frame */ -#define FCAN_CTRL_IOF_MASK BIT(10) /* send overload frame */ -#define FCAN_CTRL_FDCRC_MASK BIT(11) /* Stuff count, crc mode */ - -/* FCAN_INTR mask */ -#define FCAN_INTR_BOIS_MASK BIT(0) /* Bus off interrupt status*/ -#define FCAN_INTR_PWIS_MASK BIT(1) /* Passive warning interrupt status*/ -#define FCAN_INTR_PEIS_MASK BIT(2) /* Passive error interrupt status*/ -#define FCAN_INTR_RFIS_MASK BIT(3) /* RX FIFO full interrupt status*/ -#define FCAN_INTR_TFIS_MASK BIT(4) /* TX FIFO empty interrupt status*/ -#define FCAN_INTR_REIS_MASK BIT(5) /* RX frame end interrupt status*/ -#define FCAN_INTR_TEIS_MASK BIT(6) /* TX frame end interrupt status*/ -#define FCAN_INTR_EIS_MASK BIT(7) /* Error interrupt status*/ -#define FCAN_INTR_BOIE_MASK BIT(8) /* Bus off interrupt enable*/ -#define FCAN_INTR_PWIE_MASK BIT(9) /* Passive warning interrupt enable*/ -#define FCAN_INTR_PEIE_MASK BIT(10) /* Passive error interrupt enable*/ -#define FCAN_INTR_RFIE_MASK BIT(11) /* RX FIFO full interrupt enable*/ -#define FCAN_INTR_TFIE_MASK BIT(12) /* TX FIFO empty interrupt enable*/ -#define FCAN_INTR_REIE_MASK BIT(13) /* RX frame end interrupt enable*/ -#define FCAN_INTR_TEIE_MASK BIT(14) /* TX frame end interrupt enable*/ -#define FCAN_INTR_EIE_MASK BIT(15) /* Error interrupt enable*/ -#define FCAN_INTR_BOIC_MASK BIT(16) /* Bus off interrupt clear*/ -#define FCAN_INTR_PWIC_MASK BIT(17) /* Passive warning interrupt clear*/ -#define FCAN_INTR_PEIC_MASK BIT(18) /* Passive error interrupt clear*/ -#define FCAN_INTR_RFIC_MASK BIT(19) /* RX FIFO full interrupt clear*/ -#define FCAN_INTR_TFIC_MASK BIT(20) /* TX FIFO empty interrupt clear*/ -#define FCAN_INTR_REIC_MASK BIT(21) /* RX frame end interrupt clear*/ -#define FCAN_INTR_TEIC_MASK BIT(22) /* TX frame end interrupt clear*/ -#define FCAN_INTR_EIC_MASK BIT(23) /* Error interrupt clear*/ -#define FCAN_INTR_BORIS_MASK BIT(24) -#define FCAN_INTR_PWRIS_MASK BIT(25) -#define FCAN_INTR_PERIS_MASK BIT(26) -#define FCAN_INTR_RFRIS_MASK BIT(27) -#define FCAN_INTR_TFRIS_MASK BIT(28) -#define FCAN_INTR_RERIS_MASK BIT(29) -#define FCAN_INTR_TERIS_MASK BIT(30) -#define FCAN_INTR_ERIS_MASK BIT(31) - -/* FCAN_DAT_RATE_CTRL mask */ - -/* FCAN_ACC_ID(0-3)_MASK mask */ -#define FCAN_ACC_IDN_MASK GENMASK(28, 0)/*don’t care the matching */ - -#define FCAN_ACC_ID_REG_NUM 4 - -/* FCAN_XFER_STS mask */ -#define FCAN_XFER_STS_XFERS_GET(x) GET_REG32_BITS((x), 10, 10) -#define FCAN_XFER_STS_RS_GET(x) GET_REG32_BITS((x), 9, 9) -#define FCAN_XFER_STS_TS_GET(x) GET_REG32_BITS((x), 8, 8) -#define FCAN_XFER_STS_FIES_GET(x) GET_REG32_BITS((x), 7, 3) -#define FCAN_XFER_STS_FRAS_GET(x) GET_REG32_BITS((x), 2, 0) - -/* FCAN_ERR_CNT_OFFSET mask */ -#define FCAN_ERR_CNT_RFN_MASK GENMASK(8, 0) /*Receive error counter*/ -#define FCAN_ERR_CNT_RFN_GET(x) GET_REG32_BITS((x), 8, 0) -#define FCAN_ERR_CNT_RFN_SET(x) SET_REG32_BITS((x), 8, 0) - -#define FCAN_ERR_CNT_TFN_MASK GENMASK(24, 16) /*Transmit error counter*/ -#define FCAN_ERR_CNT_TFN_GET(x) GET_REG32_BITS((x), 24, 16) -#define FCAN_ERR_CNT_TFN_SET(x) SET_REG32_BITS((x), 24, 16) - -/* FCAN_FIFO_CNT_OFFSET mask */ -#define FCAN_FIFO_CNT_RFN_MASK GENMASK(6, 0) /*Receive FIFO valid data number*/ -#define FCAN_FIFO_CNT_RFN_GET(x) GET_REG32_BITS((x), 6, 0) -#define FCAN_FIFO_CNT_RFN_SET(x) SET_REG32_BITS((x), 6, 0) - -#define FCAN_FIFO_CNT_TFN_MASK GENMASK(6, 0) /*Transmit FIFO valid data number*/ -#define FCAN_FIFO_CNT_TFN_GET(x) GET_REG32_BITS((x), 22, 16) -#define FCAN_FIFO_CNT_TFN_SET(x) SET_REG32_BITS((x), 22, 16) - -#define FCAN_IDR_ID1_SHIFT 21 /* Standard Message Identifier */ -#define FCAN_IDR_SDLC_SHIFT 14 -#define FCANFD_IDR_EDLC_SHIFT 24 -#define FCAN_IDR_EDLC_SHIFT 26 -#define FCAN_ACC_IDN_SHIFT 18 /*Standard ACC ID shift*/ -#define FCANFD_IDR_GET_EDLC_SHIFT 12 -#define FCANFD_IDR1_SDLC_SHIFT 11 - -/* can */ -#define FCAN_IDR_ID2_GET(x) GET_REG32_BITS((x), 18, 1) /* Get extended message ident */ -#define FCAN_IDR_ID2_SET(x) SET_REG32_BITS((x), 18, 1) /* Set extended message ident */ -#define FCAN_IDR_ID1_GET(x) GET_REG32_BITS((x), 31, 21) /* Get standard msg identifier */ -#define FCAN_IDR_ID1_SET(x) SET_REG32_BITS((x), 31, 21) /* Set standard msg identifier */ -#define FCAN_IDR_IDE_MASK BIT(19) /* Identifier extension */ -#define FCAN_IDR_SRR_MASK BIT(20) /* Substitute remote TXreq */ -#define FCAN_IDR_RTR_MASK BIT(0) /* Extended frames remote TX request */ -#define FCAN_IDR_PAD_MASK GENMASK(13, 0) /* Standard msg padding 1 */ -#define FCAN_IDR_DLC_GET(x) GET_REG32_BITS((x), 17, 14) /* Standard msg dlc */ -#define FCAN_IDR_EDLC_GET(x) GET_REG32_BITS((x), 29, 26) /* Extended msg dlc */ - -/* canfd */ -#define FTCANFD_ID1_FDL_MASK BIT(18) /* CANFD Standard FDF */ -#define FTCANFD_ID1_BRS_MASK BIT(16) /* CANFD Standard BRS */ -#define FTCANFD_ID1_ESI_MASK BIT(15) /* CANFD Standard ESI */ -#define FTCANFD_ID1_SDLC_GET(x) GET_REG32_BITS((x),14, 11) /* CANFD Standard msg dlc */ -#define FTCANFD_IDR_PAD_MASK GENMASK(10, 0) /* CANFD Standard msg padding 1 */ - -#define FTCANFD_ID2_FDL_MASK BIT(31) /* CANFD Extended FDF */ -#define FTCANFD_ID2_BRS_MASK BIT(29) /* CANFD Extended BRS */ -#define FTCANFD_ID2_ESI_MASK BIT(28) /* CANFD Extended ESI */ -#define FTCANFD_ID2_EDLC_GET(x) GET_REG32_BITS((x), 27, 24) /* CANFD Extended msg dlc */ - -#define FTCAN_INTR_EN (FTCAN_INTR_TEIE_MASK | FTCAN_INTR_REIE_MASK | FTCAN_INTR_RFIE_MASK) - -/* Can timming */ -#if defined(CONFIG_TARGET_F2000_4) || defined(CONFIG_TARGET_D2000) - - #define FCAN_ARB_TSEG1_MIN 1 - #define FCAN_ARB_TSEG1_MAX 16 - #define FCAN_ARB_TSEG2_MIN 1 - #define FCAN_ARB_TSEG2_MAX 8 - #define FCAN_ARB_SJW_MAX 4 - #define FCAN_ARB_BRP_MIN 1 - #define FCAN_ARB_BRP_MAX 512 - #define FCAN_ARB_BRP_INC 1 - - #define FCAN_DATA_TSEG1_MIN 1 - #define FCAN_DATA_TSEG1_MAX 16 - #define FCAN_DATA_TSEG2_MIN 1 - #define FCAN_DATA_TSEG2_MAX 8 - #define FCAN_DATA_SJW_MAX 4 - #define FCAN_DATA_BRP_MIN 1 - #define FCAN_DATA_BRP_MAX 512 - #define FCAN_DATA_BRP_INC 1 - -#elif defined(CONFIG_TARGET_E2000) || defined(TARDIGRADE) - - #define FCAN_ARB_TSEG1_MIN 1 - #define FCAN_ARB_TSEG1_MAX 16 - #define FCAN_ARB_TSEG2_MIN 1 - #define FCAN_ARB_TSEG2_MAX 8 - #define FCAN_ARB_SJW_MAX 4 - #define FCAN_ARB_BRP_MIN 1 - #define FCAN_ARB_BRP_MAX 8192 - #define FCAN_ARB_BRP_INC 1 - - #define FCAN_DATA_TSEG1_MIN 1 - #define FCAN_DATA_TSEG1_MAX 16 - #define FCAN_DATA_TSEG2_MIN 1 - #define FCAN_DATA_TSEG2_MAX 8 - #define FCAN_DATA_SJW_MAX 4 - #define FCAN_DATA_BRP_MIN 1 - #define FCAN_DATA_BRP_MAX 8192 - #define FCAN_DATA_BRP_INC 1 - -#endif - - -#define FCAN_FIFO_DEPTH 64 - -/** -* This macro reads the given register. -* @param base_addr is the base address of the device. -* @param reg_offset is the register offset to be read. -* @return The 32-bit value of the register -* @note None. -*****************************************************************************/ -#define FCAN_READ_REG32(addr, reg_offset) FtIn32((addr) + (u32)(reg_offset)) - -/****************************************************************************/ -/** -* This macro writes the given register. -* @param base_addr is the base address of the device. -* @param reg_offset is the register offset to be written. -* @param data is the 32-bit value to write to the register. -* @return None. -* @note None. -*****************************************************************************/ -#define FCAN_WRITE_REG32(addr, reg_offset, reg_value) FtOut32((addr) + (u32)reg_offset, (u32)reg_value) - -#define FCAN_SETBIT(base_addr, reg_offset, data) FtSetBit32((base_addr) + (u32)(reg_offset), (u32)(data)) - -#define FCAN_CLEARBIT(base_addr, reg_offset, data) FtClearBit32((base_addr) + (u32)(reg_offset), (u32)(data)) - -#define FCAN_TX_FIFO_FULL(instance_p) (FCAN_FIFO_DEPTH == FCAN_FIFO_CNT_TFN_GET(FCAN_READ_REG32(instance_p->config.base_address, FCAN_FIFO_CNT_OFFSET))) - -#define FCAN_RX_FIFO_EMPTY(instance_p) (0 == FCAN_FIFO_CNT_RFN_GET(FCAN_READ_REG32(instance_p->config.base_address, FCAN_FIFO_CNT_OFFSET))) - - -void FCanDump(uintptr base_addr); - -#ifdef __cplusplus -} -#endif - -#endif // ! diff --git a/bsp/phytium/libraries/standalone/drivers/can/fcan/fcan_intr.c b/bsp/phytium/libraries/standalone/drivers/can/fcan/fcan_intr.c deleted file mode 100644 index cb14b49471..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/can/fcan/fcan_intr.c +++ /dev/null @@ -1,155 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fcan_intr.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:29:10 - * Description:  This files is for the can interrupt functions - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 wangxiaodong 2022/5/26 first release - * 1.1 zhangyan 2022/12/7 improve functions - */ - -#include "fcan.h" -#include "fcan_hw.h" -#include "fassert.h" -#include "ftypes.h" -#include "fdebug.h" - -#define FT_CAN_DEBUG_TAG "FT_CAN_INTR" -#define FCAN_DEBUG(format, ...) FT_DEBUG_PRINT_D(FT_CAN_DEBUG_TAG, format, ##__VA_ARGS__) -#define FCAN_INFO(format, ...) FT_DEBUG_PRINT_I(FT_CAN_DEBUG_TAG, format, ##__VA_ARGS__) -#define FCAN_WARN(format, ...) FT_DEBUG_PRINT_W(FT_CAN_DEBUG_TAG, format, ##__VA_ARGS__) -#define FCAN_ERROR(format, ...) FT_DEBUG_PRINT_E(FT_CAN_DEBUG_TAG, format, ##__VA_ARGS__) - -#define FCAN_CALL_INTR_EVENT_HANDLDER(instance_p, event) \ - if (instance_p->intr_event[event].handler) \ - instance_p->intr_event[event].handler(instance_p->intr_event[event].param) - -/** - * @name: FCanRegisterInterruptHandler - * @msg: register FCanCtrl interrupt handler function - * @param {FCanCtrl} *instance_p, pointer to the Can instance - * @param {FCanIntrEventConfig} *intr_event_p, interrupt event type, handler and parameters - * @return {*} - */ -void FCanRegisterInterruptHandler(FCanCtrl *instance_p, FCanIntrEventConfig *intr_event_p) -{ - FASSERT(instance_p); - FASSERT(intr_event_p); - FCanIntrEventType type = intr_event_p->type; - FASSERT(intr_event_p->type < FCAN_INTR_EVENT_NUM); - instance_p->intr_event[type].type = type; - instance_p->intr_event[type].handler = intr_event_p->handler; - instance_p->intr_event[type].param = intr_event_p->param; -} - -/** - * @name: FCanIntrHandler - * @msg: This function is the interrupt handler for the driver. - * It must be connected to an interrupt system by the application such that it - * can be called when an interrupt occurs. - * @param vector Irq num, Don't need attention. - * @param args contains a pointer to the driver instance - * @return {*} - */ -void FCanIntrHandler(s32 vector, void *args) -{ - u32 irq_status; - FCanCtrl *instance_p = (FCanCtrl *)args; - FCanConfig *config_p; - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - config_p = &instance_p->config; - irq_status = FCAN_READ_REG32(config_p->base_address, FCAN_INTR_OFFSET); - - if (0 == irq_status) - { - return; - } - - /* Check for the type of interrupt and Processing it */ - if (irq_status & FCAN_INTR_TEIS_MASK) - { - irq_status &= ~FCAN_INTR_REIS_MASK; - FCAN_SETBIT(config_p->base_address, FCAN_INTR_OFFSET, - FCAN_INTR_TEIC_MASK | FCAN_INTR_REIC_MASK); - FCAN_CLEARBIT(config_p->base_address, FCAN_CTRL_OFFSET, FCAN_CTRL_XFER_MASK); - FCAN_SETBIT(config_p->base_address, FCAN_CTRL_OFFSET, FCAN_CTRL_TXREQ_MASK); - FCAN_SETBIT(config_p->base_address, FCAN_CTRL_OFFSET, FCAN_CTRL_XFER_MASK); - - FCAN_CALL_INTR_EVENT_HANDLDER(instance_p, FCAN_INTR_EVENT_SEND); - } - - if (irq_status & (FCAN_INTR_EIS_MASK | FCAN_INTR_RFIS_MASK | FCAN_INTR_TFIS_MASK | - FCAN_INTR_BOIS_MASK | FCAN_INTR_PEIS_MASK | FCAN_INTR_PWIS_MASK)) - { - FCAN_SETBIT(config_p->base_address, FCAN_INTR_OFFSET, - (FCAN_INTR_EIC_MASK | FCAN_INTR_RFIC_MASK | FCAN_INTR_BOIC_MASK | - FCAN_INTR_PEIC_MASK | FCAN_INTR_PWIC_MASK | FCAN_INTR_TFIC_MASK)); - - /* Check for rx fifo full interrupt and output error information */ - if (irq_status & FCAN_INTR_RFIS_MASK) - { - FCAN_CALL_INTR_EVENT_HANDLDER(instance_p, FCAN_INTR_EVENT_FIFOFULL); - FCAN_DEBUG("rx_fifo is full!!!"); - /* disable rx fifo full interrupt */ - FCAN_CLEARBIT(config_p->base_address, FCAN_INTR_OFFSET, FCAN_INTR_RFIE_MASK); - } - if (irq_status & FCAN_INTR_TFIS_MASK) - { - FCAN_CALL_INTR_EVENT_HANDLDER(instance_p, FCAN_INTR_EVENT_FIFOEMPTY); - FCAN_DEBUG("tx_fifo is empty!!!"); - /* disable tx fifo empty interrupt */ - FCAN_CLEARBIT(config_p->base_address, FCAN_INTR_OFFSET, FCAN_INTR_TFIE_MASK); - } - if (irq_status & FCAN_INTR_EIS_MASK) - { - FCAN_CALL_INTR_EVENT_HANDLDER(instance_p, FCAN_INTR_EVENT_ERROR); - FCAN_ERROR("Error occurred!!!"); - /* disable error interrupt */ - FCAN_CLEARBIT(config_p->base_address, FCAN_INTR_OFFSET, FCAN_INTR_EIE_MASK); - } - if (irq_status & FCAN_INTR_BOIS_MASK) - { - FCAN_CALL_INTR_EVENT_HANDLDER(instance_p, FCAN_INTR_EVENT_BUSOFF); - FCAN_ERROR("Bus off!!!"); - /* disable busoff interrupt */ - FCAN_CLEARBIT(config_p->base_address, FCAN_INTR_OFFSET, FCAN_INTR_BOIE_MASK); - } - if (irq_status & FCAN_INTR_PEIS_MASK) - { - FCAN_CALL_INTR_EVENT_HANDLDER(instance_p, FCAN_INTR_EVENT_PERROE); - FCAN_ERROR("Passive error occurred!!!"); - /* disable passive error interrupt */ - FCAN_CLEARBIT(config_p->base_address, FCAN_INTR_OFFSET, FCAN_INTR_PEIE_MASK); - } - if (irq_status & FCAN_INTR_PWIS_MASK) - { - FCAN_CALL_INTR_EVENT_HANDLDER(instance_p, FCAN_INTR_EVENT_PWARN); - FCAN_ERROR("Passive warning!!!"); - /* disable passive warning interrupt */ - FCAN_CLEARBIT(config_p->base_address, FCAN_INTR_OFFSET, FCAN_INTR_PWIE_MASK); - } - } - - if (irq_status & FCAN_INTR_REIS_MASK) - { - FCAN_SETBIT(config_p->base_address, FCAN_INTR_OFFSET, FCAN_INTR_REIE_MASK); - FCAN_SETBIT(config_p->base_address, FCAN_INTR_OFFSET, FCAN_INTR_REIC_MASK); - FCAN_CALL_INTR_EVENT_HANDLDER(instance_p, FCAN_INTR_EVENT_RECV); - } -} diff --git a/bsp/phytium/libraries/standalone/drivers/can/fcan/fcan_sinit.c b/bsp/phytium/libraries/standalone/drivers/can/fcan/fcan_sinit.c deleted file mode 100644 index 0b01226ee4..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/can/fcan/fcan_sinit.c +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fcan_sinit.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:29:15 - * Description:  This files is for getting default configuration of specific can instance_id - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 wangxiaodong 2022/5/26 first releases - */ - - -#include "fcan.h" -#include "fparameters.h" -#include "fassert.h" - -extern const FCanConfig FCanConfigTbl[FCAN_NUM]; - -/** - * @name: FCanLookupConfig - * @msg: get default configuration of specific can instance_id. - * @param {u32} instance_id, instance id of Can controller - * @return {FCanConfig*} Default configuration parameters of Can - */ -const FCanConfig *FCanLookupConfig(u32 instance_id) -{ - FASSERT(instance_id < FCAN_NUM); - const FCanConfig *pconfig = NULL; - u32 index; - - for (index = 0; index < (u32)FCAN_NUM; index++) - { - if (FCanConfigTbl[index].instance_id == instance_id) - { - pconfig = &FCanConfigTbl[index]; - break; - } - } - return (const FCanConfig *)pconfig; -} diff --git a/bsp/phytium/libraries/standalone/drivers/dma/Kconfig b/bsp/phytium/libraries/standalone/drivers/dma/Kconfig deleted file mode 100644 index 9ed7f94848..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/dma/Kconfig +++ /dev/null @@ -1,10 +0,0 @@ - -config ENABLE_FGDMA - bool - prompt "Use FGDMA" - default n - -config ENABLE_FDDMA - bool - prompt "Use FDDMA" - default n \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/dma/fddma/fddma.c b/bsp/phytium/libraries/standalone/drivers/dma/fddma/fddma.c deleted file mode 100644 index dbb79935c6..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/dma/fddma/fddma.c +++ /dev/null @@ -1,381 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fddma.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:24:47 - * Description:  This file is for ddma interface implementation - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/5/13 init commit - */ - -/***************************** Include Files *********************************/ -#include - -#include "fkernel.h" -#include "fparameters.h" -#include "fassert.h" -#include "fdebug.h" - -#include "fddma_hw.h" -#include "fddma.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ -#define FDDMA_DEBUG_TAG "DDMA" -#define FDDMA_ERROR(format, ...) FT_DEBUG_PRINT_E(FDDMA_DEBUG_TAG, format, ##__VA_ARGS__) -#define FDDMA_WARN(format, ...) FT_DEBUG_PRINT_W(FDDMA_DEBUG_TAG, format, ##__VA_ARGS__) -#define FDDMA_INFO(format, ...) FT_DEBUG_PRINT_I(FDDMA_DEBUG_TAG, format, ##__VA_ARGS__) -#define FDDMA_DEBUG(format, ...) FT_DEBUG_PRINT_D(FDDMA_DEBUG_TAG, format, ##__VA_ARGS__) - -/************************** Function Prototypes ******************************/ -static FError FDdmaReset(FDdma *const instance); - -/****************************************************************************/ -/** - * @name: FDdmaCfgInitialization - * @msg: 初始化DDMA控制器 - * @return {FError} FDDMA_SUCCESS表示初始化成功,其它返回值表示初始化失败 - * @param {FDdma} *instance, DDMA控制器实例 - * @param {FDdmaConfig} *input_config, DDMA控制器配置 - */ -FError FDdmaCfgInitialization(FDdma *const instance, const FDdmaConfig *input_config) -{ - FASSERT(instance && input_config); - uintptr base_addr = input_config->base_addr; - FError ret = FDDMA_SUCCESS; - - if (FT_COMPONENT_IS_READY == instance->is_ready) - { - FDDMA_WARN("The device has been initialized !!!"); - } - - FDdmaDeInitialization(instance); - instance->config = *input_config; - - ret = FDdmaReset(instance); - if (FDDMA_SUCCESS == ret) - { - instance->is_ready = FT_COMPONENT_IS_READY; - FDDMA_INFO("ddma@0x%x initialized successfully !!!", base_addr); - } - - return ret; -} - -/** - * @name: FDdmaStart - * @msg: 启动DDMA控制器,开始传输 - * @return {FError} FDDMA_SUCCESS表示启动成功,其它返回值表示启动失败 - * @param {FDdma} *instance, DDMA控制器实例 - */ -FError FDdmaStart(FDdma *const instance) -{ - FASSERT(instance); - FError ret = FDDMA_SUCCESS; - uintptr base_addr = instance->config.base_addr; - - if (FT_COMPONENT_IS_READY != instance->is_ready) - { - FDDMA_ERROR("The Dma instance is not initialized !!!"); - return FDDMA_ERR_NOT_INIT; - } - - FDdmaEnableGlobalIrq(base_addr); /* enable ddma irq */ - FDdmaEnable(base_addr); - return FDDMA_SUCCESS; -} - -/** - * @name: FDdmaStop - * @msg: 停止DDMA控制器 - * @return {FError} FDDMA_SUCCESS表示停止成功,其它返回值表示停止失败 - * @param {FDdma} *instance, DDMA控制器实例 - */ -FError FDdmaStop(FDdma *const instance) -{ - FASSERT(instance); - FError ret = FDDMA_SUCCESS; - uintptr base_addr = instance->config.base_addr; - - if (FT_COMPONENT_IS_READY != instance->is_ready) - { - FDDMA_ERROR("The Dma instance is not initialized !!!"); - return FDDMA_ERR_NOT_INIT; - } - - FDdmaDisableGlobalIrq(base_addr); /* enable ddma irq */ - FDdmaDisable(base_addr); - return FDDMA_SUCCESS; -} - -/** - * @name: FDdmaDeInitialization - * @msg: 去初始化DDMA控制器 - * @return {无} - * @param {FDdma} *instance, DDMA控制器实例 - */ -void FDdmaDeInitialization(FDdma *const instance) -{ - FASSERT(instance); - u32 chan; - - for (chan = 0; chan < FDDMA_NUM_OF_CHAN; chan++) - { - if (instance->bind_status & BIT(chan)) - { - FDDMA_WARN("Channel %d is not yet unbound", chan); - } - } - - memset(instance, 0, sizeof(*instance)); - return; -} - -/** - * @name: FDdmaAllocateChan - * @msg: 按照配置分配DDMA通道 - * @return {FError} FDDMA_SUCCESS表示分配成功,其它返回值表示分配失败 - * @param {FDdma} *instance, DDMA控制器实例 - * @param {FDdmaChan} *dma_chan, DDMA通道实例 - * @param {FDdmaChanConfig} *dma_chan_config, DDMA通道配置 - */ -FError FDdmaAllocateChan(FDdma *const instance, FDdmaChan *const dma_chan, const FDdmaChanConfig *dma_chan_config) -{ - FASSERT(instance && dma_chan && dma_chan_config); - FError ret = FDDMA_SUCCESS; - const FDdmaChanIndex chan_idx = dma_chan_config->id; - u32 reg_val; - uintptr base_addr = instance->config.base_addr; - - if (FT_COMPONENT_IS_READY != instance->is_ready) - { - FDDMA_ERROR("The Dma instance is not initialized !!!"); - return FDDMA_ERR_NOT_INIT; - } - - if ((TRUE == dma_chan->is_used) || (BIT(chan_idx) & instance->bind_status)) - { - FDDMA_ERROR("Channel -%d has already been used !!!", chan_idx); - return FDDMA_ERR_CHAN_BINDED; - } - - if (FDdmaIsChanRunning(base_addr, chan_idx)) - { - FDDMA_ERROR("Channel -%d is running !!!", chan_idx); - return FDDMA_ERR_CHAN_BINDED; - } - - if (dma_chan_config->ddr_addr % FDDMA_DDR_ADDR_ALIGMENT) - { - FDDMA_ERROR("DDR addr 0x%x must be aligned with %d bytes", - dma_chan_config->ddr_addr, FDDMA_DDR_ADDR_ALIGMENT); - return FDDMA_ERR_INVALID_DDR_ADDR; - } - - if ((FDDMA_MIN_TRANSFER_LEN > dma_chan_config->trans_len) || - (0 != dma_chan_config->trans_len % FDDMA_MIN_TRANSFER_LEN)) - { - FDDMA_ERROR("Invalid transfer size %d bytes !!!", dma_chan_config->trans_len); - return FDDMA_ERR_INVALID_TRANS_SIZE; - } - - dma_chan->dma = instance; - instance->chan[chan_idx] = dma_chan; - - if (&(dma_chan->config) != dma_chan_config) - { - dma_chan->config = *dma_chan_config; - } - - FDdmaStop(instance); /* disable irq */ - - if (FDDMA_SUCCESS != FDdmaDisableChan(base_addr, chan_idx)) - { - FDDMA_ERROR("Failed to disable DDMA@0x%x channel %d !!!", base_addr, chan_idx); - return FDDMA_ERR_WAIT_TIMEOUT; - } - - FDdmaResetChan(base_addr, chan_idx); /* reset channel */ - FDdmaSetChanSelection(base_addr, chan_idx, dma_chan->config.slave_id); /* select channel */ - FDdmaSetChanBind(base_addr, chan_idx, TRUE); /* bind channel */ - - /* setup transfer src and dst */ - /* dma_tx_req: ddr --> dev 从内存中读取数据,写入外设 */ - /* dma_rx_req: dev --> ddr 从外设读取数据到内存 */ -#ifdef __aarch64___ - FDdmaWriteReg(base_addr, FDDMA_CHAN_DDR_LOW_ADDR_OFFSET(chan_idx), LOWER_32_BITS(dma_chan_config->ddr_addr)); - FDdmaWriteReg(base_addr, FDDMA_CHAN_DDR_UP_ADDR_OFFSET(chan_idx), UPPER_32_BITS(dma_chan_config->ddr_addr)); -#else - FDdmaWriteReg(base_addr, FDDMA_CHAN_DDR_LOW_ADDR_OFFSET(chan_idx), (u32)(dma_chan_config->ddr_addr)); - FDdmaWriteReg(base_addr, FDDMA_CHAN_DDR_UP_ADDR_OFFSET(chan_idx), 0); -#endif - - FDdmaWriteReg(base_addr, FDDMA_CHAN_DEV_ADDR_OFFSET(chan_idx), dma_chan_config->dev_addr); - FDdmaWriteReg(base_addr, FDDMA_CHAN_TS_OFFSET(chan_idx), dma_chan_config->trans_len); /* block size */ - - /* set channel request direction */ - FDdmaSetChanDirection(base_addr, chan_idx, - (FDDMA_CHAN_REQ_RX == dma_chan->config.req_mode) ? TRUE : FALSE); - - FDDMA_INFO("channel-%d ddr @0x%x", chan_idx, FDDMA_CHAN_DDR_LOW_ADDR_OFFSET(chan_idx)); - FDDMA_INFO("ddr addr: 0x%x", FDdmaReadReg(base_addr, FDDMA_CHAN_DDR_LOW_ADDR_OFFSET(chan_idx))); - FDDMA_INFO("dev addr: 0x%x", FDdmaReadReg(base_addr, FDDMA_CHAN_DEV_ADDR_OFFSET(chan_idx))); - FDDMA_INFO("transfer len: %d", FDdmaReadReg(base_addr, FDDMA_CHAN_TS_OFFSET(chan_idx))); - - FDdmaSetChanTimeout(base_addr, chan_idx, 0xffff); - FDdmaEnableChanIrq(base_addr, chan_idx); - - if (FDDMA_SUCCESS == ret) - { - instance->bind_status |= BIT(chan_idx); - dma_chan->is_used = TRUE; - FDDMA_INFO("Allocate channel %d", chan_idx); - } - - return ret; -} - -/** - * @name: FDdmaDellocateChan - * @msg: 释放之前分配的DDMA通道 - * @return {FError} FDDMA_SUCCESS表示释放成功,其它返回值表示释放失败 - * @param {FDdmaChan} *dma_chan, DDMA控制器实例 - */ -FError FDdmaDellocateChan(FDdmaChan *const dma_chan) -{ - FASSERT(dma_chan && dma_chan->dma); - FDdma *const instance = dma_chan->dma; - const FDdmaChanIndex chan_idx = dma_chan->config.id; - uintptr base_addr = instance->config.base_addr; - FError ret = FDDMA_SUCCESS; - - if (FT_COMPONENT_IS_READY != instance->is_ready) - { - FDDMA_ERROR("The Dma instance is not initialized !!!"); - return FDDMA_ERR_NOT_INIT; - } - - if (FDDMA_SUCCESS != FDdmaDisableChan(base_addr, chan_idx)) - { - FDDMA_ERROR("Failed to disable DDMA@0x%x channel %d !!!", base_addr, chan_idx); - return FDDMA_ERR_WAIT_TIMEOUT; - } - - FDdmaResetChan(base_addr, chan_idx); - - FDdmaSetChanBind(base_addr, chan_idx, FALSE); /* unbind channel */ - ret = FDdmaDisableChan(base_addr, chan_idx); - if (FDDMA_SUCCESS != ret) /* disable channel */ - { - FDDMA_ERROR("Failure to disable ddma@%p channel %d !!!", base_addr, chan_idx); - return ret; - } - - FDdmaDisableChanIrq(base_addr, chan_idx); /* disable channel irq */ - - instance->bind_status &= ~BIT(chan_idx); /* set bind status */ - instance->chan[chan_idx] = NULL; - - FDDMA_INFO("DeAllocate channels %d", chan_idx); - memset(dma_chan, 0, sizeof(*dma_chan)); - - return ret; -} - -/** - * @name: FDdmaActiveChan - * @msg: 使能指定的DDMA通道 - * @note: 调用FDdmaAllocateChan后无需调用此函数 - * @return {FError} 返回FDDMA_SUCCESS表示成功,返回其它表示失败 - * @param FDdmaChan *const dma_chan, DDMA通道实例 - */ -FError FDdmaActiveChan(FDdmaChan *const dma_chan) -{ - FASSERT(dma_chan && dma_chan->dma); - FDdma *const instance = dma_chan->dma; - uintptr base_addr = instance->config.base_addr; - - if (FT_COMPONENT_IS_READY != instance->is_ready) - { - FDDMA_ERROR("The Dma instance is not initialized !!!"); - return FDDMA_ERR_NOT_INIT; - } - - FDdmaEnableChan(base_addr, dma_chan->config.id); - FDdmaClearChanIrq(base_addr, dma_chan->config.id); /* clear interrupt status */ - return FDDMA_SUCCESS; -} - -FError FDdmaDeactiveChan(FDdmaChan *const dma_chan) -{ - FASSERT(dma_chan && dma_chan->dma); - FDdma *const instance = dma_chan->dma; - uintptr base_addr = instance->config.base_addr; - - if (FT_COMPONENT_IS_READY != instance->is_ready) - { - FDDMA_ERROR("The Dma instance is not initialized !!!"); - return FDDMA_ERR_NOT_INIT; - } - - return FDdmaDisableChan(base_addr, dma_chan->config.id); -} - -/** - * @name: FDdmaReset - * @msg: 重置DDMA控制器 - * @return {FError} FDDMA_SUCCESS表示重置成功,其它返回值表示失败 - * @param {FDdma} *instance, DDMA控制器实例 - */ -static FError FDdmaReset(FDdma *const instance) -{ - FASSERT(instance); - uintptr base_addr = instance->config.base_addr; - FError ret = FDDMA_SUCCESS; - u32 reg_val; - u32 chan; - - if (0 != instance->bind_status) - { - FDDMA_WARN("Some channels are not yet unbound !!!"); - } - - FDdmaDisable(base_addr); /* disable ddma */ - FDdmaSoftwareReset(base_addr); /* do software reset */ - FDdmaDisableGlobalIrq(base_addr); - - /* disable channel and its irq */ - for (u32 chan = FDDMA_CHAN_0; chan < FDDMA_NUM_OF_CHAN; chan++) - { - /* disable channel */ - ret = FDdmaDisableChan(base_addr, chan); - if (FDDMA_SUCCESS != ret) - { - FDDMA_ERROR("Failure to disable ddma@%p channel %d !!!", base_addr, chan); - break; - } - } - - FDdmaDumpRegisters(base_addr); - - return ret; -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/dma/fddma/fddma.h b/bsp/phytium/libraries/standalone/drivers/dma/fddma/fddma.h deleted file mode 100644 index 8b2ff53b5d..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/dma/fddma/fddma.h +++ /dev/null @@ -1,168 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fddma.h - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:24:52 - * Description:  This file is for ddma interface definition - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/5/13 init commit - */ - -#ifndef FDDMA_H -#define FDDMA_H - -#include "ftypes.h" -#include "ferror_code.h" - -#ifdef __cplusplus -extern "C" -{ -#endif -/***************************** Include Files *********************************/ - -/************************** Constant Definitions *****************************/ -typedef enum -{ - FDDMA_CHAN_0 = 0, - FDDMA_CHAN_1, - FDDMA_CHAN_2, - FDDMA_CHAN_3, - FDDMA_CHAN_4, - FDDMA_CHAN_5, - FDDMA_CHAN_6, - FDDMA_CHAN_7, - - FDDMA_NUM_OF_CHAN -} FDdmaChanIndex; /* DDMA channel index */ - -typedef enum -{ - FDDMA_CHAN_REQ_RX = 0, - FDDMA_CHAN_REQ_TX, -} FDdmaChanRequst; /* DDMA channel direction */ - -typedef enum -{ - FDDMA_CHAN_EVT_REQ_DONE = 0, - FDDMA_CHAN_EVT_FIFO_EMPTY, - FDDMA_CHAN_EVT_FIFO_FULL, - - FDDMA_NUM_OF_CHAN_EVT -} FDdmaChanEvt; /* DDMA channel interrupt event */ - -#define FDDMA_SUCCESS FT_SUCCESS -#define FDDMA_ERR_NOT_INIT FT_MAKE_ERRCODE(ErrModBsp, ErrDdma, 0) -#define FDDMA_ERR_CHAN_BINDED FT_MAKE_ERRCODE(ErrModBsp, ErrDdma, 1) -#define FDDMA_ERR_CHAN_RUNNING FT_MAKE_ERRCODE(ErrModBsp, ErrDdma, 2) -#define FDDMA_ERR_INVALID_TRANS_SIZE FT_MAKE_ERRCODE(ErrModBsp, ErrDdma, 3) -#define FDDMA_ERR_WAIT_TIMEOUT FT_MAKE_ERRCODE(ErrModBsp, ErrDdma, 4) -#define FDDMA_ERR_INVALID_DDR_ADDR FT_MAKE_ERRCODE(ErrModBsp, ErrDdma, 5) - -/**************************** Type Definitions *******************************/ -typedef struct FDdma_ FDdma; -typedef struct FDdmaChan_ FDdmaChan; - -typedef void (*FDdmaChanEvtHandler)(FDdmaChan *const dma_chan, void *arg); /* DMA interrupt event handler */ - -typedef struct -{ - u32 id; /* DDMA ctrl id */ - uintptr base_addr; /* DDMA ctrl base address */ - u32 irq_num; /* DDMA ctrl interrupt id */ - u32 irq_prority; /* DDMA ctrl interrupt priority */ -} FDdmaConfig; /* DDMA instance configuration */ - -typedef struct -{ - FDdmaChanIndex id; /* DMA channel index */ - u32 slave_id; /* Perpherial slave id for DDMA */ - FDdmaChanRequst req_mode; /* DMA transfer direction */ - uintptr ddr_addr; /* DMA channel DDR address, could be source or destination */ - u32 dev_addr; /* DMA channel Perpherial, could be source or destination */ - u32 trans_len; /* DMA channel transfer length */ -#define FDDMA_MIN_TRANSFER_LEN 4 /* min bytes in transfer */ - u32 timeout; /* timeout = 0 means no use DMA timeout */ -} FDdmaChanConfig; /* DDMA channel instance */ - -typedef struct FDdmaChan_ -{ - FDdmaChanConfig config; /* DDMA channel configuration */ - boolean is_used; /* TRUE means channel is in use */ - FDdma *dma; /* DMA instance of this channel */ - FDdmaChanEvtHandler evt_handler[FDDMA_NUM_OF_CHAN_EVT]; /* interrupt evt */ - void *evt_handler_args[FDDMA_NUM_OF_CHAN_EVT]; /* interrupt evt args */ -} FDdmaChan; /* DDMA channel instance */ - -typedef struct FDdma_ -{ - FDdmaConfig config; /* DDMA instance configuration */ - FDdmaChan *chan[FDDMA_NUM_OF_CHAN]; /* DDMA channel instance, NULL means channel not yet allocate */ - u32 is_ready; /* TRUE means DDMA init ok */ - u32 bind_status; /* channel bind status, BIT(n) = 1 means channel n is allocated */ -} FDdma; /* DDMA instance */ - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ -#define FDDMA_DDR_ADDR_ALIGMENT 128 /* DMA DDR Buffer need align wiht 128 bytes */ - -/************************** Function Prototypes ******************************/ -/* 获取DDMA实例默认配置 */ -const FDdmaConfig *FDdmaLookupConfig(u32 instance_id); - -/* 初始化DDMA控制器 */ -FError FDdmaCfgInitialization(FDdma *const instance, const FDdmaConfig *input_config); - -/* 去初始化DDMA控制器 */ -void FDdmaDeInitialization(FDdma *const instance); - -/* 按照配置分配DDMA通道 */ -FError FDdmaAllocateChan(FDdma *const instance, FDdmaChan *const dma_chan, const FDdmaChanConfig *dma_chan_config); - -/* 释放之前分配的DDMA通道 */ -FError FDdmaDellocateChan(FDdmaChan *const dma_chan); - -/* 使能指定的DDMA通道,调用FDdmaAllocateChan后无需调用此函数 */ -FError FDdmaActiveChan(FDdmaChan *const dma_chan); - -/* 去使能DDMA通道 */ -FError FDdmaDeactiveChan(FDdmaChan *const dma_chan); - -/* 启动DDMA控制器并开始传输 */ -FError FDdmaStart(FDdma *const instance); - -/* 停止DDMA控制器 */ -FError FDdmaStop(FDdma *const instance); - -/* DDMA中断处理函数 */ -void FDdmaIrqHandler(s32 vector, void *args); - -/* 注册DDMA通道中断响应事件函数 */ -void FDdmaRegisterChanEvtHandler(FDdmaChan *const dma_chan, - FDdmaChanEvt evt, - FDdmaChanEvtHandler handler, - void *handler_arg); -/* DDMA控制器寄存器自检测试 */ -void FDdmaDumpRegisters(uintptr base_addr); - -void FDdmaDumpChanRegisters(uintptr base_addr, FDdmaChanIndex chan); - -#ifdef __cplusplus -} -#endif - -#endif \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/dma/fddma/fddma_g.c b/bsp/phytium/libraries/standalone/drivers/dma/fddma/fddma_g.c deleted file mode 100644 index 6bcce37b1f..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/dma/fddma/fddma_g.c +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fddma_g.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:24:47 - * Description:  This files is for ddma static configuration - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/5/13 init commit - */ - -/***************************** Include Files *********************************/ -#include "fparameters.h" - -#include "fddma_hw.h" -#include "fddma.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/************************** Variable Definitions *****************************/ -const FDdmaConfig fddma_cfg_tbl[FDDMA_INSTANCE_NUM] = -{ - [FDDMA0_ID] = - { - .id = FDDMA0_ID, - .base_addr = FDDMA0_BASE_ADDR, - .irq_num = FDDMA0_IRQ_NUM, - .irq_prority = 0 - }, - - [FDDMA1_ID] = - { - .id = FDDMA1_ID, - .base_addr = FDDMA1_BASE_ADDR, - .irq_num = FDDMA1_IRQ_NUM, - .irq_prority = 0 - } -}; /* DDMA控制器默认配置 */ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/dma/fddma/fddma_hw.c b/bsp/phytium/libraries/standalone/drivers/dma/fddma/fddma_hw.c deleted file mode 100644 index f66ca8aaf5..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/dma/fddma/fddma_hw.c +++ /dev/null @@ -1,384 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fddma_hw.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:24:47 - * Description:  This files is for ddma register rw operations - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/5/13 init commit - */ - -/***************************** Include Files *********************************/ -#include - -#include "fkernel.h" -#include "fparameters.h" -#include "fassert.h" -#include "fdebug.h" - -#include "fddma_hw.h" -#include "fddma.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ -#define FDDMA_DEBUG_TAG "DDMA-HW" -#define FDDMA_ERROR(format, ...) FT_DEBUG_PRINT_E(FDDMA_DEBUG_TAG, format, ##__VA_ARGS__) -#define FDDMA_WARN(format, ...) FT_DEBUG_PRINT_W(FDDMA_DEBUG_TAG, format, ##__VA_ARGS__) -#define FDDMA_INFO(format, ...) FT_DEBUG_PRINT_I(FDDMA_DEBUG_TAG, format, ##__VA_ARGS__) -#define FDDMA_DEBUG(format, ...) FT_DEBUG_PRINT_D(FDDMA_DEBUG_TAG, format, ##__VA_ARGS__) - -/************************** Function Prototypes ******************************/ - -/****************************************************************************/ -/** - * @name: FDdmaDisable - * @msg: 去使能DDMA控制器 - * @return {*} - * @param {uintptr} base_addr, DDMA控制器基地址 - */ -void FDdmaDisable(uintptr base_addr) -{ - u32 reg_val = FDdmaReadReg(base_addr, FDDMA_CTL_OFFSET); - reg_val &= ~FDDMA_CTL_ENABLE; - FDdmaWriteReg(base_addr, FDDMA_CTL_OFFSET, reg_val); - FDDMA_DEBUG("ddma @%p disabled : 0x%x", base_addr, FDdmaReadReg(base_addr, FDDMA_CTL_OFFSET)); - return; -} - -/** - * @name: FDdmaEnable - * @msg: 使能DDMA控制器 - * @return {*} - * @param {uintptr} base_addr, DDMA控制器基地址 - */ -void FDdmaEnable(uintptr base_addr) -{ - u32 reg_val = FDdmaReadReg(base_addr, FDDMA_CTL_OFFSET); - reg_val |= FDDMA_CTL_ENABLE; - FDdmaWriteReg(base_addr, FDDMA_CTL_OFFSET, reg_val); - FDDMA_DEBUG("ddma @%p enabled : 0x%x", base_addr, FDdmaReadReg(base_addr, FDDMA_CTL_OFFSET)); - return; -} - -/** - * @name: FDdmaSoftwareReset - * @msg: 复位DDMA控制器 - * @return {*} - * @param {uintptr} base_addr, DDMA控制器基地址 - */ -void FDdmaSoftwareReset(uintptr base_addr) -{ - int delay = 10000; - u32 reg_val = FDdmaReadReg(base_addr, FDDMA_CTL_OFFSET); - reg_val |= FDDMA_CTL_SRST; - FDdmaWriteReg(base_addr, FDDMA_CTL_OFFSET, reg_val); - FDDMA_DEBUG("ddma @%p soft reset start : 0x%x", base_addr, FDdmaReadReg(base_addr, FDDMA_CTL_OFFSET)); - - while (--delay > 0) /* wait a while to do reset */ - ; - - reg_val &= ~FDDMA_CTL_SRST; - FDdmaWriteReg(base_addr, FDDMA_CTL_OFFSET, reg_val); /* exit from software reset */ - FDDMA_DEBUG("ddma @%p soft reset end : 0x%x", base_addr, FDdmaReadReg(base_addr, FDDMA_CTL_OFFSET)); - return; -} - -/** - * @name: FDdmaDisableGlobalIrq - * @msg: 关闭DDMA全局中断 - * @return {*} - * @param {uintptr} base_addr, DDMA控制器基地址 - */ -void FDdmaDisableGlobalIrq(uintptr base_addr) -{ - u32 reg_val = FDdmaReadReg(base_addr, FDDMA_MASK_INTR_OFFSET); - reg_val |= FDDMA_MASK_EN_GLOBAL_INTR; /* write 1 and disable interrupt */ - FDdmaWriteReg(base_addr, FDDMA_MASK_INTR_OFFSET, reg_val); - return; -} - -/** - * @name: FDdmaEnableGlobalIrq - * @msg: 打开DDMA全局中断 - * @return {*} - * @param {uintptr} base_addr, DDMA控制器基地址 - */ -void FDdmaEnableGlobalIrq(uintptr base_addr) -{ - u32 reg_val = FDdmaReadReg(base_addr, FDDMA_MASK_INTR_OFFSET); - reg_val &= ~FDDMA_MASK_EN_GLOBAL_INTR; /* write 0 and enable interrupt */ - FDdmaWriteReg(base_addr, FDDMA_MASK_INTR_OFFSET, reg_val); - return; -} - -/** - * @name: FDdmaDisableChanIrq - * @msg: 关闭DDMA通道中断 - * @return {*} - * @param {uintptr} base_addr, DDMA控制器基地址 - * @param {u32} chan, DDMA通道号 - */ -void FDdmaDisableChanIrq(uintptr base_addr, u32 chan) -{ - FASSERT_MSG((FDDMA_NUM_OF_CHAN > chan), "Channel %d is not supported", chan); - u32 reg_val = FDdmaReadReg(base_addr, FDDMA_MASK_INTR_OFFSET); - reg_val |= FDDMA_MASK_EN_CHAN_INTR(chan); - FDdmaWriteReg(base_addr, FDDMA_MASK_INTR_OFFSET, reg_val); - return; -} - -/** - * @name: FDdmaEnableChanIrq - * @msg: 打开DDMA通道中断 - * @return {*} - * @param {uintptr} base_addr, DDMA控制器基地址 - * @param {u32} chan, DDMA通道号 - */ -void FDdmaEnableChanIrq(uintptr base_addr, u32 chan) -{ - FASSERT_MSG((FDDMA_NUM_OF_CHAN > chan), "Channel %d is not supported", chan); - u32 reg_val = FDdmaReadReg(base_addr, FDDMA_MASK_INTR_OFFSET); - reg_val &= ~FDDMA_MASK_EN_CHAN_INTR(chan); /* write 0 and enable */ - FDdmaWriteReg(base_addr, FDDMA_MASK_INTR_OFFSET, reg_val); - return; -} - -/** - * @name: FDdmaDisableChan - * @msg: 去使能DDMA通道 - * @return {FError} FDDMA_SUCCESS 表示去使能成功 - * @param {uintptr} base_addr, DDMA控制器基地址 - * @param {u32} chan, DDMA通道号 - */ -FError FDdmaDisableChan(uintptr base_addr, u32 chan) -{ - FASSERT_MSG((FDDMA_NUM_OF_CHAN > chan), "Channel %d is not supported", chan); - int delay = 1000; - u32 reg_val = FDdmaReadReg(base_addr, FDDMA_CHAN_CTL_OFFSET(chan)); - reg_val &= ~FDDMA_CHAN_CTL_EN; - FDdmaWriteReg(base_addr, FDDMA_CHAN_CTL_OFFSET(chan), reg_val); - - /* 先写该位 1’b0,随后读取到该位是 1’b0 的时候,才能复位该通道 */ - do - { - reg_val = FDdmaReadReg(base_addr, FDDMA_CHAN_CTL_OFFSET(chan)); - if (delay-- <= 0) - { - break; - } - } - while (reg_val & FDDMA_CHAN_CTL_EN); - - FDDMA_DEBUG("ddma@ %p channel %d is disabled : 0x%x", base_addr, chan, FDdmaReadReg(base_addr, FDDMA_CHAN_CTL_OFFSET(chan))); - return (delay > 0) ? FDDMA_SUCCESS : FDDMA_ERR_WAIT_TIMEOUT; -} - -/** - * @name: FDdmaEnableChan - * @msg: 使能DDMA通道 - * @return {*} - * @param {uintptr} base_addr, DDMA控制器基地址 - * @param {u32} chan, DDMA通道号 - */ -void FDdmaEnableChan(uintptr base_addr, u32 chan) -{ - FASSERT_MSG((FDDMA_NUM_OF_CHAN > chan), "Channel %d is not supported", chan); - u32 reg_val = FDdmaReadReg(base_addr, FDDMA_CHAN_CTL_OFFSET(chan)); - reg_val |= FDDMA_CHAN_CTL_EN; - FDdmaWriteReg(base_addr, FDDMA_CHAN_CTL_OFFSET(chan), reg_val); - FDDMA_DEBUG("ddma @%p chan %d enabled : 0x%x", base_addr, chan, FDdmaReadReg(base_addr, FDDMA_CHAN_CTL_OFFSET(chan))); - return; -} - -/** - * @name: FDdmaClearChanIrq - * @msg: 清除DDMA通道中断状态 - * @return {*} - * @param {uintptr} base_addr, DDMA控制器基地址 - * @param {u32} chan, DDMA通道号 - */ -void FDdmaClearChanIrq(uintptr base_addr, u32 chan) -{ - FASSERT_MSG((FDDMA_NUM_OF_CHAN > chan), "Channel %d is not supported", chan); - /* write 1 to clear irq status of channel */ - FDdmaWriteReg(base_addr, FDDMA_STA_OFFSET, FDDMA_STA_CHAN_REQ_DONE(chan)); -} - -/** - * @name: FDdmaResetChan - * @msg: 重置DDMA通道 - * @return {*} - * @param {uintptr} base_addr, DDMA控制器基地址 - * @param {u32} chan, DDMA通道号 - */ -void FDdmaResetChan(uintptr base_addr, u32 chan) -{ - FASSERT_MSG((FDDMA_NUM_OF_CHAN > chan), "Channel %d is not supported", chan); - int delay = 1000; - u32 reg_val; - - if (FDdmaIsChanRunning(base_addr, chan)) /* disable channel if running */ - { - (void)FDdmaDisableChan(base_addr, chan); - } - - reg_val = FDdmaReadReg(base_addr, FDDMA_CHAN_CTL_OFFSET(chan)); - reg_val |= FDDMA_CHAN_CTL_SRST; - FDdmaWriteReg(base_addr, FDDMA_CHAN_CTL_OFFSET(chan), reg_val); - - while (--delay > 0) /* wait a while to do reset */ - ; - - reg_val &= ~FDDMA_CHAN_CTL_SRST; - FDdmaWriteReg(base_addr, FDDMA_CHAN_CTL_OFFSET(chan), reg_val); - FDDMA_DEBUG("Channel reset done, ctrl: 0x%x", FDdmaReadReg(base_addr, FDDMA_CHAN_CTL_OFFSET(chan))); - return; -} - -/** - * @name: FDdmaIsChanRunning - * @msg: 检查通道是否在工作中 - * @return {boolean} TRUE: 在工作中 - * @param {uintptr} base_addr, DDMA控制器基地址 - * @param {u32} chan, DDMA通道号 - */ -boolean FDdmaIsChanRunning(uintptr base_addr, u32 chan) -{ - FASSERT_MSG((FDDMA_NUM_OF_CHAN > chan), "Channel %d is not supported", chan); - u32 reg_val = FDdmaReadReg(base_addr, FDDMA_CHAN_CTL_OFFSET(chan)); - return (FDDMA_CHAN_CTL_EN & reg_val) ? TRUE : FALSE; -} - -/** - * @name: FDdmaSetChanSelection - * @msg: 将DDMA通道与外设绑定 - * @return {*} - * @param {uintptr} base_addr, DDMA控制器基地址 - * @param {u32} chan, DDMA通道号 - * @param {u32} slave_id, 外设对应的slave id - */ -void FDdmaSetChanSelection(uintptr base_addr, u32 chan, u32 slave_id) -{ - FASSERT_MSG((FDDMA_NUM_OF_CHAN > chan), "Channel %d is not supported", chan); - FASSERT_MSG((FDDMA_MAX_SLAVE_ID >= slave_id), "Invalid slave id %d", slave_id); - u32 reg_val; - - if (FDDMA_CHAN_4 > chan) - { - reg_val = FDdmaReadReg(base_addr, FDDMA_CHAN_0_3_CFG_OFFSET); - reg_val &= ~FDDMA_CHAN_0_3_SEL_MASK(chan); - reg_val |= FDDMA_CHAN_0_3_SEL(chan, slave_id); - reg_val |= FDDMA_CHAN_0_3_SEL_EN(chan); - FDdmaWriteReg(base_addr, FDDMA_CHAN_0_3_CFG_OFFSET, reg_val); - FDDMA_DEBUG("ddma%p sets the slaveid of chan-%d to %d, 0x%x", base_addr, chan, slave_id, FDdmaReadReg(base_addr, FDDMA_CHAN_0_3_CFG_OFFSET)); - } - else - { - reg_val = FDdmaReadReg(base_addr, FDDMA_CHAN_4_7_CFG_OFFSET); - reg_val &= ~FDDMA_CHAN_4_7_SEL_MASK(chan); - reg_val |= FDDMA_CHAN_4_7_SEL(chan, slave_id); - reg_val |= FDDMA_CHAN_4_7_SEL_EN(chan); - FDdmaWriteReg(base_addr, FDDMA_CHAN_4_7_CFG_OFFSET, reg_val); - FDDMA_DEBUG("ddma%p sets the slaveid of chan-%d to %d, 0x%x", base_addr, chan, slave_id, FDdmaReadReg(base_addr, FDDMA_CHAN_4_7_CFG_OFFSET)); - } - - return; -} - -/** - * @name: FDdmaSetChanBind - * @msg: 修改通道的绑定状态 - * @return {*} - * @param {uintptr} base_addr, DDMA控制器基地址 - * @param {u32} chan, DDMA通道号 - * @param {boolean} bind, TRUE: 绑定,FALSE: 解除绑定 - */ -void FDdmaSetChanBind(uintptr base_addr, u32 chan, boolean bind) -{ - FASSERT_MSG((FDDMA_NUM_OF_CHAN > chan), "Channel %d is not supported", chan); - u32 reg_val = FDdmaReadReg(base_addr, FDDMA_CHAN_BIND_OFFSET); - - if (bind) - { - reg_val |= BIT(chan); - } - else - { - reg_val &= ~BIT(chan); - } - - FDDMA_DEBUG("ddma@%p %s chan-%d, 0x%x", base_addr, bind ? "bind" : "unbind", chan, FDdmaReadReg(base_addr, FDDMA_CHAN_BIND_OFFSET)); - FDdmaWriteReg(base_addr, FDDMA_CHAN_BIND_OFFSET, reg_val); - return; -} - -/** - * @name: FDdmaSetChanDirection - * @msg: 设置通道的方向 - * @return {*} - * @param {uintptr} base_addr, DDMA控制器基地址 - * @param {u32} chan, DDMA通道号 - * @param {boolean} is_rx, TRUE: 接收, FALSE: 发送 - */ -void FDdmaSetChanDirection(uintptr base_addr, u32 chan, boolean is_rx) -{ - FASSERT_MSG((FDDMA_NUM_OF_CHAN > chan), "Channel %d is not supported", chan); - u32 reg_val = FDdmaReadReg(base_addr, FDDMA_CHAN_CTL_OFFSET(chan)); - if (is_rx) - { - reg_val |= FDDMA_CHAN_CTL_RX_MODE; /* device to memory */ - } - else - { - reg_val &= ~FDDMA_CHAN_CTL_RX_MODE; /* memory to device */ - } - FDdmaWriteReg(base_addr, FDDMA_CHAN_CTL_OFFSET(chan), reg_val); - return; -} - -/** - * @name: FDdmaSetChanTimeout - * @msg: 设置通道超时 - * @return {*} - * @param {uintptr} base_addr, DDMA控制器基地址 - * @param {u32} chan, DDMA通道号 - * @param {u32} timeout, 超时设置,0表示不启用超时 - */ -void FDdmaSetChanTimeout(uintptr base_addr, u32 chan, u32 timeout) -{ - FASSERT_MSG((FDDMA_NUM_OF_CHAN > chan), "Channel %d is not supported", chan); - u32 reg_val = FDdmaReadReg(base_addr, FDDMA_CHAN_TIMEOUT_CNT_OFFSET(chan)); - - if (0 < timeout) - { - reg_val &= ~FDDMA_CHAN_TIMEOUT_CNT_MASK; - reg_val |= FDDMA_CHAN_TIMEOUT_CNT_SET(timeout); - reg_val |= FDDMA_CHAN_TIMEOUT_EN; - } - else - { - reg_val &= ~FDDMA_CHAN_TIMEOUT_EN; - } - - FDdmaWriteReg(base_addr, FDDMA_CHAN_TIMEOUT_CNT_OFFSET(chan), reg_val); - return; -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/dma/fddma/fddma_hw.h b/bsp/phytium/libraries/standalone/drivers/dma/fddma/fddma_hw.h deleted file mode 100644 index e84e6c6fd9..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/dma/fddma/fddma_hw.h +++ /dev/null @@ -1,225 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fddma_hw.h - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:24:52 - * Description:  This files is for register definition - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/5/13 init commit - */ - -#ifndef FDDMA_HW_H -#define FDDMA_HW_H - -/***************************** Include Files *********************************/ - -#include "fassert.h" -#include "ftypes.h" -#include "fio.h" -#include "fkernel.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - - -/************************** Constant Definitions *****************************/ -/** @name Register Map - * - * Register offsets from the base address of an GPIO device. - * @{ - */ -#define FDDMA_CTL_OFFSET 0x0 /* 全局控制类寄存器 */ -#define FDDMA_CHAN_0_3_CFG_OFFSET 0x4 /* DMA通道0~3选择配置寄存器 */ -#define FDDMA_STA_OFFSET 0x8 /* 中断状态寄存器 */ -#define FDDMA_MASK_INTR_OFFSET 0xC /* 中断掩码寄存器 */ -/* AXI读写相关的配置硬件暂未开放 */ -#define FDDMA_UP_AXI_AW_CFG_OFFSET 0x10 /* 上行AXI写通道配置寄存器 */ -#define FDDMA_UP_AXI_AR_CFG_OFFSET 0x14 /* 上行AXI读通道配置寄存器 */ -#define FDDMA_DOWN_AXI_AW_CFG_OFFSET 0x18 /* 下行AXI写通道配置寄存器 */ -#define FDDMA_DOWN_AXI_AR_CFG_OFFSET 0x1C /* 下行AXI读通道配置寄存器 */ - -#define FDDMA_CHAN_BIND_OFFSET 0x20 /* DMA通道绑定寄存器 */ -#define FDDMA_GCAP_OFFSET 0x24 /* DMA通道数寄存器(只读) */ -#define FDDMA_CHAN_4_7_CFG_OFFSET 0x28 /* DMA通道4~7选择配置寄存器 */ - -#define FDDMA_CHAN_OFFSET(chan) (0x40 * (chan)) -#define FDDMA_CHAN_DDR_UP_ADDR_OFFSET(chan) (0x40 + FDDMA_CHAN_OFFSET(chan)) /* 内存中源/目的地址高32位 */ -#define FDDMA_CHAN_DDR_LOW_ADDR_OFFSET(chan) (0x44 + FDDMA_CHAN_OFFSET(chan)) /* 内存中源/目的地址低32位 */ -#define FDDMA_CHAN_DEV_ADDR_OFFSET(chan) (0x48 + FDDMA_CHAN_OFFSET(chan)) /* 设备中源/目的地址32位 */ -#define FDDMA_CHAN_TS_OFFSET(chan) (0x4C + FDDMA_CHAN_OFFSET(chan)) /* 需要传输的总数据字节数 */ -#define FDDMA_CHAN_CRT_UP_ADDR_OFFSET(chan) (0x50 + FDDMA_CHAN_OFFSET(chan)) /* 当前内存需要读写数据的高32位 */ -#define FDDMA_CHAN_CRT_LOW_ADDR_OFFSET(chan) (0x54 + FDDMA_CHAN_OFFSET(chan)) /* 当前内存需要读写数据的低32位 */ -#define FDDMA_CHAN_CTL_OFFSET(chan) (0x58 + FDDMA_CHAN_OFFSET(chan)) /* 通道控制寄存器 */ -#define FDDMA_CHAN_STS_OFFSET(chan) (0x5C + FDDMA_CHAN_OFFSET(chan)) /* 通道状态寄存器 */ -#define FDDMA_CHAN_TIMEOUT_CNT_OFFSET(chan) (0x60 + FDDMA_CHAN_OFFSET(chan)) /* 超时等待阈值 */ - -/** @name FDDMA_CTL_OFFSET Register - */ -#define FDDMA_CTL_SRST BIT(1) /* 1: 全局软复位 */ -#define FDDMA_CTL_ENABLE BIT(0) /* 1: 全局使能控制 */ - -/** @name FDDMA_CHAN_0_3_CFG_OFFSET Register - */ -#define FDDMA_CHAN_0_3_SEL_EN(chan) BIT((chan) * 8 + 7) /* 1: 通道chan信号源选择有效 */ -#define FDDMA_CHAN_0_3_SEL(chan, sel) ((sel) << ((chan) * 8)) /* 通道chan信号源选择sel项 */ -#define FDDMA_CHAN_0_3_SEL_MASK(chan) (GENMASK(7, 0) << ((chan) * 8)) - -/** @name FDDMA_STA_OFFSET Register - */ -#define FDDMA_STA_CHAN_REQ_DONE(chan) BIT((chan) * 4) /* 通道chan的block请求完成时置1,写1后清0 */ - -/** @name FDDMA_MASK_INTR_OFFSET Register - */ -#define FDDMA_MASK_EN_GLOBAL_INTR BIT(31) /* 全局中断使能输出控制位 */ -#define FDDMA_MASK_EN_CHAN_INTR(chan) BIT(chan) /* 通道chan的中断输出控制位 */ - -/** @name FDDMA_CHAN_BIND_OFFSET Register - */ -#define FDDMA_CHAN_BIND(chan) BIT(chan) /* 1: 通道已绑定了外设DMA请求信号线 */ - -/** @name FDDMA_CHAN_4_7_CFG_OFFSET Register - */ -#define FDDMA_CHAN_4_7_SEL_EN(chan) BIT(((chan) - 4) * 8 + 7) /* 1: 通道chan信号源选择有效 */ -#define FDDMA_CHAN_4_7_SEL(chan, sel) ((sel) << (((chan) - 4) * 8)) /* 通道chan信号源选择sel项 */ -#define FDDMA_CHAN_4_7_SEL_MASK(chan) (GENMASK(7, 0) << (((chan) - 4) * 8)) - -/** @name FDDMA_CHAN_CTL_OFFSET Register - */ -#define FDDMA_CHAN_CTL_RX_MODE BIT(2) /* 1:接收外设 dma_rx_req, 0:接收外设 dma_tx_req */ -#define FDDMA_CHAN_CTL_SRST BIT(1) /* 1: 复位通道 */ -#define FDDMA_CHAN_CTL_EN BIT(0) /* 1: 使能通道 */ - -/** @name FDDMA_CHAN_STS_OFFSET Register - */ -#define FDDMA_CHAN_STS_FIFO_EMPTY BIT(1) /* 1: FIFO空状态 */ -#define FDDMA_CHAN_STS_FIFO_FULL BIT(0) /* 1: FIFO满状态 */ - -/** @name FDDMA_CHAN_TIMEOUT_CNT_OFFSET Register - */ -#define FDDMA_CHAN_TIMEOUT_EN BIT(32) /* 1: 使能超时机制 */ -#define FDDMA_CHAN_TIMEOUT_CNT_SET(cnt) SET_REG32_BITS((cnt), 27, 0) /* 超时阈值 */ -#define FDDMA_CHAN_TIMEOUT_CNT_MASK GENMASK(27, 0) -/**************************** Type Definitions *******************************/ - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ -/** - * @name: FDdmaReadReg - * @msg: 读DDMA寄存器 - * @return {u32} 获取的寄存器值 - * @param {uintptr} base_addr, DDMA寄存器基地址 - * @param {u32} reg_off, DDMA寄存器偏移量 - */ -static inline u32 FDdmaReadReg(uintptr base_addr, u32 reg_off) -{ - return FtIn32(base_addr + reg_off); -} - -/** - * @name: FDdmaWriteReg - * @msg: 写DDMA寄存器 - * @return {无} - * @param {uintptr} base_addr, DDMA寄存器基地址 - * @param {u32} reg_off, DDMA寄存器偏移量 - * @param {u32} reg_val, 设置的寄存器值 - */ -static inline void FDdmaWriteReg(uintptr base_addr, u32 reg_off, u32 reg_val) -{ - FtOut32(base_addr + reg_off, reg_val); - return; -} - -/** - * @name: FDdmaReadStatus - * @msg: 获取DDMA中断状态 - * @return {u32} 中断状态 - * @param {uintptr} base_addr, DDMA寄存器基地址 - */ -static inline u32 FDdmaReadStatus(uintptr base_addr) -{ - return FDdmaReadReg(base_addr, FDDMA_STA_OFFSET); -} - -/** - * @name: FDdmaReadChanStatus - * @msg: 获取DDMA通道中断状态 - * @return {u32} 中断状态 - * @param {uintptr} base_addr, DDMA寄存器基地址 - * @param {u32} chan, DDMA通道号 - */ -static inline u32 FDdmaReadChanStatus(uintptr base_addr, u32 chan) -{ - return FDdmaReadReg(base_addr, FDDMA_CHAN_STS_OFFSET(chan)); -} - -/************************** Function Prototypes ******************************/ -/* 复位DDMA控制器 */ -void FDdmaSoftwareReset(uintptr base_addr); - -/* 去使能DDMA控制器 */ -void FDdmaDisable(uintptr base_addr); - -/* 使能DDMA控制器 */ -void FDdmaEnable(uintptr base_addr); - -/* 重置DDMA通道 */ -void FDdmaResetChan(uintptr base_addr, u32 chan); - -/* 去使能DDMA通道 */ -FError FDdmaDisableChan(uintptr base_addr, u32 chan); - -/* 使能DDMA通道 */ -void FDdmaEnableChan(uintptr base_addr, u32 chan); - -/* 关闭DDMA全局中断 */ -void FDdmaDisableGlobalIrq(uintptr base_addr); - -/* 打开DDMA全局中断 */ -void FDdmaEnableGlobalIrq(uintptr base_addr); - -/* 关闭DDMA通道中断 */ -void FDdmaDisableChanIrq(uintptr base_addr, u32 chan); - -/* 打开DDMA通道中断 */ -void FDdmaEnableChanIrq(uintptr base_addr, u32 chan); - -/* 清除DDMA通道中断状态 */ -void FDdmaClearChanIrq(uintptr base_addr, u32 chan); - -/* 检查通道是否在工作中 */ -boolean FDdmaIsChanRunning(uintptr base_addr, u32 chan); - -/* 将DDMA通道与外设绑定 */ -void FDdmaSetChanSelection(uintptr base_addr, u32 chan, u32 slave_id); - -/* 修改通道的绑定状态 */ -void FDdmaSetChanBind(uintptr base_addr, u32 chan, boolean bind); - -/* 设置通道的方向 */ -void FDdmaSetChanDirection(uintptr base_addr, u32 chan, boolean is_rx); - -/* 设置通道超时 */ -void FDdmaSetChanTimeout(uintptr base_addr, u32 chan, u32 timeout); - -#ifdef __cplusplus -} -#endif - -#endif \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/dma/fddma/fddma_intr.c b/bsp/phytium/libraries/standalone/drivers/dma/fddma/fddma_intr.c deleted file mode 100644 index 76cfdecb80..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/dma/fddma/fddma_intr.c +++ /dev/null @@ -1,143 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fddma_intr.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:24:47 - * Description:  This file is for ddma interrupt implementation - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/5/13 init commit - */ - -/***************************** Include Files *********************************/ -#include - -#include "fkernel.h" -#include "fparameters.h" -#include "fassert.h" -#include "fdebug.h" - -#include "fddma_hw.h" -#include "fddma.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ -#define FDDMA_DEBUG_TAG "DDMA-INTR" -#define FDDMA_ERROR(format, ...) FT_DEBUG_PRINT_E(FDDMA_DEBUG_TAG, format, ##__VA_ARGS__) -#define FDDMA_WARN(format, ...) FT_DEBUG_PRINT_W(FDDMA_DEBUG_TAG, format, ##__VA_ARGS__) -#define FDDMA_INFO(format, ...) FT_DEBUG_PRINT_I(FDDMA_DEBUG_TAG, format, ##__VA_ARGS__) -#define FDDMA_DEBUG(format, ...) FT_DEBUG_PRINT_D(FDDMA_DEBUG_TAG, format, ##__VA_ARGS__) - -#define FDDMA_CALL_EVT_HANDLER(express, dma_chan, args) \ - if (express) \ - { \ - express(dma_chan, args); \ - } - -/************************** Function Prototypes ******************************/ - -/****************************************************************************/ -/** - * @name: FDdmaChanIrqHandler - * @msg: DDMA通道中断处理函数 - * @return {*} - * @param {FDdma} *instance, DDMA实例 - * @param {FDdmaChanIndex} chan_idx, DDMA通道号 - */ -static void FDdmaChanIrqHandler(FDdma *const instance, FDdmaChanIndex chan_idx) -{ - FASSERT(instance && instance->chan[chan_idx]); - FDdmaChan *const dma_chan = instance->chan[chan_idx]; - uintptr base_addr = instance->config.base_addr; - u32 status = FDdmaReadChanStatus(base_addr, chan_idx); - - FDDMA_INFO("chan-%d irq status: 0x%x", chan_idx, status); - - FDDMA_CALL_EVT_HANDLER(dma_chan->evt_handler[FDDMA_CHAN_EVT_REQ_DONE], dma_chan, - dma_chan->evt_handler_args[FDDMA_CHAN_EVT_REQ_DONE]); - - if (FDDMA_CHAN_STS_FIFO_EMPTY & status) - { - FDDMA_CALL_EVT_HANDLER(dma_chan->evt_handler[FDDMA_CHAN_EVT_FIFO_EMPTY], dma_chan, - dma_chan->evt_handler_args[FDDMA_CHAN_EVT_FIFO_EMPTY]); - } - - if (FDDMA_CHAN_STS_FIFO_FULL & status) - { - FDDMA_CALL_EVT_HANDLER(dma_chan->evt_handler[FDDMA_CHAN_EVT_FIFO_FULL], dma_chan, - dma_chan->evt_handler_args[FDDMA_CHAN_EVT_FIFO_FULL]); - } - - /* submit queued descriptor after processing the completed ones */ - return; -} - -/** - * @name: FDdmaIrqHandler - * @msg: DDMA中断处理函数 - * @return {无} - * @param {s32} vector - * @param {void} *param, 输入参数 - */ -void FDdmaIrqHandler(s32 vector, void *args) -{ - FASSERT(NULL != args); - FDdma *const instance = (FDdma * const)args; - uintptr base_addr = instance->config.base_addr; - u32 status = FDdmaReadStatus(base_addr); - u32 chan; - - FDDMA_INFO("ddma irq 0x%x", status); - FDdmaDisableGlobalIrq(base_addr); /* disable interrupt from occur again */ - - /* poll, clear and process every chanel interrupt status */ - for (chan = FDDMA_CHAN_0; chan < FDDMA_NUM_OF_CHAN; chan++) - { - if (0 == (FDDMA_STA_CHAN_REQ_DONE(chan) & status)) - { - continue; - } - - FDDMA_INFO("handle chan %d", chan); - FDdmaClearChanIrq(base_addr, chan); /* clear interrupt status */ - FDdmaChanIrqHandler(instance, chan); /* channel interrupt handle */ - } - - FDdmaEnableGlobalIrq(base_addr); /* re-enable interrupt */ - return; -} - -/** - * @name: FDdmaRegisterChanEvtHandler - * @msg: 注册DDMA通道中断响应事件函数 - * @return {无} - * @param {FDdmaChan} *dma_chan, DDMA通道 - * @param {FDdmaChanEvt} evt, 中断事件 - * @param {FDdmaChanEvtHandler} handler, 中断响应事件函数 - * @param {void} *handler_arg, 中断响应事件函数输入参数 - */ -void FDdmaRegisterChanEvtHandler(FDdmaChan *const dma_chan, FDdmaChanEvt evt, FDdmaChanEvtHandler handler, void *handler_arg) -{ - FASSERT(dma_chan); - dma_chan->evt_handler[evt] = handler; - dma_chan->evt_handler_args[evt] = handler_arg; - return; -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/dma/fddma/fddma_selftest.c b/bsp/phytium/libraries/standalone/drivers/dma/fddma/fddma_selftest.c deleted file mode 100644 index 5f1bd6557e..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/dma/fddma/fddma_selftest.c +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fddma_selftest.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:24:47 - * Description:  This file is for ddma self test - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/5/13 init commit - */ - -/***************************** Include Files *********************************/ -#include - -#include "fkernel.h" -#include "fparameters.h" -#include "fassert.h" -#include "fdebug.h" - -#include "fddma_hw.h" -#include "fddma.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ -#define FDDMA_DEBUG_TAG "DDMA-TEST" -#define FDDMA_ERROR(format, ...) FT_DEBUG_PRINT_E(FDDMA_DEBUG_TAG, format, ##__VA_ARGS__) -#define FDDMA_WARN(format, ...) FT_DEBUG_PRINT_W(FDDMA_DEBUG_TAG, format, ##__VA_ARGS__) -#define FDDMA_INFO(format, ...) FT_DEBUG_PRINT_I(FDDMA_DEBUG_TAG, format, ##__VA_ARGS__) -#define FDDMA_DEBUG(format, ...) FT_DEBUG_PRINT_D(FDDMA_DEBUG_TAG, format, ##__VA_ARGS__) - -#define FDDMA_DUMPER(base_addr, reg_off, reg_name) \ - FDDMA_DEBUG("\t\t[%s]@0x%x\t=\t0x%x", reg_name, (reg_off), FDdmaReadReg((base_addr), (reg_off))) -/************************** Function Prototypes ******************************/ - -/****************************************************************************/ - - -void FDdmaDumpRegisters(uintptr base_addr) -{ - FDDMA_DEBUG("ddma@0x%x", base_addr); - FDDMA_DUMPER(base_addr, FDDMA_CTL_OFFSET, "ctl"); - FDDMA_DUMPER(base_addr, FDDMA_CHAN_0_3_CFG_OFFSET, "chan_0_3"); - FDDMA_DUMPER(base_addr, FDDMA_STA_OFFSET, "sta"); - FDDMA_DUMPER(base_addr, FDDMA_MASK_INTR_OFFSET, "mask_intr"); - FDDMA_DUMPER(base_addr, FDDMA_UP_AXI_AW_CFG_OFFSET, "up_axi_aw"); - FDDMA_DUMPER(base_addr, FDDMA_UP_AXI_AR_CFG_OFFSET, "up_axi_ar"); - FDDMA_DUMPER(base_addr, FDDMA_DOWN_AXI_AW_CFG_OFFSET, "dw_axi_aw"); - FDDMA_DUMPER(base_addr, FDDMA_DOWN_AXI_AR_CFG_OFFSET, "dw_axi_ar"); - FDDMA_DUMPER(base_addr, FDDMA_CHAN_BIND_OFFSET, "chan_bind"); - FDDMA_DUMPER(base_addr, FDDMA_GCAP_OFFSET, "gcap"); - FDDMA_DUMPER(base_addr, FDDMA_CHAN_4_7_CFG_OFFSET, "chan_4_7"); -} - -void FDdmaDumpChanRegisters(uintptr base_addr, FDdmaChanIndex chan) -{ - FDDMA_DEBUG("\tchan-%d", chan); - FDDMA_DUMPER(base_addr, FDDMA_CHAN_DDR_UP_ADDR_OFFSET(chan), "ddr_up"); - FDDMA_DUMPER(base_addr, FDDMA_CHAN_DDR_LOW_ADDR_OFFSET(chan), "ddr_low"); - FDDMA_DUMPER(base_addr, FDDMA_CHAN_DEV_ADDR_OFFSET(chan), "dev"); - FDDMA_DUMPER(base_addr, FDDMA_CHAN_TS_OFFSET(chan), "ts"); - FDDMA_DUMPER(base_addr, FDDMA_CHAN_CRT_UP_ADDR_OFFSET(chan), "crt_up"); - FDDMA_DUMPER(base_addr, FDDMA_CHAN_CRT_LOW_ADDR_OFFSET(chan), "crt_low"); - FDDMA_DUMPER(base_addr, FDDMA_CHAN_CTL_OFFSET(chan), "ctl"); - FDDMA_DUMPER(base_addr, FDDMA_CHAN_STS_OFFSET(chan), "sts"); - FDDMA_DUMPER(base_addr, FDDMA_CHAN_TIMEOUT_CNT_OFFSET(chan), "cnt"); -} - diff --git a/bsp/phytium/libraries/standalone/drivers/dma/fddma/fddma_sinit.c b/bsp/phytium/libraries/standalone/drivers/dma/fddma/fddma_sinit.c deleted file mode 100644 index ac5bdd5be1..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/dma/fddma/fddma_sinit.c +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fddma_sinit.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:24:47 - * Description:  This file is for static initialization - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/5/13 init commit - */ - -/***************************** Include Files *********************************/ -#include "fparameters.h" -#include "fassert.h" - -#include "fddma_hw.h" -#include "fddma.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/************************** Variable Definitions *****************************/ -extern const FDdmaConfig fddma_cfg_tbl[FDDMA_INSTANCE_NUM]; - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ -/** - * @name: FDdmaLookupConfig - * @msg: 获取DDMA实例默认配置 - * @return {const FDdmaConfig *} DDMA控制器默认配置 - * @param {u32} instance_id, DDMA实例号 - */ -const FDdmaConfig *FDdmaLookupConfig(u32 instance_id) -{ - const FDdmaConfig *ptr = NULL; - u32 index; - - for (index = 0; index < (u32)FDDMA_INSTANCE_NUM; index++) - { - if (fddma_cfg_tbl[index].id == instance_id) - { - ptr = &fddma_cfg_tbl[index]; - break; - } - } - - return (const FDdmaConfig *)ptr; -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/dma/fgdma/fgdma.c b/bsp/phytium/libraries/standalone/drivers/dma/fgdma/fgdma.c deleted file mode 100644 index e008cf083d..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/dma/fgdma/fgdma.c +++ /dev/null @@ -1,667 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fgdma.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:25:29 - * Description:  This file is for gdma user function implmentation - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2021/11/5 init commit - * 1.1 zhugengyu 2022/5/16 support chan alloc. and qos setting - */ - - -/***************************** Include Files *********************************/ -#include - -#include "fdebug.h" - -#include "fgdma_hw.h" -#include "fgdma.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ -#define FGDMA_DEBUG_TAG "GDMA" -#define FGDMA_ERROR(format, ...) FT_DEBUG_PRINT_E(FGDMA_DEBUG_TAG, format, ##__VA_ARGS__) -#define FGDMA_WARN(format, ...) FT_DEBUG_PRINT_W(FGDMA_DEBUG_TAG, format, ##__VA_ARGS__) -#define FGDMA_INFO(format, ...) FT_DEBUG_PRINT_I(FGDMA_DEBUG_TAG, format, ##__VA_ARGS__) -#define FGDMA_DEBUG(format, ...) FT_DEBUG_PRINT_D(FGDMA_DEBUG_TAG, format, ##__VA_ARGS__) - -/************************** Function Prototypes ******************************/ -static void FGdmaReset(FGdma *const instance_p); - -/************************** Variable Definitions *****************************/ - -/*****************************************************************************/ - -/** - * @name: FGdmaCfgInitialize - * @msg: 初始化GDMA控制器实例 - * @return {FError} 返回FGDMA_SUCCESS表示初始化成功,返回其它表示失败 - * @param FGdma *const instance_p, GDMA控制器实例 - * @param const FGdmaConfig *input_config, GDMA控制器配置 - */ -FError FGdmaCfgInitialize(FGdma *const instance_p, const FGdmaConfig *input_config) -{ - FASSERT(instance_p && input_config); - uintptr base_addr = input_config->base_addr; - FError ret = FGDMA_SUCCESS; - - if (FT_COMPONENT_IS_READY == instance_p->is_ready) - { - FGDMA_WARN("The device has been initialized!!"); - } - - FGdmaDeInitialize(instance_p); - - if (&instance_p->config != input_config) - { - instance_p->config = *input_config; - } - - FASSERT_MSG((0 != base_addr), "Invalid device base address"); - FGdmaReset(instance_p); - - if (FGDMA_SUCCESS == ret) - { - instance_p->is_ready = FT_COMPONENT_IS_READY; - } - - return ret; -} - -/** - * @name: FGdmaDeInitialize - * @msg: 去初始化GDMA控制器实例 - * @return {void} 无 - * @param FGdma *const instance_p, GDMA控制器实例 - */ -void FGdmaDeInitialize(FGdma *const instance_p) -{ - FASSERT(instance_p); - u32 chan; - - for (chan = 0; chan < FGDMA_NUM_OF_CHAN; chan++) - { - if (NULL != instance_p->chans[chan]) - { - FGDMA_WARN("chans-% d may be used!!!", chan); - } - } - - memset(instance_p, 0, sizeof(*instance_p)); - return; -} - -/** - * @name: FGdmaSetChanQos - * @msg: 设置GDMA通道的Qos配置 - * @return {void} 无 - * @param {uintptr} base_addr, GDMA控制器基地址 - * @param {FGdmaChan} *dma_chan, GDMA通道实例 - */ -static void FGdmaSetChanQos(uintptr base_addr, FGdmaChan *const dma_chan) -{ - FASSERT(dma_chan); - FGdmaChanIndex chan_id = dma_chan->config.chan_id; - u32 reg_val = FGDMA_READREG(base_addr, FGDMA_CHX_MODE_OFFSET(chan_id)); - FGdmaOperPriority prev_rd_qos = FGDMA_CHX_MODE_RD_QOS_GET(reg_val); - FGdmaOperPriority prev_wr_qos = FGDMA_CHX_MODE_WR_QOS_GET(reg_val); - - FGDMA_INFO("prev rd qos: 0x%x, set rd qos: 0x%x", prev_rd_qos, dma_chan->config.rd_qos); - FGDMA_INFO("prev wr qos: 0x%x, set wr qos: 0x%x", prev_wr_qos, dma_chan->config.wr_qos); - - if (prev_rd_qos != dma_chan->config.rd_qos) /* need to update rd qos */ - { - /* replace with new rd qos config */ - reg_val &= ~FGDMA_CHX_MODE_RD_QOS_MASK; - reg_val |= FGDMA_CHX_MODE_RD_QOS_EN | - FGDMA_CHX_MODE_RD_QOS_SET(dma_chan->config.rd_qos); - } - - if (prev_wr_qos != dma_chan->config.wr_qos) /* need to update wr qos */ - { - /* replace with new wr qos config */ - reg_val &= ~FGDMA_CHX_MODE_WR_QOS_MASK; - reg_val |= FGDMA_CHX_MODE_WR_QOS_EN | - FGDMA_CHX_MODE_WR_QOS_SET(dma_chan->config.wr_qos); - } - - FGDMA_WRITEREG(base_addr, FGDMA_CHX_MODE_OFFSET(chan_id), reg_val); - return; -} - -/** - * @name: FGdmaAllocateChan - * @msg: 分配指定GDMA通道 - * @return {FError} FGDMA_SUCCESS表示分配成功,返回其它值表示分配失败 - * @param FGdma *const instance_p, GDMA控制器实例 - * @param FGdmaChan *const dma_chan, GDMA通道实例 - * @param const FGdmaChanConfig *dma_chan_config, GDMA通道配置 - */ -FError FGdmaAllocateChan(FGdma *const instance_p, FGdmaChan *const dma_chan, - const FGdmaChanConfig *dma_chan_config) -{ - FASSERT(instance_p); - FASSERT(dma_chan); - FASSERT(dma_chan_config); - uintptr base_addr = instance_p->config.base_addr; - FError ret = FGDMA_SUCCESS; - FGdmaChanIndex chan_idx = dma_chan_config->chan_id; - u32 reg_val; - - if (FT_COMPONENT_IS_READY != instance_p->is_ready) - { - FGDMA_ERROR("The dma instance is not initialized !!!"); - return FGDMA_ERR_NOT_INIT; - } - - if(chan_idx >= FGDMA_NUM_OF_CHAN) - { - FGDMA_ERROR("Channel %d is in use !!!", chan_idx); - return FGDMA_ERR_CHAN_IN_USE; - } - - if (NULL != instance_p->chans[chan_idx]) - { - FGDMA_ERROR("Channel %d is in use !!!", chan_idx); - return FGDMA_ERR_CHAN_IN_USE; - } - - if (&dma_chan->config != dma_chan_config) - { - dma_chan->config = *dma_chan_config; - } - - /* disable and reset chan */ - FGdmaChanDisable(base_addr, chan_idx); - FGdmaChanReset(base_addr, chan_idx); - - /* enable channel clock */ - FGdmaSetChanClock(base_addr, chan_idx, TRUE); - - /* set chan mode */ - reg_val = FGDMA_READREG(base_addr, FGDMA_CHX_MODE_OFFSET(chan_idx)); - if (FGDMA_OPER_BDL == dma_chan->config.trans_mode) - { - FGDMA_INFO("Set to BDL mode"); - reg_val |= FGDMA_CHX_MODE_BDL_EN; - - if (dma_chan->config.roll_back) - { - reg_val |= FGDMA_CHX_MODE_BDL_ROLL_EN; /* run BDL in roll-back mode */ - } - else - { - reg_val &= ~FGDMA_CHX_MODE_BDL_ROLL_EN; - } - } - else - { - FGDMA_INFO("Set to Direct mode"); - reg_val &= ~FGDMA_CHX_MODE_BDL_EN; - reg_val &= ~FGDMA_CHX_MODE_BDL_ROLL_EN; - } - FGDMA_WRITEREG(base_addr, FGDMA_CHX_MODE_OFFSET(chan_idx), reg_val); - - FGdmaSetChanQos(base_addr, dma_chan); - FGDMA_INFO("mode: 0x%x", FGDMA_READREG(base_addr, FGDMA_CHX_MODE_OFFSET(chan_idx))); - - /* set xfer config */ - reg_val = 0; - reg_val |= FGDMA_CHX_XFER_CFG_AR_LEN_SET(FGDMA_BURST_LEN) | /* burst length configed as max 8, which adapted when trans bytes less than 8 */ - FGDMA_CHX_XFER_CFG_AR_SIZE_SET((u32)dma_chan->config.rd_size) | - FGDMA_CHX_XFER_CFG_AR_BRUST_SET(FGDMA_INCR); /* mem to mem trans work in incr mode */ - - reg_val |= FGDMA_CHX_XFER_CFG_AW_LEN_SET(FGDMA_BURST_LEN) | - FGDMA_CHX_XFER_CFG_AW_SIZE_SET((u32)dma_chan->config.wr_size) | - FGDMA_CHX_XFER_CFG_AW_BRUST_SET(FGDMA_INCR); /* mem to mem trans work in incr mode */ - FGDMA_WRITEREG(base_addr, FGDMA_CHX_XFER_CFG_OFFSET(chan_idx), reg_val); - FGDMA_INFO("xfer cfg: 0x%x", FGDMA_READREG(base_addr, FGDMA_CHX_XFER_CFG_OFFSET(chan_idx))); - - instance_p->chans[chan_idx] = dma_chan; - dma_chan->gdma = instance_p; - - if (dma_chan->config.wait_mode == FGDMA_WAIT_INTR) - { - /* enable channel interrupt */ - FGdmaChanIrqEnable(base_addr, chan_idx, FGDMA_CHX_INT_CTRL_TRANS_END_ENABLE); - } - - return ret; -} - -/** - * @name: FGdmaDellocateChan - * @msg: 释放GDMA通道 - * @return {FError} FGDMA_SUCCESS表示处理成功 - * @param FGdmaChan *const dma_chan, GDMA通道实例 - */ -FError FGdmaDellocateChan(FGdmaChan *const dma_chan) -{ - FASSERT(dma_chan); - FASSERT(dma_chan->gdma); - FGdma *const instance_p = dma_chan->gdma; - uintptr base_addr = instance_p->config.base_addr; - FError ret = FGDMA_SUCCESS; - FGdmaChanIndex chan_idx = dma_chan->config.chan_id; - u32 reg_val; - - if (FT_COMPONENT_IS_READY != instance_p->is_ready) - { - FGDMA_ERROR("The dma instance is not initialized !!!"); - return FGDMA_ERR_NOT_INIT; - } - - if (dma_chan != instance_p->chans[chan_idx]) - { - FGDMA_ERROR("chan %d not bind !!!", chan_idx); - return FGDMA_ERR_CHAN_NOT_INIT; - } - - /* disable chan and it irq */ - FGdmaChanIrqDisable(base_addr, chan_idx); - FGdmaChanDisable(base_addr, chan_idx); - - /* disable channel clock */ - FGdmaSetChanClock(base_addr, chan_idx, FALSE); - - instance_p->chans[chan_idx] = NULL; - memset(dma_chan, 0, sizeof(*dma_chan)); - - return ret; -} - -/** - * @name: FGdmaDirectTransfer - * @msg: 直接操作模式下发起DMA传输 - * @return {FError} FGDMA_SUCCESS表示传输成功 - * @param FGdmaChan *const chan_p, GDMA通道实例 - * @param uintptr src_addr, 传输源地址 - * @param uintptr dst_addr, 传输目的地址 - */ -FError FGdmaDirectTransfer(FGdmaChan *const chan_p, uintptr src_addr, uintptr dst_addr, fsize_t data_len) -{ - FASSERT(chan_p); - FASSERT(chan_p->gdma); - u32 reg_val; - FGdma *const instance_p = chan_p->gdma; - uintptr base_addr = instance_p->config.base_addr; - FGdmaChanIndex chan_idx = chan_p->config.chan_id; - - if (FT_COMPONENT_IS_READY != instance_p->is_ready) - { - FGDMA_ERROR("The dma instance is not initialized !!!"); - return FGDMA_ERR_NOT_INIT; - } - - if ((src_addr % FGDMA_GET_BURST_BYTE(chan_p->config.rd_size)) || - (dst_addr % FGDMA_GET_BURST_BYTE(chan_p->config.wr_size))) /* 报文传输的首地址需要与burst size所代表的单次burst传输的最大数据字节数对齐 */ - { - FGDMA_ERROR("src addr 0x%x or dst addr 0x%x not aligned with burst size !!!", - src_addr, dst_addr); - return FGDMA_ERR_INVALID_ADDR; - } - - if (0 != (data_len % FGDMA_GET_BURST_BYTE(chan_p->config.wr_size))) /* 报文传输的总数据量必须是burst size所代表的单次burst传输的最大数据字节数的整数倍 */ - { - FGDMA_ERROR("data length %d must be N times of burst size: %d bytes!!!", - data_len, FGDMA_GET_BURST_BYTE(chan_p->config.wr_size)); - return FGDMA_ERR_INVALID_SIZE; - } - - /* src address */ -#ifdef __aarch64__ - FGDMA_WRITEREG(base_addr, FGDMA_CHX_UPSADDR_OFFSET(chan_idx), UPPER_32_BITS(src_addr)); - FGDMA_WRITEREG(base_addr, FGDMA_CHX_LWSADDR_OFFSET(chan_idx), LOWER_32_BITS(src_addr)); -#else - FGDMA_WRITEREG(base_addr, FGDMA_CHX_UPSADDR_OFFSET(chan_idx), 0x0U); - FGDMA_WRITEREG(base_addr, FGDMA_CHX_LWSADDR_OFFSET(chan_idx), (u32)(src_addr)); -#endif - - FGDMA_INFO("src: 0x%x-0x%x", - FGDMA_READREG(base_addr, FGDMA_CHX_UPSADDR_OFFSET(chan_idx)), - FGDMA_READREG(base_addr, FGDMA_CHX_LWSADDR_OFFSET(chan_idx))); - - /* dest address */ -#ifdef __aarch64__ - FGDMA_WRITEREG(base_addr, FGDMA_CHX_UPDADDR_OFFSET(chan_idx), UPPER_32_BITS(dst_addr)); - FGDMA_WRITEREG(base_addr, FGDMA_CHX_LWDADDR_OFFSET(chan_idx), LOWER_32_BITS(dst_addr)); -#else - FGDMA_WRITEREG(base_addr, FGDMA_CHX_UPDADDR_OFFSET(chan_idx), 0x0U); - FGDMA_WRITEREG(base_addr, FGDMA_CHX_LWDADDR_OFFSET(chan_idx), (u32)(dst_addr)); -#endif - - FGDMA_INFO("dst: 0x%x-0x%x", - FGDMA_READREG(base_addr, FGDMA_CHX_UPDADDR_OFFSET(chan_idx)), - FGDMA_READREG(base_addr, FGDMA_CHX_LWDADDR_OFFSET(chan_idx))); - - /* num of BDL entry not used in direct mode */ - FGDMA_WRITEREG(base_addr, FGDMA_CHX_LVI_OFFSET(chan_idx), 0x0U); - - /* length of data to transfer */ - FGDMA_WRITEREG(base_addr, FGDMA_CHX_TS_OFFSET(chan_idx), data_len); - - FGDMA_INFO("ts: 0x%x", FGDMA_READREG(base_addr, FGDMA_CHX_TS_OFFSET(chan_idx))); - - /* enable channel and start transfer */ - FGdmaChanEnable(base_addr, chan_idx); - - return FGDMA_SUCCESS; -} - -/** - * @name: FGdmaSetupBDLEntry - * @msg: 设置BDL描述符的一个条目 - * @return {FError} FGDMA_SUCCESS 表示设置成功 - * @param FGdmaBdlDesc *desc_entry, 一条BDL描述符 - * @param uintptr src_addr, 传输源地址 - * @param uintptr dst_addr, 传输目的地址 - * @param fsize_t data_len, 传输数据长度 - */ -FError FGdmaAppendBDLEntry(FGdmaChan *const chan_p, uintptr src_addr, uintptr dst_addr, fsize_t data_len) -{ - FASSERT(chan_p); - FASSERT_MSG((chan_p->config.descs) && (chan_p->config.total_desc_num > 0), "The list of BDL descriptors has not yet been assigned !!!"); - u32 desc_idx = chan_p->config.valid_desc_num; - FGdmaBdlDesc *desc_entry = &(chan_p->config.descs[desc_idx]); - - if (chan_p->config.valid_desc_num >= chan_p->config.total_desc_num) - { - FGDMA_ERROR("The total BDL descriptor num is %d and has been used up", chan_p->config.total_desc_num); - return FGDMA_ERR_BDL_NOT_ENOUGH; - } - - if ((0U != (dst_addr % FGDMA_GET_BURST_BYTE(chan_p->config.wr_size))) || - (0U != (src_addr % FGDMA_GET_BURST_BYTE(chan_p->config.rd_size)))) /* 报文传输的首地址需要与burst size所代表的单次burst传输的最大数据字节数对齐 */ - { - FGDMA_ERROR("SRC addr 0x%x or DST addr 0x%x are not aligned with the %d transfer size", - src_addr, dst_addr, FGDMA_GET_BURST_BYTE(chan_p->config.wr_size)); - return FGDMA_ERR_INVALID_ADDR; - } - - if (0U != (data_len % FGDMA_GET_BURST_BYTE(chan_p->config.wr_size))) /* 报文传输的总数据量必须是burst size所代表的单次burst传输的最大数据字节数的整数倍 */ - { - FGDMA_ERROR("The data length %d must be N times the burst size %d !!!", - data_len, FGDMA_GET_BURST_BYTE(chan_p->config.wr_size)); - return FGDMA_ERR_INVALID_SIZE; - } - -#ifdef __aarch64___ - desc_entry->src_addr_h = UPPER_32_BITS(src_addr); - desc_entry->src_addr_l = LOWER_32_BITS(src_addr); - desc_entry->dst_addr_h = UPPER_32_BITS(dst_addr); - desc_entry->dst_addr_l = LOWER_32_BITS(dst_addr); -#else - desc_entry->src_addr_h = 0U; - desc_entry->src_addr_l = src_addr; - desc_entry->dst_addr_h = 0U; - desc_entry->dst_addr_l = dst_addr; -#endif - - /* rd = src */ - desc_entry->src_tc = FGDMA_SRC_TC_BDL_BURST_SET(FGDMA_INCR) | - FGDMA_SRC_TC_BDL_SIZE_SET((u32)chan_p->config.rd_size) | - FGDMA_SRC_TC_BDL_LEN_SET(FGDMA_BURST_LEN); - - /* wr = dst */ - desc_entry->dst_tc = FGDMA_DST_TC_BDL_BURST_SET(FGDMA_INCR) | - FGDMA_DST_TC_BDL_SIZE_SET((u32)chan_p->config.wr_size) | - FGDMA_DST_TC_BDL_LEN_SET(FGDMA_BURST_LEN); - - desc_entry->total_bytes = data_len; - desc_entry->ioc = 0U; - - chan_p->config.valid_desc_num++; - - return FGDMA_SUCCESS; -} - -/** - * @name: FGdmaBDLTransfer - * @msg: BDL操作模式下发起DMA传输 - * @return {FError} FGDMA_SUCCESS 表示传输成功 - * @param FGdmaChan *const chan_p, DMA通道实例 - */ -FError FGdmaBDLTransfer(FGdmaChan *const chan_p) -{ - FASSERT(chan_p); - FASSERT(chan_p->gdma); - FASSERT_MSG((chan_p->config.descs) && (chan_p->config.total_desc_num > 0), "BDL descriptor list not yet assign !!!"); - u32 reg_val; - FGdma *const instance_p = chan_p->gdma; - uintptr base_addr = instance_p->config.base_addr; - FGdmaChanIndex chan_idx = chan_p->config.chan_id; - - if (FT_COMPONENT_IS_READY != instance_p->is_ready) - { - FGDMA_ERROR("The dma instance is not initialized !!!"); - return FGDMA_ERR_NOT_INIT; - } - - if (0 == chan_p->config.valid_desc_num) - { - FGDMA_WARN("First, the BDL entries need to be allocated !!!"); - return FGDMA_SUCCESS; - } - - if (((uintptr)(void *)chan_p->config.descs) % FGDMA_ADDR_ALIGMENT) - { - FGDMA_ERROR("BDL addr %p not aligned with %d bytes", chan_p->config.descs, FGDMA_ADDR_ALIGMENT); - return FGDMA_ERR_INVALID_ADDR; - } - - u32 desc_idx = chan_p->config.valid_desc_num - 1; - FGdmaBdlDesc *descs = chan_p->config.descs; /* get the first BDL entry */ - - chan_p->config.descs[desc_idx].ioc = 1U; /* set as the last BDL entry */ - - /* src address, and dst address has been defined in BDL */ -#ifdef __aarch64__ - FGDMA_WRITEREG(base_addr, FGDMA_CHX_UPSADDR_OFFSET(chan_idx), UPPER_32_BITS((uintptr)descs)); - FGDMA_WRITEREG(base_addr, FGDMA_CHX_LWSADDR_OFFSET(chan_idx), LOWER_32_BITS((uintptr)descs)); -#else - FGDMA_WRITEREG(base_addr, FGDMA_CHX_UPSADDR_OFFSET(chan_idx), 0x0U); - FGDMA_WRITEREG(base_addr, FGDMA_CHX_LWSADDR_OFFSET(chan_idx), (u32)((uintptr)descs)); -#endif - - /* dst address not used in BDL mode */ - FGDMA_WRITEREG(base_addr, FGDMA_CHX_UPDADDR_OFFSET(chan_idx), 0x0U); - FGDMA_WRITEREG(base_addr, FGDMA_CHX_LWDADDR_OFFSET(chan_idx), 0x0U); - - /* ts not used in BDL mode */ - FGDMA_WRITEREG(base_addr, FGDMA_CHX_TS_OFFSET(chan_idx), 0x0U); - - /* num of BDL entry */ - FGDMA_WRITEREG(base_addr, FGDMA_CHX_LVI_OFFSET(chan_idx), FGDMA_CHX_LVI_SET(chan_p->config.valid_desc_num)); - - /* enable channel and start transfer */ - FGdmaChanEnable(base_addr, chan_idx); - - return FGDMA_SUCCESS; -} - -/** - * @name: FGdmaStart - * @msg: 使能启动GDMA控制器 - * @return {FError} FGDMA_SUCCESS表示启动成功 - * @param FGdma *const instance_p, GDMA控制器实例 - * @note: 先调用此函数,后调用FGdmaAllocateChan配置特定通道 - */ -FError FGdmaStart(FGdma *const instance_p) -{ - FASSERT(instance_p); - uintptr base_addr = instance_p->config.base_addr; - u32 reg_val; - - if (FT_COMPONENT_IS_READY != instance_p->is_ready) - { - FGDMA_ERROR("The dma instance is not initialized !!!"); - return FGDMA_ERR_NOT_INIT; - } - if(FGDMA_TRANS_NEED_RESET_MASK & instance_p->config.caps) - { - FGdmaSoftwareReset(base_addr); - } - FGdmaIrqEnable(base_addr); - - reg_val = FGDMA_READREG(base_addr, FGDMA_CTL_OFFSET); - reg_val &= ~FGDMA_CTL_OT_MASK; - reg_val |= FGDMA_CTL_OT_SET(FGDMA_OUTSTANDING); /* 设置传输outstanding数 */ - reg_val |= FGDMA_CTL_ENABLE; /* 使能DMA传输 */ - FGDMA_WRITEREG(base_addr, FGDMA_CTL_OFFSET, reg_val); - - return FGDMA_SUCCESS; //放到初始化 -} - -/** - * @name: FGdmaStop - * @msg: 停止GDMA控制器 - * @return {FError} FGDMA_SUCCESS表示处理成功 - * @param FGdma *const instance_p, GDMA控制器实例 - */ -FError FGdmaStop(FGdma *const instance_p) -{ - FASSERT(instance_p); - uintptr base_addr = instance_p->config.base_addr; - u32 reg_val; - u32 chan_id; - u32 chan_status; - - if (FT_COMPONENT_IS_READY != instance_p->is_ready) - { - FGDMA_ERROR("The dma instance is not initialized !!!"); - return FGDMA_ERR_NOT_INIT; - } - - /* Abort 流程 */ - for (chan_id = 0; chan_id < FGDMA_NUM_OF_CHAN; chan_id++) - { - if (NULL == instance_p->chans[chan_id]) - { - continue; /* skip un-allocate channel */ - } - - chan_status = FGdmaReadChanStatus(base_addr, chan_id); - if (FGDMA_CHX_INT_STATE_BUSY & chan_status) - { - FGDMA_WARN("chan-%d was forcibly closed !!!", chan_id); - FGdmaChanDisable(base_addr, chan_id); /* 关闭通道 */ - FGdmaChanReset(base_addr, chan_id); /* 需要进行软复位,否则再次使能通道时,仍然会执行之前的请求 */ - } - else - { - FGdmaChanDisable(base_addr, chan_id); /* 关闭通道 */ - } - - FGdmaClearChanStatus(base_addr, chan_id, chan_status); /* 清除通道状态 */ - } - - FGdmaDisable(base_addr); - - return FGDMA_SUCCESS; -} - -/** - * @name: FGdmaSetQos - * @msg: 设置GDMA控制器的全局Qos配置 - * @return {void} 无 - * @param {FGdma} *instance_p, GDMA控制器实例 - */ -static void FGdmaSetQos(FGdma *const instance_p) -{ - uintptr base_addr = instance_p->config.base_addr; - u32 reg_val; - - /* enable/disable Qos */ - reg_val = FGDMA_READREG(base_addr, FGDMA_CTL_OFFSET); - if (FGDMA_OPER_NONE_PRIORITY_POLL == instance_p->config.rd_qos) /* Poll mode */ - { - reg_val &= ~FGDMA_CTL_RD_ARB; - } - else /* Qos mode */ - { - reg_val |= FGDMA_CTL_RD_ARB; - } - - if (FGDMA_OPER_NONE_PRIORITY_POLL == instance_p->config.wr_qos) /* Poll mode */ - { - reg_val &= ~FGDMA_CTL_WR_ARB; - } - else /* Qos mode */ - { - reg_val |= FGDMA_CTL_WR_ARB; - } - FGDMA_WRITEREG(base_addr, FGDMA_CTL_OFFSET, reg_val); - - /* set Qos configure */ - reg_val = FGDMA_READREG(base_addr, FGDMA_QOS_CFG_OFFSET); - if (FGDMA_OPER_NONE_PRIORITY_POLL == instance_p->config.rd_qos) /* Poll mode */ - { - reg_val &= ~FGDMA_QOS_CFG_ARGOS_MASK; - } - else /* Qos value */ - { - reg_val |= FGDMA_QOS_CFG_ARGOS_SET((u32)instance_p->config.rd_qos); - } - - if (FGDMA_OPER_NONE_PRIORITY_POLL == instance_p->config.wr_qos) /* Poll mode */ - { - reg_val &= ~FGDMA_QOS_CFG_AWQOS_MASK; - } - else /* Qos value */ - { - reg_val |= FGDMA_QOS_CFG_AWQOS_SET((u32)instance_p->config.wr_qos); - } - FGDMA_WRITEREG(base_addr, FGDMA_QOS_CFG_OFFSET, reg_val); - - return; -} - -/** - * @name: FGdmaReset - * @msg: 重置GDMA控制器 - * @return {void} 无 - * @param {FGdma} *instance_p, GDMA控制器实例 - */ -static void FGdmaReset(FGdma *const instance_p) -{ - uintptr base_addr = instance_p->config.base_addr; - u32 chan; - u32 reg_val; - - FGDMA_INFO("Controller base address is %p ...", base_addr); - - FGdmaDisable(base_addr); - FGdmaSoftwareReset(base_addr); - - FGdmaSetQos(instance_p); - - FGDMA_INFO("Reset channel"); - - for (chan = 0; chan < FGDMA_NUM_OF_CHAN; chan++) - { - FGdmaChanDisable(base_addr, chan); - FGdmaChanIrqDisable(base_addr, chan); - FGdmaChanReset(base_addr, chan); - FGdmaSetChanClock(base_addr, chan, FALSE); - } - - return; -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/dma/fgdma/fgdma.h b/bsp/phytium/libraries/standalone/drivers/dma/fgdma/fgdma.h deleted file mode 100644 index 8f6c9655b3..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/dma/fgdma/fgdma.h +++ /dev/null @@ -1,267 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fgdma.h - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:25:35 - * Description:  This file is for gdma user api implementation - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2021/11/5 init commit - * 1.1 zhugengyu 2022/5/16 modify according to tech manual. - */ - -#ifndef FGDMA_H -#define FGDMA_H - -#include "ftypes.h" -#include "fassert.h" -#include "ferror_code.h" -#include "fkernel.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/***************************** Include Files *********************************/ - - - -/************************** Constant Definitions *****************************/ - -/* gdma capacity mask */ - -#define FGDMA_IRQ1_MASK BIT(0) /* All Gdma channel share a single interrupt */ -#define FGDMA_IRQ2_MASK BIT(1) /* Each gdma channel owns an independent interrupt */ -#define FGDMA_TRANS_NEED_RESET_MASK BIT(2) /* Gdma needs to be reset before transmission */ - -typedef enum -{ - FGDMA_OPER_NONE_PRIORITY_POLL = -1, /* Priority = -1 表示读写请求仲裁模式为Poll */ - FGDMA_OPER_PRIORITY0 = 0, /* Priority >= 0 表示读写请求仲裁模式为Qos */ - FGDMA_OPER_PRIORITY1 = 1, - FGDMA_OPER_PRIORITY2 = 2, - FGDMA_OPER_PRIORITY3 = 3, - FGDMA_OPER_PRIORITY4 = 4, - FGDMA_OPER_PRIORITY5 = 5, - FGDMA_OPER_PRIORITY6 = 6, - FGDMA_OPER_PRIORITY7 = 7, - FGDMA_OPER_PRIORITY8 = 8, - FGDMA_OPER_PRIORITY9 = 9, - FGDMA_OPER_PRIORITY10 = 10, - FGDMA_OPER_PRIORITY11 = 11, - FGDMA_OPER_PRIORITY12 = 12, - FGDMA_OPER_PRIORITY13 = 13, - FGDMA_OPER_PRIORITY14 = 14, - FGDMA_OPER_PRIORITY15 = 15 -} FGdmaOperPriority; /* Qos配置,值越高,优先级越高 */ - -typedef enum -{ - FGDMA_OPER_DIRECT = 0, /* 直接操作模式 */ - FGDMA_OPER_BDL /* BDL操作模式 */ -} FGdmaOperMode; /* 支持的操作模式 */ - -typedef enum -{ - FGDMA_WAIT_INTR = 0, /* 中断模式 */ - FGDMA_WAIT_POLL /* 轮询模式 */ -} FGdmaWaitEnd; /* 支持的等待传输完成的模式 */ - -typedef enum -{ - FGDMA_BURST_SIZE_1_BYTE = 0, - FGDMA_BURST_SIZE_2_BYTE = 1, - FGDMA_BURST_SIZE_4_BYTE = 2, - FGDMA_BURST_SIZE_8_BYTE = 3, - FGDMA_BURST_SIZE_16_BYTE = 4 -} FGdmaBurstSize; /* 所支持的读写请求burst size范围,其值本身是一个二次幂指数 - * 即,单次burst传输的最大数据字节数 = 2^burst size */ - -#define FGDMA_GET_BURST_BYTE(burst_size) (1U << burst_size) /* 获取burst size所代表的单次burst传输的最大数据字节数 */ - -typedef enum -{ - FGDMA_CHAN_EVT_FIFO_EMPTY = 0, /* 通道Fifo空事件 */ - FGDMA_CHAN_EVT_FIFO_FULL, /* 通道Fifo满事件 */ - FGDMA_CHAN_EVT_BDL_END, /* BDL模式下一个BDL条目传输完成 */ - FGDMA_CHAN_EVT_TRANS_END, /* 所有传输数据完成 */ - FGDMA_CHAN_EVT_BUSY, /* 前一次传输未完成,当前还处于传输中 */ - - FGDMA_CHAN_NUM_OF_EVT -} FGdmaChanEvtType; /* 通道中断事件 */ - -#define FGDMA_SUCCESS FT_SUCCESS -#define FGDMA_ERR_NOT_INIT FT_MAKE_ERRCODE(ErrModBsp, ErrGdma, 0) -#define FGDMA_ERR_CHAN_IN_USE FT_MAKE_ERRCODE(ErrModBsp, ErrGdma, 1) -#define FGDMA_ERR_CHAN_NOT_INIT FT_MAKE_ERRCODE(ErrModBsp, ErrGdma, 2) -#define FGDMA_ERR_INVALID_ADDR FT_MAKE_ERRCODE(ErrModBsp, ErrGdma, 3) -#define FGDMA_ERR_INVALID_SIZE FT_MAKE_ERRCODE(ErrModBsp, ErrGdma, 4) -#define FGDMA_ERR_BDL_NOT_ENOUGH FT_MAKE_ERRCODE(ErrModBsp, ErrGdma, 5) - -#define FGDMA_ADDR_ALIGMENT 128U /* BDL链表的地址需要按128字节对齐 */ - -/**************************** Type Definitions *******************************/ -typedef struct _FGdma FGdma; -typedef struct _FGdmaChan FGdmaChan; - -typedef struct -{ - u32 instance_id; /* GDMA控制器ID */ - u32 irq_num[FGDMA_NUM_OF_CHAN]; /* GDMA控制器中断号 */ - u32 irq_prority; /* GDMA控制器中断优先级 */ - volatile uintptr_t base_addr; /* GDMA控制器基地址 */ - FGdmaOperPriority rd_qos; /* 读操作优先级 */ - FGdmaOperPriority wr_qos; /* 写操作优先级 */ - u32 caps; /* driver capacity */ -} FGdmaConfig; /* GDMA控制器配置 */ - -typedef struct -{ - u32 src_addr_l; /* 0x0, 数据源地址低32位 */ - u32 src_addr_h; /* 0x4, 数据源地址高32位 */ - u32 dst_addr_l; /* 0x8, 数据目的地址低32位 */ - u32 dst_addr_h; /* 0xc, 数据目的地址高32位 */ -#define FGDMA_SRC_TC_BDL_BURST_SET(x) SET_REG32_BITS((x), 1U, 0U) -#define FGDMA_SRC_TC_BDL_SIZE_SET(x) SET_REG32_BITS((x), 6U, 4U) -#define FGDMA_SRC_TC_BDL_LEN_SET(x) SET_REG32_BITS((x), 15U, 8U) - u32 src_tc; /* 0x10, 源传输控制位 */ -#define FGDMA_DST_TC_BDL_BURST_SET(x) SET_REG32_BITS((x), 1U, 0U) -#define FGDMA_DST_TC_BDL_SIZE_SET(x) SET_REG32_BITS((x), 6U, 4U) -#define FGDMA_DST_TC_BDL_LEN_SET(x) SET_REG32_BITS((x), 15U, 8U) - u32 dst_tc; /* 0x14, 目的传输控制 */ - u32 total_bytes;/* 0x18, 传输数据总量,以Byte为单位 */ - u32 ioc; /* 0x1c, 该条目传输完成中断产生控制位 */ -} __attribute__((__packed__)) FGdmaBdlDesc; /* BDL描述符 */ - -FASSERT_STATIC(0x20U == sizeof(FGdmaBdlDesc)); - -typedef u32 FGdmaChanIndex; - -typedef struct -{ - FGdmaChanIndex chan_id; /* DMA通道ID */ - FGdmaOperPriority rd_qos; /* DMA通道读Qos配置 */ - FGdmaOperPriority wr_qos; /* DMA通道写Qos配置 */ - FGdmaOperMode trans_mode; /* DMA通道的操作模式,直接模式或者BDL模式 */ - FGdmaWaitEnd wait_mode; /* 等待传输完成信号的模式,中断模式或轮询模式 */ - /* Direct模式有效 */ - FGdmaBurstSize rd_size; /* DMA读请求的burst size */ - FGdmaBurstSize wr_size; /* DMA写请求的burst size */ - /* BDL模式有效 */ - boolean roll_back; /* 循环模式,TRUE: 当前BDL列表完成后,从第一个BDL项从新开始传输 */ - FGdmaBdlDesc *descs; - u32 total_desc_num; - u32 valid_desc_num; -} FGdmaChanConfig; /* DMA通道配置 */ - -typedef void (*FGdmaChanEvtHandler)(FGdmaChan *const chan, void *args); - - -typedef struct _FGdmaChan -{ - FGdmaChanConfig config; /* DMA通道配置 */ - FGdma *gdma; /* DMA控制器实例 */ - FGdmaChanEvtHandler evt_handlers[FGDMA_CHAN_NUM_OF_EVT]; /* DMA通道事件回调函数 */ - void *evt_handler_args[FGDMA_CHAN_NUM_OF_EVT]; /* DMA通道事件回调函数入参 */ -} FGdmaChan; /* GDMA通道实例 */ - -typedef struct _FGdma -{ - FGdmaConfig config; /* GDMA控制器配置 */ - u32 is_ready; /* GDMA控制器初始化是否完成 */ - FGdmaChan *chans[FGDMA_NUM_OF_CHAN]; /* GDMA通道实例,如果通道没有分配,值为NULL */ -} FGdma; /* GDMA控制器实例 */ - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ -/* 获取默认的通道配置 */ -#define FGDMA_DEFAULT_DIRECT_CHAN_CONFIG(_chan_id)\ - (FGdmaChanConfig){ \ - .chan_id = (_chan_id),\ - .rd_size = FGDMA_BURST_SIZE_4_BYTE,\ - .wr_size = FGDMA_BURST_SIZE_4_BYTE,\ - .rd_qos = FGDMA_OPER_NONE_PRIORITY_POLL,\ - .wr_qos = FGDMA_OPER_NONE_PRIORITY_POLL,\ - .trans_mode = FGDMA_OPER_DIRECT,\ - .wait_mode = FGDMA_WAIT_INTR,\ - .roll_back = FALSE\ - } - -#define FGDMA_DEFAULT_BDL_CHAN_CONFIG(_chan_id, _bdl_descs, _bdl_desc_num)\ - (FGdmaChanConfig){ \ - .chan_id = (_chan_id),\ - .rd_size = FGDMA_BURST_SIZE_4_BYTE,\ - .wr_size = FGDMA_BURST_SIZE_4_BYTE,\ - .rd_qos = FGDMA_OPER_NONE_PRIORITY_POLL,\ - .wr_qos = FGDMA_OPER_NONE_PRIORITY_POLL,\ - .trans_mode = FGDMA_OPER_BDL,\ - .wait_mode = FGDMA_WAIT_INTR,\ - .roll_back = FALSE,\ - .descs = _bdl_descs,\ - .total_desc_num = _bdl_desc_num,\ - .valid_desc_num = 0U\ - } - -/************************** Function Prototypes ******************************/ -/* 获取GDMA控制器默认配置 */ -const FGdmaConfig *FGdmaLookupConfig(u32 instance_id); - -/* 初始化GDMA控制器实例 */ -FError FGdmaCfgInitialize(FGdma *const instance_p, const FGdmaConfig *config_p); - -/* 去初始化GDMA控制器实例 */ -void FGdmaDeInitialize(FGdma *const instance_p); - -/* 分配指定GDMA通道 */ -FError FGdmaAllocateChan(FGdma *const instance_p, FGdmaChan *const chan_p, - const FGdmaChanConfig *config_p); - -/* 释放GDMA通道 */ -FError FGdmaDellocateChan(FGdmaChan *const chan_p); - -/* 直接操作模式下发起DMA传输 */ -FError FGdmaDirectTransfer(FGdmaChan *const chan_p, uintptr src_addr, uintptr dst_addr, fsize_t data_len); - -/* 设置BDL描述符的一个条目 */ -FError FGdmaAppendBDLEntry(FGdmaChan *const chan_p, uintptr src_addr, uintptr dst_addr, fsize_t data_len); - -/* BDL操作模式下发起DMA传输 */ -FError FGdmaBDLTransfer(FGdmaChan *const chan_p); - -/* 使能启动GDMA控制器 */ -FError FGdmaStart(FGdma *const instance_p); - -/* 停止GDMA控制器 */ -FError FGdmaStop(FGdma *const instance_p); - -/* GDMA中断处理函数 */ -void FGdmaIrqHandler(s32 vector, void *args); -void FGdmaIrqHandlerPrivateChannel(s32 vector, void *args); - -/* 注册GDMA通道事件回调函数 */ -void FGdmaChanRegisterEvtHandler(FGdmaChan *const chan_p, FGdmaChanEvtType evt, - FGdmaChanEvtHandler handler, void *handler_arg); - -/* 打印当前的GDMA寄存器值, DEBUG模式下有效 */ -void FGdmaDumpRegisterVals(uintptr base_addr, u32 max_chan); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/bsp/phytium/libraries/standalone/drivers/dma/fgdma/fgdma_g.c b/bsp/phytium/libraries/standalone/drivers/dma/fgdma/fgdma_g.c deleted file mode 100644 index e8dca34d50..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/dma/fgdma/fgdma_g.c +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fgdma_g.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:25:09 - * Description:  This file is for static variables definition - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2021/11/5 init commit - * 1.1 zhugengyu 2022/5/16 modify according to tech manual. - */ - -/***************************** Include Files *********************************/ - -#include "ftypes.h" -#include "fparameters.h" - -#include "fgdma.h" -#include "fgdma_hw.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ - -/************************** Variable Definitions *****************************/ - -const FGdmaConfig fgdma_cfg_tbl[FGDMA_INSTANCE_NUM] = -{ - [FGDMA0_ID] = - { - .instance_id = FGDMA0_ID, - .base_addr = FGDMA0_BASE_ADDR, - .irq_num ={ - FGDMA0_CHANNEL0_IRQ_NUM, - #if defined(FGDMA0_CHANNEL1_IRQ_NUM) - FGDMA0_CHANNEL1_IRQ_NUM, - #endif - #if defined(FGDMA0_CHANNEL2_IRQ_NUM) - FGDMA0_CHANNEL2_IRQ_NUM, - #endif - #if defined(FGDMA0_CHANNEL3_IRQ_NUM) - FGDMA0_CHANNEL3_IRQ_NUM, - #endif - #if defined(FGDMA0_CHANNEL4_IRQ_NUM) - FGDMA0_CHANNEL4_IRQ_NUM, - #endif - #if defined(FGDMA0_CHANNEL5_IRQ_NUM) - FGDMA0_CHANNEL5_IRQ_NUM, - #endif - #if defined(FGDMA0_CHANNEL6_IRQ_NUM) - FGDMA0_CHANNEL6_IRQ_NUM, - #endif - } , - .irq_prority = 0, - .rd_qos = FGDMA_OPER_NONE_PRIORITY_POLL, - .wr_qos = FGDMA_OPER_NONE_PRIORITY_POLL, - .caps = FGDMA0_CAPACITY | FGDMA_TRANS_NEED_RESET_MASK - } -}; - - -/*****************************************************************************/ diff --git a/bsp/phytium/libraries/standalone/drivers/dma/fgdma/fgdma_hw.h b/bsp/phytium/libraries/standalone/drivers/dma/fgdma/fgdma_hw.h deleted file mode 100644 index 521294f48b..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/dma/fgdma/fgdma_hw.h +++ /dev/null @@ -1,451 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fgdma_hw.h - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:24:52 - * Description:  This file is for gdma register related defintion - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2021/11/5 init commit - * 1.1 zhugengyu 2022/5/16 modify according to tech manual. - */ - -#ifndef FGDMA_HW_H -#define FGDMA_HW_H - -#include "fparameters.h" -#include "fio.h" -#include "fkernel.h" - -#ifdef __cplusplus -extern "C" -{ -#endif -/***************************** Include Files *********************************/ - -/************************** Constant Definitions *****************************/ - -/** @name Register Map - * - * Register offsets from the base address of an GDMA device. - * @{ - */ -#define FGDMA_CTL_OFFSET 0x0U /* 全局控制类寄存器 */ -#define FGDMA_INTR_STATE_OFFSET 0x4U /* 中断状态寄存器 */ -#define FGDMA_INTR_CTRL_OFFSET 0x8U /* 中断使能控制寄存器 */ -#define FGDMA_LP_OFFSET 0xCU /* 每一位对应一个通道时钟开启和关断 */ -#define FGDMA_QOS_CFG_OFFSET 0x10U /* 读写请求的 QoS 配置 */ - -/* Channel register */ -#define FGDMA_CHX_OFFSET(x) ((x) * 0x60U) -#define FGDMA_CHX_CTL_OFFSET(x) (0x20 + FGDMA_CHX_OFFSET(x)) /* 软复位信号与使能控制信号 */ -#define FGDMA_CHX_MODE_OFFSET(x) (0x24 + FGDMA_CHX_OFFSET(x)) /* 模式寄存器 */ -#define FGDMA_CHX_INT_CTRL_OFFSET(x) (0x28 + FGDMA_CHX_OFFSET(x)) /* 中断输出控制寄存器 */ -#define FGDMA_CHX_INT_STATE_OFFSET(x) (0x2C + FGDMA_CHX_OFFSET(x)) /* 状态寄存器 */ -#define FGDMA_CHX_LVI_OFFSET(x) (0x30 + FGDMA_CHX_OFFSET(x)) /* 链表模式下 BDL 有效条目 */ -#define FGDMA_CHX_TS_OFFSET(x) (0x34 + FGDMA_CHX_OFFSET(x)) /* 直接操作模式下总 Byte 数据量 */ -#define FGDMA_CHX_UPSADDR_OFFSET(x) (0x38 + FGDMA_CHX_OFFSET(x)) /* 源地址寄存器(高32位) */ -#define FGDMA_CHX_LWSADDR_OFFSET(x) (0x3C + FGDMA_CHX_OFFSET(x)) /* 源地址寄存器(低32位) */ -#define FGDMA_CHX_UPDADDR_OFFSET(x) (0x40 + FGDMA_CHX_OFFSET(x)) /* 目的地址寄存器(高32位) */ -#define FGDMA_CHX_LWDADDR_OFFSET(x) (0x44 + FGDMA_CHX_OFFSET(x)) /* 目的地址寄存器(低32位) */ -#define FGDMA_CHX_XFER_CFG_OFFSET(x) (0x48 + FGDMA_CHX_OFFSET(x)) /* 读写请求 Burst 信息 */ -#define FGDMA_CHX_LCP_OFFSET(x) (0x4C + FGDMA_CHX_OFFSET(x)) /* 当前操作了多少个 BDL 列表 */ -#define FGDMA_CHX_SECCTL_OFFSET(x) (0x50 + FGDMA_CHX_OFFSET(x)) /* 安全控制寄存器 */ -#define FGDMA_CHX_SEC_ATST_OFFSET(x) (0x54 + FGDMA_CHX_OFFSET(x)) /* Secssid 和 Atst信号控制寄存器 */ -#define FGDMA_CHX_NSID_STRMID_OFFSET(x) (0x58 + FGDMA_CHX_OFFSET(x)) /* NSAID 和 StreamID 控制寄存器 */ -#define FGDMA_CHX_AW_CFG_OFFSET(x) (0x5C + FGDMA_CHX_OFFSET(x)) /* 控制 AXI AW 通道配置寄存器 */ -#define FGDMA_CHX_AR_CFG_OFFSET(x) (0x60 + FGDMA_CHX_OFFSET(x)) /* 控制 AXI AR 通道配置寄存器 */ -#define FGDMA_CHX_SECRSP_OFFSET(x) (0x64 + FGDMA_CHX_OFFSET(x)) /* 通道 Response 安全控制寄存器 */ - -/** @name FGDMA_CTL_OFFSET Register - */ -#define FGDMA_CTL_OT_MASK GENMASK(11, 8) -#define FGDMA_CTL_OT_SET(ot) SET_REG32_BITS(ot, 11, 8) /* dma 传输outstanding 控制,实际数量为该寄存器值+1 */ -#define FGDMA_CTL_RD_ARB BIT(5) /* dma 读请求仲裁模式: 0:轮询模式,1:采用Qos判断模式 */ -#define FGDMA_CTL_WR_ARB BIT(4) /* dma 写请求仲裁模式: 0:轮询模式,1:采用Qos判断模式 */ -#define FGDMA_CTL_SOFT_RESET BIT(1) /* dma 软件复位信号,1表示进行复位,写0退出 */ -#define FGDMA_CTL_ENABLE BIT(0) /* dma 使能信号,1表示使能,写0表示disable */ - -/** @name FGDMA_INTR_STATE_OFFSET Register - */ -#define FGDMA_CHX_INTR_STATE(x) BIT(x) /* channel-x 中断状态标志位 */ - -/** @name FGDMA_INTR_CTRL_OFFSET Register - */ -#define FGDMA_CHX_INTR_MASK(x) BIT(x) /* channel-x 中断使能控制,1 表示使能,0 表示不使能 */ -#define FGDMA_CHX_INTR_GLOBAL_MASK BIT(31) /* 全局中断输出 mask 控制信号,1表示允许中断输出,0 表示不允许 */ - -/** @name FGDMA_LP_OFFSET Register - */ -#define FGDMA_CHX_LP_CTL(x) BIT(x) /* channel-x 时钟开启和关断,1 表示关断,默认开启 */ - -/** @name FGDMA_QOS_CFG_OFFSET Register - */ -#define FGDMA_QOS_CFG_ARGOS_MASK GENMASK(7, 4) -#define FGDMA_QOS_CFG_ARGOS_SET(qos) SET_REG32_BITS((qos), 7, 4) /* 读请求的 QoS 配置 */ -#define FGDMA_QOS_CFG_AWQOS_MASK GENMASK(3, 0) -#define FGDMA_QOS_CFG_AWQOS_SET(qos) SET_REG32_BITS((qos), 3, 0) /* 写请求的 QoS 配置 */ - -/** @name FGDMA_CHX_CTL_OFFSET Register - */ -#define FGDMA_CHX_CTL_SOFT_RESET BIT(4) /* 软复位信号,1 表示进行软复位,写 0 退出 */ -#define FGDMA_CHX_CTL_ENABLE BIT(0) /* 使能控制信号,1 表示使能该通道,0 表示不使能 */ - -/** @name FGDMA_CHX_MODE_OFFSET Register - */ -#define FGDMA_CHX_MODE_RD_QOS_MASK GENMASK(23, 20) -#define FGDMA_CHX_MODE_RD_QOS_SET(qos) SET_REG32_BITS((qos), 23, 20) /* CHX 读请求 Qos 配置 */ -#define FGDMA_CHX_MODE_RD_QOS_GET(qos) GET_REG32_BITS((qos), 23, 20) -/* 是否用 cd_rd_qos 的值替换该通道的去请求 QoSS,1 表示替换, 0 不替换 */ -#define FGDMA_CHX_MODE_RD_QOS_EN BIT(16) - -#define FGDMA_CHX_MODE_WR_QOS_MASK GENMASK(15, 12) -#define FGDMA_CHX_MODE_WR_QOS_SET(qos) SET_REG32_BITS((qos), 15, 12) /* CHX 写请求 Qos 配置 */ -#define FGDMA_CHX_MODE_WR_QOS_GET(qos) GET_REG32_BITS((qos), 15, 12) -/* 是否用 cx_wr_qos 中的值替换该通道写请求的 QoS:1 表示替换, 0 不替换 */ -#define FGDMA_CHX_MODE_WR_QOS_EN BIT(8) - -/* 是否用CHX qos cfg 中的值替换该读请求的 Qos:1 表示替换 ,0 不替换 */ -#define FGDMA_CHX_MODE_BDL_ROLL_EN BIT(4) -#define FGDMA_CHX_MODE_BDL_EN BIT(0) /* 配置当前采用direct 或者BDL 链表模式, 0 采用Direct 模式, 1 采用BDL 模式 */ - -/** @name FGDMA_CHX_INT_CTRL_OFFSET Register - */ -#define FGDMA_CHX_INT_CTRL_TRANS_END_ENABLE BIT(3) /* CHX 所以数据传输完成中断输出控制,1表示允许输出,0表示不允许 */ -#define FGDMA_CHX_INT_CTRL_BDL_END_ENABLE BIT(2) /* CHX bdl 条目数据传输完成中断输出控制,1表示允许输出,0表示不允许 */ -#define FGDMA_CHX_INT_CTRL_FIFO_FULL_ENABLE BIT(1) /* CHX ARM满中断 1表示允许输出,0表示不允许 */ -#define FGDMA_CHX_INT_CTRL_FIFO_EMPTY_ENABLE BIT(0) /* CHX ARM空中断 1表示允许输出,0表示不允许 */ - -/** @name FGDMA_CHX_INT_STATE_OFFSET Register - */ -#define FGDMA_CHX_INT_STATE_BUSY BIT(4) /* CHX 处于数据传输中,写1 清0 */ -#define FGDMA_CHX_INT_STATE_TRANS_END BIT(3) /* CHX 处于传输完成状态,direct 模式时,表示所有数据传输完成,BDL 模式表示当前所有BDL条目传输完成: 写1清0 */ -#define FGDMA_CHX_INT_STATE_BDL_END BIT(2) /* CHX 在BDL模式下,表示当前一个BDL 条目数据传输完成;Direct 模式下该位始终为0 , 写1清0 */ -#define FGDMA_CHX_INT_STATE_FIFO_FULL BIT(1) /* CHX FIFO 满状态,写1清0 */ -#define FGDMA_CHX_INT_STATE_FIFO_EMPTY BIT(0) /* CHX FIFO 空状态,写1清0 */ -#define FGDMA_CHX_INT_STATE_ALL GENMASK(4, 0) - -/** @name FGDMA_CHX_LVI_OFFSET Register - */ -#define FGDMA_CHX_LVI_SET(lvi) SET_REG32_BITS((lvi - 1), 31, 0) /* CHX last vaild index, 即链表末模式下BDL有效条目,实际有效条目=该寄存器值+1 */ - -/** @name FGDMA_CHX_TS_OFFSET Register - */ -#define FGDMA_CHX_TS_SET(ts) SET_REG32_BITS((ts), 31, 0) /* CHX 在direct 模式下操作的的总Byte数量 */ - -/** @name FGDMA_CHX_UPSADDR_OFFSET Register - */ -#define FGDMA_CHX_UPSADDR_SET(addr) SET_REG32_BITS((addr), 31, 0) /* CHX 源地址高32bits */ - -/** @name FGDMA_CHX_LWSADDR_OFFSET Register - */ -#define FGDMA_CHX_LWSADDR_SET(addr) SET_REG32_BITS((addr), 31, 0) /* CHX 源地址低32bits */ - -/** @name FGDMA_CHX_UPDADDR_OFFSET Register - */ -#define FGDMA_CHX_UPDADDR_SET(addr) SET_REG32_BITS((addr), 31, 0) /* CHX 目标地址高32bits */ - -/** @name FGDMA_CHX_LWDADDR_OFFSET Register - */ -#define FGDMA_CHX_LWDADDR_SET(addr) SET_REG32_BITS((addr), 31, 0) /* CHX 目标地址低32bits */ - -/** @name FGDMA_CHX_XFER_CFG_OFFSET Register - */ -#define FGDMA_CHX_XFER_CFG_AR_LEN_SET(len) SET_REG32_BITS((len), 31, 24) /* CHX 读请求 Burst length 大小 */ -#define FGDMA_CHX_XFER_CFG_AR_SIZE_SET(size) SET_REG32_BITS((size), 22, 20) /* CHX 读请求 Burst size 大小, 支持 1、2、8、16 Byte */ -#define FGDMA_CHX_XFER_CFG_AR_BRUST_SET(type) SET_REG32_BITS((type), 17, 16) /* CHX 读请求 Brust 类型: 0:fix ,1:incr */ -#define FGDMA_CHX_XFER_CFG_AW_LEN_SET(len) SET_REG32_BITS((len), 15, 8) /* CHX 写请求 Burst length 大小 */ -#define FGDMA_CHX_XFER_CFG_AW_SIZE_SET(size) SET_REG32_BITS((size), 6, 4) /* CHX 写请求 Burst size 大小, 支持 1、2、8、16 Byte */ -#define FGDMA_CHX_XFER_CFG_AW_BRUST_SET(type) SET_REG32_BITS((type), 1, 0) /* CHX 写请求 Brust 类型: 0:fix ,1:incr */ - -#define FGDMA_INCR 1U -#define FGDMA_FIX 0U - -#define FGDMA_BURST_LEN 7U /* burst lenth = FGDMA_BURST_LEN + 1,写入寄存器的最大合法值为7,burst length最大值为8 */ - -/** @name FGDMA_CHX_LCP_OFFSET Register - */ -#define FGDMA_CHX_LCP_GET(reg_val) GET_REG32_BITS((reg_val), 31, 0) /* 当前操作的BDL列表数 */ - -/** @name FGDMA_CHX_SECCTL_OFFSET Register - */ -#define FGDMA_CHX_SECCTL_SET(val) GET_REG32_BITS((val), 31, 0) /* CHX 安全控制寄存器,仅安全状态可访问 */ - -/** @name FGDMA_CHX_SEC_ATST_OFFSET Register - */ -#define FGDMA_CHX_SEC_ATST_SET(val) SET_REG32_BITS((val), 31, 0) - -/** @name FGDMA_CHX_NSID_STRMID_OFFSET Register - */ -#define FGDMA_CHX_NSID_STRMID_SET(val) SET_REG32_BITS((val), 31, 0) - -/** @name FGDMA_CHX_AW_CFG_OFFSET Register - */ -#define FGDMA_CHX_AW_CFG_AWCACHE_SET(val) SET_REG32_BITS((val), 3, 0) /* CHX dma arcache */ -#define FGDMA_CHX_AW_CFG_AWREGION_MASK_SET(val) SET_REG32_BITS((val), 7, 4) /* CHX dma arregion */ -#define FGDMA_CHX_AW_CFG_AWPROT_SET(val) SET_REG32_BITS((val), 9, 8) -#define FGDMA_CHX_AW_CFG_AWDOMAIN_SET(val) SET_REG32_BITS((val), 13, 12) /* chx ardomain */ -#define FGDMA_CHX_AW_CFG_AWSNOOP_SET(val) SET_REG32_BITS((val), 18, 16) -#define FGDMA_CHX_AW_CFG_AWBAR_SET(val) SET_REG32_BITS((val), 21, 20) - -/** @name FGDMA_CHX_AR_CFG_OFFSET Register - */ -#define FGDMA_CHX_AR_CFG_AWCACHE_SET(val) SET_REG32_BITS((val), 3, 0) /* CHX dma arcache */ -#define FGDMA_CHX_AR_CFG_AWREGION_MASK_SET(val) SET_REG32_BITS((val), 7, 4) /* CHX dma arregion */ -#define FGDMA_CHX_AR_CFG_AWPROT_SET(val) SET_REG32_BITS((val), 9, 8) -#define FGDMA_CHX_AR_CFG_AWDOMAIN_SET(val) SET_REG32_BITS((val), 13, 12) /* chx ardomain */ -#define FGDMA_CHX_AR_CFG_AWSNOOP_SET(val) SET_REG32_BITS((val), 19, 16) -#define FGDMA_CHX_AR_CFG_AWBAR_SET(val) SET_REG32_BITS((val), 21, 20) - -/** @name FGDMA_CHX_SECRSP_OFFSET Register - */ -#define FGDMA_CHX_SECRSP BIT(0) /* response 安全控制位 */ - -#define FGDMA_OUTSTANDING 0xfU /* 实际outstanding数目为0xf + 1 */ - -/**************************** Type Definitions *******************************/ - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ -#define FGDMA_READREG(base_addr, reg_offset) \ - FtIn32((base_addr) + (u32)(reg_offset)) - -#define FGDMA_WRITEREG(base_addr, reg_offset, data) \ - FtOut32((base_addr) + (u32)(reg_offset), (u32)(data)) - -/** - * @name: FGdmaDisable - * @msg: 去使能GDMA控制器 - * @return {void} 无 - * @param {uintptr} base_addr, GDMA控制器基地址 - */ -static inline void FGdmaDisable(uintptr base_addr) -{ - u32 reg_val = FGDMA_READREG(base_addr, FGDMA_CTL_OFFSET); - reg_val &= ~FGDMA_CTL_ENABLE; - FGDMA_WRITEREG(base_addr, FGDMA_CTL_OFFSET, reg_val); -} - -/** - * @name: FGdmaEnable - * @msg: 使能GDMA控制器 - * @return {void} 无 - * @param {uintptr} base_addr, GDMA控制器基地址 - */ -static inline void FGdmaEnable(uintptr base_addr) -{ - u32 reg_val = FGDMA_READREG(base_addr, FGDMA_CTL_OFFSET); - reg_val |= FGDMA_CTL_ENABLE; - FGDMA_WRITEREG(base_addr, FGDMA_CTL_OFFSET, reg_val); -} - -/** - * @name: FGdmaSoftwareReset - * @msg: 完成GDMA控制器软复位 - * @return {void} 无 - * @param {uintptr} base_addr, GDMA控制器基地址 - */ -static inline void FGdmaSoftwareReset(uintptr base_addr) -{ - int delay = 100; - u32 reg_val = FGDMA_READREG(base_addr, FGDMA_CTL_OFFSET); - reg_val |= FGDMA_CTL_SOFT_RESET; - FGDMA_WRITEREG(base_addr, FGDMA_CTL_OFFSET, reg_val); - - while (--delay > 0) - ; - - reg_val = FGDMA_READREG(base_addr, FGDMA_CTL_OFFSET); - reg_val &= ~FGDMA_CTL_SOFT_RESET; - FGDMA_WRITEREG(base_addr, FGDMA_CTL_OFFSET, reg_val); -} - -/** - * @name: FGdmaIrqEnable - * @msg: 开启GDMA控制器中断 - * @return {void} 无 - * @param {uintptr} base_addr, GDMA控制器基地址 - */ -static inline void FGdmaIrqEnable(uintptr base_addr) -{ - u32 reg_val = FGDMA_READREG(base_addr, FGDMA_INTR_CTRL_OFFSET); - reg_val |= FGDMA_CHX_INTR_GLOBAL_MASK; - FGDMA_WRITEREG(base_addr, FGDMA_INTR_CTRL_OFFSET, reg_val); -} - -/** - * @name: FGdmaIrqDisable - * @msg: 关闭GDMA控制器中断 - * @return {void} 无 - * @param {uintptr} base_addr, GDMA控制器基地址 - */ -static inline void FGdmaIrqDisable(uintptr base_addr) -{ - u32 reg_val = FGDMA_READREG(base_addr, FGDMA_INTR_CTRL_OFFSET); - reg_val &= ~FGDMA_CHX_INTR_GLOBAL_MASK; - FGDMA_WRITEREG(base_addr, FGDMA_INTR_CTRL_OFFSET, reg_val); -} - -/** - * @name: FGdmaChanDisable - * @msg: 去使能GDMA通道 - * @return {void} 无 - * @param {uintptr} base_addr, GDMA控制器基地址 - * @param {u32} chan, GDMA通道号 - */ -static inline void FGdmaChanDisable(uintptr base_addr, u32 chan) -{ - u32 reg_val = FGDMA_READREG(base_addr, FGDMA_CHX_CTL_OFFSET(chan)); - reg_val &= ~FGDMA_CHX_CTL_ENABLE; /* 禁用通道 */ - FGDMA_WRITEREG(base_addr, FGDMA_CHX_CTL_OFFSET(chan), reg_val); -} - -/** - * @name: FGdmaChanEnable - * @msg: 使能GDMA通道 - * @return {void} 无 - * @param {uintptr} base_addr, GDMA控制器基地址 - * @param {u32} chan, GDMA通道号 - */ -static inline void FGdmaChanEnable(uintptr base_addr, u32 chan) -{ - u32 reg_val = FGDMA_READREG(base_addr, FGDMA_CHX_CTL_OFFSET(chan)); - reg_val |= FGDMA_CHX_CTL_ENABLE; /* 使能通道 */ - FGDMA_WRITEREG(base_addr, FGDMA_CHX_CTL_OFFSET(chan), reg_val); -} - -/** - * @name: FGdmaChanIrqDisable - * @msg: 关闭GDMA通道中断 - * @return {void} 无 - * @param {uintptr} base_addr, GDMA控制器基地址 - * @param {u32} chan, GDMA通道号 - */ -static inline void FGdmaChanIrqDisable(uintptr base_addr, u32 chan) -{ - u32 reg_val = FGDMA_READREG(base_addr, FGDMA_INTR_CTRL_OFFSET); - reg_val &= ~FGDMA_CHX_INTR_MASK(chan); /* 禁用通道中断 */ - FGDMA_WRITEREG(base_addr, FGDMA_INTR_CTRL_OFFSET, reg_val); - FGDMA_WRITEREG(base_addr, FGDMA_CHX_INT_CTRL_OFFSET(chan), 0x0U); /* 禁用通道所有中断位 */ -} - -/** - * @name: FGdmaChanIrqEnable - * @msg: 打开GDMA通道中断 - * @return {void} 无 - * @param {uintptr} base_addr, GDMA控制器基地址 - * @param {u32} chan, GDMA通道号 - * @param {u32} umask, 使能的通道中断位 - */ -static inline void FGdmaChanIrqEnable(uintptr base_addr, u32 chan, u32 umask) -{ - u32 reg_val = FGDMA_READREG(base_addr, FGDMA_INTR_CTRL_OFFSET); - reg_val |= FGDMA_CHX_INTR_MASK(chan); /* 使能通道中断 */ - FGDMA_WRITEREG(base_addr, FGDMA_INTR_CTRL_OFFSET, reg_val); - FGDMA_WRITEREG(base_addr, FGDMA_CHX_INT_CTRL_OFFSET(chan), umask); /* 使能通道指定中断位 */ -} - -/** - * @name: FGdmaChanReset - * @msg: 完成GDMA通道软复位 - * @return {void} 无 - * @param {uintptr} base_addr, GDMA控制器基地址 - * @param {u32} chan, GDMA通道号 - */ -static inline void FGdmaChanReset(uintptr base_addr, u32 chan) -{ - int delay = 100; - u32 reg_val = FGDMA_READREG(base_addr, FGDMA_CHX_CTL_OFFSET(chan)); - reg_val |= FGDMA_CHX_CTL_SOFT_RESET; - FGDMA_WRITEREG(base_addr, FGDMA_CHX_CTL_OFFSET(chan), reg_val); - - while (--delay > 0) - ; - - reg_val = FGDMA_READREG(base_addr, FGDMA_CHX_CTL_OFFSET(chan)); - reg_val &= ~FGDMA_CHX_CTL_SOFT_RESET; - FGDMA_WRITEREG(base_addr, FGDMA_CHX_CTL_OFFSET(chan), reg_val); -} - -/** - * @name: FGdmaReadStatus - * @msg: 获取GDMA控制器中断状态 - * @return {u32} 中断状态位 - * @param {uintptr} base_addr, GDMA控制器基地址 - */ -static inline u32 FGdmaReadStatus(uintptr base_addr) -{ - return FGDMA_READREG(base_addr, FGDMA_INTR_STATE_OFFSET); -} - -/** - * @name: FGdmaReadChanStatus - * @msg: 获取GDMA通道中断状态 - * @return {u32} 中断状态位 - * @param {uintptr} base_addr, GDMA控制器基地址 - * @param {u32} chan, 通道号 - */ -static inline u32 FGdmaReadChanStatus(uintptr base_addr, u32 chan) -{ - return FGDMA_READREG(base_addr, FGDMA_CHX_INT_STATE_OFFSET(chan)); -} - -/** - * @name: FGdmaClearChanStatus - * @msg: 清除GDMA通道中断状态 - * @return {void} 无 - * @param {uintptr} base_addr, GDMA控制器基地址 - * @param {u32} chan, 通道号 - * @param {u32} status, 待清除的中断状态 - */ -static inline void FGdmaClearChanStatus(uintptr base_addr, u32 chan, u32 status) -{ - FGDMA_WRITEREG(base_addr, FGDMA_CHX_INT_STATE_OFFSET(chan), status); /* 写1清0 */ -} - -/** - * @name: FGdmaSetChanClock - * @msg: 打开/关闭GDMA通道时钟 - * @return {void} 无 - * @param {uintptr} base_addr, GDMA控制器基地址 - * @param {u32} chan, 通道号 - * @param {boolean} enable,TRUE: 打开时钟, FALSE: 关闭时钟 - */ -static inline void FGdmaSetChanClock(uintptr base_addr, u32 chan, boolean enable) -{ - u32 reg_val = FGDMA_READREG(base_addr, FGDMA_LP_OFFSET); - if (enable) - { - reg_val &= ~FGDMA_CHX_LP_CTL(chan); /* 写0开启通道时钟 */ - } - else - { - reg_val |= FGDMA_CHX_LP_CTL(chan); /* 写1关断通道时钟 */ - } - FGDMA_WRITEREG(base_addr, FGDMA_LP_OFFSET, reg_val); - - return; -} - -/************************** Function Prototypes ******************************/ - - -#ifdef __cplusplus -} -#endif - -#endif \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/dma/fgdma/fgdma_intr.c b/bsp/phytium/libraries/standalone/drivers/dma/fgdma/fgdma_intr.c deleted file mode 100644 index a00ac2d51f..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/dma/fgdma/fgdma_intr.c +++ /dev/null @@ -1,195 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fgdma_intr.c - * Date: 2022-05-16 17:01:48 - * LastEditTime: 2022-05-16 17:01:49 - * Description:  This file is for interrupt api implmentation - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2021/11/5 init commit - * 1.1 zhugengyu 2022/5/16 modify according to tech manual. - */ - -/***************************** Include Files *********************************/ -#include - -#include "fdebug.h" -#include "fassert.h" - -#include "fgdma_hw.h" -#include "fgdma.h" -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ -#define FGDMA_DEBUG_TAG "GDMA-INTR" -#define FGDMA_ERROR(format, ...) FT_DEBUG_PRINT_E(FGDMA_DEBUG_TAG, format, ##__VA_ARGS__) -#define FGDMA_WARN(format, ...) FT_DEBUG_PRINT_W(FGDMA_DEBUG_TAG, format, ##__VA_ARGS__) -#define FGDMA_INFO(format, ...) FT_DEBUG_PRINT_I(FGDMA_DEBUG_TAG, format, ##__VA_ARGS__) -#define FGDMA_DEBUG(format, ...) FT_DEBUG_PRINT_D(FGDMA_DEBUG_TAG, format, ##__VA_ARGS__) - -#define FGDMA_CALL_EVT_HANDLER(express, dma_chan, args) \ - do \ - { \ - if (express) \ - { \ - express(dma_chan, args); \ - } \ - } while (0) - -/************************** Function Prototypes ******************************/ -/** - * @name: FGdmaChanIrqHandler - * @msg: GDMA通道中断处理函数 - * @return {void} 无 - * @param {FGdmaChan} *chan_p, GDMA通道实例 - */ -static void FGdmaChanIrqHandler(FGdmaChan *const chan_p) -{ - FGdma *const instance_p = chan_p->gdma; - FASSERT(instance_p); - uintptr base_addr = instance_p->config.base_addr; - u32 chan_status = FGdmaReadChanStatus(base_addr, chan_p->config.chan_id); - - if (FGDMA_CHX_INT_STATE_BUSY & chan_status) - { - FGDMA_CALL_EVT_HANDLER(chan_p->evt_handlers[FGDMA_CHAN_EVT_BUSY], - chan_p, chan_p->evt_handler_args[FGDMA_CHAN_EVT_BUSY]); - } - - if (FGDMA_CHX_INT_STATE_TRANS_END & chan_status) - { - FGDMA_CALL_EVT_HANDLER(chan_p->evt_handlers[FGDMA_CHAN_EVT_TRANS_END], - chan_p, chan_p->evt_handler_args[FGDMA_CHAN_EVT_TRANS_END]); - } - - if (FGDMA_CHX_INT_STATE_BDL_END & chan_status) - { - FGDMA_CALL_EVT_HANDLER(chan_p->evt_handlers[FGDMA_CHAN_EVT_BDL_END], - chan_p, chan_p->evt_handler_args[FGDMA_CHAN_EVT_BDL_END]); - } - - if (FGDMA_CHX_INT_STATE_FIFO_FULL & chan_status) - { - FGDMA_CALL_EVT_HANDLER(chan_p->evt_handlers[FGDMA_CHAN_EVT_FIFO_FULL], - chan_p, chan_p->evt_handler_args[FGDMA_CHAN_EVT_FIFO_FULL]); - } - - if (FGDMA_CHX_INT_STATE_FIFO_EMPTY & chan_status) - { - FGDMA_CALL_EVT_HANDLER(chan_p->evt_handlers[FGDMA_CHAN_EVT_FIFO_EMPTY], - chan_p, chan_p->evt_handler_args[FGDMA_CHAN_EVT_FIFO_EMPTY]); - } - - FGdmaClearChanStatus(base_addr, chan_p->config.chan_id, chan_status); - return; -} - -/** - * @name: FGdmaIrqHandler - * @msg: 当instance_p->config.caps 具有FGDMA_IRQ1_MASK特性时,此函数作为GDMA中断处理函数 - * @return {void} 无 - * @param {s32} vector, 中断号 - * @param {void} *args, 中断参数 - */ -void FGdmaIrqHandler(s32 vector, void *args) -{ - FASSERT(args); - FGdma *const instance_p = (FGdma * const)args; - FASSERT(FT_COMPONENT_IS_READY == instance_p->is_ready); - FASSERT(FGDMA_IRQ1_MASK & instance_p->config.caps); - uintptr base_addr = instance_p->config.base_addr; - u32 chan_id; - - u32 status = FGdmaReadStatus(base_addr); - FGDMA_INFO("status: 0x%x", status); - - FGdmaIrqDisable(base_addr); - for (chan_id = 0; chan_id < FGDMA_NUM_OF_CHAN; chan_id++) - { - if (!(FGDMA_CHX_INTR_STATE(chan_id) & status)) - { - continue; - } - - /* channel interrupt happens */ - FASSERT_MSG((NULL != instance_p->chans[chan_id]), "invalid chan interrupt event !!!"); - FGdmaChanIrqHandler(instance_p->chans[chan_id]); - } - FGdmaIrqEnable(base_addr); - status = FGdmaReadStatus(base_addr); - FGDMA_INFO("after status: 0x%x", status); - return; -} - -/** - * @name: FGdmaIrqHandlerPrivateChannel - * @msg: 当instance_p->config.caps 具有FGDMA_IRQ2_MASK特性时,此函数作为GDMA中断处理函数 - * @return {void} 无 - * @param {s32} vector, 中断号 - * @param {void} *args, 中断参数 - */ -void FGdmaIrqHandlerPrivateChannel(s32 vector, void *args) -{ - FASSERT(args); - FGdmaChan *gdma_chan = (FGdmaChan *)args; - FASSERT(gdma_chan); - FGdma *const instance_p = (FGdma *const)gdma_chan->gdma; - FASSERT(FT_COMPONENT_IS_READY == instance_p->is_ready); - FASSERT(FGDMA_IRQ2_MASK & instance_p->config.caps); - uintptr base_addr = instance_p->config.base_addr; - u32 chan_id; - FGDMA_INFO("FGdmaIrqHandlerPrivateChannel is here %d \r\n",vector); - chan_id = gdma_chan->config.chan_id ; - FASSERT(chan_id <= FGDMA_NUM_OF_CHAN); - u32 status = FGdmaReadStatus(base_addr); - FGDMA_INFO("status: 0x%x", status); - if(!(FGDMA_CHX_INTR_STATE(chan_id) & status)) - { - FGDMA_WARN("The interrupt state does not match the interrupt chan_id ,chan_id is %d, interrupt state is 0x%x ",chan_id,status); - } - - FASSERT_MSG((NULL != instance_p->chans[chan_id]), "invalid chan interrupt event !!!"); - FGdmaChanIrqHandler(instance_p->chans[chan_id]); - status = FGdmaReadStatus(base_addr); - FGDMA_INFO("after status: 0x%x", status); - return; -} - - -/** - * @name: FGdmaChanRegisterEvtHandler - * @msg: 注册GDMA通道事件回调函数 - * @return {void} 无 - * @param {FGdmaChan} *chan_p, GDMA通道实例 - * @param {FGdmaChanEvtType} evt, 通道事件 - * @param {FGdmaChanEvtHandler} handler, 事件回调函数 - * @param {void} *handler_arg, 事件回调函数输入参数 - */ -void FGdmaChanRegisterEvtHandler(FGdmaChan *const chan_p, FGdmaChanEvtType evt, - FGdmaChanEvtHandler handler, void *handler_arg) -{ - FASSERT(chan_p); - FASSERT(FGDMA_CHAN_NUM_OF_EVT > evt); - - chan_p->evt_handlers[evt] = handler; - chan_p->evt_handler_args[evt] = handler_arg; - - return; -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/dma/fgdma/fgdma_selftest.c b/bsp/phytium/libraries/standalone/drivers/dma/fgdma/fgdma_selftest.c deleted file mode 100644 index 31267c12dd..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/dma/fgdma/fgdma_selftest.c +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fgdma_selftest.c - * Date: 2022-05-20 13:39:27 - * LastEditTime: 2022-05-20 13:39:27 - * Description:  This file is for self test implementation - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2021/11/5 init commit - * 1.1 zhugengyu 2022/5/16 modify according to tech manual. - */ -/***************************** Include Files *********************************/ -#include - -#include "fdebug.h" - -#include "fgdma_hw.h" -#include "fgdma.h" -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ -#define FGDMA_DEBUG_TAG "GDMA-TEST" -#define FGDMA_ERROR(format, ...) FT_DEBUG_PRINT_E(FGDMA_DEBUG_TAG, format, ##__VA_ARGS__) -#define FGDMA_WARN(format, ...) FT_DEBUG_PRINT_W(FGDMA_DEBUG_TAG, format, ##__VA_ARGS__) -#define FGDMA_INFO(format, ...) FT_DEBUG_PRINT_I(FGDMA_DEBUG_TAG, format, ##__VA_ARGS__) -#define FGDMA_DEBUG(format, ...) FT_DEBUG_PRINT_D(FGDMA_DEBUG_TAG, format, ##__VA_ARGS__) - -/************************** Function Prototypes ******************************/ - -/****************************************************************************/ -/** - * @name: FGdmaDumpRegisterVals - * @msg: 打印当前的GDMA寄存器值 - * @return {void} 无 - * @param {uintptr} base_addr, GDMA控制器基地址 - * @param {u32} max_chan, 打印从 0 ~ max_chan 的通道寄存器值 - */ -void FGdmaDumpRegisterVals(uintptr base_addr, u32 max_chan) -{ - FGDMA_DEBUG("ctrl[0x%x]: 0x%x", FGDMA_CTL_OFFSET, FGDMA_READREG(base_addr, FGDMA_CTL_OFFSET)); - FGDMA_DEBUG("state[0x%x]: 0x%x", FGDMA_INTR_STATE_OFFSET, FGDMA_READREG(base_addr, FGDMA_INTR_STATE_OFFSET)); - FGDMA_DEBUG("intr[0x%x]: 0x%x", FGDMA_INTR_CTRL_OFFSET, FGDMA_READREG(base_addr, FGDMA_INTR_CTRL_OFFSET)); - FGDMA_DEBUG("lp[0x%x] : 0x%x", FGDMA_LP_OFFSET, FGDMA_READREG(base_addr, FGDMA_LP_OFFSET)); - FGDMA_DEBUG("qos[0x%x] : 0x%x", FGDMA_QOS_CFG_OFFSET, FGDMA_READREG(base_addr, FGDMA_QOS_CFG_OFFSET)); - - for (u32 chan = 0; chan <= max_chan; chan++) - { - FGDMA_DEBUG("chan-%d", chan); - FGDMA_DEBUG(" ctrl[0x%x]: 0x%x", FGDMA_CHX_CTL_OFFSET(chan), FGDMA_READREG(base_addr, FGDMA_CHX_CTL_OFFSET(chan))); - FGDMA_DEBUG(" mode[0x%x]: 0x%x", FGDMA_CHX_MODE_OFFSET(chan), FGDMA_READREG(base_addr, FGDMA_CHX_MODE_OFFSET(chan))); - FGDMA_DEBUG(" intr[0x%x]: 0x%x", FGDMA_CHX_INT_CTRL_OFFSET(chan), FGDMA_READREG(base_addr, FGDMA_CHX_INT_CTRL_OFFSET(chan))); - FGDMA_DEBUG(" state[0x%x]: 0x%x", FGDMA_CHX_INT_STATE_OFFSET(chan), FGDMA_READREG(base_addr, FGDMA_CHX_INT_STATE_OFFSET(chan))); - FGDMA_DEBUG(" lvi[0x%x]: 0x%x", FGDMA_CHX_LVI_OFFSET(chan), FGDMA_READREG(base_addr, FGDMA_CHX_LVI_OFFSET(chan))); - FGDMA_DEBUG(" ts[0x%x]: 0x%x", FGDMA_CHX_TS_OFFSET(chan), FGDMA_READREG(base_addr, FGDMA_CHX_TS_OFFSET(chan))); - FGDMA_DEBUG(" src-up[0x%x]: 0x%x", FGDMA_CHX_UPSADDR_OFFSET(chan), FGDMA_READREG(base_addr, FGDMA_CHX_UPSADDR_OFFSET(chan))); - FGDMA_DEBUG(" src-low[0x%x]: 0x%x", FGDMA_CHX_LWSADDR_OFFSET(chan), FGDMA_READREG(base_addr, FGDMA_CHX_LWSADDR_OFFSET(chan))); - FGDMA_DEBUG(" dst-up[0x%x]: 0x%x", FGDMA_CHX_UPDADDR_OFFSET(chan), FGDMA_READREG(base_addr, FGDMA_CHX_UPDADDR_OFFSET(chan))); - FGDMA_DEBUG(" dst-low[0x%x]: 0x%x", FGDMA_CHX_LWDADDR_OFFSET(chan), FGDMA_READREG(base_addr, FGDMA_CHX_LWDADDR_OFFSET(chan))); - FGDMA_DEBUG(" xfer[0x%x]: 0x%x", FGDMA_CHX_XFER_CFG_OFFSET(chan), FGDMA_READREG(base_addr, FGDMA_CHX_XFER_CFG_OFFSET(chan))); - FGDMA_DEBUG(" lpc[0x%x]: 0x%x", FGDMA_CHX_LCP_OFFSET(chan), FGDMA_READREG(base_addr, FGDMA_CHX_LCP_OFFSET(chan))); - FGDMA_DEBUG(" sec[0x%x]: 0x%x", FGDMA_CHX_SECCTL_OFFSET(chan), FGDMA_READREG(base_addr, FGDMA_CHX_SECCTL_OFFSET(chan))); - FGDMA_DEBUG(" atst[0x%x]: 0x%x", FGDMA_CHX_SEC_ATST_OFFSET(chan), FGDMA_READREG(base_addr, FGDMA_CHX_SEC_ATST_OFFSET(chan))); - FGDMA_DEBUG(" nsid[0x%x]: 0x%x", FGDMA_CHX_NSID_STRMID_OFFSET(chan), FGDMA_READREG(base_addr, FGDMA_CHX_NSID_STRMID_OFFSET(chan))); - FGDMA_DEBUG(" aw[0x%x]: 0x%x", FGDMA_CHX_AW_CFG_OFFSET(chan), FGDMA_READREG(base_addr, FGDMA_CHX_AW_CFG_OFFSET(chan))); - FGDMA_DEBUG(" ar[0x%x]: 0x%x", FGDMA_CHX_AR_CFG_OFFSET(chan), FGDMA_READREG(base_addr, FGDMA_CHX_AR_CFG_OFFSET(chan))); - FGDMA_DEBUG(" resp[0x%x]: 0x%x", FGDMA_CHX_SECRSP_OFFSET(chan), FGDMA_READREG(base_addr, FGDMA_CHX_SECRSP_OFFSET(chan))); - } - - return; -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/dma/fgdma/fgdma_sinit.c b/bsp/phytium/libraries/standalone/drivers/dma/fgdma/fgdma_sinit.c deleted file mode 100644 index 96be6e2a1b..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/dma/fgdma/fgdma_sinit.c +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fgdma_sinit.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:25:15 - * Description:  This file is for gdma static init - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2021/11/5 init commit - * 1.1 zhugengyu 2022/5/16 modify according to tech manual. - */ - -/***************************** Include Files *********************************/ - -#include "ftypes.h" -#include "fparameters.h" - -#include "fgdma.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Variable Definitions *****************************/ -extern const FGdmaConfig fgdma_cfg_tbl[FGDMA_INSTANCE_NUM]; - -/************************** Function Prototypes ******************************/ -/** - * @name: FGdmaLookupConfig - * @msg: 获取GDMA控制器默认配置 - * @return {const FGdmaConfig *} 控制器默认配置 - * @param {u32} instance_id, GDMA控制器ID - */ -const FGdmaConfig *FGdmaLookupConfig(u32 instance_id) -{ - const FGdmaConfig *ptr = NULL; - u32 index; - - for (index = 0; index < (u32)FGDMA_INSTANCE_NUM; index++) - { - if (fgdma_cfg_tbl[index].instance_id == instance_id) - { - ptr = &fgdma_cfg_tbl[index]; - break; - } - } - - return (const FGdmaConfig *)ptr; -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/eth/Kconfig b/bsp/phytium/libraries/standalone/drivers/eth/Kconfig deleted file mode 100644 index f041d27764..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/eth/Kconfig +++ /dev/null @@ -1,22 +0,0 @@ - -menu "Eth Configuration" - config ENABLE_FXMAC - bool - prompt "Use FXMAC" - default n - - config ENABLE_FGMAC - bool - prompt "Use FGMAC" - default n - - if ENABLE_FGMAC - source "$STANDALONE_DIR/drivers/eth/fgmac/Kconfig" - endif - - if ENABLE_FXMAC - source "$STANDALONE_DIR/drivers/eth/fxmac/Kconfig" - endif - -endmenu - diff --git a/bsp/phytium/libraries/standalone/drivers/eth/fgmac/Kconfig b/bsp/phytium/libraries/standalone/drivers/eth/fgmac/Kconfig deleted file mode 100644 index af211a4c2d..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/eth/fgmac/Kconfig +++ /dev/null @@ -1,13 +0,0 @@ -choice FGMAC_PHY_TYPE - prompt "PHY Type" - default FGMAC_PHY_COMMON - help - Select PHY for FGMAC - - config FGMAC_PHY_COMMON - bool "Common" - config FGMAC_PHY_AR803X - bool "AR803X" - -endchoice # FGMAC_PHY_TYPE - diff --git a/bsp/phytium/libraries/standalone/drivers/eth/fgmac/fgmac.c b/bsp/phytium/libraries/standalone/drivers/eth/fgmac/fgmac.c deleted file mode 100644 index 94e15135fa..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/eth/fgmac/fgmac.c +++ /dev/null @@ -1,510 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fgmac.c - * Date: 2022-04-06 14:46:52 - * LastEditTime: 2022-04-06 14:46:58 - * Description:  This file is for gmac driver .Functions in this file are the minimum required functions - * for this driver. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2021/07/13 first release - */ - - -/***************************** Include Files *********************************/ -#include -#include "fio.h" -#include "ferror_code.h" -#include "ftypes.h" -#include "fdebug.h" -#include "fassert.h" -#include "fgmac_hw.h" -#include "fgmac_phy.h" -#include "fgmac.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ -#define FGMAC_DEBUG_TAG "FGMAC" -#define FGMAC_ERROR(format, ...) FT_DEBUG_PRINT_E(FGMAC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FGMAC_WARN(format, ...) FT_DEBUG_PRINT_W(FGMAC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FGMAC_INFO(format, ...) FT_DEBUG_PRINT_I(FGMAC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FGMAC_DEBUG(format, ...) FT_DEBUG_PRINT_D(FGMAC_DEBUG_TAG, format, ##__VA_ARGS__) - - -/************************** Function Prototypes ******************************/ -static FError FGmacReset(FGmac *instance_p); -static FError FGmacDmaConfigure(FGmac *instance_p); -static FError FGmacControllerConfigure(FGmac *instance_p); -/************************** Variable Definitions *****************************/ - -/*****************************************************************************/ - -/* 此文件主要为了完成用户对外接口,用户可以使用这些接口直接开始工作 */ - -/* - 包括用户API的定义和实现 - - 同时包含必要的OPTION方法,方便用户进行配置 - - 如果驱动可以直接进行I/O操作,在此源文件下可以将API 进行实现 */ - -/* - 包括用户API的定义和实现 - - 同时包含必要的OPTION方法,方便用户进行配置 - - 如果驱动可以直接进行I/O操作,在此源文件下可以将API 进行实现 */ - -/* - * @name: FGmacStop - * @msg: 停止FGMAC控制器寄存器 - * @return {*} - * @param {FGmac} *instance_p 驱动控制数据 - */ -void FGmacStop(FGmac *instance_p) -{ - FASSERT(instance_p); - uintptr base_addr = instance_p->config.base_addr; - u32 reg_val; - - /* disable dma tx and rx */ - reg_val = FGMAC_READ_REG32(base_addr, FGMAC_DMA_OP_OFFSET); - reg_val &= (~FGMAC_DMA_OP_ST); - reg_val &= (~FGMAC_DMA_OP_SR); - FGMAC_WRITE_REG32(base_addr, FGMAC_DMA_OP_OFFSET, reg_val); - - /* disable gmac tx and rx */ - reg_val = FGMAC_READ_REG32(base_addr, FGMAC_CONF_OFFSET); - reg_val &= (~FGMAC_CONF_TX_EN); - reg_val &= (~FGMAC_CONF_RX_EN); - FGMAC_WRITE_REG32(base_addr, FGMAC_CONF_OFFSET, reg_val); - -} - - -/** - * @name: FGmacCfgInitialize - * @msg: init FGMAC controller - * @param {FGmac} *instance_p, instance of FGmac controller - * @param {FGmacConfig} *cofig_p, input configuration parameters - * @return err code information, FGMAC_SUCCESS indicates success,others indicates failed - */ -FError FGmacCfgInitialize(FGmac *instance_p, const FGmacConfig *input_config_p) -{ - FASSERT(instance_p && input_config_p); - FError ret = FGMAC_SUCCESS; - - /* indicating device is started */ - if (FT_COMPONENT_IS_READY == instance_p->is_ready) - { - FGMAC_WARN("Device is already initialized!!!"); - } - - /* de-initialize device instance */ - FGmacDeInitialize(instance_p); - instance_p->config = *input_config_p; - - /* Phy Awaken */ - ret = FGmacPhyAwaken(instance_p); - if (FGMAC_SUCCESS != ret) - { - FGMAC_ERROR("Phy awaken failed!"); - return ret; - } - - - /* initialize the gmac controller */ - ret = FGmacReset(instance_p); - if (FGMAC_SUCCESS != ret) - { - /*permit failed*/ - FGMAC_ERROR("Gmac reset failed."); - } - - ret = FGmacControllerConfigure(instance_p); - if (FGMAC_SUCCESS != ret) - { - return ret; - } - - /* initialize the gmac dma controller */ - ret = FGmacDmaConfigure(instance_p); - if (FGMAC_SUCCESS == ret) - { - instance_p->is_ready = FT_COMPONENT_IS_READY; - } - - return ret; -} - -/** - * @name: FGmacDeInitialize - * @msg: deinit FGMAC controller - * @param {FGmac} *instance_p, instance of FGmac controller - * @return err code information, FGMAC_SUCCESS indicates success,others indicates failed - */ -FError FGmacDeInitialize(FGmac *instance_p) -{ - FASSERT(instance_p); - FError ret = FGMAC_SUCCESS; - - instance_p->is_ready = 0; - memset(instance_p, 0, sizeof(*instance_p)); - - return ret; -} - -/** - * @name: FGmacReset - * @msg: reset FGMAC controller - * @param {FGmac} *instance_p, instance of FGmac controller - * @return err code information, FGMAC_SUCCESS indicates success,others indicates failed - */ -static FError FGmacReset(FGmac *instance_p) -{ - FASSERT(instance_p); - FGmacMacAddr mac_addr; - uintptr base_addr = instance_p->config.base_addr; - FError ret = FGMAC_SUCCESS; - u32 reg_val; - - - /* backup mac address before software reset */ - memset(mac_addr, 0, sizeof(mac_addr)); - FGmacGetMacAddr(base_addr, mac_addr); - - /* disable all gmac & dma intr */ - FGmacSetInterruptMask(instance_p, FGMAC_CTRL_INTR, FGMAC_ISR_MASK_ALL_BITS); - FGmacSetInterruptMask(instance_p, FGMAC_DMA_INTR, FGMAC_DMA_INTR_ENA_ALL_MASK); - - /* stop gmac/dma tx and rx */ - FGmacStop(instance_p); - - /* do software reset per init */ - ret = FGmacSoftwareReset(base_addr, FGMAC_RETRY_TIMES); - - - /* disable gmac & dma interrupts */ - FGmacSetInterruptMask(instance_p, FGMAC_CTRL_INTR, FGMAC_ISR_MASK_ALL_BITS); - FGmacSetInterruptMask(instance_p, FGMAC_DMA_INTR, FGMAC_DMA_INTR_ENA_ALL_MASK); - - /* recover mac address after softwate reset */ - FGmacSetMacAddr(base_addr, mac_addr); - - return ret; -} - -/** - * @name: FGmacControllerSpeedConfig - * @msg: fgmac speed configuration - * @param {FGmac} *instance_p, instance of FGmac controller - * @param {u32} speed, speed value - * @return {*} - */ -void FGmacControllerSpeedConfig(FGmac *instance_p, u32 speed) -{ - FASSERT(instance_p); - uintptr base_addr = instance_p->config.base_addr; - u32 reg_val = 0; - - /* MAC配置寄存器 */ - reg_val = FGMAC_READ_REG32(base_addr, FGMAC_CONF_OFFSET); - - /* 设置通信速度FES=1000Mbps */ - if (speed == FGMAC_PHY_SPEED_1000) - { - reg_val &= (~FGMAC_CONF_PORTSELECT); - reg_val &= (~FGMAC_CONF_FES); - } - - /* 设置通信速度FES=100Mbps */ - if (speed == FGMAC_PHY_SPEED_100) - { - reg_val |= FGMAC_CONF_PORTSELECT; - reg_val |= FGMAC_CONF_FES; - } - - /* 设置通信速度FES=10Mbps */ - if (speed == FGMAC_PHY_SPEED_10) - { - reg_val |= FGMAC_CONF_PORTSELECT; - reg_val &= (~FGMAC_CONF_FES); - } - - FGMAC_WRITE_REG32(base_addr, FGMAC_CONF_OFFSET, reg_val); -} - -/** - * @name: FGmacControllerDuplexConfig - * @msg: fgmac deplex mode configuration - * @param {FGmac} *instance_p, instance of FGmac controller - * @param {u32} duplex, duplex mode - * @return {*} - */ -void FGmacControllerDuplexConfig(FGmac *instance_p, u32 duplex) -{ - FASSERT(instance_p); - uintptr base_addr = instance_p->config.base_addr; - u32 reg_val = 0; - - /* MAC配置寄存器 */ - reg_val = FGMAC_READ_REG32(base_addr, FGMAC_CONF_OFFSET); - - /* 设置双工模式 */ - if (duplex == FGMAC_PHY_MODE_FULLDUPLEX) - { - reg_val |= FGMAC_CONF_DUPLEX_MODE; - } - else - { - reg_val &= ~FGMAC_CONF_DUPLEX_MODE; - } - - FGMAC_WRITE_REG32(base_addr, FGMAC_CONF_OFFSET, reg_val); - -} - -/** - * @name: FGmacControllerConfigure - * @msg: config FGMAC controller - * @param {FGmac} *instance_p, instance of FGmac controller - * @return err code information, FGMAC_SUCCESS indicates success,others indicates failed - */ -static FError FGmacControllerConfigure(FGmac *instance_p) -{ - FASSERT(instance_p); - FGmacMacAddr mac_addr; - uintptr base_addr = instance_p->config.base_addr; - FError ret = FGMAC_SUCCESS; - u32 reg_val = 0; - - /********gmac ctrl reg init*********/ - /* Set the WD bit according to ETH Watchdog value */ - /* Set the JD: bit according to ETH Jabber value */ - /* Set the IFG bit according to ETH InterFrameGap value */ - /* Set the DCRS bit according to ETH CarrierSense value */ - /* Set the FES bit according to ETH Speed value */ - /* Set the DO bit according to ETH ReceiveOwn value */ - /* Set the LM bit according to ETH LoopbackMode value */ - /* Set the DM bit according to ETH Mode value */ - /* Set the IPCO bit according to ETH ChecksumOffload value */ - /* Set the DR bit according to ETH RetryTransmission value */ - /* Set the ACS bit according to ETH AutomaticPadCRCStrip value */ - /* Set the BL bit according to ETH BackOffLimit value */ - /* Set the DC bit according to ETH DeferralCheck value */ - - /* MAC配置寄存器 */ - reg_val = FGMAC_READ_REG32(base_addr, FGMAC_CONF_OFFSET); - - /* 使能载波侦听DCRS、失能环回模式LM */ - reg_val &= ~(FGMAC_CONF_DCRS | FGMAC_CONF_LOOPBACK_MODE); - - /* 设置帧内间隔IFG */ - reg_val |= FGMAC_CONF_IFG(0); - - /* 1000Mbps default */ - reg_val &= (~FGMAC_CONF_PORTSELECT); - reg_val &= (~FGMAC_CONF_FES); - - /* 双工模式 */ - if (instance_p->config.duplex_mode) - { - reg_val |= FGMAC_CONF_DUPLEX_MODE; - } - else - { - reg_val &= ~FGMAC_CONF_DUPLEX_MODE; - } - - /* 使能校验和卸载IPS */ - if (FGMAC_CHECKSUM_BY_HARDWARE == instance_p->config.cheksum_mode) - { - reg_val |= FGMAC_CONF_IPC; - } - else - { - reg_val &= ~FGMAC_CONF_IPC; - } - - /* 重发DR=1, 重发一次 */ - reg_val |= FGMAC_CONF_DISABLE_RETRY; - - /* 自动 PAD/ CRC 剥线, 全双工模式保留 */ - reg_val |= FGMAC_CONF_ACS; - - /* 后退限制, 全双工模式保留 */ - reg_val |= FGMAC_CONF_BL(0); - - /* 延期检查禁用 */ - reg_val &= ~FGMAC_CONF_DC; - - /* 使能类型帧的CRC剥离、禁用看门狗WD、禁用Jabber JD、帧突发启用BE、不能自接收DO(全双工保留)*/ - reg_val |= (FGMAC_CONF_CST | FGMAC_CONF_WD | FGMAC_CONF_JD | FGMAC_CONF_BE | FGMAC_CONF_DO); - - FGMAC_WRITE_REG32(base_addr, FGMAC_CONF_OFFSET, reg_val); - - /********gmac filter reg init*********/ - /* Set the RA bit according to ETH ReceiveAll value */ - /* Set the SAF and SAIF bits according to ETH SourceAddrFilter value */ - /* Set the PCF bit according to ETH PassControlFrames value */ - /* Set the DBF bit according to ETH BroadcastFramesReception value */ - /* Set the DAIF bit according to ETH DestinationAddrFilter value */ - /* Set the PR bit according to ETH PromiscuousMode value */ - /* Set the PM, HMC and HPF bits according to ETH MulticastFramesFilter value */ - /* Set the HUC and HPF bits according to ETH UnicastFramesFilter value */ - - /* MAC帧过滤寄存器 */ - reg_val = FGMAC_READ_REG32(base_addr, FGMAC_FRAME_FILTER_OFFSET); - - /* 全部接收RA */ - reg_val |= FGMAC_FRAME_FILTER_RA; - - /* 通过控制帧PCF 10b */ - reg_val |= FGMAC_FRAME_FILTER_PCF(2); - - /* 失能禁用广播帧DBF */ - reg_val &= ~FGMAC_FRAME_FILTER_DBF; - - /* 失能通过所有多播PM */ - reg_val &= ~FGMAC_FRAME_FILTER_PM; - - /* 失能目的地址反向过滤DAIF */ - reg_val &= ~FGMAC_FRAME_FILTER_DAIF; - - /* 失能哈希单播PR */ - reg_val &= ~FGMAC_FRAME_FILTER_PR; - FGMAC_WRITE_REG32(base_addr, FGMAC_FRAME_FILTER_OFFSET, reg_val); - - /********hash reg*********/ - FGMAC_WRITE_REG32(base_addr, FGMAC_HASH_HIGH_OFFSET, 0x0); - FGMAC_WRITE_REG32(base_addr, FGMAC_HASH_LOW_OFFSET, 0x0); - - /********gmac flow ctrl reg init*********/ - - /* Set the PT bit according to ETH PauseTime value */ - /* Set the DZPQ bit according to ETH ZeroQuantaPause value */ - /* Set the PLT bit according to ETH PauseLowThreshold value */ - /* Set the UP bit according to ETH UnicastPauseFrameDetect value */ - /* Set the RFE bit according to ETH ReceiveFlowControl value */ - /* Set the TFE bit according to ETH TransmitFlowControl value */ - reg_val = FGMAC_READ_REG32(base_addr, FGMAC_FLOW_CTRL_OFFSET); - /* 禁用自动零暂停帧生成DZPQ */ - reg_val |= FGMAC_FLOW_DZPQ; - - /* 暂停低阈值PLT */ - reg_val |= FGMAC_FLOW_PLT(0); - - /* 禁用接收流控制RFE */ - reg_val &= ~FGMAC_FLOW_RFE; - - /* 禁用传输流控制TFE */ - reg_val &= ~FGMAC_FLOW_TFE; - FGMAC_WRITE_REG32(base_addr, FGMAC_FLOW_CTRL_OFFSET, reg_val); - - /********vlan tag reg*********/ - /* Set the ETV bit according to ETH VLANTagComparison value */ - /* Set the VL bit according to ETH VLANTagIdentifier value */ - /* 接收帧的 VLAN 标记标识符 VL */ - reg_val = FGMAC_VLAN_TAG_VL(0); - /* 设置VLAN 标记比较的位数ETV 1-12bit 0-16bit */ - reg_val &= ~FGMAC_VLAN_TAG_ETV; - FGMAC_WRITE_REG32(base_addr, FGMAC_VLAN_TAG_OFFSET, reg_val); - - return ret; -} - -static FError FGmacDmaConfigure(FGmac *instance_p) -{ - FASSERT(instance_p); - u32 reg_val; - FError ret = FGMAC_SUCCESS; - uintptr base_addr = instance_p->config.base_addr; - - /********DMA总线模式寄存器*********/ - /* Set the AAL bit according to ETH AddressAlignedBeats value */ - /* Set the FB bit according to ETH FixedBurst value */ - /* Set the RPBL and 4*PBL bits according to ETH RxDMABurstLength value */ - /* Set the PBL and 4*PBL bits according to ETH TxDMABurstLength value */ - /* Set the Enhanced DMA descriptors bit according to ETH EnhancedDescriptorFormat value*/ - /* Set the DSL bit according to ETH DesciptorSkipLength value */ - /* Set the PR and DA bits according to ETH DMAArbitration value */ - reg_val = FGMAC_READ_REG32(base_addr, FGMAC_DMA_BUS_MODE_OFFSET); - reg_val |= FGMAC_DMA_BUS_AAL; - /* 使用单独的 PBL USP */ - reg_val |= FGMAC_DMA_BUS_USP; - /* RxDMA PBL RPBL */ - reg_val |= FGMAC_DMA_BUS_RPBL(32); - - /* 固定突发 FB */ - reg_val |= FGMAC_DMA_BUS_FB; - - /* 控制 RxDMA 和 TxDMA 之间的加权循环仲裁中的优先级比率 PR */ - reg_val |= FGMAC_DMA_BUS_PR(0); - - /* 可编程突发长度 PBL */ - reg_val |= FGMAC_DMA_BUS_PBL(32); - - /* 交替描述表大小 ATDS */ - reg_val |= FGMAC_DMA_BUS_ATDS; - - - FGMAC_WRITE_REG32(base_addr, FGMAC_DMA_BUS_MODE_OFFSET, reg_val); - - /* dma set bus mode */ - // FGMAC_WRITE_REG32(base_addr, FGMAC_DMA_BUS_MODE_OFFSET, FGMAC_DMA_BUS_INIT); - - /********DMA操作模式寄存器*********/ - /* Set the DT bit according to ETH DropTCPIPChecksumErrorFrame value */ - /* Set the RSF bit according to ETH ReceiveStoreForward value */ - /* Set the DFF bit according to ETH FlushReceivedFrame value */ - /* Set the TSF bit according to ETH TransmitStoreForward value */ - /* Set the TTC bit according to ETH TransmitThresholdControl value */ - /* Set the FEF bit according to ETH ForwardErrorFrames value */ - /* Set the FUF bit according to ETH ForwardUndersizedGoodFrames value */ - /* Set the RTC bit according to ETH ReceiveThresholdControl value */ - /* Set the OSF bit according to ETH SecondFrameOperate value */ - reg_val = FGMAC_READ_REG32(base_addr, FGMAC_DMA_OP_OFFSET); - reg_val &= FGMAC_DMA_OP_CLEAR_MASK; - /* 丢弃 TCP / IP 校验和错误帧 DT */ - reg_val &= ~FGMAC_DMA_OP_DT; - - /* 接收存储转发 RSF */ - reg_val |= FGMAC_DMA_OP_RSF; - - /* 刷新正在接收的帧 DFF */ - reg_val &= ~FGMAC_DMA_OP_DFF; - - /* 发送存储和转发 TSF */ - reg_val |= FGMAC_DMA_OP_TSF; - - /* 传输阈值控制 TTC */ - reg_val |= FGMAC_DMA_OP_TTC(7); - - /* 在第二帧上操作 OSF */ - reg_val |= FGMAC_DMA_OP_OSF; - FGMAC_WRITE_REG32(base_addr, FGMAC_DMA_OP_OFFSET, reg_val); - - /* 刷新DMA发送FIFO FTF */ - ret = FGmacFlushTxFifo(base_addr, FGMAC_RETRY_TIMES); - - if (FGMAC_SUCCESS != ret) - { - FGMAC_ERROR("Gmac flush failed."); - } - - /* AXI 突发长度 BLEN 16,8,4 */ - reg_val = (FGMAC_DMA_AXI_BUS_MOD_BLEN16 | FGMAC_DMA_AXI_BUS_MOD_BLEN8 | FGMAC_DMA_AXI_BUS_MOD_BLEN4); - FGMAC_WRITE_REG32(base_addr, FGMAC_DMA_AXI_BUS_MOD_OFFSET, reg_val); - - return ret; -} diff --git a/bsp/phytium/libraries/standalone/drivers/eth/fgmac/fgmac.h b/bsp/phytium/libraries/standalone/drivers/eth/fgmac/fgmac.h deleted file mode 100644 index 03e5fbace1..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/eth/fgmac/fgmac.h +++ /dev/null @@ -1,260 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fgmac.h - * Date: 2022-04-06 14:46:52 - * LastEditTime: 2022-04-06 14:46:58 - * Description:  This file is for gmac driver. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2021/07/13 first release - */ - - -#ifndef FGMAC_H -#define FGMAC_H - -#include "ftypes.h" -#include "fassert.h" -#include "ferror_code.h" -#include "fkernel.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/***************************** Include Files *********************************/ - -#define FGMAC_PHY_MAX_NUM 32U - -/************************** Constant Definitions *****************************/ -#define FGMAC_SUCCESS FT_SUCCESS -#define FGMAC_ERR_TIMEOUT FT_MAKE_ERRCODE(ErrModBsp, ErrBspEth, 1) -#define FGMAC_ERR_INVALID_DMA_MEM FT_MAKE_ERRCODE(ErrModBsp, ErrBspEth, 2) -#define FGMAC_ERR_NOT_READY FT_MAKE_ERRCODE(ErrModBsp, ErrBspEth, 3) -#define FGMAC_ERR_TRANS_FAILED FT_MAKE_ERRCODE(ErrModBsp, ErrBspEth, 4) -#define FGMAC_ERR_PHY_NOT_SUPPORT FT_MAKE_ERRCODE(ErrModBsp, ErrBspEth, 5) -#define FGMAC_ERR_PHY_IS_NOT_FOUND FT_MAKE_ERRCODE(ErrModBsp, ErrBspEth, 6) -#define FGMAC_ERR_FAILED FT_MAKE_ERRCODE(ErrModBsp, ErrBspEth, 7) -#define FGMAC_ERR_PHY_AUTO_FAILED FT_MAKE_ERRCODE(ErrModBsp, ErrBspEth, 8) - - -#define FGMAC_ERR_CODE_PREFIX FGMAC_ERR_TIMEOUT & (FT_ERRCODE_SYS_MODULE_MASK | FT_ERRCODE_SUB_MODULE_MASK) -#define FGMAC_NUM_OF_ERR_CODE 5 - -/********发送描述符********/ - -/* TDES0 包含发送的帧状态和描述符所有权信息 */ -#define FGMAC_DMA_TDES0_DEFERRED BIT(0) -#define FGMAC_DMA_TDES0_UNDERFLOW_ERROR BIT(1) -#define FGMAC_DMA_TDES0_EXCESSIVE_DEFERRAL BIT(2) -#define FGMAC_DMA_TDES0_COLLISION_COUNT_MASK GENMASK(6, 3) -#define FGMAC_DMA_TDES0_VLAN_FRAME BIT(7) -#define FGMAC_DMA_TDES0_EXCESSIVE_COLLISIONS BIT(8) -#define FGMAC_DMA_TDES0_LATE_COLLISION BIT(9) -#define FGMAC_DMA_TDES0_NO_CARRIER BIT(10) -#define FGMAC_DMA_TDES0_LOSS_CARRIER BIT(11) -#define FGMAC_DMA_TDES0_PAYLOAD_ERROR BIT(12) -#define FGMAC_DMA_TDES0_FRAME_FLUSHED BIT(13) -#define FGMAC_DMA_TDES0_JABBER_TIMEOUT BIT(14) -#define FGMAC_DMA_TDES0_ERROR_SUMMARY BIT(15) -#define FGMAC_DMA_TDES0_IP_HEADER_ERROR BIT(16) -#define FGMAC_DMA_TDES0_TIME_STAMP_STATUS BIT(17) /* 指示已捕获相应发送帧的时间戳 */ -#define FGMAC_DMA_TDES0_OWN BIT(31) /* 该位表示描述符归 DMA 所有 */ - -/* TDES1 包含缓冲区大小和控制描述符链/环和正在传输的帧的其他位 */ -#define FGMAC_DMA_TDES1_BUFFER1_SIZE_MASK GENMASK(10, 0) -#define FGMAC_DMA_TDES1_BUFFER2_SIZE_MASK GENMASK(21, 11) -#define FGMAC_DMA_TDES1_BUFFER2_SIZE_SHIFT 11 -#define FGMAC_DMA_TDES1_TIME_STAMP_ENABLE BIT(22) -#define FGMAC_DMA_TDES1_DISABLE_PADDING BIT(23) -#define FGMAC_DMA_TDES1_SECOND_ADDRESS_CHAINED BIT(24) -#define FGMAC_DMA_TDES1_END_RING BIT(25) -#define FGMAC_DMA_TDES1_CRC_DISABLE BIT(26) -#define FGMAC_DMA_TDES1_CHECKSUM_INSERTION_MASK GENMASK(28, 27) -#define FGMAC_DMA_TDES1_CHECKSUM_INSERTION_SHIFT 27 -#define FGMAC_DMA_TDES1_FIRST_SEGMENT BIT(29) -#define FGMAC_DMA_TDES1_LAST_SEGMENT BIT(30) -#define FGMAC_DMA_TDES1_INTERRUPT BIT(31) - -/********接收描述符********/ - -/* RDES0 包含接收的帧状态,帧长度和描述符所有权信息 */ -#define FGMAC_DMA_RDES0_PAYLOAD_CSUM_ERR BIT(0) -#define FGMAC_DMA_RDES0_CRC_ERROR BIT(1) -#define FGMAC_DMA_RDES0_DRIBBLING BIT(2) -#define FGMAC_DMA_RDES0_MII_ERROR BIT(3) -#define FGMAC_DMA_RDES0_RECEIVE_WATCHDOG BIT(4) -#define FGMAC_DMA_RDES0_FRAME_TYPE BIT(5) -#define FGMAC_DMA_RDES0_COLLISION BIT(6) -#define FGMAC_DMA_RDES0_IPC_CSUM_ERROR BIT(7) -#define FGMAC_DMA_RDES0_LAST_DESCRIPTOR BIT(8) -#define FGMAC_DMA_RDES0_FIRST_DESCRIPTOR BIT(9) -#define FGMAC_DMA_RDES0_VLAN_TAG BIT(10) -#define FGMAC_DMA_RDES0_OVERFLOW_ERROR BIT(11) -#define FGMAC_DMA_RDES0_LENGTH_ERROR BIT(12) -#define FGMAC_DMA_RDES0_SA_FILTER_FAIL BIT(13) -#define FGMAC_DMA_RDES0_DESCRIPTOR_ERROR BIT(14) -#define FGMAC_DMA_RDES0_ERROR_SUMMARY BIT(15) -#define FGMAC_DMA_RDES0_FRAME_LEN_MASK (0x3FFF << 16) /* GENMASK(29, 16)*/ -#define FGMAC_DMA_RDES0_FRAME_LEN_SHIFT 16 -#define FGMAC_DMA_RDES0_DA_FILTER_FAIL BIT(30) -#define FGMAC_DMA_RDES0_OWN BIT(31) - -/* RDES1 包含缓冲区大小和控制描述符链/环的其他位 */ -#define FGMAC_DMA_RDES1_BUFFER1_SIZE_MASK GENMASK(10, 0) -#define FGMAC_DMA_RDES1_BUFFER2_SIZE_MASK GENMASK(21, 11) -#define FGMAC_DMA_RDES1_BUFFER2_SIZE_SHIFT 11 -#define FGMAC_DMA_RDES1_SECOND_ADDRESS_CHAINED BIT(24) -#define FGMAC_DMA_RDES1_END_RING BIT(25) -#define FGMAC_DMA_RDES1_DISABLE_IC BIT(31) - -/* Operational Mode */ -enum -{ - FGMAC_CHECKSUM_BY_SOFTWARE = 0, - FGMAC_CHECKSUM_BY_HARDWARE -}; /* software checksum or hardware checksum */ - -enum -{ - FGMAC_TX_COMPLETE_EVT = 0, - FGMAC_RX_COMPLETE_EVT, - FGMAC_LINK_STATUS_EVT, - FGMAC_PHY_STATUS_EVT, - FGMAC_DMA_ERR_EVT, - - FGMAC_INTR_EVT_NUM -}; /* interrupt event type */ - - -/**************************** Type Definitions *******************************/ - -/** - * This typedef contains configuration information for the device. - */ -typedef struct -{ - u32 instance_id; /* device instance id */ - uintptr base_addr; /* device base address */ - u32 irq_num; /* irq num */ - u32 irq_prority; /* device intrrupt priority */ - u32 cheksum_mode; /* hardware or software checksum */ - u32 duplex_mode; /* selects the MAC duplex mode: Half-Duplex or Full-Duplex mode */ - u32 max_packet_size; /* max num of bytes in frame transfer */ - u32 mdc_clk_hz; /* MDC clock access PHY. [1.0MHz ~2.5MHz] */ - boolean en_auto_negtiation; /* auto-negotiation or not */ - u32 speed; /* sets the Ethernet speed: 10/100/1000 Mbps. */ - -} FGmacConfig; /* FGMAC 驱动配置数据 */ - -/** - * This typedef contains driver instance data. The user is required to allocate a - * variable of this type for every device in the system. A pointer - * to a variable of this type is then passed to the driver API functions. - */ - -typedef struct -{ - volatile u32 status; - u32 ctrl; - u32 buf_addr; - u32 next; -} FGmacDmaDesc; /* FGMAC DMA描述符 */ - -typedef struct -{ - u32 desc_idx; /* For Current Desc position */ - u32 desc_buf_idx; /* For Current Desc buffer buf position */ - u32 desc_max_num; /* Max Number for Desc and Desc buffer */ - u8 *desc_buf_base; /* Desc buffer Base */ -} FGmacRingDescData; /* FGMAC DMA描述符表(链式)相关数据 */ - -typedef void (*FGmacEvtHandler)(void *pCtrl); - -typedef struct -{ - FGmacConfig config; /* Current active configs */ - u32 is_ready; /* Device is initialized and ready */ - FGmacRingDescData rx_ring; /* RX DMA descriptor data (idx, length) */ - volatile FGmacDmaDesc *rx_desc; /* RX DMA descriptor table in ring */ - FGmacRingDescData tx_ring; /* TX DMA descriptor data (idx, length) */ - volatile FGmacDmaDesc *tx_desc; /* TX DMA descriptor table in ring */ - FGmacEvtHandler evt_handler[FGMAC_INTR_EVT_NUM]; /* User registered interrupt handler */ - u32 phy_valid_mask; /* phy valid addr sequence mask */ - u32 phy_speed; - u32 phy_addr; /* phy max valid addr, or the unique value */ - u16 phy_id1; /*phy tag,only value to identify phy*/ -} FGmac; /* FGMAC 驱动控制数据 */ - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ -/* 获取FGMAC驱动的默认配置参数 */ -const FGmacConfig *FGmacLookupConfig(u32 instance_id); - -/* 完成FGMAC驱动实例的初始化,使之可以使用 */ -FError FGmacCfgInitialize(FGmac *instance_p, const FGmacConfig *cofig_p); - -/* 完成FGMAC驱动实例去使能,清零实例数据 */ -FError FGmacDeInitialize(FGmac *instance_p); - -/* 配置FGMAC的发送DMA描述符和缓冲区 */ -FError FGmacSetupTxDescRing(FGmac *instance_p, volatile FGmacDmaDesc *tx_desc_tbl, - u8 *tx_buf, const fsize_t tx_pre_buf_len, const fsize_t tx_buf_num); - -/* 配置FGMAC的接收DMA描述符和缓冲区 */ -FError FGmacSetupRxDescRing(FGmac *instance_p, volatile FGmacDmaDesc *rx_desc_tbl, - u8 *rx_buf, const fsize_t rx_pre_buf_len, const fsize_t rx_buf_num); - -/* FGMAC中断处理函数 */ -void FGmacInterruptHandler(s32 vector, void *param); - -/* 注册FGMAC中断事件处理函数 */ -void FGmacRegisterEvtHandler(FGmac *instance_p, u32 evt, FGmacEvtHandler handler); - -/* 使能FGMAC DMA,使之可以接收/发送数据 */ -FError FGmacStartTrans(FGmac *instance_p); - -/* 去使能FGMAC DMA, 使之不再能接收/发送数据 */ -FError FGmacStopTrans(FGmac *instance_p); - -/* 通过FGMAC接收数据帧 */ -FError FGmacRecvFrame(FGmac *instance_p); - -/* 通过FGMAC发送数据帧 */ -FError FGmacSendFrame(FGmac *instance_p, u32 frame_len); - -/* 设置FGMAC中断屏蔽位 */ -void FGmacSetInterruptMask(FGmac *instance_p, u32 intr_type, u32 mask); - -/* 设置FGMAC中断使能位 */ -void FGmacSetInterruptUmask(FGmac *instance_p, u32 intr_type, u32 mask); - -/*fgmac deplex mode configuration */ -void FGmacControllerDuplexConfig(FGmac *instance_p, u32 duplex); - -/*fgmac speed configuration */ -void FGmacControllerSpeedConfig(FGmac *instance_p, u32 speed); - -#ifdef __cplusplus -} -#endif - - -#endif diff --git a/bsp/phytium/libraries/standalone/drivers/eth/fgmac/fgmac_dma.c b/bsp/phytium/libraries/standalone/drivers/eth/fgmac/fgmac_dma.c deleted file mode 100644 index e7dc4a6602..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/eth/fgmac/fgmac_dma.c +++ /dev/null @@ -1,345 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fgmac_dma.c - * Date: 2022-04-06 14:46:52 - * LastEditTime: 2022-04-06 14:46:58 - * Description:  This file implements dma descriptor ring related functions. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2021/06/04 first release - */ - -/***************************** Include Files *********************************/ - -#include -#include "fassert.h" -#include "fkernel.h" -#include "fcache.h" -#include "fdebug.h" -#include "fgmac.h" -#include "fgmac_hw.h" - -/************************** Constant Definitions *****************************/ -#if defined(__aarch64__) - #define FGMAC_DMA_IS_64_BIT_MEMORY(addr) (GENMASK_ULL(63, 32) & (uintptr)(addr)) -#else - #define FGMAC_DMA_IS_64_BIT_MEMORY(addr) (FALSE) -#endif - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ -#define FGMAC_DEBUG_TAG "FGMAC-DMA" -#define FGMAC_ERROR(format, ...) FT_DEBUG_PRINT_E(FGMAC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FGMAC_WARN(format, ...) FT_DEBUG_PRINT_W(FGMAC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FGMAC_INFO(format, ...) FT_DEBUG_PRINT_I(FGMAC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FGMAC_DEBUG(format, ...) FT_DEBUG_PRINT_D(FGMAC_DEBUG_TAG, format, ##__VA_ARGS__) - -/************************** Variable Definitions *****************************/ - -/************************** Function Prototypes ******************************/ - -/** - * @name: FGmacSetupTxDescRing - * @msg: 配置FGMAC的接收DMA描述符和缓冲区 - * @param {FGmac *}instance_p 驱动控制数据 - * {volatile FGmacDmaDesc *} rx_desc_tbl 接收DMA描述符表(数组) - * {u8} *rx_buf 接收DMA缓冲区(数组,每一个描述符对应一个缓冲区) - * {const fsize_t} rx_pre_buf_len 单个DMA缓冲区的字节数 - * {const fsize_t} rx_buf_num DMA描述符或者DMA缓存区的数目 - * @return {FError} RX DMA初始化的错误码信息,FGMAC_SUCCESS 表示RX DMA初始化成功,其它返回值表示RX DMA初始化失败 - * @note 传入的rx_desc_tbl和rx_buf必须为32位空间地址 - */ -FError FGmacSetupRxDescRing(FGmac *instance_p, volatile FGmacDmaDesc *rx_desc_tbl, - u8 *rx_buf, const fsize_t rx_pre_buf_len, const fsize_t rx_buf_num) -{ - FASSERT(instance_p && rx_desc_tbl && rx_buf); - u32 i; - volatile FGmacDmaDesc *cur_rx_desc; - FGmacRingDescData *rx_ring_p = &instance_p->rx_ring; - uintptr base_addr = instance_p->config.base_addr; - void *desc_end = (void *)(rx_desc_tbl + rx_buf_num * sizeof(FGmacDmaDesc)); - void *buf_end = (void *)(rx_buf + rx_buf_num * rx_pre_buf_len); - - /* check if end address of descriptor or buffer is in 64 bit memory, - if TRUE, return error because DMA register can only hold 32 bit memory address */ - if ((FGMAC_DMA_IS_64_BIT_MEMORY(desc_end)) || (FGMAC_DMA_IS_64_BIT_MEMORY(buf_end))) - { - FGMAC_ERROR("Invalid rx descriptor memory %p or rx dma buf memory %p", - desc_end, buf_end); - return FGMAC_ERR_INVALID_DMA_MEM; - } - - /* init rx dma ring data */ - memset(rx_ring_p, 0, sizeof(*rx_ring_p)); - rx_ring_p->desc_max_num = rx_buf_num; /* total num of rx desc and rx buf */ - rx_ring_p->desc_idx = 0; /* idx of rx desc */ - rx_ring_p->desc_buf_idx = 0; /* idx of rx buf */ - rx_ring_p->desc_buf_base = rx_buf; /* base addr of rx buf */ - - /* init rx dma descriptor table */ - memset((void *)rx_desc_tbl, 0, sizeof(FGmacDmaDesc) * rx_buf_num); - - for (i = 0; i < rx_buf_num; i++) - { - cur_rx_desc = rx_desc_tbl + i; - cur_rx_desc->status = FGMAC_DMA_RDES0_OWN; - cur_rx_desc->ctrl = (FGMAC_DMA_RDES1_BUFFER1_SIZE_MASK & rx_pre_buf_len); - FCacheDCacheInvalidateRange((uintptr)&rx_buf[i * rx_pre_buf_len], rx_pre_buf_len); - cur_rx_desc->buf_addr = (u32)((uintptr)&rx_buf[i * rx_pre_buf_len]); - - if ((rx_buf_num - 1) == i) - { - cur_rx_desc->ctrl |= FGMAC_DMA_RDES1_END_RING; - } - } - - /* flush descriptor */ - instance_p->rx_desc = rx_desc_tbl; - FCacheDCacheInvalidateRange((uintptr)instance_p->rx_desc, sizeof(FGmacDmaDesc) * rx_buf_num); - - FGMAC_WRITE_REG32(base_addr, FGMAC_DMA_RX_LIST_BASE_OFFSET, (u32)(uintptr)rx_desc_tbl); - return FGMAC_SUCCESS; -} - -/** - * @name: FGmacSetupTxDescRing - * @msg: 配置FGMAC的发送DMA描述符和缓冲区 - * @param {FGmac *}instance_p 驱动控制数据 - * {volatile FGmacDmaDesc *} tx_desc_tbl 发送DMA描述符表(数组) - * {u8} *tx_buf 发送DMA缓冲区(数组,每一个描述符对应一个缓冲区) - * {const fsize_t} tx_pre_buf_len 单个DMA缓冲区的字节数 - * {const fsize_t} tx_buf_num DMA描述符或者DMA缓存区的数目 - * @return {FError} TX DMA初始化的错误码信息,FGMAC_SUCCESS 表示TX DMA初始化成功,其它返回值表示TX DMA初始化失败 - * @note 传入的tx_desc_tbl和tx_buf必须为32位空间地址 - */ -FError FGmacSetupTxDescRing(FGmac *instance_p, volatile FGmacDmaDesc *tx_desc_tbl, - u8 *tx_buf, const fsize_t tx_pre_buf_len, const fsize_t tx_buf_num) -{ - FASSERT(instance_p && tx_desc_tbl && tx_buf); - u32 i; - volatile FGmacDmaDesc *cur_tx_desc; - FGmacRingDescData *tx_ring_p = &instance_p->tx_ring; - uintptr base_addr = instance_p->config.base_addr; - void *desc_end = (void *)(tx_desc_tbl + tx_buf_num * sizeof(FGmacDmaDesc)); - void *buf_end = (void *)(tx_buf + tx_buf_num * tx_pre_buf_len); - - /* check if end address of descriptor or buffer is in 64 bit memory, - if TRUE, return error because DMA register can only hold 32 bit memory address */ - if ((FGMAC_DMA_IS_64_BIT_MEMORY(desc_end)) || (FGMAC_DMA_IS_64_BIT_MEMORY(buf_end))) - { - FGMAC_ERROR("Invalid rx descriptor memory %p or rx dma buf memory %p", - desc_end, buf_end); - return FGMAC_ERR_INVALID_DMA_MEM; - } - - /* setup DMA descriptor ring data */ - memset(tx_ring_p, 0, sizeof(*tx_ring_p)); - tx_ring_p->desc_max_num = tx_buf_num; - tx_ring_p->desc_idx = 0; - tx_ring_p->desc_buf_idx = 0; - tx_ring_p->desc_buf_base = tx_buf; - - /* setup DMA descriptor */ - memset((void *)tx_desc_tbl, 0, tx_buf_num * sizeof(FGmacDmaDesc)); - tx_desc_tbl[tx_buf_num - 1].ctrl |= FGMAC_DMA_TDES1_END_RING; - for (i = 0; i < tx_buf_num; i++) - { - cur_tx_desc = tx_desc_tbl + i; - FCacheDCacheInvalidateRange((uintptr)&tx_buf[i * tx_pre_buf_len], tx_pre_buf_len); - cur_tx_desc->buf_addr = (u32)((uintptr)&tx_buf[i * tx_pre_buf_len]); - cur_tx_desc->status = 0; - } - - /* flush descriptor */ - instance_p->tx_desc = tx_desc_tbl; - FCacheDCacheInvalidateRange((uintptr)instance_p->tx_desc, tx_buf_num * sizeof(FGmacDmaDesc)); - - FGMAC_WRITE_REG32(base_addr, FGMAC_DMA_TX_LIST_BASE_OFFSET, (u32)(uintptr)tx_desc_tbl); - return FGMAC_SUCCESS; -} - -/** - * @name: FGmacStartTrans - * @msg: 使能FGMAC DMA,使之可以接收/发送数据 - * @return {FError} FGMAC_SUCCESS 表示启动成功,其它返回值表示启动失败 - * @param {FGmac} *instance_p 驱动控制数据 - * @note 调用函数前需要确保FGMAC驱动初始化成功 - */ -FError FGmacStartTrans(FGmac *instance_p) -{ - FASSERT(instance_p); - if (FT_COMPONENT_IS_READY != instance_p->is_ready) - { - FGMAC_ERROR("Device is already initialized!!!"); - return FGMAC_ERR_NOT_READY; - } - - FGmacStartDmaTrans(instance_p->config.base_addr); - return FGMAC_SUCCESS; -} - -/** - * @name: FGmacStopTrans - * @msg: 去使能FGMAC DMA, 使之不再能接收/发送数据 - * @return {FError} FGMAC_SUCCESS 表示去启动成功,其它返回值表示去启动失败 - * @param {FGmac} *instance_p 驱动控制数据 - * @note 调用函数前需要确保FGMAC驱动初始化成功 - */ -FError FGmacStopTrans(FGmac *instance_p) -{ - FASSERT(instance_p); - if (FT_COMPONENT_IS_READY != instance_p->is_ready) - { - FGMAC_ERROR("Device is already initialized!!!"); - return FGMAC_ERR_NOT_READY; - } - - FGmacStopDmaTrans(instance_p->config.base_addr); - return FGMAC_SUCCESS; -} - -/** - * @name: FGmacRecvFrame - * @msg: 通过FGMAC接收数据帧 - * @return {FError} FGMAC_SUCCESS 表示接收数据帧成功,其它返回值表示接收数据帧失败 - * @param {FGmac} *instance_p 驱动控制数据 - * @note 调用函数前需要确保FGMAC驱动初始化成功 - */ -FError FGmacRecvFrame(FGmac *instance_p) -{ - FASSERT(instance_p); - FGmacRingDescData *rx_ring = &instance_p->rx_ring; - volatile FGmacDmaDesc *cur_rx_desc = &instance_p->rx_desc[rx_ring->desc_idx]; - u32 desc_cnt = 0; - u32 flag = (FGMAC_DMA_RDES0_FIRST_DESCRIPTOR | FGMAC_DMA_RDES0_LAST_DESCRIPTOR); - - while ((0 == (FGMAC_DMA_RDES0_OWN & cur_rx_desc->status)) && - (desc_cnt < rx_ring->desc_max_num)) - { - desc_cnt++; - - if (FGMAC_DMA_RDES0_FIRST_DESCRIPTOR == (flag & cur_rx_desc->status)) - { - rx_ring->desc_buf_idx = rx_ring->desc_idx; - FGMAC_DMA_INC_DESC(rx_ring->desc_idx, rx_ring->desc_max_num); - cur_rx_desc = &instance_p->rx_desc[rx_ring->desc_idx]; - } - else if (0 == (flag & cur_rx_desc->status)) - { - FGMAC_DMA_INC_DESC(rx_ring->desc_idx, rx_ring->desc_max_num); - cur_rx_desc = &instance_p->rx_desc[rx_ring->desc_idx]; - } - else - { - rx_ring->desc_buf_idx = rx_ring->desc_idx; - FGMAC_DMA_INC_DESC(rx_ring->desc_idx, rx_ring->desc_max_num); - return FGMAC_SUCCESS; - } - } - - return FGMAC_ERR_TRANS_FAILED; -} - -/** - * @name: FGmacSendFrame - * @msg: 通过FGMAC发送数据帧 - * @return {FError} FGMAC_SUCCESS 表示发送数据帧成功,其它返回值表示发送数据帧失败 - * @param {FGmac} *instance_p 驱动控制数据 - * @param {u32} frame_len 数据帧长度 - * @note 调用函数前需要确保FGMAC驱动初始化成功 - */ -FError FGmacSendFrame(FGmac *instance_p, u32 frame_len) -{ - FASSERT(instance_p); - u32 size = 0U; - u32 i = 0U; - u32 buf_cnt = 0U; - FError ret = FGMAC_SUCCESS; - volatile FGmacDmaDesc *tx_desc; - FGmacRingDescData *tx_ring = &instance_p->tx_ring; - const u32 max_packet_size = instance_p->config.max_packet_size; - - if (0U == frame_len) - { - return FGMAC_SUCCESS; - } - - if (max_packet_size < frame_len) - { - buf_cnt = frame_len / max_packet_size; - if (frame_len % max_packet_size) - { - buf_cnt++; - } - } - else - { - buf_cnt = 1U; - } - - if (1U == buf_cnt) - { - tx_desc = &instance_p->tx_desc[tx_ring->desc_idx]; - - /* Set LAST and FIRST segment */ - tx_desc->ctrl |= (FGMAC_DMA_TDES1_FIRST_SEGMENT | FGMAC_DMA_TDES1_LAST_SEGMENT); - - /* Set frame size */ - tx_desc->ctrl &= ~(FGMAC_DMA_TDES1_BUFFER1_SIZE_MASK); - tx_desc->ctrl |= (frame_len & FGMAC_DMA_TDES1_BUFFER1_SIZE_MASK); - - /* Set Own bit of the Tx descriptor Status: gives the buffer back to ETHERNET DMA */ - tx_desc->status |= FGMAC_DMA_TDES0_OWN; - FGMAC_DMA_INC_DESC(tx_ring->desc_idx, tx_ring->desc_max_num); - - } - else - { - for (i = 0U; i < buf_cnt; i++) - { - tx_desc = &instance_p->tx_desc[tx_ring->desc_idx]; - - /* Clear FIRST and LAST segment bits */ - tx_desc->ctrl &= ~(FGMAC_DMA_TDES1_FIRST_SEGMENT | FGMAC_DMA_TDES1_LAST_SEGMENT); - - if (0U == i) - { - tx_desc->ctrl |= FGMAC_DMA_TDES1_FIRST_SEGMENT; /* Setting the first segment bit */ - } - - /* Program size */ - tx_desc->ctrl &= ~(FGMAC_DMA_TDES1_BUFFER1_SIZE_MASK); - tx_desc->ctrl |= (max_packet_size & FGMAC_DMA_TDES1_BUFFER1_SIZE_MASK); - - if ((buf_cnt - 1) == i) - { - /* Setting the last segment bit */ - tx_desc->ctrl |= FGMAC_DMA_TDES1_LAST_SEGMENT; - size = frame_len - (buf_cnt - 1U) * max_packet_size; - tx_desc->ctrl &= ~(FGMAC_DMA_TDES1_BUFFER1_SIZE_MASK); - tx_desc->ctrl |= (size & FGMAC_DMA_TDES1_BUFFER1_SIZE_MASK); - } - - /* Set Own bit of the Tx descriptor Status: gives the buffer back to ETHERNET DMA */ - tx_desc->status |= FGMAC_DMA_TDES0_OWN; - FGMAC_DMA_INC_DESC(tx_ring->desc_idx, tx_ring->desc_max_num); - } - } - - FGmacResumeDmaSend(instance_p->config.base_addr); - return ret; -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/eth/fgmac/fgmac_g.c b/bsp/phytium/libraries/standalone/drivers/eth/fgmac/fgmac_g.c deleted file mode 100644 index ef6eb7ce02..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/eth/fgmac/fgmac_g.c +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fgmac_g.c - * Date: 2022-04-06 14:46:52 - * LastEditTime: 2022-04-06 14:46:58 - * Description:  This file is for configuration table that specifies the configuration of - * ethernet devices . - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2021/07/13 first release - */ - -/* - This file contains a configuration table that specifies the configuration -- 驱动全局变量定义,包括静态配置参数 */ - -/***************************** Include Files *********************************/ - -#include "fparameters.h" -#include "fgmac.h" -#include "fgmac_phy.h" - -/************************** Constant Definitions *****************************/ - -const FGmacConfig FGMAC_CONFIG_TBL[FGMAC_NUM] = -{ - [FGMAC0_ID] = - { - .instance_id = FGMAC0_ID, - .base_addr = FGMAC0_BASE_ADDR, - .irq_num = FGMAC0_IRQ_NUM, - .irq_prority = 0, - .cheksum_mode = FGMAC_CHECKSUM_BY_SOFTWARE, - .max_packet_size = FGMAC_MAX_PACKET_SIZE, - .mdc_clk_hz = FGMAC_PHY_MII_ADDR_CR_250_300MHZ, - }, - - [FGMAC1_ID] = - { - .instance_id = FGMAC1_ID, - .base_addr = FGMAC1_BASE_ADDR, - .irq_num = FGMAC1_IRQ_NUM, - .irq_prority = 0, - .cheksum_mode = FGMAC_CHECKSUM_BY_SOFTWARE, - .max_packet_size = FGMAC_MAX_PACKET_SIZE, - .mdc_clk_hz = FGMAC_PHY_MII_ADDR_CR_250_300MHZ, - } -}; - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ - -/************************** Variable Definitions *****************************/ - -/*****************************************************************************/ diff --git a/bsp/phytium/libraries/standalone/drivers/eth/fgmac/fgmac_hw.c b/bsp/phytium/libraries/standalone/drivers/eth/fgmac/fgmac_hw.c deleted file mode 100644 index b354f143b5..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/eth/fgmac/fgmac_hw.c +++ /dev/null @@ -1,165 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fgmac_hw.c - * Date: 2022-04-06 14:46:52 - * LastEditTime: 2022-04-06 14:46:58 - * Description:  This file is for manipulation of hardware registers . - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2021/07/13 first release - */ - -#include "fassert.h" -#include "fdebug.h" -#include "fgmac.h" -#include "fgmac_hw.h" - -/***************************** Include Files *********************************/ - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ -#define FGMAC_DEBUG_TAG "FGMAC-HW" -#define FGMAC_ERROR(format, ...) FT_DEBUG_PRINT_E(FGMAC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FGMAC_WARN(format, ...) FT_DEBUG_PRINT_W(FGMAC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FGMAC_INFO(format, ...) FT_DEBUG_PRINT_I(FGMAC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FGMAC_DEBUG(format, ...) FT_DEBUG_PRINT_D(FGMAC_DEBUG_TAG, format, ##__VA_ARGS__) - -/************************** Function Prototypes ******************************/ - -/** - * @name: FGmacGetMacAddr - * @msg: 获取FGMAC控制器配置的MAC地址 - * @return {*} - * @param {uintptr} base_addr 控制器寄存器基地址 - * @param {FGmacMacAddr} mac_addr 配置的MAC地址 - */ -void FGmacGetMacAddr(uintptr base_addr, FGmacMacAddr mac_addr) -{ - u32 mac_high = FGMAC_READ_REG32(base_addr, FGMAC_MAC_ADDR0_UPPER16BIT_OFFSET); - u32 mac_low = FGMAC_READ_REG32(base_addr, FGMAC_MAC_ADDR0_LOWER32BIT_OFFSET); - - /* get lower 32 bits of mac addr */ - mac_addr[0] = (u8)(mac_low & 0xff); - mac_addr[1] = (u8)((mac_low >> 8) & 0xff); - mac_addr[2] = (u8)((mac_low >> 16) & 0xff); - mac_addr[3] = (u8)((mac_low >> 24) & 0xff); - - /* get upper 16 bits of mac addr */ - mac_addr[4] = (u8)(mac_high & 0xff); - mac_addr[5] = (u8)((mac_high >> 8) & 0xff); - - return; -} - -/** - * @name: FGmacSetMacAddr - * @msg: 设置FGMAC控制器的MAC地址 - * @return {*} - * @param {uintptr} base_addr 控制器寄存器基地址 - * @param {FGmacMacAddr} mac_addr 配置的MAC地址 - */ -void FGmacSetMacAddr(uintptr base_addr, const FGmacMacAddr mac_addr) -{ - u32 reg_val; - - reg_val = ((u32)mac_addr[5] << 8) | (u32)mac_addr[4]; - FGMAC_WRITE_REG32(base_addr, FGMAC_MAC_ADDR0_UPPER16BIT_OFFSET, reg_val); - reg_val = ((u32)mac_addr[3] << 24) | ((u32)mac_addr[2] << 16) | ((u32)mac_addr[1] << 8) | mac_addr[0]; - FGMAC_WRITE_REG32(base_addr, FGMAC_MAC_ADDR0_LOWER32BIT_OFFSET, reg_val); - - return; -} - -/** - * @name: FGmacSoftwareReset - * @msg: 触发FGMAC控制器软件复位 GMac DMA寄存器列表 和 控制寄存器列表 - * @return {*} - * @param {uintptr} base_addr 控制器寄存器基地址 - * @param {int} timeout 等待复位完成的状态检测周期数目 - */ -FError FGmacSoftwareReset(uintptr base_addr, int timeout) -{ - FASSERT(timeout > 1); /* 至少等待一个周期 */ - u32 reg_val; - - FGMAC_SET_REG32(base_addr, FGMAC_DMA_BUS_MODE_OFFSET, FGMAC_DMA_BUS_SWR); /*最后一位写为1 此时MAC DMA 控制器将复位所有 GMAC子系统内部寄存器和逻辑。 完成后会自动清0*/ - do - { - reg_val = FGMAC_READ_REG32(base_addr, FGMAC_DMA_BUS_MODE_OFFSET); - } - while ((reg_val & FGMAC_DMA_BUS_SWR) && (--timeout > 0)); /*判断swr位是否为1,当读到0时此时判断 复位操作已完成 软件复位成功*/ - - if ((0 >= timeout) && (reg_val & FGMAC_DMA_BUS_SWR)) - { - FGMAC_ERROR("Reset timeout, please check phy connection!!!"); - return FGMAC_ERR_TIMEOUT; - } - - return FGMAC_SUCCESS; -} - -FError FGmacFlushTxFifo(uintptr base_addr, int timeout) -{ - FASSERT(timeout > 1); /* 至少等待一个周期 */ - u32 reg_val; - FGMAC_SET_REG32(base_addr, FGMAC_DMA_OP_OFFSET, FGMAC_DMA_OP_FTF); - - do - { - reg_val = FGMAC_READ_REG32(base_addr, FGMAC_DMA_OP_OFFSET); - } - while ((reg_val & FGMAC_DMA_OP_FTF) && (--timeout > 0)); - - if ((0 >= timeout) && (reg_val & FGMAC_DMA_OP_FTF)) - { - FGMAC_ERROR("Flush tx fifo timeout !!!"); - return FGMAC_ERR_TIMEOUT; - } - - return FGMAC_SUCCESS; -} - -/** - * @name: FGmacPhyWaitBusBusy - * @msg: wait phy gmii is not busy - * @param {uintptr} base_addr, base address of FGmac controller register - * @param {int} timeout, wait timeout - * @return err code information, FGMAC_SUCCESS indicates success,others indicates failed - */ -FError FGmacPhyWaitBusBusy(uintptr base_addr, int timeout) -{ - u32 reg_val; - - /* Check for the Busy flag */ - do - { - reg_val = FGMAC_READ_REG32(base_addr, FGMAC_GMII_ADDR_OFFSET); - } - while ((FGMAC_MII_ADDR_GB & reg_val) && (0 <= --timeout)); - - if (0 >= timeout) - { - FGMAC_ERROR("Wait gmii timeout"); - return FGMAC_ERR_TIMEOUT; - } - - return FGMAC_SUCCESS; -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/eth/fgmac/fgmac_hw.h b/bsp/phytium/libraries/standalone/drivers/eth/fgmac/fgmac_hw.h deleted file mode 100644 index cd7ba1754f..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/eth/fgmac/fgmac_hw.h +++ /dev/null @@ -1,554 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fgmac_hw.h - * Date: 2022-04-06 14:46:52 - * LastEditTime: 2022-04-06 14:46:58 - * Description:  This file is for manipulation of hardware registers . - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2021/07/13 first release - */ - -#ifndef FGMAC_HW_H -#define FGMAC_HW_H - -/* - 传入模块基地址,不能复杂结构体 -- hardware interface of device || low-level driver function prototypes - -- 包括驱动寄存器参数和low-level操作定义 -1. 定义寄存器偏移 -2. 对上提供该模块寄存器操作的接口 -3. 一些简单外设提供直接操作接口 -4. 可以定义一些状态的接口,用于响应驱动状态的变化 - -note: 本文件不能引用fooxx.h -*/ - -/***************************** Include Files *********************************/ - -#include "fkernel.h" -#include "fio.h" -#include "ftypes.h" - -#ifdef __cplusplus -extern "C" -{ -#endif -/************************** Constant Definitions *****************************/ - -/** @name Register Map - * - * Register offsets from the base address of an SD device. - * @{ - */ -/**** FGMAC CTRL ****/ -#define FGMAC_CONF_OFFSET 0x00U /* MAC 配置寄存器 */ -#define FGMAC_FRAME_FILTER_OFFSET 0x04U /* Mac 帧过滤 */ -#define FGMAC_HASH_HIGH_OFFSET 0x08U /* 哈希表高位寄存器 */ -#define FGMAC_HASH_LOW_OFFSET 0x0cU /* 哈希表低位寄存器 */ -#define FGMAC_GMII_ADDR_OFFSET 0x10U /* GMII 地址寄存器 */ -#define FGMAC_GMII_DATA_OFFSET 0x14U /* GMII 数据寄存器 */ -#define FGMAC_FLOW_CTRL_OFFSET 0x18U /* 流控寄存器 */ -#define FGMAC_VLAN_TAG_OFFSET 0x1cU /* VLAN 标记寄存器 */ -#define FGMAC_VERSION_OFFSET 0x20U /* 版本寄存器 */ -#define FGMAC_DEBUG_STATUS_OFFSET 0x24U /* 调试寄存器 */ -#define FGMAC_LPI_CTRL_STATUS_OFFSET 0x30U /* LPI (低功耗空闲) 控制和状态寄存器 */ -#define FGMAC_LPI_TIMER_CTRL_OFFSET 0x34U /* LPI 定时器控制寄存器 */ -#define FGMAC_INTR_STATUS_OFFSET 0x38U /* 中断状态寄存器 */ -#define FGMAC_INTR_MASK_OFFSET 0x3CU /* 中断屏蔽寄存器 */ -#define FGMAC_MAC_ADDR0_UPPER16BIT_OFFSET 0x40U /* 第一个 MAC 地址的高 16 位。 */ -#define FGMAC_MAC_ADDR0_LOWER32BIT_OFFSET 0x44U /* 第一个 MAC 地址的低 32 位。。 */ -#define FGMAC_MAC_ADDR1_UPPER16BIT_OFFSET 0x48U /* 第二个 MAC 地址的高 16 位。 */ -#define FGMAC_MAC_ADDR1_LOWER32BIT_OFFSET 0x4CU /* 第二个 MAC 地址的低 32 位。。 */ -#define FGMAC_MAC_PHY_STATUS 0xD8U /* MAC PHY 状态 */ - -/**** FGMAC DMA CTRL ****/ -#define FGMAC_DMA_BUS_MODE_OFFSET 0x1000U /* 总线模式寄存器 */ -#define FGMAC_DMA_TX_POLL_REQ_OFFSET 0x1004U /* 发送轮询请求寄存器 */ -#define FGMAC_DMA_RX_POLL_REQ_OFFSET 0x1008U /* 接收轮询请求寄存器 */ -#define FGMAC_DMA_RX_LIST_BASE_OFFSET 0x100cU /* 接收描述符列表地址寄存器 */ -#define FGMAC_DMA_TX_LIST_BASE_OFFSET 0x1010U /* 发送描述符列表地址寄存器 */ -#define FGMAC_DMA_STATUS_OFFSET 0x1014U /* 状态寄存器 */ -#define FGMAC_DMA_OP_OFFSET 0x1018U /* 操作模式寄存器 */ -#define FGMAC_DMA_INTR_OFFSET 0x101cU /* 中断使能寄存器 */ -#define FGMAC_DMA_MISSED_FRAME_CNT_OFFSET 0x1020U /* 丢帧和缓冲区溢出计数器寄存器 */ -#define FGMAC_DMA_RX_WATCHDOG_OFFSET 0x1024U /* 接收中断看门狗定时器寄存器 */ -#define FGMAC_DMA_AXI_BUS_MOD_OFFSET 0x1028U /* AXI 总线模式寄存器*/ -#define FGMAC_DMA_AXI_BUS_STATUS_OFFSET 0x102CU /* AXI 状态寄存器 */ -#define FGMAC_DMA_HOST_TX_DESC_OFFSET 0x1048U /* 当前主机发送描述符寄存器 */ -#define FGMAC_DMA_HOST_RX_DESC_OFFSET 0x104CU /* 当前主机接收描述符寄存器 */ -#define FGMAC_DMA_HOST_TX_BUF_ADDR_OFFSET 0x1050U /* 当前主机发送缓冲地址寄存器 */ -#define FGMAC_DMA_HOST_RX_BUF_ADDR_OFFSET 0x1054U /* 当前主机接收缓冲地址寄存器 */ -#define FGMAC_DMA_HW_FUNC_OFFSET 0x1058U /* 硬件功能寄存器 */ - -/** @name FGMAC_CONF_OFFSET Register - */ -#define FGMAC_CONF_RX_EN BIT(2) /* 接收器启用 */ -#define FGMAC_CONF_TX_EN BIT(3) /* 发送器启用 */ -#define FGMAC_CONF_DC BIT(4) /* 延期检查 */ -#define FGMAC_CONF_BL_MASK GENMASK(6, 5) /* 后退限制 */ -#define FGMAC_CONF_BL(x) (FGMAC_CONF_BL_MASK & ((x) << 5)) -#define FGMAC_CONF_ACS BIT(7) /* 自动 PAD/ CRC 剥线 */ -#define FGMAC_CONF_LINK_UPDOWN BIT(8) /* 链接 up/down */ -#define FGMAC_CONF_DISABLE_RETRY BIT(9) /* 禁用重试 */ -#define FGMAC_CONF_IPC BIT(10) /* 校验和卸载 */ -#define FGMAC_CONF_DUPLEX_MODE BIT(11) /* 双工模式 */ -#define FGMAC_CONF_LOOPBACK_MODE BIT(12) /* 环回模式 */ -#define FGMAC_CONF_DO BIT(13) /* 不能自接收 */ -#define FGMAC_CONF_FES BIT(14) /* 速度选择 0: 10Mbps, 1: 100Mbps d2000 ft2004手册有误*/ -#define FGMAC_CONF_PORTSELECT BIT(15) /* 端口选择 0: GMII(1000Mbps)1: MII(10/100Mbps) */ -#define FGMAC_CONF_DCRS BIT(16) /* 传输过程中禁用载波侦听 */ -#define FGMAC_CONF_IFG_MASK GENMASK(19, 17) /* 帧内间隔 */ -#define FGMAC_CONF_IFG(x) (FGMAC_CONF_IFG_MASK & ((x) << 17)) -#define FGMAC_CONF_JE BIT(20) /* 使用Jumbo帧 */ -#define FGMAC_CONF_BE BIT(21) /* 帧突发启用 */ -#define FGMAC_CONF_JD BIT(22) /* Jabber 禁用 */ -#define FGMAC_CONF_WD BIT(23) /* 看门狗禁用 */ -#define FGMAC_CONF_TC BIT(24) /* 在 RGMII 中传输配置 */ -#define FGMAC_CONF_CST BIT(25) /* 类型帧的 CRC 剥离 */ - -/* 使能类型帧的CRC剥离、禁用看门狗WD、禁用Jabber JD、帧突发启用BE、不能自接收DO(全双工保留)*/ -#define FGMAC_CONF_INIT (FGMAC_CONF_CST| FGMAC_CONF_WD| FGMAC_CONF_JD| FGMAC_CONF_BE| FGMAC_CONF_DO) - -/** @name FGMAC_FRAME_FILTER_OFFSET Register - */ -#define FGMAC_FRAME_FILTER_PR BIT(0) -#define FGMAC_FRAME_FILTER_HUC BIT(1) /* 哈希单播 */ -#define FGMAC_FRAME_FILTER_HMC BIT(2) /* 哈希多播 */ -#define FGMAC_FRAME_FILTER_DAIF BIT(3) /* 目的地址反向过滤 */ -#define FGMAC_FRAME_FILTER_PM BIT(4) /* 通过所有多播 */ -#define FGMAC_FRAME_FILTER_DBF BIT(5) /* 禁用广播帧 */ -#define FGMAC_FRAME_FILTER_PCF_MASK (GENMASK(7, 6)) /* 通过控制帧 */ -#define FGMAC_FRAME_FILTER_PCF(x) ((x) << 6) -#define FGMAC_FRAME_FILTER_SAIF BIT(8) /* 源地址反相过滤 */ -#define FGMAC_FRAME_FILTER_SAF BIT(9) /* 源地址过滤使能 */ -#define FGMAC_FRAME_FILTER_HPF BIT(10) /* hash 或 perfect 过滤器 */ -#define FGMAC_FRAME_FILTER_RA BIT(31) /* 全部接收 */ - -/** @name FGMAC_HASH_HIGH_OFFSET Register - */ -#define FGMAC_HASH_HIGH_HTH_MASK GENMASK(31, 0) /* 该字段包含 Hash 表的高 32 位。 */ - -/** @name FGMAC_HASH_LOW_OFFSET Register - */ -#define FGMAC_HASH_LOW_HTH_MASK GENMASK(31, 0) /* 该字段包含 Hash 表的低 32 位。 */ - -/** @name FGMAC_GMII_ADDR_OFFSET Register - */ -#define FGMAC_MII_ADDR_GB BIT(0) /* GMII 忙 */ -#define FGMAC_MII_ADDR_GW BIT(1) /* GMII 写 */ -#define FGMAC_MII_ADDR_CR_MASK GENMASK(5, 2) /* CSR 时钟范围 */ -#define FGMAC_MII_ADDR_CR(x) (FGMAC_MII_ADDR_CR_MASK & ((x) << 2)) -#define FGMAC_MII_ADDR_GR_MASK GENMASK(10, 6) /* GMII 寄存器 */ -#define FGMAC_MII_ADDR_GR(x) (FGMAC_MII_ADDR_GR_MASK & ((x) << 6)) -#define FGMAC_MII_ADDR_PA_MASK GENMASK(15, 11) /* 物理层地址 */ -#define FGMAC_MII_ADDR_PA(x) (FGMAC_MII_ADDR_PA_MASK & ((x) << 11)) - -/** @name FGMAC_GMII_DATA_OFFSET Register - */ -#define FGMAC_MII_DATA_GD_MASK GENMASK(15, 0) - -/** @name FGMAC_FLOW_CTRL_OFFSET Register - */ -#define FGMAC_FLOW_FCB BIT(0) -#define FGMAC_FLOW_BPA BIT(0) -#define FGMAC_FLOW_TFE BIT(1) -#define FGMAC_FLOW_RFE BIT(2) /* 接收流控制启用 */ -#define FGMAC_FLOW_UP BIT(3) /* 单播暂停帧检测 */ -#define FGMAC_FLOW_PLT_MASK GENMASK(5, 4) /* 暂停低阈值 */ -#define FGMAC_FLOW_PLT(x) ((x) << 3) -#define FGMAC_FLOW_DZPQ BIT(7) -#define FGMAC_FLOW_PT_MASK GENMASK(31, 16) /* 暂停时间 */ - -/** @name FGMAC_VLAN_TAG_OFFSET Register - */ -#define FGMAC_VLAN_TAG_VL_MASK GENMASK(15, 0) /* 启用 12 位 VLAN 标记比较 */ -#define FGMAC_VLAN_TAG_VL(x) (FGMAC_VLAN_TAG_VL_MASK & ((x) << 15)) -#define FGMAC_VLAN_TAG_ETV BIT(16) /* 接收帧的 VLAN 标记标识符 */ - -/** @name FGMAC_VERSION_OFFSET Register - */ -#define FGMAC_VERSION_UDV_MASK GENMASK(15, 8) /* 用户定义版本号 */ -#define FGMAC_VERSION_SDV_MASK GENMASK(7, 0) /* 硬件定议版本号 */ - -/** @name FGMAC_LPI_CTRL_STATUS_OFFSET Register - */ -#define FGMAC_LPI_CTRL_STATS_TLPIEN BIT(0) /* 发送 LPI 进入 */ -#define FGMAC_LPI_CTRL_STATS_TLPIEX BIT(1) /* 发送 LPI 退出 */ -#define FGMAC_LPI_CTRL_STATS_RLPIEN BIT(2) /* 接收 LPI 进入 */ -#define FGMAC_LPI_CTRL_STATS_RLPIEX BIT(3) /* 接收 LPI 退出 */ -#define FGMAC_LPI_CTRL_STATS_TLPIST BIT(8) /* 发送 LPI 状态 */ -#define FGMAC_LPI_CTRL_STATS_RLPIST BIT(9) /* 接收 LPI 状态 */ -#define FGMAC_LPI_CTRL_STATS_LPIEN BIT(16) /* LPI 使能 */ -#define FGMAC_LPI_CTRL_STATS_PLS BIT(17) /* PHY 链路状态 */ -#define FGMAC_LPI_CTRL_STATS_PLSEN BIT(18) /* 物理链路状态使能 */ -#define FGMAC_LPI_CTRL_STATS_LPITXA BIT(19) /* LPI 发送自动化 */ - -/** @name FGMAC_LPI_TIMER_CTRL_OFFSET Register - */ -#define FGMAC_LPI_TIMER_TWT_MASK GENMASK(15, 0) -#define FGMAC_LPI_TIMER_LIT_MASK GENMASK(25, 16) - -/** @name FGMAC_INTR_STATUS_OFFSET Register - */ -#define FGMAC_ISR_STATUS_RSIS BIT(0) /* RGMII/SMII Interrupt Status */ -#define FGMAC_ISR_STATUS_PCSLSC BIT(1) /* PCS 链路状态改变 */ -#define FGMAC_ISR_STATUS_PCSANC BIT(2) /* PCS 自协商完成 */ -#define FGMAC_ISR_STATUS_PMTIS BIT(3) -#define FGMAC_ISR_STATUS_MMCIS BIT(4) -#define FGMAC_ISR_STATUS_MMCRIS BIT(5) /* MMC 接收中断状态 */ -#define FGMAC_ISR_STATUS_MMCTIS BIT(6) /* MMC 发送中断状态 */ -#define FGMAC_ISR_STATUS_MMCRCOIS BIT(7) /* 接收校验和卸载中断状态 */ -#define FGMAC_ISR_STATUS_TIS BIT(9) /* 时间戳中断状态 */ -#define FGMAC_ISR_STATUS_LPIIS BIT(10) /* LPI 中断状态 */ -#define FGMAC_ISR_STATUS_ALL_MASK GENMASK(10, 0) - -/** @name FGMAC_INTR_MASK_OFFSET Register - */ -#define FGMAC_ISR_MASK_RSIM BIT(0) /* RGMII/SMII 中断屏蔽 */ -#define FGMAC_ISR_MASK_PCSLSIM BIT(1) /* PCS 链路状态中断屏蔽 */ -#define FGMAC_ISR_MASK_PCSANCIM BIT(2) /* PCS AN 完成中断屏蔽 */ -#define FGMAC_ISR_MASK_PMTIM BIT(3) /* PMT 中断屏蔽 */ -#define FGMAC_ISR_MASK_TIM BIT(9) /* 时间戳中断屏蔽 */ -#define FGMAC_ISR_MASK_LPIIM BIT(10) /* LPI 中断屏蔽 */ -#define FGMAC_ISR_MASK_ALL_BITS (GENMASK(3, 0) | GENMASK(10, 9)) - -#define FGMAC_8BIT_ADDR GENMASK(7, 0) - -/** @name FGMAC_MAC_ADDR0_UPPER16BIT_OFFSET Register - */ -#define FGMAC_MAC_ADDR0_UPPER16BIT_A GENMASK(15, 0) /* MAC 地址 0[47:32] */ - -/** @name FGMAC_MAC_ADDR0_LOWER32BIT_OFFSET Register - */ -#define FGMAC_MAC_ADDR0_LOWER32BIT_A GENMASK(31, 0) /* MAC 地址 0[31:0] */ - -/** @name FGMAC_MAC_ADDR1_UPPER16BIT_OFFSET Register - */ -#define FGMAC_MAC_ADDR1_UPPER16BIT_A GENMASK(15, 0) /* MAC 地址 1[47:32] */ -#define FGMAC_MAC_ADDR1_UPPER16BIT_MBC GENMASK(29, 24) -#define FGMAC_MAC_ADDR1_UPPER16BIT_SA BIT(30) -#define FGMAC_MAC_ADDR1_UPPER16BIT_AE BIT(31) - -/** @name FGMAC_MAC_ADDR1_LOWER32BIT_OFFSET Register - */ -#define FGMAC_MAC_ADDR1_LOWER16BIT_A GENMASK(31, 0) /* MAC 地址 1[31:0] */ - -/** @name FGMAC_MAC_PHY_STATUS Register - */ -#define FGMAC_RGSMIIIS_LNKMODE BIT(0) /* 指示链路的当前操作模式 */ -#define FGMAC_RGSMIIIS_LNKMODE_HALF (0b0 << 0) -#define FGMAC_RGSMIIIS_LNKMODE_FULL (0b1 << 0) -#define FGMAC_RGSMIIIS_SPEED GENMASK(2, 1) -#define FGMAC_RGSMIIIS_SPEED_2_5MHZ (0b00 << 1) /* 链路速度 2.5MHz */ -#define FGMAC_RGSMIIIS_SPEED_25MHZ (0b01 << 1) /* 25MHz */ -#define FGMAC_RGSMIIIS_SPEED_125MHZ (0b10 << 1) /* 125MHz */ -#define FGMAC_RGSMIIIS_LNKSTS BIT(3) -#define FGMAC_RGSMIIIS_LNKSTS_UP (0b1 << 3) -#define FGMAC_RGSMIIIS_LNKSTS_DOWN (0b0 << 3) -#define FGMAC_RGSMIIIS_JAB_TIMEOUT BIT(4) -#define FGMAC_RGSMIIIS_FALSECARDET BIT(5) - -/****************FGMAC DMA Register*******************/ -/* Bus mode register definitions */ -/** @name FGMAC_DMA_BUS_MODE_OFFSET Register - */ -#define FGMAC_DMA_BUS_SWR BIT(0) /* 软件复位 */ -#define FGMAC_DMA_BUS_DA BIT(1) /* 设置 8xPBL 模式 */ -#define FGMAC_DMA_BUS_DSL_MASK GENMASK(6, 2) /* 描述符跳跃长度 */ -#define FGMAC_DMA_BUS_ATDS BIT(7) /* -#define FGMAC_DMA_BUS_PBL_MASK GENMASK(13, 8) /* 可编程突发长度 */ -#define FGMAC_DMA_BUS_PBL(x) ((x) << 8) -enum -{ - FGMAC_DMA_BUS_PBL_1 = 1, - FGMAC_DMA_BUS_PBL_2 = 2, - FGMAC_DMA_BUS_PBL_4 = 4, - FGMAC_DMA_BUS_PBL_8 = 8, - FGMAC_DMA_BUS_PBL_16 = 16, - FGMAC_DMA_BUS_PBL_32 = 32 -}; -#define FGMAC_DMA_BUS_PR_MASK GENMASK(15, 14) /* 加权循环仲裁中的优先级比率 */ -#define FGMAC_DMA_BUS_PR(x) ((x) << 14) -#define FGMAC_DMA_BUS_FB BIT(16) /* 固定突发 */ -#define FGMAC_DMA_BUS_RPBL_MASK GENMASK(22, 17) /* RxDMA 事务中要传输的最大节拍数 */ -#define FGMAC_DMA_BUS_RPBL(x) ((x) << 17) -enum -{ - FGMAC_DMA_BUS_RPBL_1 = 1, - FGMAC_DMA_BUS_RPBL_2 = 2, - FGMAC_DMA_BUS_RPBL_4 = 4, - FGMAC_DMA_BUS_RPBL_16 = 16, - FGMAC_DMA_BUS_RPBL_32 = 32 -}; -#define FGMAC_DMA_BUS_USP BIT(23) -#define FGMAC_DMA_BUS_8XPBL BIT(24) -#define FGMAC_DMA_BUS_AAL BIT(25) -#define FGMAC_DMA_BUS_MB BIT(26) /* 混合突发 */ -#define FGMAC_DMA_BUS_TXPR BIT(27) /* 发送优先级 */ -#define FGMAC_DMA_BUS_PRWG GENMASK(29, 18) /* 通道优先权重 */ - -#define FGMAC_DMA_BUS_INIT (FGMAC_DMA_BUS_FB | FGMAC_DMA_BUS_PBL(16) | FGMAC_DMA_BUS_RPBL(16)) - -/* 这些位控制 RxDMA 和 TxDMA 之间的加权循环仲裁中的优先级比率, - FGMAC_DMA_BUS_DA=1时有效 */ -#define FGMAC_DMA_BUS_PRIORXTX_41 (3 << 14) /* 4:1 */ -#define FGMAC_DMA_BUS_PRIORXTX_31 (2 << 14) /* 3:1 */ -#define FGMAC_DMA_BUS_PRIORXTX_21 (1 << 14) /* 2:1 */ -#define FGMAC_DMA_BUS_PRIORXTX_11 (0 << 14) /* 1:1 */ - -/** @name FGMAC_DMA_TX_POLL_REQ_OFFSET Register - */ -#define FGMAC_DMA_XMT_POLL_DEMAND_TPD GENMASK(31, 0) - -/** @name FGMAC_DMA_RX_POLL_REQ_OFFSET Register - */ -#define FGMAC_DMA_RCV_POLL_DEMAND_RPD GENMASK(31, 0) - -/** @name FGMAC_DMA_RX_LIST_BASE_OFFSET Register - */ -#define FGMAC_DMA_RCV_BASE_ADDR_START_REC_LIST GENMASK(31, 4) - -/** @name FGMAC_DMA_TX_LIST_BASE_OFFSET Register - */ -#define FGMAC_DMA_TX_BASE_ADDR_START_TRA_LIST GENMASK(31, 4) - -/** @name FGMAC_DMA_STATUS_OFFSET Register - */ -#define FGMAC_DMA_STATUS_GLPII BIT(30) /* FGMAC LPI interrupt */ -#define FGMAC_DMA_STATUS_TTI BIT(29) /* 时间戳触发中断 */ -#define FGMAC_DMA_STATUS_GPI BIT(28) /* PMT interrupt */ -#define FGMAC_DMA_STATUS_GMI BIT(27) /* MMC interrupt */ -#define FGMAC_DMA_STATUS_GLI BIT(26) /* FGMAC Line interface int */ -#define FGMAC_DMA_STATUS_EB_MASK GENMASK(25, 23) /* Error Bits Mask */ -#define FGMAC_DMA_STATUS_TS_MASK GENMASK(22, 20) /* Transmit Process State */ -#define FGMAC_DMA_STATUS_TS_STOPPED (0b000 << 20) -#define FGMAC_DMA_STATUS_TS_GET_DESC (0b001 << 20) -#define FGMAC_DMA_STATUS_TS_WAIT (0b010 << 20) -#define FGMAC_DMA_STATUS_TS_QUEUE (0b011 << 20) -#define FGMAC_DMA_STATUS_TS_PAUSE (0b110 << 20) -#define FGMAC_DMA_STATUS_TS_CLOSE_DESC (0b111 << 20) -#define FGMAC_DMA_STATUS_RS_MASK GENMASK(19, 17) /* Receive Process State */ -#define FGMAC_DMA_STATUS_NIS BIT(16) /* Normal Interrupt Summary */ -#define FGMAC_DMA_STATUS_AIS BIT(15) /* Abnormal Interrupt Summary */ -#define FGMAC_DMA_STATUS_ERI BIT(14) /* Early Receive Interrupt */ -#define FGMAC_DMA_STATUS_FBI BIT(13) /* Fatal Bus Error Interrupt */ -#define FGMAC_DMA_STATUS_ETI BIT(10) /* Early Transmit Interrupt */ -#define FGMAC_DMA_STATUS_RWT BIT(9) /* Receive Watchdog Timeout */ -#define FGMAC_DMA_STATUS_RPS BIT(8) /* Receive Process Stopped */ -#define FGMAC_DMA_STATUS_RU BIT(7) /* Receive Buffer Unavailable */ -#define FGMAC_DMA_STATUS_RI BIT(6) /* Receive Interrupt */ -#define FGMAC_DMA_STATUS_UNF BIT(5) /* Transmit Underflow */ -#define FGMAC_DMA_STATUS_OVF BIT(4) /* Receive Overflow */ -#define FGMAC_DMA_STATUS_TJT BIT(3) /* Transmit Jabber Timeout */ -#define FGMAC_DMA_STATUS_TU BIT(2) /* Transmit Buffer Unavailable */ -#define FGMAC_DMA_STATUS_TPS BIT(1) /* Transmit Process Stopped */ -#define FGMAC_DMA_STATUS_TI BIT(0) /* Transmit Interrupt */ - -#define FGMAC_DMA_STATUS_CLR_ABLE (GENMASK(5, 0) | GENMASK(10, 7)| FGMAC_DMA_STATUS_FBI | FGMAC_DMA_STATUS_AIS) /* BIT [16 : 0] write 1 to clear */ - -/** @name FGMAC_DMA_OP_OFFSET Register - */ -#define FGMAC_DMA_OP_DT BIT(26) /* No Dropping of TCP/IP csum Err Frame */ -#define FGMAC_DMA_OP_RSF BIT(25) /* Rx Store and Forward */ -#define FGMAC_DMA_OP_DFF BIT(24) /* */ -#define FGMAC_DMA_OP_RFA_2 BIT(23) -#define FGMAC_DMA_OP_RFD_2 BIT(22) -#define FGMAC_DMA_OP_TSF BIT(21) /* Tx Store and Forward */ -#define FGMAC_DMA_OP_FTF BIT(20) /* Flush Tx FIFO */ -#define FGMAC_DMA_OP_TTC_MASK GENMASK(16, 14) -#define FGMAC_DMA_OP_TTC(x) ((x) << 14) /* Tx Threshold Control */ -enum -{ - FGMAC_DMA_OP_TTC_64 = 0b000, - FGMAC_DMA_OP_TTC_128 = 0b001, - FGMAC_DMA_OP_TTC_192 = 0b010, - FGMAC_DMA_OP_TTC_256 = 0b011, - FGMAC_DMA_OP_TTC_40 = 0b100, - FGMAC_DMA_OP_TTC_32 = 0b101, - FGMAC_DMA_OP_TTC_24 = 0b110, - FGMAC_DMA_OP_TTC_16 = 0b111 -}; - -#define FGMAC_DMA_OP_ST BIT(13) /* Start/Stop Tx */ -#define FGMAC_DMA_OP_RFD_MASK GENMASK(12, 11) -#define FGMAC_DMA_OP_RFD(x) ((x) << 11) /* Threshold for DeActive Flow Control */ -#define FGMAC_DMA_OP_RFA_MASK GENMASK(10, 9) /* Threshold for Active Flow Control */ -#define FGMAC_DMA_OP_EFC BIT(8) /* Enable HW Flow control */ -#define FGMAC_DMA_OP_FEF BIT(7) /* Forward Error Frame */ -#define FGMAC_DMA_OP_FUF BIT(6) /* Forward Undersize Good Frame */ -#define FGMAC_DMA_OP_RTC_MASK GENMASK(4, 3) /* Rx Threshold Control */ -#define FGMAC_DMA_OP_OSF BIT(2) /* Operate On Second Mode */ -#define FGMAC_DMA_OP_SR BIT(1) /* Start/Stop Rx */ -#define FGMAC_DMA_OP_CLEAR_MASK GENMASK(31, 0) -#define FGMAC_DMA_OP_INIT (FGMAC_DMA_OP_SR | FGMAC_DMA_OP_RSF) - -/** @name FGMAC_DMA_INTR_OFFSET Register - */ -#define FGMAC_DMA_INTR_ENA_TIE BIT(0) /* Transmit Interrupt */ -#define FGMAC_DMA_INTR_ENA_TSE BIT(1) /* 传输停止启用 */ -#define FGMAC_DMA_INTR_ENA_TUE BIT(2) /* Transmit Buffer Unavailable */ -#define FGMAC_DMA_INTR_ENA_THE BIT(3) /* 发送 Jabber 超时启用 */ -#define FGMAC_DMA_INTR_ENA_OVE BIT(4) /* 溢出中断使能 */ -#define FGMAC_DMA_INTR_ENA_UNE BIT(5) /* 下溢中断使能 */ -#define FGMAC_DMA_INTR_ENA_RIE BIT(6) /* Receive Interrupt */ -#define FGMAC_DMA_INTR_ENA_RUE BIT(7) /* 接收缓冲区不可用启用 */ -#define FGMAC_DMA_INTR_ENA_RSE BIT(8) /* 接收已停止启用 */ -#define FGMAC_DMA_INTR_ENA_RWE BIT(9) /* 接收看门狗超时使能 */ -#define FGMAC_DMA_INTR_ENA_ETE BIT(10) /* 早期发送中断使能 */ -#define FGMAC_DMA_INTR_ENA_FBE BIT(13) /* Fatal Bus Error */ -#define FGMAC_DMA_INTR_ENA_ERE BIT(14) /* Early Receive */ -#define FGMAC_DMA_INTR_ENA_AIE BIT(15) /* Abnormal Summary */ -#define FGMAC_DMA_INTR_ENA_NIE BIT(16) /* Normal Summary */ -#define FGMAC_DMA_INTR_ENA_ALL_MASK (GENMASK(10, 0) | GENMASK(16, 13)) - -/** @name FGMAC_DMA_MISSED_FRAME_CNT_OFFSET Register - */ -#define FGMAC_DMA_MISSED_FRAME_CTR_CMIS GENMASK(15, 0) /* 由于主机接收缓冲区不可用而导致控制器丢失的帧数 */ -#define FGMAC_DMA_MISSED_FRAME_CTR_OVMIS BIT(16) -#define FGMAC_DMA_MISSED_FRAME_CTR_CFIFO GENMASK(27, 17) -#define FGMAC_DMA_MISSED_FRAME_CTR_OVFIFO BIT(28) - -/** @name FGMAC_DMA_RX_WATCHDOG_OFFSET Register - */ -#define FGMAC_DMA_RX_WATCHDOG_RIWT GENMASK(7, 0) - -/** @name FGMAC_DMA_AXI_BUS_MOD_OFFSET Register - */ -#define FGMAC_DMA_AXI_BUS_MOD_UNDEF BIT(0) /* AXI 未定义的突发长度 */ -#define FGMAC_DMA_AXI_BUS_MOD_BLEN4 BIT(1) /* AXI 突发长度 4 */ -#define FGMAC_DMA_AXI_BUS_MOD_BLEN8 BIT(2) /* AXI 突发长度 8 */ -#define FGMAC_DMA_AXI_BUS_MOD_BLEN16 BIT(3) /* AXI 突发长度 16 */ -#define FGMAC_DMA_AXI_BUS_MOD_BLEN32 BIT(4) /* AXI 突发长度 32 */ -#define FGMAC_DMA_AXI_BUS_MOD_BLEN64 BIT(5) /* AXI 突发长度 64 */ -#define FGMAC_DMA_AXI_BUS_MOD_BLEN128 BIT(6) /* AXI 突发长度 128 */ -#define FGMAC_DMA_AXI_BUS_MOD_BLEN256 BIT(7) /* AXI 突发长度 256 */ -#define FGMAC_DMA_AXI_BUS_MOD_AXI_AAL BIT(12) /* 地址对齐的节拍 */ -#define FGMAC_DMA_AXI_BUS_MOD_RD_OSR_LMT_MASK GENMASK(19, 16) -#define FGMAC_DMA_AXI_BUS_MOD_RD_OSR_LMT(x) ((x) << 16) /* XI 最大读取未决请求限制此值限 制 AXI 读取接口上的最大未完成请求。 */ -#define FGMAC_DMA_AXI_BUS_MOD_WR_OSR_LMT_MASK GENMASK(23, 20) -#define FGMAC_DMA_AXI_BUS_MOD_WR_OSR_LMT(x) ((x) << 20) /* AXI 最大写入未决请求限制此值 限制 AXI 写入接口上的最大未完成请求。 */ -#define FGMAC_DMA_AXI_BUS_MOD_UNLCK_ON_MGK_RWK BIT(30) -#define FGMAC_DMA_AXI_BUS_MOD_EN_LPI BIT(31) - -#define FGMAC_DMA_DESC_ADDR_MASK GENMASK(31, 4) - -#define FGMAC_MAC_ADDR_LEN 6 -#define FGMAC_RETRY_TIMES 500 -#define FGMAC_DELAY_US 100 -/**************************** Type Definitions *******************************/ - -typedef u8 FGmacMacAddr[FGMAC_MAC_ADDR_LEN]; - -enum -{ - FGMAC_CTRL_INTR = 0, - FGMAC_DMA_INTR, - - FGMAC_MAX_INTR_TYPE -}; - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ -/* 读FGMAC控制器寄存器,以u32返回整个寄存器值 */ -#define FGMAC_READ_REG32(addr, reg_offset) FtIn32((addr) + (u32)(reg_offset)) - -/* 写FGMAC控制器寄存器,以u32覆盖写入整个寄存器值 */ -#define FGMAC_WRITE_REG32(addr, reg_offset, reg_value) FtOut32((addr) + (u32)(reg_offset), (u32)(reg_value)) - -/* 将FGMAC控制器寄存器的特定位置为1, 不改变其它位 */ -#define FGMAC_SET_REG32(addr, reg_offset, set_bits) FtSetBit32((addr) + (u32)(reg_offset), (u32)(set_bits)) - -/* 将FGMAC控制器寄存器的特定位置为0, 不改变其它位 */ -#define FGMAC_CLR_REG32(addr, reg_offset, clr_bits) FtClearBit32((addr) + (u32)(reg_offset), (u32)(clr_bits)) - -/* 在一个总长度为num的环内将索引idx增加1 */ -#define FGMAC_DMA_INC_DESC(idx, num) (idx) = (((idx) + 1) % (num)) - -static inline void FGmacResumeDmaSend(uintptr base_addr) -{ - if (FGMAC_READ_REG32(base_addr, FGMAC_DMA_STATUS_OFFSET) & FGMAC_DMA_STATUS_TU) - { - FGMAC_SET_REG32(base_addr, FGMAC_DMA_STATUS_OFFSET, FGMAC_DMA_STATUS_TU); /* clear TBUS GMAC DMA flag */ - FGMAC_WRITE_REG32(base_addr, FGMAC_DMA_TX_POLL_REQ_OFFSET, 0xff); /* resume DMA transmission */ - } - else - { - FGMAC_WRITE_REG32(base_addr, FGMAC_DMA_TX_POLL_REQ_OFFSET, 0xff); /* resume DMA transmission */ - } -} - -static inline void FGmacResumeDmaRecv(uintptr base_addr) -{ - if (FGMAC_READ_REG32(base_addr, FGMAC_DMA_STATUS_OFFSET) & FGMAC_DMA_STATUS_RU) - { - FGMAC_SET_REG32(base_addr, FGMAC_DMA_STATUS_OFFSET, FGMAC_DMA_STATUS_RU); /* Clear RBUS GMAC DMA flag */ - FGMAC_WRITE_REG32(base_addr, FGMAC_DMA_RX_POLL_REQ_OFFSET, 0xff); /* Resume DMA transmission*/ - } - else - { - FGMAC_WRITE_REG32(base_addr, FGMAC_DMA_RX_POLL_REQ_OFFSET, 0xff); - } -} - -static inline void FGmacStartDmaTrans(uintptr base_addr) -{ - FGMAC_SET_REG32(base_addr, FGMAC_DMA_OP_OFFSET, (FGMAC_DMA_OP_SR | FGMAC_DMA_OP_ST)); /* enable dma tx and rx */ - FGMAC_SET_REG32(base_addr, FGMAC_CONF_OFFSET, (FGMAC_CONF_RX_EN | FGMAC_CONF_TX_EN)); /* enable gmac tx and rx */ - - /* clear Tx and Rx process stopped flags */ - FGMAC_WRITE_REG32(base_addr, FGMAC_DMA_INTR_OFFSET, - (FGMAC_DMA_INTR_ENA_RIE | FGMAC_DMA_INTR_ENA_AIE | FGMAC_DMA_INTR_ENA_NIE)); -} - -static inline void FGmacStopDmaTrans(uintptr base_addr) -{ - FGMAC_CLR_REG32(base_addr, FGMAC_DMA_OP_OFFSET, (FGMAC_DMA_OP_SR | FGMAC_DMA_OP_ST)); /* disable dma tx and rx */ - FGMAC_CLR_REG32(base_addr, FGMAC_CONF_OFFSET, (FGMAC_CONF_RX_EN | FGMAC_CONF_TX_EN)); /* disable gmac tx and rx */ -} - -static inline void FGmacResmuDmaUnderflow(uintptr base_addr) -{ - if (FGMAC_DMA_STATUS_UNF & FGMAC_READ_REG32(base_addr, FGMAC_DMA_STATUS_OFFSET)) - { - FGMAC_SET_REG32(base_addr, FGMAC_DMA_STATUS_OFFSET, FGMAC_DMA_STATUS_UNF); /* clear TBUS GMAC DMA flag */ - FGMAC_WRITE_REG32(base_addr, FGMAC_DMA_TX_POLL_REQ_OFFSET, 0xff); /* resume DMA transmission*/ - } -} - -/************************** Function Prototypes ******************************/ -/* 获取FGMAC控制器配置的MAC地址 */ -void FGmacGetMacAddr(uintptr base_addr, FGmacMacAddr mac_addr); - -/* 设置FGMAC控制器的MAC地址 */ -void FGmacSetMacAddr(uintptr base_addr, const FGmacMacAddr mac_addr); - -/* 触发FGMAC控制器软件复位 */ -FError FGmacSoftwareReset(uintptr base_addr, int timeout); - -FError FGmacFlushTxFifo(uintptr base_addr, int timeout); - -void FGmacStopDmaTrans(uintptr base_addr); - -/* wait fgmac mii not busy */ -FError FGmacPhyWaitBusBusy(uintptr base_addr, int timeout); - -#ifdef __cplusplus -} -#endif - -#endif \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/eth/fgmac/fgmac_intr.c b/bsp/phytium/libraries/standalone/drivers/eth/fgmac/fgmac_intr.c deleted file mode 100644 index fc9af72db5..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/eth/fgmac/fgmac_intr.c +++ /dev/null @@ -1,179 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fgmac_intr.c - * Date: 2022-04-06 14:46:52 - * LastEditTime: 2022-04-06 14:46:58 - * Description:  Functions in this file implement general purpose interrupt processing related - * functionality. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2021/07/13 first release - */ - -/***************************** Include Files *********************************/ - -#include "fgmac.h" -#include "fgmac_hw.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ -#define FGMAC_CALL_EVT_HANDLER(instance_p, evt) \ - {\ - if (NULL != (instance_p)->evt_handler[(evt)]) \ - { \ - (instance_p)->evt_handler[evt]((void *)(instance_p)); \ - }\ - } - -/************************** Variable Definitions *****************************/ - -/************************** Function Prototypes ******************************/ - -/** - * @name: FGmacInterruptHandler - * @msg: FGMAC中断处理函数 - * @return {*} - * @param {s32} vector, 中断向量号,此处没有用到 - {void} *param, 中断输入参数,此处传入的是FGMAC的驱动控制数据 - * @note 此函数运行在中断上下文 - */ -void FGmacInterruptHandler(s32 vector, void *param) -{ - FASSERT(param); - FGmac *instance_p = (FGmac *)param; - uintptr base_addr = instance_p->config.base_addr; - u32 status = 0; - - /* dma interrupt */ - status = FGMAC_READ_REG32(base_addr, FGMAC_DMA_STATUS_OFFSET); - - if (FGMAC_DMA_STATUS_GLI & status) - { - FGMAC_CALL_EVT_HANDLER(instance_p, FGMAC_PHY_STATUS_EVT); - } - - if (FGMAC_DMA_STATUS_RI & status) - { - FGMAC_CALL_EVT_HANDLER(instance_p, FGMAC_RX_COMPLETE_EVT); - FGMAC_SET_REG32(base_addr, FGMAC_DMA_STATUS_OFFSET, FGMAC_DMA_STATUS_RI); /* write to clear */ - } - - if (FGMAC_DMA_STATUS_TI & status) - { - FGMAC_CALL_EVT_HANDLER(instance_p, FGMAC_TX_COMPLETE_EVT); - FGMAC_SET_REG32(base_addr, FGMAC_DMA_STATUS_OFFSET, FGMAC_DMA_STATUS_TI); /* write to clear */ - } - - if (FGMAC_DMA_STATUS_AIS & status) - { - FGMAC_CALL_EVT_HANDLER(instance_p, FGMAC_DMA_ERR_EVT); - FGMAC_SET_REG32(base_addr, FGMAC_DMA_STATUS_OFFSET, FGMAC_DMA_STATUS_CLR_ABLE); - } - - FGMAC_WRITE_REG32(base_addr, FGMAC_DMA_STATUS_OFFSET, status); /* write to clear */ - - /* RGMII/SGMII Interrupt */ - status = FGMAC_READ_REG32(base_addr, FGMAC_INTR_STATUS_OFFSET); - if (status & FGMAC_ISR_STATUS_RSIS) - { - /* status changed, read SGMII register to clear */ - FGMAC_READ_REG32(base_addr, FGMAC_MAC_PHY_STATUS); - } - - return; -} - -/** - * @name: FGmacRegisterEvtHandler - * @msg: 注册FGMAC中断事件响应函数 - * @return {*} - * @param {FGmac} *instance_p 驱动控制数据 - * @param {u32} evt 中断事件类型 - * @param {FGmacEvtHandler} handler 中断事件响应函数 - * @note 注册的函数handler会在中断上下文执行 - */ -void FGmacRegisterEvtHandler(FGmac *instance_p, u32 evt, FGmacEvtHandler handler) -{ - FASSERT((NULL != instance_p) && (FGMAC_INTR_EVT_NUM > evt)); - instance_p->evt_handler[evt] = handler; -} - -/** - * @name: FGmacSetInterruptMask - * @msg: 屏蔽FGMAC中断 - * @return {*} - * @param {FGmac} *instance_p 驱动控制数据 - * @param {u32} intr_type 中断类型 GMAC中断/DMA中断 - * @param {u32} mask 中断屏蔽位 - * @note 在FGMAC驱动初始化成功后调用此函数 - */ -void FGmacSetInterruptMask(FGmac *instance_p, u32 intr_type, u32 mask) -{ - FASSERT(instance_p); - FASSERT(FGMAC_MAX_INTR_TYPE > intr_type); - u32 cur_mask = 0; - uintptr base_addr = instance_p->config.base_addr; - - if (FGMAC_CTRL_INTR == intr_type) - { - cur_mask = FGMAC_READ_REG32(base_addr, FGMAC_INTR_MASK_OFFSET); - cur_mask |= mask; - FGMAC_WRITE_REG32(base_addr, FGMAC_INTR_MASK_OFFSET, cur_mask); - } - else - { - cur_mask = FGMAC_READ_REG32(base_addr, FGMAC_DMA_INTR_OFFSET); - cur_mask &= (~mask); - FGMAC_WRITE_REG32(base_addr, FGMAC_DMA_INTR_OFFSET, cur_mask); - } - - return; -} - -/** - * @name: FGmacSetInterruptUmask - * @msg: 使能FGMAC中断 - * @return {*} - * @param {FGmac} *instance_p 驱动控制数据 - * @param {u32} intr_type 中断类型 GMAC中断/DMA中断 - * @param {u32} mask 中断使能标志位 - * @note 在FGMAC驱动初始化成功后调用此函数 - */ -void FGmacSetInterruptUmask(FGmac *instance_p, u32 intr_type, u32 mask) -{ - FASSERT(instance_p); - FASSERT(FGMAC_MAX_INTR_TYPE > intr_type); - u32 cur_mask = 0; - uintptr base_addr = instance_p->config.base_addr; - - if (FGMAC_CTRL_INTR == intr_type) - { - cur_mask = FGMAC_READ_REG32(base_addr, FGMAC_INTR_MASK_OFFSET); - cur_mask &= (~mask); - FGMAC_WRITE_REG32(base_addr, FGMAC_INTR_MASK_OFFSET, cur_mask); - } - else - { - cur_mask = FGMAC_READ_REG32(base_addr, FGMAC_DMA_INTR_OFFSET); - cur_mask |= mask; - FGMAC_WRITE_REG32(base_addr, FGMAC_DMA_INTR_OFFSET, cur_mask); - } - - return; -} diff --git a/bsp/phytium/libraries/standalone/drivers/eth/fgmac/fgmac_sinit.c b/bsp/phytium/libraries/standalone/drivers/eth/fgmac/fgmac_sinit.c deleted file mode 100644 index 4fc31d4153..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/eth/fgmac/fgmac_sinit.c +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fgmac_sinit.c - * Date: 2022-04-06 14:46:52 - * LastEditTime: 2022-04-06 14:46:58 - * Description:  This file contains lookup method by device ID when success, it returns - * pointer to config table to be used to initialize the device. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2021/07/13 first release - */ - - -/* - This file contains the implementation of driver's static initialization functionality. -- 驱动静态初始化 */ - -/***************************** Include Files *********************************/ - -#include "ftypes.h" -#include "fparameters.h" -#include "fgmac.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Variable Definitions *****************************/ - -extern const FGmacConfig FGMAC_CONFIG_TBL[FGMAC_NUM]; - -/************************** Function Prototypes ******************************/ -/** - * @name: FGmacLookupConfig - * @msg: 获取FGMAC驱动的默认配置参数 - * @return {const FGmacConfig *}, 驱动默认配置 - * @param {u32} instance_id, 驱动控制器号 - * @note 返回FGMAC的默认配置,复制后修改配置 - * 需要确认当前平台支持输入的instance_id - */ -const FGmacConfig *FGmacLookupConfig(u32 instance_id) -{ - const FGmacConfig *ptr = NULL; - u32 index; - - for (index = 0; index < (u32)FGMAC_NUM; index++) - { - if (FGMAC_CONFIG_TBL[index].instance_id == instance_id) - { - ptr = &FGMAC_CONFIG_TBL[index]; - break; - } - } - - return (const FGmacConfig *)ptr; -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/eth/fgmac/phy/ar803x/fgmac_ar803x.c b/bsp/phytium/libraries/standalone/drivers/eth/fgmac/phy/ar803x/fgmac_ar803x.c deleted file mode 100644 index 941d7d66b8..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/eth/fgmac/phy/ar803x/fgmac_ar803x.c +++ /dev/null @@ -1,209 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fgmac_ar803x.c - * Date: 2022-04-06 14:46:52 - * LastEditTime: 2022-04-06 14:46:58 - * Description:  This file is for ar803x PHYs chip - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2021/07/13 first release - */ - - -/***************************** Include Files *********************************/ - -#include "fio.h" -#include "ferror_code.h" -#include "ftypes.h" -#include "fdebug.h" - -#include "fgmac_hw.h" -#include "fgmac.h" -#include "fgmac_ar803x.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ -#define FGMAC_DEBUG_TAG "FGMAC-AR803X" -#define FGMAC_ERROR(format, ...) FT_DEBUG_PRINT_E(FGMAC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FGMAC_WARN(format, ...) FT_DEBUG_PRINT_W(FGMAC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FGMAC_INFO(format, ...) FT_DEBUG_PRINT_I(FGMAC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FGMAC_DEBUG(format, ...) FT_DEBUG_PRINT_D(FGMAC_DEBUG_TAG, format, ##__VA_ARGS__) - -/************************** Function Prototypes ******************************/ -/* write phy register */ -extern FError FGmacWritePhyReg(FGmac *instance_p, u32 phy_address, u16 phy_reg, u16 phy_reg_val); -/* read phy register */ -extern FError FGmacReadPhyReg(FGmac *instance_p, u32 phy_address, u16 phy_reg, u16 *phy_reg_val_p); - - -/************************** Variable Definitions *****************************/ - -/*****************************************************************************/ - -/* 此文件主要为了完成用户对外接口,用户可以使用这些接口直接开始工作 */ - -/* - 包括用户API的定义和实现 - - 同时包含必要的OPTION方法,方便用户进行配置 - - 如果驱动可以直接进行I/O操作,在此源文件下可以将API 进行实现 */ - - -/** - * @name: FGmacAr803xDebugRegRead - * @msg: read phy debug register value - * @param {FGmac} *instance_p, instance of FGmac controller - * @param {u32} phy_address, phy address connect to fgmac - * @param {u16} debug_reg, phy debug register offset to read - * @param {u16} *reg_data_p, phy register value pointer - * @return err code information, FGMAC_SUCCESS indicates success,others indicates failed - */ -static FError FGmacAr803xDebugRegRead(FGmac *instance_p, u32 phy_address, u16 debug_reg, u16 *reg_data_p) -{ - FASSERT(instance_p && reg_data_p); - FError ret = FGMAC_SUCCESS; - - ret = FGmacWritePhyReg(instance_p, phy_address, FGMAC_AR803X_DEBUG_ADDR, debug_reg & FGMAC_AR803X_DEBUG_DATA_MASK); - if (FGMAC_SUCCESS != ret) - { - return ret; - } - - ret = FGmacReadPhyReg(instance_p, phy_address, FGMAC_AR803X_DEBUG_DATA, reg_data_p); - return ret; -} - -static FError FGmacAr803xMaskReg(FGmac *instance_p, u32 phy_address, u16 reg, u32 clear, u32 set) -{ - FASSERT(instance_p); - FError ret = FGMAC_SUCCESS; - u16 val = 0; - - ret = FGmacReadPhyReg(instance_p, phy_address, reg, &val); - if (FGMAC_SUCCESS != ret) - { - return ret; - } - - val &= ~clear; - val |= set; - - ret = FGmacWritePhyReg(instance_p, phy_address, FGMAC_AR803X_DEBUG_DATA, val); - return ret; -} - -/** - * @name: FGmacAr803xDisableHibernate - * @msg: disable phy Power hibernate control - * @param {FGmac} *instance_p, instance of FGmac controller - * @return err code information, FGMAC_SUCCESS indicates success,others indicates failed - */ -FError FGmacAr803xDisableHibernate(FGmac *instance_p) -{ - FASSERT(instance_p); - u32 ret = FGMAC_SUCCESS; - u16 reg_val = 0; - - ret = FGmacAr803xDebugRegRead(instance_p, instance_p->phy_addr, FGMAC_AR803X_DEBUG_HIB_CTRL_REG, ®_val); - if (FGMAC_SUCCESS != ret) - { - return ret; - } - - reg_val &= ~FGMAC_AR803X_PS_HIB_EN; - ret = FGmacWritePhyReg(instance_p, instance_p->phy_addr, FGMAC_AR803X_DEBUG_DATA, reg_val); - - reg_val = 0; - FGmacAr803xDebugRegRead(instance_p, instance_p->phy_addr, FGMAC_AR803X_DEBUG_HIB_CTRL_REG, ®_val); - FGMAC_INFO("Debug reg: 0x%lx, ret: 0x%lx", reg_val, ret); - - return ret; -} - -/** - * @name: FFmacAr803xRxClockDelayControl - * @msg: control phy debug register0 for rx clock delay - * @param {FGmac} *instance_p, instance of FGmac controller - * @param {u32} enable_setting, 1-enable, else disable - * @return err code information, FGMAC_SUCCESS indicates success,others indicates failed - */ -FError FFmacAr803xRxClockDelayControl(FGmac *instance_p, u32 enable_setting) -{ - FASSERT(instance_p); - u32 ret = FGMAC_SUCCESS; - u16 reg_val = 0; - - ret = FGmacAr803xDebugRegRead(instance_p, instance_p->phy_addr, FGMAC_AR803X_RX_CLOCK_CTRL_REG, ®_val); - if (FGMAC_SUCCESS != ret) - { - return ret; - } - - if (enable_setting == FGMAC_RX_CLOCK_ENABLE) - { - reg_val |= FGMAC_AR803X_RX_CLOCK_DELAY; - } - else - { - reg_val &= ~FGMAC_AR803X_RX_CLOCK_DELAY; - } - - ret = FGmacWritePhyReg(instance_p, instance_p->phy_addr, FGMAC_AR803X_DEBUG_DATA, reg_val); - - reg_val = 0; - FGmacAr803xDebugRegRead(instance_p, instance_p->phy_addr, FGMAC_AR803X_RX_CLOCK_CTRL_REG, ®_val); - FGMAC_INFO("Debug reg: 0x%lx, ret: 0x%lx", reg_val, ret); - - return ret; -} - -/** - * @name: FFmacAr803xTxClockDelayControl - * @msg: control phy debug register5 for tx clock delay - * @param {FGmac} *instance_p, instance of FGmac controller - * @param {u32} enable_setting, 1-enable, else disable - * @return err code information, FGMAC_SUCCESS indicates success,others indicates failed - */ -FError FFmacAr803xTxClockDelayControl(FGmac *instance_p, u32 enable_setting) -{ - FASSERT(instance_p); - u32 ret = FGMAC_SUCCESS; - u16 reg_val = 0; - - ret = FGmacAr803xDebugRegRead(instance_p, instance_p->phy_addr, FGMAC_AR803X_TX_CLOCK_CTRL_REG, ®_val); - if (FGMAC_SUCCESS != ret) - { - return ret; - } - - if (enable_setting == FGMAC_TX_CLOCK_ENABLE) - { - reg_val |= FGMAC_AR803X_TX_CLOCK_DELAY; - } - else - { - reg_val &= ~FGMAC_AR803X_TX_CLOCK_DELAY; - } - - ret = FGmacWritePhyReg(instance_p, instance_p->phy_addr, FGMAC_AR803X_DEBUG_DATA, reg_val); - - reg_val = 0; - FGmacAr803xDebugRegRead(instance_p, instance_p->phy_addr, FGMAC_AR803X_TX_CLOCK_CTRL_REG, ®_val); - FGMAC_INFO("Debug reg: 0x%lx, ret: 0x%lx", reg_val, ret); - - return ret; -} diff --git a/bsp/phytium/libraries/standalone/drivers/eth/fgmac/phy/ar803x/fgmac_ar803x.h b/bsp/phytium/libraries/standalone/drivers/eth/fgmac/phy/ar803x/fgmac_ar803x.h deleted file mode 100644 index 65defb514d..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/eth/fgmac/phy/ar803x/fgmac_ar803x.h +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fgmac_ar803x.h - * Date: 2022-04-06 14:46:52 - * LastEditTime: 2022-04-06 14:46:58 - * Description:  This file is for This file is for ar803x PHYs chip - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2021/07/13 first release - */ - - -#ifndef FGMAC_AR803X_H -#define FGMAC_AR803X_H - -/***************************** Include Files *********************************/ - -#include "ftypes.h" -#include "fassert.h" -#include "fgmac_phy.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/************************** Constant Definitions *****************************/ - -/* phy id */ -#define FGMAC_AR803X_PHY_ID1 0x4D /*803xPhy芯片 id1值为4d 8035芯片 id1 为0x004d id2 为0xd072 */ -#define FGMAC_AR803X_PHY_ID2 0x4D - -/* address and data port */ -#define FGMAC_AR803X_DEBUG_ADDR 0x1DU -#define FGMAC_AR803X_DEBUG_DATA 0x1EU - -/* debug register offset */ -#define FGMAC_AR803X_DEBUG_HIB_CTRL_REG 0xBU -#define FGMAC_AR803X_RX_CLOCK_CTRL_REG 0x0U -#define FGMAC_AR803X_TX_CLOCK_CTRL_REG 0x5U - -#define FGMAC_AR803X_DEBUG_DATA_MASK GENMASK(5, 0) - -/* rx clock delay setting */ -#define FGMAC_RX_CLOCK_ENABLE 1 -#define FGMAC_RX_CLOCK_DISABLE 0 - -/* tx clock delay setting */ -#define FGMAC_TX_CLOCK_ENABLE 1 -#define FGMAC_TX_CLOCK_DISABLE 0 - -/* hib ctrl and auto-negotiation register */ -#define FGMAC_AR803X_PS_HIB_EN BIT(15) - -#define FGMAC_AR803X_RX_CLOCK_DELAY BIT(15) -#define FGMAC_AR803X_TX_CLOCK_DELAY BIT(8) - -/**************************** Type Definitions *******************************/ - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ - -/* disable phy Power hibernate control */ -FError FGmacAr803xDisableHibernate(FGmac *instance_p); - -/* control phy debug register0 for rx clock delay */ -FError FFmacAr803xRxClockDelayControl(FGmac *instance_p, u32 enable_setting); - -/* control phy debug register5 for tx clock delay */ -FError FFmacAr803xTxClockDelayControl(FGmac *instance_p, u32 enable_setting); - -#ifdef __cplusplus -} -#endif - - -#endif diff --git a/bsp/phytium/libraries/standalone/drivers/eth/fgmac/phy/fgmac_phy.c b/bsp/phytium/libraries/standalone/drivers/eth/fgmac/phy/fgmac_phy.c deleted file mode 100644 index 562544262b..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/eth/fgmac/phy/fgmac_phy.c +++ /dev/null @@ -1,551 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fgmac_phy.c - * Date: 2022-04-06 14:46:52 - * LastEditTime: 2022-04-06 14:46:53 - * Description:  This file implements functionalities to: - * Detect the available PHYs connected to a MAC - * Negotiate speed - * Configure speed - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2021/07/13 first release - */ - -/***************************** Include Files *********************************/ - -#include "fassert.h" -#include "fio.h" -#include "ferror_code.h" -#include "ftypes.h" -#include "fdebug.h" -#include "fparameters.h" -#include "fgmac_hw.h" -#include "fgmac_phy.h" -#include "fgmac.h" -#include "fsleep.h" -#include "sdkconfig.h" - -#ifdef CONFIG_FGMAC_PHY_AR803X - #include "fgmac_ar803x.h" -#endif - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ -#define FGMAC_DEBUG_TAG "FGMAC-PHY" -#define FGMAC_ERROR(format, ...) FT_DEBUG_PRINT_E(FGMAC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FGMAC_WARN(format, ...) FT_DEBUG_PRINT_W(FGMAC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FGMAC_INFO(format, ...) FT_DEBUG_PRINT_I(FGMAC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FGMAC_DEBUG(format, ...) FT_DEBUG_PRINT_D(FGMAC_DEBUG_TAG, format, ##__VA_ARGS__) - -/************************** Function Prototypes ******************************/ - - -/************************** Variable Definitions *****************************/ - -/*****************************************************************************/ - -/* 此文件主要为了完成用户对外接口,用户可以使用这些接口直接开始工作 */ - -/* - 包括用户API的定义和实现 - - 同时包含必要的OPTION方法,方便用户进行配置 - - 如果驱动可以直接进行I/O操作,在此源文件下可以将API 进行实现 */ - -/* - 包括用户API的定义和实现 - - 同时包含必要的OPTION方法,方便用户进行配置 - - 如果驱动可以直接进行I/O操作,在此源文件下可以将API 进行实现 */ - -/** - * @name: FGmacWaitPhyAutoNegotiationEnd - * @msg: wait fgmac phy auto negotiation complete - * @param {FGmac} *instance_p, instance of FGmac controller - * @param {u32} phy_address, phy address connect to fgmac - * @return err code information, FGMAC_SUCCESS indicates success,others indicates failed - */ -static FError FGmacWaitPhyAutoNegotiationEnd(FGmac *instance_p, u32 phy_address) -{ - u16 reg_val; - FError ret = FGMAC_SUCCESS; - int timeout = FGMAC_RETRY_TIMES; - do - { - reg_val = 0; - ret = FGmacReadPhyReg(instance_p, phy_address, FGMAC_PHY_MII_STATUS_REG, ®_val); - if (FGMAC_SUCCESS != ret) - { - break; - } - fsleep_millisec(20); - } - while ((FGMAC_PHY_MII_SR_AUTO_NEGOT_COMPLETE != (FGMAC_PHY_MII_SR_AUTO_NEGOT_COMPLETE & reg_val)) && - (0 < --timeout)); - - if (FGMAC_SUCCESS != ret) - { - return ret; - } - - if (0 >= timeout) - { - FGMAC_ERROR("Auto negotiation timeout, reg_val: %#x", reg_val); - ret = FGmacReadPhyReg(instance_p, phy_address, FGMAC_PHY_MII_CTRL_REG, ®_val); - FGMAC_ERROR("Auto negotiation timeout, FGMAC_PHY_MII_CTRL_REG reg_val: %#x", reg_val); - ret = FGMAC_ERR_TIMEOUT; - } - - return ret; -} - -/** - * @name: FGmacPhyAutoNegotiation - * @msg: fgmac phy auto negotiation configuration - * @param {FGmac} *instance_p, instance of FGmac controller - * @param {u32} phy_address, phy address connect to fgmac - * @return err code information, FGMAC_SUCCESS indicates success,others indicates failed - */ -static FError FGmacPhyAutoNegotiation(FGmac *instance_p, u32 phy_address) -{ - FASSERT(instance_p); - u16 reg_val; - FError ret = FGMAC_SUCCESS; - int timeout = FGMAC_RETRY_TIMES; - /* check link state */ - do - { - reg_val = 0; - ret = FGmacReadPhyReg(instance_p, phy_address, FGMAC_PHY_MII_STATUS_REG, ®_val); - if (FGMAC_SUCCESS != ret) - { - break; - } - fsleep_millisec(20); - - } - while (!(reg_val & FGMAC_PHY_MII_SR_LSTATUS) && (0 <= --timeout)); - - if (0 >= timeout) - { - FGMAC_ERROR("Timeout when wait phy auto negotiation."); - return FGMAC_ERR_TIMEOUT; - } - - if (FGMAC_SUCCESS != ret) - { - return ret; - } - - ret = FGmacReadPhyReg(instance_p, phy_address, FGMAC_PHY_MII_CTRL_REG, ®_val); - if (FGMAC_SUCCESS != ret) - { - FGMAC_ERROR("Auto negotiation failed."); - return ret; - } - - reg_val |= FGMAC_PHY_MII_CR_AUTO_NEGOT; - - ret = FGmacWritePhyReg(instance_p, phy_address, FGMAC_PHY_MII_CTRL_REG, reg_val); - if (FGMAC_SUCCESS != ret) - { - FGMAC_ERROR("Auto negotiation failed."); - return ret; - } - - ret = FGmacWaitPhyAutoNegotiationEnd(instance_p, phy_address); - if (FGMAC_SUCCESS != ret) - { - return ret; - } - - return ret; -} - -/** - * @name: FGmacPhyNoneNegotiation - * @msg: fgmac phy not negotiation configuration - * @param {FGmac} *instance_p, instance of FGmac controller - * @param {u32} phy_address, phy address connect to fgmac - * @return err code information, FGMAC_SUCCESS indicates success,others indicates failed - */ -static FError FGmacPhyNoneNegotiation(FGmac *instance_p, u32 phy_address) -{ - FASSERT(instance_p); - u16 control_reg = 0; - FError ret = FGMAC_SUCCESS; - - /* read phy control register */ - ret = FGmacReadPhyReg(instance_p, phy_address, FGMAC_PHY_MII_CTRL_REG, &control_reg); - if (FGMAC_SUCCESS != ret) - { - return ret; - } - - /* 设置半双工模式 */ - if (FGMAC_PHY_MODE_FULLDUPLEX == instance_p->config.duplex_mode) - { - control_reg |= FGMAC_PHY_MII_CR_DUPLEX_MODE; - } - else - { - control_reg &= ~(FGMAC_PHY_MII_CR_DUPLEX_MODE); - } - - /* 设置速度bit6|bit13, 10b-1000M, 01b-100M, 00b-10M */ - switch (instance_p->config.speed) - { - case FGMAC_PHY_SPEED_1000: - control_reg |= FGMAC_PHY_MII_CR_SPEED_SEL_MSB; - control_reg &= ~(FGMAC_PHY_MII_CR_SPEED_SEL_LSB); - break; - case FGMAC_PHY_SPEED_100: - control_reg &= ~(FGMAC_PHY_MII_CR_SPEED_SEL_MSB); - control_reg |= FGMAC_PHY_MII_CR_SPEED_SEL_LSB; - break; - case FGMAC_PHY_SPEED_10: - control_reg &= ~(FGMAC_PHY_MII_CR_SPEED_SEL_MSB); - control_reg &= ~(FGMAC_PHY_MII_CR_SPEED_SEL_LSB); - break; - default: - FASSERT(0); - break; - } - - /* disable auto-negotiation */ - control_reg &= ~(FGMAC_PHY_MII_CR_AUTO_NEGOT); - control_reg &= ~(FGMAC_PHY_MII_CR_RESTART_AUTO_NEGO); - - /* write phy control register */ - ret = FGmacWritePhyReg(instance_p, phy_address, FGMAC_PHY_MII_CTRL_REG, control_reg); - if (FGMAC_SUCCESS != ret) - { - FGMAC_ERROR("Disable auto negotiation failed."); - return ret; - } - - return ret; -} - -/** - * @name: FGmacWritePhyReg - * @msg: write phy register value - * @param {FGmac} *instance_p, instance of FGmac controller - * @param {u32} phy_address, phy address connect to fgmac - * @param {u16} phy_reg, phy register offset to write - * @param {u16} phy_reg_val, value write to phy register - * @return err code information, FGMAC_SUCCESS indicates success,others indicates failed - */ -FError FGmacWritePhyReg(FGmac *instance_p, u32 phy_address, u16 phy_reg, u16 phy_reg_val) -{ - FASSERT(instance_p); - u32 cmd_reg_val; - uintptr base_addr = instance_p->config.base_addr; - FError ret = FGMAC_SUCCESS; - - cmd_reg_val = FGMAC_MII_ADDR_CR(instance_p->config.mdc_clk_hz); - cmd_reg_val |= FGMAC_MII_ADDR_PA(phy_address); - cmd_reg_val |= FGMAC_MII_ADDR_GR(phy_reg); - cmd_reg_val |= FGMAC_MII_ADDR_GW; - cmd_reg_val |= FGMAC_MII_ADDR_GB; - - FGMAC_WRITE_REG32(base_addr, FGMAC_GMII_DATA_OFFSET, phy_reg_val); - FGMAC_WRITE_REG32(base_addr, FGMAC_GMII_ADDR_OFFSET, cmd_reg_val); - - ret = FGmacPhyWaitBusBusy(base_addr, FGMAC_RETRY_TIMES); - return ret; -} - -/** - * @name: FGmacReadPhyReg - * @msg: read phy register value - * @param {FGmac} *instance_p, instance of FGmac controller - * @param {u32} phy_address, phy address connect to fgmac - * @param {u16} phy_reg, phy register offset to read - * @param {u16} *phy_reg_val_p, phy register value pointer - * @return err code information, FGMAC_SUCCESS indicates success,others indicates failed - */ -FError FGmacReadPhyReg(FGmac *instance_p, u32 phy_address, u16 phy_reg, u16 *phy_reg_val_p) -{ - FASSERT(instance_p && phy_reg_val_p); - u32 cmd_reg_val; - uintptr base_addr = instance_p->config.base_addr; - FError ret = FGMAC_SUCCESS; - - cmd_reg_val = FGMAC_MII_ADDR_CR(instance_p->config.mdc_clk_hz); - cmd_reg_val |= FGMAC_MII_ADDR_PA(phy_address); - cmd_reg_val |= FGMAC_MII_ADDR_GR(phy_reg); - cmd_reg_val &= ~FGMAC_MII_ADDR_GW; - cmd_reg_val |= FGMAC_MII_ADDR_GB; - - ret = FGmacPhyWaitBusBusy(base_addr, FGMAC_RETRY_TIMES); - if (FGMAC_SUCCESS != ret) - { - return ret; - } - - FGMAC_WRITE_REG32(base_addr, FGMAC_GMII_ADDR_OFFSET, cmd_reg_val); - - ret = FGmacPhyWaitBusBusy(base_addr, FGMAC_RETRY_TIMES); - if (FGMAC_SUCCESS != ret) - { - return ret; - } - - *phy_reg_val_p = FGMAC_MII_DATA_GD_MASK & FGMAC_READ_REG32(base_addr, FGMAC_GMII_DATA_OFFSET); - return ret; -} - -/** - * @name: FGmacPhyDetect - * @msg: detect fgmac phy, and get phy addr - * @param {FGmac} *instance_p, instance of FGmac controller - * @return err code information, FGMAC_SUCCESS indicates success,others indicates failed - */ -FError FGmacPhyDetect(FGmac *instance_p) -{ - u32 phy_addr = 0; - u16 phy_reg = 0, phy_id1_reg, phy_id2_reg; - FError ret = FGMAC_SUCCESS; - u32 invalid_count = 0; - - for (phy_addr = 0; phy_addr < FGMAC_PHY_MAX_NUM; phy_addr++) - { - ret = FGmacReadPhyReg(instance_p, phy_addr, FGMAC_PHY_MII_STATUS_REG, &phy_reg); - if (ret != FGMAC_SUCCESS) - { - FGMAC_ERROR("%s, phy operation is busy.", __func__); - return ret; - } - - if (phy_reg != 0xffff) - { - ret = FGmacReadPhyReg(instance_p, phy_addr, FGMAC_PHY_MII_PHYSID1_REG, &phy_id1_reg); - ret |= FGmacReadPhyReg(instance_p, phy_addr, FGMAC_PHY_MII_PHYSID2_REG, &phy_id2_reg); - - if ((ret == FGMAC_SUCCESS) && (phy_id1_reg != 0xffff) && (phy_id2_reg != 0xffff)) - { - /* assign the max valid phy address to instance_p->phy_addr */ - instance_p->phy_addr = phy_addr; - instance_p->phy_valid_mask |= (1 << phy_addr); - instance_p->phy_id1 = phy_id1_reg; - - FGMAC_INFO("Phy_addr: [%d], phy_valid_mask: 0x%x, phy id: [0x%08x][0x%08x], phy_reg:0x%x", - phy_addr, instance_p->phy_valid_mask, phy_id1_reg, phy_id2_reg, phy_reg); - - return ret; - } - } - else - { - invalid_count++; - } - } - - if (invalid_count == FGMAC_PHY_MAX_NUM) - { - FGMAC_ERROR("Phy detect failed, phy address is not found!"); - return FGMAC_ERR_PHY_IS_NOT_FOUND; - } - - return FGMAC_SUCCESS; -} - -/** - * @name: FGmacPhyReset - * @msg: detect fgmac phy, and get phy addr - * @param {FGmac} *instance_p, instance of FGmac controller - * @param {u32} phy_address, phy address connect to fgmac - * @return err code information, FGMAC_SUCCESS indicates success,others indicates failed - */ -FError FGmacPhyReset(FGmac *instance_p, u32 phy_address) -{ - FError ret = FGMAC_ERR_PHY_NOT_SUPPORT; - uintptr base_addr = instance_p->config.base_addr; - ret = FGmacWritePhyReg(instance_p, phy_address, FGMAC_PHY_MII_CTRL_REG, FGMAC_PHY_MII_CR_RESET); - if (FGMAC_SUCCESS != ret) - { - FGMAC_ERROR("Reset phy failed."); - return ret; - } - return FGMAC_SUCCESS; -} - -/** - * @name: FGmacGetPhySpecialStatus - * @msg: read phy special status register to get speed and duplex mode - * @param {FGmac} *instance_p, instance of FGmac controller - * @param {u32} phy_address, phy address connect to fgmac - * @return err code information, FGMAC_SUCCESS indicates success,others indicates failed - */ -static FError FGmacGetPhySpecialStatus(FGmac *instance_p, u32 phy_address) -{ - u16 phy_special_status = 0; - u32 ret = FGMAC_SUCCESS; - - ret = FGmacReadPhyReg(instance_p, phy_address, FGMAC_PHY_MII_PHY_SPECIAL_REG, &phy_special_status); - if (FGMAC_SUCCESS != ret) - { - return ret; - } - - switch (phy_special_status & FGMAC_PHY_SPECIFIC_STATUS_SPEED_MASK) - { - case FGMAC_PHY_SPECIFIC_STATUS_SPEED_1000M: - instance_p->config.speed = FGMAC_PHY_SPEED_1000; - break; - case FGMAC_PHY_SPECIFIC_STATUS_SPEED_100M: - instance_p->config.speed = FGMAC_PHY_SPEED_100; - break; - case FGMAC_PHY_SPECIFIC_STATUS_SPEED_10M: - instance_p->config.speed = FGMAC_PHY_SPEED_10; - break; - default: - break; - } - - if (phy_special_status & FGMAC_PHY_SPECIFIC_STATUS_DUPLEX_MASK) - { - instance_p->config.duplex_mode = FGMAC_PHY_MODE_FULLDUPLEX; - } - else - { - instance_p->config.duplex_mode = FGMAC_PHY_MODE_HALFDUPLEX; - } - - return ret; -} - -/** - * @name: FGmacPhyCfgInitialize - * @msg: fgmac phy configuration - * @param {FGmac} *instance_p, instance of FGmac controller - * @return err code information, FGMAC_SUCCESS indicates success,others indicates failed - */ -FError FGmacPhyCfgInitialize(FGmac *instance_p) -{ - FASSERT(instance_p); - uintptr base_addr = instance_p->config.base_addr; - FError ret = FGMAC_SUCCESS; - u32 phy_addr; - - /* detect phy address, and assigned the minimum valid address to phy_addr */ - ret = FGmacPhyDetect(instance_p); - if (FGMAC_SUCCESS != ret) - { - FGMAC_ERROR("Phy detect failed!"); - return ret; - } - - for (phy_addr = 0; phy_addr <= instance_p->phy_addr; phy_addr++) - { - /* 计算出当前位置 */ - if (instance_p->phy_valid_mask & (1 << phy_addr)) - { - /* set phy power down and set phy Normal operation */ - FGmacPhyReset(instance_p, phy_addr); - - /* auto negotiation */ - if (instance_p->config.en_auto_negtiation) - { - ret = FGmacPhyAutoNegotiation(instance_p, phy_addr); - if (FGMAC_SUCCESS != ret) - { - FGMAC_ERROR("Auto negotiation phy failed."); - return ret; - } - } - else - { - /* if gmac is disable auto negotiation, we need set speed */ - ret = FGmacPhyNoneNegotiation(instance_p, phy_addr); - if (FGMAC_SUCCESS != ret) - { - FGMAC_ERROR("Negotiation phy failed."); - return ret; - } - } - - /* read phy special status register to get speed and duplex mode */ - ret = FGmacGetPhySpecialStatus(instance_p, phy_addr); - if (FGMAC_SUCCESS != ret) - { - FGMAC_ERROR("Get phy special status failed."); - return ret; - } - - FGMAC_DEBUG("instance_p->config.speed: %d", instance_p->config.speed); - FGMAC_DEBUG("instance_p->config.duplex_mode: 0x%x", instance_p->config.duplex_mode); - /* update mac controller speed setting */ - FGmacControllerSpeedConfig(instance_p, instance_p->config.speed); - - /* update mac controller duplex mode setting */ - FGmacControllerDuplexConfig(instance_p, instance_p->config.duplex_mode); - } - } - return ret; -} - -FError FGmacPhyCfgDeInitialize(FGmac *instance_p) -{ - FASSERT(instance_p); - uintptr base_addr = instance_p->config.base_addr; - FError ret = FGMAC_SUCCESS; - u32 phy_addr; - - for (phy_addr = 0; phy_addr <= instance_p->phy_addr; phy_addr++) - { - /* 计算出当前位置 */ - if (instance_p->phy_valid_mask & (1 << phy_addr)) - { - /* set phy power down and set phy Normal operation */ - FGmacPhyReset(instance_p, phy_addr); - } - } - return ret; -} - -/** - * @name: FGmacPhyAwaken - * @msg: fgmac phy awaken - * @param {FGmac} *instance_p, instance of FGmac controller - * @return err code information, FGMAC_SUCCESS indicates success,others indicates failed - */ -FError FGmacPhyAwaken(FGmac *instance_p) -{ - - FError ret = FGMAC_SUCCESS; - -#ifdef CONFIG_FGMAC_PHY_AR803X - ret = FGmacPhyDetect(instance_p); - if (FGMAC_SUCCESS != ret) - { - FGMAC_ERROR("Phy detect failed!"); - return ret; - } - - u16 phy_id1; - phy_id1 = instance_p->phy_id1; - - if (phy_id1 == FGMAC_AR803X_PHY_ID1) - { - - ret = FGmacAr803xDisableHibernate(instance_p); - - } -#endif - return ret; -} diff --git a/bsp/phytium/libraries/standalone/drivers/eth/fgmac/phy/fgmac_phy.h b/bsp/phytium/libraries/standalone/drivers/eth/fgmac/phy/fgmac_phy.h deleted file mode 100644 index 8ce0ef797f..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/eth/fgmac/phy/fgmac_phy.h +++ /dev/null @@ -1,217 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fgmac_phy.h - * Date: 2022-04-06 14:46:52 - * LastEditTime: 2022-04-06 14:46:58 - * Description:  This file implements functionalities to: - * Detect the available PHYs connected to a MAC - * Negotiate speed - * Configure speed - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2021/07/13 first release - */ - -#ifndef FGMAC_PHY_H -#define FGMAC_PHY_H - -#include "ftypes.h" -#include "fassert.h" -#include "fkernel.h" -#include "fgmac.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/***************************** Include Files *********************************/ - -/************************** Constant Definitions *****************************/ -#define FGMAC_PHY_MAX_NUM 32U - -/* Generic MII registers. */ -#define FGMAC_PHY_MII_CTRL_REG 0x00 /* Basic mode control register */ -#define FGMAC_PHY_MII_STATUS_REG 0x01 /* Basic mode status register */ -#define FGMAC_PHY_MII_PHYSID1_REG 0x02 /* PHYS ID 1 */ -#define FGMAC_PHY_MII_PHYSID2_REG 0x03 /* PHYS ID 2 */ -#define FGMAC_PHY_MII_AUTONEG_REG 0x04 /* Advertisement control reg */ -#define FGMAC_PHY_MII_LP_REG 0x05 /* Link partner ability reg */ -#define FGMAC_PHY_MII_AUTONEG_EX_REG 0x06 /* Expansion register */ -#define FGMAC_PHY_MII_NEXT_PAGE_REG 0x07 /* Next Page Transmit Register */ -#define FGMAC_PHY_MII_LP_NEXT_PAGE_REG 0x08 /* Link Partner Next Page Register */ -#define FGMAC_PHY_MII_CTRL1000_REG 0x09 /* 1000BASE-T control */ -#define FGMAC_PHY_MII_STAT1000_REG 0x0a /* 1000BASE-T status */ -#define FGMAC_PHY_MII_MMD_CTRL_REG 0x0d /* MMD Access Control Register */ -#define FGMAC_PHY_MII_MMD_DATA_REG 0x0e /* MMD Access Data Register */ -#define FGMAC_PHY_MII_ESTATUS_REG 0x0f /* Extended Status */ -#define FGMAC_PHY_MII_FUNC_CONTROL_REG 0x10 /* Function control */ -#define FGMAC_PHY_MII_PHY_SPECIAL_REG 0x11 /* PHY-specific status */ -#define FGMAC_PHY_MII_DCOUNTER_REG 0x12 /* Disconnect counter */ -#define FGMAC_PHY_MII_FCSCOUNTER_REG 0x13 /* False carrier counter */ -#define FGMAC_PHY_MII_NWAYTEST_REG 0x14 /* N-way auto-neg test reg */ -#define FGMAC_PHY_MII_RERRCOUNTER_REG 0x15 /* Receive error counter */ -#define FGMAC_PHY_MII_SREVISION_REG 0x16 /* Silicon revision */ -#define FGMAC_PHY_MII_RESV1_REG 0x17 /* Reserved... */ -#define FGMAC_PHY_MII_LBRERROR_REG 0x18 /* Lpback, rx, bypass error */ -#define FGMAC_PHY_MII_PHYADDR_REG 0x19 /* PHY address */ -#define FGMAC_PHY_MII_RESV2_REG 0x1a /* Reserved... */ -#define FGMAC_PHY_MII_TPISTATUS_REG 0x1b /* TPI status for 10mbps */ -#define FGMAC_PHY_MII_NCONFIG_REG 0x1c /* Network interface config */ - -#define FGMAC_PHY_ID1 (0xffff) -#define FGMAC_PHY_ID2 (0xffff) - -/* Basic mode control register */ -#define FGMAC_PHY_MII_CR_RES GENMASK(5, 0) /* Unused... */ -#define FGMAC_PHY_MII_CR_SPEED_SEL_MSB BIT(6) /* MSB of Speed (1000) */ -#define FGMAC_PHY_MII_CR_COLLISION_TEST BIT(7) /* Collision test */ -#define FGMAC_PHY_MII_CR_DUPLEX_MODE BIT(8) /* Full duplex */ -#define FGMAC_PHY_MII_CR_RESTART_AUTO_NEGO BIT(9) /* Auto negotiation restart */ -#define FGMAC_PHY_MII_CR_ISOLATE BIT(10) /* Isolate data paths from MII */ -#define FGMAC_PHY_MII_CR_POWER_DOWN BIT(11) /* Enable low power state */ -#define FGMAC_PHY_MII_CR_AUTO_NEGOT BIT(12) /* Enable auto negotiation */ -#define FGMAC_PHY_MII_CR_SPEED_SEL_LSB BIT(13) /* Select 100Mbps */ -#define FGMAC_PHY_MII_CR_LOOPBACK BIT(14) /* TXD loopback bits */ -#define FGMAC_PHY_MII_CR_RESET BIT(15) /* Reset to default state */ - -#define FGMAC_PHY_MII_CR_FULLDUPLEX_1000M ((u16)0x2140U) /* Set the full-duplex mode at 1000 Mb/s */ -#define FGMAC_PHY_MII_CR_HALFDUPLEX_1000M ((u16)0x2040U) /* Set the half-duplex mode at 1000 Mb/s */ -#define FGMAC_PHY_MII_CR_FULLDUPLEX_100M ((u16)0x2100U) /* Set the full-duplex mode at 100 Mb/s */ -#define FGMAC_PHY_MII_CR_HALFDUPLEX_100M ((u16)0x2000U) /* Set the half-duplex mode at 100 Mb/s */ -#define FGMAC_PHY_MII_CR_FULLDUPLEX_10M ((u16)0x0100U) /* Set the full-duplex mode at 10 Mb/s */ -#define FGMAC_PHY_MII_CR_HALFDUPLEX_10M ((u16)0x0000U) /* Set the half-duplex mode at 10 Mb/s */ - -/* Basic mode status register. */ -#define FGMAC_PHY_MII_SR_EXT_CAP BIT(0) /* Ext-reg capability */ -#define FGMAC_PHY_MII_SR_JCD BIT(1) /* Jabber detected */ -#define FGMAC_PHY_MII_SR_LSTATUS BIT(2) /* Link status */ -#define FGMAC_PHY_MII_SR_AUTO_NEGOT BIT(3) /* Able to do auto-negotiation */ -#define FGMAC_PHY_MII_SR_REMOTE_FAULT BIT(4) /* Remote fault detected */ -#define FGMAC_PHY_MII_SR_AUTO_NEGOT_COMPLETE BIT(5) /* Auto-negotiation complete */ -#define FGMAC_PHY_MII_SR_MF_PREAM BIT(6) /* MF Preamble Suppression */ -#define FGMAC_PHY_MII_SR_EXT_STATUS BIT(8) /* Extended Status in R15 */ -#define FGMAC_PHY_MII_SR_100HALF2 BIT(9) /* Can do 100BASE-T2 HDX */ -#define FGMAC_PHY_MII_SR_100FULL2 BIT(10) /* Can do 100BASE-T2 FDX */ -#define FGMAC_PHY_MII_SR_10HALF BIT(11) /* Can do 10mbps, half-duplex */ -#define FGMAC_PHY_MII_SR_10FULL BIT(12) /* Can do 10mbps, full-duplex */ -#define FGMAC_PHY_MII_SR_100HALF BIT(13) /* Can do 100mbps, half-duplex */ -#define FGMAC_PHY_MII_SR_100FULL BIT(14) /* Can do 100mbps, full-duplex */ -#define FGMAC_PHY_MII_SR_100BASE4 BIT(15) /* Can do 100mbps, 4k packets */ - -/* MII_STAT1000 masks */ -#define FGMAC_PHY_MII_1000BTSR_MSCF BIT(15) /* Master/Slave Configuration Fault */ -#define FGMAC_PHY_MII_1000BTSR_MSCR BIT(14) /* Master/Slave Configuration Resolution */ -#define FGMAC_PHY_MII_1000BTSR_LRS BIT(13) /* Local Receiver Status */ -#define FGMAC_PHY_MII_1000BTSR_RRS BIT(12) /* Remote Receiver Status */ -#define FGMAC_PHY_MII_1000BTSR_1000FD BIT(11) /* Full Duplex Capability */ -#define FGMAC_PHY_MII_1000BTSR_1000HD BIT(10) /* Half Duplex Capability */ -#define FGMAC_PHY_MII_1000BTSR_IDLE_ERR_CNT GENMASK(7, 0) /* MSB of Idle Error Counter */ - -/* Link partner ability register. */ -#define FGMAC_PHY_MII_LPA_SELECT GENMASK(4, 0) /* Selector Field */ -#define FGMAC_PHY_MII_LPA_10HALF BIT(5) /* 10BASE-T half-duplex capable */ -#define FGMAC_PHY_MII_LPA_10FULL BIT(6) /* 10BASE-T full-duplex capable */ -#define FGMAC_PHY_MII_LPA_1000TXHALF BIT(7) /* 100BASE-TX half-duplex capable */ -#define FGMAC_PHY_MII_LPA_1000TXFULL BIT(8) /* 100BASE-TX full-duplex capable */ -#define FGMAC_PHY_MII_LPA_T4 BIT(9) /* 100BASE-T4 capable */ -#define FGMAC_PHY_MII_LPA_PAUSE BIT(10) /* capable of pause operation */ -#define FGMAC_PHY_MII_LPA_ASY_PAUSE BIT(11) /* asymmetric pause */ -#define FGMAC_PHY_MII_LPA_REMOTE_FAULT BIT(13) /* Remote Fault */ -#define FGMAC_PHY_MII_LPA_ACK BIT(14) /* Acknowledge */ -#define FGMAC_PHY_MII_LPA_NEXT_PAGE BIT(15) /* capable of next page */ - -/* Expansion register for auto-negotiation. */ -#define FGMAC_PHY_MII_ESTATUS_1000_XFULL BIT(15) /* Can do 1000BX Full */ -#define FGMAC_PHY_MII_ESTATUS_1000_XHALF BIT(14) /* Can do 1000BX Half */ -#define FGMAC_PHY_MII_ESTATUS_1000_TFULL BIT(13) /* Can do 1000BT Full */ -#define FGMAC_PHY_MII_ESTATUS_1000_THALF BIT(12) /* Can do 1000BT Half */ -#define FGMAC_PHY_MII_ESTATUS_MASK (FGMAC_PHY_MII_ESTATUS_1000_XFULL | FGMAC_PHY_MII_ESTATUS_1000_XHALF | \ - FGMAC_PHY_MII_ESTATUS_1000_TFULL | FGMAC_PHY_MII_ESTATUS_1000_THALF) -#define FGMAC_PHY_MII_ESTATUS_FULL_MASK (FGMAC_PHY_MII_ESTATUS_1000_XFULL | FGMAC_PHY_MII_ESTATUS_1000_TFULL) - - -#define FGMAC_PHY_SPECIFIC_STATUS_SPEED_MASK GENMASK(15, 14) - -#define FGMAC_PHY_SPECIFIC_STATUS_SPEED_1000M (2L << 14) -#define FGMAC_PHY_SPECIFIC_STATUS_SPEED_100M (1L << 14) -#define FGMAC_PHY_SPECIFIC_STATUS_SPEED_10M (0L << 14) - -#define FGMAC_PHY_SPECIFIC_STATUS_DUPLEX_MASK BIT(13) - -enum -{ - FGMAC_PHY_AUTONEGOTIATION_DISABLE = 0, - FGMAC_PHY_AUTONEGOTIATION_ENABLE -}; - -enum -{ - FGMAC_PHY_MODE_HALFDUPLEX = 0, - FGMAC_PHY_MODE_FULLDUPLEX = 1 -}; - -/* The forced speed, 10Mb, 100Mb, gigabit, 2.5Gb, 10GbE. */ -enum -{ - FGMAC_PHY_SPEED_10 = 10, - FGMAC_PHY_SPEED_100 = 100, - FGMAC_PHY_SPEED_1000 = 1000, - FGMAC_PHY_SPEED_2500 = 2500, - FGMAC_PHY_SPEED_10000 = 10000 -}; - -enum -{ - FGMAC_PHY_MII_ADDR_CR_60_100MHZ = (0b0000), - FGMAC_PHY_MII_ADDR_CR_100_150MHZ = (0b0001), - FGMAC_PHY_MII_ADDR_CR_23_35MHZ = (0b0010), - FGMAC_PHY_MII_ADDR_CR_35_60MHZ = (0b0011), - FGMAC_PHY_MII_ADDR_CR_150_250MHZ = (0b0100), - FGMAC_PHY_MII_ADDR_CR_250_300MHZ = (0b0101) -}; - -/**************************** Type Definitions *******************************/ -/** - * This typedef contains driver instance data. The user is required to allocate a - * variable of this type for every device in the system. A pointer - * to a variable of this type is then passed to the driver API functions. - */ - - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ - -/* init phy device */ -FError FGmacPhyCfgInitialize(FGmac *instance_p); -/* write phy register */ -FError FGmacWritePhyReg(FGmac *instance_p, u32 phy_address, u16 phy_reg, u16 phy_reg_val); -/* read phy register */ -FError FGmacReadPhyReg(FGmac *instance_p, u32 phy_address, u16 phy_reg, u16 *phy_reg_val_p); - -FError FGmacPhyCfgDeInitialize(FGmac *instance_p); - -FError FGmacPhyAwaken(FGmac *instance_p); - -#ifdef __cplusplus -} -#endif - - -#endif diff --git a/bsp/phytium/libraries/standalone/drivers/eth/fxmac/Kconfig b/bsp/phytium/libraries/standalone/drivers/eth/fxmac/Kconfig deleted file mode 100644 index 90655a6e74..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/eth/fxmac/Kconfig +++ /dev/null @@ -1,13 +0,0 @@ -choice FXMAC_PHY_TYPE - prompt "PHY Type" - default FXMAC_PHY_COMMON - help - Select PHY for FGMAC - - config FXMAC_PHY_COMMON - bool "Common" - config FXMAC_PHY_YT - bool "YT" - -endchoice # FXMAC_PHY_TYPE - diff --git a/bsp/phytium/libraries/standalone/drivers/eth/fxmac/fxmac.c b/bsp/phytium/libraries/standalone/drivers/eth/fxmac/fxmac.c deleted file mode 100644 index 363937f44f..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/eth/fxmac/fxmac.c +++ /dev/null @@ -1,996 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fxmac.c - * Date: 2022-04-06 14:46:52 - * LastEditTime: 2022-04-06 14:46:58 - * Description:  This file is for xmac driver .Functions in this file are the minimum required functions - * for this driver. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/06/16 first release - */ - -#include "fxmac.h" -#include "ftypes.h" -#include "fxmac_hw.h" -#include "stdio.h" - -#include "fdebug.h" - - -#define FXMAC_DEBUG_TAG "FXMAC" -#define FXMAC_PRINT_E(format, ...) FT_DEBUG_PRINT_E(FXMAC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FXMAC_PRINT_I(format, ...) FT_DEBUG_PRINT_I(FXMAC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FXMAC_PRINT_D(format, ...) FT_DEBUG_PRINT_D(FXMAC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FXMAC_PRINT_W(format, ...) FT_DEBUG_PRINT_W(FXMAC_DEBUG_TAG, format, ##__VA_ARGS__) - - -static void FXmacReset(FXmac *instance_p); -extern FError FXmacSetTypeIdCheck(FXmac *instance_p, u32 id_check, u8 index); - - -static void FXmacHighSpeedConfiguration(FXmac *instance_p,u32 speed) -{ - u32 reg_value; - s32 set_speed = 0; - switch (speed) - { - case FXMAC_SPEED_25000: - set_speed = 2; - break; - case FXMAC_SPEED_10000: - set_speed = 4; - break; - case FXMAC_SPEED_5000: - set_speed = 3; - break; - case FXMAC_SPEED_2500: - set_speed = 2; - break; - case FXMAC_SPEED_1000: - set_speed = 1; - break; - default: - set_speed = 0; - break; - } - /*GEM_HSMAC(0x0050) provide rate to the external*/ - reg_value = FXMAC_READREG32(instance_p->config.base_address, FXMAC_GEM_HSMAC); - reg_value &= ~FXMAC_GEM_HSMACSPEED_MASK; - reg_value |= (set_speed) &FXMAC_GEM_HSMACSPEED_MASK; - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_HSMAC, reg_value); - - reg_value = FXMAC_READREG32(instance_p->config.base_address, FXMAC_GEM_HSMAC); - - FXMAC_PRINT_I("FXMAC_GEM_HSMAC is %x \r\n ", reg_value); -} - -#if defined(FXMAC_CLK_TYPE_0) - -/** - * @name: FXmacSelectClk - * @msg: Determine the driver clock configuration based on the media independent interface - * @param {FXmac} *instance_p is a pointer to the instance to be worked on. - * @param {u32} speed interface speed - * @return {*} - */ -void FXmacSelectClk(FXmac *instance_p) -{ - u32 reg_value; - - u32 speed = instance_p->config.speed; - FASSERT(instance_p != NULL); - FASSERT((speed == FXMAC_SPEED_10) || (speed == FXMAC_SPEED_100) || (speed == FXMAC_SPEED_1000) || (speed == FXMAC_SPEED_2500) || (speed == FXMAC_SPEED_10000)); - - if ((instance_p->config.interface == FXMAC_PHY_INTERFACE_MODE_USXGMII) || (instance_p->config.interface == FXMAC_PHY_INTERFACE_MODE_XGMII)) - { - if (speed == FXMAC_SPEED_10000) - { - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_SRC_SEL_LN, 0x1); - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_DIV_SEL0_LN, 0x4); - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_DIV_SEL1_LN, 0x1); - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_PMA_XCVR_POWER_STATE, 0x1); - } - } - else if(instance_p->config.interface == FXMAC_PHY_INTERFACE_MODE_5GBASER) - { - if(speed == FXMAC_SPEED_5000) - { - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_SRC_SEL_LN, 0x1); - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_DIV_SEL0_LN, 0x8); - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_DIV_SEL1_LN, 0x2); - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_PMA_XCVR_POWER_STATE, 0x0); - } - } - else if(instance_p->config.interface == FXMAC_PHY_INTERFACE_MODE_2500BASEX) - { - if(speed == FXMAC_SPEED_25000) - { - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_DIV_SEL0_LN, 0x1); - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_DIV_SEL1_LN, 0x2); - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_PMA_XCVR_POWER_STATE, 0x1); - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_TX_CLK_SEL0, 0); - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_TX_CLK_SEL1, 0x1); - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_TX_CLK_SEL2, 0x1); - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_TX_CLK_SEL3, 0x1); - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_RX_CLK_SEL0, 0x1); - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_RX_CLK_SEL1, 0x0); - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_TX_CLK_SEL3_0, 0x0); /*0x1c70*/ - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_TX_CLK_SEL4_0, 0x0); /*0x1c74*/ - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_RX_CLK_SEL3_0, 0x0); /*0x1c78*/ - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_RX_CLK_SEL4_0, 0x0); /*0x1c7c*/ - } - } - else if (instance_p->config.interface == FXMAC_PHY_INTERFACE_MODE_SGMII) - { - FXMAC_PRINT_I("FXMAC_PHY_INTERFACE_MODE_SGMII init"); - if (speed == FXMAC_SPEED_2500) - { - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_SRC_SEL_LN, 0); - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_DIV_SEL0_LN, 0x1); - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_DIV_SEL1_LN, 0x2); - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_PMA_XCVR_POWER_STATE, 0x1); - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_TX_CLK_SEL0, 0); - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_TX_CLK_SEL1, 0x1); - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_TX_CLK_SEL2, 0x1); - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_TX_CLK_SEL3, 0x1); - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_RX_CLK_SEL0, 0x1); - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_RX_CLK_SEL1, 0x0); - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_TX_CLK_SEL3_0, 0x0); /*0x1c70*/ - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_TX_CLK_SEL4_0, 0x0); /*0x1c74*/ - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_RX_CLK_SEL3_0, 0x0); /*0x1c78*/ - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_RX_CLK_SEL4_0, 0x0); /*0x1c7c*/ - } - else if (speed == FXMAC_SPEED_1000) - { - FXMAC_PRINT_I("sgmii FXMAC_SPEED_1000 \r\n "); - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_SRC_SEL_LN, 1); - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_DIV_SEL0_LN, 0x4); - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_DIV_SEL1_LN, 0x8); - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_PMA_XCVR_POWER_STATE, 0x1); - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_TX_CLK_SEL0, 0x0); - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_TX_CLK_SEL1, 0x0); - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_TX_CLK_SEL2, 0x0); - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_TX_CLK_SEL3, 0x1); - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_RX_CLK_SEL0, 0x1); - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_RX_CLK_SEL1, 0x0); - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_TX_CLK_SEL3_0, 0x0); /*0x1c70*/ - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_TX_CLK_SEL4_0, 0x0); /*0x1c74*/ - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_RX_CLK_SEL3_0, 0x0); /*0x1c78*/ - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_RX_CLK_SEL4_0, 0x0); /*0x1c7c*/ - } - else if ((speed == FXMAC_SPEED_100) || (speed == FXMAC_SPEED_10)) - { - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_DIV_SEL0_LN, 0x4); - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_DIV_SEL1_LN, 0x8); - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_PMA_XCVR_POWER_STATE, 0x1); - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_TX_CLK_SEL0, 0x0); - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_TX_CLK_SEL1, 0x0); - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_TX_CLK_SEL2, 0x1); - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_TX_CLK_SEL3, 0x1); - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_RX_CLK_SEL0, 0x1); - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_RX_CLK_SEL1, 0x0); - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_TX_CLK_SEL3_0, 0x1); /*0x1c70*/ - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_TX_CLK_SEL4_0, 0x0); /*0x1c74*/ - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_RX_CLK_SEL3_0, 0x0); /*0x1c78*/ - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_RX_CLK_SEL4_0, 0x1); /*0x1c7c*/ - } - } - else if (instance_p->config.interface == FXMAC_PHY_INTERFACE_MODE_RGMII) - { - FXMAC_PRINT_I("FXMAC_PHY_INTERFACE_MODE_RGMII init"); - if (speed == FXMAC_SPEED_1000) - { - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_MII_SELECT, 0x1); /*0x1c18*/ - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_SEL_MII_ON_RGMII, 0x0); /*0x1c1c*/ - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_TX_CLK_SEL0, 0x0); /*0x1c20*/ - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_TX_CLK_SEL1, 0x1); /*0x1c24*/ - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_TX_CLK_SEL2, 0x0); /*0x1c28*/ - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_TX_CLK_SEL3, 0x0); /*0x1c2c*/ - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_RX_CLK_SEL0, 0x0); /*0x1c30*/ - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_RX_CLK_SEL1, 0x1); /*0x1c34*/ - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_CLK_250M_DIV10_DIV100_SEL, - 0x0); /*0x1c38*/ - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_RX_CLK_SEL5, 0x1); /*0x1c48*/ - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_RGMII_TX_CLK_SEL0, 0x1); /*0x1c80*/ - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_RGMII_TX_CLK_SEL1, 0x0); /*0x1c84*/ - } - else if (speed == FXMAC_SPEED_100) - { - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_SEL_MII_ON_RGMII, 0x0); /*0x1c1c*/ - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_TX_CLK_SEL0, 0x0); /*0x1c20*/ - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_TX_CLK_SEL1, 0x1); /*0x1c24*/ - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_TX_CLK_SEL2, 0x0); /*0x1c28*/ - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_TX_CLK_SEL3, 0x0); /*0x1c2c*/ - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_RX_CLK_SEL0, 0x0); /*0x1c30*/ - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_RX_CLK_SEL1, 0x1); /*0x1c34*/ - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_CLK_250M_DIV10_DIV100_SEL, - 0x0); /*0x1c38*/ - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_RX_CLK_SEL5, 0x1); /*0x1c48*/ - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_RGMII_TX_CLK_SEL0, 0x0); /*0x1c80*/ - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_RGMII_TX_CLK_SEL1, 0x0); /*0x1c84*/ - } - else - { - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_SEL_MII_ON_RGMII, 0x0); /*0x1c1c*/ - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_TX_CLK_SEL0, 0x0); /*0x1c20*/ - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_TX_CLK_SEL1, 0x1); /*0x1c24*/ - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_TX_CLK_SEL2, 0x0); /*0x1c28*/ - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_TX_CLK_SEL3, 0x0); /*0x1c2c*/ - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_RX_CLK_SEL0, 0x0); /*0x1c30*/ - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_RX_CLK_SEL1, 0x1); /*0x1c34*/ - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_CLK_250M_DIV10_DIV100_SEL, - 0x1); /*0x1c38*/ - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_RX_CLK_SEL5, 0x1); /*0x1c48*/ - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_RGMII_TX_CLK_SEL0, 0x0); /*0x1c80*/ - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_RGMII_TX_CLK_SEL1, 0x0); /*0x1c84*/ - } - } - else if (instance_p->config.interface == FXMAC_PHY_INTERFACE_MODE_RMII) - { - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_RX_CLK_SEL5, 0x1); /*0x1c48*/ - } - - FXmacHighSpeedConfiguration(instance_p,speed); -} -#else -void FXmacSelectClk(FXmac *instance_p) -{ - u32 reg_value; - - u32 speed = instance_p->config.speed; - FASSERT(instance_p != NULL); - FASSERT((speed == FXMAC_SPEED_10) || (speed == FXMAC_SPEED_100) || (speed == FXMAC_SPEED_1000) || (speed == FXMAC_SPEED_2500) || (speed == FXMAC_SPEED_10000)); - FXMAC_PRINT_I("************* FXmacSelectClk *************** "); - if (instance_p->config.interface == FXMAC_PHY_INTERFACE_MODE_SGMII) - { - FXMAC_PRINT_I("FXMAC_PHY_INTERFACE_MODE_SGMII init"); - if ((speed == FXMAC_SPEED_100) || (speed == FXMAC_SPEED_10)) - { - FXMAC_PRINT_I("speed IS %d \r\n",speed); - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_DIV_SEL1_LN, 0x1); - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_GEM_SRC_SEL_LN, 0x1); - } - } - - if(speed == FXMAC_SPEED_10000) - { - FXMAC_PRINT_I("FXMAC_SPEED_10000 is not set high speed\r\n"); - } - else - { - FXmacHighSpeedConfiguration(instance_p,speed); - } -} -#endif - -/** - * Start the Ethernet controller as follows: - * - Enable transmitter if FXMAC_TRANSMIT_ENABLE_OPTION is set - * - Enable receiver if FXMAC_RECEIVER_ENABLE_OPTION is set - * - Start the SG DMA send and receive channels and enable the device - * interrupt - * - * @param instance_p is a pointer to the instance to be worked on. - * - * @return N/A - * - * @note - * Hardware is configured with scatter-gather DMA, the driver expects to start - * the scatter-gather channels and expects that the user has previously set up - * the buffer descriptor lists. - * - * This function makes use of internal resources that are shared between the - * Start, Stop, and Set/ClearOptions functions. So if one task might be setting - * device options while another is trying to start the device, the user is - * required to provide protection of this shared data (typically using a - * semaphore). - * - * This function must not be preempted by an interrupt that may service the - * device. - * - */ -void FXmacStart(FXmac *instance_p) -{ - u32 reg_val; - u32 reg = 0; - - /* Assert bad arguments and conditions */ - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == (u32)FT_COMPONENT_IS_READY); - - - /* clear any existed int status */ - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_ISR_OFFSET, - FXMAC_IXR_ALL_MASK); - - /* Enable transmitter if not already enabled */ - if ((instance_p->config.network_default_config & (u32)FXMAC_TRANSMITTER_ENABLE_OPTION) != 0x00000000U) - { - reg_val = FXMAC_READREG32(instance_p->config.base_address, - FXMAC_NWCTRL_OFFSET); - if ((!(reg_val & FXMAC_NWCTRL_TXEN_MASK)) == TRUE) - { - FXMAC_WRITEREG32(instance_p->config.base_address, - FXMAC_NWCTRL_OFFSET, - reg_val | (u32)FXMAC_NWCTRL_TXEN_MASK); - } - } - - /* Enable receiver if not already enabled */ - if ((instance_p->config.network_default_config & FXMAC_RECEIVER_ENABLE_OPTION) != 0x00000000U) - { - - reg_val = FXMAC_READREG32(instance_p->config.base_address, - FXMAC_NWCTRL_OFFSET); - FXMAC_PRINT_I("endable receiver 0x%x \r\n ", reg_val); - if ((!(reg_val & FXMAC_NWCTRL_RXEN_MASK)) == TRUE) - { - FXMAC_WRITEREG32(instance_p->config.base_address, - FXMAC_NWCTRL_OFFSET, - reg_val | (u32)FXMAC_NWCTRL_RXEN_MASK); - } - } - FXMAC_PRINT_I("FXMAC_NWCTRL_OFFSET is 0x%x \r\n", FXMAC_READREG32(instance_p->config.base_address, - FXMAC_NWCTRL_OFFSET)); - - /* Enable TX and RX interrupt */ - FXMAC_INT_ENABLE(instance_p, instance_p->mask); - - - /* Mark as started */ - instance_p->is_started = FT_COMPONENT_IS_STARTED; - - return; -} - - -/** - * Gracefully stop the Ethernet MAC as follows: - * - Disable all interrupts from this device - * - Stop DMA channels - * - Disable the tansmitter and receiver - * - * Device options currently in effect are not changed. - * - * This function will disable all interrupts. Default interrupts settings that - * had been enabled will be restored when FXmacStart() is called. - * - * @param instance_p is a pointer to the instance to be worked on. - * - * @note - * This function makes use of internal resources that are shared between the - * Start, Stop, Setoptions, and Clearoptions functions. So if one task might be - * setting device options while another is trying to start the device, the user - * is required to provide protection of this shared data (typically using a - * semaphore). - * - * Stopping the DMA channels causes this function to block until the DMA - * operation is complete. - * - */ -void FXmacStop(FXmac *instance_p) -{ - u32 reg_val; - - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == (u32)FT_COMPONENT_IS_READY); - - /* Disable all interrupts */ - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_IDR_OFFSET, - FXMAC_IXR_ALL_MASK); - - - - /* Disable the receiver & transmitter */ - reg_val = FXMAC_READREG32(instance_p->config.base_address, - FXMAC_NWCTRL_OFFSET); - reg_val &= (u32)(~FXMAC_NWCTRL_RXEN_MASK); - reg_val &= (u32)(~FXMAC_NWCTRL_TXEN_MASK); - FXMAC_WRITEREG32(instance_p->config.base_address, - FXMAC_NWCTRL_OFFSET, reg_val); - - /* Mark as stopped */ - instance_p->is_started = 0U; -} - -static u32 FXmacClkDivGet(FXmac *instance_p) -{ - FXmacConfig *config_p; - - config_p = &instance_p->config; - - if (config_p->pclk_hz <= 20000000) - { - return FXMAC_NWCFG_CLOCK_DIV8_MASK; - } - else if (config_p->pclk_hz <= 40000000) - { - return FXMAC_NWCFG_CLOCK_DIV16_MASK; - } - else if (config_p->pclk_hz <= 80000000) - { - return FXMAC_NWCFG_CLOCK_DIV32_MASK; - } - else if (instance_p->moudle_id >= 2) - { - if (config_p->pclk_hz <= 120000000) - { - return FXMAC_NWCFG_CLOCK_DIV48_MASK; - } - else if (config_p->pclk_hz <= 160000000) - { - return FXMAC_NWCFG_CLOCK_DIV64_MASK; - } - else if (config_p->pclk_hz <= 240000000) - { - return FXMAC_NWCFG_CLOCK_DIV96_MASK; - } - else if (config_p->pclk_hz <= 320000000) - { - return FXMAC_NWCFG_CLOCK_DIV128_MASK; - } - else - { - return FXMAC_NWCFG_CLOCK_DIV224_MASK; - } - } - else - { - return FXMAC_NWCFG_CLOCK_DIV64_MASK; - } -} - -static u32 FXmacConfigureCaps(FXmac *instance_p) -{ - u32 read_regs = 0; - FXmacConfig *config_p; - instance_p->caps = 0; - config_p = &instance_p->config; - read_regs = FXMAC_READREG32(config_p->base_address, FXMAC_DESIGNCFG_DEBUG1_OFFSET); - if((read_regs&FXMAC_DESIGNCFG_DEBUG1_BUS_IRQCOR_MASK) == 0) - { - instance_p->caps |= FXMAC_CAPS_ISR_CLEAR_ON_WRITE; - FXMAC_PRINT_I("Has FXMAC_CAPS_ISR_CLEAR_ON_WRITE feature"); - } -} - -static u32 FXmacDmaWidth(FXmac *instance_p) -{ - u32 read_regs = 0; - FXmacConfig *config_p; - config_p = &instance_p->config; - - if (instance_p->moudle_id < 2) - { - return FXMAC_NWCFG_BUS_WIDTH_32_MASK; - } - - read_regs = FXMAC_READREG32(config_p->base_address, FXMAC_DESIGNCFG_DEBUG1_OFFSET); - - switch ((read_regs & FXMAC_DESIGNCFG_DEBUG1_BUS_WIDTH_MASK) >> 25) - { - case 4: - FXMAC_PRINT_I("bus width is 128"); - return FXMAC_NWCFG_BUS_WIDTH_128_MASK; - case 2: - FXMAC_PRINT_I("bus width is 64"); - return FXMAC_NWCFG_BUS_WIDTH_64_MASK; - default: - FXMAC_PRINT_I("bus width is 32"); - return FXMAC_NWCFG_BUS_WIDTH_32_MASK; - } -} - -static void FXmacDmaReset(FXmac *instance_p) -{ - u32 queue = 0; - FXmacConfig *config_p; - config_p = &instance_p->config; - u32 dmacfg = 0; - u32 rx_buf_size = 0; - - rx_buf_size = instance_p->max_frame_size / FXMAC_RX_BUF_UNIT; - rx_buf_size += ((instance_p->max_frame_size % FXMAC_RX_BUF_UNIT) != 0) ? 1 : 0; /* roundup */ - - if (instance_p->moudle_id >= 2) - { - for (queue = 0; queue < config_p->max_queue_num; queue++) - { - dmacfg = 0; - FXmacSetQueuePtr(instance_p, (uintptr)NULL, queue, (u16)FXMAC_SEND); - FXmacSetQueuePtr(instance_p, (uintptr)NULL, queue, (u16)FXMAC_RECV); - - if (queue) - { - FXMAC_WRITEREG32(config_p->base_address, FXMAC_RXBUFQX_SIZE_OFFSET(queue), rx_buf_size); - } - else /* queue is 0 */ - { - dmacfg |= ((u32)FXMAC_DMACR_RXBUF_MASK & (rx_buf_size << FXMAC_DMACR_RXBUF_SHIFT)); - } - } - - dmacfg |= (config_p->dma_brust_length & FXMAC_DMACR_BLENGTH_MASK); - - dmacfg &= ~FXMAC_DMACR_ENDIAN_MASK; - dmacfg &= ~FXMAC_DMACR_SWAP_MANAGEMENT_MASK; /* 选择小端 */ - - dmacfg &= ~FXMAC_DMACR_TCPCKSUM_MASK; /* close transmitter checksum generation engine */ - - dmacfg &= ~FXMAC_DMACR_ADDR_WIDTH_64; - dmacfg |= FXMAC_DMACR_RXSIZE_MASK | FXMAC_DMACR_TXSIZE_MASK; -#if defined(__aarch64__) || defined(__arch64__) - dmacfg |= FXMAC_DMACR_ADDR_WIDTH_64; -#endif - } - else - { - FXmacSetQueuePtr(instance_p, (uintptr)NULL, 0, (u16)FXMAC_SEND); - FXmacSetQueuePtr(instance_p, (uintptr)NULL, 0, (u16)FXMAC_RECV); - dmacfg |= ((u32)FXMAC_DMACR_RXBUF_MASK & (rx_buf_size << FXMAC_DMACR_RXBUF_SHIFT)); - dmacfg |= (config_p->dma_brust_length & FXMAC_DMACR_BLENGTH_MASK); - - dmacfg &= ~FXMAC_DMACR_ENDIAN_MASK; - dmacfg &= ~FXMAC_DMACR_SWAP_MANAGEMENT_MASK; /* 选择小端 */ - - dmacfg &= ~FXMAC_DMACR_TCPCKSUM_MASK; /* close transmitter checksum generation engine */ - - dmacfg &= ~FXMAC_DMACR_ADDR_WIDTH_64; - dmacfg |= FXMAC_DMACR_RXSIZE_MASK | FXMAC_DMACR_TXSIZE_MASK; -#if defined(__aarch64__) || defined(__arch64__) - dmacfg |= FXMAC_DMACR_ADDR_WIDTH_64; -#endif - } - - FXMAC_WRITEREG32(config_p->base_address, FXMAC_DMACR_OFFSET, dmacfg); -} - - -/** - * Perform a graceful reset of the Ethernet MAC. Resets the DMA channels, the - * transmitter, and the receiver. - * - * Steps to reset - * - Stops transmit and receive channels - * - Stops DMA - * - Configure transmit and receive buffer size to default - * - Clear transmit and receive status register and counters - * - Clear all interrupt sources - * - Clear phy (if there is any previously detected) address - * - Clear MAC addresses (1-4) as well as Type IDs and hash value - * - * All options are placed in their default state. Any frames in the - * descriptor lists will remain in the lists. The side effect of doing - * this is that after a reset and following a restart of the device, frames - * were in the list before the reset may be transmitted or received. - * - * The upper layer software is responsible for re-configuring (if necessary) - * and restarting the MAC after the reset. Note also that driver statistics - * are not cleared on reset. It is up to the upper layer software to clear the - * statistics if needed. - * - * When a reset is required, the driver notifies the upper layer software of - * this need through the ErrorHandler callback and specific status codes. - * The upper layer software is responsible for calling this Reset function - * and then re-configuring the device. - * - * @param instance_p is a pointer to the instance to be worked on. - * - */ -static void FXmacReset(FXmac *instance_p) -{ - u32 reg_val, write_reg = 0; - u8 i; - s8 mac_addr[6] = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0}; - u32 rx_buf_num; - - FASSERT(instance_p != NULL); - - /* Stop the device and reset hardware */ - FXmacStop(instance_p); - - instance_p->moudle_id = (FXMAC_READREG32(instance_p->config.base_address, FXMAC_REVISION_REG_OFFSET) & FXMAC_IDENTIFICATION_MASK) >> 16; - FXMAC_PRINT_I("instance_p->moudle_id is %d \r\n", instance_p->moudle_id); - instance_p->max_mtu_size = FXMAC_MTU; - instance_p->max_frame_size = FXMAC_MAX_FRAME_SIZE; - - FXMAC_WRITEREG32(instance_p->config.base_address, - FXMAC_NWCTRL_OFFSET, - ((FXMAC_NWCTRL_STATCLR_MASK) & (u32)(~FXMAC_NWCTRL_LOOPBACK_LOCAL_MASK)) | FXMAC_NWCTRL_MDEN_MASK); - FXmacConfigureCaps(instance_p); - write_reg = FXmacClkDivGet(instance_p); /* mdio clock division */ - write_reg |= FXmacDmaWidth(instance_p); /* DMA位宽 */ - - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_NWCFG_OFFSET, write_reg); - - FXmacDmaReset(instance_p); - - /* This register, when read provides details of the status of the receive path. */ - FXMAC_WRITEREG32(instance_p->config.base_address, - FXMAC_RXSR_OFFSET, FXMAC_SR_ALL_MASK); - - /* write 1 ro the relavant bit location disable that particular interrupt */ - FXMAC_WRITEREG32(instance_p->config.base_address, - FXMAC_IDR_OFFSET, FXMAC_IXR_ALL_MASK); - - reg_val = FXMAC_READREG32(instance_p->config.base_address, - FXMAC_ISR_OFFSET); - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_ISR_OFFSET, - reg_val); - - FXMAC_WRITEREG32(instance_p->config.base_address, - FXMAC_TXSR_OFFSET, FXMAC_SR_ALL_MASK); - - FXmacClearHash(instance_p); - - /* set default mac address */ - for (i = 0U; i < 4U; i++) - { - (void)FXmacSetMacAddress(instance_p, mac_addr, i); - (void)FXmacGetMacAddress(instance_p, mac_addr, i); - (void)FXmacSetTypeIdCheck(instance_p, 0x00000000U, i); - } - - /* clear all counters */ - for (i = 0U; i < (u8)((FXMAC_LAST_OFFSET - FXMAC_OCTTXL_OFFSET) / 4U); - i++) - { - (void)FXMAC_READREG32(instance_p->config.base_address, - FXMAC_OCTTXL_OFFSET + (u32)(((u32)i) * ((u32)4))); - } - - /* Sync default options with hardware but leave receiver and - * transmitter disabled. They get enabled with FXmacStart() if - * FXMAC_TRANSMITTER_ENABLE_OPTION and - * FXMAC_RECEIVER_ENABLE_OPTION are set. - */ - FXmacSetOptions(instance_p, instance_p->config.network_default_config & ~((u32)FXMAC_TRANSMITTER_ENABLE_OPTION | (u32)FXMAC_RECEIVER_ENABLE_OPTION), 0); - FXmacClearOptions(instance_p, ~instance_p->config.network_default_config, 0); -} - -/** - * @name: FXmacInitInterface - * @msg: Initialize the MAC controller configuration based on the PHY interface type - * @note: - * @param {FXmac} *instance_p is a pointer to the instance to be worked on. - */ -void FXmacInitInterface(FXmac *instance_p) -{ - u32 config, control; - FXmacConfig *config_p; - config_p = &instance_p->config; - - if (config_p->interface == FXMAC_PHY_INTERFACE_MODE_XGMII ) - { - config = FXMAC_READREG32(config_p->base_address, FXMAC_NWCFG_OFFSET); - config &= ~FXMAC_NWCFG_PCSSEL_MASK; - FXMAC_WRITEREG32(config_p->base_address, FXMAC_NWCFG_OFFSET, config); - - control = FXMAC_READREG32(config_p->base_address, FXMAC_NWCTRL_OFFSET); - control |= FXMAC_NWCTRL_ENABLE_HS_MAC_MASK; /* Use high speed MAC */ - FXMAC_WRITEREG32(config_p->base_address, FXMAC_NWCTRL_OFFSET, control); - - config_p->duplex = 1; - } - else if (config_p->interface == FXMAC_PHY_INTERFACE_MODE_USXGMII || config_p->interface == FXMAC_PHY_INTERFACE_MODE_5GBASER) - { - FXMAC_PRINT_I("usx interface is %d",config_p->interface); - /* network_config */ - config_p->duplex = 1; - config = FXMAC_READREG32(config_p->base_address, FXMAC_NWCFG_OFFSET); - config |= FXMAC_NWCFG_PCSSEL_MASK; - config &= ~FXMAC_NWCFG_100_MASK; - config &= ~FXMAC_NWCFG_SGMII_MODE_ENABLE_MASK; - if (config_p->duplex == 1) - { - FXMAC_PRINT_I("is duplex"); - config |= FXMAC_NWCFG_FDEN_MASK; - } - - FXMAC_WRITEREG32(config_p->base_address, FXMAC_NWCFG_OFFSET, config); - - /* network_control */ - control = FXMAC_READREG32(config_p->base_address, FXMAC_NWCTRL_OFFSET); - control |= FXMAC_NWCTRL_ENABLE_HS_MAC_MASK; /* Use high speed MAC */ - FXMAC_WRITEREG32(config_p->base_address, FXMAC_NWCTRL_OFFSET, control); - - - /* High speed PCS control register */ - control = FXMAC_READREG32(config_p->base_address, FXMAC_GEM_USX_CONTROL_OFFSET); - - if (config_p->speed == FXMAC_SPEED_10000) - { - FXMAC_PRINT_I("is 10G"); - control |= FXMAC_GEM_USX_HS_MAC_SPEED_10G; - control |= FXMAC_GEM_USX_SERDES_RATE_10G; - } - else if (config_p->speed == FXMAC_SPEED_25000) - { - control |= FXMAC_GEM_USX_HS_MAC_SPEED_2_5G; - } - else if (config_p->speed == FXMAC_SPEED_1000) - { - control |= FXMAC_GEM_USX_HS_MAC_SPEED_1G; - } - else if (config_p->speed == FXMAC_SPEED_100) - { - control |= FXMAC_GEM_USX_HS_MAC_SPEED_100M; - } - else if(config_p->speed == FXMAC_SPEED_5000) - { - control |= FXMAC_GEM_USX_HS_MAC_SPEED_5G; - control |= FXMAC_GEM_USX_SERDES_RATE_5G; - } - - control &= ~(FXMAC_GEM_USX_TX_SCR_BYPASS | FXMAC_GEM_USX_RX_SCR_BYPASS); - control |= FXMAC_GEM_USX_RX_SYNC_RESET; - FXMAC_WRITEREG32(config_p->base_address, FXMAC_GEM_USX_CONTROL_OFFSET, control); - - control = FXMAC_READREG32(config_p->base_address, FXMAC_GEM_USX_CONTROL_OFFSET); - control &= ~FXMAC_GEM_USX_RX_SYNC_RESET; - control |= FXMAC_GEM_USX_TX_DATAPATH_EN; - control |= FXMAC_GEM_USX_SIGNAL_OK; - - FXMAC_WRITEREG32(config_p->base_address, FXMAC_GEM_USX_CONTROL_OFFSET, control); - - } - else if(config_p->interface == FXMAC_PHY_INTERFACE_MODE_2500BASEX) - { - /* network_config */ - config_p->duplex = 1; - config = FXMAC_READREG32(config_p->base_address, FXMAC_NWCFG_OFFSET); - config |= FXMAC_NWCFG_PCSSEL_MASK | FXMAC_NWCFG_SGMII_MODE_ENABLE_MASK; - config &= ~FXMAC_NWCFG_100_MASK; - - if (config_p->duplex == 1) - { - config |= FXMAC_NWCFG_FDEN_MASK; - } - FXMAC_WRITEREG32(config_p->base_address, FXMAC_NWCFG_OFFSET, config); - - /* network_control */ - control = FXMAC_READREG32(config_p->base_address, FXMAC_NWCTRL_OFFSET); - control &= ~FXMAC_NWCTRL_ENABLE_HS_MAC_MASK; - control |= FXMAC_NWCTRL_TWO_PT_FIVE_GIG_MASK; /* Use high speed MAC */ - FXMAC_WRITEREG32(config_p->base_address, FXMAC_NWCTRL_OFFSET, control); - - /* High speed PCS control register */ - control = FXMAC_READREG32(config_p->base_address, FXMAC_GEM_USX_CONTROL_OFFSET); - - if (config_p->speed == FXMAC_SPEED_25000) - { - control |= FXMAC_GEM_USX_HS_MAC_SPEED_2_5G; - } - - control &= ~(FXMAC_GEM_USX_TX_SCR_BYPASS | FXMAC_GEM_USX_RX_SCR_BYPASS); - control |= FXMAC_GEM_USX_RX_SYNC_RESET; - FXMAC_WRITEREG32(config_p->base_address, FXMAC_GEM_USX_CONTROL_OFFSET, control); - - control = FXMAC_READREG32(config_p->base_address, FXMAC_GEM_USX_CONTROL_OFFSET); - control &= ~FXMAC_GEM_USX_RX_SYNC_RESET; - control |= FXMAC_GEM_USX_TX_DATAPATH_EN; - control |= FXMAC_GEM_USX_SIGNAL_OK; - - FXMAC_WRITEREG32(config_p->base_address, FXMAC_GEM_USX_CONTROL_OFFSET, control); - - } - else if (config_p->interface == FXMAC_PHY_INTERFACE_MODE_SGMII) - { - config = FXMAC_READREG32(config_p->base_address, FXMAC_NWCFG_OFFSET); - config |= FXMAC_NWCFG_PCSSEL_MASK | FXMAC_NWCFG_SGMII_MODE_ENABLE_MASK; - - config &= ~(FXMAC_NWCFG_100_MASK | FXMAC_NWCFG_FDEN_MASK|FXMAC_NWCFG_LENGTH_FIELD_ERROR_FRAME_DISCARD_MASK); - - if (instance_p->moudle_id >= 2) - { - config &= ~FXMAC_NWCFG_1000_MASK; - } - - if (config_p->duplex) - { - config |= FXMAC_NWCFG_FDEN_MASK; - } - - if (config_p->speed == FXMAC_SPEED_100) - { - config |= FXMAC_NWCFG_100_MASK; - } - else if (config_p->speed == FXMAC_SPEED_1000) - { - config |= FXMAC_NWCFG_1000_MASK; - } - - FXMAC_WRITEREG32(config_p->base_address, FXMAC_NWCFG_OFFSET, config); - - if (config_p->speed == FXMAC_SPEED_2500) - { - control = FXMAC_READREG32(config_p->base_address, FXMAC_NWCTRL_OFFSET); - control |= FXMAC_NWCTRL_TWO_PT_FIVE_GIG_MASK; - FXMAC_WRITEREG32(config_p->base_address, FXMAC_NWCTRL_OFFSET, control); - } - else - { - control = FXMAC_READREG32(config_p->base_address, FXMAC_NWCTRL_OFFSET); - control &= ~FXMAC_NWCTRL_TWO_PT_FIVE_GIG_MASK; - FXMAC_WRITEREG32(config_p->base_address, FXMAC_NWCTRL_OFFSET, control); - } - - control = FXMAC_READREG32(config_p->base_address, FXMAC_NWCTRL_OFFSET); - control &= ~FXMAC_NWCTRL_ENABLE_HS_MAC_MASK; - FXMAC_WRITEREG32(config_p->base_address, FXMAC_NWCTRL_OFFSET, control); - - control = FXMAC_READREG32(config_p->base_address, FXMAC_PCS_CONTROL_OFFSET); - control |= FXMAC_PCS_CONTROL_ENABLE_AUTO_NEG; - FXMAC_WRITEREG32(config_p->base_address, FXMAC_PCS_CONTROL_OFFSET, control); - } - else - { - config = FXMAC_READREG32(config_p->base_address, FXMAC_NWCFG_OFFSET); - - FXMAC_PRINT_I("select rgmii \r\n"); - - config &= ~FXMAC_NWCFG_PCSSEL_MASK; - config &= ~(FXMAC_NWCFG_100_MASK | FXMAC_NWCFG_FDEN_MASK); - - if (instance_p->moudle_id >= 2) - { - config &= ~FXMAC_NWCFG_1000_MASK; - } - - if (config_p->duplex) - { - config |= FXMAC_NWCFG_FDEN_MASK; - } - - if (config_p->speed == FXMAC_SPEED_100) - { - config |= FXMAC_NWCFG_100_MASK; - } - else if (config_p->speed == FXMAC_SPEED_1000) - { - config |= FXMAC_NWCFG_1000_MASK; - } - - FXMAC_WRITEREG32(config_p->base_address, FXMAC_NWCFG_OFFSET, config); - - control = FXMAC_READREG32(config_p->base_address, FXMAC_NWCTRL_OFFSET); - control &= ~FXMAC_NWCTRL_ENABLE_HS_MAC_MASK; /* Use high speed MAC */ - FXMAC_WRITEREG32(config_p->base_address, FXMAC_NWCTRL_OFFSET, control); - } -} - -static void FXmacIrqStubHandler(void) -{ - FASSERT_MSG(0, "Please register the interrupt callback function"); -} - -/** - * @name: FXmacCfgInitialize - * @msg: Initialize a specific fxmac instance/driver. - * @note: - * @param {FXmac} *instance_p is a pointer to the instance to be worked on. - * @param {FXmacConfig} *config_p is the device configuration structure containing required -* hardware build data. - * @return {FT_SUCCESS} if initialization was successful - */ -FError FXmacCfgInitialize(FXmac *instance_p, const FXmacConfig *config_p) -{ - /* Verify arguments */ - FASSERT(instance_p != NULL); - FASSERT(config_p != NULL); - - instance_p->config = *config_p; - instance_p->link_status = FXMAC_LINKDOWN; - /* Reset the hardware and set default options */ - instance_p->is_ready = FT_COMPONENT_IS_READY; - FXmacReset(instance_p); - - instance_p->send_irq_handler = (FXmacIrqHandler)FXmacIrqStubHandler; - instance_p->send_args = NULL; - - instance_p->recv_irq_handler = (FXmacIrqHandler)FXmacIrqStubHandler; - instance_p->recv_args = NULL; - - instance_p->error_irq_handler = (FXmacErrorIrqHandler)FXmacIrqStubHandler; - instance_p->error_args = NULL; - - instance_p->link_change_handler = (FXmacIrqHandler)FXmacIrqStubHandler; - instance_p->link_change_args = NULL; - - instance_p->restart_handler = (FXmacIrqHandler)FXmacIrqStubHandler; - instance_p->restart_args = NULL; - - instance_p->mask = FXMAC_INTR_MASK; - return FT_SUCCESS; -} - - -/** - * This function sets the start address of the transmit/receive buffer queue. - * - * @param instance_p is a pointer to the instance to be worked on. - * @param queue_p is the address of the Queue to be written - * @param queue_num is the Buffer Queue Index - * @param direction indicates Transmit/Receive - * - * @note - * The buffer queue addresses has to be set before starting the transfer, so - * this function has to be called in prior to FXmacStart() - * - */ -void FXmacSetQueuePtr(FXmac *instance_p, uintptr queue_p, u8 queue_num, - u32 direction) -{ - /* Assert bad arguments and conditions */ - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == (u32)FT_COMPONENT_IS_READY); - - /* If already started, then there is nothing to do */ - if (instance_p->is_started == (u32)FT_COMPONENT_IS_STARTED) - { - return; - } - - if (queue_num == 0x00U) - { - if (direction == FXMAC_SEND) - { - /* set base start address of TX buffer queue (tx buffer descriptor list) */ - FXMAC_WRITEREG32(instance_p->config.base_address, - FXMAC_TXQBASE_OFFSET, - (queue_p & ULONG64_LO_MASK) | (((queue_p == (uintptr)0)) ? 1 : 0)); - } - else - { - /* set base start address of RX buffer queue (rx buffer descriptor list) */ - FXMAC_WRITEREG32(instance_p->config.base_address, - FXMAC_RXQBASE_OFFSET, - (queue_p & ULONG64_LO_MASK) | (((queue_p == (uintptr)0)) ? 1 : 0)); - } - } - else - { - if (direction == FXMAC_SEND) - { - FXMAC_WRITEREG32(instance_p->config.base_address, - FXMAC_QUEUE_REGISTER_OFFSET(FXMAC_TXQ1BASE_OFFSET, queue_num), - (queue_p & ULONG64_LO_MASK) | (((queue_p == (uintptr)0)) ? 1 : 0)); - } - else - { - FXMAC_WRITEREG32(instance_p->config.base_address, - FXMAC_QUEUE_REGISTER_OFFSET(FXMAC_TXQ1BASE_OFFSET, queue_num), - (queue_p & ULONG64_LO_MASK) | (((queue_p == (uintptr)0)) ? 1 : 0)); - } - } -#ifdef __aarch64__ - if (direction == FXMAC_SEND) - { - /* Set the MSB of TX Queue start address */ - FXMAC_WRITEREG32(instance_p->config.base_address, - FXMAC_MSBBUF_TXQBASE_OFFSET, - (u32)((queue_p & ULONG64_HI_MASK) >> 32U)); - } - else - { - /* Set the MSB of RX Queue start address */ - FXMAC_WRITEREG32(instance_p->config.base_address, - FXMAC_MSBBUF_RXQBASE_OFFSET, - (u32)((queue_p & ULONG64_HI_MASK) >> 32U)); - } -#endif -} diff --git a/bsp/phytium/libraries/standalone/drivers/eth/fxmac/fxmac.h b/bsp/phytium/libraries/standalone/drivers/eth/fxmac/fxmac.h deleted file mode 100644 index f0a61d3aad..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/eth/fxmac/fxmac.h +++ /dev/null @@ -1,351 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fxmac.h - * Date: 2022-04-06 14:46:52 - * LastEditTime: 2022-04-06 14:46:58 - * Description:  This file is for gmac driver .Functions in this file are the minimum required functions - * for this driver. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/06/16 first release - */ - -#ifndef FXMAC_H -#define FXMAC_H - -#include "ftypes.h" -#include "fassert.h" -#include "ferror_code.h" -#include "fxmac_hw.h" -#include "fxmac_bdring.h" -#include "fparameters.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -#define FXMAC_ERR_INVALID_PARAM FT_MAKE_ERRCODE(ErrModBsp, ErrBspEth, 0x1u) -#define FXMAC_ERR_SG_LIST FT_MAKE_ERRCODE(ErrModBsp, ErrBspEth, 0x2u) -#define FXMAC_ERR_GENERAL FT_MAKE_ERRCODE(ErrModBsp, ErrBspEth, 0x4u) -#define FXMAC_ERR_SG_NO_LIST FT_MAKE_ERRCODE(ErrModBsp, ErrBspEth, 0x5u) -#define FXMAC_ERR_PHY_BUSY FT_MAKE_ERRCODE(ErrModBsp, ErrBspEth, 0x6u) -#define FXMAC_PHY_IS_NOT_FOUND FT_MAKE_ERRCODE(ErrModBsp, ErrBspEth, 0x7u) -#define FXMAC_PHY_AUTO_AUTONEGOTIATION_FAILED FT_MAKE_ERRCODE(ErrModBsp, ErrBspEth, 0x8u) -#define FXMAC_ERR_MAC_IS_PROCESSING FT_MAKE_ERRCODE(ErrModBsp, ErrBspEth, 0x9u) - -/** @name Configuration options - * - * Device configuration options. See the FXMAC_SetOptions(), - * FXMACClearOptions() and FXMAC_GetOptions() for information on how to - * use options. - * - * The default state of the options are noted and are what the device and - * driver will be set to after calling FXMAC_Reset() or - * FXMAC_Initialize(). - * - * @{ - */ - -#define FXMAC_PROMISC_OPTION 0x00000001U -/* Accept all incoming packets. - * This option defaults to disabled (cleared) */ - -#define FXMAC_FRAME1536_OPTION 0x00000002U -/* Frame larger than 1516 support for Tx & Rx.x - * This option defaults to disabled (cleared) */ - -#define FXMAC_VLAN_OPTION 0x00000004U -/* VLAN Rx & Tx frame support. - * This option defaults to disabled (cleared) */ - -#define FXMAC_FLOW_CONTROL_OPTION 0x00000010U -/* Enable recognition of flow control frames on Rx - * This option defaults to enabled (set) */ - -#define FXMAC_FCS_STRIP_OPTION 0x00000020U -/* Strip FCS and PAD from incoming frames. Note: PAD from VLAN frames is not - * stripped. - * This option defaults to enabled (set) */ - -#define FXMAC_FCS_INSERT_OPTION 0x00000040U -/* Generate FCS field and add PAD automatically for outgoing frames. - * This option defaults to disabled (cleared) */ - -#define FXMAC_LENTYPE_ERR_OPTION 0x00000080U -/* Enable Length/Type error checking for incoming frames. When this option is - * set, the MAC will filter frames that have a mismatched type/length field - * and if FXMAC_REPORT_RXERR_OPTION is set, the user is notified when these - * types of frames are encountered. When this option is cleared, the MAC will - * allow these types of frames to be received. - * - * This option defaults to disabled (cleared) */ - -#define FXMAC_TRANSMITTER_ENABLE_OPTION 0x00000100U -/* Enable the transmitter. - * This option defaults to enabled (set) */ - -#define FXMAC_RECEIVER_ENABLE_OPTION 0x00000200U -/* Enable the receiver - * This option defaults to enabled (set) */ - -#define FXMAC_BROADCAST_OPTION 0x00000400U -/* Allow reception of the broadcast address - * This option defaults to enabled (set) */ - -#define FXMAC_MULTICAST_OPTION 0x00000800U -/* Allows reception of multicast addresses programmed into hash - * This option defaults to disabled (clear) */ - -#define FXMAC_RX_CHKSUM_ENABLE_OPTION 0x00001000U -/* Enable the RX checksum offload - * This option defaults to enabled (set) */ - -#define FXMAC_TX_CHKSUM_ENABLE_OPTION 0x00002000U -/* Enable the TX checksum offload - * This option defaults to enabled (set) */ - -#define FXMAC_JUMBO_ENABLE_OPTION 0x00004000U -#define FXMAC_SGMII_ENABLE_OPTION 0x00008000U - -#define FXMAC_LOOPBACK_NO_MII_OPTION 0x00010000U -#define FXMAC_LOOPBACK_USXGMII_OPTION 0x00020000U - -#define FXMAC_GET_TXRING(instance) (instance.tx_bd_queue.bdring) -#define FXMAC_GET_RXRING(instance) (instance.rx_bd_queue.bdring) - -#define FXMAC_DEFAULT_OPTIONS \ - ((u32)FXMAC_FLOW_CONTROL_OPTION | \ - (u32)FXMAC_FCS_INSERT_OPTION | \ - (u32)FXMAC_FCS_STRIP_OPTION | \ - (u32)FXMAC_BROADCAST_OPTION | \ - (u32)FXMAC_LENTYPE_ERR_OPTION | \ - (u32)FXMAC_TRANSMITTER_ENABLE_OPTION | \ - (u32)FXMAC_RECEIVER_ENABLE_OPTION | \ - (u32)FXMAC_RX_CHKSUM_ENABLE_OPTION | \ - (u32)FXMAC_TX_CHKSUM_ENABLE_OPTION) - -typedef enum -{ - FXMAC_LINKDOWN = 0, - FXMAC_LINKUP = 1, - FXMAC_NEGOTIATING = 2 -} FXmacLinkStatus; - -/* The next few constants help upper layers determine the size of memory - * pools used for Ethernet buffers and descriptor lists. - */ -#define FXMAC_MAC_ADDR_SIZE 6U /* size of Ethernet header */ - -#define FXMAC_MTU 1500U /* max MTU size of Ethernet frame */ -#define FXMAC_MTU_JUMBO 10240U /* max MTU size of jumbo frame including Ip header + IP payload */ -#define FXMAC_HDR_SIZE 14U /* size of Ethernet header , DA + SA + TYPE*/ -#define FXMAC_HDR_VLAN_SIZE 18U /* size of Ethernet header with VLAN */ -#define FXMAC_TRL_SIZE 4U /* size of Ethernet trailer (FCS) */ - -#define FXMAC_MAX_FRAME_SIZE (FXMAC_MTU + FXMAC_HDR_SIZE + FXMAC_TRL_SIZE) -#define FXMAC_MAX_FRAME_SIZE_JUMBO (FXMAC_MTU_JUMBO + FXMAC_HDR_SIZE + FXMAC_TRL_SIZE) - -#define FXMAC_MAX_VLAN_FRAME_SIZE (FXMAC_MTU + FXMAC_HDR_SIZE + \ - FXMAC_HDR_VLAN_SIZE + FXMAC_TRL_SIZE) -#define FXMAC_MAX_VLAN_FRAME_SIZE_JUMBO (FXMAC_MTU_JUMBO + FXMAC_HDR_SIZE + \ - FXMAC_HDR_VLAN_SIZE + FXMAC_TRL_SIZE) - - - -/** @name Callback identifiers - * - * These constants are used as parameters to FXMAC_SetHandler() - * @{ - */ -#define FXMAC_HANDLER_DMASEND 1U /* 发送中断 */ -#define FXMAC_HANDLER_DMARECV 2U /* 接收中断 */ -#define FXMAC_HANDLER_ERROR 3U /* 异常中断 */ -#define FXMAC_HANDLER_LINKCHANGE 4U /* 连接状态 */ -#define FXMAC_HANDLER_RESTART 5U /* 发送描述符队列发生异常 */ -/*@}*/ - -#define FXMAC_DMA_SG_IS_STARTED 0 -#define FXMAC_DMA_SG_IS_STOPED 1 - -#define FXMAC_SPEED_10 10U -#define FXMAC_SPEED_100 100U -#define FXMAC_SPEED_1000 1000U -#define FXMAC_SPEED_2500 2500U -#define FXMAC_SPEED_5000 5000U -#define FXMAC_SPEED_10000 10000U -#define FXMAC_SPEED_25000 25000U - -/* Capability mask bits */ -#define FXMAC_CAPS_ISR_CLEAR_ON_WRITE 0x00000001 /* irq status parameters need to be written to clear after they have been read */ - - -/** @name Direction identifiers - * - * These are used by several functions and callbacks that need - * to specify whether an operation specifies a send or receive channel. - * @{ - */ -#define FXMAC_SEND 1U /* send direction */ -#define FXMAC_RECV 2U /* receive direction */ - -/****************************************************************************/ -/** - * - * This macro triggers trasmit circuit to send data currently in TX buffer(s). - * - * @param instance_p is a pointer to the FXmac instance to be worked on. - * - * @return - * - * @note - * - * Signature: void FXmacTransmit(FXmac *instance_p) - * - *****************************************************************************/ -#define FXmacTransmit(instance_p) \ - FXMAC_WRITEREG32((instance_p)->config.base_address, \ - FXMAC_NWCTRL_OFFSET, \ - (FXMAC_READREG32((instance_p)->config.base_address, \ - FXMAC_NWCTRL_OFFSET) | \ - FXMAC_NWCTRL_STARTTX_MASK)) - -typedef void (*FXmacIrqHandler)(void *args); -typedef void (*FXmacErrorIrqHandler)(void *args, u32 direction, u32 error_word); -/* Interface Mode definitions */ -typedef enum -{ - FXMAC_PHY_INTERFACE_MODE_SGMII, - FXMAC_PHY_INTERFACE_MODE_RMII, - FXMAC_PHY_INTERFACE_MODE_RGMII, - FXMAC_PHY_INTERFACE_MODE_XGMII, - FXMAC_PHY_INTERFACE_MODE_USXGMII, - FXMAC_PHY_INTERFACE_MODE_5GBASER , - FXMAC_PHY_INTERFACE_MODE_2500BASEX -} FXmacPhyInterface; - -typedef struct -{ - u32 instance_id; /* Id of device*/ - volatile uintptr_t base_address; - volatile uintptr_t extral_mode_base; - volatile uintptr_t extral_loopback_base; - FXmacPhyInterface interface; - u32 speed; /* FXMAC_SPEED_XXX */ - u32 duplex; /* 1 is full-duplex , 0 is half-duplex */ - u32 auto_neg; /* Enable auto-negotiation - when set active high, autonegotiation operation is enabled. */ - u32 pclk_hz; - u32 max_queue_num; /* Number of Xmac Controller Queues */ - u32 tx_queue_id; /* 0 ~ FXMAC_QUEUE_MAX_NUM ,Index queue number */ - u32 rx_queue_id; /* 0 ~ FXMAC_QUEUE_MAX_NUM ,Index queue number */ - u32 hotplug_irq_num; - u32 dma_brust_length; /* burst length */ - u32 network_default_config; - u32 queue_irq_num[FXMAC_QUEUE_MAX_NUM]; /* mac0 8个 ,其他的 4个 */ - u32 caps; /* */ -} FXmacConfig; - -typedef struct -{ - u32 queue_id; - FXmacBdRing bdring; -} FXmacQueue; - -typedef struct -{ - FXmacConfig config; - u32 is_ready; /* Device is ininitialized and ready*/ - u32 is_started; - u32 link_status; /* indicates link status ,FXMAC_LINKUP is link up ,FXMAC_LINKDOWN is link down,FXMAC_NEGOTIATING is need to negotiating*/ - u32 options; - u32 mask; /*indicate intr mask */ - u32 caps; /* Capability mask bits */ - - FXmacQueue tx_bd_queue; /* Transmit Queue */ - FXmacQueue rx_bd_queue; /* Receive Queue */ - - FXmacIrqHandler send_irq_handler; - void *send_args; - - FXmacIrqHandler recv_irq_handler; - void *recv_args; - - FXmacErrorIrqHandler error_irq_handler; - void *error_args; - - FXmacIrqHandler link_change_handler; - void *link_change_args; - - FXmacIrqHandler restart_handler; - void *restart_args; - - u32 moudle_id; /* Module identification number */ - u32 max_mtu_size; - u32 max_frame_size; - - u32 phy_address; /* phy address */ - u32 rxbuf_mask; /* 1000,100,10 */ - -} FXmac; - -/* fxmac_sinit.c */ -const FXmacConfig *FXmacLookupConfig(u32 instance_id); - -/* fgmac.c */ -FError FXmacCfgInitialize(FXmac *instance_p, const FXmacConfig *config_p); - -void FXmacInitInterface(FXmac *instance_p); - -void FXmacGetMacAddress(FXmac *instance_p, u8 *address_ptr, u8 index); -FError FXmacSetMacAddress(FXmac *instance_p, u8 *address_ptr, u8 index); - -FError FXmacSetOptions(FXmac *instance_p, u32 options, u32 queue_num); -FError FXmacClearOptions(FXmac *instance_p, u32 options, u32 queue_num); -boolean FXmacUsxLinkStatus(FXmac *instance_p); - -void FXmacStart(FXmac *instance_p); -void FXmacStop(FXmac *instance_p); -void FXmacSetQueuePtr(FXmac *instance_p, uintptr QPtr, u8 QueueNum, - u32 direction); - -/* phy interface */ -FError FXmacPhyWrite(FXmac *instance_p, u32 phy_address, - u32 register_num, u16 phy_data); - -FError FXmacPhyRead(FXmac *instance_p, u32 phy_address, - u32 register_num, u16 *phydat_aptr); - -FError FXmacPhyInit(FXmac *instance_p, u32 speed, u32 duplex_mode, u32 autonegotiation_en); - -void FXmacSelectClk(FXmac *instance_p); - -FError FXmacSetHandler(FXmac *instance_p, u32 handler_type, void *func_pointer, void *call_back_ref); -/* interrupt */ -void FXmacIntrHandler(s32 vector, void *args); - -void FXmacClearHash(FXmac *instance_p); - - -/* debug */ -void FXmacDebugTxPrint(FXmac *instance_p); -void FXmacDebugRxPrint(FXmac *instance_p); -void FXmacDebugUsxPrint(FXmac *instance_p); - -#ifdef __cplusplus -} -#endif - -#endif // ! diff --git a/bsp/phytium/libraries/standalone/drivers/eth/fxmac/fxmac_bd.h b/bsp/phytium/libraries/standalone/drivers/eth/fxmac/fxmac_bd.h deleted file mode 100644 index 0441ad3027..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/eth/fxmac/fxmac_bd.h +++ /dev/null @@ -1,276 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fxmac_bd.h - * Date: 2022-04-06 14:46:52 - * LastEditTime: 2022-04-06 14:46:58 - * Description:  This file is for buffer descriptor (BD) management API. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/06/16 first release - */ - -#ifndef FXMAC_BD_H -#define FXMAC_BD_H - -#include "ftypes.h" -#include "string.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - - -/** - * @name: FXMAC_BD_READ - * @msg: Read the given Buffer Descriptor word. - * @param bd_ptr is the base address of the BD to read - * @param offset is the word offset to be read - * @return The 32-bit value of the field - */ -#define FXMAC_BD_READ(bd_ptr, offset) \ - (*(u32 *)((uintptr)((void *)(bd_ptr)) + (u32)(offset))) - - -/** - * @name: FXMAC_BD_WRITE - * @msg: Write the given Buffer Descriptor word. - * @param bd_ptr is the base address of the BD to write - * @param Offset is the word offset to be written - * @param data is the 32-bit value to write to the field - * @return {*} - */ -#define FXMAC_BD_WRITE(bd_ptr, Offset, data) \ - (*(u32 *)((uintptr)(void *)(bd_ptr) + (u32)(Offset)) = (u32)(data)) - - -/** - * @name: FXMAC_BD_SET_STATUS - * @msg: Set the BD's Status field (word 1). - * @param bd_ptr is the BD pointer to operate on - * @param data is the value to write to BD's status field. - */ -#define FXMAC_BD_SET_STATUS(bd_ptr, data) \ - FXMAC_BD_WRITE((bd_ptr), FXMAC_BD_STAT_OFFSET, \ - FXMAC_BD_READ((bd_ptr), FXMAC_BD_STAT_OFFSET) | (data)) - - -/** - * @name: FXMAC_BD_IS_RX_NEW - * @msg: Determine the new bit of the receive BD. - * @param bd_ptr is the BD pointer to operate on - */ -#define FXMAC_BD_IS_RX_NEW(bd_ptr) \ - ((FXMAC_BD_READ((bd_ptr), FXMAC_BD_ADDR_OFFSET) & \ - FXMAC_RXBUF_NEW_MASK) != 0U \ - ? TRUE \ - : FALSE) - - -/** - * @name: FXMAC_BD_IS_TX_WRAP - * @msg: Determine the wrap bit of the transmit BD which indicates end of the - * BD list. - * @param bd_ptr is the BD pointer to operate on - */ -#define FXMAC_BD_IS_TX_WRAP(bd_ptr) \ - ((FXMAC_BD_READ((bd_ptr), FXMAC_BD_STAT_OFFSET) & \ - FXMAC_TXBUF_WRAP_MASK) != 0U \ - ? TRUE \ - : FALSE) - - -/** - * @name: FXMAC_BD_IS_RX_WRAP - * @msg: Determine the wrap bit of the receive BD which indicates end of the - * BD list. - * @param: bd_ptr is the BD pointer to operate on - */ -#define FXMAC_BD_IS_RX_WRAP(bd_ptr) \ - ((FXMAC_BD_READ((bd_ptr), FXMAC_BD_ADDR_OFFSET) & \ - FXMAC_RXBUF_WRAP_MASK) != 0U \ - ? TRUE \ - : FALSE) - - - -/** - * @name: FXMAC_BD_SET_ADDRESS_TX - * @msg: Set the BD's address field (word 0). - * @param: bd_ptr is the BD pointer to operate on - * @param: addr is the value to write to BD's status field. - */ -#if defined(__aarch64__) || defined(__arch64__) -#define FXMAC_BD_SET_ADDRESS_TX(bd_ptr, addr) \ - FXMAC_BD_WRITE((bd_ptr), FXMAC_BD_ADDR_OFFSET, \ - (u32)((addr)&ULONG64_LO_MASK)); \ - FXMAC_BD_WRITE((bd_ptr), FXMAC_BD_ADDR_HI_OFFSET, \ - (u32)(((addr)&ULONG64_HI_MASK) >> 32U)); -#else -#define FXMAC_BD_SET_ADDRESS_TX(bd_ptr, addr) \ - FXMAC_BD_WRITE((bd_ptr), FXMAC_BD_ADDR_OFFSET, (u32)(addr)) -#endif - - -/** - * @name: FXMAC_BD_SET_ADDRESS_RX - * @msg: Set the BD's address field (word 0). - * @param: bd_ptr is the BD pointer to operate on - * @param: addr is the value to write to BD's status field. - * @return {*} - */ -#ifdef __aarch64__ -#define FXMAC_BD_SET_ADDRESS_RX(bd_ptr, addr) \ - FXMAC_BD_WRITE((bd_ptr), FXMAC_BD_ADDR_OFFSET, \ - ((FXMAC_BD_READ((bd_ptr), FXMAC_BD_ADDR_OFFSET) & \ - ~FXMAC_RXBUF_ADD_MASK) | \ - ((u32)((addr)&ULONG64_LO_MASK)))); \ - FXMAC_BD_WRITE((bd_ptr), FXMAC_BD_ADDR_HI_OFFSET, \ - (u32)(((addr)&ULONG64_HI_MASK) >> 32U)); -#else -#define FXMAC_BD_SET_ADDRESS_RX(bd_ptr, addr) \ - FXMAC_BD_WRITE((bd_ptr), FXMAC_BD_ADDR_OFFSET, \ - ((FXMAC_BD_READ((bd_ptr), FXMAC_BD_ADDR_OFFSET) & \ - ~FXMAC_RXBUF_ADD_MASK) | \ - (u32)(addr))) -#endif - - -/** - * @name: FXMAC_BD_SET_LENGTH - * @msg: Set transfer length in bytes for the given BD. The length must be set each - * time a BD is submitted to hardware. - * @param: bd_ptr is the BD pointer to operate on - * @param: len_bytes is the number of bytes to transfer. - * @return {*} - */ -#define FXMAC_BD_SET_LENGTH(bd_ptr, len_bytes) \ - FXMAC_BD_WRITE((bd_ptr), FXMAC_BD_STAT_OFFSET, \ - ((FXMAC_BD_READ((bd_ptr), FXMAC_BD_STAT_OFFSET) & \ - ~FXMAC_TXBUF_LEN_MASK) | \ - (len_bytes))) - - -/** - * @name: FXMAC_BD_GET_LENGTH - * @msg: For Tx channels, the returned value is the same as that written with - * FXMAC_BD_SET_LENGTH(). For Rx channels, the returned value is the size of the received packet. - * @param: bd_ptr is the BD pointer to operate on - * @return {*} - */ -#define FXMAC_BD_GET_LENGTH(bd_ptr) \ - (FXMAC_BD_READ((bd_ptr), FXMAC_BD_STAT_OFFSET) & \ - FXMAC_RXBUF_LEN_MASK) - -#define FXMAC_BD_GET_TX_LENGTH(bd_ptr) \ - (FXMAC_BD_READ((bd_ptr), FXMAC_BD_STAT_OFFSET) & \ - FXMAC_TXBUF_LEN_MASK) - - -/** - * @name: FXMAC_GET_RX_FRAME_SIZE - * @msg: The returned value is the size of the received packet. - * This API supports jumbo frame sizes if enabled. - * @param bd_ptr is the BD pointer to operate on - * - * @return Length field processed by hardware or set by - * FXMAC_BD_SET_LENGTH(). - */ - -#define FXMAC_BD_JUMBO_LENGTH_MASK - -#define FXMAC_GET_RX_FRAME_SIZE(bd_ptr) \ - (FXMAC_BD_READ((bd_ptr), FXMAC_BD_STAT_OFFSET) & \ - 0x00003FFFU) - - - -/** - * @name: FXMAC_BD_CLEAR_TX_USED - * @msg: Software clears this bit to enable the buffer to be read by the hardware. - * Hardware sets this bit for the first buffer of a frame once it has been - * successfully transmitted. This macro clears this bit of transmit BD. - * @param: bd_ptr is the BD pointer to operate on - * @return {*} - */ -#define FXMAC_BD_CLEAR_TX_USED(bd_ptr) \ - (FXMAC_BD_WRITE((bd_ptr), FXMAC_BD_STAT_OFFSET, \ - FXMAC_BD_READ((bd_ptr), FXMAC_BD_STAT_OFFSET) & \ - (~FXMAC_TXBUF_USED_MASK))) - -#define FXMAC_BD_SET_CRC(bd_ptr) \ - (FXMAC_BD_WRITE((bd_ptr), FXMAC_BD_STAT_OFFSET, \ - FXMAC_BD_READ((bd_ptr), FXMAC_BD_STAT_OFFSET) & \ - (~FXMAC_TXBUF_NOCRC_MASK))) - - -/** - * @name: FXMAC_BD_SET_LAST - * @msg: Tell the DMA engine that the given transmit BD marks the end of the current - * packet to be processed. - * @param bd_ptr is the BD pointer to operate on - * @return {*} - */ -#define FXMAC_BD_SET_LAST(bd_ptr) \ - (FXMAC_BD_WRITE((bd_ptr), FXMAC_BD_STAT_OFFSET, \ - FXMAC_BD_READ((bd_ptr), FXMAC_BD_STAT_OFFSET) | \ - FXMAC_TXBUF_LAST_MASK)) - - -/** - * @name: FXMAC_BD_CLEAR_LAST - * @msg: Tell the DMA engine that the current packet does not end with the given - * BD. - * @param bd_ptr is the BD pointer to operate on - * @return {*} - */ -#define FXMAC_BD_CLEAR_LAST(bd_ptr) \ - (FXMAC_BD_WRITE((bd_ptr), FXMAC_BD_STAT_OFFSET, \ - FXMAC_BD_READ((bd_ptr), FXMAC_BD_STAT_OFFSET) & \ - ~FXMAC_TXBUF_LAST_MASK)) - -/** - * @name: FXMAC_BD_CLEAR - * @msg: Zero out BD fields - * @param bd_ptr is the BD pointer to operate on - * @return {*} - */ -#define FXMAC_BD_CLEAR(bd_ptr) \ - memset((bd_ptr), 0, sizeof(FXmacBd)) - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ -#ifdef __aarch64__ -/* Minimum BD alignment */ -#define FXMAC_DMABD_MINIMUM_ALIGNMENT 64U -#define FXMAC_BD_NUM_WORDS 4U -#else -/* Minimum BD alignment */ -#define FXMAC_DMABD_MINIMUM_ALIGNMENT 4U -#define FXMAC_BD_NUM_WORDS 2U -#endif - -/** - * The FXMAC_Bd is the type for buffer descriptors (BDs). - */ -typedef u32 FXmacBd[FXMAC_BD_NUM_WORDS]; - -#ifdef __cplusplus -} -#endif - -#endif // ! diff --git a/bsp/phytium/libraries/standalone/drivers/eth/fxmac/fxmac_bdring.c b/bsp/phytium/libraries/standalone/drivers/eth/fxmac/fxmac_bdring.c deleted file mode 100644 index 213ba90b23..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/eth/fxmac/fxmac_bdring.c +++ /dev/null @@ -1,957 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fxmac_bdring.c - * Date: 2022-04-06 14:46:52 - * LastEditTime: 2022-04-06 14:46:58 - * Description:  This file implements buffer descriptor ring related functions. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/06/16 first release - */ - -#include "fxmac_hw.h" -#include "fxmac.h" -#include "fxmac_bdring.h" -#include "fxmac_bd.h" -#include "ftypes.h" -#include "fxmac.h" -#include "string.h" -#include "fprintk.h" -#include "fdebug.h" - -static void FXmacBdSetRxWrap(uintptr bdptr); -static void FXmacBdSetTxWrap(uintptr bdptr); - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/** - * @name: FXMAC_RING_SEEKAHEAD - * @msg: Move the bdptr argument ahead an arbitrary number of BDs wrapping around - * to the beginning of the ring if needed. - * @param ring_ptr is the ring bdptr appears in - * @param bdptr on input is the starting BD position and on output is the final BD position - * @param num_bd is the number of BD spaces to increment - */ -#define FXMAC_RING_SEEKAHEAD(ring_ptr, bdptr, num_bd) \ - { \ - uintptr addr = (uintptr)(void *)(bdptr); \ - \ - addr += ((ring_ptr)->separation * (num_bd)); \ - if ((addr > (ring_ptr)->high_bd_addr) || ((uintptr)(void *)(bdptr) > addr)) \ - { \ - addr -= (ring_ptr)->length; \ - } \ - \ - (bdptr) = (FXmacBd *)(void *)addr; \ - } - -/** - * @name: FXMAC_RING_SEEKBACK - * @msg: Move the bdptr argument backwards an arbitrary number of BDs wrapping - * around to the end of the ring if needed. - * @param ring_ptr is the ring bdptr appears in - * @param bdptr on input is the starting BD position and on output is the - * final BD position - * @param num_bd is the number of BD spaces to increment - * @return {*} - */ -#define FXMAC_RING_SEEKBACK(ring_ptr, bdptr, num_bd) \ - { \ - uintptr addr = (uintptr)(void *)(bdptr); \ - \ - addr -= ((ring_ptr)->separation * (num_bd)); \ - if ((addr < (ring_ptr)->base_bd_addr) || ((uintptr)(void *)(bdptr) < addr)) \ - { \ - addr += (ring_ptr)->length; \ - } \ - \ - (bdptr) = (FXmacBd *)(void *)addr; \ - } - - - -/** - * @name: FXmacBdRingCreate - * @msg: Using a memory segment allocated by the caller, create and setup the BD list - * for the given DMA channel. - * @param ring_ptr is the instance to be worked on. - * @param Physaddr is the physical base address of user memory region. - * @param Virtaddr is the virtual base address of the user memory region. If - * address translation is not being utilized, then Virtaddr should be - * equivalent to Physaddr. - * @param Alignment governs the byte alignment of individual BDs. This function - * will enforce a minimum alignment of 4 bytes with no maximum as long - * as it is specified as a power of 2. - * @param bd_count is the number of BDs to setup in the user memory region. It - * is assumed the region is large enough to contain the BDs. - * @return - * FT_SUCCESS if initialization was successful - * FXMAC_ERR_INVALID_PARAM under any of the following conditions: - * 1) Physaddr and/or Virtaddr are not aligned to the given Alignment - * parameter. - * 2) Alignment parameter does not meet minimum requirements or is not a - * power of 2 value. - * 3) bd_count is 0. - */ -FError FXmacBdRingCreate(FXmacBdRing *ring_ptr, uintptr phys_addr, - uintptr virt_addr, u32 alignment, u32 bd_count) -{ - u32 i; - uintptr bd_virt_addr; - uintptr bd_phy_addr; - uintptr virt_addr_loc = virt_addr; - - /* In case there is a failure prior to creating list, make sure the - * following attributes are 0 to prevent calls to other functions - * from doing anything. - */ - ring_ptr->all_cnt = 0U; - ring_ptr->free_cnt = 0U; - ring_ptr->hw_cnt = 0U; - ring_ptr->pre_cnt = 0U; - ring_ptr->post_cnt = 0U; - - /* Make sure alignment parameter meets minimum requirements */ - if (alignment < (u32)FXMAC_DMABD_MINIMUM_ALIGNMENT) - { - return (FError)(FXMAC_ERR_INVALID_PARAM); - } - - /* Make sure alignment is a power of 2 */ - if (((alignment - 0x00000001U) & alignment) != 0x00000000U) - { - return (FError)(FXMAC_ERR_INVALID_PARAM); - } - - /* Make sure phys_addr and virt_addr are on same alignment */ - if (((phys_addr % alignment) != (u32)0) || ((virt_addr_loc % alignment) != (u32)0)) - { - return (FError)(FXMAC_ERR_INVALID_PARAM); - } - - /* Is bd_count reasonable? */ - if (bd_count == 0x00000000U) - { - return (FError)(FXMAC_ERR_INVALID_PARAM); - } - - /* Figure out how many bytes will be between the start of adjacent BDs */ - ring_ptr->separation = ((u32)sizeof(FXmacBd)); - - /* Must make sure the ring doesn't span address 0x00000000. If it does, - * then the next/prev BD traversal macros will fail. - */ - if (virt_addr_loc > ((virt_addr_loc + (ring_ptr->separation * bd_count)) - (u32)1)) - { - return (FError)(FXMAC_ERR_SG_LIST); - } - - /* Initial ring setup: - * - Clear the entire space - * - Setup each BD's BDA field with the physical address of the next BD - */ - (void)memset((void *)virt_addr_loc, 0, (ring_ptr->separation * bd_count)); - - bd_virt_addr = virt_addr_loc; - bd_phy_addr = phys_addr + ring_ptr->separation; - for (i = 1U; i < bd_count; i++) - { - bd_virt_addr += ring_ptr->separation; - bd_phy_addr += ring_ptr->separation; - } - - /* Setup and initialize pointers and counters */ - ring_ptr->run_state = (u32)(FXMAC_DMA_SG_IS_STOPED); - ring_ptr->base_bd_addr = virt_addr_loc; - ring_ptr->phys_base_addr = phys_addr; - ring_ptr->high_bd_addr = bd_virt_addr; - ring_ptr->length = - ((ring_ptr->high_bd_addr - ring_ptr->base_bd_addr) + ring_ptr->separation); - ring_ptr->all_cnt = (u32)bd_count; - ring_ptr->free_cnt = (u32)bd_count; - ring_ptr->free_head = (FXmacBd *)(void *)virt_addr_loc; - ring_ptr->pre_head = (FXmacBd *)virt_addr_loc; - ring_ptr->hw_head = (FXmacBd *)virt_addr_loc; - ring_ptr->hw_tail = (FXmacBd *)virt_addr_loc; - ring_ptr->post_head = (FXmacBd *)virt_addr_loc; - ring_ptr->bda_restart = (FXmacBd *)(void *)phys_addr; - - return (FError)(FT_SUCCESS); -} - -/** - * @name: FXmacBdRingClone - * @msg: Clone the given BD into every BD in the list. - * every field of the source BD is replicated in every BD of the list. - * @param ring_ptr is the instance to be worked on. - * @param src_bd_ptr is the source BD template to be cloned into the list. This - * BD will be modified. - * @param direction is either FXMAC_SEND or FXMAC_RECV that indicates - * which direction. - * @return {*} - */ -FError FXmacBdRingClone(FXmacBdRing *ring_ptr, FXmacBd *src_bd_ptr, - u8 direction) -{ - u32 i; - uintptr cur_bd; - - /* Can't do this function if there isn't a ring */ - if (ring_ptr->all_cnt == 0x00000000U) - { - return (FError)(FXMAC_ERR_SG_NO_LIST); - } - - /* Can't do this function with the channel running */ - if (ring_ptr->run_state == (u32)FXMAC_DMA_SG_IS_STARTED) - { - return (FError)(FT_COMPONENT_IS_STARTED); - } - - /* Can't do this function with some of the BDs in use */ - if (ring_ptr->free_cnt != ring_ptr->all_cnt) - { - return (FError)(FXMAC_ERR_SG_LIST); - } - - if ((direction != (u8)FXMAC_SEND) && (direction != (u8)FXMAC_RECV)) - { - return (FError)(FXMAC_ERR_INVALID_PARAM); - } - - /* Starting from the top of the ring, save bd.next, overwrite the entire - * BD with the template, then restore bd.next - */ - cur_bd = ring_ptr->base_bd_addr; - for (i = 0U; i < ring_ptr->all_cnt; i++) - { - memcpy((void *)cur_bd, src_bd_ptr, sizeof(FXmacBd)); - cur_bd += ring_ptr->separation; - } - - cur_bd -= ring_ptr->separation; - - if (direction == FXMAC_RECV) - { - FXmacBdSetRxWrap(cur_bd); - } - else - { - FXmacBdSetTxWrap(cur_bd); - } - - return (FError)(FT_SUCCESS); -} - - -/** - * @name: FXmacBdRingAlloc - * @msg: Reserve locations in the BD list. The set of returned BDs may be modified - * in preparation for future DMA transaction(s). Once the BDs are ready to be - * submitted to hardware, the user must call FXmacBdRingToHw() in the same - * order which they were allocated here. - * @param ring_ptr is a pointer to the BD ring instance to be worked on. - * @param num_bd is the number of BDs to allocate - * @param bd_set_ptr is an output parameter, it points to the first BD available - * for modification. - * @return FT_SUCCESS if the requested number of BDs was returned in the bd_set_ptr - * parameter. - * - FXMAC_ERR_GENERAL if there were not enough free BDs to satisfy the request. - */ -FError FXmacBdRingAlloc(FXmacBdRing *ring_ptr, u32 num_bd, - FXmacBd **bd_set_ptr) -{ - FError status; - /* Enough free BDs available for the request? */ - if (ring_ptr->free_cnt < num_bd) - { - status = (FError)(FXMAC_ERR_GENERAL); - } - else - { - /* Set the return argument and move free_head forward */ - *bd_set_ptr = ring_ptr->free_head; - FXMAC_RING_SEEKAHEAD(ring_ptr, ring_ptr->free_head, num_bd); - ring_ptr->free_cnt -= num_bd; - ring_ptr->pre_cnt += num_bd; - status = (FError)(FT_SUCCESS); - } - return status; -} - - -/** - * @name: FXmacBdRingUnAlloc - * @msg: * Fully or partially undo an FXmacBdRingAlloc() operation. Use this - * function if all the BDs allocated by FXmacBdRingAlloc() could not be - * transferred to hardware with FXmacBdRingToHw(). - * - * This function helps out in situations when an unrelated error occurs after - * BDs have been allocated but before they have been given to hardware. - * An example of this type of error would be an OS running out of resources. - * - * This function is not the same as FXmacBdRingFree(). The Free function - * returns BDs to the free list after they have been processed by hardware, - * while UnAlloc returns them before being processed by hardware. - * - * There are two scenarios where this function can be used. Full UnAlloc or - * Partial UnAlloc. A Full UnAlloc means all the BDs Alloc'd will be returned: - * - *
- *    status = FXmacBdRingAlloc(Myring_ptr, 10, &bdptr),
- *        ...
- *    if (Error)
- *    {
- *        status = FXmacBdRingUnAlloc(Myring_ptr, 10, &bdptr),
- *    }
- * 
- * - * A partial UnAlloc means some of the BDs Alloc'd will be returned: - * - *
- *    status = FXmacBdRingAlloc(Myring_ptr, 10, &bdptr),
- *    BdsLeft = 10,
- *    cur_bd_ptr = bdptr,
- *
- *    while (BdsLeft)
- *    {
- *       if (Error)
- *       {
- *          status = FXmacBdRingUnAlloc(Myring_ptr, BdsLeft, cur_bd_ptr),
- *       }
- *
- *       cur_bd_ptr = FXMAC_BD_RING_NEXT(Myring_ptr, cur_bd_ptr),
- *       BdsLeft--,
- *    }
- * 
- * - * A partial UnAlloc must include the last BD in the list that was Alloc'd. - * - * @param ring_ptr is a pointer to the instance to be worked on. - * @param num_bd is the number of BDs to allocate - * @param bd_set_ptr is an output parameter, it points to the first BD available - * for modification. - * - * @return - * - FT_SUCCESS if the BDs were unallocated. - * - FXMAC_ERR_GENERAL if num_bd parameter was greater that the number of BDs in - * the preprocessing state. - * - * @return {*} - */ -FError FXmacBdRingUnAlloc(FXmacBdRing *ring_ptr, u32 num_bd, - FXmacBd *bd_set_ptr) -{ - FError status; - (void)bd_set_ptr; - FASSERT(ring_ptr != NULL); - FASSERT(bd_set_ptr != NULL); - - /* Enough BDs in the free state for the request? */ - if (ring_ptr->pre_cnt < num_bd) - { - status = (FError)(FXMAC_ERR_GENERAL); - } - else - { - /* Set the return argument and move free_head backward */ - FXMAC_RING_SEEKBACK(ring_ptr, (ring_ptr->free_head), num_bd); - ring_ptr->free_cnt += num_bd; - ring_ptr->pre_cnt -= num_bd; - status = (FError)(FT_SUCCESS); - } - return status; -} - - -/** - * @name: FXmacBdRingToHw - * @msg: Enqueue a set of BDs to hardware that were previously allocated by - * FXmacBdRingAlloc(). Once this function returns, the argument BD set goes - * under hardware control. Any changes made to these BDs after this point will - * corrupt the BD list leading to data corruption and system instability. - * - * @param ring_ptr is a pointer to the instance to be worked on. - * @param num_bd is the number of BDs in the set. - * @param bd_set_ptr is the first BD of the set to commit to hardware. - * @return FT_SUCCESS if the set of BDs was accepted and enqueued to hardware. - * XST_FAILURE if the set of BDs was rejected because the last BD of the set - * did not have its "last" bit set. - * FXMAC_ERR_SG_LIST if this function was called out of sequence with - * FXmacBdRingAlloc(). - */ -FError FXmacBdRingToHw(FXmacBdRing *ring_ptr, u32 num_bd, - FXmacBd *bd_set_ptr) -{ - FXmacBd *cur_bd_ptr; - u32 i; - FError status; - /* if no bds to process, simply return. */ - if (0U == num_bd) - { - status = (FError)(FT_SUCCESS); - } - else - { - /* Make sure we are in sync with FXmacBdRingAlloc() */ - if ((ring_ptr->pre_cnt < num_bd) || (ring_ptr->pre_head != bd_set_ptr)) - { - status = (FError)(FXMAC_ERR_SG_LIST); - } - else - { - cur_bd_ptr = bd_set_ptr; - for (i = 0U; i < num_bd; i++) - { - cur_bd_ptr = (FXmacBd *)((void *)FXMAC_BD_RING_NEXT(ring_ptr, cur_bd_ptr)); - } - /* Adjust ring pointers & counters */ - FXMAC_RING_SEEKAHEAD(ring_ptr, ring_ptr->pre_head, num_bd); - ring_ptr->pre_cnt -= num_bd; - ring_ptr->hw_tail = cur_bd_ptr; - ring_ptr->hw_cnt += num_bd; - - status = (FError)(FT_SUCCESS); - } - } - return status; -} - - -/** - * @name: FXmacBdRingFromHwTx - * @msg: Returns a set of BD(s) that have been processed by hardware. The returned - * BDs may be examined to determine the outcome of the DMA transaction(s). - * Once the BDs have been examined, the user must call FXmacBdRingFree() - * in the same order which they were retrieved here. Example: - * - *
- *        num_bd = FXmacBdRingFromHwTx(Myring_ptr, MaxBd, &MyBdSet),
- *        if (num_bd == 0)
- *        {
- *           * hardware has nothing ready for us yet*
- *        }
- *
- *        cur_bd = MyBdSet,
- *        for (i=0; i
- *
- * A more advanced use of this function may allocate multiple sets of BDs.
- * They must be retrieved from hardware and freed in the correct sequence:
- * 
- *        * Legal *
- *        FXmacBdRingFromHwTx(Myring_ptr, num_bd1, &MySet1),
- *        FXmacBdRingFree(Myring_ptr, num_bd1, MySet1),
- *
- *        * Legal *
- *        FXmacBdRingFromHwTx(Myring_ptr, num_bd1, &MySet1),
- *        FXmacBdRingFromHwTx(Myring_ptr, num_bd2, &MySet2),
- *        FXmacBdRingFree(Myring_ptr, num_bd1, MySet1),
- *        FXmacBdRingFree(Myring_ptr, num_bd2, MySet2),
- *
- *        * Not legal *
- *        FXmacBdRingFromHwTx(Myring_ptr, num_bd1, &MySet1),
- *        FXmacBdRingFromHwTx(Myring_ptr, num_bd2, &MySet2),
- *        FXmacBdRingFree(Myring_ptr, num_bd2, MySet2),
- *        FXmacBdRingFree(Myring_ptr, num_bd1, MySet1),
- * 
- * - * If hardware has only partially completed a packet spanning multiple BDs, - * then none of the BDs for that packet will be included in the results. - * - * @param ring_ptr is a pointer to the instance to be worked on. - * @param bd_limit is the maximum number of BDs to return in the set. - * @param bd_set_ptr is an output parameter, it points to the first BD available - * for examination. - * -* @return - * The number of BDs processed by hardware. A value of 0 indicates that no - * data is available. No more than bd_limit BDs will be returned. - * - * @return - * The number of BDs processed by hardware. A value of 0 indicates that no - * data is available. No more than bd_limit BDs will be returned. - */ -u32 FXmacBdRingFromHwTx(FXmacBdRing *ring_ptr, u32 bd_limit, - FXmacBd **bd_set_ptr) -{ - FXmacBd *cur_bd_ptr; - u32 bd_str = 0U; - u32 bd_count; - u32 bd_partial_count; - u32 Sop = 0U; - u32 status; - u32 bd_limitLoc = bd_limit; - cur_bd_ptr = ring_ptr->hw_head; - bd_count = 0U; - bd_partial_count = 0U; - - /* If no BDs in work group, then there's nothing to search */ - if (ring_ptr->hw_cnt == 0x00000000U) - { - *bd_set_ptr = NULL; - status = 0U; - } - else - { - - if (bd_limitLoc > ring_ptr->hw_cnt) - { - bd_limitLoc = ring_ptr->hw_cnt; - } - /* Starting at hw_head, keep moving forward in the list until: - * - A BD is encountered with its new/used bit set which means - * hardware has not completed processing of that BD. - * - ring_ptr->hw_tail is reached and ring_ptr->hw_cnt is reached. - * - The number of requested BDs has been processed - */ - while (bd_count < bd_limitLoc) - { - /* Read the status */ - if (cur_bd_ptr != NULL) - { - bd_str = FXMAC_BD_READ(cur_bd_ptr, FXMAC_BD_STAT_OFFSET); - } - - if ((Sop == 0x00000000U) && ((bd_str & FXMAC_TXBUF_USED_MASK) != 0x00000000U)) - { - Sop = 1U; - } - if (Sop == 0x00000001U) - { - bd_count++; - bd_partial_count++; - } - - /* hardware has processed this BD so check the "last" bit. - * If it is clear, then there are more BDs for the current - * packet. Keep a count of these partial packet BDs. - */ - if ((Sop == 0x00000001U) && ((bd_str & FXMAC_TXBUF_LAST_MASK) != 0x00000000U)) - { - Sop = 0U; - bd_partial_count = 0U; - } - - /* Move on to next BD in work group */ - cur_bd_ptr = FXMAC_BD_RING_NEXT(ring_ptr, cur_bd_ptr); - } - - /* Subtract off any partial packet BDs found */ - bd_count -= bd_partial_count; - - /* If bd_count is non-zero then BDs were found to return. Set return - * parameters, update pointers and counters, return success - */ - if (bd_count > 0x00000000U) - { - *bd_set_ptr = ring_ptr->hw_head; - ring_ptr->hw_cnt -= bd_count; - ring_ptr->post_cnt += bd_count; - FXMAC_RING_SEEKAHEAD(ring_ptr, ring_ptr->hw_head, bd_count); - status = (bd_count); - } - else - { - *bd_set_ptr = NULL; - status = 0U; - } - } - return status; -} - -/** - * @name: FXmacBdRingFromHwRx - * @msg: Returns a set of BD(s) that have been processed by hardware. The returned - * BDs may be examined to determine the outcome of the DMA transaction(s). - * Once the BDs have been examined, the user must call FXmacBdRingFree() - * in the same order which they were retrieved here. Example: - * - *
- *        num_bd = FXmacBdRingFromHwRx(Myring_ptr, MaxBd, &MyBdSet),
- *
- *        if (num_bd == 0)
- *        {
- *           *hardware has nothing ready for us yet*
- *        }
- *
- *        cur_bd = MyBdSet,
- *        for (i=0; i
- *
- * A more advanced use of this function may allocate multiple sets of BDs.
- * They must be retrieved from hardware and freed in the correct sequence:
- * 
- *        * Legal *
- *        FXmacBdRingFromHwRx(Myring_ptr, num_bd1, &MySet1),
- *        FXmacBdRingFree(Myring_ptr, num_bd1, MySet1),
- *
- *        * Legal *
- *        FXmacBdRingFromHwRx(Myring_ptr, num_bd1, &MySet1),
- *        FXmacBdRingFromHwRx(Myring_ptr, num_bd2, &MySet2),
- *        FXmacBdRingFree(Myring_ptr, num_bd1, MySet1),
- *        FXmacBdRingFree(Myring_ptr, num_bd2, MySet2),
- *
- *        * Not legal *
- *        FXmacBdRingFromHwRx(Myring_ptr, num_bd1, &MySet1),
- *        FXmacBdRingFromHwRx(Myring_ptr, num_bd2, &MySet2),
- *        FXmacBdRingFree(Myring_ptr, num_bd2, MySet2),
- *        FXmacBdRingFree(Myring_ptr, num_bd1, MySet1),
- * 
- * - * If hardware has only partially completed a packet spanning multiple BDs, - * then none of the BDs for that packet will be included in the results. - * - * @param ring_ptr is a pointer to the instance to be worked on. - * @param bd_limit is the maximum number of BDs to return in the set. - * @param bd_set_ptr is an output parameter, it points to the first BD available - * for examination. - * - * @return - * The number of BDs processed by hardware. A value of 0 indicates that no - * data is available. No more than bd_limit BDs will be returned. - */ -u32 FXmacBdRingFromHwRx(FXmacBdRing *ring_ptr, u32 bd_limit, - FXmacBd **bd_set_ptr) -{ - FXmacBd *cur_bd_ptr; - u32 bd_str = 0U; - u32 bd_count; - u32 bd_partial_count; - u32 status; - - cur_bd_ptr = ring_ptr->hw_head; - bd_count = 0U; - bd_partial_count = 0U; - - /* If no BDs in work group, then there's nothing to search */ - if (ring_ptr->hw_cnt == 0x00000000U) - { - *bd_set_ptr = NULL; - status = 0U; - } - else - { - /* Starting at hw_head, keep moving forward in the list until: - * - A BD is encountered with its new/used bit set which means - * hardware has completed processing of that BD. - * - ring_ptr->hw_tail is reached and ring_ptr->hw_cnt is reached. - * - The number of requested BDs has been processed - */ - while (bd_count < bd_limit) - { - - /* Read the status */ - if (cur_bd_ptr != NULL) - { - bd_str = FXMAC_BD_READ(cur_bd_ptr, FXMAC_BD_STAT_OFFSET); - } - if ((!(FXMAC_BD_IS_RX_NEW(cur_bd_ptr))) == TRUE) - { - break; - } - - bd_count++; - - /* hardware has processed this BD so check the "last" bit. If - * it is clear, then there are more BDs for the current packet. - * Keep a count of these partial packet BDs. - */ - if ((bd_str & FXMAC_RXBUF_EOF_MASK) != 0x00000000U) - { - bd_partial_count = 0U; - } - else - { - bd_partial_count++; - } - - /* Move on to next BD in work group */ - cur_bd_ptr = FXMAC_BD_RING_NEXT(ring_ptr, cur_bd_ptr); - - } - - /* Subtract off any partial packet BDs found */ - bd_count -= bd_partial_count; - - /* If bd_count is non-zero then BDs were found to return. Set return - * parameters, update pointers and counters, return success - */ - if (bd_count > 0x00000000U) - { - *bd_set_ptr = ring_ptr->hw_head; - ring_ptr->hw_cnt -= bd_count; - ring_ptr->post_cnt += bd_count; - FXMAC_RING_SEEKAHEAD(ring_ptr, ring_ptr->hw_head, bd_count); - status = (bd_count); - } - else - { - *bd_set_ptr = NULL; - status = 0U; - } - } - return status; -} - -/** - * @name: FXmacBdRingFree - * @msg: Frees a set of BDs that had been previously retrieved with - * FXmacBdRingFromHw(). - * - * @param ring_ptr is a pointer to the instance to be worked on. - * @param num_bd is the number of BDs to free. - * @param bd_set_ptr is the head of a list of BDs returned by - * FXmacBdRingFromHw(). - * - * @return - * FT_SUCCESS if the set of BDs was freed. - * FXMAC_ERR_SG_LIST if this function was called out of sequence with - * FXmacBdRingFromHw(). - */ -FError FXmacBdRingFree(FXmacBdRing *ring_ptr, u32 num_bd, - FXmacBd *bd_set_ptr) -{ - FError status; - /* if no bds to process, simply return. */ - if (0x00000000U == num_bd) - { - status = (FError)(FT_SUCCESS); - } - else - { - /* Make sure we are in sync with FXmacBdRingFromHw() */ - if ((ring_ptr->post_cnt < num_bd) || (ring_ptr->post_head != bd_set_ptr)) - { - status = (FError)(FXMAC_ERR_SG_LIST); - } - else - { - /* Update pointers and counters */ - ring_ptr->free_cnt += num_bd; - ring_ptr->post_cnt -= num_bd; - FXMAC_RING_SEEKAHEAD(ring_ptr, ring_ptr->post_head, num_bd); - status = (FError)(FT_SUCCESS); - } - } - return status; -} - -/** - * @name: FXmacBdRingCheck - * @msg: Check the internal data structures of the BD ring for the provided channel. - * The following checks are made: - * - * - Is the BD ring linked correctly in physical address space. - * - Do the internal pointers point to BDs in the ring. - * - Do the internal counters add up. - * - * The channel should be stopped prior to calling this function. - * - * @param {FXmacBdRing} ring_ptr is a pointer to the instance to be worked on. - * @param {u8} direction is either FXMAC_SEND or FXMAC_RECV that indicates - * which direction. - * @return {*} - * FT_SUCCESS if the set of BDs was freed. - * XST_DMA_SG_NO_LIST if the list has not been created. - * FT_COMPONENT_IS_STARTED if the channel is not stopped. - * FXMAC_ERR_SG_LIST if a problem is found with the internal data - * structures. If this value is returned, the channel should be reset to - * avoid data corruption or system instability. - */ -FError FXmacBdRingCheck(FXmacBdRing *ring_ptr, u8 direction) -{ - uintptr addr_v, addr_p; - u32 i; - - if ((direction != (u8)FXMAC_SEND) && (direction != (u8)FXMAC_RECV)) - { - return (FError)(FXMAC_ERR_INVALID_PARAM); - } - - /* Is the list created */ - if (ring_ptr->all_cnt == 0x00000000U) - { - return (FError)(FXMAC_ERR_SG_NO_LIST); - } - - /* Can't check if channel is running */ - if (ring_ptr->run_state == (u32)FXMAC_DMA_SG_IS_STARTED) - { - return (FError)(FT_COMPONENT_IS_STARTED); - } - - /* run_state doesn't make sense */ - if (ring_ptr->run_state != (u32)FXMAC_DMA_SG_IS_STOPED) - { - return (FError)(FXMAC_ERR_SG_LIST); - } - - /* Verify internal pointers point to correct memory space */ - addr_v = (uintptr)ring_ptr->free_head; - if ((addr_v < ring_ptr->base_bd_addr) || (addr_v > ring_ptr->high_bd_addr)) - { - return (FError)(FXMAC_ERR_SG_LIST); - } - - addr_v = (uintptr)ring_ptr->pre_head; - if ((addr_v < ring_ptr->base_bd_addr) || (addr_v > ring_ptr->high_bd_addr)) - { - return (FError)(FXMAC_ERR_SG_LIST); - } - - addr_v = (uintptr)ring_ptr->hw_head; - if ((addr_v < ring_ptr->base_bd_addr) || (addr_v > ring_ptr->high_bd_addr)) - { - return (FError)(FXMAC_ERR_SG_LIST); - } - - addr_v = (uintptr)ring_ptr->hw_tail; - if ((addr_v < ring_ptr->base_bd_addr) || (addr_v > ring_ptr->high_bd_addr)) - { - return (FError)(FXMAC_ERR_SG_LIST); - } - - addr_v = (uintptr)ring_ptr->post_head; - if ((addr_v < ring_ptr->base_bd_addr) || (addr_v > ring_ptr->high_bd_addr)) - { - return (FError)(FXMAC_ERR_SG_LIST); - } - - /* Verify internal counters add up */ - if ((ring_ptr->hw_cnt + ring_ptr->pre_cnt + ring_ptr->free_cnt + - ring_ptr->post_cnt) != ring_ptr->all_cnt) - { - return (FError)(FXMAC_ERR_SG_LIST); - } - - /* Verify BDs are linked correctly */ - addr_v = ring_ptr->base_bd_addr; - addr_p = ring_ptr->phys_base_addr + ring_ptr->separation; - - for (i = 1U; i < ring_ptr->all_cnt; i++) - { - /* Check BDA for this BD. It should point to next physical addr */ - if (FXMAC_BD_READ(addr_v, FXMAC_BD_ADDR_OFFSET) != addr_p) - { - return (FError)(FXMAC_ERR_SG_LIST); - } - - /* Move on to next BD */ - addr_v += ring_ptr->separation; - addr_p += ring_ptr->separation; - } - - /* Last BD should have wrap bit set */ - if (FXMAC_SEND == direction) - { - if ((!FXMAC_BD_IS_TX_WRAP(addr_v)) == TRUE) - { - return (FError)(FXMAC_ERR_SG_LIST); - } - } - else - { - /* FXMAC_RECV */ - if ((!FXMAC_BD_IS_RX_WRAP(addr_v)) == TRUE) - { - return (FError)(FXMAC_ERR_SG_LIST); - } - } - - /* No problems found */ - return (FError)(FT_SUCCESS); -} - - -/** - * @name: FXmacBdSetRxWrap - * @msg: Set this bit to mark the last descriptor in the receive buffer descriptor - * list. - * @param {uintptr} bdptr is the BD pointer to operate on - */ -static void FXmacBdSetRxWrap(uintptr bdptr) -{ - u32 data_value_rx; - u32 *temp_ptr; - - bdptr += (u32)(FXMAC_BD_ADDR_OFFSET); - temp_ptr = (u32 *)bdptr; - if (temp_ptr != NULL) - { - data_value_rx = *temp_ptr; - data_value_rx |= FXMAC_RXBUF_WRAP_MASK; - *temp_ptr = data_value_rx; - } -} - -/** - * @name: FXmacBdSetTxWrap - * @msg: Sets this bit to mark the last descriptor in the transmit buffer - * descriptor list. - * @param {uintptr} bdptr is the BD pointer to operate on - */ -static void FXmacBdSetTxWrap(uintptr bdptr) -{ - u32 data_value_tx; - u32 *temp_ptr; - - bdptr += (u32)(FXMAC_BD_STAT_OFFSET); - temp_ptr = (u32 *)bdptr; - if (temp_ptr != NULL) - { - data_value_tx = *temp_ptr; - data_value_tx |= FXMAC_TXBUF_WRAP_MASK; - *temp_ptr = data_value_tx; - } -} - - -/** - * @name: FXmacBdringPtrReset - * @msg: Reset BD ring head and tail pointers. - * @return {*} - * @param {FXmacBdRing} *ring_ptr is the instance to be worked on. - * @param {void} *virtaddrloc is the virtual base address of the user memory region. - */ -void FXmacBdringPtrReset(FXmacBdRing *ring_ptr, void *virtaddrloc) -{ - ring_ptr->free_head = virtaddrloc; - ring_ptr->pre_head = virtaddrloc; - ring_ptr->hw_head = virtaddrloc; - ring_ptr->hw_tail = virtaddrloc; - ring_ptr->post_head = virtaddrloc; -} diff --git a/bsp/phytium/libraries/standalone/drivers/eth/fxmac/fxmac_bdring.h b/bsp/phytium/libraries/standalone/drivers/eth/fxmac/fxmac_bdring.h deleted file mode 100644 index 0f113e6ef0..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/eth/fxmac/fxmac_bdring.h +++ /dev/null @@ -1,162 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fxmac_bdring.h - * Date: 2022-04-06 14:46:52 - * LastEditTime: 2022-04-06 14:46:58 - * Description:  This file ontains DMA channel related structure and constant definition - * as well as function prototypes. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/06/16 first release - */ - -#ifndef FXMAC_BDRING_H -#define FXMAC_BDRING_H - -#include "fxmac_bd.h" -#include "ftypes.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/**************************** Type Definitions *******************************/ - -/** This is an internal structure used to maintain the DMA list */ -typedef struct -{ - uintptr phys_base_addr; /* Physical address of 1st BD in list */ - uintptr base_bd_addr; /* Virtual address of 1st BD in list */ - uintptr high_bd_addr; /* Virtual address of last BD in the list */ - u32 length; /* Total size of ring in bytes */ - u32 run_state; /* Flag to indicate DMA is started */ - u32 separation; /* Number of bytes between the starting address - of adjacent BDs */ - FXmacBd *free_head; - /* First BD in the free group */ - FXmacBd *pre_head; /* First BD in the pre-work group */ - FXmacBd *hw_head; /* First BD in the work group */ - FXmacBd *hw_tail; /* Last BD in the work group */ - FXmacBd *post_head; - /* First BD in the post-work group */ - FXmacBd *bda_restart; - /* BDA to load when channel is started */ - - volatile u32 hw_cnt; /* Number of BDs in work group */ - u32 pre_cnt; /* Number of BDs in pre-work group */ - u32 free_cnt; /* Number of allocatable BDs in the free group */ - u32 post_cnt; /* Number of BDs in post-work group */ - u32 all_cnt; /* Total Number of BDs for channel */ -} FXmacBdRing; - -/** - * @name: FXMAC_BD_RING_NEXT - * @msg: Return the next BD from bd_ptr in a list. - * - * @param ring_ptr is the DMA channel to operate on. - * @param bd_ptr is the BD to operate on. - * @return The next BD in the list relative to the bd_ptr parameter. - */ -#define FXMAC_BD_RING_NEXT(ring_ptr, bd_ptr) \ - (((uintptr)((void *)(bd_ptr)) >= (ring_ptr)->high_bd_addr) ? (FXmacBd *)((void *)(ring_ptr)->base_bd_addr) : (FXmacBd *)((uintptr)((void *)(bd_ptr)) + (ring_ptr)->separation)) - -/** - * @name: FXMAC_BD_RING_CNT_CALC - * @msg: Use this macro at initialization time to determine how many BDs will fit - * in a BD list within the given memory constraints. - * - * @param alignment specifies what byte alignment the BDs must fall on and - * must be a power of 2 to get an accurate calculation (32, 64, 128,...) - * @param Bytes is the number of bytes to be used to store BDs. - * @return Number of BDs that can fit in the given memory area - */ -#define FXMAC_BD_RING_CNT_CALC(alignment, Bytes) \ - (u32)((Bytes) / (sizeof(FXmacBd))) - -/** - * @name: FXMAC_BD_RING_MEM_CALC - * @msg: Use this macro at initialization time to determine how many bytes of memory - * is required to contain a given number of BDs at a given alignment. - * @param alignment specifies what byte alignment the BDs must fall on. This - * parameter must be a power of 2 to get an accurate calculation (32, 64, - * 128,...) - * @param num_bd is the number of BDs to calculate memory size requirements for - * @return The number of bytes of memory required to create a BD list with the - * given memory constraints. - */ -#define FXMAC_BD_RING_MEM_CALC(alignment, num_bd) \ - (u32)(sizeof(FXmacBd) * (num_bd)) - -/** - * @name: FXMAC_BD_RING_GET_CNT - * @msg: Return the total number of BDs allocated by this channel with - * FXmacBdRingCreate(). - * @param ring_ptr is the DMA channel to operate on. - * @return The total number of BDs allocated for this channel. - */ -#define FXMAC_BD_RING_GET_CNT(ring_ptr) ((ring_ptr)->all_cnt) - -/** - * @name: FXMAC_BD_RING_GET_FREE_CNT - * @msg: Return the number of BDs allocatable with FXmacBdRingAlloc() for pre- - * processing. - * - * @param ring_ptr is the DMA channel to operate on. - * @return The number of BDs currently allocatable. - */ -#define FXMAC_BD_RING_GET_FREE_CNT(ring_ptr) ((ring_ptr)->free_cnt) - -/** - * @name: FXMAC_BD_RING_PREV - * @msg: Return the previous BD from bd_ptr in the list. - * @param ring_ptr is the DMA channel to operate on. - * @param bd_ptr is the BD to operate on - * @return The previous BD in the list relative to the bd_ptr parameter. - */ -#define FXMAC_BD_RING_PREV(ring_ptr, bd_ptr) \ - (((uintptr)(bd_ptr) <= (ring_ptr)->base_bd_addr) ? (FXmacBd *)(ring_ptr)->high_bd_addr : (FXmacBd *)((uintptr)(bd_ptr) - (ring_ptr)->separation)) - -/************************** Function Prototypes ******************************/ - -/* - * Scatter gather DMA related functions in FXmacbdring.c - */ -FError FXmacBdRingCreate(FXmacBdRing *ring_ptr, uintptr phys_addr, - uintptr virt_addr, u32 alignment, u32 bd_count); -FError FXmacBdRingClone(FXmacBdRing *ring_ptr, FXmacBd *src_bd_ptr, - u8 direction); -FError FXmacBdRingAlloc(FXmacBdRing *ring_ptr, u32 num_bd, - FXmacBd **bd_set_ptr); -FError FXmacBdRingUnAlloc(FXmacBdRing *ring_ptr, u32 num_bd, - FXmacBd *bd_set_ptr); -FError FXmacBdRingToHw(FXmacBdRing *ring_ptr, u32 num_bd, - FXmacBd *bd_set_ptr); -FError FXmacBdRingFree(FXmacBdRing *ring_ptr, u32 num_bd, - FXmacBd *bd_set_ptr); -u32 FXmacBdRingFromHwTx(FXmacBdRing *ring_ptr, u32 bd_limit, - FXmacBd **bd_set_ptr); -u32 FXmacBdRingFromHwRx(FXmacBdRing *ring_ptr, u32 bd_limit, - FXmacBd **bd_set_ptr); -FError FXmacBdRingCheck(FXmacBdRing *ring_ptr, u8 direction); - -void FXmacBdringPtrReset(FXmacBdRing *ring_ptr, void *virt_addrloc); - -#ifdef __cplusplus -} -#endif - -#endif \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/eth/fxmac/fxmac_debug.c b/bsp/phytium/libraries/standalone/drivers/eth/fxmac/fxmac_debug.c deleted file mode 100644 index d7711c30b8..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/eth/fxmac/fxmac_debug.c +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fxmac_debug.c - * Date: 2023-01-04 15:33:03 - * LastEditTime: 2023-01-04 15:33:04 - * Description: This file is for user to debug xmac information. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/06/16 first release - */ - -#include "fxmac_hw.h" -#include "fxmac.h" -#include "fio.h" -#include "fdebug.h" - -#define FXMAC_DEBUG_TAG "FXMAC_DEBUG" -#define FXMAC_ERROR(format, ...) FT_DEBUG_PRINT_E(FXMAC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FXMAC_INFO(format, ...) FT_DEBUG_PRINT_I(FXMAC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FXMAC_DEBUG(format, ...) FT_DEBUG_PRINT_D(FXMAC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FXMAC_WARN(format, ...) FT_DEBUG_PRINT_W(FXMAC_DEBUG_TAG, format, ##__VA_ARGS__) - - -void FXmacDebugTxPrint(FXmac *instance_p) -{ - FXmacConfig *config_p; - config_p = &instance_p->config; - - FXMAC_INFO("octets_txed_bottom is 0x%x",FtIn32(config_p->base_address+FXMAC_OCTTXL_OFFSET)); - FXMAC_INFO("octets_txed_top is 0x%x",FtIn32(config_p->base_address+FXMAC_OCTTXH_OFFSET)); - FXMAC_INFO("frames_txed_ok is 0x%x",FtIn32(config_p->base_address+FXMAC_TXCNT_OFFSET)); - FXMAC_INFO("broadcast_txed is 0x%x",FtIn32(config_p->base_address+FXMAC_TXBCCNT_OFFSET)); - FXMAC_INFO("multicast_txed is 0x%x",FtIn32(config_p->base_address+FXMAC_TXMCCNT_OFFSET)); - FXMAC_INFO("pause_frames_txed is 0x%x",FtIn32(config_p->base_address+FXMAC_TXPAUSECNT_OFFSET)); - FXMAC_INFO("frames_txed_64 is 0x%x",FtIn32(config_p->base_address+FXMAC_TX64CNT_OFFSET)); - FXMAC_INFO("frames_txed_65 is 0x%x",FtIn32(config_p->base_address+FXMAC_TX65CNT_OFFSET)); - FXMAC_INFO("frames_txed_128 is 0x%x",FtIn32(config_p->base_address+FXMAC_TX128CNT_OFFSET)); - FXMAC_INFO("frames_txed_256 is 0x%x",FtIn32(config_p->base_address+FXMAC_TX256CNT_OFFSET)); - FXMAC_INFO("frames_txed_512 is 0x%x",FtIn32(config_p->base_address+FXMAC_TX512CNT_OFFSET)); - FXMAC_INFO("frames_txed_1024 is 0x%x",FtIn32(config_p->base_address+FXMAC_TX1024CNT_OFFSET)); - FXMAC_INFO("frames_txed_1519 is 0x%x",FtIn32(config_p->base_address+FXMAC_TX1519CNT_OFFSET)); - FXMAC_INFO("tx_underruns is 0x%x",FtIn32(config_p->base_address+FXMAC_TXURUNCNT_OFFSET)); - FXMAC_INFO("single_collisions is 0x%x",FtIn32(config_p->base_address+FXMAC_SNGLCOLLCNT_OFFSET)); - FXMAC_INFO("multiple_collisions is 0x%x",FtIn32(config_p->base_address+FXMAC_MULTICOLLCNT_OFFSET)); - FXMAC_INFO("excessive_collisions is 0x%x",FtIn32(config_p->base_address+FXMAC_EXCESSCOLLCNT_OFFSET)); - FXMAC_INFO("late_collisions is 0x%x",FtIn32(config_p->base_address+FXMAC_LATECOLLCNT_OFFSET)); - FXMAC_INFO("deferred_frames is 0x%x",FtIn32(config_p->base_address+FXMAC_TXDEFERCNT_OFFSET)); - FXMAC_INFO("crs_errors is 0x%x",FtIn32(config_p->base_address+FXMAC_TXCSENSECNT_OFFSET)); -} - - -void FXmacDebugRxPrint(FXmac *instance_p) -{ - FXmacConfig *config_p; - config_p = &instance_p->config; - - FXMAC_INFO("octets_rxed_bottom is 0x%x",FtIn32(config_p->base_address+FXMAC_OCTRXL_OFFSET)); - FXMAC_INFO("octets_rxed_top is 0x%x",FtIn32(config_p->base_address+FXMAC_OCTRXH_OFFSET)); - FXMAC_INFO("frames_rxed_ok is 0x%x",FtIn32(config_p->base_address+FXMAC_RXCNT_OFFSET)); - FXMAC_INFO("broadcast_rxed is 0x%x",FtIn32(config_p->base_address+FXMAC_RXBROADCNT_OFFSET)); - FXMAC_INFO("multicast_Rxed is 0x%x",FtIn32(config_p->base_address+FXMAC_RXMULTICNT_OFFSET)); - FXMAC_INFO("pause_frames_rxed is 0x%x",FtIn32(config_p->base_address+FXMAC_RXPAUSECNT_OFFSET)); - FXMAC_INFO("frames_rxed_64 is 0x%x",FtIn32(config_p->base_address+FXMAC_RX64CNT_OFFSET)); - FXMAC_INFO("frames_rxed_65 is 0x%x",FtIn32(config_p->base_address+FXMAC_RX65CNT_OFFSET)); - FXMAC_INFO("frames_rxed_128 is 0x%x",FtIn32(config_p->base_address+FXMAC_RX128CNT_OFFSET)); - FXMAC_INFO("frames_rxed_256 is 0x%x",FtIn32(config_p->base_address+FXMAC_RX256CNT_OFFSET)); - FXMAC_INFO("frames_rxed_512 is 0x%x",FtIn32(config_p->base_address+FXMAC_RX512CNT_OFFSET)); - FXMAC_INFO("frames_rxed_1024 is 0x%x",FtIn32(config_p->base_address+FXMAC_RX1024CNT_OFFSET)); - FXMAC_INFO("frames_rxed_1519 is 0x%x",FtIn32(config_p->base_address+FXMAC_RX1519CNT_OFFSET)); - FXMAC_INFO("undersize_frames is 0x%x",FtIn32(config_p->base_address+FXMAC_RXUNDRCNT_OFFSET)); - FXMAC_INFO("excessive_rx_length is 0x%x",FtIn32(config_p->base_address+FXMAC_RXOVRCNT_OFFSET)); - FXMAC_INFO("rx_jabbers is 0x%x",FtIn32(config_p->base_address+FXMAC_RXJABCNT_OFFSET)); - FXMAC_INFO("fcs_errors is 0x%x",FtIn32(config_p->base_address+FXMAC_RXFCSCNT_OFFSET)); - FXMAC_INFO("rx_length_errors is 0x%x",FtIn32(config_p->base_address+FXMAC_RXLENGTHCNT_OFFSET)); - FXMAC_INFO("rx_symbol_errors is 0x%x",FtIn32(config_p->base_address+FXMAC_RXSYMBCNT_OFFSET)); - FXMAC_INFO("alignment_errors is 0x%x",FtIn32(config_p->base_address+FXMAC_RXALIGNCNT_OFFSET)); - FXMAC_INFO("rx_resource_errors is 0x%x",FtIn32(config_p->base_address+FXMAC_RXRESERRCNT_OFFSET)); - FXMAC_INFO("rx_overruns is 0x%x",FtIn32(config_p->base_address+FXMAC_RXORCNT_OFFSET)); - FXMAC_INFO("rx_ip_ck_errors is 0x%x",FtIn32(config_p->base_address+FXMAC_RXIPCCNT_OFFSET)); - FXMAC_INFO("rx_tcp_ck_errors is 0x%x",FtIn32(config_p->base_address+FXMAC_RXTCPCCNT_OFFSET)); - FXMAC_INFO("rx_udp_ck_errors is 0x%x",FtIn32(config_p->base_address+FXMAC_RXUDPCCNT_OFFSET)); -} - - -void FXmacDebugUsxPrint(FXmac *instance_p) -{ - FXmacConfig *config_p; - config_p = &instance_p->config; - - FXMAC_INFO("USXGMII control register is 0x%x",FtIn32(config_p->base_address+FXMAC_GEM_USX_CONTROL_OFFSET)); - FXMAC_INFO("USXGMII Status Register is 0x%x",FtIn32(config_p->base_address+FXMAC_GEM_USX_STATUS_OFFSET)); -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/eth/fxmac/fxmac_g.c b/bsp/phytium/libraries/standalone/drivers/eth/fxmac/fxmac_g.c deleted file mode 100644 index dfe1b9ce26..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/eth/fxmac/fxmac_g.c +++ /dev/null @@ -1,168 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fxmac_g.c - * Date: 2022-04-06 14:46:52 - * LastEditTime: 2022-04-06 14:46:58 - * Description:  This file provide a template for user to define their own hardware settings. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/06/16 first release - */ - -#include "fxmac.h" -#include "fparameters.h" -#include "ftypes.h" -/************************** Constant Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ - -/************************** Variable Prototypes ******************************/ - -/* - * The configuration table for emacps device - */ - -const FXmacConfig fxmac_cfg_tbl[FXMAC_NUM] = -{ - [FXMAC0_ID] = - { - .instance_id = (u32)FXMAC0_ID, /* Device ID */ - .base_address = (uintptr)FXMAC0_BASE_ADDR, /* Device base address */ -#if defined(FXMAC0_MODE_SEL_BASE_ADDR) - .extral_mode_base = FXMAC0_MODE_SEL_BASE_ADDR, -#endif -#if defined(FXMAC0_LOOPBACK_SEL_BASE_ADDR) - .extral_loopback_base = FXMAC0_LOOPBACK_SEL_BASE_ADDR, -#endif - .interface = FXMAC_PHY_INTERFACE_MODE_SGMII, - .speed = 1000, - .duplex = 1, - .auto_neg = 1, - .pclk_hz = FXMAC0_PCLK, - .max_queue_num = 16, - .tx_queue_id = 0, - .rx_queue_id = 0, -#ifdef FXMAC0_HOTPLUG_IRQ_NUM - .hotplug_irq_num = FXMAC0_HOTPLUG_IRQ_NUM, -#endif - .dma_brust_length = 16, - .network_default_config = FXMAC_DEFAULT_OPTIONS, - .queue_irq_num = - { - FXMAC0_QUEUE0_IRQ_NUM, - FXMAC0_QUEUE1_IRQ_NUM, - FXMAC0_QUEUE2_IRQ_NUM, - FXMAC0_QUEUE3_IRQ_NUM, -#if defined(FXMAC0_QUEUE4_IRQ_NUM) - FXMAC0_QUEUE4_IRQ_NUM, -#endif -#if defined(FXMAC0_QUEUE5_IRQ_NUM) - FXMAC0_QUEUE5_IRQ_NUM, -#endif -#if defined(FXMAC0_QUEUE6_IRQ_NUM) - FXMAC0_QUEUE6_IRQ_NUM, -#endif -#if defined(FXMAC0_QUEUE7_IRQ_NUM) - FXMAC0_QUEUE7_IRQ_NUM -#endif - } - }, -#ifdef FXMAC1_ID - [FXMAC1_ID] = - { - .instance_id = (u32)FXMAC1_ID, /* Device ID */ - .base_address = (uintptr)FXMAC1_BASE_ADDR, /* Device base address */ - .extral_mode_base = FXMAC1_MODE_SEL_BASE_ADDR, - .extral_loopback_base = FXMAC1_LOOPBACK_SEL_BASE_ADDR, - .interface = FXMAC_PHY_INTERFACE_MODE_SGMII, - .speed = 1000, - .duplex = 1, - .auto_neg = 1, - .pclk_hz = FXMAC1_PCLK, - .max_queue_num = 4, - .tx_queue_id = 0, - .rx_queue_id = 0, -#if defined(FXMAC1_HOTPLUG_IRQ_NUM) - .hotplug_irq_num = FXMAC1_HOTPLUG_IRQ_NUM, -#endif - .dma_brust_length = 16, - .network_default_config = FXMAC_DEFAULT_OPTIONS, - .queue_irq_num = - { - FXMAC1_QUEUE0_IRQ_NUM, - FXMAC1_QUEUE1_IRQ_NUM, - FXMAC1_QUEUE2_IRQ_NUM, - FXMAC1_QUEUE3_IRQ_NUM - } - }, -#endif -#ifdef FXMAC2_ID - [FXMAC2_ID] = - { - .instance_id = (u32)FXMAC2_ID, /* Device ID */ - .base_address = (uintptr)FXMAC2_BASE_ADDR, /* Device base address */ - .extral_mode_base = FXMAC2_MODE_SEL_BASE_ADDR, - .extral_loopback_base = FXMAC2_LOOPBACK_SEL_BASE_ADDR, - .interface = FXMAC_PHY_INTERFACE_MODE_RGMII, - .speed = 1000, - .duplex = 1, - .auto_neg = 1, - .pclk_hz = FXMAC2_PCLK, - .max_queue_num = 4, - .tx_queue_id = 0, - .rx_queue_id = 0, - .hotplug_irq_num = FXMAC2_HOTPLUG_IRQ_NUM, - .dma_brust_length = 16, - .network_default_config = FXMAC_DEFAULT_OPTIONS, - .queue_irq_num = - { - FXMAC2_QUEUE0_IRQ_NUM, - FXMAC2_QUEUE1_IRQ_NUM, - FXMAC2_QUEUE2_IRQ_NUM, - FXMAC2_QUEUE3_IRQ_NUM - } - }, -#endif -#ifdef FXMAC3_ID - [FXMAC3_ID] = - { - .instance_id = (u32)FXMAC3_ID, /* Device ID */ - .base_address = (uintptr)FXMAC3_BASE_ADDR, /* Device base address */ - .extral_mode_base = FXMAC3_MODE_SEL_BASE_ADDR, - .extral_loopback_base = FXMAC3_LOOPBACK_SEL_BASE_ADDR, - .interface = FXMAC_PHY_INTERFACE_MODE_RGMII, - .speed = 1000, - .duplex = 1, - .auto_neg = 1, - .pclk_hz = FXMAC3_PCLK, - .max_queue_num = 4, - .tx_queue_id = 0, - .rx_queue_id = 0, - .hotplug_irq_num = FXMAC3_HOTPLUG_IRQ_NUM, - .dma_brust_length = 16, - .network_default_config = FXMAC_DEFAULT_OPTIONS, - .queue_irq_num = - { - FXMAC3_QUEUE0_IRQ_NUM, - FXMAC3_QUEUE1_IRQ_NUM, - FXMAC3_QUEUE2_IRQ_NUM, - FXMAC3_QUEUE3_IRQ_NUM - } - } -#endif -}; diff --git a/bsp/phytium/libraries/standalone/drivers/eth/fxmac/fxmac_hw.h b/bsp/phytium/libraries/standalone/drivers/eth/fxmac/fxmac_hw.h deleted file mode 100644 index f354228a00..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/eth/fxmac/fxmac_hw.h +++ /dev/null @@ -1,626 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fxmac_hw.h - * Date: 2022-04-06 14:46:52 - * LastEditTime: 2022-04-06 14:46:58 - * Description:  This file is hardware definition file. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/06/16 first release - * 1.1 liuzhihong 2023/4/11 jumbo support - */ - -#ifndef FXMAC_HW_H -#define FXMAC_HW_H - -#include "fparameters.h" -#include "fio.h" -#include "ftypes.h" -#include "fkernel.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -#define FXMAC_RX_BUF_UNIT 64U /* Number of receive buffer bytes as a unit, this is HW setup */ - -#define FXMAC_MAX_RXBD 128U /* Size of RX buffer descriptor queues */ -#define FXMAC_MAX_TXBD 128U /* Size of TX buffer descriptor queues */ - -#define FXMAC_MAX_HASH_BITS 64U /* Maximum value for hash bits. 2**6 */ - -/************************** Constant Definitions *****************************/ - -#define FXMAC_MAX_MAC_ADDR 4U /* Maxmum number of mac address supported */ -#define FXMAC_MAX_TYPE_ID 4U /* Maxmum number of type id supported */ - -#ifdef __aarch64__ -#define FXMAC_BD_ALIGNMENT 64U /* Minimum buffer descriptor alignment on the local bus */ -#else - -#define FXMAC_BD_ALIGNMENT 4U /* Minimum buffer descriptor alignment on the local bus */ -#endif -#define FXMAC_RX_BUF_ALIGNMENT 4U /* Minimum buffer alignment when using options that impose - alignment restrictions on the buffer data on the local bus */ - -#define FXMAC_NWCTRL_OFFSET 0x00000000U /* Network Control reg */ -#define FXMAC_NWCFG_OFFSET 0x00000004U /* Network Config reg */ -#define FXMAC_NWSR_OFFSET 0x00000008U /* Network Status reg */ -#define FXMAC_DMACR_OFFSET 0x00000010U /* DMA Control reg */ -#define FXMAC_TXSR_OFFSET 0x00000014U /* TX Status reg */ -#define FXMAC_RXQBASE_OFFSET 0x00000018U /* RX Q Base address reg */ -#define FXMAC_TXQBASE_OFFSET 0x0000001CU /* TX Q Base address reg */ -#define FXMAC_RXSR_OFFSET 0x00000020U /* RX Status reg */ - -#define FXMAC_ISR_OFFSET 0x00000024U /* Interrupt Status reg */ -#define FXMAC_IER_OFFSET 0x00000028U /* Interrupt Enable reg */ -#define FXMAC_IDR_OFFSET 0x0000002CU /* Interrupt Disable reg */ -#define FXMAC_IMR_OFFSET 0x00000030U /* Interrupt Mask reg */ - -#define FXMAC_PHYMNTNC_OFFSET 0x00000034U /* Phy Maintaince reg */ -#define FXMAC_RXPAUSE_OFFSET 0x00000038U /* RX Pause Time reg */ -#define FXMAC_TXPAUSE_OFFSET 0x0000003CU /* TX Pause Time reg */ - -#define FXMAC_JUMBOMAXLEN_OFFSET 0x00000048U /* Jumbo max length reg */ -#define FXMAC_GEM_HSMAC 0x0050 /* Hs mac config register*/ -#define FXMAC_RXWATERMARK_OFFSET 0x0000007CU /* RX watermark reg */ - -#define FXMAC_HASHL_OFFSET 0x00000080U /* Hash Low address reg */ -#define FXMAC_HASHH_OFFSET 0x00000084U /* Hash High address reg */ - -#define FXMAC_GEM_SA1B 0x0088 /* Specific1 Bottom */ -#define FXMAC_GEM_SA1T 0x008C /* Specific1 Top */ -#define FXMAC_GEM_SA2B 0x0090 /* Specific2 Bottom */ -#define FXMAC_GEM_SA2T 0x0094 /* Specific2 Top */ -#define FXMAC_GEM_SA3B 0x0098 /* Specific3 Bottom */ -#define FXMAC_GEM_SA3T 0x009C /* Specific3 Top */ -#define FXMAC_GEM_SA4B 0x00A0 /* Specific4 Bottom */ -#define FXMAC_GEM_SA4T 0x00A4 /* Specific4 Top */ - -#define FXMAC_MATCH1_OFFSET 0x000000A8U /* Type ID1 Match reg */ -#define FXMAC_MATCH2_OFFSET 0x000000ACU /* Type ID2 Match reg */ -#define FXMAC_MATCH3_OFFSET 0x000000B0U /* Type ID3 Match reg */ -#define FXMAC_MATCH4_OFFSET 0x000000B4U /* Type ID4 Match reg */ - -#define FXMAC_STRETCH_OFFSET 0x000000BCU /* IPG Stretch reg */ -#define FXMAC_REVISION_REG_OFFSET 0x000000FCU /* identification number and module revision */ - -#define FXMAC_OCTTXL_OFFSET 0x00000100U /* Octects transmitted Low reg */ -#define FXMAC_OCTTXH_OFFSET 0x00000104U /* Octects transmitted High reg */ - -#define FXMAC_TXCNT_OFFSET 0x00000108U /* Error-free Frmaes transmitted counter */ -#define FXMAC_TXBCCNT_OFFSET 0x0000010CU /* Error-free Broadcast Frames counter*/ -#define FXMAC_TXMCCNT_OFFSET 0x00000110U /* Error-free Multicast Frame counter */ -#define FXMAC_TXPAUSECNT_OFFSET 0x00000114U /* Pause Frames Transmitted Counter */ -#define FXMAC_TX64CNT_OFFSET 0x00000118U /* Error-free 64 byte Frames Transmitted counter */ -#define FXMAC_TX65CNT_OFFSET 0x0000011CU /* Error-free 65-127 byte Frames Transmitted counter */ -#define FXMAC_TX128CNT_OFFSET 0x00000120U /* Error-free 128-255 byte Frames Transmitted counter*/ -#define FXMAC_TX256CNT_OFFSET 0x00000124U /* Error-free 256-511 byte Frames transmitted counter */ -#define FXMAC_TX512CNT_OFFSET 0x00000128U /* Error-free 512-1023 byte Frames transmitted counter */ -#define FXMAC_TX1024CNT_OFFSET 0x0000012CU /* Error-free 1024-1518 byte Frames transmitted counter */ -#define FXMAC_TX1519CNT_OFFSET 0x00000130U /* Error-free larger than 1519 byte Frames transmitted counter */ -#define FXMAC_TXURUNCNT_OFFSET 0x00000134U /* TX under run error counter */ - -#define FXMAC_SNGLCOLLCNT_OFFSET 0x00000138U /* Single Collision Frame Counter */ -#define FXMAC_MULTICOLLCNT_OFFSET 0x0000013CU /* Multiple Collision Frame Counter */ -#define FXMAC_EXCESSCOLLCNT_OFFSET 0x00000140U /* Excessive Collision Frame Counter */ -#define FXMAC_LATECOLLCNT_OFFSET 0x00000144U /* Late Collision Frame Counter */ -#define FXMAC_TXDEFERCNT_OFFSET 0x00000148U /* Deferred Transmission Frame Counter */ -#define FXMAC_TXCSENSECNT_OFFSET 0x0000014CU /* Transmit Carrier Sense Error Counter */ - -#define FXMAC_OCTRXL_OFFSET 0x00000150U /* Octects Received register Low */ -#define FXMAC_OCTRXH_OFFSET 0x00000154U /* Octects Received register High */ - -#define FXMAC_RXCNT_OFFSET 0x00000158U /* Error-free Frames Received Counter */ -#define FXMAC_RXBROADCNT_OFFSET 0x0000015CU /* Error-free Broadcast Frames Received Counter */ -#define FXMAC_RXMULTICNT_OFFSET 0x00000160U /* Error-free Multicast Frames Received Counter */ -#define FXMAC_RXPAUSECNT_OFFSET 0x00000164U /* Pause Frames Received Counter */ -#define FXMAC_RX64CNT_OFFSET 0x00000168U /* Error-free 64 byte Frames Received Counter */ -#define FXMAC_RX65CNT_OFFSET 0x0000016CU /* Error-free 65-127 byte Frames Received Counter */ -#define FXMAC_RX128CNT_OFFSET 0x00000170U /* Error-free 128-255 byte Frames Received Counter */ -#define FXMAC_RX256CNT_OFFSET 0x00000174U /* Error-free 256-512 byte Frames Received Counter */ -#define FXMAC_RX512CNT_OFFSET 0x00000178U /* Error-free 512-1023 byte Frames Received Counter */ -#define FXMAC_RX1024CNT_OFFSET 0x0000017CU /* Error-free 1024-1518 byte Frames Received Counter */ -#define FXMAC_RX1519CNT_OFFSET 0x00000180U /* Error-free 1519-max byte Frames Received Counter */ -#define FXMAC_RXUNDRCNT_OFFSET 0x00000184U /* Undersize Frames Received Counter */ -#define FXMAC_RXOVRCNT_OFFSET 0x00000188U /* Oversize Frames Received Counter */ -#define FXMAC_RXJABCNT_OFFSET 0x0000018CU /* Jabbers Received Counter */ -#define FXMAC_RXFCSCNT_OFFSET 0x00000190U /* Frame Check Sequence Error Counter */ -#define FXMAC_RXLENGTHCNT_OFFSET 0x00000194U /* Length Field Error Counter */ -#define FXMAC_RXSYMBCNT_OFFSET 0x00000198U /* Symbol Error Counter */ -#define FXMAC_RXALIGNCNT_OFFSET 0x0000019CU /* Alignment Error Counter */ -#define FXMAC_RXRESERRCNT_OFFSET 0x000001A0U /* Receive Resource Error Counter */ -#define FXMAC_RXORCNT_OFFSET 0x000001A4U /* Receive Overrun Counter */ -#define FXMAC_RXIPCCNT_OFFSET 0x000001A8U /* IP header Checksum Error Counter */ -#define FXMAC_RXTCPCCNT_OFFSET 0x000001ACU /* TCP Checksum Error Counter */ -#define FXMAC_RXUDPCCNT_OFFSET 0x000001B0U /* UDP Checksum Error Counter */ -#define FXMAC_LAST_OFFSET 0x000001B4U /* Last statistic counter offset, for clearing */ - -#define FXMAC_1588_SEC_OFFSET 0x000001D0U /* 1588 second counter */ -#define FXMAC_1588_NANOSEC_OFFSET 0x000001D4U /* 1588 nanosecond counter */ -#define FXMAC_1588_ADJ_OFFSET 0x000001D8U /* 1588 nanosecond adjustment counter */ -#define FXMAC_1588_INC_OFFSET 0x000001DCU /* 1588 nanosecond increment counter */ -#define FXMAC_PTP_TXSEC_OFFSET 0x000001E0U /* 1588 PTP transmit second counter */ -#define FXMAC_PTP_TXNANOSEC_OFFSET 0x000001E4U /* 1588 PTP transmit nanosecond counter */ -#define FXMAC_PTP_RXSEC_OFFSET 0x000001E8U /* 1588 PTP receive second counter */ -#define FXMAC_PTP_RXNANOSEC_OFFSET 0x000001ECU /* 1588 PTP receive nanosecond counter */ -#define FXMAC_PTPP_TXSEC_OFFSET 0x000001F0U /* 1588 PTP peer transmit second counter */ -#define FXMAC_PTPP_TXNANOSEC_OFFSET 0x000001F4U /* 1588 PTP peer transmit nanosecond counter */ -#define FXMAC_PTPP_RXSEC_OFFSET 0x000001F8U /* 1588 PTP peer receive second counter */ -#define FXMAC_PTPP_RXNANOSEC_OFFSET 0x000001FCU /* 1588 PTP peer receive nanosecond counter */ - -#define FXMAC_PCS_CONTROL_OFFSET 0x00000200U /* All PCS registers */ - -#define FXMAC_PCS_STATUS_OFFSET 0x00000204U /* All PCS status */ - -#define FXMAC_PCS_AN_LP_OFFSET 0x00000214U /* All PCS link partner's base page */ - -#define FXMAC_DESIGNCFG_DEBUG1_OFFSET 0x00000280U /* Design Configuration Register 1 */ - -#define FXMAC_DESIGNCFG_DEBUG2_OFFSET 0x00000284U /* Design Configuration Register 2 */ - -#define FXMAC_INTQ1_STS_OFFSET 0x00000400U /* Interrupt Q1 Status reg */ - -#define FXMAC_TXQ1BASE_OFFSET 0x00000440U /* TX Q1 Base address reg */ -#define FXMAC_RXQ1BASE_OFFSET 0x00000480U /* RX Q1 Base address reg */ - -#define FXMAC_RXBUFQ1_SIZE_OFFSET 0x000004a0U /* Receive Buffer Size */ -#define FXMAC_RXBUFQX_SIZE_OFFSET(x) (FXMAC_RXBUFQ1_SIZE_OFFSET + (x << 2)) -#define FXMAC_RXBUFQX_SIZE_MASK GENMASK(7, 0) - -#define FXMAC_MSBBUF_TXQBASE_OFFSET 0x000004C8U /* MSB Buffer TX Q Base reg */ -#define FXMAC_MSBBUF_RXQBASE_OFFSET 0x000004D4U /* MSB Buffer RX Q Base reg */ -#define FXMAC_TXQSEGALLOC_QLOWER_OFFSET 0x000005A0U /* Transmit SRAM segment distribution */ -#define FXMAC_INTQ1_IER_OFFSET 0x00000600U /* Interrupt Q1 Enable reg */ -#define FXMAC_INTQX_IER_SIZE_OFFSET(x) (FXMAC_INTQ1_IER_OFFSET + (x << 2)) - -#define FXMAC_INTQ1_IDR_OFFSET 0x00000620U /* Interrupt Q1 Disable reg */ -#define FXMAC_INTQX_IDR_SIZE_OFFSET(x) (FXMAC_INTQ1_IDR_OFFSET + (x << 2)) - -#define FXMAC_INTQ1_IMR_OFFSET 0x00000640U /* Interrupt Q1 Mask reg */ - -#define FXMAC_GEM_USX_CONTROL_OFFSET 0x0A80 /* High speed PCS control register */ -#define FXMAC_TEST_CONTROL_OFFSET 0X0A84 /* USXGMII Test Control Register */ -#define FXMAC_GEM_USX_STATUS_OFFSET 0x0A88 /* USXGMII Status Register */ - -#define FXMAC_GEM_SRC_SEL_LN 0x1C04 -#define FXMAC_GEM_DIV_SEL0_LN 0x1C08 -#define FXMAC_GEM_DIV_SEL1_LN 0x1C0C -#define FXMAC_GEM_PMA_XCVR_POWER_STATE 0x1C10 -#define FXMAC_GEM_SPEED_MODE 0x1C14 -#define FXMAC_GEM_MII_SELECT 0x1C18 -#define FXMAC_GEM_SEL_MII_ON_RGMII 0x1C1C -#define FXMAC_GEM_TX_CLK_SEL0 0x1C20 -#define FXMAC_GEM_TX_CLK_SEL1 0x1C24 -#define FXMAC_GEM_TX_CLK_SEL2 0x1C28 -#define FXMAC_GEM_TX_CLK_SEL3 0x1C2C -#define FXMAC_GEM_RX_CLK_SEL0 0x1C30 -#define FXMAC_GEM_RX_CLK_SEL1 0x1C34 -#define FXMAC_GEM_CLK_250M_DIV10_DIV100_SEL 0x1C38 -#define FXMAC_GEM_TX_CLK_SEL5 0x1C3C -#define FXMAC_GEM_TX_CLK_SEL6 0x1C40 -#define FXMAC_GEM_RX_CLK_SEL4 0x1C44 -#define FXMAC_GEM_RX_CLK_SEL5 0x1C48 -#define FXMAC_GEM_TX_CLK_SEL3_0 0x1C70 -#define FXMAC_GEM_TX_CLK_SEL4_0 0x1C74 -#define FXMAC_GEM_RX_CLK_SEL3_0 0x1C78 -#define FXMAC_GEM_RX_CLK_SEL4_0 0x1C7C -#define FXMAC_GEM_RGMII_TX_CLK_SEL0 0x1C80 -#define FXMAC_GEM_RGMII_TX_CLK_SEL1 0x1C84 -#define FXMAC_GEM_MODE_SEL_OFFSET 0xDC00 -#define FXMAC_LOOPBACK_SEL_OFFSET 0xDC04 - -/** - * @name interrupts bit definitions - * Bits definitions are same in FXMAC_ISR_OFFSET, - * FXMAC_IER_OFFSET, FXMAC_IDR_OFFSET, and FXMAC_IMR_OFFSET - * @{ - */ -#define FXMAC_IXR_PTPPSTX_MASK BIT(25) /* PTP Pdelay_resp TXed */ -#define FXMAC_IXR_PTPPDRTX_MASK BIT(24) /* PTP Pdelay_req TXed */ -#define FXMAC_IXR_PTPPSRX_MASK BIT(23) /* PTP Pdelay_resp RXed */ -#define FXMAC_IXR_PTPPDRRX_MASK BIT(22) /* PTP Pdelay_req RXed */ - -#define FXMAC_IXR_PTPSTX_MASK BIT(21) /* PTP Sync TXed */ -#define FXMAC_IXR_PTPDRTX_MASK BIT(20) /* PTP Delay_req TXed */ -#define FXMAC_IXR_PTPSRX_MASK BIT(19) /* PTP Sync RXed */ -#define FXMAC_IXR_PTPDRRX_MASK BIT(18) /* PTP Delay_req RXed */ - -#define FXMAC_IXR_PAUSETX_MASK BIT(14) /* Pause frame transmitted */ -#define FXMAC_IXR_PAUSEZERO_MASK BIT(13) /* Pause time has reached zero */ -#define FXMAC_IXR_PAUSENZERO_MASK BIT(12) /* Pause frame received */ -#define FXMAC_IXR_HRESPNOK_MASK BIT(11) /* hresp not ok */ -#define FXMAC_IXR_RXOVR_MASK BIT(10) /* Receive overrun occurred */ -#define FXMAC_IXR_LINKCHANGE_MASK BIT(9) /* link status change */ -#define FXMAC_IXR_TXCOMPL_MASK BIT(7) /* Frame transmitted ok */ -#define FXMAC_IXR_TXEXH_MASK BIT(6) /* Transmit err occurred or no buffers*/ -#define FXMAC_IXR_RETRY_MASK BIT(5) /* Retry limit exceeded */ -#define FXMAC_IXR_URUN_MASK BIT(4) /* Transmit underrun */ -#define FXMAC_IXR_TXUSED_MASK BIT(3) /* Tx buffer used bit read */ -#define FXMAC_IXR_RXUSED_MASK BIT(2) /* Rx buffer used bit read */ -#define FXMAC_IXR_RXCOMPL_MASK BIT(1) /* Frame received ok */ -#define FXMAC_IXR_MGMNT_MASK BIT(0) /* PHY management complete */ -#define FXMAC_IXR_ALL_MASK GENMASK(31, 0) /* Everything! */ - -#define FXMAC_IXR_TX_ERR_MASK ((u32)FXMAC_IXR_TXEXH_MASK | \ - (u32)FXMAC_IXR_RETRY_MASK | \ - (u32)FXMAC_IXR_URUN_MASK) - -#define FXMAC_IXR_RX_ERR_MASK ((u32)FXMAC_IXR_HRESPNOK_MASK | \ - (u32)FXMAC_IXR_RXUSED_MASK | \ - (u32)FXMAC_IXR_RXOVR_MASK) - -#define FXMAC_INTR_MASK \ - ((u32)FXMAC_IXR_LINKCHANGE_MASK | \ - (u32)FXMAC_IXR_TX_ERR_MASK | \ - (u32)FXMAC_IXR_RX_ERR_MASK | \ - (u32)FXMAC_IXR_RXCOMPL_MASK | \ - (u32)FXMAC_IXR_TXCOMPL_MASK) - -/** @name network control register bit definitions - * @{ - */ -#define FXMAC_NWCTRL_ENABLE_HS_MAC_MASK BIT(31) - -#define FXMAC_NWCTRL_TWO_PT_FIVE_GIG_MASK BIT(29) /* 2.5G operation selected */ - -#define FXMAC_NWCTRL_FLUSH_DPRAM_MASK BIT(18) /* Flush a packet from Rx SRAM */ -#define FXMAC_NWCTRL_ZEROPAUSETX_MASK BIT(11) /* Transmit zero quantum pause frame */ -#define FXMAC_NWCTRL_PAUSETX_MASK BIT(11) /* Transmit pause frame */ -#define FXMAC_NWCTRL_HALTTX_MASK BIT(10) /* Halt transmission after current frame */ -#define FXMAC_NWCTRL_STARTTX_MASK BIT(9) /* Start tx (tx_go) */ - -#define FXMAC_NWCTRL_STATWEN_MASK BIT(7) /* Enable writing to stat counters */ -#define FXMAC_NWCTRL_STATINC_MASK BIT(6) /* Increment statistic registers */ -#define FXMAC_NWCTRL_STATCLR_MASK BIT(5) /* Clear statistic registers */ -#define FXMAC_NWCTRL_MDEN_MASK BIT(4) /* Enable MDIO port */ -#define FXMAC_NWCTRL_TXEN_MASK BIT(3) /* Enable transmit */ -#define FXMAC_NWCTRL_RXEN_MASK BIT(2) /* Enable receive */ -#define FXMAC_NWCTRL_LOOPBACK_LOCAL_MASK BIT(1) /* Loopback local */ - - - -/** @name network configuration register bit definitions - * @{ - */ -#define FXMAC_NWCFG_BADPREAMBEN_MASK BIT(29) /* disable rejection of non-standard preamble */ -#define FXMAC_NWCFG_IPDSTRETCH_MASK BIT(28) /* enable transmit IPG */ -#define FXMAC_NWCFG_SGMII_MODE_ENABLE_MASK BIT(27) /* SGMII mode enable */ -#define FXMAC_NWCFG_FCSIGNORE_MASK BIT(26) /* disable rejection of FCS error */ -#define FXMAC_NWCFG_HDRXEN_MASK BIT(25) /* RX half duplex */ -#define FXMAC_NWCFG_RXCHKSUMEN_MASK BIT(24) /* enable RX checksum offload */ -#define FXMAC_NWCFG_PAUSECOPYDI_MASK BIT(23) /* Do not copy pause Frames to memory */ - -#define FXMAC_NWCFG_DWIDTH_64_MASK BIT(21) /* 64 bit Data bus width */ -#define FXMAC_NWCFG_BUS_WIDTH_32_MASK (0U << 21) -#define FXMAC_NWCFG_BUS_WIDTH_64_MASK (1U << 21) -#define FXMAC_NWCFG_BUS_WIDTH_128_MASK (2U << 21) - -#define FXMAC_NWCFG_CLOCK_DIV224_MASK (7U << 18) -#define FXMAC_NWCFG_CLOCK_DIV128_MASK (6U << 18) -#define FXMAC_NWCFG_CLOCK_DIV96_MASK (5U << 18) -#define FXMAC_NWCFG_CLOCK_DIV64_MASK (4U << 18) -#define FXMAC_NWCFG_CLOCK_DIV48_MASK (3U << 18) -#define FXMAC_NWCFG_CLOCK_DIV32_MASK (2U << 18) -#define FXMAC_NWCFG_CLOCK_DIV16_MASK (1U << 18) -#define FXMAC_NWCFG_CLOCK_DIV8_MASK (0U << 18) -#define FXMAC_NWCFG_RESET_MASK BIT(19) /* reset value of mdc_clock_division*/ -#define FXMAC_NWCFG_MDC_SHIFT_MASK 18U /* shift bits for MDC */ -#define FXMAC_NWCFG_MDCCLKDIV_MASK GENMASK(20, 18) /* MDC Mask PCLK divisor */ - -#define FXMAC_NWCFG_FCS_REMOVE_MASK BIT(17) /* FCS remove - setting this bit will cause received frames to be written to memory without their frame check sequence (last 4 bytes). */ -#define FXMAC_NWCFG_LENGTH_FIELD_ERROR_FRAME_DISCARD_MASK BIT(16) /* RX length error discard */ -#define FXMAC_NWCFG_RXOFFS_MASK GENMASK(15) /* RX buffer offset */ -#define FXMAC_NWCFG_PAUSE_ENABLE_MASK BIT(13) /* Pause enable - when set, transmission will pause if a non-zero 802.3 classic pause frame is received and PFC has not been negotiated. */ -#define FXMAC_NWCFG_RETRYTESTEN_MASK BIT(12) /* Retry test */ -#define FXMAC_NWCFG_PCSSEL_MASK BIT(11) /* PCS Select */ -#define FXMAC_NWCFG_1000_MASK BIT(10) /* Gigabit mode enable */ -#define FXMAC_NWCFG_XTADDMACHEN_MASK BIT(9) /* External address match enable */ -#define FXMAC_NWCFG_1536RXEN_MASK BIT(8) /* Enable 1536 byte frames reception */ -#define FXMAC_NWCFG_UCASTHASHEN_MASK BIT(7) /* Receive unicast hash frames */ -#define FXMAC_NWCFG_MCASTHASHEN_MASK BIT(6) /* Receive multicast hash frames */ -#define FXMAC_NWCFG_BCASTDI_MASK BIT(5) /* Do not receive broadcast frames */ -#define FXMAC_NWCFG_COPYALLEN_MASK BIT(4) /* Copy all frames */ -#define FXMAC_NWCFG_JUMBO_MASK BIT(3) /* Jumbo frames */ -#define FXMAC_NWCFG_NVLANDISC_MASK BIT(2) /* Receive only VLAN frames */ -#define FXMAC_NWCFG_FDEN_MASK BIT(1) /* full duplex */ -#define FXMAC_NWCFG_100_MASK BIT(0) /* 100 Mbps */ - - -/* Receive buffer descriptor status words bit positions. - * Receive buffer descriptor consists of two 32-bit registers, - * the first - word0 contains a 32-bit word aligned address pointing to the - * address of the buffer. The lower two bits make up the wrap bit indicating - * the last descriptor and the ownership bit to indicate it has been used by - * the xmac. - * The following register - word1, contains status information regarding why - * the frame was received (the filter match condition) as well as other - * useful info. - * @{ - */ -#define FXMAC_RXBUF_BCAST_MASK BIT(31) /* Broadcast frame */ -#define FXMAC_RXBUF_MULTIHASH_MASK BIT(30) /* Multicast hashed frame */ -#define FXMAC_RXBUF_UNIHASH_MASK BIT(29) /* Unicast hashed frame */ -#define FXMAC_RXBUF_EXH_MASK BIT(27) /* buffer exhausted */ -#define FXMAC_RXBUF_AMATCH_MASK GENMASK(26, 25) /* Specific address \ -matched */ -#define FXMAC_RXBUF_IDFOUND_MASK BIT(24) /* Type ID matched */ -#define FXMAC_RXBUF_IDMATCH_MASK GENMASK(23, 22) /* ID matched mask */ -#define FXMAC_RXBUF_VLAN_MASK BIT(21) /* VLAN tagged */ -#define FXMAC_RXBUF_PRI_MASK BIT(20) /* Priority tagged */ -#define FXMAC_RXBUF_VPRI_MASK GENMASK(19, 17) /* Vlan priority */ -#define FXMAC_RXBUF_CFI_MASK BIT(16) /* CFI frame */ -#define FXMAC_RXBUF_EOF_MASK BIT(15) /* End of frame. */ -#define FXMAC_RXBUF_SOF_MASK BIT(14) /* Start of frame. */ -#define FXMAC_RXBUF_FCS_STATUS_MASK BIT(13) /* Status of fcs. */ -#define FXMAC_RXBUF_LEN_MASK GENMASK(12, 0) /* Mask for length field */ -#define FXMAC_RXBUF_LEN_JUMBO_MASK GENMASK(13, 0) /* Mask for jumbo length */ - -#define FXMAC_RXBUF_WRAP_MASK BIT(1) /* Wrap bit, last BD */ -#define FXMAC_RXBUF_NEW_MASK BIT(0) /* Used bit.. */ -#define FXMAC_RXBUF_ADD_MASK GENMASK(31, 2) /* Mask for address */ - -/* - * @} - */ - -/* Transmit buffer descriptor status words bit positions. - * Transmit buffer descriptor consists of two 32-bit registers, - * the first - word0 contains a 32-bit address pointing to the location of - * the transmit data. - * The following register - word1, consists of various information to control - * the xmac transmit process. After transmit, this is updated with status - * information, whether the frame was transmitted OK or why it had failed. - * @{ - */ -#define FXMAC_TXBUF_USED_MASK BIT(31) /* Used bit. */ -#define FXMAC_TXBUF_WRAP_MASK BIT(30) /* Wrap bit, last descriptor */ -#define FXMAC_TXBUF_RETRY_MASK BIT(29) /* Retry limit exceeded */ -#define FXMAC_TXBUF_URUN_MASK BIT(28) /* Transmit underrun occurred */ -#define FXMAC_TXBUF_EXH_MASK BIT(27) /* Buffers exhausted */ -#define FXMAC_TXBUF_TCP_MASK BIT(26) /* Late collision. */ -#define FXMAC_TXBUF_NOCRC_MASK BIT(16) /* No CRC */ -#define FXMAC_TXBUF_LAST_MASK BIT(15) /* Last buffer */ -#define FXMAC_TXBUF_LEN_MASK GENMASK(13, 0) /* Mask for length field */ -/* - * @} - */ - - -/** - * @name receive status register bit definitions - * @{ - */ -#define FXMAC_RXSR_HRESPNOK_MASK BIT(3) /* Receive hresp not OK */ -#define FXMAC_RXSR_RXOVR_MASK BIT(2) /* Receive overrun */ -#define FXMAC_RXSR_FRAMERX_MASK BIT(1) /* Frame received OK */ -#define FXMAC_RXSR_BUFFNA_MASK BIT(0) /* RX buffer used bit set */ - -#define FXMAC_RXSR_ERROR_MASK ((u32)FXMAC_RXSR_HRESPNOK_MASK | \ - (u32)FXMAC_RXSR_RXOVR_MASK | \ - (u32)FXMAC_RXSR_BUFFNA_MASK) - -#define FXMAC_SR_ALL_MASK GENMASK(31, 0) /* Mask for full register */ - -/** @name DMA control register bit definitions - * @{ - */ -#define FXMAC_DMACR_ADDR_WIDTH_64 BIT(30) /* 64 bit address bus */ -#define FXMAC_DMACR_TXEXTEND_MASK BIT(29) /* Tx Extended desc mode */ -#define FXMAC_DMACR_RXEXTEND_MASK BIT(28) /* Rx Extended desc mode */ -#define FXMAC_DMACR_ORCE_DISCARD_ON_ERR_MASK BIT(24) /* Auto Discard RX frames during lack of resource. */ -#define FXMAC_DMACR_RXBUF_MASK GENMASK(23, 16) /* Mask bit for RX buffer size */ -#define FXMAC_DMACR_RXBUF_SHIFT 16U /* Shift bit for RX buffer size */ -#define FXMAC_DMACR_TCPCKSUM_MASK BIT(11) /* enable/disable TX checksum offload */ -#define FXMAC_DMACR_TXSIZE_MASK BIT(10) /* TX buffer memory size bit[10] */ -#define FXMAC_DMACR_RXSIZE_MASK GENMASK(9, 8) /* RX buffer memory size bit[9:8] */ -#define FXMAC_DMACR_ENDIAN_MASK BIT(7) /* endian configuration */ -#define FXMAC_DMACR_SWAP_MANAGEMENT_MASK BIT(6) /* When clear, selects little endian mode */ -#define FXMAC_DMACR_BLENGTH_MASK GENMASK(4, 0) /* buffer burst length */ -#define FXMAC_DMACR_SINGLE_AHB_AXI_BURST BIT(0) /* single AHB_AXI bursts */ -#define FXMAC_DMACR_INCR4_AHB_AXI_BURST BIT(2) /* 4 bytes AHB_AXI bursts */ -#define FXMAC_DMACR_INCR8_AHB_AXI_BURST BIT(3) /* 8 bytes AHB_AXI bursts */ -#define FXMAC_DMACR_INCR16_AHB_AXI_BURST BIT(4) /* 16 bytes AHB_AXI bursts */ - -/* This register indicates module identification number and module revision. */ - -#define FXMAC_REVISION_MODULE_MASK GENMASK(15, 0) /* Module revision */ -#define FXMAC_IDENTIFICATION_MASK GENMASK(27, 16) /* Module identification number */ -#define FXMAC_FIX_NUM_MASK GENMASK(31, 28) /* Fix number - incremented for fix releases */ - -/** @name network status register bit definitaions - * @{ - */ -#define FXMAC_NWSR_MDIOIDLE_MASK BIT(2) /* PHY management idle */ -#define FXMAC_NWSR_MDIO_MASK BIT(1) /* Status of mdio_in */ -#define FXMAC_NWSR_PCS_LINK_STATE_MASK BIT(0) - -/** @name PHY Maintenance bit definitions - * @{ - */ -#define FXMAC_PHYMNTNC_OP_MASK (BIT(17) | BIT(30)) /* operation mask bits */ -#define FXMAC_PHYMNTNC_OP_R_MASK BIT(29) /* read operation */ -#define FXMAC_PHYMNTNC_OP_W_MASK BIT(28) /* write operation */ -#define FXMAC_PHYMNTNC_ADDR_MASK GENMASK(27, 23) /* Address bits */ -#define FXMAC_PHYMNTNC_REG_MASK GENMASK(22, 18) /* register bits */ -#define FXMAC_PHYMNTNC_DATA_MASK GENMASK(11, 0) /* data bits */ -#define FXMAC_PHYMNTNC_PHAD_SHFT_MSK 23U /* Shift bits for PHYAD */ -#define FXMAC_PHYMNTNC_PREG_SHFT_MSK 18U /* Shift bits for PHREG */ - -/** @name transmit status register bit definitions - * @{ - */ -#define FXMAC_TXSR_HRESPNOK_MASK BIT(8) /* Transmit hresp not OK */ -#define FXMAC_TXSR_URUN_MASK BIT(6) /* Transmit underrun */ -#define FXMAC_TXSR_TXCOMPL_MASK BIT(5) /* Transmit completed OK */ -#define FXMAC_TXSR_BUFEXH_MASK BIT(4) /* Transmit buffs exhausted mid frame */ -#define FXMAC_TXSR_TXGO_MASK BIT(3) /* Status of go flag */ -#define FXMAC_TXSR_RXOVR_MASK BIT(2) /* Retry limit exceeded */ -#define FXMAC_TXSR_FRAMERX_MASK BIT(1) /* Collision tx frame */ -#define FXMAC_TXSR_USEDREAD_MASK BIT(0) /* TX buffer used bit set */ - -#define FXMAC_TXSR_ERROR_MASK ((u32)FXMAC_TXSR_HRESPNOK_MASK | \ - (u32)FXMAC_TXSR_URUN_MASK | \ - (u32)FXMAC_TXSR_BUFEXH_MASK | \ - (u32)FXMAC_TXSR_RXOVR_MASK | \ - (u32)FXMAC_TXSR_FRAMERX_MASK | \ - (u32)FXMAC_TXSR_USEDREAD_MASK) -/** @name transmit SRAM segment allocation by queue 0 to 7 register bit definitions - * @{ - */ -#define FXMAC_TXQSEGALLOC_QLOWER_MASK BIT(2) /* 16 segments are distributed to queue 0*/ -#define FXMAC_TXQSEGALLOC_QLOWER_CLEAN_MASK 0x0U -/** - * @name Interrupt Q1 status register bit definitions - * @{ - */ -#define FXMAC_INTQ1SR_TXCOMPL_MASK BIT(7) /* Transmit completed OK */ -#define FXMAC_INTQ1SR_TXERR_MASK BIT(6) /* Transmit AMBA Error */ - -#define FXMAC_INTQ1_IXR_ALL_MASK ((u32)FXMAC_INTQ1SR_TXCOMPL_MASK | \ - (u32)FXMAC_INTQ1SR_TXERR_MASK) - -/** - * @name Interrupt QUEUE status register bit definitions - * @{ - */ -#define FXMAC_INTQUESR_TXCOMPL_MASK BIT(7) /* Transmit completed OK */ -#define FXMAC_INTQUESR_TXERR_MASK BIT(6) /* Transmit AMBA Error */ -#define FXMAC_INTQUESR_RCOMP_MASK BIT(1) -#define FXMAC_INTQUESR_RXUBR_MASK BIT(2) - -#define FXMAC_INTQUE_IXR_ALL_MASK ((u32)FXMAC_INTQUESR_TXCOMPL_MASK | \ - (u32)FXMAC_INTQUESR_TXERR_MASK) - -#define FXMAC_QUEUE_REGISTER_OFFSET(base_addr, queue_id) ((u32)base_addr + (queue_id - 1) * 4) - -/* Design Configuration Register 1 - The GEM has many parameterisation options to configure the IP during compilation stage. */ - -#define FXMAC_DESIGNCFG_DEBUG1_BUS_WIDTH_MASK GENMASK(27, 25) -#define FXMAC_DESIGNCFG_DEBUG1_BUS_IRQCOR_MASK BIT(23) - -/*GEM hs mac config register bitfields*/ -#define FXMAC_GEM_HSMACSPEED_OFFSET 0 -#define FXMAC_GEM_HSMACSPEED_SIZE 3 -#define FXMAC_GEM_HSMACSPEED_MASK 0x7 - -/* Transmit buffer descriptor status words offset - * @{ - */ -#define FXMAC_BD_ADDR_OFFSET 0x00000000U /* word 0/addr of BDs */ -#define FXMAC_BD_STAT_OFFSET 4 /* word 1/status of BDs, 4 bytes */ -#define FXMAC_BD_ADDR_HI_OFFSET BIT(3) /* word 2/addr of BDs */ - -/** @name MAC address register word 1 mask - * @{ - */ -#define FXMAC_GEM_SAB_MASK GENMASK(15, 0) /* Address bits[47:32] bit[31:0] are in BOTTOM */ - -/* USXGMII control register */ -#define FXMAC_GEM_USX_HS_MAC_SPEED_100M (0x0 << 14) /* 100M operation */ -#define FXMAC_GEM_USX_HS_MAC_SPEED_1G (0x1 << 14) /* 1G operation */ -#define FXMAC_GEM_USX_HS_MAC_SPEED_2_5G (0x2 << 14) /* 2.5G operation */ -#define FXMAC_GEM_USX_HS_MAC_SPEED_5G (0x3 << 14) /* 5G operation */ -#define FXMAC_GEM_USX_HS_MAC_SPEED_10G (0x4 << 14) /* 10G operation */ -#define FXMAC_GEM_USX_SERDES_RATE_5G (0x0 << 12) -#define FXMAC_GEM_USX_SERDES_RATE_10G (0x1 << 12) -#define FXMAC_GEM_USX_TX_SCR_BYPASS BIT(8) /* RX Scrambler Bypass. Set high to bypass the receive descrambler. */ -#define FXMAC_GEM_USX_RX_SCR_BYPASS BIT(9) /* TX Scrambler Bypass. Set high to bypass the transmit scrambler. */ -#define FXMAC_GEM_USX_RX_SYNC_RESET BIT(2) /* RX Reset. Set high to reset the receive datapath. When low the receive datapath is enabled. */ -#define FXMAC_GEM_USX_TX_DATAPATH_EN BIT(1) /* TX Datapath Enable. */ -#define FXMAC_GEM_USX_SIGNAL_OK BIT(0) /* Enable the USXGMII/BASE-R receive PCS. */ - -/* All PCS registers */ - -#define FXMAC_PCS_CONTROL_ENABLE_AUTO_NEG BIT(12) /* Enable auto-negotiation - when set active high, autonegotiation operation is enabled. */ - - -/* FXMAC_PCS_STATUS_OFFSET */ -#define FXMAC_PCS_STATUS_LINK_STATUS_OFFSET 2 -#define FXMAC_PCS_STATUS_LINK_STATUS BIT(FXMAC_PCS_STATUS_LINK_STATUS_OFFSET) /* Link status - indicates the status of the physical connection to the link partner. When set to logic 1 the link is up, and when set to logic 0, the link is down. */ - -/* FXMAC_PCS_AN_LP_OFFSET */ - -#define FXMAC_PCS_AN_LP_SPEED_OFFSET 10 -#define FXMAC_PCS_AN_LP_SPEED (0x3U << FXMAC_PCS_AN_LP_SPEED_OFFSET) /* SGMII 11 : Reserved 10 : 1000 Mbps 01 : 100Mbps 00 : 10 Mbps */ -#define FXMAC_PCS_AN_LP_DUPLEX_OFFSET 12 -#define FXMAC_PCS_AN_LP_DUPLEX (0x3U << FXMAC_PCS_AN_LP_DUPLEX_OFFSET) /* SGMII Bit 13: Reserved. read as 0. Bit 12 : 0 : half-duplex. 1: Full Duplex." */ -#define FXMAC_PCS_LINK_PARTNER_NEXT_PAGE_STATUS (1U<<15) /* In sgmii mode, 0 is link down . 1 is link up */ - - -/* USXGMII Status Register */ - -#define FXMAC_GEM_USX_STATUS_BLOCK_LOCK BIT(0) /* Block Lock. A value of one indicates that the PCS has achieved block synchronization. */ - - -/***************** Macros (Inline Functions) Definitions *********************/ - -#define FXMAC_READREG32(addr, reg_offset) FtIn32(addr + (u32)reg_offset) -#define FXMAC_WRITEREG32(addr, reg_offset, reg_value) FtOut32(addr + (u32)reg_offset, (u32)reg_value) - - -#define FXMAC_SetBit32(addr, reg_offset, reg_value) FtSetBit32(addr + (u32)reg_offset, (u32)reg_value) -#define FXMAC_ClearBit32(addr, reg_offset, reg_value) FtClearBit32(addr + (u32)reg_offset, (u32)reg_value) - -/****************************************************************************/ -/** - * - * Enable interrupts specified in Mask. The corresponding interrupt for - * each bit set to 1 in Mask, will be enabled. - * - * @param instance_p is a pointer to the instance to be worked on. - * @param Mask contains a bit mask of interrupts to enable. The mask can - * be formed using a set of bitwise or'd values. - * - * @note - * The state of the transmitter and receiver are not modified by this function. - * C-style signature - * void FXMAC_INT_ENABLE(FXmac *instance_p, u32 Mask) - * - *****************************************************************************/ -#define FXMAC_INT_ENABLE(instance_p, Mask) \ - FXMAC_WRITEREG32((instance_p)->config.base_address, \ - FXMAC_IER_OFFSET, \ - ((Mask)&FXMAC_IXR_ALL_MASK)); - -/****************************************************************************/ -/** - * - * Enable interrupts specified in Mask. The corresponding interrupt for - * each bit set to 1 in Mask, will be enabled. - * - * @param instance_p is a pointer to the instance to be worked on. - * @param Mask contains a bit mask of interrupts to enable. The mask can - * be formed using a set of bitwise or'd values. - * - * @note - * The state of the transmitter and receiver are not modified by this function. - * C-style signature - * void FXMAC_INT_Q1ENABLE(FXmac *instance_p, u32 Mask) - * - *****************************************************************************/ -#define FXMAC_INT_Q1ENABLE(instance_p, Mask) \ - FXMAC_WRITEREG32((instance_p)->config.base_address, \ - FXMAC_INTQ1_IER_OFFSET, \ - ((Mask)&FXMAC_INTQ1_IXR_ALL_MASK)); - - -#ifdef __cplusplus -} -#endif - -#endif // ! diff --git a/bsp/phytium/libraries/standalone/drivers/eth/fxmac/fxmac_intr.c b/bsp/phytium/libraries/standalone/drivers/eth/fxmac/fxmac_intr.c deleted file mode 100644 index e7d0b3c878..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/eth/fxmac/fxmac_intr.c +++ /dev/null @@ -1,421 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fxmac_intr.c - * Date: 2022-04-06 14:46:52 - * LastEditTime: 2022-04-06 14:46:58 - * Description:  This file contains functions related to interrupt handling. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/06/16 first release - */ - -#include "fxmac.h" -#include "fxmac_hw.h" -#include "fassert.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ - -/************************** Variable Definitions *****************************/ - - -/** - * @name: FXmacSetHandler - * @msg: Install an asynchronous handler function for the given handler_type: - * - * @param instance_p is a pointer to the instance to be worked on. - * @param handler_type indicates what interrupt handler type is. - * FXMAC_HANDLER_DMASEND, FXMAC_HANDLER_DMARECV and - * FXMAC_HANDLER_ERROR. - * @param func_pointer is the pointer to the callback function - * @param call_back_ref is the upper layer callback reference passed back when - * when the callback function is invoked. - * - * @return {FError} FT_SUCCESS set is ok - */ -FError FXmacSetHandler(FXmac *instance_p, u32 handler_type, - void *func_pointer, void *call_back_ref) -{ - FError status; - FASSERT(instance_p != NULL); - FASSERT(func_pointer != NULL); - FASSERT(instance_p->is_ready == (u32)FT_COMPONENT_IS_READY); - status = (FError)(FT_SUCCESS); - - switch (handler_type) - { - case FXMAC_HANDLER_DMASEND: - instance_p->send_irq_handler = ((FXmacIrqHandler)(void *)func_pointer); - instance_p->send_args = call_back_ref; - break; - case FXMAC_HANDLER_DMARECV: - instance_p->recv_irq_handler = ((FXmacIrqHandler)(void *)func_pointer); - instance_p->recv_args = call_back_ref; - break; - case FXMAC_HANDLER_ERROR: - instance_p->error_irq_handler = ((FXmacErrorIrqHandler)(void *)func_pointer); - instance_p->error_args = call_back_ref; - break; - case FXMAC_HANDLER_LINKCHANGE: - instance_p->link_change_handler = ((FXmacIrqHandler)(void *)func_pointer); - instance_p->link_change_args = call_back_ref; - break; - case FXMAC_HANDLER_RESTART: - instance_p->restart_handler = ((FXmacIrqHandler)(void *)func_pointer); - instance_p->restart_args = call_back_ref; - break; - default: - status = (FError)(FXMAC_ERR_INVALID_PARAM); - break; - } - return status; -} - - -/** - * @name: FXmacIntrHandler - * @msg: 中断处理函数 - * @param {s32} vector is interrrupt num - * @param {void} *args is a arguments variables - * @return {*} - * @note 目前中断只支持单queue的情况 - */ - -void FXmacIntrHandler(s32 vector, void *args) -{ - u32 reg_isr; - u32 reg_qx_isr; - u32 reg_temp; - u32 reg_ctrl; - u32 tx_queue_id; /* 0 ~ FXMAC_QUEUE_MAX_NUM ,Index queue number */ - u32 rx_queue_id; /* 0 ~ FXMAC_QUEUE_MAX_NUM ,Index queue number */ - FXmac *instance_p = (FXmac *)args; - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == (u32)FT_COMPONENT_IS_READY); - - tx_queue_id = instance_p->tx_bd_queue.queue_id; - rx_queue_id = instance_p->rx_bd_queue.queue_id; - FASSERT((rx_queue_id < FXMAC_QUEUE_MAX_NUM) && (tx_queue_id < FXMAC_QUEUE_MAX_NUM)) - - /* This ISR will try to handle as many interrupts as it can in a single - * call. However, in most of the places where the user's error handler - * is called, this ISR exits because it is expected that the user will - * reset the device in nearly all instances. - */ - reg_isr = FXMAC_READREG32(instance_p->config.base_address, FXMAC_ISR_OFFSET); - - if ((u32)vector == instance_p->config.queue_irq_num[tx_queue_id]) - { - if (tx_queue_id == 0) - { - if ((reg_isr & FXMAC_IXR_TXCOMPL_MASK) != 0x00000000U) - { - /* Clear TX status register TX complete indication but preserve - * error bits if there is any */ - FXMAC_WRITEREG32(instance_p->config.base_address, - FXMAC_TXSR_OFFSET, - ((u32)FXMAC_TXSR_TXCOMPL_MASK | - (u32)FXMAC_TXSR_USEDREAD_MASK)); - - if (instance_p->send_irq_handler) - { - /* code */ - instance_p->send_irq_handler(instance_p->send_args); - } - - /* add */ - if(instance_p->caps& FXMAC_CAPS_ISR_CLEAR_ON_WRITE) - { - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_ISR_OFFSET, FXMAC_IXR_TXCOMPL_MASK); - } - } - - /* Transmit error conditions interrupt */ - if (((reg_isr & FXMAC_IXR_TX_ERR_MASK) != 0x00000000U) && - (!(reg_isr & FXMAC_IXR_TXCOMPL_MASK) != 0x00000000U)) - { - /* Clear TX status register */ - reg_temp = FXMAC_READREG32(instance_p->config.base_address, FXMAC_TXSR_OFFSET); - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_TXSR_OFFSET, reg_temp); - if (instance_p->error_irq_handler) - { - instance_p->error_irq_handler(instance_p->error_args, FXMAC_SEND, reg_temp); - } - /* add */ - if(instance_p->caps& FXMAC_CAPS_ISR_CLEAR_ON_WRITE) - { - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_ISR_OFFSET, FXMAC_IXR_TX_ERR_MASK); - } - } - - /* add restart */ - if ((reg_isr & FXMAC_IXR_TXUSED_MASK) != 0x00000000U) - { - /* add */ - if(instance_p->caps& FXMAC_CAPS_ISR_CLEAR_ON_WRITE) - { - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_ISR_OFFSET, FXMAC_IXR_TXUSED_MASK); - } - - if (instance_p->restart_handler) - { - instance_p->restart_handler(instance_p->restart_args); - } - } - - /* link changed */ - if ((reg_isr & FXMAC_IXR_LINKCHANGE_MASK) != 0x00000000U) - { - if (instance_p->link_change_handler) - { - instance_p->link_change_handler(instance_p->link_change_args); - } - - if(instance_p->caps& FXMAC_CAPS_ISR_CLEAR_ON_WRITE) - { - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_ISR_OFFSET, FXMAC_IXR_LINKCHANGE_MASK); - } - } - } - else /* use queue number more than 0 */ - { - reg_isr = FXMAC_READREG32(instance_p->config.base_address, - FXMAC_QUEUE_REGISTER_OFFSET(FXMAC_INTQ1_STS_OFFSET, tx_queue_id)); - - /* Transmit Q1 complete interrupt */ - if (((reg_isr & FXMAC_INTQUESR_TXCOMPL_MASK) != 0x00000000U)) - { - /* Clear TX status register TX complete indication but preserve - * error bits if there is any */ - FXMAC_WRITEREG32(instance_p->config.base_address, - FXMAC_QUEUE_REGISTER_OFFSET(FXMAC_INTQ1_STS_OFFSET, tx_queue_id), - FXMAC_INTQUESR_TXCOMPL_MASK); - FXMAC_WRITEREG32(instance_p->config.base_address, - FXMAC_TXSR_OFFSET, - ((u32)FXMAC_TXSR_TXCOMPL_MASK | - (u32)FXMAC_TXSR_USEDREAD_MASK)); - instance_p->send_irq_handler(instance_p->send_args); - } - - /* Transmit Q1 error conditions interrupt */ - if (((reg_isr & FXMAC_INTQ1SR_TXERR_MASK) != 0x00000000U) && - ((reg_isr & FXMAC_INTQ1SR_TXCOMPL_MASK) != 0x00000000U)) - { - /* Clear Interrupt Q1 status register */ - FXMAC_WRITEREG32(instance_p->config.base_address, - FXMAC_QUEUE_REGISTER_OFFSET(FXMAC_INTQ1_STS_OFFSET, tx_queue_id), reg_isr); - instance_p->error_irq_handler(instance_p->error_args, FXMAC_SEND, - reg_isr); - } - } - } - - if ((u32)vector == instance_p->config.queue_irq_num[rx_queue_id]) - { - if (rx_queue_id == 0) - { - /* Receive complete interrupt */ - if ((reg_isr & FXMAC_IXR_RXCOMPL_MASK) != 0x00000000U) - { - /* Clear RX status register RX complete indication but preserve - * error bits if there is any */ - FXMAC_WRITEREG32(instance_p->config.base_address, - FXMAC_RXSR_OFFSET, - ((u32)FXMAC_RXSR_FRAMERX_MASK | - (u32)FXMAC_RXSR_BUFFNA_MASK)); - instance_p->recv_irq_handler(instance_p->recv_args); - - /* add */ - if(instance_p->caps& FXMAC_CAPS_ISR_CLEAR_ON_WRITE) - { - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_ISR_OFFSET, FXMAC_IXR_RXCOMPL_MASK); - } - } - - /* Receive error conditions interrupt */ - if ((reg_isr & FXMAC_IXR_RX_ERR_MASK) != 0x00000000U) - { - /* Clear RX status register */ - reg_temp = FXMAC_READREG32(instance_p->config.base_address, - FXMAC_RXSR_OFFSET); - FXMAC_WRITEREG32(instance_p->config.base_address, - FXMAC_RXSR_OFFSET, reg_temp); - - /* Fix for CR # 692702. Write to bit 18 of net_ctrl - * register to flush a packet out of Rx SRAM upon - * an error for receive buffer not available. */ - if ((reg_isr & FXMAC_IXR_RXUSED_MASK) != 0x00000000U) - { - reg_ctrl = FXMAC_READREG32(instance_p->config.base_address, - FXMAC_NWCTRL_OFFSET); - reg_ctrl |= (u32)FXMAC_NWCTRL_FLUSH_DPRAM_MASK; - - /* add */ - reg_ctrl &= (u32)(~FXMAC_NWCTRL_RXEN_MASK); - FXMAC_WRITEREG32(instance_p->config.base_address, - FXMAC_NWCTRL_OFFSET, reg_ctrl); - - /* add */ - reg_ctrl |= (u32)FXMAC_NWCTRL_RXEN_MASK; - FXMAC_WRITEREG32(instance_p->config.base_address, - FXMAC_NWCTRL_OFFSET, reg_ctrl); - } - - /* add */ - if ((reg_isr & FXMAC_IXR_RXOVR_MASK) != 0x00000000U) - { - if(instance_p->caps& FXMAC_CAPS_ISR_CLEAR_ON_WRITE) - { - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_ISR_OFFSET, FXMAC_IXR_RXOVR_MASK); - } - } - - /* add */ - if ((reg_isr & FXMAC_IXR_HRESPNOK_MASK) != 0x00000000U) - { - if(instance_p->caps& FXMAC_CAPS_ISR_CLEAR_ON_WRITE) - { - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_ISR_OFFSET, FXMAC_IXR_HRESPNOK_MASK); - } - } - - if (reg_temp != 0) - { - instance_p->error_irq_handler(instance_p->error_args, - FXMAC_RECV, reg_temp); - } - } - } - else /* use queue number more than 0 */ - { - reg_isr = FXMAC_READREG32(instance_p->config.base_address, - FXMAC_QUEUE_REGISTER_OFFSET(FXMAC_INTQ1_STS_OFFSET, rx_queue_id)); - - /* Receive complete interrupt */ - if ((reg_isr & FXMAC_INTQUESR_RCOMP_MASK) != 0x00000000U) - { - /* Clear RX status register RX complete indication but preserve - * error bits if there is any */ - FXMAC_WRITEREG32(instance_p->config.base_address, - FXMAC_QUEUE_REGISTER_OFFSET(FXMAC_INTQ1_STS_OFFSET, rx_queue_id), - FXMAC_INTQUESR_RCOMP_MASK); - instance_p->recv_irq_handler(instance_p->recv_args); - } - - /* Receive error conditions interrupt */ - if ((reg_isr & FXMAC_IXR_RX_ERR_MASK) != 0x00000000U) - { - - reg_ctrl = - FXMAC_READREG32(instance_p->config.base_address, - FXMAC_NWCTRL_OFFSET); - reg_ctrl &= ~(u32)FXMAC_NWCTRL_RXEN_MASK; - - FXMAC_WRITEREG32(instance_p->config.base_address, - FXMAC_NWCTRL_OFFSET, reg_ctrl); - - /* Clear RX status register */ - reg_temp = FXMAC_READREG32(instance_p->config.base_address, - FXMAC_RXSR_OFFSET); - FXMAC_WRITEREG32(instance_p->config.base_address, - FXMAC_RXSR_OFFSET, reg_temp); - - /* Fix for CR # 692702. Write to bit 18 of net_ctrl - * register to flush a packet out of Rx SRAM upon - * an error for receive buffer not available. */ - if ((reg_isr & FXMAC_IXR_RXUSED_MASK) != 0x00000000U) - { - reg_ctrl = - FXMAC_READREG32(instance_p->config.base_address, - FXMAC_NWCTRL_OFFSET); - reg_ctrl |= (u32)FXMAC_NWCTRL_FLUSH_DPRAM_MASK; - - FXMAC_WRITEREG32(instance_p->config.base_address, - FXMAC_NWCTRL_OFFSET, reg_ctrl); - } - - /* Clear RX status register RX complete indication but preserve - * error bits if there is any */ - FXMAC_WRITEREG32(instance_p->config.base_address, - FXMAC_QUEUE_REGISTER_OFFSET(FXMAC_INTQ1_STS_OFFSET, rx_queue_id), - FXMAC_INTQUESR_RXUBR_MASK); - instance_p->recv_irq_handler(instance_p->recv_args); - - if (reg_temp != 0) - { - instance_p->error_irq_handler(instance_p->error_args, - FXMAC_RECV, reg_temp); - } - } - } - } -} - - -/** - * @name: FXmacQueueIrqDisable - * @msg: Disable queue irq - * @param {FXmac} *instance_p a pointer to the instance to be worked on. - * @param {u32} queue_num queue number - * @param {u32} mask is interrupt disable value mask - */ -void FXmacQueueIrqDisable(FXmac *instance_p, u32 queue_num, u32 mask) -{ - FXmacConfig *config_p; - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == (u32)FT_COMPONENT_IS_READY); - FASSERT(instance_p->config.max_queue_num > queue_num); - config_p = &instance_p->config; - - if (queue_num == 0) - { - FXMAC_WRITEREG32(config_p->base_address, FXMAC_IDR_OFFSET, mask & FXMAC_IXR_ALL_MASK); - } - else - { - FXMAC_WRITEREG32(config_p->base_address, FXMAC_INTQX_IDR_SIZE_OFFSET(queue_num), mask & FXMAC_IXR_ALL_MASK); - } -} - -/** - * @name: FXmacQueueIrqEnable - * @msg: Enable queue irq - * @param {FXmac} *instance_p a pointer to the instance to be worked on. - * @param {u32} queue_num is queue number - * @param {u32} mask is interrupt Enable value mask - */ -void FXmacQueueIrqEnable(FXmac *instance_p, u32 queue_num, u32 mask) -{ - FXmacConfig *config_p; - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == (u32)FT_COMPONENT_IS_READY); - FASSERT(instance_p->config.max_queue_num > queue_num); - config_p = &instance_p->config; - - if (queue_num == 0) - { - FXMAC_WRITEREG32(config_p->base_address, FXMAC_IER_OFFSET, mask & FXMAC_IXR_ALL_MASK); - } - else - { - FXMAC_WRITEREG32(config_p->base_address, FXMAC_INTQX_IER_SIZE_OFFSET(queue_num), mask & FXMAC_IXR_ALL_MASK); - } -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/eth/fxmac/fxmac_options.c b/bsp/phytium/libraries/standalone/drivers/eth/fxmac/fxmac_options.c deleted file mode 100644 index b82ed63508..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/eth/fxmac/fxmac_options.c +++ /dev/null @@ -1,766 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fxmac_options.c - * Date: 2022-04-06 14:46:52 - * LastEditTime: 2022-04-06 14:46:58 - * Description:  This file is for options functions - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/06/16 first release - * 1.1 liuzhihong 2023/4/11 jumbo support - */ - -#include "fxmac_hw.h" -#include "fxmac.h" -#include "fassert.h" -#include "ftypes.h" - - -/** - * @name: FXmacSetMacAddress - * - * @msg: Set the MAC address for this driver/device. The address is a 48-bit value. - * The device must be stopped before calling this function. - * - * @param {FXmac *}: instance_p is a pointer to the instance to be worked on. - * @param address_ptr is a pointer to a 6-byte MAC address. - * @param index plus 1 is a index to which MAC (1-4) address. - * - * @return - * - FT_SUCCESS if the MAC address was set successfully - * - FXMAC_ERR_MAC_IS_PROCESSING if the device has not yet been stopped - * - */ -FError FXmacSetMacAddress(FXmac *instance_p, u8 *address_ptr, u8 index) -{ - u32 mac_addr; - u8 *aptr = (u8 *)(void *)address_ptr; - u8 index_loc = index; - FError status; - FASSERT(instance_p != NULL); - FASSERT(aptr != NULL); - FASSERT(instance_p->is_ready == (u32)FT_COMPONENT_IS_READY); - FASSERT((index_loc < (u8)FXMAC_MAX_MAC_ADDR)); - - /* Be sure device has been stopped */ - if (instance_p->is_started == (u32)FT_COMPONENT_IS_STARTED) - { - status = (FError)(FXMAC_ERR_MAC_IS_PROCESSING); - } - else - { - /* Set the MAC bits [31:0] in BOT */ - mac_addr = *(aptr); - mac_addr |= ((u32)(*(aptr + 1)) << 8U); - mac_addr |= ((u32)(*(aptr + 2)) << 16U); - mac_addr |= ((u32)(*(aptr + 3)) << 24U); - FXMAC_WRITEREG32(instance_p->config.base_address, - ((u32)FXMAC_GEM_SA1B + ((u32)index_loc * (u32)8)), mac_addr); - - /* There are reserved bits in TOP so don't affect them */ - mac_addr = FXMAC_READREG32(instance_p->config.base_address, - ((u32)FXMAC_GEM_SA1T + ((u32)index_loc * (u32)8))); - - mac_addr &= (u32)(~FXMAC_GEM_SAB_MASK); - - /* Set MAC bits [47:32] in TOP */ - mac_addr |= (u32)(*(aptr + 4)); - mac_addr |= (u32)(*(aptr + 5)) << 8U; - - FXMAC_WRITEREG32(instance_p->config.base_address, - ((u32)FXMAC_GEM_SA1T + ((u32)index_loc * (u32)8)), mac_addr); - - status = (FError)(FT_SUCCESS); - } - return status; -} - -/** - * @name: FXmacGetMacAddress - * @msg: Set the MAC address according to index - * @param {FXmac} *mac is a pointer to the instance to be worked on. - * @param {void} *address_ptr is an output parameter, and is a pointer to a buffer into - * which the current MAC address will be copied. - * @param {u8} index is a index to which MAC (0-3) address. - */ -void FXmacGetMacAddress(FXmac *instance_p, u8 *address_ptr, u8 index) -{ - u32 reg_value; - u8 *ptr = (u8 *)address_ptr; - FASSERT(instance_p != NULL); - FASSERT(ptr != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - FASSERT((index < FXMAC_MAX_MAC_ADDR)); - - reg_value = FXMAC_READREG32(instance_p->config.base_address, FXMAC_GEM_SA1B + ((u32)index * (u32)8)); - *ptr = (u8)reg_value; - *(ptr + 1) = (u8)(reg_value >> 8U); - *(ptr + 2) = (u8)(reg_value >> 16U); - *(ptr + 3) = (u8)(reg_value >> 24U); - - reg_value = FXMAC_READREG32(instance_p->config.base_address, FXMAC_GEM_SA1T + ((u32)index * (u32)8)); - *(ptr + 4) = (u8)(reg_value); - *(ptr + 5) = (u8)(reg_value >> 8U); -} - - -/** - * Set the Type ID match for this driver/device. The register is a 32-bit - * value. The device must be stopped before calling this function. - * - * @param instance_p is a pointer to the instance to be worked on. - * @param id_check is type ID to be configured. - * @param index plus 1 is a index to which Type ID (1-4). - * - * @return - * - FT_SUCCESS if the MAC address was set successfully - * - FXMAC_ERR_MAC_IS_PROCESSING if the device has not yet been stopped - * - */ -FError FXmacSetTypeIdCheck(FXmac *instance_p, u32 id_check, u8 index) -{ - u8 index_loc = index; - FError status; - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - FASSERT((index_loc < (u8)FXMAC_MAX_TYPE_ID)); - - /* Be sure device has been stopped */ - if (instance_p->is_started == (u32)FT_COMPONENT_IS_STARTED) - { - status = (FError)(FXMAC_ERR_MAC_IS_PROCESSING); - } - else - { - - /* Set the ID bits in MATCHx register */ - FXMAC_WRITEREG32(instance_p->config.base_address, - ((u32)FXMAC_MATCH1_OFFSET + ((u32)index_loc * (u32)4)), id_check); - - status = (FError)(FT_SUCCESS); - } - return status; -} - - -/** - * Set options for the driver/device. The driver should be stopped with - * FXmacStop() before changing options. - * - * @param instance_p is a pointer to the instance to be worked on. - * @param options are the options to set. Multiple options can be set by OR'ing - * FXMAC_*_OPTIONS constants together. options not specified are not - * affected. - * @param queue_num is the Buffer Queue Index ,Used for jumbo frames only - * - * @return - * - FT_SUCCESS if the options were set successfully - * - FXMAC_ERR_MAC_IS_PROCESSING if the device has not yet been stopped - * - * @note - * See fxmac.h for a description of the available options. - * - */ -FError FXmacSetOptions(FXmac *instance_p, u32 options, u32 queue_num) -{ - u32 reg; /* Generic register contents */ - u32 reg_netcfg; /* Reflects original contents of NET_CONFIG */ - u32 reg_new_netcfg; /* Reflects new contents of NET_CONFIG */ - FError status; - FXmacConfig *config_p; - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == (u32)FT_COMPONENT_IS_READY); - config_p = &instance_p->config; - /* Be sure device has been stopped */ - if (instance_p->is_started == (u32)FT_COMPONENT_IS_STARTED) - { - status = (FError)(FXMAC_ERR_MAC_IS_PROCESSING); - } - else - { - - /* Many of these options will change the NET_CONFIG registers. - * To reduce the amount of IO to the device, group these options here - * and change them all at once. - */ - - /* Grab current register contents */ - reg_netcfg = FXMAC_READREG32(config_p->base_address, - FXMAC_NWCFG_OFFSET); - reg_new_netcfg = reg_netcfg; - - /* - * It is configured to max 1536. - */ - if ((options & FXMAC_FRAME1536_OPTION) != 0x00000000U) - { - reg_new_netcfg |= (FXMAC_NWCFG_1536RXEN_MASK); - } - - /* Turn on VLAN packet only, only VLAN tagged will be accepted */ - if ((options & FXMAC_VLAN_OPTION) != 0x00000000U) - { - reg_new_netcfg |= FXMAC_NWCFG_NVLANDISC_MASK; - } - - /* Turn on FCS stripping on receive packets */ - if ((options & FXMAC_FCS_STRIP_OPTION) != 0x00000000U) - { - reg_new_netcfg |= FXMAC_NWCFG_FCS_REMOVE_MASK; - } - - /* Turn on length/type field checking on receive packets */ - if ((options & FXMAC_LENTYPE_ERR_OPTION) != 0x00000000U) - { - reg_new_netcfg |= FXMAC_NWCFG_LENGTH_FIELD_ERROR_FRAME_DISCARD_MASK; - } - - /* Turn on flow control */ - if ((options & FXMAC_FLOW_CONTROL_OPTION) != 0x00000000U) - { - reg_new_netcfg |= FXMAC_NWCFG_PAUSE_ENABLE_MASK; - } - - /* Turn on promiscuous frame filtering (all frames are received) */ - if ((options & FXMAC_PROMISC_OPTION) != 0x00000000U) - { - reg_new_netcfg |= FXMAC_NWCFG_COPYALLEN_MASK; - } - - /* Allow broadcast address reception */ - if ((options & FXMAC_BROADCAST_OPTION) != 0x00000000U) - { - reg_new_netcfg &= (u32)(~FXMAC_NWCFG_BCASTDI_MASK); - } - - /* Allow multicast address filtering */ - if ((options & FXMAC_MULTICAST_OPTION) != 0x00000000U) - { - reg_new_netcfg |= FXMAC_NWCFG_MCASTHASHEN_MASK; - } - - /* enable RX checksum offload */ - if ((options & FXMAC_RX_CHKSUM_ENABLE_OPTION) != 0x00000000U) - { - reg_new_netcfg |= FXMAC_NWCFG_RXCHKSUMEN_MASK; - } - - /* Enable jumbo frames */ - if ((options & FXMAC_JUMBO_ENABLE_OPTION) != 0x00000000U) - { - instance_p->max_mtu_size = FXMAC_MTU_JUMBO; - instance_p->max_frame_size = FXMAC_MAX_FRAME_SIZE_JUMBO; - - reg_new_netcfg |= FXMAC_NWCFG_JUMBO_MASK; - FXMAC_WRITEREG32(config_p->base_address, - FXMAC_JUMBOMAXLEN_OFFSET, FXMAC_MAX_FRAME_SIZE_JUMBO); - FXMAC_WRITEREG32(config_p->base_address, - FXMAC_TXQSEGALLOC_QLOWER_OFFSET,FXMAC_TXQSEGALLOC_QLOWER_MASK); - if (queue_num == 0) - { - u32 rx_buf_size = 0; - reg = FXMAC_READREG32(config_p->base_address, - FXMAC_DMACR_OFFSET); - reg &= ~FXMAC_DMACR_RXBUF_MASK; - - rx_buf_size = ((u32)instance_p->max_frame_size / (u32)FXMAC_RX_BUF_UNIT); - rx_buf_size += (((u32)instance_p->max_frame_size % (u32)FXMAC_RX_BUF_UNIT) != (u32)0) ? 1U : 0U; - - reg |= ((rx_buf_size << (u32)(FXMAC_DMACR_RXBUF_SHIFT)) & - (u32)(FXMAC_DMACR_RXBUF_MASK)); - FXMAC_WRITEREG32(config_p->base_address, - FXMAC_DMACR_OFFSET, reg); - } - else if (queue_num < instance_p->config.max_queue_num) - { - u32 rx_buf_size = 0; - rx_buf_size = ((u32)instance_p->max_frame_size / (u32)FXMAC_RX_BUF_UNIT); - rx_buf_size += (((u32)instance_p->max_frame_size % (u32)FXMAC_RX_BUF_UNIT) != (u32)0) ? 1U : 0U; - - FXMAC_WRITEREG32(config_p->base_address, FXMAC_RXBUFQX_SIZE_OFFSET(queue_num), rx_buf_size & FXMAC_RXBUFQX_SIZE_MASK); - } - } - - if (((options & FXMAC_SGMII_ENABLE_OPTION) != 0x00000000U)) - { - reg_new_netcfg |= (FXMAC_NWCFG_SGMII_MODE_ENABLE_MASK | - FXMAC_NWCFG_PCSSEL_MASK); - } - - if ((options & FXMAC_LOOPBACK_NO_MII_OPTION) != 0x00000000U) - { - reg = FXMAC_READREG32(config_p->base_address, FXMAC_NWCTRL_OFFSET); - reg |= FXMAC_NWCTRL_LOOPBACK_LOCAL_MASK; - FXMAC_WRITEREG32(config_p->base_address, FXMAC_NWCTRL_OFFSET, reg); - } - - if ((options & FXMAC_LOOPBACK_USXGMII_OPTION) != 0x00000000U) - { - FXMAC_WRITEREG32(config_p->base_address, FXMAC_TEST_CONTROL_OFFSET, 2); - } - - /* Officially change the NET_CONFIG registers if it needs to be - * modified. - */ - if (reg_netcfg != reg_new_netcfg) - { - FXMAC_WRITEREG32(config_p->base_address, - FXMAC_NWCFG_OFFSET, reg_new_netcfg); - } - - /* Enable TX checksum offload */ - if ((options & FXMAC_TX_CHKSUM_ENABLE_OPTION) != 0x00000000U) - { - reg = FXMAC_READREG32(config_p->base_address, - FXMAC_DMACR_OFFSET); - reg |= FXMAC_DMACR_TCPCKSUM_MASK; - FXMAC_WRITEREG32(config_p->base_address, - FXMAC_DMACR_OFFSET, reg); - } - - /* Enable transmitter */ - if ((options & FXMAC_TRANSMITTER_ENABLE_OPTION) != 0x00000000U) - { - reg = FXMAC_READREG32(config_p->base_address, - FXMAC_NWCTRL_OFFSET); - reg |= FXMAC_NWCTRL_TXEN_MASK; - FXMAC_WRITEREG32(config_p->base_address, - FXMAC_NWCTRL_OFFSET, reg); - } - - /* Enable receiver */ - if ((options & FXMAC_RECEIVER_ENABLE_OPTION) != 0x00000000U) - { - reg = FXMAC_READREG32(config_p->base_address, - FXMAC_NWCTRL_OFFSET); - reg |= FXMAC_NWCTRL_RXEN_MASK; - FXMAC_WRITEREG32(config_p->base_address, - FXMAC_NWCTRL_OFFSET, reg); - } - - /* The remaining options not handled here are managed elsewhere in the - * driver. No register modifications are needed at this time. Reflecting - * the option in instance_p->options is good enough for now. - */ - - /* Set options word to its new value */ - instance_p->options |= options; - - status = (FError)(FT_SUCCESS); - } - return status; -} - - -/** - * Clear options for the driver/device - * - * @param instance_p is a pointer to the instance to be worked on. - * @param options are the options to clear. Multiple options can be cleared by - * OR'ing FXMAC_*_options constants together. options not specified - * are not affected. - * @param queue_num is the Buffer Queue Index ,Used for jumbo frames only - * @return - * - FT_SUCCESS if the options were set successfully - * - FXMAC_ERR_MAC_IS_PROCESSING if the device has not yet been stopped - * - * @note - * See fxmac.h for a description of the available options. - */ -FError FXmacClearOptions(FXmac *instance_p, u32 options, u32 queue_num) -{ - u32 reg; /* Generic */ - u32 reg_net_cfg; /* Reflects original contents of NET_CONFIG */ - u32 reg_new_net_cfg; /* Reflects new contents of NET_CONFIG */ - FError status; - FXmacConfig *config_p; - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == (u32)FT_COMPONENT_IS_READY); - config_p = &instance_p->config; - /* Be sure device has been stopped */ - if (instance_p->is_started == (u32)FT_COMPONENT_IS_STARTED) - { - status = (FError)(FXMAC_ERR_MAC_IS_PROCESSING); - } - else - { - /* Many of these options will change the NET_CONFIG registers. - * To reduce the amount of IO to the device, group these options here - * and change them all at once. - */ - /* Grab current register contents */ - reg_net_cfg = FXMAC_READREG32(instance_p->config.base_address, - FXMAC_NWCFG_OFFSET); - reg_new_net_cfg = reg_net_cfg; - /* There is only RX configuration!? - * It is configured in two different length, up to 1536 and 10240 bytes - */ - if ((options & FXMAC_FRAME1536_OPTION) != 0x00000000U) - { - reg_new_net_cfg &= (u32)(~FXMAC_NWCFG_1536RXEN_MASK); - } - - /* Turn off VLAN packet only */ - if ((options & FXMAC_VLAN_OPTION) != 0x00000000U) - { - reg_new_net_cfg &= (u32)(~FXMAC_NWCFG_NVLANDISC_MASK); - } - - /* Turn off FCS stripping on receive packets */ - if ((options & FXMAC_FCS_STRIP_OPTION) != 0x00000000U) - { - reg_new_net_cfg &= (u32)(~FXMAC_NWCFG_FCS_REMOVE_MASK); - } - - /* Turn off length/type field checking on receive packets */ - if ((options & FXMAC_LENTYPE_ERR_OPTION) != 0x00000000U) - { - reg_new_net_cfg &= (u32)(~FXMAC_NWCFG_LENGTH_FIELD_ERROR_FRAME_DISCARD_MASK); - } - - /* Turn off flow control */ - if ((options & FXMAC_FLOW_CONTROL_OPTION) != 0x00000000U) - { - reg_new_net_cfg &= (u32)(~FXMAC_NWCFG_PAUSE_ENABLE_MASK); - } - - /* Turn off promiscuous frame filtering (all frames are received) */ - if ((options & FXMAC_PROMISC_OPTION) != 0x00000000U) - { - reg_new_net_cfg &= (u32)(~FXMAC_NWCFG_COPYALLEN_MASK); - } - - /* Disallow broadcast address filtering => broadcast reception */ - if ((options & FXMAC_BROADCAST_OPTION) != 0x00000000U) - { - reg_new_net_cfg |= FXMAC_NWCFG_BCASTDI_MASK; - } - - /* Disallow multicast address filtering */ - if ((options & FXMAC_MULTICAST_OPTION) != 0x00000000U) - { - reg_new_net_cfg &= (u32)(~FXMAC_NWCFG_MCASTHASHEN_MASK); - } - - /* Disable RX checksum offload */ - if ((options & FXMAC_RX_CHKSUM_ENABLE_OPTION) != 0x00000000U) - { - reg_new_net_cfg &= (u32)(~FXMAC_NWCFG_RXCHKSUMEN_MASK); - } - - /* Disable jumbo frames */ - if (((options & FXMAC_JUMBO_ENABLE_OPTION) != 0x00000000U)) /* 恢复之前buffer 容量 */ - { - - instance_p->max_mtu_size = FXMAC_MTU; - instance_p->max_frame_size = FXMAC_MAX_FRAME_SIZE; - - reg_new_net_cfg &= (u32)(~FXMAC_NWCFG_JUMBO_MASK); - reg = FXMAC_READREG32(instance_p->config.base_address, - FXMAC_DMACR_OFFSET); - reg &= ~FXMAC_DMACR_RXBUF_MASK; - FXMAC_WRITEREG32(config_p->base_address, - FXMAC_TXQSEGALLOC_QLOWER_OFFSET,FXMAC_TXQSEGALLOC_QLOWER_CLEAN_MASK); - - if (queue_num == 0) - { - u32 rx_buf_size = 0; - - reg = FXMAC_READREG32(instance_p->config.base_address, FXMAC_DMACR_OFFSET); - reg &= ~FXMAC_DMACR_RXBUF_MASK; - - rx_buf_size = ((u32)instance_p->max_frame_size / (u32)FXMAC_RX_BUF_UNIT); - rx_buf_size += ((u32)instance_p->max_frame_size % ((u32)FXMAC_RX_BUF_UNIT) != (u32)0) ? 1U : 0U; - - reg |= ((rx_buf_size << (u32)(FXMAC_DMACR_RXBUF_SHIFT)) & (u32)(FXMAC_DMACR_RXBUF_MASK)); - - FXMAC_WRITEREG32(instance_p->config.base_address, FXMAC_DMACR_OFFSET, reg); - } - else if (queue_num < instance_p->config.max_queue_num) - { - u32 rx_buf_size = 0; - rx_buf_size = ((u32)instance_p->max_frame_size / (u32)FXMAC_RX_BUF_UNIT); - rx_buf_size += (((u32)instance_p->max_frame_size % (u32)FXMAC_RX_BUF_UNIT) != (u32)0) ? 1U : 0U; - - FXMAC_WRITEREG32(config_p->base_address, FXMAC_RXBUFQX_SIZE_OFFSET(queue_num), rx_buf_size & FXMAC_RXBUFQX_SIZE_MASK); - } - } - - if (((options & FXMAC_SGMII_ENABLE_OPTION) != 0x00000000U)) - { - reg_new_net_cfg &= (u32)(~(FXMAC_NWCFG_SGMII_MODE_ENABLE_MASK | - FXMAC_NWCFG_PCSSEL_MASK)); - } - - if ((options & FXMAC_LOOPBACK_NO_MII_OPTION) != 0x00000000U) - { - reg = FXMAC_READREG32(config_p->base_address, FXMAC_NWCTRL_OFFSET); - reg &= (u32)(~FXMAC_NWCTRL_LOOPBACK_LOCAL_MASK); - FXMAC_WRITEREG32(config_p->base_address, FXMAC_NWCTRL_OFFSET, reg); - } - - if ((options & FXMAC_LOOPBACK_USXGMII_OPTION) != 0x00000000U) - { - FXMAC_WRITEREG32(config_p->base_address, FXMAC_TEST_CONTROL_OFFSET, (FXMAC_READREG32(config_p->base_address, FXMAC_TEST_CONTROL_OFFSET) & ~2)); - } - - /* Officially change the NET_CONFIG registers if it needs to be - * modified. - */ - if (reg_net_cfg != reg_new_net_cfg) - { - FXMAC_WRITEREG32(instance_p->config.base_address, - FXMAC_NWCFG_OFFSET, reg_new_net_cfg); - } - - /* Disable TX checksum offload */ - if ((options & FXMAC_TX_CHKSUM_ENABLE_OPTION) != 0x00000000U) - { - reg = FXMAC_READREG32(instance_p->config.base_address, - FXMAC_DMACR_OFFSET); - reg &= (u32)(~FXMAC_DMACR_TCPCKSUM_MASK); - FXMAC_WRITEREG32(instance_p->config.base_address, - FXMAC_DMACR_OFFSET, reg); - } - - /* Disable transmitter */ - if ((options & FXMAC_TRANSMITTER_ENABLE_OPTION) != 0x00000000U) - { - reg = FXMAC_READREG32(instance_p->config.base_address, - FXMAC_NWCTRL_OFFSET); - reg &= (u32)(~FXMAC_NWCTRL_TXEN_MASK); - FXMAC_WRITEREG32(instance_p->config.base_address, - FXMAC_NWCTRL_OFFSET, reg); - } - - /* Disable receiver */ - if ((options & FXMAC_RECEIVER_ENABLE_OPTION) != 0x00000000U) - { - reg = FXMAC_READREG32(instance_p->config.base_address, - FXMAC_NWCTRL_OFFSET); - reg &= (u32)(~FXMAC_NWCTRL_RXEN_MASK); - FXMAC_WRITEREG32(instance_p->config.base_address, - FXMAC_NWCTRL_OFFSET, reg); - } - - /* The remaining options not handled here are managed elsewhere in the - * driver. No register modifications are needed at this time. Reflecting - * option in instance_p->options is good enough for now. - */ - - /* Set options word to its new value */ - instance_p->options &= ~options; - - status = (FError)(FT_SUCCESS); - } - return status; -} - - -/** - * Clear the Hash registers for the mac address pointed by address_ptr. - * - * @param instance_p is a pointer to the instance to be worked on. - * - */ -void FXmacClearHash(FXmac *instance_p) -{ - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == (u32)FT_COMPONENT_IS_READY); - - FXMAC_WRITEREG32(instance_p->config.base_address, - FXMAC_HASHL_OFFSET, 0x0U); - - /* write bits [63:32] in TOP */ - FXMAC_WRITEREG32(instance_p->config.base_address, - FXMAC_HASHH_OFFSET, 0x0U); -} - - -/** - * Write data to the specified PHY register. The Ethernet driver does not - * require the device to be stopped before writing to the PHY. Although it is - * probably a good idea to stop the device, it is the responsibility of the - * application to deem this necessary. The MAC provides the driver with the - * ability to talk to a PHY that adheres to the Media Independent Interface - * (MII) as defined in the IEEE 802.3 standard. - * - * Prior to PHY access with this function, the user should have setup the MDIO - * clock with FXmacSetMdioDivisor(). - * - * @param instance_p is a pointer to the FXmac instance to be worked on. - * @param phy_address is the address of the PHY to be written (supports multiple - * PHYs) - * @param register_num is the register number, 0-31, of the specific PHY register - * to write - * @param phy_data is the 16-bit value that will be written to the register - * - * @return - * - * - FT_SUCCESS if the PHY was written to successfully. Since there is no error - * status from the MAC on a write, the user should read the PHY to verify the - * write was successful. - * - FXMAC_ERR_PHY_BUSY if there is another PHY operation in progress - * - * @note - * - * This function is not thread-safe. The user must provide mutually exclusive - * access to this function if there are to be multiple threads that can call it. - * - * There is the possibility that this function will not return if the hardware - * is broken (i.e., it never sets the status bit indicating that the write is - * done). If this is of concern to the user, the user should provide a mechanism - * suitable to their needs for recovery. - * - * For the duration of this function, all host interface reads and writes are - * blocked to the current FXmac instance. - * - ******************************************************************************/ -FError FXmacPhyWrite(FXmac *instance_p, u32 phy_address, - u32 register_num, u16 phy_data) -{ - u32 mgtcr; - volatile u32 ipisr; - u32 ip_write_temp; - FError status; - - FASSERT(instance_p != NULL); - - /* Make sure no other PHY operation is currently in progress */ - if ((!(FXMAC_READREG32(instance_p->config.base_address, - FXMAC_NWSR_OFFSET) & - FXMAC_NWSR_MDIOIDLE_MASK)) == TRUE) - { - status = (FError)(FXMAC_ERR_PHY_BUSY); - } - else - { - /* Construct mgtcr mask for the operation */ - mgtcr = FXMAC_PHYMNTNC_OP_MASK | FXMAC_PHYMNTNC_OP_W_MASK | - (phy_address << FXMAC_PHYMNTNC_PHAD_SHFT_MSK) | - (register_num << FXMAC_PHYMNTNC_PREG_SHFT_MSK) | (u32)phy_data; - - /* Write mgtcr and wait for completion */ - FXMAC_WRITEREG32(instance_p->config.base_address, - FXMAC_PHYMNTNC_OFFSET, mgtcr); - - do - { - ipisr = FXMAC_READREG32(instance_p->config.base_address, - FXMAC_NWSR_OFFSET); - ip_write_temp = ipisr; - } - while ((ip_write_temp & FXMAC_NWSR_MDIOIDLE_MASK) == 0x00000000U); - - status = (FError)(FT_SUCCESS); - } - return status; -} - - -/** - * Read the current value of the PHY register indicated by the phy_address and - * the register_num parameters. The MAC provides the driver with the ability to - * talk to a PHY that adheres to the Media Independent Interface (MII) as - * defined in the IEEE 802.3 standard. - * - * - * @param instance_p is a pointer to the FXmac instance to be worked on. - * @param phy_address is the address of the PHY to be read (supports multiple - * PHYs) - * @param register_num is the register number, 0-31, of the specific PHY register - * to read - * @param phydat_aptr is an output parameter, and points to a 16-bit buffer into - * which the current value of the register will be copied. - * - * @return - * - * - FT_SUCCESS if the PHY was read from successfully - * - FXMAC_ERR_PHY_BUSY if there is another PHY operation in progress - * - * @note - * - * This function is not thread-safe. The user must provide mutually exclusive - * access to this function if there are to be multiple threads that can call it. - * - * There is the possibility that this function will not return if the hardware - * is broken (i.e., it never sets the status bit indicating that the read is - * done). If this is of concern to the user, the user should provide a mechanism - * suitable to their needs for recovery. - * - * For the duration of this function, all host interface reads and writes are - * blocked to the current FXmac instance. - * - ******************************************************************************/ -FError FXmacPhyRead(FXmac *instance_p, u32 phy_address, - u32 register_num, u16 *phydat_aptr) -{ - u32 mgtcr; - volatile u32 ipisr; - u32 IpReadTemp; - FError status; - - FASSERT(instance_p != NULL); - - /* Make sure no other PHY operation is currently in progress */ - if ((!(FXMAC_READREG32(instance_p->config.base_address, - FXMAC_NWSR_OFFSET) & - FXMAC_NWSR_MDIOIDLE_MASK)) == TRUE) - { - status = (FError)(FXMAC_ERR_PHY_BUSY); - } - else - { - /* Construct mgtcr mask for the operation */ - mgtcr = FXMAC_PHYMNTNC_OP_MASK | FXMAC_PHYMNTNC_OP_R_MASK | - (phy_address << FXMAC_PHYMNTNC_PHAD_SHFT_MSK) | - (register_num << FXMAC_PHYMNTNC_PREG_SHFT_MSK); - - /* Write mgtcr and wait for completion */ - FXMAC_WRITEREG32(instance_p->config.base_address, - FXMAC_PHYMNTNC_OFFSET, mgtcr); - - do - { - ipisr = FXMAC_READREG32(instance_p->config.base_address, - FXMAC_NWSR_OFFSET); - IpReadTemp = ipisr; - } - while ((IpReadTemp & FXMAC_NWSR_MDIOIDLE_MASK) == 0x00000000U); - - /* Read data */ - *phydat_aptr = (u16)FXMAC_READREG32(instance_p->config.base_address, - FXMAC_PHYMNTNC_OFFSET); - status = (FError)(FT_SUCCESS); - } - return status; -} - -boolean FXmacUsxLinkStatus(FXmac *instance_p) -{ - u32 reg = 0; - FASSERT(instance_p != NULL); - - reg = FXMAC_READREG32(instance_p->config.base_address, FXMAC_GEM_USX_STATUS_OFFSET); - if (reg & FXMAC_GEM_USX_STATUS_BLOCK_LOCK) - { - return TRUE; - } - else - { - return FALSE; - } -} diff --git a/bsp/phytium/libraries/standalone/drivers/eth/fxmac/fxmac_phy.c b/bsp/phytium/libraries/standalone/drivers/eth/fxmac/fxmac_phy.c deleted file mode 100644 index f8ea684af2..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/eth/fxmac/fxmac_phy.c +++ /dev/null @@ -1,373 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fxmac_phy.c - * Date: 2022-04-06 14:46:52 - * LastEditTime: 2022-04-06 14:46:58 - * Description:  This file is for phy types. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/06/16 first release - */ - -#include "fxmac.h" -#include "eth_ieee_reg.h" -#include "fdebug.h" -#include "sdkconfig.h" - -#if defined(CONFIG_FXMAC_PHY_YT) - #include "phy_yt.h" -#endif - - -#define FXMAC_DEBUG_TAG "FXMAC_PHY" -#define FXMAC_ERROR(format, ...) FT_DEBUG_PRINT_E(FXMAC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FXMAC_INFO(format, ...) FT_DEBUG_PRINT_I(FXMAC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FXMAC_DEBUG(format, ...) FT_DEBUG_PRINT_D(FXMAC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FXMAC_WARN(format, ...) FT_DEBUG_PRINT_W(FXMAC_DEBUG_TAG, format, ##__VA_ARGS__) - -static FXmac *instance_b; -static u32 phy_addr_b; - -static FError FXmacDetect(FXmac *instance_p, u32 *phy_addr_p) -{ - u32 phy_addr = 0, i = 0, index; - u16 phy_reg = 0, phy_id1_reg, phy_id2_reg; - FError ret; - instance_b = instance_p; - - for (phy_addr = 0; phy_addr < FXMAC_PHY_MAX_NUM; phy_addr++) - { - ret = FXmacPhyRead(instance_p, phy_addr, PHY_STATUS_REG_OFFSET, &phy_reg); - if (ret != FT_SUCCESS) - { - FXMAC_ERROR("Phy operation is busy."); - return ret; - } - FXMAC_INFO("Phy status reg is %x", phy_reg); - if (phy_reg != 0xffff) - { - ret = FXmacPhyRead(instance_p, phy_addr, PHY_IDENTIFIER_1_REG, &phy_id1_reg); - ret |= FXmacPhyRead(instance_p, phy_addr, PHY_IDENTIFIER_2_REG, &phy_id2_reg); - FXMAC_INFO("Phy id1 reg is 0x%x", phy_id1_reg); - FXMAC_INFO("Phy id2 reg is 0x%x", phy_id2_reg); - if ((ret == FT_SUCCESS) && (phy_id2_reg != 0) && (phy_id1_reg != 0xffff) && (phy_id1_reg != 0xffff)) - { - *phy_addr_p = phy_addr; - phy_addr_b = phy_addr; - FXMAC_INFO("Phy addr is 0x%x", phy_addr); - return FT_SUCCESS; - } - } - } - - return FT_SUCCESS; -} - -static FError FXmacGetIeeePhySpeed(FXmac *instance_p, u32 phy_addr) -{ - u16 temp, temp2; - u16 control; - u16 status; - u16 partner_capabilities; - u32 negotitation_timeout_cnt = 0; - FError ret; - volatile s32 wait; - - FXMAC_INFO("Start phy auto negotiation."); - - ret = FXmacPhyRead(instance_p, phy_addr, PHY_CONTROL_REG_OFFSET, &control); - if (ret != FT_SUCCESS) - { - FXMAC_ERROR("%s:%d,read PHY_CONTROL_REG_OFFSET is error", __func__, __LINE__); - return ret; - } - control |= PHY_CONTROL_RESET_MASK; - - ret = FXmacPhyWrite(instance_p, phy_addr, PHY_CONTROL_REG_OFFSET, control); - if (ret != FT_SUCCESS) - { - FXMAC_ERROR("%s:%d,write PHY_CONTROL_REG_OFFSET is error", __func__, __LINE__); - return ret; - } - for (wait = 0; wait < 100000; wait++) - ; - FXMAC_INFO(" Phy reset end."); - ret = FXmacPhyRead(instance_p, phy_addr, PHY_CONTROL_REG_OFFSET, &control); - if (ret != FT_SUCCESS) - { - FXMAC_ERROR("%s:%d,read PHY_CONTROL_REG_OFFSET is error", __func__, __LINE__); - return ret; - } - - control |= PHY_CONTROL_AUTONEGOTIATE_ENABLE; - control |= PHY_CONTROL_AUTONEGOTIATE_RESTART; - ret = FXmacPhyWrite(instance_p, phy_addr, PHY_CONTROL_REG_OFFSET, control); - if (ret != FT_SUCCESS) - { - FXMAC_ERROR("%s:%d,write PHY_CONTROL_REG_OFFSET is error", __func__, __LINE__); - return ret; - } - - FXMAC_INFO("Waiting for phy to complete auto negotiation."); - - ret = FXmacPhyRead(instance_p, phy_addr, PHY_STATUS_REG_OFFSET, &status); - if (ret != FT_SUCCESS) - { - FXMAC_ERROR("%s:%d,read PHY_CONTROL_REG_OFFSET is error", __func__, __LINE__); - return ret; - } - - - while (!(status & PHY_STATUS_AUTONEGOTIATE_COMPLETE)) - { - for (wait = 0; wait < 1000000; wait++) - ; - ret = FXmacPhyRead(instance_p, phy_addr, PHY_STATUS_REG_OFFSET, &status); - if (ret != FT_SUCCESS) - { - FXMAC_ERROR("%s:%d,read PHY_STATUS_REG_OFFSET is error", __func__, __LINE__); - return ret; - } - - - if (negotitation_timeout_cnt++ >= 0xfff) - { - FXMAC_ERROR("Auto negotiation is error."); - return FXMAC_PHY_AUTO_AUTONEGOTIATION_FAILED; - } - } - FXMAC_INFO("Auto negotiation complete."); - - ret = FXmacPhyRead(instance_p, phy_addr, PHY_SPECIFIC_STATUS_REG, &temp); - if (ret != FT_SUCCESS) - { - FXMAC_ERROR("%s:%d,read PHY_SPECIFIC_STATUS_REG is error", __func__, __LINE__); - return ret; - } - - FXMAC_INFO("Temp is 0x%x", temp); - ret = FXmacPhyRead(instance_p, phy_addr, PHY_STATUS_REG_OFFSET, &temp2); - if (ret != FT_SUCCESS) - { - FXMAC_ERROR("%s:%d,read PHY_STATUS_REG_OFFSET is error", __func__, __LINE__); - return ret; - } - - FXMAC_INFO("Temp2 is 0x%x", temp2); - - if (temp & (1 << 13)) - { - FXMAC_INFO("Duplex is full."); - instance_p->config.duplex = 1; - } - else - { - FXMAC_INFO("Duplex is half."); - instance_p->config.duplex = 0; - } - - if ((temp & 0xC000) == PHY_SPECIFIC_STATUS_SPEED_1000M) - { - FXMAC_INFO("Speed is 1000M."); - instance_p->config.speed = 1000; - } - else if ((temp & 0xC000) == PHY_SPECIFIC_STATUS_SPEED_100M) - { - FXMAC_INFO("Speed is 100M."); - instance_p->config.speed = 100; - } - else - { - FXMAC_INFO("Speed is 10M."); - instance_p->config.speed = 10; - } - - return FT_SUCCESS; -} - -void FxmaxLinkupCheck(void) -{ - u16 temp; - FXmacPhyRead(instance_b, phy_addr_b, PHY_SPECIFIC_STATUS_REG, &temp); - FXMAC_INFO("Reg 0x17 value is 0x%x", temp); - FXMAC_INFO("Linkup status is 0x%x", temp & (1 << 10)); -} - - -static FError FXmacConfigureIeeePhySpeed(FXmac *instance_p, u32 phy_addr, u32 speed, u32 duplex_mode) -{ - u16 control; - u16 autonereg; - volatile s32 wait; - FError ret; - u16 specific_reg = 0; - - FXMAC_INFO("Manual setting ,phy_addr is %d,speed %d, duplex_mode is %d.", phy_addr, speed, duplex_mode); - - ret = FXmacPhyRead(instance_p, phy_addr, PHY_AUTONEGO_ADVERTISE_REG, &autonereg); - if (ret != FT_SUCCESS) - { - FXMAC_ERROR("%s:%d,read PHY_AUTONEGO_ADVERTISE_REG is error.", __func__, __LINE__); - return ret; - } - - autonereg |= PHY_AUTOADVERTISE_ASYMMETRIC_PAUSE_MASK; - autonereg |= PHY_AUTOADVERTISE_PAUSE_MASK; - ret = FXmacPhyWrite(instance_p, phy_addr, PHY_AUTONEGO_ADVERTISE_REG, autonereg); - if (ret != FT_SUCCESS) - { - FXMAC_ERROR("%s:%d,write PHY_AUTONEGO_ADVERTISE_REG is error.", __func__, __LINE__); - return ret; - } - - - ret = FXmacPhyRead(instance_p, phy_addr, PHY_CONTROL_REG_OFFSET, &control); - if (ret != FT_SUCCESS) - { - FXMAC_ERROR("%s:%d,read PHY_AUTONEGO_ADVERTISE_REG is error.", __func__, __LINE__); - return ret; - } - FXMAC_INFO("PHY_CONTROL_REG_OFFSET is 0x%x.", control); - - - control &= ~PHY_CONTROL_LINKSPEED_1000M; - control &= ~PHY_CONTROL_LINKSPEED_100M; - control &= ~PHY_CONTROL_LINKSPEED_10M; - - if (speed == 1000) - { - control |= PHY_CONTROL_LINKSPEED_1000M; - } - else if (speed == 100) - { - control |= PHY_CONTROL_LINKSPEED_100M; - } - else if (speed == 10) - { - control |= PHY_CONTROL_LINKSPEED_10M; - } - - if (duplex_mode == 1) - { - control |= PHY_CONTROL_FULL_DUPLEX_MASK; - } - else - { - control &= ~PHY_CONTROL_FULL_DUPLEX_MASK; - } - - /* disable auto-negotiation */ - control &= ~(PHY_CONTROL_AUTONEGOTIATE_ENABLE); - control &= ~(PHY_CONTROL_AUTONEGOTIATE_RESTART); - - ret = FXmacPhyWrite(instance_p, phy_addr, PHY_CONTROL_REG_OFFSET, control); /* Technology Ability Field */ - if (ret != FT_SUCCESS) - { - FXMAC_ERROR("%s:%d,write PHY_AUTONEGO_ADVERTISE_REG is error.", __func__, __LINE__); - return ret; - } - - for (wait = 0; wait < 100000; wait++) - ; - - FXMAC_INFO("Manual selection completed."); - - ret = FXmacPhyRead(instance_p, phy_addr, PHY_SPECIFIC_STATUS_REG, &specific_reg); - if (ret != FT_SUCCESS) - { - FXMAC_ERROR("%s:%d,read PHY_SPECIFIC_STATUS_REG is error.", __func__, __LINE__); - return ret; - } - - FXMAC_INFO("Specific reg is 0x%x.", specific_reg); - - if (specific_reg & (1 << 13)) - { - FXMAC_INFO("Duplex is full."); - instance_p->config.duplex = 1; - } - else - { - FXMAC_INFO("Duplex is half."); - instance_p->config.duplex = 0; - } - - if ((specific_reg & 0xC000) == PHY_SPECIFIC_STATUS_SPEED_1000M) - { - FXMAC_INFO("Speed is 1000M."); - instance_p->config.speed = 1000; - } - else if ((specific_reg & 0xC000) == PHY_SPECIFIC_STATUS_SPEED_100M) - { - FXMAC_INFO("Speed is 100M."); - instance_p->config.speed = 100; - } - else - { - FXMAC_INFO("Speed is 10M."); - instance_p->config.speed = 10; - } - - return FT_SUCCESS; -} - -/** - * @name: FXmacPhyInit - * @msg: setup the PHYs for proper speed setting. - * @param {FXmac} *instance_p is a pointer to the instance to be worked on. - * @param {u32} speed is phy operating speed - * @param {u32} phy_addr is the address of the PHY to be read (supports multiple PHYs) - * @param {u32} duplex_mode is The duplex mode can be selected via either the Auto-Negotiation process or manual duplex selection. - * @param {u32} autonegotiation_en is an auto-negotiated flag . 1 is enable auto ,0 is manual - * @return {FError} - */ -FError FXmacPhyInit(FXmac *instance_p, u32 speed, u32 duplex_mode, u32 autonegotiation_en) -{ - FError ret; - u32 index = 0, phy_mask; - u16 phy_identity; - u32 phy_addr; - - if (FXmacDetect(instance_p, &phy_addr) != FT_SUCCESS) - { - FXMAC_ERROR("Phy is not found."); - return FXMAC_PHY_IS_NOT_FOUND; - } - FXMAC_INFO("Setting phy addr is %d.", phy_addr); - instance_p->phy_address = phy_addr; - if (autonegotiation_en) - { - ret = FXmacGetIeeePhySpeed(instance_p, phy_addr); - if (ret != FT_SUCCESS) - { - return ret; - } - } - else - { - FXMAC_INFO("Set the communication speed manually."); - ret = FXmacConfigureIeeePhySpeed(instance_p, phy_addr, speed, duplex_mode); - if (ret != FT_SUCCESS) - { - FXMAC_ERROR("Failed to manually set the phy."); - return ret; - } - - } - - instance_p->link_status = FXMAC_LINKUP; - return FT_SUCCESS; -} diff --git a/bsp/phytium/libraries/standalone/drivers/eth/fxmac/fxmac_phy.h b/bsp/phytium/libraries/standalone/drivers/eth/fxmac/fxmac_phy.h deleted file mode 100644 index b8f4b293b4..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/eth/fxmac/fxmac_phy.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fxmac_phy.h - * Date: 2022-04-06 14:46:52 - * LastEditTime: 2022-04-06 14:46:58 - * Description:  This file is for phy configuration. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/06/16 first release - */ - -#ifndef FXMAC_PHY_H -#define FXMAC_PHY_H - -#ifdef __cplusplus -extern "C" -{ -#endif - - -#ifdef __cplusplus -} -#endif - -#endif // ! \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/eth/fxmac/fxmac_sinit.c b/bsp/phytium/libraries/standalone/drivers/eth/fxmac/fxmac_sinit.c deleted file mode 100644 index a9ac785158..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/eth/fxmac/fxmac_sinit.c +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fxmac_sinit.c - * Date: 2022-04-06 14:46:52 - * LastEditTime: 2022-04-06 14:46:58 - * Description:  This file is for the implementation of the xmac driver's static - * initialization functionality. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/06/16 first release - */ - -#include "fxmac.h" -#include "fparameters.h" - -extern const FXmacConfig fxmac_cfg_tbl[FXMAC_NUM]; - -const FXmacConfig *FXmacLookupConfig(u32 instance_id) -{ - const FXmacConfig *cfg_ptr = NULL; - u32 index; - for (index = 0; index < (u32)FXMAC_NUM; index++) - { - if (fxmac_cfg_tbl[index].instance_id == instance_id) - { - cfg_ptr = &fxmac_cfg_tbl[index]; - break; - } - } - - return (const FXmacConfig *)cfg_ptr; -} diff --git a/bsp/phytium/libraries/standalone/drivers/eth/fxmac/phy/eth_ieee_reg.h b/bsp/phytium/libraries/standalone/drivers/eth/fxmac/phy/eth_ieee_reg.h deleted file mode 100644 index 3851bdeefa..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/eth/fxmac/phy/eth_ieee_reg.h +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: eth_ieee_reg.h - * Date: 2022-04-06 14:46:52 - * LastEditTime: 2022-04-06 14:46:58 - * Description:  This file is for phys chip register definition - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/06/16 first release - */ - -#ifndef ETH_IEEE_REG_H -#define ETH_IEEE_REG_H - -/***************************** Include Files *********************************/ -#include "ferror_code.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/***************** Macros (Inline Functions) Definitions *********************/ - -#define PHY_CONTROL_REG_OFFSET 0 -#define PHY_STATUS_REG_OFFSET 1 -#define PHY_IDENTIFIER_1_REG 2 -#define PHY_IDENTIFIER_2_REG 3 -#define PHY_AUTONEGO_ADVERTISE_REG 4 -#define PHY_PARTNER_ABILITIES_1_REG_OFFSET 5 -#define PHY_PARTNER_ABILITIES_2_REG_OFFSET 8 -#define PHY_PARTNER_ABILITIES_3_REG_OFFSET 10 -#define PHY_1000_ADVERTISE_REG_OFFSET 9 -#define PHY_MMD_ACCESS_CONTROL_REG 13 -#define PHY_MMD_ACCESS_ADDRESS_DATA_REG 14 -#define PHY_SPECIFIC_STATUS_REG 17 - -#define PHY_CONTROL_FULL_DUPLEX_MASK 0x0100 -#define PHY_CONTROL_LINKSPEED_MASK 0x0040 -#define PHY_CONTROL_LINKSPEED_1000M 0x0040 -#define PHY_CONTROL_LINKSPEED_100M 0x2000 -#define PHY_CONTROL_LINKSPEED_10M 0x0000 -#define PHY_CONTROL_RESET_MASK 0x8000 - -#define PHY_CONTROL_AUTONEGOTIATE_ENABLE 0x1000 -#define PHY_CONTROL_AUTONEGOTIATE_RESTART 0x0200 - -#define PHY_STATUS_AUTONEGOTIATE_COMPLETE 0x0020 -#define PHY_STAT_LINK_STATUS 0x0004 - -#define PHY_AUTOADVERTISE_ASYMMETRIC_PAUSE_MASK 0x0800 -#define PHY_AUTOADVERTISE_PAUSE_MASK 0x0400 -#define PHY_AUTOADVERTISE_AUTONEG_ERROR_MASK 0x8000 - -/* Advertisement control register. */ -#define PHY_AUTOADVERTISE_10HALF 0x0020 /* Try for 10mbps half-duplex */ -#define PHY_AUTOADVERTISE_1000XFULL 0x0020 /* Try for 1000BASE-X full-duplex */ -#define PHY_AUTOADVERTISE_10FULL 0x0040 /* Try for 10mbps full-duplex */ -#define PHY_AUTOADVERTISE_1000XHALF 0x0040 /* Try for 1000BASE-X half-duplex */ -#define PHY_AUTOADVERTISE_100HALF 0x0080 /* Try for 100mbps half-duplex */ -#define PHY_AUTOADVERTISE_1000XPAUSE 0x0080 /* Try for 1000BASE-X pause */ -#define PHY_AUTOADVERTISE_100FULL 0x0100 /* Try for 100mbps full-duplex */ -#define PHY_AUTOADVERTISE_1000XPSE_ASYM 0x0100 /* Try for 1000BASE-X asym pause */ -#define PHY_AUTOADVERTISE_100BASE4 0x0200 /* Try for 100mbps 4k packets */ - -#define PHY_AUTOADVERTISE_100_AND_10 (PHY_AUTOADVERTISE_10FULL | PHY_AUTOADVERTISE_100FULL | \ - PHY_AUTOADVERTISE_10HALF | PHY_AUTOADVERTISE_100HALF) -#define PHY_AUTOADVERTISE_100 (PHY_AUTOADVERTISE_100FULL | PHY_AUTOADVERTISE_100HALF) -#define PHY_AUTOADVERTISE_10 (PHY_AUTOADVERTISE_10FULL | PHY_AUTOADVERTISE_10HALF) - -#define PHY_AUTOADVERTISE_1000 0x0300 - -#define PHY_SPECIFIC_STATUS_SPEED_1000M (2L << 14) -#define PHY_SPECIFIC_STATUS_SPEED_100M (1L << 14) -#define PHY_SPECIFIC_STATUS_SPEED_0M (0L << 14) - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -typedef FError(*EthPhyWrite)(void *instance_p, u32 phy_address, u32 phy_reg_offset, u16 phy_data); -typedef FError(*EthPhyRead)(void *instance_p, u32 phy_address, u32 phy_reg_offset, u16 *phy_data_p); - -/************************** Variable Definitions *****************************/ - -/************************** Function Prototypes ******************************/ - -#ifdef __cplusplus -} -#endif - -#endif // ! diff --git a/bsp/phytium/libraries/standalone/drivers/eth/fxmac/phy/yt/phy_yt.c b/bsp/phytium/libraries/standalone/drivers/eth/fxmac/phy/yt/phy_yt.c deleted file mode 100644 index 83f7726dfb..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/eth/fxmac/phy/yt/phy_yt.c +++ /dev/null @@ -1,216 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: phy_yt.c - * Date: 2022-04-06 14:46:52 - * LastEditTime: 2022-04-06 14:46:58 - * Description:  This file is for yt PHYs chip - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/06/16 first release - */ - -#include "phy_yt.h" -#include "fdebug.h" - -#define PHY_YT_DEBUG_TAG "PHY_YT" -#define PHY_YT_ERROR(format, ...) FT_DEBUG_PRINT_E(PHY_YT_DEBUG_TAG, format, ##__VA_ARGS__) -#define PHY_YT_INFO(format, ...) FT_DEBUG_PRINT_I(PHY_YT_DEBUG_TAG, format, ##__VA_ARGS__) -#define PHY_YT_DEBUG(format, ...) FT_DEBUG_PRINT_D(PHY_YT_DEBUG_TAG, format, ##__VA_ARGS__) -#define PHY_YT_WARN(format, ...) FT_DEBUG_PRINT_W(PHY_YT_DEBUG_TAG, format, ##__VA_ARGS__) - -#define PHY_YT_REG0_LOOPBACK 0x4000 - - -FError PhyYtCheckConnectStatus(void *instance_p, u32 phy_addr, EthPhyWrite write_p, EthPhyRead read_p) -{ - u16 phy_reg0 = 0; - FError status; - /* It's the address offset of the extended register - that will be Write or Read */ - status = write_p(instance_p, phy_addr, 0x1e, 0xa001); - if (status != FT_SUCCESS) - { - PHY_YT_ERROR("Write 0xa001 to 0x1e failed."); - return FETH_PHY_ERR_READ; - } - - status = read_p(instance_p, phy_addr, 0x1f, &phy_reg0); - if (status != FT_SUCCESS) - { - PHY_YT_ERROR("Read 0x1f reg failed."); - return FETH_PHY_ERR_READ; - } - - PHY_YT_INFO("Phy reg0 status is 0x%x", phy_reg0); - - return FT_SUCCESS; -} - -FError PhyYtSetLoopBack(void *instance_p, u32 phy_addr, EthPhyWrite write_p, EthPhyRead read_p) -{ - FError status; - u16 phy_reg0 = 0; - - status = read_p(instance_p, phy_addr, 0, &phy_reg0); - if (status != FT_SUCCESS) - { - PHY_YT_ERROR("Error setup phy loopback."); - return FETH_PHY_ERR_READ; - } - PHY_YT_INFO("Phy reg 0 is 0x%x", phy_reg0); - /* - * Enable loopback - */ - phy_reg0 |= PHY_YT_REG0_LOOPBACK; - status = write_p(instance_p, phy_addr, 0, phy_reg0); - - status = read_p(instance_p, phy_addr, 0, &phy_reg0); - if (status != FT_SUCCESS) - { - PHY_YT_ERROR("Error setup phy loopback."); - return FETH_PHY_ERR_READ; - } - - status = read_p(instance_p, phy_addr, 0, &phy_reg0); - if (status != FT_SUCCESS) - { - PHY_YT_ERROR("Error setup phy loopback."); - return FETH_PHY_ERR_READ; - } - PHY_YT_INFO("Phy reg 0 is 0x%x", phy_reg0); - - return FT_SUCCESS; -} - - -FError PhyChangeModeToSgmii(void *instance_p, u32 phy_addr, EthPhyWrite write_p, EthPhyRead read_p) -{ - FError status; - u16 phy_reg0 = 0; - - /* read default mode */ - status = write_p(instance_p, phy_addr, 0x1e, 0xa001); - if (status != FT_SUCCESS) - { - PHY_YT_ERROR("Write 0xa001 to reg 0x1e failed."); - return FETH_PHY_ERR_READ; - } - - - status = read_p(instance_p, phy_addr, 0x1f, &phy_reg0); - if (status != FT_SUCCESS) - { - PHY_YT_ERROR("Read reg 0x1f failed."); - return FETH_PHY_ERR_READ; - } - - PHY_YT_INFO("Default 0x1f status is 0x%x", phy_reg0); - - /* change mode to sds */ - status = write_p(instance_p, phy_addr, 0x1e, 0xa001); - if (status != FT_SUCCESS) - { - PHY_YT_ERROR("Write 0xa001 to reg 0x1e failed."); - return FETH_PHY_ERR_READ; - } - - status = write_p(instance_p, phy_addr, 0x1f, 0x8063); - if (status != FT_SUCCESS) - { - PHY_YT_ERROR("Write 0x8063 to reg 0x1f failed."); - return FETH_PHY_ERR_READ; - } - - /* read changged mode */ - status = write_p(instance_p, phy_addr, 0x1e, 0xa001); - if (status != FT_SUCCESS) - { - PHY_YT_ERROR("Write 0xa001 to reg 0x1e failed."); - return FETH_PHY_ERR_READ; - } - - - status = read_p(instance_p, phy_addr, 0x1f, &phy_reg0); - if (status != FT_SUCCESS) - { - PHY_YT_ERROR("Read reg 0x1f failed."); - return FETH_PHY_ERR_READ; - } - - PHY_YT_INFO("Read reg 0x1f status is 0x%x", phy_reg0); - - return FT_SUCCESS; -} - -FError PhyChangeModeToSds(void *instance_p, u32 phy_addr, EthPhyWrite write_p, EthPhyRead read_p) -{ - FError status; - u16 phy_reg0 = 0; - - /* read default mode */ - status = write_p(instance_p, phy_addr, 0x1e, 0xa000); - if (status != FT_SUCCESS) - { - PHY_YT_ERROR("Write 0xa000 to reg 0x1e failed."); - return FETH_PHY_ERR_READ; - } - - status = read_p(instance_p, phy_addr, 0x1f, &phy_reg0); - if (status != FT_SUCCESS) - { - PHY_YT_ERROR("Read reg 0x1f failed."); - return FETH_PHY_ERR_READ; - } - - PHY_YT_INFO("Read reg 0x1f status is 0x%x \r\n", phy_reg0); - - /* change mode to sds */ - status = write_p(instance_p, phy_addr, 0x1e, 0xa000); - if (status != FT_SUCCESS) - { - PHY_YT_ERROR("Write 0xa000 to reg 0x1e failed."); - return FETH_PHY_ERR_READ; - } - - status = write_p(instance_p, phy_addr, 0x1f, 0x2); - if (status != FT_SUCCESS) - { - PHY_YT_ERROR("Write 0x02 to reg 0x1f failed."); - return FETH_PHY_ERR_READ; - } - - /* read changged mode */ - status = write_p(instance_p, phy_addr, 0x1e, 0xa000); - if (status != FT_SUCCESS) - { - PHY_YT_ERROR("Write 0xa000 to reg 0x1e failed."); - return FETH_PHY_ERR_READ; - } - - status = read_p(instance_p, phy_addr, 0x1f, &phy_reg0); - if (status != FT_SUCCESS) - { - PHY_YT_ERROR("Read reg 0x1f failed."); - return FETH_PHY_ERR_READ; - } - - PHY_YT_INFO("Read reg 0x1f status is 0x%x \r\n", phy_reg0); - - return FT_SUCCESS; -} - - - diff --git a/bsp/phytium/libraries/standalone/drivers/eth/fxmac/phy/yt/phy_yt.h b/bsp/phytium/libraries/standalone/drivers/eth/fxmac/phy/yt/phy_yt.h deleted file mode 100644 index e223120d1b..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/eth/fxmac/phy/yt/phy_yt.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: phy_yt.h - * Date: 2022-04-06 14:46:52 - * LastEditTime: 2022-04-06 14:46:58 - * Description:  This file is for yt PHYs chip. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/06/16 first release - */ - -#ifndef PHY_YT_H -#define PHY_YT_H - -#include "ferror_code.h" -#include "eth_ieee_reg.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -#define FETH_PHY_ERR_READ FT_MAKE_ERRCODE(ErrModBsp, ErrEthPhy, 0x1u) - -FError PhyYtSetLoopBack(void *instance_p, u32 phy_addr, EthPhyWrite write_p, EthPhyRead read_p); -FError PhyYtCheckConnectStatus(void *instance_p, u32 phy_addr, EthPhyWrite write_p, EthPhyRead read_p); -FError PhyChangeModeToSds(void *instance_p, u32 phy_addr, EthPhyWrite write_p, EthPhyRead read_p); -FError PhyChangeModeToSgmii(void *instance_p, u32 phy_addr, EthPhyWrite write_p, EthPhyRead read_p); - -#ifdef __cplusplus -} -#endif - -#endif // ! \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/gic/Kconfig b/bsp/phytium/libraries/standalone/drivers/gic/Kconfig deleted file mode 100644 index 9946994e6d..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/gic/Kconfig +++ /dev/null @@ -1,6 +0,0 @@ - config ENABLE_GICV3 - bool - prompt "Use Generic Interrupt Controller v3" - default y - - \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/gic/fgic/fgic.c b/bsp/phytium/libraries/standalone/drivers/gic/fgic/fgic.c deleted file mode 100644 index 4431c8fc6e..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/gic/fgic/fgic.c +++ /dev/null @@ -1,675 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fgic.c - * Date: 2022-03-28 09:30:23 - * LastEditTime: 2022-03-28 09:30:24 - * Description: This file is for the minimum required function implementations for this driver. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/4/16 init commit - */ - -#include "fgic.h" -#include "fgic_distributor.h" -#include "fgic_cpu_interface.h" -#include "fgic_redistributor.h" -#include "fgic_hw.h" -#include "ftypes.h" -#include "fkernel.h" -#include "fassert.h" -#include "fdebug.h" - - -#define FGIC_DEBUG_TAG "FGIC" -#define FGIC_ERROR(format, ...) FT_DEBUG_PRINT_E(FGIC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FGIC_DEBUG_I(format, ...) FT_DEBUG_PRINT_I(FGIC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FGIC_DEBUG_W(format, ...) FT_DEBUG_PRINT_W(FGIC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FGIC_DEBUG_E(format, ...) FT_DEBUG_PRINT_E(FGIC_DEBUG_TAG, format, ##__VA_ARGS__) - - -#define FGIC_SPI_START_ID 32 -#define FGIC_PPI_END_ID 31 -#define FGIC_SGI_END_ID 15 - -#define FGIC_GICD_32_PER_REG 32 -#define FGIC_GICD_16_PER_REG 16 -#define FGIC_GICD_4_PER_REG 4 - -#define FGIC_INT_DEFAULT_PRI_X4 0xa0a0a0a0 /* 考虑到当前一般程序工作于EL1,对于NS 或 S 安全状态 ,0x80 - 0xff 的优先级都有存在的可能性 */ -#define FGIC_CPU_INTERFACE_DEFAULT_FILTER 0xFF - -typedef enum -{ - GICD_CTLR_RWP_WAIT = 0, /* Use GICD_CTLR for test */ - GICR_CTLR_RWP_WAIT, /* Use GICR_CTLR for test */ -} WAIT_RWP_MODE; - -/** - * @name: FGicWaitRwp - * @msg: Wait for register write pending - * @param {uintptr} ctrl_base is a GICD_CTLR address - * @param {WAIT_RWP_MODE} wait_mode - * @return {*} - */ -static FError FGicWaitRwp(uintptr ctrl_base, WAIT_RWP_MODE wait_mode) -{ - u32 rwp_mask; - u32 timeout_cnt = 0; - if (GICD_CTLR_RWP_WAIT == wait_mode) - { - rwp_mask = FGIC_GICD_CTLR_RWP_MASK; - } - else if (GICR_CTLR_RWP_WAIT == wait_mode) - { - rwp_mask = FGIC_GICR_CTLR_RWP_MASK; - } - else - { - FGIC_DEBUG_E(" wait_mode not in WAIT_RWP_MODE."); - return FGIC_CTLR_ERR_TYPE; - } - - while (FGIC_READREG32(ctrl_base, 0) & rwp_mask) - { - if (timeout_cnt ++ >= 0xffffff) - { - FGIC_DEBUG_E(" Wait rwp timeout."); - return FGIC_CTLR_ERR_IN_GET; - } - } - - return FGIC_SUCCESS; -} - -/** - * @name: void FGicDistrubutiorInit(FGic *instance_p) - * @msg: Initialize Distrubutior - * @param {FGic} *instance_p is a pointer to the FGic instance. - */ -void FGicDistrubutiorInit(FGic *instance_p) -{ - FASSERT(instance_p); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - u32 max_ints_mun, int_id, int_index; - uintptr dis_base = instance_p->config.dis_base; - max_ints_mun = instance_p->max_spi_num; - /* Disable the distributor */ - FGIC_WRITEREG32(dis_base, FGIC_GICD_CTLR_OFFSET, 0); - FASSERT(FGicWaitRwp(dis_base + FGIC_GICD_CTLR_OFFSET, GICD_CTLR_RWP_WAIT) == FGIC_SUCCESS); - - if (instance_p->security == ONE_NS_SECURITY_STATE) - { - /* Make GICD_CTLR.DS = 1 ,Non-secure accesses are permitted to access and modify registers that control Group 0 interrupts */ - FGIC_SETBIT(dis_base, FGIC_GICD_CTLR_OFFSET, FGIC_GICD_CTLR_DS_MASK); - FASSERT(FGIC_READREG32(dis_base, FGIC_GICD_CTLR_OFFSET) & FGIC_GICD_CTLR_DS_MASK); - } - - /* 关闭所有中断,并将中断分组默认为group 1 */ - for (int_id = FGIC_SPI_START_ID; int_id < max_ints_mun; int_id += FGIC_GICD_32_PER_REG) - { - int_index = int_id / FGIC_GICD_32_PER_REG; - /* Disables forwarding of the corresponding interrupt. */ - FGIC_GICD_ICENABLER_WRITE_N_MASK(dis_base, int_id, FGIC_GICD_ICENABLER_DEFAULT_MASK); - /* Changes the state of the corresponding interrupt from pending to inactive, or from active and pending to active. */ - FGIC_GICD_ICPENDR_WRITE_N_MASK(dis_base, int_id, FGIC_GICD_ICPENDR_DEFAULT_MASK); - - if (instance_p->security == ONE_NS_SECURITY_STATE) - { - FGIC_GICD_IGROUPR_WRITE_N_MASK(dis_base, int_id, FGIC_GICD_ICPENDR_DEFAULT_MASK); - } - else - { - FGIC_GICD_IGROUPR_WRITE_N_MASK(dis_base, int_id, FGIC_GICD_ICPENDR_DEFAULT_MASK); - } - FGIC_GICD_IGRPMODR_WRITE_N_MASK(dis_base, int_id, FGIC_GICD_IGRPMODR_DEFAULT_MASK); - } - - FASSERT(FGicWaitRwp(dis_base + FGIC_GICD_CTLR_OFFSET, GICD_CTLR_RWP_WAIT) == FGIC_SUCCESS); - - for (int_id = FGIC_SPI_START_ID; int_id < max_ints_mun; int_id += FGIC_GICD_4_PER_REG) - { - FGIC_GICD_IPRIORITYR_WRITE_N_MASK(dis_base, int_id, FGIC_INT_DEFAULT_PRI_X4); - } - - for (int_id = FGIC_SPI_START_ID; int_id < max_ints_mun; int_id += FGIC_GICD_16_PER_REG) - { - FGIC_GICD_ICFGR_WRITE_N_MASK(dis_base, int_id, 0); /* level-sensitive */ - } - - if (instance_p->security == ONE_NS_SECURITY_STATE) - { - FGIC_GICD_CTLR_WRITE(dis_base, GICD_CTLR_BIT_ARE_S | GICD_CTLR_ENABLE_GRP1_NS); - } - else - { - FGIC_GICD_CTLR_WRITE(dis_base, GICD_CTLR_BIT_ARE_NS | GICD_CTLR_ENABLE_GRP1_NS); - } - - - -} - -/** - * @name: FError FGicRedistrubutiorInit(FGic *instance_p) - * @msg: Initialize Redistrubutior - * @param {FGic} *instance_p is a pointer to the FGic instance. - * @return {FError} FGIC_SUCCESS is success ,FGIC_ERR_IN_TIMEOUT is timeout - */ -FError FGicRedistrubutiorInit(FGic *instance_p) -{ - FASSERT(instance_p); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - s32 int_id ; - u32 timeout = 0; - uintptr redis_base = instance_p->redis_base; - uintptr sgi_base = instance_p->redis_base + FGIC_GICR_SGI_BASE_OFFSET; - - /* Clear processor sleep and wait till childasleep is cleard */ - - FGIC_GICR_WAKER_CLEAR_BIT(redis_base, FGIC_GICR_WAKER_PROCESSOR_SLEEP_MASK); - while (FGIC_GICR_WAKER_READ(redis_base) & FGIC_GICR_WAKER_CHILDREN_ASLEEP_MASK) - { - timeout++; - if (timeout >= 0xfffffff) - { - return FGIC_ERR_IN_TIMEOUT; - } - } - - FASSERT(FGicWaitRwp(redis_base, GICR_CTLR_RWP_WAIT) == FGIC_SUCCESS); - FGIC_GICR_ICENABLER0_WRITE(sgi_base, FGIC_GICR_ICENABLER0_DEFAULT_MASK); /* Disable all sgi ppi */ - - /* Clear pending */ - FGIC_GICR_ICPENDR0_WRITE(sgi_base, FGIC_GICR_ICPENDR0_DEFAULT_MASK); - - /* Set sgi ppi route to different security group */ - - if (instance_p->security == ONE_NS_SECURITY_STATE) - { - FGIC_GICR_IGROUPR0_WRITE(sgi_base, FGIC_GICR_IGROUPR0_DEFAULT_MASK); - } - else - { - FGIC_GICR_IGROUPR0_WRITE(sgi_base, FGIC_GICR_IGROUPR0_DEFAULT_MASK); - } - FGIC_GICR_IGRPMODR0_WRITE(sgi_base, FGIC_GICR_IGRPMODR0_DEFAULT_MASK); - - /* 默认所有优先级为0xa0 */ - for (int_id = 0; int_id < FGIC_SPI_START_ID; int_id += FGIC_GICD_4_PER_REG) - { - FGIC_GICR_IPRIORITYR_WRITE(sgi_base, int_id, FGIC_INT_DEFAULT_PRI_X4); - } - - FGIC_GICR_ICFGR0_WRITE(sgi_base, 0); /* set level-sensitive */ - FGIC_GICR_ICFGR1_WRITE(sgi_base, 0); - - return FGIC_SUCCESS; -} - -/** - * @name: void FGicCpuInterfaceInit(void) - * @msg: Initialize Cpu interface of current core - */ -void FGicCpuInterfaceInit(void) -{ - u32 reg; - reg = FGicGetICC_SRE_EL1(); - - if (!(reg & GICC_SRE_SRE)) - { - reg |= (GICC_SRE_SRE | GICC_SRE_DFB | GICC_SRE_DIB); - FGicSetICC_SRE_EL1(reg); - reg = FGicGetICC_SRE_EL1(); - FASSERT(reg & GICC_SRE_SRE); - } - - FGicSetICC_PMR(FGIC_CPU_INTERFACE_DEFAULT_FILTER); - - FGicEnableGroup1_EL1(); - - FGicSetICC_CTLR_EL1(GICC_CTLR_CBPR); /* ICC_BPR0_EL1 determines the preemption group for both Group 0 and Group 1 interrupts. */ -} - -/** - * @name: FError FGicCfgInitialize(FGic *instance_p, const FGicConfig *input_config_p , uintptr redis_base) - * @msg: Initialize the GIC driver instance based on the incoming configuration - * @param {FGic} *instance_p is a pointer to the FGic instance. - * @param {FGicConfig} *input_config_p Configuration items that need to be applied in the instance - * @param {uintptr} redis_base is the redistributor adress of current core - * @return {*} - */ -FError FGicCfgInitialize(FGic *instance_p, const FGicConfig *input_config_p, uintptr redis_base) -{ - u32 max_ints_mun; - uintptr dis_base; - - FASSERT(instance_p && input_config_p); - - instance_p->config = *input_config_p; - instance_p->redis_base = redis_base ; - instance_p->is_ready = FT_COMPONENT_IS_READY; - - dis_base = instance_p->config.dis_base; - - max_ints_mun = FGIC_READREG32(dis_base, FGIC_GICD_TYPER_OFFSET); - max_ints_mun &= FGIC_GICD_TYPER_ITLINESNUMBER_MASK ; - max_ints_mun = ((max_ints_mun + 1) << 5) - 1; /* If the value of this field is N, the maximum SPI INTID is 32(N+1) minus 1. */ - instance_p->max_spi_num = max_ints_mun; - - return FGIC_SUCCESS; -} - -/** - * @name: FError FGicIntEnable(FGic *instance_p,s32 int_id) - * @msg: Enables the interrupt function based on the interrupt number - * @param {FGic} *instance_p is a pointer to the FGic instance. - * @param {s32} int_id is interrupt id - * @return {*} - */ -FError FGicIntEnable(FGic *instance_p, s32 int_id) -{ - FASSERT(instance_p); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - - if (int_id > instance_p->max_spi_num) - { - FGIC_DEBUG_E("int_id is over max spi num for FGicIntEnable."); - return FGIC_CTLR_ERR_NUM; - } - - if (int_id <= FGIC_PPI_END_ID) - { - uintptr redis_base = instance_p->redis_base; - FGicEnablePrivateInt(redis_base, int_id); - } - else - { - uintptr dis_base = instance_p->config.dis_base; - FGicEnableSPI(dis_base, int_id); - } - - return FGIC_SUCCESS ; -} - - -/** - * @name: FError FGicIntEnable(FGic *instance_p,s32 int_id) - * @msg: Disable the interrupt function based on the interrupt number - * @param {FGic} *instance_p is a pointer to the FGic instance. - * @param {s32} int_id is interrupt id - */ -FError FGicIntDisable(FGic *instance_p, s32 int_id) -{ - FASSERT(instance_p); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - - - if (int_id > instance_p->max_spi_num) - { - FGIC_DEBUG_E("int_id is over max spi num for FGicIntDisable."); - return FGIC_CTLR_ERR_NUM; - } - - if (int_id <= FGIC_PPI_END_ID) - { - uintptr redis_base = instance_p->redis_base; - FGicDisablePrivateInt(redis_base, int_id); - } - else - { - uintptr dis_base = instance_p->config.dis_base; - FGicDisableSPI(dis_base, int_id); - } - - return FGIC_SUCCESS ; -} - - -/** - * @name: FError FGicSetPriority(FGic *instance_p,s32 int_id,u32 priority) - * @msg: Sets the current interrupt priority value based on the interrupt number - * @param {FGic} *instance_p is a pointer to the FGic instance. - * @param {s32} int_id is interrupt id - * @param {u32} priority is priority value ,valid bit is bit[0:7] - * @return {*} - */ -FError FGicSetPriority(FGic *instance_p, s32 int_id, u32 priority) -{ - FASSERT(instance_p); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - - - if (int_id > instance_p->max_spi_num) - { - FGIC_DEBUG_E("int_id is over max spi num for FGicSetPriority."); - return FGIC_CTLR_ERR_IN_GET; - } - - if (int_id <= FGIC_PPI_END_ID) - { - uintptr redis_base = instance_p->redis_base; - FGicSetPrivatePriority(redis_base, int_id, priority); - } - else - { - uintptr dis_base = instance_p->config.dis_base; - FGicSetSpiPriority(dis_base, int_id, priority); - } - - return FGIC_SUCCESS ; -} - -/** - * @name: u32 FGicGetPriority(FGic *instance_p,s32 int_id) - * @msg: Gets the current interrupt priority value based on the interrupt number - * @param {FGic} *instance_p is a pointer to the FGic instance - * @param {s32} int_id is interrupt id - * @return {u32} priority value ,valid bit is bit[0:7] - */ -u32 FGicGetPriority(FGic *instance_p, s32 int_id) -{ - u32 priority; - FASSERT(instance_p); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - - - if (int_id > instance_p->max_spi_num) - { - FGIC_DEBUG_E("int_id is over max spi num for FGicGetPriority."); - return (u32)FGIC_CTLR_ERR_IN_GET; - } - - if (int_id <= FGIC_PPI_END_ID) - { - uintptr redis_base = instance_p->redis_base; - priority = FGicGetPrivatePriority(redis_base, int_id); - } - else - { - uintptr dis_base = instance_p->config.dis_base; - priority = FGicGetSpiPriority(dis_base, int_id); - } - - return priority ; -} - -/** - * @name: FError FGicSetTriggerLevel(FGic *instance_p,s32 int_id,TRIGGER_LEVEL trigger_way) - * @msg: Sets the interrupt triggering mode based on the current interrupt number - * @param {FGic} *instance_p is a pointer to the FGic instance - * @param {s32} int_id is interrupt id - * @param {TRIGGER_LEVEL} trigger_way is trigger mode - * @return {*} - */ -FError FGicSetTriggerLevel(FGic *instance_p, s32 int_id, TRIGGER_LEVEL trigger_way) -{ - FASSERT(instance_p); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - - if (int_id > instance_p->max_spi_num) - { - FGIC_DEBUG_E("int_id is over max spi num for FGicSetTriggerLevel."); - return FGIC_CTLR_ERR_IN_SET; - } - - if (int_id <= FGIC_SGI_END_ID) - { - uintptr redis_base = instance_p->redis_base; - FGicSetSgiLevel(redis_base, int_id, trigger_way); - } - else if (int_id <= FGIC_PPI_END_ID) - { - uintptr redis_base = instance_p->redis_base; - FGicSetPpiLevel(redis_base, int_id, trigger_way); - } - else - { - uintptr dis_base = instance_p->config.dis_base; - FGicSetSpiLevel(dis_base, int_id, trigger_way); - } - - return FGIC_SUCCESS ; -} - -/** - * @name: u32 FGicGetTriggerLevel(FGic *instance_p,s32 int_id) - * @msg: Gets the interrupt triggering mode based on the current interrupt number - * @param {FGic} *instance_p is a pointer to the FGic instance - * @param {s32} int_id is interrupt id - * @return {u32} triggering mode - */ -u32 FGicGetTriggerLevel(FGic *instance_p, s32 int_id) -{ - u32 trigger_way; - FASSERT(instance_p); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - - - if (int_id > instance_p->max_spi_num) - { - FGIC_DEBUG_E("int_id is over max spi num for FGicGetTriggerLevel."); - return (u32)FGIC_CTLR_ERR_IN_GET; - } - - if (int_id <= FGIC_SGI_END_ID) - { - uintptr redis_base = instance_p->redis_base; - trigger_way = FGicGetSgiLevel(redis_base, int_id); - } - else if (int_id <= FGIC_PPI_END_ID) - { - uintptr redis_base = instance_p->redis_base; - trigger_way = FGicGetPpiLevel(redis_base, int_id); - } - else - { - uintptr dis_base = instance_p->config.dis_base; - trigger_way = FGicGetSpiLevel(dis_base, int_id); - } - - return trigger_way ; -} - -/** - * @name: FGicSetSpiAffinityRouting - * @msg: Set intermediate routing information for a specific SPI interrupt - * @param {FGic} *instance_p is a pointer to the FGic instance. - * @param {u32} int_id is interrupt vector for spi - * @param {SPI_ROUTING_MODE} route_mode is the interrupt routing mode. - * @param {u64} affinity is the affinity level ,format is - * |--------[bit39-32]-------[bit23-16]-------------[bit15-8]--------[bit7-0] - * |--------Affinity level3-----Affinity level2-----Affinity level1---Affinity level0 - * @return {*} - */ -FError FGicSetSpiAffinityRouting(FGic *instance_p, s32 int_id, SPI_ROUTING_MODE route_mode, u64 affinity) -{ - FASSERT(instance_p); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - uintptr dis_base = instance_p->config.dis_base; - - if ((int_id > instance_p->max_spi_num) || (int_id <= FGIC_PPI_END_ID)) - { - FGIC_DEBUG_E("int_id %d is out of range.", int_id); - return FGIC_CTLR_ERR_IN_SET; - } - - FGicSetSpiRoute(dis_base, int_id, route_mode, affinity); - return FGIC_SUCCESS; -} - - -/** - * @name: FGicGetAffinityRouting - * @msg: Get intermediate routing information for a specific SPI interrupt - * @param {FGic} *instance_p is a pointer to the FGic instance. - * @param {u32} int_id is interrupt vector for spi - * @param {SPI_ROUTING_MODE} *route_mode_p is a pointer to get interrupt routing mode. - * @param {u64} *affinity_p is pointer to get affinity level ,format is - * |--------[bit39-32]-------[bit23-16]-------------[bit15-8]--------[bit7-0] - * |--------Affinity level3-----Affinity level2-----Affinity level1---Affinity level0 - * @return {FError} - */ -FError FGicGetAffinityRouting(FGic *instance_p, s32 int_id, SPI_ROUTING_MODE *route_mode_p, u64 *affinity_p) -{ - FASSERT(instance_p); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - FASSERT(route_mode_p != NULL); - FASSERT(affinity_p != NULL); - uintptr dis_base = instance_p->config.dis_base; - u64 reg; - - if ((int_id > instance_p->max_spi_num) || (int_id <= FGIC_PPI_END_ID)) - { - FGIC_DEBUG_E("int_id %d is out of range.", int_id); - return (u32)FGIC_CTLR_ERR_IN_GET; - } - - reg = FGicGetSpiRoute(dis_base, int_id); - *route_mode_p = reg & SPI_ROUTING_TO_ANY; - *affinity_p = reg & FGIC_GICD_IROUTER_AFFINITY_MASK; - return FGIC_SUCCESS; -} - - -/** - * @name: FGicGenerateSgi - * @msg: This interface is used for software generated interrupts - * @param {FGic} *instance_p is a pointer to the FGic instance. - * @param {u32} int_id is interrupt vector for spi - * @param {u32} target_list is the set of PEs for which SGI interrupts will be generated. Each bit corresponds to the PE within a cluster with an Affinity 0 value equal to the bit number. - * @param {SGI_ROUTING_MODE} routing_mode is Interrupt Routing Mode. - * @param {u64} affinity is the affinity level ,format is - * |--------[bit55-48]-------[bit39-32]-------------[bit23-16] - * |--------Affinity level3-----Affinity level2-----Affinity level1 - * @return {*} - */ -FError FGicGenerateSgi(FGic *instance_p, s32 int_id, u32 target_list, SGI_ROUTING_MODE routing_mode, u64 affinity) -{ - FASSERT(instance_p); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - - if (int_id > FGIC_SGI_END_ID) - { - FGIC_DEBUG_E("int_id %d is out of range.", int_id); - return FGIC_CTLR_ERR_IN_SET; - } - - FGicSetICC_SGI1R((int_id & FGIC_ICC_SGI1R_INTID_MASK) << 24, target_list, routing_mode, affinity); - return FGIC_SUCCESS; -} - -/** - * @name: FGicDeactionInterrupt - * @msg: Deactive Interruption of the current active state - * @param {FGic} *instance_p is a pointer to the FGic instance. - * @param {s32} int_id is interrupt id - */ -void FGicDeactionInterrupt(FGic *instance_p, s32 int_id) -{ - FASSERT(instance_p); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - FGicSetICC_EOIR1(int_id); -} - -/** - * @name: FGicAcknowledgeInt - * @msg: Acknowledge pending interrupt - * @param {FGic} *instance_p is a pointer to the FGic instance. - * @return {s32} interrupt id - */ -s32 FGicAcknowledgeInt(FGic *instance_p) -{ - FASSERT(instance_p); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - return FGicGetICC_APR1(); -} - - -/** - * @name: FGicSetPriorityFilter - * @msg: By setting the parameter of ICC_PMR, the interrupt range that the interrupt controller can respond to is determined - * @param {FGic} *instance_p is a pointer to the FGic instance. - * @param {u32} priority_mask . If the priority of an interrupt is lower than the value indicated by this field, the interface signals the interrupt to the PE. - * The reference values of priority_mask are as follows - * |priority_mask---------------256-------254--------252------248-------240 - * |Implemented priority bits---[7:0]----[7:1]------[7:2]-----[7:3]-----[7:4] - * |priority the growing steps--any-----even value----4---------8--------16 - */ -void FGicSetPriorityFilter(FGic *instance_p, u32 priority_mask) -{ - FASSERT(instance_p); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - - FGicSetICC_PMR(priority_mask); -} - - -/** - * @name: FGicGetPriorityFilter - * @msg: Gets the current priority filtering value - * @param {FGic} *instance_p is a pointer to the FGic instance. - * @return {u32} Priority Mask for the CPU interface . If the priority of an interrupt is lower than the value - * indicated by this field, the interface signals the interrupt to the PE. - * The reference values of priority_mask are as follows - * |return value----------------256-------254--------252------248-------240 - * |Implemented priority bits---[7:0]----[7:1]------[7:2]-----[7:3]-----[7:4] - * |priority the growing steps--any-----even value----4---------8--------16 - */ -u32 FGicGetPriorityFilter(FGic *instance_p) -{ - FASSERT(instance_p); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - - return FGicGetICC_PMR(); -} - - -/** - * @name: FGicGetPriorityGroup - * @msg: Get Binary point value - * @param {FGic} *instance_p is a pointer to the FGic instance. - * @return {u32} The relationship between Binary point value and grouping is as follows - * |return value----------------0-------1--------2------3-------4------5------6-------7 - * |Group priority field------[---]----[7:1]---[7:2]--[7:3]---[7:4]---[7:5]---[7:6]---[7] - * |Subpriority field---------[---]-----[0]----[1:0]--[2:0]---[3:0]---[4:0]---[5:0]---[6:0] - */ -u32 FGicGetPriorityGroup(FGic *instance_p) -{ - FASSERT(instance_p); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - - return FGicGetICC_BPR1(); -} - -/** - * @name: FGicSetPriorityGroup - * @msg: Sets the value of the current group priority - * @param {FGic} *instance_p is a pointer to the FGic instance. - * @param {u32} binary_point : The value of this field controls how the 8-bit interrupt priority field is split into a group priority field - * The relationship between binary_point value and grouping is as follows - * |binary_point----------------0-------1--------2------3-------4------5------6-------7 - * |Group priority field------[---]----[7:1]---[7:2]--[7:3]---[7:4]---[7:5]---[7:6]---[7] - * |Subpriority field---------[---]-----[0]----[1:0]--[2:0]---[3:0]---[4:0]---[5:0]---[6:0] - */ -void FGicSetPriorityGroup(FGic *instance_p, u32 binary_point) -{ - FASSERT(instance_p); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - - FGicSetICC_BPR1(binary_point); -} - - diff --git a/bsp/phytium/libraries/standalone/drivers/gic/fgic/fgic.h b/bsp/phytium/libraries/standalone/drivers/gic/fgic/fgic.h deleted file mode 100644 index 383de430d5..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/gic/fgic/fgic.h +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fgic.h - * Date: 2022-03-28 09:30:29 - * LastEditTime: 2022-03-28 09:30:29 - * Description: This file is for detailed description of the device and driver. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/4/16 init commit - */ - -#ifndef FGIC_H -#define FGIC_H - -#include "ftypes.h" -#include "ferror_code.h" -#include "fparameters.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -#define FGIC_RSGI_AFF1_OFFSET 16 -#define FGIC_RSGI_AFF2_OFFSET 32 -#define FGIC_RSGI_AFF3_OFFSET 48 - -#define FGIC_SUCCESS FT_SUCCESS -#define FGIC_CTLR_ERR_TYPE FT_MAKE_ERRCODE(ErrModBsp, ErrGic, 1) /* 错误选择CTLR 寄存器 */ -#define FGIC_CTLR_ERR_NUM FT_MAKE_ERRCODE(ErrModBsp, ErrGic, 2) /* 当前控制器不支持此中断id */ -#define FGIC_CTLR_ERR_IN_SET FT_MAKE_ERRCODE(ErrModBsp, ErrGic, 3) /* 在设置过程中出现的异常 */ -#define FGIC_CTLR_ERR_IN_GET FT_MAKE_ERRCODE(ErrModBsp, ErrGic, 4) /* 在获取过程中出现的异常 */ -#define FGIC_ERR_IN_TIMEOUT FT_MAKE_ERRCODE(ErrModBsp, ErrGic, 5) /* 超时退出 */ - - -typedef enum -{ - TRIGGER_BY_LEVEL_SENSITIVE = 0, /* Corresponding interrupt is level-sensitive. */ - TRIGGER_BY_LEVEL_EDGE, /* Corresponding interrupt is edge-triggered. */ -} TRIGGER_LEVEL; - -typedef enum -{ - TWO_SECURITY_STATE = 0, /* */ - ONE_NS_SECURITY_STATE, /* */ -} SECURITY_STATE; - -/* Interrupt Routing Mode. */ -typedef enum -{ - SGI_ROUTING_TO_SPECIFIC = 0, /* sgi interrupts routed to the PEs specified by affinity level. */ - SGI_ROUTING_TO_ANY = (1ULL << 40) /* sgi interrupts routed to all PEs in the system, excluding "self". */ -} SGI_ROUTING_MODE; - -typedef enum -{ - SPI_ROUTING_TO_SPECIFIC = 0, /* spi interrupts routed to the PE specified by affinity level. */ - SPI_ROUTING_TO_ANY = (1U << 31) /* spi interrupts routed to any PE defined as a participating node. */ -} SPI_ROUTING_MODE; - -typedef struct -{ - u32 instance_id; /* Id of device*/ - uintptr dis_base; /* Distributor base address */ - -} FGicConfig; - -typedef struct -{ - FGicConfig config; /* Configuration data structure */ - u32 is_ready; /* Device is ininitialized and ready*/ - uintptr redis_base; /* Redistributor base address for each core */ - SECURITY_STATE security ; - s32 max_spi_num; /* Max value of spi priority */ -} FGic; - -/* Initialization */ -FGicConfig *FGicLookupConfig(u32 instance_id); -FError FGicCfgInitialize(FGic *instance_p, const FGicConfig *input_config_p, uintptr redis_base); -void FGicDistrubutiorInit(FGic *instance_p); -FError FGicRedistrubutiorInit(FGic *instance_p); -void FGicCpuInterfaceInit(void); - -/* Operation interface */ -FError FGicIntEnable(FGic *instance_p, s32 int_id); -FError FGicIntDisable(FGic *instance_p, s32 int_id); -FError FGicSetPriority(FGic *instance_p, s32 int_id, u32 priority); -u32 FGicGetPriority(FGic *instance_p, s32 int_id); -FError FGicSetTriggerLevel(FGic *instance_p, s32 int_id, TRIGGER_LEVEL trigger_way); -u32 FGicGetTriggerLevel(FGic *instance_p, s32 int_id); -FError FGicSetSpiAffinityRouting(FGic *instance_p, s32 int_id, SPI_ROUTING_MODE route_mode, u64 affinity); -FError FGicGetAffinityRouting(FGic *instance_p, s32 int_id, SPI_ROUTING_MODE *route_mode_p, u64 *affinity_p); -FError FGicGenerateSgi(FGic *instance_p, s32 int_id, u32 target_list, SGI_ROUTING_MODE routing_mode, u64 affinity); -void FGicDeactionInterrupt(FGic *instance_p, s32 int_id); -s32 FGicAcknowledgeInt(FGic *instance_p); -void FGicSetPriorityFilter(FGic *instance_p, u32 priority_mask); -void FGicSetPriorityGroup(FGic *instance_p, u32 binary_point); -u32 FGicGetPriorityFilter(FGic *instance_p); -u32 FGicGetPriorityGroup(FGic *instance_p); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/bsp/phytium/libraries/standalone/drivers/gic/fgic/fgic_cpu_interface.S b/bsp/phytium/libraries/standalone/drivers/gic/fgic/fgic_cpu_interface.S deleted file mode 100644 index ecd1af8c47..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/gic/fgic/fgic_cpu_interface.S +++ /dev/null @@ -1,494 +0,0 @@ -/* - * @Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * @FilePath: fgic_cpu_interface.S - * @Date: 2022-03-29 18:04:23 - * @LastEditTime: 2022-03-29 18:04:27 - * @Description:  This file is Mapping of MSR and MRS to physical and virtual CPU interface registers. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/4/16 init commit - */ - - -#ifdef __aarch64__ - -/* - * Mapping of MSR and MRS to physical and virtual CPU interface registers - * - * ARM Generic Interrupt Controller Architecture Specification - * GIC architecture version 3.0 and version 4.0 - * Table 8-5 - */ -#define ICC_AP0R0_EL1 S3_0_C12_C8_4 -#define ICC_AP0R1_EL1 S3_0_C12_C8_5 -#define ICC_AP0R2_EL1 S3_0_C12_C8_6 -#define ICC_AP0R3_EL1 S3_0_C12_C8_7 - -#define ICC_AP1R0_EL1 S3_0_C12_C9_0 -#define ICC_AP1R1_EL1 S3_0_C12_C9_1 -#define ICC_AP1R2_EL1 S3_0_C12_C9_2 -#define ICC_AP1R3_EL1 S3_0_C12_C9_3 - -#define ICC_ASGI1R_EL1 S3_0_C12_C11_6 - -#define ICC_BPR0_EL1 S3_0_C12_C8_3 -#define ICC_BPR1_EL1 S3_0_C12_C12_3 - -#define ICC_CTLR_EL1 S3_0_C12_C12_4 -#define ICC_CTLR_EL3 S3_6_C12_C12_4 - -#define ICC_DIR_EL1 S3_0_C12_C11_1 - -#define ICC_EOIR0_EL1 S3_0_C12_C8_1 -#define ICC_EOIR1_EL1 S3_0_C12_C12_1 - -#define ICC_HPPIR0_EL1 S3_0_C12_C8_2 -#define ICC_HPPIR1_EL1 S3_0_C12_C12_2 - -#define ICC_IAR0_EL1 S3_0_C12_C8_0 -#define ICC_IAR1_EL1 S3_0_C12_C12_0 - -#define ICC_IGRPEN0_EL1 S3_0_C12_C12_6 -#define ICC_IGRPEN1_EL1 S3_0_C12_C12_7 -#define ICC_IGRPEN1_EL3 S3_6_C12_C12_7 - -#define ICC_PMR_EL1 S3_0_C4_C6_0 -#define ICC_RPR_EL1 S3_0_C12_C11_3 - -#define ICC_SGI0R_EL1 S3_0_C12_C11_7 -#define ICC_SGI1R_EL1 S3_0_C12_C11_5 - -#define ICC_SRE_EL1 S3_0_C12_C12_5 -#define ICC_SRE_EL2 S3_4_C12_C9_5 -#define ICC_SRE_EL3 S3_6_C12_C12_5 - -/* - * Mapping of MSR and MRS to virtual interface control registers - * - * ARM Generic Interrupt Controller Architecture Specification - * GIC architecture version 3.0 and version 4.0 - * Table 8-6 - */ -#define ICH_AP0R0_EL2 S3_4_C12_C8_0 -#define ICH_AP0R1_EL2 S3_4_C12_C8_1 -#define ICH_AP0R2_EL2 S3_4_C12_C8_2 -#define ICH_AP0R3_EL2 S3_4_C12_C8_3 - -#define ICH_AP1R0_EL2 S3_4_C12_C9_0 -#define ICH_AP1R1_EL2 S3_4_C12_C9_1 -#define ICH_AP1R2_EL2 S3_4_C12_C9_2 -#define ICH_AP1R3_EL2 S3_4_C12_C9_3 - -#define ICH_HCR_EL2 S3_4_C12_C11_0 - -#define ICH_VTR_EL2 S3_4_C12_C11_1 - -#define ICH_MISR_EL2 S3_4_C12_C11_2 - -#define ICH_EISR_EL2 S3_4_C12_C11_3 - -#define ICH_ELRSR_EL2 S3_4_C12_C11_5 - -#define ICH_VMCR_EL2 S3_4_C12_C11_7 - -#define ICH_LR0_EL2 S3_4_C12_C12_0 -#define ICH_LR1_EL2 S3_4_C12_C12_1 -#define ICH_LR2_EL2 S3_4_C12_C12_2 -#define ICH_LR3_EL2 S3_4_C12_C12_3 -#define ICH_LR4_EL2 S3_4_C12_C12_4 -#define ICH_LR5_EL2 S3_4_C12_C12_5 -#define ICH_LR6_EL2 S3_4_C12_C12_6 -#define ICH_LR7_EL2 S3_4_C12_C12_7 -#define ICH_LR8_EL2 S3_4_C12_C13_0 -#define ICH_LR9_EL2 S3_4_C12_C13_1 -#define ICH_LR10_EL2 S3_4_C12_C13_2 -#define ICH_LR11_EL2 S3_4_C12_C13_3 -#define ICH_LR12_EL2 S3_4_C12_C13_4 -#define ICH_LR13_EL2 S3_4_C12_C13_5 -#define ICH_LR14_EL2 S3_4_C12_C13_6 -#define ICH_LR15_EL2 S3_4_C12_C13_7 - -#define FUNC_DEFINE(name) .global name ;\ - .type name, @function ;\ - name: - - -/** - * @name: - * @msg: void FGicSetICC_SRE_EL3(GICC_SRE_BITS bits) --- Interrupt Controller System Register Enable - * @return {*} - */ -FUNC_DEFINE(FGicSetICC_SRE_EL3) - MSR ICC_SRE_EL3, x0 - ISB - RET - -/** - * @name: - * @msg: void FGicSetICC_SRE_EL2(GICC_SRE_BITS bits) - * @return {*} - */ -FUNC_DEFINE(FGicSetICC_SRE_EL2) - MSR ICC_SRE_EL2, x0 - ISB - RET - -/** - * @name: - * @msg: void FGicSetICC_SRE_EL1(GICC_SRE_BITS bits) - * @return {*} - */ -FUNC_DEFINE(FGicSetICC_SRE_EL1) - MSR ICC_SRE_EL1, x0 - ISB - RET - - - -/** - * @name: - * @msg: u32 FGicGetICC_SRE_EL3(void) -- Interrupt Controller System Register Enable - * @return {*} - */ -FUNC_DEFINE(FGicGetICC_SRE_EL3) - MRS x0, ICC_SRE_EL3 - RET - -/** - * @name: - * @msg: u32 FGicGetICC_SRE_EL2(void) - * @return {*} - */ -FUNC_DEFINE(FGicGetICC_SRE_EL2) - MRS x0, ICC_SRE_EL2 - RET - -/** - * @name: - * @msg: u32 FGicGetICC_SRE_EL1(void) - * @return {*} - */ -FUNC_DEFINE(FGicGetICC_SRE_EL1) - MRS x0, ICC_SRE_EL1 - RET - - -/** - * @name: - * @msg: void FGicEnableGroup0(void) - * @return {*} - */ -FUNC_DEFINE(FGicEnableGroup0) - MOV w0, #1 - MSR ICC_IGRPEN0_EL1, x0 - ISB - RET - -/** - * @name: - * @msg: void FGicDisableGroup0(void) - * @return {*} - */ -FUNC_DEFINE(FGicDisableGroup0) - MOV w0, #0 - MSR ICC_IGRPEN0_EL1, x0 - ISB - RET - - -/** - * @name: - * @msg: - * @return {*} - */ -FUNC_DEFINE(FGicEnableGroup1_EL3) - MOV w0, #1 - MSR ICC_IGRPEN1_EL3, x0 - ISB - RET - -/** - * @name: - * @msg: - * @return {*} - */ -FUNC_DEFINE(FGicEnableGroup1_EL1) - MOV w0, #1 - MSR ICC_IGRPEN1_EL1, x0 - ISB - RET - -/** - * @name: - * @msg: void FGicDisableGroup1_EL1(void) - * @return {*} - */ -FUNC_DEFINE(FGicDisableGroup1_EL1) - MOV w0, #0 - MSR ICC_IGRPEN1_EL1, x0 - ISB - RET - -/** - * @name: - * @msg: void FGicDisableGroup1_EL3(void) - * @return {*} - */ -FUNC_DEFINE(FGicDisableGroup1_EL3) - MOV w0, #0 - MSR ICC_IGRPEN1_EL3, x0 - ISB - RET - -/** - * @name: - * @msg: void FGicSetICC_CTLR_EL3(GICC_CTLR_BITS reg_bits) - * @return {*} - */ -FUNC_DEFINE(FGicSetICC_CTLR_EL3) - MSR ICC_CTLR_EL3, x0 - ISB - RET - -/** - * @name: - * @msg: void FGicSetICC_CTLR_EL1(GICC_CTLR_BITS reg_bits) - * @return {*} - */ -FUNC_DEFINE(FGicSetICC_CTLR_EL1) - MSR ICC_CTLR_EL1, x0 - ISB - RET - -/** - * @name: - * @msg: u32 FGicGetICC_CTLR_EL3(void) -- Controls aspects of the behavior of the GIC CPU interface and provides information about the features implemented. - * @return {*} - */ -FUNC_DEFINE(FGicGetICC_CTLR_EL3) - MRS x0, ICC_CTLR_EL3 - RET - -/** - * @name: - * @msg: u32 FGicGetICC_CTLR_EL1(void) -- Controls aspects of the behavior of the GIC CPU interface and provides information about the features implemented. - * @return {*} - */ -FUNC_DEFINE(FGicGetICC_CTLR_EL1) - MRS x0, ICC_CTLR_EL1 - RET - -/** - * @name: - * @msg: u32 FGicWriteICC_APR0(void) -- The PE reads this register to obtain the INTID of the signaled Group 0 interrupt. - * @return {*} - */ -FUNC_DEFINE(FGicGetICC_APR0) - MRS x0, ICC_IAR0_EL1 - RET - -/** - * @name: - * @msg: u32 FGicGetICC_APR1(void) -- The PE reads this register to obtain the INTID of the signaled Group 1 interrupt. - * @return {*} - */ -FUNC_DEFINE(FGicGetICC_APR1) - MRS x0, ICC_IAR1_EL1 - RET - -/** - * @name: - * @msg: void FGicSetICC_EOIR0(u32 intnum) -- /* A PE writes to this register to inform the CPU interface that it has completed the processing of the specified Group 0 interrupt - * @return {*} - */ -FUNC_DEFINE(FGicSetICC_EOIR0) - MSR ICC_EOIR0_EL1, x0 - ISB - RET - -/** - * @name: - * @msg: void FGicSetICC_EOIR1(u32 intnum) -- /* A PE writes to this register to inform the CPU interface that it has completed the processing of the specified Group 1 interrupt - * @return {*} - */ -FUNC_DEFINE(FGicSetICC_EOIR1) - MSR ICC_EOIR1_EL1, x0 - ISB - RET - -/** - * @name: - * @msg: void FGicSetICC_DIR(u32 intnum) -- When interrupt priority drop is separated from interrupt deactivation, a write to this register deactivates the specified interrupt. - * @return {*} - */ -FUNC_DEFINE(FGicSetICC_DIR) - MSR ICC_DIR_EL1, x0 - ISB - RET - -/** - * @name: - * @msg: void FGicSetICC_PMR(u32 priority_mask) -- Provides an interrupt priority filter. - * @return {*} - */ -FUNC_DEFINE(FGicSetICC_PMR) - MSR ICC_PMR_EL1, x0 - ISB - RET - -/** - * @name: - * @msg: u32 FGicGetICC_PMR(void) - * @return {*} - */ -FUNC_DEFINE(FGicGetICC_PMR) - MRS x0,ICC_PMR_EL1 - RET - -/** - * @name: - * @msg: u32 FGicGetICC_BPR1(void) --- Defines the point at which the priority value fields split into two parts, the group priority field and the subpriority field. The group priority field determines Group 1 interrupt preemption. - * @return {*} - */ -FUNC_DEFINE(FGicGetICC_BPR1) - MRS x0,ICC_BPR1_EL1 - RET - -/** - * @name: - * @msg: void FGicSetICC_BPR1(u32 binary_point) - * @return {*} - */ -FUNC_DEFINE(FGicSetICC_BPR1) - MSR ICC_BPR1_EL1, x0 - ISB - RET - -/** - * @name: - * @msg: u32 FGicGetICC_BPR0(void) --- Defines the point at which the priority value fields split into two parts, the group priority field and the subpriority field. The group priority field determines Group 0 interrupt preemption. - * @return {*} - */ -FUNC_DEFINE(FGicGetICC_BPR0) - MRS x0,ICC_BPR0_EL1 - RET - -/** - * @name: - * @msg: void FGicSetICC_BPR0(u32 binary_point) - * @return {*} - */ -FUNC_DEFINE(FGicSetICC_BPR0) - MSR ICC_BPR0_EL1, x0 - ISB - RET - -/** - * @name: - * @msg: u32 FGicGetICC_HPPIR1(void) --- Indicates the highest priority pending Group 1 interrupt on the CPU interface. - * @return {*} - */ -FUNC_DEFINE(FGicGetICC_HPPIR1) - MRS x0,ICC_HPPIR1_EL1 - RET - -/** - * @name: - * @msg: void FGicSetICC_HPPIR1(u32 binary_point) - * @return {*} - */ -FUNC_DEFINE(FGicSetICC_HPPIR1) - MSR ICC_HPPIR1_EL1, x0 - ISB - RET - -/** - * @name: - * @msg: u32 FGicGetICC_HPPIR0(void) --- Indicates the highest priority pending Group 0 interrupt on the CPU interface. - * @return {*} - */ -FUNC_DEFINE(FGicGetICC_HPPIR0) - MRS x0,ICC_HPPIR0_EL1 - RET - -/** - * @name: - * @msg: void FGicSetICC_HPPIR0(u32 binary_point) - * @return {*} - */ -FUNC_DEFINE(FGicSetICC_HPPIR0) - MSR ICC_HPPIR0_EL1, x0 - ISB - RET - -/** - * @name: - * @msg: u32 FGicGetICC_RPR(void) --- Indicates the Running priority of the CPU interface. - * @return {*} - */ -FUNC_DEFINE(FGicGetICC_RPR) - MRS x0,ICC_RPR_EL1 - RET - -/* SGI interface */ -/** - * @name: - * @msg: void FGicSetICC_SGI0R(u32 intnum,u32 target_list,GICC_SGIR_IRM_BITS mode,u64 affinity_list) --- Generates Secure Group 0 SGIs - * @return {*} - */ -FUNC_DEFINE(FGicSetICC_SGI0R) - ORR x0, x0, x1 - ORR x0, x0, x2 - ORR x0, x0, x3 - MSR ICC_SGI0R_EL1, x0 - ISB - RET - -/** - * @name: - * @msg: void FGicSetICC_SGI1R(u32 intnum,u32 target_list,GICC_SGIR_IRM_BITS mode,u64 affinity_list) - * @return {*} - */ -FUNC_DEFINE(FGicSetICC_SGI1R) - ORR x0, x0, x1 - ORR x0, x0, x2 - ORR x0, x0, x3 - MSR ICC_SGI1R_EL1, x0 - ISB - RET - -/** - * @name: - * @msg: void FGicSetICC_ASGI1R(u32 intnum,u32 target_list,GICC_SGIR_IRM_BITS mode,u64 affinity_list) - * @return {*} - */ -FUNC_DEFINE(FGicSetICC_ASGI1R) - ORR x0, x0, x1 - ORR x0, x0, x2 - ORR x0, x0, x3 - MSR ICC_ASGI1R_EL1, x0 - ISB - RET - - -#else - - - - -#endif - - diff --git a/bsp/phytium/libraries/standalone/drivers/gic/fgic/fgic_cpu_interface.h b/bsp/phytium/libraries/standalone/drivers/gic/fgic/fgic_cpu_interface.h deleted file mode 100644 index 5535000552..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/gic/fgic/fgic_cpu_interface.h +++ /dev/null @@ -1,558 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fgic_cpu_interface.h - * Date: 2022-03-28 14:55:27 - * LastEditTime: 2022-03-28 14:55:27 - * Description:  This file is for gic register definition and operation. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/4/16 init commit - */ - - -#ifndef FGIC_CPU_INTERFACE_H -#define FGIC_CPU_INTERFACE_H - -#include "ftypes.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -#define FGIC_ICC_SGI1R_INTID_MASK 0xFULL /* The INTID of the SGI. */ - -#define GICC_SGIR_IRM_BITS SGI_ROUTING_MODE - -typedef enum -{ - GICC_SRE_SRE = (1 << 0), - GICC_SRE_DFB = (1 << 1), - GICC_SRE_DIB = (1 << 2), - GICC_SRE_ENABLE = (1 << 3) -} GICC_SRE_BITS; - -typedef enum -{ - GICC_CTLR_CBPR = (1 << 0), - GICC_CTLR_CBPR_EL1S = (1 << 0), - GICC_CTLR_EOIMODE = (1 << 1), - GICC_CTLR_CBPR_EL1NS = (1 << 1), - GICC_CTLR_EOIMODE_EL3 = (1 << 2), - GICC_CTLR_EOIMODE_EL1S = (1 << 3), - GICC_CTLR_EOIMODE_EL1NS = (1 << 4), /* GICC_EOIR and GICC_AEOIR provide priority drop functionality only. GICC_DIR provides interrupt deactivation functionality. */ - GICC_CTLR_RM = (1 << 5), - GICC_CTLR_PMHE = (1 << 6) -} GICC_CTLR_BITS; - - -#ifdef __aarch64__ - -void FGicSetICC_SRE_EL3(GICC_SRE_BITS bits); -void FGicSetICC_SRE_EL2(GICC_SRE_BITS bits); -void FGicSetICC_SRE_EL1(GICC_SRE_BITS bits); -u32 FGicGetICC_SRE_EL3(void); -u32 FGicGetICC_SRE_EL2(void); -u32 FGicGetICC_SRE_EL1(void); -void FGicEnableGroup0(void); -void FGicDisableGroup0(void); -void FGicEnableGroup1_EL1(void); -void FGicEnableGroup1_EL3(void); -void FGicDisableGroup1_EL1(void); -void FGicDisableGroup1_EL3(void); -void FGicSetICC_CTLR_EL3(GICC_CTLR_BITS reg_bits); -void FGicSetICC_CTLR_EL1(GICC_CTLR_BITS reg_bits); -u32 FGicGetICC_CTLR_EL3(void); -u32 FGicGetICC_CTLR_EL1(void); -u32 FGicWriteICC_APR0(void); -s32 FGicGetICC_APR1(void); -void FGicSetICC_EOIR0(u32 intnum); -void FGicSetICC_EOIR1(u32 intnum); -void FGicSetICC_DIR(u32 intnum); -void FGicSetICC_PMR(u32 priority_mask); -u32 FGicGetICC_PMR(void); -u32 FGicGetICC_BPR1(void); -void FGicSetICC_BPR1(u32 binary_point); -u32 FGicGetICC_BPR0(void); -void FGicSetICC_BPR0(u32 binary_point); -u32 FGicGetICC_HPPIR1(void); -void FGicSetICC_HPPIR1(u32 binary_point); -u32 FGicGetICC_HPPIR0(void); -void FGicSetICC_HPPIR0(u32 binary_point); -u32 FGicGetICC_RPR(void); -/* SGI interface */ -void FGicSetICC_SGI0R(u32 intnum, u32 target_list, GICC_SGIR_IRM_BITS mode, u64 affinity_list); -void FGicSetICC_SGI1R(u32 intnum, u32 target_list, GICC_SGIR_IRM_BITS mode, u64 affinity_list); -void FGicSetICC_ASGI1R(u32 intnum, u32 target_list, GICC_SGIR_IRM_BITS mode, u64 affinity_list); - - - -#else /* aarch32 */ - - - -/* For AArch32 state, accesses to GIC registers that are visible in the System register */ -#define FGIC_SYS_READ32(CR, Rt) __asm__ volatile("MRC " CR \ - : "=r"(Rt) \ - : \ - : "memory") -#define FGIC_SYS_WRITE32(CR, Rt) __asm__ volatile("MCR " CR \ - : \ - : "r"(Rt) \ - : "memory") - -#define FGIC_SYS_WRITE64(cp, op1, Rt, CRm) __asm__ volatile("MCRR p" #cp ", " #op1 ", %Q0, %R0, c" #CRm \ - : \ - : "r"(Rt) \ - : "memory") - - -#define ICC_IAR0 "p15, 0, %0, c12, c8, 0" -#define ICC_IAR1 "p15, 0, %0, c12, c12, 0" -/* writes to this register to inform the CPU interface -that it has completed the processing */ -#define ICC_EOIR0 "p15, 0, %0, c12, c8, 1" -#define ICC_EOIR1 "p15, 0, %0, c12, c12, 1" -/* GET the INTID of highest priority pending interrupt */ -#define ICC_HPPIR0 "p15, 0, %0, c12, c8, 2" -#define ICC_HPPIR1 "p15, 0, %0, c12, c12, 2" -#define ICC_BPR0 "p15, 0, %0, c12, c8, 3" -#define ICC_BPR1 "p15, 0, %0, c12, c12, 3" -#define ICC_DIR "p15, 0, %0, c12, c11, 1" -#define ICC_PMR "p15, 0, %0, c4, c6, 0" -#define ICC_RPR "p15, 0, %0, c12, c11, 3" -#define ICC_CTLR "p15, 0, %0, c12, c12, 4" -#define ICC_MCTLR "p15, 6, %0, c12, c12, 4" -#define ICC_SRE "p15, 0, %0, c12, c12, 5" -#define ICC_HSRE "p15, 4, %0, c12, c9, 5" -#define ICC_MSRE "p15, 6, %0, c12, c12, 5" -#define ICC_IGRPEN0 "p15, 0, %0, c12, c12, 6" -#define ICC_IGRPEN1 "p15, 0, %0, c12, c12, 7" -#define ICC_MGRPEN1 "p15, 6, %0, c12, c12, 7" - -#define FGicSetICC_SRE_EL1 FGicSetICC_SRE -#define FGicSetICC_SRE_EL2 FGicSetICC_SRE -#define FGicSetICC_SRE_EL3 FGicSetICC_SRE - -/** - * @name: - * @msg: void FGicSetICC_SRE(GICC_SRE_BITS bits) --- Interrupt Controller System Register Enable - * @return {*} - */ -static inline void FGicSetICC_SRE(GICC_SRE_BITS bits) -{ - FGIC_SYS_WRITE32(ICC_SRE, (u32)bits); - __asm__ volatile("isb 0xF" :: - : "memory"); -} - - -#define FGicGetICC_SRE_EL3 FGicGetICC_SRE -#define FGicGetICC_SRE_EL2 FGicGetICC_SRE -#define FGicGetICC_SRE_EL1 FGicGetICC_SRE - -/** - * @name: - * @msg: u32 FGicGetICC_SRE(void) -- Interrupt Controller System Register Enable - * @return {*} - */ -static inline u32 FGicGetICC_SRE(void) -{ - u32 value; - - FGIC_SYS_READ32(ICC_SRE, value); - return value; -} - - -/** - * @name: - * @msg: void FGicEnableGroup0(void) - * @return {*} - */ -static inline void FGicEnableGroup0(void) -{ - u32 value = 1; - FGIC_SYS_WRITE32(ICC_IGRPEN0, value); - __asm__ volatile("isb 0xF" :: - : "memory"); -} - -/** - * @name: - * @msg: void FGicDisableGroup0(void) - * @return {*} - */ -static inline void FGicDisableGroup0(void) -{ - u32 value = 0; - FGIC_SYS_WRITE32(ICC_IGRPEN0, value); - __asm__ volatile("isb 0xF" :: - : "memory"); -} - - -#define FGicEnableGroup1_EL3 FGicEnableGroup1 -#define FGicEnableGroup1_EL1 FGicEnableGroup1 - -/** - * @name: - * @msg: - * @return {*} - */ -static inline void FGicEnableGroup1(void) -{ - u32 value = 1; - FGIC_SYS_WRITE32(ICC_IGRPEN1, value); - __asm__ volatile("isb 0xF" :: - : "memory"); -} - - - -#define FGicDisableGroup1_EL3 FGicDisableGroup1 -#define FGicDisableGroup1_EL1 FGicDisableGroup1 - -/** - * @name: - * @msg: void FGicDisableGroup1(void) - * @return {*} - */ -static inline void FGicDisableGroup1(void) -{ - u32 value = 0; - FGIC_SYS_WRITE32(ICC_IGRPEN1, value); - __asm__ volatile("isb 0xF" :: - : "memory"); -} - -#define FGicSetICC_CTLR_EL3 FGicSetICC_CTLR -#define FGicSetICC_CTLR_EL1 FGicSetICC_CTLR - -/** - * @name: - * @msg: void FGicSetICC_CTLR(GICC_CTLR_BITS reg_bits) - * @return {*} - */ -static inline void FGicSetICC_CTLR(GICC_CTLR_BITS bits) -{ - FGIC_SYS_WRITE32(ICC_CTLR, bits); - __asm__ volatile("isb 0xF" :: - : "memory"); -} - -#define FGicGetICC_CTLR_EL3 FGicGetICC_CTLR -#define FGicGetICC_CTLR_EL1 FGicGetICC_CTLR - -/** - * @name: - * @msg: static inline u32 FGicGetICC_CTLR(void) -- Controls aspects of the behavior of the GIC CPU interface and provides information about the features implemented. - * @return {*} - */ -static inline u32 FGicGetICC_CTLR(void) -{ - u32 reg; - FGIC_SYS_READ32(ICC_CTLR, reg); - return reg; -} - -/** - * @name: - * @msg: static inline u32 FGicWriteICC_APR0(void) -- The PE reads this register to obtain the INTID of the signaled Group 0 interrupt. - * @return {*} - */ -static inline u32 FGicWriteICC_APR0(void) -{ - u32 reg; - FGIC_SYS_READ32(ICC_IAR0, reg); - return reg; -} - - -/** - * @name: - * @msg: static inline s32 FGicGetICC_APR1(void) -- The PE reads this register to obtain the INTID of the signaled Group 1 interrupt. - * @return {*} - */ -static inline s32 FGicGetICC_APR1(void) -{ - s32 reg; - FGIC_SYS_READ32(ICC_IAR1, reg); - return reg; -} - - -/** - * @name: - * @msg: static inline void FGicSetICC_EOIR0(u32 intnum) -- /* A PE writes to this register to inform the CPU interface that it has completed the processing of the specified Group 0 interrupt - * @return {*} - * @param {u32} intnum - */ -static inline void FGicSetICC_EOIR0(u32 intnum) -{ - FGIC_SYS_WRITE32(ICC_EOIR0, intnum); - __asm__ volatile("isb 0xF" :: - : "memory"); -} - - -/** - * @name: - * @msg: static inline void FGicSetICC_EOIR1(u32 intnum) -- /* A PE writes to this register to inform the CPU interface that it has completed the processing of the specified Group 1 interrupt - * @return {*} - */ -static inline void FGicSetICC_EOIR1(u32 intnum) -{ - FGIC_SYS_WRITE32(ICC_EOIR1, intnum); - __asm__ volatile("isb 0xF" :: - : "memory"); -} - -/** - * @name: - * @msg: static inline void FGicSetICC_DIR(u32 intnum) -- When interrupt priority drop is separated from interrupt deactivation, a write to this register deactivates the specified interrupt. - * @return {*} - */ -static inline void FGicSetICC_DIR(u32 intnum) -{ - FGIC_SYS_WRITE32(ICC_DIR, intnum); - __asm__ volatile("isb 0xF" :: - : "memory"); -} - -/** - * @name: - * @msg: static inline void FGicSetICC_PMR(u32 priority_mask) -- Provides an interrupt priority filter. - * @return {*} - */ -/** - * @name: - * @msg: - * @param {u32} priority_mask is level for the CPU interface. If the priority of an interrupt is higher than the value - * indicated by this field, the interface signals the interrupt to the PE. - */ -static inline void FGicSetICC_PMR(u32 priority_mask) -{ - FGIC_SYS_WRITE32(ICC_PMR, priority_mask); - __asm__ volatile("isb 0xF" :: - : "memory"); -} - - -/** - * @name: - * @msg: static inline u32 FGicGetICC_PMR(void) - * @return {*} - */ -static inline u32 FGicGetICC_PMR(void) -{ - u32 reg; - FGIC_SYS_READ32(ICC_PMR, reg); - return reg; -} - - -/** - * @name: - * @msg: static inline u32 FGicGetICC_BPR1(void) --- Defines the point at which the priority value fields split into two parts, the group priority field and the subpriority field. The group priority field determines Group 1 interrupt preemption. - * @return {*} - */ -static inline u32 FGicGetICC_BPR1(void) -{ - u32 reg; - FGIC_SYS_READ32(ICC_BPR1, reg); - return reg; -} - -/** - * @name: - * @msg: static inline void FGicSetICC_BPR1(u32 binary_point) - * @return {*} - */ -static inline void FGicSetICC_BPR1(u32 binary_point) -{ - FGIC_SYS_WRITE32(ICC_BPR1, binary_point); - __asm__ volatile("isb 0xF" :: - : "memory"); -} - -/** - * @name: - * @msg: static inline u32 FGicGetICC_BPR0(void) --- Defines the point at which the priority value fields split into two parts, the group priority field and the subpriority field. The group priority field determines Group 0 interrupt preemption. - * @return {*} - */ -static inline u32 FGicGetICC_BPR0(void) -{ - u32 reg; - FGIC_SYS_READ32(ICC_BPR0, reg); - return reg; -} - - -/** - * @name: - * @msg: static inline void FGicSetICC_BPR0(u32 binary_point) - * @return {*} - */ -static inline void FGicSetICC_BPR0(u32 binary_point) -{ - FGIC_SYS_WRITE32(ICC_BPR0, binary_point); - __asm__ volatile("isb 0xF" :: - : "memory"); -} - -/** - * @name: - * @msg: static inline u32 FGicGetICC_HPPIR1(void) --- Indicates the highest priority pending Group 1 interrupt on the CPU interface. - * @return {*} - */ -static inline u32 FGicGetICC_HPPIR1(void) -{ - u32 reg; - FGIC_SYS_READ32(ICC_HPPIR1, reg); - return reg; -} - - -/** - * @name: - * @msg: static inline void FGicSetICC_HPPIR1(u32 binary_point) - * @return {*} - */ -static inline void FGicSetICC_HPPIR1(u32 binary_point) -{ - FGIC_SYS_WRITE32(ICC_HPPIR1, binary_point); - __asm__ volatile("isb 0xF" :: - : "memory"); -} - -/** - * @name: - * @msg: static inline u32 FGicGetICC_HPPIR0(void) --- Indicates the highest priority pending Group 0 interrupt on the CPU interface. - * @return {*} - */ -static inline u32 FGicGetICC_HPPIR0(void) -{ - u32 reg; - FGIC_SYS_READ32(ICC_HPPIR0, reg); - return reg; -} - - -/** - * @name: - * @msg: static inline void FGicSetICC_HPPIR0(u32 binary_point) - * @return {*} - */ -static inline void FGicSetICC_HPPIR0(u32 binary_point) -{ - FGIC_SYS_WRITE32(ICC_HPPIR0, binary_point); - __asm__ volatile("isb 0xF" :: - : "memory"); -} - -/** - * @name: - * @msg: static inline u32 FGicGetICC_RPR(void) --- Indicates the Running priority of the CPU interface. - * @return {*} - */ -static inline u32 FGicGetICC_RPR(void) -{ - u32 reg; - FGIC_SYS_READ32(ICC_RPR, reg); - return reg; -} -/* SGI interface */ - -/** - * @name: - * @msg: static inline void FGicSetICC_SGI0R(u32 intnum,u32 target_list,GICC_SGIR_IRM_BITS mode,u64 affinity_list) --- Generates Secure Group 0 SGIs - * @return {*} - */ -/** - * @name: - * @msg: - * @return {*} - * @param {u32} intnum_bit - * @param {u32} target_list - * @param {GICC_SGIR_IRM_BITS} irm_bit - * @param {u64} affinity_list - */ -static inline void FGicSetICC_SGI0R(u32 intnum_bit, u32 target_list, GICC_SGIR_IRM_BITS irm_bit, u64 affinity_list) -{ - u64 sgi_val; - sgi_val = intnum_bit; /* The INTID of the SGI. */ - sgi_val |= affinity_list ; /* Aff3.Aff2.Aff1 */ - sgi_val |= irm_bit ; /* Interrupt Routing Mode. */ - sgi_val |= target_list; /* Target List. The set of PEs for which SGI interrupts will be generated. */ - - __asm__ volatile("dsb 0xF" :: - : "memory"); - FGIC_SYS_WRITE64(15, 2, sgi_val, 12); - __asm__ volatile("isb 0xF" :: - : "memory"); -} - -/** - * @name: - * @msg: static inline void FGicSetICC_SGI1R(u32 intnum,u32 target_list,GICC_SGIR_IRM_BITS mode,u64 affinity_list) - * @return {*} - */ -static inline void FGicSetICC_SGI1R(u32 intnum_bit, u32 target_list, GICC_SGIR_IRM_BITS irm_bit, u64 affinity_list) -{ - u64 sgi_val; - sgi_val = intnum_bit; /* The INTID of the SGI. */ - sgi_val |= affinity_list ; /* Aff3.Aff2.Aff1 */ - sgi_val |= irm_bit ; /* Interrupt Routing Mode. */ - sgi_val |= target_list; /* Target List. The set of PEs for which SGI interrupts will be generated. */ - - __asm__ volatile("dsb 0xF" :: - : "memory"); - FGIC_SYS_WRITE64(15, 0, sgi_val, 12); - __asm__ volatile("isb 0xF" :: - : "memory"); -} - - -/** - * @name: - * @msg: static inline void FGicSetICC_ASGI1R(u32 intnum,u32 target_list,GICC_SGIR_IRM_BITS mode,u64 affinity_list) - * @return {*} - */ -static inline void FGicSetICC_ASGI1R(u32 intnum_bit, u32 target_list, GICC_SGIR_IRM_BITS irm_bit, u64 affinity_list) -{ - u64 sgi_val; - sgi_val = intnum_bit; /* The INTID of the SGI. */ - sgi_val |= affinity_list ; /* Aff3.Aff2.Aff1 */ - sgi_val |= irm_bit ; /* Interrupt Routing Mode. */ - sgi_val |= target_list; /* Target List. The set of PEs for which SGI interrupts will be generated. */ - - __asm__ volatile("dsb 0xF" :: - : "memory"); - FGIC_SYS_WRITE64(15, 1, sgi_val, 12); - __asm__ volatile("isb 0xF" :: - : "memory"); -} - - -#endif - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/bsp/phytium/libraries/standalone/drivers/gic/fgic/fgic_distributor.h b/bsp/phytium/libraries/standalone/drivers/gic/fgic/fgic_distributor.h deleted file mode 100644 index b2fe66fed6..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/gic/fgic/fgic_distributor.h +++ /dev/null @@ -1,176 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fgic_distributor.h - * Date: 2022-03-28 15:18:56 - * LastEditTime: 2022-03-28 15:18:56 - * Description: This file is for gic distributor implementation. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/4/16 init commit - */ - -#ifndef FGIC_DISTRIBUTOR_H -#define FGIC_DISTRIBUTOR_H - -#include "fgic.h" -#include "fgic_hw.h" -#include "ftypes.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -#define GICD_ICFGR_MODE TRIGGER_LEVEL -#define GICD_IRPITER_MODE SPI_ROUTING_MODE - -typedef enum -{ - GICD_CTLR_ENABLE_GRP0 = (1 << 0), - GICD_CTLR_ENABLE_GRP1_NS = (1 << 1), - GICD_CTLR_ENABLE_GRP1A = (1 << 1), - GICD_CTLR_ENABLE_GRP1S = (1 << 2), - GICD_CTLR_ENABLE_ALL = (1 << 2) | (1 << 1) | (1 << 0), - GICD_CTLR_BIT_ARE_S = (1 << 4), /* Enable Secure state affinity routing , for single Security state ,this bit is */ - GICD_CTLR_BIT_ARE_NS = (1 << 5), /* Enable Non-Secure state affinity routing */ - GICD_CTLR_BIT_DS = (1 << 6), /* Disable Security support */ - GICD_CTLR_BIT_E1NWF = (1 << 7) /* Enable "1-of-N" wakeup model */ -} GICD_CTLR_VALUE; - -typedef enum -{ - GICD_GROUP_G0S = 0, - GICD_GROUP_G1NS = (1 << 0), - GICD_GROUP_G1S = (1 << 2), -} GICD_GROUP_SECURE_MODE; - -static inline void FGicSetGicd(uintptr dist_base, GICD_CTLR_VALUE ctrl_value) -{ - FGIC_GICD_CTLR_WRITE(dist_base, ctrl_value); -} - -/** - * @name: FGicEnableSPI - * @msg: configure the priority for a shared peripheral interrupt - * @param {FGic} *gic_p is a pointer to the FGic instance. - * @param {u32} spi_id spi interrupt identifier ,value range 32-1019 - */ -static inline void FGicEnableSPI(uintptr dist_base, u32 spi_id) -{ - FGIC_GICD_ISENABLER_WRITE_N_MASK(dist_base, spi_id, (1U << (spi_id % 32))); -} - -static inline void FGicDisableSPI(uintptr dist_base, u32 spi_id) -{ - FGIC_GICD_ICENABLER_WRITE_N_MASK(dist_base, spi_id, (1U << (spi_id % 32))); -} - -static inline void FGicSetSpiPriority(uintptr dist_base, u32 spi_id, u32 priority) -{ - u32 mask; - - /* For SPIs , has one byte-wide entry per interrupt */ - mask = FGIC_GICD_IPRIORITYR_READ_N_MASK(dist_base, spi_id); - mask &= ~FGIC_GICD_IPRIORITYR_VALUE_MASK(spi_id); - mask |= ((priority & 0xffU) << (spi_id % 4) * 8U); - FGIC_GICD_IPRIORITYR_WRITE_N_MASK(dist_base, spi_id, mask); -} - -static inline u32 FGicGetSpiPriority(uintptr dist_base, u32 spi_id) -{ - u32 mask; - - /* For SPIs , has one byte-wide entry per interrupt */ - mask = FGIC_GICD_IPRIORITYR_READ_N_MASK(dist_base, spi_id); - - return (mask >> ((spi_id % 4U) * 8U)) & 0xFFU ; -} - -static inline void FGicSetSpiRoute(uintptr dist_base, u32 spi_id, GICD_IRPITER_MODE route_mode, u64 affinity) -{ - u32 bank; - - /* For SPIs ,has one doubleword-wide entry per interrupt */ - bank = spi_id & FGIC_GICD_IROUTER_RANGE_LIMIT; - __asm__ volatile("dsb 0xF" ::: "memory"); - FGIC_GICD_IROUTER_WRITE(dist_base, bank, affinity | route_mode); - __asm__ volatile("isb 0xF" ::: "memory"); -} - -static inline u64 FGicGetSpiRoute(uintptr dist_base, u32 spi_id) -{ - u32 bank; - /* For SPIs ,has one doubleword-wide entry per interrupt */ - bank = spi_id & FGIC_GICD_IROUTER_RANGE_LIMIT; - return FGIC_GICD_IROUTER_READ(dist_base, bank); -} - -static inline void FGicSetSpiLevel(uintptr dist_base, u32 spi_id, GICD_ICFGR_MODE mode) -{ - u32 mask ; - mask = FGIC_GICD_ICFGR_READ_N_MASK(dist_base, spi_id); - mask &= ~FGIC_GICD_ICFGR_VALUE_MASK(spi_id); - mask |= (mode << FGIC_GICD_ICFGR_VALUE_OFFSET(spi_id)); - FGIC_GICD_ICFGR_WRITE_N_MASK(dist_base, spi_id, mask); -} - -static inline u32 FGicGetSpiLevel(uintptr dist_base, u32 spi_id) -{ - u32 mask ; - mask = FGIC_GICD_ICFGR_READ_N_MASK(dist_base, spi_id); - return (mask >> ((spi_id % 16U) >> 1U)) ; -} - -static inline void FGicSetSpiSecurity(uintptr dist_base, u32 spi_id, GICD_GROUP_SECURE_MODE mode) -{ - u32 mask ; - /* Group status */ - mask = FGIC_GICD_IGROUPR_READ_N_MASK(dist_base, spi_id); - mask &= ~FGIC_GICD_IGROUPR_VALUE_MASK(spi_id); - - mask |= ((mode & 0x1) << (spi_id % 32)); - FGIC_GICD_IGROUPR_WRITE_N_MASK(dist_base, spi_id, mask); - - /* Group modifier */ - mask = FGIC_GICD_IGRPMODR_READ_N_MASK(dist_base, spi_id); - mask &= ~FGIC_GICD_IGRPMODR_VALUE_MASK(spi_id); - - mask |= (((mode & 0x2) >> 1) << (spi_id % 32)); - FGIC_GICD_IGRPMODR_WRITE_N_MASK(dist_base, spi_id, mask); -} - -static inline u32 FGicGetSpiSecurity(uintptr dist_base, u32 spi_id) -{ - u32 mask ; - u32 group_status, group_modifier; - /* Group status */ - mask = FGIC_GICD_IGROUPR_READ_N_MASK(dist_base, spi_id); - mask &= FGIC_GICD_IGROUPR_VALUE_MASK(spi_id); - group_status = (mask >> (spi_id % 32)); - - /* Group modifier */ - mask = FGIC_GICD_IGRPMODR_READ_N_MASK(dist_base, spi_id); - mask &= FGIC_GICD_IGRPMODR_VALUE_MASK(spi_id); - group_modifier = (mask >> (spi_id % 32)); - - return ((group_modifier << 1) | group_status); -} - -#ifdef __cplusplus -} -#endif - -#endif // ! diff --git a/bsp/phytium/libraries/standalone/drivers/gic/fgic/fgic_g.c b/bsp/phytium/libraries/standalone/drivers/gic/fgic/fgic_g.c deleted file mode 100644 index 060e87806d..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/gic/fgic/fgic_g.c +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fgic_g.c - * Date: 2022-03-30 14:57:43 - * LastEditTime: 2022-03-30 14:57:43 - * Description:  This file is for gic static configuration implementation. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/4/16 init commit - */ - -#include "fparameters.h" -#include "fgic.h" - -FGicConfig fgic_config[FGIC_NUM] = -{ - { - .instance_id = 0, /* Id of device */ - .dis_base = GICV3_DISTRIBUTOR_BASE_ADDR, /* Distributor base address */ - } -}; \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/gic/fgic/fgic_hw.h b/bsp/phytium/libraries/standalone/drivers/gic/fgic/fgic_hw.h deleted file mode 100644 index 0c74cb4fab..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/gic/fgic/fgic_hw.h +++ /dev/null @@ -1,345 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fgic_hw.h - * Date: 2022-03-24 11:44:48 - * LastEditTime: 2022-03-24 11:44:48 - * Description: This file is for gic register definition. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/4/16 init commit - */ - -#ifndef FGIC_HW_H -#define FGIC_HW_H - -#include "ftypes.h" -#include "fio.h" -#include "fkernel.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/* Distributor */ -#define FGIC_GICD_CTLR_OFFSET 0x00000000U /* Distributor Control Register ,RW */ -#define FGIC_GICD_TYPER_OFFSET 0x00000004U /* Interrupt Controller Type Register ,RO */ -#define FGIC_GICD_IIDR_OFFSET 0x00000008U /* Distributor Implementer Identification Register ,RO */ -#define FGIC_GICD_TYPER2_OFFSET 0x0000000CU /* Interrupt controller Type Register 2,RO */ -#define FGIC_GICD_STATUSR_OFFSET 0x00000010U /* Error Reporting Status Register, optional ,RW */ -#define FGIC_GICD_SETSPI_NSR_OFFSET 0x00000040U /* Set SPI Register ,WO */ -#define FGIC_GICD_CLRSPI_NSR_OFFSET 0x00000048U /* Clear SPI Register ,WO */ -#define FGIC_GICD_SETSPI_SR_OFFSET 0x00000050U /* Set SPI, Secure Register ,WO */ -#define FGIC_GICD_CLRSPI_SR_OFFSET 0x00000058U /* Clear SPI, Secure Register ,WO */ -#define FGIC_GICD_IGROUPR_OFFSET 0x00000080U /* Interrupt Group Registers ,RW */ - -#define FGIC_GICD_ISENABLER_OFFSET 0x00000100U /* Interrupt Set-Enable Registers ,RW */ -#define FGIC_GICD_ICENABLER_OFFSET 0x00000180U /* Interrupt Clear-Enable Registers ,RW */ -#define FGIC_GICD_ISPENDR_OFFSET 0x00000200U /* Interrupt Set-Pending Registers ,RW */ -#define FGIC_GICD_ICPENDR_OFFSET 0x00000280U /* Interrupt Clear-Pending Registers ,RW */ -#define FGIC_GICD_ISACTIVER_OFFSET 0x00000300U /* Interrupt Set-Active Registers ,RW */ -#define FGIC_GICD_ICACTIVER_OFFSET 0x00000380U /* Interrupt Clear-Active Registers ,RW */ -#define FGIC_GICD_IPRIORITYR_OFFSET 0x00000400U /* Interrupt Priority Registers ,RW */ -#define FGIC_GICD_ITARGETSR_OFFSET 0x00000800U /* Interrupt Processor Targets Registers ,RO */ - -#define FGIC_GICD_ICFGR_OFFSET 0x00000C00U /* Interrupt Configuration Registers ,RW */ -#define FGIC_GICD_IGRPMODR_OFFSET 0x00000D00U /* Interrupt Group Modifier Registers */ - -#define FGIC_GICD_NSACR_OFFSET 0x00000E00U /* Non-secure Access Control ,RW */ -#define FGIC_GICD_SGIR_OFFSET 0x00000F00U /* Software Generated Interrupt Register ,WO */ -#define FGIC_GICD_CPENDSGIR_OFFSET 0x00000F10U /* SGI Clear-Pending Registers ,RW */ -#define FGIC_GICD_SPENDSGIR_OFFSET 0x00000F20U /* SGI Set-Pending Registers ,RW */ - -#define FGIC_GICD_IGROUPR_E_OFFSET 0x00001000U /* Interrupt Group Registers for extended SPI ,RW */ - -#define FGIC_GICD_ISENABLER_E_OFFSET 0x00001200U /* Interrupt Set-Enable for extended SPI ,RW */ - -#define FGIC_GICD_ICENABLER_E_OFFSET 0x00001400U /* Interrupt Clear-Enable for extended SPI ,RW */ - -#define FGIC_GICD_ISPENDR_E_OFFSET 0x00001600U /* Interrupt Set-Pend for extended SPI range ,RW */ -#define FGIC_GICD_ICPENDR_E_OFFSET 0x00001800U /* Interrupt Clear-Pend for extended SPI ,RW */ - -#define FGIC_GICD_ISACTIVER_E_OFFSET 0x00001A00U /* Interrupt Set-Active for extended SPI ,RW */ - -#define FGIC_GICD_ICACTIVER_E_OFFSET 0x00001C00U /* Interrupt Clear-Active for extended SPI ,RW */ - -#define FGIC_GICD_IPRIORITYR_E_OFFSET 0x00002000U /* Interrupt Priority for extended SPI range ,RW */ -#define FGIC_GICD_ICFGR_E_OFFSET 0x00003000U /* Extended SPI Configuration Register ,RW */ -#define FGIC_GICD_IGRPMODR_E_OFFSET 0x00003400U /* Interrupt Group Modifier for extended SPI ,RW */ -#define FGIC_GICD_NSACR_E_OFFSET 0x00003600U /* Non-secure Access Control Registers for extended SPI range ,RW */ - -#define FGIC_GICD_IROUTER_OFFSET 0x00006000U /* Interrupt Routing Registers ,RW ,The offset of the GICD_IROUTER register is 0x6000 + 8n. */ -#define FGIC_GICD_IROUTER_E_OFFSET 0x00008000U /* Interrupt Routing Registers for extended SPI range ,RW */ - -/* Redistributor - RD_BASE */ -/* Each Redistributor defines two 64KB frames in the physical address map */ -#define FGIC_GICR_CTLR_OFFSET 0x00000000U /* See the register description Redistributor Control Register ,RW */ -#define FGIC_GICR_IIDR_OFFSET 0x00000004U /* Implementer Identification Register ,RO */ -#define FGIC_GICR_TYPER_OFFSET 0x00000008U /* Redistributor Type Register ,RO */ -#define FGIC_GICR_STATUSR_OFFSET 0x00000010U /* Error Reporting Status Register, optional ,RW */ -#define FGIC_GICR_WAKER_OFFSET 0x00000014U /* See the register description Redistributor Wake Register ,RW */ -#define FGIC_GICR_MPAMIDR_OFFSET 0x00000018U /* Report maximum PARTID and PMG Register ,RO */ -#define FGIC_GICR_PARTIDR_OFFSET 0x0000001CU /* Set PARTID and PMG Register ,RW */ - -#define FGIC_GICR_SETLPIR_OFFSET 0x00000040U /* Set LPI Pending Register ,WO */ -#define FGIC_GICR_CLRLPIR_OFFSET 0x00000048U /* Clear LPI Pending Register ,WO */ - -#define FGIC_GICR_PROPBASER_OFFSET 0x00000070U /* Redistributor Properties Base Address Register ,RW */ -#define FGIC_GICR_PENDBASER_OFFSET 0x00000078U /* Redistributor LPI Pending Table Base Address Register ,RW */ - -/* Redistributor - SGI_BASE */ - -#define FGIC_GICR_SGI_BASE_OFFSET 0x10000U /* 64KB frames */ - -#define FGIC_GICR_IGROUPR0_OFFSET 0x00000080U /* Interrupt Group Register 0 ,RW */ -#define FGIC_GICR_IGROUPR_E_OFFSET 0x00000084U /* Interrupt Group Registers for extended PPI range ,RW */ - -#define FGIC_GICR_ISENABLER0_OFFSET 0x00000100U /* Interrupt Set-Enable Register 0 ,RW */ -#define FGIC_GICR_ISENABLER_E_OFFSET 0x00000104U /* Interrupt Set-Enable for extended PPI range ,RW */ - -#define FGIC_GICR_ICENABLER0_OFFSET 0x00000180U /* Interrupt Clear-Enable Register 0 ,RW */ -#define FGIC_GICR_ICENABLER_E_OFFSET 0x00000184U /* Interrupt Clear-Enable for extended PPI range ,RW */ - - -#define FGIC_GICR_ISPENDR0_OFFSET 0x00000200U /* Interrupt Set-Pend Register 0 ,RW */ -#define FGIC_GICR_ISPENDR_E_OFFSET 0x00000204U /* Interrupt Set-Pend for extended PPI range ,RW */ - -#define FGIC_GICR_ICPENDR0_OFFSET 0x00000280U /* Interrupt Clear-Pend Register 0 ,RW */ - -#define FGIC_GICR_ICPENDR_E_OFFSET 0x00000284U /* Interrupt Clear-Pend for extended PPI range ,RW */ - -#define FGIC_GICR_ISACTIVER0_OFFSET 0x00000300U /* Interrupt Set-Active Register 0 ,RW */ -#define FGIC_GICR_ISACTIVER_E_OFFSET 0x00000304U /* Interrupt Set-Active for extended PPI range ,RW */ - -#define FGIC_GICR_ICACTIVER0_OFFSET 0x00000380U /* Interrupt Clear-Active Register 0 ,RW */ -#define FGIC_GICR_ICACTIVER_E_OFFSET 0x00000384U /* Interrput Clear-Active for extended PPI range ,RW */ - -#define FGIC_GICR_IPRIORITYR_OFFSET 0x00000400U /* Interrupt Priority Registers ,RW */ -#define FGIC_GICR_IPRIORITYR_E_OFFSET 0x00000420U /* Interrupt Priority for extended PPI range ,RW */ - -#define FGIC_GICR_ICFGR0_OFFSET 0x00000C00U /* SGI Configuration Register ,RW*/ -#define FGIC_GICR_ICFGR1_OFFSET 0x00000C04U /* PPI Configuration Register ,RW*/ - -#define FGIC_GICR_ICFGR_E_OFFSET 0x00000C08U /* Extended PPI Configuration Register ,RW */ -#define FGIC_GICR_IGRPMODR0_OFFSET 0x00000D00U /* Interrupt Group Modifier Register 0 ,RW */ - -#define FGIC_GICR_IGRPMODR_E_OFFSET 0x00000D04U /* Interrupt Group Modifier for extended PPI range ,RW */ - -#define FGIC_GICR_NSACR_OFFSET 0x00000E00U /* Non-Secure Access Control Register ,RW */ - -#define FGIC_READREG8(addr, reg_offset) FtIn8(addr + (u8)reg_offset) -#define FGIC_WRITEREG8(addr, reg_offset, reg_value) FtOut8(addr + (u8)reg_offset, (u8)reg_value) - -#define FGIC_READREG32(addr, reg_offset) FtIn32(addr + (u32)reg_offset) -#define FGIC_WRITEREG32(addr, reg_offset, reg_value) FtOut32(addr + (u32)reg_offset, (u32)reg_value) - -#ifdef __aarch64__ - -#define FGIC_READREG64(addr, reg_offset) FtIn64(addr + (u64)reg_offset) -#define FGIC_WRITEREG64(addr, reg_offset, reg_value) FtOut64(addr +(u64)reg_offset, (u64)reg_value) - -#else - -#define FGIC_READREG64(addr, reg_offset) \ -({ \ - u64 reg_val; \ - reg_val = FtIn32(addr + (u32)reg_offset + 4); \ - reg_val = (reg_val << 32) | FtIn32(addr + (u32)reg_offset); \ - reg_val; \ -}) - -#define FGIC_WRITEREG64(addr, reg_offset, reg_value) \ -({ \ - FtOut32(addr + (u32)reg_offset, (u32)reg_value); \ - FtOut32(addr + (u32)reg_offset + 4, (u32)(((u64)reg_value) >> 32)); \ -}) - -#endif - - -#define FGIC_SETBIT(base_addr, reg_offset, data) \ - FtSetBit32((base_addr) + (u32)(reg_offset), (u32)(data)) - -#define FGIC_CLEARBIT(base_addr, reg_offset, data) \ - FtClearBit32((base_addr) + (u32)(reg_offset), (u32)(data)) - -/* FGIC_GICD_CTLR_OFFSET --- Distributor switch */ -#define FGIC_GICD_CTLR_RWP_MASK BIT(31) -#define FGIC_GICD_CTLR_DS_MASK BIT(6) - -/* Need check system whether support Security states */ - -#define FGIC_GICD_CTLR_WRITE(gicd_base, reg) FGIC_WRITEREG32(gicd_base , FGIC_GICD_CTLR_OFFSET, reg) -#define FGIC_GICD_CTLR_READ(gicd_base) FGIC_READREG32(gicd_base , FGIC_GICD_CTLR_OFFSET) - -/* FGIC_GICD_ISENABLER_OFFSET --- SPI Open */ -#define FGIC_GICD_ISENABLER_VALUE_OFFSET(itnum) ((itnum % 32U)) -#define FGIC_GICD_ISENABLER_VALUE_MASK(itnum) (0x1U << FGIC_GICD_ISENABLER_VALUE_OFFSET(itnum)) -#define FGIC_GICD_ISENABLER_READ_N_MASK(gicd_base,itnum) FGIC_READREG32(gicd_base , FGIC_GICD_ISENABLER_OFFSET + ((itnum >> 5)<<2) ) -#define FGIC_GICD_ISENABLER_WRITE_N_MASK(gicd_base,itnum,reg) FGIC_WRITEREG32(gicd_base , FGIC_GICD_ISENABLER_OFFSET + ((itnum >> 5)<<2), reg) - -/* FGIC_GICD_TYPER_OFFSET --- Provides information about what features the GIC implementation supports. */ -#define FGIC_GICD_TYPER_ITLINESNUMBER_MASK 0x1f - - -/* FGIC_GICD_ICENABLER_OFFSET --- SPI close */ -#define FGIC_GICD_ICENABLER_DEFAULT_MASK BIT_MASK(32) -#define FGIC_GICD_ICENABLER_VALUE_OFFSET(itnum) ((itnum % 32U)) -#define FGIC_GICD_ICENABLER_VALUE_MASK(itnum) (0x1U << FGIC_GICD_ICENABLER_VALUE_OFFSET(itnum)) -#define FGIC_GICD_ICENABLER_READ_N_MASK(gicd_base,itnum) FGIC_READREG32(gicd_base , FGIC_GICD_ICENABLER_OFFSET + ((itnum >> 5)<<2) ) -#define FGIC_GICD_ICENABLER_WRITE_N_MASK(gicd_base,itnum,reg) FGIC_WRITEREG32(gicd_base , FGIC_GICD_ICENABLER_OFFSET + ((itnum >> 5)<<2), reg) - - -/* FGIC_GICD_IPRIORITYR_OFFSET --- SPI priority */ -#define FGIC_GICD_IPRIORITYR_VALUE_MASK(itnum) (0xFFU << ((itnum % 4U) << 3)) -#define FGIC_GICD_IPRIORITYR_READ_N_MASK(gicd_base,itnum) FGIC_READREG32(gicd_base , FGIC_GICD_IPRIORITYR_OFFSET + ((itnum >> 2)<<2) ) -#define FGIC_GICD_IPRIORITYR_WRITE_N_MASK(gicd_base,itnum,reg) FGIC_WRITEREG32(gicd_base , FGIC_GICD_IPRIORITYR_OFFSET + ((itnum >> 2)<<2), reg) - -/* FGIC_GICD_IROUTER_OFFSET --- SPI Routing */ -#define FGIC_GICD_IROUTER_AFFINITY_MASK (((0xFFULL) <<32)|((0xFFULL) <<16)|((0xFFULL)<<8)|(0xFFULL)) /* affinity mask */ -#define FGIC_GICD_IROUTER_RANGE_LIMIT (1023) /* GICD_IROUTER, Interrupt Routing Registers, n = 0 - 1019 */ -#define FGIC_GICD_IROUTER_BYTE_WIDTH 8 -#define FGIC_GICD_IROUTER_WRITE(gicd_base, bank, reg) FGIC_WRITEREG64(gicd_base , FGIC_GICD_IROUTER_OFFSET + (bank * FGIC_GICD_IROUTER_BYTE_WIDTH), reg) -#define FGIC_GICD_IROUTER_READ(gicd_base, bank) FGIC_READREG64(gicd_base , FGIC_GICD_IROUTER_OFFSET + (bank * FGIC_GICD_IROUTER_BYTE_WIDTH)) - -/* FGIC_GICD_ITARGETSR_OFFSET --- legacy operation ( affinity routing is not enabled) */ -#define FGIC_GICD_ITARGETSR_BYTE_WIDTH 4 -#define FGIC_GICD_ITARGETSR_WRITE(gicd_base, bank, reg) FGIC_WRITEREG32(gicd_base , FGIC_GICD_ITARGETSR_OFFSET + (bank * FGIC_GICD_ITARGETSR_BYTE_WIDTH), reg) -#define FGIC_GICD_ITARGETSR_READ(gicd_base, bank) FGIC_READREG32(gicd_base , FGIC_GICD_ITARGETSR_OFFSET + (bank * FGIC_GICD_ITARGETSR_BYTE_WIDTH)) - -/* FGIC_GICD_ICFGR_OFFSET --- edge-triggered or level-sensitive */ -#define FGIC_GICD_ICFGR_VALUE_OFFSET(itnum) ((itnum % 16U) << 1) -#define FGIC_GICD_ICFGR_VALUE_MASK(itnum) (0x3U << FGIC_GICD_ICFGR_VALUE_OFFSET(itnum)) -#define FGIC_GICD_ICFGR_READ_N_MASK(gicd_base,itnum) FGIC_READREG32(gicd_base , FGIC_GICD_ICFGR_OFFSET + ((itnum >> 4)<<2) ) -#define FGIC_GICD_ICFGR_WRITE_N_MASK(gicd_base,itnum,reg) FGIC_WRITEREG32(gicd_base , FGIC_GICD_ICFGR_OFFSET + ((itnum >> 4)<<2), reg) - - -/* FGIC_GICD_ISPENDR_OFFSET --- about spi pending */ -#define FGIC_GICD_ISPENDR_BYTE_WIDTH 4 -#define FGIC_GICD_ISPENDR_WRITE(gicd_base, bank, reg) FGIC_WRITEREG32(gicd_base , FGIC_GICD_ISPENDR_OFFSET + (bank * FGIC_GICD_ISPENDR_BYTE_WIDTH), reg) -#define FGIC_GICD_ISPENDR_READ(gicd_base, bank) FGIC_READREG32(gicd_base , FGIC_GICD_ISPENDR_OFFSET + (bank * FGIC_GICD_ISPENDR_BYTE_WIDTH)) - - -/* FGIC_GICD_ICPENDR_OFFSET --- about spi pending */ -#define FGIC_GICD_ICPENDR_DEFAULT_MASK BIT_MASK(32) -#define FGIC_GICD_ICPENDR_VALUE_OFFSET(itnum) ((itnum % 32U)) -#define FGIC_GICD_ICPENDR_VALUE_MASK(itnum) (0x1U << FGIC_GICD_ICPENDR_VALUE_OFFSET(itnum)) -#define FGIC_GICD_ICPENDR_READ_N_MASK(gicd_base,itnum) FGIC_READREG32(gicd_base , FGIC_GICD_ICPENDR_OFFSET + ((itnum >> 5)<<2) ) -#define FGIC_GICD_ICPENDR_WRITE_N_MASK(gicd_base,itnum,reg) FGIC_WRITEREG32(gicd_base , FGIC_GICD_ICPENDR_OFFSET + ((itnum >> 5)<<2), reg) - - - - -/* FGIC_GICD_IGROUPR_OFFSET --- */ -#define FGIC_GICD_IGROUPR_VALUE_OFFSET(itnum) ((itnum % 32U)) -#define FGIC_GICD_IGROUPR_VALUE_MASK(itnum) (0x1U << FGIC_GICD_IGROUPR_VALUE_OFFSET(itnum)) -#define FGIC_GICD_IGROUPR_READ_N_MASK(gicd_base,itnum) FGIC_READREG32(gicd_base , FGIC_GICD_IGROUPR_OFFSET + ((itnum >> 5)<<2) ) -#define FGIC_GICD_IGROUPR_WRITE_N_MASK(gicd_base,itnum,reg) FGIC_WRITEREG32(gicd_base , FGIC_GICD_IGROUPR_OFFSET + ((itnum >> 5)<<2), reg) - - -/* FGIC_GICD_IGRPMODR_OFFSET --- Controls whether the corresponding interrupt is in Secure Group 0、Non-secure Group 1、 Secure Group 1 */ -#define FGIC_GICD_IGRPMODR_DEFAULT_MASK BIT_MASK(32) -#define FGIC_GICD_IGRPMODR_VALUE_OFFSET(itnum) ((itnum % 32U)) -#define FGIC_GICD_IGRPMODR_VALUE_MASK(itnum) (0x1U << FGIC_GICD_IGRPMODR_VALUE_OFFSET(itnum)) -#define FGIC_GICD_IGRPMODR_READ_N_MASK(gicd_base,itnum) FGIC_READREG32(gicd_base , FGIC_GICD_IGRPMODR_OFFSET + ((itnum >> 5)<<2) ) -#define FGIC_GICD_IGRPMODR_WRITE_N_MASK(gicd_base,itnum,reg) FGIC_WRITEREG32(gicd_base , FGIC_GICD_IGRPMODR_OFFSET + ((itnum >> 5)<<2), reg) - - -/* FGIC_GICR_TYPER_OFFSET --- Provides information about the configuration of this Redistributor. */ -#define FGIC_GICR_TYPER_BYTE_WIDTH 4 -#define FGIC_GICR_TYPER_L_READ(redis_base) FGIC_READREG32(redis_base , FGIC_GICR_TYPER_OFFSET) -#define FGIC_GICR_TYPER_H_READ(redis_base) FGIC_READREG32(redis_base , FGIC_GICR_TYPER_OFFSET + FGIC_GICR_TYPER_BYTE_WIDTH) - -/* FGIC_GICR_WAKER_OFFSET --- Permits software to control the behavior of the WakeRequest power management signal corresponding to the Redistributor */ -#define FGIC_GICR_WAKER_PROCESSOR_SLEEP_MASK BIT(1) -#define FGIC_GICR_WAKER_CHILDREN_ASLEEP_MASK BIT(2) -#define FGIC_GICR_WAKER_CLEAR_BIT(redis_base, bit) FGIC_CLEARBIT(redis_base,FGIC_GICR_WAKER_OFFSET,bit) -#define FGIC_GICR_WAKER_WRITE(redis_base, reg) FGIC_WRITEREG32(redis_base , FGIC_GICR_WAKER_OFFSET, reg) -#define FGIC_GICR_WAKER_READ(redis_base) FGIC_READREG32(redis_base , FGIC_GICR_WAKER_OFFSET) - -/* FGIC_GICR_IPRIORITYR_OFFSET --- Enables forwarding of the corresponding SGI or PPI to the CPU interfaces*/ -#define FGIC_GICR_IPRIORITYR_VALUE_MASK(itnum) (0xFFU << ((itnum % 4U) << 3)) -#define FGIC_GICR_IPRIORITYR_READ(sgi_base,itnum) FGIC_READREG32(sgi_base , FGIC_GICR_IPRIORITYR_OFFSET + ((itnum >> 2)<<2) ) -#define FGIC_GICR_IPRIORITYR_WRITE(sgi_base,itnum,reg) FGIC_WRITEREG32(sgi_base , FGIC_GICR_IPRIORITYR_OFFSET + ((itnum >> 2)<<2), reg) - -/* FGIC_GICR_ISPENDR0_OFFSET --- Adds the pending state to the corresponding SGI or PPI. */ -#define FGIC_GICR_ISPENDR0_WRITE(sgi_base, reg) FGIC_WRITEREG32(sgi_base , FGIC_GICR_ISPENDR0_OFFSET, reg) -#define FGIC_GICR_ISPENDR0_READ(sgi_base) FGIC_READREG32(sgi_base , FGIC_GICR_ISPENDR0_OFFSET) - -/* FGIC_GICR_ICPENDR0_OFFSET --- Removes the pending state from the corresponding SGI or PPI. */ -#define FGIC_GICR_ICPENDR0_DEFAULT_MASK BIT_MASK(32) -#define FGIC_GICR_ICPENDR0_WRITE(sgi_base, reg) FGIC_WRITEREG32(sgi_base , FGIC_GICR_ICPENDR0_OFFSET, reg) -#define FGIC_GICR_ICPENDR0_READ(sgi_base) FGIC_READREG32(sgi_base , FGIC_GICR_ICPENDR0_OFFSET) - -/* FGIC_GICR_ISACTIVER0_OFFSET --- Activates the corresponding SGI or PPI. These registers are used when saving and restoring GIC state. */ - -#define FGIC_GICR_ISACTIVER0_WRITE(sgi_base, reg) FGIC_WRITEREG32(sgi_base , FGIC_GICR_ISACTIVER0_OFFSET, reg) -#define FGIC_GICR_ISACTIVER0_READ(sgi_base) FGIC_READREG32(sgi_base , FGIC_GICR_ISACTIVER0_OFFSET) - -/* FGIC_GICR_ICACTIVER0_OFFSET --- Deactivates the corresponding SGI or PPI. These registers are used when saving and restoring GIC state.*/ -#define FGIC_GICR_ICACTIVER0_WRITE(sgi_base, reg) FGIC_WRITEREG32(sgi_base , FGIC_GICR_ICACTIVER0_OFFSET, reg) -#define FGIC_GICR_ICACTIVER0_READ(sgi_base) FGIC_READREG32(sgi_base , FGIC_GICR_ICACTIVER0_OFFSET) - -/* FGIC_GICR_IGROUPR0_OFFSET --- Controls whether the corresponding SGI or PPI is in Group 0 or Group 1. */ -#define FGIC_GICR_IGROUPR0_DEFAULT_MASK BIT_MASK(32) -#define FGIC_GICR_IGROUPR0_VALUE_OFFSET(itnum) ((itnum % 32U)) -#define FGIC_GICR_IGROUPR0_VALUE_MASK(itnum) (0x1U << FGIC_GICR_IGROUPR0_VALUE_OFFSET(itnum)) -#define FGIC_GICR_IGROUPR0_WRITE(sgi_base, reg) FGIC_WRITEREG32(sgi_base , FGIC_GICR_IGROUPR0_OFFSET, reg) -#define FGIC_GICR_IGROUPR0_READ(sgi_base) FGIC_READREG32(sgi_base , FGIC_GICR_IGROUPR0_OFFSET) - -/* FGIC_GICR_IGRPMODR0_OFFSET --- controls whether the corresponding interrupt is in: • Secure Group 0.• Non-secure Group 1.• When System register access is enabled, Secure Group 1. */ -#define FGIC_GICR_IGRPMODR0_DEFAULT_MASK BIT_MASK(32) -#define FGIC_GICR_IGRPMODR0_VALUE_OFFSET(itnum) ((itnum % 32U)) -#define FGIC_GICR_IGRPMODR0_VALUE_MASK(itnum) (0x1U << FGIC_GICR_IGRPMODR0_VALUE_OFFSET(itnum)) -#define FGIC_GICR_IGRPMODR0_WRITE(sgi_base, reg) FGIC_WRITEREG32(sgi_base , FGIC_GICR_IGRPMODR0_OFFSET, reg) -#define FGIC_GICR_IGRPMODR0_READ(sgi_base) FGIC_READREG32(sgi_base , FGIC_GICR_IGRPMODR0_OFFSET) - -/* FGIC_GICR_ISENABLER0_OFFSET --- Enables forwarding of the corresponding interrupt to the CPU interfaces. */ -#define FGIC_GICR_ISENABLER0_WRITE(sgi_base, reg) FGIC_WRITEREG32(sgi_base , FGIC_GICR_ISENABLER0_OFFSET, reg) -#define FGIC_GICR_ISENABLER0_READ(sgi_base) FGIC_READREG32(sgi_base , FGIC_GICR_ISENABLER0_OFFSET) - -/* FGIC_GICR_ICENABLER0_OFFSET --- Disables forwarding of the corresponding interrupt to the CPU interfaces. */ -#define FGIC_GICR_ICENABLER0_DEFAULT_MASK BIT_MASK(32) -#define FGIC_GICR_ICENABLER0_WRITE(sgi_base, reg) FGIC_WRITEREG32(sgi_base , FGIC_GICR_ICENABLER0_OFFSET, reg) -#define FGIC_GICR_ICENABLER0_READ(sgi_base) FGIC_READREG32(sgi_base , FGIC_GICR_ICENABLER0_OFFSET) - -/* FGIC_GICR_ICFGR0_OFFSET */ -#define FGIC_GICR_ICFGR0_DEFAULT_MASK 0 -#define FGIC_GICR_ICFGR0_VALUE_OFFSET(itnum) ((itnum % 16U) << 1) -#define FGIC_GICR_ICFGR0_VALUE_MASK(itnum) (0x3U << FGIC_GICR_ICFGR0_VALUE_OFFSET(itnum)) -#define FGIC_GICR_ICFGR0_WRITE(sgi_base, reg) FGIC_WRITEREG32(sgi_base , FGIC_GICR_ICFGR0_OFFSET, reg) -#define FGIC_GICR_ICFGR0_READ(sgi_base) FGIC_READREG32(sgi_base , FGIC_GICR_ICFGR0_OFFSET) - -/* FGIC_GICR_ICFGR1_OFFSET */ -#define FGIC_GICR_ICFGR1_VALUE_OFFSET(itnum) ((itnum % 16U) << 1) -#define FGIC_GICR_ICFGR1_VALUE_MASK(itnum) (0x3U << FGIC_GICR_ICFGR1_VALUE_OFFSET(itnum)) -#define FGIC_GICR_ICFGR1_WRITE(sgi_base, reg) FGIC_WRITEREG32(sgi_base , FGIC_GICR_ICFGR1_OFFSET, reg) -#define FGIC_GICR_ICFGR1_READ(sgi_base) FGIC_READREG32(sgi_base , FGIC_GICR_ICFGR1_OFFSET) - -/* FGIC_GICR_CTLR_OFFSET */ - -#define FGIC_GICR_CTLR_RWP_MASK BIT(2) - -/* FGIC_GICR_NSACR_OFFSET */ - -#define FGIC_GICR_NSACR_WRITE(sgi_base, reg) FGIC_WRITEREG32(sgi_base , FGIC_GICR_NSACR_OFFSET, reg) -#define FGIC_GICR_NSACR_READ(sgi_base) FGIC_READREG32(sgi_base , FGIC_GICR_NSACR_OFFSET) - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/bsp/phytium/libraries/standalone/drivers/gic/fgic/fgic_redistributor.h b/bsp/phytium/libraries/standalone/drivers/gic/fgic/fgic_redistributor.h deleted file mode 100644 index b966c7d5f7..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/gic/fgic/fgic_redistributor.h +++ /dev/null @@ -1,183 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fgic_redistributor.h - * Date: 2022-03-28 14:57:01 - * LastEditTime: 2022-03-28 14:57:01 - * Description:  This file is for gic redistributor implementation. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/4/16 init commit - */ - -#ifndef FGIC_REDISTRIBUTOR_H -#define FGIC_REDISTRIBUTOR_H - -#include "fgic.h" -#include "fgic_hw.h" -#include "ftypes.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -typedef enum -{ - GICR_GROUP_G0S = 0, - GICR_GROUP_G1NS = (1 << 0), - GICR_GROUP_G1S = (1 << 2), -} GICR_GROUP_SECURE_MODE; - -typedef enum -{ - GICR_WAKER_PROCESSOR_SLEEP = (1 << 1), - GICR_WAKER_CHILDREN_ASLEEP = (1 << 2) -} GICR_WAKER_MODE; - -static inline u32 FGicGetGicrAffinity(uintptr redis_base) -{ - return FGIC_GICR_TYPER_H_READ(redis_base); -} - - -static inline void FGicWakeGicr(uintptr redis_base) -{ - u32 mask ; - mask = FGIC_GICR_WAKER_READ(redis_base); - mask &= ~GICR_WAKER_PROCESSOR_SLEEP ; - FGIC_GICR_WAKER_WRITE(redis_base, mask); - - do - { - mask = FGIC_GICR_WAKER_READ(redis_base); - - } - while ((mask & GICR_WAKER_CHILDREN_ASLEEP) != 0); /* This PE is not in, and is not entering, a low power state. */ -} - - -static inline void FGicEnablePrivateInt(uintptr redis_base, s32 int_id) -{ - FGIC_GICR_ISENABLER0_WRITE(redis_base + FGIC_GICR_SGI_BASE_OFFSET, (1U << (int_id % 32))); -} - -static inline void FGicDisablePrivateInt(uintptr redis_base, s32 int_id) -{ - FGIC_GICR_ICENABLER0_WRITE(redis_base + FGIC_GICR_SGI_BASE_OFFSET, (1U << (int_id % 32))); -} - -static inline void FGicSetPrivatePriority(uintptr redis_base, s32 spi_id, u32 priority) -{ - u32 mask; - - /* For SPIs , has one byte-wide entry per interrupt */ - mask = FGIC_GICR_IPRIORITYR_READ(redis_base + FGIC_GICR_SGI_BASE_OFFSET, spi_id); - mask &= ~FGIC_GICR_IPRIORITYR_VALUE_MASK(spi_id); - mask |= ((priority & 0xffU) << (spi_id % 4) * 8U); - FGIC_GICR_IPRIORITYR_WRITE(redis_base + FGIC_GICR_SGI_BASE_OFFSET, spi_id, mask); -} - -static inline u32 FGicGetPrivatePriority(uintptr redis_base, s32 spi_id) -{ - u32 mask; - /* For SPIs , has one byte-wide entry per interrupt */ - mask = FGIC_GICR_IPRIORITYR_READ(redis_base + FGIC_GICR_SGI_BASE_OFFSET, spi_id); - - return (mask >> ((spi_id % 4U) * 8U)) & 0xFFU; -} - -static inline void FGicSetSgiLevel(uintptr redis_base, s32 spi_id, GICD_ICFGR_MODE mode) -{ - u32 mask ; - mask = FGIC_GICR_ICFGR0_READ(redis_base + FGIC_GICR_SGI_BASE_OFFSET); - mask &= ~FGIC_GICR_ICFGR0_VALUE_OFFSET(spi_id); - mask |= (mode << FGIC_GICR_ICFGR0_VALUE_OFFSET(spi_id)); - FGIC_GICR_ICFGR0_WRITE(redis_base, mask); -} - -static inline u32 FGicGetSgiLevel(uintptr redis_base, s32 spi_id) -{ - u32 mask ; - mask = FGIC_GICR_ICFGR0_READ(redis_base + FGIC_GICR_SGI_BASE_OFFSET); - return (mask >> ((spi_id % 16U) >> 1U)) ; -} - - -static inline void FGicSetPpiLevel(uintptr redis_base, s32 spi_id, GICD_ICFGR_MODE mode) -{ - u32 mask ; - mask = FGIC_GICR_ICFGR1_READ(redis_base + FGIC_GICR_SGI_BASE_OFFSET); - mask &= ~FGIC_GICR_ICFGR1_VALUE_OFFSET(spi_id); - mask |= (mode << FGIC_GICR_ICFGR1_VALUE_OFFSET(spi_id)); - FGIC_GICR_ICFGR1_WRITE(redis_base, mask); -} - - -static inline u32 FGicGetPpiLevel(uintptr redis_base, s32 spi_id) -{ - u32 mask ; - mask = FGIC_GICR_ICFGR1_READ(redis_base + FGIC_GICR_SGI_BASE_OFFSET); - return (mask >> ((spi_id % 16U) >> 1U)) ; -} - -static inline void FGicSetPrivateSecurity(uintptr redis_base, s32 spi_id, GICD_GROUP_SECURE_MODE mode) -{ - u32 mask ; - /* Group status */ - mask = FGIC_GICR_IGROUPR0_READ(redis_base + FGIC_GICR_SGI_BASE_OFFSET); - mask &= ~FGIC_GICR_IGROUPR0_VALUE_MASK(spi_id); - - mask |= ((mode & 0x1) << (spi_id % 32)); - FGIC_GICR_IGROUPR0_WRITE(redis_base + FGIC_GICR_SGI_BASE_OFFSET, mask); - - /* Group modifier */ - mask = FGIC_GICR_IGRPMODR0_READ(redis_base + FGIC_GICR_SGI_BASE_OFFSET); - mask &= ~FGIC_GICR_IGRPMODR0_VALUE_MASK(spi_id); - - mask |= (((mode & 0x2) >> 1) << (spi_id % 32)); - FGIC_GICR_IGRPMODR0_WRITE(redis_base + FGIC_GICR_SGI_BASE_OFFSET, mask); -} - - -static inline u32 FGicGetPrivateSecurity(uintptr redis_base, s32 spi_id) -{ - u32 mask ; - u32 group_status, group_modifier; - /* Group status */ - mask = FGIC_GICR_IGROUPR0_READ(redis_base + FGIC_GICR_SGI_BASE_OFFSET); - mask &= FGIC_GICR_IGROUPR0_VALUE_MASK(spi_id); - group_status = (mask >> (spi_id % 32)); - - /* Group modifier */ - mask = FGIC_GICR_IGRPMODR0_READ(redis_base + FGIC_GICR_SGI_BASE_OFFSET); - mask &= FGIC_GICR_IGRPMODR0_VALUE_MASK(spi_id); - group_modifier = (mask >> (spi_id % 32)); - - return ((group_modifier << 1) | group_status); -} - - -static inline u32 FGicNonSecureAccessRead(uintptr redis_base) -{ - return FGIC_GICR_NSACR_READ(redis_base + FGIC_GICR_SGI_BASE_OFFSET); -} - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/bsp/phytium/libraries/standalone/drivers/gic/fgic/fgic_sinit.c b/bsp/phytium/libraries/standalone/drivers/gic/fgic/fgic_sinit.c deleted file mode 100644 index 2575462de0..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/gic/fgic/fgic_sinit.c +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fgic_sinit.c - * Date: 2022-03-30 15:00:29 - * LastEditTime: 2022-03-30 15:00:29 - * Description: This file is for gic static variables implementation. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/4/16 init commit - */ - - -#include "fgic.h" - -extern FGicConfig fgic_config[FGIC_NUM]; - - -/** - * @name: FGicLookupConfig - * @msg: Gets the default configuration parameters in the current GIC - * @param {u32} instance_id - * @return {*} - */ -FGicConfig *FGicLookupConfig(u32 instance_id) -{ - FGicConfig *ptr = NULL; - u32 index; - - for (index = 0; index < (u32)FGIC_NUM; index++) - { - if (fgic_config[index].instance_id == instance_id) - { - ptr = &fgic_config[index]; - break; - } - } - - return (FGicConfig *)ptr; -} diff --git a/bsp/phytium/libraries/standalone/drivers/i2c/Kconfig b/bsp/phytium/libraries/standalone/drivers/i2c/Kconfig deleted file mode 100644 index 1195673525..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/i2c/Kconfig +++ /dev/null @@ -1,8 +0,0 @@ -config USE_FI2C - bool - prompt "Use FI2C" - default n - help - Include FI2C driver component - - \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/i2c/fi2c/fi2c.c b/bsp/phytium/libraries/standalone/drivers/i2c/fi2c/fi2c.c deleted file mode 100644 index f76e77bcf1..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/i2c/fi2c/fi2c.c +++ /dev/null @@ -1,196 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fi2c.c - * Date: 2021-11-01 14:53:42 - * LastEditTime: 2022-02-18 08:36:58 - * Description:  This file is for complete user external interface - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2021/11/1 first commit - * 1.1 liushengming 2022/2/18 modified to support i2c - */ - - -/***************************** Include Files *********************************/ -#include -#include "fio.h" -#include "ferror_code.h" -#include "ftypes.h" -#include "fdebug.h" -#include "fi2c_hw.h" -#include "fi2c.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ -#define FI2C_DEBUG_TAG "I2C" -#define FI2C_ERROR(format, ...) FT_DEBUG_PRINT_E(FI2C_DEBUG_TAG, format, ##__VA_ARGS__) -#define FI2C_INFO(format, ...) FT_DEBUG_PRINT_I(FI2C_DEBUG_TAG, format, ##__VA_ARGS__) -#define FI2C_DEBUG(format, ...) FT_DEBUG_PRINT_D(FI2C_DEBUG_TAG, format, ##__VA_ARGS__) - -/************************** Function Prototypes ******************************/ - -static FError FI2cReset(FI2c *instance_p); - -/************************** Variable Definitions *****************************/ -static const char *FI2C_ERROR_CODE_MSG[FI2C_NUM_OF_ERR_CODE] = -{ - "FI2C_SUCCESS : fi2c success", - "FI2C_ERR_INVAL_PARM : fi2c invalid input parameters", - "FI2C_ERR_NOT_READY : fi2c driver is not ready", - "FI2C_ERR_TIMEOUT : fi2c wait timeout", - "FI2C_ERR_NOT_SUPPORT : fi2c not support operation", - "FI2C_ERR_INVAL_STATE : fi2c invalid state" -}; - -/** - * @name: FI2cCfgInitialize - * @msg: 完成I2C驱动实例的初始化,使之可以使用 - * @param {FI2c} *instance_p I2C驱动实例数据 - * @param {FI2cConfig} *cofig_p I2C驱动配置数据 - * @return SUCCESS if initialization was successful - * ERROR - */ -FError FI2cCfgInitialize(FI2c *instance_p, const FI2cConfig *input_config_p) -{ - FASSERT(instance_p && input_config_p); - - FError ret = FI2C_SUCCESS; - - /* - * If the device is started, disallow the initialize and return a Status - * indicating it is started. This allows the user to de-initialize the device - * and reinitialize, but prevents a user from inadvertently - * initializing. - */ - if (FT_COMPONENT_IS_READY == instance_p->is_ready) - { - FI2C_ERROR("Device is already initialized!!!"); - return FI2C_ERR_INVAL_STATE; - } - - /* - * Set default values and configuration data, including setting the - * callback handlers to stubs so the system will not crash should the - * application not assign its own callbacks. - */ - FI2cDeInitialize(instance_p); - instance_p->config = *input_config_p; - - /* - * Reset the device. - */ - ret = FI2cReset(instance_p); - if (FI2C_SUCCESS == ret) - { - instance_p->is_ready = FT_COMPONENT_IS_READY; - } - - return ret; -} - -/** - * @name: FI2cDeInitialize - * @msg: 完成I2C驱动实例去使能,清零实例数据 - * @return {*} - * @param {FI2c} *instance_p - */ -void FI2cDeInitialize(FI2c *instance_p) -{ - FASSERT(instance_p); - instance_p->is_ready = 0; - - memset(instance_p, 0, sizeof(*instance_p)); -} - -/** - * @name: FI2cReset - * @msg: 重置I2C控制器 - * @return {*} - * @param {FI2c} *instance_p, I2C驱动实例数据 - */ -static FError FI2cReset(FI2c *instance_p) -{ - FASSERT(instance_p); - - FError ret = FI2C_SUCCESS; - FI2cConfig *config_p = &instance_p->config; - uintptr base_addr = config_p->base_addr; - u32 reg_val = 0; - - ret = FI2cSetEnable(base_addr, FALSE); /* disable i2c ctrl */ - - if (FI2C_MASTER == config_p->work_mode) - { - reg_val |= (config_p->use_7bit_addr) ? FI2C_CON_MASTER_ADR_7BIT : FI2C_CON_MASTER_ADR_10BIT ; - reg_val |= FI2C_CON_SLAVE_DISABLE; - reg_val |= FI2C_CON_MASTER_MODE; - reg_val |= FI2C_CON_RESTART_EN; - } - else - { - reg_val |= (config_p->use_7bit_addr) ? FI2C_CON_SLAVE_ADR_7BIT : FI2C_CON_SLAVE_ADR_10BIT; - reg_val &= (~FI2C_CON_MASTER_MODE); - reg_val |= FI2C_CON_SLAVE_MODE; - } - reg_val |= FI2C_CON_STD_SPEED; - - FI2C_WRITE_REG32(base_addr, FI2C_CON_OFFSET, reg_val); - FI2C_WRITE_REG32(base_addr, FI2C_RX_TL_OFFSET, 0); - FI2C_WRITE_REG32(base_addr, FI2C_TX_TL_OFFSET, 0); - FI2C_SET_INTRRUPT_MASK(base_addr, 0); /* disable all intr */ - - ret = FI2cSetSpeed(base_addr, config_p->speed_rate); - - if (FI2C_SUCCESS == ret) - { - ret = FI2cSetEnable(base_addr, TRUE); /* enable i2c ctrl */ - } - - /* if init successed, and i2c is in slave mode, set slave address */ - if ((FI2C_SUCCESS == ret) && (FI2C_SLAVE == config_p->work_mode)) - { - ret = FI2cSetSar(base_addr, config_p->slave_addr); - } - - return ret; -} - -/** - * @name: FI2cErrorToMessage - * @msg: 获取I2C模块错误码对应的错误信息 - * @return {const char *}, 错误码信息,NULL表示失败 - * @param {FError} error, I2C输入错误码 - */ -const char *FI2cErrorToMessage(FError error) -{ - const char *msg = NULL; - if (FI2C_SUCCESS != error && (FI2C_ERR_CODE_PREFIX != error & (FT_ERRCODE_SYS_MODULE_MASK | FT_ERRCODE_SUB_MODULE_MASK))) - { - /* if input error do not belong to this module */ - return msg; - } - u32 index = error & FT_ERRCODE_TAIL_VALUE_MASK; - - if (index < FI2C_NUM_OF_ERR_CODE) - { - msg = FI2C_ERROR_CODE_MSG[index]; - } - - return msg; -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/i2c/fi2c/fi2c.h b/bsp/phytium/libraries/standalone/drivers/i2c/fi2c/fi2c.h deleted file mode 100644 index 9ab4c590da..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/i2c/fi2c/fi2c.h +++ /dev/null @@ -1,204 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fi2c.h - * Date: 2021-11-01 14:53:42 - * LastEditTime: 2022-02-18 08:37:04 - * Description:  This file is for complete user external interface definition - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2021/11/1 first commit - * 1.1 liushengming 2022/2/18 modified to support i2c - */ - - - -#ifndef FI2C_H -#define FI2C_H - -/***************************** Include Files *********************************/ - -#include "ftypes.h" -#include "fassert.h" -#include "ferror_code.h" -#include "sdkconfig.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/************************** Constant Definitions *****************************/ -#define FI2C_SUCCESS FT_SUCCESS -#define FI2C_ERR_INVAL_PARM FT_MAKE_ERRCODE(ErrModBsp, ErrBspI2c, 1) -#define FI2C_ERR_NOT_READY FT_MAKE_ERRCODE(ErrModBsp, ErrBspI2c, 2) -#define FI2C_ERR_TIMEOUT FT_MAKE_ERRCODE(ErrModBsp, ErrBspI2c, 3) -#define FI2C_ERR_NOT_SUPPORT FT_MAKE_ERRCODE(ErrModBsp, ErrBspI2c, 4) -#define FI2C_ERR_INVAL_STATE FT_MAKE_ERRCODE(ErrModBsp, ErrBspI2c, 5) - -/* add up new error code above and plust FI2C_ERR_CODE_MAX by ONE*/ -#define FI2C_ERR_CODE_MAX FT_MAKE_ERRCODE(ErrModBsp, ErrBspI2c, 6) -#define FI2C_ERR_CODE_PREFIX FI2C_ERR_CODE_MAX & (FT_ERRCODE_SYS_MODULE_MASK | FT_ERRCODE_SUB_MODULE_MASK) -#define FI2C_NUM_OF_ERR_CODE FI2C_ERR_CODE_MAX & FT_ERRCODE_TAIL_VALUE_MASK - -/* - * status codes - */ -#define STATUS_IDLE 0x0 -#define STATUS_WRITE_IN_PROGRESS 0x1 -#define STATUS_READ_IN_PROGRESS 0x2 - -enum -{ - FI2C_MASTER = 0, /* i2c主设备 */ - FI2C_SLAVE /* i2c从设备 */ -}; - -enum -{ - FI2C_SPEED_STANDARD_RATE = 100000, /* 100kb/s */ - FI2C_SPEED_FAST_RATE = 400000 /* 400kb/s */ -}; - -enum -{ - FI2C_EVT_MASTER_TRANS_ABORTED = 0,/*master模式传输出错回调函数事件值*/ - FI2C_EVT_MASTER_READ_DONE, /*master模式接收完成回调函数事件值*/ - FI2C_EVT_MASTER_WRITE_DONE, /*master模式发送完成回调函数事件值*/ - - FI2C_MASTER_INTR_EVT_NUM -}; /* master mode evt */ - -enum/*slave模式回调函数事件值*/ -{ - FI2C_EVT_SLAVE_READ_REQUESTED = 0, /*slave收到主机读取内容的请求*/ - FI2C_EVT_SLAVE_WRITE_REQUESTED, /*slave收到主机发送的写请求*/ - FI2C_EVT_SLAVE_READ_PROCESSED, /*在Slave发送模式下,发送完数据的最后一个字节后,在规定时间内没有收到 Master 端的回应*/ - FI2C_EVT_SLAVE_WRITE_RECEIVED, /*Slave收到主机发送的数据,需要存下*/ - FI2C_EVT_SLAVE_STOP, /*I2C总线接口上是否产生了STOP。与控制器工作在Master模式还是 Slave 模式无关。*/ - - FI2C_SLAVE_INTR_EVT_NUM -}; /* slave mode evt */ - -/**************************** Type Definitions *******************************/ - -typedef struct -{ - u32 instance_id; /* Device instance id */ - uintptr base_addr; /* Device base address */ - u32 irq_num; /* Device intrrupt id */ - u32 irq_prority; /* Device intrrupt priority */ - u32 ref_clk_hz; /* Input reference clock frequency in Hz */ - u32 work_mode; /* Device work mode Slave or Master */ - u32 slave_addr; /*Master mode Slave Address writing/reading to/from ,Slave mode set local address*/ - boolean use_7bit_addr; /* Slave in-chip address offset in 7bit or 10bit */ - u32 speed_rate; /* I2C speed rate */ -} FI2cConfig; /* Device configure setting */ - -typedef void (*FI2cEvtHandler)(void *instance_p, void *param); - -typedef struct -{ - /* data */ - const void *data_buff; - u32 tx_total_num; - volatile u32 tx_cnt; - u32 flag;/* CMD BIT(8), STOP BIT(9) and RESTART BIT(10) Generation */ -} FI2cFrameTX; - -typedef struct -{ - /* data */ - void *data_buff; - u32 rx_total_num; - volatile u32 rx_cnt; -} FI2cFrameRX; - -typedef struct -{ - FI2cConfig config; /* Current active configs */ - u32 is_ready; /* Device is initialized and ready */ - volatile u32 status; - FI2cFrameTX txframe; - FI2cFrameRX rxframe; - /** only apply to master device **/ - /* Master intrrupt handler */ - FI2cEvtHandler master_evt_handlers[FI2C_MASTER_INTR_EVT_NUM]; - - /** only apply to slave device **/ - /* Slave intrrupt handler */ - FI2cEvtHandler slave_evt_handlers[FI2C_SLAVE_INTR_EVT_NUM]; - -} FI2c; /* Device instance */ - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ - -/* fi2c_sinit.c */ -/* 获取I2C驱动的默认配置参数 */ -const FI2cConfig *FI2cLookupConfig(u32 instance_id); - -/* fi2c.c */ -/* 完成I2C驱动实例的初始化,使之可以使用*/ -FError FI2cCfgInitialize(FI2c *instance_p, const FI2cConfig *cofig_p); - -/* 完成I2C驱动实例去使能,清零实例数据 */ -void FI2cDeInitialize(FI2c *instance_p); - -/* 获取I2C模块错误码对应的错误信息 */ -const char *FI2cErrorToMessage(FError error); - -/* fi2c_master.c */ -/* I2C主机读,阻塞直到完成读操作或失败 */ -FError FI2cMasterReadPoll(FI2c *instance_p, u32 mem_addr, u8 mem_byte_len, u8 *buf_p, u32 buf_len); - -/*I2C主机读,接收中断读操作或者失败 */ -FError FI2cMasterReadIntr(FI2c *instance_p, u32 mem_addr, u8 mem_byte_len, u8 *buf_p, u32 buf_len); - -/* I2C主机写,中断发送直到完成写操作或失败 */ -FError FI2cMasterWriteIntr(FI2c *instance_p, u32 mem_addr, u8 mem_byte_len, const u8 *buf_p, u32 buf_len); - -/* I2C主机写,阻塞直到完成写操作或失败 */ -FError FI2cMasterWritePoll(FI2c *instance_p, u32 mem_addr, u8 mem_byte_len, const u8 *buf_p, u32 buf_len); - -/* 获取I2C的中断值*/ -u32 FI2cGetIntr(FI2c *instance_p); - -/* 设置I2C主机的中断 */ -FError FI2cMasterSetupIntr(FI2c *instance_p, u32 mask); - -/* 主机模式中断服务函数 */ -void FI2cMasterIntrHandler(s32 vector, void *param); - -/* 注册I2C主机中断事件函数 */ -void FI2cMasterRegisterIntrHandler(FI2c *instance_p, u32 evt, FI2cEvtHandler handler); - -/* 设置I2C从机的中断 */ -FError FI2cSlaveSetupIntr(FI2c *instance_p); - -/* 从机模式中断服务函数 */ -void FI2cSlaveIntrHandler(s32 vector, void *param); - -/* 注册I2C从机中断事件函数 */ -void FI2cSlaveRegisterIntrHandler(FI2c *instance_p, u32 evt, FI2cEvtHandler handler); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/bsp/phytium/libraries/standalone/drivers/i2c/fi2c/fi2c_g.c b/bsp/phytium/libraries/standalone/drivers/i2c/fi2c/fi2c_g.c deleted file mode 100644 index 3c1db4baac..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/i2c/fi2c/fi2c_g.c +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fi2c_g.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:36:14 - * Description:  This file is for I2C static configuration - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2021/11/1 first commit - * 1.1 liushengming 2022/02/18 add e2000 configs - */ - - -/* - This file contains a configuration table that specifies the configuration -- 驱动全局变量定义,包括静态配置参数 */ - -/***************************** Include Files *********************************/ - -#include "ftypes.h" -#include "fparameters.h" -#include "fi2c.h" -#include "sdkconfig.h" -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ - -/************************** Variable Definitions *****************************/ -/** - * @name: FI2C_CONFIG_TBL - * @msg: I2C驱动的默认配置参数 - */ -const FI2cConfig FI2C_CONFIG_TBL[FI2C_NUM] = -{ - [FI2C0_ID] = - { - .instance_id = FI2C0_ID, - .base_addr = FI2C0_BASE_ADDR, - .irq_num = FI2C0_IRQ_NUM, - .irq_prority = 0, - .ref_clk_hz = FI2C_CLK_FREQ_HZ, - .work_mode = FI2C_MASTER, - .slave_addr = 0, - .use_7bit_addr = TRUE, - .speed_rate = FI2C_SPEED_STANDARD_RATE - }, -#if defined(CONFIG_TARGET_E2000) || defined(CONFIG_TARGET_D2000) || defined(CONFIG_TARGET_F2000_4) - [FI2C1_ID] = - { - .instance_id = FI2C1_ID, - .base_addr = FI2C1_BASE_ADDR, - .irq_num = FI2C1_IRQ_NUM, - .irq_prority = 0, - .ref_clk_hz = FI2C_CLK_FREQ_HZ, - .work_mode = FI2C_MASTER, - .slave_addr = 0, - .use_7bit_addr = TRUE, - .speed_rate = FI2C_SPEED_STANDARD_RATE - }, - - [FI2C2_ID] = - { - .instance_id = FI2C2_ID, - .base_addr = FI2C2_BASE_ADDR, - .irq_num = FI2C2_IRQ_NUM, - .irq_prority = 0, - .ref_clk_hz = FI2C_CLK_FREQ_HZ, - .work_mode = FI2C_MASTER, - .slave_addr = 0, - .use_7bit_addr = TRUE, - .speed_rate = FI2C_SPEED_STANDARD_RATE - }, -#endif -#if defined(CONFIG_TARGET_D2000) || defined(CONFIG_TARGET_F2000_4) - [FI2C3_ID] = - { - .instance_id = FI2C3_ID, - .base_addr = FI2C3_BASE_ADDR, - .irq_num = FI2C3_IRQ_NUM, - .irq_prority = 0, - .ref_clk_hz = FI2C_CLK_FREQ_HZ, - .work_mode = FI2C_MASTER, - .slave_addr = 0, - .use_7bit_addr = TRUE, - .speed_rate = FI2C_SPEED_STANDARD_RATE - } -#endif -}; diff --git a/bsp/phytium/libraries/standalone/drivers/i2c/fi2c/fi2c_hw.c b/bsp/phytium/libraries/standalone/drivers/i2c/fi2c/fi2c_hw.c deleted file mode 100644 index efe7926ae3..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/i2c/fi2c/fi2c_hw.c +++ /dev/null @@ -1,473 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fi2c_hw.c - * Date: 2021-11-01 14:53:42 - * LastEditTime: 2022-02-18 08:36:22 - * Description:  This file is for I2C register read/write operation - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2021/11/1 first commit - * 1.1 liushengming 2022/02/18 support slave mode - */ - -/***************************** Include Files *********************************/ -#include -#include "fsleep.h" -#include "fdebug.h" -#include "ferror_code.h" -#include "fassert.h" -#include "fi2c_hw.h" -#include "fi2c.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -typedef struct -{ - u32 speed_mode; - u32 scl_lcnt; - u32 scl_hcnt; - u32 sda_hold; -} FI2cSpeedCfg; /* speed related configs */ - -typedef struct -{ - u32 speed; - u32 min_scl_hightime_ns; - u32 min_scl_lowtime_ns; - u32 def_risetime_ns; - u32 def_falltime_ns; -} FI2cSpeedModeInfo; /* speed calculation related configs */ - -/************************** Variable Definitions *****************************/ -static const FI2cSpeedModeInfo I2C_SPEED_CFG[FI2C_SPEED_MODE_MAX] = -{ - [FI2C_STANDARD_SPEED] = { - FI2C_SPEED_STANDARD_RATE, - 4000, - 4700, - 1000, - 300, - }, - [FI2C_FAST_SPEED] = { - FI2C_SPEED_FAST_RATE, - 1000, - 1300, - 300, - 300, - } -}; - -/***************** Macros (Inline Functions) Definitions *********************/ -#define FI2C_DEBUG_TAG "I2C_HW" -#define FI2C_ERROR(format, ...) FT_DEBUG_PRINT_E(FI2C_DEBUG_TAG, format, ##__VA_ARGS__) -#define FI2C_INFO(format, ...) FT_DEBUG_PRINT_I(FI2C_DEBUG_TAG, format, ##__VA_ARGS__) -#define FI2C_DEBUG(format, ...) FT_DEBUG_PRINT_D(FI2C_DEBUG_TAG, format, ##__VA_ARGS__) - -#define FI2C_TIMEOUT 500 - -/************************** Function Prototypes ******************************/ -/** - * @name: FI2cSetEnable - * @msg: 设置I2C控制器的使能状态 - * @return {*} - * @param {uintptr} addr, I2c控制器基地址 - * @param {boolean} enable, TRUE: 使能,FALSE: 去使能 - */ -FError FI2cSetEnable(uintptr addr, boolean enable) -{ - u32 status = enable ? FI2C_IC_ENABLE : FI2C_IC_DISABLE; - u32 timeout = FI2C_TIMEOUT; - - do - { - FI2C_WRITE_REG32(addr, FI2C_ENABLE_OFFSET, status); - if (((FI2C_READ_REG32(addr, FI2C_ENABLE_STATUS_OFFSET)) & FI2C_IC_ENABLE_MASK) == status) - { - return FI2C_SUCCESS; - } - - } - while (0 != timeout--); - - FI2C_ERROR("Timeout in %sabling I2C ctrl.", enable ? "en" : "dis"); - return FI2C_ERR_TIMEOUT; -} - -/** - * @name: FI2cCalcTiming - * @msg: 计算I2C的上升沿下降沿配置 - * @return {*} - * @param {u32} bus_clk_hz, I2C总线时钟速度 Hz,默认48MHz - * @param {u32} spk_cnt, spk数目 - * @param {FI2cSpeedCfg} *speed_cfg_p,速度配置 - */ -static FError FI2cCalcTiming(u32 bus_clk_hz, u32 spk_cnt, FI2cSpeedCfg *speed_cfg_p) -{ - FASSERT(speed_cfg_p); - u32 speed_mode = speed_cfg_p->speed_mode; - const FI2cSpeedModeInfo *info_p = &I2C_SPEED_CFG[speed_mode]; - int fall_cnt, rise_cnt, min_t_low_cnt, min_t_high_cnt; - int hcnt, lcnt, period_cnt, diff, tot; - int sda_hold_time_ns, scl_rise_time_ns, scl_fall_time_ns; - - period_cnt = bus_clk_hz / info_p->speed; - scl_rise_time_ns = info_p->def_risetime_ns; - scl_fall_time_ns = info_p->def_falltime_ns; - - /* convert a period to a number of IC clk cycles */ - rise_cnt = DIV_ROUND_UP(bus_clk_hz / 1000 * scl_rise_time_ns, NANO_TO_KILO); - fall_cnt = DIV_ROUND_UP(bus_clk_hz / 1000 * scl_fall_time_ns, NANO_TO_KILO); - min_t_low_cnt = DIV_ROUND_UP(bus_clk_hz / 1000 * info_p->min_scl_lowtime_ns, NANO_TO_KILO); - min_t_high_cnt = DIV_ROUND_UP(bus_clk_hz / 1000 * info_p->min_scl_hightime_ns, NANO_TO_KILO); - - FI2C_INFO("i2c: mode %d, bus_clk %d, speed %d, period %d rise %d fall %d tlow %d thigh %d spk %d\n", - speed_mode, bus_clk_hz, info_p->speed, period_cnt, rise_cnt, fall_cnt, - min_t_low_cnt, min_t_high_cnt, spk_cnt); - - /* - * Back-solve for hcnt and lcnt according to the following equations: - * SCL_High_time = [(HCNT + IC_*_SPKLEN + 7) * icClk] + SCL_Fall_time - * SCL_Low_time = [(LCNT + 1) * icClk] - SCL_Fall_time + SCL_Rise_time - */ - hcnt = min_t_high_cnt - fall_cnt - 7 - spk_cnt; - lcnt = min_t_low_cnt - rise_cnt + fall_cnt - 1; - - if (hcnt < 0 || lcnt < 0) - { - FI2C_ERROR("i2c: bad counts. hcnt = %d lcnt = %d\n", hcnt, lcnt); - return FI2C_ERR_INVAL_PARM; - } - - /* - * Now add things back up to ensure the period is hit. If it is off, - * split the difference and bias to lcnt for remainder - */ - tot = hcnt + lcnt + 7 + spk_cnt + rise_cnt + 1; - - if (tot < period_cnt) - { - diff = (period_cnt - tot) / 2; - hcnt += diff; - lcnt += diff; - tot = hcnt + lcnt + 7 + spk_cnt + rise_cnt + 1; - lcnt += period_cnt - tot; - } - - speed_cfg_p->scl_lcnt = lcnt; - speed_cfg_p->scl_hcnt = hcnt; - speed_cfg_p->sda_hold = DIV_ROUND_UP(bus_clk_hz / 1000 * 300, NANO_TO_KILO); /* Use internal default unless other value is specified */ - - FI2C_INFO("i2c: hcnt = %d lcnt = %d sda hold = %d\n", - speed_cfg_p->scl_hcnt, - speed_cfg_p->scl_lcnt, - speed_cfg_p->sda_hold); - - return FI2C_SUCCESS; -} - -/** - * @name: FI2cCalcSpeedCfg - * @msg: 计算I2C的速度配置 - * @return {*} - * @param {uintptr} addr, I2C控制器基地址 - * @param {u32} speed, I2C传输速率 - * @param {u32} bus_clk_hz, I2C时钟频率 - * @param {FI2cSpeedCfg} *speed_cfg_p, I2C速度配置 - */ -static FError FI2cCalcSpeedCfg(uintptr addr, u32 speed, u32 bus_clk_hz, FI2cSpeedCfg *speed_cfg_p) -{ - FASSERT(speed_cfg_p); - u32 spk_cnt = 0; - - if (FI2C_SPEED_FAST_RATE <= speed) - { - speed_cfg_p->speed_mode = FI2C_FAST_SPEED; - } - else if (FI2C_SPEED_STANDARD_RATE <= speed) - { - speed_cfg_p->speed_mode = FI2C_STANDARD_SPEED; - } - else - { - return FI2C_ERR_INVAL_PARM; - } - - spk_cnt = FI2C_READ_REG32(addr, FI2C_FS_SPKLEN_OFFSET); - return FI2cCalcTiming(bus_clk_hz, spk_cnt, speed_cfg_p); -} - -/** - * @name: FI2cSetSpeed - * @msg: 设置I2C控制器的速率 - * @return {*} - * @param {uintptr} addr, I2C控制器基地址 - * @param {u32} speed_rate, I2C传输速率 - */ -FError FI2cSetSpeed(uintptr addr, u32 speed_rate) -{ - FError ret = FI2C_SUCCESS; - FI2cSpeedCfg speed_cfg; - u32 enable_status; - u32 reg_val; - - memset(&speed_cfg, 0, sizeof(speed_cfg)); - ret = FI2cCalcSpeedCfg(addr, speed_rate, FI2C_CLK_FREQ_HZ, &speed_cfg); - if (FI2C_SUCCESS != ret) - { - return ret; - } - - /* get enable setting for restore later */ - enable_status = FI2cGetEnable(addr); - - /* reset speed mode bits */ - reg_val = ((FI2C_READ_REG32(addr, FI2C_CON_OFFSET)) & (~FI2C_CON_SPEED_MASK)); - switch (speed_cfg.speed_mode) - { - case FI2C_STANDARD_SPEED: - reg_val |= FI2C_CON_STD_SPEED; - FI2C_WRITE_REG32(addr, FI2C_SS_SCL_HCNT_OFFSET, speed_cfg.scl_hcnt); - FI2C_WRITE_REG32(addr, FI2C_SS_SCL_LCNT_OFFSET, speed_cfg.scl_lcnt); - break; - case FI2C_FAST_SPEED: - reg_val |= FI2C_CON_FAST_SPEED; - FI2C_WRITE_REG32(addr, FI2C_FS_SCL_HCNT_OFFSET, speed_cfg.scl_hcnt); - FI2C_WRITE_REG32(addr, FI2C_FS_SCL_LCNT_OFFSET, speed_cfg.scl_lcnt); - break; - default: - ret |= FI2C_ERR_INVAL_PARM; - break; - } - - FI2C_WRITE_REG32(addr, FI2C_CON_OFFSET, reg_val); - - /* Configure SDA Hold Time if required */ - if (0 != speed_cfg.sda_hold) - { - FI2C_WRITE_REG32(addr, FI2C_SDA_HOLD_OFFSET, speed_cfg.sda_hold); - } - - /* Restore back i2c now speed set */ - if (FI2C_IC_ENABLE == enable_status) - { - ret |= FI2cSetEnable(addr, TRUE); - } - - return ret; -} - -/** - * @name: FI2cWaitStatus - * @msg: 等待特定的I2C状态位直到状态不存在或者超时 - * @return {*} - * @param {uintptr} addr, I2C控制器基地址 - * @param {u32} stat_bit, I2C状态位 - */ -FError FI2cWaitStatus(uintptr addr, u32 stat_bit) -{ - u32 timeout = 0; - - /* wait until statbit was set or timeout */ - do - { - fsleep_millisec(2); /*wait 2 ms*/ - } - while (!((FI2C_READ_REG32(addr, FI2C_STATUS_OFFSET)) & stat_bit) && (FI2C_TIMEOUT > ++timeout)); - - if (FI2C_TIMEOUT <= timeout) - { - FI2C_ERROR("Timeout when wait status: 0x%x.", stat_bit); - return FI2C_ERR_TIMEOUT; - } - - return FI2C_SUCCESS; -} - -/** - * @name: FI2cWaitBusBusy - * @msg: 等待I2C总线忙 - * @return {*} - * @param {uintptr} addr, I2C控制器基地址 - */ -FError FI2cWaitBusBusy(uintptr addr) -{ - u32 timeout = FI2C_TIMEOUT; - u32 ret = FI2C_SUCCESS; - - if (((FI2C_READ_REG32(addr, FI2C_STATUS_OFFSET)) & FI2C_STATUS_MST_ACTIVITY) && - (FI2C_SUCCESS != FI2cWaitStatus(addr, FI2C_STATUS_TFE))) - { - ret = FI2C_ERR_TIMEOUT; - FI2C_ERROR("Timeout when wait i2c bus busy."); - } - - return ret; -} - -/** - * @name: FI2cSetTar - * @msg: 设置与I2C主机通信的从机地址 - * @return {*} - * @param {uintptr} addr, I2C控制器基地址 - * @param {u32} tar_addr, I2C从机地址 - */ -FError FI2cSetTar(uintptr addr, u32 tar_addr) -{ - u32 enable_status = FI2cGetEnable(addr); - u32 ret = FI2C_SUCCESS; - u32 reg_val = 0; - - if (FI2C_IC_ENABLE == enable_status) - { - ret = FI2cSetEnable(addr, FALSE); - } - - if (FI2C_SUCCESS == ret) - { - FI2C_WRITE_REG32(addr, FI2C_TAR_OFFSET, (tar_addr & FI2C_IC_TAR_MASK)); - } - - if (FI2C_IC_ENABLE == enable_status) - { - ret = FI2cSetEnable(addr, TRUE); - } - - return ret; -} - -/** - * @name: FI2cSetSar - * @msg: 从机模式下,设置I2C地址 - * @return {*} - * @param {uintptr} addr, I2C控制器基地址 - * @param {u32} sar_addr, 作为从机的地址 - */ -FError FI2cSetSar(uintptr addr, u32 sar_addr) -{ - u32 enable_status = FI2cGetEnable(addr); - u32 ret = FI2C_SUCCESS; - u32 reg_val = 0; - - if (FI2C_IC_ENABLE == enable_status) - { - ret = FI2cSetEnable(addr, FALSE); - } - - if (FI2C_SUCCESS == ret) - { - FI2C_WRITE_REG32(addr, FI2C_SAR_OFFSET, (sar_addr & FI2C_IC_SAR_MASK)); - } - - if (FI2C_IC_ENABLE == enable_status) - { - ret = FI2cSetEnable(addr, TRUE); - } - - return ret; -} - -/** - * @name: FI2cFlushRxFifo - * @msg: 等待接收Fifo传输完成 - * @return {*} - * @param {uintptr} addr, I2C控制器基地址 - */ -FError FI2cFlushRxFifo(uintptr addr) -{ - u8 data; - int timeout = 0; - FError ret = FI2C_SUCCESS; - - /* read data to trigger trans until fifo empty */ - while (FI2C_GET_STATUS(addr) & FI2C_STATUS_RFNE) - { - data = FI2C_READ_DATA(addr); - - if (FI2C_TIMEOUT < ++timeout) - { - ret = FI2C_TIMEOUT; - FI2C_ERROR("Timeout when flush fifo."); - break; - } - } - - return ret; -} - -/** - * @name: FI2cClearIntrBits - * @msg: 清除中断状态位,返回清除前的中断状态 - * @return {*} - * @param {uintptr} addr, I2C控制器基地址 - * @param {u32} *last_err_p, Abort错误 - */ -u32 FI2cClearIntrBits(uintptr addr, u32 *last_err_p) -{ - FASSERT(last_err_p); - - const u32 stat = FI2C_READ_INTR_STAT(addr); - - /* read to clr intrrupt status bits */ - if (stat & FI2C_INTR_TX_ABRT) - { - *last_err_p = FI2C_READ_REG32(addr, FI2C_TX_ABRT_SOURCE_OFFSET); /* read out abort sources */ - FI2C_READ_REG32(addr, FI2C_CLR_TX_ABRT_OFFSET); - } - - if (stat & FI2C_INTR_RX_UNDER) - { - FI2C_READ_REG32(addr, FI2C_CLR_RX_UNDER_OFFSET); - } - - if (stat & FI2C_INTR_RX_OVER) - { - FI2C_READ_REG32(addr, FI2C_CLR_RX_OVER_OFFSET); - } - - if (stat & FI2C_INTR_TX_OVER) - { - FI2C_READ_REG32(addr, FI2C_CLR_TX_OVER_OFFSET); - } - - if (stat & FI2C_INTR_RX_DONE) - { - FI2C_READ_REG32(addr, FI2C_CLR_RX_DONE_OFFSET); - } - - if (stat & FI2C_INTR_ACTIVITY) - { - FI2C_READ_REG32(addr, FI2C_CLR_ACTIVITY_OFFSET); - } - - if (stat & FI2C_INTR_STOP_DET) - { - FI2C_READ_REG32(addr, FI2C_CLR_STOP_DET_OFFSET); - } - - if (stat & FI2C_INTR_START_DET) - { - FI2C_READ_REG32(addr, FI2C_CLR_START_DET_OFFSET); - } - - if (stat & FI2C_INTR_GEN_CALL) - { - FI2C_READ_REG32(addr, FI2C_CLR_GEN_CALL_OFFSET); - } - - return stat; -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/i2c/fi2c/fi2c_hw.h b/bsp/phytium/libraries/standalone/drivers/i2c/fi2c/fi2c_hw.h deleted file mode 100644 index d082045b23..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/i2c/fi2c/fi2c_hw.h +++ /dev/null @@ -1,274 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fi2c_hw.h - * Date: 2021-11-01 14:53:42 - * LastEditTime: 2022-02-18 08:36:32 - * Description:  This file is for I2C register definition - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2021/11/1 first commit - * 1.1 liushengming 2022/02/18 add fi2c_slave mode - */ - - -#ifndef FI2C_HW_H -#define FI2C_HW_H - -/* - 传入模块基地址,不能复杂结构体 -- hardware interface of device || low-level driver function prototypes - -- 包括驱动寄存器参数和low-level操作定义 -1. 定义寄存器偏移 -2. 对上提供该模块寄存器操作的接口 -3. 一些简单外设提供直接操作接口 -4. 可以定义一些状态的接口,用于响应驱动状态的变化 */ - -/***************************** Include Files *********************************/ - -#include "fparameters.h" -#include "fio.h" -#include "ferror_code.h" -#include "fkernel.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/************************** Constant Definitions *****************************/ - -/** @name Register Map - * - * Register offsets from the base address of an I2C device. - * @{ - */ -#define FI2C_CON_OFFSET 0x00 -#define FI2C_TAR_OFFSET 0x04 -#define FI2C_SAR_OFFSET 0x08 -#define FI2C_HS_MADDR_OFFSET 0x0C -#define FI2C_DATA_CMD_OFFSET 0x10 -#define FI2C_SS_SCL_HCNT_OFFSET 0x14 -#define FI2C_SS_SCL_LCNT_OFFSET 0x18 -#define FI2C_FS_SCL_HCNT_OFFSET 0x1C -#define FI2C_FS_SCL_LCNT_OFFSET 0x20 -#define FI2C_HS_SCL_HCNT_OFFSET 0x24 -#define FI2C_HS_SCL_LCNT_OFFSET 0x28 -#define FI2C_INTR_STAT_OFFSET 0x2C -#define FI2C_INTR_MASK_OFFSET 0x30 -#define FI2C_RAW_INTR_STAT_OFFSET 0x34 -#define FI2C_RX_TL_OFFSET 0x38 -#define FI2C_TX_TL_OFFSET 0x3C -#define FI2C_CLR_INTR_OFFSET 0x40 -#define FI2C_CLR_RX_UNDER_OFFSET 0x44 -#define FI2C_CLR_RX_OVER_OFFSET 0x48 -#define FI2C_CLR_TX_OVER_OFFSET 0x4C -#define FI2C_CLR_RD_REQ_OFFSET 0x50 -#define FI2C_CLR_TX_ABRT_OFFSET 0x54 -#define FI2C_CLR_RX_DONE_OFFSET 0x58 -#define FI2C_CLR_ACTIVITY_OFFSET 0x5c -#define FI2C_CLR_STOP_DET_OFFSET 0x60 -#define FI2C_CLR_START_DET_OFFSET 0x64 -#define FI2C_CLR_GEN_CALL_OFFSET 0x68 -#define FI2C_ENABLE_OFFSET 0x6C -#define FI2C_STATUS_OFFSET 0x70 -#define FI2C_TXFLR_OFFSET 0x74 -#define FI2C_RXFLR_OFFSET 0x78 -#define FI2C_SDA_HOLD_OFFSET 0x7c -#define FI2C_TX_ABRT_SOURCE_OFFSET 0x80 -#define FI2C_SLV_DATA_NACK_ONLY_OFFSET 0x84 -#define FI2C_DMA_CR_OFFSET 0x88 -#define FI2C_DMA_TDLR_OFFSET 0x8c -#define FI2C_DMA_RDLR_OFFSET 0x90 -#define FI2C_SDA_SETUP_OFFSET 0x94 -#define FI2C_ACK_GENERAL_CALL_OFFSET 0x98 -#define FI2C_ENABLE_STATUS_OFFSET 0x9C -#define FI2C_FS_SPKLEN_OFFSET 0xa0 -#define FI2C_HS_SPKLEN_OFFSET 0xa4 -#define FI2C_COMP_PARAM_1_OFFSET 0xf4 -#define FI2C_COMP_VERSION_OFFSET 0xf8 -#define FI2C_COMP_TYPE_OFFSET 0xfc - -/** @name FI2C_CON_OFFSET Register - */ -#define FI2C_CON_MASTER_MODE (0x1 << 0) -#define FI2C_CON_SLAVE_MODE (0x0 << 0) - -#define FI2C_CON_SPEED_MASK GENMASK(2, 1) -#define FI2C_CON_STD_SPEED (0x1 << 1) -#define FI2C_CON_FAST_SPEED (0x2 << 1) -#define FI2C_CON_HIGH_SPEED (0x3 << 1) - -/* for slave mode */ -#define FI2C_CON_SLAVE_ADR_7BIT (0x0 << 3) -#define FI2C_CON_SLAVE_ADR_10BIT (0x1 << 3) - -/* for master mode */ -#define FI2C_CON_MASTER_ADR_7BIT (0x0 << 4) -#define FI2C_CON_MASTER_ADR_10BIT (0x1 << 4) - -#define FI2C_CON_RESTART_EN (0x1 << 5) -#define FI2C_CON_SLAVE_DISABLE (0x1 << 6) - -/** @name FI2C_TAR_OFFSET Register - */ -#define FI2C_IC_TAR_MASK GENMASK(9, 0) -#define FI2C_GC_OR_START (0x1 << 10) -#define FI2C_SPECIAL (0x1 << 11) -#define FI2C_TAR_ADR_7BIT (0x0 << 12) -#define FI2C_TAR_ADR_10BIT (0x1 << 12) - -/** @name FI2C_SAR_OFFSET Register - */ -#define FI2C_IC_SAR_MASK GENMASK(9, 0) //Slave addr when in slave mode - -/** @name FI2C_HS_MADDR_OFFSET Register - */ -#define FI2C_IC_HS_MAR GENMASK(2, 0) //I2C High Speed模式主机编码 - -/** @name FI2C_DATA_CMD_OFFSET Register - */ -#define FI2C_DATA_MASK GENMASK(7, 0) -#define FI2C_DATA_CMD_READ (0x1 << 8) -#define FI2C_DATA_CMD_WRITE (0x0 << 8) -#define FI2C_DATA_CMD_STOP (0x1 << 9) -#define FI2C_DATA_CMD_RESTART (0x1 << 10) - -/** @name FI2C_INTR_STAT_OFFSET Register - * @name FI2C_INTR_MASK_OFFSET Register - * @name FI2C_RAW_INTR_STAT_OFFSET Register - */ -#define FI2C_INTR_RX_UNDER (0x1 << 0) /* 接收缓冲区为空 */ -#define FI2C_INTR_RX_OVER (0x1 << 1) /* 接收缓冲区大小达到 IC_RX_BUFFER_DEPTH ,且还继续从外部接收数据 */ -#define FI2C_INTR_RX_FULL (0x1 << 2) /* 接收缓冲区大于等于 IC_RX_TL 中设定的门限值(RX_TL) */ -#define FI2C_INTR_TX_OVER (0x1 << 3) /* 发送缓冲区大小达到 IC_TX_BUFFER_DEPTH,并且还在尝试写数据 */ -#define FI2C_INTR_TX_EMPTY (0x1 << 4) /* 发送缓冲区小于等于 IC_TX_TL 寄存器中设定的门限值 */ -#define FI2C_INTR_RD_REQ (0x1 << 5) /* 读请求标志 */ -#define FI2C_INTR_TX_ABRT (0x1 << 6) /* I2C 不能完成FIFO内容的传输 */ -#define FI2C_INTR_RX_DONE (0x1 << 7) /* Slave工作模式下,规定时间内没有Master的回应,通信结束 */ -#define FI2C_INTR_ACTIVITY (0x1 << 8) /* I2C 控制器的活动状态 */ -#define FI2C_INTR_STOP_DET (0x1 << 9) /* I2C 总线接口上是否产生了 STOP */ -#define FI2C_INTR_START_DET (0x1 << 10) /* I2C 总线接口上是否产生了 START 或 RESTART */ -#define FI2C_INTR_GEN_CALL (0x1 << 11) /* I2C 总线接口上接收并识别到General Call格式 */ - -#define FI2C_INTR_ALL_MASK 0x8FF - -#define FI2C_INTR_MASTER_WR_MASK (FI2C_INTR_TX_EMPTY | FI2C_INTR_TX_ABRT) -#define FI2C_INTR_MASTER_RD_MASK (FI2C_INTR_MASTER_WR_MASK | FI2C_INTR_RX_FULL) - -#define FI2C_INTR_SLAVE_DEF_MASK (FI2C_INTR_RX_FULL | FI2C_INTR_STOP_DET | \ - FI2C_INTR_RD_REQ | FI2C_INTR_RX_DONE | \ - FI2C_INTR_RX_UNDER | FI2C_INTR_TX_ABRT |\ - FI2C_INTR_START_DET) - -/** @name FI2C_RX_TL_OFFSET Register - */ -#define FI2C_RX_TL_MASK GENMASK(7, 0) - -/** @name FI2C_TX_TL_OFFSET Register - */ -#define FI2C_TX_TL_MASK GENMASK(7, 0) - -/** @name FI2C_IC_ENABLE_OFFSET Register - */ -#define FI2C_ENABLE_CONTROLLER (0x1 << 0) -#define FI2C_DISABLE_CONTROLLER (0x0 << 0) - -/** @name FI2C_STATUS_OFFSET Register - */ -#define FI2C_STATUS_ACTIVITY (0x1 << 0) -#define FI2C_STATUS_TFNF (0x1 << 1) -#define FI2C_STATUS_TFE (0x1 << 2) -#define FI2C_STATUS_RFNE (0x1 << 3) -#define FI2C_STATUS_RFF (0x1 << 4) -#define FI2C_STATUS_MST_ACTIVITY (0x1 << 5) -#define FI2C_STATUS_SLV_ACTIVITY (0x1 << 6) - -/** @name FI2C_ENABLE_OFFSET Register - */ -#define FI2C_IC_ENABLE (0x1 << 0) -#define FI2C_IC_DISABLE (0x0 << 0) -#define FI2C_IC_ENABLE_MASK (0x1 << 0) - -#define FI2C_SLV_DISABLED_WHILE_BUSY (0x1 << 1) -#define FI2C_SLV_RX_DATA_LOST (0x1 << 2) - -/* High and low times in different speed modes (in ns) */ -#define FI2C_MIN_SS_SCL_HIGHTIME 4000 -#define FI2C_MIN_SS_SCL_LOWTIME 4700 -#define FI2C_MIN_FS_SCL_HIGHTIME 600 -#define FI2C_MIN_FS_SCL_LOWTIME 1300 -#define FI2C_MIN_FP_SCL_HIGHTIME 500 -#define FI2C_MIN_FP_SCL_LOWTIME 500 -#define FI2C_MIN_HS_SCL_HIGHTIME 60 -#define FI2C_MIN_HS_SCL_LOWTIME 160 -#define FI2C_DEFAULT_SDA_HOLD_TIME 300 - -#define FI2C_READ_REG32(addr, reg_offset) FtIn32((addr) + (u32)(reg_offset)) -#define FI2C_WRITE_REG32(addr, reg_offset, reg_value) FtOut32((addr) + (u32)(reg_offset), (u32)(reg_value)) - -#define FI2C_IIC_FIFO_MAX_LV 8 - -/**************************** Type Definitions *******************************/ - -/************************** Variable Definitions *****************************/ -enum -{ - FI2C_STANDARD_SPEED = 0, - FI2C_FAST_SPEED, - - FI2C_SPEED_MODE_MAX -}; -/***************** Macros (Inline Functions) Definitions *********************/ -#define FI2C_GET_INTRRUPT_MASK(addr) FI2C_READ_REG32((addr), FI2C_INTR_MASK_OFFSET) - -#define FI2C_SET_INTRRUPT_MASK(addr, mask) FI2C_WRITE_REG32((addr), FI2C_INTR_MASK_OFFSET, (mask)) - -#define FI2C_CLEAR_INTR_STATUS(addr) FI2C_READ_REG32((addr), FI2C_CLR_INTR_OFFSET) - -#define FI2C_GET_STATUS(addr) FI2C_READ_REG32((addr), FI2C_STATUS_OFFSET) - -#define FI2C_READ_DATA(addr) (u8)(FI2C_DATA_MASK & FI2C_READ_REG32(addr, FI2C_DATA_CMD_OFFSET)) - -#define FI2C_WRITE_DATA(addr, dat) FI2C_WRITE_REG32((addr), FI2C_DATA_CMD_OFFSET, (dat)) - -#define FI2C_SET_RX_TL(addr, level) FI2C_WRITE_REG32((addr), FI2C_RX_TL_OFFSET, (level)) - -#define FI2C_SET_TX_TL(addr, level) FI2C_WRITE_REG32((addr), FI2C_TX_TL_OFFSET, (level)) - -#define FI2C_READ_INTR_STAT(addr) FI2C_READ_REG32((addr), FI2C_INTR_STAT_OFFSET) - -#define FI2C_READ_RAW_INTR_STAT(addr) FI2C_READ_REG32((addr), FI2C_RAW_INTR_STAT_OFFSET) - -inline static u32 FI2cGetEnable(uintptr addr) -{ - return FI2C_READ_REG32(addr, FI2C_ENABLE_STATUS_OFFSET); -} - -/************************** Function Prototypes ******************************/ -FError FI2cSetEnable(uintptr addr, boolean enable); -FError FI2cSetSpeed(uintptr addr, u32 speed_rate); -FError FI2cWaitStatus(uintptr addr, u32 stat_bit); -FError FI2cWaitBusBusy(uintptr addr); -FError FI2cSetTar(uintptr addr, u32 tar_addr); -FError FI2cSetSar(uintptr addr, u32 sar_addr); -FError FI2cFlushRxFifo(uintptr addr); -u32 FI2cClearIntrBits(uintptr addr, u32 *last_err_p); - -#ifdef __cplusplus -} -#endif - -#endif \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/i2c/fi2c/fi2c_intr.c b/bsp/phytium/libraries/standalone/drivers/i2c/fi2c/fi2c_intr.c deleted file mode 100644 index 32ad762321..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/i2c/fi2c/fi2c_intr.c +++ /dev/null @@ -1,450 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fi2c_intr.c - * Date: 2021-11-01 14:53:42 - * LastEditTime: 2022-02-18 08:36:38 - * Description:  This file is for I2C interrupt operation - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2021/11/1 first commit - * 1.1 liushengming 2022/02/18 add fi2c_master interrupt and support slave mode - */ - -/***************************** Include Files *********************************/ -#include -#include "fio.h" -#include "ferror_code.h" -#include "ftypes.h" -#include "fdebug.h" -#include "fi2c_hw.h" -#include "fi2c.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ -#define FI2C_DEBUG_TAG "I2C" -#define FI2C_ERROR(format, ...) FT_DEBUG_PRINT_E(FI2C_DEBUG_TAG, format, ##__VA_ARGS__) -#define FI2C_INFO(format, ...) FT_DEBUG_PRINT_I(FI2C_DEBUG_TAG, format, ##__VA_ARGS__) -#define FI2C_DEBUG(format, ...) FT_DEBUG_PRINT_D(FI2C_DEBUG_TAG, format, ##__VA_ARGS__) - -/************************** Variable Definitions *****************************/ - -/*****************************************************************************/ - -/************************** Function Prototypes ******************************/ -static inline void FI2cMasterCallEvtHandler(FI2c *instance_p, u32 evt, void *para) -{ - FASSERT(instance_p); - FASSERT(evt < FI2C_MASTER_INTR_EVT_NUM); - - if (instance_p->master_evt_handlers[evt]) - { - instance_p->master_evt_handlers[evt](instance_p, para); - } -} - -static inline void FI2cSlaveCallEvtHandler(FI2c *instance_p, u32 evt, void *para) -{ - FASSERT(instance_p); - FASSERT(evt < FI2C_SLAVE_INTR_EVT_NUM); - FASSERT(para); - - if (instance_p->slave_evt_handlers[evt]) - { - instance_p->slave_evt_handlers[evt](instance_p, para); - } -} - -/** - * @name: FI2cStubHandler - * @msg: 主机模式下的I2C中断默认回调函数 - * @return {*} - * @param {void} *instance_p I2C驱动实例数据 - * @param {void} *param, 中断输入参数 - */ -static void FI2cStubHandler(void *instance_p, void *param) -{ - FASSERT(instance_p); - FI2c *instance = (FI2c *)(instance_p); - uintptr base_addr = instance->config.base_addr; - - FI2C_INFO("id: %d ,intr cause: 0x%x", - instance->config.instance_id, - FI2C_READ_INTR_STAT(base_addr)); -} - -/** - * @name: FI2cMasterIntrTxEmptyHandler - * @msg: 主机模式下的I2C TX_FIFO空中断处理函数 - * @return {*} - * @param {void} *instance_p I2C驱动实例数据 - */ -static void FI2cMasterIntrTxEmptyHandler(FI2c *instance_p) -{ - FASSERT(instance_p); - uintptr base_addr = instance_p->config.base_addr; - const u8 *buf_p = instance_p->txframe.data_buff; - - u32 intr_mask; - u32 buf_len; - u32 reg_val; - u32 rx_limit, tx_limit; - - buf_len = instance_p->txframe.tx_total_num - instance_p->txframe.tx_cnt; - - rx_limit = FI2C_IIC_FIFO_MAX_LV - FI2C_READ_REG32(base_addr, FI2C_RXFLR_OFFSET); - tx_limit = FI2C_IIC_FIFO_MAX_LV - FI2C_READ_REG32(base_addr, FI2C_TXFLR_OFFSET); - while (buf_len > 0 & rx_limit > 0 & tx_limit > 0) - { - if (1 == buf_len) - { - if (instance_p->status == STATUS_WRITE_IN_PROGRESS) - { - reg_val = (FI2C_DATA_MASK & *((u8 *)(instance_p->txframe.data_buff))) | - FI2C_DATA_CMD_WRITE | - FI2C_DATA_CMD_STOP; - instance_p->txframe.data_buff++; - FI2C_INFO("Write Stop Singal."); - } - else if (instance_p->status == STATUS_READ_IN_PROGRESS) - { - reg_val = FI2C_DATA_CMD_READ | FI2C_DATA_CMD_STOP; - } - } - else - { - if (instance_p->status == STATUS_WRITE_IN_PROGRESS) - { - reg_val = (FI2C_DATA_MASK & *((u8 *)(instance_p->txframe.data_buff))) | - FI2C_DATA_CMD_WRITE; - instance_p->txframe.data_buff++; - } - else if (instance_p->status == STATUS_READ_IN_PROGRESS) - { - reg_val = FI2C_DATA_CMD_READ; - } - } - FI2C_WRITE_REG32(base_addr, FI2C_DATA_CMD_OFFSET, reg_val); - rx_limit--; - tx_limit--; - buf_len--; - } - instance_p->txframe.tx_cnt = instance_p->txframe.tx_total_num - buf_len; - /*tx over.*/ - if (instance_p->txframe.tx_cnt == instance_p->txframe.tx_total_num) - { - instance_p->txframe.tx_cnt = 0; - if (instance_p->status == STATUS_WRITE_IN_PROGRESS) - { - instance_p->status = STATUS_IDLE; - } - intr_mask = FI2C_GET_INTRRUPT_MASK(instance_p->config.base_addr); - intr_mask &= ~(FI2C_INTR_TX_EMPTY); - FI2C_SET_INTRRUPT_MASK(instance_p->config.base_addr, intr_mask); - } -} - -/** - * @name: FI2cMasterIntrRxFullHandler - * @msg: 主机模式下的I2C RX_FIFO满处理函数,可通过FI2C_SET_RX_TL(address,level);设置触发level - * @return {*} - * @param {void} *instance_p I2C驱动实例数据 - */ -static void FI2cMasterIntrRxFullHandler(FI2c *instance_p) -{ - FASSERT(instance_p); - u32 intr_mask; - uintptr base_addr = instance_p->config.base_addr; - u8 emptyfifo = FI2C_READ_REG32(base_addr, FI2C_RXFLR_OFFSET); - u32 i = 0u; - u32 reg_val; - for (i = 0; i < emptyfifo; i++) - { - *((u8 *)(instance_p->rxframe.data_buff++)) = FI2C_READ_DATA(base_addr); - } - instance_p->rxframe.rx_cnt += emptyfifo; - if (instance_p->rxframe.rx_cnt >= instance_p->rxframe.rx_total_num) - { - instance_p->rxframe.rx_cnt = 0; - instance_p->status = STATUS_IDLE; - intr_mask = FI2C_GET_INTRRUPT_MASK(base_addr); - intr_mask &= ~(FI2C_INTR_RX_FULL); - FI2C_SET_INTRRUPT_MASK(base_addr, intr_mask); - FI2cFlushRxFifo(base_addr); - } -} - -/** - * @name: FI2cMasterIntrHandler - * @msg: 主机模式下的I2C中断响应函数 - * @return {*} - * @param {s32} vector - * @param {void} *param, 中断输入参数 - */ -void FI2cMasterIntrHandler(s32 vector, void *param) -{ - FASSERT(param); - FI2c *instance_p = (FI2c *)param; - uintptr base_addr = instance_p->config.base_addr; - u32 last_err = 0; - u32 stat = FI2cClearIntrBits(base_addr, &last_err); - u32 raw_stat = FI2C_READ_RAW_INTR_STAT(base_addr); - u32 enabled = FI2C_READ_REG32(base_addr, FI2C_ENABLE_OFFSET); - u32 val = 0; - FASSERT(FI2C_MASTER == instance_p->config.work_mode); - if (!(enabled & FI2C_IC_ENABLE) || !(raw_stat & ~FI2C_INTR_ACTIVITY)) - { - return; - } - - if (stat & FI2C_INTR_TX_ABRT) /* trans abort error */ - { - FI2C_ERROR("last error: 0x%x", last_err); - FI2C_ERROR("abort source: 0x%x", FI2C_READ_REG32(base_addr, FI2C_TX_ABRT_SOURCE_OFFSET)); - instance_p->status = STATUS_IDLE; - FI2C_SET_INTRRUPT_MASK(base_addr, 0); /* disable all intr */ - FI2C_READ_REG32(base_addr, FI2C_CLR_TX_ABRT_OFFSET); - FI2C_WRITE_REG32(base_addr, FI2C_ENABLE_OFFSET, 1); - FI2cMasterCallEvtHandler(instance_p, FI2C_EVT_MASTER_TRANS_ABORTED, &val); - return; - } - - if (stat & FI2C_INTR_RX_FULL) /* rx complete */ - { - FI2cMasterIntrRxFullHandler(instance_p); - FI2cMasterCallEvtHandler(instance_p, FI2C_EVT_MASTER_READ_DONE, &val); - return; - } - - if (stat & FI2C_INTR_TX_EMPTY) /* tx complete */ - { - FI2cMasterIntrTxEmptyHandler(instance_p); - FI2cMasterCallEvtHandler(instance_p, FI2C_EVT_MASTER_WRITE_DONE, &val); - return; - } - return; -} -/** - * @name: FI2cMasterRegisterIntrHandler - * @msg: 注册I2C主机中断事件函数 - * @return {*} - * @param {FI2c} *instance_p I2C驱动实例数据 - * @param {u32} evt 中断事件,参考 FI2C_MASTER_INTR_EVT_NUM - * @param {FI2cEvtHandler} handler 中断事件回调函数 - */ -void FI2cMasterRegisterIntrHandler(FI2c *instance_p, u32 evt, FI2cEvtHandler handler) -{ - FASSERT(instance_p && evt < FI2C_MASTER_INTR_EVT_NUM); - instance_p->master_evt_handlers[evt] = handler; -} - -/** - * @name: FI2cMasterGetIntr - * @msg: 获取I2C主机的中断 - * @return {u32 } 返回中断寄存器值 - * @param {FI2c} *instance_p I2C驱动实例数据 - */ -u32 FI2cGetIntr(FI2c *instance_p) -{ - FASSERT(instance_p); - FI2cConfig *config_p = &instance_p->config; - uintptr base_addr = config_p->base_addr; - - if (FT_COMPONENT_IS_READY != instance_p->is_ready) - { - FI2C_ERROR("i2c driver is not ready."); - return FI2C_ERR_NOT_READY; - } - - return FI2C_GET_INTRRUPT_MASK(base_addr); -} -/** - * @name: FI2cMasterSetupIntr - * @msg: 设置I2C主机的中断 - * @return {FError *} 返回错误码 - * @param {FI2c} *instance_p I2C驱动实例数据 - * @param {u32} mask 需要操作的中断寄存器位 - */ -FError FI2cMasterSetupIntr(FI2c *instance_p, u32 mask) -{ - FASSERT(instance_p); - FI2cConfig *config_p = &instance_p->config; - uintptr base_addr = config_p->base_addr; - u32 evt; - - if (FT_COMPONENT_IS_READY != instance_p->is_ready) - { - FI2C_ERROR("i2c driver is not ready."); - return FI2C_ERR_NOT_READY; - } - - if (FI2C_MASTER != instance_p->config.work_mode) - { - FI2C_ERROR("i2c work mode shall be master."); - return FI2C_ERR_INVAL_STATE; - } - - /* disable all i2c irq */ - FI2C_CLEAR_INTR_STATUS(base_addr); - - for (evt = FI2C_EVT_MASTER_TRANS_ABORTED; evt < FI2C_MASTER_INTR_EVT_NUM; evt++) - { - if (instance_p->master_evt_handlers[evt] == NULL) - { - FI2cMasterRegisterIntrHandler(instance_p, evt, FI2cStubHandler); - FI2C_INFO("evt :%d.is default.\r\n", evt); - } - } - FI2C_SET_INTRRUPT_MASK(base_addr, mask); - - return FI2C_SUCCESS; -} - -/** - * @name: FI2cSlaveIntrHandler - * @msg: I2C从机的中断响应函数 - * @return {*} - * @param {s32} vector - * @param {void} *param, 输入参数 - */ -void FI2cSlaveIntrHandler(s32 vector, void *param) -{ - FASSERT(param); - FI2c *instance_p = (FI2c *)param; - uintptr base_addr = instance_p->config.base_addr; - u32 last_err = 0; - - u32 stat = FI2C_READ_INTR_STAT(base_addr); - u32 raw_stat = FI2C_READ_RAW_INTR_STAT(base_addr); - u32 enabled = FI2C_READ_REG32(base_addr, FI2C_ENABLE_OFFSET); - boolean slave_active = (FI2C_GET_STATUS(base_addr) & FI2C_STATUS_SLV_ACTIVITY) ? TRUE : FALSE; - u8 val = 0; - u32 reg_val; - - FASSERT(FI2C_SLAVE == instance_p->config.work_mode); - - if (!(enabled & FI2C_IC_ENABLE) || !(raw_stat & ~FI2C_INTR_ACTIVITY)) - { - return; - } - stat = FI2cClearIntrBits(base_addr, &last_err); - - if (stat & FI2C_INTR_RX_FULL) - { - if (instance_p->status != STATUS_WRITE_IN_PROGRESS) - { - /* code */ - instance_p->status = STATUS_WRITE_IN_PROGRESS; - FI2cSlaveCallEvtHandler(instance_p, FI2C_EVT_SLAVE_WRITE_REQUESTED, &val); - } - val = FI2C_READ_DATA(base_addr); - FI2cSlaveCallEvtHandler(instance_p, FI2C_EVT_SLAVE_WRITE_RECEIVED, &val); - } - if (stat & FI2C_INTR_RD_REQ) - { - if (slave_active) - { - FI2C_READ_REG32(base_addr, FI2C_CLR_RD_REQ_OFFSET); - instance_p->status = STATUS_WRITE_IN_PROGRESS; - FI2cSlaveCallEvtHandler(instance_p, FI2C_EVT_SLAVE_READ_REQUESTED, &val); - reg_val = val; - FI2C_WRITE_DATA(base_addr, reg_val); - } - } - - if (stat & FI2C_INTR_RX_DONE) - { - FI2cSlaveCallEvtHandler(instance_p, FI2C_EVT_SLAVE_READ_PROCESSED, &val); - FI2C_READ_REG32(base_addr, FI2C_CLR_RX_DONE_OFFSET); - return; - } - - if (stat & FI2C_INTR_STOP_DET) - { - instance_p->status = STATUS_IDLE; - FI2cSlaveCallEvtHandler(instance_p, FI2C_EVT_SLAVE_STOP, &val); - } - - if (stat & FI2C_INTR_TX_ABRT) /* trans abort error */ - { - FI2C_ERROR("last error: 0x%x", last_err); - FI2C_ERROR("abort source: 0x%x", FI2C_READ_REG32(base_addr, FI2C_TX_ABRT_SOURCE_OFFSET)); - } - - return; -} - -/** - * @name: FI2cSlaveRegisterIntrHandler - * @msg: 注册I2C从机中断事件函数 - * @return {*} - * @param {FI2c} *instance_p I2C驱动实例数据 - * @param {u32} evt 中断事件,参考 FI2C_SLAVE_INTR_EVT_NUM - * @param {FI2cEvtHandler} handler 中断事件回调函数 - */ -void FI2cSlaveRegisterIntrHandler(FI2c *instance_p, u32 evt, FI2cEvtHandler handler) -{ - FASSERT(instance_p && evt < FI2C_SLAVE_INTR_EVT_NUM); - instance_p->slave_evt_handlers[evt] = handler; -} - -/** - * @name: FI2cSlaveSetupIntr - * @msg: 设置I2C从机的中断 - * @return {FError *} 返回错误码 - * @param {FI2c} *instance_p - */ -FError FI2cSlaveSetupIntr(FI2c *instance_p) -{ - FASSERT(instance_p); - FI2cConfig *config_p = &instance_p->config; - uintptr base_addr = config_p->base_addr; - u32 evt; - u32 mask; - - if (FT_COMPONENT_IS_READY != instance_p->is_ready) - { - FI2C_ERROR("i2c driver is not ready."); - return FI2C_ERR_NOT_READY; - } - - if (FI2C_SLAVE != instance_p->config.work_mode) - { - FI2C_ERROR("i2c work mode shall be slave."); - return FI2C_ERR_INVAL_STATE; - } - - /* disable all i2c irq */ - FI2C_CLEAR_INTR_STATUS(base_addr); - - for (evt = FI2C_EVT_SLAVE_READ_REQUESTED; evt < FI2C_SLAVE_INTR_EVT_NUM; evt++) - { - if (instance_p->slave_evt_handlers[evt] == NULL) - { - FI2cSlaveRegisterIntrHandler(instance_p, evt, FI2cStubHandler); - FI2C_INFO("evt :%d.is default.\r\n", evt); - } - } - FI2C_SET_RX_TL(instance_p->config.base_addr, 0);/* 0 表示接收缓冲区大于等于 1 时触发中断 */ - FI2C_SET_TX_TL(instance_p->config.base_addr, 0);/* 0 表示发送缓冲区大于等于 1 时触发中断 */ - mask = FI2C_GET_INTRRUPT_MASK(base_addr); - mask |= (FI2C_INTR_SLAVE_DEF_MASK); - FI2C_SET_INTRRUPT_MASK(base_addr, mask); - - return FI2C_SUCCESS; -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/i2c/fi2c/fi2c_master.c b/bsp/phytium/libraries/standalone/drivers/i2c/fi2c/fi2c_master.c deleted file mode 100644 index da45d42a31..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/i2c/fi2c/fi2c_master.c +++ /dev/null @@ -1,424 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fi2c_master.c - * Date: 2021-11-01 14:53:42 - * LastEditTime: 2022-02-18 08:36:46 - * Description:  This file is for i2c master drivers - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2021/11/1 first commit - * 1.1 liushengming 2022/2/18 add poll mode and intr mode - */ - -/***************************** Include Files *********************************/ - -#include "fio.h" -#include "fsleep.h" -#include "fdebug.h" -#include "fi2c_hw.h" -#include "fi2c.h" -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ -#define FI2C_DEBUG_TAG "I2C_MASTER" -#define FI2C_ERROR(format, ...) FT_DEBUG_PRINT_E(FI2C_DEBUG_TAG, format, ##__VA_ARGS__) -#define FI2C_INFO(format, ...) FT_DEBUG_PRINT_I(FI2C_DEBUG_TAG, format, ##__VA_ARGS__) -#define FI2C_DEBUG(format, ...) FT_DEBUG_PRINT_D(FI2C_DEBUG_TAG, format, ##__VA_ARGS__) - -#define FI2C_TIMEOUT 500 - -/************************** Function Prototypes ******************************/ - -/************************** Variable Definitions *****************************/ - -/*****************************************************************************/ -/** - * @name: FI2cMasterStartTrans - * @msg: I2C主机开始传输 - * @return {*} - * @param {FI2c} *instance_p, I2C驱动实例数据 - * @param {u32} mem_addr, 从机的片内偏移 - * @param {u8} mem_byte_len, Size of internal memory address 1->8bit ~ 4->32bit - * @param {u8} flag ,for cmd reg STOP,RESTART. - */ -static FError FI2cMasterStartTrans(FI2c *instance_p, u32 mem_addr, u8 mem_byte_len, u16 flag) -{ - FASSERT(instance_p); - uintptr base_addr = instance_p->config.base_addr; - FError ret = FI2C_SUCCESS; - u32 addr_len = mem_byte_len; - - ret = FI2cWaitBusBusy(base_addr); - if (FI2C_SUCCESS != ret) - { - return ret; - } - ret = FI2cSetTar(base_addr, instance_p->config.slave_addr); /* 设备地址 */ - if (FI2C_SUCCESS != ret) - { - return ret; - } - while (addr_len) - { - ret = FI2cWaitStatus(base_addr, FI2C_STATUS_TFNF); - if (FI2C_SUCCESS != ret) - { - break; - } - if (FI2C_GET_STATUS(base_addr) & FI2C_STATUS_TFNF) - { - addr_len--; - if (addr_len != 0) - { - FI2C_WRITE_REG32(base_addr, FI2C_DATA_CMD_OFFSET, - (mem_addr >> (addr_len * BITS_PER_BYTE)) & FI2C_DATA_MASK); /* word address */ - } - else - { - FI2C_WRITE_REG32(base_addr, FI2C_DATA_CMD_OFFSET, - ((mem_addr >> (addr_len * BITS_PER_BYTE)) & FI2C_DATA_MASK) + flag); /* word address */ - } - } - } - return ret; -} - -/** - * @name: FI2cMasterStopTrans - * @msg: I2C主机结束传输 - * @return {*} - * @param {FI2c} *instance_p, I2C驱动实例数据 - */ -static FError FI2cMasterStopTrans(FI2c *instance_p) -{ - FASSERT(instance_p); - FError ret = FI2C_SUCCESS; - uintptr base_addr = instance_p->config.base_addr; - u32 reg_val; - u32 timeout = 0; - - FI2C_INFO("GET MASTER STOP, stat: 0x%x, 0x%x", FI2C_READ_INTR_STAT(base_addr), - FI2C_READ_RAW_INTR_STAT(base_addr)); - - while (TRUE) - { - if (FI2C_READ_RAW_INTR_STAT(base_addr) & FI2C_INTR_STOP_DET) - { - reg_val = FI2C_READ_REG32(base_addr, FI2C_CLR_STOP_DET_OFFSET); /* read to clr intr status */ - break; - } - else if (FI2C_TIMEOUT < ++timeout) - { - break; /* wait timeout, but no error code ret */ - } - } - - ret = FI2cWaitBusBusy(base_addr); - if (FI2C_SUCCESS == ret) - { - ret = FI2cFlushRxFifo(base_addr); - } - - return ret; -} - -/** - * @name: FI2cMasterReadPoll - * @msg: I2C主机读,阻塞直到完成读操作或失败 - * @return {FError *} 返回错误码 - * @param {FI2c} *instance_p I2C驱动实例数据 - * @param {u32} mem_addr 从机的内部偏移地址 - * @param {u8} mem_byte_len, Size of internal memory address 1->8bit ~ 4->32bit - * @param {u8} *buf_p 读目的缓冲区 - * @param {int} buf_len 读目的缓冲区长度 - */ -FError FI2cMasterReadPoll(FI2c *instance_p, u32 mem_addr, u8 mem_byte_len, u8 *buf_p, u32 buf_len) -{ - FError ret = FI2C_SUCCESS; - FASSERT(instance_p); - u32 mask; - u32 reg_val; - u32 tx_len = buf_len; - u32 rx_len = buf_len; - u32 rx_limit, tx_limit; - u32 trans_timeout = 0; - uintptr base_addr = instance_p->config.base_addr; - - if (FT_COMPONENT_IS_READY != instance_p->is_ready) - { - FI2C_ERROR("i2c driver is not ready."); - return FI2C_ERR_NOT_READY; - } - - if (FI2C_MASTER != instance_p->config.work_mode) - { - FI2C_ERROR("i2c work mode shall be master."); - return FI2C_ERR_INVAL_STATE; - } - - ret = FI2cMasterStartTrans(instance_p, mem_addr, mem_byte_len, FI2C_DATA_CMD_WRITE); - if (FI2C_SUCCESS != ret) - { - return ret; - } - /*for trigger rx intr*/ - while (tx_len > 0 || rx_len > 0) - { - /* code */ - rx_limit = FI2C_IIC_FIFO_MAX_LV - FI2C_READ_REG32(base_addr, FI2C_RXFLR_OFFSET); - tx_limit = FI2C_IIC_FIFO_MAX_LV - FI2C_READ_REG32(base_addr, FI2C_TXFLR_OFFSET); - - while (tx_len > 0 & rx_limit > 0 & tx_limit > 0) - { - /* code */ - if (tx_len == 1) - { - - reg_val = FI2C_DATA_CMD_READ | FI2C_DATA_CMD_STOP; - FI2C_WRITE_REG32(instance_p->config.base_addr, FI2C_DATA_CMD_OFFSET, reg_val); - } - else - { - reg_val = FI2C_DATA_CMD_READ; - FI2C_WRITE_REG32(instance_p->config.base_addr, FI2C_DATA_CMD_OFFSET, reg_val); - } - tx_len--; - rx_limit--; - tx_limit--; - } - - u8 rx_tem = FI2C_READ_REG32(base_addr, FI2C_RXFLR_OFFSET); - while (rx_tem > 0 & rx_len > 0) - { - /* code */ - if (FI2C_GET_STATUS(base_addr) & FI2C_STATUS_RFNE) - { - /* trans one byte */ - *buf_p++ = FI2C_READ_DATA(base_addr); - rx_len--; - rx_tem--; - trans_timeout = 0; - } - else if (FI2C_TIMEOUT < (++trans_timeout)) - { - ret = FI2C_ERR_TIMEOUT; - FI2C_ERROR("timeout in i2c master read."); - break; - } - } - } - if (FI2C_SUCCESS == ret) - { - ret = FI2cMasterStopTrans(instance_p); - } - return ret; -} - -/** - * @name: FI2cMasterWritePoll - * @msg: I2C主机写,阻塞直到完成写操作或失败 - * @return {FError *} 返回错误码 - * @param {FI2c} *instance_p I2C驱动实例数据 - * @param {u32} mem_addr 从机的内部偏移地址 - * @param {u8} mem_byte_len, Size of internal memory address 1->8bit ~ 4->32bit - * @param {u8} *buf_p 写源缓冲区 - * @param {size_t} buf_len 写源缓冲区长度 - */ -FError FI2cMasterWritePoll(FI2c *instance_p, u32 mem_addr, u8 mem_byte_len, const u8 *buf_p, u32 buf_len) -{ - FASSERT(instance_p && buf_p); - FError ret = FI2C_SUCCESS; - u32 buf_idx = buf_len; - u32 tx_limit; - uintptr base_addr = instance_p->config.base_addr; - u32 reg_val; - u32 trans_timeout = 0; - - if (FT_COMPONENT_IS_READY != instance_p->is_ready) - { - FI2C_ERROR("i2c driver is not ready."); - return FI2C_ERR_NOT_READY; - } - if (FI2C_MASTER != instance_p->config.work_mode) - { - FI2C_ERROR("i2c work mode shall be master."); - return FI2C_ERR_INVAL_STATE; - } - - ret = FI2cMasterStartTrans(instance_p, mem_addr, mem_byte_len, FI2C_DATA_CMD_WRITE); - if (FI2C_SUCCESS != ret) - { - return ret; - } - while (buf_idx) - { - tx_limit = FI2C_IIC_FIFO_MAX_LV - FI2C_READ_REG32(base_addr, FI2C_TXFLR_OFFSET); - while (tx_limit > 0 & buf_idx > 0) - { - if (FI2C_GET_STATUS(base_addr) & FI2C_STATUS_TFNF) - { - if (1 == buf_idx) - { - reg_val = (FI2C_DATA_MASK & *buf_p) | - FI2C_DATA_CMD_WRITE | - FI2C_DATA_CMD_STOP; - FI2C_INFO("Write Stop Singal."); - } - else - { - reg_val = (FI2C_DATA_MASK & *buf_p) | - FI2C_DATA_CMD_WRITE; - } - buf_idx--; - tx_limit--; - FI2C_WRITE_REG32(base_addr, FI2C_DATA_CMD_OFFSET, reg_val); - buf_p++; - trans_timeout = 0; - } - else if (FI2C_TIMEOUT < ++trans_timeout) - { - ret = FI2C_ERR_TIMEOUT; - FI2C_ERROR("Timeout in i2c master write."); - break; - } - } - } - if (FI2C_SUCCESS == ret) - { - ret = FI2cMasterStopTrans(instance_p); - } - return ret; -} - -/** - * @name: FI2cMasterReadIntr - * @msg: I2C主机读,中断完成读操作或失败 - * @return {FError *} 返回错误码 - * @param {FI2c} *instance_p I2C驱动实例数据 - * @param {u32} mem_addr 从机的内部偏移地址 - * @param {u8} mem_byte_len, Size of internal memory address 1->8bit ~ 4->32bit - * @param {u8} *buf_p 读目的缓冲区 - * @param {int} buf_len 读目的缓冲区长度 - */ -FError FI2cMasterReadIntr(FI2c *instance_p, u32 mem_addr, u8 mem_byte_len, u8 *buf_p, u32 buf_len) -{ - FError ret = FI2C_SUCCESS; - FASSERT(instance_p); - u32 mask; - u32 reg_val; - u32 trans_timeout; - - if (FT_COMPONENT_IS_READY != instance_p->is_ready) - { - FI2C_ERROR("i2c driver is not ready."); - return FI2C_ERR_NOT_READY; - } - if (FI2C_MASTER != instance_p->config.work_mode) - { - FI2C_ERROR("i2c work mode shall be master."); - return FI2C_ERR_INVAL_STATE; - } - - while (instance_p->status != STATUS_IDLE) - { - /* code */ - fsleep_millisec(1); - if (FI2C_TIMEOUT < (++trans_timeout)) - { - ret = FI2C_ERR_TIMEOUT; - FI2C_ERROR("Timeout in i2c master read intr."); - break; - } - } - instance_p->rxframe.data_buff = buf_p; - instance_p->rxframe.rx_total_num = buf_len; - instance_p->txframe.tx_total_num = buf_len; - instance_p->rxframe.rx_cnt = 0; - FI2C_SET_RX_TL(instance_p->config.base_addr, 0);/* 0 表示接收缓冲区大于等于 1 时触发中断 */ - ret = FI2cMasterStartTrans(instance_p, mem_addr, mem_byte_len, FI2C_DATA_CMD_WRITE); - instance_p->status = STATUS_READ_IN_PROGRESS; - if (FI2C_SUCCESS != ret) - { - return ret; - } - mask = FI2C_GET_INTRRUPT_MASK(instance_p->config.base_addr); - mask |= FI2C_INTR_MASTER_RD_MASK; - ret = FI2cMasterSetupIntr(instance_p, mask); - if (FI2C_SUCCESS != ret) - { - return ret; - } - return ret; -} - -/** - * @name: FI2cMasterWriteIntr - * @msg: I2C主机写,中断写操作或失败 - * @return {FError *} 返回错误码 - * @param {FI2c} *instance_p I2C驱动实例数据 - * @param {u32} mem_addr 从机的内部偏移地址 - * @param {u8} mem_byte_len, Size of internal memory address 1->8bit ~ 4->32bit - * @param {u8} *buf_p 写源缓冲区 - * @param {size_t} buf_len 写源缓冲区长度 - */ -FError FI2cMasterWriteIntr(FI2c *instance_p, u32 mem_addr, u8 mem_byte_len, const u8 *buf_p, u32 buf_len) -{ - FError ret = FI2C_SUCCESS; - FASSERT(instance_p); - u32 mask; - u32 trans_timeout = 0; - if (FT_COMPONENT_IS_READY != instance_p->is_ready) - { - FI2C_ERROR("i2c driver is not ready."); - return FI2C_ERR_NOT_READY; - } - - if (FI2C_MASTER != instance_p->config.work_mode) - { - FI2C_ERROR("i2c work mode shall be master."); - return FI2C_ERR_INVAL_STATE; - } - while (instance_p->status != STATUS_IDLE) - { - /* code */ - fsleep_millisec(1); - if (FI2C_TIMEOUT < (++trans_timeout)) - { - ret = FI2C_ERR_TIMEOUT; - FI2C_ERROR("Timeout in i2c master write intr."); - break; - } - } - instance_p->txframe.data_buff = buf_p; - instance_p->txframe.tx_total_num = buf_len; - instance_p->txframe.tx_cnt = 0; - ret = FI2cMasterStartTrans(instance_p, mem_addr, mem_byte_len, FI2C_DATA_CMD_WRITE); - if (FI2C_SUCCESS != ret) - { - return ret; - } - instance_p->status = STATUS_WRITE_IN_PROGRESS; - mask = FI2C_GET_INTRRUPT_MASK(instance_p->config.base_addr); - mask |= FI2C_INTR_MASTER_WR_MASK; - ret = FI2cMasterSetupIntr(instance_p, mask); - if (FI2C_SUCCESS != ret) - { - return ret; - } - return ret; -} diff --git a/bsp/phytium/libraries/standalone/drivers/i2c/fi2c/fi2c_sinit.c b/bsp/phytium/libraries/standalone/drivers/i2c/fi2c/fi2c_sinit.c deleted file mode 100644 index 03c4e69b8d..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/i2c/fi2c/fi2c_sinit.c +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fi2c_sinit.c - * Date: 2021-11-01 14:53:42 - * LastEditTime: 2022-02-18 08:36:52 - * Description:  This file is for implementation of driver's static initialization functionality - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2021/11/1 first commit - */ - -/***************************** Include Files *********************************/ - -#include "ftypes.h" -#include "fparameters.h" -#include "fi2c.h" -#include "sdkconfig.h" -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Variable Definitions *****************************/ - -extern const FI2cConfig FI2C_CONFIG_TBL[FI2C_NUM]; -/************************** Function Prototypes ******************************/ -/** - * @name: FI2cLookupConfig - * @msg: 获取I2C驱动的默认配置参数 - * @return {const FI2cConfig*} 驱动默认参数 - * @param {u32} instance_id, 当前控制的I2C控制器实例号 - */ -const FI2cConfig *FI2cLookupConfig(u32 instance_id) -{ - const FI2cConfig *ptr = NULL; - u32 index; - - for (index = 0; index < (u32)FI2C_NUM; index++) - { - if (FI2C_CONFIG_TBL[index].instance_id == instance_id) - { - ptr = &FI2C_CONFIG_TBL[index]; - break; - } - } - - return (const FI2cConfig *)ptr; -} diff --git a/bsp/phytium/libraries/standalone/drivers/iopad/Kconfig b/bsp/phytium/libraries/standalone/drivers/iopad/Kconfig deleted file mode 100644 index 972a37025f..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/iopad/Kconfig +++ /dev/null @@ -1,4 +0,0 @@ - config ENABLE_IOPAD - bool - prompt "Enable iopad" - default y if TARGET_E2000 \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/iopad/fiopad/fiopad.c b/bsp/phytium/libraries/standalone/drivers/iopad/fiopad/fiopad.c deleted file mode 100644 index d5aedbd9b0..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/iopad/fiopad/fiopad.c +++ /dev/null @@ -1,478 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fiopad.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:25:29 - * Description:  This file is for iopad function - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhangyan 2023/7/4 init commit - */ - -/***************************** Include Files *********************************/ -#include "fparameters.h" -#include -#include "fio.h" -#include "fkernel.h" -#include "fassert.h" -#include "fdebug.h" -#include "stdio.h" -#include "fpinctrl.h" -#include "fiopad_hw.h" -#include "fiopad.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -#define FIOPAD_DEBUG_TAG "FIOPAD" -#define FIOPAD_ERROR(format, ...) FT_DEBUG_PRINT_E(FIOPAD_DEBUG_TAG, format, ##__VA_ARGS__) -#define FIOPAD_WARN(format, ...) FT_DEBUG_PRINT_W(FIOPAD_DEBUG_TAG, format, ##__VA_ARGS__) -#define FIOPAD_INFO(format, ...) FT_DEBUG_PRINT_I(FIOPAD_DEBUG_TAG, format, ##__VA_ARGS__) -#define FIOPAD_DEBUG(format, ...) FT_DEBUG_PRINT_D(FIOPAD_DEBUG_TAG, format, ##__VA_ARGS__) - -/************************** Function Prototypes ******************************/ - -/** - * @name: FIOPadCfgInitialize - * @msg: Initializes a specific instance such that it is ready to be used - * @param {FIOPadCtrl} *pctrl, instance of FIOPAD controller - * @param {FIOPadConfig} input_config_p, Configuration parameters of IOPAD - * @return err code information, FPWM_SUCCESS indicates success,others indicates failed - */ -FError FIOPadCfgInitialize(FIOPadCtrl *instance_p, const FIOPadConfig *input_config_p) -{ - FASSERT(instance_p != NULL); - FASSERT(input_config_p != NULL); - - FError ret = FIOPAD_SUCCESS; - /* - * If the device is started, disallow the initialize and return a Status - * indicating it is started. This allows the user to de-initialize the device - * and reinitialize, but prevents a user from inadvertently - * initializing. - */ - if (FT_COMPONENT_IS_READY == instance_p->is_ready) - { - FIOPAD_WARN("Device is already initialized."); - } - - /*Set default values and configuration data */ - FIOPadDeInitialize(instance_p); - - instance_p->config = *input_config_p; - - instance_p->is_ready = FT_COMPONENT_IS_READY; - - return ret; -} - -/** - * @name: FPinGetFunc - * @msg: get the current multiplexing function of IO pins - * @param {FIOPadCtrl} *instance_p, instance of FIOPAD controller - * @param {u32} pin_reg_off, pin reg offset - * @return {FIOPadFunc} current multiplexing function - */ -FIOPadFunc FIOPadGetFunc(FIOPadCtrl *instance_p, const u32 pin_reg_off) -{ - FASSERT(instance_p); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - FIOPAD_ASSERT_REG0_OFF(pin_reg_off); - uintptr base_addr = instance_p->config.base_address; - u32 func = FIOPAD_REG0_FUNC_GET(FIOPAD_READ_REG32(base_addr, pin_reg_off)); - FIOPAD_ASSERT_FUNC(func); - - return (FIOPadFunc)func; -} - -/** - * @name: FPinSetFunc - * @msg: set the multiplexing function of IO pins - * @param {FIOPadCtrl} *instance_p, instance of FIOPAD controller - * @param {u32} pin_reg_off, pin reg offset - * @param {FIOPadFunc} func, specific multiplexing function - * @return err code information, FIOPAD_SUCCESS indicates success,others indicates failed - */ -FError FIOPadSetFunc(FIOPadCtrl *instance_p, const u32 pin_reg_off, FIOPadFunc func) -{ - FASSERT(instance_p); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - FIOPAD_ASSERT_REG0_OFF(pin_reg_off); - FIOPAD_ASSERT_FUNC(func); - u32 ret = FIOPAD_SUCCESS; - uintptr base_addr = instance_p->config.base_address; - u32 reg_val = FIOPAD_READ_REG32(base_addr, pin_reg_off); - u32 test_val = 0; - - reg_val &= ~FIOPAD_REG0_FUNC_MASK; - reg_val |= FIOPAD_REG0_FUNC_SET(func); - - FIOPAD_WRITE_REG32(base_addr, pin_reg_off, reg_val); - - test_val = FIOPAD_READ_REG32(base_addr, pin_reg_off); - - if (reg_val != test_val) - { - FIOPAD_ERROR("ERROR: FIOPad write is failed ,pin is %x\n, 0x%x != 0x%x", - pin_reg_off, reg_val, test_val); - } - - return ret; -} - -/** - * @name: FIOPadGetPull - * @msg: get the current up_down_pull configuration of IO pins - * @param {FIOPadCtrl} *instance_p, instance of FIOPAD controller - * @param {u32} pin_reg_off, pin reg offset - * @return {FIOPadPull} current up_down_pull configuration - */ -FIOPadPull FIOPadGetPull(FIOPadCtrl *instance_p, const u32 pin_reg_off) -{ - FASSERT(instance_p); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - FIOPAD_ASSERT_REG0_OFF(pin_reg_off); - uintptr base_addr = instance_p->config.base_address; - u32 pull = FIOPAD_REG0_PULL_GET(FIOPAD_READ_REG32(base_addr, pin_reg_off)); - FIOPAD_ASSERT_PULL(pull); - - return (FIOPadPull)pull; -} - -/** - * @name: FIOPadSetPull - * @msg: set the up_down_pull configuration of IO pins - * @param {FIOPadCtrl} *instance_p, instance of FIOPAD controller - * @param {u32} pin_reg_off, pin reg offset - * @param {FIOPadPull} func, up_down_pull configuration - * @return err code information, FIOPAD_SUCCESS indicates success,others indicates failed - */ -FError FIOPadSetPull(FIOPadCtrl *instance_p, const u32 pin_reg_off, FIOPadPull pull) -{ - FASSERT(instance_p); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - FIOPAD_ASSERT_REG0_OFF(pin_reg_off); - FIOPAD_ASSERT_PULL(pull); - u32 ret = FIOPAD_SUCCESS; - uintptr base_addr = instance_p->config.base_address; - u32 reg_val = FIOPAD_READ_REG32(base_addr, pin_reg_off); - - reg_val &= ~FIOPAD_REG0_PULL_MASK; - reg_val |= FIOPAD_REG0_PULL_SET(pull); - - FIOPAD_WRITE_REG32(base_addr, pin_reg_off, reg_val); - - return ret; -} - -/** - * @name: FIOPadGetDriver - * @msg: get the current driver strength of IO pins - * @param {FIOPadCtrl} *instance_p, instance of FIOPAD controller - * @param {u32} pin_reg_off, pin reg offset - * @return {FIOPadDrive} current driver strength - */ -FIOPadDrive FIOPadGetDriver(FIOPadCtrl *instance_p, const u32 pin_reg_off) -{ - FASSERT(instance_p); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - FIOPAD_ASSERT_REG0_OFF(pin_reg_off); - uintptr base_addr = instance_p->config.base_address; - u32 drive = FIOPAD_REG0_DRIVE_GET(FIOPAD_READ_REG32(base_addr, pin_reg_off)); - FIOPAD_ASSERT_DRIVE(drive); - - return (FIOPadDrive)drive; -} - -/** - * @name: FIOPadSetDriver - * @msg: set the driver strength of IO pins - * @param {FIOPadCtrl} *instance_p, instance of FIOPAD controller - * @param {u32} pin_reg_off, pin reg offset - * @param {FIOPadDrive} func, driver strength - * @return err code information, FIOPAD_SUCCESS indicates success,others indicates failed - */ -FError FIOPadSetDriver(FIOPadCtrl *instance_p, const u32 pin_reg_off, FIOPadDrive drive) -{ - FASSERT(instance_p); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - FIOPAD_ASSERT_REG0_OFF(pin_reg_off); - FIOPAD_ASSERT_DRIVE(drive); - u32 ret = FIOPAD_SUCCESS; - uintptr base_addr = instance_p->config.base_address; - u32 reg_val = FIOPAD_READ_REG32(base_addr, pin_reg_off); - - reg_val &= ~FIOPAD_REG0_DRIVE_MASK; - reg_val |= FIOPAD_REG0_DRIVE_SET(drive); - - FIOPAD_WRITE_REG32(base_addr, pin_reg_off, reg_val); - - return ret; -} - -/** - * @name: FIOPadSetConfig - * @msg: set the func, up_down_pull, driver strength of IO pins - * @param {FIOPadCtrl} *instance_p, instance of FIOPAD controller - * @param {u32} pin_reg_off, pin reg offset - * @param {FIOPadFunc} func, specific multiplexing function - * @param {FIOPadPull} pull, up_down_pull configurations - * @param {FIOPadDrive} driver, driver strength - * @return err code information, FIOPAD_SUCCESS indicates success,others indicates failed - */ -FError FIOPadSetConfig(FIOPadCtrl *instance_p, const u32 pin_reg_off, FIOPadFunc func, FIOPadPull pull, FIOPadDrive drive) -{ - FASSERT(instance_p); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - FIOPAD_ASSERT_REG0_OFF(pin_reg_off); - FIOPAD_ASSERT_FUNC(func); - FIOPAD_ASSERT_PULL(pull); - FIOPAD_ASSERT_DRIVE(drive); - u32 ret = FIOPAD_SUCCESS; - uintptr base_addr = instance_p->config.base_address; - u32 reg_val = FIOPAD_READ_REG32(base_addr, pin_reg_off); - - reg_val &= ~FIOPAD_REG0_FUNC_MASK; - reg_val |= FIOPAD_REG0_FUNC_SET(func); - - reg_val &= ~FIOPAD_REG0_PULL_MASK; - reg_val |= FIOPAD_REG0_PULL_SET(pull); - - reg_val &= ~FIOPAD_REG0_DRIVE_MASK; - reg_val |= FIOPAD_REG0_DRIVE_SET(drive); - - FIOPAD_WRITE_REG32(base_addr, pin_reg_off, reg_val); - reg_val = FIOPAD_READ_REG32(base_addr, pin_reg_off); - - return ret; -} - -/** - * @name: FIOPadGetConfig - * @msg: set the func, up_down_pull, driver strength of IO pins - * @param {FIOPadCtrl} *instance_p, instance of FIOPAD controller - * @param {u32} pin_reg_off, pin reg offset - * @param {FIOPadFunc} *func, multiplexing function - * @param {FIOPadPull} *pull, up_down_pull configurations - * @param {FIOPadDrive} *driver, driver strength - * @return err code information, FIOPAD_SUCCESS indicates success,others indicates failed - */ -FError FIOPadGetConfig(FIOPadCtrl *instance_p, const u32 pin_reg_off, FIOPadFunc *func, FIOPadPull *pull, FIOPadDrive *drive) -{ - FASSERT(instance_p); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - FIOPAD_ASSERT_REG0_OFF(pin_reg_off); - u32 ret = FIOPAD_SUCCESS; - uintptr base_addr = instance_p->config.base_address; - u32 reg_val = FIOPAD_READ_REG32(base_addr, pin_reg_off); - - *func = FIOPAD_REG0_FUNC_GET(reg_val); - *pull = FIOPAD_REG0_PULL_GET(reg_val); - *drive = FIOPAD_REG0_DRIVE_GET(reg_val); - - return ret; -} - -/** - * @name: FIOPadGetDelay - * @msg: get the current delay configuration of IO pins - * @param {FIOPadCtrl} *instance_p, instance of FIOPAD controller - * @param {u32} pin_reg_off, pin reg offset - * @param {FIOPadDelayDir} dir, the delay direction - * @param {FIOPadDelayType} type, the delay type - * @return {FIOPadDelay} current delay value - */ -FIOPadDelay FIOPadGetDelay(FIOPadCtrl *instance_p, const u32 pin_reg_off, FIOPadDelayDir dir, FIOPadDelayType type) -{ - FASSERT(instance_p); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - FIOPAD_ASSERT_REG1_OFF(pin_reg_off); - uintptr base_addr = instance_p->config.base_address; - const u32 reg_val = FIOPAD_READ_REG32(base_addr, pin_reg_off); - u8 delay = 0; - - if (FIOPAD_OUTPUT_DELAY == dir) - { - if (FIOPAD_DELAY_FINE_TUNING == type) - { - delay = FIOPAD_REG1_OUT_DELAY_DELICATE_GET(reg_val); - } - else if (FIOPAD_DELAY_COARSE_TUNING == type) - { - delay = FIOPAD_REG1_OUT_DELAY_ROUGH_GET(reg_val); - } - else - { - FASSERT(0); - } - } - else if (FIOPAD_INPUT_DELAY == dir) - { - if (FIOPAD_DELAY_FINE_TUNING == type) - { - delay = FIOPAD_REG1_IN_DELAY_DELICATE_GET(reg_val); - } - else if (FIOPAD_DELAY_COARSE_TUNING == type) - { - delay = FIOPAD_REG1_IN_DELAY_ROUGH_GET(reg_val); - } - else - { - FASSERT(0); - } - } - else - { - FASSERT(0); - } - - FIOPAD_ASSERT_DELAY(delay); - - return (FIOPadDelay)delay; -} - -/** - * @name: FIOPadSetDelay - * @msg: set the current delay configuration of IO pins - * @param {FIOPadCtrl} *instance_p, instance of FIOPAD controller - * @param {u32} pin_reg_off, pin reg offset - * @param {FIOPadDelayDir} dir, the delay direction - * @param {FIOPadDelayType} type, the delay type - * @param {FIOPadDelay} delay, delay value - * @return err code information, FIOPAD_SUCCESS indicates success,others indicates failed - */ -FError FIOPadSetDelay(FIOPadCtrl *instance_p, const u32 pin_reg_off, FIOPadDelayDir dir, FIOPadDelayType type, FIOPadDelay delay) -{ - FASSERT(instance_p); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - FIOPAD_ASSERT_REG1_OFF(pin_reg_off); - FIOPAD_ASSERT_DELAY(delay); - u32 ret = FIOPAD_SUCCESS; - uintptr base_addr = instance_p->config.base_address; - u32 reg_val = FIOPAD_READ_REG32(base_addr, pin_reg_off); - - if (FIOPAD_OUTPUT_DELAY == dir) - { - if (FIOPAD_DELAY_FINE_TUNING == type) - { - reg_val &= ~FIOPAD_REG1_OUT_DELAY_DELICATE_MASK; - reg_val |= FIOPAD_REG1_OUT_DELAY_DELICATE_SET(delay); - } - else if (FIOPAD_DELAY_COARSE_TUNING == type) - { - reg_val &= ~FIOPAD_REG1_OUT_DELAY_ROUGH_MASK; - reg_val |= FIOPAD_REG1_OUT_DELAY_ROUGH_SET(delay); - } - else - { - FASSERT(0); - } - } - else if (FIOPAD_INPUT_DELAY == dir) - { - if (FIOPAD_DELAY_FINE_TUNING == type) - { - reg_val &= ~FIOPAD_REG1_IN_DELAY_DELICATE_MASK; - reg_val |= FIOPAD_REG1_IN_DELAY_DELICATE_SET(delay); - } - else if (FIOPAD_DELAY_COARSE_TUNING == type) - { - reg_val &= ~FIOPAD_REG1_IN_DELAY_ROUGH_MASK; - reg_val |= FIOPAD_REG1_IN_DELAY_ROUGH_SET(delay); - } - else - { - FASSERT(0); - } - } - else - { - FASSERT(0); - } - - FIOPAD_WRITE_REG32(base_addr, pin_reg_off, reg_val); - - return ret; -} - -/** - * @name: FPinSetDelayEn - * @msg: Enable/disable IO pin delay - * @param {FIOPadCtrl} *instance_p, instance of FIOPAD controller - * @param {u32} pin_reg_off, pin reg offset - * @param {FIOPadDelayDir} dir, the delay direction - * @param {boolean} enable TRUE: enable, FALSE: disable - * @return err code information, FIOPAD_SUCCESS indicates success,others indicates failed - */ -FError FIOPadSetDelayEn(FIOPadCtrl *instance_p, const u32 pin_reg_off, FIOPadDelayDir dir, boolean enable) -{ - FASSERT(instance_p); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - FIOPAD_ASSERT_REG1_OFF(pin_reg_off); - u32 ret = FIOPAD_SUCCESS; - uintptr base_addr = instance_p->config.base_address; - u32 reg_val = FIOPAD_READ_REG32(base_addr, pin_reg_off); - - if (FIOPAD_OUTPUT_DELAY == dir) - { - if (enable) - { - reg_val |= FIOPAD_REG1_OUT_DELAY_EN; - } - else - { - reg_val &= ~FIOPAD_REG1_OUT_DELAY_EN; - } - } - else if (FIOPAD_INPUT_DELAY == dir) - { - if (enable) - { - reg_val |= FIOPAD_REG1_IN_DELAY_EN; - } - else - { - reg_val &= ~FIOPAD_REG1_IN_DELAY_EN; - } - } - else - { - FASSERT(0); - } - - FIOPAD_WRITE_REG32(base_addr, pin_reg_off, reg_val); - - return ret; -} - -/** - * @name: FIOPadDeInitialize - * @msg: DeInitialization function for the device instance - * @param {FIOPadCtrl} *pctrl, instance of FIOPAD controller - * @return {*} - */ -FError FIOPadDeInitialize(FIOPadCtrl *instance_p) -{ - FASSERT(instance_p); - FError ret = FIOPAD_SUCCESS; - instance_p->is_ready = 0; - memset(instance_p, 0, sizeof(*instance_p)); - - return ret; -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/iopad/fiopad/fiopad.h b/bsp/phytium/libraries/standalone/drivers/iopad/fiopad/fiopad.h deleted file mode 100644 index 280ea510a4..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/iopad/fiopad/fiopad.h +++ /dev/null @@ -1,190 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fiopad.h - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-04-15 11:45:05 - * Description: This file is for detailed description of the device configuration and driver. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhangyan 2023/7/4 init commit - */ - -#ifndef FIOPAD_H -#define FIOPAD_H - -/***************************** Include Files *********************************/ -#include "ftypes.h" -#include "fparameters.h" -#include "fio.h" -#include "fkernel.h" -#include "fassert.h" -#include "fdebug.h" -#include "stdio.h" -#include "fpinctrl.h" -#include "fiopad_hw.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/**************************** Type Definitions *******************************/ -#define FIOPAD_SUCCESS FT_SUCCESS -#define FIOPAD_INVAL_PARAM FT_MAKE_ERRCODE(ErrModBsp, ErrBspIOPad, 1) -#define FIOPAD_NOT_READY FT_MAKE_ERRCODE(ErrModBsp, ErrBspIOPad, 2) -#define FIOPAD_NOT_SUPPORT FT_MAKE_ERRCODE(ErrModBsp, ErrBspIOPad, 3) - -typedef enum -{ - FIOPAD_FUNC0 = 0b000, - FIOPAD_FUNC1, - FIOPAD_FUNC2, - FIOPAD_FUNC3 = 0b011, - FIOPAD_FUNC4, - FIOPAD_FUNC5, - FIOPAD_FUNC6, - FIOPAD_FUNC7 = 0b111, - - FIOPAD_NUM_OF_FUNC -} FIOPadFunc; /* Pin multiplexing function configuration, func0 is the default function */ - -typedef enum -{ - FIOPAD_DRV0 = 0b0000, - FIOPAD_DRV1, - FIOPAD_DRV2, - FIOPAD_DRV3, - FIOPAD_DRV4, - FIOPAD_DRV5, - FIOPAD_DRV6, - FIOPAD_DRV7, - FIOPAD_DRV8, - FIOPAD_DRV9, - FIOPAD_DRV10, - FIOPAD_DRV11, - FIOPAD_DRV12, - FIOPAD_DRV13, - FIOPAD_DRV14, - FIOPAD_DRV15 = 0b1111, - - FIOPAD_NUM_OF_DRIVE -} FIOPadDrive; /* Pin drive capability configuration */ - -typedef enum -{ - FIOPAD_PULL_NONE = 0b00, - FIOPAD_PULL_DOWN = 0b01, - FIOPAD_PULL_UP = 0b10, - - FIOPAD_NUM_OF_PULL -} FIOPadPull; /* Pin up pull-down configuration */ - -typedef enum -{ - FIOPAD_OUTPUT_DELAY = 0, /* Delay setting direction to output */ - FIOPAD_INPUT_DELAY, /* Delay setting direction to input */ - - FIOPAD_NUM_OF_DELAY_DIR -} FIOPadDelayDir; /* Pin delay configuration direction */ - -typedef enum -{ - FIOPAD_DELAY_COARSE_TUNING = 0, /*delay coarse tuning */ - FIOPAD_DELAY_FINE_TUNING, /*delay fine tuning */ - - FIOPAD_NUM_OF_DELAY_TYPE -} FIOPadDelayType; /* Pin delay configuration type */ - -typedef enum -{ - FIOPAD_DELAY_NONE = 0, - FIOPAD_DELAY_1, - FIOPAD_DELAY_2, - FIOPAD_DELAY_3, - FIOPAD_DELAY_4, - FIOPAD_DELAY_5, - FIOPAD_DELAY_6, - FIOPAD_DELAY_7, - - FIOPAD_NUM_OF_DELAY -} FIOPadDelay; - -typedef struct -{ - u32 instance_id; /* Device instance id */ - uintptr base_address; - -} FIOPadConfig; - -typedef struct -{ - FIOPadConfig config; - u32 is_ready; - -} FIOPadCtrl; -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ - -/* get iopad configs by id */ -const FIOPadConfig *FIOPadLookupConfig(u32 instance_id); - -/*Initializes a specific instance such that it is ready to be used*/ -FError FIOPadCfgInitialize(FIOPadCtrl *instance_p, const FIOPadConfig *input_config_p); - -/*get the current multiplexing function of IO pins*/ -FIOPadFunc FIOPadGetFunc(FIOPadCtrl *instance_p, const u32 pin_reg_off); - -/*set the multiplexing function of IO pins*/ -FError FIOPadSetFunc(FIOPadCtrl *instance_p, const u32 pin_reg_off, FIOPadFunc func); - -/*get the current up_down_pull configuration of IO pins*/ -FIOPadPull FIOPadGetPull(FIOPadCtrl *instance_p, const u32 pin_reg_off); - -/*set the up_down_pull configuration of IO pins*/ -FError FIOPadSetPull(FIOPadCtrl *instance_p, const u32 pin_reg_off, FIOPadPull pull); - -/*get the current driver strength of IO pins*/ -FIOPadDrive FIOPadGetDriver(FIOPadCtrl *instance_p, const u32 pin_reg_off); - -/*get the driver strength of IO pins*/ -FError FIOPadSetDriver(FIOPadCtrl *instance_p, const u32 pin_reg_off, FIOPadDrive drive); - -/*set the func, pull, driver strength */ -FError FIOPadGetConfig(FIOPadCtrl *instance_p, const u32 pin_reg_off, FIOPadFunc *func, FIOPadPull *pull, FIOPadDrive *drive); - -/*set the func, pull, driver strength */ -FError FIOPadSetConfig(FIOPadCtrl *instance_p, const u32 pin_reg_off, FIOPadFunc func, FIOPadPull pull, FIOPadDrive drive); - -/*get the current delay configuration of IO pins*/ -FIOPadDelay FIOPadGetDelay(FIOPadCtrl *instance_p, const u32 pin_reg_off, FIOPadDelayDir dir, FIOPadDelayType type); - -/*set the current delay configuration of IO pins*/ -FError FIOPadSetDelay(FIOPadCtrl *instance_p, const u32 pin_reg_off, FIOPadDelayDir dir, FIOPadDelayType type, FIOPadDelay delay); - -/*Enable/disable IO pin delay*/ -FError FIOPadSetDelayEn(FIOPadCtrl *instance_p, const u32 pin_reg_off, FIOPadDelayDir dir, boolean enable); - -/* DeInitialization function for the device instance */ -FError FIOPadDeInitialize(FIOPadCtrl *instance_p); - -#ifdef __cplusplus -} - -#endif -#endif diff --git a/bsp/phytium/libraries/standalone/drivers/iopad/fiopad/fiopad_g.c b/bsp/phytium/libraries/standalone/drivers/iopad/fiopad/fiopad_g.c deleted file mode 100644 index bf75f30285..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/iopad/fiopad/fiopad_g.c +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fiopad_g.c - * Date: 2021-04-29 10:21:53 - * LastEditTime: 2022-02-18 08:29:20 - * Description:  This files is for the iopad register related functions - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhangyan 2023/7/3 first release - */ -#include "fparameters.h" -#include "fiopad_hw.h" -#include "fiopad.h" - -FIOPadConfig FIOPadConfigTbl[FIOPAD_NUM] = -{ - { - .instance_id = FIOPAD0_ID, - .base_address = FIOPAD_BASE_ADDR, - } -}; \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/iopad/fiopad/fiopad_hw.c b/bsp/phytium/libraries/standalone/drivers/iopad/fiopad/fiopad_hw.c deleted file mode 100644 index da22a38338..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/iopad/fiopad/fiopad_hw.c +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fiopad_hw.c - * Date: 2021-04-29 10:21:53 - * LastEditTime: 2022-02-18 08:29:20 - * Description:  This files is for the iopad register related functions - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhangyan 2023/7/3 first release - */ - -/***************************** Include Files *********************************/ -#include "fparameters.h" -#include "fiopad_hw.h" -#include "fdebug.h" - -#define FIOPAD_DEBUG_TAG "FIOPAD_HW" -#define FIOPAD_ERROR(format, ...) FT_DEBUG_PRINT_E(FIOPAD_DEBUG_TAG, format, ##__VA_ARGS__) -#define FIOPAD_WARN(format, ...) FT_DEBUG_PRINT_W(FIOPAD_DEBUG_TAG, format, ##__VA_ARGS__) -#define FIOPAD_INFO(format, ...) FT_DEBUG_PRINT_I(FIOPAD_DEBUG_TAG, format, ##__VA_ARGS__) -#define FIOPAD_DEBUG(format, ...) FT_DEBUG_PRINT_D(FIOPAD_DEBUG_TAG, format, ##__VA_ARGS__) - -/** - * @name: FIOPadDump - * @msg: print information of all iopad - * @return {*} - */ -void FIOPadDump(uintptr base_addr) -{ - uintptr beg_off = 0x0000U; - uintptr end_off = 0x024CU; - uintptr off; - FIOPadFunc pin_func; - FIOPadDrive pin_drv; - FIOPadPull pin_pull; - u32 pin_reg_off; - const char *pull_state[FIOPAD_NUM_OF_PULL] = {"none", "down", "up"}; - - FIOPAD_DEBUG("Pad Func Info..."); - for (off = beg_off; off <= end_off; off += 4U) - { - pin_reg_off = off; - u32 reg_val = FIOPAD_READ_REG32(base_addr, pin_reg_off); - pin_func = FIOPAD_REG0_FUNC_GET(reg_val); - pin_pull = FIOPAD_REG0_PULL_GET(reg_val); - pin_drv = FIOPAD_REG0_DRIVE_GET(reg_val); - - FIOPAD_DEBUG(" [0x%x] func: %d, ds: %d, pull: %s ", - pin_reg_off, - pin_func, - pin_drv, - pull_state[pin_pull]); - } - - return; -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/iopad/fiopad/fiopad_hw.h b/bsp/phytium/libraries/standalone/drivers/iopad/fiopad/fiopad_hw.h deleted file mode 100644 index 5d5fa9f7b5..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/iopad/fiopad/fiopad_hw.h +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fiopad_hw.h - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:29:05 - * Description:  This files is for the iopad register related definition - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhangyan 2023/7/3 first release - */ - -#ifndef FIOPAD_HW_H -#define FIOPAD_HW_H - -#include "fparameters.h" -#include "fkernel.h" -#include "fiopad.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/** @name X_reg0 Register - */ -#define FIOPAD_REG0_PULL_MASK GENMASK(9, 8) /* 上下拉配置 */ -#define FIOPAD_REG0_PULL_GET(x) GET_REG32_BITS((x), 9, 8) -#define FIOPAD_REG0_PULL_SET(x) SET_REG32_BITS((x), 9, 8) - -#define FIOPAD_REG0_DRIVE_MASK GENMASK(7, 4) /* 驱动能力配置 */ -#define FIOPAD_REG0_DRIVE_GET(x) GET_REG32_BITS((x), 7, 4) -#define FIOPAD_REG0_DRIVE_SET(x) SET_REG32_BITS((x), 7, 4) - -#define FIOPAD_REG0_FUNC_MASK GENMASK(2, 0) /* 引脚复用配置 */ -#define FIOPAD_REG0_FUNC_GET(x) GET_REG32_BITS((x), 2, 0) -#define FIOPAD_REG0_FUNC_SET(x) SET_REG32_BITS((x), 2, 0) - -/** @name X_reg1 Register - */ -#define FIOPAD_REG1_OUT_DELAY_EN BIT(8) -#define FIOPAD_REG1_OUT_DELAY_DELICATE_MASK GENMASK(11, 9) -#define FIOPAD_REG1_OUT_DELAY_DELICATE_GET(x) GET_REG32_BITS((x), 11, 9) /* 延时精调 */ -#define FIOPAD_REG1_OUT_DELAY_DELICATE_SET(x) SET_REG32_BITS((x), 11, 9) -#define FIOPAD_REG1_OUT_DELAY_ROUGH_MASK GENMASK(14, 12) -#define FIOPAD_REG1_OUT_DELAY_ROUGH_GET(x) GET_REG32_BITS((x), 14, 12) /* 延时粗调 */ -#define FIOPAD_REG1_OUT_DELAY_ROUGH_SET(x) SET_REG32_BITS((x), 14, 12) - -#define FIOPAD_REG1_IN_DELAY_EN BIT(0) -#define FIOPAD_REG1_IN_DELAY_DELICATE_MASK GENMASK(3, 1) -#define FIOPAD_REG1_IN_DELAY_DELICATE_GET(x) GET_REG32_BITS((x), 3, 1) /* 延时精调 */ -#define FIOPAD_REG1_IN_DELAY_DELICATE_SET(x) SET_REG32_BITS((x), 3, 1) -#define FIOPAD_REG1_IN_DELAY_ROUGH_MASK GENMASK(6, 4) -#define FIOPAD_REG1_IN_DELAY_ROUGH_GET(x) GET_REG32_BITS((x), 6, 4) /* 延时粗调 */ -#define FIOPAD_REG1_IN_DELAY_ROUGH_SET(x) SET_REG32_BITS((x), 6, 4) - -#define FIOPAD_ASSERT_REG0_OFF(pin) FASSERT_MSG((FIOPAD_REG0_END_OFFSET >= pin), "invalid reg0 offset @0x%x\r\n", (pin)) -#define FIOPAD_ASSERT_FUNC(func) FASSERT_MSG((func < FIOPAD_NUM_OF_FUNC), "invalid func as %d\r\n", (func)) -#define FIOPAD_ASSERT_PULL(pull) FASSERT_MSG((pull < FIOPAD_NUM_OF_PULL), "invalid pull as %d\r\n", (pull)) -#define FIOPAD_ASSERT_DRIVE(drive) FASSERT_MSG((drive < FIOPAD_NUM_OF_DRIVE), "invalid pull as %d\r\n", (drive)) - -#define FIOPAD_ASSERT_REG1_OFF(pin) FASSERT_MSG(((FIOPAD_REG1_BEG_OFFSET <= pin) && (FIOPAD_REG1_END_OFFSET >= pin)), "invalid reg1 offset @0x%x\r\n", (pin)) -#define FIOPAD_ASSERT_DELAY(delay) FASSERT_MSG((delay < FIOPAD_NUM_OF_DELAY), "invalid delay as %d\r\n", (delay)) - -#define FIOPAD_DELAY_MAX 15 - -/* 读FPWM寄存器 */ -#define FIOPAD_READ_REG32(addr, reg_offset) FtIn32((addr) + (u32)reg_offset) - -/* 写FPWM寄存器 */ -#define FIOPAD_WRITE_REG32(addr, reg_offset, reg_value) FtOut32((addr) + (u32)reg_offset, (u32)reg_value) - -/* print information of all iopad */ -void FIOPadDump(uintptr base_addr); - -#ifdef __cplusplus -} - -#endif -#endif \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/iopad/fiopad/fiopad_sinit.c b/bsp/phytium/libraries/standalone/drivers/iopad/fiopad/fiopad_sinit.c deleted file mode 100644 index 65a8638bb6..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/iopad/fiopad/fiopad_sinit.c +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fiopad_sinit.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 09:01:10 - * Description:  This files is for getting default configuration of specific IOPad instance_id - * - * Modify History: - * Ver   Who         Date        Changes - * -----  ------      --------    -------------------------------------- - * 1.0 zhangyan 2023/7/3 first release - */ - -#include "fparameters.h" -#include "fassert.h" -#include "fiopad.h" - -extern FIOPadConfig FIOPadConfigTbl[FIOPAD_NUM]; - -/** - * @name: FIOPadLookupConfig - * @msg: get iopad configs by id - * @return {*} - * @param {u32} instanceId, id of iopad ctrl - */ -const FIOPadConfig *FIOPadLookupConfig(u32 instance_id) -{ - FASSERT(instance_id < FIOPAD_NUM); - const FIOPadConfig *pconfig = NULL; - u32 index; - - for (index = 0; index < (u32)FIOPAD_NUM; index++) - { - if (FIOPadConfigTbl[index].instance_id == instance_id) - { - pconfig = &FIOPadConfigTbl[index]; - break; - } - } - - return (const FIOPadConfig *)pconfig; -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/ipc/Kconfig b/bsp/phytium/libraries/standalone/drivers/ipc/Kconfig deleted file mode 100644 index 0f2f05ca01..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/ipc/Kconfig +++ /dev/null @@ -1,9 +0,0 @@ -config ENABLE_FSEMAPHORE - bool - prompt "Use FSemaphore" - default n - depends on TARGET_E2000S || TARGET_E2000D || TARGET_E2000Q || TARGET_T2000Q - help - Select FSemaphore driver component - - \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/ipc/fsemaphore/fsemaphore.c b/bsp/phytium/libraries/standalone/drivers/ipc/fsemaphore/fsemaphore.c deleted file mode 100644 index e74a1fa2ba..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/ipc/fsemaphore/fsemaphore.c +++ /dev/null @@ -1,345 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fsemaphore.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:25:29 - * Description:  This file is for semaphore user api implmentation - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/5/23 init commit - */ - - -/***************************** Include Files *********************************/ -#include - -#include "fio.h" -#include "ferror_code.h" -#include "ftypes.h" -#include "fdebug.h" -#include "fassert.h" - -#include "fsemaphore_hw.h" -#include "fsemaphore.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ -#define FSEMA_DEBUG_TAG "SEMA" -#define FSEMA_ERROR(format, ...) FT_DEBUG_PRINT_E(FSEMA_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSEMA_WARN(format, ...) FT_DEBUG_PRINT_W(FSEMA_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSEMA_INFO(format, ...) FT_DEBUG_PRINT_I(FSEMA_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSEMA_DEBUG(format, ...) FT_DEBUG_PRINT_D(FSEMA_DEBUG_TAG, format, ##__VA_ARGS__) - -/************************** Function Prototypes ******************************/ - -/************************** Variable Definitions *****************************/ - -/*****************************************************************************/ -/** - * @name: FSemaCfgInitialize - * @msg: 初始化Semaphore控制器 - * @return {FError} FSEMA_SUCCESS 表示初始化成功 - * @param {FSema} *instance, Semaphore控制器实例 - * @param {FSemaConfig} *input_config, Semaphore控制器配置 - */ -FError FSemaCfgInitialize(FSema *const instance, const FSemaConfig *input_config) -{ - FASSERT(instance && input_config); - uintptr base_addr = input_config->base_addr; - FASSERT_MSG((0 != base_addr), "invalid base addr."); - FError ret = FSEMA_SUCCESS; - - if (FT_COMPONENT_IS_READY == instance->is_ready) - { - FSEMA_WARN("Device is already initialized!!!"); - } - - if (&instance->config != input_config) - { - instance->config = *input_config; - } - - FSemaHwResetAll(base_addr); /* 重置所有的锁 */ - - if (FSEMA_SUCCESS == ret) - { - instance->is_ready = FT_COMPONENT_IS_READY; - } - - return ret; -} - -/** - * @name: FSemaDeInitialize - * @msg: 去初始化Semaphore控制器 - * @return {void} 无 - * @param {FSema} *instance, Semaphore控制器实例 - */ -void FSemaDeInitialize(FSema *const instance) -{ - FASSERT(instance); - u32 loop; - uintptr base_addr = instance->config.base_addr; - - for (loop = 0; loop < FSEMA_NUM_OF_LOCKER; loop++) - { - if (NULL != instance->locker[loop]) - { - FSEMA_WARN("locker %d @%p is not yet deleted !!!", loop, instance->locker[loop]); - memset(instance->locker[loop], 0, sizeof(*instance->locker[loop])); - } - - } - - if (0 != base_addr) /* 如果base addr为0,实例可能还没有初始化 */ - { - FSemaHwResetAll(base_addr); - } - - memset(instance, 0, sizeof(*instance)); - - return; -} - -/** - * @name: FSemaCreateLocker - * @msg: 分配和创建Semaphore锁 - * @return {FError} FSEMA_SUCCESS 表示分配成功 - * @param {FSema} *instance, Semaphore控制器实例 - * @param {FSemaLocker} *locker, Semaphore锁的实例 - */ -FError FSemaCreateLocker(FSema *const instance, FSemaLocker *const locker) -{ - FASSERT(instance && locker); - u32 locker_idx; - - if (FT_COMPONENT_IS_READY != instance->is_ready) - { - FSEMA_ERROR("Device@%p is not yet inited !!!", instance->config.base_addr); - return FSEMA_ERR_NOT_INIT; - } - - for (locker_idx = 0; locker_idx < FSEMA_NUM_OF_LOCKER; locker_idx++) - { - /* 分配一把未创建的锁 */ - if (NULL == instance->locker[locker_idx]) - { - FSEMA_INFO("Allocate locker %d.", locker_idx); - break; - } - } - - if (locker_idx >= FSEMA_NUM_OF_LOCKER) - { - FSEMA_ERROR("No locker available !!!"); - return FSEMA_ERR_NO_AVAILABLE_LOCKER; /* 所有的锁都已经分配创建 */ - } - - instance->locker[locker_idx] = locker; - locker->index = locker_idx; /* 分配锁,将锁的实例挂在控制器实例上 */ - - locker->owner = FSEMA_OWNER_NONE; /* 当前锁还没有owner */ - locker->name[0] = '\0'; - locker->sema = instance; - - return FSEMA_SUCCESS; -} - -/** - * @name: FSemaTryLock - * @msg: 尝试获取Semaphore锁 - * @return {FError} FSEMA_SUCCESS 表示成功获取锁,FSEMA_ERR_LOCK_TIMEOUT 表示锁已经被占用 - * @param {FSemaLocker} *locker, Semaphore锁的实例 - * @param {u32} owner, 当前尝试获取锁的是谁 - * @param {u32} try_times, 尝试获取的次数 - * @param {FSemaRelaxHandler} relax_handler, 每次尝试获取锁失败后的relax函数 - */ -FError FSemaTryLock(FSemaLocker *const locker, u32 owner, u32 try_times, FSemaRelaxHandler relax_handler) -{ - FASSERT(locker && locker->sema); - FSema *const instance = locker->sema; - uintptr base_addr = instance->config.base_addr; - boolean lock_success = FALSE; - FError ret = FSEMA_SUCCESS; - - if (FT_COMPONENT_IS_READY != instance->is_ready) - { - FSEMA_ERROR("Device@%p is not yet inited !!!", instance->config.base_addr); - return FSEMA_ERR_NOT_INIT; - } - - while (try_times > 0) - { - /* 尝试获取锁 */ - lock_success = FSemaTryLockOnce(base_addr, locker->index); - if (TRUE == lock_success) - { - break; - } - - if (relax_handler) - { - relax_handler(instance); - } - - try_times--; - } - - if (FALSE == lock_success) - { - ret = FSEMA_ERR_LOCK_TIMEOUT; - FSEMA_ERROR("locker-%d has been taken by owner 0x%x.", locker->index, locker->owner); - } - else - { - locker->owner = owner; /* 记录当前locker的owner */ - FSEMA_INFO("locker-%d is taken successfully by owner 0x%x.", locker->index, owner); - } - - return ret; -} - -/** - * @name: FSemaUnlock - * @msg: 尝试释放Semaphore锁 - * @return {FError} FSEMA_SUCCESS释放锁成功 - * @param {FSemaLocker} *locker, Semaphore锁实例 - * @param {u32} owner, 当前尝试释放锁的身份 - */ -FError FSemaUnlock(FSemaLocker *const locker, u32 owner) -{ - FASSERT(locker && locker->sema); - FSema *const instance = locker->sema; - uintptr base_addr = instance->config.base_addr; - FError ret = FSEMA_SUCCESS; - u32 reg_val; - - if (FT_COMPONENT_IS_READY != instance->is_ready) - { - FSEMA_ERROR("Device@%p is not yet inited !!!", instance->config.base_addr); - return FSEMA_ERR_NOT_INIT; - } - - if (locker->owner != owner) - { - FSEMA_ERROR("locker is owned by 0x%x, 0x%x has no premission to unlock it !!!", - locker->owner, owner); - return FSEMA_ERR_NO_PERMISSION; - } - - if (FALSE == FSemaHwGetStatus(base_addr, locker->index)) - { - FSEMA_INFO("locker-%d is not in locked status 0x%x!!!", - locker->index, FSemaReadReg(base_addr, FSEMA_STATE_REG_OFFSET)); - return ret; - } - - reg_val = FSEMA_RLOCK_X_UNLOCK; - FSemaWriteReg(base_addr, FSEMA_RLOCK_X_REG_OFFSET(locker->index), reg_val); /* 写0解锁信号量 */ - locker->owner = FSEMA_OWNER_NONE; /* 解锁成功,当前锁持有者为None */ - - return ret; -} - -/** - * @name: FSemaUnlockAll - * @msg: 强制解除所有Semaphore锁 - * @return {FError} FSEMA_SUCCESS表示强制解锁成功 - * @param {FSema} *instance, Semaphore控制器实例 - */ -FError FSemaUnlockAll(FSema *const instance) -{ - FASSERT(instance); - uintptr base_addr = instance->config.base_addr; - u32 loop; - - if (FT_COMPONENT_IS_READY != instance->is_ready) - { - FSEMA_ERROR("Device@%p is not yet inited !!!", instance->config.base_addr); - return FSEMA_ERR_NOT_INIT; - } - - FSemaHwResetAll(base_addr); - - for (loop = 0; loop < FSEMA_NUM_OF_LOCKER; loop++) - { - if (NULL != instance->locker[loop]) - { - instance->locker[loop]->owner = FSEMA_OWNER_NONE; /* 解锁成功,当前锁持有者为None */ - } - } - - return FSEMA_SUCCESS; -} - -/** - * @name: FSemaDeleteLocker - * @msg: 强制解除Semaphore锁并删除锁实例 - * @return {FError} FSEMA_SUCCESS 表示删除锁成功 - * @param {FSemaLocker} *locker, Semaphore锁实例 - */ -FError FSemaDeleteLocker(FSemaLocker *const locker) -{ - FASSERT(locker && locker->sema); - FSema *const instance = locker->sema; - uintptr base_addr = instance->config.base_addr; - u32 locker_idx = locker->index; - - if (FT_COMPONENT_IS_READY != instance->is_ready) - { - FSEMA_ERROR("Device@%p is not yet inited !!!", instance->config.base_addr); - return FSEMA_ERR_NOT_INIT; - } - - if (TRUE == FSemaHwGetStatus(base_addr, locker_idx)) - { - FSEMA_WARN("Caution, locker-%d has been taken by 0x%x !!!", - locker_idx, locker->owner); - } - - FASSERT_MSG((instance->locker[locker_idx] == locker), "invalid locker index %d.", locker_idx); - - FSemaWriteReg(base_addr, FSEMA_RLOCK_X_REG_OFFSET(locker->index), FSEMA_RLOCK_X_UNLOCK); /* 写0解锁信号量 */ - - instance->locker[locker_idx] = NULL; - memset(locker, 0, sizeof(*locker)); - - return FSEMA_SUCCESS; -} - -/** - * @name: FSemaIsLocked - * @msg: 检查指定Semaphore锁是否处于锁定状态 - * @return {boolean} TRUE: 处于锁定状态 - * @param {FSemaLocker} *locker, Semaphore锁实例 - */ -boolean FSemaIsLocked(FSemaLocker *locker) -{ - FASSERT(locker && locker->sema); - FSema *const instance = locker->sema; - uintptr base_addr = instance->config.base_addr; - - if (FT_COMPONENT_IS_READY != instance->is_ready) - { - FSEMA_ERROR("Device@%p is not yet inited !!!", instance->config.base_addr); - return FSEMA_ERR_NOT_INIT; - } - - return FSemaHwGetStatus(base_addr, locker->index); -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/ipc/fsemaphore/fsemaphore.h b/bsp/phytium/libraries/standalone/drivers/ipc/fsemaphore/fsemaphore.h deleted file mode 100644 index 986fffe132..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/ipc/fsemaphore/fsemaphore.h +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fsemaphore.h - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:25:35 - * Description:  This file is for semaphore user api definition - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/5/23 init commit - */ - - -#ifndef FSEMAPHORE_H -#define FSEMAPHORE_H - -/***************************** Include Files *********************************/ - -#include "ftypes.h" -#include "ferror_code.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/************************** Constant Definitions *****************************/ -#define FSEMA_NUM_OF_LOCKER 32U -#define FSEMA_OWNER_NONE 0U - -#define FSEMA_SUCCESS FT_SUCCESS -#define FSEMA_ERR_NOT_INIT FT_MAKE_ERRCODE(ErrModBsp, ErrSema, 0U) -#define FSEMA_ERR_NO_AVAILABLE_LOCKER FT_MAKE_ERRCODE(ErrModBsp, ErrSema, 1U) -#define FSEMA_ERR_LOCK_TIMEOUT FT_MAKE_ERRCODE(ErrModBsp, ErrSema, 2U) -#define FSEMA_ERR_NO_PERMISSION FT_MAKE_ERRCODE(ErrModBsp, ErrSema, 3U) -/**************************** Type Definitions *******************************/ -typedef struct -{ - u32 id; /* Semaphore控制器id */ - uintptr base_addr; /* Semaphore控制器基地址 */ -} FSemaConfig; /* Semaphore控制器配置 */ - -typedef struct _FSema FSema; - -typedef struct -{ - u32 index; /* Semaphore锁id */ -#define FSEMA_LOCKER_NAME_LEN 32U - char name[FSEMA_LOCKER_NAME_LEN]; /* Semaphore锁的名字 */ - u32 owner; /* Semaphore锁的拥有者, 当前持有锁的人, 如果没有上锁就标记FSEMA_OWNER_NONE */ - FSema *sema; /* Semaphore控制器实例 */ -} FSemaLocker; /* Semaphore锁实例 */ - -typedef struct _FSema -{ - FSemaConfig config; /* Semaphore控制器配置 */ - u32 is_ready; /* Semaphore控制器初始化是否完成 */ - FSemaLocker *locker[FSEMA_NUM_OF_LOCKER]; /* Semaphore锁实例,locker[i] == NULL 表示锁尚未分配 */ -} FSema; /* Semaphore控制器实例 */ - -typedef void (*FSemaRelaxHandler)(FSema *const instance); /* 等待下一次上锁的relax函数 */ -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ -/* 获取Semaphore的默认配置 */ -const FSemaConfig *FSemaLoopkupConfig(u32 instance_id); - -/* 初始化Semaphore控制器 */ -FError FSemaCfgInitialize(FSema *const instance, const FSemaConfig *config); - -/* 去初始化Semaphore控制器 */ -void FSemaDeInitialize(FSema *const instance); - -/* 分配和创建Semaphore锁 */ -FError FSemaCreateLocker(FSema *const instance, FSemaLocker *const locker); - -/* 强制解除Semaphore锁并删除锁实例 */ -FError FSemaDeleteLocker(FSemaLocker *const locker); - -/* 尝试获取指定Semaphore锁 */ -FError FSemaTryLock(FSemaLocker *const locker, u32 owner, u32 try_times, FSemaRelaxHandler relax_handler); - -/* 尝试释放指定Semaphore锁 */ -FError FSemaUnlock(FSemaLocker *const locker, u32 owner); - -/* 强制解除所有Semaphore锁 */ -FError FSemaUnlockAll(FSema *const instance); - -/* 检查指定Semaphore锁是否处于锁定状态 */ -boolean FSemaIsLocked(FSemaLocker *locker); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/bsp/phytium/libraries/standalone/drivers/ipc/fsemaphore/fsemaphore_g.c b/bsp/phytium/libraries/standalone/drivers/ipc/fsemaphore/fsemaphore_g.c deleted file mode 100644 index c715ce1630..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/ipc/fsemaphore/fsemaphore_g.c +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fsemaphore_g.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:25:09 - * Description:  This file is for semaphore static variables - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/5/23 init commit - */ - -/***************************** Include Files *********************************/ - -#include "ftypes.h" -#include "fparameters.h" -#include "fsemaphore.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ - -/************************** Variable Definitions *****************************/ - -const FSemaConfig fsema_cfg_tbl[FSEMA_INSTANCE_NUM] = -{ - [FSEMA0_ID] = - { - .id = FSEMA0_ID, - .base_addr = FSEMA0_BASE_ADDR - } -}; - -/*****************************************************************************/ diff --git a/bsp/phytium/libraries/standalone/drivers/ipc/fsemaphore/fsemaphore_hw.h b/bsp/phytium/libraries/standalone/drivers/ipc/fsemaphore/fsemaphore_hw.h deleted file mode 100644 index 1266a4fdaf..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/ipc/fsemaphore/fsemaphore_hw.h +++ /dev/null @@ -1,153 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fsemaphore_hw.h - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:24:52 - * Description:  This file is for semaphore register definition - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/5/23 init commit - */ - - -#ifndef FSEMAPHORE_HW_H -#define FSEMAPHORE_HW_H -/***************************** Include Files *********************************/ - -#include "fparameters.h" -#include "ftypes.h" -#include "fio.h" -#include "fassert.h" -#include "fkernel.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/************************** Constant Definitions *****************************/ -/** @name Register Map - * - * Register offsets from the base address of an Semaphore. - * @{ - */ -#define FSEMA_RST_REG_OFFSET 0x0U /* 写 1 复位所有信号量 */ -#define FSEMA_IND_RST_REG_OFFSET 0x4U /* 写信号量独热码为 1,复位对应信号量 */ -#define FSEMA_STATE_REG_OFFSET 0x8U /* 信号量 0 ~ 31的状态 */ -#define FSEMA_RLOCK_X_REG_OFFSET(x) (0x10U + (x) * 4) /* 信号量 X 读锁定寄存器 */ - -/** @name FSEMA_RST_REG_OFFSET Register - */ -#define FSEMA_RST_ALL BIT(0) /* 写 1 复位所有信号量 */ - -/** @name FSEMA_IND_RST_REG_OFFSET Register - */ -#define FSEMA_IND_RSET(locker_idx) BIT(locker_idx) /* 写信号量独热码为 1,复位对应信号量 */ - -/** @name FSEMA_STATE_REG_OFFSET Register - */ -#define FSEMA_LOCKER_STATE(locker_idx) BIT(locker_idx) /* 状态:0 表示解锁,1 表示锁定 */ - -/** @name FSEMA_RLOCK_X_REG_OFFSET Register - */ -#define FSEMA_RLOCK_X_UNLOCK 0 /* 写 0:信号量被解锁 */ -/* 读返回 0:信号量当前未被锁定,读后被锁定 - 读返回 1:信号量当前已经被锁定,锁定失败 */ -#define FSEMA_RLOCK_X_IS_LOCKED 1 -#define FSEMA_RLOCK_X_TAKE_LOCKER 0 - -#define FSEMA_MIN_LOCKER_IDX 0 -#define FSEMA_MAX_LOCKER_IDX 31 - -/**************************** Type Definitions *******************************/ - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ -static u32 FSemaReadReg(uintptr base_addr, u32 reg_off) -{ - return FtIn32(base_addr + reg_off); -} - -static inline void FSemaWriteReg(uintptr base_addr, u32 reg_off, u32 reg_val) -{ - FtOut32(base_addr + reg_off, reg_val); - return; -} - -/** - * @name: FSemaHwResetAll - * @msg: 强制解除所有锁定 - * @return {void} 无 - * @param {uintptr} base_addr, Semaphore 控制器基地址 - */ -static inline void FSemaHwResetAll(uintptr base_addr) -{ - FSemaWriteReg(base_addr, FSEMA_RST_REG_OFFSET, FSEMA_RST_ALL); -} - -/** - * @name: FSemaHwResetLocker - * @msg: 强制解除指定锁定 - * @return {void} 无 - * @param {uintptr} base_addr, Semaphore 控制器基地址 - * @param {u32} locker_idx, Semaphore锁id - */ -static inline void FSemaHwResetLocker(uintptr base_addr, u32 locker_idx) -{ - u32 reg_val = FSemaReadReg(base_addr, FSEMA_IND_RST_REG_OFFSET); - reg_val |= FSEMA_IND_RSET(locker_idx); - FSemaWriteReg(base_addr, FSEMA_IND_RST_REG_OFFSET, reg_val); - return; -} - -/** - * @name: FSemaHwGetStatus - * @msg: 获取锁定状态 - * @return {boolean} TRUE: 被锁定, FALSE: 未被锁定 - * @param {uintptr} base_addr, Semaphore 控制器基地址 - * @param {u32} locker_idx, Semaphore锁id - */ -static inline boolean FSemaHwGetStatus(uintptr base_addr, u32 locker_idx) -{ - u32 reg_val = FSemaReadReg(base_addr, FSEMA_STATE_REG_OFFSET); - return (reg_val & FSEMA_LOCKER_STATE(locker_idx)) ? TRUE : FALSE; -} - -/** - * @name: FSemaTryLockOnce - * @msg: 尝试锁定 - * @return {boolean} TRUE: 锁定成功 - * @param {uintptr} base_addr, Semaphore 控制器基地址 - * @param {u32} locker_idx, Semaphore锁id - */ -static inline boolean FSemaTryLockOnce(uintptr base_addr, u32 locker_idx) -{ - boolean lock_success = FALSE; - u32 reg_val = FSemaReadReg(base_addr, FSEMA_RLOCK_X_REG_OFFSET(locker_idx)); /* 读寄存器,尝试上锁 */ - - /* 读返回 1:信号量之前已经被锁定,本次锁定失败 - 读返回 0:信号量之前未被锁定,本次锁定成功 */ - return (FSEMA_RLOCK_X_IS_LOCKED & reg_val) ? FALSE : TRUE; -} - -/************************** Function Prototypes ******************************/ - -#ifdef __cplusplus -} -#endif - -#endif \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/ipc/fsemaphore/fsemaphore_sinit.c b/bsp/phytium/libraries/standalone/drivers/ipc/fsemaphore/fsemaphore_sinit.c deleted file mode 100644 index 2563566b69..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/ipc/fsemaphore/fsemaphore_sinit.c +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fsemaphore_sinit.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:25:15 - * Description:  This file is for semaphore static init - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/5/23 init commit - */ - -/***************************** Include Files *********************************/ - -#include "ftypes.h" -#include "fparameters.h" -#include "fsemaphore.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Variable Definitions *****************************/ - -extern const FSemaConfig fsema_cfg_tbl[FSEMA_INSTANCE_NUM]; - -/************************** Function Prototypes ******************************/ -/** - * @name: FSemaLoopkupConfig - * @msg: 获取Semaphore的默认配置 - * @return {const FSemaConfig *} Semaphore的默认配置 - * @param {u32} instance_id, Semaphore的实例id - */ -const FSemaConfig *FSemaLoopkupConfig(u32 instance_id) -{ - const FSemaConfig *ptr = NULL; - u32 index; - - for (index = 0; index < (u32)FSEMA_INSTANCE_NUM; index++) - { - if (fsema_cfg_tbl[index].id == instance_id) - { - ptr = &fsema_cfg_tbl[index]; - break; - } - } - - return (const FSemaConfig *)ptr; -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/media/Kconfig b/bsp/phytium/libraries/standalone/drivers/media/Kconfig deleted file mode 100644 index cec2cf2e3d..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/media/Kconfig +++ /dev/null @@ -1,22 +0,0 @@ - - -menu "Media Configuration" - config ENABLE_FDC_DP - bool - prompt "USE FMEDIA" - default n - help - Select fdcdp driver component - - config ENABLE_FDC_DP_USE_LIB - bool - prompt "USE FMEDIA LIB TO LINK" - default n - help - Select fdcdp driver component - - -endmenu - - - diff --git a/bsp/phytium/libraries/standalone/drivers/media/fdcdp_lib/inc/fdc.h b/bsp/phytium/libraries/standalone/drivers/media/fdcdp_lib/inc/fdc.h deleted file mode 100644 index 56d59f533b..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/media/fdcdp_lib/inc/fdc.h +++ /dev/null @@ -1,382 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fdc.h - * Date: 2022-09-05 22:53:24 - * LastEditTime: 2022-09-05 22:53:24 - * Description: This file is for defining the dc config and function - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 Wangzq 2022/12/20 Modify the format and establish the version - */ - -#ifndef FDC_H -#define FDC_H -/***************************** Include Files *********************************/ - -#include "ftypes.h" -#include "fparameters.h" -#include "ferror_code.h" -#ifdef __cplusplus -extern "C" -{ -#endif - -/************************** Constant Definitions *****************************/ -#define FMEDIA_DC_SUCCESS FT_SUCCESS - -#define FDC_FALSE 0 -#define FDC_TRUE 1 - - -#define FDC_GOP_MAX_MODENUM 11 - -#define FDC_PCCON_BUFFER_SIZE (1 * 1024 * 1024) - -/**************************** Type Definitions *******************************/ -typedef enum -{ - FDC_MULTI_MODE_CLONE = 0, - FDC_MULTI_MODE_HORIZONTAL, - FDC_MULTI_MODE_VERTICAL, - - FDC_MULTI_MODE -} FDcMultiMode; - -typedef enum -{ - FDC_ROT_0 = 0, - FDC_FLIP_X, - FDC_FLIP_Y, - FDC_FLIP_XY, - FDC_ROT_90, - FDC_ROT_180, - FDC_ROT_270, -} FDcRotType; - -typedef enum -{ - FDC_RESET_CORE = 0, - FDC_RESET_AXI, - FDC_RESET_AHB, -} FDcRestType; - -typedef enum -{ - FDC_PHY_DPI, - FDC_PHY_DP, -} FDcPhyOutPutType; -/* - * Frame buffer mode. - * Used in ConfFramebufferSetConfig() - */ -typedef enum -{ - FDC_PHY_LINEAR, - FDC_PHY_TIILED, -} FDcPhyTilingType; - -typedef enum -{ - FDC_FORMAT_X4R4G4B4 = 0x0, - FDC_FORMAT_A4R4G4B4, - FDC_FORMAT_X1R5G5B5, - FDC_FORMAT_A1R5G5B5, - FDC_FORMAT_R5G6B5, - FDC_FORMAT_X8R8G8B8, - FDC_FORMAT_A8R8G8B8, - FDC_FORMAT_YUY2, - FDC_FORMAT_UYVY, - FDC_FORMAT_INDEX8, - FDC_FORMAT_MONOCHROME, - FDC_FORMAT_YV12 = 0x0F, - FDC_FORMAT_A8, - FDC_FORMAT_NV12, - FDC_FORMAT_NV16, - FDC_FORMAT_RG16, - FDC_FORMAT_RB, - FDC_FORMAT_NV12_10BIT, - FDC_FORMAT_A2R10G10B10, - FDC_FORMAT_NV16_10BIT, - FDC_FORMAT_INDEX1, - FDC_FORMAT_INDEX2, - FDC_FORMAT_INDEX4, - FDC_FORMAT_P010 -} FDcVideoFormate; - -typedef enum -{ - FDC_OUTPUT_RGB565 = 0, - FDC_OUTPUT_RGB666, - FDC_OUTPUT_RGB888, - FDC_OUTPUT_RGB1010, -} FDcOutputColor; - -typedef struct -{ - u32 instance_id; /* dc id */ - uintptr dcch_baseaddr; /* DC channel register address*/ - uintptr dcctrl_baseaddr; /* DC control register address */ - u32 irq_num; /* Device intrrupt id */ -} FDcConfig; - -typedef struct -{ - u32 total_line; /* Total Number of lines. */ - u32 visble_line; /* Visible Number of lines */ - u32 sync_start; /* Start of sync pulse. */ - u32 sync_end; /* End of sync pulse. */ - boolean sync_polarity; /* Polarity of the sync pulse.1 - positive , 0 - negative. */ -} FDcDisplayTimmingConfig; - -typedef struct -{ - FDcDisplayTimmingConfig horizontal; - FDcDisplayTimmingConfig vertical; - boolean timing_dirty; /* if value is FDC_TRUE , when using the FDcCoreCommit interface, the parameters will be updated */ -} FDcSyncParameter; /* horizontal and vertical timing parameter */ - -typedef struct -{ - u32 color_format; /* color format. */ - uintptr framebuffer_p; /* Starting address of the frame buffer. */ - u32 tiling_mode; /* tile mode */ - u32 yuv_type; /* unused , reserved */ - u32 stride; /* memory image line span , --- FDcWidthToStride */ - u32 a_stride; /* Processing is consistent with memory image line spans */ - boolean fb_dirty; /* if value is FDC_TRUE , when using the FDcCoreCommit interface, the parameters will be updated */ -} FDcDisplayFramebuffer; - -typedef struct -{ - boolean data_enable_polarity; /* Data Enable polarity , 1 - positive , 0 - negative. */ - boolean data_polarity; /* Data polarity , 1 - positive , 0 - negative. */ - boolean clock_polarity; /* Clock polarity , 1 - positive , 0 - negative. */ - boolean panel_dirty; /* if value is FDC_TRUE , when using the FDcCoreCommit interface, the parameters will be updated */ -} FDcDisplayPanel; - -typedef struct -{ -#define gama_index_max 256 - boolean gamma_enable; /*enable the gamma*/ - u32 gamma; - boolean gamma_dirty; /* if value is FDC_TRUE , when using the FDcCoreCommit interface, the parameters will be updated */ -} FDcDisplayGamma; - -typedef struct -{ - boolean enable; - u32 red_channel; /* red channel of dither*/ - u32 green_channel; /* red green of dither*/ - u32 blue_channel; /* blue channel of dither*/ - u32 table_low; /* the low level of dither*/ - u32 table_high; /* the high level of dither*/ - boolean dither_dirty; /* if value is FDC_TRUE , when using the FDcCoreCommit interface, the parameters will be updated */ -} FDcDisplayDither; - -typedef struct -{ - boolean outputenable; - u32 output_type; /* Output format , 0 - DPI mode , 1 - DP mode. */ - - /* dp mode */ - u32 dp_format; /* DC output color format, 0 - 565 , 1 - RGB666 , 2 - RGB888 , 3 - RGB101010. */ - - /* dpi mode */ - u32 dpi_type; /* the dc output mode */ - u32 dpi_format; /* DC output type , 1 - RGB666 , 2 - RGB888 , 3 - RGB101010. */ - u32 dpi_actime; /* DC active time*/ - u32 dpi_period[2]; /*the period time of dc */ - u32 dpi_eor_assert[2]; /* params, unused*/ - u32 dpi_cs_assert[2]; /* params, unused*/ - boolean dpi_polarity; /*the polarity of output data */ - boolean output_dirty; /* if value is FDC_TRUE , when using the FDcCoreCommit interface, the parameters will be updated */ - -} FDcDisplayDpMode; - -typedef struct -{ - boolean enable; - uintptr phys_addr; /* Address of the cursor shape. */ - u32 type; /* Cursor type , 0 - disable , 1 - mask mode , 2 - argb mode. */ - u32 x; /* X location of cursor's hotspot. */ - u32 y; /* Y location of cursor's hotspot. */ - u32 hot_x; /* Vertical offset to cursor hotspot. */ - u32 hot_y; /* Horizontal offset to cursor hotspot. */ - u32 bg_color; /* The background color for Masked cursors . Format is ARGB8888. */ - u32 fg_color; /* The foreground color for Masked cursors . Format is ARGB8888. */ - boolean cursor_dirty; /* if value is FDC_TRUE , when using the FDcCoreCommit interface, the parameters will be updated */ -} FDcDisplayCursor; - -typedef struct -{ - uintptr y_address; - uintptr u_address; - uintptr v_address; - u32 u_stride; - u32 v_stride; - u32 rot_angle; - u32 alpha_mode; - u32 alpha_value; - /* Original size in pixel before rotation and scale. */ - u32 width; - u32 height; - u32 tile_mode; - u32 scale; - u32 scale_factorx; - u32 scale_factory; - u32 filter_tap; - u32 horizontal_filtertap; -#define HOR_KERNEL_MAX 128 - u32 horkernel[128]; -#define VER_KERNEL_MAX 128 - u32 verkernel[128]; - u32 swizzle; - u32 uv_swizzle; - u32 color_key; - u32 colorkey_high; - u32 bg_color; - u32 trans_parency; - u32 clear_fb; - u32 clear_value; - u32 initial_offsetx; - u32 initial_offsety; - u32 compressed; -} FDcDisplayVideoMode; - -typedef struct -{ - u32 pixelclock; /* the pixelclock of dc */ - u32 horpixel; /*horizontal pixel */ - u32 verpixel; /*vertical pixel */ - FDcSyncParameter FDcSyncParameter; -} FDcDtdTable; - -typedef enum -{ - FDC_DISPLAY_ID_640_480 = 0, - FDC_DISPLAY_ID_800_600, - FDC_DISPLAY_ID_1024_768, - FDC_DISPLAY_ID_1280_720, - FDC_DISPLAY_ID_1366_768, - FDC_DISPLAY_ID_1920_1080, - FDC_DISPLAY_ID_1600_1200, - FDC_DISPLAY_ID_1280_800, - FDC_DISPLAY_ID_800_480, - FDC_DISPLAY_ID_1280_768, - FDC_DISPLAY_ID_1280_1024, - FDC_DISPLAY_ID_MAX_NUM - -} FDcDisplayId; - -typedef struct -{ - u32 width; - u32 height; - u32 color_depth; /* value follow the DISPLAY_REFRESH_RATE_XX */ - u32 refresh_rate; /* value follow the DISPLAY_COLOR_DEPTH_XX */ - FDcDisplayId id; -} FDcDisplaySetting; - -typedef struct -{ - FDcDtdTable dtd_table; /*the table of dtd params*/ - FDcSyncParameter sync_parameter[FDC_GOP_MAX_MODENUM]; - FDcDisplayFramebuffer framebuffer; - FDcDisplayPanel panel; - FDcDisplayGamma gamma; - FDcDisplayDither dither; - FDcDisplayDpMode dp_mode; - FDcDisplayVideoMode video_mode; /*the params of video*/ - FDcDisplayCursor cursor; - FDcDisplaySetting display_setting[FDC_DISPLAY_ID_MAX_NUM]; -} FDcCurrentConfig; - -typedef struct -{ - FDcCurrentConfig fdc_current_config; - FDcConfig config; - u32 multi_mode; /* The display mode of the device , including clone, horizontal and vertical display*/ -} FDcCtrl; - -/************************** Function Prototypes ******************************/ - -/*Initialization of dc configuration parameter */ -FError FDcConfigInit(FDcCtrl *instance_p, FDcDisplaySetting *gop_mode, u32 mode_id); - -/*config the panel data of core data */ -void FDcPanelSetConfig(FDcCtrl *instance_p, boolean data_enable_polarity, boolean data_polarity, boolean clock_Polarity); - -/* set the horizontal timing parameter */ -void FDcDisplaySetHorizontal(FDcCtrl *instance_p, u32 mode_id, u32 total_pixels, u32 line_pixels, u32 hsync_start, u32 hsync_end, boolean hsync_polarity); - -/* set the vertical timing parameter */ -void FDcDisplaySetVertical(FDcCtrl *instance_p, u32 mode_id, u32 line_pixels, u32 total_pixels, u32 vsync_start, u32 vsync_end, boolean vsync_polarity); - -/* select core data about dc output mode , DP mode or DPI mode */ -void FDcOutputSelect(FDcCtrl *instance_p, FDcPhyOutPutType output_type); - -/* config core data about dc output formort , DP mode or DPI mode */ -void FDcOutputDpformat(FDcCtrl *instance_p, FDcOutputColor format); - -/* config tilemode and color format of vedio */ -void FDcTilemodeSetConfig(FDcCtrl *instance_p, FDcVideoFormate format, FDcPhyTilingType tiling); - -/* core data config about framebuffer parameter */ -void FDcFramebufferSetFramebuffer(FDcCtrl *instance_p, FDcDisplayVideoMode *fdc_video_params); - -/* config core data about dither enable */ -void FDcDitherEnable(FDcCtrl *instance_p, boolean enable); - -/* enable core data about gamma */ -void FDcGammaEnable(FDcCtrl *instance_p, boolean enable); - -/* config register about all dc parameters include video framebuffer address and stride -the main function interface to set the dc parameters*/ -FError FDcCoreCommit(FDcCtrl *instance_p, u32 mode_id); - -/* commit display configuration about timing parameter*/ -void FDcDisplayCommit(FDcCtrl *instance_p, u32 mode_id); - -/* config register about dc output mode, DP or DPI */ -void FDcOutputCommit(FDcCtrl *instance_p); - -/* config register about panel */ -void FDcPanelCommit(FDcCtrl *instance_p); - -/* config register about cursor parameter */ -void FDcCursorCommit(FDcCtrl *instance_p); - -/* enable the cursor */ -void FDcCursorEnable(FDcCtrl *instance_p, boolean enable); - -/* config core data about cursor hotspot */ -void FDcCursorSetHotspot(FDcCtrl *instance_p, uintptr x, uintptr y); - -/* config core data about location of the cursor on the owning display */ -void FDcCursorSetPos(FDcCtrl *instance_p, uintptr x, uintptr y); - -/* Config register about vedio parameter and framebuffer */ -void FDcFramebufferCommit(FDcCtrl *instance_p); - -/* according to the width, calculate the stride */ -FError FDcWidthToStride(u32 width, u32 color_depth, u32 multi_mode); - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/bsp/phytium/libraries/standalone/drivers/media/fdcdp_lib/inc/fdc_common_hw.h b/bsp/phytium/libraries/standalone/drivers/media/fdcdp_lib/inc/fdc_common_hw.h deleted file mode 100644 index b931e8b5e3..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/media/fdcdp_lib/inc/fdc_common_hw.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fdc_hw.h - * Date: 2022-09-10 14:53:42 - * LastEditTime: 2022-09-18 08:29:10 - * Description: This file is for Handling the hardware register and - * providing some function interface - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 Wangzq 2022/12/20 Modify the format and establish the version - */ -#ifndef FDC_COMMON_HW_H -#define FDC_COMMON_HW_H - -/***************************** Include Files *********************************/ - -#include "ftypes.h" -#include "ferror_code.h" -#include "fdc.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/************************** Function Prototypes ******************************/ - -/*set pixel clock in kilohertz unit by configurating register */ -FError FDcReqChangePixel(FDcCtrl *instance_p, u32 pixel_clk); - -/* soft reset DC by configurating register */ -void FDcHwFramebufferReset(FDcCtrl *instance_p, u32 num, FDcRestType type); - -/* Get mode number by width and height */ -FError FDcResToModeNum(u32 width, u32 height); - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/bsp/phytium/libraries/standalone/drivers/media/fdcdp_lib/inc/fdc_hw.h b/bsp/phytium/libraries/standalone/drivers/media/fdcdp_lib/inc/fdc_hw.h deleted file mode 100644 index 8584239d90..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/media/fdcdp_lib/inc/fdc_hw.h +++ /dev/null @@ -1,222 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fdc_hw.h - * Date: 2022-09-10 14:53:42 - * LastEditTime: 2022-09-18 08:29:10 - * Description:  This file is for providing some hardware register and function definition - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 Wangzq 2022/12/20 Modify the format and establish the version - */ - -#ifndef FDC_HW_H -#define FDC_HW_H - -/***************************** Include Files *********************************/ - -#include "ftypes.h" -#include "ferror_code.h" -#include "fkernel.h" - -#ifdef __cplusplus -extern "C" -{ -#endif -/************************** Constant Definitions *****************************/ - -#define FDC_READ_REG32(addr, reg_offset) FtIn32((addr) + (u32)(reg_offset)) -#define FDC_WRITE_REG32(addr, reg_value) FtOut32(addr, (u32)(reg_value)) -#define FDC_PHY_ALIGN(data, Offset) ((data + Offset - 1) & ~(Offset - 1)) - -/* -AHB Byte Address -DC Ctrl Register*/ -#define FDC_AQ_HI_CLOCK_CONTROL 0x0000 -#define FDC_AQ_HI_IDLE 0x0004 -#define FDC_AQ_AXI_STATUS 0x000C -#define FDC_AQ_INTR_ENBL 0x0014 -#define FDC_AQ_INTR_ACKNOWLEDGE 0x0010 -#define FDC_GC_TOTAL_READS 0x0040 -#define FDC_GC_TOTAL_CYCLES 0x0078 -#define FDC_CTRL_CH0_PIXEL_CLOCK 0x00F0 -#define FDC_CTRL_CH1_PIXEL_CLOCK 0x00F4 - -/* Each Dc Core Register */ -#define FDC_GCREG_FRAMEBUFFERADDR_LOW 0x400 -#define FDC_GCREG_FRAMEBUFFERADDR_HIGH 0x404 -#define FDC_GCREG_FRAMEBUFFERSTRIDE0 0x408 -#define FDC_GCREG_DISPLAYDITHERCONFIG0 0x410 -#define FDC_GCREG_PANEL_CONFIG0 0x418 -#define FDC_GCREG_DISPLAY_DITHERTABLELOW0 0x420 -#define FDC_GCREG_DISPLAY_DITHERTABLEHIGH0 0x428 -#define FDC_GCREG_HDISPLAY0 0x430 -#define FDC_GCREG_HSYNC0 0x438 -#define FDC_GCREG_VDISPLAY0 0x440 -#define FDC_GCREG_VSYNC0 0x448 -#define FDC_GCREG_DISPLAY_CURLOCATION0 0x450 -#define FDC_GCREG_GAMMAINDEX0 0x458 -#define FDC_GCREG_GAMMADATA0 0x460 -#define FDC_GCREG_CURSOR_CONFIG 0x468 -#define FDC_GCREG_CURSOR_ADDR_LOW 0x46C -#define FDC_GCREG_CURSOR_ADDR_HIGH 0x490 -#define FDC_GCREG_CURSOR_LOCATION 0x470 -#define FDC_GCREG_CURSOR_BACKGROUND 0x474 -#define FDC_GCREG_CURSOR_FORGEGROUND 0x478 -#define FDC_GCREG_DISPLAY_INTR 0x47C -#define FDC_GCREG_DISPLAY_INTR_ENABLE 0x480 -#define FDC_GCREG_CURSOR_MODCLKGATECONTROL 0x484 -#define FDC_GCREG_DEBUGCOUNTER_SELECT0 0x4D0 -#define FDC_GCREG_DEBUGCOUNTER_VALUE0 0x4D8 -#define FDC_GCREG_FRAMEBUFFER_COLORKEY0 0x508 -#define FDC_GCREG_FRAMEBUFFER_COLORKEYHIGH0 0x510 -#define FDC_GCREG_FRAMEBUFFER_CONFIG0 0x518 -#define FDC_GCREG_FRAMEBUFFER_SCALECONFIG0 0x520 -#define FDC_GCREG_FRAMEBUFFER_BGCOLOR0 0x528 -#define FDC_GCREG_FRAMEBUFFER_UPPLANARADDR_LOW 0x530 -#define FDC_GCREG_FRAMEBUFFER_UPPLANARADDR_HIGH 0x534 -#define FDC_GCREG_FRAMEBUFFER_VPPLANARADDR_LOW 0x538 -#define FDC_GCREG_FRAMEBUFFER_VPPLANARADDR_HIGH 0x53C -#define FDC_GCREG_FRAMEBUFFER_USTRIDE0 0x800 -#define FDC_GCREG_FRAMEBUFFER_VSTRIDE0 0x808 -#define FDC_GCREG_FRAMEBUFFER_SIZE0 0x810 -#define FDC_GCREG_FRAMEBUFFER_SCALEFACTORX0 0x828 -#define FDC_GCREG_FRAMEBUFFER_SCALEFACTORY0 0x830 -#define FDC_GCREG_HORIFILTERKERNEL_INDEX0 0x838 -#define FDC_GCREG_HORI_FILTERKERNEL0 0xA00 -#define FDC_GCREG_VERTI_FILTERKERNEL_INDEX0 0xA08 -#define FDC_GCREG_VERTI_FILTERKERNEL0 0xA10 -#define FDC_GCREG_FRAMEBUFFER_CLEARVALUE0 0xA18 -#define FDC_GCREG_FRAMEBUFFER_INITOFFSET0 0xA20 -#define FDC_GCREG_MODCLKGATE_CONTROL0 0xA28 -#define FDC_GCREG_READ_OT 0xCC8 -#define FDC_GCREG_DPCONFIG0 0xCD0 - - -/*FDC_AQ_HI_CLOCK_CONTROL*/ - -#define FDC_AQ_HI_CLOCK_CORE_SOFT_RESET_DC1 BIT(18) -#define FDC_AQ_HI_CLOCK_CORE_SOFT_RESET_DC0 BIT(17) -#define FDC_AQ_HI_CLOCK_AXI_SOFT_RESET BIT(16) -#define FDC_AQ_HI_CLOCK_AHB_SOFT_RESET BIT(12) - -/*FDC_CTRL_CH1_PIXEL_CLOCK*/ -#define FDC_CTRL_PIXEL_CLOCK_CLEAR_MASK GENMASK(31,30) -#define FDC_CTRL_PIXEL_CLOCK_VALID BIT(31) -#define FDC_CTRL_PIXEL_CLOCK_ENABLE BIT(30) - -/* FDC_GCREG_FRAMEBUFFER_SIZE0 */ -#define FDC_GCREG_FRAMEBUFFER_SIZE0_HEIGHT_SET(x) SET_REG32_BITS((x), 29, 15) /* the height of window size of the framebuffer in memory - in pixels*/ -#define FDC_GCREG_FRAMEBUFFER_SIZE0_WIDTH_SET(x) SET_REG32_BITS((x), 14, 0) /* the width of window size of the framebuffer in memory -in pixels*/ -/* FDC_GCREG_FRAMEBUFFER_SCALECONFIG0 */ -#define FDC_GCREG_FRAMEBUFFER_SCALECONFIG0_H_FILTER_TAP_SET(x) SET_REG32_BITS((x), 7, 4) /* the number of horizontal filter tap*/ -#define FDC_GCREG_FRAMEBUFFER_SCALECONFIG0_V_FILTER_TAP_SET(x) SET_REG32_BITS((x), 3, 0) /* the number of vertial filter tap*/ -/* FDC_GCREG_FRAMEBUFFER_INITOFFSET0 */ -#define FDC_GCREG_FRAMEBUFFER_INITOFFSET0_Y_SET(x) SET_REG32_BITS((x), 31, 16) /* Y location of the framebuffer scalar source offset register */ -#define FDC_GCREG_FRAMEBUFFER_INITOFFSET0_X_SET(x) SET_REG32_BITS((x), 15, 0) /* X location of the framebuffer scalar source offset register */ - -/* FDC_GCREG_FRAMEBUFFER_CONFIG0 */ -#define FDC_GCREG_FRAMEBUFFER_CONFIG0_FORMAT_SET(x) SET_REG32_BITS((x), 31, 26) /* framebuffer configuration register can see the struct in the VIDEO_FORMAT*/ -#define FDC_GCREG_FRAMEBUFFER_CONFIG0_UV_SWIZZLE BIT(25) /* UV swizzle */ -#define FDC_GCREG_FRAMEBUFFER_CONFIG0_SWIZZLE_SET(x) SET_REG32_BITS((x), 24, 23) /* swizzle mode ,0:ARGB, 1:RGBA, 2:ABGR, 3:BGRA */ -#define FDC_GCREG_FRAMEBUFFER_CONFIG0_SCALE BIT(22) /* scale of config, 0:disable, 1:enable */ -#define FDC_GCREG_FRAMEBUFFER_CONFIG0_TILE_MODE_SET(x) SET_REG32_BITS((x), 21, 17) /* set the tilemode */ -#define FDC_GCREG_FRAMEBUFFER_CONFIG0_YUV_SET(x) SET_REG32_BITS((x), 16, 14) /* yuv standard, 1: 709*bt709, 3:2020*bt2020*/ -#define FDC_GCREG_FRAMEBUFFER_CONFIG0_ROT_ANGLE_SET(x) SET_REG32_BITS((x), 13, 11) /* the angle of the rot, 0:roto, 1:flip_x, 2:flip_y, 3:flip_xy, 5:rot180 */ -#define FDC_GCREG_FRAMEBUFFER_CONFIG0_TRANSPARENCY_SET(x) SET_REG32_BITS((x), 10, 9) /* transparency of framebuffer */ -#define FDC_GCREG_FRAMEBUFFER_CONFIG0_CLEAR BIT(8) /* the source of the pixel value ,enable :from dcregframebufferclear value,disable: from memory */ -#define FDC_GCREG_FRAMEBUFFER_CONFIG0_FLIP_PROGRESS BIT(6) /* 0:NO, 1:YES, related to the framebuffer address and the vblank */ -#define FDC_GCREG_FRAMEBUFFER_CONFIG0_UNDERFLOW BIT(5) /* 0:NO, 1:YES, related to the display fifo underflows */ -#define FDC_GCREG_FRAMEBUFFER_CONFIG0_RESET BIT(4) /* enable reset for the display controller */ -#define FDC_GCREG_FRAMEBUFFER_CONFIG0_VALID BIT(3) /* decided if you can copy a set of registers ar the next vblank */ -#define FDC_GCREG_FRAMEBUFFER_CONFIG0_GAMMA BIT(2) /* gamma is enabled,rgb channel will be routed */ -#define FDC_GCREG_FRAMEBUFFER_CONFIG0_OUTPUT BIT(0) /* output is enabled ,pixels will be displayed */ - -/* FDC_GCREG_CURSOR_CONFIG */ -#define FDC_GCREG_CURSOR_CONFIG_HOT_SPOT_X_SET(x) SET_REG32_BITS((x), 20, 16) /* horizontal offset to the cursor hotspot */ -#define FDC_GCREG_CURSOR_CONFIG_HOT_SPOT_Y_SET(x) SET_REG32_BITS((x), 12, 8) /* vertical offset to the cursor hotspot */ -#define FDC_GCREG_CURSOR_CONFIG_HOT_FORMAT_SET(x) SET_REG32_BITS((x), 1, 0) /* format of the cursor,0: disabled, 1:masked, 2:ARGB888 \ - \ \ -/* FDC_GCREG_CURSOR_LOCATION */ -#define FDC_GCREG_CURSOR_LOCATION_Y_SET(x) SET_REG32_BITS((x), 31, 16) /* Y location of cursor hotspot */ -#define FDC_GCREG_CURSOR_LOCATION_X_SET(x) SET_REG32_BITS((x), 15, 0) /* X location of cursor hotspot */ - -/* FDC_GCREG_HSYNC0 */ -#define FDC_GCREG_HSYNC0_POLARITY BIT(31) /* polarity of the horizontal sync pulse */ -#define FDC_GCREG_HSYNC0_PULSE BIT(30) /* horizontal sync pulse control */ -#define FDC_GCREG_HSYNC0_END_SET(x) SET_REG32_BITS((x), 29, 15) /* end of horizontal sync pulse */ -#define FDC_GCREG_HSYNC0_START_SET(x) SET_REG32_BITS((x), 14, 0) /* start of the horizontal sync pulse */ - -/* FDC_GCREG_VSYNC0 */ -#define FDC_GCREG_VSYNC0_POLARITY BIT(31) /* polarity of the vertical sync pulse */ -#define FDC_GCREG_VSYNC0_PULSE BIT(30) /* vertical sync pulse control */ -#define FDC_GCREG_VSYNC0_END_SET(x) SET_REG32_BITS((x), 29, 15) /* end of vertical sync pulse */ -#define FDC_GCREG_VSYNC0_START_SET(x) SET_REG32_BITS((x), 14, 0) /* start of the vertical sync pulse */ - -/* FDC_GCREG_VDISPLAY */ -#define FDC_GCREG_VDISPLAY_TOTAL_SET(x) SET_REG32_BITS((x), 30, 16) /* total number of vertical pixels */ -#define FDC_GCREG_VDISPLAY_DISPLAY_END_SET(x) SET_REG32_BITS((x), 14, 0) /* visible number of vertical pixels */ - -/* FDC_GCREG_HDISPLAY0 */ -#define FDC_GCREG_HDISPLAY0_TOTAL_SET(x) SET_REG32_BITS((x), 30, 16) /* total number of horizontal pixels */ -#define FDC_GCREG_HDISPLAY0_DISPLAY_END_SET(x) SET_REG32_BITS((x), 14, 0) /* visible number of vertical pixels */ - -/* FDC_GCREG_PANEL_CONFIG0 */ -#define FDC_GCREG_PANEL_CONFIG0_DATA_CLOCK_POLATITY BIT(9) /* data clock polarity*/ -#define FDC_GCREG_PANEL_CONFIG0_DATA_CLOCK_ENABLE BIT(8) /* data enable enable */ -#define FDC_GCREG_PANEL_CONFIG0_DATA_POLARITY BIT(5) /* data enable polarity */ -#define FDC_GCREG_PANEL_CONFIG0_DATA_ENABLE BIT(4) /* data enable */ -#define FDC_GCREG_PANEL_CONFIG0_DATA_DE_POLATITY BIT(1) /* data enable polarity */ -#define FDC_GCREG_PANEL_CONFIG0_DATA_DE BIT(0) /* data enable enabled/disabled */ - -/* FDC_GCREG_DISPLAYDITHERCONFIG0 */ -#define FDC_GCREG_DISPLAYDITHERCONFIG0_ENABLE BIT(31) - -/* FDC_GCREG_GAMMAINDEX0 */ -#define FDC_GCREG_GAMMAINDEX0_INDEX_SET(x) SET_REG32_BITS((x), 7, 0) /*gamma table index register ,index into gamma table */ - -/* FDC_GCREG_GAMMADATA0 */ -#define FDC_GCREG_GAMMADATA0_RED_SET(x) SET_REG32_BITS((x), 29, 20) /* red translation value */ -#define FDC_GCREG_GAMMADATA0_GREEN_SET(x) SET_REG32_BITS((x), 19, 10) /* green translation value */ -#define FDC_GCREG_GAMMADATA0_BLUE_SET(x) SET_REG32_BITS((x), 9, 0) /* blue translation value */ - -/*FDC_GCREG_DISPLAY_INTR_ENABLE */ -#define FDC_GCREG_DISPLAY_INTR_ENABLE_DC1_UNDERFLOW BIT(5) /* dc1 underflow interrupt enable */ -#define FDC_GCREG_DISPLAY_INTR_ENABLE_DC1_INTR BIT(4) /* dc1 frame complete interrupt enable */ -#define FDC_GCREG_DISPLAY_INTR_ENABLE_DC0_UNDERFLOW BIT(1) /* dc0 underflow interrupt enable */ -#define FDC_GCREG_DISPLAY_INTR_ENABLE_DC0_INTR BIT(0) /* dc0 frame complete interrupt enable */ - -/************************** Function Prototypes ******************************/ - -/* write the data to the channel of DcDp */ -void FDcChannelRegWrite(uintptr addr, uintptr offset, u32 data); - -/* read the data from the channel of DcDp */ -FError FDcChannelRegRead(uintptr addr, uintptr offset); - -/* write Dc control register */ -void FDcCtrlRegWrite(uintptr addr, uintptr offset, u32 data); - -/* read Dc control register */ -FError FDcCtrlRegRead(uintptr addr, uintptr offset); - -/*dump the dc info*/ -void FDcDump(uintptr address); - -#ifdef __cplusplus -} -#endif - -#endif \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/media/fdcdp_lib/inc/fdcdp.h b/bsp/phytium/libraries/standalone/drivers/media/fdcdp_lib/inc/fdcdp.h deleted file mode 100644 index 9824536a55..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/media/fdcdp_lib/inc/fdcdp.h +++ /dev/null @@ -1,153 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fdcdp.h - * Date: 2022-09-05 17:28:55 - * LastEditTime: 2022-09-05 17:28:55 - * Description: This file is for providing the general config of dc and dp - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------ -------- -------------------------------------- - * 1.0 Wangzq 2022/12/20 Modify the format and establish the version - */ - -#ifndef FDCDP_H -#define FDCDP_H - -#include "ftypes.h" -#include "fparameters.h" -#include "fdc.h" -#include "fdp.h" - -/************************** Constant Definitions *****************************/ -#define FMEDIA_DEFAULT_PARAM_ERR FT_MAKE_ERRCODE(ErrModBsp, ErrBspMEDIA, 1) -#define FMEDIA_ERR_PIXEL FT_MAKE_ERRCODE(ErrModBsp, ErrBspMEDIA, 3) -#define FMEDIA_ERR_EDID FT_MAKE_ERRCODE(ErrModBsp, ErrBspMEDIA, 4) -#define FMEDIA_ERR_HPD_DISCONNECTED FT_MAKE_ERRCODE(ErrModBsp, ErrBspMEDIA, 5) -#define FMEDIA_AUX_CONNECT_FAILED FT_MAKE_ERRCODE(ErrModBsp, ErrBspMEDIA, 7) -#define FMEDIA_TRAIN_TIME_ERR FT_MAKE_ERRCODE(ErrModBsp, ErrBspMEDIA, 8) -#define FMEDIA_REACH_MAX_VOLTAGE FT_MAKE_ERRCODE(ErrModBsp, ErrBspMEDIA, 9) - -/************************** Constant Definitions *****************************/ -#define FMEDIA_DCDP_SUCCESS FT_SUCCESS - -#define FDP_DISPLAY_REFRESH_RATE_60 60 -#define FDP_DISPLAY_REFRESH_RATE_59 59 -#define FDP_DISPLAY_REFRESH_RATE_40 40 -#define FDP_DISPLAY_REFRESH_RATE_30 30 - -#define FDP_DISPLAY_COLOR_DEPTH_32 32 -#define FDP_DISPLAY_COLOR_DEPTH_16 16 - -#define FDP_EDP_LIGHTTURNON_CMD 101 -#define FDP_EDP_LIGHTTURNOFF_CMD 102 -#define FDP_EDP_OPENPWR_CMD 103 -#define FDP_EDP_POWEROFF_CMD 104 -#define FDP_LIGHT_ADJUST_CMD 0x1 -#define FDP_CMD_STATE_OFFSET 28 -#define FDP_LIGHT_VALUE_OFFSET 21 - -#define FDP_MRAM_SIZE (3840 * 2160 * 4) - -#ifdef __cplusplus -extern "C" -{ -#endif - - - -/**************************** Type Definitions *******************************/ - - -/**************************** Type Definitions *******************************/ -typedef enum -{ - FDCDP_HPD_IRQ_CONNECTED = 0, /* dp disconnected */ - FDCDP_HPD_IRQ_DISCONNECTED, /*the dp disconnected*/ - FDCDP_AUX_REPLY_TIMEOUT, /*receive aux reply timeout*/ - FDCDP_AUX_REPLY_ERROR, /*the aux reply is invalid*/ - - FDCDP_INTR_MAX_NUM -} FDcDpIntrEventType; - -typedef enum -{ - FDCDP_CONNECT_TO_DISCONNCET = 0, - FDCDP_DISCONNCET_TO_CONNECT -} FDcDpConnectStatus; - -typedef void (*FMediaIntrHandler)(void *param, u32 index); - -typedef struct -{ - FDcDpIntrEventType type; /* the intr type */ - FMediaIntrHandler handler; - void *param; -} FMediaIntrConfig; - -typedef struct -{ - /* fdc instace object */ - FDcCtrl dc_instance_p[FDCDP_INSTANCE_NUM]; - /* fdp instace object */ - FDpCtrl dp_instance_p[FDCDP_INSTANCE_NUM]; - /* u8 *fb_config[FDCDP_INSTANCE_NUM];*/ - u8 *fb_config[FDCDP_INSTANCE_NUM]; - /*the intr config of dcdp*/ - FMediaIntrConfig intr_event[FDCDP_INTR_MAX_NUM]; - /*connect status ,1 :connected,0:disconnected*/ - u32 connect_flg[FDCDP_INSTANCE_NUM]; - /* Device is ininitialized and ready*/ - u32 is_ready; -} FDcDp; - -/************************** Function Prototypes ******************************/ -/*set the dp static params*/ -const FDpConfig *FDpLookupConfig(u32 instance_id); - -/*set the dc static params*/ -const FDcConfig *FDcLookupConfig(u32 instance_id); - -/*init the dcdp*/ -FError FDcDpCfgInitialize(FDcDp *instance_p); - -/*get the default config*/ -FError FDcDpGetDefaultConfig(FDcDp *instance_p); - -/*the basic params init*/ -FError FDcDpSetBasicParam(FDcDp *instance_p, u32 width, u32 height,u32 color_depth, u32 refresh_rate); - -/* init the DcDp */ - -FError FDcDpInitial(FDcDp *instance_p, u32 channel, u32 width, u32 height, u32 color_depth, u32 multi_mode); -/* deinit the DcDp */ -FError FDcDpDeInitialize(FDcDp *instance_p, u32 id); - -/*register the interrupt*/ -void FDcDpRegisterHandler(FDcDp *instance_p, FDcDpIntrEventType type,FMediaIntrHandler handler,void *param); - -/*the interrupt handler*/ -void FDcDpInterruptHandler(s32 vector, void *args); - -/*enable the interrupt*/ -void FDcDpIrqEnable(FDcDp *instance_p,u32 index, FDcDpIntrEventType intr_event_p); - -/*the hotplug information*/ -void FDcDpHotPlug(FDcDp *instance_p, u32 index, FDcDpConnectStatus connect_status); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/bsp/phytium/libraries/standalone/drivers/media/fdcdp_lib/inc/fdcdp_multi_display.h b/bsp/phytium/libraries/standalone/drivers/media/fdcdp_lib/inc/fdcdp_multi_display.h deleted file mode 100644 index 1f1fc23dcf..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/media/fdcdp_lib/inc/fdcdp_multi_display.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fdcdp_multi_display.h - * Date: 2023-02-05 18:27:47 - * LastEditTime: 2023-02-10 11:02:47 - * Description: This file is for defining the dp multidisplay config - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------ -------- -------------------------------------- - * 1.0 Wangzq 2023/02/10 Modify the format and establish the version - */ - -#ifndef FDCDP_MULTI_DISPLAY_H -#define FDCDP_MULTI_DISPLAY_H - -#include "ftypes.h" -#include "fparameters.h" - -#ifdef __cplusplus -extern "C" -{ -#endif -/**************************** Type Definitions *******************************/ -typedef struct -{ - u32 channel; - u32 color_depth; - u32 width; - u32 height; - u32 multi_mode; - u8 *fb_config[FDCDP_INSTANCE_NUM]; - u32 connect[FDCDP_INSTANCE_NUM]; -} disp_parm; - -/************************** Function Prototypes ******************************/ -/*set the frambbufferconfig*/ - -disp_parm *FDcDpMultiDisplayFrameBufferSet(u32 channel, u32 width,u32 height,u32 color_depth,u32 multi_mode); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/bsp/phytium/libraries/standalone/drivers/media/fdcdp_lib/inc/fdp.h b/bsp/phytium/libraries/standalone/drivers/media/fdcdp_lib/inc/fdp.h deleted file mode 100644 index b6795e9a31..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/media/fdcdp_lib/inc/fdp.h +++ /dev/null @@ -1,201 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fdp.h - * Date: 2022-09-08 14:53:42 - * LastEditTime: 2022-09-08 14:53:42 - * Description:  This file is for defining the dp config and function - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 Wangzq 2022/12/20 Modify the format and establish the version - */ - -#ifndef FDP_H -#define FDP_H - -/***************************** Include Files *********************************/ - -#include "ftypes.h" -#include "fparameters_comm.h" -#include "fdc.h" -#include "ferror_code.h" -#ifdef __cplusplus -extern "C" -{ -#endif -/************************** Constant Definitions *****************************/ -#define FMEDIA_DP_SUCCESS FT_SUCCESS -#define FMEDIA_DP_FAILED 1 - -#define FDP_HAS_TRAINED 1 -#define FDP_NOT_TRAINED 0 - -#define FDP_IS_HPD_ON 1 -#define FDP_IS_HPD_OFF 0 - -#define FDP_DIS_CONNECTED 1 -#define FDP_IS_CONNECTED 0 - -#define FDP_TRAIN_SUCCESS 0 -#define FDP_TRAIN_FAILED 1 - -#define DP_GOP_MAX_MODENUM 11 - -/**************************** Type Definitions *******************************/ -typedef enum -{ - FDP_TRAINING_OFF = 0, - FDP_TRAINING_PATTERN_1, - FDP_TRAINING_PATTERN_2, - FDP_TRAINING_PATTERN_3 -} FDpTrainPattern; - -typedef enum -{ - FDP_BIT_DEPTH_6 = 0, - FDP_BIT_DEPTH_8, - FDP_BIT_DEPTH_10, - FDP_BIT_DEPTH_12, - FDP_BIT_DEPTH_16, - FDP_BIT_DEPTH_RESERVE -} FDpBitDepth; - -typedef enum -{ - FDP_PWR_MODE_D0 = 1, - FDP_PWR_MODE_D3 = 2, -} FDpPwrMode; /* the power state of dp_phy */ - -typedef struct -{ - u16 h_total; /* Horizontal total lines. */ - u16 v_total; /* Vertical total lines. */ - boolean h_polarity; /*0 - active high , 1 - active low */ - boolean v_polarity; /*0 - active high , 1 - active low */ - u16 hs_width; /* Horizontal Sync Pulse Width in pixels. */ - u16 vs_width; /* Vertical Sync Pulse Width in lines. */ - u16 h_res; /* Horizontal Addressable video in lines. */ - u16 v_res; /* Vertical Addressable video in lines. */ - u16 h_start; /* Horizontal Blanking in pixels minus */ - u16 v_start; /* Vertical Blanking in pixels minus */ - boolean h_user_polarity; /* Horizontal Sync Polarity. */ - boolean v_user_polarity; /* Vertical Sync Polarity. */ -} FDpSyncParameter; - -typedef struct -{ - u32 lane_count; /* The Number of lanes */ - u32 link_rate; /* Main link bandwidth. 162 - 1.62 270 - 2 540 - 810 - 8.1G */ - u8 bit_depth; /* Bit depth per color.For example , 6 means that Bit depth per color is 6 bits. */ - u8 color_rep_format; /* Color representation format. 0 - RGB , 1 - YCbCr 4:2:2 , 2 - YCbCr 4:4:4 , other - Reserved. */ - u8 clock_mode; /* clock_mode Clocking mode for the user data. 0 - asynchronous clock , 1 - synchronous clock. */ - u32 pixel_clock; /* pixel clock frequence in megahertz unit */ - u8 transfer_size; /* Transfer unit size.This parameter is usually 64. */ - u8 dis_type; /* index of video mode description structure */ -} FDpTransmissionConfig; - -typedef struct -{ - u32 dp_hpd_on; /* whether the dp is connected or not,1-connected,0-disconnected */ - u32 dp_trained; /* whether the dp has been trained or not,1-trained,0-distrained */ - u32 dp_connect; /* whether the source has been connected with sink or not ,1-trained,0-distrained */ -} FDpStatus; - -typedef struct -{ - u32 pixel_clock; /* the pixelclock of dp */ - u32 horPixel; /* horizontal pixel */ - u32 verPixel; /*vertical pixel */ - FDpSyncParameter sync_parameter[DP_GOP_MAX_MODENUM]; -} FDpDtdTable; - -typedef struct -{ - /* 设置参数 */ - FDpSyncParameter sync_parameter[DP_GOP_MAX_MODENUM]; - - FDpTransmissionConfig transmission_config; - - /* 当前状态 */ - FDpStatus status; - - u8 down_spread_enable; -#define DTD_MAX 4 - /* edid 缓冲数据 */ - FDpDtdTable dtd_table[DTD_MAX]; /* the max dtd num is 4 */ - -} FDpCurrentConfig; - -typedef struct -{ - u32 instance_id; - uintptr dp_channe_base_addr; - uintptr dp_phy_base_addr; - u32 irq_num; -} FDpConfig; - -typedef struct -{ - FDpCurrentConfig fdp_current_config; - FDpConfig config; -} FDpCtrl; - -/************************** Function Prototypes ******************************/ - -/* dp init */ -FError FDpInit(FDcCtrl *dc_config, FDpCtrl *dp_config, FDcDisplaySetting *gop_mode, u32 mode_id); - -/* Initialization of dp configuration parameter */ -void FDpConfigInit(FDpCtrl *instance_p, FDcDisplaySetting *gop_mode); - -/* Dp connect to sink */ -FError FDpConnect(FDpCtrl *instance_p); - -/* Convert display resolution number to pixel clock frequence in megahertz unit */ -FError FDpDistypeToPixelClock(u8 mode_Num); - -/* sets the output of the transmitter core to the specified training pattern */ -void FDpConfigTxTrainingPattern(FDpCtrl *instance_p, FDpTrainPattern train_pattern); - -/* Force the transmitter core to use the alternate scrambler reset value */ -FError FDpConfigTraingPattern(FDpCtrl *instance_p); - -/* Config Main Stream Attributes.It is must to reset reset phy link after main - stream attributes configuration*/ -void FDpConfigMainStreamAttr(FDpCtrl *instance_p, FDpTransmissionConfig *fdp_trans_config, FDpSyncParameter *fdp_sync_config); - -/*Set sink device to D0(normal operation mode).*/ -FError FDpWakeUpSink(FDpCtrl *instance_p); - -FError FDpStartLinkTrain(FDpCtrl *instance_p, u8 lane_count, u32 link_rate); - -/* Get the status of all lanes */ -FError FDpTxGetTrainingStatus(FDpCtrl *instance_p, u8 *train_status); - -/* Determine whether retraining is needed at present.*/ -FError FDpSinkNeedReTrain(FDpCtrl *instance_p); /* not use*/ - -/*Check the overall training status of the specified nameber of lanes and Tps type.*/ -FError FDpCheckTrainingStatus(FDpCtrl *instance_p, u8 lane_count, u8 tpsn, u8 *value); - -/*Check the HPD status*/ -FError FDpCheckHpdStatus(FDpCtrl *instance_p); - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/bsp/phytium/libraries/standalone/drivers/media/fdcdp_lib/inc/fdp_aux.h b/bsp/phytium/libraries/standalone/drivers/media/fdcdp_lib/inc/fdp_aux.h deleted file mode 100644 index 6b85ce047b..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/media/fdcdp_lib/inc/fdp_aux.h +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fdp_aux.h - * Date: 2022-09-08 14:53:42 - * LastEditTime: 2022-09-08 14:53:42 - * Description: This file is for Handling the aux register and - * providing some function interface - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 Wangzq 2022/12/20 Modify the format and establish the version - */ -#ifndef FDP_AUX_H -#define FDP_AUX_H -/***************************** Include Files *********************************/ - -#include "ftypes.h" -#include "fdp.h" -#ifdef __cplusplus -extern "C" -{ -#endif -/************************** Constant Definitions *****************************/ - -#define AUX_TIMEOUT 1 -#define AUX_CONNECT 0 -#define DTD_MAX 4 - -/**************************** Type Definitions *******************************/ -typedef struct -{ - u32 pixel_clock; /* pixel clock frequence in megahertz unit */ - u32 hor_pixel; /* Horizontal total lines. */ - u32 ver_pixel; /* Vertical total lines. */ - u32 hor_blanking; /* Horizontal Blanking in pixels minus*/ - u32 ver_blanking; /* Vertical Blanking in pixels minus*/ - u32 hor_sync_front; /*Horizontal Front Proch in pixels. */ - u32 ver_sync_front; /*vertical Front Proch in pixels. */ - u32 hor_sync_width; /* Horizontal Sync Pulse Width in pixels. */ - u32 ver_sync_width; /* Vertical Sync Pulse Width in lines. */ - u8 hor_polarity; /*0 - active high , 1 - active low */ - u8 ver_polarity; /*0 - active high , 1 - active low */ -} Auxtable; - -/************************** Function Prototypes ******************************/ - -/*Initialize AUX channel include aux clock Initialization, dp timer Initialization - and interrupt mask. */ -FError FDpInitAux(FDpCtrl *instance_p); - -/*Wait util that an aux reply has been recieved*/ -FError FDpWaitAuxReply(FDpCtrl *instance_p); - -/*translate the dp information the dpsync*/ -FError FDpTimingToDpSync(Auxtable *list, FDpSyncParameter *sync); - -/*translate the dc information the dcsync*/ -FError FDpTimingToDcSync(Auxtable *list, FDcSyncParameter *sync); - -/* write phy register through aux channel.*/ -FError FDpSinkDpcdWrite(FDpCtrl *instance_p, uintptr addr, u8 data); - -/* Read phy register through aux channel. */ -FError FDpSinkDpcdRead(FDpCtrl *instance_p, uintptr addr, u8 *data); - -/* Get edid information form sink*/ -FError FDpGetEdid(FDpCtrl *instance_p, u8 *buffer); - -/*translate the edid information to the struct*/ -FError FDpParseDpEdidDtdList(u8 *buffer, Auxtable *list); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/bsp/phytium/libraries/standalone/drivers/media/fdcdp_lib/inc/fdp_hw.h b/bsp/phytium/libraries/standalone/drivers/media/fdcdp_lib/inc/fdp_hw.h deleted file mode 100644 index 98787e42e4..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/media/fdcdp_lib/inc/fdp_hw.h +++ /dev/null @@ -1,176 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fdp_hw.h - * Date: 2022-09-08 14:53:42 - * LastEditTime: 2022-09-08 14:53:42 - * Description:  This file is for providing some hardware register and function definition - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 Wangzq 2022/12/20 Modify the format and establish the version - */ - -#ifndef FDP_HW_H -#define FDP_HW_H - -/***************************** Include Files *********************************/ - -#include "ftypes.h" -#include "fio.h" -#include "fkernel.h" - -#ifdef __cplusplus -extern "C" -{ -#endif -/************************** Constant Definitions *****************************/ -/** -* This macro writes the given register. -* @param base_addr is the base address of the device. -* @param reg_offset is the register offset to be written. -* @param data is the 32-bit value to write to the register. -* @return None. -* @note None. -*****************************************************************************/ -#define FDP_READ_REG32(addr, reg_offset) FtIn32((addr) + (u32)(reg_offset)) - -#define FDP_WRITE_REG32(addr, reg_value) FtOut32(addr, (u32)(reg_value)) - -#define FDC_PHY_ALIGN(data, Offset) ((data + Offset - 1) & ~(Offset - 1)) - -#define FDP_SETBIT(base_addr, reg_offset, data) FtSetBit32((base_addr) + (u32)(reg_offset), (u32)(data)) - -#define FDP_CLEARBIT(base_addr, reg_offset, data) FtClearBit32((base_addr) + (u32)(reg_offset), (u32)(data)) - -/* - TX Registers -*/ -#define FDPTX_LINK_BW_SET 0x0000 -#define FDP_TX_LANE_COUNT_SET 0x0004 -#define FDP_TX_ENHANCED_FRAME_EN 0x0008 -#define FDP_TX_TRAINING_PATTERN_SET 0x000c - -#define FDP_TX_LINK_QUAL_PATTERN_SET 0x0010 -#define FDP_TX_SCRAMBLING_DISABLE 0x0014 -#define FDP_TX_DOWNSPREAD_CTRL 0x0018 -#define FDP_TX_ALT_SCRAMBLER_RESET 0x001c -#define FDP_TX_HBR2_SCRAMBLER_RESET 0x0020 -#define FDP_TX_DISPLAYPORT_VERSION 0x0024 -#define FDP_TX_LANE_REMAP 0x002C - -#define FDP_TX_ENABLE 0x0080 -#define FDP_TX_ENABLE_MAIN_STREAM 0x0084 -#define FDP_TX_ENABLE_SEC_STREAM 0x0088 -#define FDP_TX_SEC_DATA_WINDOW 0x008C -#define FDP_TX_LINK_SOFT_RESET 0x0090 -#define FDP_TR_INPUT_COURCE_ENABLE 0x0094 - -#define FDP_TX_FORCE_SCRAMBLER_RESET 0x00C0 -#define FDP_TX_SOURCE_CONTROL_STATUS 0x00C4 -#define FDP_TX_DATA_CONTROL 0x00C8 - -#define FDP_TX_CORE_CAPABILITY 0x00F8 -#define FDP_TX_CORE_ID 0x00FC - -#define FDP_TX_CMD_REG 0x0100 -#define FDP_TX_FIFO 0x0104 -#define FDP_TX_ADDRESS_REG 0x0108 -#define FDP_TX_CLK_DIVIDER 0x010C -#define FDP_TX_AUX_REPLY_TIMEOUT_INTERVAL 0x0110 -#define FDP_TX_SINK_HPD_STATE 0x0128 -#define FDP_TX_STATUS 0x0130 -#define FDP_TX_RCV_FIFO 0x0134 -#define FDP_TX_RCV_REPLY_REG 0x0138 -#define FDP_TX_RCV_REPLY_COUNT 0x013C - -#define FDP_TX_INTERRUPT 0x0140 -#define FDP_TX_INTERRUPT_MASK 0x0144 -#define FDP_TX_RCV_DATA_COUNT 0x0148 -#define FDP_TX_AUX_TRANSACTION_STATUS 0x014C -#define FDP_TX_TIMER 0x0158 - -/*FDPTX_MAIN_LINK_MISC0*/ -#define FDPTX_MAIN_LINK_MISC0_CLOCK_MODE BIT(0) -#define FDPTX_MAIN_LINK_MISC0_COLOR_FORMAT GENMASK(2,1) -#define FDPTX_MAIN_LINK_MISC0_BIT_DEPTH GENMASK(7,5) - -/* - Main Link registers -*/ -#define FDPTX_MAIN_LINK_HTOTAL 0x0180 -#define FDPTX_MAIN_LINK_VTOTAL 0x0184 -#define FDPTX_MAIN_LINK_POLARITY 0x0188 -#define FDPTX_MAIN_LINK_HSWIDTH 0x018C -#define FDPTX_MAIN_LINK_VSWIDTH 0x0190 -#define FDPTX_MAIN_LINK_HRES 0x0194 -#define FDPTX_MAIN_LINK_VRES 0x0198 -#define FDPTX_MAIN_LINK_HSTART 0x019C -#define FDPTX_MAIN_LINK_VSTART 0x01A0 -#define FDPTX_MAIN_LINK_MISC0 0x01A4 -#define FDPTX_MAIN_LINK_MISC1 0x01A8 -#define FDPTX_M_VID 0x01AC -#define FDPTX_TRANSFER_UNIT_SIZE 0x01B0 -#define FDPTX_N_VID 0x01B4 -#define FDPTX_USER_PIXEL_WIDTH 0x01B8 -#define FDPTX_DATA_PER_LANE 0x01BC -#define FDPTX_INTERLACED 0x01C0 -#define FDPTX_USER_POLARITY 0x01C4 -#define FDPTX_USER_CONTROL 0x01C8 - -#define FDP_TX_AUX_ERROR_MASK BIT(6) //AUX reply error -#define FDP_TX_GP_TIME_MASK BIT(4) // 通用定时器中断 -#define FDP_TX_AUX_TIMEOUT_MASK BIT(3) //因等待 AUX reply 超时发起中断 -#define FDP_TX_AUX_RECEIVED_MASK BIT(2) //接收到 AUX reply 发起中断 -#define FDP_TX_HPD_INTR_MASK BIT(1) //hpd irq 中断 -#define FDP_TX_HPD_EVENT_MASK BIT(0)//HPD 连接或断开事件 中断 - -#define FDP_TX_STATUS_AUX_ERROR BIT(6) -#define FDP_TX_STATUS_GP_TIME BIT(4) -#define FDP_TX_STATUS_AUX_TIMEOUT BIT(3) -#define FDP_TX_STATUS_AUX_RECEIVED BIT(2) -#define FDP_TX_STATUS_HPD_INTR BIT(1) -#define FDP_TX_STATUS_HPD_EVENT BIT(0) - -/* - eDP CRC registers -*/ -#define FDPTX_EDP_CRC_ENABLE 0x01D0 -#define FDPTX_EDP_CRC_RED 0x01D4 -#define FDPTX_EDP_CRC_GREEN 0x01D8 -#define FDPTX_EDP_CRC_BLUE 0x01DC - - -/************************** Function Prototypes ******************************/ - -/* write the data to the channel of dp */ -void FDpChannelRegWrite(uintptr addr, uintptr offset, u32 data); - -/* read the data from the channel of dp */ -FError FDpChannelRegRead(uintptr addr, uintptr offset); - -/* write FdpPhy control register */ -void FDpPhyRegWrite(uintptr addr, uintptr offset, u32 data); - -/* read FdpPhy control register */ -FError FDpPhyRegRead(uintptr addr, uintptr offset); - -/*dump the dp info*/ -void FDpDump(uintptr address); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/bsp/phytium/libraries/standalone/drivers/media/fdcdp_lib/inc/fdp_phy.h b/bsp/phytium/libraries/standalone/drivers/media/fdcdp_lib/inc/fdp_phy.h deleted file mode 100644 index 56f99efe38..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/media/fdcdp_lib/inc/fdp_phy.h +++ /dev/null @@ -1,362 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fdp_phy.h - * Date: 2022-09-08 14:53:42 - * LastEditTime: 2022-09-08 14:53:42 - * Description:  This file is for providing the dp phy register and function - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 Wangzq 2022/12/20 Modify the format and establish the version - */ -#ifndef FDP_PHY_H -#define FDP_PHY_H - -#include "fdp.h" - -#ifdef __cplusplus -extern "C" -{ -#endif -/************************** Constant Definitions *****************************/ -/* -** DPCD Address -*/ -#define DPCD_REV 0x00000 -#define MAX_LINK_RATE 0x00001 -#define MAX_LANE_COUNT 0x00002 -#define MAX_DOWNSPREAD 0x00003 -#define NORP_DP_PWR_VOLTAGE_CAP 0x00004 -#define DOWN_STRAM_PORT_PRESENT 0x00005 -#define MAIN_LINK_CHANNEL_CODING 0x00006 -#define DOWN_STREAM_PORT_COUNT 0x00007 -#define RECEIVE_PORT0_CAP_0 0x00008 -#define RECEIVE_PORT0_CAP_1 0x00009 -#define RECEIVE_PORT1_CAP_0 0x0000A -#define RECEIVE_PORT1_CAP_1 0x0000B -#define I2C_SPEED_CONTROL_CAPABILITIES 0x0000C -#define EDP_CONFIGURATION_CAP 0x0000D -#define TRAINING_AUX_RD_INTERVAL 0x0000E -#define ADAPTOR_CAP 0x0000F - -#define MSTM_CAP 0x00021 -#define NUMBER_OF_AUDIO_ENDPOINTS 0x00022 -#define AV_SYNC_DATA_BLOCK_DEC 0x00023 -#define AV_SYNC_DATA_BLOCK_DEC_LOW 0x00024 -#define AV_SYNC_DATA_BLOCK_DEC_HIGH 0x00025 -#define AV_SYNC_DATA_BLOCK_PP_LOW 0x00026 -#define AV_SYNC_DATA_BLOCK_PP_HIGH 0x00027 -#define AV_SYNC_DATA_BLOCK_INTER 0x00028 -#define AV_SYNC_DATA_BLOCK_PROG 0x00029 -#define AV_SYNC_DATA_BLOCK_REP_LOW 0x0002A -#define AV_SYNC_DATA_BLOCK_DEL_LOW 0x0002B -#define AV_SYNC_DATA_BLOCK_DEL_MID 0x0002C -#define AV_SYNC_DATA_BLOCK_DEL_HIGH 0x0002D - -#define RX_GTC_VALUE_0 0x00054 -#define RX_GTC_VALUE_1 0x00055 -#define RX_GTC_VALUE_2 0X00056 -#define RX_GTC_VALUE_3 0X00057 -#define RX_GTC_MSTR_REQ 0x00058 -#define RX_GTC_FREQ_LOCK_DONE 0x00059 -#define RX_GTC_PHASE_SKEW_OFFSET_0 0x0005A -#define RX_GTC_PHASE_SKEW_OFFSET_1 0x0005B -#define DSC_SUPPORT 0x00060 -#define DSC_ALGORITHM_REVISION 0x00061 -#define DSC_RC_BUFFER_CLOCK_SIZE 0x00062 -#define DSC_RC_BUFFER_SIZE 0x00063 -#define DSC_SLICE_BAPABILITIES_1 0x00064 -#define DSC_LINE_BUFFER_BLT_DEPTH 0x00065 -#define DSC_BLOCK_PREDICTION_SUPPORT 0x00066 -#define MAX_BITS_PER_PIXEL_SUPPORTED 0x00067 -#define DSC_COLOR_FORMAT_CAPABILITIES 0x00069 -#define DSC_COLOR_DEPTH_CAPABILITIES 0x0006A -#define PEAK_DSC_THROUGHPUT 0x0006B -#define DSC_MAX_SLICE_WIDTH 0x0006C -#define DSC_SLICE_CAPABILITIES_2 0x0006D -#define MIN_BITS_PER_PIXEL_SUPPORTED 0x0006E - -#define PANELSELFREF_CAPSUP_REV 0x00070 -#define PANEL_SELF_REFRESH_CAPABILITIES 0x00071 -#define DETAILED_CAPABILITIES_INFO 0x00080 /*80-8F \ - */ -#define FEC_CAPABILITY 0x00090 - -#define LINK_BW_SET 0x00100 -#define LANE_COUNT_SET 0x00101 -#define TRAINING_PATTERN_SET 0x00102 -#define TRAINING_LANE0_SET 0x00103 -#define TRAINING_LANE1_SET 0x00104 -#define TRAINING_LANE2_SET 0x00105 -#define TRAINING_LANE3_SET 0x00106 -#define DOWNSPREAD_CTRL 0x00107 -#define MAIN_LINK_CHANNEL_CODING_SET 0x00108 -#define I2C_SPEED_CONTROL_STATUS 0x00109 -#define EDP_CONFIGURATION_SET 0x0010A -#define LINK_QUAL_LANE0_SET 0x0010B -#define LINK_QUAL_LANE1_SET 0x0010C -#define LINK_QUAL_LANE2_SET 0x0010D -#define LINK_QUAL_LANE3_SET 0x0010E -#define MSTM_CTRL 0x00111 -#define AUDIO_DELAY_7_0 0x00112 -#define AUDIO_DELAY_15_8 0x00113 -#define AUDIO_DELAY_23_16 0x00114 -#define LINK_RATE_SET_TX_GTC_CAPABILITY 0x00115 -#define UPSTREAM_DEVICE_DP_PWR_NEED 0x00118 -#define EXTENDED_DPRX_SLEEP_WAKE_TIMEOUT_GRANT 0x00119 -#define FEC_CONFIGURATION 0x00120 -#define TX_GTC_VALUE_7_0 0x00154 -#define TX_GTC_VALUE_15_8 0x00155 -#define TX_GTC_VALUE_23_16 0x00156 -#define TX_GTC_VALUE_31_24 0x00157 -#define RX_GTC_VALUE_PHASE_SKEW_EN 0x00158 -#define TX_GTC_FREQ_LOCK_DONE 0x00159 -#define TX_GTC_PHASE_CKEW_OFFERT_7_0 0x0015A -#define TX_GTC_PHASE_CKEW_OFFERT_15_8 0x0015B -#define DSC_ENABLE 0x00160 -#define ADAPTOR_CTRL 0x001A0 -#define BRANCH_DEVICE_CTRL 0x001A1 -#define PAYLOAD_ALLOCATE_SET 0x001C0 -#define PAYLOAD_ALLOCATE_START_TIME_SLOT 0x001C1 -#define PAYLOAD_ALLOCATE_TIME_SLOT_COUNT 0x001C2 - -#define SINK_COUNT 0x00200 -#define DEVICE_SERVICE_IRQ_VECTOR 0x00201 -#define LANE0_1_STATUS 0x00202 -#define LANE2_3_STATUS 0x00203 -#define LANE_ALIGN_STATUS_UPDATED 0x00204 -#define SINK_STATUS 0x00205 -#define ADJUST_REQUEST_LANE0_1 0x00206 -#define ADJUST_REQUEST_LANE2_3 0x00207 -#define TRAINING_SCORE_LANE0 0x00208 -#define TRAINING_SCORE_LANE1 0x00209 -#define TRAINING_SCORE_LANE2 0x0020A -#define TRAINING_SCORE_LANE3 0x0020B -#define SYMBOL_ERROR_COUNT_LANE0_LOW 0x00210 -#define SYMBOL_ERROR_COUNT_LANE0_HIGH 0x00211 -#define SYMBOL_ERROR_COUNT_LANE1_LOW 0x00212 -#define SYMBOL_ERROR_COUNT_LANE1_HIGH 0x00213 -#define SYMBOL_ERROR_COUNT_LANE2_LOW 0x00214 -#define SYMBOL_ERROR_COUNT_LANE2_HIGH 0x00215 -#define SYMBOL_ERROR_COUNT_LANE3_LOW 0x00216 -#define SYMBOL_ERROR_COUNT_LANE3_HIGH 0x00217 -#define TEST_REQUEST 0x00208 -#define TEST_LINK_RATE 0x00219 -#define TEST_LANE_COUNT 0x00220 -#define TEST_PATTERN 0x00221 -#define TEST_H_TOTAL_HIGH 0x00222 -#define TEST_H_TOTAL_LOW 0x00223 -#define TEST_V_TOTAL_HIGH 0x00224 -#define TEST_V_TOTAL_LOW 0x00225 -#define TEST_H_START_HIGH 0x00226 -#define TEST_H_START_LOW 0x00227 -#define TEST_V_START_HIGH 0x00228 -#define TEST_V_START_LOW 0x00229 -#define TEST_HSYNC_HIGH 0x0022A -#define TEST_HSYNC_LOW 0x0022B -#define TEST_VSYNC_HIGH 0x0022C -#define TEST_VSYNC_LOW 0x0022D -#define TEST_H_WIDTH_HIGH 0x0022E -#define TEST_H_WIDTH_LOW 0x0022F -#define TEST_V_HEIGHT_HIGH 0x00230 -#define TEST_V_HEIGHT_LOW 0x00231 -#define TEST_MISC_LOW 0x00232 -#define TEST_MISC_HIGH 0x00233 -#define TEST_REFRESH_RATE_NUMERATOR 0x00234 -#define TEST_CRC_R_CR_LOW 0x00240 -#define TEST_CRC_R_CR_HIGH 0x00241 -#define TEST_CRC_G_Y_LOW 0x00242 -#define TEST_CRC_G_Y_HIGH 0x00243 -#define TEST_CRC_B_CB_LOW 0x00244 -#define TEST_CRC_B_CB_HIGH 0x00245 -#define TEST_CRC_COUNT 0x00246 -#define PHY_TEST_PATTERN 0x00248 -#define HBR2_COMPLIANCE_SCRAMBLER_RESET_7_0 0x0024A -#define HBR2_COMPLIANCE_SCRAMBLER_RESET_15_8 0x0024B -#define TEST_80BIT_CUSTOM_PATTERN_7_0 0x00250 -#define TEST_80BIT_CUSTOM_PATTERN_15_8 0x00251 -#define TEST_80BIT_CUSTOM_PATTERN_23_16 0x00252 -#define TEST_80BIT_CUSTOM_PATTERN_31_24 0x00253 -#define TEST_80BIT_CUSTOM_PATTERN_39_32 0x00254 -#define TEST_80BIT_CUSTOM_PATTERN_47_40 0x00255 -#define TEST_80BIT_CUSTOM_PATTERN_55_48 0x00256 -#define TEST_80BIT_CUSTOM_PATTERN_63_56 0x00257 -#define TEST_80BIT_CUSTOM_PATTERN_71_64 0x00258 -#define TEST_80BIT_CUSTOM_PATTERN_79_72 0x00259 -#define CONTINUOUS_80BIT_PATTERN_FROM_DPRX_AUX_CH_CAP 0x0025A -#define CONTINUOUS_80BIT_PATTERN_FROM_DPRX_AUX_CH_CTRL 0x0025B -#define TEST_RESPONSE 0x00260 -#define TEST_EDID_CHECHSUM 0x00261 -#define TEST_SINK 0x00270 -#define TEST_AUDIO_MODE 0x00271 -#define TEST_AUDIO_PATTERN_TYPE 0x00272 -#define TEST_AUDIO_PERIOD_CH_1 0x00273 -#define TEST_AUDIO_PERIOD_CH_2 0x00274 -#define TEST_AUDIO_PERIOD_CH_3 0x00275 -#define TEST_AUDIO_PERIOD_CH_4 0x00276 -#define TEST_AUDIO_PERIOD_CH_5 0x00277 -#define TEST_AUDIO_PERIOD_CH_6 0x00278 -#define TEST_AUDIO_PERIOD_CH_7 0x00279 -#define TEST_AUDIO_PERIOD_CH_8 0x0027A -#define FEC_STATUS 0x00280 -#define FEC_ERROR_COUNT0 0x00281 -#define FEC_ERROR_COUNT1 0x00282 -#define PAYLOAD_TABLE_UPDATE_STATUS 0x002C0 - -#define IEEE_OUI 0x00300 -#define DEVICE_ID_STRING 0x00303 -#define HARDWARE_REVISION 0x00309 -#define FIRMWARE_SOFTWARE_MAJOR_REV 0x0030A -#define FIRMWARE_SOFTWARE_MINOR_REV 0x0030B - -#define SET_POWER_SET_DP_PWR_VALTAGE 0x00600 - -#define SINK_COUNT_ESI 0x02002 -#define DEVICE_SERVICE_IRQ_VECTOR_ESI0 0x02003 -#define DEVICE_SERVICE_IRQ_VECTOR_ESI1 0x02004 -#define LINK_SERVICE_IRQ_VECTOR_ESI0 0x02005 -#define LANE0_1_STATUS_ESI 0x0200C -#define LANE2_3_STATUS_ESI 0x0200D -#define LANE_ALIGN_STATUS_UPDATED_ESI 0x0200E -#define SINK_STATUS_ESI 0x0200F - -#define LINK_TRAINING_TPS1 0x01 -#define LINK_TRAINING_TPS2 0x02 -#define LINK_TRAINING_TPS3 0x03 -#define LINK_TRAINING_TPS4 0x07 - -/* - DP PHY Register -*/ -#define REG_32BIT_SEL 0x40000 -#define REG_EB_MODE 0x40004 -#define REG_RX_EQ_TRAINING 0x40008 -#define REG_RX_TERMINATION 0x4000c -#define REG_128B_ENC_BYP 0x40010 -#define REG_TX_ONE_ZEROS 0x40014 -#define REG_TX_PATTTERN 0x40018 -#define REG_RXSTARTHIGH 0x4001c -#define REG_LINKEVAL_MERIT 0x40020 -#define REG_MODE 0x40034 -#define REG_L1_SS_SEL 0x40038 -#define REG_RX_ELEC_IDLE_DET_EN 0x4003c -#define REG_TX_CMN_MODE_EN 0x40040 -#define REG_FULLRT_DIV 0x40048 -#define REG_MISC 0x4004c -#define REG_XCVR_POWER_STATE_REQ 0x402bc /* 0x40210*/ -#define REG_PLLCLK_EN 0x40214 -#define REG_PMA_STANDARD_MODE 0x40218 -#define REG_PMA_DATA_WIDTH 0x4021c -#define REG_TX_ELEC_IDLE 0x40220 -#define REG_TX_DEEMPH_0 0x40224 -#define REG_GET_LOCAL_PRESET 0x40228 -#define REG_LOCAL_PRESET_INDEX 0x4022c -#define REG_PMA_VMARGIN 0x40230 -#define REG_PMA_LOW_POWER_SWING 0x40234 -#define REG_PMA_RX_EQ_TRAINING_DATA_VALID 0x40238 -#define REG_PMA_RX_EQ_EVAL 0x4023c -#define REG_MAC_SRC_SEL 0x40240 -#define REG_DIV_SEL0 0x40244 -#define REG_PMA_TX_RCV_DETECT 0x40248 -#define REG_PHY_MODE 0x4024c -#define REG_APB_RESET_DEASSERT 0x40250 -#define REG_PHY_RESET_DEASSERT 0x40254 -#define REG_PHY_RESET_LINK_DEASSERT 0x40258 -#define REG_PHY_INTERRUPT 0x4025c -#define REG_SGMII_DPSEL_INIT 0x40260 - -#define PHY_PLL_CFG 0x30038 -#define CMN_PDIAG_PLL0_CLK_SEL_M0 0x684 -#define XCVR_DIAG_HSCLK_SEL 0x10398 -#define XCVR_DIAG_HSCLK_DIV 0x1039c -#define XCVR_DIAG_PLLDRC_CTRL 0x10394 -#define CMN_PLL0_DSM_DIAG_M0 0x250 -#define CMN_PLL0_VCOCAL_REFTIM_START 0x218 -#define CMN_PLL0_VCOCAL_TCTRL 0x208 -#define CMN_PDIAG_PLL0_CP_PADJ_M0 0x690 -#define CMN_PDIAG_PLL0_CP_IADJ_M0 0x694 -#define CMN_PDIAG_PLL0_FILT_PADJ_M0 0x698 -#define CMN_PLL0_INTDIV_M0 0x240 -#define CMN_PLL0_FRACDIVL_M0 0x244 -#define CMN_PLL0_FRACDIVH_M0 0x248 -#define CMN_PLL0_HIGH_THR_M0 0x24c -#define CMN_PDIAG_PLL0_CTRL_M0 0x680 -#define CMN_PLL0_VCOCAL_PLLCNT_START 0x220 -#define CMN_PLL0_LOCK_REFCNT_START 0x270 -#define CMN_PLL0_LOCK_PLLCNT_START 0x278 -#define CMN_PLL0_LOCK_PLLCNT_THR 0x27c -#define TX_PSC_A0 0x10400 -#define TX_PSC_A2 0x10408 -#define TX_PSC_A3 0x1040c -#define RX_PSC_A0 0x20000 -#define RX_PSC_A2 0x20008 -#define RX_PSC_A3 0x2000c -#define RX_PSC_CAL 0x20018 -#define XCVR_DIAG_BIDI_CTRL 0x103a8 -#define RX_REE_GCSM1_CTRL 0x20420 -#define RX_REE_GCSM2_CTRL 0x20440 -#define RX_REE_PERGCSM_CTRL 0x20460 -#define TX_DIAG_ACYA 0x1079c -#define TX_TXCC_CTRL 0x10100 -#define DRV_DIAG_TX_DRV 0x10318 -#define TX_TXCC_MGNFS_MULT_000 0x10140 -#define TX_TXCC_CPOST_MULT_00 0x10130 -#define PHY_PMA_CMN_CTRL2 0x38004 -#define PHY_PMA_PLL_RAW_CTRL 0x3800c - -/************************** Function Prototypes ******************************/ - -FError FDptxPhyGetLaneCount(FDpCtrl *instance_p, u8 *lanecount); - -FError FDpTxPhyGetLinkRate(FDpCtrl *instance_p, u32 *linkrate); - -/* DP phy date rate change.*/ -void FDpLinkPhyChangeRate(FDpCtrl *instance_p, u32 link_rate); - -/* Get sink ENHANCED_FRAME_CAP */ -u8 FDpTxPhyGetEnhancedFrameCap(FDpCtrl *instance_p); - -/* configure the PHY for the specified link rate */ -FError FDpTxPhyUpdateLinkRate(FDpCtrl *instance_p, u32 link_rate); - -/* set the lane count in the PHY */ -void FDpTxPhySetLaneCount(FDpCtrl *instance_p, u8 lane_count); - -/*Get voltage swing of a specified lane.Voltage swing has three levels*/ -u8 FDpTxSourceVswingForValue(FDpCtrl *instance_p, u8 lane_num); - -/* Get pre-emphasis level of a specified lane*/ -u8 FDpTxSourcePreemphasisForValue(FDpCtrl *instance_p, u8 lane_num); - -/* Get sink TPS4 support.*/ -u8 FDpTxPhyTps4Supported(FDpCtrl *instance_p); - -/* Get sink TPS3 support.*/ -u8 FDpTxPhyTps3Supported(FDpCtrl *instance_p); - -/* Get Swing and pre-emphasis level form sink*/ -FError FDpTxPhyGetAdjustRequest(FDpCtrl *instance_p, u8 *swing, u8 *pre_emphasis); - -/*Display phy initialization */ -void FDpLinkPhyInit(FDpCtrl *instance_p, u32 link_rate); - -/* Voltage swing and pre-emphasis training.*/ -void FDpLinkPhyChangeVsWing(FDpCtrl *instance_p, u32 vswing, u32 pre_emphasis); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/bsp/phytium/libraries/standalone/drivers/mio/Kconfig b/bsp/phytium/libraries/standalone/drivers/mio/Kconfig deleted file mode 100644 index f92d3360c1..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/mio/Kconfig +++ /dev/null @@ -1,9 +0,0 @@ -menu "Hardware Mio Configuration" - config ENABLE_MIO - bool - prompt "Use Mio" - depends on TARGET_E2000 || TARGET_TARDIGRADE - - default n -endmenu - diff --git a/bsp/phytium/libraries/standalone/drivers/mio/fmio/fmio.c b/bsp/phytium/libraries/standalone/drivers/mio/fmio/fmio.c deleted file mode 100644 index 7c24c102ed..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/mio/fmio/fmio.c +++ /dev/null @@ -1,139 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fmio.c - * Date: 2022-07-06 15:01:30 - * LastEditTime: 2022-07-06 15:01:30 - * Description:  This file is for user external interface - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 liushengming 2022/07/06 first commit - */ - -#include -#include "fmio_hw.h" -#include "fmio.h" - -/***************** Macros (Inline Functions) Definitions *********************/ -#define FMIO_DEBUG_TAG "MIO" -#define FMIO_ERROR(format, ...) FT_DEBUG_PRINT_E(FMIO_DEBUG_TAG, format, ##__VA_ARGS__) -#define FMIO_WARN(format, ...) FT_DEBUG_PRINT_W(FMIO_DEBUG_TAG, format, ##__VA_ARGS__) -#define FMIO_INFO(format, ...) FT_DEBUG_PRINT_I(FMIO_DEBUG_TAG, format, ##__VA_ARGS__) -#define FMIO_DEBUG(format, ...) FT_DEBUG_PRINT_D(FMIO_DEBUG_TAG, format, ##__VA_ARGS__) - -/** - * @name: FMioFuncInit - * @msg: 初始化 - * @return {*} - * @param {FMioCtrl} *instance_p - * @param {u32} mio_type - */ -FError FMioFuncInit(FMioCtrl *instance_p, u32 mio_type) -{ - FASSERT(instance_p); - - FError ret = FMIO_SUCCESS; - - /* - * If the device is started, disallow the initialize and return a Status - * indicating it is started. This allows the user to de-initialize the device - * and reinitialize, but prevents a user from inadvertently - * initializing. - */ - if (FT_COMPONENT_IS_READY == instance_p->is_ready) - { - FMIO_WARN("Device is already initialized."); - } - - ret = FMioSelectFunc(instance_p->config.mio_base_addr,mio_type); - if (FMIO_SUCCESS == ret) - { - instance_p->is_ready = FT_COMPONENT_IS_READY; - } - return ret; -} - -/** - * @name: FMioFuncDeinit - * @msg: 去初始化 - * @return {*} - * @param {FMioCtrl} *instance_p - */ -FError FMioFuncDeinit(FMioCtrl *instance_p) -{ - FASSERT(instance_p); - FError ret = FMIO_SUCCESS; - - instance_p->is_ready = 0; - - /* 重新配置成默认IIC模式 */ - ret = FMioSelectFunc(instance_p->config.mio_base_addr, FMIO_FUNC_SET_I2C); - - memset(instance_p, 0, sizeof(*instance_p)); - - return ret; -} - -/** - * @name: FMioFuncGetAddress - * @msg: 获取功能设置的基地址 - * @return {uintptr} - * @param {FMioCtrl} *instance_p - */ -uintptr FMioFuncGetAddress(FMioCtrl *instance_p,u32 mio_type) -{ - FASSERT(instance_p); - FError ret = FMIO_SUCCESS; - - if (instance_p->is_ready != FT_COMPONENT_IS_READY) - { - FMIO_ERROR("Mio instance_id: %d ,not init.",instance_p->config.instance_id ); - return FMIO_ERR_NOT_READY; - } - - if (FMioGetFunc(instance_p->config.mio_base_addr) != mio_type) - { - FMIO_ERROR("Mio instance_id: %d ,mio_type error, initialize the type first.", instance_p->config.instance_id); - return FMIO_ERR_INVAL_STATE; - } - - return instance_p->config.func_base_addr; -} - -/** - * @name: FMioFuncGetIrqNum - * @msg: 获取MIO的中断号 - * @return {u32}中断号 - * @param {FMioCtrl} *instance_p - */ -u32 FMioFuncGetIrqNum(FMioCtrl *instance_p,u32 mio_type) -{ - FASSERT(instance_p); - FError ret = FMIO_SUCCESS; - - if (instance_p->is_ready != FT_COMPONENT_IS_READY) - { - FMIO_ERROR("Mio instance_id: %d ,not init.",instance_p->config.instance_id); - return FMIO_ERR_NOT_READY; - } - - if (FMioGetFunc(instance_p->config.mio_base_addr) != mio_type) - { - FMIO_ERROR("Mio instance_id: %d ,mio_type error, initialize the type first.", instance_p->config.instance_id); - return FMIO_ERR_INVAL_STATE; - } - - return instance_p->config.irq_num; -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/mio/fmio/fmio.h b/bsp/phytium/libraries/standalone/drivers/mio/fmio/fmio.h deleted file mode 100644 index 2064595197..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/mio/fmio/fmio.h +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fmio.h - * Date: 2022-06-21 15:40:06 - * LastEditTime: 2022-06-21 15:40:06 - * Description:  This file is for user external interface definition - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 liushengming 2022/06/21 first commit - */ - -#ifndef FMIO_H -#define FMIO_H - -#ifdef __cplusplus -extern "C" -{ -#endif - -/***************************** Include Files *********************************/ - -#include "ftypes.h" -#include "ferror_code.h" -#include "fassert.h" - -/************************** Constant Definitions *****************************/ -#define FMIO_SUCCESS FT_SUCCESS -#define FMIO_ERR_INVAL_PARM FT_MAKE_ERRCODE(ErrModBsp, ErrBspMio, 1) -#define FMIO_ERR_NOT_READY FT_MAKE_ERRCODE(ErrModBsp, ErrBspMio, 2) -#define FMIO_ERR_TIMEOUT FT_MAKE_ERRCODE(ErrModBsp, ErrBspMio, 3) -#define FMIO_ERR_NOT_SUPPORT FT_MAKE_ERRCODE(ErrModBsp, ErrBspMio, 4) -#define FMIO_ERR_INVAL_STATE FT_MAKE_ERRCODE(ErrModBsp, ErrBspMio, 5) - -/**************************** Type Definitions *******************************/ - -typedef struct -{ - u32 instance_id; /*mio id*/ - uintptr func_base_addr; /*I2C or UART function address*/ - u32 irq_num; /* Device intrrupt id */ - uintptr mio_base_addr; /*MIO control address*/ -} FMioConfig; /*mio configs*/ - -typedef struct -{ - FMioConfig config; /* mio config */ - u32 is_ready; /* mio initialize the complete flag */ -} FMioCtrl; - -/************************** Function Prototypes ******************************/ -/*获取MIO的配置信息*/ -const FMioConfig *FMioLookupConfig(u32 instance_id); - -/*初始化MIO的功能*/ -FError FMioFuncInit(FMioCtrl *instance_p, u32 mio_type); - -/*去初始化*/ -FError FMioFuncDeinit(FMioCtrl *instance_p); - -/*获取功能配置的基地址*/ -uintptr FMioFuncGetAddress(FMioCtrl *instance_p, u32 mio_type); - -/*获取功能的中断号*/ -u32 FMioFuncGetIrqNum(FMioCtrl *instance_p, u32 mio_type); - -#ifdef __cplusplus -} -#endif - -#endif \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/mio/fmio/fmio_g.c b/bsp/phytium/libraries/standalone/drivers/mio/fmio/fmio_g.c deleted file mode 100644 index 09fd293ab6..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/mio/fmio/fmio_g.c +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fmio_g.c - * Date: 2022-06-20 21:05:07 - * LastEditTime: 2022-06-20 21:05:07 - * Description:  This file is for mio static configuration - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 liushengming 2022/06/20 first commit - */ - -/***************************** Include Files *********************************/ -#include "fparameters.h" -#include "fmio_hw.h" -#include "fmio.h" - -/************************** Constant Definitions *****************************/ - -const FMioConfig FMioConfigTbl[FMIO_NUM] = -{ - { - .instance_id = FMIO0_ID, - .func_base_addr = FMIO_BASE_ADDR(FMIO0_ID), - .irq_num = FMIO_IRQ_NUM(FMIO0_ID), - .mio_base_addr = FMIO_BASE_SET_ADDR(FMIO0_ID) - }, - { - .instance_id = FMIO1_ID, - .func_base_addr = FMIO_BASE_ADDR(FMIO1_ID), - .irq_num = FMIO_IRQ_NUM(FMIO1_ID), - .mio_base_addr = FMIO_BASE_SET_ADDR(FMIO1_ID) - }, - { - .instance_id = FMIO2_ID, - .func_base_addr = FMIO_BASE_ADDR(FMIO2_ID), - .irq_num = FMIO_IRQ_NUM(FMIO2_ID), - .mio_base_addr = FMIO_BASE_SET_ADDR(FMIO2_ID) - }, - { - .instance_id = FMIO3_ID, - .func_base_addr = FMIO_BASE_ADDR(FMIO3_ID), - .irq_num = FMIO_IRQ_NUM(FMIO3_ID), - .mio_base_addr = FMIO_BASE_SET_ADDR(FMIO3_ID) - }, - { - .instance_id = FMIO4_ID, - .func_base_addr = FMIO_BASE_ADDR(FMIO4_ID), - .irq_num = FMIO_IRQ_NUM(FMIO4_ID), - .mio_base_addr = FMIO_BASE_SET_ADDR(FMIO4_ID) - }, - { - .instance_id = FMIO5_ID, - .func_base_addr = FMIO_BASE_ADDR(FMIO5_ID), - .irq_num = FMIO_IRQ_NUM(FMIO5_ID), - .mio_base_addr = FMIO_BASE_SET_ADDR(FMIO5_ID) - }, - { - .instance_id = FMIO6_ID, - .func_base_addr = FMIO_BASE_ADDR(FMIO6_ID), - .irq_num = FMIO_IRQ_NUM(FMIO6_ID), - .mio_base_addr = FMIO_BASE_SET_ADDR(FMIO6_ID) - }, - { - .instance_id = FMIO7_ID, - .func_base_addr = FMIO_BASE_ADDR(FMIO7_ID), - .irq_num = FMIO_IRQ_NUM(FMIO7_ID), - .mio_base_addr = FMIO_BASE_SET_ADDR(FMIO7_ID) - }, -#if defined(CONFIG_TARGET_E2000) - { - .instance_id = FMIO8_ID, - .func_base_addr = FMIO_BASE_ADDR(FMIO8_ID), - .irq_num = FMIO_IRQ_NUM(FMIO8_ID), - .mio_base_addr = FMIO_BASE_SET_ADDR(FMIO8_ID) - }, - { - .instance_id = FMIO9_ID, - .func_base_addr = FMIO_BASE_ADDR(FMIO9_ID), - .irq_num = FMIO_IRQ_NUM(FMIO9_ID), - .mio_base_addr = FMIO_BASE_SET_ADDR(FMIO9_ID) - }, - { - .instance_id = FMIO10_ID, - .func_base_addr = FMIO_BASE_ADDR(FMIO10_ID), - .irq_num = FMIO_IRQ_NUM(FMIO10_ID), - .mio_base_addr = FMIO_BASE_SET_ADDR(FMIO10_ID) - }, - { - .instance_id = FMIO11_ID, - .func_base_addr = FMIO_BASE_ADDR(FMIO11_ID), - .irq_num = FMIO_IRQ_NUM(FMIO11_ID), - .mio_base_addr = FMIO_BASE_SET_ADDR(FMIO11_ID) - }, - { - .instance_id = FMIO12_ID, - .func_base_addr = FMIO_BASE_ADDR(FMIO12_ID), - .irq_num = FMIO_IRQ_NUM(FMIO12_ID), - .mio_base_addr = FMIO_BASE_SET_ADDR(FMIO12_ID) - }, - { - .instance_id = FMIO13_ID, - .func_base_addr = FMIO_BASE_ADDR(FMIO13_ID), - .irq_num = FMIO_IRQ_NUM(FMIO13_ID), - .mio_base_addr = FMIO_BASE_SET_ADDR(FMIO13_ID) - }, - { - .instance_id = FMIO14_ID, - .func_base_addr = FMIO_BASE_ADDR(FMIO14_ID), - .irq_num = FMIO_IRQ_NUM(FMIO14_ID), - .mio_base_addr = FMIO_BASE_SET_ADDR(FMIO14_ID) - }, - { - .instance_id = FMIO15_ID, - .func_base_addr = FMIO_BASE_ADDR(FMIO15_ID), - .irq_num = FMIO_IRQ_NUM(FMIO15_ID), - .mio_base_addr = FMIO_BASE_SET_ADDR(FMIO15_ID) - } -#endif -}; diff --git a/bsp/phytium/libraries/standalone/drivers/mio/fmio/fmio_hw.c b/bsp/phytium/libraries/standalone/drivers/mio/fmio/fmio_hw.c deleted file mode 100644 index c0773f88f1..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/mio/fmio/fmio_hw.c +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fmio_hw.c - * Date: 2022-06-20 21:05:23 - * LastEditTime: 2022-06-20 21:05:23 - * Description:  This file is for mio hardware operation - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 liushengming 2022/06/20 first commit - */ - -/***************************** Include Files *********************************/ - -#include "fmio_hw.h" -#include "ftypes.h" -#include "fassert.h" -#include "fmio.h" -/***************** Macros (Inline Functions) Definitions *********************/ - -#define FMIO_DEBUG_TAG "MIO-HW" -#define FMIO_ERROR(format, ...) FT_DEBUG_PRINT_E(FMIO_DEBUG_TAG, format, ##__VA_ARGS__) -#define FMIO_INFO(format, ...) FT_DEBUG_PRINT_I(FMIO_DEBUG_TAG, format, ##__VA_ARGS__) -#define FMIO_DEBUG(format, ...) FT_DEBUG_PRINT_D(FMIO_DEBUG_TAG, format, ##__VA_ARGS__) -/************************** Function Prototypes ******************************/ - -/** - * @name: FMioSelectFunc - * @msg: 设置Mio功能 - * @return {*} - * @param {uintptr} addr - * @param {u32} mio_type - */ -FError FMioSelectFunc(uintptr addr, u32 mio_type) -{ - FASSERT(mio_type < FMIO_NUM_OF_MIO_FUNC); - FASSERT(addr); - - u32 reg_val; - - reg_val = FMioReadStatus(addr); - - if (mio_type == reg_val) - { - return FMIO_SUCCESS; - } - - FMioWriteFunc(addr, mio_type); - - return FMIO_SUCCESS; -} - -/** - * @name: FMioGetMioFunc - * @msg: 获取Mio状态 - * @return {*} - * @param {uintptr} addr - */ -u32 FMioGetFunc(uintptr addr) -{ - FASSERT(addr); - - return FMioReadStatus(addr); -} - -/** - * @name: FMioGetVersion - * @msg: 获取版本信息,默认32'h1 - * @return {*} - * @param {uintptr} addr - */ -u32 FMioGetVersion(uintptr addr) -{ - FASSERT(addr); - - return FMioReadVersion(addr); -} diff --git a/bsp/phytium/libraries/standalone/drivers/mio/fmio/fmio_hw.h b/bsp/phytium/libraries/standalone/drivers/mio/fmio/fmio_hw.h deleted file mode 100644 index 35120d0445..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/mio/fmio/fmio_hw.h +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fmio_hw.h - * Date: 2022-06-20 21:05:34 - * LastEditTime: 2022-06-20 21:05:34 - * Description:  This file is for mio hardware define - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 liushengming 2022/06/20 init - */ -#ifndef FMIO_HW_H -#define FMIO_HW_H - -#include "fparameters.h" -#include "fio.h" -#include "fkernel.h" -#include "fdebug.h" -#include "ferror_code.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - - -/************************** Constant Definitions *****************************/ - -/** @name Register Map - * - * Register offsets from the base address of MIO device. - * - */ -#define FMIO_BASE_SET_ADDR(x) FMIO_BASE_ADDR(x)+0x1000 - -#define FMIO_FUNC_OFFSET 0x00 -#define FMIO_SEL_STATE_OFFSET 0x04 -#define FMIO_VER_OFFSET 0x100 - -/* creg_mio_func_sel */ -#define FMIO_FUNC_SEL_MASK GENMASK(1,0) -#define FMIO_FUNC_SET(n) (FMIO_FUNC_SEL_MASK & (n)) -enum -{ - FMIO_FUNC_SET_I2C = 0b00, - FMIO_FUNC_SET_UART = 0b01, -#if defined(TARDIGRADE) - FMIO_FUNC_SET_PWM = 0b10, -#endif - FMIO_NUM_OF_MIO_FUNC -}; - -#define FMIO_FUNC_STATE_MASK GENMASK(1, 0) -#define FMIO_VERSION_MASK GENMASK(31, 0) - -/***************** Macros (Inline Functions) Definitions *********************/ -/** - * @name: FMIO_READ_REG32 - * @msg: 读取MIO寄存器 - * @param {u32} addr MIO的基地址 - * @param {u32} reg_offset MIO的寄存器的偏移 - * @return {u32} 寄存器参数 - */ -#define FMIO_READ_REG32(addr, reg_offset) FtIn32(addr + (u32)reg_offset) - -/** - * @name: FMIO_WRITE_REG32 - * @msg: 写入MIO寄存器 - * @param {u32} addr MIO的基地址 - * @param {u32} reg_offset MIO的寄存器的偏移 - * @param {u32} reg_value 写入寄存器参数 - * @return {void} - */ -#define FMIO_WRITE_REG32(addr, reg_offset, reg_value) FtOut32(addr + (u32)reg_offset, (u32)reg_value) - -/** - * @name: FMioWriteFunc - * @msg: 设置MIO的功能 - * @return {*} - * @param {uintptr} addr - * @param {u32} val - */ -static inline void FMioWriteFunc(uintptr addr, u32 val) -{ - FMIO_WRITE_REG32(addr, FMIO_FUNC_OFFSET, val); -} - -/** - * @name: FMioReadStatus - * @msg: 获取MIO的设置 - * @return {u32} register value - * @param {uintptr} addr - */ -static inline u32 FMioReadStatus(uintptr addr) -{ - return FMIO_READ_REG32(addr, FMIO_SEL_STATE_OFFSET) & FMIO_FUNC_STATE_MASK; -} - -/** - * @name: FMioReadVersion - * @msg: 获取MIO的版本信息 - * @return {u32} register value - * @param {uintptr} addr - */ -static inline u32 FMioReadVersion(uintptr addr) -{ - return FMIO_READ_REG32(addr, FMIO_VER_OFFSET) & FMIO_VERSION_MASK; -} - -/************************** Function Prototypes ******************************/ -/*设置Mio功能*/ -FError FMioSelectFunc(uintptr addr, u32 mio_type); - -/*获取Mio状态*/ -u32 FMioGetFunc(uintptr addr); - -/*获取版本信息,默认32'h1*/ -u32 FMioGetVersion(uintptr addr); - -#ifdef __cplusplus -} -#endif - -#endif \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/mio/fmio/fmio_sinit.c b/bsp/phytium/libraries/standalone/drivers/mio/fmio/fmio_sinit.c deleted file mode 100644 index e1dbac3c6f..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/mio/fmio/fmio_sinit.c +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fmio_sinit.c - * Date: 2022-06-20 20:33:25 - * LastEditTime: 2022-06-20 20:33:25 - * Description:  This file is for mio static initialization functionality - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 liushengming 2022/06/20 first commit - */ -#include "ftypes.h" -#include "fparameters.h" -#include "fassert.h" -#include "fmio.h" -#include "fmio_hw.h" - - -extern FMioConfig FMioConfigTbl[FMIO_NUM]; - -/***************** Macros (Inline Functions) Definitions *********************/ -#define FMIO_DEBUG_TAG "MIO" -#define FMIO_ERROR(format, ...) FT_DEBUG_PRINT_E(FMIO_DEBUG_TAG, format, ##__VA_ARGS__) - -/************************** Function Prototypes ******************************/ - -/** - * @name: FMioLookupConfig - * @msg: get mio configs by id - * @param {u32} instance_id, id of mio ctrl - * @return {FMioConfig *}, mio config address - */ -const FMioConfig *FMioLookupConfig(u32 instance_id) -{ - FASSERT(instance_id < FMIO_NUM); - const FMioConfig *pconfig = NULL; - u32 index; - - for (index = 0; index < (u32)FMIO_NUM; index++) - { - if (FMioConfigTbl[index].instance_id == instance_id) - { - pconfig = &FMioConfigTbl[index]; - break; - } - } - return (const FMioConfig *)pconfig; -} diff --git a/bsp/phytium/libraries/standalone/drivers/mmc/Kconfig b/bsp/phytium/libraries/standalone/drivers/mmc/Kconfig deleted file mode 100644 index 4a7b0bf8b9..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/mmc/Kconfig +++ /dev/null @@ -1,17 +0,0 @@ -config ENABLE_FSDMMC - bool - prompt "Use FSdmmc" - default n - depends on USE_SDMMC - help - Select FSdmmc driver component - -config ENABLE_FSDIO - bool - prompt "Use FSdio" - default n - depends on USE_SDMMC - help - Select FSdio driver component - - \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/mmc/fsdio/fsdio.c b/bsp/phytium/libraries/standalone/drivers/mmc/fsdio/fsdio.c deleted file mode 100644 index 6878e6af5d..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/mmc/fsdio/fsdio.c +++ /dev/null @@ -1,558 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fsdio.c - * Date: 2022-05-26 16:27:54 - * LastEditTime: 2022-05-26 16:27:54 - * Description:  This file is for SDIO user function implementation - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2021/12/2 init - * 1.1 zhugengyu 2022/6/6 modify according to tech manual. - */ - -/***************************** Include Files *********************************/ - -#include "fio.h" -#include "fdebug.h" -#include "fassert.h" -#include "ftypes.h" -#include "fsleep.h" - -#include "fcache.h" - -#include "fsdio_hw.h" -#include "fsdio.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ -#define FSDIO_DEBUG_TAG "FSDIO" -#define FSDIO_ERROR(format, ...) FT_DEBUG_PRINT_E(FSDIO_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSDIO_WARN(format, ...) FT_DEBUG_PRINT_W(FSDIO_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSDIO_INFO(format, ...) FT_DEBUG_PRINT_I(FSDIO_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSDIO_DEBUG(format, ...) FT_DEBUG_PRINT_D(FSDIO_DEBUG_TAG, format, ##__VA_ARGS__) - -/************************** Function Prototypes ******************************/ -static FError FSdioReset(FSdio *const instance_p); -static FError FSdioUpdateExternalClk(uintptr base_addr, u32 uhs_reg_val); - -/*****************************************************************************/ -/** - * @name: FSdioCfgInitialize - * @msg: initialization SDIO controller instance - * @return {FError} FSDIO_SUCCESS if initialization success, otherwise failed - * @param {FSdio} *instance_p, SDIO controller instance - * @param {FSdioConfig} *input_config_p, SDIO controller configure - * @note get into card-detect mode after initialization, bus width = 1, card freq = 400kHz - */ -FError FSdioCfgInitialize(FSdio *const instance_p, const FSdioConfig *input_config_p) -{ - FASSERT(instance_p && input_config_p); - FError ret = FSDIO_SUCCESS; - - if (FT_COMPONENT_IS_READY == instance_p->is_ready) - { - FSDIO_WARN("Device is already initialized!!!"); - } - - if (&instance_p->config != input_config_p) - { - instance_p->config = *input_config_p; - } - - ret = FSdioReset(instance_p); /* reset the device */ - - if (FSDIO_SUCCESS == ret) - { - instance_p->is_ready = FT_COMPONENT_IS_READY; - FSDIO_INFO("Device initialize success !!!"); - } - - return ret; -} - -/** - * @name: FSdioDeInitialize - * @msg: deinitialization SDIO controller instance - * @return {NONE} - * @param {FSdio} *instance_p, SDIO controller instance - */ -void FSdioDeInitialize(FSdio *const instance_p) -{ - FASSERT(instance_p); - uintptr base_addr = instance_p->config.base_addr; - - FSdioSetInterruptMask(instance_p, FSDIO_GENERAL_INTR, FSDIO_INT_ALL_BITS, FALSE); /* 关闭控制器中断位 */ - FSdioSetInterruptMask(instance_p, FSDIO_IDMA_INTR, FSDIO_DMAC_INT_ENA_ALL, FALSE); /* 关闭DMA中断位 */ - - FSdioClearRawStatus(base_addr); /* 清除中断状态 */ - FSdioClearDMAStatus(base_addr); - - FSdioSetPower(base_addr, FALSE); /* 关闭电源 */ - FSdioSetClock(base_addr, FALSE); /* 关闭卡时钟 */ - FSDIO_CLR_BIT(base_addr, FSDIO_UHS_REG_EXT_OFFSET, FSDIO_UHS_EXT_CLK_ENA); /* 关闭外部时钟 */ - FSDIO_CLR_BIT(base_addr, FSDIO_UHS_REG_OFFSET, FSDIO_UHS_REG_VOLT_180); /* 恢复为3.3v默认电压 */ - - instance_p->is_ready = 0; -} - -/** - * @name: FSdioSetClkFreq - * @msg: Set the Card clock freqency - * @return {None} - * @param {FSdio} *instance_p, SDIO controller instance - * @param {u32} input_clk_hz, Card clock freqency in Hz - */ -FError FSdioSetClkFreq(FSdio *const instance_p, u32 input_clk_hz) -{ - FASSERT(instance_p); - uintptr base_addr = instance_p->config.base_addr; - u32 div = 0xff, drv = 0, sample = 0; - u32 first_uhs_div, tmp_ext_reg, div_reg; - FError ret = FSDIO_SUCCESS; - - FSDIO_INFO("set clk as %ld.", input_clk_hz); - - /* must set 2nd stage clcok first then set 1st stage clock */ - /* experimental uhs setting --> 2nd stage clock, below setting parameters get from - experiment, for better sample timing */ - if (input_clk_hz >= FSDIO_SD_25_MHZ) /* e.g. 25MHz or 50MHz */ - { - tmp_ext_reg = FSDIO_UHS_REG(0U, 0U, 0x2U) | FSDIO_UHS_EXT_CLK_ENA; - FASSERT(tmp_ext_reg == 0x202); - } - else if (input_clk_hz == FSDIO_SD_400KHZ) /* 400kHz */ - { - tmp_ext_reg = FSDIO_UHS_REG(0U, 0U, 0x5U) | FSDIO_UHS_EXT_CLK_ENA; - FASSERT(tmp_ext_reg == 0x502); - } - else /* e.g. 20MHz */ - { - tmp_ext_reg = FSDIO_UHS_REG(0U, 0U, 0x3U) | FSDIO_UHS_EXT_CLK_ENA; - FASSERT(tmp_ext_reg == 0x302); - } - - /* update uhs setting */ - ret = FSdioUpdateExternalClk(base_addr, tmp_ext_reg); - if (FSDIO_SUCCESS != ret) - { - return ret; - } - - FSdioSetClock(base_addr, FALSE); /* disable clock */ - - /* send private cmd to update clock */ - ret = FSdioSendPrivateCmd(base_addr, FSDIO_CMD_UPD_CLK, 0U); - if (FSDIO_SUCCESS != ret) - { - return ret; - } - - /* experimental clk divide setting -- 1st stage clock */ - first_uhs_div = 1 + FSDIO_UHS_CLK_DIV_GET(tmp_ext_reg); - div = FSDIO_CLK_FREQ_HZ / (2 * first_uhs_div * input_clk_hz); - if (div > 2) - { - sample = div / 2 + 1; - drv = sample - 1; - } - else if (div == 2) - { - drv = 0; - sample = 1; - } - - div_reg = FSDIO_CLK_DIV(sample, drv, div); - FSDIO_WRITE_REG(base_addr, FSDIO_CLKDIV_OFFSET, div_reg); - - FSDIO_INFO("UHS_REG_EXT: %x, CLKDIV: %x", - FSDIO_READ_REG(base_addr, FSDIO_UHS_REG_EXT_OFFSET), - FSDIO_READ_REG(base_addr, FSDIO_CLKDIV_OFFSET)); - - FSdioSetClock(base_addr, TRUE); /* enable clock */ - - /* update clock for 1 stage clock */ - ret = FSdioSendPrivateCmd(base_addr, FSDIO_CMD_UPD_CLK, 0U); - if (FSDIO_SUCCESS != ret) - { - return ret; - } - - FSDIO_INFO("FSdioSetClkFreq done."); - return ret; -} - -/** - * @name: FSdioGetClkFreq - * @msg: Get the real Card clock freqency - * @return {u32} real clock freqency in Hz - * @param {FSdio} *instance_p, SDIO controller instance - */ -u32 FSdioGetClkFreq(FSdio *const instance_p) -{ - FASSERT(instance_p); - uintptr base_addr = instance_p->config.base_addr; - - u32 uhs_reg_val = FSDIO_READ_REG(base_addr, FSDIO_UHS_REG_EXT_OFFSET); - u32 first_uhs_div = 1 + FSDIO_UHS_CLK_DIV_GET(uhs_reg_val); - - u32 div_reg_val = FSDIO_READ_REG(base_addr, FSDIO_CLKDIV_OFFSET); - u32 div = FSDIO_CLK_DIVDER_GET(div_reg_val); - - FSDIO_INFO("uhs_reg_val = 0x%x, div_reg_val = 0x%x", uhs_reg_val, div_reg_val); - FSDIO_INFO("first_div = %d, second_div = %d", first_uhs_div, div); - u32 real_clk_hz = FSDIO_CLK_FREQ_HZ / (2 * first_uhs_div * div); - - return real_clk_hz; -} - -/** - * @name: FSdioUpdateExternalClk - * @msg: update uhs clock value and wait clock ready - * @return {FError} - * @param {uintptr} base_addr - * @param {u32} uhs_reg_val - */ -static FError FSdioUpdateExternalClk(uintptr base_addr, u32 uhs_reg_val) -{ - u32 reg_val; - int retries = FSDIO_TIMEOUT; - FSDIO_WRITE_REG(base_addr, FSDIO_UHS_REG_EXT_OFFSET, 0U); - FSDIO_WRITE_REG(base_addr, FSDIO_UHS_REG_EXT_OFFSET, uhs_reg_val); - - do - { - reg_val = FSDIO_READ_REG(base_addr, FSDIO_GPIO_OFFSET); - if (--retries <= 0) - { - break; - } - } - while (!(reg_val & FSDIO_CLK_READY)); - - return (retries <= 0) ? FSDIO_ERR_TIMEOUT : FSDIO_SUCCESS; -} - -/** - * @name: FSdioResetCtrl - * @msg: Reset fifo/DMA in cntrl register - * @return {FError} FSDIO_SUCCESS if reset success - * @param {uintptr} base_addr, base address of SDIO controller - * @param {u32} reset_bits, bits to be reset - */ -FError FSdioResetCtrl(uintptr base_addr, u32 reset_bits) -{ - u32 reg_val; - int retries = FSDIO_TIMEOUT; - FSDIO_SET_BIT(base_addr, FSDIO_CNTRL_OFFSET, reset_bits); - - do - { - reg_val = FSDIO_READ_REG(base_addr, FSDIO_CNTRL_OFFSET); - if (--retries <= 0) - { - break; - } - } - while (reset_bits & reg_val); - - if (retries <= 0) - { - return FSDIO_ERR_TIMEOUT; - } - - return FSDIO_SUCCESS; -} - -/** - * @name: FSdioResetBusyCard - * @msg: reset controller from card busy state - * @return {FError} FSDIO_SUCCESS if reset success - * @param {uintptr} base_addr, base address of controller - */ -FError FSdioResetBusyCard(uintptr base_addr) -{ - u32 reg_val; - int retries = FSDIO_TIMEOUT; - FSDIO_SET_BIT(base_addr, FSDIO_CNTRL_OFFSET, FSDIO_CNTRL_CONTROLLER_RESET); - - do - { - FSDIO_SET_BIT(base_addr, FSDIO_CNTRL_OFFSET, FSDIO_CNTRL_CONTROLLER_RESET); - reg_val = FSDIO_READ_REG(base_addr, FSDIO_STATUS_OFFSET); - if (--retries <= 0) - { - break; - } - } - while (reg_val & FSDIO_STATUS_DATA_BUSY); - - return (retries <= 0) ? FSDIO_ERR_BUSY : FSDIO_SUCCESS; -} - -/** - * @name: FSdioPollWaitBusyCard - * @msg: poll wait until card not busy - * @return {FError} FSDIO_SUCCESS if exit with card not busy - * @param {FSdio *const} instance_p, instance of controller - */ -FError FSdioPollWaitBusyCard(FSdio *const instance_p) -{ - FASSERT(instance_p); - FASSERT(instance_p->relax_handler); - uintptr base_addr = instance_p->config.base_addr; - u32 reg_val; - FError err = FSDIO_SUCCESS; - int retries = FSDIO_TIMEOUT; - const u32 busy_bits = FSDIO_STATUS_DATA_BUSY | FSDIO_STATUS_DATA_STATE_MC_BUSY; - - reg_val = FSDIO_READ_REG(base_addr, FSDIO_STATUS_OFFSET); - if (reg_val & busy_bits) - { - FSDIO_WARN("Card is busy, waiting ..."); - } - - do - { - reg_val = FSDIO_READ_REG(base_addr, FSDIO_STATUS_OFFSET); - if (--retries <= 0) - { - break; - } - - if (instance_p->relax_handler) - { - instance_p->relax_handler(); /* wait card busy could be time-consuming */ - } - } - while (reg_val & busy_bits); /* wait busy bits empty */ - - if (--retries <= 0) - { - FSDIO_ERROR("Wait card busy timeout !!!"); - err = FSDIO_ERR_TIMEOUT; - } - - return err; -} - -/** - * @name: FSdioRestartClk - * @msg: restart controller clock from error status - * @return {FError} FSDIO_SUCCESS if reset success - * @param {uintptr} base_addr, base address of controller - */ -FError FSdioRestartClk(uintptr base_addr) -{ - u32 clk_div, uhs; - int retries = FSDIO_TIMEOUT; - u32 reg_val; - FError ret = FSDIO_SUCCESS; - - /* wait command finish if previous command is in error state */ - do - { - reg_val = FSDIO_READ_REG(base_addr, FSDIO_CMD_OFFSET); - if (--retries <= 0) - { - break; - } - } - while (reg_val & FSDIO_CMD_START); - - if (retries <= 0) - { - return FSDIO_ERR_TIMEOUT; - } - - /* update clock */ - FSdioSetClock(base_addr, FALSE); - - clk_div = FSDIO_READ_REG(base_addr, FSDIO_CLKDIV_OFFSET); - uhs = FSDIO_READ_REG(base_addr, FSDIO_UHS_REG_EXT_OFFSET); - - ret = FSdioUpdateExternalClk(base_addr, uhs); - if (FSDIO_SUCCESS != ret) - { - return ret; - } - - FSDIO_WRITE_REG(base_addr, FSDIO_CLKDIV_OFFSET, clk_div); - - FSdioSetClock(base_addr, TRUE); - - ret = FSdioSendPrivateCmd(base_addr, FSDIO_CMD_UPD_CLK, 0U); - - return ret; -} - -/** - * @name: FSdioReset - * @msg: Reset SDIO controller instance - * @return {FError} FSDIO_SUCCESS if reset success - * @param {FSdio} *instance_p, SDIO controller instance - */ -static FError FSdioReset(FSdio *const instance_p) -{ - FASSERT(instance_p); - uintptr base_addr = instance_p->config.base_addr; - u32 reg_val; - FError ret = FSDIO_SUCCESS; - - /* set fifo */ - reg_val = FSDIO_FIFOTH(FSDIO_FIFOTH_DMA_TRANS_8, FSDIO_RX_WMARK, FSDIO_TX_WMARK); - FSDIO_WRITE_REG(base_addr, FSDIO_FIFOTH_OFFSET, reg_val); - - /* set card threshold */ - reg_val = FSDIO_CARD_THRCTL_THRESHOLD(FSDIO_FIFO_DEPTH_8) | FSDIO_CARD_THRCTL_CARDRD; - FSDIO_WRITE_REG(base_addr, FSDIO_CARD_THRCTL_OFFSET, reg_val); - - /* disable clock and update ext clk */ - FSdioSetClock(base_addr, FALSE); - - /* set 1st clock */ - reg_val = FSDIO_UHS_REG(0U, 0U, 0x5U) | FSDIO_UHS_EXT_CLK_ENA; - FASSERT_MSG(0x502 == reg_val, "invalid uhs config"); - ret = FSdioUpdateExternalClk(base_addr, reg_val); - if (FSDIO_SUCCESS != ret) - { - FSDIO_ERROR("Update extern clock failed !!!"); - return ret; - } - - /* power on */ - FSdioSetPower(base_addr, TRUE); - FSdioSetClock(base_addr, TRUE); - FSdioSetExtClock(base_addr, TRUE); - - /* set voltage as 3.3v */ - if (FSDIO_SD_1_8V_VOLTAGE == instance_p->config.voltage) - { - FSdioSetVoltage1_8V(base_addr, TRUE); - } - else - { - FSdioSetVoltage1_8V(base_addr, FALSE); - } - - /* reset controller and card */ - ret = FSdioResetCtrl(base_addr, FSDIO_CNTRL_FIFO_RESET | FSDIO_CNTRL_DMA_RESET); - if (FSDIO_SUCCESS != ret) - { - FSDIO_ERROR("Reset controller failed !!!"); - return ret; - } - - /* send private command to update clock */ - ret = FSdioSendPrivateCmd(base_addr, FSDIO_CMD_UPD_CLK, 0U); - if (FSDIO_SUCCESS != ret) - { - FSDIO_ERROR("Update clock failed !!!"); - return ret; - } - - /* reset card for no-removeable media, e.g. eMMC */ - if (TRUE == instance_p->config.non_removable) - { - FSDIO_SET_BIT(base_addr, FSDIO_CARD_RESET_OFFSET, FSDIO_CARD_RESET_ENABLE); - } - else - { - FSDIO_CLR_BIT(base_addr, FSDIO_CARD_RESET_OFFSET, FSDIO_CARD_RESET_ENABLE); - } - - /* clear interrupt status */ - FSDIO_WRITE_REG(base_addr, FSDIO_INT_MASK_OFFSET, 0U); - reg_val = FSDIO_READ_REG(base_addr, FSDIO_RAW_INTS_OFFSET); - FSDIO_WRITE_REG(base_addr, FSDIO_RAW_INTS_OFFSET, reg_val); - - FSDIO_WRITE_REG(base_addr, FSDIO_DMAC_INT_EN_OFFSET, 0U); - reg_val = FSDIO_READ_REG(base_addr, FSDIO_DMAC_STATUS_OFFSET); - FSDIO_WRITE_REG(base_addr, FSDIO_DMAC_STATUS_OFFSET, reg_val); - - /* enable card detect interrupt */ - if (FALSE == instance_p->config.non_removable) - { - FSDIO_SET_BIT(base_addr, FSDIO_INT_MASK_OFFSET, FSDIO_INT_CD_BIT); - } - - /* enable controller and internal DMA */ - FSDIO_SET_BIT(base_addr, FSDIO_CNTRL_OFFSET, FSDIO_CNTRL_INT_ENABLE | FSDIO_CNTRL_USE_INTERNAL_DMAC); - - /* set data and resp timeout */ - FSDIO_WRITE_REG(base_addr, FSDIO_TMOUT_OFFSET, - FSDIO_TIMEOUT_DATA(FSDIO_MAX_DATA_TIMEOUT, FSDIO_MAX_RESP_TIMEOUT)); - - /* reset descriptors and dma */ - FSdioSetDescriptor(base_addr, (uintptr)NULL); /* set decriptor list as NULL */ - FSdioResetIDMA(base_addr); - - FSDIO_INFO("Init hardware done !!!"); - return ret; -} - -/** - * @name: FSdioRestart - * @msg: reset controller from error state - * @return {FError} FSDIO_SUCCESS if restart success - * @param {FSdio} *instance_p, instance of controller - */ -FError FSdioRestart(FSdio *const instance_p) -{ - FASSERT(instance_p); - uintptr base_addr = instance_p->config.base_addr; - FError ret = FSDIO_SUCCESS; - - if (FT_COMPONENT_IS_READY != instance_p->is_ready) - { - FSDIO_ERROR("Device is not yet initialized!!!"); - return FSDIO_ERR_NOT_INIT; - } - - /* reset controller */ - ret = FSdioResetCtrl(base_addr, FSDIO_CNTRL_FIFO_RESET); - if (FSDIO_SUCCESS != ret) - { - return ret; - } - - /* reset controller if in busy state */ - ret = FSdioResetBusyCard(base_addr); - if (FSDIO_SUCCESS != ret) - { - return ret; - } - - /* reset clock */ - ret = FSdioRestartClk(base_addr); - if (FSDIO_SUCCESS != ret) - { - return ret; - } - - /* reset internal DMA */ - FSdioResetIDMA(base_addr); - - return ret; -} - -void FSdioRegisterRelaxHandler(FSdio *const instance_p, FSdioRelaxHandler relax_handler) -{ - FASSERT(instance_p); - instance_p->relax_handler = relax_handler; -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/mmc/fsdio/fsdio.h b/bsp/phytium/libraries/standalone/drivers/mmc/fsdio/fsdio.h deleted file mode 100644 index 3560a65c79..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/mmc/fsdio/fsdio.h +++ /dev/null @@ -1,241 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fsdio.h - * Date: 2022-05-26 16:20:52 - * LastEditTime: 2022-05-26 16:20:53 - * Description:  This file is for sdio user interface definition - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2021/12/2 init - * 1.1 zhugengyu 2022/6/6 modify according to tech manual. - * 1.2 zhugengyu 2022/7/15 adopt to e2000 - * 1.3 zhugengyu 2022/11/23 fix multi-block rw issues - */ - -#ifndef FSDIO_H -#define FSDIO_H - -/***************************** Include Files *********************************/ - -#include "ftypes.h" -#include "ferror_code.h" -#include "fkernel.h" - -#ifdef __cplusplus -extern "C" -{ -#endif -/************************** Constant Definitions *****************************/ - -/* SDIO driver error code */ -#define FSDIO_SUCCESS FT_SUCCESS -#define FSDIO_ERR_TIMEOUT FT_MAKE_ERRCODE(ErrModBsp, ErrBspMmc, 1) -#define FSDIO_ERR_NOT_INIT FT_MAKE_ERRCODE(ErrModBsp, ErrBspMmc, 2) -#define FSDIO_ERR_SHORT_BUF FT_MAKE_ERRCODE(ErrModBsp, ErrBspMmc, 3) -#define FSDIO_ERR_NOT_SUPPORT FT_MAKE_ERRCODE(ErrModBsp, ErrBspMmc, 4) -#define FSDIO_ERR_INVALID_STATE FT_MAKE_ERRCODE(ErrModBsp, ErrBspMmc, 5) -#define FSDIO_ERR_TRANS_TIMEOUT FT_MAKE_ERRCODE(ErrModBsp, ErrBspMmc, 6) -#define FSDIO_ERR_CMD_TIMEOUT FT_MAKE_ERRCODE(ErrModBsp, ErrBspMmc, 7) -#define FSDIO_ERR_NO_CARD FT_MAKE_ERRCODE(ErrModBsp, ErrBspMmc, 8) -#define FSDIO_ERR_BUSY FT_MAKE_ERRCODE(ErrModBsp, ErrBspMmc, 9) -#define FSDIO_ERR_DMA_BUF_UNALIGN FT_MAKE_ERRCODE(ErrModBsp, ErrBspMmc, 10) - -typedef enum -{ - FSDIO_IDMA_TRANS_MODE, /* DMA trans mode */ - FSDIO_PIO_TRANS_MODE, /* NO-DMA trans by read/write Fifo */ -} FSdioTransMode; /* SDIO trans mode */ - -typedef enum -{ - FSDIO_GENERAL_INTR, /* interrupt status belongs to controller */ - FSDIO_IDMA_INTR, /* interrupt status belongs to DMA */ -} FSdioIntrType; /* SDIO interrupt status type */ - -typedef enum -{ - FSDIO_SD_3_3V_VOLTAGE = 0, /* 3.3v */ - FSDIO_SD_1_8V_VOLTAGE /* 1.8v */ -} FSdioVoltageType; /* SDIO card voltage type */ - -typedef enum -{ - FSDIO_EVT_CARD_DETECTED = 0, /* card detected event */ - FSDIO_EVT_CMD_DONE, /* cmd transfer finish event */ - FSDIO_EVT_DATA_DONE, /* cmd with data transfer finish event */ - FSDIO_EVT_ERR_OCCURE, /* error occurred in transfer */ - - FSDIO_NUM_OF_EVT -} FSdioEvtType; /* SDIO event type */ - -#define FSDIO_SD_400KHZ 400000U -#define FSDIO_SD_25_MHZ 25000000U -#define FSDIO_SD_50_MHZ 50000000U -/**************************** Type Definitions *******************************/ -typedef struct _FSdio FSdio; - -typedef void (*FSdioRelaxHandler)(void); -typedef void (*FSdioEvtHandler)(FSdio *const instance_p, void *args, u32 status, u32 dmac_status); - -typedef struct -{ - u32 attribute; /* ds0 */ -#define FSDIO_IDMAC_DES0_DIC BIT(1)/* 内部描述表不触发TI/RI中断 */ -#define FSDIO_IDMAC_DES0_LD BIT(2)/* 数据的最后一个描述符 */ -#define FSDIO_IDMAC_DES0_FD BIT(3)/* 数据的第一个描述符 */ -#define FSDIO_IDMAC_DES0_CH BIT(4)/* 链接下一个描述符地址 */ -#define FSDIO_IDMAC_DES0_ER BIT(5)/* 链表已经到达最后一个链表 */ -#define FSDIO_IDMAC_DES0_CES BIT(30)/* RINTSTS寄存器错误汇总 */ -#define FSDIO_IDMAC_DES0_OWN BIT(31)/* 描述符关联DMA,完成传输后该位置置0 */ - u32 non1; /* ds1 --> unused */ - u32 len; /* ds2 bit[25:13] buffer2 size,bit[12:0] buffer1 size*/ -#define FSDIO_IDMAC_DES2_BUF1_MASK GENMASK(12, 0) -#define FSDIO_IDMAC_DES2_BUF1_SIZE(x) (FSDIO_IDMAC_DES2_BUF1_MASK & (x)) -#define FSDIO_IDMAC_DES2_BUF2_MASK GENMASK(25, 13) -#define FSDIO_IDMAC_DES2_BUF2_SIZE(x) (FSDIO_IDMAC_DES2_BUF2_MASK & (x << 13)) - u32 non2; /* ds3 --> unused */ - u32 addr_lo; /* ds4 Lower 32-bits of Buffer Address Pointer 1 --> buffer 1 */ - u32 addr_hi; /* ds5 Upper 32-bits of Buffer Address Pointer 1 */ - u32 desc_lo; /* ds6 Lower 32-bits of Next Descriptor Address --> buffer 2 */ - u32 desc_hi; /* ds7 Upper 32-bits of Next Descriptor Address */ -} __attribute__((packed)) __attribute((aligned(4))) FSdioIDmaDesc; /* SDIO DMA descriptr */ - -typedef struct -{ - volatile FSdioIDmaDesc *first_desc; /* first descriptor in the list */ - volatile uintptr first_desc_p; - u32 desc_num; /* num of descriptors in the list */ -} FSdioIDmaDescList; /* SDIO DMA descriptors list */ - -typedef struct -{ - u8 *buf; /* trans buffer */ - uintptr buf_p; - u32 blksz; /* card block size */ - u32 blkcnt; /* num of block in trans */ - u32 datalen; /* bytes in trans */ -} FSdioData; /* SDIO trans data */ - -typedef struct -{ - u32 cmdidx; /* command index */ - u32 cmdarg; /* command argument */ - u32 response[4]; /* command response buffer */ - u32 flag; /* command flags */ -#define FSDIO_CMD_FLAG_NEED_INIT BIT(1) /* need initialization */ -#define FSDIO_CMD_FLAG_EXP_RESP BIT(2) /* need reply */ -#define FSDIO_CMD_FLAG_EXP_LONG_RESP BIT(3) /* need 136 bits long reply */ -#define FSDIO_CMD_FLAG_NEED_RESP_CRC BIT(4) /* need CRC */ -#define FSDIO_CMD_FLAG_EXP_DATA BIT(5) /* need trans data */ -#define FSDIO_CMD_FLAG_WRITE_DATA BIT(6) /* need trans data to write card */ -#define FSDIO_CMD_FLAG_READ_DATA BIT(7) /* need trans data to read card */ -#define FSDIO_CMD_FLAG_NEED_AUTO_STOP BIT(8) /* need auto stop after command */ -#define FSDIO_CMD_FLAG_ADTC BIT(9) /* need ADTC */ -#define FSDIO_CMD_FLAG_SWITCH_VOLTAGE BIT(10) /* need switch voltage */ - FSdioData *data_p; /* SDIO trans data */ - volatile boolean success; /* TRUE: comand and data transfer success */ -} FSdioCmdData; /* SDIO trans command and data */ - -typedef struct -{ - u32 instance_id; /* Device instance id */ - uintptr base_addr; /* Device base address */ - u32 irq_num; /* Interrupt num */ - FSdioTransMode trans_mode; /* Trans mode, PIO/DMA */ - FSdioVoltageType voltage; /* Card voltage type */ - boolean non_removable; /* No removeable media, e.g eMMC */ - boolean filp_resp_byte_order; /* Some SD protocol implmentation may not do byte-order filp */ -} FSdioConfig; /* SDIO intance configuration */ - -typedef struct _FSdio -{ - FSdioConfig config; /* Current active configs */ - u32 is_ready; /* Device is initialized and ready */ - FSdioIDmaDescList desc_list; /* DMA descriptor list, valid in DMA trans mode */ - FSdioEvtHandler evt_handlers[FSDIO_NUM_OF_EVT]; /* call-backs for interrupt event */ - void *evt_args[FSDIO_NUM_OF_EVT]; /* arguments for event call-backs */ - FSdioRelaxHandler relax_handler; - u32 prev_cmd; /* record previous command code */ -} FSdio; /* SDIO intance */ -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ - -/* Get the device instance default configure */ -const FSdioConfig *FSdioLookupConfig(u32 instance_id); - -/* initialization SDIO controller instance */ -FError FSdioCfgInitialize(FSdio *const instance_p, const FSdioConfig *cofig_p); - -/* deinitialization SDIO controller instance */ -void FSdioDeInitialize(FSdio *const instance_p); - -/* Setup DMA descriptor for SDIO controller instance */ -FError FSdioSetIDMAList(FSdio *const instance_p, volatile FSdioIDmaDesc *desc, u32 desc_num); - -/* Set the Card clock freqency */ -FError FSdioSetClkFreq(FSdio *const instance_p, u32 input_clk_hz); - -/* Get the real Card clock freqency */ -u32 FSdioGetClkFreq(FSdio *const instance_p); - -/* Start command and data transfer in DMA mode */ -FError FSdioDMATransfer(FSdio *const instance_p, FSdioCmdData *const cmd_data_p); - -/* Wait DMA transfer finished by poll */ -FError FSdioPollWaitDMAEnd(FSdio *const instance_p, FSdioCmdData *const cmd_data_p); - -/* Start command and data transfer in PIO mode */ -FError FSdioPIOTransfer(FSdio *const instance_p, FSdioCmdData *const cmd_data_p); - -/* Wait PIO transfer finished by poll */ -FError FSdioPollWaitPIOEnd(FSdio *const instance_p, FSdioCmdData *const cmd_data_p); - -/* Get cmd response and received data after wait poll status or interrupt signal */ -FError FSdioGetCmdResponse(FSdio *const instance_p, FSdioCmdData *const cmd_data_p); - -/* Get SDIO controller interrupt mask */ -u32 FSdioGetInterruptMask(FSdio *const instance_p, FSdioIntrType intr_type); - -/* Enable/Disable SDIO controller interrupt */ -void FSdioSetInterruptMask(FSdio *const instance_p, FSdioIntrType type, u32 set_mask, boolean enable); - -/* Interrupt handler for SDIO instance */ -void FSdioInterruptHandler(s32 vector, void *param); - -/* Reset controller from error state */ -FError FSdioRestart(FSdio *const instance_p); - -/* Register event call-back function as handler for interrupt events */ -void FSdioRegisterEvtHandler(FSdio *const instance_p, FSdioEvtType evt, FSdioEvtHandler handler, void *handler_arg); - -/* Register sleep call-back function */ -void FSdioRegisterRelaxHandler(FSdio *const instance_p, FSdioRelaxHandler relax_handler); - -/* Dump all register value of SDIO instance */ -void FSdioDumpRegister(uintptr base_addr); - -/* Dump command and data info */ -void FSdioDumpCmdInfo(FSdioCmdData *const cmd_data); - -#ifdef __cplusplus -} -#endif - - -#endif \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/mmc/fsdio/fsdio_cmd.c b/bsp/phytium/libraries/standalone/drivers/mmc/fsdio/fsdio_cmd.c deleted file mode 100644 index 32f253d6d0..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/mmc/fsdio/fsdio_cmd.c +++ /dev/null @@ -1,258 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fsdio_cmd.c - * Date: 2022-06-01 14:23:59 - * LastEditTime: 2022-06-01 14:24:00 - * Description:  This file is for SDIO command related function - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.1 zhugengyu 2022/6/6 modify according to tech manual. - */ -/***************************** Include Files *********************************/ - -#include "fio.h" -#include "fdebug.h" -#include "fassert.h" -#include "ftypes.h" - -#include "fcache.h" -#include "fswap.h" - -#include "fsdio_hw.h" -#include "fsdio.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ -#define FSDIO_EXT_APP_CMD 55U - -/***************** Macros (Inline Functions) Definitions *********************/ -#define FSDIO_DEBUG_TAG "FSDIO-CMD" -#define FSDIO_ERROR(format, ...) FT_DEBUG_PRINT_E(FSDIO_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSDIO_WARN(format, ...) FT_DEBUG_PRINT_W(FSDIO_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSDIO_INFO(format, ...) FT_DEBUG_PRINT_I(FSDIO_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSDIO_DEBUG(format, ...) FT_DEBUG_PRINT_D(FSDIO_DEBUG_TAG, format, ##__VA_ARGS__) - -/************************** Function Prototypes ******************************/ -extern FError FSdioPIOReadData(FSdio *const instance_p, FSdioData *data_p); - -/*****************************************************************************/ -FError FSdioSendPrivateCmd(uintptr base_addr, u32 cmd, u32 arg) -{ - u32 reg_val; - int retries = FSDIO_TIMEOUT; - - do - { - reg_val = FSDIO_READ_REG(base_addr, FSDIO_STATUS_OFFSET); - if (--retries <= 0) - { - break; - } - } - while (FSDIO_STATUS_DATA_BUSY & reg_val); - - if (retries <= 0) - { - return FSDIO_ERR_BUSY; - } - - FSDIO_WRITE_REG(base_addr, FSDIO_CMD_ARG_OFFSET, arg); - - FSDIO_DATA_BARRIER(); /* drain writebuffer */ - - FSDIO_WRITE_REG(base_addr, FSDIO_CMD_OFFSET, FSDIO_CMD_START | cmd); - - retries = FSDIO_TIMEOUT; - do - { - reg_val = FSDIO_READ_REG(base_addr, FSDIO_CMD_OFFSET); - if (--retries <= 0) - { - break; - } - } - while (FSDIO_CMD_START & reg_val); /* wait until command send done */ - - return (retries <= 0) ? FSDIO_ERR_TIMEOUT : FSDIO_SUCCESS; -} - -/** - * @name: FSdioTransferCmd - * @msg: pack and transfer command - * @return {FError} FSDIO_SUCCESS if transfer success - * @param {FSdio} *instance_p, SDIO controller instance - * @param {FSdioCmdData} *cmd_data_p, contents of transfer command and data - */ -FError FSdioTransferCmd(FSdio *const instance_p, FSdioCmdData *const cmd_data_p) -{ - FASSERT(cmd_data_p); - FError ret = FSDIO_SUCCESS; - uintptr base_addr = instance_p->config.base_addr; - u32 cmd_flag = cmd_data_p->flag; - u32 raw_cmd = FSDIO_CMD_USE_HOLD_REG; /* USE_HOLD_REG必须为1 */ - - /* 命令需要进行卡初始化,如CMD-0 */ - if (FSDIO_CMD_FLAG_NEED_INIT & cmd_flag) - { - raw_cmd |= FSDIO_CMD_INIT; - } - - /* 命令涉及电压切换 */ - if (FSDIO_CMD_FLAG_SWITCH_VOLTAGE & cmd_flag) - { - raw_cmd |= FSDIO_CMD_VOLT_SWITCH; - } - - /* 命令传输过程伴随数据传输 */ - if (FSDIO_CMD_FLAG_EXP_DATA & cmd_flag) - { - raw_cmd |= FSDIO_CMD_DAT_EXP; - - if (FSDIO_CMD_FLAG_WRITE_DATA & cmd_flag) /* 写卡 */ - { - raw_cmd |= FSDIO_CMD_DAT_WRITE; - } - } - - /* 命令需要进行CRC校验 */ - if (FSDIO_CMD_FLAG_NEED_RESP_CRC & cmd_flag) - { - raw_cmd |= FSDIO_CMD_RESP_CRC; - } - - /* 命令需要响应回复 */ - if (FSDIO_CMD_FLAG_EXP_RESP & cmd_flag) - { - raw_cmd |= FSDIO_CMD_RESP_EXP; - - if (FSDIO_CMD_FLAG_EXP_LONG_RESP & cmd_flag) /* 命令需要136字节长回复 */ - { - raw_cmd |= FSDIO_CMD_RESP_LONG; - } - } - - raw_cmd |= FSDIO_CMD_INDX_SET(cmd_data_p->cmdidx); - - FSDIO_DEBUG("============[%s-%d]@0x%x begin ============", - (FSDIO_EXT_APP_CMD == instance_p->prev_cmd) ? "ACMD" : "CMD", cmd_data_p->cmdidx, - base_addr); - FSDIO_DEBUG(" cmd: 0x%x", raw_cmd); - FSDIO_DEBUG(" arg: 0x%x", cmd_data_p->cmdarg); - - /* enable related interrupt */ - FSdioSetInterruptMask(instance_p, FSDIO_GENERAL_INTR, - FSDIO_INTS_CMD_MASK, TRUE); - - ret = FSdioSendPrivateCmd(base_addr, raw_cmd, cmd_data_p->cmdarg); - FSDIO_INFO("cmd send done ..."); - return ret; -} - -static void FSdioFlipByteOrder(u32 *response, fsize_t size) -{ - /* - swap response and convert byte order - resp[0] = bswap32(resp[3]) - resp[1] = bswap32(resp[2]) - resp[2] = bswap32(resp[1]) - resp[3] = bswap32(resp[0]) - */ - FASSERT(size % (2 * sizeof(u32)) == 0); - const fsize_t n_words = size / sizeof(uint32_t); - for (int i = 0; i < (int)n_words / 2; ++i) - { - u32 left = __builtin_bswap32(response[i]); - u32 right = __builtin_bswap32(response[n_words - i - 1]); - response[i] = right; - response[n_words - i - 1] = left; - } -} - -/** - * @name: FSdioGetCmdResponse - * @msg: Get cmd response and received data after wait poll status or interrupt signal - * @return {FError} FSDIO_SUCCESS if get success - * @param {FSdio} *instance_p, SDIO controller instance - * @param {FSdioCmdData} *cmd_data_p, contents of transfer command and data - */ -FError FSdioGetCmdResponse(FSdio *const instance_p, FSdioCmdData *const cmd_data_p) -{ - FASSERT(instance_p); - FASSERT(cmd_data_p); - FError ret = FSDIO_SUCCESS; - const boolean read = cmd_data_p->flag & FSDIO_CMD_FLAG_READ_DATA; - uintptr base_addr = instance_p->config.base_addr; - - if (FT_COMPONENT_IS_READY != instance_p->is_ready) - { - FSDIO_ERROR("Device is not yet initialized!!!"); - return FSDIO_ERR_NOT_INIT; - } - - if ((NULL != cmd_data_p->data_p) && (read)) - { - if (FSDIO_PIO_TRANS_MODE == instance_p->config.trans_mode) - { - ret = FSdioPIOReadData(instance_p, cmd_data_p->data_p); - } - } - - /* check response of cmd */ - if (FSDIO_CMD_FLAG_EXP_RESP & cmd_data_p->flag) - { - if (FSDIO_CMD_FLAG_EXP_LONG_RESP & cmd_data_p->flag) - { - cmd_data_p->response[0] = FSDIO_READ_REG(base_addr, FSDIO_RESP0_OFFSET); - cmd_data_p->response[1] = FSDIO_READ_REG(base_addr, FSDIO_RESP1_OFFSET); - cmd_data_p->response[2] = FSDIO_READ_REG(base_addr, FSDIO_RESP2_OFFSET); - cmd_data_p->response[3] = FSDIO_READ_REG(base_addr, FSDIO_RESP3_OFFSET); - - /* according to SD spec. 136 bits R2 is send-back in reverse order and big-end, - some SD protocol will do this reverse and ntol itself, other do not, - filp_resp_byte_order is to compilant with those not */ - if (instance_p->config.filp_resp_byte_order) - { - FSdioFlipByteOrder(cmd_data_p->response, sizeof(u32) * 4); - } - - FSDIO_DEBUG(" resp: 0x%x-0x%x-0x%x-0x%x", - cmd_data_p->response[0], cmd_data_p->response[1], - cmd_data_p->response[2], cmd_data_p->response[3]); - } - else - { - cmd_data_p->response[0] = FSDIO_READ_REG(base_addr, FSDIO_RESP0_OFFSET); - cmd_data_p->response[1] = 0U; - cmd_data_p->response[2] = 0U; - cmd_data_p->response[3] = 0U; - FSDIO_DEBUG(" resp: 0x%x", cmd_data_p->response[0]); - } - } - - cmd_data_p->success = TRUE; /* cmd / data transfer finished successful */ - FSDIO_DEBUG("============[%s-%d]@0x%x end ============", - (FSDIO_EXT_APP_CMD == instance_p->prev_cmd) ? "ACMD" : "CMD", - cmd_data_p->cmdidx, base_addr); - - /* disable related interrupt */ - FSdioSetInterruptMask(instance_p, FSDIO_GENERAL_INTR, FSDIO_INTS_CMD_MASK | FSDIO_INTS_DATA_MASK, FALSE); - FSdioSetInterruptMask(instance_p, FSDIO_IDMA_INTR, FSDIO_DMAC_INTS_MASK, FALSE); - - instance_p->prev_cmd = cmd_data_p->cmdidx; /* record previous command */ - - return ret; -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/mmc/fsdio/fsdio_dma.c b/bsp/phytium/libraries/standalone/drivers/mmc/fsdio/fsdio_dma.c deleted file mode 100644 index ea9d8719d7..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/mmc/fsdio/fsdio_dma.c +++ /dev/null @@ -1,382 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fsdio_dma.c - * Date: 2022-06-01 14:21:41 - * LastEditTime: 2022-06-01 14:21:42 - * Description:  This file is for DMA related function implementation - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.1 zhugengyu 2022/6/6 modify according to tech manual. - */ -/***************************** Include Files *********************************/ -#include - -#include "fio.h" -#include "fdebug.h" -#include "fassert.h" -#include "ftypes.h" - -#include "fsdio_hw.h" -#include "fsdio.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ -#define FSDIO_DEBUG_TAG "FSDIO-DMA" -#define FSDIO_ERROR(format, ...) FT_DEBUG_PRINT_E(FSDIO_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSDIO_WARN(format, ...) FT_DEBUG_PRINT_W(FSDIO_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSDIO_INFO(format, ...) FT_DEBUG_PRINT_I(FSDIO_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSDIO_DEBUG(format, ...) FT_DEBUG_PRINT_D(FSDIO_DEBUG_TAG, format, ##__VA_ARGS__) - -/************************** Function Prototypes ******************************/ -extern FError FSdioTransferCmd(FSdio *const instance_p, FSdioCmdData *const cmd_data_p); -extern FError FSdioPollWaitBusyCard(FSdio *const instance_p); - -/*****************************************************************************/ -/** - * @name: FSdioDumpDMADescriptor - * @msg: dump DMA descriptor list - * @return {*} - * @param {FSdio} *instance_p, instance of controller - * @param {u32} desc_in_use, max index of descriptor in use - */ -static void FSdioDumpDMADescriptor(FSdio *const instance_p, u32 desc_in_use) -{ - u32 loop; - volatile FSdioIDmaDesc *cur_desc = NULL; - - if (instance_p->desc_list.first_desc) - { - for (loop = 0; loop < desc_in_use; loop++) - { - cur_desc = &(instance_p->desc_list.first_desc[loop]); - FSDIO_DEBUG("descriptor@%p", cur_desc); - FSDIO_DEBUG("\tattribute: 0x%x", cur_desc->attribute); - FSDIO_DEBUG("\tnon1: 0x%x", cur_desc->non1); - FSDIO_DEBUG("\tlen: 0x%x", cur_desc->len); - FSDIO_DEBUG("\tnon2: 0x%x", cur_desc->non2); - FSDIO_DEBUG("\taddr_lo: 0x%x", cur_desc->addr_lo); - FSDIO_DEBUG("\taddr_hi: 0x%x", cur_desc->addr_hi); - FSDIO_DEBUG("\tdesc_lo: 0x%x", cur_desc->desc_lo); - FSDIO_DEBUG("\tdesc_hi: 0x%x", cur_desc->desc_hi); - } - } -} - -/** - * @name: FSdioSetupDMADescriptor - * @msg: setup DMA descriptor list before do transcation - * @return {FError} FSDIO_SUCCESS if setup success - * @param {FSdio} *instance_p, instance of controller - * @param {FSdioData} *data_p, data in transcation - */ -static FError FSdioSetupDMADescriptor(FSdio *const instance_p, FSdioData *data_p) -{ - FASSERT(data_p); - FASSERT(instance_p->desc_list.first_desc); - u32 loop; - u32 buf_num = data_p->datalen / data_p->blksz + - ((data_p->datalen % data_p->blksz) ? 1U : 0U); - volatile FSdioIDmaDesc *cur_desc = NULL; - uintptr buff_addr = 0U; - uintptr desc_addr = 0U; - boolean is_first = TRUE; - boolean is_last = FALSE; - - if (buf_num > instance_p->desc_list.desc_num) - { - FSDIO_ERROR("Descriptor is too short to transfer %d < %d.", - instance_p->desc_list.desc_num, buf_num); - return FSDIO_ERR_SHORT_BUF; - } - - memset((void *)instance_p->desc_list.first_desc, 0, - sizeof(FSdioIDmaDesc) * instance_p->desc_list.desc_num); - - FSDIO_INFO("%d of descriptor is in using.", buf_num); - for (loop = 0U; loop < buf_num; loop++) - { - cur_desc = &(instance_p->desc_list.first_desc[loop]); - is_first = (0U == loop) ? TRUE : FALSE; - is_last = ((buf_num - 1U) == loop) ? TRUE : FALSE; - - /* set properity of descriptor entry */ - cur_desc->attribute = FSDIO_IDMAC_DES0_CH | FSDIO_IDMAC_DES0_OWN; /* descriptor list in chain, and set OWN bit */ - cur_desc->attribute |= (is_first) ? FSDIO_IDMAC_DES0_FD : 0; /* is it the first entry ? */ - cur_desc->attribute |= (is_last) ? (FSDIO_IDMAC_DES0_LD | FSDIO_IDMAC_DES0_ER) : 0; /* is it the last entry ? */ - - /* set data length in transfer */ - cur_desc->non1 = 0U; - cur_desc->len = FSDIO_IDMAC_DES2_BUF1_SIZE(data_p->blksz) | FSDIO_IDMAC_DES2_BUF2_SIZE(0U); - - /* set data buffer for transfer */ - buff_addr = data_p->buf_p + (uintptr)(loop * data_p->blksz); - if (buff_addr % data_p->blksz) /* make sure buffer aligned and not cross page boundary */ - { - FSDIO_ERROR("Data buffer 0x%x do not align to %d.", buff_addr, data_p->blksz); - return FSDIO_ERR_DMA_BUF_UNALIGN; - } - -#ifdef __aarch64__ - cur_desc->addr_hi = UPPER_32_BITS(buff_addr); - cur_desc->addr_lo = LOWER_32_BITS(buff_addr); -#else - cur_desc->addr_hi = 0U; - cur_desc->addr_lo = (u32)(buff_addr); -#endif - - /* set address of next descriptor entry, NULL for last entry */ - desc_addr = is_last ? 0U : (instance_p->desc_list.first_desc_p + (uintptr)((loop + 1) * sizeof(FSdioIDmaDesc))); - if (desc_addr % sizeof(FSdioIDmaDesc)) /* make sure dma descriptor aligned and not cross page boundary */ - { - FSDIO_ERROR("dma descriptor 0x%x do not align.", desc_addr); - return FSDIO_ERR_DMA_BUF_UNALIGN; - } - -#ifdef __aarch64__ - cur_desc->desc_hi = UPPER_32_BITS(desc_addr); - cur_desc->desc_lo = LOWER_32_BITS(desc_addr); -#else - cur_desc->desc_hi = 0U; - cur_desc->desc_lo = (u32)(desc_addr); -#endif - } - - /* flush cache of descripor list and transfer buffer */ - FSDIO_DATA_BARRIER(); - - FSdioDumpDMADescriptor(instance_p, buf_num); - return FSDIO_SUCCESS; -} - -/** - * @name: FSdioDMATransferData - * @msg: - * @return {*} - * @param {FSdio} *instance_p - * @param {FSdioData} *data_p - */ -static FError FSdioDMATransferData(FSdio *const instance_p, FSdioData *data_p) -{ - FASSERT(data_p); - FError ret = FSDIO_SUCCESS; - uintptr base_addr = instance_p->config.base_addr; - - /* enable related interrupt */ - FSdioSetInterruptMask(instance_p, FSDIO_GENERAL_INTR, FSDIO_INTS_DATA_MASK, TRUE); - FSdioSetInterruptMask(instance_p, FSDIO_IDMA_INTR, FSDIO_DMAC_INTS_MASK, TRUE); - - /* fill transfer buffer to DMA descriptor */ - ret = FSdioSetupDMADescriptor(instance_p, data_p); - if (FSDIO_SUCCESS != ret) - { - return ret; - } - - FSDIO_DATA_BARRIER(); - - FSDIO_INFO("Descriptor@%p, trans bytes: %d, block size: %d", - instance_p->desc_list.first_desc, - data_p->datalen, - data_p->blksz); - - /* set transfer info to register */ - FSdioSetDescriptor(base_addr, instance_p->desc_list.first_desc_p); - FSdioSetTransBytes(base_addr, data_p->datalen); - FSdioSetBlockSize(base_addr, data_p->blksz); - - return ret; -} - -/** - * @name: FSdioDMATransfer - * @msg: Start command and data transfer in DMA mode - * @return {FError} FSDIO_SUCCESS if transfer success, otherwise failed - * @param {FSdio} *instance_p, SDIO controller instance - * @param {FSdioCmdData} *cmd_data_p, contents of transfer command and data - */ -FError FSdioDMATransfer(FSdio *const instance_p, FSdioCmdData *const cmd_data_p) -{ - FASSERT(instance_p); - FASSERT(cmd_data_p); - FError ret = FSDIO_SUCCESS; - uintptr base_addr = instance_p->config.base_addr; - - cmd_data_p->success = FALSE; /* reset cmd transfer status */ - - if (FT_COMPONENT_IS_READY != instance_p->is_ready) - { - FSDIO_ERROR("Device is not yet initialized!!!"); - return FSDIO_ERR_NOT_INIT; - } - - if (FSDIO_IDMA_TRANS_MODE != instance_p->config.trans_mode) - { - FSDIO_ERROR("Device is not configure in DMA transfer mode."); - return FSDIO_ERR_INVALID_STATE; - } - - /* for removable media, check if card exists */ - if ((FALSE == instance_p->config.non_removable) && - (FALSE == FSdioCheckIfCardExists(base_addr))) - { - FSDIO_ERROR("Card is not detected !!!"); - return FSDIO_ERR_NO_CARD; - } - - /* wait previous command finished and card not busy */ - ret = FSdioPollWaitBusyCard(instance_p); - if (FSDIO_SUCCESS != ret) - { - return ret; - } - - FSDIO_WRITE_REG(base_addr, FSDIO_RAW_INTS_OFFSET, 0xffffe); - - /* reset fifo and DMA before transfer */ - - ret = FSdioResetCtrl(base_addr, FSDIO_CNTRL_FIFO_RESET | FSDIO_CNTRL_DMA_RESET); - if (FSDIO_SUCCESS != ret) - { - return ret; - } - - /* enable use of DMA */ - FSDIO_SET_BIT(base_addr, FSDIO_CNTRL_OFFSET, FSDIO_CNTRL_USE_INTERNAL_DMAC); - FSDIO_SET_BIT(base_addr, FSDIO_BUS_MODE_OFFSET, FSDIO_BUS_MODE_DE); - - if (NULL != cmd_data_p->data_p) /* transfer data */ - { - ret = FSdioDMATransferData(instance_p, - cmd_data_p->data_p); - } - - if (FSDIO_SUCCESS == ret) /* transfer command */ - { - ret = FSdioTransferCmd(instance_p, cmd_data_p); - } - - return ret; -} - -/** - * @name: FSdioPollWaitDMAEnd - * @msg: Wait DMA transfer finished by poll - * @return {FError} FSDIO_SUCCESS if wait success, otherwise wait failed - * @param {FSdio} *instance_p, SDIO controller instance - * @param {FSdioCmdData} *cmd_data_p, contents of transfer command and data - * @param {FSdioRelaxHandler} relax, handler of relax when wait busy - */ -FError FSdioPollWaitDMAEnd(FSdio *const instance_p, FSdioCmdData *const cmd_data_p) -{ - FASSERT(instance_p); - FASSERT(cmd_data_p); - FError ret = FSDIO_SUCCESS; - u32 reg_val; - int delay; - const boolean read = cmd_data_p->flag & FSDIO_CMD_FLAG_READ_DATA; - uintptr base_addr = instance_p->config.base_addr; - const u32 wait_bits = (NULL == cmd_data_p->data_p) ? FSDIO_INT_CMD_BIT : (FSDIO_INT_CMD_BIT | FSDIO_INT_DTO_BIT); - - if (FT_COMPONENT_IS_READY != instance_p->is_ready) - { - FSDIO_ERROR("Device is not yet initialized!!!"); - return FSDIO_ERR_NOT_INIT; - } - - if (FSDIO_IDMA_TRANS_MODE != instance_p->config.trans_mode) - { - FSDIO_ERROR("Device is not configure in DMA transfer mode."); - return FSDIO_ERR_INVALID_STATE; - } - - /* wait command done or data timeout */ - delay = FSDIO_TIMEOUT; - do - { - reg_val = FSdioGetRawStatus(base_addr); - - if (delay % 1000 == 0) - { - FSDIO_DEBUG("reg_val = 0x%x", reg_val); - } - - if (instance_p->relax_handler) - { - instance_p->relax_handler(); - } - } - while (((wait_bits & reg_val) != wait_bits) && (--delay > 0)); - - /* clear status to ack data done */ - FSdioClearRawStatus(base_addr); - - if (((wait_bits & reg_val) != wait_bits) && (delay <= 0)) - { - FSDIO_ERROR("Wait cmd done timeout, raw ints: 0x%x.", reg_val); - return FSDIO_ERR_CMD_TIMEOUT; - } - - if (NULL != cmd_data_p->data_p) /* wait data transfer done or timeout */ - { - /* invalidate cache of transfer buffer */ - if (read) - { - FSDIO_DATA_BARRIER(); - } - } - - if (FSDIO_SUCCESS == ret) - { - ret = FSdioGetCmdResponse(instance_p, cmd_data_p); - } - - return ret; -} - -/** - * @name: FSdioSetIDMAList - * @msg: Setup DMA descriptor for SDIO controller instance - * @return {FError} FSDIO_SUCCESS if setup done, otherwise failed - * @param {FSdio} *instance_p, SDIO controller instance - * @param {volatile FSdioIDmaDesc} *desc, first item in DMA descriptor lists - * @param {u32} desc_num, number of items in DMA descriptor lists - */ -FError FSdioSetIDMAList(FSdio *const instance_p, volatile FSdioIDmaDesc *desc, u32 desc_num) -{ - FASSERT(instance_p); - FError ret = FSDIO_SUCCESS; - uintptr base_addr = instance_p->config.base_addr; - - if (FT_COMPONENT_IS_READY != instance_p->is_ready) - { - FSDIO_ERROR("Device is not yet initialized!!!"); - return FSDIO_ERR_NOT_INIT; - } - - if (FSDIO_IDMA_TRANS_MODE != instance_p->config.trans_mode) - { - FSDIO_ERROR("Device is not configure in DMA transfer mode."); - return FSDIO_ERR_INVALID_STATE; - } - - instance_p->desc_list.first_desc = desc; - instance_p->desc_list.first_desc_p = (uintptr)desc; /* physical address equals with virtual address */ - instance_p->desc_list.desc_num = desc_num; - return ret; -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/mmc/fsdio/fsdio_g.c b/bsp/phytium/libraries/standalone/drivers/mmc/fsdio/fsdio_g.c deleted file mode 100644 index c7bdf08f2b..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/mmc/fsdio/fsdio_g.c +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fsdio_g.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:37:44 - * Description:  This file is for static init - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2021/12/2 init - * 1.1 zhugengyu 2022/6/6 modify according to tech manual. - */ - -/***************************** Include Files *********************************/ - -#include "ftypes.h" -#include "fparameters.h" -#include "fsdio.h" -#include "fsdio_hw.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ - -/************************** Variable Definitions *****************************/ - -const FSdioConfig FSDIO_CONFIG_TBL[FSDIO_NUM] = -{ - [FSDIO0_ID] = - { - .instance_id = FSDIO0_ID, - .base_addr = FSDIO0_BASE_ADDR, - .irq_num = FSDIO0_IRQ_NUM, - .trans_mode = FSDIO_IDMA_TRANS_MODE, - .voltage = FSDIO_SD_3_3V_VOLTAGE, - .non_removable = FALSE, - .filp_resp_byte_order = FALSE - }, - - [FSDIO1_ID] = - { - .instance_id = FSDIO1_ID, - .base_addr = FSDIO1_BASE_ADDR, - .irq_num = FSDIO1_IRQ_NUM, - .trans_mode = FSDIO_IDMA_TRANS_MODE, - .voltage = FSDIO_SD_3_3V_VOLTAGE, - .non_removable = FALSE, - .filp_resp_byte_order = FALSE - } -}; - - -/*****************************************************************************/ diff --git a/bsp/phytium/libraries/standalone/drivers/mmc/fsdio/fsdio_hw.h b/bsp/phytium/libraries/standalone/drivers/mmc/fsdio/fsdio_hw.h deleted file mode 100644 index 80832d0fa3..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/mmc/fsdio/fsdio_hw.h +++ /dev/null @@ -1,652 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fsdio_hw.h - * Date: 2022-05-26 15:32:34 - * LastEditTime: 2022-05-26 15:32:35 - * Description:  This file is for SDIO register function definition - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2021/12/2 init - * 1.1 zhugengyu 2022/5/26 modify according to tech manual. - */ - -#ifndef FSDIO_HW_H -#define FSDIO_HW_H - -/***************************** Include Files *********************************/ - -#include "fparameters.h" -#include "fio.h" -#include "ftypes.h" -#include "fassert.h" -#include "fkernel.h" - -#ifdef __aarch64__ -#include "faarch64.h" -#else -#include "faarch32.h" -#endif - -#ifdef __cplusplus -extern "C" -{ -#endif - -/************************** Constant Definitions *****************************/ - -/** @name Register Map - * - * Register offsets from the base address of an SD device. - * @{ - */ -#define FSDIO_CNTRL_OFFSET 0x00U /* the controller config reg */ -#define FSDIO_PWREN_OFFSET 0x04U /* the power enable reg */ -#define FSDIO_CLKDIV_OFFSET 0x08U /* the clock divider reg */ -#define FSDIO_CLKENA_OFFSET 0x10U /* the clock enable reg */ -#define FSDIO_TMOUT_OFFSET 0x14U /* the timeout reg */ -#define FSDIO_CTYPE_OFFSET 0x18U /* the card type reg */ -#define FSDIO_BLK_SIZ_OFFSET 0x1CU /* the block size reg */ -#define FSDIO_BYT_CNT_OFFSET 0x20U /* the byte count reg */ -#define FSDIO_INT_MASK_OFFSET 0x24U /* the interrupt mask reg */ -#define FSDIO_CMD_ARG_OFFSET 0x28U /* the command argument reg */ -#define FSDIO_CMD_OFFSET 0x2CU /* the command reg */ -#define FSDIO_RESP0_OFFSET 0x30U /* the response reg0 */ -#define FSDIO_RESP1_OFFSET 0x34U /* the response reg1 */ -#define FSDIO_RESP2_OFFSET 0x38U /* the response reg2 */ -#define FSDIO_RESP3_OFFSET 0x3CU /* the response reg3 */ -#define FSDIO_MASKED_INTS_OFFSET 0x40U /* the masked interrupt status reg */ -#define FSDIO_RAW_INTS_OFFSET 0x44U /* the raw interrupt status reg */ -#define FSDIO_STATUS_OFFSET 0x48U /* the status reg */ -#define FSDIO_FIFOTH_OFFSET 0x4CU /* the FIFO threshold watermark reg */ -#define FSDIO_CARD_DETECT_OFFSET 0x50U /* the card detect reg */ -#define FSDIO_CARD_WRTPRT_OFFSET 0x54U /* the card write protect reg */ -#define FSDIO_GPIO_OFFSET 0x58U /* the ciu ready */ -#define FSDIO_TRAN_CARD_CNT_OFFSET 0x5CU /* the transferred CIU card byte count reg */ -#define FSDIO_TRAN_FIFO_CNT_OFFSET 0x60U /* the transferred host to FIFO byte count reg */ -#define FSDIO_DEBNCE_OFFSET 0x64U /* the debounce count reg */ -#define FSDIO_UID_OFFSET 0x68U /* the user ID reg */ -#define FSDIO_VID_OFFSET 0x6CU /* the controller version ID reg */ -#define FSDIO_HWCONF_OFFSET 0x70U /* the hardware configuration reg */ -#define FSDIO_UHS_REG_OFFSET 0x74U /* the UHS-I reg */ -#define FSDIO_CARD_RESET_OFFSET 0x78U /* the card reset reg */ -#define FSDIO_BUS_MODE_OFFSET 0x80U /* the bus mode reg */ -#define FSDIO_DESC_LIST_ADDRL_OFFSET 0x88U /* the descriptor list low base address reg */ -#define FSDIO_DESC_LIST_ADDRH_OFFSET 0x8CU /* the descriptor list high base address reg */ -#define FSDIO_DMAC_STATUS_OFFSET 0x90U /* the internal DMAC status reg */ -#define FSDIO_DMAC_INT_EN_OFFSET 0x94U /* the internal DMAC interrupt enable reg */ -#define FSDIO_CUR_DESC_ADDRL_OFFSET 0x98U /* the current host descriptor low address reg */ -#define FSDIO_CUR_DESC_ADDRH_OFFSET 0x9CU /* the current host descriptor high address reg */ -#define FSDIO_CUR_BUF_ADDRL_OFFSET 0xA0U /* the current buffer low address reg */ -#define FSDIO_CUR_BUF_ADDRH_OFFSET 0xA4U /* the current buffer high address reg */ -#define FSDIO_CARD_THRCTL_OFFSET 0x100U /* the card threshold control reg */ -#define FSDIO_UHS_REG_EXT_OFFSET 0x108U /* the UHS register extension */ -#define FSDIO_EMMC_DDR_REG_OFFSET 0x10CU /* the EMMC DDR reg */ -#define FSDIO_ENABLE_SHIFT_OFFSET 0x110U /* the enable phase shift reg */ -#define FSDIO_DATA_OFFSET 0x200U /* the data FIFO access */ - -/** @name FSDIO_CNTRL_OFFSET x0 Register - */ -#define FSDIO_CNTRL_CONTROLLER_RESET BIT(0) /* RW 复位控制器,除 DMA,FIFO */ -#define FSDIO_CNTRL_FIFO_RESET BIT(1) /* RW 复位 FIFO, 1 有效 */ -#define FSDIO_CNTRL_DMA_RESET BIT(2) /* RW 复位内部 DMA, 1 有效 */ -#define FSDIO_CNTRL_INT_ENABLE BIT(4) /* RW 全局中断使能配置, 1 使能 */ -#define FSDIO_CNTRL_DMA_ENABLE BIT(5) /* RW 外部 DMA 模式使能 */ -#define FSDIO_CNTRL_READ_WAIT BIT(6) /* RW SDIO 读等待 1 有效 */ -#define FSDIO_CNTRL_SEND_IRQ_RESPONSE BIT(7) /* RW MMC 中断自动响应配置 1 有效 */ -#define FSDIO_CNTRL_ABORT_READ_DATA BIT(8) /* RW 读暂停异常清除 */ -#define FSDIO_CNTRL_SEND_CCSD BIT(9) /* RW 发送CCD (NOT USED) */ -#define FSDIO_CNTRL_SEND_AUTO_STOP_CCSD BIT(10) /* RW 发送CCD,自动STOP (NOT USED) */ -#define FSDIO_CNTRL_ENDIAN BIT(11) /* RW 0:小端,1:大端 */ -#define FSDIO_CNTRL_CARD_VOLTAGE_A_MASK GENMASK(19, 16) /* RW A电压选择 */ -#define FSDIO_CNTRL_CARD_VOLTAGE_B_MASK GENMASK(23, 20) /* RW B电压选择 */ -#define FSDIO_CNTRL_ENABLE_OD_PULLUP BIT(24) /* RW 外部开漏输出 */ -#define FSDIO_CNTRL_USE_INTERNAL_DMAC BIT(25) /* RW 使用内部DMA */ - -/** @name FSDIO_PWREN_OFFSET 0x4 Register - */ -#define FSDIO_PWREN_ENABLE BIT(0) /* RW 卡供电开关, 0:关;1:开*/ - -/** @name FSDIO_CLKDIV_OFFSET 0x8 Register - */ -/* CLK_SAMPLE 和 CLK_SAMPLE 必须小于 CLK_DIVIDER */ -#define FSDIO_CLK_SAMPLE_SET(x) SET_REG32_BITS((x), 23, 16) -#define FSDIO_CLK_DRV_SET(x) SET_REG32_BITS((x), 15, 8) -#define FSDIO_CLK_DIVIDER_SET(x) SET_REG32_BITS((x), 7, 0) /* 分频系数 = 2 * bit[7:0] */ -#define FSDIO_CLK_DIV(samp, drv, div) FSDIO_CLK_SAMPLE_SET(samp) | \ - FSDIO_CLK_DRV_SET(drv) | \ - FSDIO_CLK_DIVIDER_SET(div) - -#define FSDIO_CLK_DIVDER_GET(div_reg) GET_REG32_BITS((div_reg), 7, 0) - -/** @name FSDIO_CLKENA_OFFSET Register - */ -#define FSDIO_CLKENA_CCLK_ENABLE BIT(0) /* RW 0:Clock disabled;1:Clock enabled */ -#define FSDIO_CLKENA_CCLK_LOW_POWER BIT(16) /* RW 0x0:非低功耗;0x1:低功耗 */ - -/** @name FSDIO_TMOUT_OFFSET Register - */ -#define FSDIO_MAX_DATA_TIMEOUT 0xffffff /* RW 读卡超时(以卡时钟为单位) */ -#define FSDIO_MAX_RESP_TIMEOUT 0xff /* RW 响应超时(以卡时钟为单位) */ -#define FSDIO_TIMEOUT_DATA(data_timeout, resp_timeout) \ - ((GENMASK(31, 8) & ((data_timeout) << 8)) | \ - (GENMASK(7, 0) & ((resp_timeout)))) - -/** @name FSDIO_CTYPE_OFFSET Register - */ -#define FSDIO_CARD0_WIDTH1_8BIT BIT(16) /* 1: 8-bit mode */ -#define FSDIO_CARD0_WIDTH2_4BIT BIT(0) /* 1: 4-bit mode */ -#define FSDIO_CARD0_WIDTH2_1BIT 0x0U /* 0: 1-bit mode */ - -/** @name FSDIO_INT_MASK_OFFSET Register - * @name FSDIO_MASKED_INTS_OFFSET Register - * @name FSDIO_RAW_INTS_OFFSET Register - */ -#define FSDIO_INT_CD_BIT BIT(0) /* RW Card detect (CD) */ -#define FSDIO_INT_RE_BIT BIT(1) /* RW Response error (RE) */ -#define FSDIO_INT_CMD_BIT BIT(2) /* RW Command done (CD) */ -#define FSDIO_INT_DTO_BIT BIT(3) /* RW Data transfer over (DTO) */ -#define FSDIO_INT_TXDR_BIT BIT(4) /* RW Transmit FIFO data request (TXDR) */ -#define FSDIO_INT_RXDR_BIT BIT(5) /* RW Receive FIFO data request (RXDR) */ -#define FSDIO_INT_RCRC_BIT BIT(6) /* RW Response CRC error (RCRC) */ -#define FSDIO_INT_DCRC_BIT BIT(7) /* RW Data CRC error (DCRC) */ -#define FSDIO_INT_RTO_BIT BIT(8) /* RW Response timeout (RTO) */ -#define FSDIO_INT_DRTO_BIT BIT(9) /* RW Data read timeout (DRTO) */ -#define FSDIO_INT_HTO_BIT BIT(10) /* RW Data starvation-by-host timeout (HTO) */ -#define FSDIO_INT_FRUN_BIT BIT(11) /* RW FIFO underrun/overrun error (FRUN) */ -#define FSDIO_INT_HLE_BIT BIT(12) /* RW Hardware locked write error (HLE) */ -#define FSDIO_INT_SBE_BCI_BIT BIT(13) /* RW Start-bit error (SBE) */ -#define FSDIO_INT_ACD_BIT BIT(14) /* RW Auto command done (ACD) */ -#define FSDIO_INT_EBE_BIT BIT(15) /* RW End-bit error (read)/Write no CRC (EBE) */ -#define FSDIO_INT_SDIO_BIT BIT(16) /* RW SDIO interrupt for card */ - -#define FSDIO_INT_ALL_BITS GENMASK(16, 0) -#define FSDIO_INTS_CMD_MASK (FSDIO_INT_RE_BIT | FSDIO_INT_CMD_BIT | FSDIO_INT_RCRC_BIT | \ - FSDIO_INT_RTO_BIT | FSDIO_INT_HTO_BIT | FSDIO_INT_HLE_BIT) - -#define FSDIO_INTS_DATA_MASK (FSDIO_INT_DTO_BIT | FSDIO_INT_DCRC_BIT | FSDIO_INT_DRTO_BIT | \ - FSDIO_INT_SBE_BCI_BIT) - -/** @name FSDIO_CMD_OFFSET Register - */ -#define FSDIO_CMD_START BIT(31) /* 启动命令 */ -#define FSDIO_CMD_USE_HOLD_REG BIT(29) /* 0: 旁路HOLD寄存器,1: 使能HOLD寄存器 */ -#define FSDIO_CMD_VOLT_SWITCH BIT(28) /* 0: 无电压转换,1: 有电压转换 */ -#define FSDIO_CMD_BOOT_MODE BIT(27) /* 0: Mandatory boot, 1: Alternate boot */ -#define FSDIO_CMD_DISABLE_BOOT BIT(26) /* 中止boot进程 */ -#define FSDIO_CMD_EXPECT_BOOT_ACK BIT(25) /* 1: Expect book ack */ -#define FSDIO_CMD_ENABLE_BOOT BIT(24) /* 1: 使能 boot for mandatory */ -#define FSDIO_CMD_UPD_CLK BIT(21) /* 1:不发送指令,仅更新时钟寄存器的值到卡时钟域内 */ -#define FSDIO_CMD_CARD_NUM_SET(num) SET_REG32_BITS((num), 20, 16) -#define FSDIO_CMD_INIT BIT(15) /* 0:在发送指令前不发送初始化序列(80 个周期) 1: 发送 */ -#define FSDIO_CMD_STOP_ABORT BIT(14) /* 1:停止或中止命令,用于停止当前的数据传输 */ -#define FSDIO_CMD_WAIT_PRVDATA_COMPLETE BIT(13) /* 1:等待前面的数据传输完成后再发送指令 0: 立即发送命令 */ -#define FSDIO_CMD_SEND_AUTO_STOP BIT(12) /* 1:在数据传送结束时发送停止命令 */ -#define FSDIO_CMD_TRANSF_MODE_SET(mode) SET_REG32_BITS((mode), 12, 11) /* 1: 流数据传输指令 */ -#define FSDIO_CMD_DAT_WRITE BIT(10) /* 0:读卡 1:写卡 */ -#define FSDIO_CMD_DAT_EXP BIT(9) /* 0:不等待数据传输, 1:等待数据传输 */ -#define FSDIO_CMD_RESP_CRC BIT(8) /* 1:检查响应 CRC */ -#define FSDIO_CMD_RESP_LONG BIT(7) /* 0:等待卡的短响应 1:等待卡的长响应 */ -#define FSDIO_CMD_RESP_EXP BIT(6) /* 1:等待卡的响应,0:命令不需要卡响应 */ -#define FSDIO_CMD_INDX_SET(ind) SET_REG32_BITS((ind), 5, 0) /* 命令索引号 */ - -/** @name FSDIO_STATUS_OFFSET Register - */ -#define FSDIO_STATUS_FIFO_RX BIT(0) /* RO, 达到 FIFO_RX 标记 */ -#define FSDIO_STATUS_FIFO_TX BIT(1) /* RO, 达到 FIFO_TX 标记 */ -#define FSDIO_STATUS_FIFO_EMPTY BIT(2) /* RO, FIFO empty */ -#define FSDIO_STATUS_FIFO_FULL BIT(3) /* RO, FIFO full */ -#define FSDIO_STATUS_CMD_FSM_GET(reg_val) GET_REG32_BITS((reg_val), 7, 4) -#define FSDIO_STATUS_DATA3_STATUS BIT(8) /* RO DATA[3] 卡在位检测,1:在位 */ -#define FSDIO_STATUS_DATA_BUSY BIT(9) /* RO 1: 卡 busy */ -#define FSDIO_STATUS_DATA_STATE_MC_BUSY BIT(10) /* RO DATA TX|RX FSM busy */ -#define FSDIO_STATUS_RESP_INDEX_GET(reg_val) GET_REG32_BITS((reg_val), 16, 11) -#define FSDIO_STATUS_FIFO_CNT_GET(reg_val) GET_REG32_BITS((reg_val), 29, 17) /* RO: FIFO 填充计数器 */ -#define FSDIO_STATUS_DMA_ACK BIT(30) /* RO DMA 确认 */ -#define FSDIO_STATUS_DMA_REQ BIT(31) /* RO DMA 请求 */ - -/** @name FSDIO_FIFOTH_OFFSET Register - */ -enum -{ - FSDIO_FIFOTH_DMA_TRANS_1 = 0b000, - FSDIO_FIFOTH_DMA_TRANS_4 = 0b001, - FSDIO_FIFOTH_DMA_TRANS_8 = 0b010, - FSDIO_FIFOTH_DMA_TRANS_16 = 0b011, - FSDIO_FIFOTH_DMA_TRANS_32 = 0b100, - FSDIO_FIFOTH_DMA_TRANS_64 = 0b101, - FSDIO_FIFOTH_DMA_TRANS_128 = 0b110, - FSDIO_FIFOTH_DMA_TRANS_256 = 0b111 -}; - -#define FSDIO_FIFOTH_DMA_TRANS_MASK GENMASK(30, 28) /* 多次传输的突发大小 */ -#define FSDIO_FIFOTH_RX_WMARK_MASK GENMASK(27, 16) /* 当接收数据给卡时FIFO的阈值 */ -#define FSDIO_FIFOTH_TX_WMARK_MASK GENMASK(11, 0) /* 当发送数据给卡时FIFO的阈值 */ - -#define FSDIO_RX_WMARK 0x7U -#define FSDIO_TX_WMARK 0x100U - -/* - trans_size: Burst size of multiple transaction; - rx_wmark: FIFO threshold watermark level when receiving data to card. - tx_wmark: FIFO threshold watermark level when transmitting data to card -*/ -#define FSDIO_FIFOTH(trans_size, rx_wmark, tx_wmark) \ - (((FSDIO_FIFOTH_DMA_TRANS_MASK) & ((trans_size) << 28)) | \ - ((FSDIO_FIFOTH_RX_WMARK_MASK) & ((rx_wmark) << 16)) | \ - ((FSDIO_FIFOTH_TX_WMARK_MASK) & (tx_wmark))) - -#define FSDIO_DMA_TRANS_SIZE_SET(x) SET_REG32_BITS((x), 30, 28) -#define FSDIO_RX_MARK_SIZE_SET(x) SET_REG32_BITS((x), 27, 16) -#define FSDIO_TX_MARK_SIZE_SET(x) SET_REG32_BITS((x), 11, 0) - -/** @name FSDIO_CARD_DETECT_OFFSET Register - */ -#define FSDIO_CARD_DETECTED BIT(0) /* 1:卡不在位;0:卡在位 */ - -/** @name FSDIO_CARD_WRTPRT_OFFSET Register - */ -#define FSDIO_CARD_WRITE_PROTECTED BIT(0) /* 1:写保护;0:无写保护 */ - -/** @name FSDIO_GPIO_OFFSET Register - */ -#define FSDIO_CLK_READY BIT(0) /* CIU 时钟 ready */ - -/** @name FSDIO_UHS_REG_OFFSET Register - */ -#define FSDIO_UHS_REG_VOLT_180 BIT(0) /* RW 外部调压器接口电压 0: 3.3v, 1: 1.8v */ -#define FSDIO_UHS_REG_VOLT_330 0U -#define FSDIO_UHS_REG_DDR BIT(16) /* RW DDR 模式 */ - -/** @name FSDIO_CARD_RESET_OFFSET Register - */ -#define FSDIO_CARD_RESET_ENABLE BIT(0) /* RW 1:运行;0:复位 */ - -/** @name FSDIO_BUS_MODE_OFFSET Register - */ -#define FSDIO_BUS_MODE_SWR BIT(0) /* RW 软复位,复位idma内部寄存器 */ -#define FSDIO_BUS_MODE_FB BIT(1) /* RW 固定burst */ -#define FSDIO_BUS_MODE_DE BIT(7) /* RW idma使能 */ -#define FSDIO_BUS_MODE_PBL_GET(reg_val) GET_REG32_BITS((reg_val), 10, 8) /* burst LEN */ - -/** @name FSDIO_DMAC_STATUS_OFFSET Register - */ -#define FSDIO_DMAC_STATUS_TI BIT(0) /* RW 发送中断。表示链表的数据发送完成 */ -#define FSDIO_DMAC_STATUS_RI BIT(1) /* RW 接收中断。表示链表的数据接收完成 */ -#define FSDIO_DMAC_STATUS_FBE BIT(2) /* RW 致命总线错误中断 */ -#define FSDIO_DMAC_STATUS_DU BIT(4) /* RW 链表不可用中断 */ -#define FSDIO_DMAC_STATUS_CES BIT(5) /* RW 卡错误汇总 */ -#define FSDIO_DMAC_STATUS_NIS BIT(8) /* RW 正常中断汇总 */ -#define FSDIO_DMAC_STATUS_AIS BIT(9) /* RW 异常中断汇总 */ -#define FSDIO_DMAC_STATUS_EB_GET(reg_val) GET_REG32_BITS((reg_val), 12, 10) -#define FSDIO_DMAC_STATUS_ALL_BITS GENMASK(9, 0) - -#define FSDIO_DMAC_STATUS_EB_TX 0b001 -#define FSDIO_DMAC_STATUS_EB_RX 0b010 - -/** @name FSDIO_DMAC_INT_EN_OFFSET Register - */ -#define FSDIO_DMAC_INT_ENA_TI BIT(0) /* RW 发送完成中断使能 */ -#define FSDIO_DMAC_INT_ENA_RI BIT(1) /* RW 接收完成中断使能 */ -#define FSDIO_DMAC_INT_ENA_FBE BIT(2) /* RW 总线错误中断使能 */ -#define FSDIO_DMAC_INT_ENA_DU BIT(4) /* RW 描述符不可读中断使能 */ -#define FSDIO_DMAC_INT_ENA_CES BIT(5) /* RW 卡错误中断使能 */ -#define FSDIO_DMAC_INT_ENA_NIS BIT(8) /* RW 正常中断汇总使能 */ -#define FSDIO_DMAC_INT_ENA_AIS BIT(9) /* RW 异常中断汇总使能 */ -#define FSDIO_DMAC_INT_ENA_ALL GENMASK(9, 0) - -#define FSDIO_DMAC_INTS_MASK (FSDIO_DMAC_INT_ENA_FBE | FSDIO_DMAC_INT_ENA_DU | \ - FSDIO_DMAC_INT_ENA_NIS | FSDIO_DMAC_INT_ENA_AIS) - -/** @name FSDIO_CARD_THRCTL_OFFSET Register - */ -#define FSDIO_CARD_THRCTL_CARDRD BIT(0) /* RW 读卡threshold使能 */ -#define FSDIO_CARD_THRCTL_BUSY_CLR BIT(1) /* RW busy清中断 */ -#define FSDIO_CARD_THRCTL_CARDWR BIT(2) /* RO 写卡threshold使能 */ -enum -{ - FSDIO_FIFO_DEPTH_8 = 23, - FSDIO_FIFO_DEPTH_16 = 24, - FSDIO_FIFO_DEPTH_32 = 25, - FSDIO_FIFO_DEPTH_64 = 26, - FSDIO_FIFO_DEPTH_128 = 27 -}; - -#define FSDIO_CARD_THRCTL_THRESHOLD(n) BIT(n) /* 读卡 Threshold */ - -/** @name FSDIO_UHS_REG_EXT_OFFSET Register - */ -#define FSDIO_UHS_EXT_MMC_VOLT BIT(0) /* RW 1.2V供电选择 */ -#define FSDIO_UHS_EXT_CLK_ENA BIT(1) /* RW 外部时钟,CIU时钟使能 */ -#define FSDIO_UHS_CLK_DIV_MASK GENMASK(14, 8) /* RW 分频系数,ciu_f = clk_div_ctrl + 1, min=1*/ -#define FSDIO_UHS_CLK_DIV(x) (FSDIO_UHS_CLK_DIV_MASK & ((x) << 8)) -#define FSDIO_UHS_CLK_SAMP_MASK GENMASK(22, 16) /* RW 采样相位参数,相对于ciu时钟相位点 */ -#define FSDIO_UHS_CLK_SAMP(x) (FSDIO_UHS_CLK_SAMP_MASK & ((x) << 16)) -#define FSDIO_UHS_CLK_DRV_MASK GENMASK(30, 24) /* RW 输出相位参数,相对于ciu时钟相位点 */ -#define FSDIO_UHS_CLK_DRV(x) (FSDIO_UHS_CLK_DRV_MASK & ((x) << 24)) -#define FSDIO_UHS_EXT_CLK_MUX BIT(31) - -/* FSDIO_UHS_REG_EXT_OFFSET 和 FSDIO_CLKDIV_OFFSET 两个寄存器配合完成卡时钟和驱动采样相位调整 - UHS_REG_EXT 配置一级分频,CLK_DIV 决定CARD工作时钟频率, DRV 和 SAMP 分别控制驱动相位和采样相位粗调 - 分配系数 = bit [14 : 8] + 1 - CLKDIV 配置二级分频, DIVIDER , DRV 和 SAMP 分别控制驱动相位和采样相位精调 - 分配系数 = bit [7: 0] * 2 -*/ -#define FSDIO_UHS_REG(drv_phase, samp_phase, clk_div) \ - (FSDIO_UHS_CLK_DRV(drv_phase) | \ - FSDIO_UHS_CLK_SAMP(samp_phase) | \ - FSDIO_UHS_CLK_DIV(clk_div)) - -#define FSDIO_UHS_CLK_DIV_SET(x) SET_REG32_BITS((x), 14, 8) -#define FSDIO_UHS_CLK_DIV_GET(reg_val) GET_REG32_BITS((reg_val), 14, 8) -#define FSDIO_UHS_CLK_SAMP_SET(x) SET_REG32_BITS((x), 22, 16) -#define FSDIO_UHS_CLK_DRV_SET(x) SET_REG32_BITS((x), 30, 24) - -/** @name FSDIO_REG_EMMC_DDR_REG_OFFSET Register - */ -#define FSDIO_EMMC_DDR_CYCLE BIT(0) /* RW 1: start bit小于一个周期,0:start bit 为一个周期 */ - -#define FSDIO_TIMEOUT (50000) /* timeout for retries */ -#define FSDIO_DELAY_US (5) -#define FSDIO_400_KHZ (400000UL) -#define FSDIO_25_MHZ (25000000UL) -#define FSDIO_MAX_FIFO_CNT (0x800U) - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ -#define FSDIO_READ_REG(addr, reg_off) FtIn32((addr) + (u32)(reg_off)) -#define FSDIO_WRITE_REG(addr, reg_off, reg_val) FtOut32((addr) + (u32)(reg_off), (u32)(reg_val)) -#define FSDIO_CLR_BIT(addr, reg_off, bits) FtClearBit32((addr) + (u32)(reg_off), bits) -#define FSDIO_SET_BIT(addr, reg_off, bits) FtSetBit32((addr) + (u32)(reg_off), bits) - -#define FSDIO_DATA_BARRIER() WMB() -/************************** Function Prototypes ******************************/ -FError FSdioSendPrivateCmd(uintptr base_addr, u32 cmd, u32 arg); -FError FSdioResetCtrl(uintptr base_addr, u32 reset_bits); - -/*****************************************************************************/ -/** - * @name: FSdioSetClock - * @msg: Enable/Disable controller clock - * @return {NONE} - * @param {uintptr} base_addr, base address of SDIO controller - * @param {boolean} enable, TRUE: enable clock - */ -static inline void FSdioSetClock(uintptr base_addr, boolean enable) -{ - u32 reg_val = FSDIO_READ_REG(base_addr, FSDIO_CLKENA_OFFSET); - if (enable) - { - reg_val |= FSDIO_CLKENA_CCLK_ENABLE; - } - else - { - reg_val &= ~FSDIO_CLKENA_CCLK_ENABLE; - } - FSDIO_WRITE_REG(base_addr, FSDIO_CLKENA_OFFSET, reg_val); -} - -static inline void FSdioSetPower(uintptr base_addr, boolean enable) -{ - u32 reg_val = FSDIO_READ_REG(base_addr, FSDIO_PWREN_OFFSET); - if (enable) - { - reg_val |= FSDIO_PWREN_ENABLE; - } - else - { - reg_val &= ~FSDIO_PWREN_ENABLE; - } - FSDIO_WRITE_REG(base_addr, FSDIO_PWREN_OFFSET, reg_val); -} - -static inline void FSdioSetExtClock(uintptr base_addr, boolean enable) -{ - u32 reg_val = FSDIO_READ_REG(base_addr, FSDIO_UHS_REG_EXT_OFFSET); - if (enable) - { - reg_val |= FSDIO_UHS_EXT_CLK_ENA; - } - else - { - reg_val &= ~FSDIO_UHS_EXT_CLK_ENA; - } - FSDIO_WRITE_REG(base_addr, FSDIO_UHS_REG_EXT_OFFSET, reg_val); -} - -static inline void FSdioSetVoltage1_8V(uintptr base_addr, boolean v1_8) -{ - u32 reg_val = FSDIO_READ_REG(base_addr, FSDIO_UHS_REG_OFFSET); - if (v1_8) - { - reg_val |= FSDIO_UHS_REG_VOLT_180; - } - else - { - reg_val &= ~FSDIO_UHS_REG_VOLT_180; /* 3.3v */ - } - FSDIO_WRITE_REG(base_addr, FSDIO_UHS_REG_OFFSET, reg_val); -} - -/** - * @name: FSdioGetRawStatus - * @msg: Get raw interrupt status of controller - * @return {u32} raw interrupt status - * @param {uintptr} base_addr, base address of SDIO controller - */ -static inline u32 FSdioGetRawStatus(uintptr base_addr) -{ - return FSDIO_READ_REG(base_addr, FSDIO_RAW_INTS_OFFSET); -} - -/** - * @name: FSdioClearRawStatus - * @msg: Clear raw interrupt status of controller - * @return {NONE} - * @param {uintptr} base_addr, base address of SDIO controller - */ -static inline void FSdioClearRawStatus(uintptr base_addr) -{ - u32 reg_val = FSdioGetRawStatus(base_addr); - FSDIO_WRITE_REG(base_addr, FSDIO_RAW_INTS_OFFSET, reg_val); -} - -/** - * @name: FSdioGetStatus - * @msg: Get status of controller - * @return {u32} controller status - * @param {uintptr} base_addr, base address of SDIO controller - */ -static inline u32 FSdioGetStatus(uintptr base_addr) -{ - return FSDIO_READ_REG(base_addr, FSDIO_STATUS_OFFSET); -} - -/** - * @name: FSdioGetDMAStatus - * @msg: Get interrupt status of DMA - * @return {u32} DMA interrupt status - * @param {uintptr} base_addr, base address of SDIO controller - */ -static inline u32 FSdioGetDMAStatus(uintptr base_addr) -{ - return FSDIO_READ_REG(base_addr, FSDIO_DMAC_STATUS_OFFSET); -} - -/** - * @name: FSdioClearDMAStatus - * @msg: Clear interrupt status of DMA - * @return {NONE} - * @param {uintptr} base_addr, base address of SDIO controller - */ -static inline void FSdioClearDMAStatus(uintptr base_addr) -{ - u32 reg_val = FSdioGetDMAStatus(base_addr); - FSDIO_WRITE_REG(base_addr, FSDIO_DMAC_STATUS_OFFSET, reg_val); -} - -/** - * @name: FSdioSetDescriptor - * @msg: Set base address of DMA descriptors - * @return {NONE} - * @param {uintptr} base_addr, base address of SDIO controller - * @param {uintptr} descriptor, base address of DMA descriptors - */ -static inline void FSdioSetDescriptor(uintptr base_addr, uintptr descriptor) -{ -#ifdef __aarch64___ - FSDIO_WRITE_REG(base_addr, FSDIO_DESC_LIST_ADDRH_OFFSET, UPPER_32_BITS(descriptor)); - FSDIO_WRITE_REG(base_addr, FSDIO_DESC_LIST_ADDRL_OFFSET, LOWER_32_BITS(descriptor)); -#else - FSDIO_WRITE_REG(base_addr, FSDIO_DESC_LIST_ADDRH_OFFSET, 0x0U); - FSDIO_WRITE_REG(base_addr, FSDIO_DESC_LIST_ADDRL_OFFSET, (u32)(descriptor)); -#endif -} - -/** - * @name: FSdioSetTransBytes - * @msg: Set number of bytes to transfer - * @return {NONE} - * @param {uintptr} base_addr, base address of SDIO controller - * @param {u32} bytes, number of bytes to transfer - */ -static inline void FSdioSetTransBytes(uintptr base_addr, u32 bytes) -{ - FSDIO_WRITE_REG(base_addr, FSDIO_BYT_CNT_OFFSET, bytes); -} - -/** - * @name: FSdioSetBlockSize - * @msg: Set size of blocks in card - * @return {NONE} - * @param {uintptr} base_addr, base address of SDIO controller - * @param {u32} block_size, size of blocks in card - */ -static inline void FSdioSetBlockSize(uintptr base_addr, u32 block_size) -{ - FSDIO_WRITE_REG(base_addr, FSDIO_BLK_SIZ_OFFSET, block_size); -} - -/** - * @name: FSdioSetBusWidth - * @msg: Set bus width of card - * @return {NONE} - * @param {uintptr} base_addr, base address of SDIO controller - * @param {u32} width, bus width of card 1-bit, 4-bit, 8-bit - */ -static inline void FSdioSetBusWidth(uintptr base_addr, u32 width) -{ - u32 reg_val; - - switch (width) - { - case 1: - reg_val = FSDIO_CARD0_WIDTH2_1BIT; - break; - case 4: - reg_val = FSDIO_CARD0_WIDTH2_4BIT; - break; - case 8: - reg_val = FSDIO_CARD0_WIDTH1_8BIT; - break; - default: - FASSERT_MSG(0, "invalid bus width %d", width); - break; - } - - FSDIO_WRITE_REG(base_addr, FSDIO_CTYPE_OFFSET, reg_val); -} - -/** - * @name: FSdioGetBusWidth - * @msg: Get bus width for card - * @return {u32} current bus width setting - * @param {uintptr} base_addr, base address of SDIO controller - */ -static inline u32 FSdioGetBusWidth(uintptr base_addr) -{ - u32 bus_width = 1; - u32 reg_val = FSDIO_READ_REG(base_addr, FSDIO_CTYPE_OFFSET); - - if (FSDIO_CARD0_WIDTH2_4BIT & reg_val) - { - bus_width = 4; - } - else if (FSDIO_CARD0_WIDTH1_8BIT & reg_val) - { - bus_width = 8; - } - - return bus_width; -} - -/** - * @name: FSdioResetIDMA - * @msg: Reset for internal DMA - * @return {NONE} - * @param {uintptr} base_addr, base address of SDIO controller - */ -static inline void FSdioResetIDMA(uintptr base_addr) -{ - u32 reg_val = FSDIO_READ_REG(base_addr, FSDIO_BUS_MODE_OFFSET); - reg_val |= FSDIO_BUS_MODE_SWR; /* 写1软复位idma,复位完成后硬件自动清0 */ - FSDIO_WRITE_REG(base_addr, FSDIO_BUS_MODE_OFFSET, reg_val); -} - -/** - * @name: FSdioSetDDRMode - * @msg: Enable/Disable DDR mode - * @return {*} - * @param {uintptr} base_addr, base address of SDIO controller - * @param {boolean} enable, TRUE: enable DDR mode - */ -static inline void FSdioSetDDRMode(uintptr base_addr, boolean enable) -{ - u32 uhs_val = FSDIO_READ_REG(base_addr, FSDIO_UHS_REG_OFFSET); - u32 emmc_val = FSDIO_READ_REG(base_addr, FSDIO_EMMC_DDR_REG_OFFSET); - if (enable) - { - uhs_val |= FSDIO_UHS_REG_DDR; - emmc_val |= FSDIO_EMMC_DDR_CYCLE; - } - else - { - uhs_val &= ~FSDIO_UHS_REG_DDR; - emmc_val &= ~FSDIO_EMMC_DDR_CYCLE; - } - FSDIO_WRITE_REG(base_addr, FSDIO_UHS_REG_OFFSET, uhs_val); - FSDIO_WRITE_REG(base_addr, FSDIO_EMMC_DDR_REG_OFFSET, emmc_val); - - return; -} - -/** - * @name: FSdioCheckIfCardExists - * @msg: Check if card inserted - * @return {boolean} TRUE: inserted, FALSE: not-found - * @param {uintptr} base_addr, base address of SDIO controller - */ -static inline boolean FSdioCheckIfCardExists(uintptr base_addr) -{ - return (FSDIO_READ_REG(base_addr, FSDIO_CARD_DETECT_OFFSET) & FSDIO_CARD_DETECTED) ? - FALSE : TRUE; -} - -#ifdef __cplusplus -} -#endif - -#endif \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/mmc/fsdio/fsdio_intr.c b/bsp/phytium/libraries/standalone/drivers/mmc/fsdio/fsdio_intr.c deleted file mode 100644 index eff362f66b..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/mmc/fsdio/fsdio_intr.c +++ /dev/null @@ -1,226 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fsdio_intr.c - * Date: 2022-06-01 15:08:58 - * LastEditTime: 2022-06-01 15:08:58 - * Description:  This file is for SDIO interrupt related function implementation - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.1 zhugengyu 2022/6/6 modify according to tech manual. - */ -/***************************** Include Files *********************************/ - -#include "fio.h" -#include "fdebug.h" -#include "fassert.h" -#include "ftypes.h" - -#include "fsdio_hw.h" -#include "fsdio.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ -#define FSDIO_DEBUG_TAG "FSDIO-INTR" -#define FSDIO_ERROR(format, ...) FT_DEBUG_PRINT_E(FSDIO_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSDIO_WARN(format, ...) FT_DEBUG_PRINT_W(FSDIO_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSDIO_INFO(format, ...) FT_DEBUG_PRINT_I(FSDIO_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSDIO_DEBUG(format, ...) FT_DEBUG_PRINT_D(FSDIO_DEBUG_TAG, format, ##__VA_ARGS__) - -#define FSDIO_CALL_EVT_HANDLER(instance_p, evt, status, dmac_status) \ - if (instance_p->evt_handlers[evt]) \ - { \ - instance_p->evt_handlers[evt](instance_p, instance_p->evt_args[evt], status, dmac_status); \ - } - -static const u32 cmd_err_ints_mask = FSDIO_INT_RTO_BIT | FSDIO_INT_RCRC_BIT | FSDIO_INT_RE_BIT | - FSDIO_INT_DCRC_BIT | FSDIO_INT_DRTO_BIT | - FSDIO_INT_SBE_BCI_BIT; - -static const u32 dmac_err_ints_mask = FSDIO_DMAC_INT_ENA_FBE | FSDIO_DMAC_INT_ENA_DU | - FSDIO_DMAC_INT_ENA_NIS | FSDIO_DMAC_INT_ENA_AIS; -/************************** Function Prototypes ******************************/ - -/*****************************************************************************/ - -/** - * @name: FSdioGetInterruptMask - * @msg: Get SDIO controller interrupt mask - * @return {u32} interrupt mask bits - * @param {FSdio} *instance_p, SDIO controller instance - * @param {FSdioIntrType} type, Type of interrupt, controller/DMA interrupt - */ -u32 FSdioGetInterruptMask(FSdio *const instance_p, FSdioIntrType type) -{ - FASSERT(instance_p); - uintptr base_addr = instance_p->config.base_addr; - u32 mask = 0U; - - if (0 == instance_p->config.base_addr) - { - FSDIO_ERROR("Device is not yet initialized!!!"); - return mask; - } - - if (FSDIO_GENERAL_INTR == type) - { - mask = FSDIO_READ_REG(base_addr, FSDIO_INT_MASK_OFFSET); - } - else - { - mask = FSDIO_READ_REG(base_addr, FSDIO_DMAC_INT_EN_OFFSET); - } - - return mask; -} - -/** - * @name: FSdioSetInterruptMask - * @msg: Enable/Disable SDIO controller interrupt - * @return {NONE} - * @param {FSdio} *instance_p, SDIO controller instance - * @param {FSdioIntrType} type, Type of interrupt, controller/DMA interrupt - * @param {u32} set_mask, interrupt mask bits - * @param {boolean} enable, TRUE: enable interrupt mask bits - */ -void FSdioSetInterruptMask(FSdio *const instance_p, FSdioIntrType type, u32 set_mask, boolean enable) -{ - FASSERT(instance_p); - uintptr base_addr = instance_p->config.base_addr; - u32 mask = 0U; - - if (0 == instance_p->config.base_addr) - { - FSDIO_ERROR("Device is not yet initialized!!!"); - return; - } - - mask = FSdioGetInterruptMask(instance_p, type); - - if (TRUE == enable) - { - mask |= set_mask; - } - else - { - mask &= ~set_mask; - } - - if (FSDIO_GENERAL_INTR == type) - { - FSDIO_WRITE_REG(base_addr, FSDIO_INT_MASK_OFFSET, mask); - } - else - { - FSDIO_WRITE_REG(base_addr, FSDIO_DMAC_INT_EN_OFFSET, mask); - } - - return; -} - -/** - * @name: FSdioInterruptHandler - * @msg: Interrupt handler for SDIO instance - * @return {NONE} - * @param {s32} vector, Interrupt id - * @param {void} *param, Interrupt params, is SDIO instance - */ -void FSdioInterruptHandler(s32 vector, void *param) -{ - FASSERT(param); - FSdio *const instance_p = (FSdio * const)param; - uintptr base_addr = instance_p->config.base_addr; - u32 events, event_mask, dmac_events, dmac_evt_mask; - - events = FSDIO_READ_REG(base_addr, FSDIO_RAW_INTS_OFFSET); - dmac_events = FSDIO_READ_REG(base_addr, FSDIO_DMAC_STATUS_OFFSET); - event_mask = FSDIO_READ_REG(base_addr, FSDIO_INT_MASK_OFFSET); - dmac_evt_mask = FSDIO_READ_REG(base_addr, FSDIO_DMAC_INT_EN_OFFSET); - - if (!(events & FSDIO_INT_ALL_BITS) && - !(dmac_events & FSDIO_DMAC_STATUS_ALL_BITS)) - { - FSDIO_DEBUG("irq exit with no action."); - return; /* no interrupt status */ - } - - FSDIO_WRITE_REG(base_addr, 0xfd0U, 0U); - - FSDIO_DEBUG("events:0x%x,mask:0x%x,dmac_events:%x,dmac_mask:0x%x", events, event_mask, dmac_events, dmac_evt_mask); - - /* clear interrupt status */ - FSDIO_WRITE_REG(base_addr, FSDIO_RAW_INTS_OFFSET, events); - FSDIO_WRITE_REG(base_addr, FSDIO_DMAC_STATUS_OFFSET, dmac_events); - - if (((events & event_mask) == 0) && - (((dmac_events & dmac_evt_mask) == 0))) - { - return; /* no need to handle interrupt */ - } - - /* handle card detect event */ - if (((events & event_mask) & FSDIO_INT_CD_BIT) && (FALSE == instance_p->config.non_removable)) - { - FSDIO_DEBUG("sd status changed here ! status:[%d]", FSDIO_READ_REG(base_addr, FSDIO_CARD_DETECT_OFFSET)); - FSDIO_CALL_EVT_HANDLER(instance_p, FSDIO_EVT_CARD_DETECTED, events, dmac_events); - } - - /* handle error state */ - if ((dmac_events & dmac_err_ints_mask) || (events & cmd_err_ints_mask)) - { - FSDIO_ERROR("ERR:events:0x%x,mask:0x%x,dmac_evts:0x%x,dmac_mask:0x%x", - events, event_mask, dmac_events, dmac_evt_mask); - FSDIO_CALL_EVT_HANDLER(instance_p, FSDIO_EVT_ERR_OCCURE, events, dmac_events); - } - - if ((events & FSDIO_INT_DTO_BIT) && (events & FSDIO_INT_CMD_BIT)) /* handle cmd && data done */ - { - FSDIO_DEBUG("Cmd and data over !!!"); - FSDIO_CALL_EVT_HANDLER(instance_p, FSDIO_EVT_CMD_DONE, events, dmac_events); - FSDIO_CALL_EVT_HANDLER(instance_p, FSDIO_EVT_DATA_DONE, events, dmac_events); - } - else if (events & FSDIO_INT_CMD_BIT) /* handle cmd done */ - { - FSDIO_DEBUG("Cmd over !!!"); - FSDIO_CALL_EVT_HANDLER(instance_p, FSDIO_EVT_CMD_DONE, events, dmac_events); - } - else if (events & FSDIO_INT_DTO_BIT) /* handle data done */ - { - FSDIO_DEBUG("Data over !!!"); - FSDIO_CALL_EVT_HANDLER(instance_p, FSDIO_EVT_DATA_DONE, events, dmac_events); - } - - return; -} - -/** - * @name: FSdioRegisterEvtHandler - * @msg: Register event call-back function as handler for interrupt events - * @return {NONE} - * @param {FSdio} *instance_p, SDIO controller instance - * @param {FSdioEvtType} evt, interrupt event - * @param {FSdioEvtHandler} handler, event call-back function - * @param {void} *handler_arg, argument of event call-back function - */ -void FSdioRegisterEvtHandler(FSdio *const instance_p, FSdioEvtType evt, FSdioEvtHandler handler, void *handler_arg) -{ - FASSERT(instance_p); - - instance_p->evt_handlers[evt] = handler; - instance_p->evt_args[evt] = handler_arg; -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/mmc/fsdio/fsdio_pio.c b/bsp/phytium/libraries/standalone/drivers/mmc/fsdio/fsdio_pio.c deleted file mode 100644 index 37aaebc4de..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/mmc/fsdio/fsdio_pio.c +++ /dev/null @@ -1,277 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fsdio_pio.c - * Date: 2022-06-01 14:21:47 - * LastEditTime: 2022-06-01 14:21:47 - * Description:  This file is for PIO transfer related function implementation - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.1 zhugengyu 2022/6/6 modify according to tech manual. - */ -/***************************** Include Files *********************************/ - -#include "fio.h" -#include "fdebug.h" -#include "fassert.h" -#include "ftypes.h" - -#include "fsdio_hw.h" -#include "fsdio.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ -#define FSDIO_DEBUG_TAG "FSDIO-PIO" -#define FSDIO_ERROR(format, ...) FT_DEBUG_PRINT_E(FSDIO_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSDIO_WARN(format, ...) FT_DEBUG_PRINT_W(FSDIO_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSDIO_INFO(format, ...) FT_DEBUG_PRINT_I(FSDIO_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSDIO_DEBUG(format, ...) FT_DEBUG_PRINT_D(FSDIO_DEBUG_TAG, format, ##__VA_ARGS__) - -/************************** Function Prototypes ******************************/ -extern FError FSdioTransferCmd(FSdio *const instance_p, FSdioCmdData *const cmd_data_p); -extern FError FSdioPollWaitBusyCard(FSdio *const instance_p); - -/*****************************************************************************/ -/** - * @name: FSdioPIOWriteData - * @msg: Write data to fifo - * @return {FError} FSDIO_SUCCESS if write success - * @param {FSdio} *instance_p, SDIO controller instance - * @param {FSdioData} *data_p, contents of transfer data - */ -static FError FSdioPIOWriteData(FSdio *const instance_p, FSdioData *data_p) -{ - FASSERT(data_p); - FError ret = FSDIO_SUCCESS; - u32 loop; - uintptr base_addr = instance_p->config.base_addr; - const u32 wr_times = data_p->datalen / sizeof(u32); /* u8 --> u32 */ - u32 *wr_buf = (u32 *)data_p->buf; - - /* write fifo data */ - FSDIO_WRITE_REG(base_addr, FSDIO_CMD_OFFSET, FSDIO_CMD_DAT_WRITE); - for (loop = 0; loop < wr_times; loop++) - { - FSDIO_WRITE_REG(base_addr, FSDIO_DATA_OFFSET, wr_buf[loop]); - } - - return ret; -} - -/** - * @name: FSdioPIOReadData - * @msg: Read data from fifo - * @return {FError} FSDIO_SUCCESS if read success - * @param {FSdio} *instance_p, SDIO controller instance - * @param {FSdioData} *data_p, contents of transfer data - */ -FError FSdioPIOReadData(FSdio *const instance_p, FSdioData *data_p) -{ - FASSERT(data_p); - FError ret = FSDIO_SUCCESS; - u32 loop; - uintptr base_addr = instance_p->config.base_addr; - const u32 rd_times = data_p->datalen / sizeof(u32); /* u8 --> u32 */ - u32 *rd_buf = (u32 *)data_p->buf; - - /* while in PIO mode, max data transferred is 0x800 */ - if (data_p->datalen > FSDIO_MAX_FIFO_CNT) - { - FSDIO_ERROR("Fifo do not support writing more than 0x%x.", FSDIO_MAX_FIFO_CNT); - return FSDIO_ERR_NOT_SUPPORT; - } - - /* read data from fifo */ - for (loop = 0; loop < rd_times; loop++) - { - rd_buf[loop] = FSDIO_READ_REG(base_addr, FSDIO_DATA_OFFSET); - } - - return ret; -} - -/** - * @name: FSdioPIOTransfer - * @msg: Start command and data transfer in PIO mode - * @return {FError} FSDIO_SUCCESS if transfer success, otherwise failed - * @param {FSdio} *instance_p, SDIO controller instance - * @param {FSdioCmdData} *cmd_data_p, contents of transfer command and data - */ -FError FSdioPIOTransfer(FSdio *const instance_p, FSdioCmdData *const cmd_data_p) -{ - FASSERT(instance_p); - FASSERT(cmd_data_p); - FError ret = FSDIO_SUCCESS; - const boolean read = cmd_data_p->flag & FSDIO_CMD_FLAG_READ_DATA; - uintptr base_addr = instance_p->config.base_addr; - - cmd_data_p->success = FALSE; /* reset cmd transfer status */ - - if (FT_COMPONENT_IS_READY != instance_p->is_ready) - { - FSDIO_ERROR("device is not yet initialized!!!"); - return FSDIO_ERR_NOT_INIT; - } - - if (FSDIO_PIO_TRANS_MODE != instance_p->config.trans_mode) - { - FSDIO_ERROR("device is not configure in PIO transfer mode."); - return FSDIO_ERR_INVALID_STATE; - } - - /* for removable media, check if card exists */ - if ((FALSE == instance_p->config.non_removable) && - (FALSE == FSdioCheckIfCardExists(base_addr))) - { - FSDIO_ERROR("card is not detected !!!"); - return FSDIO_ERR_NO_CARD; - } - - /* wait previous command finished and card not busy */ - ret = FSdioPollWaitBusyCard(instance_p); - if (FSDIO_SUCCESS != ret) - { - return ret; - } - - /* reset fifo and not use DMA */ - FSDIO_CLR_BIT(base_addr, FSDIO_CNTRL_OFFSET, FSDIO_CNTRL_USE_INTERNAL_DMAC); - ret = FSdioResetCtrl(base_addr, FSDIO_CNTRL_FIFO_RESET); - if (FSDIO_SUCCESS != ret) - { - return ret; - } - FSDIO_CLR_BIT(base_addr, FSDIO_BUS_MODE_OFFSET, FSDIO_BUS_MODE_DE); - - if (NULL != cmd_data_p->data_p) - { - /* while in PIO mode, max data transferred is 0x800 */ - if (cmd_data_p->data_p->datalen > FSDIO_MAX_FIFO_CNT) - { - FSDIO_ERROR("Fifo do not support writing more than 0x%x.", FSDIO_MAX_FIFO_CNT); - return FSDIO_ERR_NOT_SUPPORT; - } - - /* set transfer data length and block size */ - FSdioSetTransBytes(base_addr, cmd_data_p->data_p->datalen); - FSdioSetBlockSize(base_addr, cmd_data_p->data_p->blksz); - - if (FALSE == read) /* if need to write, write to fifo before send command */ - { - /* invalide buffer for data to write */ - - FSDIO_DATA_BARRIER(); - - ret = FSdioPIOWriteData(instance_p, cmd_data_p->data_p); - } - } - - if (FSDIO_SUCCESS == ret) /* send command */ - { - ret = FSdioTransferCmd(instance_p, cmd_data_p); - } - - return ret; -} - -/** - * @name: FSdioPollWaitPIOEnd - * @msg: Wait PIO transfer finished by poll - * @return {FError} FSDIO_SUCCESS if wait success, otherwise wait failed - * @param {FSdio} *instance_p, SDIO controller instance - * @param {FSdioCmdData} *cmd_data_p, contents of transfer command and data - * @param {FSdioRelaxHandler} relax, handler of relax when wait busy - */ -FError FSdioPollWaitPIOEnd(FSdio *const instance_p, FSdioCmdData *const cmd_data_p) -{ - FASSERT(instance_p); - FASSERT(cmd_data_p); - FError ret = FSDIO_SUCCESS; - u32 reg_val; - int delay; - const boolean read = cmd_data_p->flag & FSDIO_CMD_FLAG_READ_DATA; - uintptr base_addr = instance_p->config.base_addr; - - if (FT_COMPONENT_IS_READY != instance_p->is_ready) - { - FSDIO_ERROR("device is not yet initialized!!!"); - return FSDIO_ERR_NOT_INIT; - } - - if (FSDIO_PIO_TRANS_MODE != instance_p->config.trans_mode) - { - FSDIO_ERROR("device is not configure in PIO transfer mode."); - return FSDIO_ERR_INVALID_STATE; - } - - FSDIO_INFO("wait for PIO cmd to finish ..."); - delay = FSDIO_TIMEOUT; - do - { - reg_val = FSdioGetRawStatus(base_addr); - if (instance_p->relax_handler) - { - instance_p->relax_handler(); - } - } - while (!(FSDIO_INT_CMD_BIT & reg_val) && (--delay > 0)); - - if (!(FSDIO_INT_CMD_BIT & reg_val) && (delay <= 0)) - { - FSDIO_ERROR("wait cmd done timeout, raw ints: 0x%x", reg_val); - return FSDIO_ERR_CMD_TIMEOUT; - } - - /* if need to read data, read fifo after send command */ - if ((NULL != cmd_data_p->data_p) && (read)) - { - FSDIO_INFO("wait for PIO data to read ..."); - delay = FSDIO_TIMEOUT; - do - { - reg_val = FSdioGetRawStatus(base_addr); - if (instance_p->relax_handler) - { - instance_p->relax_handler(); - } - } - while (!(FSDIO_INT_DTO_BIT & reg_val) && (--delay > 0)); - - /* clear status to ack */ - FSdioClearRawStatus(base_addr); - FSDIO_INFO("card cnt: 0x%x, fifo cnt: 0x%x", - FSDIO_READ_REG(base_addr, FSDIO_TRAN_CARD_CNT_OFFSET), - FSDIO_READ_REG(base_addr, FSDIO_TRAN_FIFO_CNT_OFFSET)); - - if (!(FSDIO_INT_DTO_BIT & reg_val) && (delay <= 0)) - { - FSDIO_ERROR("wait PIO transfer timeout, raw ints: 0x%x.", reg_val); - return FSDIO_ERR_TRANS_TIMEOUT; - } - } - - /* clear status to ack cmd done */ - FSdioClearRawStatus(base_addr); - - if (FSDIO_SUCCESS == ret) - { - ret = FSdioGetCmdResponse(instance_p, cmd_data_p); - } - - return ret; -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/mmc/fsdio/fsdio_selftest.c b/bsp/phytium/libraries/standalone/drivers/mmc/fsdio/fsdio_selftest.c deleted file mode 100644 index cf962e2cd1..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/mmc/fsdio/fsdio_selftest.c +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fsdio_selftest.c - * Date: 2022-06-02 11:49:44 - * LastEditTime: 2022-06-02 11:49:45 - * Description:  This file is for SDIO self-test function - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.1 zhugengyu 2022/6/6 modify according to tech manual. - */ -/***************************** Include Files *********************************/ - -#include "fio.h" -#include "fdebug.h" -#include "fassert.h" -#include "ftypes.h" - -#include "fsdio_hw.h" -#include "fsdio.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ -#define FSDIO_DEBUG_TAG "FSDIO-TEST" -#define FSDIO_ERROR(format, ...) FT_DEBUG_PRINT_E(FSDIO_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSDIO_WARN(format, ...) FT_DEBUG_PRINT_W(FSDIO_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSDIO_INFO(format, ...) FT_DEBUG_PRINT_I(FSDIO_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSDIO_DEBUG(format, ...) FT_DEBUG_PRINT_D(FSDIO_DEBUG_TAG, format, ##__VA_ARGS__) - -#define FSDIO_DUMPER(base_addr, reg_off, reg_name) \ - FSDIO_DEBUG("\t\t[%s]@0x%x\t=\t0x%x", reg_name, (reg_off), FSDIO_READ_REG((base_addr), (reg_off))) -/************************** Function Prototypes ******************************/ - -/*****************************************************************************/ - -/** - * @name: FSdioDumpRegister - * @msg: Dump all register value of SDIO instance - * @return {NONE} - * @param {uintptr} base_addr, base address of SDIO controller - */ -void FSdioDumpRegister(uintptr base_addr) -{ - FSDIO_DEBUG("Dump register info @0x%x", base_addr); - FSDIO_DUMPER(base_addr, FSDIO_CNTRL_OFFSET, "cntrl"); - FSDIO_DUMPER(base_addr, FSDIO_PWREN_OFFSET, "pwren"); - FSDIO_DUMPER(base_addr, FSDIO_CLKDIV_OFFSET, "clkdiv"); - FSDIO_DUMPER(base_addr, FSDIO_CLKENA_OFFSET, "clkena"); - FSDIO_DUMPER(base_addr, FSDIO_TMOUT_OFFSET, "tmout"); - FSDIO_DUMPER(base_addr, FSDIO_CTYPE_OFFSET, "ctype"); - FSDIO_DUMPER(base_addr, FSDIO_BLK_SIZ_OFFSET, "blksz"); - FSDIO_DUMPER(base_addr, FSDIO_BYT_CNT_OFFSET, "blkcnt"); - FSDIO_DUMPER(base_addr, FSDIO_INT_MASK_OFFSET, "intmask"); - FSDIO_DUMPER(base_addr, FSDIO_CMD_ARG_OFFSET, "cmdarg"); - FSDIO_DUMPER(base_addr, FSDIO_CMD_OFFSET, "cmd"); - FSDIO_DUMPER(base_addr, FSDIO_RESP0_OFFSET, "resp0"); - FSDIO_DUMPER(base_addr, FSDIO_RESP1_OFFSET, "reps1"); - FSDIO_DUMPER(base_addr, FSDIO_RESP2_OFFSET, "resp2"); - FSDIO_DUMPER(base_addr, FSDIO_RESP3_OFFSET, "resp3"); - FSDIO_DUMPER(base_addr, FSDIO_MASKED_INTS_OFFSET, "maskints"); - FSDIO_DUMPER(base_addr, FSDIO_RAW_INTS_OFFSET, "rawints"); - FSDIO_DUMPER(base_addr, FSDIO_STATUS_OFFSET, "status"); - FSDIO_DUMPER(base_addr, FSDIO_FIFOTH_OFFSET, "fifoth"); - FSDIO_DUMPER(base_addr, FSDIO_CARD_DETECT_OFFSET, "carddet"); - FSDIO_DUMPER(base_addr, FSDIO_CARD_WRTPRT_OFFSET, "wrtprt"); - FSDIO_DUMPER(base_addr, FSDIO_GPIO_OFFSET, "gpio"); - FSDIO_DUMPER(base_addr, FSDIO_TRAN_CARD_CNT_OFFSET, "trans_cardcnt"); - FSDIO_DUMPER(base_addr, FSDIO_TRAN_FIFO_CNT_OFFSET, "trans_fifocnt"); - FSDIO_DUMPER(base_addr, FSDIO_DEBNCE_OFFSET, "debnce"); - FSDIO_DUMPER(base_addr, FSDIO_UID_OFFSET, "uid"); - FSDIO_DUMPER(base_addr, FSDIO_VID_OFFSET, "vid"); - FSDIO_DUMPER(base_addr, FSDIO_HWCONF_OFFSET, "hwconf"); - FSDIO_DUMPER(base_addr, FSDIO_UHS_REG_OFFSET, "uhsreg"); - FSDIO_DUMPER(base_addr, FSDIO_CARD_RESET_OFFSET, "cardreset"); - FSDIO_DUMPER(base_addr, FSDIO_BUS_MODE_OFFSET, "busmode"); - FSDIO_DUMPER(base_addr, FSDIO_DESC_LIST_ADDRL_OFFSET, "descaddrl"); - FSDIO_DUMPER(base_addr, FSDIO_DESC_LIST_ADDRH_OFFSET, "descaddrh"); - FSDIO_DUMPER(base_addr, FSDIO_DMAC_STATUS_OFFSET, "dmacstatus"); - FSDIO_DUMPER(base_addr, FSDIO_DMAC_INT_EN_OFFSET, "dmacinten"); - FSDIO_DUMPER(base_addr, FSDIO_CUR_DESC_ADDRL_OFFSET, "curdescaddrl"); - FSDIO_DUMPER(base_addr, FSDIO_CUR_DESC_ADDRH_OFFSET, "curdescaddrh"); - FSDIO_DUMPER(base_addr, FSDIO_CUR_BUF_ADDRL_OFFSET, "curbufaddrl"); - FSDIO_DUMPER(base_addr, FSDIO_CUR_BUF_ADDRH_OFFSET, "curbufaddrh"); - FSDIO_DUMPER(base_addr, FSDIO_CARD_THRCTL_OFFSET, "card_thrctl"); - FSDIO_DUMPER(base_addr, FSDIO_UHS_REG_EXT_OFFSET, "uhsregext"); - FSDIO_DUMPER(base_addr, FSDIO_EMMC_DDR_REG_OFFSET, "emmcddr"); - FSDIO_DUMPER(base_addr, FSDIO_ENABLE_SHIFT_OFFSET, "enableshift"); -} - -/** - * @name: FSdioDumpCmdInfo - * @msg: Dump command and data info - * @return {NONE} - * @param {FSdioCmdData *const} cmd_data, info data of SD command and data - */ -void FSdioDumpCmdInfo(FSdioCmdData *const cmd_data) -{ - FSDIO_DEBUG("cmd struct @%p", cmd_data); - FSDIO_DEBUG(" opcode: %d", cmd_data->cmdidx); - FSDIO_DEBUG(" arg: 0x%x", cmd_data->cmdarg); - FSDIO_DEBUG(" resp@%p: 0x%x 0x%x 0x%x 0x%x", - cmd_data->response, - cmd_data->response[0], - cmd_data->response[1], - cmd_data->response[2], - cmd_data->response[3]); - FSDIO_DEBUG(" flag: 0x%x", cmd_data->flag); - FSDIO_DEBUG(" data @%p", cmd_data->data_p); - - if (cmd_data->data_p) - { - FSDIO_DEBUG(" buf: %p, len: %d", cmd_data->data_p->buf, - cmd_data->data_p->datalen); - FSDIO_DEBUG(" blk sz: %d", cmd_data->data_p->blksz); - FSDIO_DEBUG(" blk cnt: %d", cmd_data->data_p->blkcnt); - } -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/mmc/fsdio/fsdio_sinit.c b/bsp/phytium/libraries/standalone/drivers/mmc/fsdio/fsdio_sinit.c deleted file mode 100644 index 8724184156..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/mmc/fsdio/fsdio_sinit.c +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fsdio_sinit.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:48:41 - * Description:  This file is for static init - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2021/12/2 init - * 1.1 zhugengyu 2022/6/6 modify according to tech manual. - */ - -/***************************** Include Files *********************************/ - -#include "ftypes.h" -#include "fparameters.h" -#include "fsdio.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Variable Definitions *****************************/ - -extern const FSdioConfig FSDIO_CONFIG_TBL[FSDIO_NUM]; - -/************************** Function Prototypes ******************************/ -/** - * @name: FSdioLookupConfig - * @msg: Get the device instance default configure - * @return {const FSdioConfig *} default configure - * @param {u32} instance_id - */ -const FSdioConfig *FSdioLookupConfig(u32 instance_id) -{ - const FSdioConfig *ptr = NULL; - u32 index; - - for (index = 0; index < (u32)FSDIO_NUM; index++) - { - if (FSDIO_CONFIG_TBL[index].instance_id == instance_id) - { - ptr = &FSDIO_CONFIG_TBL[index]; - break; - } - } - - return (const FSdioConfig *)ptr; -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/mmc/fsdmmc/fsdmmc.c b/bsp/phytium/libraries/standalone/drivers/mmc/fsdmmc/fsdmmc.c deleted file mode 100644 index 0fea8b152b..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/mmc/fsdmmc/fsdmmc.c +++ /dev/null @@ -1,410 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fsdmmc.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:55:23 - * Description:  This file is for functions in this file are the minimum required functions - * for this driver. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2021/12/2 init - */ - -/***************************** Include Files *********************************/ -#include - -#include "fassert.h" -#include "fio.h" -#include "ferror_code.h" -#include "ftypes.h" -#include "fdebug.h" - - -#include "fsleep.h" - -#include "fsdmmc_hw.h" -#include "fsdmmc.h" -#include "fsdmmc_dma.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ -#define FSDMMC_DEBUG_TAG "FSDMMC" -#define FSDMMC_ERROR(format, ...) FT_DEBUG_PRINT_E(FSDMMC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSDMMC_WARN(format, ...) FT_DEBUG_PRINT_W(FSDMMC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSDMMC_INFO(format, ...) FT_DEBUG_PRINT_I(FSDMMC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSDMMC_DEBUG(format, ...) FT_DEBUG_PRINT_D(FSDMMC_DEBUG_TAG, format, ##__VA_ARGS__) - -/************************** Function Prototypes ******************************/ - -/************************** Variable Definitions *****************************/ - -/*****************************************************************************/ - -/* 此文件主要为了完成用户对外接口,用户可以使用这些接口直接开始工作 */ - -/* - 包括用户API的定义和实现 - - 同时包含必要的OPTION方法,方便用户进行配置 - - 如果驱动可以直接进行I/O操作,在此源文件下可以将API 进行实现 */ - -/** - * @name: FSdmmcCfgInitialize - * @msg: 初始化FSDMMC控制器, 使之可以使用 - * @return {FError} 驱动初始化的错误码信息,FSDMMC_SUCCESS 表示初始化成功,其它返回值表示初始化失败 - * @param {FSdmmc} *instance_p FSDMMC驱动控制数据 - * @param {FSdmmcConfig} *input_config_p FSDMMC用户输入配置 - * @note 输入配置通过FSdmmcLookupConfig获取,用户按照需要修改后传入此函数 - */ -FError FSdmmcCfgInitialize(FSdmmc *instance_p, const FSdmmcConfig *input_config_p) -{ - FASSERT(instance_p && input_config_p); - uintptr base_addr; - FError ret = FSDMMC_SUCCESS; - - /* - * If the device is started, disallow the initialize and return a Status - * indicating it is started. This allows the user to de-initialize the device - * and reinitialize, but prevents a user from inadvertently - * initializing. - */ - if (FT_COMPONENT_IS_READY == instance_p->is_ready) - { - FSDMMC_WARN("Device is already initialized!!!"); - } - - /* - * Set default values and configuration data, including setting the - * callback handlers to stubs so the system will not crash should the - * application not assign its own callbacks. - */ - FSdmmcDeInitialize(instance_p); - - instance_p->config = *input_config_p; - base_addr = instance_p->config.base_addr; - - /* - * Check if card exists - */ - if (!FSdmmcCheckIfCardExists(base_addr)) - { - FSDMMC_ERROR("Storage device not found !!! 0x%x", base_addr); - return FSDMMC_ERR_CARD_NO_FOUND; - } - - /* - * Reset the device. - */ - ret = FSdmmcReset(base_addr); - if (FSDMMC_SUCCESS == ret) - { - instance_p->is_ready = FT_COMPONENT_IS_READY; - } - - return ret; -} - -/** - * @name: FSdmmcDeInitialize - * @msg: 去使能FSDMMC控制器, 清零实例数据 - * @return {*} - * @param {FSdmmc} *instance_p FSDMMC驱动控制数据 - */ -void FSdmmcDeInitialize(FSdmmc *instance_p) -{ - FASSERT(instance_p); - - instance_p->is_ready = 0; - memset(instance_p, 0, sizeof(*instance_p)); - - return; -} - -/** - * @name: FSdmmcMakeRawCmd - * @msg: 组装生成待发送的命令 - * @return {*} - * @param {FSdmmcCmd} *cmd_p 命令控制数据 - */ -u32 FSdmmcMakeRawCmd(FSdmmcCmd *cmd_p) -{ - FASSERT(cmd_p); - u32 raw_cmd = 0; - - /* - * rawcmd : - * trty << 14 | opcode << 8 | cmdw << 6 | cice << 4 | crce << 3 | resp - */ - raw_cmd |= FSDMMC_CMD_SETTING_CMDI(cmd_p->cmdidx); - - if (cmd_p->flag & FSDMMC_CMD_FLAG_ADTC) - { - raw_cmd |= FSDMMC_CMD_SETTING_TRTY(0b10); /* adtc指令 */ - } - - if (0 == (cmd_p->flag & FSDMMC_CMD_FLAG_EXP_RESP)) - { - raw_cmd |= FSDMMC_CMD_NO_RESP; - } - else if (cmd_p->flag & FSDMMC_CMD_FLAG_EXP_LONG_RESP) - { - raw_cmd |= FSDMMC_CMD_RESP_136_BIT; - } - else - { - raw_cmd |= FSDMMC_CMD_RESP_48_BIT; - } - - return raw_cmd; -} - -/** - * @name: FSdmmcWaitCmdEnd - * @msg: 阻塞等待命令发送完成,获取命令返回的响应 - * @return {FError} FSDMMC_SUCCESS表示命令发送成功,其它表示命令发送失败 - * @param {uintptr} base_addr FSDMMC控制器基地址 - * @param {FSdmmcCmd} *cmd_p 命令控制数据 - */ -static FError FSdmmcWaitCmdEnd(uintptr base_addr, FSdmmcCmd *cmd_p) -{ - FASSERT(cmd_p); - FError ret = FSDMMC_SUCCESS; - - ret = FSdmmcWaitStatus(base_addr, FSDMMC_TIMEOUT); - if (FSDMMC_SUCCESS != ret) - { - return ret; - } - - if (cmd_p->flag & FSDMMC_CMD_FLAG_EXP_RESP) - { - if (cmd_p->flag & FSDMMC_CMD_FLAG_EXP_LONG_RESP) - { - cmd_p->response[0] = FSDMMC_READ_REG(base_addr, FSDMMC_CMD_RESP_1_REG_OFFSET); - cmd_p->response[1] = FSDMMC_READ_REG(base_addr, FSDMMC_CMD_RESP_2_REG_OFFSET); - cmd_p->response[2] = FSDMMC_READ_REG(base_addr, FSDMMC_CMD_RESP_3_REG_OFFSET); - cmd_p->response[3] = FSDMMC_READ_REG(base_addr, FSDMMC_CMD_RESP_4_REG_OFFSET); - } - else - { - cmd_p->response[0] = FSDMMC_READ_REG(base_addr, FSDMMC_CMD_RESP_1_REG_OFFSET); - cmd_p->response[1] = 0; - cmd_p->response[2] = 0; - cmd_p->response[3] = 0; - } - } - - FSDMMC_INFO("get cmd resp: 0x%x:0x%x:0x%x:0x%x", - cmd_p->response[0], - cmd_p->response[1], - cmd_p->response[2], - cmd_p->response[3]); - - return FSDMMC_SUCCESS; -} - -/** - * @name: FSdmmcSendCmd - * @msg: 发送命令 - * @return {FError} FSDMMC_SUCCESS表示命令发送成功,其它表示命令发送失败 - * @param {uintptr} base_addr FSDMMC控制器基地址 - * @param {FSdmmcCmd} *cmd_p 命令控制数据 - */ -void FSdmmcSendCmd(uintptr base_addr, FSdmmcCmd *cmd_p) -{ - FASSERT(cmd_p); - u32 raw_cmd = FSdmmcMakeRawCmd(cmd_p); - - FSdmmcSendPrivateCmd(base_addr, raw_cmd, cmd_p->cmdarg); -} - -/** - * @name: FSdmmcTransferCmdPoll - * @msg: 通过FSDMMC轮询方式发送命令,阻塞等待命令返回 - * @return {*} - * @param {uintptr} base_addr FSDMMC控制器基地址 - * @param {FSdmmcCmd} *cmd_p 命令控制数据 - */ -static FError FSdmmcTransferCmdPoll(uintptr base_addr, FSdmmcCmd *cmd_p) -{ - FASSERT(cmd_p); - FSdmmcSendCmd(base_addr, cmd_p); - return FSdmmcWaitCmdEnd(base_addr, cmd_p); -} - -/** - * @name: FSdmmcSendAdtcCmd - * @msg: 发送ADTC命令 - * @return {*} - * @param {uintptr} base_addr FSDMMC控制器基地址 - * @param {FSdmmcCmd} *cmd_p 命令控制数据 - */ -static void FSdmmcSendAdtcCmd(uintptr base_addr, FSdmmcCmd *cmd_p) -{ - FASSERT(cmd_p); - u32 raw_cmd = FSdmmcMakeRawCmd(cmd_p); - - FSdmmcClearNormalInterruptStatus(base_addr); - raw_cmd |= FSDMMC_CMD_SETTING_TRTY(0b10); /* adtc指令 */ - FSDMMC_WRITE_REG(base_addr, FSDMMC_CMD_SETTING_REG_OFFSET, raw_cmd); - return; -} - -/** - * @name: FSdmmcSendData - * @msg: 发送数据 - * @return {*} - * @param {uintptr} base_addr FSDMMC控制器基地址 - * @param {boolean} read TREU: 读数据 FALSE: 写数据 - * @param {FSdmmcCmd} *cmd_p 命令控制数据 - */ -FError FSdmmcSendData(uintptr base_addr, boolean read, FSdmmcCmd *cmd_p) -{ - FASSERT(cmd_p); - FSdmmcData *dat_p = cmd_p->data_p; - u32 card_addr; - u32 blk_cnt; - FError ret = FSDMMC_SUCCESS; - - if ((dat_p->datalen >= FSDMMC_DMA_ADDR_ALIGN) && (dat_p->datalen % FSDMMC_DMA_ADDR_ALIGN != 0)) - { - FSDMMC_ERROR("Invalid size: total = %d.", dat_p->datalen); - return FSDMMC_ERR_INVALID_BUF; - } - - if (((uintptr)(dat_p->buf) % FSDMMC_DMA_ADDR_ALIGN) != 0) - { - FSDMMC_ERROR("Buffer %p can not be used for DMA.", dat_p->buf); - return FSDMMC_ERR_INVALID_BUF; - } - - card_addr = cmd_p->cmdarg; - blk_cnt = dat_p->datalen / dat_p->blksz; - if (dat_p->datalen % dat_p->blksz) - { - blk_cnt++; - } - - FSDMMC_INFO("Data len: %d, card addr: 0x%x, blk cnt: %d, is %s", - dat_p->datalen, card_addr, blk_cnt, read ? "read" : "write"); - - if (read) - { - if ((cmd_p->flag & FSDMMC_CMD_FLAG_ADTC) && (dat_p->blksz > dat_p->datalen)) - { - FSdmmcSendAdtcCmd(base_addr, cmd_p); - } - /* read data */ - FSdmmcSetReadDMA(base_addr, (uintptr)card_addr, blk_cnt, dat_p->buf); - } - else - { - /* invalidate write buf */ - FSDMMC_DATA_BARRIER(); - - /* write data */ - FSdmmcSetWriteDMA(base_addr, (uintptr)card_addr, blk_cnt, dat_p->buf); - } - - return ret; -} - -/** - * @name: FSdmmcTransferDataPoll - * @msg: 通过FSDMMC轮询方式发送数据,阻塞等待数据返回 - * @return {*} - * @param {uintptr} base_addr FSDMMC控制器基地址 - * @param {FSdmmcCmd} *cmd_p 待发送数据 - */ -static FError FSdmmcTransferDataPoll(uintptr base_addr, FSdmmcCmd *cmd_p) -{ - FASSERT(cmd_p); - FError ret = FSDMMC_SUCCESS; - FSdmmcData *dat_p = cmd_p->data_p; - const boolean read = (FSDMMC_CMD_FLAG_READ_DATA == (cmd_p->flag & FSDMMC_CMD_FLAG_READ_DATA)); - - ret = FSdmmcSendData(base_addr, read, cmd_p); - if (FSDMMC_SUCCESS != ret) - { - return ret; - } - - ret = FSdmmcWaitCmdEnd(base_addr, cmd_p); - if (FSDMMC_SUCCESS != ret) - { - return ret; - } - - ret = FSdmmcWaitDMAStatus(base_addr, read, FSDMMC_TIMEOUT); - if (FSDMMC_SUCCESS != ret) - { - return ret; - } - - FSDMMC_DATA_BARRIER(); - return ret; -} - -/** - * @name: FSdmmcPollTransfer - * @msg: 通过FSDMMC轮询方式发送/接收数据和命令 - * @return {FError} 驱动初始化的错误码信息,FSDMMC_SUCCESS 表示发送/接收成功,其它返回值表示发送/接收失败 - * @param {FSdmmc} *instance_p FSDMMC驱动控制数据 - * @param {FSdmmcCmd} *cmd_data_p FSDMMC数据和命令 - * @note FSDMMC控制器初始化后才能调用此函数 - */ -FError FSdmmcPollTransfer(FSdmmc *instance_p, FSdmmcCmd *cmd_data_p) -{ - FASSERT(instance_p && cmd_data_p); - uintptr base_addr = instance_p->config.base_addr; - FError ret = FSDMMC_SUCCESS; - - if (FALSE == FSdmmcCheckIfCardExists(base_addr)) - { - FSDMMC_ERROR("Card not found !!! fsdio ctrl base 0x%x.", base_addr); - return FSDMMC_ERR_CARD_NO_FOUND; - } - - if (cmd_data_p->flag & FSDMMC_CMD_FLAG_EXP_DATA) - { - /* transfer data */ - FSDMMC_INFO("====DATA [%d] START: buf: %p=====", cmd_data_p->cmdidx, cmd_data_p->data_p->buf); - ret = FSdmmcTransferDataPoll(base_addr, cmd_data_p); - if (FSDMMC_SUCCESS != ret) - { - FSDMMC_ERROR("Transfer data failed 0x%x.", ret); - return ret; - } - - FSDMMC_INFO("====DATA [%d] END 0x%x=====", cmd_data_p->cmdidx, ret); - } - else - { - /* transfer command */ - FSDMMC_INFO("=====CMD [%d] START=====", cmd_data_p->cmdidx); - ret = FSdmmcTransferCmdPoll(base_addr, cmd_data_p); - if (FSDMMC_SUCCESS != ret) - { - FSDMMC_ERROR("Send cmd failed 0x%x.", ret); - return ret; - } - - FSDMMC_INFO("=====CMD [%d] END: 0x%x=====", cmd_data_p->cmdidx, ret); - } - - return ret; -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/mmc/fsdmmc/fsdmmc.h b/bsp/phytium/libraries/standalone/drivers/mmc/fsdmmc/fsdmmc.h deleted file mode 100644 index 7805a17679..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/mmc/fsdmmc/fsdmmc.h +++ /dev/null @@ -1,174 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fsdmmc.h - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:55:57 - * Description:  This file is for functions in this file are the minimum required functions - * for this driver. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2021/12/2 init - */ - -#ifndef FSDMMC_H -#define FSDMMC_H -/***************************** Include Files *********************************/ - -#include "ftypes.h" -#include "ferror_code.h" -#include "fkernel.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/************************** Constant Definitions *****************************/ -#define FSDMMC_SUCCESS FT_SUCCESS -#define FSDMMC_ERR_NOT_READY FT_MAKE_ERRCODE(ErrModBsp, ErrBspMmc, 1) -#define FSDMMC_ERR_TIMEOUT FT_MAKE_ERRCODE(ErrModBsp, ErrBspMmc, 2) -#define FSDMMC_ERR_CMD_FAILED FT_MAKE_ERRCODE(ErrModBsp, ErrBspMmc, 3) -#define FSDMMC_ERR_DATA_FAILED FT_MAKE_ERRCODE(ErrModBsp, ErrBspMmc, 4) -#define FSDMMC_ERR_CARD_NO_FOUND FT_MAKE_ERRCODE(ErrModBsp, ErrBspMmc, 5) -#define FSDMMC_ERR_INVALID_BUF FT_MAKE_ERRCODE(ErrModBsp, ErrBspMmc, 6) - -/**************************** Type Definitions *******************************/ -enum -{ - FSDMMC_DMA_BD_INTR = 0, - FSDMMC_CMD_INTR, - FSDMMC_ERROR_INTR, - - FSDMMC_INTR_NUM -}; /* 中断类型 */ - -enum -{ - FSDMMC_EVT_CARD_REMOVED = 0, - FSDMMC_EVT_CMD_DONE, - FSDMMC_EVT_CMD_ERROR, - FSDMMC_EVT_CMD_RESP_ERROR, - FSDMMC_EVT_DATA_ERROR, - FSDMMC_EVT_DATA_READ_DONE, - FSDMMC_EVT_DATA_WRITE_DONE, - - FSDMMC_EVT_NUM -}; /* 事件类型 */ - -/** - * This typedef contains data information for the device. - */ -typedef struct -{ - u8 *buf; - u32 blksz; - u32 blkcnt; - u32 datalen; -} FSdmmcData; - -/** - * This typedef contains command information for the device. - */ -typedef struct -{ - u32 cmdidx; - u32 cmdarg; - u32 resptype; - u32 response[4]; - u32 flag; -#define FSDMMC_CMD_FLAG_NEED_STOP BIT(0) -#define FSDMMC_CMD_FLAG_NEED_INIT BIT(1) -#define FSDMMC_CMD_FLAG_EXP_RESP BIT(2) -#define FSDMMC_CMD_FLAG_EXP_LONG_RESP BIT(3) -#define FSDMMC_CMD_FLAG_NEED_RESP_CRC BIT(4) -#define FSDMMC_CMD_FLAG_EXP_DATA BIT(5) -#define FSDMMC_CMD_FLAG_WRITE_DATA BIT(6) -#define FSDMMC_CMD_FLAG_READ_DATA BIT(7) -#define FSDMMC_CMD_FLAG_NEED_AUTO_STOP BIT(8) -#define FSDMMC_CMD_FLAG_ADTC BIT(9) - FSdmmcData *data_p; -} FSdmmcCmd; - -/** - * This typedef contains configuration information for the device. - */ -typedef struct -{ - u32 instance_id; /* Device instance id */ - uintptr base_addr; /* Device base address */ - u32 irq_num[FSDMMC_INTR_NUM]; -} FSdmmcConfig; - -typedef void (*FSdmmcEventHandler)(void *args); - -/** - * This typedef contains driver instance data. The user is required to allocate a - * variable of this type for every device in the system. A pointer - * to a variable of this type is then passed to the driver API functions. - */ -typedef struct -{ - FSdmmcConfig config; /* Current active configs */ - u32 is_ready; /* Device is initialized and ready */ - FSdmmcEventHandler evt_handler[FSDMMC_EVT_NUM]; - void *evt_args[FSDMMC_EVT_NUM]; -} FSdmmc; /* Device instance */ - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ - -/* 获取FSDMMC控制器默认配置 */ -const FSdmmcConfig *FSdmmcLookupConfig(u32 instance_id); - -/* 初始化FSDMMC控制器, 使之可以使用 */ -FError FSdmmcCfgInitialize(FSdmmc *instance_p, const FSdmmcConfig *cofig_p); - -/* 去使能FSDMMC控制器, 清零实例数据 */ -void FSdmmcDeInitialize(FSdmmc *instance_p); - -/* 通过FSDMMC轮询方式发送/接收数据和命令 */ -FError FSdmmcPollTransfer(FSdmmc *instance_p, FSdmmcCmd *cmd_data_p); - -/* 通过FSDMMC中断方式发送/接收数据和命令 */ -FError FSdmmcInterruptTransfer(FSdmmc *instance_p, FSdmmcCmd *cmd_data_p); - -/* 获取FSDMMC的中断掩码 */ -u32 FSdmmcGetInterruptMask(uintptr base_addr, u32 intr_type); - -/* 设置FSDMMC的中断掩码 */ -void FSdmmcSetInterruptMask(uintptr base_addr, u32 intr_type, u32 mask, boolean enable); - -/* 命令中断响应函数 */ -void FSdmmcCmdInterrupHandler(s32 vector, void *param); - -/* 错误中断响应函数 */ -void FSdmmcErrInterrupHandler(s32 vector, void *param); - -/* DMA中断响应函数 */ -void FSdmmcDmaInterrupHandler(s32 vector, void *param); - -/* 注册中断事件响应函数 */ -void FSdmmcRegisterInterruptHandler(FSdmmc *instance_p, u32 event, FSdmmcEventHandler handler, void *args); - -#ifdef __cplusplus -} -#endif - - -#endif diff --git a/bsp/phytium/libraries/standalone/drivers/mmc/fsdmmc/fsdmmc_dma.c b/bsp/phytium/libraries/standalone/drivers/mmc/fsdmmc/fsdmmc_dma.c deleted file mode 100644 index 08ba04333e..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/mmc/fsdmmc/fsdmmc_dma.c +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fsdmmc_dma.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:49:31 - * Description:  This file is dma descriptor management API. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2021/12/2 init - */ - -/***************************** Include Files *********************************/ -#include "fassert.h" -#include "fio.h" -#include "fdebug.h" - -#include "fsdmmc_hw.h" -#include "fsdmmc.h" -#include "fsdmmc_dma.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ -#define FSDMMC_DEBUG_TAG "FSDMMC-DMA" -#define FSDMMC_ERROR(format, ...) FT_DEBUG_PRINT_E(FSDMMC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSDMMC_WARN(format, ...) FT_DEBUG_PRINT_W(FSDMMC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSDMMC_INFO(format, ...) FT_DEBUG_PRINT_I(FSDMMC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSDMMC_DEBUG(format, ...) FT_DEBUG_PRINT_D(FSDMMC_DEBUG_TAG, format, ##__VA_ARGS__) - -/************************** Function Prototypes ******************************/ - -/************************** Variable Definitions *****************************/ - -/*****************************************************************************/ -/** - * @name: FSdmmcSetReadDMA - * @msg: 设置读数据DMA配置 - * @return {*} - * @param {uintptr} base_addr FSDMMC 控制器基地址 - * @param {uintptr} card_addr 读卡地址 - * @param {u32} blk_cnt 读卡的block数 - * @param {void} *buf_p 读卡的目的地址 - */ -void FSdmmcSetReadDMA(uintptr base_addr, uintptr card_addr, u32 blk_cnt, void *buf_p) -{ - FASSERT(buf_p); - - u32 dsth = UPPER_32_BITS((uintptr)buf_p); /* DMA传输目的地址--> sd read buf */ - u32 dstl = LOWER_32_BITS((uintptr)buf_p); - u32 srch = UPPER_32_BITS((uintptr)card_addr); /* DMA传输源地址 --> sd card */ - u32 srcl = LOWER_32_BITS((uintptr)card_addr); - - FSDMMC_INFO("sd card: 0x%x:0x%x ==> mem space: 0x%x:0x%x", - srch, srcl, dsth, dstl); - - FSDMMC_INFO("Read %d blks from 0x%x", blk_cnt, card_addr); - - /* DMA 复位 */ - FSDMMC_SET_BIT(base_addr, FSDMMC_SOFTWARE_RESET_REG_OFFSET, FSDMMC_SOFTWARE_RESET_BDRST); - FSDMMC_CLR_BIT(base_addr, FSDMMC_SOFTWARE_RESET_REG_OFFSET, FSDMMC_SOFTWARE_RESET_BDRST); - - /* 设置传输块数目 */ - FSDMMC_WRITE_REG(base_addr, FSDMMC_BLK_CNT_REG_OFFSET, blk_cnt); - - /* 清除状态寄存器 */ - FSdmmcClearErrorInterruptStatus(base_addr); - FSdmmcClearBDInterruptStatus(base_addr); - FSdmmcClearNormalInterruptStatus(base_addr); - - FSDMMC_INFO("Base addr: 0x%x buf_p: %p", base_addr, buf_p); - - FSDMMC_DATA_BARRIER(); - - /* DMA 读卡地址配置:4 个 cycle - 系统低 4B-系统高 4B-SD 低 4B- SD 高 4B */ - FSDMMC_WRITE_REG(base_addr, FSDMMC_DAT_IN_M_RX_BD_REG_OFFSET, dstl); - FSDMMC_WRITE_REG(base_addr, FSDMMC_DAT_IN_M_RX_BD_REG_OFFSET, dsth); - FSDMMC_WRITE_REG(base_addr, FSDMMC_DAT_IN_M_RX_BD_REG_OFFSET, srcl); - FSDMMC_WRITE_REG(base_addr, FSDMMC_DAT_IN_M_RX_BD_REG_OFFSET, srch); - - - FSDMMC_INFO("DMA READ START!"); - return; -} - -/** - * @name: FSdmmcSetWriteDMA - * @msg: 设置写数据DMA配置 - * @return {*} - * @param {uintptr} base_addr FSDMMC 控制器基地址 - * @param {uintptr} card_addr 写卡地址 - * @param {u32} blk_cnt 写卡的block数 - * @param {void} *buf_p 写卡的源地址 - */ -void FSdmmcSetWriteDMA(uintptr base_addr, uintptr card_addr, u32 blk_cnt, const void *buf_p) -{ - FASSERT(buf_p); - u32 srch = UPPER_32_BITS((uintptr)buf_p); /* DMA传输源地址--> sd read buf */ - u32 srcl = LOWER_32_BITS((uintptr)buf_p); - u32 dsth = UPPER_32_BITS((uintptr)card_addr); /* DMA传输目的地址 --> sd card */ - u32 dstl = LOWER_32_BITS((uintptr)card_addr); - - FSDMMC_INFO("mem space: 0x%x:0x%x ==> sd card: 0x%x:0x%x", - srch, srcl, dsth, dstl); - - FSDMMC_INFO("Write %d blks from 0x%x", blk_cnt, card_addr); - - /* DMA 复位 */ - FSDMMC_SET_BIT(base_addr, FSDMMC_SOFTWARE_RESET_REG_OFFSET, FSDMMC_SOFTWARE_RESET_BDRST); - FSDMMC_CLR_BIT(base_addr, FSDMMC_SOFTWARE_RESET_REG_OFFSET, FSDMMC_SOFTWARE_RESET_BDRST); - - /* 设置传输块数目 */ - FSDMMC_WRITE_REG(base_addr, FSDMMC_BLK_CNT_REG_OFFSET, blk_cnt); - - /* 清除状态寄存器 */ - FSdmmcClearErrorInterruptStatus(base_addr); - FSdmmcClearBDInterruptStatus(base_addr); - FSdmmcClearNormalInterruptStatus(base_addr); - - FSDMMC_DATA_BARRIER(); - - /* DMA 写卡地址配置:4 个 cycle - 系统低 4B-系统高 4B-SD 低 4B- SD 高 4B */ - FSDMMC_WRITE_REG(base_addr, FSDMMC_DAT_IN_M_TX_BD_REG_OFFSET, srcl); - FSDMMC_WRITE_REG(base_addr, FSDMMC_DAT_IN_M_TX_BD_REG_OFFSET, srch); - FSDMMC_WRITE_REG(base_addr, FSDMMC_DAT_IN_M_TX_BD_REG_OFFSET, dstl); - FSDMMC_WRITE_REG(base_addr, FSDMMC_DAT_IN_M_TX_BD_REG_OFFSET, dsth); - - FSDMMC_INFO("DMA WRITE START!"); - return; -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/mmc/fsdmmc/fsdmmc_dma.h b/bsp/phytium/libraries/standalone/drivers/mmc/fsdmmc/fsdmmc_dma.h deleted file mode 100644 index 51fb27175c..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/mmc/fsdmmc/fsdmmc_dma.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fsdmmc_dma.h - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:51:25 - * Description:  This file is dma descriptormanagement API. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2021/12/2 init - */ - -#ifndef FSDMMC_DMA_H -#define FSDMMC_DMA_H -/***************************** Include Files *********************************/ -#include "ftypes.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ -/* 设置读数据DMA配置 */ -void FSdmmcSetReadDMA(uintptr base_addr, uintptr card_addr, u32 blk_cnt, void *buf_p); - -/* 设置写数据DMA配置 */ -void FSdmmcSetWriteDMA(uintptr base_addr, uintptr card_addr, u32 blk_cnt, const void *buf_p); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/bsp/phytium/libraries/standalone/drivers/mmc/fsdmmc/fsdmmc_g.c b/bsp/phytium/libraries/standalone/drivers/mmc/fsdmmc/fsdmmc_g.c deleted file mode 100644 index 5824c10767..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/mmc/fsdmmc/fsdmmc_g.c +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fsdmmc_g.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:53:31 - * Description:  This file contains a configuration table that specifies the configuration of - * the fsdmmc devices in the system. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2021/12/2 init - */ - -/* - This file contains a configuration table that specifies the configuration -- 驱动全局变量定义,包括静态配置参数 */ - -/***************************** Include Files *********************************/ - -#include "ftypes.h" -#include "fparameters.h" - -#include "fsdmmc.h" -#include "fsdmmc_hw.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ - -/************************** Variable Definitions *****************************/ - -const FSdmmcConfig FSDMMC_CONFIG_TBL[FSDMMC_NUM] = -{ - [FSDMMC0_ID] = - { - .instance_id = FSDMMC0_ID, /* Id of device*/ - .base_addr = FSDMMC0_BASE_ADDR, - .irq_num = - { - [FSDMMC_CMD_INTR] = FSDMMC0_CMD_IRQ_NUM, - [FSDMMC_DMA_BD_INTR] = FSDMMC0_DMA_IRQ_NUM, - [FSDMMC_ERROR_INTR] = FSDMMC0_ERR_IRQ_NUM - } - } -}; - - -/*****************************************************************************/ diff --git a/bsp/phytium/libraries/standalone/drivers/mmc/fsdmmc/fsdmmc_hw.c b/bsp/phytium/libraries/standalone/drivers/mmc/fsdmmc/fsdmmc_hw.c deleted file mode 100644 index ce66d24978..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/mmc/fsdmmc/fsdmmc_hw.c +++ /dev/null @@ -1,261 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fsdmmc_hw.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:54:02 - * Description:  This file contains macros that can be used to access the device. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2021/12/2 init - */ - -/***************************** Include Files *********************************/ -#include "fassert.h" -#include "fdebug.h" -#include "fsdmmc_hw.h" -#include "fsdmmc.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ -#define FSDMMC_DEBUG_TAG "FSDMMC-HW" -#define FSDMMC_ERROR(format, ...) FT_DEBUG_PRINT_E(FSDMMC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSDMMC_WARN(format, ...) FT_DEBUG_PRINT_W(FSDMMC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSDMMC_INFO(format, ...) FT_DEBUG_PRINT_I(FSDMMC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSDMMC_DEBUG(format, ...) FT_DEBUG_PRINT_D(FSDMMC_DEBUG_TAG, format, ##__VA_ARGS__) - -/************************** Function Prototypes ******************************/ -/** - * @name: FSdmmcSoftwareReset - * @msg: 完成软复位 - * @return {*} - * @param {uintptr} base_addr FSDMMC控制器基地址 - * @param {int} retries 重试次数 - */ -FError FSdmmcSoftwareReset(uintptr base_addr, int retries) -{ - FASSERT(retries > 1); - u32 reg_val; - - FSDMMC_SET_BIT(base_addr, FSDMMC_SOFTWARE_RESET_REG_OFFSET, FSDMMC_SOFTWARE_RESET_SRST); - FSDMMC_CLR_BIT(base_addr, FSDMMC_SOFTWARE_RESET_REG_OFFSET, FSDMMC_SOFTWARE_RESET_SRST); - - do - { - reg_val = FSDMMC_READ_REG(base_addr, FSDMMC_STATUS_REG_OFFSET); - } - while (!(reg_val & FSDMMC_STATUS_IDIE) && - (retries-- > 0)); - - if (!(reg_val & FSDMMC_STATUS_IDIE) && (retries <= 0)) - { - FSDMMC_ERROR("Software reset timeout!!! status: 0x%x", reg_val); - return FSDMMC_ERR_TIMEOUT; - } - - return FSDMMC_SUCCESS; -} - -/** - * @name: FSdmmcSetCardClk - * @msg: 设置FSDMMC的时钟 - * @return {*} - * @param {uintptr} base_addr FSDMMC控制器基地址 - * @param {u32} clk_freq_hz 时钟频率,HZ - */ -FError FSdmmcSetCardClk(uintptr base_addr, u32 clk_freq_hz) -{ - FSDMMC_WRITE_REG(base_addr, FSDMMC_CLOCK_DIV_REG_OFFSET, FSDMMC_CLK_DIVIDER(clk_freq_hz)); - FSDMMC_WRITE_REG(base_addr, FSDMMC_SD_DRV_REG_OFFSET, FSDMMC_DEFAULT_DRV); - FSDMMC_WRITE_REG(base_addr, FSDMMC_SD_SAMP_REG_OFFSET, FSDMMC_DEFAULT_SAMP); - - return FSdmmcSoftwareReset(base_addr, FSDMMC_TIMEOUT); -} - -static const char *FSdmmcGetRespTypeStr(u32 hw_cmd) -{ - const char *str; - - switch (FSDMMC_CMD_RESP_MASK & hw_cmd) - { - case FSDMMC_CMD_NO_RESP: - str = "NONE"; - break; - case FSDMMC_CMD_RESP_136_BIT: - str = "LONG"; - break; - case FSDMMC_CMD_RESP_48_BIT: - str = "SHORT"; - break; - case FSDMMC_CMD_RESP_48_BIT_BUSY_CHECK: - str = "SHORT CHECK BUSY"; - break; - default: - FASSERT(0); - } - - return str; -} - -/** - * @name: FSdmmcSendPrivateCmd - * @msg: 发送命令 - * @return {*} - * @param {uintptr} base_addr FSDMMC控制器基地址 - * @param {u32} cmd 待发送的命令 - * @param {u32} arg 待发送命令的参数 - */ -void FSdmmcSendPrivateCmd(uintptr base_addr, u32 cmd, u32 arg) -{ - /* 清空状态寄存器 */ - FSdmmcClearNormalInterruptStatus(base_addr); - FSdmmcClearErrorInterruptStatus(base_addr); - FSdmmcClearBDInterruptStatus(base_addr); - - /* 设置命令 */ - FSDMMC_WRITE_REG(base_addr, FSDMMC_CMD_SETTING_REG_OFFSET, cmd); - - FSDMMC_DATA_BARRIER(); - - /* 设置参数,同时触发发送命令 */ - FSDMMC_WRITE_REG(base_addr, FSDMMC_ARGUMENT_REG_OFFSET, FSDMMC_ARGUMENT_MASK & arg); - - FSDMMC_INFO("CMD: 0x%08x ", FSDMMC_READ_REG(base_addr, FSDMMC_CMD_SETTING_REG_OFFSET)); - FSDMMC_INFO("ARG: 0x%08x", FSDMMC_READ_REG(base_addr, FSDMMC_ARGUMENT_REG_OFFSET)); - FSDMMC_INFO("RESP: %s", FSdmmcGetRespTypeStr(cmd)); -} - -/** - * @name: FSdmmcReset - * @msg: 重置FSDMMC控制器 - * @return {*} - * @param {uintptr} base_addr FSDMMC控制器基地址 - */ -FError FSdmmcReset(uintptr base_addr) -{ - u32 reg_val; - FError ret = FSDMMC_SUCCESS; - - ret = FSdmmcSoftwareReset(base_addr, FSDMMC_TIMEOUT); - if (FSDMMC_SUCCESS != ret) - { - return ret; - } - - /* set card detection */ - FSDMMC_WRITE_REG(base_addr, FSDMMC_SD_SEN_REG_OFFSET, 0x0); - reg_val = FSDMMC_SEN_CREFR_VAL | FSDMMC_SEN_DEBNCE_VAL; - FSDMMC_WRITE_REG(base_addr, FSDMMC_SD_SEN_REG_OFFSET, reg_val); - - /* configure cmd data timeout */ - FSDMMC_WRITE_REG(base_addr, FSDMMC_TIMEOUT_CMD_REG_OFFSET, FSDMMC_CMD_TIMEOUT); - FSDMMC_WRITE_REG(base_addr, FSDMMC_TIMEOUT_DATA_REG_OFFSET, FSDMMC_DATA_TIMEOUT); - - /* handle DMA cache */ - FSDMMC_WRITE_REG(base_addr, FSDMMC_HDS_AXI_REG_CONF1_REG_OFFSET, FSDMMC_AXI_CONF1); - FSDMMC_WRITE_REG(base_addr, FSDMMC_HDS_AXI_REG_CONF2_REG_OFFSET, FSDMMC_AXI_CONF2); - - /* set ending */ - reg_val = FSDMMC_PERMDW_STD_END | FSDMMC_PERMDR_STD_END; - FSDMMC_WRITE_REG(base_addr, FSDMMC_CONTROLL_SETTING_REG_OFFSET, reg_val); - - /* disable interrupt */ - FSDMMC_WRITE_REG(base_addr, FSDMMC_NORMAL_INT_EN_REG_OFFSET, 0x0); - FSDMMC_WRITE_REG(base_addr, FSDMMC_ERROR_INT_EN_REG_OFFSET, 0x0); - FSDMMC_WRITE_REG(base_addr, FSDMMC_BD_ISR_EN_REG_OFFSET, 0x0); - - /* clear interrupr status */ - FSdmmcClearNormalInterruptStatus(base_addr); - FSdmmcClearErrorInterruptStatus(base_addr); - FSdmmcClearBDInterruptStatus(base_addr); - - return ret; -} - -/** - * @name: FSdmmcWaitStatus - * @msg: 等待命令完成或者命令错误状态 - * @return {*} - * @param {uintptr} base_addr FSDMMC控制器基地址 - * @param {int} retries 重试次数 - */ -FError FSdmmcWaitStatus(uintptr base_addr, int retries) -{ - FASSERT(retries > 1); - const u32 status_mask = FSDMMC_NORMAL_INT_STATUS_CC | FSDMMC_NORMAL_INT_STATUS_EI; /* 等待命令完成或者发生错误 */ - u32 status; - - do - { - status = status_mask & FSDMMC_READ_REG(base_addr, FSDMMC_NORMAL_INT_STATUS_REG_OFFSET); - } - while ((!status) && (retries-- > 0)); - - if (FSDMMC_NORMAL_INT_STATUS_EI & status) - { - FSDMMC_ERROR("Error status: 0x%x, remain retries: %d", status, retries); - FSdmmcReset(base_addr); - return FSDMMC_ERR_CMD_FAILED; - } - else if (0 >= retries) - { - FSDMMC_ERROR("Wait timeout!!! status 0x%x", status); - return FSDMMC_ERR_TIMEOUT; - } - - return FSDMMC_SUCCESS; -} - -/** - * @name: FSdmmcWaitDMAStatus - * @msg: 等待数据传输完成或者传输错误状态 - * @return {*} - * @param {uintptr} base_addr FSDMMC控制器基地址 - * @param {boolean} read TRUE: 当前是读数据 FALSE: 当前是写数据 - * @param {int} retries 重试次数 - */ -FError FSdmmcWaitDMAStatus(uintptr base_addr, boolean read, int retries) -{ - const u32 status_mask = read ? - (FSDMMC_BD_ISR_REG_RESPE | FSDMMC_BD_ISR_REG_DAIS) : /* 等待DMA传输完成或者发生错误 */ - (FSDMMC_BD_ISR_REG_TRS | FSDMMC_BD_ISR_REG_DAIS); /* 等待DMA传输完成或者发生错误 */ - u32 status; - - /* 等待DMA传输完成或者发生错误 */ - do - { - status = status_mask & FSDMMC_READ_REG(base_addr, FSDMMC_BD_ISR_REG_OFFSET); - } - while ((!status) && (retries-- > 0)); - - if (status & FSDMMC_BD_ISR_REG_DAIS) - { - FSDMMC_ERROR("BD Data error when %s blk!", read ? "read" : "write"); - FSdmmcReset(base_addr); - return FSDMMC_ERR_DATA_FAILED; - } - else if (0 >= retries) - { - FSDMMC_ERROR("BD Data timeout !!!"); - return FSDMMC_ERR_TIMEOUT; - } - - return FSDMMC_SUCCESS; -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/mmc/fsdmmc/fsdmmc_hw.h b/bsp/phytium/libraries/standalone/drivers/mmc/fsdmmc/fsdmmc_hw.h deleted file mode 100644 index 3572d88859..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/mmc/fsdmmc/fsdmmc_hw.h +++ /dev/null @@ -1,354 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fsdmmc_hw.h - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:54:24 - * Description:  This file contains macros that can be used to access the device. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2021/12/2 init - */ - -#ifndef FSDMMC_HW_H -#define FSDMMC_HW_H - -/***************************** Include Files *********************************/ - -#include "fparameters.h" -#include "fio.h" -#include "fkernel.h" - -#ifdef __aarch64__ -#include "faarch64.h" -#else -#include "faarch32.h" -#endif - -#ifdef __cplusplus -extern "C" -{ -#endif - -/************************** Constant Definitions *****************************/ - -/** @name Register Map - * - * Register offsets from the base address of an SD device. - * @{ - */ -#define FSDMMC_CONTROLL_SETTING_REG_OFFSET 0x00 /* Controller configuration register */ -#define FSDMMC_ARGUMENT_REG_OFFSET 0x04 /* Parameter register */ -#define FSDMMC_CMD_SETTING_REG_OFFSET 0x08 /* Command register */ -#define FSDMMC_CLOCK_DIV_REG_OFFSET 0x0C /* Clock division register */ -#define FSDMMC_SOFTWARE_RESET_REG_OFFSET 0x10 /* Reset control register */ -#define FSDMMC_POWER_CONTROLL_REG_OFFSET 0x14 /* Power control register */ -#define FSDMMC_TIMEOUT_CMD_REG_OFFSET 0x18 /* Cmd Timeout setting register */ -#define FSDMMC_TIMEOUT_DATA_REG_OFFSET 0x1C /* Data timeout setting register */ -#define FSDMMC_NORMAL_INT_EN_REG_OFFSET 0x20 /* Interrupt Enable Register */ -#define FSDMMC_ERROR_INT_EN_REG_OFFSET 0x24 /* Error Interrupt Enable Register */ -#define FSDMMC_BD_ISR_EN_REG_OFFSET 0x28 /* Data Transfer Interrupt Enable Register */ -#define FSDMMC_CAPABILIES_REG_OFFSET 0x2c /* capabilies register */ -#define FSDMMC_SD_DRV_REG_OFFSET 0x30 /* SD card driver phase register */ -#define FSDMMC_SD_SAMP_REG_OFFSET 0x34 /* SD card sampling phase register */ -#define FSDMMC_SD_SEN_REG_OFFSET 0x38 /* Card detection controller */ -#define FSDMMC_HDS_AXI_REG_CONF1_REG_OFFSET 0x3c /* AXI boundary configuration register 1 */ -#define FSDMMC_DAT_IN_M_RX_BD_REG_OFFSET 0x40 /* SD BD RX address register */ -#define FSDMMC_DAT_IN_M_TX_BD_REG_OFFSET 0x60 /* SD BD TX address register */ -#define FSDMMC_BLK_CNT_REG_OFFSET 0x80 /* Block reads and writes configuration registers */ -#define FSDMMC_HDS_AXI_REG_CONF2_REG_OFFSET 0xa8 /* AXI boundary configuration register 2 */ -#define FSDMMC_NORMAL_INT_STATUS_REG_OFFSET 0xc0 /* Interrupt status register */ -#define FSDMMC_ERROR_INT_STATUS_REG_OFFSET 0xc4 /* ERROR interrupt register */ -#define FSDMMC_BD_ISR_REG_OFFSET 0xc8 /* Data Transfer Interrupt Status Register */ -#define FSDMMC_BD_STATUS_REG_OFFSET 0xcc /* BD descriptor register */ -#define FSDMMC_STATUS_REG_OFFSET 0xd0 /* Status register */ -#define FSDMMC_BLOCK_REG_OFFSET 0xd4 /* Block length register */ -#define FSDMMC_CMD_RESP_1_REG_OFFSET 0xe0 /* Command response register 1 */ -#define FSDMMC_CMD_RESP_2_REG_OFFSET 0xe4 /* Command response register 2 */ -#define FSDMMC_CMD_RESP_3_REG_OFFSET 0xe8 /* Command response register 3 */ -#define FSDMMC_CMD_RESP_4_REG_OFFSET 0xec /* Command response register 4 */ - -/** @name FSDMMC_CONTROLL_SETTING_REG_OFFSET Register - */ -#define FSDMMC_PERMDW_MASK GENMASK(11, 10) -#define FSDMMC_PERMDW(x) (FSDMMC_PERMDW_MASK & ((x) << 10)) /* 写操作对应的大小端选择 */ -#define FSDMMC_PERMDW_LIT_END FSDMMC_PERMDW(0x0) -#define FSDMMC_PERMDW_BIG_END FSDMMC_PERMDW(0x1) -#define FSDMMC_PERMDW_STD_END FSDMMC_PERMDW(0x3) - -#define FSDMMC_PERMDR_MASK GENMASK(9, 8) -#define FSDMMC_PERMDR(x) (FSDMMC_PERMDR_MASK & ((x) << 8)) /* 读操作对应的大小端选择 */ -#define FSDMMC_PERMDR_LIT_END FSDMMC_PERMDR(0x0) -#define FSDMMC_PERMDR_BIG_END FSDMMC_PERMDR(0x1) -#define FSDMMC_PERMDR_STD_END FSDMMC_PERMDR(0x3) - -/** @name FSDMMC_ARGUMENT_REG_OFFSET Register - */ -#define FSDMMC_ARGUMENT_MASK GENMASK(31, 0) - -/** @name FSDMMC_CMD_SETTING_REG_OFFSET Register - */ -#define FSDMMC_CMD_RESP_MASK GENMASK(1, 0) -#define FSDMMC_CMD_SETTING_RTS(x) (FSDMMC_CMD_RESP_MASK & ((x) << 0)) /* 0: No response 01: Response byte length 136 10: Response byte length 48 11: Response byte length 48 */ -#define FSDMMC_CMD_NO_RESP FSDMMC_CMD_SETTING_RTS(0x0) /* 00:不响应 */ -#define FSDMMC_CMD_RESP_136_BIT FSDMMC_CMD_SETTING_RTS(0x1) /* 01:响应字节长度 136 */ -#define FSDMMC_CMD_RESP_48_BIT FSDMMC_CMD_SETTING_RTS(0x2) /* 10: 响应字节长度 48 */ -#define FSDMMC_CMD_RESP_48_BIT_BUSY_CHECK FSDMMC_CMD_SETTING_RTS(0x3) /* 11: 响应字节长度 48, check busy after resp */ - -#define FSDMMC_CMD_SETTING_CRCE BIT(3) /* 0: CRC check is not performed on CMD response 1: CRC check is performed on CMD response */ -#define FSDMMC_CMD_SETTING_CICE BIT(4) /* 0:CMD 响应时,不执行索引检查 1:CMD 响应时,执行索引检查 */ -#define FSDMMC_CMD_SETTING_CMDTP(x) (GENMASK(7, 6) & ((x) << 6)) /* 命令类型 */ -#define FSDMMC_CMD_SETTING_CMDI(x) (GENMASK(13, 8) & ((x) << 8)) /* 命令索引 */ -#define FSDMMC_CMD_SETTING_TRTY(x) (GENMASK(15, 14) & ((x) << 14)) /* 10: adtc 指令 ,其它: 读写操作 */ - - -/** @name FSDMMC_CLOCK_DIV_REG_OFFSET Register - */ -#define FSDMMC_CLK_DIVIDER(clk) (GENMASK(31, 0) & ((FSDMMC_CLK_FREQ_HZ / (2 * (clk))) - 1)) - -/** @name FSDMMC_SOFTWARE_RESET_REG_OFFSET Register - */ -#define FSDMMC_SOFTWARE_RESET_SRST BIT(0) /* 控制器软复位 */ -#define FSDMMC_SOFTWARE_RESET_BDRST BIT(2) /* DMA BD 清 0 */ -#define FSDMMC_SOFTWARE_RESET_CFCLF BIT(3) /* 卡插入拔出状态触发标志清 0 */ - -/** @name FSDMMC_TIMEOUT_CMD_REG_OFFSET Register - */ -#define FSDMMC_TIMEOUT_CMD_MASK GENMASK(31, 0) - -/** @name FSDMMC_TIMEOUT_DATA_REG_OFFSET Register - */ -#define FSDMMC_TIMEOUT_DATA_MASK GENMASK(31, 0) - -/** @name FSDMMC_NORMAL_INT_EN_REG_OFFSET Register - */ -#define FSDMMC_NORMAL_INT_EN_ECC BIT(0) /* 命令完成中断使能 */ -#define FSDMMC_NORMAL_INT_EN_ECCRCE BIT(1) /* 卡拔出中断使能 */ -#define FSDMMC_NORMAL_INT_EN_ECIE BIT(15) /* 错误中断使能 */ -#define FSDMCC_NORMAL_INT_ALL_BITS (FSDMMC_NORMAL_INT_EN_ECC | FSDMMC_NORMAL_INT_EN_ECCRCE |\ - FSDMMC_NORMAL_INT_EN_ECIE) - -/** @name FSDMMC_ERROR_INT_EN_REG_OFFSET Register - */ -#define FSDMMC_ERROR_INT_EN_CNR BIT(4) /* 命令响应错误中断 */ -#define FSDMMC_ERROR_INT_EN_CIR BIT(3) /* 命令索引错误中断使能 */ -#define FSDMMC_ERROR_INT_EN_CCRCE BIT(1) /* 命令 CRC 错误中断使能 */ -#define FSDMMC_ERROR_INT_EN_CTE BIT(0) /* 命令超时中断使能 */ -#define FSDMMC_ERROR_INT_ALL_BITS (FSDMMC_ERROR_INT_EN_CNR | FSDMMC_ERROR_INT_EN_CIR |\ - FSDMMC_ERROR_INT_EN_CCRCE | FSDMMC_ERROR_INT_EN_CTE) - -/** @name FSDMMC_BD_ISR_EN_REG_OFFSET Register - */ -#define FSDMMC_BD_ISR_EN_ETRS BIT(0) /* DMA 传输完成中断使能 */ -#define FSDMMC_BD_ISR_EN_EDTE BIT(3) /* 数据超时中断使能 */ -#define FSDMMC_BD_ISR_EN_ECMDE BIT(4) /* 命令响应错误中断使能 */ -#define FSDMMC_BD_ISR_EN_ETRE BIT(5) /* 传输错误中断使能 */ -#define FSDMMC_BD_ISR_EN_ENRCRCE BIT(6) /* CRC 校验错误中断使能 */ -#define FSDMMC_BD_ISR_EN_EDATFRAXE BIT(7) /* AXI 总线错误中断使能 */ -#define FSDMMC_BD_ISR_EN_RESPE BIT(8) /* 读 SD 卡操作,AXI BR 通道完成中断 */ -#define FSDMMC_BD_ISR_EN_EDAISE BIT(15) /* DMA 错误中断使能 */ -#define FSDMMC_BD_ISR_ALL_BITS (FSDMMC_BD_ISR_EN_ETRS | FSDMMC_BD_ISR_EN_EDTE | \ - FSDMMC_BD_ISR_EN_ECMDE | FSDMMC_BD_ISR_EN_ETRE | \ - FSDMMC_BD_ISR_EN_ENRCRCE | FSDMMC_BD_ISR_EN_EDATFRAXE | \ - FSDMMC_BD_ISR_EN_RESPE | FSDMMC_BD_ISR_EN_EDAISE) - - -/** @name FSDMMC_SD_DRV_REG_OFFSET Register - */ -#define FSDMMC_SD_DRV_MASK GENMASK(31, 0) /* 卡驱动相位配置参数 */ - -/** @name FSDMMC_SD_SAMP_REG_OFFSET Register - */ -#define FSDMMC_SD_SAMP_MASK GENMASK(31, 0) /* 卡采样相位配置参数 */ - -/** @name FSDMMC_SD_SEN_REG_OFFSET Register - */ -#define FSDMMC_SD_SEN_REG_CREFR BIT(1) /* 卡拔出时自动释放 AXI 总线选择 */ -#define FSDMMC_SD_SEN_REG_CRES BIT(2) /* CARD 在位状态标志选择 0: 卡在位-0,不在位-1 1: 卡在位-1,不在位-0 */ -#define FSDMMC_SD_SEN_REG_DEBNCE(x) ((x << 8) & GENMASK(31, 8)) /* 去抖时钟分频参数 */ - -/** @name FSDMMC_HDS_AXI_REG_CONF1_REG_OFFSET Register - */ -#define FSDMMC_HDS_AXI_CONF1_AWREGION_HDS_M GENMASK(22, 19) -#define FSDMMC_HDS_AXI_CONF1_AWSNOOP_HDS_M GENMASK(18, 16) -#define FSDMMC_HDS_AXI_CONF1_ARBAR_HDS_M GENMASK(15, 14) -#define FSDMMC_HDS_AXI_CONF1_ARDOMAIN_HDS_M GENMASK(13, 12) -#define FSDMMC_HDS_AXI_CONF1_ARREGION_HDS_M GENMASK(11, 8) -#define FSDMMC_HDS_AXI_CONF1_ARSNOOP_HDS_M GENMASK(7, 4) -#define FSDMMC_HDS_AXI_CONF1_AWBAR_HDS_M GENMASK(3, 2) -#define FSDMMC_HDS_AXI_CONF1_AWDOMAIN_HDS_M GENMASK(1, 0) - -/** @name FSDMMC_DAT_IN_M_RX_BD_REG_OFFSET Register - */ -#define FSDMMC_DAT_IN_M_RX_BD_MASK GENMASK(31, 0) - -/** @name FSDMMC_DAT_IN_M_TX_BD_REG_OFFSET Register - */ -#define FSDMMC_DAT_IN_M_TX_BD_MASK GENMASK(31, 0) - -/** @name FSDMMC_BLK_CNT_REG_OFFSET Register - */ -#define FSDMMC_BLK_CNT_MASK GENMASK(31, 0) - -/** @name FSDMMC_HDS_AXI_REG_CONF2_REG_OFFSET Register - */ -#define FSDMMC_HDS_AXI_CONF2_SD_ARPROT GENMASK(29, 27) -#define FSDMMC_HDS_AXI_CONF2_SD_AWPROT GENMASK(26, 24) -#define FSDMMC_HDS_AXI_CONF2_SD_ARCACHE_M GENMASK(23, 20) -#define FSDMMC_HDS_AXI_CONF2_SD_AWCACHE_M GENMASK(19, 16) -#define FSDMMC_HDS_AXI_CONF2_HDA_ARPRO GENMASK(13, 11) -#define FSDMMC_HDS_AXI_CONF2_HDA_AWPROT GENMASK(10, 8) -#define FSDMMC_HDS_AXI_CONF2_HDA_ARCACHE_M GENMASK(7, 4) -#define FSDMMC_HDS_AXI_CONF2_HDA_AWCACHE_M GENMASK(3, 0) - -/** @name FSDMMC_NORMAL_INT_STATUS_REG_OFFSET Register - */ -#define FSDMMC_NORMAL_INT_STATUS_EI BIT(15) /* 命令错误中断 */ -#define FSDMMC_NORMAL_INT_STATUS_CR BIT(1) /* 卡移除中断 */ -#define FSDMMC_NORMAL_INT_STATUS_CC BIT(0) /* 命令完成中断 */ -#define FSDMMC_NORMAL_INT_STATUS_ALL_MASK (FSDMMC_NORMAL_INT_STATUS_EI | FSDMMC_NORMAL_INT_STATUS_CR | FSDMMC_NORMAL_INT_STATUS_CC) - -/** @name FSDMMC_ERROR_INT_STATUS_REG_OFFSET Register - */ -#define FSDMMC_ERROR_INT_STATUS_CNR BIT(4) /* 命令响应错误中断 */ -#define FSDMMC_ERROR_INT_STATUS_CIR BIT(3) /* 命令索引错误中断 */ -#define FSDMMC_ERROR_INT_STATUS_CCRCE BIT(1) /* 命令 CRC 错误中断 */ -#define FSDMMC_ERROR_INT_STATUS_CTE BIT(0) /* 命令超时错误中断 */ -#define FSDMMC_ERROR_INT_STATUS_ALL_MASK (FSDMMC_ERROR_INT_STATUS_CNR | FSDMMC_ERROR_INT_STATUS_CIR | FSDMMC_ERROR_INT_STATUS_CCRCE | FSDMMC_ERROR_INT_STATUS_CTE) - -/** @name FSDMMC_BD_ISR_REG_OFFSET Register - */ -#define FSDMMC_BD_ISR_REG_DAIS BIT(15) /* DMA 错误中断*/ -#define FSDMMC_BD_ISR_REG_RESPE BIT(8) /* 读 SD 卡操作,AXI BR 通道完成中断*/ -#define FSDMMC_BD_ISR_REG_DATFRAX BIT(7) /* AXI 总线强制释放中断*/ -#define FSDMMC_BD_ISR_REG_NRCRC BIT(6) /* 无 CRC 响应中断*/ -#define FSDMMC_BD_ISR_REG_TRE BIT(5) /* CRC 响应错误中断*/ -#define FSDMMC_BD_ISR_REG_CMDE BIT(4) /* 命令响应错误中断*/ -#define FSDMMC_BD_ISR_REG_DTE BIT(3) /* 超时中断*/ -#define FSDMMC_BD_ISR_REG_TRS BIT(0) /* DMA 传输完成中断*/ - -/** @name FSDMMC_BD_STATUS_REG_OFFSET Register - */ -#define FSDMMC_BD_STATUS_MASK GENMASK(31, 0) /* BD 描述符 */ - -/** @name FSDMMC_STATUS_REG_OFFSET Register - */ -#define FSDMMC_STATUS_REG_DATMAST(x) (GENMASK(30, 27) & ((x) << 27)) /* data_master 状态机 */ -#define FSDMMC_STATUS_REG_CDIF BIT(26) /* 卡在位标志 */ -#define FSDMMC_STATUS_REG_CDRF BIT(25) /* 卡不在位标志 */ -#define FSDMMC_STATUS_REG_CLSL BIT(24) /* 命令闲信号 */ -#define FSDMMC_STATUS_REG_DLSL(x) (GENMASK(23, 20) & ((x) << 20)) /* 线信号 */ -#define FSDMMC_STATUS_REG_CDSL BIT(19) /* 卡检测管脚信号 */ -#define FSDMMC_STATUS_REG_CST(x) (GENMASK(15, 12) & ((x) << 12)) /* cmd_host state 状态机 */ -#define FSDMMC_STATUS_IDIE (0x1 << 12) -#define FSDMMC_STATUS_REG_CSM(x) (GENMASK(11, 7) & ((x) << 7)) -#define FSDMMC_STATUS_REG_DAT_AVA BIT(6) /* DAT_AVA 当前命令状态流程运转完 */ -#define FSDMMC_STATUS_REG_CRC_VALID BIT(5) -#define FSDMMC_STATUS_REG_CICMD BIT(0) /* RO 0x0 CMD 总线状态 */ -#define FSDMMC_STATUS_CMD_BUSY (0x0 << 0) -#define FSDMMC_STATUS_CMD_READY (0x1 << 0) - -/** @name FSDMMC_BLOCK_REG_OFFSET Register - */ -#define FSDMMC_BLOCK_MASK GENMASK(31, 0) - -/** @name FSDMMC_CMD_RESP_1_REG_OFFSET Register - */ -#define FSDMMC_CMD_RESP_1_MASK GENMASK(31, 0) - -/** @name FSDMMC_CMD_RESP_2_REG_OFFSET Register - */ -#define FSDMMC_CMD_RESP_2_MASK GENMASK(31, 0) - -/** @name FSDMMC_CMD_RESP_3_REG_OFFSET Register - */ -#define FSDMMC_CMD_RESP_3_MASK GENMASK(31, 0) - -/** @name FSDMMC_CMD_RESP_4_REG_OFFSET Register - */ -#define FSDMMC_CMD_RESP_4_MASK GENMASK(31, 0) - -#define FSDMMC_DEFAULT_DRV 1 -#define FSDMMC_DEFAULT_SAMP 5 -#define FSDMMC_SEN_CREFR_VAL (0x1 << 1) -#define FSDMMC_SEN_DEBNCE_VAL (0xB << 8) -#define FSDMMC_CMD_TIMEOUT 10000000 /* 1s */ -#define FSDMMC_DATA_TIMEOUT 40000000 /* 4s */ -#define FSDMMC_AXI_CONF1 0x1001 -#define FSDMMC_AXI_CONF2 0x12221222 -#define FSDMMC_TIMEOUT 5000000 /* timeout for retries */ -#define FSDMMC_BLOCK_SIZE 512 - -#define FSDMMC_DMA_ADDR_ALIGN 32 -/**************************** Type Definitions *******************************/ - -/************************** Variable Definitions *****************************/ -#define FSDMMC_DATA_BARRIER() WMB() - -/***************** Macros (Inline Functions) Definitions *********************/ - -#define FSDMMC_READ_REG(addr, reg_offset) FtIn32((addr) + (u32)(reg_offset)) -#define FSDMMC_WRITE_REG(addr, reg_offset, reg_value) FtOut32((addr) + (u32)(reg_offset), (u32)(reg_value)) -#define FSDMMC_SET_BIT(addr, reg_offset, bit) FtSetBit32((addr) + (u32)(reg_offset), (u32)(bit)) -#define FSDMMC_CLR_BIT(addr, reg_offset, bit) FtClearBit32((addr) + (u32)(reg_offset), (u32)(bit)) - -/* 检查卡检测管脚信号, 低电平表示卡在位 */ -static inline boolean FSdmmcCheckIfCardExists(uintptr base_addr) -{ - return (FSDMMC_STATUS_REG_CDSL != (FSDMMC_STATUS_REG_CDSL & FSDMMC_READ_REG(base_addr, FSDMMC_STATUS_REG_OFFSET))); -} - -/* 清除命令中断状态位 */ -static inline void FSdmmcClearNormalInterruptStatus(uintptr base_addr) -{ - FSDMMC_WRITE_REG(base_addr, FSDMMC_NORMAL_INT_STATUS_REG_OFFSET, (0x1)); -} - -/* 清除错误中断状态位 */ -static inline void FSdmmcClearErrorInterruptStatus(uintptr base_addr) -{ - FSDMMC_WRITE_REG(base_addr, FSDMMC_ERROR_INT_STATUS_REG_OFFSET, (0x1)); -} - -/* 清除DMA中断状态位 */ -static inline void FSdmmcClearBDInterruptStatus(uintptr base_addr) -{ - FSDMMC_WRITE_REG(base_addr, FSDMMC_BD_ISR_REG_OFFSET, (0x1)); -} - -/************************** Function Prototypes ******************************/ -/* 重置FSDMMC控制器 */ -FError FSdmmcReset(uintptr base_addr); - -/* 完成软复位 */ -FError FSdmmcSoftwareReset(uintptr base_addr, int retries); - -/* 设置FSDMMC的时钟 */ -FError FSdmmcSetCardClk(uintptr base_addr, u32 clk_freq_hz); - -/* 发送命令 */ -void FSdmmcSendPrivateCmd(uintptr base_addr, u32 cmd, u32 arg); - -/* 等待命令完成或者命令错误状态 */ -FError FSdmmcWaitStatus(uintptr base_addr, int retries); - -/* 等待数据传输完成或者传输错误状态 */ -FError FSdmmcWaitDMAStatus(uintptr base_addr, boolean read, int retries); - -#ifdef __cplusplus -} -#endif - -#endif \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/mmc/fsdmmc/fsdmmc_intr.c b/bsp/phytium/libraries/standalone/drivers/mmc/fsdmmc/fsdmmc_intr.c deleted file mode 100644 index 9df432336b..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/mmc/fsdmmc/fsdmmc_intr.c +++ /dev/null @@ -1,331 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fsdmmc_intr.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:54:53 - * Description:  This file contains the functions that are related to interrupt processing - * for the fsdmmc device. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2021/12/2 init - */ - -/***************************** Include Files *********************************/ -#include "fassert.h" -#include "fio.h" -#include "fdebug.h" - -#include "fsdmmc_hw.h" -#include "fsdmmc.h" - -/************************** Constant Definitions *****************************/ -#define FSDMMC_DEBUG_TAG "FSDMMC-INTR" -#define FSDMMC_ERROR(format, ...) FT_DEBUG_PRINT_E(FSDMMC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSDMMC_WARN(format, ...) FT_DEBUG_PRINT_W(FSDMMC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSDMMC_INFO(format, ...) FT_DEBUG_PRINT_I(FSDMMC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSDMMC_DEBUG(format, ...) FT_DEBUG_PRINT_D(FSDMMC_DEBUG_TAG, format, ##__VA_ARGS__) - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ -static void FSdmmcCallEvtHandler(FSdmmcEventHandler handler, void *arg) -{ - if (NULL != handler) - { - handler(arg); - } -} - -/************************** Function Prototypes ******************************/ -extern u32 FSdmmcMakeRawCmd(FSdmmcCmd *cmd_p); -extern void FSdmmcSendCmd(uintptr base_addr, FSdmmcCmd *cmd_p); -extern FError FSdmmcSendData(uintptr base_addr, boolean read, FSdmmcCmd *cmd_p); - -/************************** Variable Definitions *****************************/ - -/*****************************************************************************/ -/** - * @name: FSdmmcGetInterruptMask - * @msg: 获取FSDMMC的中断掩码 - * @return {u32} 中断掩码 - * @param {uintptr} base_addr FSDMMC控制器基地址 - * @param {u32} intr_type FSDMMC中断类型, 参考FSDMMC_INTR_NUM - * @note FSDMMC控制器初始化后才能调用此函数 - */ -u32 FSdmmcGetInterruptMask(uintptr base_addr, u32 intr_type) -{ - u32 mask; - - switch (intr_type) - { - case FSDMMC_CMD_INTR: - mask = FSDMMC_READ_REG(base_addr, FSDMMC_NORMAL_INT_EN_REG_OFFSET); - break; - case FSDMMC_ERROR_INTR: - mask = FSDMMC_READ_REG(base_addr, FSDMMC_ERROR_INT_EN_REG_OFFSET); - break; - case FSDMMC_DMA_BD_INTR: - mask = FSDMMC_READ_REG(base_addr, FSDMMC_BD_ISR_EN_REG_OFFSET); - break; - default: - FASSERT(0); - break; - } - - return mask; -} - -/** - * @name: FSdmmcSetInterruptMask - * @msg: 设置FSDMMC的中断掩码 - * @param {uintptr} base_addr FSDMMC控制器基地址 - * @param {u32} intr_type FSDMMC中断类型, 参考FSDMMC_INTR_NUM - * @param {u32} mask 中断掩码 - * @param {boolean} enable TRUE:打开中断, FALSE:关闭中断 - * @note FSDMMC控制器初始化后才能调用此函数 - */ -void FSdmmcSetInterruptMask(uintptr base_addr, u32 intr_type, u32 mask, boolean enable) -{ - u32 old_mask = FSdmmcGetInterruptMask(base_addr, intr_type); - u32 new_mask = 0; - - if (TRUE == enable) - { - new_mask = old_mask | mask; - } - else - { - new_mask = old_mask & (~mask); - } - - switch (intr_type) - { - case FSDMMC_CMD_INTR: - FSDMMC_WRITE_REG(base_addr, FSDMMC_NORMAL_INT_EN_REG_OFFSET, new_mask); - break; - case FSDMMC_ERROR_INTR: - FSDMMC_WRITE_REG(base_addr, FSDMMC_ERROR_INT_EN_REG_OFFSET, new_mask); - break; - case FSDMMC_DMA_BD_INTR: - FSDMMC_WRITE_REG(base_addr, FSDMMC_BD_ISR_EN_REG_OFFSET, new_mask); - break; - default: - FASSERT(0); - break; - } - - return; -} - -/** - * @name: FSdmmcCmdInterrupHandler - * @msg: 命令中断响应函数 - * @return {*} 无 - * @param {s32} vector 中断向量号 - * @param {void} *param 中断响应输入参数 - * @note 此函数用于设置FSDMMC中断时注册,用户可以自定义一个中断响应函数替换此函数 - */ -void FSdmmcCmdInterrupHandler(s32 vector, void *param) -{ - FASSERT(param); - u32 status; - FSdmmc *instance_p = (FSdmmc *)param; - uintptr base_addr = instance_p->config.base_addr; - - /* clear interrupts */ - status = FSDMMC_READ_REG(base_addr, FSDMMC_NORMAL_INT_STATUS_REG_OFFSET); - - if (status & FSDMMC_NORMAL_INT_STATUS_CR) /* 卡移除中断 */ - { - FSdmmcCallEvtHandler(instance_p->evt_handler[FSDMMC_EVT_CARD_REMOVED], - instance_p->evt_args[FSDMMC_EVT_CARD_REMOVED]); - } - - if (status & FSDMMC_NORMAL_INT_STATUS_CC) /* 命令完成中断 */ - { - FSdmmcCallEvtHandler(instance_p->evt_handler[FSDMMC_EVT_CMD_DONE], - instance_p->evt_args[FSDMMC_EVT_CMD_DONE]); - } - - if (status & FSDMMC_NORMAL_INT_STATUS_EI) /* 命令错误中断 */ - { - FSdmmcCallEvtHandler(instance_p->evt_handler[FSDMMC_EVT_CMD_ERROR], - instance_p->evt_args[FSDMMC_EVT_CMD_ERROR]); - } - - FSdmmcClearNormalInterruptStatus(base_addr); -} - -/** - * @name: FSdmmcDmaInterrupHandler - * @msg: DMA中断响应函数 - * @return {*} - * @param {s32} vector 中断向量号 - * @param {void} *param 中断响应输入参数 - * @note 此函数用于设置FSDMMC中断时注册,用户可以自定义一个中断响应函数替换此函数 - */ -void FSdmmcDmaInterrupHandler(s32 vector, void *param) -{ - FASSERT(param); - u32 status; - FSdmmc *instance_p = (FSdmmc *)param; - uintptr base_addr = instance_p->config.base_addr; - - /* clear interrupts */ - status = FSDMMC_READ_REG(base_addr, FSDMMC_BD_ISR_REG_OFFSET); - - if (status & FSDMMC_BD_ISR_REG_DAIS) /* DMA 错误中断 */ - { - FSdmmcCallEvtHandler(instance_p->evt_handler[FSDMMC_EVT_DATA_ERROR], - instance_p->evt_args[FSDMMC_EVT_DATA_ERROR]); - } - - if (status & FSDMMC_BD_ISR_REG_RESPE) /* 读 SD 卡操作,AXI BR 通道完成中断 */ - { - FSdmmcCallEvtHandler(instance_p->evt_handler[FSDMMC_EVT_DATA_READ_DONE], - instance_p->evt_args[FSDMMC_EVT_DATA_READ_DONE]); - } - - if (status & FSDMMC_BD_ISR_REG_DATFRAX) /* AXI 总线强制释放中断*/ - { - FSDMMC_ERROR("FSDMMC_BD_ISR_REG_DATFRAX"); - } - - if (status & FSDMMC_BD_ISR_REG_NRCRC) /* 无 CRC 响应中断*/ - { - FSDMMC_ERROR("FSDMMC_BD_ISR_REG_NRCRC"); - } - - if (status & FSDMMC_BD_ISR_REG_TRE) /* CRC 响应错误中断*/ - { - FSDMMC_ERROR("FSDMMC_BD_ISR_REG_TRE"); - } - - if (status & FSDMMC_BD_ISR_REG_CMDE) /* 命令响应错误中断*/ - { - FSDMMC_ERROR("FSDMMC_BD_ISR_REG_CMDE"); - } - - if (status & FSDMMC_BD_ISR_REG_DTE) /* 超时中断*/ - { - FSDMMC_ERROR("FSDMMC_BD_ISR_REG_DTE"); - } - - if (status & FSDMMC_BD_ISR_REG_TRS) /* DMA 传输完成中断*/ - { - FSdmmcCallEvtHandler(instance_p->evt_handler[FSDMMC_EVT_DATA_WRITE_DONE], - instance_p->evt_args[FSDMMC_EVT_DATA_WRITE_DONE]); - } - - FSdmmcClearBDInterruptStatus(base_addr); -} - -/** - * @name: FSdmmcErrInterrupHandler - * @msg: 错误中断响应函数 - * @return {*} - * @param {s32} vector 中断向量号 - * @param {void} *param 中断响应输入参数 - * @note 此函数用于设置FSDMMC中断时注册,用户可以自定义一个中断响应函数替换此函数 - */ -void FSdmmcErrInterrupHandler(s32 vector, void *param) -{ - FASSERT(param); - u32 status; - FSdmmc *instance_p = (FSdmmc *)param; - uintptr base_addr = instance_p->config.base_addr; - - status = FSDMMC_READ_REG(base_addr, FSDMMC_ERROR_INT_STATUS_REG_OFFSET); - - if (status & FSDMMC_ERROR_INT_STATUS_CNR) /* 命令响应错误中断 */ - { - FSdmmcCallEvtHandler(instance_p->evt_handler[FSDMMC_EVT_CMD_RESP_ERROR], - instance_p->evt_args[FSDMMC_EVT_CMD_RESP_ERROR]); - } - - if (status & FSDMMC_ERROR_INT_STATUS_CIR) /* 命令索引错误中断 */ - { - FSDMMC_ERROR("FSDMMC_ERROR_INT_STATUS_CIR"); - } - - if (status & FSDMMC_ERROR_INT_STATUS_CCRCE) /* 命令 CRC 错误中断 */ - { - FSDMMC_ERROR("FSDMMC_ERROR_INT_STATUS_CCRCE"); - } - - if (status & FSDMMC_ERROR_INT_STATUS_CTE) /* 命令超时错误中断 */ - { - FSDMMC_ERROR("FSDMMC_ERROR_INT_STATUS_CTE"); - } - - /* clear command error status */ - FSdmmcClearErrorInterruptStatus(base_addr); -} - -/** - * @name: FSdmmcRegisterInterruptHandler - * @msg: 注册中断事件响应函数 - * @return {*} - * @param {FSdmmc} *instance_p FSDMMC驱动控制数据 - * @param {u32} event FSDMMC中断事件类型,参考FSDMMC_EVT_NUM - * @param {FSdmmcEventHandler} handler, FSDMMC中断事件响应函数 - * @note 此函数用于设置FSDMMC中断时注册,被注册的函数被FSdmmcCmdInterrupHandler、FSdmmcErrInterrupHandler - * 和FSdmmcDmaInterrupHandler调用 - */ -void FSdmmcRegisterInterruptHandler(FSdmmc *instance_p, u32 event, FSdmmcEventHandler handler, void *args) -{ - FASSERT(instance_p); - instance_p->evt_handler[event] = handler; - instance_p->evt_args[event] = args; -} - -/** - * @name: FSdmmcInterruptTransfer - * @msg: 通过FSDMMC中断方式发送/接收数据和命令 - * @return {FError} 驱动初始化的错误码信息,FSDMMC_SUCCESS 表示发送/接收成功,其它返回值表示发送/接收失败 - * @param {FSdmmc} *instance_p FSDMMC驱动控制数据 - * @param {FSdmmcCmd} *cmd_data_p FSDMMC数据和命令 - * @note FSDMMC控制器初始化后才能调用此函数,使用前需要确保FSDMMC中断设置完成 - */ -FError FSdmmcInterruptTransfer(FSdmmc *instance_p, FSdmmcCmd *cmd_data_p) -{ - FASSERT(instance_p && cmd_data_p); - uintptr base_addr = instance_p->config.base_addr; - FError ret = FSDMMC_SUCCESS; - - if (FALSE == FSdmmcCheckIfCardExists(base_addr)) - { - FSDMMC_ERROR("Card not found !!! fsdio ctrl base 0x%x", base_addr); - return FSDMMC_ERR_CARD_NO_FOUND; - } - - if (cmd_data_p->flag & FSDMMC_CMD_FLAG_EXP_DATA) - { - /* transfer data */ - FSDMMC_INFO("====DATA [%d] START: buf: %p=====", cmd_data_p->cmdidx, cmd_data_p->data_p); - ret = FSdmmcSendData(base_addr, - (FSDMMC_CMD_FLAG_READ_DATA == (cmd_data_p->flag & FSDMMC_CMD_FLAG_READ_DATA)), - cmd_data_p); - } - else - { - /* transfer command */ - FSDMMC_INFO("=====CMD [%d] START=====", cmd_data_p->cmdidx); - FSdmmcSendCmd(base_addr, cmd_data_p); - } - - return ret; -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/mmc/fsdmmc/fsdmmc_sinit.c b/bsp/phytium/libraries/standalone/drivers/mmc/fsdmmc/fsdmmc_sinit.c deleted file mode 100644 index d554fa6cd2..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/mmc/fsdmmc/fsdmmc_sinit.c +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fsdmmc_sinit.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:55:09 - * Description:  This file contains the implementation of the fsdmmc driver's static - * initialization functionality. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2021/12/2 init - */ - - -/* - This file contains the implementation of driver's static initialization functionality. -- 驱动静态初始化 */ - -/***************************** Include Files *********************************/ - -#include "ftypes.h" -#include "fparameters.h" - -#include "fsdmmc.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Variable Definitions *****************************/ - -extern const FSdmmcConfig FSDMMC_CONFIG_TBL[FSDMMC_NUM]; - -/************************** Function Prototypes ******************************/ -/** - * @name: FSdmmcLookupConfig - * @msg: 获取FSDMMC控制器默认配置 - * @return {const FSdmmcConfig *} FSDMMC默认配置,返回NULL如果找不到默认配置 - * @param {u32} instance_id 驱动控制器ID - * @note instance_id从0开始,取决于FSDMMC控制器的个数 - */ -const FSdmmcConfig *FSdmmcLookupConfig(u32 instance_id) -{ - const FSdmmcConfig *ptr = NULL; - u32 index; - - for (index = 0; index < (u32)FSDMMC_NUM; index++) - { - if (FSDMMC_CONFIG_TBL[index].instance_id == instance_id) - { - ptr = &FSDMMC_CONFIG_TBL[index]; - break; - } - } - - return (const FSdmmcConfig *)ptr; -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/nand/Kconfig b/bsp/phytium/libraries/standalone/drivers/nand/Kconfig deleted file mode 100644 index 4638b049f9..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/nand/Kconfig +++ /dev/null @@ -1,34 +0,0 @@ - -menu "NAND Configuration" - menu "FNAND ip config" - choice - prompt "choice fnand driver" - config ENABLE_FNAND - bool - prompt "Use FNAND" - - if ENABLE_FNAND - config FNAND_COMMON_DEBUG_EN - bool - prompt "Use FNAND common mode debug" - - config FNAND_DMA_DEBUG_EN - bool - prompt "Use FNAND DMA mode debug" - - config FNAND_TOGGLE_DEBUG_EN - bool - prompt "Use FNAND toggle mode debug" - - config FNAND_ONFI_DEBUG_EN - bool - prompt "Use FNAND onfi mode debug" - - endif - - endchoice - endmenu - -endmenu - - diff --git a/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand.c b/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand.c deleted file mode 100644 index 1cc2e5067e..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand.c +++ /dev/null @@ -1,569 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fnand.c - * Date: 2022-05-10 14:53:42 - * LastEditTime: 2022-05-10 08:56:27 - * Description:  This file is for functions in this file are the minimum required functions - * for this driver. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/05/10 first release - */ -#include "fnand.h" -#include "fnand_hw.h" -#include -#include -#include "fnand_id.h" -#include "fnand_common_cmd.h" -#include "fdebug.h" -#define FNAND_DEBUG_TAG "FNAND" -#define FNAND_DEBUG_I(format, ...) FT_DEBUG_PRINT_I(FNAND_DEBUG_TAG, format, ##__VA_ARGS__) -#define FNAND_DEBUG_W(format, ...) FT_DEBUG_PRINT_W(FNAND_DEBUG_TAG, format, ##__VA_ARGS__) -#define FNAND_DEBUG_E(format, ...) FT_DEBUG_PRINT_E(FNAND_DEBUG_TAG, format, ##__VA_ARGS__) - -extern void FNandHwInit(uintptr_t base_address, FNandInterMode inter_mode); -extern void FNandHwReset(uintptr_t base_address); -extern void FNandEnable(uintptr_t base_address); -extern FError FNandToggleInit(FNand *instance_p, u32 chip_addr); -extern FError FNandOnfiInit(FNand *instance_p, u32 chip_addr); -extern FError FNandTimingInterfaceUpdate(FNand *instance_p, u32 chip_addr); -extern void FNandIsrEnable(FNand *instance_p, u32 int_mask); - - -/** - * @name: FNandScan - * @msg: Nand scanning - * @note: - * @param {FNand} *instance_p is the pointer to the FNand instance. - * @return {FT_SUCCESS} Scan nand is ok - */ -FError FNandScan(FNand *instance_p) -{ - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - return FNandDetect(instance_p); - -} - -u32 FNandCheckBusy(FNand *instance_p) -{ - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - FNandConfig *config_p; - config_p = &instance_p->config; - - return FNAND_READREG(config_p->base_address, FNAND_STATE_OFFSET) & FNAND_STATE_BUSY_OFFSET; -} - - -FError FNandSendCmd(FNand *instance_p, struct FNandDmaDescriptor *descriptor_p, FNandOperationType isr_type) -{ - FNandConfig *config_p; - u32 timeout_cnt = 0; - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - FASSERT(isr_type < FNAND_TYPE_NUM); - - config_p = &instance_p->config; - - FNandHwReset(config_p->base_address); - - if (0 != FNandCheckBusy(instance_p)) - { - FNAND_DEBUG_E("Nand is busy"); - return FNAND_IS_BUSY; - } - - /* write dma addr to register */ - FNAND_WRITEREG(config_p->base_address, FNAND_MADDR0_OFFSET, ((uintptr)descriptor_p) & FNAND_MADDR0_DT_LOW_ADDR_MASK); - -#ifdef __aarch64__ - /* 将高位地址填入寄存器 */ - FNAND_CLEARBIT(config_p->base_address, FNAND_MADDR1_OFFSET, FNAND_MADDR1_DT_HIGH_8BITADDR_MASK); - FNAND_SETBIT(config_p->base_address, FNAND_MADDR1_OFFSET, ((uintptr)descriptor_p >> 32) & FNAND_MADDR1_DT_HIGH_8BITADDR_MASK); -#else - FNAND_CLEARBIT(config_p->base_address, FNAND_MADDR1_OFFSET, FNAND_MADDR1_DT_HIGH_8BITADDR_MASK); -#endif - /* 中断模式操作 */ - if (instance_p->work_mode == FNAND_WORK_MODE_ISR) - { - if (isr_type == FNAND_CMD_TYPE) - { - FNandIsrEnable(instance_p, FNAND_INTRMASK_CMD_FINISH_MASK); - } - else if (isr_type == FNAND_WRITE_PAGE_TYPE) - { - FNandIsrEnable(instance_p, FNAND_INTRMASK_PGFINISH_MASK); - } - else if (isr_type == FNAND_READ_PAGE_TYPE) - { - FNandIsrEnable(instance_p, FNAND_INTRMASK_DMA_PGFINISH_MASK); - } - else if (isr_type == FNAND_WAIT_ECC_TYPE) - { - FNandIsrEnable(instance_p, FNAND_INTRMASK_ECC_FINISH_MASK); - } - } - - FNAND_SETBIT(config_p->base_address, FNAND_MADDR1_OFFSET, FNAND_MADDR1_DMA_EN_MASK); - - if (instance_p->work_mode == FNAND_WORK_MODE_ISR && (instance_p->wait_irq_fun_p != NULL)) - { - if (instance_p->wait_irq_fun_p) - { - if (instance_p->wait_irq_fun_p(instance_p->wait_args) != FT_SUCCESS) - { - FNAND_DEBUG_E("wait_irq_fun_p is failed"); - return FNAND_ERR_IRQ_OP_FAILED; - } - } - else - { - FNAND_DEBUG_E("The member wait_irq_fun_p of instance_p is null"); - FNAND_WRITEREG(config_p->base_address, FNAND_INTRMASK_OFFSET, FNAND_INTRMASK_ALL_INT_MASK); - return FNAND_ERR_IRQ_LACK_OF_CALLBACK; - } - - return FT_SUCCESS ; - } - else - { - if (isr_type == FNAND_CMD_TYPE) - { - while (0 == (FNAND_READREG(config_p->base_address, FNAND_STATE_OFFSET) & FNAND_STATE_CMD_PGFINISH_OFFSET)) - { - if (timeout_cnt++ >= 0xffffff) - { - FNAND_DEBUG_E("FNAND_CMD_TYPE is sending timeout"); - return FNAND_OP_TIMEOUT; - } - } - } - else if (isr_type == FNAND_WRITE_PAGE_TYPE) - { - while (0 == (FNAND_READREG(config_p->base_address, FNAND_STATE_OFFSET) & FNAND_STATE_PG_PGFINISH_OFFSET)) - { - if (timeout_cnt++ >= 0xffffff) - { - FNAND_DEBUG_E("FNAND_CMD_TYPE is sending timeout"); - return FNAND_OP_TIMEOUT; - } - } - } - else if (isr_type == FNAND_READ_PAGE_TYPE) - { - while (0 == (FNAND_READREG(config_p->base_address, FNAND_STATE_OFFSET) & FNAND_STATE_DMA_PGFINISH_OFFSET)) - { - if (timeout_cnt++ >= 0xffffff) - { - FNAND_DEBUG_E("FNAND_CMD_TYPE is sending timeout"); - return FNAND_OP_TIMEOUT; - } - } - } - else if (isr_type == FNAND_WAIT_ECC_TYPE) - { - while (0 == (FNAND_READREG(config_p->base_address, FNAND_STATE_OFFSET) & FNAND_STATE_ECC_FINISH_OFFSET)) - { - if (timeout_cnt++ >= 0xffffff) - { - FNAND_DEBUG_E("FNAND_CMD_TYPE is sending timeout"); - return FNAND_OP_TIMEOUT; - } - } - } - } - - return FT_SUCCESS; -} - - -/** - * @name: FNandOperationWaitIrqRegister - * @msg: When nand is sent in interrupt mode, the action that waits while the operation completes - * @note: - * @param {FNand} *instance_p is the pointer to the FNand instance. - * @param {FNandOperationWaitIrqCallback} wait_irq_fun_p , When the user adds this function, return FT_SUCCESS reports success, otherwise failure - * @param {void} *wait_args - * @return {*} - */ -void FNandOperationWaitIrqRegister(FNand *instance_p, FNandOperationWaitIrqCallback wait_irq_fun_p, void *wait_args) -{ - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - - instance_p->wait_irq_fun_p = wait_irq_fun_p; - instance_p->wait_args = wait_args; -} - - - -/** - * @name: FNandCfgInitialize - * @msg: Initialize the NAND controller - * @param {FNand} *instance_p is the pointer to the FNand instance. - * @param {FNandConfig} * points to the FNand device configuration structure. - * @return {FError} FT_SUCCESS if successful - * @note: - */ -FError FNandCfgInitialize(FNand *instance_p, - FNandConfig *config_p) -{ - u32 i; - FError ret; - /* Assert arguments */ - FASSERT(instance_p != NULL); - FASSERT(config_p != NULL); - - /* Clear instance memory and make copy of configuration */ - memset(instance_p, 0, sizeof(FNand)); - instance_p->config = *config_p; - instance_p->is_ready = FT_COMPONENT_IS_READY; - - /* lsd config */ - FNAND_CLEARBIT(FLSD_CONFIG_BASE, 0xc0, 1); - - instance_p->work_mode = FNAND_WORK_MODE_ISR ; /* 默认采用中断模式 */ - for (i = 0; i < FNAND_CONNECT_MAX_NUM; i++) - { - instance_p->inter_mode[i] = FNAND_ASYN_SDR; /* 初始化阶段以异步模式启动 */ - instance_p->timing_mode[i] = FNAND_TIMING_MODE0 ; - /* 初始化时序配置 */ - ret = FNandTimingInterfaceUpdate(instance_p, i); - if (ret != FT_SUCCESS) - { - FNAND_DEBUG_E("%s, FNandTimingInterfaceUpdate is error", __func__); - return ret; - } - } - - FNandHwInit(instance_p->config.base_address, instance_p->inter_mode[0]); - FNandHwReset(instance_p->config.base_address); - - /* init ecc strength */ - FNAND_CLEARBIT(instance_p->config.base_address, FNAND_CTRL0_OFFSET, FNAND_CTRL0_ECC_CORRECT_MAKE(7UL)); /* clear all ecc_correct */ - if (instance_p->config.ecc_strength == 0x8) - { - FNAND_SETBIT(instance_p->config.base_address, FNAND_CTRL0_OFFSET, FNAND_CTRL0_ECC_CORRECT_MAKE(7UL)); - } - else if (instance_p->config.ecc_strength == 0x4) - { - FNAND_SETBIT(instance_p->config.base_address, FNAND_CTRL0_OFFSET, FNAND_CTRL0_ECC_CORRECT_MAKE(3UL)); - } - else if (instance_p->config.ecc_strength == 0x2) - { - FNAND_SETBIT(instance_p->config.base_address, FNAND_CTRL0_OFFSET, FNAND_CTRL0_ECC_CORRECT_MAKE(1UL)); - } - else - { - FNAND_SETBIT(instance_p->config.base_address, FNAND_CTRL0_OFFSET, FNAND_CTRL0_ECC_CORRECT_MAKE(0UL)); - } - - FNandEnable(instance_p->config.base_address); - - /* init bbm */ - FNandInitBbtDesc(instance_p); - return (FT_SUCCESS); -} - - -/** - * @name: FNandWritePage - * @msg: Write operations one page at a time, including writing page data and spare data - * @note: - * @param {FNand} *instance_p is the pointer to the FNand instance. - * @param {u32} page_addr is the address to which the page needs to be written - * @param {u8} *buffer is page writes a pointer to the buffer - * @param {u32} page_copy_offset is the offset of the page writing , Buffer write data to 0 + page_copy_offset - * @param {u32} length is page data write length - * @param {u8} *oob_buffer is the data buffer pointer needs to be written to the spare space - * @param {u32} oob_copy_offset is the offset of the spare space writing , Buffer write data to page length + oob_copy_offset - * @param {u32} oob_length is the length to be written to the spare space - * @param {u32} chip_addr chip address - * @return {FError} FT_SUCCESS ,write page is successful - */ -FError FNandWritePage(FNand *instance_p, u32 page_addr, u8 *buffer, u32 page_copy_offset, u32 length, u8 *oob_buffer, u32 oob_copy_offset, u32 oob_length, u32 chip_addr) -{ - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - FASSERT(chip_addr < FNAND_CONNECT_MAX_NUM); - FASSERT(instance_p->write_hw_ecc_p); - - FNandOpData op_data = - { - .page_addr = page_addr, - .page_buf = NULL, /* page 数据缓存空间 */ - .page_offset = 0, /* 从offset开始拷贝页数据 */ - .page_length = 0, /* 从offset开始拷贝页数据的长度 */ - .obb_required = 0, /* obb 是否读取的标志位,1 需要操作oob 区域 */ - .oob_buf = NULL, /* obb 数据缓存空间 */ - .oob_offset = 0, /* 从offset开始拷贝页数据 */ - .oob_length = 0, /* 从offset开始拷贝页数据的长度 */ - .chip_addr = chip_addr, /* 芯片地址 */ - }; - - if (buffer && (length > 0)) - { - op_data.page_buf = buffer; - op_data.page_length = length; - op_data.page_offset = page_copy_offset; - } - - if (oob_buffer && (oob_length > 0)) - { - op_data.obb_required = 1; - op_data.oob_buf = oob_buffer; - op_data.oob_length = oob_length; - op_data.oob_offset = oob_copy_offset; - } - - return instance_p->write_hw_ecc_p(instance_p, &op_data); -} - -/** - * @name: FNandWritePage - * @msg: Write operations one page at a time, including writing page data and spare data ,without hw ecc - * @note: - * @param {FNand} *instance_p is the pointer to the FNand instance. - * @param {u32} page_addr is the address to which the page needs to be written - * @param {u8} *buffer is page writes a pointer to the buffer - * @param {u32} page_copy_offset is the offset of the page writing , Buffer write data to 0 + page_copy_offset - * @param {u32} length is page data write length - * @param {u8} *oob_buffer is the data buffer pointer needs to be written to the spare space - * @param {u32} oob_copy_offset is the offset of the spare space writing , Buffer write data to page length + oob_copy_offset - * @param {u32} oob_length is the length to be written to the spare space - * @param {u32} chip_addr chip address - * @return {FError} FT_SUCCESS ,write page is successful - */ -FError FNandWritePageRaw(FNand *instance_p, u32 page_addr, u8 *buffer, u32 page_copy_offset, u32 length, u8 *oob_buffer, u32 oob_copy_offset, u32 oob_length, u32 chip_addr) -{ - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - FASSERT(chip_addr < FNAND_CONNECT_MAX_NUM); - FASSERT(instance_p->write_hw_ecc_p); - - FNandOpData op_data = - { - .page_addr = page_addr, - .page_buf = NULL, /* page 数据缓存空间 */ - .page_offset = 0, /* 从offset开始拷贝页数据 */ - .page_length = 0, /* 从offset开始拷贝页数据的长度 */ - .obb_required = 0, /* obb 是否读取的标志位,1 需要操作oob 区域 */ - .oob_buf = NULL, /* obb 数据缓存空间 */ - .oob_offset = 0, /* 从offset开始拷贝页数据 */ - .oob_length = 0, /* 从offset开始拷贝页数据的长度 */ - .chip_addr = chip_addr, /* 芯片地址 */ - }; - - if (buffer && (length > 0)) - { - op_data.page_buf = buffer; - op_data.page_length = length; - op_data.page_offset = page_copy_offset; - } - - if (oob_buffer && (oob_length > 0)) - { - op_data.obb_required = 1; - op_data.oob_buf = oob_buffer; - op_data.oob_length = oob_length; - op_data.oob_offset = oob_copy_offset; - } - - return instance_p->write_p(instance_p, &op_data); -} - -/** - * @name: FNandReadPage - * @msg: Read operations one page at a time, including reading page data and spare space data - * @note: - * @param {FNand} *instance_p is the pointer to the FNand instance. - * @param {u32} page_addr is the address to which the page needs to be readed - * @param {u8} *buffer is the buffer used by the user to read page data - * @param {u32} page_copy_offset is the offset of the page reading , Buffer read data from 0 + page_copy_offset of per page - * @param {u32} length is page data read length - * @param {u8} *oob_buffer is buffer that read data from the spare space - * @param {u32} oob_copy_offset is the offset of the spare space reading , Buffer reads data from page length + oob_copy_offset - * @param {u32} oob_length is the length to be written to the spare space - * @param {u32} chip_addr chip address - * @return {FError} FT_SUCCESS is read successful - */ -FError FNandReadPage(FNand *instance_p, u32 page_addr, u8 *buffer, u32 page_copy_offset, u32 length, u8 *oob_buffer, u32 oob_copy_offset, u32 oob_length, u32 chip_addr) -{ - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - FASSERT(chip_addr < FNAND_CONNECT_MAX_NUM); - FASSERT(instance_p->read_hw_ecc_p); - - FNandOpData op_data = - { - .page_addr = page_addr, - .page_buf = NULL, /* page 数据缓存空间 */ - .page_offset = 0, /* 从offset开始拷贝页数据 */ - .page_length = 0, /* 从offset开始拷贝页数据的长度 */ - .obb_required = 0, /* obb 是否读取的标志位,1 需要操作oob 区域 */ - .oob_buf = NULL, /* obb 数据缓存空间 */ - .oob_offset = 0, /* 从offset开始拷贝页数据 */ - .oob_length = 0, /* 从offset开始拷贝页数据的长度 */ - .chip_addr = chip_addr, /* 芯片地址 */ - }; - - /* clear buffer */ - if (buffer && (length > 0)) - { - op_data.page_buf = buffer; - op_data.page_length = length; - op_data.page_offset = page_copy_offset; - } - - if (oob_buffer && (oob_length > 0)) - { - op_data.obb_required = 1; - op_data.oob_buf = oob_buffer; - op_data.oob_length = oob_length; - op_data.oob_offset = oob_copy_offset; - } - - return instance_p->read_hw_ecc_p(instance_p, &op_data); -} - -FError FNandReadPageRaw(FNand *instance_p, u32 page_addr, u8 *buffer, u32 page_copy_offset, u32 length, u8 *oob_buffer, u32 oob_copy_offset, u32 oob_length, u32 chip_addr) -{ - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - FASSERT(chip_addr < FNAND_CONNECT_MAX_NUM); - FASSERT(instance_p->read_hw_ecc_p); - - FNandOpData op_data = - { - .page_addr = page_addr, - .page_buf = NULL, /* page 数据缓存空间 */ - .page_offset = 0, /* 从offset开始拷贝页数据 */ - .page_length = 0, /* 从offset开始拷贝页数据的长度 */ - .obb_required = 0, /* obb 是否读取的标志位,1 需要操作oob 区域 */ - .oob_buf = NULL, /* obb 数据缓存空间 */ - .oob_offset = 0, /* 从offset开始拷贝页数据 */ - .oob_length = 0, /* 从offset开始拷贝页数据的长度 */ - .chip_addr = chip_addr, /* 芯片地址 */ - }; - - /* clear buffer */ - if (buffer && (length > 0)) - { - op_data.page_buf = buffer; - op_data.page_length = length; - op_data.page_offset = page_copy_offset; - } - - if (oob_buffer && (oob_length > 0)) - { - op_data.obb_required = 1; - op_data.oob_buf = oob_buffer; - op_data.oob_length = oob_length; - op_data.oob_offset = oob_copy_offset; - } - - return instance_p->read_p(instance_p, &op_data); -} - -/** - * @name: FNandEraseBlock - * @msg: erase block data - * @note: 擦除之后增加read status 命令进行检查。(70h) - * @param {FNand} *instance_p is the pointer to the FNand instance. - * @param {u32} block is block number - * @param {u32} chip_addr is chip address - * @return {FError} FT_SUCCESS is erase is successful - */ -FError FNandEraseBlock(FNand *instance_p, u32 block, u32 chip_addr) -{ - u32 page_address; - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - FASSERT(chip_addr < FNAND_CONNECT_MAX_NUM); - page_address = block * instance_p->nand_geometry[chip_addr].pages_per_block; - return instance_p->erase_p(instance_p, page_address, chip_addr); -} - - - -/** - * @name: FNandReadPageOOb - * @msg: Read spare space fo per page - * @note: - * @param {FNand} *instance_p is the instance pointer - * @param {u32} page_addr is the Row Address of the spare space needs to be read - * @param {u8} *oob_buffer is the buffer used by the user to read spare space data - * @param {u32} oob_copy_offset is the offset of the spare space reading , Buffer reads data from page length + page_copy_offset - * @param {u32} oob_length is the length of data retrieved from spare space - * @param {u32} chip_addr is chip address - * @return {FError} FT_SUCCESS is read successful - */ -FError FNandReadPageOOb(FNand *instance_p, u32 page_addr, u8 *oob_buffer, u32 oob_copy_offset, u32 oob_length, u32 chip_addr) -{ - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - FASSERT(chip_addr < FNAND_CONNECT_MAX_NUM); - - FNandOpData op_data = - { - .page_addr = page_addr, - .page_buf = NULL, /* page 数据缓存空间 */ - .page_offset = 0, /* 从offset开始拷贝页数据 */ - .page_length = 0, /* 从offset开始拷贝页数据的长度 */ - .obb_required = 1, /* obb 是否读取的标志位,1 需要操作oob 区域 */ - .oob_buf = oob_buffer, /* obb 数据缓存空间 */ - .oob_offset = oob_copy_offset, /* 从offset开始拷贝页数据 */ - .oob_length = oob_length, /* 从offset开始拷贝页数据的长度 */ - .chip_addr = chip_addr, /* 芯片地址 */ - }; - - return instance_p->read_oob_p(instance_p, &op_data); -} - -/** - * @name: FNandWritePageOOb - * @msg: write data to the spare space - * @note: - * @param {FNand} *instance_p is the instance pointer - * @param {u32} page_addr is the Row Address of the spare space needs to be write - * @param {u8} *oob_buffer is buffer that writes data to the spare space - * @param {u32} page_copy_offset is the offset of the spare space writing , Buffer write data to page length + page_copy_offset - * @param {u32} oob_length is the length to be written to the spare space - * @param {u32} chip_addr is chip address - * @return {FError} FT_SUCCESS is write successful - */ -FError FNandWritePageOOb(FNand *instance_p, u32 page_addr, u8 *oob_buffer, u32 page_copy_offset, u32 oob_length, u32 chip_addr) -{ - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - FASSERT(chip_addr < FNAND_CONNECT_MAX_NUM); - - FNandOpData op_data = - { - .page_addr = page_addr, - .page_buf = NULL, /* page 数据缓存空间 */ - .page_offset = 0, /* 从offset开始拷贝页数据 */ - .page_length = 0, /* 从offset开始拷贝页数据的长度 */ - .obb_required = 1, /* obb 是否读取的标志位,1 需要操作oob 区域 */ - .oob_buf = oob_buffer, /* obb 数据缓存空间 */ - .oob_offset = page_copy_offset, /* 从offset开始拷贝页数据 */ - .oob_length = oob_length, /* 从offset开始拷贝页数据的长度 */ - .chip_addr = chip_addr, /* 芯片地址 */ - }; - - return instance_p->write_oob_p(instance_p, &op_data); -} diff --git a/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand.h b/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand.h deleted file mode 100644 index 12c1012ad2..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand.h +++ /dev/null @@ -1,306 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fnand.h - * Date: 2022-05-07 15:40:42 - * LastEditTime: 2022-05-07 15:40:42 - * Description:  This file is for functions in this file are the minimum required functions - * for this driver. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/05/10 first release - */ -#ifndef FNAND_H -#define FNAND_H - - -#include "ftypes.h" -#include "fassert.h" -#include "fnand_dma.h" -#include "fnand_timing.h" -#include "fparameters.h" -#include "fkernel.h" - - -#ifdef __cplusplus -extern "C" -{ -#endif - - -#define FNAND_ERR_OPERATION FT_CODE_ERR(ErrModBsp, ErrNand, 0x1u) -#define FNAND_ERR_INVAILD_PARAMETER FT_CODE_ERR(ErrModBsp, ErrNand, 0x2u) -#define FNAND_IS_BUSY FT_CODE_ERR(ErrModBsp, ErrNand, 0x3u) -#define FNAND_OP_TIMEOUT FT_CODE_ERR(ErrModBsp, ErrNand, 0x4u) -#define FNAND_VALUE_ERROR FT_CODE_ERR(ErrModBsp, ErrNand, 0x7u) -#define FNAND_VALUE_FAILURE FT_CODE_ERR(ErrModBsp, ErrNand, 0x8u) -#define FNAND_NOT_FET_TOGGLE_MODE FT_CODE_ERR(ErrModBsp, ErrNand, 0xCu) -#define FNAND_ERR_READ_ECC FT_CODE_ERR(ErrModBsp, ErrNand, 0xBu) -#define FNAND_ERR_IRQ_LACK_OF_CALLBACK FT_CODE_ERR(ErrModBsp, ErrNand, 0xCu) -#define FNAND_ERR_IRQ_OP_FAILED FT_CODE_ERR(ErrModBsp, ErrNand, 0xdu) -#define FNAND_ERR_NOT_MATCH FT_CODE_ERR(ErrModBsp, ErrNand, 0xEu) - - - -#define FNAND_MAX_BLOCKS 32768 /* Max number of Blocks */ -#define FNAND_MAX_PAGE_SIZE 16384 /* Max page size of NAND \ -flash */ -#define FNAND_MAX_SPARE_SIZE 1024 /* Max spare bytes of a NAND \ -flash page */ - - -/* dma */ -#define FNAND_DMA_MAX_LENGTH (32*1024) - -/* options */ -/* These constants are used as option to FNandSetOption() */ -#define FNAND_OPS_INTER_MODE_SELECT 1U /* */ - - -/* These constants are used as parameters to FNandSetIsrHandler() */ -#define FNAND_WORK_MODE_POLL 0U -#define FNAND_WORK_MODE_ISR 1U - - -/* NAND Flash Interface */ - -#define FNAND_ONFI_MODE 0U -#define FNAND_TOGGLE_MODE 1U - - -typedef enum -{ - FNAND_ASYNC_TIM_INT_MODE0 = 0, - FNAND_ASYNC_TIM_INT_MODE1, - FNAND_ASYNC_TIM_INT_MODE2, - FNAND_ASYNC_TIM_INT_MODE3, - FNAND_ASYNC_TIM_INT_MODE4, -} FNandAsyncTimint; - -typedef enum -{ - FNAND_CMD_TYPE = 0, /* 采用cmd 类型的操作类型 */ - FNAND_WRITE_PAGE_TYPE, /* PAGE program 操作 */ - FNAND_READ_PAGE_TYPE, /* PAGE read 操作 */ - FNAND_WAIT_ECC_TYPE, /* Waiting ECC FINISH 操作 */ - FNAND_TYPE_NUM -} FNandOperationType; - -/* Irq Callback events */ -typedef enum -{ - FNAND_IRQ_BUSY_EVENT = 0,/* nandflash控制器忙状态中断状态位 */ - FNAND_IRQ_DMA_BUSY_EVENT, /* dma控制器忙状态中断状态位 */ - FNAND_IRQ_DMA_PGFINISH_EVENT, /* dma页操作完成中断状态位 */ - FNAND_IRQ_DMA_FINISH_EVENT, /* dma操作完成中断完成中断状态位 */ - FNAND_IRQ_FIFO_EMP_EVENT, /* fifo为空中断状态位 */ - FNAND_IRQ_FIFO_FULL_EVENT, /* fifo为满中断状态位 */ - FNAND_IRQ_FIFO_TIMEOUT_EVENT, /* fifo超时中断状态位 */ - FNAND_IRQ_CMD_FINISH_EVENT, /* nand接口命令完成中断状态位 */ - FNAND_IRQ_PGFINISH_EVENT, /* nand接口页操作完成中断状态位 */ - FNAND_IRQ_RE_EVENT, /* re_n门控打开中断状态位 */ - FNAND_IRQ_DQS_EVENT, /* dqs门控打开中断状态位 */ - FNAND_IRQ_RB_EVENT, /* rb_n信号busy中断状态位 */ - FNAND_IRQ_ECC_FINISH_EVENT, /* ecc完成中断状态蔽位 */ - FNAND_IRQ_ECC_ERR_EVENT /* ecc正确中断状态蔽位 */ -} FNAND_CALL_BACK_EVENT; - -typedef struct -{ - u32 bytes_per_page; /* Bytes per page */ - u32 spare_bytes_per_page; /* Size of spare area in bytes */ - u32 pages_per_block; /* Pages per block */ - u32 blocks_per_lun; /* Bocks per LUN */ - u8 num_lun; /* Total number of LUN */ - u8 flash_width; /* Data width of flash device */ - u64 num_pages; /* Total number of pages in device */ - u64 num_blocks; /* Total number of blocks in device */ - u64 block_size; /* Size of a block in bytes */ - u64 device_size; /* Total device size in bytes */ - u8 rowaddr_cycles; /* Row address cycles */ - u8 coladdr_cycles; /* Column address cycles */ - u32 hw_ecc_steps; /* number of ECC steps per page */ - u32 hw_ecc_length; /* 产生硬件ecc校验参数的个数 */ - u32 ecc_offset; /* spare_bytes_per_page - hw_ecc_length = obb存放硬件ecc校验参数页位置的偏移 */ - u32 ecc_step_size; /* 进行读写操作时,单次ecc 的步骤的跨度 */ -} FNandNandGeometry; - -typedef enum -{ - FNAND_ASYN_SDR = 0, /* ONFI & Toggle async */ - FNAND_ONFI_DDR = 1, /* ONFI sync */ - FNAND_TOG_ASYN_DDR = 2 /* Toggle async */ -} FNandInterMode; - -typedef enum -{ - FNAND_TIMING_MODE0 = 0, - FNAND_TIMING_MODE1 = 1, - FNAND_TIMING_MODE2 = 2, - FNAND_TIMING_MODE3 = 3, - FNAND_TIMING_MODE4 = 4, - FNAND_TIMING_MODE5 = 5, -} FNandTimingMode; - -typedef struct -{ - u32 instance_id; /* Id of device*/ - u32 irq_num; /* Irq number */ - volatile uintptr_t base_address; - u32 ecc_strength; /* 每次ecc 步骤纠正的位数 */ - u32 ecc_step_size; /* 进行读写操作时,单次ecc 的步骤的跨度 */ -} FNandConfig; - -/** - * Bad block pattern - */ -typedef struct -{ - u32 options; /**< Options to search the bad block pattern */ - u32 offset; /**< Offset to search for specified pattern */ - u32 length; /**< Number of bytes to check the pattern */ - u8 pattern[2]; /**< Pattern format to search for */ -} FNandBadBlockPattern; - - -typedef struct -{ - u32 page_addr; - u8 *page_buf; /* page 数据缓存空间 */ - u32 page_offset; /* 从offset开始拷贝页数据 */ - u32 page_length; /* 从offset开始拷贝页数据的长度 */ - s32 obb_required; /* obb 是否读取的标志位,1 需要操作oob 区域 */ - u8 *oob_buf; /* obb 数据缓存空间 */ - u32 oob_offset; /* 从offset开始拷贝页数据 */ - u32 oob_length; /* 从offset开始拷贝页数据的长度 */ - u32 chip_addr; /* 芯片地址 */ -} FNandOpData; - -/** - * Bad block table descriptor - */ -typedef struct -{ - u32 page_offset; /* Page offset where BBT resides */ - u32 sig_offset; /* Signature offset in Spare area */ - u32 ver_offset; /* Offset of BBT version */ - u32 sig_length; /* Length of the signature */ - u32 max_blocks; /* Max blocks to search for BBT */ - char signature[4]; /* BBT signature */ - u8 version; /* BBT version */ - u32 valid; /* BBT descriptor is valid or not */ -} FNandBbtDesc; - -typedef struct -{ - u8 bbt[FNAND_MAX_BLOCKS >> 2]; - FNandBbtDesc bbt_desc; /* Bad block table descriptor */ - FNandBbtDesc bbt_mirror_desc; /* Mirror BBT descriptor */ - FNandBadBlockPattern bb_pattern; /* Bad block pattern to search */ -} FNandBadBlockManager; - -/* DMA */ - -/* DMA buffer */ -struct FNandDmaBuffer -{ - u8 data_buffer[FNAND_DMA_MAX_LENGTH]; -} __attribute__((packed)) __attribute__((aligned(128))); - -/* operation api */ -typedef struct _FNand FNand; - -typedef FError(*FNandTransferP)(FNand *instance_p, FNandOpData *op_data_p); -typedef FError(*FNandEraseP)(FNand *instance_p, u32 page_address, u32 chip_addr); - -typedef void (*FnandIrqEventHandler)(void *args, FNAND_CALL_BACK_EVENT event) ; -typedef FError(*FNandOperationWaitIrqCallback)(void *args); - - -typedef struct -{ - u8 data[8]; - u32 len; - -} FNandId; - -typedef struct _FNand -{ - u32 is_ready; /* Device is ininitialized and ready*/ - FNandConfig config; - u32 work_mode; /* NAND controler work mode */ - - /* nand flash info */ - FNandInterMode inter_mode[FNAND_CONNECT_MAX_NUM]; /* NAND controler timing work mode */ - FNandTimingMode timing_mode[FNAND_CONNECT_MAX_NUM]; - u32 nand_flash_interface[FNAND_CONNECT_MAX_NUM] ; /* Nand Flash Interface , followed by FNAND_ONFI_MODE \ FNAND_TOGGLE_MODE*/ - - struct FNandDmaBuffer dma_data_buffer; /* DMA data buffer */ - struct FNandDmaBuffer descriptor_buffer; /* DMA descriptor */ - struct FNandSdrTimings sdr_timing; /* SDR NAND chip timings */ - - /* bbm */ - FNandBadBlockManager bbt_manager[FNAND_CONNECT_MAX_NUM]; /* bad block manager handler */ - /* nand detect */ - FNandNandGeometry nand_geometry[FNAND_CONNECT_MAX_NUM]; /* nand flash infomation */ - /* dma 页操作 */ - FnandIrqEventHandler irq_event_fun_p; /* Interrupt event response function */ - void *irq_args; - - FNandOperationWaitIrqCallback wait_irq_fun_p; /* The NAND controller operates the wait function */ - void *wait_args; - - /* operations */ - FNandTransferP write_p ; /* Write page function */ - FNandTransferP read_p ; /* Read page function */ - FNandTransferP write_oob_p ; /* Write page spare space function */ - FNandTransferP read_oob_p ; /* Read page spare space function */ - FNandTransferP write_hw_ecc_p ; /* Write page with hardware function */ - FNandTransferP read_hw_ecc_p ; /* Read page with hardware function */ - FNandEraseP erase_p; /* Erase block function */ -} FNand; - -FNandConfig *FNandLookupConfig(u32 instance_id); -FError FNandCfgInitialize(FNand *instance_p, - FNandConfig *config_p); -FError FNandScan(FNand *instance_p); -FError FNandSetOption(FNand *instance_p, u32 options, u32 value); - -/* API */ -FError FNandWritePage(FNand *instance_p, u32 page_addr, u8 *buffer, u32 page_copy_offset, u32 length, u8 *oob_buffer, u32 oob_copy_offset, u32 oob_length, u32 chip_addr); -FError FNandWritePageRaw(FNand *instance_p, u32 page_addr, u8 *buffer, u32 page_copy_offset, u32 length, u8 *oob_buffer, u32 oob_copy_offset, u32 oob_length, u32 chip_addr); -FError FNandReadPage(FNand *instance_p, u32 page_addr, u8 *buffer, u32 page_copy_offset, u32 length, u8 *oob_buffer, u32 oob_copy_offset, u32 oob_length, u32 chip_addr); -FError FNandEraseBlock(FNand *instance_p, u32 block, u32 chip_addr); -FError FNandReadPageOOb(FNand *instance_p, u32 page_addr, u8 *oob_buffer, u32 oob_copy_offset, u32 oob_length, u32 chip_addr); -FError FNandWritePageOOb(FNand *instance_p, u32 page_addr, u8 *oob_buffer, u32 page_copy_offset, u32 oob_length, u32 chip_addr); -FError FNandReadPageRaw(FNand *instance_p, u32 page_addr, u8 *buffer, u32 page_copy_offset, u32 length, u8 *oob_buffer, u32 oob_copy_offset, u32 oob_length, u32 chip_addr); -/* irq */ -void FNandSetIsrHandler(FNand *instance_p, FnandIrqEventHandler event_p, void *irq_args); -void FNandIrqHandler(s32 vector, void *param); -void FNandOperationWaitIrqRegister(FNand *instance_p, FNandOperationWaitIrqCallback wait_irq_fun_p, void *wait_args); -void FNandIrqDisable(FNand *instance_p, u32 int_mask); -void FNandIsrEnable(FNand *instance_p, u32 int_mask); -/* bbm */ -void FNandInitBbtDesc(FNand *instance_p); -FError FNandScanBbt(FNand *instance_p, u32 target_addr); -FError FNandIsBlockBad(FNand *instance_p, u32 block, u32 target_addr); -FError FNandMarkBlockBad(FNand *instance_p, u32 block, u32 chip_addr); -#ifdef __cplusplus -} -#endif - - - -#endif // ! diff --git a/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand_bbm.c b/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand_bbm.c deleted file mode 100644 index 655c24270f..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand_bbm.c +++ /dev/null @@ -1,883 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fnand_bbm.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:56:12 - * Description:  This file implements the bad block management (BBM) functionality. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/05/10 first release - */ - - -#include "fnand_bbm.h" -#include "fnand.h" -#include "fparameters.h" - -#include -#include "fdebug.h" -#define FNAND_BBM_DEBUG_TAG "FNAND_BBM" -#define FNAND_BBM_DEBUG_I(format, ...) FT_DEBUG_PRINT_I(FNAND_BBM_DEBUG_TAG, format, ##__VA_ARGS__) -#define FNAND_BBM_DEBUG_W(format, ...) FT_DEBUG_PRINT_W(FNAND_BBM_DEBUG_TAG, format, ##__VA_ARGS__) -#define FNAND_BBM_DEBUG_E(format, ...) FT_DEBUG_PRINT_E(FNAND_BBM_DEBUG_TAG, format, ##__VA_ARGS__) - -static FError FNandWriteBbt(FNand *instance_p, - FNandBbtDesc *desc_p, - FNandBbtDesc *mirror_desc_p, - u32 chip_addr); - -/** - * @name: FNandInitBbtDesc - * @msg: This function initializes the Bad Block Table(BBT) descriptors with a - * predefined pattern for searching Bad Block Table(BBT) in flash. - * @param {FNand} *instance_p is the pointer to the FNand instance. - * @return {*} - * @note: - */ -void FNandInitBbtDesc(FNand *instance_p) -{ - u32 i; - int index; - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - - for (i = 0; i < FNAND_CONNECT_MAX_NUM; i++) - { - /* - * Initialize primary Bad Block Table(BBT) - */ - instance_p->bbt_manager[i].bbt_desc.page_offset = FNAND_BBT_DESC_PAGE_OFFSET; - instance_p->bbt_manager[i].bbt_desc.sig_offset = FNAND_BBT_DESC_SIG_OFFSET; - instance_p->bbt_manager[i].bbt_desc.ver_offset = FNAND_BBT_DESC_VER_OFFSET; - instance_p->bbt_manager[i].bbt_desc.max_blocks = FNAND_BBT_DESC_MAX_BLOCKS; - instance_p->bbt_manager[i].bbt_desc.sig_length = FNAND_BBT_DESC_SIG_LEN; - strcpy(&instance_p->bbt_manager[i].bbt_desc.signature[0], "Bbt0"); - instance_p->bbt_manager[i].bbt_desc.version = 0; - instance_p->bbt_manager[i].bbt_desc.valid = 0; - /* - * Initialize mirror Bad Block Table(BBT) - */ - instance_p->bbt_manager[i].bbt_mirror_desc.page_offset = FNAND_BBT_DESC_PAGE_OFFSET; - instance_p->bbt_manager[i].bbt_mirror_desc.sig_offset = FNAND_BBT_DESC_SIG_OFFSET; - instance_p->bbt_manager[i].bbt_mirror_desc.ver_offset = FNAND_BBT_DESC_VER_OFFSET; - instance_p->bbt_manager[i].bbt_mirror_desc.sig_length = FNAND_BBT_DESC_SIG_LEN; - instance_p->bbt_manager[i].bbt_mirror_desc.max_blocks = FNAND_BBT_DESC_MAX_BLOCKS; - strcpy(&instance_p->bbt_manager[i].bbt_mirror_desc.signature[0], "1tbB"); - instance_p->bbt_manager[i].bbt_mirror_desc.version = 0; - instance_p->bbt_manager[i].bbt_mirror_desc.valid = 0; - - /* - * Initialize Bad block search pattern structure - */ - if (instance_p->nand_geometry[i].bytes_per_page > 512) - { - /* For flash page size > 512 bytes */ - instance_p->bbt_manager[i].bb_pattern.options = FNAND_BBT_SCAN_2ND_PAGE; - instance_p->bbt_manager[i].bb_pattern.offset = - FNAND_BB_PATTERN_OFFSET_LARGE_PAGE; - instance_p->bbt_manager[i].bb_pattern.length = - FNAND_BB_PATTERN_LENGTH_LARGE_PAGE; - } - else - { - instance_p->bbt_manager[i].bb_pattern.options = FNAND_BBT_SCAN_2ND_PAGE; - instance_p->bbt_manager[i].bb_pattern.offset = - FNAND_BB_PATTERN_OFFSET_SMALL_PAGE; - instance_p->bbt_manager[i].bb_pattern.length = - FNAND_BB_PATTERN_LENGTH_SMALL_PAGE; - } - for (index = 0; index < FNAND_BB_PATTERN_LENGTH_LARGE_PAGE; index++) - { - instance_p->bbt_manager[i].bb_pattern.pattern[index] = FNAND_BB_PATTERN; - } - } -} - -/** - * @name: FNandConvertBbt - * @msg: Convert bitmask read in flash to information stored in RAM - * @return {*} - * @note: - * @param {FNand} *instance_p is the pointer to the FNand instance. - * @param {u8} *buf is buffer to store the bitmask - * @param {u32} chip_addr is chip address - */ -static void FNandConvertBbt(FNand *instance_p, u8 *buf, u32 chip_addr) -{ - u32 block_offset; - u32 block_shift; - u32 data; - u8 block_type; - u32 block_index; - u32 bbtlen = instance_p->nand_geometry[chip_addr].num_blocks >> - FNAND_BBT_BLOCK_SHIFT; - - for (block_offset = 0; block_offset < bbtlen; block_offset++) - { - data = buf[block_offset]; - - /* - * Clear the RAM based Bad Block Table(BBT) contents - */ - instance_p->bbt_manager[chip_addr].bbt[block_offset] = 0x0; - - /* - * Loop through the every 4 blocks in the bitmap - */ - for (block_index = 0; block_index < FNAND_BBT_ENTRY_NUM_BLOCKS; - block_index++) - { - block_shift = FNAND_BBTBLOCKSHIFT(block_index); - block_type = (data >> block_shift) & - FNAND_BLOCK_TYPE_MASK; - switch (block_type) - { - case FNAND_FLASH_BLOCK_FACTORY_BAD: - /* Factory bad block */ - instance_p->bbt_manager[chip_addr].bbt[block_offset] |= - FNAND_BLOCK_FACTORY_BAD << block_shift; - break; - case FNAND_FLASH_BLOCK_RESERVED: - /* Reserved block */ - instance_p->bbt_manager[chip_addr].bbt[block_offset] |= - FNAND_BLOCK_RESERVED << block_shift; - break; - case FNAND_FLASH_BLOCK_BAD: - /* Bad block due to wear */ - instance_p->bbt_manager[chip_addr].bbt[block_offset] |= - FNAND_BLOCK_BAD << block_shift; - break; - default: - /* Good block */ - /* The BBT entry already defaults to - * zero */ - break; - } - } - } -} - -static FError FNandUpdateBbt(FNand *instance_p, u32 chip_addr) -{ - FError ret; - u8 version; - - /* - * Update the version number - */ - version = instance_p->bbt_manager[chip_addr].bbt_desc.version; - instance_p->bbt_manager[chip_addr].bbt_desc.version = (version + 1) % 256; - version = instance_p->bbt_manager[chip_addr].bbt_mirror_desc.version; - instance_p->bbt_manager[chip_addr].bbt_mirror_desc.version = (version + 1) % 256; - - /* - * Update the primary Bad Block Table(BBT) in flash - */ - ret = FNandWriteBbt(instance_p, - &instance_p->bbt_manager[chip_addr].bbt_desc, - &instance_p->bbt_manager[chip_addr].bbt_mirror_desc, chip_addr); - if (ret != FT_SUCCESS) - { - return ret; - } - - /* - * Update the mirrored Bad Block Table(BBT) in flash - */ - ret = FNandWriteBbt(instance_p, - &instance_p->bbt_manager[chip_addr].bbt_mirror_desc, - &instance_p->bbt_manager[chip_addr].bbt_desc, chip_addr); - if (ret != FT_SUCCESS) - { - return ret; - } - - return FT_SUCCESS; -} - -static FError FNandMarkBbt(FNand *instance_p, - FNandBbtDesc *desc_p, - u32 chip_addr) -{ - - u32 block_index; - u32 block_offset; - u8 block_shift; - u8 old_val; - u8 new_val; - FError ret; - u32 updatebbt = 0; - u32 index; - - /* - * Mark the last four blocks as Reserved - */ - block_index = instance_p->nand_geometry[chip_addr].num_blocks - desc_p->max_blocks; - - for (index = 0; index < desc_p->max_blocks; index++, block_index++) - { - block_offset = block_index >> FNAND_BBT_BLOCK_SHIFT; - block_shift = FNAND_BBTBLOCKSHIFT(block_index); - old_val = instance_p->bbt_manager[chip_addr].bbt[block_offset]; - new_val = old_val | (FNAND_BLOCK_RESERVED << block_shift); - instance_p->bbt_manager[chip_addr].bbt[block_offset] = new_val; - - if (old_val != new_val) - { - updatebbt = 1; - } - } - - /* - * Update the BBT to flash - */ - if (updatebbt) - { - ret = FNandUpdateBbt(instance_p, chip_addr); - if (ret != FT_SUCCESS) - { - return ret; - } - } - return FT_SUCCESS; -} - -static FError FNandWriteBbt(FNand *instance_p, - FNandBbtDesc *desc_p, - FNandBbtDesc *mirror_desc_p, - u32 chip_addr) -{ - u64 offset; - u32 block = instance_p->nand_geometry[chip_addr].num_blocks - 1; - u8 buf[FNAND_MAX_BLOCKS >> FNAND_BBT_BLOCK_SHIFT]; - u8 sparebuf[FNAND_MAX_SPARE_SIZE]; - u8 mask[4] = {0x00, 0x01, 0x02, 0x03}; - u8 Data; - u32 block_offset; - u32 block_shift; - FError ret; - u32 block_index; - u32 index; - u8 block_type; - u32 bbtlen = instance_p->nand_geometry[chip_addr].num_blocks >> - FNAND_BBT_BLOCK_SHIFT; - FNAND_BBM_DEBUG_I("FNandWriteBbt bbtlen is %d", bbtlen); - - /* - * Find a valid block to write the Bad Block Table(BBT) - */ - if (!desc_p->valid) - { - for (index = 0; index < desc_p->max_blocks; index++) - { - block = (block - index); - block_offset = block >> FNAND_BBT_BLOCK_SHIFT; - block_shift = FNAND_BBTBLOCKSHIFT(block); - block_type = (instance_p->bbt_manager[chip_addr].bbt[block_offset] >> - block_shift) & - FNAND_BLOCK_TYPE_MASK; - switch (block_type) - { - case FNAND_BLOCK_BAD: - case FNAND_BLOCK_FACTORY_BAD: - continue; - default: - /* Good Block */ - break; - } - desc_p->page_offset = block * - instance_p->nand_geometry[chip_addr].pages_per_block; - if (desc_p->page_offset != mirror_desc_p->page_offset) - { - /* Free block found */ - desc_p->valid = 1; - break; - } - } - - /* - * Block not found for writing Bad Block Table(BBT) - */ - if (index >= desc_p->max_blocks) - { - return FNAND_VALUE_FAILURE; - } - } - else - { - block = desc_p->page_offset / instance_p->nand_geometry[chip_addr].pages_per_block; - } - - /* - * Convert the memory based BBT to flash based table - */ - memset(buf, 0xff, bbtlen); - - /* - * Loop through the number of blocks - */ - for (block_offset = 0; block_offset < bbtlen; block_offset++) - { - Data = instance_p->bbt_manager[chip_addr].bbt[block_offset]; - /* - * Calculate the bit mask for 4 blocks at a time in loop - */ - for (block_index = 0; block_index < FNAND_BBT_ENTRY_NUM_BLOCKS; - block_index++) - { - block_shift = FNAND_BBTBLOCKSHIFT(block_index); - buf[block_offset] &= ~(mask[Data & - FNAND_BLOCK_TYPE_MASK] - << block_shift); - Data >>= FNAND_BBT_BLOCK_SHIFT; - } - - } - - /* - * Write the Bad Block Table(BBT) to flash - */ - ret = FNandEraseBlock(instance_p, block, chip_addr); - if (ret != FT_SUCCESS) - { - return ret; - } - - /* - * Write the signature and version in the spare data area - */ - memset(sparebuf, 0xff, instance_p->nand_geometry[chip_addr].spare_bytes_per_page); - memcpy(sparebuf + desc_p->sig_offset, &desc_p->signature[0], - desc_p->sig_length); - memcpy(sparebuf + desc_p->ver_offset, &desc_p->version, 1); - - /* - * Write the BBT to page offset - */ - FNandWritePage(instance_p, desc_p->page_offset, &buf[0], 0, bbtlen, sparebuf, 0, sizeof(sparebuf), chip_addr); - if (ret != FT_SUCCESS) - { - return ret; - } - return FT_SUCCESS; -} - -static void FNandCreateBbt(FNand *instance_p, u32 chip_addr) -{ - u32 block_index; - u32 page_index; - u32 length; - u32 block_offset; - u32 block_shift; - u32 num_pages; - u32 page; - u8 buf[FNAND_MAX_SPARE_SIZE]; - u32 bbt_len = instance_p->nand_geometry[chip_addr].num_blocks >> - FNAND_BBT_BLOCK_SHIFT; - FError ret; - /* - * Number of pages to search for bad block pattern - */ - if (instance_p->bbt_manager[chip_addr].bb_pattern.options & FNAND_BBT_SCAN_2ND_PAGE) - { - num_pages = 2; - } - else - { - num_pages = 1; - } - - /* - * Zero the RAM based Bad Block Table(BBT) entries - */ - memset(&instance_p->bbt_manager[chip_addr].bbt[0], 0, bbt_len); - - /* - * Scan all the blocks for factory marked bad blocks - */ - for (block_index = 0; block_index < - instance_p->nand_geometry[chip_addr].num_blocks; - block_index++) - { - /* - * Block offset in Bad Block Table(BBT) entry - */ - block_offset = block_index >> FNAND_BBT_BLOCK_SHIFT; - /* - * Block shift value in the byte - */ - block_shift = FNAND_BBTBLOCKSHIFT(block_index); - page = block_index * instance_p->nand_geometry[chip_addr].pages_per_block; - - /* - * Search for the bad block pattern - */ - for (page_index = 0; page_index < num_pages; page_index++) - { - ret = FNandReadPageOOb(instance_p, page + page_index, buf, 0, sizeof(buf), chip_addr); - if (ret != FT_SUCCESS) - { - FNAND_BBM_DEBUG_E("%s FNandReadPageOOb is error", __func__); - /* Marking as bad block */ - instance_p->bbt_manager[chip_addr].bbt[block_offset] |= - (FNAND_BLOCK_FACTORY_BAD << block_shift); - break; - } - - /* - * Read the spare bytes to check for bad block - * pattern - */ - for (length = 0; length < - instance_p->bbt_manager[chip_addr].bb_pattern.length; - length++) - { - if (buf[instance_p->bbt_manager[chip_addr].bb_pattern.offset + length] != - instance_p->bbt_manager[chip_addr].bb_pattern.pattern[length]) - { - /* Bad block found */ - instance_p->bbt_manager[chip_addr].bbt[block_offset] |= - (FNAND_BLOCK_FACTORY_BAD << block_shift); - FNAND_BBM_DEBUG_E("Bad block found block is %d", page + page_index); - break; - } - } - } - } -} - -FError FNandSearchBbt(FNand *instance_p, FNandBbtDesc *desc, u32 chip_addr) -{ - u32 start_block; - u32 sig_offset; - u32 ver_offset; - u32 max_blocks; - u32 pageoff; - u32 sig_length; - u8 buf[FNAND_MAX_SPARE_SIZE]; - u32 block; - u32 offset; - FError ret; - - start_block = instance_p->nand_geometry[chip_addr].num_blocks - 1; /* start block is last block start */ - sig_offset = desc->sig_offset; - ver_offset = desc->ver_offset; - max_blocks = desc->max_blocks; - sig_length = desc->sig_length; - FNAND_BBM_DEBUG_I("FNandSearchBbt starts at 0x%x", start_block); - FNAND_BBM_DEBUG_I("Pages_per_block starts at %d", instance_p->nand_geometry[chip_addr].pages_per_block); - for (block = 0; block < max_blocks; block++) - { - pageoff = (start_block - block) * - instance_p->nand_geometry[chip_addr].pages_per_block; - FNAND_BBM_DEBUG_I("Block 0x%x", block); - FNAND_BBM_DEBUG_I("%s, Pageoff is 0x%x", __func__, pageoff); - ret = FNandReadPageOOb(instance_p, pageoff, buf, 0, sizeof(buf), chip_addr); - if (ret != FT_SUCCESS) - { - continue; - } - - /* - * Check the Bad Block Table(BBT) signature - */ - for (offset = 0; offset < sig_length; offset++) - { - if (buf[offset + sig_offset] != desc->signature[offset]) - { - break; /* Check the next blocks */ - } - } - if (offset >= sig_length) - { - /* - * Bad Block Table(BBT) found - */ - desc->page_offset = pageoff; - desc->version = buf[ver_offset]; - desc->valid = 1; - return FT_SUCCESS; - } - } - /* - * Bad Block Table(BBT) not found - */ - return FNAND_VALUE_ERROR; -} - -/** - * @name: - * @msg: - * @return {*} - * @note: - * @param {FNand} *instance_p - * @param {u32} chip_addr - */ -FError FNandReadBbt(FNand *instance_p, u32 chip_addr) -{ - u64 offset; - u8 buf[FNAND_MAX_BLOCKS >> FNAND_BBT_BLOCK_SHIFT]; - FError status1; - FError status2; - FError ret; - u32 bbtlen; - - - FNandBbtDesc *desc_p = &instance_p->bbt_manager[chip_addr].bbt_desc; - FNandBbtDesc *mirror_desc_p = &instance_p->bbt_manager[chip_addr].bbt_mirror_desc; - - bbtlen = instance_p->nand_geometry[chip_addr].num_blocks >> FNAND_BBT_BLOCK_SHIFT; /* 根据nand 介质信息获取的总块数,除以4 的含义为每字节存储4个块信息 */ - FNAND_BBM_DEBUG_I("FNandReadBbt ,bbtlen is %d", bbtlen); - - status1 = FNandSearchBbt(instance_p, desc_p, chip_addr); - status2 = FNandSearchBbt(instance_p, mirror_desc_p, chip_addr); - - if ((status1 != FT_SUCCESS) && (status2 != FT_SUCCESS)) - { - FNAND_BBM_DEBUG_E("FNandReadBbt error status1 %x, status2 %x", status1, status2); - return FNAND_VALUE_FAILURE; - } - - /* - * Bad Block Table found - */ - - if (desc_p->valid && mirror_desc_p->valid) - { - if (desc_p->version > mirror_desc_p->version) - { - /* - * Valid BBT & Mirror BBT found - */ - FNAND_BBM_DEBUG_I("The desc_p->version > mirror_desc_p->version is not null , the page_offset is %d", desc_p->page_offset); - ret = FNandReadPage(instance_p, desc_p->page_offset, buf, 0, bbtlen, NULL, 0, 0, chip_addr); - if (ret != FT_SUCCESS) - { - FNAND_BBM_DEBUG_I("The desc_p->version > mirror_desc_p->version is not null , the FNandReadPage is error 0x%x", ret); - return ret; - } - /* - * Convert flash BBT to memory based BBT - */ - FNandConvertBbt(instance_p, &buf[0], chip_addr); - mirror_desc_p->version = desc_p->version; - - /* - * Write the BBT to Mirror BBT location in flash - */ - ret = FNandWriteBbt(instance_p, mirror_desc_p, - desc_p, chip_addr); - if (ret != FT_SUCCESS) - { - return ret; - } - } - else if (desc_p->version < mirror_desc_p->version) - { - FNAND_BBM_DEBUG_I("desc_p->version < mirror_desc_p->version is not null, the page_offset is %d", mirror_desc_p->page_offset); - ret = FNandReadPage(instance_p, mirror_desc_p->page_offset, buf, 0, bbtlen, NULL, 0, 0, chip_addr); - if (ret != FT_SUCCESS) - { - FNAND_BBM_DEBUG_I("desc_p->version < mirror_desc_p->version is not null, the FNandReadPage is error 0x%x", ret); - return ret; - } - /* - * Convert flash BBT to memory based BBT - */ - FNandConvertBbt(instance_p, &buf[0], chip_addr); - desc_p->version = mirror_desc_p->version; - - /* - * Write the BBT to Mirror BBT location in flash - */ - ret = FNandWriteBbt(instance_p, desc_p, - mirror_desc_p, chip_addr); - if (ret != FT_SUCCESS) - { - return ret; - } - } - else - { - /* Both are up-to-date */ - FNAND_BBM_DEBUG_I("Both are up-to-date, the page_offset is %d", desc_p->page_offset); - - ret = FNandReadPage(instance_p, desc_p->page_offset, buf, 0, bbtlen, NULL, 0, 0, chip_addr); - if (ret != FT_SUCCESS) - { - FNAND_BBM_DEBUG_I("Both are up-to-date, the FNandReadPage is error 0x%x", ret); - return ret; - } - - /* - * Convert flash BBT to memory based BBT - */ - FNandConvertBbt(instance_p, &buf[0], chip_addr); - } - } - else if (desc_p->valid) - { - /* - * Valid Primary BBT found - */ - - FNAND_BBM_DEBUG_I("Valid Primary BBT found is %d", desc_p->page_offset); - - ret = FNandReadPage(instance_p, desc_p->page_offset, buf, 0, bbtlen, NULL, 0, 0, chip_addr); - if (ret != FT_SUCCESS) - { - FNAND_BBM_DEBUG_I("Valid Primary BBT found is error 0x%x", ret); - return ret; - } - - - /* - * Convert flash BBT to memory based BBT - */ - FNandConvertBbt(instance_p, &buf[0], chip_addr); - desc_p->version = mirror_desc_p->version; - - /* - * Write the BBT to Mirror BBT location in flash - */ - ret = FNandWriteBbt(instance_p, mirror_desc_p, - desc_p, chip_addr); - if (ret != FT_SUCCESS) - { - return ret; - } - } - else - { - /* - * Valid Mirror BBT found - */ - - FNAND_BBM_DEBUG_I("Valid Mirror BBT found is %d", mirror_desc_p->page_offset); - - ret = FNandReadPage(instance_p, mirror_desc_p->page_offset, buf, 0, bbtlen, NULL, 0, 0, chip_addr); - if (ret != FT_SUCCESS) - { - FNAND_BBM_DEBUG_I("Valid Mirror BBT found is error 0x%x", ret); - return ret; - } - - /* - * Convert flash BBT to memory based BBT - */ - FNandConvertBbt(instance_p, &buf[0], chip_addr); - desc_p->version = mirror_desc_p->version; - - /* - * Write the BBT to Mirror BBT location in flash - */ - ret = FNandWriteBbt(instance_p, desc_p, - mirror_desc_p, chip_addr); - if (ret != FT_SUCCESS) - { - return ret; - } - } - return FT_SUCCESS; -} - - - -static void FNandBbtDumpDebug(FNand *instance_p) -{ - int i; - FNAND_BBM_DEBUG_W("/********************* Master bbt descriptor **********************/"); - - FNAND_BBM_DEBUG_I("page_offset 0x%x", instance_p->bbt_manager[0].bbt_desc.page_offset); /* Page offset where BBT resides */ - FNAND_BBM_DEBUG_I("sig_offset 0x%x", instance_p->bbt_manager[0].bbt_desc.sig_offset); /* Signature offset in Spare area */ - FNAND_BBM_DEBUG_I("ver_offset 0x%x", instance_p->bbt_manager[0].bbt_desc.ver_offset); /* Offset of BBT version */ - FNAND_BBM_DEBUG_I("sig_length 0x%x", instance_p->bbt_manager[0].bbt_desc.sig_length); /* Length of the signature */ - FNAND_BBM_DEBUG_I("max_blocks 0x%x", instance_p->bbt_manager[0].bbt_desc.max_blocks); /* Max blocks to search for BBT */ - for (i = 0; i < 4; i++) - { - FNAND_BBM_DEBUG_I("Signature[%d] %c", i, instance_p->bbt_manager[0].bbt_desc.signature[i]); - } - FNAND_BBM_DEBUG_I("version 0x%x", instance_p->bbt_manager[0].bbt_desc.version); /* BBT version */ - FNAND_BBM_DEBUG_I("valid 0x%x", instance_p->bbt_manager[0].bbt_desc.valid); /* BBT descriptor is valid or not */ - - FNAND_BBM_DEBUG_W("/********************* Mirror bbt descriptor **********************/"); - FNAND_BBM_DEBUG_I("page_offset 0x%x", instance_p->bbt_manager[0].bbt_mirror_desc.page_offset); /* Page offset where BBT resides */ - FNAND_BBM_DEBUG_I("sig_offset 0x%x", instance_p->bbt_manager[0].bbt_mirror_desc.sig_offset); /* Signature offset in Spare area */ - FNAND_BBM_DEBUG_I("ver_offset 0x%x", instance_p->bbt_manager[0].bbt_mirror_desc.ver_offset); /* Offset of BBT version */ - FNAND_BBM_DEBUG_I("sig_length 0x%x", instance_p->bbt_manager[0].bbt_mirror_desc.sig_length); /* Length of the signature */ - FNAND_BBM_DEBUG_I("max_blocks 0x%x", instance_p->bbt_manager[0].bbt_mirror_desc.max_blocks); /* Max blocks to search for BBT */ - for (i = 0; i < 4; i++) - { - FNAND_BBM_DEBUG_I("signature[%d] %c", i, instance_p->bbt_manager[0].bbt_mirror_desc.signature[i]); - } - FNAND_BBM_DEBUG_I("version 0x%x", instance_p->bbt_manager[0].bbt_mirror_desc.version); /* BBT version */ - FNAND_BBM_DEBUG_I("valid 0x%x", instance_p->bbt_manager[0].bbt_mirror_desc.valid); /* BBT descriptor is valid or not */ - - - FNAND_BBM_DEBUG_W("/********************* Bbt info **********************/"); - FtDumpHexWord((const u32 *)instance_p->bbt_manager[0].bbt, instance_p->nand_geometry[0].num_blocks >> - FNAND_BBT_BLOCK_SHIFT); -} - -/** - * @name: FNandScanBbt - * @msg: This function reads the Bad Block Table(BBT) if present in flash. - * @note: - * @param {FNand} *instance_p is the pointer to the FNand instance. - * @param {u32} chip_addr is chip address - * @return {FError} - */ -FError FNandScanBbt(FNand *instance_p, u32 chip_addr) -{ - FError ret; - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - - if (FNandReadBbt(instance_p, chip_addr) != FT_SUCCESS) - { - /* - * Create memory based Bad Block Table(BBT) - */ - FNandCreateBbt(instance_p, chip_addr); - - /* - * Write the Bad Block Table(BBT) to the flash - */ - ret = FNandWriteBbt(instance_p, - &instance_p->bbt_manager[chip_addr].bbt_desc, - &instance_p->bbt_manager[chip_addr].bbt_mirror_desc, chip_addr); - if (ret != FT_SUCCESS) - { - return ret; - } - - /* - * Write the Mirror Bad Block Table(BBT) to the flash - */ - ret = FNandWriteBbt(instance_p, - &instance_p->bbt_manager[chip_addr].bbt_mirror_desc, - &instance_p->bbt_manager[chip_addr].bbt_desc, chip_addr); - if (ret != FT_SUCCESS) - { - return ret; - } - - /* - * Mark the blocks containing Bad Block Table(BBT) as Reserved - */ - FNandMarkBbt(instance_p, &instance_p->bbt_manager[chip_addr].bbt_desc, chip_addr); - FNandMarkBbt(instance_p, &instance_p->bbt_manager[chip_addr].bbt_mirror_desc, chip_addr); - - FNAND_BBM_DEBUG_I("New bbt is ready"); - - FNandBbtDumpDebug(instance_p) ; - - } - else - { - FNAND_BBM_DEBUG_I("Old bbt is valid"); - FNandBbtDumpDebug(instance_p) ; - } - - return FT_SUCCESS; -} - - -/** - * @name: FNandIsBlockBad - * @msg: This function checks whether a block is bad or not. - * @note: - * @param {FNand} *instance_p is the pointer to the FNand instance. - * @param {u32} block is the fnand flash block number - * @param {u32} chip_addr is chip address - * @return {FError} FT_SUCCESS if block is bad - */ -FError FNandIsBlockBad(FNand *instance_p, u32 block, u32 chip_addr) -{ - u8 data; - u8 block_shift; - u8 BlockType; - u32 BlockOffset; - - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - FASSERT_MSG(block < instance_p->nand_geometry[chip_addr].num_blocks, "block is %d,num_blocks is %d", block, instance_p->nand_geometry[chip_addr].num_blocks); - - BlockOffset = block >> FNAND_BBT_BLOCK_SHIFT; - block_shift = FNAND_BBTBLOCKSHIFT(block); - data = instance_p->bbt_manager[chip_addr].bbt[BlockOffset]; /* Block information in BBT */ - BlockType = (data >> block_shift) & FNAND_BLOCK_TYPE_MASK; - - if (BlockType != FNAND_BLOCK_GOOD) - { - return FT_SUCCESS; - } - else - { - return FNAND_VALUE_FAILURE; - } -} - - - -/** - * @name: FNandMarkBlockBad - * @msg: This function marks a block as bad in the RAM based Bad Block Table(BBT). - * @note: - * @param {FNand} *instance_p is the pointer to the FNand instance. - * @param {u32} block is the fnand flash block number - * @param {u32} chip_addr is chip address - * @return {*} FT_SUCCESS if successful - */ -FError FNandMarkBlockBad(FNand *instance_p, u32 block, u32 chip_addr) -{ - u8 data; - u8 block_shift; - u32 block_offset; - u8 oldval; - u8 newval; - u32 Status; - - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - FASSERT(block < instance_p->nand_geometry[chip_addr].num_blocks); - - block_offset = block >> FNAND_BBT_BLOCK_SHIFT; - block_shift = FNAND_BBTBLOCKSHIFT(block); - data = instance_p->bbt_manager[chip_addr].bbt[block_offset]; /* Block information in BBT */ - - /* - * Mark the block as bad in the RAM based Bad Block Table - */ - oldval = data; - data &= ~(FNAND_BLOCK_TYPE_MASK << block_shift); - data |= (FNAND_BLOCK_BAD << block_shift); - newval = data; - instance_p->bbt_manager[chip_addr].bbt[block_offset] = data; - - /* - * Update the Bad Block Table(BBT) in flash - */ - if (oldval != newval) - { - Status = FNandUpdateBbt(instance_p, chip_addr); - if (Status != FT_SUCCESS) - { - return Status; - } - } - return FT_SUCCESS; -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand_bbm.h b/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand_bbm.h deleted file mode 100644 index aa525c8d59..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand_bbm.h +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fnand_bbm.h - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:56:17 - * Description:  This file implements the Bad Block Management (BBM) functionality. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/05/10 first release - */ - - -#ifndef FNAND_BBM_H -#define FNAND_BBM_H - -#include "ftypes.h" -#include "fnand.h" - - -#ifdef __cplusplus -extern "C" -{ -#endif - -/************************** Constant Definitions *****************************/ -/* - * Block definitions for RAM based Bad Block Table (BBT) - */ -#define FNAND_BLOCK_GOOD 0x0 /* Block is good */ -#define FNAND_BLOCK_BAD 0x1 /* Block is bad */ -#define FNAND_BLOCK_RESERVED 0x2 /* Reserved block */ -#define FNAND_BLOCK_FACTORY_BAD 0x3 /* Factory marked bad block */ - -/* - * Block definitions for FLASH based Bad Block Table (BBT) - */ -#define FNAND_FLASH_BLOCK_GOOD 0x3 /* Block is good */ -#define FNAND_FLASH_BLOCK_BAD 0x2 /* Block is bad */ -#define FNAND_FLASH_BLOCK_RESERVED 0x1 /* Reserved block */ -#define FNAND_FLASH_BLOCK_FACTORY_BAD 0x0 /* Factory marked bad block */ - -#define FNAND_BBT_SCAN_2ND_PAGE 0x00000001 /* Scan the \ - second page \ - for bad block \ - information \ -*/ -#define FNAND_BBT_DESC_PAGE_OFFSET 0 /* Page offset of Bad \ -Block Table Desc */ -#define FNAND_BBT_DESC_SIG_OFFSET 8 /* Bad Block Table \ -signature offset */ -#define FNAND_BBT_DESC_VER_OFFSET 12 /* Bad block Table \ -version offset */ -#define FNAND_BBT_DESC_SIG_LEN 4 /* Bad block Table \ -signature length */ -#define FNAND_BBT_DESC_MAX_BLOCKS 4 /* Bad block Table \ -max blocks */ - -#define FNAND_BBT_BLOCK_SHIFT 2 /* Block shift value \ -for a block in BBT */ -#define FNAND_BBT_ENTRY_NUM_BLOCKS 4 /* Num of blocks in \ -one BBT entry */ -#define FNAND_BB_PATTERN_OFFSET_SMALL_PAGE 5 /* Bad block pattern \ -offset in a page */ -#define FNAND_BB_PATTERN_LENGTH_SMALL_PAGE 1 /* Bad block pattern \ -length */ -#define FNAND_BB_PATTERN_OFFSET_LARGE_PAGE 0 /* Bad block pattern \ - offset in a large \ -page */ -#define FNAND_BB_PATTERN_LENGTH_LARGE_PAGE 2 /* Bad block pattern \ -length */ -#define FNAND_BB_PATTERN 0xFF /* Bad block pattern \ - to search in a page \ -*/ -#define FNAND_BLOCK_TYPE_MASK 0x03 /* Block type mask */ -#define FNAND_BLOCK_SHIFT_MASK 0x06 /* Block shift mask \ - for a Bad Block Table \ -entry byte */ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/****************************************************************************/ - -#define FNAND_BBTBLOCKSHIFT(block) \ - ((block * 2) & FNAND_BLOCK_SHIFT_MASK) - - - - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand_common_cmd.c b/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand_common_cmd.c deleted file mode 100644 index 6cd6ad9e54..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand_common_cmd.c +++ /dev/null @@ -1,731 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fnand_common_cmd.c - * Date: 2022-06-24 03:51:06 - * LastEditTime: 2022-06-24 03:51:07 - * Description: This file is for nand generic command documentation - * - * Modify History: - * Ver Who Date Changes - * ----- ------ -------- -------------------------------------- - * 1.0 huanghe 2022/05/10 first release - */ - -#include "fnand_common_cmd.h" -#include "fnand_hw.h" -#include "stdio.h" -#include "string.h" -#include "fnand_dma.h" -#include "fnand_onfi.h" -#include "fnand_timing.h" -#include "fnand_ecc.h" -#include "fcache.h" -#include "fsleep.h" -#include "fdebug.h" -#include "sdkconfig.h" - - -#define FNAND_COMMON_DEBUG_TAG "FNAND_COMMON" - - -#ifdef CONFIG_FNAND_COMMON_DEBUG_EN - #define FNAND_COMMON_DEBUG_I(format, ...) FT_DEBUG_PRINT_I(FNAND_COMMON_DEBUG_TAG, format, ##__VA_ARGS__) - #define FNAND_COMMON_DEBUG_W(format, ...) FT_DEBUG_PRINT_W(FNAND_COMMON_DEBUG_TAG, format, ##__VA_ARGS__) - #define FNAND_COMMON_DEBUG_E(format, ...) FT_DEBUG_PRINT_E(FNAND_COMMON_DEBUG_TAG, format, ##__VA_ARGS__) - #define FNAND_COMMON_DEBUG_D(format, ...) FT_DEBUG_PRINT_D(FNAND_COMMON_DEBUG_TAG, format, ##__VA_ARGS__) -#else - #define FNAND_COMMON_DEBUG_I(format, ...) - #define FNAND_COMMON_DEBUG_W(format, ...) - #define FNAND_COMMON_DEBUG_E(format, ...) - #define FNAND_COMMON_DEBUG_D(format, ...) -#endif - -#define FNAND_ADDR_CYCLE_NUM0 0 -#define FNAND_ADDR_CYCLE_NUM1 1 -#define FNAND_ADDR_CYCLE_NUM2 2 -#define FNAND_ADDR_CYCLE_NUM3 3 -#define FNAND_ADDR_CYCLE_NUM4 4 -#define FNAND_ADDR_CYCLE_NUM5 5 - -#define FNAND_COMMON_CRC_BASE 0x4F4E - -#define FNAND_CTRL_ECC_EN 1 -#define FNAND_CTRL_ECC_DIS 0 - -#define FNAND_CTRL_AUTO_AUTO_RS_EN 1 -#define FNAND_CTRL_AUTO_AUTO_RS_DIS 0 - -/* - * Special handling must be done for the WAITRDY timeout parameter as it usually - * is either tPROG (after a prog), tR (before a read), tRST (during a reset) or - * tBERS (during an erase) which all of them are u64 values that cannot be - * divided by usual kernel macros and must be handled with the special - * DIV_ROUND_UP_ULL() macro. - * - * Cast to type of dividend is needed here to guarantee that the result won't - * be an unsigned long long when the dividend is an unsigned long (or smaller), - * which is what the compiler does when it sees ternary operator with 2 - * different return types (picks the largest type to make sure there's no - * loss). - */ -#define __DIVIDE(dividend, divisor) ({ \ - (__typeof__(dividend))(sizeof(dividend) <= sizeof(unsigned long) ? \ - DIV_ROUND_UP(dividend, divisor) : \ - DIV_ROUND_UP_ULL(dividend, divisor)); \ - }) -#define PSEC_TO_NSEC(x) __DIVIDE(x, 1000) -#define PSEC_TO_MSEC(x) __DIVIDE(x, 1000000000) - -extern FError FNandSendCmd(FNand *instance_p, struct FNandDmaDescriptor *descriptor_p, FNandOperationType isr_type); -extern FError FNandTimingInterfaceUpdate(FNand *instance_p, u32 chip_addr); - -extern FError FNandDmaPack(FNandCmdFormat *cmd_format, - struct FNandDmaDescriptor *descriptor_p, - FNandDmaPackData *pack_data_p - ); - - - -enum CommandsEnumNew -{ - CMD_READ_OPTION_NEW = 0, - CMD_RANDOM_DATA_OUT, - CMD_PAGE_PROGRAM, - CMD_PAGE_PROGRAM_WITH_OTHER, - CMD_COPY_BACK_PROGRAM, - CMD_BLOCK_ERASE, - CMD_RESET, - CMD_READ_ID, - CMD_READ_DEVICE_TABLE, - CMD_READ_PAGE, - CMD_READ_STATUS, - CMD_INDEX_LENGTH_NEW, -}; - - -static FNandCmdFormat cmd_format[CMD_INDEX_LENGTH_NEW] = -{ - {NAND_CMD_READ1, NAND_CMD_READ2, FNAND_ADDR_CYCLE_NUM5, FNAND_CMDCTRL_TYPE_READ, FNAND_CTRL_ECC_DIS, FNAND_CTRL_AUTO_AUTO_RS_EN}, - {NAND_CMD_CHANGE_READ_COLUMN1, NAND_CMD_CHANGE_READ_COLUMN2, FNAND_ADDR_CYCLE_NUM2, FNAND_CMDCTRL_TYPE_READ_COL, FNAND_CTRL_ECC_EN, FNAND_CTRL_AUTO_AUTO_RS_DIS}, - {NAND_CMD_PAGE_PROG1, NAND_CMD_PAGE_PROG2, FNAND_ADDR_CYCLE_NUM5, FNAND_CMDCTRL_TYPE_PAGE_PRO, FNAND_CTRL_ECC_DIS, FNAND_CTRL_AUTO_AUTO_RS_EN}, - {NAND_CMD_PAGE_PROG1, NAND_END_CMD_NONE, FNAND_ADDR_CYCLE_NUM5, FNAND_CMDCTRL_CH_ROW_ADDR, FNAND_CTRL_ECC_DIS, FNAND_CTRL_AUTO_AUTO_RS_DIS}, - {NAND_CMD_CHANGE_WRITE_COLUMN, NAND_CMD_PAGE_PROG2, FNAND_ADDR_CYCLE_NUM2, FNAND_CMDCTRL_TYPE_PAGE_PRO, FNAND_CTRL_ECC_EN, FNAND_CTRL_AUTO_AUTO_RS_EN}, - {NAND_CMD_BLOCK_ERASE1, NAND_CMD_BLOCK_ERASE2, FNAND_ADDR_CYCLE_NUM3, FNAND_CMDCTRL_TYPE_ERASE, FNAND_CTRL_ECC_DIS, FNAND_CTRL_AUTO_AUTO_RS_EN}, - {NAND_CMD_RESET, NAND_END_CMD_NONE, FNAND_ADDR_CYCLE_NUM5, FNAND_CMDCTRL_TYPE_RESET, FNAND_CTRL_ECC_DIS, FNAND_CTRL_AUTO_AUTO_RS_EN}, - {NAND_CMD_READ_ID, NAND_END_CMD_NONE, FNAND_ADDR_CYCLE_NUM1, FNAND_CMDCTRL_TYPE_READ_ID, FNAND_CTRL_ECC_DIS, FNAND_CTRL_AUTO_AUTO_RS_DIS}, - {NAND_CMD_READ_PARAM_PAGE, NAND_END_CMD_NONE, FNAND_ADDR_CYCLE_NUM1, FNAND_CMDCTRL_READ_PARAM, FNAND_CTRL_ECC_DIS, FNAND_CTRL_AUTO_AUTO_RS_EN}, - {NAND_CMD_READ1, NAND_CMD_READ2, FNAND_ADDR_CYCLE_NUM5, FNAND_CMDCTRL_TYPE_READ_ID, FNAND_CTRL_ECC_DIS, FNAND_CTRL_AUTO_AUTO_RS_EN}, - {NAND_CMD_READ_STATUS, NAND_END_CMD_NONE, FNAND_ADDR_CYCLE_NUM5, FNAND_CMDCTRL_TYPE_READ_COL, FNAND_CTRL_ECC_DIS, FNAND_CTRL_AUTO_AUTO_RS_DIS}, -}; - - -FError FNandFlashReadId(FNand *instance_p, u8 address, u8 *id_buffer, u32 buffer_length, u32 chip_addr) -{ - FError ret; - u32 memcpy_length; - FNandDmaPackData pack_data = - { - .addr_p = &address, - .addr_length = 1, - .phy_address = (uintptr)instance_p->dma_data_buffer.data_buffer, - .phy_bytes_length = (buffer_length > FNAND_DMA_MAX_LENGTH) ? FNAND_DMA_MAX_LENGTH : buffer_length, - .chip_addr = chip_addr, - .contiune_dma = 0, - }; - - memset((struct FNandDmaDescriptor *)&instance_p->descriptor_buffer.data_buffer[0], 0, sizeof(struct FNandDmaDescriptor)); - FNandDmaPack(&cmd_format[CMD_READ_ID], (struct FNandDmaDescriptor *)&instance_p->descriptor_buffer.data_buffer[0], &pack_data); - ret = FNandSendCmd(instance_p, (struct FNandDmaDescriptor *)&instance_p->descriptor_buffer.data_buffer[0], FNAND_CMD_TYPE); - if (ret != FT_SUCCESS) - { - return FNAND_ERR_OPERATION; - } - - if (buffer_length && id_buffer) - { - memcpy_length = (buffer_length > pack_data.phy_bytes_length) ? pack_data.phy_bytes_length : buffer_length; - FCacheDCacheFlushRange((intptr)instance_p->dma_data_buffer.data_buffer, memcpy_length); - memcpy(id_buffer, instance_p->dma_data_buffer.data_buffer, memcpy_length); - } - - return FT_SUCCESS; -} - - -static FError FNandFlashReadStatus(FNand *instance_p, u32 chip_addr) -{ - FError ret; - FASSERT(instance_p != NULL); - FNandDmaPackData pack_data = - { - .addr_p = NULL, - .addr_length = 0, - .phy_address = (uintptr)instance_p->dma_data_buffer.data_buffer, - .phy_bytes_length = 4, - .chip_addr = chip_addr, - .contiune_dma = 0, - }; - - memset((struct FNandDmaDescriptor *)&instance_p->descriptor_buffer.data_buffer[0], 0, sizeof(struct FNandDmaDescriptor)); - FNandDmaPack(&cmd_format[CMD_READ_STATUS], (struct FNandDmaDescriptor *)&instance_p->descriptor_buffer.data_buffer[0], &pack_data); /* FNAND_CMDCTRL_TYPE_RESET */ - ret = FNandSendCmd(instance_p, (struct FNandDmaDescriptor *)&instance_p->descriptor_buffer.data_buffer[0], FNAND_READ_PAGE_TYPE); - if (ret != FT_SUCCESS) - { - return ret; - } - - FNAND_COMMON_DEBUG_I("Read status is 0x%x", instance_p->dma_data_buffer.data_buffer[0]); - - return (instance_p->dma_data_buffer.data_buffer[0] == 0xe0) ? FT_SUCCESS : FNAND_IS_BUSY; -} - -FError FNandFlashReset(FNand *instance_p, u32 chip_addr) -{ - FASSERT(instance_p != NULL); - FNandDmaPackData pack_data = - { - .addr_p = NULL, - .addr_length = 0, - .phy_address = (uintptr)NULL, - .phy_bytes_length = 0, - .chip_addr = chip_addr, - .contiune_dma = 0, - }; - - memset((struct FNandDmaDescriptor *)&instance_p->descriptor_buffer.data_buffer[0], 0, sizeof(struct FNandDmaDescriptor)); - FNandDmaPack(&cmd_format[CMD_RESET], (struct FNandDmaDescriptor *)&instance_p->descriptor_buffer.data_buffer[0], &pack_data); /* FNAND_CMDCTRL_TYPE_RESET */ - return FNandSendCmd(instance_p, (struct FNandDmaDescriptor *)&instance_p->descriptor_buffer.data_buffer[0], FNAND_CMD_TYPE); -} - - -FError FNandFlashEraseBlock(FNand *instance_p, u32 page_addr, u32 chip_addr) -{ - u8 addr_buf[3] = {0}; - FError ret; - u32 nand_state; - - while (FNandFlashReadStatus(instance_p, chip_addr) == FNAND_IS_BUSY) - ; /* wait i/o idle */ - /* read operation */ - - - addr_buf[0] = page_addr; - addr_buf[1] = page_addr >> 8; - addr_buf[2] = page_addr >> 16; - - FNandDmaPackData pack_data = - { - .addr_p = addr_buf, - .addr_length = 3, - .phy_address = (uintptr)NULL, - .phy_bytes_length = 0, - .chip_addr = chip_addr, - .contiune_dma = 0, - }; - - FNandDmaPack(&cmd_format[CMD_BLOCK_ERASE], (struct FNandDmaDescriptor *)&instance_p->descriptor_buffer.data_buffer[0], &pack_data); - ret = FNandSendCmd(instance_p, (struct FNandDmaDescriptor *)&instance_p->descriptor_buffer.data_buffer[0], FNAND_CMD_TYPE); - - if (ret != FT_SUCCESS) - { - return FNAND_ERR_OPERATION; - } - - nand_state = FNAND_READREG(instance_p->config.base_address, FNAND_STATE_OFFSET); - while (nand_state & FNAND_STATE_BUSY_OFFSET) /* wait busy state is over */ - { - nand_state = FNAND_READREG(instance_p->config.base_address, FNAND_STATE_OFFSET); - } - - return FT_SUCCESS; -} - -static FError FNandPageRead(FNand *instance_p, u32 page_addr, u8 *buf, u32 page_copy_offset, u32 length, u32 chip_addr) -{ - u8 addr_buf[5] = {0}; - u32 memcpy_length; - FError ret; - addr_buf[4] = (page_addr >> 16); - addr_buf[3] = (page_addr >> 8); - addr_buf[2] = (page_addr); - - FNandDmaPackData pack_data = - { - .addr_p = addr_buf, - .addr_length = 5, - .phy_address = (uintptr)instance_p->dma_data_buffer.data_buffer, - .phy_bytes_length = instance_p->nand_geometry[chip_addr].bytes_per_page, - .chip_addr = chip_addr, - .contiune_dma = 0, - }; - - FNandDmaPack(&cmd_format[CMD_READ_OPTION_NEW], (struct FNandDmaDescriptor *)&instance_p->descriptor_buffer.data_buffer[0], &pack_data); - ret = FNandSendCmd(instance_p, (struct FNandDmaDescriptor *)&instance_p->descriptor_buffer.data_buffer[0], FNAND_READ_PAGE_TYPE); - - if (ret != FT_SUCCESS) - { - return FNAND_ERR_OPERATION; - } - - if (length && buf) - { - memcpy_length = (length > (pack_data.phy_bytes_length - page_copy_offset)) ? (pack_data.phy_bytes_length - page_copy_offset) : length; - FCacheDCacheFlushRange((intptr)(instance_p->dma_data_buffer.data_buffer + page_copy_offset), memcpy_length); - memcpy(buf, instance_p->dma_data_buffer.data_buffer + page_copy_offset, memcpy_length); - } - - return FT_SUCCESS; -} - -static FError FNandPageWrite(FNand *instance_p, u32 page_addr, u8 *buf, u32 page_copy_offset, u32 length, u32 chip_addr) -{ - u8 addr_buf[5] = {0}; - FError ret; - u32 bytes_per_page = 0; - addr_buf[4] = (page_addr >> 16); - addr_buf[3] = (page_addr >> 8); - addr_buf[2] = (page_addr); - bytes_per_page = instance_p->nand_geometry[chip_addr].bytes_per_page; - FNandDmaPackData pack_data = - { - .addr_p = addr_buf, - .addr_length = 5, - .phy_address = (uintptr)instance_p->dma_data_buffer.data_buffer, - .phy_bytes_length = bytes_per_page, - .chip_addr = chip_addr, - .contiune_dma = 0, - }; - - memcpy(instance_p->dma_data_buffer.data_buffer + page_copy_offset, buf, ((bytes_per_page - page_copy_offset) > length) ? length : (bytes_per_page - page_copy_offset)); - - FNandDmaPack(&cmd_format[CMD_PAGE_PROGRAM], (struct FNandDmaDescriptor *)&instance_p->descriptor_buffer.data_buffer[0], &pack_data); - ret = FNandSendCmd(instance_p, (struct FNandDmaDescriptor *)&instance_p->descriptor_buffer.data_buffer[0], FNAND_WRITE_PAGE_TYPE); - - if (ret != FT_SUCCESS) - { - return FNAND_ERR_OPERATION; - } - while (FNandFlashReadStatus(instance_p, chip_addr) == FNAND_IS_BUSY); - return FT_SUCCESS; -} - -static FError FNandPageWriteHwEcc(FNand *instance_p, u32 page_addr, u8 *buf, u32 page_copy_offset, u32 length, u32 chip_addr) -{ - FError ret; - u32 nand_state = 0; - u8 addr_buf[5] = {0}; - u32 ecc_offset = 0; - u32 bytes_per_page = 0; - u32 spare_bytes_per_page = 0; - /* read operation */ - addr_buf[2] = page_addr; - addr_buf[3] = page_addr >> 8; - addr_buf[4] = page_addr >> 16; - - ecc_offset = instance_p->nand_geometry[chip_addr].ecc_offset; - bytes_per_page = instance_p->nand_geometry[chip_addr].bytes_per_page; - spare_bytes_per_page = instance_p->nand_geometry[chip_addr].spare_bytes_per_page; - - FNandDmaPackData pack_data = - { - .addr_p = addr_buf, - .addr_length = 5, - .phy_address = (uintptr)instance_p->dma_data_buffer.data_buffer, - .phy_bytes_length = bytes_per_page, - .chip_addr = chip_addr, - .contiune_dma = 1, - }; - - memset(instance_p->dma_data_buffer.data_buffer, 0xff, FNAND_DMA_MAX_LENGTH); - memcpy(instance_p->dma_data_buffer.data_buffer + page_copy_offset, buf, ((bytes_per_page - page_copy_offset) < length) ? (bytes_per_page - page_copy_offset) : length); - - FNandDmaPack(&cmd_format[CMD_PAGE_PROGRAM_WITH_OTHER], (struct FNandDmaDescriptor *)&instance_p->descriptor_buffer.data_buffer[0], &pack_data) ; - /* Random Data Input */ - - /* 写入存储硬件ecc 偏移位置参数 */ - memset(addr_buf, 0, sizeof(addr_buf)); - addr_buf[0] = bytes_per_page + ecc_offset; - addr_buf[1] = (bytes_per_page + ecc_offset) >> 8; - memset((instance_p->dma_data_buffer.data_buffer + bytes_per_page), 0xff, spare_bytes_per_page); - FNandDmaPackData pack_data2 = - { - .addr_p = addr_buf, - .addr_length = 2, - .phy_address = (uintptr)instance_p->dma_data_buffer.data_buffer + bytes_per_page + ecc_offset, - .phy_bytes_length = instance_p->nand_geometry[chip_addr].hw_ecc_length, - .chip_addr = chip_addr, - .contiune_dma = 0, - }; - - FNandDmaPack(&cmd_format[CMD_COPY_BACK_PROGRAM], (struct FNandDmaDescriptor *)&instance_p->descriptor_buffer.data_buffer[FNAND_DESCRIPTORS_SIZE], &pack_data2) ; - ret = FNandSendCmd(instance_p, (struct FNandDmaDescriptor *)&instance_p->descriptor_buffer.data_buffer[0], FNAND_WRITE_PAGE_TYPE); - if (ret != FT_SUCCESS) - { - return FNAND_ERR_OPERATION; - } - - nand_state = FNAND_READREG(instance_p->config.base_address, FNAND_STATE_OFFSET); - while (nand_state & FNAND_STATE_BUSY_OFFSET) /* wait busy state is over */ - { - nand_state = FNAND_READREG(instance_p->config.base_address, FNAND_STATE_OFFSET); - } - while (FNandFlashReadStatus(instance_p, chip_addr) == FNAND_IS_BUSY) - ; /* wait i/o idle */ - - return FT_SUCCESS; -} - -static FError FNandPageReadOOb(FNand *instance_p, u32 page_addr, u8 *buf, u32 page_copy_offset, u32 length, u32 chip_addr) -{ - FError ret; - u8 addr_buf[5] = {0}; - u32 bytes_per_page = 0; - u32 spare_bytes_per_page = 0; - u32 memcpy_length = 0; - bytes_per_page = instance_p->nand_geometry[chip_addr].bytes_per_page ; - spare_bytes_per_page = instance_p->nand_geometry[chip_addr].spare_bytes_per_page ; - - FNandDmaPackData pack_data = - { - .addr_p = addr_buf, - .addr_length = 5, - .phy_address = (uintptr)instance_p->dma_data_buffer.data_buffer, - .phy_bytes_length = spare_bytes_per_page, /* 读取所有的oob 数据 */ - .chip_addr = chip_addr, - .contiune_dma = 0, - }; - - addr_buf[4] = (page_addr >> 16); - addr_buf[3] = (page_addr >> 8); - addr_buf[2] = (page_addr); - addr_buf[1] = ((bytes_per_page >> 8) & 0xff); /* 从oob 位置读取 */ - addr_buf[0] = (bytes_per_page & 0xff); - - FNandDmaPack(&cmd_format[CMD_READ_OPTION_NEW], (struct FNandDmaDescriptor *)&instance_p->descriptor_buffer.data_buffer[0], &pack_data); - ret = FNandSendCmd(instance_p, (struct FNandDmaDescriptor *)&instance_p->descriptor_buffer.data_buffer[0], FNAND_READ_PAGE_TYPE); - - if (ret != FT_SUCCESS) - { - return FNAND_ERR_OPERATION; - } - - if (length && buf) - { - memcpy_length = (length > (spare_bytes_per_page - page_copy_offset)) ? (spare_bytes_per_page - page_copy_offset) : length; - FCacheDCacheFlushRange((intptr)(instance_p->dma_data_buffer.data_buffer + page_copy_offset), memcpy_length); - memcpy(buf, instance_p->dma_data_buffer.data_buffer + page_copy_offset, memcpy_length); - } - - return FT_SUCCESS; -} - -static FError FNandPageWriteOOb(FNand *instance_p, u32 page_addr, u8 *buf, u32 spare_page_offset, u32 length, u32 chip_addr) -{ - FError ret; - u8 addr_buf[5] = {0}; - u32 bytes_per_page = 0; - u32 spare_bytes_per_page = 0; - - bytes_per_page = instance_p->nand_geometry[chip_addr].bytes_per_page; - spare_bytes_per_page = instance_p->nand_geometry[chip_addr].spare_bytes_per_page ; - memset(instance_p->dma_data_buffer.data_buffer, 0xff, spare_bytes_per_page); - - FNandDmaPackData pack_data = - { - .addr_p = addr_buf, - .addr_length = 5, - .phy_address = (uintptr)instance_p->dma_data_buffer.data_buffer, - .phy_bytes_length = (spare_bytes_per_page > length) ? length : spare_bytes_per_page, - .chip_addr = chip_addr, - .contiune_dma = 0, - }; - - addr_buf[4] = (page_addr >> 16); - addr_buf[3] = (page_addr >> 8); - addr_buf[2] = (page_addr); - addr_buf[1] = ((bytes_per_page >> 8) & 0xff); - addr_buf[0] = (bytes_per_page & 0xff); - - memcpy(instance_p->dma_data_buffer.data_buffer + spare_page_offset, buf, ((spare_bytes_per_page - spare_page_offset) > length) ? length : (spare_bytes_per_page - spare_page_offset)); - - FNandDmaPack(&cmd_format[CMD_PAGE_PROGRAM], (struct FNandDmaDescriptor *)&instance_p->descriptor_buffer.data_buffer[0], &pack_data); - - ret = FNandSendCmd(instance_p, (struct FNandDmaDescriptor *)&instance_p->descriptor_buffer.data_buffer[0], FNAND_WRITE_PAGE_TYPE); - - if (ret != FT_SUCCESS) - { - return FNAND_ERR_OPERATION; - } - while (FNandFlashReadStatus(instance_p, chip_addr) == FNAND_IS_BUSY); - return FT_SUCCESS ; -} - -static FError FNandPageReadHwEcc(FNand *instance_p, u32 page_addr, u8 *buf, u32 page_copy_offset, u32 length, u32 chip_addr) -{ - FError ret; - u32 nand_state = 0; - u8 addr_buf[5] = {0}; - u32 memcpy_length = 0; - volatile u32 wait_cnt; - /* read operation */ - addr_buf[2] = page_addr; - addr_buf[3] = page_addr >> 8; - addr_buf[4] = page_addr >> 16; - - FNandDmaPackData pack_data = - { - .addr_p = addr_buf, - .addr_length = 5, - .phy_address = (uintptr)instance_p->dma_data_buffer.data_buffer, - .phy_bytes_length = instance_p->nand_geometry[chip_addr].bytes_per_page, - .chip_addr = chip_addr, - .contiune_dma = 1, - }; - - FNandDmaPack(&cmd_format[CMD_READ_OPTION_NEW], (struct FNandDmaDescriptor *)&instance_p->descriptor_buffer.data_buffer[0], &pack_data) ; - - /* Random Data Output */ - memset(addr_buf, 0, sizeof(addr_buf)); - /* 读取存储硬件ecc 偏移位置参数 */ - addr_buf[0] = instance_p->nand_geometry[chip_addr].bytes_per_page + instance_p->nand_geometry[chip_addr].ecc_offset; - addr_buf[1] = (instance_p->nand_geometry[chip_addr].bytes_per_page + instance_p->nand_geometry[chip_addr].ecc_offset) >> 8; - - FNandDmaPackData pack_data2 = - { - .addr_p = addr_buf, - .addr_length = 2, - .phy_address = (uintptr)instance_p->dma_data_buffer.data_buffer + instance_p->nand_geometry[chip_addr].bytes_per_page, - .phy_bytes_length = instance_p->nand_geometry[chip_addr].hw_ecc_length, - .chip_addr = chip_addr, - .contiune_dma = 0, - }; - - FNandDmaPack(&cmd_format[CMD_RANDOM_DATA_OUT], (struct FNandDmaDescriptor *)&instance_p->descriptor_buffer.data_buffer[16], &pack_data2) ; - ret = FNandSendCmd(instance_p, (struct FNandDmaDescriptor *)&instance_p->descriptor_buffer.data_buffer[0], FNAND_WAIT_ECC_TYPE); - if (ret != FT_SUCCESS) - { - return FNAND_ERR_OPERATION; - } - - fsleep_microsec(100); - /* 增加判断bit(16) 是否ecc 正忙 */ - nand_state = FNAND_READREG(instance_p->config.base_address, FNAND_STATE_OFFSET); - - while ((nand_state & FNAND_STATE_ECC_BUSY_OFFSET) && ((nand_state & FNAND_STATE_ECC_FINISH_OFFSET) == 0)) - { - nand_state = FNAND_READREG(instance_p->config.base_address, FNAND_STATE_OFFSET); - } - - if (nand_state & FNAND_STATE_ECC_ERROVER_OFFSET) - { - FNAND_COMMON_DEBUG_E("FNAND_STATE_ECC_ERROVER %x ,page is %x \n", 0, page_addr) ; - return FNAND_ERR_READ_ECC ; - } - else if (nand_state & FNAND_STATE_ECC_ERR_OFFSET) - { - s32 correct_num; - FNAND_COMMON_DEBUG_W("FNAND ecc correct is in \r\n"); - correct_num = FNandCorrectEcc(instance_p->config.base_address, instance_p->nand_geometry[chip_addr].ecc_step_size, - instance_p->nand_geometry[chip_addr].hw_ecc_steps, instance_p->dma_data_buffer.data_buffer, - instance_p->nand_geometry[chip_addr].bytes_per_page); - - if (correct_num < 0) - { - FNAND_COMMON_DEBUG_W("CRC ECC IS ERROR \n") ; - return FNAND_ERR_READ_ECC; - } - - FNAND_COMMON_DEBUG_W("FNAND_STATE_ECC_ERR %x ,page is %x \n", correct_num, page_addr) ; - } - - if (length && buf) - { - memcpy_length = (length > (pack_data.phy_bytes_length - page_copy_offset)) ? (pack_data.phy_bytes_length - page_copy_offset) : length; - FCacheDCacheFlushRange((intptr)(instance_p->dma_data_buffer.data_buffer + page_copy_offset), memcpy_length); - memcpy(buf, instance_p->dma_data_buffer.data_buffer + page_copy_offset, memcpy_length); - } - - return FT_SUCCESS; -} - -FError FNandFlashReadPageRaw(FNand *instance_p, FNandOpData *op_data_p) -{ - FASSERT(instance_p != NULL); - FASSERT(op_data_p != NULL); - FError ret; - ret = FNandPageRead(instance_p, op_data_p->page_addr, op_data_p->page_buf, op_data_p->page_offset, op_data_p->page_length, op_data_p->chip_addr); - - if (ret != FT_SUCCESS) - { - FNAND_COMMON_DEBUG_E("%s,FNandPageRead is error %x", __func__, ret); - return ret; - } - - if (op_data_p->obb_required) - { - ret = FNandPageReadOOb(instance_p, op_data_p->page_addr, op_data_p->oob_buf, op_data_p->oob_offset, op_data_p->oob_length, op_data_p->chip_addr); - - if (ret != FT_SUCCESS) - { - FNAND_COMMON_DEBUG_E("%s,FNandPageReadOOb is error %x", __func__, ret); - return ret; - } - } - - return FT_SUCCESS; -} - -FError FNandFlashReadPageHwEcc(FNand *instance_p, FNandOpData *op_data_p) -{ - FASSERT(instance_p != NULL); - FASSERT(op_data_p != NULL); - FError ret; - FNandConfig *config_p; - config_p = &instance_p->config; - FNandFlashReadStatus(instance_p, op_data_p->chip_addr); - - FNandEnableHwEcc(config_p->base_address); - ret = FNandPageReadHwEcc(instance_p, op_data_p->page_addr, op_data_p->page_buf, op_data_p->page_offset, op_data_p->page_length, op_data_p->chip_addr); - FNandDisableHwEcc(config_p->base_address); - - if (ret != FT_SUCCESS) - { - FNAND_COMMON_DEBUG_E("%s,FNandPageReadHwEcc is error %x", __func__, ret); - return ret; - } - - - if (op_data_p->obb_required) - { - ret = FNandPageReadOOb(instance_p, op_data_p->page_addr, op_data_p->oob_buf, op_data_p->oob_offset, op_data_p->oob_length, op_data_p->chip_addr); - if (ret != FT_SUCCESS) - { - FNAND_COMMON_DEBUG_E("%s,FNandPageReadOOb is error %x", __func__, ret); - return ret; - } - } - - return FT_SUCCESS; -} - -FError FNandFlashWritePageRaw(FNand *instance_p, FNandOpData *op_data_p) -{ - FASSERT(instance_p != NULL); - FASSERT(op_data_p != NULL); - FError ret; - if (op_data_p->obb_required) - { - ret = FNandPageWriteOOb(instance_p, op_data_p->page_addr, op_data_p->oob_buf, op_data_p->oob_offset, op_data_p->oob_length, op_data_p->chip_addr); - - if (ret != FT_SUCCESS) - { - FNAND_COMMON_DEBUG_E("%s,FNandPageWriteOOb is error %x", __func__, ret); - return ret; - } - } - - ret = FNandPageWrite(instance_p, op_data_p->page_addr, op_data_p->page_buf, op_data_p->page_offset, op_data_p->page_length, op_data_p->chip_addr); - - if (ret != FT_SUCCESS) - { - FNAND_COMMON_DEBUG_E("%s,FNandPageWrite is error %x", __func__, ret); - return ret; - } - - return FT_SUCCESS; -} - - -FError FNandFlashWritePageRawHwEcc(FNand *instance_p, FNandOpData *op_data_p) -{ - FError ret; - FNandConfig *config_p; - FASSERT(instance_p != NULL); - FASSERT(op_data_p != NULL); - - FNandFlashReadStatus(instance_p, op_data_p->chip_addr); - - config_p = &instance_p->config; - if (op_data_p->obb_required) - { - ret = FNandPageWriteOOb(instance_p, op_data_p->page_addr, op_data_p->oob_buf, op_data_p->oob_offset, op_data_p->oob_length, op_data_p->chip_addr); - - if (ret != FT_SUCCESS) - { - FNAND_COMMON_DEBUG_E("%s,FNandPageWriteOOb is error %x", __func__, ret); - return ret; - } - } - FNandEnableHwEcc(config_p->base_address); - ret = FNandPageWriteHwEcc(instance_p, op_data_p->page_addr, op_data_p->page_buf, op_data_p->page_offset, op_data_p->page_length, op_data_p->chip_addr); - FNandDisableHwEcc(config_p->base_address); - - if (ret != FT_SUCCESS) - { - FNAND_COMMON_DEBUG_E("%s,FNandPageWrite is error %x", __func__, ret); - return ret; - } - - return FT_SUCCESS; -} - - -FError FNandFlashOObRead(FNand *instance_p, FNandOpData *op_data_p) -{ - FASSERT(instance_p != NULL); - FASSERT(op_data_p != NULL); - FError ret; - FNandConfig *config_p; - config_p = &instance_p->config; - - ret = FNandPageReadOOb(instance_p, op_data_p->page_addr, op_data_p->oob_buf, op_data_p->oob_offset, op_data_p->oob_length, op_data_p->chip_addr); - if (ret != FT_SUCCESS) - { - FNAND_COMMON_DEBUG_E("%s,FNandPageReadOOb is error %x", __func__, ret); - return ret; - } - - return FT_SUCCESS; -} - - - -FError FNandFlashOObWrite(FNand *instance_p, FNandOpData *op_data_p) -{ - - FASSERT(instance_p != NULL); - FASSERT(op_data_p != NULL); - FError ret; - - ret = FNandPageWriteOOb(instance_p, op_data_p->page_addr, op_data_p->oob_buf, op_data_p->oob_offset, op_data_p->oob_length, op_data_p->chip_addr); - if (ret != FT_SUCCESS) - { - FNAND_COMMON_DEBUG_E("%s,FNandPageWriteOOb is error %x", __func__, ret); - return ret; - } -} - - -void FNandFlashFuncRegister(FNand *instance_p) -{ - FASSERT(instance_p != NULL); - instance_p->write_p = FNandFlashWritePageRaw ; - instance_p->read_p = FNandFlashReadPageRaw ; - instance_p->erase_p = FNandFlashEraseBlock ; - instance_p->write_hw_ecc_p = FNandFlashWritePageRawHwEcc ; - instance_p->read_hw_ecc_p = FNandFlashReadPageHwEcc ; - instance_p->write_oob_p = FNandFlashOObWrite; - instance_p->read_oob_p = FNandFlashOObRead; -} - diff --git a/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand_common_cmd.h b/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand_common_cmd.h deleted file mode 100644 index 0b0b95c258..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand_common_cmd.h +++ /dev/null @@ -1,83 +0,0 @@ -/* - * @Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fnand_common_cmd.h - * @Date: 2022-07-05 19:01:01 - * @LastEditTime: 2022-07-05 19:01:02 - * @Description: This file is for nand generic command documentation - * - * @Modify History: - * Ver Who Date Changes - * ----- ------ -------- -------------------------------------- - * 1.0 huanghe 2022/05/10 first release - */ - -#ifndef DRIVERS_NAND_COMMON_CMD_H -#define DRIVERS_NAND_COMMON_CMD_H - -#include "ftypes.h" -#include "fnand.h" - -#ifdef __cplusplus -extern "C" -{ -#endif -/* - * Mandatory commands - */ - -#define NAND_CMD_READ1 0x00 -#define NAND_CMD_READ2 0x30 /* READ PAGE */ - -#define NAND_CMD_CHANGE_READ_COLUMN1 0x05 /* NAND Random data Read \ - Column command (1st \ -cycle) */ -#define NAND_CMD_CHANGE_READ_COLUMN2 0xE0 /* NAND Random data Read \ - Column command (2nd \ -cycle) */ -#define NAND_CMD_BLOCK_ERASE1 0x60 /* NAND Block Erase \ -(1st cycle) */ -#define NAND_CMD_BLOCK_ERASE2 0xD0 /* NAND Block Erase \ -(2nd cycle) */ - -#define NAND_CMD_PAGE_PROG1 0x80 /* NAND Page Program \ - command (1st cycle) \ -*/ -#define NAND_CMD_PAGE_PROG2 0x10 /* NAND Page Program \ - command (2nd cycle) \ -*/ - -#define NAND_CMD_CHANGE_WRITE_COLUMN 0x85 /* NAND Change Write \ -Column command */ -#define NAND_CMD_READ_ID 0x90 /* NAND Read ID \ -command */ -#define NAND_CMD_READ_PARAM_PAGE 0xEC /* NAND Read \ - Parameter Page \ -command */ -#define NAND_CMD_RESET 0xFF /* NAND Reset \ -command */ - -#define NAND_END_CMD_NONE 0xfff /* No End command */ - -#define NAND_CMD_READ_STATUS 0x70 /* Read status */ - -FError FNandFlashReset(FNand *instance_p, u32 chip_addr) ; -FError FNandFlashReadId(FNand *instance_p, u8 address, u8 *id_buffer, u32 buffer_length, u32 chip_addr); -void FNandFlashFuncRegister(FNand *instance_p); - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand_dma.c b/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand_dma.c deleted file mode 100644 index 2395ceefdc..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand_dma.c +++ /dev/null @@ -1,157 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fnand_dma.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:56:22 - * Description:  This file is dma descriptor management API. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/05/10 first release - */ - - -#include "fnand_dma.h" -#include "fnand.h" -#include "ferror_code.h" -#include "fdebug.h" -#include -#include -#include "fcache.h" -#include "fnand_toggle.h" -#include "sdkconfig.h" - -#ifdef CONFIG_FNAND_DMA_DEBUG_EN - #define FNAND_DMA_DEBUG_TAG "FNAND_DMA" - #define FNAND_DMA_DEBUG_I(format, ...) FT_DEBUG_PRINT_I(FNAND_DMA_DEBUG_TAG, format, ##__VA_ARGS__) - #define FNAND_DMA_DEBUG_W(format, ...) FT_DEBUG_PRINT_W(FNAND_DMA_DEBUG_TAG, format, ##__VA_ARGS__) - #define FNAND_DMA_DEBUG_E(format, ...) FT_DEBUG_PRINT_E(FNAND_DMA_DEBUG_TAG, format, ##__VA_ARGS__) -#else - #define FNAND_DMA_DEBUG_I(format, ...) - #define FNAND_DMA_DEBUG_W(format, ...) - #define FNAND_DMA_DEBUG_E(format, ...) -#endif - - -void FNandDmaDump(struct FNandDmaDescriptor *descriptor_p) -{ - FNAND_DMA_DEBUG_I("Phytium NFC cmd dump: "); - FNAND_DMA_DEBUG_I("cmd0:%x, cmd1:%x, ctrl:%x, page_cnt:%d ", - descriptor_p->cmd0, descriptor_p->cmd1, descriptor_p->cmd_ctrl.ctrl, descriptor_p->page_cnt); - FNAND_DMA_DEBUG_I("mem_addr_first:%02x %02x %02x %02x %02x ", - descriptor_p->mem_addr_first[0], descriptor_p->mem_addr_first[1], descriptor_p->mem_addr_first[2], descriptor_p->mem_addr_first[3], descriptor_p->mem_addr_first[4]); - FNAND_DMA_DEBUG_I("addr:%02x %02x %02x %02x %02x ", - descriptor_p->addr[0], descriptor_p->addr[1], descriptor_p->addr[2], descriptor_p->addr[3], descriptor_p->addr[4]); - - FNAND_DMA_DEBUG_I(" csel : 0x%x ", descriptor_p->cmd_ctrl.nfc_ctrl.csel); - FNAND_DMA_DEBUG_I(" dbc : %d ", descriptor_p->cmd_ctrl.nfc_ctrl.dbc); - FNAND_DMA_DEBUG_I(" addr_cyc : %d ", descriptor_p->cmd_ctrl.nfc_ctrl.addr_cyc); - FNAND_DMA_DEBUG_I(" nc : %d ", descriptor_p->cmd_ctrl.nfc_ctrl.nc); - FNAND_DMA_DEBUG_I(" cmd_type : %d ", descriptor_p->cmd_ctrl.nfc_ctrl.cmd_type); - FNAND_DMA_DEBUG_I(" dc : %d ", descriptor_p->cmd_ctrl.nfc_ctrl.dc); - FNAND_DMA_DEBUG_I(" auto_rs : %d ", descriptor_p->cmd_ctrl.nfc_ctrl.auto_rs); - FNAND_DMA_DEBUG_I(" ecc_en : %d ", descriptor_p->cmd_ctrl.nfc_ctrl.ecc_en); - -} - -static void FNandAddrCorrect(struct FNandDmaDescriptor *descriptor_p, - u8 *addr_p, - u32 addr_length) -{ - int i, j; - if (addr_length == 0 || addr_p == NULL) - { - FNAND_DMA_DEBUG_I("The addr_p is null , Calibration is not required "); - return; - } - - if (addr_length >= FNAND_NFC_ADDR_MAX_LEN) - { - memcpy(descriptor_p->addr, addr_p, FNAND_NFC_ADDR_MAX_LEN); - descriptor_p->cmd_ctrl.nfc_ctrl.addr_cyc = FNAND_NFC_ADDR_MAX_LEN; - return; - } - - descriptor_p->cmd_ctrl.nfc_ctrl.addr_cyc = 0; - for (i = addr_length - 1, j = FNAND_NFC_ADDR_MAX_LEN - 1; i >= 0; i--, j--) - { - descriptor_p->addr[j] = addr_p[i]; /* data shift to high array */ - descriptor_p->addr[i] = 0; - descriptor_p->cmd_ctrl.nfc_ctrl.addr_cyc++; - } -} - -FError FNandDmaPack(FNandCmdFormat *cmd_format, - struct FNandDmaDescriptor *descriptor_p, - FNandDmaPackData *pack_data_p - ) -{ - u32 i; - FASSERT(cmd_format != NULL); - FASSERT(descriptor_p != NULL); - descriptor_p->cmd_ctrl.ctrl = 0; - - /* cmd */ - if (cmd_format->end_cmd == TOGGLE_END_CMD_NONE) /* Only one cmd ,need to correct */ - { - descriptor_p->cmd1 = cmd_format->start_cmd; - descriptor_p->cmd0 = 0; - } - else - { - descriptor_p->cmd0 = cmd_format->start_cmd; - descriptor_p->cmd1 = cmd_format->end_cmd; - descriptor_p->cmd_ctrl.nfc_ctrl.dbc = 1; - } - - /* addr */ - FNandAddrCorrect(descriptor_p, pack_data_p->addr_p, pack_data_p->addr_length); - descriptor_p->cmd_ctrl.nfc_ctrl.cmd_type = cmd_format->cmd_type; /* cmd type */ - FNAND_DMA_DEBUG_I("cmd_type is %x", descriptor_p->cmd_ctrl.nfc_ctrl.cmd_type); - if (pack_data_p->contiune_dma) - { - descriptor_p->cmd_ctrl.nfc_ctrl.nc = 1; - } - - descriptor_p->cmd_ctrl.nfc_ctrl.csel = (0xf ^ (1 << pack_data_p->chip_addr)); - - if (pack_data_p->phy_address && (pack_data_p->phy_bytes_length > 0)) - { - descriptor_p->cmd_ctrl.nfc_ctrl.dc = 1; - for (i = 0; i < FNAND_NFC_ADDR_MAX_LEN; i++) - { - descriptor_p->mem_addr_first[i] = pack_data_p->phy_address >> (8 * i) & 0xff; - } - descriptor_p->page_cnt = pack_data_p->phy_bytes_length; - } - - if (cmd_format->auto_rs) - { - descriptor_p->cmd_ctrl.nfc_ctrl.auto_rs = 1; - } - - if (cmd_format->ecc_en) - { - descriptor_p->cmd_ctrl.nfc_ctrl.ecc_en = 1; - } - - /* invalid descriptor and buffer */ - FCacheDCacheInvalidateRange((intptr)descriptor_p, sizeof(struct FNandDmaDescriptor)); - FCacheDCacheInvalidateRange((intptr)pack_data_p->addr_p, pack_data_p->addr_length); - - FNandDmaDump(descriptor_p); - - return FT_SUCCESS; -} diff --git a/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand_dma.h b/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand_dma.h deleted file mode 100644 index 65a75826cb..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand_dma.h +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fnand_dma.h - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:56:27 - * Description:  This file is dma descriptor management API. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/05/10 first release - */ - -#ifndef FNAND_DMA_H -#define FNAND_DMA_H - -#include "ftypes.h" - - -#ifdef __cplusplus -extern "C" -{ -#endif - -#define FNAND_CMDCTRL_TYPE_RESET 0x00 /* reset */ -#define FNAND_CMDCTRL_TYPE_SET_FTR 0x01 /* Set features */ -#define FNAND_CMDCTRL_TYPE_GET_FTR 0x02 /* Get features */ -#define FNAND_CMDCTRL_TYPE_READ_ID 0x03 /* Read ID */ -#define FNAND_CMDCTRL_TYPE_READ_COL 0x03 /* Read Column */ -#define FNAND_CMDCTRL_TYPE_PAGE_PRO 0x04 /* Page program */ -#define FNAND_CMDCTRL_TYPE_ERASE 0x05 /* Block Erase */ -#define FNAND_CMDCTRL_TYPE_READ 0x06 /* Read */ -#define FNAND_CMDCTRL_TYPE_TOGGLE 0x07 /* Toggle Two_plane */ - -#define FNAND_CMDCTRL_READ_PARAM 0x02 -#define FNAND_CMDCTRL_READ_STATUS 0x03 - -#define FNAND_CMDCTRL_CH_READ_COL 0x03 -#define FNAND_CMDCTRL_CH_ROW_ADDR 0x01 -#define FNAND_CMDCTRL_CH_WR_COL 0x01 - -#define FNAND_NFC_ADDR_MAX_LEN 0x5 - -#define FNAND_DESCRIPTORS_SIZE 16 - -struct CmdCtrl -{ - u16 csel : 4; /* 每一位表示选择NAND FLASH 设备 */ - u16 dbc : 1; /* 表示是否有2级命令,1表示有,只有此位为1时,描述符表的CMD1才有效 */ - u16 addr_cyc : 3; /* 表示指令有几个周期,‘b000’:表示没有周期 ‘b001’:表示1一个地址周期,一次类推 */ - u16 nc : 1; /* 表示是否有连续的下一个指令,一般多页操作需要连续发送多个指令 */ - u16 cmd_type : 4; /* 表示命令类型 */ - u16 dc : 1; /* 表示命令发送是否包含有数据周期,有数据此位为1 */ - u16 auto_rs : 1; /* 表示命令发送完成后是否检测闪存状态 */ - u16 ecc_en : 1; /* ECC 数据发送和读取使能位,位1 表示该命令仅发送或者读取ECC数据,当读命令该位使能位1后,控制器会对上一次数据进行ECC 校验,并返回结果 */ -}; - -struct FNandDmaDescriptor -{ - u8 cmd0; /* NAND FLASH 第一个命令编码 */ - u8 cmd1; /* NAND FLASH 第二个命令编码 */ - union - { - u16 ctrl; - struct CmdCtrl nfc_ctrl; - } cmd_ctrl; /* 16位命令字 */ - u8 addr[FNAND_NFC_ADDR_MAX_LEN]; - u16 page_cnt; - u8 mem_addr_first[FNAND_NFC_ADDR_MAX_LEN]; - -} __attribute__((packed)) __attribute__((aligned(128))); - - - -typedef struct -{ - u8 *addr_p; /* Address */ - u32 addr_length; - uintptr phy_address; - u32 phy_bytes_length; - u32 chip_addr; - u8 contiune_dma; /* */ -} FNandDmaPackData; - - -/* DMA format */ -typedef struct -{ - s32 start_cmd; /* Start command */ - s32 end_cmd; /* End command */ - u8 addr_cycles; /* Number of address cycles */ - u8 cmd_type; /* Presentation command type ,followed by FNAND_CMDCTRL_XXXX */ - u8 ecc_en; /* Hardware ecc open */ - u8 auto_rs; /* 表示命令发送完成后是否检测闪存状态 */ -} FNandCmdFormat; - - -#ifdef __cplusplus -} -#endif - -#endif // ! diff --git a/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand_ecc.c b/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand_ecc.c deleted file mode 100644 index e547eed19d..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand_ecc.c +++ /dev/null @@ -1,298 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fnand_ecc.c - * Date: 2022-05-12 14:17:42 - * LastEditTime: 2022-05-12 15:56:27 - * Description:  This file is for ecc validation related api - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/05/10 first release - */ - - -#include "fnand_ecc.h" -#include "fnand.h" -#include "fnand_hw.h" -#include "fdebug.h" -#define FNAND_ECC_DEBUG_TAG "FNAND_ECC" -#define FNAND_ECC_DEBUG_I(format, ...) FT_DEBUG_PRINT_I(FNAND_ECC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FNAND_ECC_DEBUG_W(format, ...) FT_DEBUG_PRINT_W(FNAND_ECC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FNAND_ECC_DEBUG_E(format, ...) FT_DEBUG_PRINT_E(FNAND_ECC_DEBUG_TAG, format, ##__VA_ARGS__) - - -/** - * @name: FNandGetEccTotalLength - * @msg: 根据page size 与 ecc_strength(纠错个数)确定硬件ecc 产生 - * @param {u32} bytes_per_page - * @param {u32} ecc_strength - * @return {*} - * @note: - */ -u32 FNandGetEccTotalLength(u32 bytes_per_page, u32 ecc_strength) -{ - int ecc_total = 0; - switch (bytes_per_page) - { - case 0x200: - if (ecc_strength == 8) - { - ecc_total = 0x0D; - } - else if (ecc_strength == 4) - { - ecc_total = 7; - } - else if (ecc_strength == 2) - { - ecc_total = 4; - } - else - { - ecc_total = 0; - } - break; - case 0x800: - if (ecc_strength == 8) - { - ecc_total = 0x34; - } - else if (ecc_strength == 4) - { - ecc_total = 0x1a; - } - else if (ecc_strength == 2) - { - ecc_total = 0xd; - } - else - { - ecc_total = 0; - } - break; - case 0x1000: - if (ecc_strength == 8) - { - ecc_total = 0x68; - } - else if (ecc_strength == 4) - { - ecc_total = 0x34; - } - else if (ecc_strength == 2) - { - ecc_total = 0x1a; - } - else - { - ecc_total = 0; - } - break; - case 0x2000: - if (ecc_strength == 8) - { - ecc_total = 0xD0; - } - else if (ecc_strength == 4) - { - ecc_total = 0x68; - } - else if (ecc_strength == 2) - { - ecc_total = 0x34; - } - else - { - ecc_total = 0; - } - break; - case 0x4000: - if (ecc_strength == 8) - { - ecc_total = 0x1A0; - } - if (ecc_strength == 4) - { - ecc_total = 0xD0; - } - else if (ecc_strength == 2) - { - ecc_total = 0x68; - } - else - { - ecc_total = 0; - } - break; - default: - ecc_total = 0; - break; - } - - FNAND_ECC_DEBUG_I("[%s %d]writesize: 0x%x, ecc strength: %d, ecc_total: 0x%x\n", __func__, __LINE__, bytes_per_page, ecc_strength, ecc_total); - return ecc_total; -} - - -/** - * @name: FNandCorrectEcc - * @msg: - * @note: - * @return {*} - * @param {uintptr_t} base_address - * @param {u32} ecc_step_size 单次ecc 使用的步长大小 - * @param {u32} hw_ecc_steps 一页操作需要进行的ecc 次数 - * @param {u8*} buf page 页 对应的指针 - * @param {u32} length - */ -// s32 FNandCorrectEcc(uintptr_t base_address,u32 ecc_step_size,u32 hw_ecc_steps,u8* buf ,u32 length) -// { -// u32 i, j; -// u32 value, tmp; -// int stat = 0; -// if(!buf) -// { -// FNAND_ECC_DEBUG_E("page buffer is null"); -// return -1; -// } - -// /* i */ -// for (i = 0; i < hw_ecc_steps; i++) -// { -// for (j = 0; j < 2; j++) { -// value = FNAND_READREG(base_address, 0xB8 + 4 * (2 * i + j)); -// FNAND_ECC_DEBUG_W("index:%x i is %d ,j is %d ", -// 0xB8 + 4 * (2 * i + j),i,j); -// if (value) -// { -// FNAND_ECC_DEBUG_W("offset:%x value:0x%08x\n", -// 0xB8 + 4 * (2 * i + j), value); -// //phytium_nfc_data_dump2(nfc, nfc->dma_buf + (ecc_step_size * i + tmp/8)/512, 512); -// } - -// tmp = value & 0xFFFF; -// if (tmp && (tmp <= 4096)) -// { -// tmp -= 1; -// FNAND_ECC_DEBUG_W( "ECC_CORRECT %x %02x\n", -// ecc_step_size * i + tmp / 8, -// buf[ecc_step_size * i + tmp / 8]); - -// buf[ecc_step_size*i + tmp/8] ^= (0x01 << tmp%8); -// stat++; - -// FNAND_ECC_DEBUG_W( "ECC_CORRECT xor %x %02x\n", -// 0x01 << tmp % 8, -// buf[ecc_step_size * i + tmp / 8]); -// } -// else -// { -// FNAND_ECC_DEBUG_E("ECC_CORRECT offset > 4096!\n"); -// } - -// tmp = (value >> 16) & 0xFFFF; -// if (tmp && (tmp <= 4096) ) -// { -// tmp -= 1; -// FNAND_ECC_DEBUG_W( "ECC_CORRECT %x %02x\n", -// ecc_step_size * i + tmp / 8, -// buf[ecc_step_size * i + tmp / 8]); - -// buf[ecc_step_size*i + tmp/8] ^= (0x01 << tmp%8); -// stat++; - -// FNAND_ECC_DEBUG_W( "ECC_CORRECT xor %x %02x\n", -// ecc_step_size * i + tmp / 8, -// buf[ecc_step_size * i + tmp / 8]); -// } -// else -// { -// FNAND_ECC_DEBUG_E("ECC_CORRECT offset > 4096!\n"); -// } -// } -// } - -// return stat; - -// } - -// 校验offset 0xb8 + i * 0x10 -// 校验强度为 2 j = 1 -// 校验强度为 4 j = 2 -// 校验强度为 8 j = 4 - - - - -s32 FNandCorrectEcc(uintptr_t base_address, u32 ecc_step_size, u32 hw_ecc_steps, u8 *buf, u32 length) -{ - u32 i, j; - u32 value, tmp; - int stat = 0; - if (!buf) - { - FNAND_ECC_DEBUG_E("Page buffer is null"); - return -1; - } - - /* i */ - for (i = 0; i < hw_ecc_steps; i++) - { - for (j = 0; j < 4; j++) - { - value = FNAND_READREG(base_address, 0xB8 + 0x10 * i + 4 * j); - - tmp = value & 0xFFFF; - if (tmp && (tmp <= 4096)) - { - tmp -= 1; - FNAND_ECC_DEBUG_W("ECC_CORRECT %x %02x\n", - ecc_step_size * i + tmp / 8, - buf[ecc_step_size * i + tmp / 8]); - - buf[ecc_step_size * i + tmp / 8] ^= (0x01 << tmp % 8); - stat++; - - FNAND_ECC_DEBUG_W("ECC_CORRECT xor %x %02x\n", - 0x01 << tmp % 8, - buf[ecc_step_size * i + tmp / 8]); - } - - - tmp = (value >> 16) & 0xFFFF; - if (tmp && (tmp <= 4096)) - { - tmp -= 1; - FNAND_ECC_DEBUG_W("ECC_CORRECT %x %02x\n", - ecc_step_size * i + tmp / 8, - buf[ecc_step_size * i + tmp / 8]); - - buf[ecc_step_size * i + tmp / 8] ^= (0x01 << tmp % 8); - stat++; - - FNAND_ECC_DEBUG_W("ECC_CORRECT xor %x %02x\n", - ecc_step_size * i + tmp / 8, - buf[ecc_step_size * i + tmp / 8]); - } - - } - } - - return stat; - -} - - - diff --git a/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand_ecc.h b/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand_ecc.h deleted file mode 100644 index 9c98ae7502..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand_ecc.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fnand_ecc.h - * Date: 2022-05-12 11:17:42 - * LastEditTime: 2022-05-12 13:56:27 - * Description:  This file is for ecc validation related api - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/05/10 first release - */ - -#ifndef FNAND_ECC_H -#define FNAND_ECC_H - -#include "ftypes.h" -#include "fnand_hw.h" -#include "stdio.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -static inline void FNandEnableHwEcc(uintptr_t base_address) -{ - FNAND_SETBIT(base_address, FNAND_CTRL0_OFFSET, FNAND_CTRL0_ECC_EN_MASK); - -} - - -static inline void FNandDisableHwEcc(uintptr_t base_address) -{ - FNAND_CLEARBIT(base_address, FNAND_CTRL0_OFFSET, FNAND_CTRL0_ECC_EN_MASK); -} - -u32 FNandGetEccTotalLength(u32 bytes_per_page, u32 ecc_strength); -s32 FNandCorrectEcc(uintptr_t base_address, u32 ecc_step_size, u32 hw_ecc_steps, u8 *buf, u32 length); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand_g.c b/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand_g.c deleted file mode 100644 index 294c63cd38..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand_g.c +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fnand_g.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:56:31 - * Description:  This file is for configuration table for devices - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/05/10 first release - */ - -#include "fnand.h" -#include "fnand_hw.h" -#include "fparameters.h" - - -FNandConfig FNandConfigTable[FNAND_NUM] = -{ - { - .instance_id = FNAND_INSTANCE0, /* Id of device*/ - .irq_num = FNAND_IRQ_NUM, /* Irq number */ - .base_address = FNAND_BASE_ADDR, - .ecc_strength = 8, /* 每次ecc 步骤纠正的位数 */ - .ecc_step_size = 512 /* 进行读写操作时,单次ecc 的步骤的跨度 */ - }, -}; - - diff --git a/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand_hw.c b/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand_hw.c deleted file mode 100644 index 9b6cafc8a2..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand_hw.c +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fnand_hw.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:56:36 - * Description:  This file contains macros that can be used to access the device. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/05/10 first release - */ - -#include "fnand_hw.h" -#include "fnand.h" - - - -void FNandEnable(uintptr_t base_address) -{ - FNAND_SETBIT(base_address, FNAND_CTRL0_OFFSET, FNAND_CTRL0_EN_MASK); /* 使能控制器 */ -} - - -void FNandHwReset(uintptr_t base_address) -{ - FNAND_WRITEREG(base_address, FNAND_INTRMASK_OFFSET, FNAND_INTRMASK_ALL_INT_MASK); /* 屏蔽所有中断位 */ - FNAND_WRITEREG(base_address, FNAND_STATE_OFFSET, FNAND_STATE_ALL_BIT); /* 清空所有状态位 */ - FNAND_WRITEREG(base_address, FNAND_ERROR_CLEAR_OFFSET, FNAND_ERROR_ALL_CLEAR); /* 清除所有错误位 */ - FNAND_WRITEREG(base_address, FNAND_FIFO_FREE_OFFSET, FNAND_FIFO_FREE_MASK); /* 清空fifo */ - // FNAND_CLEARBIT(base_address,FNAND_CTRL0_OFFSET,FNAND_CTRL0_SPARE_SIZE_EN_MASK|FNAND_CTRL0_ECC_EN_MASK ); /* 关闭ECC 位、并且关闭spare size 有效位 */ -} - - -void FNandHwInit(uintptr_t base_address, FNandInterMode inter_mode) -{ - // FNAND_WRITEREG(base_address, FNAND_CTRL1_OFFSET, FNAND_CTRL1_SAMPL_PHASE_MAKE(1UL)); /* 读取数据时的采样速度 */ - FNAND_SETBIT(base_address, FNAND_CTRL1_OFFSET, FNAND_CTRL1_SAMPL_PHASE_MAKE(5UL)); - FNAND_CLEARBIT(base_address, FNAND_CTRL1_OFFSET, FNAND_CTRL1_ECC_DATA_FIRST_EN_MASK); - - // FNAND_SETBIT(base_address, FNAND_CTRL1_OFFSET, FNAND_CTRL1_ECC_DATA_FIRST_EN_MASK); /* 开启先读取ECC 数据,然后读入对应数据 */ - FNAND_WRITEREG(base_address, FNAND_INTERVAL_OFFSET, FNAND_INTERVAL_TIME_MAKE(1UL)); /* 命令 、地址、数据之间的时间间隔 */ - FNAND_WRITEREG(base_address, FNAND_FIFO_LEVEL0_FULL_OFFSET, FNAND_FIFO_LEVEL0_FULL_THRESHOLD_MASK & 4); /* 满阈值配置 1/2 full, default 0 */ - FNAND_WRITEREG(base_address, FNAND_FIFO_LEVEL1_EMPTY_OFFSET, FNAND_FIFO_LEVEL1_EMPTY_THRESHOLD_MASK & 4); /* 空阈值配置 1/2 empty, default 0 */ - FNAND_WRITEREG(base_address, FNAND_FIFO_FREE_OFFSET, FNAND_FIFO_FREE_MASK); /* 清空fifo 操作 */ - FNAND_WRITEREG(base_address, FNAND_ERROR_CLEAR_OFFSET, FNAND_ERROR_CLEAR_DSP_ERR_CLR_MASK); /* 清除所有错误 */ - FNAND_WRITEREG(base_address, FNAND_CTRL0_OFFSET, FNAND_CTRL0_ECC_CORRECT_MAKE(1UL) | FNAND_CTRL0_INTER_MODE((unsigned long)(inter_mode))); /* 纠错为2位 ,使用配置的模式 */ -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand_hw.h b/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand_hw.h deleted file mode 100644 index d49df564dc..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand_hw.h +++ /dev/null @@ -1,324 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fnand_hw.h - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:56:40 - * Description:  This file contains macros that can be used to access the device. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/05/10 first release - */ - - -#ifndef FNAND_HW_H -#define FNAND_HW_H - - -#include "fkernel.h" -#include "ftypes.h" -#include "fio.h" -#include "fkernel.h" - - -#ifdef __cplusplus -extern "C" -{ -#endif - - -#define FNAND_CTRL0_OFFSET 0x00000000U -#define FNAND_CTRL1_OFFSET 0x00000004U -#define FNAND_MADDR0_OFFSET 0x00000008U -#define FNAND_MADDR1_OFFSET 0x0000000CU -/* ASY */ -#define FNAND_ASY_TIMING0_OFFSET 0x00000010U -#define FNAND_ASY_TIMING1_OFFSET 0x00000014U -#define FNAND_ASY_TIMING2_OFFSET 0x00000018U -#define FNAND_ASY_TIMING3_OFFSET 0x0000001CU -#define FNAND_ASY_TIMING4_OFFSET 0x00000020U -#define FNAND_ASY_TIMING5_OFFSET 0x00000024U -/* SYN */ -#define FNAND_SYN_TIMING6_OFFSET 0x00000028U -#define FNAND_SYN_TIMING7_OFFSET 0x0000002CU -#define FNAND_SYN_TIMING8_OFFSET 0x00000030U -#define FNAND_SYN_TIMING9_OFFSET 0x00000034U -#define FNAND_SYN_TIMING10_OFFSET 0x00000038U -#define FNAND_SYN_TIMING11_OFFSET 0x0000003CU -#define FNAND_SYN_TIMING12_OFFSET 0x00000040U -/* TOG */ -#define FNAND_TOG_TIMING13_OFFSET 0x00000044U -#define FNAND_TOG_TIMING14_OFFSET 0x00000048U -#define FNAND_TOG_TIMING15_OFFSET 0x0000004CU -#define FNAND_TOG_TIMING16_OFFSET 0x00000050U -#define FNAND_TOG_TIMING17_OFFSET 0x00000054U -#define FNAND_TOG_TIMING18_OFFSET 0x00000058U - -#define FNAND_FIFORSTA_OFFSET 0x0000005CU -#define FNAND_INTERVAL_OFFSET 0x00000060U -#define FNAND_CMDINTERVAL_OFFSET 0x00000064U -#define FNAND_FIFO_TIMEOUT_OFFSET 0x00000068U -#define FNAND_FIFO_LEVEL0_FULL_OFFSET 0x0000006CU -#define FNAND_FIFO_LEVEL1_EMPTY_OFFSET 0x00000070U -#define FNAND_WP_OFFSET 0x00000074U -#define FNAND_FIFO_FREE_OFFSET 0x00000078U -#define FNAND_STATE_OFFSET 0x0000007CU -#define FNAND_INTRMASK_OFFSET 0x00000080U -#define FNAND_INTR_OFFSET 0x00000084U -#define FNAND_ERROR_CLEAR_OFFSET 0x0000008CU -#define FNAND_ERROR_LOCATION_OFFSET 0x000000B8U - -/* FNAND_CTRL0_OFFSET */ -#define FNAND_CTRL0_EN_MASK BIT(0) -#define FNAND_CTRL0_WIDTH_MASK BIT(1) /* DQ width, only for ONFI async mode. 0: 8bits, 1: 16bits*/ -#define FNAND_CTRL0_INTER_MODE(x) (min((x), (0x3UL)) << 2) /* Nand Flash interface mode. 00: ONFI Async; 01: ONFI Sync; 10: Toggle Async*/ -#define FNAND_CTRL0_ECC_EN_MASK BIT(4) /* Nand Flash hardware ECC enable */ -#define FNAND_CTRL0_ECC_CORRECT_MAKE(x) (min((x), (0x7UL)) << 5) /* Nand Flash ECC strength. 3'h2: 2bits; 3'h4: 4bits */ -#define FNAND_CTRL0_SPARE_SIZE_EN_MASK BIT(8) /* Data with spare */ -#define FNAND_CTRL0_SPARE_SIZE_MASK GENMASK(31, 9) /* Spare size */ - -/* FNAND_CTRL1_OFFSET */ -// #define FNAND_CTRL1_SAMPL_PHASE_MASK GENMASK(15,0) /* when onfi synchronization or toggle mode, the cycle of receive data sampling phase */ -#define FNAND_CTRL1_SAMPL_PHASE_MAKE(x) (min((x), GENMASK(15, 0))) /* when onfi synchronization or toggle mode, the cycle of receive data sampling phase */ -#define FNAND_CTRL1_ECC_DATA_FIRST_EN_MASK BIT(16) /* ECC data is read first and then the corresponding data is read */ -#define FNAND_CTRL1_RB_SHARE_EN_MASK BIT(17) /* The R/B signal sharing function of four devices is enabled. Write 1 is enabled */ -#define FNAND_CTRL1_ECC_BYPASS_MASK BIT(18) /* When the received ECC encoded address data is 13'hff, the ECC verification function is bypass. 1 indicates that the function is enabled */ - -/* FNAND_MADDR0_OFFSET */ -#define FNAND_MADDR0_DT_LOW_ADDR_MASK GENMASK(31, 0) /* The lower 32 bits of the descriptor table header address in memory storage */ - -/* FNAND_MADDR1_OFFSET */ -#define FNAND_MADDR1_DT_HIGH_8BITADDR_MASK GENMASK(7, 0) /* The high 8 bits of the first address of the descriptor table stored in memory */ -#define FNAND_MADDR1_DMA_EN_MASK BIT(8) /* DMA transfer enable bit. This bit is 1 for the controller to start DMA transfers */ -#define FNAND_MADDR1_DMA_READ_LENGTH_MASK GENMASK(23, 16) /* Sets the length to which dma reads data */ -#define FNAND_MADDR1_DMA_WRITE_LENGTH_MASK GENMASK(31, 24) /* Sets the length to which dma writes data */ - -/* FNAND_ASY_TIMING0_OFFSET */ -#define FNAND_ASY_TIMING0_TCLS_TWP_MASK GENMASK(31, 16) /* tCL-tWP */ -#define FNAND_ASY_TIMING0_TCLS_TCS_MASK GENMASK(15, 0) /* tCS-tCLS */ - -/* FNAND_ASY_TIMING1_OFFSET */ -#define FNAND_ASY_TIMING1_TWH_MASK GENMASK(31, 16) /* tWH */ -#define FNAND_ASY_TIMING1_TWP_MASK GENMASK(15, 0) /* tWP */ - -/* FNAND_ASY_TIMING2_OFFSET */ -#define FNAND_ASY_TIMING2_TCLH_TWH_MASK GENMASK(31, 16) /* tCLH-tWH */ -#define FNAND_ASY_TIMING2_TCH_TCLH_MASK GENMASK(15, 0) /* tCH-tCLH */ - -/* FNAND_ASY_TIMING3_OFFSET */ -#define FNAND_ASY_TIMING3_TCH_TWH_MASK GENMASK(31, 16) /* tCH-tWH */ -#define FNAND_ASY_TIMING3_TDQ_EN_MASK GENMASK(15, 0) - -/* FNAND_ASY_TIMING4_OFFSET */ -#define FNAND_ASY_TIMING4_TREH_MASK GENMASK(31, 16) /* TREH */ -#define FNAND_ASY_TIMING4_TWHR_MASK GENMASK(15, 0) /* TWHR */ - -/* FNAND_ASY_TIMING5_OFFSET */ -#define FNAND_ASY_TIMING5_TADL_MASK GENMASK(31, 16) -#define FNAND_ASY_TIMING5_TRC_MASK GENMASK(15, 0) - -/* FNAND_SYN_TIMING6_OFFSET */ -#define FNAND_SYN_TIMING6_TCALS_TCH_MASK GENMASK(31, 16) -#define FNAND_SYN_TIMING6_TRC_MASK GENMASK(15, 0) - -/* FNAND_SYN_TIMING7_OFFSET */ -#define FNAND_SYN_TIMING7_TDQ_EN_MASK GENMASK(31, 16) -#define FNAND_SYN_TIMING7_TCK_MASK GENMASK(15, 0) - -/* FNAND_SYN_TIMING8_OFFSET */ -#define FNAND_SYN_TIMING8_TCK_MASK GENMASK(31, 16) -#define FNAND_SYN_TIMING8_TCAD_TCK_MASK GENMASK(15, 0) - -/* FNAND_SYN_TIMING9_OFFSET */ -#define FNAND_SYN_TIMING9_TCCS_MASK GENMASK(31, 16) -#define FNAND_SYN_TIMING9_TWHR_MASK GENMASK(15, 0) - -/* FNAND_SYN_TIMING10_OFFSET */ -#define FNAND_SYN_TIMING10_TCK_MASK GENMASK(31, 16) -#define FNAND_SYN_TIMING10_MTCK_MASK GENMASK(15, 0) - -/* FNAND_SYN_TIMING11_OFFSET */ -#define FNAND_SYN_TIMING11_TCK_TCALS_MASK GENMASK(15, 0) - -/* FNAND_SYN_TIMING12_OFFSET */ -#define FNAND_SYN_TIMING12_TCKWR_MASK GENMASK(31, 16) -#define FNAND_SYN_TIMING12_TWRCK_MASK GENMASK(15, 0) - -/* FNAND_TOG_TIMING13_OFFSET */ -#define FNAND_TOG_TIMING13_TWRPST_MASK GENMASK(31, 16) -#define FNAND_TOG_TIMING13_TWPRE_MASK GENMASK(15, 0) - -/* FNAND_TOG_TIMING14_OFFSET */ -#define FNAND_TOG_TIMING14_TCLS_TWP_MASK GENMASK(31, 16) -#define FNAND_TOG_TIMING14_TCS_TCLS_MASK GENMASK(15, 0) - -/* FNAND_TOG_TIMING15_OFFSET */ -#define FNAND_TOG_TIMING15_TWHR_MASK GENMASK(31, 16) -#define FNAND_TOG_TIMING15_TADL_MASK GENMASK(15, 0) - -/* FNAND_TOG_TIMING16_OFFSET */ -#define FNAND_TOG_TIMING16_TCLH_TWH_MASK GENMASK(31, 16) -#define FNAND_TOG_TIMING16_TCH_TCLH_MASK GENMASK(15, 0) - -/* FNAND_TOG_TIMING17_OFFSET */ -#define FNAND_TOG_TIMING17_TRPST_MASK GENMASK(31, 16) -#define FNAND_TOG_TIMING17_TRPRE_MASK GENMASK(15, 0) - -/* FNAND_TOG_TIMING18_OFFSET */ -#define FNAND_TOG_TIMING18_TRPSTH_MASK GENMASK(31, 16) -#define FNAND_TOG_TIMING18_DSC_MASK GENMASK(15, 0) - -/* FNAND_FIFORSTA_OFFSET */ -#define FNAND_FIFORSTA_FIFO_FULL_MASK BIT(11) -#define FNAND_FIFORSTA_FIFO_EMPTY_MASK BIT(10) -#define FNAND_FIFORSTA_FIFO_COUNT_MASK GENMASK(9, 0) - -/* FNAND_INTERVAL_OFFSET */ -// #define FNAND_INTERVAL_TIME_MASK GENMASK(15,0) /* The interval between commands, addresses, and data. The timeout increases by 2ns for every 1 increase in the write value */ -#define FNAND_INTERVAL_TIME_MAKE(x) (min((x), (0xFFUL))) - -/* FNAND_CMDINTERVAL_OFFSET */ -#define FNAND_CMDINTERVAL_MASK GENMASK(31, 0) /* The interval between requests. The timeout increases by 2ns for every 1 increase in the write value */ - -/* FNAND_FIFO_TIMEOUT_OFFSET */ -#define FNAND_FIFO_TIMEOUT_MASK GENMASK(31, 0) /* FIFO timeout counter, the timeout time increases by 2ns for each increment of the value written */ - -/* FNAND_FIFO_LEVEL0_FULL_OFFSET */ -#define FNAND_FIFO_LEVEL0_FULL_THRESHOLD_MASK GENMASK(3, 0) - -/* FNAND_FIFO_LEVEL1_EMPTY_OFFSET */ -#define FNAND_FIFO_LEVEL1_EMPTY_THRESHOLD_MASK GENMASK(3, 0) - -/* FNAND_WP_OFFSET */ -#define FNAND_WP_EN_MASK BIT(0) - -/* FNAND_FIFO_FREE_OFFSET */ -#define FNAND_FIFO_FREE_MASK BIT(0) - -/* FNAND_STATE_OFFSET */ -#define FNAND_STATE_BUSY_OFFSET BIT(0) /* nandflash控制器忙 */ -#define FNAND_STATE_DMA_BUSY_OFFSET BIT(1) /* dma控制器忙 */ -#define FNAND_STATE_DMA_PGFINISH_OFFSET BIT(2) /* dma数据操作完成 */ -#define FNAND_STATE_DMA_FINISH_OFFSET BIT(3) /* dma完成 */ -#define FNAND_STATE_FIFO_EMP_OFFSET BIT(4) -#define FNAND_STATE_FIFO_FULL_OFFSET BIT(5) -#define FNAND_STATE_FIFO_TIMEOUT_OFFSET BIT(6) -#define FNAND_STATE_CS_OFFSET GENMASK(10, 7) -#define FNAND_STATE_CMD_PGFINISH_OFFSET BIT(11) /* nand接口命令操作完成 */ -#define FNAND_STATE_PG_PGFINISH_OFFSET BIT(12) /* nand接口数据操作完成 */ -#define FNAND_STATE_RE_OFFSET BIT(13) /* re_n门控状态 */ -#define FNAND_STATE_DQS_OFFSET BIT(14) /* dqs门控状态 */ -#define FNAND_STATE_RB_OFFSET BIT(15) /* RB_N接口的状态 */ -#define FNAND_STATE_ECC_BUSY_OFFSET BIT(16) -#define FNAND_STATE_ECC_FINISH_OFFSET BIT(17) -#define FNAND_STATE_ECC_RIGHT_OFFSET BIT(18) -#define FNAND_STATE_ECC_ERR_OFFSET BIT(19) /* ECC 校验有错 */ -#define FNAND_STATE_ECC_ERROVER_OFFSET BIT(20) /* 错误超过可校验范围 */ -#define FNAND_STATE_AXI_DSP_ERR_OFFSET BIT(21) /* 描述符错误 */ -#define FNAND_STATE_AXI_RD_ERR_OFFSET BIT(22) -#define FNAND_STATE_AXI_WR_ERR_OFFSET BIT(23) -#define FNAND_STATE_RB_N_OFFSET GENMASK(27, 24) -#define FNAND_STATE_PROT_ERR_OFFSET BIT(28) -#define FNAND_STATE_ECCBYPASS_STA_OFFSET BIT(29) -#define FNAND_STATE_ALL_BIT GENMASK(29, 0) - -/* FNAND_INTRMASK_OFFSET */ -#define FNAND_INTRMASK_ALL_INT_MASK GENMASK(17, 0) -#define FNAND_INTRMASK_BUSY_MASK BIT(0) /* nandflash控制器忙状态中断屏蔽位 */ -#define FNAND_INTRMASK_DMA_BUSY_MASK BIT(1) /* dma控制器忙状态中断屏蔽位 */ -#define FNAND_INTRMASK_DMA_PGFINISH_MASK BIT(2) /* dma页操作完成中断屏蔽位 */ -#define FNAND_INTRMASK_DMA_FINISH_MASK BIT(3) /* dma操作完成中断完成中断屏蔽位 */ -#define FNAND_INTRMASK_FIFO_EMP_MASK BIT(4) /* fifo为空中断屏蔽位 */ -#define FNAND_INTRMASK_FIFO_FULL_MASK BIT(5) /* fifo为满中断屏蔽位 */ -#define FNAND_INTRMASK_FIFO_TIMEOUT_MASK BIT(6) /* fifo超时中断屏蔽位 */ -#define FNAND_INTRMASK_CMD_FINISH_MASK BIT(7) /* nand接口命令完成中断屏蔽位 */ -#define FNAND_INTRMASK_PGFINISH_MASK BIT(8) /* nand接口页操作完成中断屏蔽位 */ -#define FNAND_INTRMASK_RE_MASK BIT(9) /* re_n门控打开中断屏蔽位 */ -#define FNAND_INTRMASK_DQS_MASK BIT(10) /* dqs门控打开中断屏蔽位 */ -#define FNAND_INTRMASK_RB_MASK BIT(11) /* rb_n信号busy中断屏蔽位 */ -#define FNAND_INTRMASK_ECC_FINISH_MASK BIT(12) /* ecc完成中断屏蔽位 */ -#define FNAND_INTRMASK_ECC_ERR_MASK BIT(13) /* ecc 中断屏蔽位 */ - -/* FNAND_INTR_OFFSET */ -#define FNAND_INTR_ALL_INT_MASK GENMASK(17, 0) -#define FNAND_INTR_BUSY_MASK BIT(0) /* nandflash控制器忙状态中断状态位 */ -#define FNAND_INTR_DMA_BUSY_MASK BIT(1) /* dma控制器忙状态中断状态位 */ -#define FNAND_INTR_DMA_PGFINISH_MASK BIT(2) /* dma页操作完成中断状态位 */ -#define FNAND_INTR_DMA_FINISH_MASK BIT(3) /* dma操作完成中断完成中断状态位 */ -#define FNAND_INTR_FIFO_EMP_MASK BIT(4) /* fifo为空中断状态位 */ -#define FNAND_INTR_FIFO_FULL_MASK BIT(5) /* fifo为满中断状态位 */ -#define FNAND_INTR_FIFO_TIMEOUT_MASK BIT(6) /* fifo超时中断状态位 */ -#define FNAND_INTR_CMD_FINISH_MASK BIT(7) /* nand接口命令完成中断状态位 */ -#define FNAND_INTR_PGFINISH_MASK BIT(8) /* nand接口页操作完成中断状态位 */ -#define FNAND_INTR_RE_MASK BIT(9) /* re_n门控打开中断状态位 */ -#define FNAND_INTR_DQS_MASK BIT(10) /* dqs门控打开中断状态位 */ -#define FNAND_INTR_RB_MASK BIT(11) /* rb_n信号busy中断状态位 */ -#define FNAND_INTR_ECC_FINISH_MASK BIT(12) /* ecc完成中断状态蔽位 */ -#define FNAND_INTR_ECC_ERR_MASK BIT(13) /* ecc正确中断状态蔽位 */ - -/* FNAND_ERROR_CLEAR_OFFSET */ -#define FNAND_ERROR_CLEAR_DSP_ERR_CLR_MASK BIT(0) -#define FNAND_ERROR_CLEAR_AXI_RD_ERR_CLR_MASK BIT(1) -#define FNAND_ERROR_CLEAR_AXI_WR_ERR_CLR_MASK BIT(2) -#define FNAND_ERROR_CLEAR_ECC_ERR_CLR_MASK BIT(3) -#define FNAND_ERROR_ALL_CLEAR GENMASK(3, 0) - -#define FNAND_SELETED_MAX_NUMBER 4 - - - -/** -* -* This macro reads the given register. -* -* @param base_addr is the base address of the device. -* @param reg_offset is the register offset to be read. -* -* @return The 32-bit value of the register -* -* @note None. -* -*****************************************************************************/ -#define FNAND_READREG(base_addr, reg_offset) \ - FtIn32((base_addr) + (u32)(reg_offset)) - -/****************************************************************************/ -/** -* -* This macro writes the given register. -* -* @param base_addr is the base address of the device. -* @param reg_offset is the register offset to be written. -* @param data is the 32-bit value to write to the register. -* -* @return None. -* -* @note None. -* -*****************************************************************************/ -#define FNAND_WRITEREG(base_addr, reg_offset, data) \ - FtOut32((base_addr) + (u32)(reg_offset), (u32)(data)) - -#define FNAND_SETBIT(base_addr, reg_offset, data) \ - FtSetBit32((base_addr) + (u32)(reg_offset), (u32)(data)) - -#define FNAND_CLEARBIT(base_addr, reg_offset, data) \ - FtClearBit32((base_addr) + (u32)(reg_offset), (u32)(data)) - -#ifdef __cplusplus -} -#endif - -#endif // ! diff --git a/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand_id.c b/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand_id.c deleted file mode 100644 index 51abd5100c..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand_id.c +++ /dev/null @@ -1,278 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fnand_id.c - * Date: 2022-07-06 08:34:27 - * LastEditTime: 2022-07-06 08:34:27 - * Description: This file is for functions in this file are the read id required functions - * for this driver. - * - * Modify History: - * Ver Who Date Changes - * ----- ------ -------- -------------------------------------- - * 1.0 huanghe 2022/05/10 first release - */ -#include "fdebug.h" -#include "fnand.h" -#include "fnand_id.h" -#include "fnand_common_cmd.h" -#include "fdebug.h" -#include "fkernel.h" -#include "sdkconfig.h" - -#define CONFIG_FNAND_ID_DEBUG_EN -#define FNAND_ID_DEBUG_TAG "FNAND_ID" -#ifdef CONFIG_FNAND_ID_DEBUG_EN - - #define FNAND_ID_DEBUG_I(format, ...) FT_DEBUG_PRINT_I(FNAND_ID_DEBUG_TAG, format, ##__VA_ARGS__) - #define FNAND_ID_DEBUG_W(format, ...) FT_DEBUG_PRINT_W(FNAND_ID_DEBUG_TAG, format, ##__VA_ARGS__) - #define FNAND_ID_DEBUG_E(format, ...) FT_DEBUG_PRINT_E(FNAND_ID_DEBUG_TAG, format, ##__VA_ARGS__) - #define FNAND_ID_DEBUG_D(format, ...) FT_DEBUG_PRINT_D(FNAND_ID_DEBUG_TAG, format, ##__VA_ARGS__) -#else - #define FNAND_ID_DEBUG_I(format, ...) - #define FNAND_ID_DEBUG_W(format, ...) - #define FNAND_ID_DEBUG_E(format, ...) - #define FNAND_ID_DEBUG_D(format, ...) -#endif - - -/* - * NAND Flash Manufacturer ID Codes - */ -#define NAND_MFR_TOSHIBA 0x98 - - -/* Cell info constants */ -#define NAND_CI_CHIPNR_MSK 0x03 -#define NAND_CI_CELLTYPE_MSK 0x0C -#define NAND_CI_CELLTYPE_SHIFT 2 - - - -#define NAND_MAX_ID_LEN 8 - - - -extern FError FNandToggleInit(FNand *instance_p, u32 chip_addr); -extern FError FNandOnfiInit(FNand *instance_p, u32 chip_addr); -extern FError FNandTimingInterfaceUpdate(FNand *instance_p, u32 chip_addr); - -extern const struct FNandManuFacturerOps toshiba_ops; - -static const FNandManuFacturer fnand_manufacturers[] = -{ - {NAND_MFR_TOSHIBA, "Toshiba", &toshiba_ops}, -}; - -static int FnandIdHasPeriod(u8 *id_data_p, int arrlen, int period) -{ - int i, j; - for (i = 0; i < period; i++) - for (j = i + period; j < arrlen; j += period) - if (id_data_p[i] != id_data_p[j]) - { - return 0; - } - return 1; -} - -static int FNandIdLen(u8 *id_data_p, int data_length) -{ - int last_nonzero, period; - - for (last_nonzero = data_length - 1; last_nonzero >= 0; last_nonzero--) - if (id_data_p[last_nonzero]) - { - break; - } - - /* All zeros */ - if (last_nonzero < 0) - { - return 0; - } - - /* Calculate wraparound period */ - for (period = 1; period < data_length; period++) - if (FnandIdHasPeriod(id_data_p, data_length, period)) - { - break; - } - - /* There's a repeated pattern */ - if (period < data_length) - { - return period; - } - - /* There are trailing zeros */ - if (last_nonzero < data_length - 1) - { - return last_nonzero + 1; - } - - /* No pattern detected */ - return data_length; - -} - - -const FNandManuFacturer *FNandGetManuFacturer(u8 id) -{ - u32 i; - - for (i = 0; i < ARRAY_SIZE(fnand_manufacturers); i++) - { - if (fnand_manufacturers[i].id == id) - { - return &fnand_manufacturers[i]; - } - } - return NULL; -} - - -static FError FNandIdDetect(FNand *instance_p, u32 chip_addr) -{ - FError ret; - u32 i; - FNandId nand_id; - u8 *id_data = (u8 *)&nand_id.data; - u8 maf_id, dev_id; - const FNandManuFacturer *manufacturer_p ; - - - ret = FNandFlashReset(instance_p, chip_addr); - if (ret != FT_SUCCESS) - { - FNAND_ID_DEBUG_E("FNandFlashReset is error"); - return ret; - } - - /* step2 read device ID */ - ret = FNandFlashReadId(instance_p, 0, id_data, 2, chip_addr); - if (ret != FT_SUCCESS) - { - FNAND_ID_DEBUG_E("FNandFlashReadId is error"); - return ret; - } - - /* Read manufacturer and device IDs */ - maf_id = id_data[0]; - dev_id = id_data[1]; - - /* step 3 get entire device ID*/ - ret = FNandFlashReadId(instance_p, 0, id_data, sizeof(nand_id.data), chip_addr); - if (ret != FT_SUCCESS) - { - FNAND_ID_DEBUG_E("FNandFlashReadId is error"); - return ret; - } - /* step 5 compare ID string and device id */ - if (id_data[0] != maf_id || id_data[1] != dev_id) - { - FNAND_ID_DEBUG_E("Second ID read did not match %02x,%02x against %02x,%02x\n", - maf_id, dev_id, id_data[0], id_data[1]); - return FNAND_ERR_NOT_MATCH; - } - - nand_id.len = FNandIdLen(id_data, ARRAY_SIZE(nand_id.data)); - - /* step 6 通过maf_id获取对应的参数 */ - manufacturer_p = FNandGetManuFacturer(maf_id); - - if (manufacturer_p == NULL) - { - FNAND_ID_DEBUG_E("Manufacturer not in list"); - return FNAND_ERR_NOT_MATCH; - } - - FNAND_ID_DEBUG_I("Find manufacturer"); - if (manufacturer_p->ops->detect) - { - FNAND_ID_DEBUG_I("manufacturer_p->ops->detect function work"); - return manufacturer_p->ops->detect(instance_p, &nand_id, chip_addr); - } - else - { - FNAND_ID_DEBUG_E("Manufacturer detect is empty"); - return FNAND_ERR_NOT_MATCH; - } - - return FT_SUCCESS; -} - -FError FNandDetect(FNand *instance_p) -{ - FError ret; - u32 i = 0; - - for (i = 0; i < FNAND_CONNECT_MAX_NUM; i++) - { - ret = FNandIdDetect(instance_p, i); - if (ret != FT_SUCCESS) - { - FNAND_ID_DEBUG_W("Normal flash is not found"); - } - else - { - FNandFlashFuncRegister(instance_p) ; - FNAND_ID_DEBUG_I("Normal flash is found"); - continue; - } - - - ret = FNandToggleInit(instance_p, i); /* toggle 1.0 */ - if (ret != FT_SUCCESS) - { - FNAND_ID_DEBUG_W("Toggle flash is not found"); - } - else - { - FNAND_ID_DEBUG_I("Scan %d nand is toggle mode", i); - instance_p->nand_flash_interface[i] = FNAND_TOGGLE_MODE; - ret = FNandTimingInterfaceUpdate(instance_p, i); - if (ret != FT_SUCCESS) - { - FNAND_ID_DEBUG_E("FNandTimingInterfaceUpdate is error"); - return ret; - } - /* open ecc length config */ - FNandFlashFuncRegister(instance_p) ; - FNAND_ID_DEBUG_I("Toggle flash is found"); - continue; - } - - ret = FNandOnfiInit(instance_p, i); - if (ret != FT_SUCCESS) - { - FNAND_ID_DEBUG_W("Onfi flash is not found"); - } - else - { - instance_p->nand_flash_interface[i] = FNAND_ONFI_MODE; - ret = FNandTimingInterfaceUpdate(instance_p, i); - if (ret != FT_SUCCESS) - { - FNAND_ID_DEBUG_E("FNandTimingInterfaceUpdate is error"); - return ret; - } - /* open ecc length config ,需要确保 ecc 校验的空间必须小于oob 的空间*/ - FNandFlashFuncRegister(instance_p) ; - FNAND_ID_DEBUG_I("Onfi flash is found"); - continue; - } - - } - return FT_SUCCESS; -} diff --git a/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand_id.h b/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand_id.h deleted file mode 100644 index 23a5d0551b..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand_id.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fnand_id.h - * Date: 2022-07-06 14:19:15 - * LastEditTime: 2022-07-06 14:19:15 - * Description: This file is for functions in this file are the read id required functions - * for this driver. - * - * Modify History: - * Ver Who Date Changes - * ----- ------ -------- -------------------------------------- - * 1.0 huanghe 2022/05/10 first release - */ - - -#ifndef FNAND_ID_H -#define FNAND_ID_H - - -#include "ftypes.h" -#include "fnand.h" - - -#ifdef __cplusplus -extern "C" -{ -#endif - - -struct FNandManuFacturerOps -{ - FError(*detect)(FNand *instance_p, FNandId *id_p, u32 chip_addr); /* detect chip */ - int (*init)(FNand *instance_p, u32 chip_addr); - void (*cleanup)(FNand *instance_p, u32 chip_addr); -}; - - -typedef struct -{ - int id; - char *name; - const struct FNandManuFacturerOps *ops; -} FNandManuFacturer; - -FError FNandDetect(FNand *instance_p); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand_intr.c b/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand_intr.c deleted file mode 100644 index 6150cb9c92..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand_intr.c +++ /dev/null @@ -1,204 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fnand_intr.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:56:46 - * Description:  This file contains functions related to fnand interrupt handling. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/05/10 first release - */ - - -#include "fnand.h" -#include "fnand_hw.h" -#include "fassert.h" -#include "ferror_code.h" - -#include "fdebug.h" -#define FNAND_INTR_DEBUG_TAG "FNAND_INTR" -#define FNAND_INTR_ERROR(format, ...) FT_DEBUG_PRINT_E(FNAND_INTR_DEBUG_TAG, format, ##__VA_ARGS__) -#define FNAND_INTR_DEBUG_I(format, ...) FT_DEBUG_PRINT_I(FNAND_INTR_DEBUG_TAG, format, ##__VA_ARGS__) -#define FNAND_INTR_DEBUG_W(format, ...) FT_DEBUG_PRINT_W(FNAND_INTR_DEBUG_TAG, format, ##__VA_ARGS__) -#define FNAND_INTR_DEBUG_E(format, ...) FT_DEBUG_PRINT_E(FNAND_INTR_DEBUG_TAG, format, ##__VA_ARGS__) - - -/** - * @name: FNandIsrEnable - * @msg: Enable the corresponding interrupt based on the interrupt mask - * @return {*} - * @note: - * @param {FNand} *instance_p is the pointer to the FNand instance - * @param {u32} int_mask is interrupt mask - */ -void FNandIsrEnable(FNand *instance_p, u32 int_mask) -{ - u32 reg_value; - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - FNandConfig *config_p; - config_p = &instance_p->config; - - FNAND_CLEARBIT(config_p->base_address, FNAND_INTRMASK_OFFSET, int_mask); -} - -/** - * @name: FNandIrqDisable - * @msg: Disable the corresponding interrupt based on the interrupt mask - * @note: - * @param {FNand} *instance_p is the pointer to the FNand instance - * @param {u32} int_mask is interrupt mask - * @return {*} - */ -void FNandIrqDisable(FNand *instance_p, u32 int_mask) -{ - u32 reg_value; - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - FNandConfig *config_p; - config_p = &instance_p->config; - - FNAND_SETBIT(config_p->base_address, FNAND_INTRMASK_OFFSET, int_mask); -} - - -/** - * @name: FNandSetIsrHandler - * @msg: Initializes isr event callback function - * @note: - * @param {FNand} *instance_p is the pointer to the FNand instance. - * @param {FnandIrqEventHandler} event_p is callback function used to respond to the interrupt event - * @param {void} *irq_args is the arguments of event callback - * @return {*} - */ -void FNandSetIsrHandler(FNand *instance_p, FnandIrqEventHandler event_p, void *irq_args) -{ - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - instance_p->irq_event_fun_p = event_p; - instance_p->irq_args = irq_args; -} - - -/** - * @name: FNandIrqHandler - * @msg: Nand driver isr handler - * @note: - * @param {s32} vector is interrupt number - * @param {void} *param is argument - * @return {*} - */ -void FNandIrqHandler(s32 vector, void *param) -{ - FNand *instance_p = (FNand *)param; - FNandConfig *config_p; - u32 status; - u32 en_irq; - (void)vector; - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - config_p = &instance_p->config; - - status = FNAND_READREG(config_p->base_address, FNAND_INTR_OFFSET); - en_irq = (~FNAND_READREG(config_p->base_address, FNAND_INTRMASK_OFFSET)) & FNAND_INTRMASK_ALL_INT_MASK; - - if ((status & en_irq) == 0) - { - FNAND_INTR_DEBUG_E("No irq exit"); - return; - } - - FNandIrqDisable(instance_p, status & FNAND_INTRMASK_ALL_INT_MASK); - FNAND_WRITEREG(config_p->base_address, 0xfd0, 0); - FNAND_WRITEREG(config_p->base_address, FNAND_INTR_OFFSET, status); - - if (instance_p->irq_event_fun_p) - { - if (status & FNAND_INTR_BUSY_MASK) - { - - instance_p->irq_event_fun_p(instance_p->irq_args, FNAND_IRQ_BUSY_EVENT); - } - - if (status & FNAND_INTR_DMA_BUSY_MASK) - { - - instance_p->irq_event_fun_p(instance_p->irq_args, FNAND_IRQ_DMA_BUSY_EVENT); - } - - if (status & FNAND_INTR_DMA_PGFINISH_MASK) - { - instance_p->irq_event_fun_p(instance_p->irq_args, FNAND_IRQ_DMA_PGFINISH_EVENT); - } - - if (status & FNAND_INTR_DMA_FINISH_MASK) - { - instance_p->irq_event_fun_p(instance_p->irq_args, FNAND_IRQ_DMA_FINISH_EVENT); - } - - if (status & FNAND_INTR_FIFO_EMP_MASK) - { - instance_p->irq_event_fun_p(instance_p->irq_args, FNAND_IRQ_FIFO_EMP_EVENT); - } - - if (status & FNAND_INTR_FIFO_FULL_MASK) - { - instance_p->irq_event_fun_p(instance_p->irq_args, FNAND_IRQ_FIFO_FULL_EVENT); - } - - if (status & FNAND_INTR_FIFO_TIMEOUT_MASK) - { - instance_p->irq_event_fun_p(instance_p->irq_args, FNAND_IRQ_FIFO_TIMEOUT_EVENT); - } - - if (status & FNAND_INTR_CMD_FINISH_MASK) - { - instance_p->irq_event_fun_p(instance_p->irq_args, FNAND_IRQ_CMD_FINISH_EVENT); - } - - if (status & FNAND_INTR_PGFINISH_MASK) - { - instance_p->irq_event_fun_p(instance_p->irq_args, FNAND_IRQ_PGFINISH_EVENT); - } - - if (status & FNAND_INTR_RE_MASK) - { - instance_p->irq_event_fun_p(instance_p->irq_args, FNAND_IRQ_RE_EVENT); - } - - if (status & FNAND_INTR_DQS_MASK) - { - instance_p->irq_event_fun_p(instance_p->irq_args, FNAND_IRQ_DQS_EVENT); - } - - if (status & FNAND_INTR_RB_MASK) - { - instance_p->irq_event_fun_p(instance_p->irq_args, FNAND_IRQ_RB_EVENT); - } - - if (status & FNAND_INTR_ECC_FINISH_MASK) - { - instance_p->irq_event_fun_p(instance_p->irq_args, FNAND_IRQ_ECC_FINISH_EVENT); - } - - if (status & FNAND_INTR_ECC_ERR_MASK) - { - FNAND_WRITEREG(config_p->base_address, FNAND_ERROR_CLEAR_OFFSET, FNAND_ERROR_CLEAR_ECC_ERR_CLR_MASK); - FNAND_WRITEREG(config_p->base_address, FNAND_FIFO_FREE_OFFSET, FNAND_FIFO_FREE_MASK); - instance_p->irq_event_fun_p(instance_p->irq_args, FNAND_IRQ_ECC_ERR_EVENT); - } - } -} diff --git a/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand_option.c b/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand_option.c deleted file mode 100644 index c10349aa9d..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand_option.c +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fnand_option.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:56:51 - * Description:  This file is for options functions for the fnand component. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/05/10 first release - */ - - -#include "fnand.h" -#include "fnand_hw.h" - -/** - * @name: FNandSetOption - * @msg: - * @note: - * @param {FNand} *instance_p is the pointer to the FNand instance. - * @param {u32} options is configuration options ,use FNAND_OPS_INTER_MODE_SELECT to select nand flash interface - * @param {u32} value is set value - * @return {FError} FT_SUCCESS set option is ok ,FNAND_ERR_INVAILD_PARAMETER options is invalid - */ -FError FNandSetOption(FNand *instance_p, u32 options, u32 value) -{ - u32 reg_value; - FNandConfig *config_p; - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - config_p = &instance_p->config; - - switch (options) - { - case FNAND_OPS_INTER_MODE_SELECT: - FASSERT(FNAND_TOG_ASYN_DDR >= value) ; - FNAND_CLEARBIT(config_p->base_address, FNAND_CTRL0_OFFSET, FNAND_CTRL0_INTER_MODE(3UL)) ; - FNAND_SETBIT(config_p->base_address, FNAND_CTRL0_OFFSET, FNAND_CTRL0_INTER_MODE((unsigned long)value)) ; - break; - default: - return FNAND_ERR_INVAILD_PARAMETER; - } - - return FT_SUCCESS; -} - - diff --git a/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand_sinit.c b/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand_sinit.c deleted file mode 100644 index c49a91cf83..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand_sinit.c +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fnand_sinit.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:56:56 - * Description:  This file contains the implementation of the fnand driver's static - * initialization functionality. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/05/10 first release - */ - - -#include "fnand.h" -#include "fparameters.h" - -extern FNandConfig FNandConfigTable[FNAND_NUM] ; - -/** - * @name: FNandLookupConfig - * @msg: This function looks up the device configuration based on the unique device ID. - * @param {u32} instance_id contains the ID of the device - * @return {FNandConfig *} - A pointer to the configuration found . - NULL if the specified device ID is not found - */ -FNandConfig *FNandLookupConfig(u32 instance_id) -{ - FNandConfig *ptr = NULL; - u32 index; - - for (index = 0; index < (u32)FNAND_NUM; index++) - { - if (FNandConfigTable[index].instance_id == instance_id) - { - ptr = &FNandConfigTable[index]; - break; - } - } - - return (FNandConfig *)ptr; -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand_timing.c b/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand_timing.c deleted file mode 100644 index 62f86ed34e..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand_timing.c +++ /dev/null @@ -1,468 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fnand_timing.c - * Date: 2022-05-09 14:53:42 - * LastEditTime: 2022-05-09 08:56:27 - * Description:   This file is for timings configuration - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/05/10 first release - */ -#include "ferror_code.h" -#include "fnand.h" -#include "fnand_hw.h" - -#include "fdebug.h" -#define FNAND_TIMING_DEBUG_TAG "FNAND_TIMING" -#define FNAND_TIMING_DEBUG_I(format, ...) FT_DEBUG_PRINT_I(FNAND_TIMING_DEBUG_TAG, format, ##__VA_ARGS__) -#define FNAND_TIMING_DEBUG_W(format, ...) FT_DEBUG_PRINT_W(FNAND_TIMING_DEBUG_TAG, format, ##__VA_ARGS__) -#define FNAND_TIMING_DEBUG_E(format, ...) FT_DEBUG_PRINT_E(FNAND_TIMING_DEBUG_TAG, format, ##__VA_ARGS__) - -#define FNAND_TIMING_ASY_NUM 12 -#define FNAND_TIMING_SYN_NUM 14 -#define FNAND_TIMING_TOG_NUM 12 - -const u16 fnand_timing_asy_mode0[FNAND_TIMING_ASY_NUM] = {0x03, 0x03, 0x28, 0x28, 0x03, 0x03, 0x06, 0x06, 0x28, 0x70, 0x30, 0x50}; -const u16 fnand_timing_asy_mode1[FNAND_TIMING_ASY_NUM] = {0x03, 0x03, 0x14, 0x14, 0x03, 0x03, 0x06, 0x06, 0x14, 0x70, 0x20, 0x28}; -const u16 fnand_timing_asy_mode2[FNAND_TIMING_ASY_NUM] = {0x03, 0x03, 0x0D, 0x0D, 0x03, 0x03, 0x06, 0x06, 0x0D, 0x70, 0x20, 0x1A}; -const u16 fnand_timing_asy_mode3[FNAND_TIMING_ASY_NUM] = {0x03, 0x03, 0x0A, 0x0A, 0x03, 0x03, 0x06, 0x06, 0x0A, 0x70, 0x20, 0x14}; -const u16 fnand_timing_asy_mode4[FNAND_TIMING_ASY_NUM] = {0x03, 0x03, 0x08, 0x08, 0x03, 0x03, 0x06, 0x06, 0x08, 0x70, 0x15, 0x10}; -const u16 fnand_timing_asy_mode5[FNAND_TIMING_ASY_NUM] = {0x03, 0x03, 0x07, 0x07, 0x03, 0x03, 0x06, 0x06, 0x07, 0x20, 0x15, 0x0E}; - -const u16 fnand_timing_syn_mode0[FNAND_TIMING_SYN_NUM] = {0x20, 0x41, 0x05, 0x20, 0x10, 0x19, 0x62, 0x40, 0x38, 0x20, 0x00, 0x09, 0x50, 0x20}; -const u16 fnand_timing_syn_mode1[FNAND_TIMING_SYN_NUM] = {0x18, 0x32, 0x06, 0x18, 0x0C, 0x10, 0x76, 0x40, 0x2A, 0x18, 0x00, 0x12, 0x24, 0x18}; -const u16 fnand_timing_syn_mode2[FNAND_TIMING_SYN_NUM] = {0x10, 0x0A, 0x04, 0x10, 0x08, 0x0A, 0x6E, 0x50, 0x1D, 0x10, 0x00, 0x0C, 0x18, 0x10}; -const u16 fnand_timing_syn_mode3[FNAND_TIMING_SYN_NUM] = {0x0C, 0x1A, 0x02, 0x0C, 0x06, 0x08, 0x78, 0x7C, 0x15, 0x0C, 0x00, 0x08, 0x12, 0x0C}; -const u16 fnand_timing_syn_mode4[FNAND_TIMING_SYN_NUM] = {0x08, 0x17, 0x05, 0x08, 0x04, 0x01, 0x73, 0x40, 0x0C, 0x08, 0x00, 0x06, 0x0C, 0x10}; - -const u16 fnand_timing_tog_ddr_mode0[FNAND_TIMING_TOG_NUM] = {0x14, 0x0a, 0x08, 0x08, 0xc8, 0xc8, 0x08, 0x08, 0x14, 0x0a, 0x14, 0x08}; /* 600M clk */ - - -#define ONFI_DYN_TIMING_MAX ((u16)~0U) - -static const struct FNandSdrTimings onfi_sdr_timings[] = -{ - { - .tCCS_min = 500000, - .tR_max = 200000000, - .tADL_min = 400000, - .tALH_min = 20000, - .tALS_min = 50000, - .tAR_min = 25000, - .tCEA_max = 100000, - .tCEH_min = 20000, - .tCH_min = 20000, - .tCHZ_max = 100000, - .tCLH_min = 20000, - .tCLR_min = 20000, - .tCLS_min = 50000, - .tCOH_min = 0, - .tCS_min = 70000, - .tDH_min = 20000, - .tDS_min = 40000, - .tFEAT_max = 1000000, - .tIR_min = 10000, - .tITC_max = 1000000, - .tRC_min = 100000, - .tREA_max = 40000, - .tREH_min = 30000, - .tRHOH_min = 0, - .tRHW_min = 200000, - .tRHZ_max = 200000, - .tRLOH_min = 0, - .tRP_min = 50000, - .tRR_min = 40000, - .tRST_max = 250000000000ULL, - .tWB_max = 200000, - .tWC_min = 100000, - .tWH_min = 30000, - .tWHR_min = 120000, - .tWP_min = 50000, - .tWW_min = 100000, - }, - - /* Mode 1 */ - { - .tCCS_min = 500000, - .tR_max = 200000000, - .tADL_min = 400000, - .tALH_min = 10000, - .tALS_min = 25000, - .tAR_min = 10000, - .tCEA_max = 45000, - .tCEH_min = 20000, - .tCH_min = 10000, - .tCHZ_max = 50000, - .tCLH_min = 10000, - .tCLR_min = 10000, - .tCLS_min = 25000, - .tCOH_min = 15000, - .tCS_min = 35000, - .tDH_min = 10000, - .tDS_min = 20000, - .tFEAT_max = 1000000, - .tIR_min = 0, - .tITC_max = 1000000, - .tRC_min = 50000, - .tREA_max = 30000, - .tREH_min = 15000, - .tRHOH_min = 15000, - .tRHW_min = 100000, - .tRHZ_max = 100000, - .tRLOH_min = 0, - .tRP_min = 25000, - .tRR_min = 20000, - .tRST_max = 500000000, - .tWB_max = 100000, - .tWC_min = 45000, - .tWH_min = 15000, - .tWHR_min = 80000, - .tWP_min = 25000, - .tWW_min = 100000, - }, - - /* Mode 2 */ - { - .tCCS_min = 500000, - .tR_max = 200000000, - .tADL_min = 400000, - .tALH_min = 10000, - .tALS_min = 15000, - .tAR_min = 10000, - .tCEA_max = 30000, - .tCEH_min = 20000, - .tCH_min = 10000, - .tCHZ_max = 50000, - .tCLH_min = 10000, - .tCLR_min = 10000, - .tCLS_min = 15000, - .tCOH_min = 15000, - .tCS_min = 25000, - .tDH_min = 5000, - .tDS_min = 15000, - .tFEAT_max = 1000000, - .tIR_min = 0, - .tITC_max = 1000000, - .tRC_min = 35000, - .tREA_max = 25000, - .tREH_min = 15000, - .tRHOH_min = 15000, - .tRHW_min = 100000, - .tRHZ_max = 100000, - .tRLOH_min = 0, - .tRR_min = 20000, - .tRST_max = 500000000, - .tWB_max = 100000, - .tRP_min = 17000, - .tWC_min = 35000, - .tWH_min = 15000, - .tWHR_min = 80000, - .tWP_min = 17000, - .tWW_min = 100000, - }, - - /* Mode 3 */ - { - .tCCS_min = 500000, - .tR_max = 200000000, - .tADL_min = 400000, - .tALH_min = 5000, - .tALS_min = 10000, - .tAR_min = 10000, - .tCEA_max = 25000, - .tCEH_min = 20000, - .tCH_min = 5000, - .tCHZ_max = 50000, - .tCLH_min = 5000, - .tCLR_min = 10000, - .tCLS_min = 10000, - .tCOH_min = 15000, - .tCS_min = 25000, - .tDH_min = 5000, - .tDS_min = 10000, - .tFEAT_max = 1000000, - .tIR_min = 0, - .tITC_max = 1000000, - .tRC_min = 30000, - .tREA_max = 20000, - .tREH_min = 10000, - .tRHOH_min = 15000, - .tRHW_min = 100000, - .tRHZ_max = 100000, - .tRLOH_min = 0, - .tRP_min = 15000, - .tRR_min = 20000, - .tRST_max = 500000000, - .tWB_max = 100000, - .tWC_min = 30000, - .tWH_min = 10000, - .tWHR_min = 80000, - .tWP_min = 15000, - .tWW_min = 100000, - }, - /* Mode 4 */ - { - .tCCS_min = 500000, - .tR_max = 200000000, - .tADL_min = 400000, - .tALH_min = 5000, - .tALS_min = 10000, - .tAR_min = 10000, - .tCEA_max = 25000, - .tCEH_min = 20000, - .tCH_min = 5000, - .tCHZ_max = 30000, - .tCLH_min = 5000, - .tCLR_min = 10000, - .tCLS_min = 10000, - .tCOH_min = 15000, - .tCS_min = 20000, - .tDH_min = 5000, - .tDS_min = 10000, - .tFEAT_max = 1000000, - .tIR_min = 0, - .tITC_max = 1000000, - .tRC_min = 25000, - .tREA_max = 20000, - .tREH_min = 10000, - .tRHOH_min = 15000, - .tRHW_min = 100000, - .tRHZ_max = 100000, - .tRLOH_min = 5000, - .tRP_min = 12000, - .tRR_min = 20000, - .tRST_max = 500000000, - .tWB_max = 100000, - .tWC_min = 25000, - .tWH_min = 10000, - .tWHR_min = 80000, - .tWP_min = 12000, - .tWW_min = 100000, - }, - /* Mode 5 */ - { - .tCCS_min = 500000, - .tR_max = 200000000, - .tADL_min = 400000, - .tALH_min = 5000, - .tALS_min = 10000, - .tAR_min = 10000, - .tCEA_max = 25000, - .tCEH_min = 20000, - .tCH_min = 5000, - .tCHZ_max = 30000, - .tCLH_min = 5000, - .tCLR_min = 10000, - .tCLS_min = 10000, - .tCOH_min = 15000, - .tCS_min = 15000, - .tDH_min = 5000, - .tDS_min = 7000, - .tFEAT_max = 1000000, - .tIR_min = 0, - .tITC_max = 1000000, - .tRC_min = 20000, - .tREA_max = 16000, - .tREH_min = 7000, - .tRHOH_min = 15000, - .tRHW_min = 100000, - .tRHZ_max = 100000, - .tRLOH_min = 5000, - .tRP_min = 10000, - .tRR_min = 20000, - .tRST_max = 500000000, - .tWB_max = 100000, - .tWC_min = 20000, - .tWH_min = 7000, - .tWHR_min = 80000, - .tWP_min = 10000, - .tWW_min = 100000, - }, -}; - -static FError FNandMemcpyToReg16(FNand *instance_p, u32 reg, u32 reg_step, const u16 *buf, u32 len) -{ - u32 i; - u32 value = 0; - - if (!instance_p || !buf) - { - FNAND_TIMING_DEBUG_E("instance_p is %p ,buf is %p", instance_p, buf); - return FNAND_ERR_INVAILD_PARAMETER; - } - - for (i = 0; i < len; i++) - { - value = (value << 16) + buf[i]; - if (i % 2) - { - FNAND_WRITEREG(instance_p->config.base_address, reg, value); - value = 0; - reg += reg_step; - } - } - - return FT_SUCCESS; -} - -/** - * @name: - * @msg: 根据inter_mode 与 timing_mode - * @note: - * @return {*} - * @param {FNand} *instance_p - */ -FError FNandTimingInterfaceUpdate(FNand *instance_p, u32 chip_addr) -{ - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - FASSERT(chip_addr < FNAND_CONNECT_MAX_NUM); - const u16 *target_timming_data = NULL; - FNandConfig *config_p = &instance_p->config ; - u32 value = 0 ; - FError ret; - - FNandSetOption(instance_p, FNAND_OPS_INTER_MODE_SELECT, instance_p->inter_mode[chip_addr]); - - FNAND_CLEARBIT(config_p->base_address, FNAND_CTRL1_OFFSET, FNAND_CTRL1_SAMPL_PHASE_MAKE(0xffffUL)); /* clear sampl_phase */ - switch (instance_p->inter_mode[chip_addr]) - { - case FNAND_ASYN_SDR: - if (FNAND_TIMING_MODE4 == (instance_p->timing_mode[chip_addr] & 0xf)) - { - target_timming_data = fnand_timing_asy_mode4; - value = FNAND_CTRL1_SAMPL_PHASE_MAKE(4UL) ; - } - else if (FNAND_TIMING_MODE3 == (instance_p->timing_mode[chip_addr] & 0xf)) - { - target_timming_data = fnand_timing_asy_mode3; - value = FNAND_CTRL1_SAMPL_PHASE_MAKE(5UL) ; - } - else if (FNAND_TIMING_MODE2 == (instance_p->timing_mode[chip_addr] & 0xf)) - { - target_timming_data = fnand_timing_asy_mode2; - value = FNAND_CTRL1_SAMPL_PHASE_MAKE(6UL) ; - } - else if (FNAND_TIMING_MODE1 == (instance_p->timing_mode[chip_addr] & 0xf)) - { - target_timming_data = fnand_timing_asy_mode1; - value = FNAND_CTRL1_SAMPL_PHASE_MAKE(5UL) ; - } - else - { - target_timming_data = fnand_timing_asy_mode0; - value = FNAND_CTRL1_SAMPL_PHASE_MAKE(1UL) ; - } - ret = FNandMemcpyToReg16(instance_p, FNAND_ASY_TIMING0_OFFSET, 4, target_timming_data, FNAND_TIMING_ASY_NUM); - if (ret != FT_SUCCESS) - { - return ret; - } - FNAND_SETBIT(config_p->base_address, FNAND_CTRL1_OFFSET, value); - FNAND_WRITEREG(config_p->base_address, FNAND_INTERVAL_OFFSET, 1); - break; - case FNAND_ONFI_DDR: - if (FNAND_TIMING_MODE4 == (instance_p->timing_mode[chip_addr] & 0xf)) - { - FNAND_WRITEREG(config_p->base_address, FNAND_INTERVAL_OFFSET, 0x30); - target_timming_data = fnand_timing_syn_mode4; - value = FNAND_CTRL1_SAMPL_PHASE_MAKE(0xdUL) ; - } - else if (FNAND_TIMING_MODE3 == (instance_p->timing_mode[chip_addr] & 0xf)) - { - FNAND_WRITEREG(config_p->base_address, FNAND_INTERVAL_OFFSET, 0x18); - target_timming_data = fnand_timing_syn_mode3; - value = FNAND_CTRL1_SAMPL_PHASE_MAKE(5UL) ; - } - else if (FNAND_TIMING_MODE2 == (instance_p->timing_mode[chip_addr] & 0xf)) - { - FNAND_WRITEREG(config_p->base_address, FNAND_INTERVAL_OFFSET, 0x20); - target_timming_data = fnand_timing_syn_mode2; - value = FNAND_CTRL1_SAMPL_PHASE_MAKE(0x8UL) ; - } - else if (FNAND_TIMING_MODE1 == (instance_p->timing_mode[chip_addr] & 0xf)) - { - FNAND_WRITEREG(config_p->base_address, FNAND_INTERVAL_OFFSET, 0x40); - target_timming_data = fnand_timing_syn_mode1; - value = FNAND_CTRL1_SAMPL_PHASE_MAKE(0x12UL) ; - } - else - { - FNAND_WRITEREG(config_p->base_address, FNAND_INTERVAL_OFFSET, 0x40); - target_timming_data = fnand_timing_syn_mode0; - value = FNAND_CTRL1_SAMPL_PHASE_MAKE(0x12UL) ; - } - ret = FNandMemcpyToReg16(instance_p, FNAND_SYN_TIMING6_OFFSET, 4, target_timming_data, FNAND_TIMING_SYN_NUM); - if (ret != FT_SUCCESS) - { - return ret; - } - FNAND_SETBIT(config_p->base_address, FNAND_CTRL1_OFFSET, value); - break; - case FNAND_TOG_ASYN_DDR: - value = FNAND_CTRL1_SAMPL_PHASE_MAKE(8UL); - target_timming_data = fnand_timing_tog_ddr_mode0; - ret = FNandMemcpyToReg16(instance_p, FNAND_TOG_TIMING13_OFFSET, 4, target_timming_data, FNAND_TIMING_SYN_NUM); - if (ret != FT_SUCCESS) - { - return ret; - } - FNAND_WRITEREG(config_p->base_address, FNAND_INTERVAL_OFFSET, 0xc8); - FNAND_SETBIT(config_p->base_address, FNAND_CTRL1_OFFSET, value); - break; - default: - FNAND_TIMING_DEBUG_E("Error inter_mode is %x", instance_p->inter_mode[chip_addr]); - return FNAND_ERR_INVAILD_PARAMETER; - } - - return FT_SUCCESS; -} - - -const struct FNandSdrTimings *FNandAsyncTimingModeToSdrTimings(FNandAsyncTimint mode) -{ - if (mode >= FNAND_ASYNC_TIM_INT_MODE4) - { - FNAND_TIMING_DEBUG_E("FNandAsyncTimingModeToSdrTimings set is over mode range"); - return NULL; - } - - return &onfi_sdr_timings[mode]; -} - - - -/** - * @name: - * @msg: - * @return {*} - * @param {FNand} *instance_p - * @param {FNandAsyncTimint} mode - * @Note 当前只支持onfi 模式 - */ -FError FNandFillTimingModeTiming(FNand *instance_p, FNandAsyncTimint mode) -{ - struct FNandSdrTimings *sdr_timing_p = NULL; - const struct FNandSdrTimings *source_timing_p = NULL; - FASSERT(instance_p != NULL); - sdr_timing_p = &instance_p->sdr_timing; - source_timing_p = FNandAsyncTimingModeToSdrTimings(mode); - FASSERT(source_timing_p != NULL); - *sdr_timing_p = *source_timing_p; - - - return FT_SUCCESS; -} diff --git a/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand_timing.h b/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand_timing.h deleted file mode 100644 index a0336640cf..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/nand/fnand/fnand_timing.h +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fnand_timing.h - * Date: 2022-04-28 18:53:58 - * LastEditTime: 2022-04-28 18:53:58 - * Description:  This file is for timings configuration - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/05/10 first release - */ - -#ifndef FNAND_TIMING_H -#define FNAND_TIMING_H - -#include "ftypes.h" - - -#ifdef __cplusplus -extern "C" -{ -#endif - - -/** - * struct FNandSdrTimings - SDR NAND chip timings - * - * This struct defines the timing requirements of a SDR NAND chip. - * These information can be found in every NAND datasheets and the timings - * meaning are described in the ONFI specifications: - * www.onfi.org/~/media/ONFI/specs/onfi_3_1_spec.pdf (chapter 4.15 Timing - * Parameters) - * - * All these timings are expressed in picoseconds. - * - * @tBERS_max: Block erase time - * @tCCS_min: Change column setup time - * @tPROG_max: Page program time - * @tR_max: Page read time - * @tALH_min: ALE hold time - * @tADL_min: ALE to data loading time - * @tALS_min: ALE setup time - * @tAR_min: ALE to RE# delay - * @tCEA_max: CE# access time - * @tCEH_min: CE# high hold time - * @tCH_min: CE# hold time - * @tCHZ_max: CE# high to output hi-Z - * @tCLH_min: CLE hold time - * @tCLR_min: CLE to RE# delay - * @tCLS_min: CLE setup time - * @tCOH_min: CE# high to output hold - * @tCS_min: CE# setup time - * @tDH_min: Data hold time - * @tDS_min: Data setup time - * @tFEAT_max: Busy time for Set Features and Get Features - * @tIR_min: Output hi-Z to RE# low - * @tITC_max: Interface and Timing Mode Change time - * @tRC_min: RE# cycle time - * @tREA_max: RE# access time - * @tREH_min: RE# high hold time - * @tRHOH_min: RE# high to output hold - * @tRHW_min: RE# high to WE# low - * @tRHZ_max: RE# high to output hi-Z - * @tRLOH_min: RE# low to output hold - * @tRP_min: RE# pulse width - * @tRR_min: Ready to RE# low (data only) - * @tRST_max: Device reset time, measured from the falling edge of R/B# to the - * rising edge of R/B#. - * @tWB_max: WE# high to SR[6] low - * @tWC_min: WE# cycle time - * @tWH_min: WE# high hold time - * @tWHR_min: WE# high to RE# low - * @tWP_min: WE# pulse width - * @tWW_min: WP# transition to WE# low - */ -struct FNandSdrTimings -{ - u64 tBERS_max; - u32 tCCS_min; - u64 tPROG_max; - u64 tR_max; - u32 tALH_min; - u32 tADL_min; - u32 tALS_min; - u32 tAR_min; - u32 tCEA_max; - u32 tCEH_min; - u32 tCH_min; - u32 tCHZ_max; - u32 tCLH_min; - u32 tCLR_min; - u32 tCLS_min; - u32 tCOH_min; - u32 tCS_min; - u32 tDH_min; - u32 tDS_min; - u32 tFEAT_max; - u32 tIR_min; - u32 tITC_max; - u32 tRC_min; - u32 tREA_max; - u32 tREH_min; - u32 tRHOH_min; - u32 tRHW_min; - u32 tRHZ_max; - u32 tRLOH_min; - u32 tRP_min; - u32 tRR_min; - u64 tRST_max; - u32 tWB_max; - u32 tWC_min; - u32 tWH_min; - u32 tWHR_min; - u32 tWP_min; - u32 tWW_min; -}; - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/bsp/phytium/libraries/standalone/drivers/nand/fnand/manufacturer/fnand_onfi.c b/bsp/phytium/libraries/standalone/drivers/nand/fnand/manufacturer/fnand_onfi.c deleted file mode 100644 index 59ce0a10ac..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/nand/fnand/manufacturer/fnand_onfi.c +++ /dev/null @@ -1,289 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fnand_onfi.c - * Date: 2022-07-05 19:10:40 - * LastEditTime: 2022-07-05 19:10:41 - * Description: This file is for onfi type nand - * - * Modify History: - * Ver Who Date Changes - * ----- ------ -------- -------------------------------------- - * 1.0 huanghe 2022/05/10 first release - */ - - -#include "fnand.h" -#include "fnand_hw.h" -#include "stdio.h" -#include "string.h" -#include "fnand_dma.h" -#include "fnand_common_cmd.h" -#include "fnand_onfi.h" -#include "fnand_timing.h" -#include "fnand_ecc.h" -#include "fcache.h" -// #include "fsleep.h" -#include "fdebug.h" -#include "sdkconfig.h" - - -#define FNAND_ONFI_DEBUG_TAG "FNAND_ONFI" - -#ifdef CONFIG_FNAND_ONFI_DEBUG_EN - - #define FNAND_ONFI_DEBUG_I(format, ...) FT_DEBUG_PRINT_I(FNAND_ONFI_DEBUG_TAG, format, ##__VA_ARGS__) - #define FNAND_ONFI_DEBUG_W(format, ...) FT_DEBUG_PRINT_W(FNAND_ONFI_DEBUG_TAG, format, ##__VA_ARGS__) - #define FNAND_ONFI_DEBUG_E(format, ...) FT_DEBUG_PRINT_E(FNAND_ONFI_DEBUG_TAG, format, ##__VA_ARGS__) - #define FNAND_ONFI_DEBUG_D(format, ...) FT_DEBUG_PRINT_D(FNAND_ONFI_DEBUG_TAG, format, ##__VA_ARGS__) -#else - #define FNAND_ONFI_DEBUG_I(format, ...) - #define FNAND_ONFI_DEBUG_W(format, ...) - #define FNAND_ONFI_DEBUG_E(format, ...) - #define FNAND_ONFI_DEBUG_D(format, ...) -#endif - -#define FNAND_ADDR_CYCLE_NUM0 0 -#define FNAND_ADDR_CYCLE_NUM1 1 -#define FNAND_ADDR_CYCLE_NUM2 2 -#define FNAND_ADDR_CYCLE_NUM3 3 -#define FNAND_ADDR_CYCLE_NUM4 4 -#define FNAND_ADDR_CYCLE_NUM5 5 - -#define FNAND_ONFI_CRC_BASE 0x4F4E - -#define FNAND_CTRL_ECC_EN 1 -#define FNAND_CTRL_ECC_DIS 0 - -#define FNAND_CTRL_AUTO_AUTO_RS_EN 1 -#define FNAND_CTRL_AUTO_AUTO_RS_DIS 0 - - - -/* - * Special handling must be done for the WAITRDY timeout parameter as it usually - * is either tPROG (after a prog), tR (before a read), tRST (during a reset) or - * tBERS (during an erase) which all of them are u64 values that cannot be - * divided by usual kernel macros and must be handled with the special - * DIV_ROUND_UP_ULL() macro. - * - * Cast to type of dividend is needed here to guarantee that the result won't - * be an unsigned long long when the dividend is an unsigned long (or smaller), - * which is what the compiler does when it sees ternary operator with 2 - * different return types (picks the largest type to make sure there's no - * loss). - */ -#define __DIVIDE(dividend, divisor) ({ \ - (__typeof__(dividend))(sizeof(dividend) <= sizeof(unsigned long) ? \ - DIV_ROUND_UP(dividend, divisor) : \ - DIV_ROUND_UP_ULL(dividend, divisor)); \ - }) -#define PSEC_TO_NSEC(x) __DIVIDE(x, 1000) -#define PSEC_TO_MSEC(x) __DIVIDE(x, 1000000000) - - -extern FError FNandSendCmd(FNand *instance_p, struct FNandDmaDescriptor *descriptor_p, FNandOperationType isr_type); -extern FError FNandTimingInterfaceUpdate(FNand *instance_p, u32 chip_addr); - -FError FNandDmaPack(FNandCmdFormat *cmd_format, - struct FNandDmaDescriptor *descriptor_p, - FNandDmaPackData *pack_data_p - ); - - - -enum CommandsEnum -{ - CMD_READ_ID = 0, - CMD_READ_DEVICE_TABLE, - CMD_INDEX_LENGTH_NEW, -}; - -static u16 FNandOnfiCrc16(u16 crc, u8 const *p, size_t len) -{ - int i; - while (len--) - { - crc ^= *p++ << 8; - for (i = 0; i < 8; i++) - { - crc = (crc << 1) ^ ((crc & 0x8000) ? 0x8005 : 0); - } - } - - return crc; -} - - - -/* Sanitize ONFI strings so we can safely print them */ -static void FNandSanitizeString(u8 *s, fsize_t len) -{ - fsize_t i; - - /* Null terminate */ - s[len - 1] = 0; - - /* Remove non printable chars */ - for (i = 0; i < len - 1; i++) - { - if (s[i] < ' ' || s[i] > 127) - { - s[i] = '?'; - } - } - -} - - - -static FNandCmdFormat cmd_format[CMD_INDEX_LENGTH_NEW] = -{ - {ONFI_CMD_READ_ID, ONFI_END_CMD_NONE, FNAND_ADDR_CYCLE_NUM1, FNAND_CMDCTRL_TYPE_READ_ID, FNAND_CTRL_ECC_DIS, FNAND_CTRL_AUTO_AUTO_RS_DIS}, - {ONFI_CMD_READ_PARAM_PAGE, ONFI_END_CMD_NONE, FNAND_ADDR_CYCLE_NUM1, FNAND_CMDCTRL_READ_PARAM, FNAND_CTRL_ECC_DIS, FNAND_CTRL_AUTO_AUTO_RS_EN}, -}; - - -static FError FNandOnfiDetectJedec(FNand *instance_p, struct OnfiNandGeometry *onfi_geometry_p, FNandNandGeometry *geometry_p) -{ - /* 多参数页冗余检查 */ - if (FNandOnfiCrc16(FNAND_ONFI_CRC_BASE, (u8 *)onfi_geometry_p, 510) != onfi_geometry_p->crc) - { - FNAND_ONFI_DEBUG_W("Onfi error mode"); - } - - FNAND_ONFI_DEBUG_I("revision is %x", onfi_geometry_p->revision); - - FNandSanitizeString(onfi_geometry_p->manufacturer, sizeof(onfi_geometry_p->manufacturer)); - FNandSanitizeString(onfi_geometry_p->model, sizeof(onfi_geometry_p->model)); - FNAND_ONFI_DEBUG_I("manufacturer %s", onfi_geometry_p->manufacturer); - FNAND_ONFI_DEBUG_I("model %s", onfi_geometry_p->model); - - geometry_p->bytes_per_page = onfi_geometry_p->byte_per_page; - geometry_p->spare_bytes_per_page = onfi_geometry_p->spare_bytes_per_page; - geometry_p->pages_per_block = onfi_geometry_p->pages_per_block; - geometry_p->blocks_per_lun = onfi_geometry_p->blocks_per_lun ; - geometry_p->num_lun = onfi_geometry_p->lun_count; - geometry_p->num_pages = (geometry_p->num_lun * - geometry_p->blocks_per_lun * - geometry_p->pages_per_block); - geometry_p->num_blocks = (geometry_p->num_lun * geometry_p->blocks_per_lun); - geometry_p->block_size = (geometry_p->pages_per_block * geometry_p->bytes_per_page); - geometry_p->device_size = (geometry_p->num_blocks * geometry_p->block_size * geometry_p->bytes_per_page); - geometry_p->rowaddr_cycles = onfi_geometry_p->addr_cycles & 0xf; - geometry_p->coladdr_cycles = (onfi_geometry_p->addr_cycles >> 4) & 0xf ; - geometry_p->hw_ecc_length = FNandGetEccTotalLength(geometry_p->bytes_per_page, instance_p->config.ecc_strength); /* 需要增加检查oob 长度 */ - geometry_p->ecc_offset = geometry_p->spare_bytes_per_page - geometry_p->hw_ecc_length; - geometry_p->hw_ecc_steps = geometry_p->bytes_per_page / instance_p->config.ecc_step_size ; - geometry_p->ecc_step_size = instance_p->config.ecc_step_size; - FNAND_ONFI_DEBUG_D("bytes_per_page %d ", geometry_p->bytes_per_page); /* Bytes per page */ - FNAND_ONFI_DEBUG_D("spare_bytes_per_page %d ", geometry_p->spare_bytes_per_page) ; /* Size of spare area in bytes */ - FNAND_ONFI_DEBUG_D("pages_per_block %d ", geometry_p->pages_per_block) ; /* Pages per block */ - FNAND_ONFI_DEBUG_D("blocks_per_lun %d ", geometry_p->blocks_per_lun) ; /* Bocks per LUN */ - FNAND_ONFI_DEBUG_D("num_lun %d ", geometry_p->num_lun) ; /* Total number of LUN */ - FNAND_ONFI_DEBUG_D("num_pages %d ", geometry_p->num_pages) ; /* Total number of pages in device */ - FNAND_ONFI_DEBUG_D("num_blocks %d ", geometry_p->num_blocks) ; /* Total number of blocks in device */ - FNAND_ONFI_DEBUG_D("block_size %d ", geometry_p->block_size) ; /* Size of a block in bytes */ - FNAND_ONFI_DEBUG_D("device_size %d ", geometry_p->device_size) ; /* Total device size in bytes */ - FNAND_ONFI_DEBUG_D("rowaddr_cycles %d ", geometry_p->rowaddr_cycles) ; /* Row address cycles */ - FNAND_ONFI_DEBUG_D("coladdr_cycles %d ", geometry_p->coladdr_cycles) ; /* Column address cycles */ - FNAND_ONFI_DEBUG_D("hw_ecc_length %d ", geometry_p->hw_ecc_length) ; /* 产生硬件ecc校验参数的个数 */ - FNAND_ONFI_DEBUG_D("ecc_offset %d ", geometry_p->ecc_offset) ; /* obb存放硬件ecc校验参数页位置的偏移 */ - FNAND_ONFI_DEBUG_D("hw_ecc_steps %d ", geometry_p->hw_ecc_steps) ; /* number of ECC steps per page */ - FNAND_ONFI_DEBUG_D("ecc_step_size %d ", geometry_p->ecc_step_size) ; /* 进行读写操作时,单次ecc 的步骤的跨度 */ - - return FT_SUCCESS; -} - -static FError FNandOnfiReadParamPage(FNand *instance_p, u8 *id_buffer, u32 buffer_length, u32 chip_addr) -{ - FError ret; - u8 address = 0x00; - u32 memcpy_length; - FNandDmaPackData pack_data = - { - .addr_p = &address, - .addr_length = 1, - .phy_address = (uintptr)instance_p->dma_data_buffer.data_buffer, - .phy_bytes_length = (3 * sizeof(struct OnfiNandGeometry) > FNAND_DMA_MAX_LENGTH) ? FNAND_DMA_MAX_LENGTH : (3 * sizeof(struct OnfiNandGeometry)), - .chip_addr = chip_addr, - .contiune_dma = 0, - }; - - FNandDmaPack(&cmd_format[CMD_READ_DEVICE_TABLE], (struct FNandDmaDescriptor *)&instance_p->descriptor_buffer.data_buffer[0], &pack_data); - ret = FNandSendCmd(instance_p, (struct FNandDmaDescriptor *)&instance_p->descriptor_buffer.data_buffer[0], FNAND_READ_PAGE_TYPE); - - if (ret != FT_SUCCESS) - { - return FNAND_ERR_OPERATION; - } - - if (buffer_length && id_buffer) - { - memcpy_length = (buffer_length > pack_data.phy_bytes_length) ? pack_data.phy_bytes_length : buffer_length; - FCacheDCacheFlushRange((intptr)instance_p->dma_data_buffer.data_buffer, memcpy_length); - memcpy(id_buffer, instance_p->dma_data_buffer.data_buffer, memcpy_length); - } - return FT_SUCCESS; -} - -/** - * @name: FNandOnfiInit - * @msg: Onfi mode interface initialization - * @note: - * @param {FNand} *instance_p is the pointer to the FNand instance. - * @param {u32} chip_addr is chip address - * @return {FError} FT_SUCCESS 初始化成功 ,FNAND_NOT_FET_TOGGLE_MODE 初始化toggle 模式错误。 - */ -FError FNandOnfiInit(FNand *instance_p, u32 chip_addr) -{ - FError ret; - char id[5]; - FASSERT(instance_p != NULL); - struct OnfiNandGeometry *onfi_geometry_p; - /* step 1 .reset nand chip */ - - ret = FNandFlashReset(instance_p, chip_addr); - if (ret != FT_SUCCESS) - { - FNAND_ONFI_DEBUG_E("FNandFlashReset is error"); - return ret; - } - /* step 2. readid operation 20h */ - ret = FNandFlashReadId(instance_p, 0x20, id, sizeof(id), chip_addr); - if (ret != FT_SUCCESS || strncmp(id, "ONFI", sizeof(id) - 1)) - { - FNAND_ONFI_DEBUG_E("The id value read out from 20H is %s", id); - return FNAND_NOT_FET_TOGGLE_MODE; - } - - instance_p->inter_mode[chip_addr] = FNAND_ASYN_SDR; - - - FNandTimingInterfaceUpdate(instance_p, chip_addr); - /* step 3. read device id table */ - - ret = FNandOnfiReadParamPage(instance_p, NULL, 0, chip_addr); - if (ret != FT_SUCCESS) - { - FNAND_ONFI_DEBUG_E("An error occured when reading device id table"); - return FNAND_NOT_FET_TOGGLE_MODE; - } - - /* step 4. device id table parse */ - onfi_geometry_p = (struct OnfiNandGeometry *)instance_p->dma_data_buffer.data_buffer; - - return FNandOnfiDetectJedec(instance_p, onfi_geometry_p, &instance_p->nand_geometry[chip_addr]); -} - - diff --git a/bsp/phytium/libraries/standalone/drivers/nand/fnand/manufacturer/fnand_onfi.h b/bsp/phytium/libraries/standalone/drivers/nand/fnand/manufacturer/fnand_onfi.h deleted file mode 100644 index f023aeeb11..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/nand/fnand/manufacturer/fnand_onfi.h +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fnand_onfi.h - * Date: 2022-07-05 19:10:47 - * LastEditTime: 2022-07-05 19:10:47 - * Description: This file is for onfi type nand - * - * Modify History: - * Ver Who Date Changes - * ----- ------ -------- -------------------------------------- - * 1.0 huanghe 2022/05/10 first release - */ -#ifndef DRIVERS_NAND_FNAND_ONFI_H -#define DRIVERS_NAND_FNAND_ONFI_H - -#include "ftypes.h" -#include "fnand.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -#define ONFI_CMD_READ_ID 0x90 /* ONFI Read ID \ -command */ -#define ONFI_CMD_READ_PARAM_PAGE 0xEC /* ONFI Read \ - Parameter Page \ -command */ - - -#define ONFI_END_CMD_NONE 0xfff /* No End command */ - -struct OnfiNandGeometry -{ - /* rev info and features block */ - /* 'O' 'N' 'F' 'I' */ - u8 sig[4]; - u16 revision; - u16 features; - u16 opt_cmd; - u8 reserved0[2]; - u16 ext_param_page_length; /* since ONFI 2.1 */ - u8 num_of_param_pages; /* since ONFI 2.1 */ - u8 reserved1[17]; - - /* manufacturer information block */ - char manufacturer[12]; - char model[20]; - u8 jedec_id; - u16 date_code; - u8 reserved2[13]; - - /* memory organization block */ - u32 byte_per_page; - u16 spare_bytes_per_page; - u32 data_bytes_per_ppage; - u16 spare_bytes_per_ppage; - u32 pages_per_block; - u32 blocks_per_lun; - u8 lun_count; - u8 addr_cycles; - u8 bits_per_cell; - u16 bb_per_lun; - u16 block_endurance; - u8 guaranteed_good_blocks; - u16 guaranteed_block_endurance; - u8 programs_per_page; - u8 ppage_attr; - u8 ecc_bits; - u8 interleaved_bits; - u8 interleaved_ops; - u8 reserved3[13]; - - /* electrical parameter block */ - u8 io_pin_capacitance_max; - u16 async_timing_mode; - u16 program_cache_timing_mode; - u16 t_prog; - u16 t_bers; - u16 t_r; - u16 t_ccs; - u16 src_sync_timing_mode; - u8 src_ssync_features; - u16 clk_pin_capacitance_typ; - u16 io_pin_capacitance_typ; - u16 input_pin_capacitance_typ; - u8 input_pin_capacitance_max; - u8 driver_strength_support; - u16 t_int_r; - u16 t_adl; - u8 reserved4[8]; - - /* vendor */ - u16 vendor_revision; - u8 vendor[88]; - - u16 crc; -} __attribute__((__packed__)); - -#ifdef __cplusplus -} -#endif - -#endif // !1 \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/nand/fnand/manufacturer/fnand_toggle.c b/bsp/phytium/libraries/standalone/drivers/nand/fnand/manufacturer/fnand_toggle.c deleted file mode 100644 index b402506c30..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/nand/fnand/manufacturer/fnand_toggle.c +++ /dev/null @@ -1,299 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fnand_toggle.c - * Date: 2022-07-05 20:00:31 - * LastEditTime: 2022-07-05 20:00:31 - * Description: This file is for toggle nand - * - * Modify History: - * Ver Who Date Changes - * ----- ------ -------- -------------------------------------- - * 1.0 huanghe 2022/05/10 first release - */ - -#include "fnand.h" -#include "fnand_hw.h" -#include "stdio.h" -#include "string.h" -#include "fnand_dma.h" -#include "fnand_toggle.h" -#include "fnand_timing.h" -#include "fnand_ecc.h" -#include "fnand_common_cmd.h" -#include "fcache.h" -// #include "fsleep.h" -#include "fdebug.h" -#include "sdkconfig.h" - -#define CONFIG_FNAND_TOGGLE_DEBUG_EN -#define FNAND_TOGGLE_DEBUG_TAG "FNAND_TOGGLE" -#ifdef CONFIG_FNAND_TOGGLE_DEBUG_EN - - #define FNAND_TOGGLE_DEBUG_I(format, ...) FT_DEBUG_PRINT_I(FNAND_TOGGLE_DEBUG_TAG, format, ##__VA_ARGS__) - #define FNAND_TOGGLE_DEBUG_W(format, ...) FT_DEBUG_PRINT_W(FNAND_TOGGLE_DEBUG_TAG, format, ##__VA_ARGS__) - #define FNAND_TOGGLE_DEBUG_E(format, ...) FT_DEBUG_PRINT_E(FNAND_TOGGLE_DEBUG_TAG, format, ##__VA_ARGS__) - #define FNAND_TOGGLE_DEBUG_D(format, ...) FT_DEBUG_PRINT_D(FNAND_TOGGLE_DEBUG_TAG, format, ##__VA_ARGS__) -#else - #define FNAND_TOGGLE_DEBUG_I(format, ...) - #define FNAND_TOGGLE_DEBUG_W(format, ...) - #define FNAND_TOGGLE_DEBUG_E(format, ...) - #define FNAND_TOGGLE_DEBUG_D(format, ...) -#endif - -#define FNAND_ADDR_CYCLE_NUM0 0 -#define FNAND_ADDR_CYCLE_NUM1 1 -#define FNAND_ADDR_CYCLE_NUM2 2 -#define FNAND_ADDR_CYCLE_NUM3 3 -#define FNAND_ADDR_CYCLE_NUM4 4 -#define FNAND_ADDR_CYCLE_NUM5 5 - -#define FNAND_TOGGLE_CRC_BASE 0x4F4E - -#define FNAND_CTRL_ECC_EN 1 -#define FNAND_CTRL_ECC_DIS 0 - -#define FNAND_CTRL_AUTO_AUTO_RS_EN 1 -#define FNAND_CTRL_AUTO_AUTO_RS_DIS 0 - -/* - * Special handling must be done for the WAITRDY timeout parameter as it usually - * is either tPROG (after a prog), tR (before a read), tRST (during a reset) or - * tBERS (during an erase) which all of them are u64 values that cannot be - * divided by usual kernel macros and must be handled with the special - * DIV_ROUND_UP_ULL() macro. - * - * Cast to type of dividend is needed here to guarantee that the result won't - * be an unsigned long long when the dividend is an unsigned long (or smaller), - * which is what the compiler does when it sees ternary operator with 2 - * different return types (picks the largest type to make sure there's no - * loss). - */ -#define __DIVIDE(dividend, divisor) ({ \ - (__typeof__(dividend))(sizeof(dividend) <= sizeof(unsigned long) ? \ - DIV_ROUND_UP(dividend, divisor) : \ - DIV_ROUND_UP_ULL(dividend, divisor)); \ - }) -#define PSEC_TO_NSEC(x) __DIVIDE(x, 1000) -#define PSEC_TO_MSEC(x) __DIVIDE(x, 1000000000) - -extern FError FNandSendCmd(FNand *instance_p, struct FNandDmaDescriptor *descriptor_p, FNandOperationType isr_type); -extern FError FNandTimingInterfaceUpdate(FNand *instance_p, u32 chip_addr); - -FError FNandDmaPack(FNandCmdFormat *cmd_format, - struct FNandDmaDescriptor *descriptor_p, - FNandDmaPackData *pack_data_p - ); - - - - - -enum CommandsEnumNew -{ - CMD_READ_ID = 0, - CMD_READ_DEVICE_TABLE, - CMD_INDEX_LENGTH_NEW, -}; - - -static FNandCmdFormat cmd_format[CMD_INDEX_LENGTH_NEW] = -{ - {TOGGLE_CMD_READ_ID, TOGGLE_END_CMD_NONE, FNAND_ADDR_CYCLE_NUM1, FNAND_CMDCTRL_TYPE_READ_ID, FNAND_CTRL_ECC_DIS, FNAND_CTRL_AUTO_AUTO_RS_DIS}, - {TOGGLE_CMD_READ_PARAM_PAGE, TOGGLE_END_CMD_NONE, FNAND_ADDR_CYCLE_NUM1, FNAND_CMDCTRL_READ_PARAM, FNAND_CTRL_ECC_DIS, FNAND_CTRL_AUTO_AUTO_RS_EN}, -}; - -static u16 FNandToggleCrc16(u16 crc, u8 const *p, size_t len) -{ - int i; - while (len--) - { - crc ^= *p++ << 8; - for (i = 0; i < 8; i++) - { - crc = (crc << 1) ^ ((crc & 0x8000) ? 0x8005 : 0); - } - } - - return crc; -} - - - -/* Sanitize ONFI strings so we can safely print them */ -static void FNandSanitizeString(u8 *s, fsize_t len) -{ - fsize_t i; - - /* Null terminate */ - s[len - 1] = 0; - - /* Remove non printable chars */ - for (i = 0; i < len - 1; i++) - { - if (s[i] < ' ' || s[i] > 127) - { - s[i] = '?'; - } - } - -} - - -static FError FNandToggleReadParamPage(FNand *instance_p, u8 *id_buffer, u32 buffer_length, u32 chip_addr) -{ - FError ret; - u8 address = 0x40; - u32 memcpy_length; - FNandDmaPackData pack_data = - { - .addr_p = &address, - .addr_length = 1, - .phy_address = (uintptr)instance_p->dma_data_buffer.data_buffer, - .phy_bytes_length = (3 * sizeof(struct ToggleNandGeometry) > FNAND_DMA_MAX_LENGTH) ? FNAND_DMA_MAX_LENGTH : (3 * sizeof(struct ToggleNandGeometry)), - .chip_addr = chip_addr, - .contiune_dma = 0, - }; - - FNandDmaPack(&cmd_format[CMD_READ_DEVICE_TABLE], (struct FNandDmaDescriptor *)&instance_p->descriptor_buffer.data_buffer[0], &pack_data); - ret = FNandSendCmd(instance_p, (struct FNandDmaDescriptor *)&instance_p->descriptor_buffer.data_buffer[0], FNAND_READ_PAGE_TYPE); - - - if (ret != FT_SUCCESS) - { - return FNAND_ERR_OPERATION; - } - - if (buffer_length && id_buffer) - { - memcpy_length = (buffer_length > pack_data.phy_bytes_length) ? pack_data.phy_bytes_length : buffer_length; - FCacheDCacheFlushRange((intptr)instance_p->dma_data_buffer.data_buffer, memcpy_length); - memcpy(id_buffer, instance_p->dma_data_buffer.data_buffer, memcpy_length); - } - - return FT_SUCCESS; -} - -static FError FNandToggleDetectJedec(FNand *instance_p, struct ToggleNandGeometry *toggle_geometry_p, FNandNandGeometry *geometry_p) -{ - /* 检查crc */ - if (FNandToggleCrc16(FNAND_TOGGLE_CRC_BASE, (u8 *)toggle_geometry_p, 510) != toggle_geometry_p->crc) - { - FNAND_TOGGLE_DEBUG_E("Toggle error mode"); - } - - FNAND_TOGGLE_DEBUG_I("revision is %x", toggle_geometry_p->revision); - - FNandSanitizeString(toggle_geometry_p->manufacturer, sizeof(toggle_geometry_p->manufacturer)); - FNandSanitizeString(toggle_geometry_p->model, sizeof(toggle_geometry_p->model)); - FNAND_TOGGLE_DEBUG_I("manufacturer %s", toggle_geometry_p->manufacturer); - FNAND_TOGGLE_DEBUG_I("model %s", toggle_geometry_p->model); - - geometry_p->bytes_per_page = toggle_geometry_p->byte_per_page; - geometry_p->spare_bytes_per_page = toggle_geometry_p->spare_bytes_per_page; - geometry_p->pages_per_block = toggle_geometry_p->pages_per_block; - geometry_p->blocks_per_lun = toggle_geometry_p->blocks_per_lun ; - geometry_p->num_lun = toggle_geometry_p->lun_count; - geometry_p->num_pages = (geometry_p->num_lun * - geometry_p->blocks_per_lun * - geometry_p->pages_per_block); - geometry_p->num_blocks = (geometry_p->num_lun * geometry_p->blocks_per_lun); - geometry_p->block_size = (geometry_p->pages_per_block * geometry_p->bytes_per_page); - geometry_p->device_size = (geometry_p->num_blocks * geometry_p->block_size * geometry_p->bytes_per_page); - geometry_p->rowaddr_cycles = toggle_geometry_p->addr_cycles & 0xf; - geometry_p->coladdr_cycles = (toggle_geometry_p->addr_cycles >> 4) & 0xf ; - geometry_p->hw_ecc_length = FNandGetEccTotalLength(geometry_p->bytes_per_page, instance_p->config.ecc_strength); - geometry_p->ecc_offset = geometry_p->spare_bytes_per_page - geometry_p->hw_ecc_length; - geometry_p->hw_ecc_steps = geometry_p->bytes_per_page / instance_p->config.ecc_step_size ; - geometry_p->ecc_step_size = instance_p->config.ecc_step_size; - FNAND_TOGGLE_DEBUG_D("bytes_per_page %d ", geometry_p->bytes_per_page); /* Bytes per page */ - FNAND_TOGGLE_DEBUG_D("spare_bytes_per_page %d ", geometry_p->spare_bytes_per_page) ; /* Size of spare area in bytes */ - FNAND_TOGGLE_DEBUG_D("pages_per_block %d ", geometry_p->pages_per_block) ; /* Pages per block */ - FNAND_TOGGLE_DEBUG_D("blocks_per_lun %d ", geometry_p->blocks_per_lun) ; /* Bocks per LUN */ - FNAND_TOGGLE_DEBUG_D("num_lun %d ", geometry_p->num_lun) ; /* Total number of LUN */ - FNAND_TOGGLE_DEBUG_D("num_pages %d ", geometry_p->num_pages) ; /* Total number of pages in device */ - FNAND_TOGGLE_DEBUG_D("num_blocks %d ", geometry_p->num_blocks) ; /* Total number of blocks in device */ - FNAND_TOGGLE_DEBUG_D("block_size %d ", geometry_p->block_size) ; /* Size of a block in bytes */ - FNAND_TOGGLE_DEBUG_D("device_size %d ", geometry_p->device_size) ; /* Total device size in bytes */ - FNAND_TOGGLE_DEBUG_D("rowaddr_cycles %d ", geometry_p->rowaddr_cycles) ; /* Row address cycles */ - FNAND_TOGGLE_DEBUG_D("coladdr_cycles %d ", geometry_p->coladdr_cycles) ; /* Column address cycles */ - FNAND_TOGGLE_DEBUG_D("hw_ecc_length %d ", geometry_p->hw_ecc_length) ; /* 产生硬件ecc校验参数的个数 */ - FNAND_TOGGLE_DEBUG_D("ecc_offset %d ", geometry_p->ecc_offset) ; /* obb存放硬件ecc校验参数页位置的偏移 */ - FNAND_TOGGLE_DEBUG_D("hw_ecc_steps %d ", geometry_p->hw_ecc_steps) ; /* number of ECC steps per page */ - FNAND_TOGGLE_DEBUG_D("ecc_step_size %d ", geometry_p->ecc_step_size) ; /* 进行读写操作时,单次ecc 的步骤的跨度 */ - - - - return FT_SUCCESS; -} - - -/** - * @name: FNandToggleInit - * @msg: Toggle mode interface initialization - * @note: - * @param {FNand} *instance_p is the pointer to the FNand instance. - * @param {u32} chip_addr is chip address - * @return {FError} FT_SUCCESS 初始化成功 ,FNAND_NOT_FET_TOGGLE_MODE 初始化toggle 模式错误。 - */ -FError FNandToggleInit(FNand *instance_p, u32 chip_addr) -{ - FError ret; - char id[6]; - FASSERT(instance_p != NULL); - struct ToggleNandGeometry *toggle_geometry_p; - /* step 1 .reset nand chip */ - ret = FNandFlashReset(instance_p, chip_addr) ; - if (ret != FT_SUCCESS) - { - FNAND_TOGGLE_DEBUG_E("FNandFlashReset is error"); - return ret; - } - - /* step 2. readid operation 40h */ - ret = FNandFlashReadId(instance_p, 0x40, id, sizeof(id), chip_addr); - if (ret != FT_SUCCESS || strncmp(id, "JEDEC", sizeof(id) - 1)) - { - FNAND_TOGGLE_DEBUG_E("The id value read out from 40H is %s ", id); - return FNAND_NOT_FET_TOGGLE_MODE; - } - - if (id[5] == 1) - { - instance_p->inter_mode[chip_addr] = FNAND_ASYN_SDR; - } - else if (id[5] == 2) - { - instance_p->inter_mode[chip_addr] = FNAND_TOG_ASYN_DDR; - } - else if (id[5] == 4) - { - instance_p->inter_mode[chip_addr] = FNAND_ASYN_SDR; - } - - FNandTimingInterfaceUpdate(instance_p, chip_addr); - - /* step 3. read device id table */ - - ret = FNandToggleReadParamPage(instance_p, NULL, 0, chip_addr); - if (ret != FT_SUCCESS) - { - FNAND_TOGGLE_DEBUG_E("An error occured when reading device id table"); - return FNAND_NOT_FET_TOGGLE_MODE; - } - - /* step 4. device id table parse */ - toggle_geometry_p = (struct ToggleNandGeometry *)instance_p->dma_data_buffer.data_buffer; - - return FNandToggleDetectJedec(instance_p, toggle_geometry_p, &instance_p->nand_geometry[chip_addr]); -} diff --git a/bsp/phytium/libraries/standalone/drivers/nand/fnand/manufacturer/fnand_toggle.h b/bsp/phytium/libraries/standalone/drivers/nand/fnand/manufacturer/fnand_toggle.h deleted file mode 100644 index 38513ca064..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/nand/fnand/manufacturer/fnand_toggle.h +++ /dev/null @@ -1,160 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fnand_toggle.h - * Date: 2022-07-05 20:00:45 - * LastEditTime: 2022-07-05 20:00:45 - * Description: This file is for toggle nand - * - * Modify History: - * Ver Who Date Changes - * ----- ------ -------- -------------------------------------- - * 1.0 huanghe 2022/05/10 first release - */ - -#ifndef DRIVERS_NAND_FNAND_TOGGLE_H -#define DRIVERS_NAND_FNAND_TOGGLE_H - - -#include "ftypes.h" -#include "fnand.h" - - -#ifdef __cplusplus -extern "C" -{ -#endif - - -/* - * Mandatory commands - */ - -#define TOGGLE_CMD_READ1 0x00 -#define TOGGLE_CMD_READ2 0x30 - -#define TOGGLE_CMD_CHANGE_READ_COLUMN1 0x05 /* TOGGLE Change Read \ - Column command (1st \ -cycle) */ -#define TOGGLE_CMD_CHANGE_READ_COLUMN2 0xE0 /* TOGGLE Change Read \ - Column command (2nd \ -cycle) */ -#define TOGGLE_CMD_BLOCK_ERASE1 0x60 /* TOGGLE Block Erase \ -(1st cycle) */ -#define TOGGLE_CMD_BLOCK_ERASE2 0xD0 /* TOGGLE Block Erase \ -(2nd cycle) */ -#define TOGGLE_CMD_READ_STATUS 0x70 /* TOGGLE Read status \ -command */ -#define TOGGLE_CMD_PAGE_PROG1 0x80 /* TOGGLE Page Program \ - command (1st cycle) \ -*/ -#define TOGGLE_CMD_PAGE_PROG2 0x10 /* TOGGLE Page Program \ - command (2nd cycle) \ -*/ -#define TOGGLE_CMD_CHANGE_WRITE_COLUMN 0x85 /* TOGGLE Change Write \ -Column command */ -#define TOGGLE_CMD_READ_ID 0x90 /* TOGGLE Read ID \ -command */ -#define TOGGLE_CMD_READ_PARAM_PAGE 0xEC /* TOGGLE Read \ - Parameter Page \ -command */ -#define TOGGLE_CMD_RESET 0xFF /* TOGGLE Reset \ -command */ - -#define TOGGLE_END_CMD_NONE 0xfff /* No End command */ - - -struct jedec_ecc_info -{ - u8 ecc_bits; - u8 codeword_size; - u16 bb_per_lun; - u16 block_endurance; - u8 reserved[2]; -} __attribute__((packed)); - -struct ToggleNandGeometry -{ - u8 sig[4]; /* Parameter page signature */ - u16 revision; /* Revision number */ - u16 features; /* Features supported */ - u8 opt_cmd[3]; /* Optional commands supported */ - u16 sec_cmd; - u8 num_of_param_pages; - u8 reserved0[18]; - - /* manufacturer information block */ - char manufacturer[12]; /* Device manufacturer */ - char model[20]; /* Device model */ - u8 jedec_id[6]; /* JEDEC manufacturer ID */ - u8 reserved1[10]; - - /* memory organization block */ - u32 byte_per_page; /* Number of data bytes per page */ - u16 spare_bytes_per_page; /* Number of spare bytes per page */ - u8 reserved2[6]; /* */ - u32 pages_per_block; /* Number of pages per block */ - u32 blocks_per_lun; /* Number of blocks per logical unit */ - u8 lun_count; /* Number of logical unit */ - u8 addr_cycles; - u8 bits_per_cell; - u8 programs_per_page; - u8 multi_plane_addr; - u8 multi_plane_op_attr; - u8 reserved3[38]; - - /* electrical parameter block */ - u16 async_sdr_speed_grade; - u16 toggle_ddr_speed_grade; - u16 sync_ddr_speed_grade; - u8 async_sdr_features; - u8 toggle_ddr_features; - u8 sync_ddr_features; - u16 t_prog; - u16 t_bers; - u16 t_r; - u16 t_r_multi_plane; - u16 t_ccs; - u16 io_pin_capacitance_typ; - u16 input_pin_capacitance_typ; - u16 clk_pin_capacitance_typ; - u8 driver_strength_support; - u16 t_adl; - u8 reserved4[36]; - - /* ECC and endurance block */ - u8 guaranteed_good_blocks; - u16 guaranteed_block_endurance; - struct jedec_ecc_info ecc_info[4]; - u8 reserved5[29]; - - /* reserved */ - u8 reserved6[148]; - - /* vendor */ - u16 vendor_rev_num; - u8 reserved7[88]; - - /* CRC for Parameter Page */ - u16 crc; - -} __attribute__((__packed__)); - - -#ifdef __cplusplus -} -#endif - -#endif // ! - - diff --git a/bsp/phytium/libraries/standalone/drivers/nand/fnand/manufacturer/fnand_toshiba.c b/bsp/phytium/libraries/standalone/drivers/nand/fnand/manufacturer/fnand_toshiba.c deleted file mode 100644 index 1f570217b1..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/nand/fnand/manufacturer/fnand_toshiba.c +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fnand_toshiba.c - * Date: 2022-07-06 08:32:43 - * LastEditTime: 2022-07-06 08:32:44 - * Description: This file is for toshiba nand - * - * Modify History: - * Ver Who Date Changes - * ----- ------ -------- -------------------------------------- - * 1.0 huanghe 2022/05/10 first release - */ - - -#include "fnand.h" -#include "fnand_id.h" -#include "fnand_ecc.h" -#include "fdebug.h" -#include "sdkconfig.h" - - -#define FNAND_T_NAND_DEBUG_TAG "FNAND_T_NAND" -#define CONFIG_FNAND_T_NAND_DEBUG_EN -// #define CONFIG_FNAND_T_NAND_DEBUG_EN -#ifdef CONFIG_FNAND_T_NAND_DEBUG_EN - #define FNAND_T_NAND_DEBUG_I(format, ...) FT_DEBUG_PRINT_I(FNAND_T_NAND_DEBUG_TAG, format, ##__VA_ARGS__) - #define FNAND_T_NAND_DEBUG_W(format, ...) FT_DEBUG_PRINT_W(FNAND_T_NAND_DEBUG_TAG, format, ##__VA_ARGS__) - #define FNAND_T_NAND_DEBUG_E(format, ...) FT_DEBUG_PRINT_E(FNAND_T_NAND_DEBUG_TAG, format, ##__VA_ARGS__) - #define FNAND_T_NAND_DEBUG_D(format, ...) FT_DEBUG_PRINT_D(FNAND_T_NAND_DEBUG_TAG, format, ##__VA_ARGS__) -#else - #define FNAND_T_NAND_DEBUG_I(format, ...) - #define FNAND_T_NAND_DEBUG_W(format, ...) - #define FNAND_T_NAND_DEBUG_E(format, ...) - #define FNAND_T_NAND_DEBUG_D(format, ...) -#endif - -static FError TC58NVM9S3ETAI0_CHECK(FNand *instance_p, FNandId *id_p, u32 chip_addr) -{ - FNandNandGeometry *geometry_p = &instance_p->nand_geometry[chip_addr]; - - if (((id_p->data[3] & 0x3) == 1)) /* */ - { - FNAND_T_NAND_DEBUG_I("TC58NVM9S3ETAI0 is checked") ; - geometry_p->bytes_per_page = 2048; - geometry_p->spare_bytes_per_page = 64; - geometry_p->pages_per_block = 64; - geometry_p->blocks_per_lun = 512; - geometry_p->num_lun = 1; - geometry_p->num_pages = (geometry_p->num_lun * - geometry_p->blocks_per_lun * - geometry_p->pages_per_block); - geometry_p->num_blocks = (geometry_p->num_lun * geometry_p->blocks_per_lun); - geometry_p->block_size = (geometry_p->pages_per_block * geometry_p->bytes_per_page); - geometry_p->device_size = (geometry_p->num_blocks * geometry_p->block_size * geometry_p->bytes_per_page); - geometry_p->rowaddr_cycles = 3; - geometry_p->coladdr_cycles = 2 ; - geometry_p->hw_ecc_length = FNandGetEccTotalLength(geometry_p->bytes_per_page, instance_p->config.ecc_strength); - geometry_p->ecc_offset = geometry_p->spare_bytes_per_page - geometry_p->hw_ecc_length; - geometry_p->hw_ecc_steps = geometry_p->bytes_per_page / instance_p->config.ecc_step_size ; - geometry_p->ecc_step_size = instance_p->config.ecc_step_size; - FNAND_T_NAND_DEBUG_D("bytes_per_page %d ", geometry_p->bytes_per_page); /* Bytes per page */ - FNAND_T_NAND_DEBUG_D("spare_bytes_per_page %d ", geometry_p->spare_bytes_per_page) ; /* Size of spare area in bytes */ - FNAND_T_NAND_DEBUG_D("pages_per_block %d ", geometry_p->pages_per_block) ; /* Pages per block */ - FNAND_T_NAND_DEBUG_D("blocks_per_lun %d ", geometry_p->blocks_per_lun) ; /* Bocks per LUN */ - FNAND_T_NAND_DEBUG_D("num_lun %d ", geometry_p->num_lun) ; /* Total number of LUN */ - FNAND_T_NAND_DEBUG_D("num_pages %d ", geometry_p->num_pages) ; /* Total number of pages in device */ - FNAND_T_NAND_DEBUG_D("num_blocks %d ", geometry_p->num_blocks) ; /* Total number of blocks in device */ - FNAND_T_NAND_DEBUG_D("block_size %d ", geometry_p->block_size) ; /* Size of a block in bytes */ - FNAND_T_NAND_DEBUG_D("device_size %d ", geometry_p->device_size) ; /* Total device size in bytes */ - FNAND_T_NAND_DEBUG_D("rowaddr_cycles %d ", geometry_p->rowaddr_cycles) ; /* Row address cycles */ - FNAND_T_NAND_DEBUG_D("coladdr_cycles %d ", geometry_p->coladdr_cycles) ; /* Column address cycles */ - FNAND_T_NAND_DEBUG_D("hw_ecc_length %d ", geometry_p->hw_ecc_length) ; /* 产生硬件ecc校验参数的个数 */ - FNAND_T_NAND_DEBUG_D("ecc_offset %d ", geometry_p->ecc_offset) ; /* obb存放硬件ecc校验参数页位置的偏移 */ - FNAND_T_NAND_DEBUG_D("hw_ecc_steps %d ", geometry_p->hw_ecc_steps) ; /* number of ECC steps per page */ - FNAND_T_NAND_DEBUG_D("ecc_step_size %d ", geometry_p->ecc_step_size) ; /* 进行读写操作时,单次ecc 的步骤的跨度 */ - } - else - { - FNAND_T_NAND_DEBUG_E("TC58NVM9S3ETAI0_CHECK error"); - return FNAND_ERR_NOT_MATCH; - } - - return FT_SUCCESS; -} - -FError toshiba_nand_decode_id(FNand *instance_p, FNandId *id_p, u32 chip_addr) -{ - - switch (id_p->data[1]) - { - case 0xf0: - return TC58NVM9S3ETAI0_CHECK(instance_p, id_p, chip_addr) ; - break; - default: - FNAND_T_NAND_DEBUG_E("Driver not supported 0x%x device", id_p->data[1]) ; - return FNAND_ERR_NOT_MATCH; - } -} - -const struct FNandManuFacturerOps toshiba_ops = {.detect = toshiba_nand_decode_id}; diff --git a/bsp/phytium/libraries/standalone/drivers/pcie/Kconfig b/bsp/phytium/libraries/standalone/drivers/pcie/Kconfig deleted file mode 100644 index c4476fa491..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/pcie/Kconfig +++ /dev/null @@ -1,9 +0,0 @@ - -menu "Pcie Configuration" - config ENABLE_F_PCIE - bool - prompt "Use F_PCIE" - default n - -endmenu - diff --git a/bsp/phytium/libraries/standalone/drivers/pcie/fpcie/fpcie.c b/bsp/phytium/libraries/standalone/drivers/pcie/fpcie/fpcie.c deleted file mode 100644 index bd256f5cb6..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/pcie/fpcie/fpcie.c +++ /dev/null @@ -1,858 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fpcie.c - * Date: 2022-08-10 14:55:11 - * LastEditTime: 2022-08-18 08:59:28 - * Description: This file is for the minimum required function implementations for this driver. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/8/18 init commit - */ - -/***************************** Include Files *********************************/ -#include "fpcie.h" -#include "fpcie_hw.h" -#include "fpcie_common.h" -#include "fparameters.h" -#include "fkernel.h" -#include -#include -#include "fdebug.h" - - -#define CONFIG_SYS_PCI_CACHE_LINE_SIZE 8 -#define upper_32_bits(n) ((u32)(((n) >> 16) >> 16)) - - -/***************** Macros (Inline Functions) Definitions *********************/ - -#define FPCIE_DEBUG_TAG "FPCIE" -#define FPCIE_ERROR(format, ...) FT_DEBUG_PRINT_E(FPCIE_DEBUG_TAG, format, ##__VA_ARGS__) -#define FPCIE_DEBUG_I(format, ...) FT_DEBUG_PRINT_I(FPCIE_DEBUG_TAG, format, ##__VA_ARGS__) -#define FPCIE_DEBUG_W(format, ...) FT_DEBUG_PRINT_W(FPCIE_DEBUG_TAG, format, ##__VA_ARGS__) -#define FPCIE_DEBUG_E(format, ...) FT_DEBUG_PRINT_E(FPCIE_DEBUG_TAG, format, ##__VA_ARGS__) - - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/************************** Variable Definitions *****************************/ - -extern int FPcieEpCleanBar(FPcie *instance_p, u32 peu_num, u32 bar_num) ; - -static void FPcieShowRegion(const char *name, struct FPcieRegion *region) -{ - FPCIE_DEBUG_I("Pci auto config: bus %s region: [0x%llx-0x%llx],\n" - "\t\tphysical memory [0x%llx-0x%llx]", name, - (unsigned long long)region->bus_start, - (unsigned long long)(region->bus_start + region->size - 1), - (unsigned long long)region->phys_start, - (unsigned long long)(region->phys_start + region->size - 1)); - FPCIE_DEBUG_I("Bus lower is 0x%llx", (unsigned long long)region->bus_lower) ; -} - -/** - * @name: FPcieRegionConfigInit - * @msg: 初始化PEU 用于分配的地址空间 - * @param {FPcie} *instance_p is a pointer to the FPcie instance. - * @param {FPcieRegion} *regs 地址空间对应的指针 - * @param {u32} regs_num 传入regs 结构体的数量 - */ -//用于资源初始化到instance_p中 -static void FPcieRegionConfigInit(FPcie *instance_p, struct FPcieRegion *regs, u32 regs_num) -{ - u32 i ; - - for (i = 0; i < regs_num; i++) - { - switch (regs[i].flags) - { - case FPCIE_REGION_IO: - memset(&instance_p->mem_io, 0, sizeof(struct FPcieRegion)) ; - memcpy(&instance_p->mem_io, regs, sizeof(struct FPcieRegion)) ; - instance_p->mem_io.exist_flg = FPCIE_REGION_EXIST_FLG ; - instance_p->mem_io.bus_lower = instance_p->mem_io.phys_start; - FPcieShowRegion("I/O", &instance_p->mem_io); - break; - case FPCIE_REGION_MEM: - memset(&instance_p->mem, 0, sizeof(struct FPcieRegion)) ; - memcpy(&instance_p->mem, regs, sizeof(struct FPcieRegion)) ; - instance_p->mem.exist_flg = FPCIE_REGION_EXIST_FLG ; - instance_p->mem.bus_lower = instance_p->mem.phys_start; - FPcieShowRegion("Memory", &instance_p->mem); - break; - case (PCI_REGION_PREFETCH|FPCIE_REGION_MEM): - memset(&instance_p->mem_prefetch, 0, sizeof(struct FPcieRegion)) ; - memcpy(&instance_p->mem_prefetch, regs, sizeof(struct FPcieRegion)) ; - instance_p->mem_prefetch.exist_flg = FPCIE_REGION_EXIST_FLG ; - instance_p->mem_prefetch.bus_lower = instance_p->mem_prefetch.phys_start; - FPcieShowRegion("Prefetchable Mem", &instance_p->mem_prefetch); - break; - default: - break; - } - } -} - -/** - * @name: FPcieCfgInitialize - * @msg: This function initializes the config space and PCIe bridge. - * @param {FPcie} *instance_p is a pointer to the FPcie instance. - * @param {FPcieConfig} *config_p pointer to FPcieConfig instrance Pointer. - * @return FError - */ -FError FPcieCfgInitialize(FPcie *instance_p, FPcieConfig *config_p) //用于从全局配置数据中获取数据,初始化instance_p -{ - fsize_t i; - struct FPcieRegion mem_region = {0} ; - struct FPcieRegion prefetch_region = {0} ; - struct FPcieRegion io_region = {0} ; - - /* Assert arguments */ - FASSERT(instance_p != NULL); - FASSERT(config_p != NULL); - - /* Clear instance memory and make copy of configuration */ - memset(instance_p, 0, sizeof(FPcie)); - memcpy(&instance_p->config, config_p, sizeof(FPcieConfig)); - - /* 为枚举过程中,涉及的配置空间提供地址划分 */ - /* mem32 地址 */ //使用获取到的硬件信息,来初始化mem32 - mem_region.phys_start = instance_p->config.npmem_base_addr ; - mem_region.bus_start = instance_p->config.npmem_base_addr ; - mem_region.size = instance_p->config.npmem_size ; - mem_region.flags = FPCIE_REGION_MEM ; - - /* mem64 地址 */ //使用获取到的硬件信息,来初始化mem64 - prefetch_region.phys_start = instance_p->config.pmem_base_addr ; - prefetch_region.bus_start = instance_p->config.pmem_base_addr ; - prefetch_region.size = instance_p->config.pmem_size ; - prefetch_region.flags = (PCI_REGION_PREFETCH | FPCIE_REGION_MEM); - - /* memio 地址 */ //使用获取到的硬件信息,来初始化io - io_region.phys_start = instance_p->config.io_base_addr ; - io_region.bus_start = instance_p->config.io_base_addr ; - io_region.size = instance_p->config.io_size ; - io_region.flags = FPCIE_REGION_IO; - - /* scaned bdf array clean */ - instance_p->scaned_bdf_count = 0; - - FPcieRegionConfigInit(instance_p, &mem_region, 1) ; -#if defined(__aarch64__) - FPcieRegionConfigInit(instance_p, &prefetch_region, 1) ; -#endif - FPcieRegionConfigInit(instance_p, &io_region, 1) ; - - instance_p->is_ready = FT_COMPONENT_IS_READY; - - return (FT_SUCCESS); -} - -u32 FPcieFindCapability(FPcie *instance_p, u32 bdf, u32 cid_type, u32 cid, u32 *cid_offset) -{ - - u32 reg_value; - u32 next_cap_offset; - - if (cid_type == PCIE_CAP) - { - - /* Serach in PCIe configuration space */ - FPcieEcamReadConfig32bit(instance_p->config.ecam, bdf, FPCIE_CAPABILITY_LIST, ®_value); - if (reg_value == 0xffffffff) - { - return -1; - } - - next_cap_offset = (reg_value & 0xff); - while (next_cap_offset) - { - FPcieEcamReadConfig32bit(instance_p->config.ecam, bdf, next_cap_offset, ®_value); - if ((reg_value & 0xff) == cid) - { - *cid_offset = next_cap_offset; - return 0; - } - next_cap_offset = ((reg_value >> 8) & 0xff); - } - } - else if (cid_type == PCIE_ECAP) - { - - /* Serach in PCIe extended configuration space */ - next_cap_offset = FPCIE_ECAP_START; - while (next_cap_offset) - { - FPcieEcamReadConfig32bit(instance_p->config.ecam, bdf, next_cap_offset, ®_value); - if ((reg_value & 0xffff) == cid) - { - *cid_offset = next_cap_offset; - return 0; - } - next_cap_offset = ((reg_value >> 20) & 0xfff); - } - } - - /* The capability was not found */ - return -1; -} - -const char *FPcieClassStr(u8 class) -{ - switch (class) - { - case FPCI_CLASS_NOT_DEFINED: - return "Build before PCI Rev2.0"; - break; - case FPCI_BASE_CLASS_STORAGE: - return "Mass storage controller"; - break; - case FPCI_BASE_CLASS_NETWORK: - return "Network controller"; - break; - case FPCI_BASE_CLASS_DISPLAY: - return "Display controller"; - break; - case FPCI_BASE_CLASS_MULTIMEDIA: - return "Multimedia device"; - break; - case FPCI_BASE_CLASS_MEMORY: - return "Memory controller"; - break; - case FPCI_BASE_CLASS_BRIDGE: - return "Bridge device"; - break; - case FPCI_BASE_CLASS_COMMUNICATION: - return "Simple comm. controller"; - break; - case FPCI_BASE_CLASS_SYSTEM: - return "Base system peripheral"; - break; - case FPCI_BASE_CLASS_INPUT: - return "Input device"; - break; - case FPCI_BASE_CLASS_DOCKING: - return "Docking station"; - break; - case FPCI_BASE_CLASS_PROCESSOR: - return "Processor"; - break; - case FPCI_BASE_CLASS_SERIAL: - return "Serial bus controller"; - break; - case FPCI_BASE_CLASS_INTELLIGENT: - return "Intelligent controller"; - break; - case FPCI_BASE_CLASS_SATELLITE: - return "Satellite controller"; - break; - case FPCI_BASE_CLASS_CRYPT: - return "Cryptographic device"; - break; - case FPCI_BASE_CLASS_SIGNAL_PROCESSING: - return "DSP"; - break; - case FPCI_CLASS_OTHERS: - return "Does not fit any class"; - break; - default: - return "???"; - break; - }; -} - - -void FPcieAutoRegionAlign(struct FPcieRegion *res, pci_size_t size) -{ - res->bus_lower = ((res->bus_lower - 1) | (size - 1)) + 1; -} - -int FPcieAutoRegionAllocate(struct FPcieRegion *res, pci_size_t size, - pci_addr_t *bar, bool supports_64bit) -{ - pci_addr_t addr; - - if (!res) - { - FPCIE_DEBUG_E("No resource."); - goto error; - } - - addr = ((res->bus_lower - 1) | (size - 1)) + 1; - - if (addr - res->bus_start + size > res->size) - { - FPCIE_DEBUG_E("No room in resource."); - goto error; - } - - if (upper_32_bits(addr) && !supports_64bit) - { - FPCIE_DEBUG_E("Cannot assign 64-bit address to 32-bit-only resource."); - goto error; - } - - res->bus_lower = addr + size; - - *bar = addr; - return 0; - -error: - *bar = (pci_addr_t) -1; - return -1; -} - - - -/* This function uses BAR to request IO or MMIO space and configure the expansion ROM address */ -void FPcieAutoSetupDevice(FPcie *instance_p, u32 bdf, int bars_num, - struct FPcieRegion *mem, - struct FPcieRegion *prefetch, struct FPcieRegion *io, - bool enum_only) -{ - u32 bar_response; - pci_size_t bar_size; - u16 cmdstat = 0; - int bar, bar_nr = 0; - u8 header_type; - int rom_addr; - pci_addr_t bar_value; - struct FPcieRegion *bar_res = NULL; - int found_mem64 = 0; - u16 class; - - /* Command register: enable or disable the access to I/O and memory */ - FPcieEcamReadConfig16bit(instance_p->config.ecam, bdf, FPCIE_COMMAND_REG, &cmdstat); - cmdstat = (cmdstat & ~(FPCIE_COMMAND_IO | FPCIE_COMMAND_MEMORY)) | - FPCIE_COMMAND_MASTER; - - for (bar = FPCIE_BASE_ADDRESS_0; - bar < FPCIE_BASE_ADDRESS_0 + (bars_num * 4); bar += 4) - { - /* Tickle the BAR and get the response */ - if (!enum_only) - { - FPcieEcamWriteConfig32bit(instance_p->config.ecam, bdf, bar, 0xffffffff); - } - - FPcieEcamReadConfig32bit(instance_p->config.ecam, bdf, bar, &bar_response); - - /* If BAR is not implemented go to the next BAR */ - if (!bar_response) - { - continue; - } - - found_mem64 = 0; - - /* Check the BAR type and set our address mask */ - if (bar_response & FPCIE_BASE_ADDRESS_SPACE) - { - /* formula to get addr space of BAR */ - bar_size = ((~(bar_response & FPCIE_BASE_ADDRESS_IO_MASK)) - & 0xffff) + 1; - if (!enum_only) - { - bar_res = io; - } - - } - else - { - if ((bar_response & FPCIE_BASE_ADDRESS_MEM_TYPE_MASK) == - FPCIE_BASE_ADDRESS_MEM_TYPE_64) - { - u32 bar_response_upper; - u64 bar64; - - if (!enum_only) - { - FPcieEcamWriteConfig32bit(instance_p->config.ecam, bdf, bar + 4, 0xffffffff); - } - FPcieEcamReadConfig32bit(instance_p->config.ecam, bdf, bar + 4, &bar_response_upper); - - bar64 = ((u64)bar_response_upper << 32) | - bar_response; - - bar_size = ~(bar64 & FPCIE_BASE_ADDRESS_MEM_MASK) - + 1; - if (!enum_only) - { - found_mem64 = 1; - } - } - else - { - bar_size = (u32)(~(bar_response & - FPCIE_BASE_ADDRESS_MEM_MASK) + 1); - } - if (!enum_only) - { - if ((prefetch->exist_flg & FPCIE_REGION_EXIST_FLG) & (bar_response & - FPCIE_BASE_ADDRESS_MEM_PREFETCH)) - { - bar_res = prefetch; - } - else - { - bar_res = mem; - } - } - } - - if (!enum_only && FPcieAutoRegionAllocate(bar_res, bar_size, - &bar_value, - found_mem64) == 0) - { - /* Write it out and update our limit */ - FPcieEcamWriteConfig32bit(instance_p->config.ecam, bdf, bar, (u32)bar_value); - - if (found_mem64) - { - bar += 4; - -#ifdef CONFIG_SYS_PCI_64BIT - FPcieEcamWriteConfig32bit(instance_p->config.ecam, bdf, bar, (u32)(bar_value >> 32)); -#else - /* - * If we are a 64-bit decoder then increment to - * the upper 32 bits of the bar and force it to - * locate in the lower 4GB of memory. - */ - FPcieEcamWriteConfig32bit(instance_p->config.ecam, bdf, bar, 0x00000000); -#endif - } - } - - cmdstat |= (bar_response & FPCIE_BASE_ADDRESS_SPACE) ? - FPCIE_COMMAND_IO : FPCIE_COMMAND_MEMORY; - - bar_nr++; - } - - if (!enum_only) - { - /* Configure the expansion ROM address */ - FPcieEcamReadConfig8bit(instance_p->config.ecam, bdf, FPCIE_HEADER_TYPE_REG, &header_type); - header_type &= 0x7f; - if (header_type != FPCIE_HEADER_TYPE_CARDBUS) - { - rom_addr = (header_type == FPCIE_HEADER_TYPE_NORMAL) ? - FPCIE_ROM_ADDRESS : FPCIE_ROM_ADDRESS1; - FPcieEcamWriteConfig32bit(instance_p->config.ecam, bdf, rom_addr, 0xfffffffe); - FPcieEcamReadConfig32bit(instance_p->config.ecam, bdf, rom_addr, &bar_response); - if (bar_response) - { - bar_size = -(bar_response & ~1); - - if (FPcieAutoRegionAllocate(mem, bar_size, - &bar_value, - false) == 0) - { - FPcieEcamWriteConfig32bit(instance_p->config.ecam, bdf, rom_addr, bar_value); - - } - cmdstat |= FPCIE_COMMAND_MEMORY; - } - } - } - - /* PCI_COMMAND_IO must be set for VGA device */ - FPcieEcamReadConfig16bit(instance_p->config.ecam, bdf, FPCI_CLASS_DEVICE_REG, &class); - if (class == FPCI_CLASS_DISPLAY_VGA) - { - cmdstat |= FPCIE_COMMAND_IO; - } - - FPcieEcamWriteConfig16bit(instance_p->config.ecam, bdf, FPCIE_COMMAND_REG, cmdstat); - FPcieEcamWriteConfig8bit(instance_p->config.ecam, bdf, FPCIE_CACHE_LINE_SIZE_REG, - CONFIG_SYS_PCI_CACHE_LINE_SIZE); - FPcieEcamWriteConfig8bit(instance_p->config.ecam, bdf, FPCIE_LATENCY_TIMER_REG, 0x80); -} - -void FPcieAutoPrescanSetupBridge(FPcie *instance_p, u32 bdf, int sub_bus) -{ - struct FPcieRegion *pci_mem; - struct FPcieRegion *pci_prefetch; - struct FPcieRegion *pci_io; - u16 cmdstat, prefechable_64; - - pci_mem = &(instance_p->mem); - pci_prefetch = &(instance_p->mem_prefetch); - pci_io = &(instance_p->mem_io); - - FPcieEcamReadConfig16bit(instance_p->config.ecam, bdf, FPCIE_COMMAND_REG, &cmdstat) ; - FPcieEcamReadConfig16bit(instance_p->config.ecam, bdf, FPCIE_PREF_MEMORY_BASE_REG, &prefechable_64) ; - prefechable_64 &= FPCIE_PREF_RANGE_TYPE_MASK; - - /* Configure bus number registers *///暂时只有一个pcie配置空间的做法,如果多个pci配置空间,则需当前bus减去该配置空间对应设备的起始bus号 - FPcieEcamWriteConfig8bit(instance_p->config.ecam, bdf, FPCIE_PRIMARY_BUS_REG, FPCIE_BUS(bdf)); - FPcieEcamWriteConfig8bit(instance_p->config.ecam, bdf, FPCIE_SECONDARY_BUS_REG, sub_bus); - FPcieEcamWriteConfig8bit(instance_p->config.ecam, bdf, FPCIE_SUBORDINATE_BUS_REG, 0xff); - - if (pci_mem->exist_flg & FPCIE_REGION_EXIST_FLG) - { - /* Round memory allocator to 1MB boundary */ - FPcieAutoRegionAlign(pci_mem, 0x100000); - - /* - * Set up memory and I/O filter limits, assume 32-bit - * I/O space - */ - FPcieEcamWriteConfig16bit(instance_p->config.ecam, bdf, FPCIE_MEMORY_BASE_REG, - (pci_mem->bus_lower & 0xfff00000) >> 16); - - cmdstat |= FPCIE_COMMAND_MEMORY; - } - - if (pci_prefetch->exist_flg & FPCIE_REGION_EXIST_FLG) - { - /* Round memory allocator to 1MB boundary */ - FPcieAutoRegionAlign(pci_prefetch, 0x100000); - - /* - * Set up memory and I/O filter limits, assume 32-bit - * I/O space - */ - FPcieEcamWriteConfig16bit(instance_p->config.ecam, bdf, FPCIE_PREF_MEMORY_BASE_REG, - (pci_prefetch->bus_lower & 0xfff00000) >> 16); - - if (prefechable_64 == FPCIE_PREF_RANGE_TYPE_64) -#ifdef CONFIG_SYS_PCI_64BIT - FPcieEcamWriteConfig32bit(instance_p->config.ecam, bdf, FPCIE_PREF_BASE_UPPER32_REG, - pci_prefetch->bus_lower >> 32); -#else - FPcieEcamWriteConfig32bit(instance_p->config.ecam, bdf, FPCIE_PREF_BASE_UPPER32_REG, - 0x0); -#endif - - cmdstat |= FPCIE_COMMAND_MEMORY; - } - else - { - /* We don't support prefetchable memory for now, so disable */ - FPcieEcamWriteConfig16bit(instance_p->config.ecam, bdf, FPCIE_PREF_MEMORY_BASE_REG, 0x1000); - FPcieEcamWriteConfig16bit(instance_p->config.ecam, bdf, FPCIE_PREF_MEMORY_LIMIT_REG, 0x0); - if (prefechable_64 == FPCIE_PREF_RANGE_TYPE_64) - { - FPcieEcamWriteConfig16bit(instance_p->config.ecam, bdf, FPCIE_PREF_BASE_UPPER32_REG, 0x0); - FPcieEcamWriteConfig16bit(instance_p->config.ecam, bdf, FPCIE_PREF_LIMIT_UPPER32_REG, 0x0); - } - } - - if (pci_io->exist_flg & FPCIE_REGION_EXIST_FLG) - { - /* Round I/O allocator to 4KB boundary */ - FPcieAutoRegionAlign(pci_io, 0x1000); - - FPcieEcamWriteConfig8bit(instance_p->config.ecam, bdf, FPCIE_IO_BASE_REG, - (pci_io->bus_lower & 0x0000f000) >> 8); - FPcieEcamWriteConfig16bit(instance_p->config.ecam, bdf, FPCIE_IO_BASE_UPPER16_REG, - (pci_io->bus_lower & 0xffff0000) >> 16); - - cmdstat |= FPCIE_COMMAND_IO; - } - - /* Enable memory and I/O accesses, enable bus master */ - FPcieEcamWriteConfig16bit(instance_p->config.ecam, bdf, FPCIE_COMMAND_REG, cmdstat | FPCIE_COMMAND_MASTER); -} - - -void FPcieAutoPostscanSetupBridge(FPcie *instance_p, u32 bdf, int sub_bus) -{ - struct FPcieRegion *pci_mem; - struct FPcieRegion *pci_prefetch; - struct FPcieRegion *pci_io; - - pci_mem = &(instance_p->mem); - pci_prefetch = &(instance_p->mem_prefetch); - pci_io = &(instance_p->mem_io); - - /* Configure bus number registers */ - FPcieEcamWriteConfig8bit(instance_p->config.ecam, bdf, FPCIE_SUBORDINATE_BUS_REG, sub_bus);//配置一下subordinate-bus,可能在固件下不一定必须用 - - if (pci_mem->exist_flg & FPCIE_REGION_EXIST_FLG) - { - /* Round memory allocator to 1MB boundary */ - FPcieAutoRegionAlign(pci_mem, 0x100000); - - FPcieEcamWriteConfig16bit(instance_p->config.ecam, bdf, FPCIE_MEMORY_LIMIT_REG, (pci_mem->bus_lower - 1) >> 16); - } - - if (pci_prefetch->exist_flg & FPCIE_REGION_EXIST_FLG) - { - u16 prefechable_64; - - FPcieEcamReadConfig16bit(instance_p->config.ecam, bdf, FPCIE_PREF_MEMORY_LIMIT_REG, &prefechable_64); - prefechable_64 &= FPCIE_PREF_RANGE_TYPE_MASK; - - /* Round memory allocator to 1MB boundary */ - FPcieAutoRegionAlign(pci_prefetch, 0x100000); - - FPcieEcamWriteConfig16bit(instance_p->config.ecam, bdf, FPCIE_PREF_MEMORY_LIMIT_REG, (pci_prefetch->bus_lower - 1) >> 16); - if (prefechable_64 == FPCIE_PREF_RANGE_TYPE_64) -#ifdef CONFIG_SYS_PCI_64BIT - - FPcieEcamWriteConfig32bit(instance_p->config.ecam, bdf, FPCIE_PREF_LIMIT_UPPER32_REG, - (pci_prefetch->bus_lower - 1) >> 32); -#else - FPcieEcamWriteConfig32bit(instance_p->config.ecam, bdf, FPCIE_PREF_LIMIT_UPPER32_REG, 0x0); -#endif - } - - if (pci_io->exist_flg & FPCIE_REGION_EXIST_FLG) - { - /* Round I/O allocator to 4KB boundary */ - FPcieAutoRegionAlign(pci_io, 0x1000); - - FPcieEcamWriteConfig8bit(instance_p->config.ecam, bdf, FPCIE_IO_LIMIT_REG, - ((pci_io->bus_lower - 1) & 0x0000f000) >> 8); - FPcieEcamWriteConfig16bit(instance_p->config.ecam, bdf, FPCIE_IO_LIMIT_UPPER16_REG, - ((pci_io->bus_lower - 1) & 0xffff0000) >> 16); - } -} - - -int FPcieHoseProbeBus(FPcie *instance_p, u32 bdf) -{ - int sub_bus; - int ret; - - instance_p->bus_max = instance_p->bus_max + 1; - - sub_bus = instance_p->bus_max; - - FPcieAutoPrescanSetupBridge(instance_p, bdf, sub_bus); - - FPcieScanBus(instance_p, sub_bus, bdf); - - sub_bus = instance_p->bus_max; - FPcieAutoPostscanSetupBridge(instance_p, bdf, sub_bus); - - return sub_bus; -} - -/* - * HJF: Changed this to return int. I think this is required - * to get the correct result when scanning bridges - */ -int FPcieAutoConfigDevice(FPcie *instance_p, u32 bdf) -{ - u16 class = 0; - - struct FPcieRegion *pci_mem; - struct FPcieRegion *pci_prefetch; - struct FPcieRegion *pci_io; - - bool enum_only = false; - - int n; - -#ifdef CONFIG_PCI_ENUM_ONLY - enum_only = true; -#endif - - pci_mem = &(instance_p->mem); - pci_prefetch = &(instance_p->mem_prefetch); - pci_io = &(instance_p->mem_io); - - FPcieEcamReadConfig16bit(instance_p->config.ecam, bdf, FPCIE_CLASS_DEVICE_REG, &class) ;//读取classcode编号 - - switch (class) - { - case FPCI_CLASS_BRIDGE_PCI: - FPcieAutoSetupDevice(instance_p, bdf, 2, pci_mem, pci_prefetch, pci_io, - enum_only); - - n = FPcieHoseProbeBus(instance_p, bdf); - if (n < 0) - { - return n; - } - break; - - case FPCI_CLASS_BRIDGE_CARDBUS: - /* - * just do a minimal setup of the bridge, - * let the OS take care of the rest - */ - FPcieAutoSetupDevice(instance_p, bdf, 0, pci_mem, pci_prefetch, pci_io, - enum_only); - - FPCIE_DEBUG_I("PCI auto config: Found P2CardBus bridge, device %d.", FPCIE_DEV(bdf)); - - break; - - case FPCI_CLASS_PROCESSOR_POWERPC: /* an agent or end-point */ - FPCIE_DEBUG_I("PCI auto config: Found PowerPC device."); - - default: - FPcieAutoSetupDevice(instance_p, bdf, 6, pci_mem, pci_prefetch, pci_io, - enum_only); - break; - } - - return FT_SUCCESS; -} - - -FError FPcieBindBusDevices(FPcie *instance_p, u32 bus_num, u32 parent_bdf, struct FPcieBus *bus) -{ - int dev_count = 0; - u16 vendor, device; - u8 header_type; - s32 bdf, end; - bool found_multi; - FError ret; - u8 class_show; - u32 dev_exp_cap, bus_exp_cap, dev_ext_ari_cap; - u32 data; - char buf_bdf_print[20]; - found_multi = false; - end = FPCIE_BDF(bus_num, FPCIE_CFG_MAX_NUM_OF_DEV - 1, - FPCIE_CFG_MAX_NUM_OF_FUN - 1); - - /* 使用bus的seq成员来进行扫描,其实相当于secondory_bus号 */ - for (bdf = FPCIE_BDF(bus_num, 0, 0); bdf <= end; - bdf += FPCIE_BDF(0, 0, 1)) - { - u32 class; - - /* phytium old pci ip version, need skip in some bus */ - if (instance_p->config.need_skip) - { - if (FPcieSkipDevice(instance_p->config.ecam, parent_bdf) == FPCIE_NEED_SKIP) - { - continue; - } - } - - if (!FPCIE_FUNC(bdf)) - { - found_multi = false; - } - if (FPCIE_FUNC(bdf) && !found_multi) - { - continue; - } - - /* Check only the first access, we don't expect problems */ - FPcieEcamReadConfig16bit(instance_p->config.ecam, bdf, FPCIE_VENDOR_REG, &vendor) ; - - if (vendor == 0xffff || vendor == 0x0000) - { - continue; - } - - FPcieEcamReadConfig8bit(instance_p->config.ecam, bdf, FPCIE_HEADER_TYPE_REG, &header_type) ; - - if (!FPCIE_FUNC(bdf)) - { - found_multi = header_type & 0x80; - } - - /* 读取deviceid, classcode */ - FPcieEcamReadConfig16bit(instance_p->config.ecam, bdf, FPCIE_DEVICE_ID_REG, &device) ; - FPcieEcamReadConfig32bit(instance_p->config.ecam, bdf, FPCI_CLASS_REVISION, &class) ; - class >>= 8; - - FPcieEcamReadConfig8bit(instance_p->config.ecam, bdf, FPCIE_CLASS_CODE_REG, &class_show) ; - - if (parent_bdf == 0xffffffff) - { - strcpy(buf_bdf_print, "root-controller"); - } - else - { - sprintf(buf_bdf_print, "pci_%x:%x:%x", - FPCIE_BUS(parent_bdf), FPCIE_DEV(parent_bdf), FPCIE_FUNC(parent_bdf)); - } - printf("\t%02x:%02x.%02x\t\t%04lx:%04lx\t\t%s", - FPCIE_BUS(bdf), FPCIE_DEV(bdf), FPCIE_FUNC(bdf), vendor, device, - buf_bdf_print); - printf("\t\t\t0x%.2x (%s)\n", (int)class_show, FPcieClassStr(class_show)); - - /* ARI function handle */ - /* step 1: detect if PCI Express Device */ - ret = FPcieFindCapability(instance_p, bdf, PCIE_CAP, FPCI_CAP_ID_EXP, &dev_exp_cap); - if (ret == 0 && dev_exp_cap > 0) - { - /* step2: check if the device is an ARI device */ - ret = FPcieFindCapability(instance_p, bdf, PCIE_ECAP, FPCI_EXT_CAP_ID_ARI, &dev_ext_ari_cap); - if (ret == 0 && dev_ext_ari_cap > 0) - { - /* step3: check if its parent supports ARI forwarding */ - ret = FPcieFindCapability(instance_p, parent_bdf, PCIE_CAP, FPCI_CAP_ID_EXP, &bus_exp_cap); - /* config bus ARI forwarding */ - if (ret == 0 && bus_exp_cap > 0) - { - FPcieEcamReadConfig32bit(instance_p->config.ecam, parent_bdf, - bus_exp_cap + FPCIE_CAPABILITY_DEVICE_CAPABILITIES_2_OFFSET, &data); - if ((data & FPCIE_CAPABILITY_DEVICE_CAPABILITIES_2_ARI_FORWARDING) != 0) - { - /* step4: ARI forwarding support in bridge, so enable it */ - FPcieEcamReadConfig32bit(instance_p->config.ecam, parent_bdf, - bus_exp_cap + FPCIE_CAPABILITY_DEVICE_CONTROL_2_OFFSET, &data); - if (data & FPCIE_CAPABILITY_DEVICE_CONTROL_2_ARI_FORWARDING == 0) - { - data |= FPCIE_CAPABILITY_DEVICE_CONTROL_2_ARI_FORWARDING; - FPcieEcamWriteConfig32bit(instance_p->config.ecam, parent_bdf, - bus_exp_cap + FPCIE_CAPABILITY_DEVICE_CONTROL_2_OFFSET, data); - } - } - } - } - } - - bus->ChildN[dev_count] = bdf; - dev_count++; - - //这里可以将当前的device,保存到全局变量中,供别的驱动来查询。 - instance_p->scaned_bdf_array[instance_p->scaned_bdf_count] = bdf; - (instance_p->scaned_bdf_count)++; - - } - bus->ChildCount = dev_count; - - return FT_SUCCESS; - -} - -FError FPcieScanBus(FPcie *instance_p, u32 bus_num, u32 parent_bdf) -{ - int i = 0; - s32 bdf; - struct FPcieBus bus; - bus.ChildCount = 0; - - /* scan bus 0 device */ - FPcieBindBusDevices(instance_p, bus_num, parent_bdf, &bus); - - if (bus.ChildCount > 0) - { - for (i = 0; i < bus.ChildCount; i++) - { - bdf = bus.ChildN[i]; - FPcieAutoConfigDevice(instance_p, bdf); - } - } - instance_p->is_scaned = 1; //表示已经扫描完成 - - return FT_SUCCESS; -} - diff --git a/bsp/phytium/libraries/standalone/drivers/pcie/fpcie/fpcie.h b/bsp/phytium/libraries/standalone/drivers/pcie/fpcie/fpcie.h deleted file mode 100644 index 30f0191121..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/pcie/fpcie/fpcie.h +++ /dev/null @@ -1,300 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fpcie.h - * Date: 2022-08-10 14:55:11 - * LastEditTime: 2022-08-18 08:59:37 - * Description: This file is for detailed description of the device and driver. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/8/18 init commit - */ - -#ifndef FPCIE_H -#define FPCIE_H - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/************************** Variable Definitions *****************************/ - -/************************** Function Prototypes ******************************/ - -/***************************** Include Files *********************************/ - -#include "ftypes.h" -#include "fassert.h" -#include "fpcie_dma.h" -#include "fparameters.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -#ifdef __aarch64__ -#define CONFIG_SYS_PCI_64BIT 1 -#endif - - -#ifdef CONFIG_SYS_PCI_64BIT -typedef u64 pci_addr_t; -typedef u64 pci_size_t; -#else -typedef u32 pci_addr_t; -typedef u32 pci_size_t; -#endif - -typedef boolean bool; -#define true TRUE -#define false FALSE - - -/* Access sizes for PCI reads and writes */ -enum pci_size_t -{ - PCI_SIZE_8, - PCI_SIZE_16, - PCI_SIZE_32, -}; - - -/***************** Macros (Inline Functions) Definitions *********************/ - -#define FPCIE_ERR_INVALID_PARAM FT_CODE_ERR(ErrModBsp, ErrPcie, 0x1u) -#define FPCIE_ERR_OUTOF_BUS FT_CODE_ERR(ErrModBsp, ErrPcie, 0x2u) -#define FPCIE_ERR_CONFIG_WRITE FT_CODE_ERR(ErrModBsp, ErrPcie, 0x3u) -#define FPCIE_ERR_TYPE0 FT_CODE_ERR(ErrModBsp, ErrPcie, 0x4u) -#define FPCIE_ERR_TIMEOUT FT_CODE_ERR(ErrModBsp, ErrPcie, 0x5u) -#define FPCIE_NEED_SKIP FT_CODE_ERR(ErrModBsp, ErrPcie, 0x6u) -#define FPCIE_NOT_FOUND FT_CODE_ERR(ErrModBsp, ErrPcie, 0x7u) - - -#define FPCIE_REGION_MEM 0x00000000 /* PCI memory space */ -#define FPCIE_REGION_IO 0x00000001 /* PCI IO space */ -#define PCI_REGION_PREFETCH 0x00000008 /* prefetchable PCI memory */ - - -#define FPCIE_BAR_0 0 -#define FPCIE_BAR_1 1 -#define FPCIE_BAR_2 2 -#define FPCIE_BAR_3 3 -#define FPCIE_BAR_4 4 -#define FPCIE_BAR_5 5 - -/* PCI-E Unit controller selection */ -#define FPCIE_PEU0_C0 0 /* pcie 0 0号控制器 */ -#define FPCIE_PEU0_C1 1 /* pcie 0 1号控制器 */ -#define FPCIE_PEU0_C2 2 /* pcie 0 2号控制器 */ -#define FPCIE_PEU1_C0 3 /* pcie 1 0号控制器 */ -#define FPCIE_PEU1_C1 4 /* pcie 1 1号控制器 */ -#define FPCIE_PEU1_C2 5 /* pcie 1 2号控制器 */ - - -#define FPCIE_REGION_EXIST_FLG 1 - -/** @name Callback identifiers - * - * These constants are used as parameters to FPcieMiscSetHandler() - * @{ - */ -#define FPCIE_HANDLER_DMASEND 1U -#define FPCIE_HANDLER_DMARECV 2U -#define FPCIE_HANDLER_DMASEND_ERROR 3U -#define FPCIE_HANDLER_DMARECV_ERROR 4U -/*@}*/ - -typedef void (*FPcieIrqCallBack)(void *args); - -#if defined(__aarch64__) -typedef u64 FPcieAddr; -typedef u64 FPcieSize; -typedef u64 FPciePhysAddr; -#else -typedef u32 FPcieAddr; -typedef u32 FPcieSize; -typedef u32 FPciePhysAddr; -#endif - - -typedef struct -{ - u16 vender_id ; - u16 device_id ; - u32 bus_num ; - u32 dev_num ; - u32 fun_num ; - u32 class_code ; -} FPcieSearchFunNode; - - -typedef struct -{ - void (*IntxCallBack)(void *args) ; - void *args ; - s32 bdf ; -} FPcieIntxFun; - -struct FPcieRegion -{ - FPcieAddr bus_start; /* Start on the bus */ - FPciePhysAddr phys_start; /* Start in physical address space */ - FPcieSize size; /* Size */ - unsigned long flags; /* Resource flags */ - FPcieAddr bus_lower; - u32 exist_flg; /* exist flg */ -}; - -typedef struct -{ - u16 vendor, device; -} FpcieId; - -typedef struct -{ - u32 instance_id; /* Id of device*/ - u32 irq_num; /* Irq number */ - uintptr_t ecam; /* The Memory way */ - uintptr_t peu0_config_address; - uintptr_t peu1_config_address; - - uintptr_t control_c0_address; - uintptr_t control_c1_address; - uintptr_t control_c2_address; - uintptr_t control_c3_address; - uintptr_t control_c4_address; - uintptr_t control_c5_address; - -#ifdef FPCI_INTX_EOI - uintptr_t intx_peux_stat_address[FPCI_INTX_SATA_NUM] ; - uintptr_t intx_control_eux_cx_address[FPCI_INTX_CONTROL_NUM] ; -#endif - - u32 io_base_addr; - u32 io_size ; - u32 npmem_base_addr; - u32 npmem_size; - u64 pmem_base_addr; /* Prefetchable memory */ - u64 pmem_size; - - u8 inta_irq_num ; - u8 intb_irq_num ; - u8 intc_irq_num ; - u8 intd_irq_num ; - u8 need_skip ; - -} FPcieConfig; - -typedef struct -{ - u32 is_ready; /* Device is ininitialized and ready*/ - FPcieConfig config; - - struct FPcieRegion mem; - struct FPcieRegion mem_prefetch; - struct FPcieRegion mem_io; - - s32 bus_max; /* 当前最大bus num */ - - FPcieIrqCallBack fpcie_dma_rx_cb; - void *dma_rx_args; - - FPcieIrqCallBack fpcie_dma_tx_cb; - void *dma_tx_args; - - FPcieIrqCallBack fpcie_dma_rx_error_cb; - void *dma_rx_error_args; - - FPcieIrqCallBack fpcie_dma_tx_error_cb; - void *dma_tx_error_args; - - FPcieIntxFun inta_fun[128]; //假设最高支持128个pcie 节点 - - FPcieIntxFun intb_fun[128]; - - FPcieIntxFun intc_fun[128]; - - FPcieIntxFun intd_fun[128]; - - s32 scaned_bdf_array[128]; - s32 scaned_bdf_count; - - u32 is_scaned; /* Device is ininitialized and ready*/ - -} FPcie; - -FPcieConfig *FPcieLookupConfig(u32 instance_id); - -FError FPcieCfgInitialize(FPcie *instance_p, FPcieConfig *config_p); - -/* dma */ -FError FPcieDmaDescSet(uintptr axi_addr, - uintptr pcie_addr, - u32 length, - struct FPcieDmaDescriptor *desc, - struct FPcieDmaDescriptor *next_desc); - - -void FPcieDmaRead(uintptr cintrol_address, struct FPcieDmaDescriptor *desc); - -void FPcieDmaWrite(uintptr cintrol_address, struct FPcieDmaDescriptor *desc); - -FError FPcieDmaPollDone(struct FPcieDmaDescriptor *desc, u32 wait_cnt); - -/* Intx Interrupt */ -void FPcieIntxIrqHandler(s32 vector, void *args) ; - -FError FPcieIntxRegiterIrqHandler(FPcie *instance_p, - u32 bdf, - FPcieIntxFun *intx_fun_p) ; - -void FPcieMiscIrqDisable(FPcie *instance_p, fsize_t peu_num) ; - -struct FPcieBus -{ - s32 ChildN[32]; - u8 ChildCount; -} ; - -typedef enum -{ - HEADER = 0, - PCIE_CAP = 1, - PCIE_ECAP = 2 -} BITFIELD_REGISTER_TYPE; - - -const char *FPcieClassStr(u8 class); -void FPcieAutoRegionAlign(struct FPcieRegion *res, pci_size_t size); -int FPcieAutoRegionAllocate(struct FPcieRegion *res, pci_size_t size, - pci_addr_t *bar, bool supports_64bit); -void FPcieAutoSetupDevice(FPcie *instance_p, u32 bdf, int bars_num, - struct FPcieRegion *mem, - struct FPcieRegion *prefetch, struct FPcieRegion *io, - bool enum_only); -void FPcieAutoPrescanSetupBridge(FPcie *instance_p, u32 bdf, int sub_bus); -void FPcieAutoPostscanSetupBridge(FPcie *instance_p, u32 bdf, int sub_bus); -int FPcieHoseProbeBus(FPcie *instance_p, u32 bdf); -int FPcieAutoConfigDevice(FPcie *instance_p, u32 bdf); -FError FPcieBindBusDevices(FPcie *instance_p, u32 bus_num, u32 parent_bdf, struct FPcieBus *bus); -FError FPcieScanBus(FPcie *instance_p, u32 bus_num, u32 parent_bdf); - - -#ifdef __cplusplus -} -#endif - -#endif // ! diff --git a/bsp/phytium/libraries/standalone/drivers/pcie/fpcie/fpcie_common.h b/bsp/phytium/libraries/standalone/drivers/pcie/fpcie/fpcie_common.h deleted file mode 100644 index 74d914fe23..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/pcie/fpcie/fpcie_common.h +++ /dev/null @@ -1,563 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fpcie_common.h - * Date: 2022-08-10 14:55:11 - * LastEditTime: 2022-08-18 08:57:24 - * Description: This file is for pcie common features definition. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/8/18 init commit - */ - -#ifndef FPCIE_COMMON_H -#define FPCIE_COMMON_H - -#include "fpcie_hw.h" -#include "fkernel.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/******************** Macros (Inline Functions) Definitions *******************/ - -/* Device classes and subclasses */ - -#define FPCI_CLASS_NOT_DEFINED 0x0000 -#define FPCI_CLASS_NOT_DEFINED_VGA 0x0001 - -#define FPCI_BASE_CLASS_STORAGE 0x01 -#define FPCI_CLASS_STORAGE_SCSI 0x0100 -#define FPCI_CLASS_STORAGE_IDE 0x0101 -#define FPCI_CLASS_STORAGE_FLOPPY 0x0102 -#define FPCI_CLASS_STORAGE_IPI 0x0103 -#define FPCI_CLASS_STORAGE_RAID 0x0104 -#define FPCI_CLASS_STORAGE_SATA 0x0106 -#define FPCI_CLASS_STORAGE_SATA_AHCI 0x010601 -#define FPCI_CLASS_STORAGE_SAS 0x0107 -#define FPCI_CLASS_STORAGE_EXPRESS 0x010802 -#define FPCI_CLASS_STORAGE_OTHER 0x0180 - -#define FPCI_BASE_CLASS_NETWORK 0x02 -#define FPCI_CLASS_NETWORK_ETHERNET 0x0200 -#define FPCI_CLASS_NETWORK_TOKEN_RING 0x0201 -#define FPCI_CLASS_NETWORK_FDDI 0x0202 -#define FPCI_CLASS_NETWORK_ATM 0x0203 -#define FPCI_CLASS_NETWORK_OTHER 0x0280 - -#define FPCI_BASE_CLASS_DISPLAY 0x03 -#define FPCI_CLASS_DISPLAY_VGA 0x0300 -#define FPCI_CLASS_DISPLAY_XGA 0x0301 -#define FPCI_CLASS_DISPLAY_3D 0x0302 -#define FPCI_CLASS_DISPLAY_OTHER 0x0380 - -#define FPCI_BASE_CLASS_MULTIMEDIA 0x04 -#define FPCI_CLASS_MULTIMEDIA_VIDEO 0x0400 -#define FPCI_CLASS_MULTIMEDIA_AUDIO 0x0401 -#define FPCI_CLASS_MULTIMEDIA_PHONE 0x0402 -#define FPCI_CLASS_MULTIMEDIA_HD_AUDIO 0x0403 -#define FPCI_CLASS_MULTIMEDIA_OTHER 0x0480 - -#define FPCI_BASE_CLASS_MEMORY 0x05 -#define FPCI_CLASS_MEMORY_RAM 0x0500 -#define FPCI_CLASS_MEMORY_FLASH 0x0501 -#define FPCI_CLASS_MEMORY_OTHER 0x0580 - -#define FPCI_BASE_CLASS_BRIDGE 0x06 -#define FPCI_CLASS_BRIDGE_HOST 0x0600 -#define FPCI_CLASS_BRIDGE_ISA 0x0601 -#define FPCI_CLASS_BRIDGE_EISA 0x0602 -#define FPCI_CLASS_BRIDGE_MC 0x0603 -#define FPCI_CLASS_BRIDGE_PCI 0x0604 -#define FPCI_CLASS_BRIDGE_PCMCIA 0x0605 -#define FPCI_CLASS_BRIDGE_NUBUS 0x0606 -#define FPCI_CLASS_BRIDGE_CARDBUS 0x0607 -#define FPCI_CLASS_BRIDGE_RACEWAY 0x0608 -#define FPCI_CLASS_BRIDGE_OTHER 0x0680 - -#define FPCI_BASE_CLASS_COMMUNICATION 0x07 -#define FPCI_CLASS_COMMUNICATION_SERIAL 0x0700 -#define FPCI_CLASS_COMMUNICATION_PARALLEL 0x0701 -#define FPCI_CLASS_COMMUNICATION_MULTISERIAL 0x0702 -#define FPCI_CLASS_COMMUNICATION_MODEM 0x0703 -#define FPCI_CLASS_COMMUNICATION_OTHER 0x0780 - -#define FPCI_BASE_CLASS_SYSTEM 0x08 -#define FPCI_CLASS_SYSTEM_PIC 0x0800 -#define FPCI_CLASS_SYSTEM_PIC_IOAPIC 0x080010 -#define FPCI_CLASS_SYSTEM_PIC_IOXAPIC 0x080020 -#define FPCI_CLASS_SYSTEM_DMA 0x0801 -#define FPCI_CLASS_SYSTEM_TIMER 0x0802 -#define FPCI_CLASS_SYSTEM_RTC 0x0803 -#define FPCI_CLASS_SYSTEM_PCI_HOTPLUG 0x0804 -#define FPCI_CLASS_SYSTEM_SDHCI 0x0805 -#define FPCI_CLASS_SYSTEM_OTHER 0x0880 - -#define FPCI_BASE_CLASS_INPUT 0x09 -#define FPCI_CLASS_INPUT_KEYBOARD 0x0900 -#define FPCI_CLASS_INPUT_PEN 0x0901 -#define FPCI_CLASS_INPUT_MOUSE 0x0902 -#define FPCI_CLASS_INPUT_SCANNER 0x0903 -#define FPCI_CLASS_INPUT_GAMEPORT 0x0904 -#define FPCI_CLASS_INPUT_OTHER 0x0980 - -#define FPCI_BASE_CLASS_DOCKING 0x0a -#define FPCI_CLASS_DOCKING_GENERIC 0x0a00 -#define FPCI_CLASS_DOCKING_OTHER 0x0a80 - -#define FPCI_BASE_CLASS_PROCESSOR 0x0b -#define FPCI_CLASS_PROCESSOR_386 0x0b00 -#define FPCI_CLASS_PROCESSOR_486 0x0b01 -#define FPCI_CLASS_PROCESSOR_PENTIUM 0x0b02 -#define FPCI_CLASS_PROCESSOR_ALPHA 0x0b10 -#define FPCI_CLASS_PROCESSOR_POWERPC 0x0b20 -#define FPCI_CLASS_PROCESSOR_MIPS 0x0b30 -#define FPCI_CLASS_PROCESSOR_CO 0x0b40 - -#define FPCI_BASE_CLASS_SERIAL 0x0c -#define FPCI_CLASS_SERIAL_FIREWIRE 0x0c00 -#define FPCI_CLASS_SERIAL_FIREWIRE_OHCI 0x0c0010 -#define FPCI_CLASS_SERIAL_ACCESS 0x0c01 -#define FPCI_CLASS_SERIAL_SSA 0x0c02 -#define FPCI_CLASS_SERIAL_USB 0x0c03 -#define FPCI_CLASS_SERIAL_USB_UHCI 0x0c0300 -#define FPCI_CLASS_SERIAL_USB_OHCI 0x0c0310 -#define FPCI_CLASS_SERIAL_USB_EHCI 0x0c0320 -#define FPCI_CLASS_SERIAL_USB_XHCI 0x0c0330 -#define FPCI_CLASS_SERIAL_FIBER 0x0c04 -#define FPCI_CLASS_SERIAL_SMBUS 0x0c05 - -#define FPCI_BASE_CLASS_WIRELESS 0x0d -#define FPCI_CLASS_WIRELESS_RF_CONTROLLER 0x0d10 -#define FPCI_CLASS_WIRELESS_WHCI 0x0d1010 - -#define FPCI_BASE_CLASS_INTELLIGENT 0x0e -#define FPCI_CLASS_INTELLIGENT_I2O 0x0e00 - -#define FPCI_BASE_CLASS_SATELLITE 0x0f -#define FPCI_CLASS_SATELLITE_TV 0x0f00 -#define FPCI_CLASS_SATELLITE_AUDIO 0x0f01 -#define FPCI_CLASS_SATELLITE_VOICE 0x0f03 -#define FPCI_CLASS_SATELLITE_DATA 0x0f04 - -#define FPCI_BASE_CLASS_CRYPT 0x10 -#define FPCI_CLASS_CRYPT_NETWORK 0x1000 -#define FPCI_CLASS_CRYPT_ENTERTAINMENT 0x1001 -#define FPCI_CLASS_CRYPT_OTHER 0x1080 - -#define FPCI_BASE_CLASS_SIGNAL_PROCESSING 0x11 -#define FPCI_CLASS_SP_DPIO 0x1100 -#define FPCI_CLASS_SP_OTHER 0x1180 - -#define FPCI_CLASS_OTHERS 0xff - - -/* Command register offsets */ - -/* PCIe Configuration registers offsets */ - -/* Vendor ID/Device ID offset */ -#define FPCIE_CFG_ID_REG 0x0000 - -/* Independent element register */ - -#define FPCIE_VENDOR_REG 0x0 -#define FPCIE_DEVICE_ID_REG 0x02 -#define FPCIE_STATUS_REG 0x06 -#define FPCI_CLASS_DEVICE_REG 0x0a /* Device class */ -#define FPCIE_CACHE_LINE_SIZE_REG 0x0c /* 8 bits */ -#define FPCIE_LATENCY_TIMER_REG 0x0d /* 8 bits */ -#define FPCIE_HEADER_TYPE_REG 0x0e /* Header Type */ -#define FPCIE_BIST_REG 0x0f /* 8 bits */ - -#define FPCIE_HEADER_TYPE_NORMAL 0 -#define FPCIE_HEADER_TYPE_BRIDGE 1 -#define FPCIE_HEADER_TYPE_CARDBUS 2 -#define FPCIE_SECONDARY_BUS_REG 0x19 /* Secondary bus number */ -#define FPCIE_SUBORDINATE_BUS_REG 0x1a /* Highest bus number behind the bridge */ -#define FPCIE_SEC_LATENCY_TIMER_REG 0x1b /* Latency timer for secondary interface */ -#define FPCIE_IO_BASE_REG 0x1c /* I/O range behind the bridge */ -#define FPCIE_IO_LIMIT_REG 0x1d -#define FPCIE_SEC_STATUS_REG 0x1e /* Secondary status register, only bit 14 used */ - -#define FPCIE_IO_LIMIT_UPPER16_REG 0x32 - -#define FPCIE_MEMORY_BASE_REG 0x20 /* Memory range behind */ -#define FPCIE_MEMORY_LIMIT_REG 0x22 -#define FPCIE_PREF_BASE_UPPER32_REG 0x28 /* Upper half of prefetchable memory range */ -#define FPCIE_PREF_LIMIT_UPPER32_REG 0x2c - -#define FPCIE_IO_BASE_UPPER16_REG 0x30 /* Upper half of I/O addresses */ -#define FPCI_CLASS_REVISION 0x08 /* High 24 bits are class, low 8 */ - -#define FPCIE_CLASS_REVISION 0x0a /* High 24 bits are class, low 8 revision */ - -#define FPCIE_INTERRUPT_PIN_REG 0x3d -#define FPCIE_INTERRUPT_LINE_REG 0x3c -#define FPCIE_MIN_GNT_REG 0x3e /* 8 bits */ -#define FPCIE_MAX_LAT_REG 0x3f /* 8 bits */ - - -#define FPCIE_COMMAND_REG 0x04 /* 16 bits */ -#define FPCIE_COMMAND_IO 0x1 /* Enable response in I/O space */ -#define FPCIE_COMMAND_MEMORY 0x2 /* Enable response in Memory space */ -#define FPCIE_COMMAND_MASTER 0x4 /* Enable bus mastering */ -#define FPCIE_COMMAND_SPECIAL 0x8 /* Enable response to special cycles */ -#define FPCIE_COMMAND_INVALIDATE 0x10 /* Use memory write and invalidate */ -#define FPCIE_COMMAND_VGA_PALETTE 0x20 /* Enable palette snooping */ -#define FPCIE_COMMAND_PARITY 0x40 /* Enable parity checking */ -#define FPCIE_COMMAND_WAIT 0x80 /* Enable address/data stepping */ -#define FPCIE_COMMAND_SERR 0x100 /* Enable SERR */ -#define FPCIE_COMMAND_FAST_BACK 0x200 /* Enable back-to-back writes */ - -#define FPCIE_HEADER_TYPE_REG 0x0e /* 8 bits */ - -#define FPCIE_REVISION_ID_REG 0x08 /* Revision ID */ -#define FPCIE_CLASS_PROG_REG 0x09 /* Reg. Level Programming Interface */ -#define FPCIE_CLASS_DEVICE_REG 0x0a /* Device class */ -#define FPCIE_CLASS_CODE_REG 0x0b /* Device class code */ - -#define FPCIE_PREF_MEMORY_BASE_REG 0x24 /* Prefetchable memory range behind */ -#define FPCIE_PREF_MEMORY_LIMIT_REG 0x26 -#define FPCIE_PREF_LIMIT_UPPER32_REG 0x2c -#define FPCIE_PREF_RANGE_TYPE_MASK 0x0f -#define FPCIE_PREF_RANGE_TYPE_32 0x00 -#define FPCIE_PREF_RANGE_TYPE_64 0x01 -#define FPCIE_PREF_RANGE_MASK ~0x0f - -#define FPCI_CLASS_BRIDGE_PCI 0x0604 -#define FPCI_CLASS_BRIDGE_CARDBUS 0x0607 -#define FPCI_CLASS_PROCESSOR_POWERPC 0x0b20 -#define FPCI_CLASS_DISPLAY_VGA 0x0300 - -#define FPCIE_CFG_FUN_NOT_IMP_MASK 0xFFFF -#define FPCIE_CFG_HEADER_TYPE_MASK 0x007F0000 - -/* - * Base addresses specify locations in memory or I/O space. - * Decoded size can be determined by writing a value of - * 0xffffffff to the register, and reading it back. Only - * 1 bits are decoded. - */ -#define FPCIE_BASE_ADDRESS_0 0x10 /* 32 bits */ -#define FPCIE_BASE_ADDRESS_1 0x14 /* 32 bits [htype 0,1 only] */ -#define FPCIE_BASE_ADDRESS_2 0x18 /* 32 bits [htype 0 only] */ -#define FPCIE_BASE_ADDRESS_3 0x1c /* 32 bits */ -#define FPCIE_BASE_ADDRESS_4 0x20 /* 32 bits */ -#define FPCIE_BASE_ADDRESS_5 0x24 /* 32 bits */ -#define FPCIE_BASE_ADDRESS_SPACE 0x01 /* 0 = memory, 1 = I/O */ -#define FPCIE_BASE_ADDRESS_SPACE_IO 0x01 -#define FPCIE_BASE_ADDRESS_SPACE_MEMORY 0x00 -#define FPCIE_BASE_ADDRESS_MEM_TYPE_MASK 0x06 -#define FPCIE_BASE_ADDRESS_MEM_TYPE_32 0x00 /* 32 bit address */ -#define FPCIE_BASE_ADDRESS_MEM_TYPE_1M 0x02 /* Below 1M [obsolete] */ -#define FPCIE_BASE_ADDRESS_MEM_TYPE_64 0x04 /* 64 bit address */ -#define FPCIE_BASE_ADDRESS_MEM_PREFETCH 0x08 /* prefetchable? */ -#define FPCIE_BASE_ADDRESS_MEM_MASK (~0x0fULL) -#define FPCIE_BASE_ADDRESS_IO_MASK (~0x03ULL) -#define FPCIE_EP_MIN_APERTURE 128 - -/* BAR control values applicable to both Endpoint Function and Root Complex */ -#define FPCIE_LM_BAR_CFG_CTRL_DISABLED 0x0 -#define FPCIE_LM_BAR_CFG_CTRL_IO_32BITS 0x1 -#define FPCIE_LM_BAR_CFG_CTRL_MEM_32BITS 0x4 -#define FPCIE_LM_BAR_CFG_CTRL_PREFETCH_MEM_32BITS 0x5 -#define FPCIE_LM_BAR_CFG_CTRL_MEM_64BITS 0x6 -#define FPCIE_LM_BAR_CFG_CTRL_PREFETCH_MEM_64BITS 0x7 - - -/* Header type 0 (normal devices) */ -#define FPCIE_CARDBUS_CIS 0x28 -#define FPCIE_SUBSYSTEM_VENDOR_ID 0x2c -#define FPCIE_SUBSYSTEM_ID 0x2e -#define FPCIE_ROM_ADDRESS 0x30 /* Bits 31..11 are address, 10..1 reserved */ -#define FPCIE_ROM_ADDRESS_ENABLE 0x01 -#define FPCIE_ROM_ADDRESS_MASK (~0x7ffULL) - - -#define FPCIE_BASE_CLASS_DISPLAY 0x03 -#define FPCIE_CLASS_DISPLAY_VGA 0x0300 -#define FPCIE_CLASS_DISPLAY_XGA 0x0301 -#define FPCIE_CLASS_DISPLAY_3D 0x0302 -#define FPCIE_CLASS_DISPLAY_OTHER 0x0380 - -/* 0x34 same as for htype 0 */ -#define FPCIE_CAPABILITY_LIST 0x34 /* Offset of first capability list entry */ -#define FPCIE_ECAP_START 0x100 /* offset of first extend capability list entry */ - -/* 0x35-0x3b is reserved */ -#define FPCIE_ROM_ADDRESS1 0x38 /* Same as PCI_ROM_ADDRESS, but for htype 1 */ -#define FPCIE_BRIDGE_CONTROL_REG 0x3e - - -#define FPCI_CLASS_SUB_CODE 0x0a /* Device sub-class code */ -#define FPCI_CLASS_SUB_CODE_TOO_OLD_NOTVGA 0x00 -#define FPCI_CLASS_SUB_CODE_TOO_OLD_VGA 0x01 -#define FPCI_CLASS_SUB_CODE_STORAGE_SCSI 0x00 -#define FPCI_CLASS_SUB_CODE_STORAGE_IDE 0x01 -#define FPCI_CLASS_SUB_CODE_STORAGE_FLOPPY 0x02 -#define FPCI_CLASS_SUB_CODE_STORAGE_IPIBUS 0x03 -#define FPCI_CLASS_SUB_CODE_STORAGE_RAID 0x04 -#define FPCI_CLASS_SUB_CODE_STORAGE_ATA 0x05 -#define FPCI_CLASS_SUB_CODE_STORAGE_SATA 0x06 -#define FPCI_CLASS_SUB_CODE_STORAGE_SAS 0x07 -#define FPCI_CLASS_SUB_CODE_STORAGE_OTHER 0x80 -#define FPCI_CLASS_SUB_CODE_NETWORK_ETHERNET 0x00 -#define FPCI_CLASS_SUB_CODE_NETWORK_TOKENRING 0x01 -#define FPCI_CLASS_SUB_CODE_NETWORK_FDDI 0x02 -#define FPCI_CLASS_SUB_CODE_NETWORK_ATM 0x03 -#define FPCI_CLASS_SUB_CODE_NETWORK_ISDN 0x04 -#define FPCI_CLASS_SUB_CODE_NETWORK_WORLDFIP 0x05 -#define FPCI_CLASS_SUB_CODE_NETWORK_PICMG 0x06 -#define FPCI_CLASS_SUB_CODE_NETWORK_OTHER 0x80 -#define FPCI_CLASS_SUB_CODE_DISPLAY_VGA 0x00 -#define FPCI_CLASS_SUB_CODE_DISPLAY_XGA 0x01 -#define FPCI_CLASS_SUB_CODE_DISPLAY_3D 0x02 -#define FPCI_CLASS_SUB_CODE_DISPLAY_OTHER 0x80 -#define FPCI_CLASS_SUB_CODE_MULTIMEDIA_VIDEO 0x00 -#define FPCI_CLASS_SUB_CODE_MULTIMEDIA_AUDIO 0x01 -#define FPCI_CLASS_SUB_CODE_MULTIMEDIA_PHONE 0x02 -#define FPCI_CLASS_SUB_CODE_MULTIMEDIA_OTHER 0x80 -#define FPCI_CLASS_SUB_CODE_MEMORY_RAM 0x00 -#define FPCI_CLASS_SUB_CODE_MEMORY_FLASH 0x01 -#define FPCI_CLASS_SUB_CODE_MEMORY_OTHER 0x80 -#define FPCI_CLASS_SUB_CODE_BRIDGE_HOST 0x00 -#define FPCI_CLASS_SUB_CODE_BRIDGE_ISA 0x01 -#define FPCI_CLASS_SUB_CODE_BRIDGE_EISA 0x02 -#define FPCI_CLASS_SUB_CODE_BRIDGE_MCA 0x03 -#define FPCI_CLASS_SUB_CODE_BRIDGE_PCI 0x04 -#define FPCI_CLASS_SUB_CODE_BRIDGE_PCMCIA 0x05 -#define FPCI_CLASS_SUB_CODE_BRIDGE_NUBUS 0x06 -#define FPCI_CLASS_SUB_CODE_BRIDGE_CARDBUS 0x07 -#define FPCI_CLASS_SUB_CODE_BRIDGE_RACEWAY 0x08 -#define FPCI_CLASS_SUB_CODE_BRIDGE_SEMI_PCI 0x09 -#define FPCI_CLASS_SUB_CODE_BRIDGE_INFINIBAND 0x0A -#define FPCI_CLASS_SUB_CODE_BRIDGE_OTHER 0x80 -#define FPCI_CLASS_SUB_CODE_COMM_SERIAL 0x00 -#define FPCI_CLASS_SUB_CODE_COMM_PARALLEL 0x01 -#define FPCI_CLASS_SUB_CODE_COMM_MULTIPORT 0x02 -#define FPCI_CLASS_SUB_CODE_COMM_MODEM 0x03 -#define FPCI_CLASS_SUB_CODE_COMM_GPIB 0x04 -#define FPCI_CLASS_SUB_CODE_COMM_SMARTCARD 0x05 -#define FPCI_CLASS_SUB_CODE_COMM_OTHER 0x80 -#define FPCI_CLASS_SUB_CODE_PERIPHERAL_PIC 0x00 -#define FPCI_CLASS_SUB_CODE_PERIPHERAL_DMA 0x01 -#define FPCI_CLASS_SUB_CODE_PERIPHERAL_TIMER 0x02 -#define FPCI_CLASS_SUB_CODE_PERIPHERAL_RTC 0x03 -#define FPCI_CLASS_SUB_CODE_PERIPHERAL_HOTPLUG 0x04 -#define FPCI_CLASS_SUB_CODE_PERIPHERAL_SD 0x05 -#define FPCI_CLASS_SUB_CODE_PERIPHERAL_OTHER 0x80 -#define FPCI_CLASS_SUB_CODE_INPUT_KEYBOARD 0x00 -#define FPCI_CLASS_SUB_CODE_INPUT_DIGITIZER 0x01 -#define FPCI_CLASS_SUB_CODE_INPUT_MOUSE 0x02 -#define FPCI_CLASS_SUB_CODE_INPUT_SCANNER 0x03 -#define FPCI_CLASS_SUB_CODE_INPUT_GAMEPORT 0x04 -#define FPCI_CLASS_SUB_CODE_INPUT_OTHER 0x80 -#define FPCI_CLASS_SUB_CODE_DOCKING_GENERIC 0x00 -#define FPCI_CLASS_SUB_CODE_DOCKING_OTHER 0x80 -#define FPCI_CLASS_SUB_CODE_PROCESSOR_386 0x00 -#define FPCI_CLASS_SUB_CODE_PROCESSOR_486 0x01 -#define FPCI_CLASS_SUB_CODE_PROCESSOR_PENTIUM 0x02 -#define FPCI_CLASS_SUB_CODE_PROCESSOR_ALPHA 0x10 -#define FPCI_CLASS_SUB_CODE_PROCESSOR_POWERPC 0x20 -#define FPCI_CLASS_SUB_CODE_PROCESSOR_MIPS 0x30 -#define FPCI_CLASS_SUB_CODE_PROCESSOR_COPROC 0x40 -#define FPCI_CLASS_SUB_CODE_SERIAL_1394 0x00 -#define FPCI_CLASS_SUB_CODE_SERIAL_ACCESSBUS 0x01 -#define FPCI_CLASS_SUB_CODE_SERIAL_SSA 0x02 -#define FPCI_CLASS_SUB_CODE_SERIAL_USB 0x03 -#define FPCI_CLASS_SUB_CODE_SERIAL_FIBRECHAN 0x04 -#define FPCI_CLASS_SUB_CODE_SERIAL_SMBUS 0x05 -#define FPCI_CLASS_SUB_CODE_SERIAL_INFINIBAND 0x06 -#define FPCI_CLASS_SUB_CODE_SERIAL_IPMI 0x07 -#define FPCI_CLASS_SUB_CODE_SERIAL_SERCOS 0x08 -#define FPCI_CLASS_SUB_CODE_SERIAL_CANBUS 0x09 -#define FPCI_CLASS_SUB_CODE_WIRELESS_IRDA 0x00 -#define FPCI_CLASS_SUB_CODE_WIRELESS_IR 0x01 -#define FPCI_CLASS_SUB_CODE_WIRELESS_RF 0x10 -#define FPCI_CLASS_SUB_CODE_WIRELESS_BLUETOOTH 0x11 -#define FPCI_CLASS_SUB_CODE_WIRELESS_BROADBAND 0x12 -#define FPCI_CLASS_SUB_CODE_WIRELESS_80211A 0x20 -#define FPCI_CLASS_SUB_CODE_WIRELESS_80211B 0x21 -#define FPCI_CLASS_SUB_CODE_WIRELESS_OTHER 0x80 -#define FPCI_CLASS_SUB_CODE_I2O_V1_0 0x00 -#define FPCI_CLASS_SUB_CODE_SATELLITE_TV 0x01 -#define FPCI_CLASS_SUB_CODE_SATELLITE_AUDIO 0x02 -#define FPCI_CLASS_SUB_CODE_SATELLITE_VOICE 0x03 -#define FPCI_CLASS_SUB_CODE_SATELLITE_DATA 0x04 -#define FPCI_CLASS_SUB_CODE_CRYPTO_NETWORK 0x00 -#define FPCI_CLASS_SUB_CODE_CRYPTO_ENTERTAINMENT 0x10 -#define FPCI_CLASS_SUB_CODE_CRYPTO_OTHER 0x80 -#define FPCI_CLASS_SUB_CODE_DATA_DPIO 0x00 -#define FPCI_CLASS_SUB_CODE_DATA_PERFCNTR 0x01 -#define FPCI_CLASS_SUB_CODE_DATA_COMMSYNC 0x10 -#define FPCI_CLASS_SUB_CODE_DATA_MGMT 0x20 -#define FPCI_CLASS_SUB_CODE_DATA_OTHER 0x80 - - -/* Header type 2 (CardBus bridges) */ -#define FPCI_CB_CAPABILITY_LIST 0x14 -/* 0x15 reserved */ -#define FPCI_CB_SEC_STATUS 0x16 /* Secondary status */ -#define FPCI_CB_PRIMARY_BUS 0x18 /* PCI bus number */ -#define FPCI_CB_CARD_BUS 0x19 /* CardBus bus number */ -#define FPCI_CB_SUBORDINATE_BUS 0x1a /* Subordinate bus number */ -#define FPCI_CB_LATENCY_TIMER 0x1b /* CardBus latency timer */ -#define FPCI_CB_MEMORY_BASE_0 0x1c -#define FPCI_CB_MEMORY_LIMIT_0 0x20 -#define FPCI_CB_MEMORY_BASE_1 0x24 -#define FPCI_CB_MEMORY_LIMIT_1 0x28 -#define FPCI_CB_IO_BASE_0 0x2c -#define FPCI_CB_IO_BASE_0_HI 0x2e -#define FPCI_CB_IO_LIMIT_0 0x30 -#define FPCI_CB_IO_LIMIT_0_HI 0x32 -#define FPCI_CB_IO_BASE_1 0x34 -#define FPCI_CB_IO_BASE_1_HI 0x36 -#define FPCI_CB_IO_LIMIT_1 0x38 -#define FPCI_CB_IO_LIMIT_1_HI 0x3a -#define FPCI_CB_IO_RANGE_MASK ~0x03 -/* 0x3c-0x3d are same as for htype 0 */ -#define FPCI_CB_BRIDGE_CONTROL 0x3e -#define FPCI_CB_BRIDGE_CTL_PARITY 0x01 /* Similar to standard bridge control register */ -#define FPCI_CB_BRIDGE_CTL_SERR 0x02 -#define FPCI_CB_BRIDGE_CTL_ISA 0x04 -#define FPCI_CB_BRIDGE_CTL_VGA 0x08 -#define FPCI_CB_BRIDGE_CTL_MASTER_ABORT 0x20 -#define FPCI_CB_BRIDGE_CTL_CB_RESET 0x40 /* CardBus reset */ -#define FPCI_CB_BRIDGE_CTL_16BIT_INT 0x80 /* Enable interrupt for 16-bit cards */ -#define FPCI_CB_BRIDGE_CTL_PREFETCH_MEM0 0x100 /* Prefetch enable for both memory regions */ -#define FPCI_CB_BRIDGE_CTL_PREFETCH_MEM1 0x200 -#define FPCI_CB_BRIDGE_CTL_POST_WRITES 0x400 -#define FPCI_CB_SUBSYSTEM_VENDOR_ID 0x40 -#define FPCI_CB_SUBSYSTEM_ID 0x42 -#define FPCI_CB_LEGACY_MODE_BASE 0x44 /* 16-bit PC Card legacy mode base address (ExCa) */ -/* 0x48-0x7f reserved */ - - -/* Capability lists */ - -#define FPCI_CAP_LIST_ID 0 /* Capability ID */ -#define FPCI_CAP_ID_PM 0x01 /* Power Management */ -#define FPCI_CAP_ID_AGP 0x02 /* Accelerated Graphics Port */ -#define FPCI_CAP_ID_VPD 0x03 /* Vital Product Data */ -#define FPCI_CAP_ID_SLOTID 0x04 /* Slot Identification */ -#define FPCI_CAP_ID_MSI 0x05 /* Message Signalled Interrupts */ -#define FPCI_CAP_ID_CHSWP 0x06 /* CompactPCI HotSwap */ -#define FPCI_CAP_ID_PCIX 0x07 /* PCI-X */ -#define FPCI_CAP_ID_HT 0x08 /* HyperTransport */ -#define FPCI_CAP_ID_VNDR 0x09 /* Vendor-Specific */ -#define FPCI_CAP_ID_DBG 0x0A /* Debug port */ -#define FPCI_CAP_ID_CCRC 0x0B /* CompactPCI Central Resource Control */ -#define FPCI_CAP_ID_SHPC 0x0C /* PCI Standard Hot-Plug Controller */ -#define FPCI_CAP_ID_SSVID 0x0D /* Bridge subsystem vendor/device ID */ -#define FPCI_CAP_ID_AGP3 0x0E /* AGP Target PCI-PCI bridge */ -#define FPCI_CAP_ID_SECDEV 0x0F /* Secure Device */ -#define FPCI_CAP_ID_EXP 0x10 /* PCI Express */ -#define FPCI_CAP_ID_MSIX 0x11 /* MSI-X */ -#define FPCI_CAP_ID_SATA 0x12 /* SATA Data/Index Conf. */ -#define FPCI_CAP_ID_AF 0x13 /* PCI Advanced Features */ -#define FPCI_CAP_ID_EA 0x14 /* PCI Enhanced Allocation */ -#define FPCI_CAP_ID_MAX PCI_CAP_ID_EA - - -#define FPCI_EXT_CAP_ID_ERR 0x01 /* Advanced Error Reporting */ -#define FPCI_EXT_CAP_ID_VC 0x02 /* Virtual Channel Capability */ -#define FPCI_EXT_CAP_ID_DSN 0x03 /* Device Serial Number */ -#define FPCI_EXT_CAP_ID_PWR 0x04 /* Power Budgeting */ -#define FPCI_EXT_CAP_ID_RCLD 0x05 /* Root Complex Link Declaration */ -#define FPCI_EXT_CAP_ID_RCILC 0x06 /* Root Complex Internal Link Control */ -#define FPCI_EXT_CAP_ID_RCEC 0x07 /* Root Complex Event Collector */ -#define FPCI_EXT_CAP_ID_MFVC 0x08 /* Multi-Function VC Capability */ -#define FPCI_EXT_CAP_ID_VC9 0x09 /* same as _VC */ -#define FPCI_EXT_CAP_ID_RCRB 0x0A /* Root Complex RB? */ -#define FPCI_EXT_CAP_ID_VNDR 0x0B /* Vendor-Specific */ -#define FPCI_EXT_CAP_ID_CAC 0x0C /* Config Access - obsolete */ -#define FPCI_EXT_CAP_ID_ACS 0x0D /* Access Control Services */ -#define FPCI_EXT_CAP_ID_ARI 0x0E /* Alternate Routing ID */ -#define FPCI_EXT_CAP_ID_ATS 0x0F /* Address Translation Services */ -#define FPCI_EXT_CAP_ID_SRIOV 0x10 /* Single Root I/O Virtualization */ -#define FPCI_EXT_CAP_ID_MRIOV 0x11 /* Multi Root I/O Virtualization */ -#define FPCI_EXT_CAP_ID_MCAST 0x12 /* Multicast */ -#define FPCI_EXT_CAP_ID_PRI 0x13 /* Page Request Interface */ -#define FPCI_EXT_CAP_ID_AMD_XXX 0x14 /* Reserved for AMD */ -#define FPCI_EXT_CAP_ID_REBAR 0x15 /* Resizable BAR */ -#define FPCI_EXT_CAP_ID_DPA 0x16 /* Dynamic Power Allocation */ -#define FPCI_EXT_CAP_ID_TPH 0x17 /* TPH Requester */ -#define FPCI_EXT_CAP_ID_LTR 0x18 /* Latency Tolerance Reporting */ -#define FPCI_EXT_CAP_ID_SECPCI 0x19 /* Secondary PCIe Capability */ -#define FPCI_EXT_CAP_ID_PMUX 0x1A /* Protocol Multiplexing */ -#define FPCI_EXT_CAP_ID_PASID 0x1B /* Process Address Space ID */ -#define FPCI_EXT_CAP_ID_DPC 0x1D /* Downstream Port Containment */ -#define FPCI_EXT_CAP_ID_L1SS 0x1E /* L1 PM Substates */ -#define FPCI_EXT_CAP_ID_PTM 0x1F /* Precision Time Measurement */ -#define FPCI_EXT_CAP_ID_MAX PCI_EXT_CAP_ID_PTM - -/* ARI capability */ -#define FPCIE_CAPABILITY_BASE_OFFSET 0x100 -#define FPCIE_CAPABILITY_ID_SRIOV_CONTROL_ARI_HIERARCHY 0x10 -#define FPCIE_CAPABILITY_DEVICE_CAPABILITIES_2_OFFSET 0x24 -#define FPCIE_CAPABILITY_DEVICE_CAPABILITIES_2_ARI_FORWARDING 0x20 -#define FPCIE_CAPABILITY_DEVICE_CONTROL_2_OFFSET 0x28 -#define FPCIE_CAPABILITY_DEVICE_CONTROL_2_ARI_FORWARDING 0x20 - -/* - * Address Translation Registers - */ -#define FPCIE_AT_BASE FPCIE_REG_OUTBOUND_R0_PATR0_OFFSET -/* - * Local Management Registers - */ -#define FPCIE_LM_BASE 0x2000 - -#define FPCIE_CFG_HEADER_O_TYPE 0x0000 - -/* Endpoint Function BAR Inbound PCIe to AXI Address Translation Register */ -#define FPCIE_AT_IB_EP_FUNC_BAR_ADDR0(fn, bar) \ - (FPCIE_AT_BASE + 0x0840 + (fn)*0x0040 + (bar)*0x0008) -#define FPCIE_AT_IB_EP_FUNC_BAR_ADDR1(fn, bar) \ - (FPCIE_AT_BASE + 0x0844 + (fn)*0x0040 + (bar)*0x0008) - -/* Endpoint Function f BAR b Configuration Registers */ -#define FPCIE_LM_EP_FUNC_BAR_CFG0(fn) \ - (FPCIE_LM_BASE + 0x0240 + (fn)*0x0008) -#define FPCIE_LM_EP_FUNC_BAR_CFG1(fn) \ - (FPCIE_LM_BASE + 0x0244 + (fn)*0x0008) - -#define FPCIE_LM_EP_FUNC_BAR_CFG_BAR_APERTURE_MASK(b) \ - (GENMASK(4, 0) << ((b)*8)) -#define FPCIE_LM_EP_FUNC_BAR_CFG_BAR_APERTURE(b, a) \ - (((a) << ((b)*8)) & FPCIE_LM_EP_FUNC_BAR_CFG_BAR_APERTURE_MASK(b)) -#define FPCIE_LM_EP_FUNC_BAR_CFG_BAR_CTRL_MASK(b) \ - (GENMASK(7, 5) << ((b)*8)) -#define FPCIE_LM_EP_FUNC_BAR_CFG_BAR_CTRL(b, c) \ - (((c) << ((b)*8 + 5)) & FPCIE_LM_EP_FUNC_BAR_CFG_BAR_CTRL_MASK(b)) - -#define FPCIE_REG_EP_C0_PREF_BASE_LIMIT_OFFSET_GET(config_addr, peu_num) \ - (u32)(config_addr + FPCIE_REG_EP_C0_PREF_BASE_LIMIT_OFFSET + ((peu_num + 3) % 3) * 16) - -#define FPCIE_REG_EP_C0_MEM_BASE_LIMIT_OFFSET_GET(config_addr, peu_num) \ - (u32)(config_addr + FPCIE_REG_EP_C0_MEM_BASE_LIMIT_OFFSET + ((peu_num + 3) % 3) * 16) - -#define FPCIE_BAR_MEM_TYPE_64 1 -#define FPCIE_BAR_MEM_TYPE_32 0 -#define FPCIE_PRIMARY_BUS_REG 0x18 - -#ifdef __cplusplus -} -#endif - -#endif // ! diff --git a/bsp/phytium/libraries/standalone/drivers/pcie/fpcie/fpcie_config.c b/bsp/phytium/libraries/standalone/drivers/pcie/fpcie/fpcie_config.c deleted file mode 100644 index 79c97b8ca2..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/pcie/fpcie/fpcie_config.c +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fpcie_config.c - * Date: 2022-08-10 14:55:11 - * LastEditTime: 2022-08-18 08:57:30 - * Description: This file is for pcie miscellaneous interrupt enable or disable. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/8/18 init commit - */ - -#include "fpcie.h" -#include "fpcie_hw.h" - -/***************************** Include Files *********************************/ - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ - -/** - * @name: FPcieMiscIrqEnable - * @msg: 开启PCIE 子系统中对应中断源的 misc 中断 - * @param {FPcie} *instance_p - * @param {fsize_t} peu_num - */ -void FPcieMiscIrqEnable(FPcie *instance_p, fsize_t peu_num) -{ - u64 config_address; - u32 reg_value; - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - FASSERT(peu_num <= FPCIE_PEU1_C2); - - if (peu_num < FPCIE_PEU1_C0) - { - config_address = instance_p->config.peu0_config_address; - } - else - { - config_address = instance_p->config.peu1_config_address; - peu_num -= FPCIE_PEU1_C0; - } - - reg_value = FPCIE_READREG(config_address, FPCIE_REG_MISC_INT_ENALBE_OFFSET); - FPCIE_WRITEREG(config_address, FPCIE_REG_MISC_INT_ENALBE_OFFSET, (reg_value | (1 << peu_num))); -} - - - -/** - * @name: FPcieMiscIrqDisable - * @msg: 关闭PCIE 子系统中对应中断的 misc 中断 - * @param {FPcie} *instance_p is a pointer to the FPcie instance. - * @param {fsize_t} peu_num is pci-e unit controller selection - */ -void FPcieMiscIrqDisable(FPcie *instance_p, fsize_t peu_num) -{ - uintptr_t config_address; - u32 reg_value; - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - FASSERT(peu_num <= FPCIE_PEU1_C2); - - if (peu_num < FPCIE_PEU1_C0) - { - config_address = instance_p->config.peu0_config_address; - } - else - { - config_address = instance_p->config.peu1_config_address; - peu_num -= FPCIE_PEU1_C0; - } - - reg_value = FPCIE_READREG(config_address, FPCIE_REG_MISC_INT_ENALBE_OFFSET); - FPCIE_WRITEREG(config_address, FPCIE_REG_MISC_INT_ENALBE_OFFSET, (reg_value & ~(1 << peu_num))); -} - - diff --git a/bsp/phytium/libraries/standalone/drivers/pcie/fpcie/fpcie_dma.c b/bsp/phytium/libraries/standalone/drivers/pcie/fpcie/fpcie_dma.c deleted file mode 100644 index e601dbd7d7..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/pcie/fpcie/fpcie_dma.c +++ /dev/null @@ -1,168 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fpcie_dma.c - * Date: 2022-08-10 14:55:11 - * LastEditTime: 2022-08-18 08:57:38 - * Description: This file is for pcie dma implementation. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/8/18 init commit - */ - - -#include "fpcie_hw.h" -#include "fpcie_dma.h" -#include "fpcie.h" -#include "ftypes.h" -#include "fcache.h" -#include "fkernel.h" -#include "fdebug.h" -/***************************** Include Files *********************************/ - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - - -#define FPCIE_DMA_DEBUG_TAG "FPCIE_DMA" -#define FPCIE_DMA_ERROR(format, ...) FT_DEBUG_PRINT_E(FPCIE_DMA_DEBUG_TAG, format, ##__VA_ARGS__) -#define FPCIE_DMA_DEBUG_I(format, ...) FT_DEBUG_PRINT_I(FPCIE_DMA_DEBUG_TAG, format, ##__VA_ARGS__) -#define FPCIE_DMA_DEBUG_W(format, ...) FT_DEBUG_PRINT_W(FPCIE_DMA_DEBUG_TAG, format, ##__VA_ARGS__) -#define FPCIE_DMA_DEBUG_E(format, ...) FT_DEBUG_PRINT_E(FPCIE_DMA_DEBUG_TAG, format, ##__VA_ARGS__) - -/************************** Function Prototypes ******************************/ - -/** - * @name: FPcieDmaDescSet - * @msg: PCIE DMA descriptor group packet - * @param {uintptr} axi_addr is memory address - * @param {uintptr} bar_addr is Base Address Register value - * @param {u32} length want to send byte length - * @param {struct FPcieDmaDescriptor *} desc Desc is the descriptor to be configured - * @param {struct FPcieDmaDescriptor *} next_desc is the next descriptor that needs to be sent - * @return {FError} - */ -FError FPcieDmaDescSet(uintptr axi_addr, - uintptr bar_addr, - u32 length, - struct FPcieDmaDescriptor *desc, - struct FPcieDmaDescriptor *next_desc) -{ - /* 设置内存地址 */ - desc->axi_base_address = axi_addr; - desc->axi_address_phase_controls = 0x00; - - /* 设置pcie空间地址 */ - desc->pcie_base_address = bar_addr; - desc->pcie_tlp_header_attributes = 0x01; - - /* 设置数据长度, 设置dma完成中断 */ - desc->transfer_control = length; - - desc->axi_bus_status = 0x00; - desc->pcie_bus_status = 0x00; - desc->channel_status = 0x00; - - if (next_desc != NULL) - { - /* 使能链表模式 */ - desc->transfer_control &= ~(BIT(24)); - desc->transfer_control |= BIT(29); - - /* 设置下一级链表地址 */ - desc->next_descriptor = (uintptr)next_desc; - } - else - { - desc->transfer_control |= BIT(24); - desc->transfer_control &= ~(BIT(29)); - desc->next_descriptor = 0; - } - - return 0; -} - -/** - * @name: FPcieDmaRead - * @msg: Pcie reads through dma - * @param {uintptr} bar_addr is Base Address Register value - * @param {FPcieDmaDescriptor} *desc is first address of the receive descriptor - */ -void FPcieDmaRead(uintptr bar_address, struct FPcieDmaDescriptor *desc) -{ - /* The enable channel is interrupted */ - FPCIE_WRITEREG(bar_address, FPCIE_REG_DMA_INT_ENABLE_OFFSET, FPCIE_CTRL_DMA_INT_ENABLE_CH0_DONE_MASK | FPCIE_CTRL_DMA_INT_ENABLE_CH0_ERR_MASK); - - FPCIE_WRITEREG(bar_address, FPCIE_REG_DMA_CH0_SP_L_OFFSET, (u32)((uintptr)desc & 0xffffffffU)); -#ifdef __aarch64__ - FPCIE_WRITEREG(bar_address, FPCIE_REG_DMA_CH0_SP_H_OFFSET, (u32)(((uintptr)desc >> 32) & 0xffffffffU)); -#else - FPCIE_WRITEREG(bar_address, FPCIE_REG_DMA_CH0_SP_H_OFFSET, 0); -#endif - - FPCIE_WRITEREG(bar_address, FPCIE_REG_DMA_CH0_CTRL_OFFSET, FPCIE_CTRL_DMA_CH0_CTRL_GO_MASK); -} - -/** - * @name: FPcieDmaWrite - * @msg: Pcie writes through dma - * @param {uintptr} bar_address is Base Address Register value - * @param {FPcieDmaDescriptor} *desc is first address of the send descriptor - */ - -void FPcieDmaWrite(uintptr bar_address, struct FPcieDmaDescriptor *desc) -{ - /* The enable channel is interrupted */ - FPCIE_WRITEREG(bar_address, FPCIE_REG_DMA_INT_ENABLE_OFFSET, FPCIE_CTRL_DMA_INT_ENABLE_CH1_DONE_MASK | FPCIE_CTRL_DMA_INT_ENABLE_CH1_ERR_MASK); - - FPCIE_WRITEREG(bar_address, FPCIE_REG_DMA_CH1_SP_L_OFFSET, (u32)((uintptr)desc & 0xffffffffU)); -#ifdef __aarch64__ - FPCIE_WRITEREG(bar_address, FPCIE_REG_DMA_CH1_SP_H_OFFSET, (u32)(((uintptr)desc >> 32) & 0xffffffffU)); -#else - FPCIE_WRITEREG(bar_address, FPCIE_REG_DMA_CH1_SP_H_OFFSET, 0); -#endif - FPCIE_WRITEREG(bar_address, FPCIE_REG_DMA_CH1_CTRL_OFFSET, FPCIE_CTRL_DMA_CH1_CTRL_GO_MASK | FPCIE_CTRL_DMA_CH1_CTRL_OBNOTIB_MASK); -} - -/** - * @name: FPcieDmaPollDone - * @msg: Polling waits for DMA to complete - * @param {FPcieDmaDescriptor *} desc is the current need to wait for dma to complete - * @param {u32} wait_cnt is the count that needs to wait to end - * @return FError - */ -FError FPcieDmaPollDone(struct FPcieDmaDescriptor *desc, u32 wait_cnt) -{ - FPCIE_DMA_DEBUG_I("Desc axi_bus_status :[0x%02x].", desc->axi_bus_status); - FPCIE_DMA_DEBUG_I("Desc pcie_bus_status:[0x%02x].", desc->pcie_bus_status); - FPCIE_DMA_DEBUG_I("Desc channel_status :[0x%02x].", desc->channel_status); - - while (wait_cnt > 0) - { - if (desc->channel_status == 0x1) - { - FPCIE_DMA_DEBUG_I("Dma channel transfer done."); - return FT_SUCCESS; - } - wait_cnt--; - } - - return FPCIE_ERR_TIMEOUT; -} diff --git a/bsp/phytium/libraries/standalone/drivers/pcie/fpcie/fpcie_dma.h b/bsp/phytium/libraries/standalone/drivers/pcie/fpcie/fpcie_dma.h deleted file mode 100644 index 999b22bbe7..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/pcie/fpcie/fpcie_dma.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fpcie_dma.h - * Date: 2022-08-10 14:55:11 - * LastEditTime: 2022-08-18 08:57:51 - * Description: This file is for pcie dma definition. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/8/18 init commit - */ - -#ifndef FPCIE_DMA_H -#define FPCIE_DMA_H - -#include "ftypes.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/***************************** Include Files *********************************/ - -/************************** Constant Definitions *****************************/ - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ -#define DMA_XFER_START (0x01 << 0) -#define DMA_READ (0x00 << 1) -#define DMA_WRITE (0x01 << 1) - -#define DMA_CHANNEL_READ_DONE (0x01 << 0) -#define DMA_CHANNEL_WRITE_DONE (0x01 << 1) -#define DMA_CHANNEL_READ_ERROR (0x01 << 8) -#define DMA_CHANNEL_WRITE_ERROR (0x01 << 9) - -#define DMA_CHANNEL_READ_DONE_ENABLE (0x01 << 0) -#define DMA_CHANNEL_WRITE_DONE_ENABLE (0x01 << 1) -#define DMA_CHANNEL_READ_ERROR_ENABLE (0x01 << 8) -#define DMA_CHANNEL_WRITE_ERROR_ENABLE (0x01 << 9) -/************************** Function Prototypes ******************************/ - - -/**************************** Type Definitions *******************************/ - -struct FPcieDmaDescriptor -{ - volatile u64 axi_base_address; /* 0x00 */ - volatile u32 axi_address_phase_controls; /* 0x08 */ - volatile u64 pcie_base_address; /* 0x12 */ - volatile u64 pcie_tlp_header_attributes; /* 0x20 */ - volatile u32 transfer_control; /* 0x28 */ - volatile u8 axi_bus_status; /* 0x32 */ - volatile u8 pcie_bus_status; /* 0x33 */ - volatile u8 channel_status; /* 0x34 */ - volatile u8 reserve; /* 0x35 */ - volatile u64 next_descriptor; /* 0x36 */ -} __attribute__((packed)) __attribute__((aligned(128))); - -#ifdef __cplusplus -} -#endif - -#endif // ! \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/pcie/fpcie/fpcie_ep.c b/bsp/phytium/libraries/standalone/drivers/pcie/fpcie/fpcie_ep.c deleted file mode 100644 index a0d7dc7b0e..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/pcie/fpcie/fpcie_ep.c +++ /dev/null @@ -1,227 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fpcie_ep.c - * Date: 2022-08-10 14:55:11 - * LastEditTime: 2022-08-18 08:57:59 - * Description: This file is for pcie endpoint device operation. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/8/18 init commit - */ - -#include "fpcie.h" -#include "fpcie_hw.h" -#include "ftypes.h" -#include "fpcie_common.h" -#include -#include -#include "fkernel.h" -#include "fdebug.h" - - -/***************************** Include Files *********************************/ - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -#define FPCIE_EP_DEBUG_TAG "FPCIE_EP" -#define FPCIE_EP_ERROR(format, ...) FT_DEBUG_PRINT_E(FPCIE_EP_DEBUG_TAG, format, ##__VA_ARGS__) -#define FPCIE_EP_DEBUG_I(format, ...) FT_DEBUG_PRINT_I(FPCIE_EP_DEBUG_TAG, format, ##__VA_ARGS__) -#define FPCIE_EP_DEBUG_W(format, ...) FT_DEBUG_PRINT_W(FPCIE_EP_DEBUG_TAG, format, ##__VA_ARGS__) -#define FPCIE_EP_DEBUG_E(format, ...) FT_DEBUG_PRINT_E(FPCIE_EP_DEBUG_TAG, format, ##__VA_ARGS__) - -/************************** Function Prototypes ******************************/ - -int FPcieEpSetBar(FPcie *instance_p, u32 peu_num, u32 bar_num, u64 bar_mem_addr, u64 bar_mem_size, int flags) -{ - u32 addr0, addr1, reg, cfg, b, aperture, ctrl; - u64 sz; - uintptr_t base_addr; - FASSERT(instance_p != NULL); - base_addr = *(uintptr_t *)(&instance_p->config.control_c0_address + peu_num); - - /* BAR size is 2^(aperture + 7) */ - sz = max(bar_mem_size, (u64)FPCIE_EP_MIN_APERTURE); - /* - * roundup_pow_of_two() returns an unsigned long, which is not suited - * for 64bit values. - */ - - sz = 1ULL << fls(sz - 1); - aperture = log2(sz) - 7; /* 128B -> 0, 256B -> 1, 512B -> 2, ... */ - - if ((flags & FPCIE_BASE_ADDRESS_SPACE) == FPCIE_BASE_ADDRESS_SPACE) - { - ctrl = FPCIE_LM_BAR_CFG_CTRL_IO_32BITS; - } - else - { - boolean is_prefetch = !!(flags & FPCIE_BASE_ADDRESS_MEM_PREFETCH); - boolean is_64bits = sz > SZ_2G; - - if (is_64bits && (bar_num & 1)) - { - return FPCIE_ERR_INVALID_PARAM; - } - - if (is_64bits && !(flags & FPCIE_BASE_ADDRESS_MEM_TYPE_64)) - { - flags |= FPCIE_BASE_ADDRESS_MEM_TYPE_64; - } - - if (is_64bits && is_prefetch) - { - ctrl = FPCIE_LM_BAR_CFG_CTRL_PREFETCH_MEM_64BITS; - } - else if (is_prefetch) - { - ctrl = FPCIE_LM_BAR_CFG_CTRL_PREFETCH_MEM_32BITS; - } - else if (is_64bits) - { - ctrl = FPCIE_LM_BAR_CFG_CTRL_MEM_64BITS; - } - else - { - ctrl = FPCIE_LM_BAR_CFG_CTRL_MEM_32BITS; - } - } - - addr0 = LOWER_32_BITS(bar_mem_addr); - addr1 = UPPER_32_BITS(bar_mem_addr); - - FPCIE_WRITEREG(base_addr, FPCIE_AT_IB_EP_FUNC_BAR_ADDR0(0, bar_num), addr0); - FPCIE_WRITEREG(base_addr, FPCIE_AT_IB_EP_FUNC_BAR_ADDR1(0, bar_num), addr1); - - if (bar_num < FPCIE_BAR_4) - { - reg = FPCIE_LM_EP_FUNC_BAR_CFG0(0); - b = reg; - } - else - { - reg = FPCIE_LM_EP_FUNC_BAR_CFG0(0); - b = reg - FPCIE_BAR_4; - } - - cfg = FPCIE_READREG(base_addr, reg); - cfg &= ~(FPCIE_LM_EP_FUNC_BAR_CFG_BAR_APERTURE_MASK(b) | - FPCIE_LM_EP_FUNC_BAR_CFG_BAR_CTRL_MASK(b)); - cfg |= (FPCIE_LM_EP_FUNC_BAR_CFG_BAR_APERTURE(b, aperture) | - FPCIE_LM_EP_FUNC_BAR_CFG_BAR_CTRL(b, ctrl)); - - FPCIE_WRITEREG(base_addr, reg, cfg); - - return FT_SUCCESS; -} - -int FPcieEpCleanBar(FPcie *instance_p, u32 peu_num, u32 bar_num) -{ - u32 reg, cfg, b, ctrl; - uintptr_t base_addr; - base_addr = *(uintptr_t *)(&instance_p->config.control_c0_address + peu_num); - - if (bar_num < FPCIE_BAR_4) - { - reg = FPCIE_LM_EP_FUNC_BAR_CFG0(0); - b = bar_num; - } - else - { - reg = FPCIE_LM_EP_FUNC_BAR_CFG1(0); - b = bar_num - FPCIE_BAR_4; - } - - ctrl = FPCIE_LM_BAR_CFG_CTRL_DISABLED; - cfg = FPCIE_READREG(base_addr, reg); - cfg &= ~(FPCIE_LM_EP_FUNC_BAR_CFG_BAR_APERTURE_MASK(b) | - FPCIE_LM_EP_FUNC_BAR_CFG_BAR_CTRL_MASK(b)); - cfg |= FPCIE_LM_EP_FUNC_BAR_CFG_BAR_CTRL(b, ctrl); - FPCIE_WRITEREG(base_addr, reg, cfg); - - return FT_SUCCESS; -} - -static int GetOneInData(u64 data) -{ - int n = 63; - while (!(data & GENMASK_ULL(63, 63))) - { - n--; - data <<= 1; - } - - return n; -} - -int FPcieEpMapAddr(FPcie *instance_p, u32 peu_num, u64 phy_addr, u64 pcie_addr, u64 size) -{ - u32 addr0, addr1; - u64 pcie_addr_limit; - u64 reg; - uintptr_t config_address; - uintptr_t control_address; - - FASSERT(instance_p != NULL); - - if (peu_num < FPCIE_PEU1_C0) - { - config_address = instance_p->config.peu0_config_address; - } - else - { - config_address = instance_p->config.peu1_config_address; - } - - control_address = *(uintptr_t *)(&instance_p->config.control_c0_address + peu_num); - pcie_addr_limit = pcie_addr + size; - - if (phy_addr < 0x1000000000) - { - addr0 = ((pcie_addr >> 16) & FPCIE_C0_PREF_BASE_MASK) | (pcie_addr_limit & FPCIE_C0_PREF_LIMIT_MASK); - reg = FPCIE_REG_EP_C0_PREF_BASE_LIMIT_OFFSET_GET(config_address, peu_num); - FPCIE_WRITEREG(reg, 0, addr0); - } - else - { - addr0 = (((pcie_addr & 0xFFFFFFFF) >> 15) & 0xFFF0) | (pcie_addr_limit & 0xFFF00000); - addr1 = ((pcie_addr >> 32) & 0xFF) | ((pcie_addr_limit >> 24) & 0xFF00); - reg = FPCIE_REG_EP_C0_MEM_BASE_LIMIT_OFFSET_GET(config_address, peu_num); - FPCIE_WRITEREG(reg, 0, addr0); - FPCIE_WRITEREG(reg + 4, 0, addr1); - } - - addr0 = (phy_addr & 0xFFFFFF00) | (GetOneInData(size - 1) & 0x3F); - addr1 = (phy_addr >> 32); - FPCIE_WRITEREG(control_address, FPCIE_REG_OUTBOUND_R0_PATR0_OFFSET, addr0); - FPCIE_WRITEREG(control_address, FPCIE_REG_OUTBOUND_R0_PATR1_OFFSET, addr1); - - FPCIE_WRITEREG(control_address, FPCIE_REG_OUTBOUND_R0_PHDR0_OFFSET, 2); - FPCIE_WRITEREG(control_address, FPCIE_REG_OUTBOUND_R0_PHDR1_OFFSET, 0); - FPCIE_WRITEREG(control_address, FPCIE_REG_OUTBOUND_R0_PHDR2_OFFSET, 0); - - addr0 = (pcie_addr & 0xFFFFFF00) | (GetOneInData(size - 1) & 0x3F); - addr1 = (pcie_addr >> 32); - FPCIE_WRITEREG(control_address, FPCIE_REG_OUTBOUND_R0_ARBA0_OFFSET, addr0); - FPCIE_WRITEREG(control_address, FPCIE_REG_OUTBOUND_R0_ARBA1_OFFSET, addr1); - - return FT_SUCCESS; -} diff --git a/bsp/phytium/libraries/standalone/drivers/pcie/fpcie/fpcie_g.c b/bsp/phytium/libraries/standalone/drivers/pcie/fpcie/fpcie_g.c deleted file mode 100644 index a0154c3837..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/pcie/fpcie/fpcie_g.c +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fpcie_g.c - * Date: 2022-08-10 14:55:11 - * LastEditTime: 2022-08-18 08:58:07 - * Description: This file is for pcie static configuration implementation. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/8/18 init commit - */ - - -#include "fpcie.h" -#include "fpcie_hw.h" -#include "fparameters.h" -#include "sdkconfig.h" - - -FPcieConfig FPcieConfigTable[FPCIE_NUM] = -{ - { - .instance_id = FPCIE0_ID, /* Id of device*/ - .irq_num = FPCIE0_MISC_IRQ_NUM, // Irq number - .ecam = FPCI_CONFIG_BASE_ADDR, /* The Memory way */ - .peu0_config_address = FPCI_EU0_CONFIG_BASE_ADDR, - .peu1_config_address = FPCI_EU1_CONFIG_BASE_ADDR, - .control_c0_address = FPCI_EU0_C0_CONTROL_BASE_ADDR, - .control_c1_address = FPCI_EU0_C1_CONTROL_BASE_ADDR, - .control_c2_address = FPCI_EU0_C2_CONTROL_BASE_ADDR, - .control_c3_address = FPCI_EU1_C0_CONTROL_BASE_ADDR, - .control_c4_address = FPCI_EU1_C1_CONTROL_BASE_ADDR, - .control_c5_address = FPCI_EU1_C2_CONTROL_BASE_ADDR, -#ifdef FPCI_INTX_EOI - .intx_peux_stat_address = - { - [0] = FPCI_INTX_PEU0_STAT, - [1] = FPCI_INTX_PEU1_STAT, - }, - .intx_control_eux_cx_address = - { - [0] = FPCI_INTX_EU0_C0_CONTROL, - [1] = FPCI_INTX_EU0_C1_CONTROL, - [2] = FPCI_INTX_EU0_C2_CONTROL, - [3] = FPCI_INTX_EU1_C0_CONTROL, - [4] = FPCI_INTX_EU1_C1_CONTROL, - [5] = FPCI_INTX_EU1_C2_CONTROL, - }, -#endif - .io_base_addr = FPCI_IO_CONFIG_BASE_ADDR, - .io_size = FPCI_IO_CONFIG_REG_LENGTH, - .npmem_base_addr = FPCI_MEM32_BASE_ADDR, - .npmem_size = FPCI_MEM32_REG_LENGTH, - .pmem_base_addr = FPCI_MEM64_BASE_ADDR, /* Prefetchable memory */ - .pmem_size = FPCI_MEM64_REG_LENGTH, - .inta_irq_num = FPCI_INTA_IRQ_NUM, - .intb_irq_num = FPCI_INTB_IRQ_NUM, - .intc_irq_num = FPCI_INTC_IRQ_NUM, - .intd_irq_num = FPCI_INTD_IRQ_NUM, - .need_skip = FPCI_NEED_SKIP - } -}; - diff --git a/bsp/phytium/libraries/standalone/drivers/pcie/fpcie/fpcie_hw.c b/bsp/phytium/libraries/standalone/drivers/pcie/fpcie/fpcie_hw.c deleted file mode 100644 index d8beaedfac..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/pcie/fpcie/fpcie_hw.c +++ /dev/null @@ -1,315 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fpcie_hw.c - * Date: 2022-02-10 14:55:11 - * LastEditTime: 2022-08-18 08:58:12 - * Description: This file is for pcie register operation. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/8/18 init commit - */ - -#include "fpcie_hw.h" -#include "fpcie.h" -#include "fpcie_common.h" -#include "fparameters.h" - -/***************************** Include Files *********************************/ - -/************************** Constant Definitions *****************************/ -/* Access sizes for PCI reads and writes */ -enum FPcieSize -{ - FPCIE_SIZE_8, - FPCIE_SIZE_16, - FPCIE_SIZE_32, -}; - -/**************************** Type Definitions *******************************/ - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ - - -/** - * @name: FPcieEcamConfigAddress - * @msg: 提供一个可用于ECAM 访问机制的地址 - * @param {FPcie} *instance_p is a pointer to the FPcie instance. - * @param {s32} bdf {Bus Device function} - * @param {u32} offset 配置空间中的偏移量 - * @param {void **} addrp 用于存放输出有效访问空间的地址 - * @return FError - */ -static FError FPcieEcamConfigAddress(uintptr addr, s32 bdf, u32 offset, void **addrp) -{ - u32 bus_no = FPCIE_BUS(bdf); - u32 dev_no = FPCIE_DEV(bdf); - u32 vendor = 0; - s32 bdf_parent ; - uintptr ecam_addr = addr; - addr += FPCIE_BUS(bdf) << 20; - addr += FPCIE_DEV(bdf) << 15; - addr += FPCIE_FUNC(bdf) << 12; - - - bdf_parent = FPCIE_BDF(bus_no - 1, 0, 0); - vendor = FPCIE_READREG(addr, FPCIE_CFG_ID_REG) ; - - if ((bus_no > 0) && (dev_no > 0)) - { - if ((FPCIE_READREG_BYTE(addr, FPCIE_HEADER_TYPE_REG) & 0x7f) != FPCIE_HEADER_TYPE_BRIDGE) - { - if (vendor != 0x1d17) - { - return FPCIE_NEED_SKIP; - } - - if (FPcieSkipDevice(ecam_addr, bdf_parent)) - { - return FPCIE_NEED_SKIP; - } - } - } - - addr += offset ; - *addrp = (void *)addr ; - return FT_SUCCESS; -} - - - -/** - * @name: FPcieSkipDevice - * @msg: 跳过部分无效设备 - * @param {FPcie} *instance_p is a pointer to the FPcie instance. - * @param {s32} bdf {Bus Device function} - * @return FError - */ -FError FPcieSkipDevice(uintptr ecam_addr, s32 bdf) -{ - u8 pos, id; - u16 capreg; - u8 port_type; - uintptr addr ; - addr = ecam_addr ; - addr += FPCIE_BUS(bdf) << 20; - addr += FPCIE_DEV(bdf) << 15; - addr += FPCIE_FUNC(bdf) << 12; - - pos = 0x34 ; /* Capabilites Pointer */ - while (1) - { - pos = FPCIE_READREG_BYTE(addr, pos) ; - if (pos < 0x40)/* 超过Capability Pointer所代表的空间offset最大范围 */ - { - break; - } - pos &= ~3 ; /* offset 第两位对齐 */ - id = FPCIE_READREG_BYTE(addr, pos) ; /* PCI Express Cap ID */ - if (id == 0xff) - { - break ; - } - - if (id == 0x10) /* 找到 PCIe设备的cap structure */ - { - capreg = FPCIE_READREG(addr, pos + 2) ; - port_type = (capreg >> 4) & 0xf ; /* Device/Port type */ - if ((port_type == 0x5) && (FPCIE_DEV(bdf) != 0)) - { - return FPCIE_NEED_SKIP ; - } - else - { - return FT_SUCCESS; - } - - } - pos + 1 ; - } - - return FT_SUCCESS; -} - - - - -static s32 FPcieGetFf(enum FPcieSize size) -{ - switch (size) - { - case FPCIE_SIZE_8: - return 0xff; - case FPCIE_SIZE_16: - return 0xffff; - default: - return 0xffffffff; - } -} - -/** - * @name: FPcieEcamReadConfig8bit - * @msg: 基于ECAM机制读取配置空间中偏移量的值 - * @param {FPcie} *instance_p is a pointer to the FPcie instance. - * @param {s32} bdf {Bus Device function} - * @param {u32} offset 配置空间中的偏移量 - * @param {u8} *value_p pointer store date available in the offset - * @return FError - */ - -void FPcieEcamReadConfig8bit(uintptr ecam_addr, s32 bdf, u32 offset, u8 *value_p) -{ - uintptr addr ; - - if (FPcieEcamConfigAddress(ecam_addr, bdf, offset, (void *)&addr) != FT_SUCCESS) - { - *value_p = FPcieGetFf(FPCIE_SIZE_8) ; - return ; - } - - - *value_p = FPCIE_READREG_BYTE(addr, 0); - - return ; -} - -/** - * @name: FPcieEcamReadConfig16bit - * @msg: 基于ECAM机制读取配置空间中偏移量的值 - * @param {FPcie} *instance_p is a pointer to the FPcie instance. - * @param {s32} bdf {Bus Device function} - * @param {u32} offset 配置空间中的偏移量 - * @param {u16} *value_p pointer store date available in the offset - * @return FError - */ - -void FPcieEcamReadConfig16bit(uintptr ecam_addr, s32 bdf, u32 offset, u16 *value_p) -{ - uintptr addr ; - - if (FPcieEcamConfigAddress(ecam_addr, bdf, offset, (void *)&addr) != FT_SUCCESS) - { - *value_p = FPcieGetFf(FPCIE_SIZE_16) ; - return ; - } - - - *value_p = FPCIE_READREG_SHORT(addr, 0); - - return ; -} - -/** - * @name: FPcieEcamReadConfig32bit - * @msg: 基于ECAM机制读取配置空间中偏移量的值 - * @param {FPcie} *instance_p is a pointer to the FPcie instance. - * @param {s32} bdf {Bus Device function} - * @param {u32} offset 配置空间中的偏移量 - * @param {u32} *value_p pointer store date available in the offset - * @return FError - */ -void FPcieEcamReadConfig32bit(uintptr ecam_addr, s32 bdf, u32 offset, u32 *value_p) -{ - uintptr addr ; - - if (FPcieEcamConfigAddress(ecam_addr, bdf, offset, (void *)&addr) != FT_SUCCESS) - { - *value_p = FPcieGetFf(FPCIE_SIZE_32) ; - return ; - } - - - *value_p = FPCIE_READREG(addr, 0); - - return ; -} - - -/** - * @name: FPcieEcamWriteConfig8bit - * @msg: 基于ECAM机制写入配置空间中偏移量的值 - * @param {FPcie} *instance_p is a pointer to the FPcie instance. - * @param {s32} bdf {Bus Device function} - * @param {u32} offset 配置空间中的偏移量 - * @param {u8} value to be written on to the offset -* @return FError - */ - -void FPcieEcamWriteConfig8bit(uintptr ecam_addr, s32 bdf, u32 offset, u8 value) -{ - uintptr addr ; - - if (FPcieEcamConfigAddress(ecam_addr, bdf, offset, (void *)&addr) != FT_SUCCESS) - { - return ; - } - - FPCIE_WRITEREG_BYTE(addr, 0, value) ; - - return ; -} - -/** - * @name: FPcieEcamWriteConfig16bit - * @msg: 基于ECAM机制写入配置空间中偏移量的值 - * @param {FPcie} *instance_p is a pointer to the FPcie instance. - * @param {s32} bdf {Bus Device function} - * @param {u32} offset 配置空间中的偏移量 - * @param {u16} value to be written on to the offset -* @return FError - */ - -void FPcieEcamWriteConfig16bit(uintptr ecam_addr, s32 bdf, u32 offset, u16 value) -{ - uintptr addr ; - - if (FPcieEcamConfigAddress(ecam_addr, bdf, offset, (void *)&addr) != FT_SUCCESS) - { - return ; - } - - FPCIE_WRITEREG_SHORT(addr, 0, value) ; - - return ; -} - - -/** - * @name: FPcieEcamWriteConfig32bit - * @msg: 基于ECAM机制写入配置空间中偏移量的值 - * @param {FPcie} *instance_p is a pointer to the FPcie instance. - * @param {s32} bdf {Bus Device function} - * @param {u32} offset 配置空间中的偏移量 - * @param {u32} value to be written on to the offset -* @return FError - */ - -void FPcieEcamWriteConfig32bit(uintptr ecam_addr, s32 bdf, u32 offset, u32 value) -{ - uintptr addr ; - - if (FPcieEcamConfigAddress(ecam_addr, bdf, offset, (void *)&addr) != FT_SUCCESS) - { - return ; - } - - FPCIE_WRITEREG(addr, 0, value) ; - - return ; -} diff --git a/bsp/phytium/libraries/standalone/drivers/pcie/fpcie/fpcie_hw.h b/bsp/phytium/libraries/standalone/drivers/pcie/fpcie/fpcie_hw.h deleted file mode 100644 index 96a4c5d0b0..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/pcie/fpcie/fpcie_hw.h +++ /dev/null @@ -1,325 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fpcie_hw.h - * Date: 2022-08-10 14:55:11 - * LastEditTime: 2022-08-18 08:58:22 - * Description: This file is for pcie register definition. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/8/18 init commit - */ - -#ifndef FPCIE_HW_H -#define FPCIE_HW_H - -#include "ftypes.h" -#include "fio.h" -#include "ferror_code.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/***************************** Include Files *********************************/ - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/* config register */ -#define FPCIE_REG_MISC_INT_STATE_OFFSET 0x00000008U /* 杂散中断状态寄存器 */ -#define FPCIE_REG_MISC_INT_ENALBE_OFFSET 0x0000000CU /* 杂散中断是能寄存器 */ -#define FPCIE_REG_MSI_ENABLE_OFFSET 0x000000200U /* MSI 中断使能寄存器 */ -#define FPCIE_REG_MSI_UP32_ADDR_OFFSET 0x000000208U /* 匹配 MSI 的高 32 位地址寄存器 */ -#define FPCIE_REG_MSI_LOW32_ADDR_OFFSET 0x00000020CU /* 匹配 MSI 的低 32 位地址寄存器 */ -#define FPCIE_REG_MSI_SPI_ENABLE_OFFSET 0x000000608U /* MSI 转 SPI 的使能寄存器 */ -#define FPCIE_REG_MSI_SPI_DATA_OFFSET 0x00000060CU /* MSI 转 SPI 后的 ID 和数据信息寄存器 */ -#define FPCIE_REG_EP_C0_PREF_BASE_LIMIT_OFFSET 0x000000A30U /* EP 模式下 PIO 请求译码到 C0 控制器 的可预取空间的 BASE 和 LIMIT 域 */ -#define FPCIE_REG_EP_C0_PREF_BASE_LIMIT_UP32_OFFSET 0x000000A34U /* EP 模式下 PIO 请求译码到 C0 控制器的可预取空间的高 32 位 BASE 和 sLIMIT */ -#define FPCIE_REG_EP_C0_MEM_BASE_LIMIT_OFFSET 0x000000A38U /* EP 模式下 PIO 请求译码到 C1 控制器的存储空间的 BASE 和 LIMIT 域 */ -#define FPCIE_REG_EP_C1_PREF_BASE_LIMIT_OFFSET 0x000000A40U -#define FPCIE_REG_EP_C1_PREF_BASE_LIMIT_UP32_OFFSET 0x000000A44U -#define FPCIE_REG_EP_C1_MEM_BASE_LIMIT_OFFSET 0x000000A48U -#define FPCIE_REG_EP_C2_PREF_BASE_LIMIT_OFFSET 0x000000A50U -#define FPCIE_REG_EP_C2_PREF_BASE_LIMIT_UP32_OFFSET 0x000000A54U -#define FPCIE_REG_EP_C2_MEM_BASE_LIMIT_OFFSET 0x000000A58U - -/* Controler register */ -#define FPCIE_REG_MSI_LOW_ADDRESS_OFFSET 0x94U /* MSI 事务的写地址低 32 位 */ -#define FPCIE_REG_MSI_HIGH_ADDRESS_OFFSET 0x98U /* MSI 事务的写地址高 32 位 */ -#define FPCIE_REG_MSI_DATA_OFFSET 0x9CU /* MSI 事务携带的数据信息 */ -#define FPCIE_REG_OUTBOUND_R0_PATR0_OFFSET 0x8000U /* 控制器输出方向上 region 0 的转换后地址低 32 位 */ -#define FPCIE_REG_OUTBOUND_R0_PATR1_OFFSET 0x8004U /* 控制器输出方向上 region 0 的转换后地址高 32 位 */ -#define FPCIE_REG_OUTBOUND_R0_PHDR0_OFFSET 0x8008U /* 控制器输出方向上 region 0 的转换描述符[31:0]位 */ -#define FPCIE_REG_OUTBOUND_R0_PHDR1_OFFSET 0x800CU /* 控制器输出方向上 region 0 的转换描述符[63:31]位 */ -#define FPCIE_REG_OUTBOUND_R0_PHDR2_OFFSET 0x8010U /* 控制器输出方向上 region 0 的转换描述符[95:64]位 */ -#define FPCIE_REG_OUTBOUND_R0_ARBA0_OFFSET 0x8018U /* 控制器输出方向上 region 0 的转换前的地址低 32 位 */ -#define FPCIE_REG_OUTBOUND_R0_ARBA1_OFFSET 0x801CU /* 控制器输出方向上 region 0 的转换前的地址高 32 位 */ -#define FPCIE_REG_F0_B0_ATR_L_OFFSET 0x8840U /* 控制器 FUNC 0 BAR 0 地址转换寄存器低 32 位 */ -#define FPCIE_REG_F0_B0_ATR_H_OFFSET 0x8844U /* 控制器 FUNC 0 BAR 0 地址转换寄存器高 32 位 */ -#define FPCIE_REG_F0_B2_ATR_L_OFFSET 0x8850U /* 控制器 FUNC 0 BAR 2 地址转换寄存器低 32 位 */ -#define FPCIE_REG_F0_B2_ATR_H_OFFSET 0x8854U /* 控制器 FUNC 0 BAR 2 地址转换寄存器高 32 位 */ -#define FPCIE_REG_DMA_CH0_CTRL_OFFSET 0xC000U /* DMA channel 0 的控制器寄存器 */ -#define FPCIE_REG_DMA_CH0_SP_L_OFFSET 0xC004U /* DMA channel 0 描述符存储的首地址低 32 位寄存器 */ -#define FPCIE_REG_DMA_CH0_SP_H_OFFSET 0xC008U /* DMA channel 0 描述符存储的首地址高 32 位寄存器 */ -#define FPCIE_REG_DMA_CH1_CTRL_OFFSET 0xC014U /* DMA channel 1 的控制器寄存器 */ -#define FPCIE_REG_DMA_CH1_SP_L_OFFSET 0xC018U /* DMA channel 1 描述符存储的首地址低 32 位寄存器 */ -#define FPCIE_REG_DMA_CH1_SP_H_OFFSET 0xC01CU /* DMA channel 1 描述符存储的首地址高 32 位寄存器 */ -#define FPCIE_REG_DMA_INT_STATUS_OFFSET 0xC0A0U /* DMA 中断状态寄存器 */ -#define FPCIE_REG_DMA_INT_ENABLE_OFFSET 0xC0A4U /* DMA 使能寄存器 */ - -/* REG_MISC_INT_STATE */ -#define FPCIE_MISC_STATE_C0_DMA_INT_MASK 0x1U /* c0 dma 中断 */ -#define FPCIE_MISC_STATE_C0_LOCAL_INT_MASK 0x2U /* c0 本地中断 */ -#define FPCIE_MISC_STATE_C0_POWER_STATE_CHANGE_MASK 0x4U /* c0 电源状态变化 */ -#define FPCIE_MISC_STATE_C1_DMA_INT_MASK 0x100U /* c1 dma 中断 */ -#define FPCIE_MISC_STATE_C1_LOCAL_INT_MASK 0x200U /* c1 本地中断 */ -#define FPCIE_MISC_STATE_C1_POWER_STATE_CHANGE_MASK 0x400U /* c1 电源状态变化 */ -#define FPCIE_MISC_STATE_C2_DMA_INT_MASK 0x1000U /* c2 dma 中断 */ -#define FPCIE_MISC_STATE_C2_LOCAL_INT_MASK 0x2000U /* c2 本地中断 */ -#define FPCIE_MISC_STATE_C2_POWER_STATE_CHANGE_MASK 0x4000U /* c2 电源状态变化 */ - -/* REG_MISC_INT_ENALBE */ -#define FPCIE_MISC_ENALBE_C0_MISC_INT_EN_MASK 0x1U /* c0 杂散中断使能 */ -#define FPCIE_MISC_ENALBE_C1_MISC_INT_EN_MASK 0x2U /* c1 杂散中断使能 */ -#define FPCIE_MISC_ENALBE_C2_MISC_INT_EN_MASK 0x4U /* c2 杂散中断使能 */ - -/* REG_MSI_ENABLE */ -#define FPCIE_MSI_EN_MASK 0x1U /* MSI 中断使能 */ - -/* REG_MSI_UP32_ADDR */ -#define FPCIE_MSI64_HI_ADDR_OFFSET 0xFFFFFFFFU /* MSI64 高位地址 */ - -/* REG_MSI_LOW32_ADDR */ -#define FPCIE_MSI64_LO_ADDR_MASK 0xFFFF0000U /* MSI64 低位地址 */ - -/* REG_MSI_SPI_ENABLE */ -#define FPCIE_MSI_DATA_MASK 0xFFFFU /* msi 中断的数据 */ -#define FPCIE_MSI_DEVICE_ID_MASK 0xFFFF0000U /* msi 中断的设备 id */ - -/* REG_EP_C0_PREF_BASE_LIMIT */ -#define FPCIE_C0_PREF_BASE_MASK 0xfff0U /* 可预取存储空间基址低位 */ -#define FPCIE_C0_PREF_LIMIT_MASK 0xfff00000U /* 可预取存储空间上限低位 */ - -/* REG_EP_C0_PREF_BASE_LIMIT_UP32 */ -#define FPCIE_C0_PREF_BASE_UP32_MASK 0xFFU /* 可预取存储空间基址高位 */ -#define FPCIE_C0_PREF_LIMIT_UP32_MASK 0xFF00U /* 可预取存储空间上限高位 */ - -/* REG_EP_C1_PREF_BASE_LIMIT */ -#define FPCIE_C1_PREF_BASE_MASK 0xfff0U /* 可预取存储空间基址低位 */ -#define FPCIE_C1_PREF_LIMIT_MASK 0xfff00000U /* 可预取存储空间上限低位 */ - -/* REG_EP_C1_PREF_BASE_LIMIT_UP32 */ -#define FPCIE_C1_PREF_BASE_UP32_MASK 0xFFU /* 可预取存储空间基址高位 */ -#define FPCIE_C1_PREF_LIMIT_UP32_MASK 0xFF00U /* 可预取存储空间上限高位 */ - -/* Controler register */ -/* REG_MSI_LOW_ADDRESS */ -#define FPCIE_CTRL_MSI_LOW_ADDR_MASK 0xFFFFFFFCU /* MSI 事务的写地址低位 */ - -/* REG_MSI_HIGH_ADDRESS */ -#define FPCIE_CTRL_MSI_HIGH_ADDR_MASK 0xFFFFFFFFU /* MSI 事务的写地址高 32 位 */ - -/* REG_MSI_DATA */ -#define FPCIE_CTRL_MESSAGE_DATA_MASK 0xffffU /* MSI 事务携带的数据信息 */ - -/* REG_OUTBOUND_R0_PATR0 */ -#define FPCIE_CTRL_OUTBOUND_R0_PATR0_R0_NUM_BITS_MASK 0x1fU /* 配置可通过的 AXI 域地址,例如配置为 N,那么N+1 位地址可通过。 */ -#define FPCIE_CTRL_OUTBOUND_R0_PATR0_ADDR_BITS_MASK 0xffffff00U /* 控制器输出方向 region 0 转换后的地址[31:8]位 */ - -/* REG_OUTBOUND_R0_PATR1 */ -#define FPCIE_CTRL_OUTBOUND_R0_PATR1_ADDR_BITS_MASK 0xffffffffU /* 控制器输出方向 region 0 转换后的地址[63:32]位 */ - -/* REG_OUTBOUND_R0_PHDR0 */ -#define FPCIE_CTRL_OUTBOUND_R0_PHDR0_DESCRIPTOR_MASK 0xffffffffU /* 控制器输出方向 region 0 的描述符[31:0]位 */ - -/* REG_OUTBOUND_R0_PHDR1 */ -#define FPCIE_CTRL_OUTBOUND_R0_PHDR1_DESCRIPTOR_MASK 0xffffffffU /* 控制器输出方向 region 0 的描述符[63:32]位 */ - -/* REG_OUTBOUND_R0_PHDR2 */ -#define FPCIE_CTRL_OUTBOUND_R0_PHDR2_DESCRIPTOR_MASK 0x1fffU /* 控制器输出方向 region 0 的描述符[76:64]位 */ - -/* REG_OUTBOUND_R0_ARBA0 */ -#define FPCIE_CTRL_OUTBOUND_R0_ARBA0_LOWER_MASK 0x3f /* 配置AXI域匹配地址时的mask位,例如配置为M,那么 M+1 位地址在匹配时不做比较。 */ -#define FPCIE_CTRL_OUTBOUND_R0_ARBA0_ADDR_MASK 0xFFFFFFF0U /* 控制器输出方向 region 0 转换前的地址[31:8]位 */ - -/* REG_OUTBOUND_R0_ARBA1 */ -#define FPCIE_CTRL_OUTBOUND_R0_ARBA1_ADDR_MASK 0xffffffffU /* 控制器输出方向 region 0 转换前的地址[63:32]位 */ - -/* REG_F0_B0_ATR_L */ -#define FPCIE_CTRL_F0_B0_ATR_L_ADDR_MASK 0xffffffffU /* 控制器 FUNC 0 BAR 0 地址转换寄存器低 32 位 */ - -/* REG_F0_B0_ATR_H */ -#define FPCIE_CTRL_F0_B0_ATR_H_ADDR_MASK 0xffffffffU /* 控制器 FUNC 0 BAR 0 地址转换寄存器高 32 位 */ - -/* REG_F0_B2_ATR_L */ -#define FPCIE_CTRL_F0_B2_ATR_L_ADDR_MASK 0xffffffffU /* 控制器 FUNC 0 BAR 2 地址转换寄存器低 32 位 */ - -/* REG_F0_B2_ATR_H */ -#define FPCIE_CTRL_F0_B2_ATR_H_ADDR_MASK 0xffffffffU /* 控制器 FUNC 0 BAR 2 地址转换寄存器高 32 位 */ - -/* REG_DMA_CH0_CTRL */ -#define FPCIE_CTRL_DMA_CH0_CTRL_GO_MASK 0x1U /* DMA channel 0 点火位,开始传输 */ -#define FPCIE_CTRL_DMA_CH0_CTRL_OBNOTIB_MASK 0x2U /* 配置 DMA channel 0 是读操作还是写操作 */ - -/* REG_DMA_CH0_SP_L */ -#define FPCIE_CTRL_DMA_CH0_SP_L_START_MASK 0xFFFFFFFFU /* 保存 channel 0 描述符的内存地址低 32 位 */ - -/* REG_DMA_CH0_SP_H */ -#define FPCIE_CTRL_DMA_CH0_SP_H_START_MASK 0xFFFFFFFFU /* 保存 channel 0 描述符的内存地址高 32 位 */ - -/* REG_DMA_CH1_CTRL */ -#define FPCIE_CTRL_DMA_CH1_CTRL_GO_MASK 0x1U /* DMA channel 1 点火位,开始传输 */ -#define FPCIE_CTRL_DMA_CH1_CTRL_OBNOTIB_MASK 0x2U /* 配置 DMA channel 1 是读操作还是写操作 */ - -/* REG_DMA_CH1_SP_L */ -#define FPCIE_CTRL_DMA_CH1_SP_L_START_MASK 0xFFFFFFFFU /* 保存 channel 1 描述符的内存地址低 32 位 */ - -/* REG_DMA_CH1_SP_H */ -#define FPCIE_CTRL_DMA_CH1_SP_H_START_MASK 0xFFFFFFFFU /* 保存 channel 1 描述符的内存地址高 32 位 */ - -/* REG_DMA_INT_STATUS */ -#define FPCIE_CTRL_DMA_INT_STATUS_CH0_DONE_MASK 0x1U /* channel 0 传输完成中断 */ -#define FPCIE_CTRL_DMA_INT_STATUS_CH1_DONE_MASK 0x2U /* channel 1 传输完成中断 */ -#define FPCIE_CTRL_DMA_INT_STATUS_CH0_ERR_MASK 0x10U /* channel 0 传输出错中断 */ -#define FPCIE_CTRL_DMA_INT_STATUS_CH1_ERR_MASK 0x20U /* channel 1 传输出错中断 */ -#define FPCIE_CTRL_DMA_INT_STATUS_ALL_MASK (FPCIE_CTRL_DMA_INT_STATUS_CH0_DONE_MASK | FPCIE_CTRL_DMA_INT_STATUS_CH1_DONE_MASK | FPCIE_CTRL_DMA_INT_STATUS_CH0_ERR_MASK | FPCIE_CTRL_DMA_INT_STATUS_CH1_ERR_MASK) - -/* REG_DMA_INT_ENABLE */ -#define FPCIE_CTRL_DMA_INT_ENABLE_CH0_DONE_MASK 0x1U /* 使能 channel 0 传输完成后产生中断 */ -#define FPCIE_CTRL_DMA_INT_ENABLE_CH1_DONE_MASK 0x2U /* 使能 channel 1 传输完成后产生中断 */ -#define FPCIE_CTRL_DMA_INT_ENABLE_CH0_ERR_MASK 0x10U /* 使能 channel 0 传输出错后产生中断 */ -#define FPCIE_CTRL_DMA_INT_ENABLE_CH1_ERR_MASK 0x20U /* 使能 channel 1 传输出错后产生中断 */ -#define FPCIE_CTRL_DMA_INT_ENABLE_ALL_MASK (FPCIE_CTRL_DMA_INT_ENABLE_CH0_DONE_MASK | FPCIE_CTRL_DMA_INT_ENABLE_CH1_DONE_MASK | FPCIE_CTRL_DMA_INT_ENABLE_CH0_ERR_MASK | FPCIE_CTRL_DMA_INT_ENABLE_CH1_ERR_MASK) - -/** @name ECAM Address Register bitmaps and masks - * - * @{ - */ -#define FPCIE_ECAM_MASK 0x0FFFFFFF /**< Mask of all valid bits */ -#define FPCIE_ECAM_BUS_MASK 0x0FF00000 /**< Bus Number Mask */ -#define FPCIE_ECAM_DEV_MASK 0x000F8000 /**< Device Number Mask */ -#define FPCIE_ECAM_FUN_MASK 0x00007000 /**< Function Number Mask */ -#define FPCIE_ECAM_REG_MASK 0x00000FFC /**< Register Number Mask */ -#define FPCIE_ECAM_BYT_MASK 0x00000003 /**< Byte Address Mask */ - -#define FPCIE_ECAM_BUS_SHIFT 20 /**< Bus Number Shift Value */ -#define FPCIE_ECAM_DEV_SHIFT 15 /**< Device Number Shift Value */ -#define FPCIE_ECAM_FUN_SHIFT 12 /**< Function Number Shift Value */ -#define FPCIE_ECAM_REG_SHIFT 2 /**< Register Number Shift Value */ -#define FPCIE_ECAM_BYT_SHIFT 0 /**< Byte Offset Shift Value */ - -#define FPCIE_BUS(d) (((d) >> 16) & 0xff) -/* - * Please note the difference in DEVFN usage in U-Boot vs Linux. U-Boot - * uses DEVFN in bits 15-8 but Linux instead expects DEVFN in bits 7-0. - * Please see the Linux header include/uapi/linux/pci.h for more details. - * This is relevant for the following macros: - * FPCIE_DEV, FPCIE_FUNC, FPCIE_DEVFN - * The U-Boot macro FPCIE_DEV is equivalent to the Linux FPCIE_SLOT version with - * the remark from above (input d in bits 15-8 instead of 7-0. - */ -#define FPCIE_DEV(d) (((d) >> 11) & 0x1f) -#define FPCIE_FUNC(d) (((d) >> 8) & 0x7) -#define FPCIE_DEVFN(d, f) ((d) << 11 | (f) << 8) - -#define FPCIE_MASK_BUS(bdf) ((bdf) & 0xffff) -#define FPCIE_ADD_BUS(bus, devfn) (((bus) << 16) | (devfn)) -#define FPCIE_BDF(b, d, f) ((b) << 16 | FPCIE_DEVFN(d, f)) -#define FPCIE_VENDEV(v, d) (((v) << 16) | (d)) -#define FPCIE_ANY_ID (~0) - -/** -* -* This macro reads the given register. -* -* @param base_addr is the base address of the device. -* @param reg_offset is the register offset to be read. -* -* @return The 32-bit value of the register -* -* @note None. -* -*****************************************************************************/ -#define FPCIE_READREG(base_addr, reg_offset) \ - FtIn32((base_addr) + (u32)(reg_offset)) - -/****************************************************************************/ -/** -* -* This macro writes the given register. -* -* @param base_addr is the base address of the device. -* @param reg_offset is the register offset to be written. -* @param data is the 32-bit value to write to the register. -* -* @return None. -* -* @note None. -* -*****************************************************************************/ -#define FPCIE_WRITEREG(base_addr, reg_offset, data) \ - FtOut32((base_addr) + (u32)(reg_offset), (u32)(data)) - -#define FPCIE_READREG_BYTE(base_addr, reg_offset) \ - FtIn8((base_addr) + (u32)(reg_offset)) - -#define FPCIE_WRITEREG_BYTE(base_addr, reg_offset, data) \ - FtOut8((base_addr) + (u32)(reg_offset), (u8)(data)) - - -#define FPCIE_READREG_SHORT(base_addr, reg_offset) \ - FtIn16((base_addr) + (u32)(reg_offset)) - -#define FPCIE_WRITEREG_SHORT(base_addr, reg_offset, data) \ - FtOut16((base_addr) + (u32)(reg_offset), (u16)(data)) - - -#define FPCIE_SETBIT(base_addr, reg_offset, data) \ - FtSetBit32((base_addr) + (u32)(reg_offset), (u32)(data)) - -#define FPCIE_CLEARBIT(base_addr, reg_offset, data) \ - FtClearBit32((base_addr) + (u32)(reg_offset), (u32)(data)) - - -/************************** Function Prototypes ******************************/ - - -void FPcieEcamReadConfig8bit(uintptr ecam_addr, s32 bdf, u32 offset, u8 *value_p); - -void FPcieEcamReadConfig16bit(uintptr ecam_addr, s32 bdf, u32 offset, u16 *value_p); - -void FPcieEcamReadConfig32bit(uintptr ecam_addr, s32 bdf, u32 offset, u32 *value_p); - - -void FPcieEcamWriteConfig8bit(uintptr ecam_addr, s32 bdf, u32 offset, u8 value); - -void FPcieEcamWriteConfig16bit(uintptr ecam_addr, s32 bdf, u32 offset, u16 value); - -void FPcieEcamWriteConfig32bit(uintptr ecam_addr, s32 bdf, u32 offset, u32 value); - -FError FPcieSkipDevice(uintptr ecam_addr, s32 bdf); - -#ifdef __cplusplus -} -#endif - -#endif // ! \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/pcie/fpcie/fpcie_intr.c b/bsp/phytium/libraries/standalone/drivers/pcie/fpcie/fpcie_intr.c deleted file mode 100644 index 1bc17a7051..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/pcie/fpcie/fpcie_intr.c +++ /dev/null @@ -1,220 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fpcie_intr.c - * Date: 2022-08-10 14:55:11 - * LastEditTime: 2022-08-18 08:59:42 - * Description: This file is for pcie interrupt handler implementation. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/8/18 init commit - */ - -/***************************** Include Files *********************************/ -#include "fpcie.h" -#include "fpcie_common.h" -#include "fpcie_hw.h" -#include "fparameters.h" -#include "fdebug.h" - -/***************** Macros (Inline Functions) Definitions *********************/ - -#define FPCIE_INTX_DEBUG_TAG "FPCIE_INTX" -#define FPCIE_INTX_ERROR(format, ...) FT_DEBUG_PRINT_E(FPCIE_INTX_DEBUG_TAG, format, ##__VA_ARGS__) -#define FPCIE_INTX_DEBUG_I(format, ...) FT_DEBUG_PRINT_I(FPCIE_INTX_DEBUG_TAG, format, ##__VA_ARGS__) -#define FPCIE_INTX_DEBUG_W(format, ...) FT_DEBUG_PRINT_W(FPCIE_INTX_DEBUG_TAG, format, ##__VA_ARGS__) -#define FPCIE_INTX_DEBUG_E(format, ...) FT_DEBUG_PRINT_E(FPCIE_INTX_DEBUG_TAG, format, ##__VA_ARGS__) - -/************************** Constant Definitions *****************************/ -#define INTA 0 -#define INTB 1 -#define INTC 2 -#define INTD 3 - -/**************************** Type Definitions *******************************/ - -/************************** Variable Definitions *****************************/ - -/************************** Function Prototypes ******************************/ - - -/** - * @name: FPcieIntxRegiterIrqHandler - * @msg: Use bus, device, and function to register interrupt response functions with INTX - * @param {FPcie *} instance_p is a pointer to the FPcie instance. - * @param {u32} bus is the number of the bus on which you want to register the funtion - * @param {u32} device is the number of the device on which you want to register the funtion - * @param {u32} function is the number of the function on which you want to register the funtion - * @param {FPcieIntxFun *} intx_fun_p is the pointer the user uses to register the callback function - * @return {FError} - */ -FError FPcieIntxRegiterIrqHandler(FPcie *instance_p, - u32 bdf, - FPcieIntxFun *intx_fun_p) -{ - int i; - u8 interrupt_pin, interrupt_line; - u8 header_type; - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - - /* 通过ecm 直接访问 控制寄存器 */ - FPcieEcamReadConfig8bit(instance_p->config.ecam, bdf, FPCIE_HEADER_TYPE_REG, &header_type) ; - - if (header_type == 0) - { - for (i = 0; i < instance_p->scaned_bdf_count; i++) - { - if (instance_p->scaned_bdf_array[i] == (s32)bdf) - { - break; //获取到i的值,直接跳出循环 - } - } - - /* 读出 Interrupt Pin*/ - FPcieEcamReadConfig8bit(instance_p->config.ecam, bdf, FPCIE_INTERRUPT_PIN_REG, &interrupt_pin) ; - switch (interrupt_pin) - { - case 0x1: /* INTA# */ - interrupt_line = instance_p->config.inta_irq_num ; - instance_p->inta_fun[i] = *intx_fun_p; //中断函数,写入的是pcie instance的成员,一个pcie rc只有一个中断处理函数? - instance_p->inta_fun[i].bdf = bdf; //一个中断函数对应一个bdf号 - break ; - case 0x2: /* INTB# */ - interrupt_line = instance_p->config.intb_irq_num ; - instance_p->intb_fun[i] = *intx_fun_p; - instance_p->intb_fun[i].bdf = bdf; - break ; - case 0x3: /* INTC# */ - interrupt_line = instance_p->config.intc_irq_num ; - instance_p->intc_fun[i] = *intx_fun_p; - instance_p->intc_fun[i].bdf = bdf; - break ; - case 0x4: /* INTD# */ - interrupt_line = instance_p->config.intd_irq_num ; - instance_p->intd_fun[i] = *intx_fun_p; - instance_p->intd_fun[i].bdf = bdf; - break ; - default: - FPCIE_INTX_DEBUG_E("Error interrupt pin.") ; - return FPCIE_NOT_FOUND; - } - - FPcieEcamWriteConfig8bit(instance_p->config.ecam, bdf, FPCIE_INTERRUPT_LINE_REG, interrupt_line) ; - } - else - { - FPCIE_INTX_DEBUG_E("Pcie intx not match header type.") ; - return FPCIE_NOT_FOUND; - } - - return FT_SUCCESS; -} - - -static void FPcieIntxCallback(FPcie *instance_p, u8 INTx_NUM) -{ - int i; - u16 status ; - /* 读取对应bdf 的status */ - for (i = 0; i < instance_p->scaned_bdf_count; i++) //轮询所有扫描到的pcie节点的interrupt status - { - FPcieEcamReadConfig16bit(instance_p->config.ecam, instance_p->scaned_bdf_array[i], FPCIE_STATUS_REG, &status) ; - if (status & 0x8) /* check intrrupt status */ - { - switch (INTx_NUM) - { - case INTA: - instance_p->inta_fun[i].IntxCallBack(instance_p->inta_fun[i].args); - break; - case INTB: - instance_p->intb_fun[i].IntxCallBack(instance_p->intb_fun[i].args); - break; - case INTC: - instance_p->intc_fun[i].IntxCallBack(instance_p->intc_fun[i].args); - break; - case INTD: - instance_p->intd_fun[i].IntxCallBack(instance_p->intd_fun[i].args); - break; - default: - FPCIE_INTX_DEBUG_E("%s: error intx num.", __func__); - break; - - } - } - } -} - - - -static void FPcieIntxIrqEoi(FPcie *instance_p, u32 intx_idx) -{ -#ifdef FPCI_INTX_EOI - u32 status = 0 ; - u32 istatus = 0, imask = 0 ; - int i ; - status = FPCIE_READREG(instance_p->config.intx_peux_stat_address[0], 0) + (FPCIE_READREG(instance_p->config.intx_peux_stat_address[1], 0) << 12); - - imask = 1 << (3 - intx_idx); - istatus = (1 << intx_idx) << 24; - for (i = 0; i < FPCI_INTX_CONTROL_NUM; i++, status >>= 4) - { - if (imask & status) - { - FPCIE_WRITEREG(instance_p->config.intx_control_eux_cx_address[i], 0, istatus) ; - } - } -#else - (void) instance_p; - (void) intx_idx ; -#endif - return ; - -} - -/** - * @name: FPcieIntxIrqHandler - * @msg: Intx interrupt service function of pcie - * @param {s32} vector is interrupt vector number - * @param {void} *args is Pass in a pointer to be processed - */ -void FPcieIntxIrqHandler(s32 vector, void *args) //中断响应函数 -{ - FPcie *instance_p = (FPcie *)args; - FASSERT(instance_p != NULL); - u32 *reg_data = 0; - - switch (vector) - { - case FPCI_INTA_IRQ_NUM: //如果响应的是INTA中断,则调用pcie_obj中INTA的中断处理函数 - FPcieIntxCallback(instance_p, INTA) ; - FPcieIntxIrqEoi(instance_p, 0) ; - break; - case FPCI_INTB_IRQ_NUM: - FPcieIntxCallback(instance_p, INTA) ; - FPcieIntxIrqEoi(instance_p, 1) ; - break; - case FPCI_INTC_IRQ_NUM: - FPcieIntxCallback(instance_p, INTA) ; - FPcieIntxIrqEoi(instance_p, 2) ; - break; - case FPCI_INTD_IRQ_NUM: - FPcieIntxCallback(instance_p, INTA) ; - FPcieIntxIrqEoi(instance_p, 3) ; - break; - default: - break; - } -} diff --git a/bsp/phytium/libraries/standalone/drivers/pcie/fpcie/fpcie_intr.h b/bsp/phytium/libraries/standalone/drivers/pcie/fpcie/fpcie_intr.h deleted file mode 100644 index 413d2dd839..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/pcie/fpcie/fpcie_intr.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fpcie_intr.h - * Date: 2022-08-10 14:55:11 - * LastEditTime: 2022-08-18 08:59:47 - * Description: This file is for pcie interrupt handler definition. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/8/18 init commit - */ - - -#ifndef FPCIE_INTR_H -#define FPCIE_INTR_H - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/************************** Variable Definitions *****************************/ - -/************************** Function Prototypes ******************************/ - -#ifdef __cplusplus -extern "C" -{ -#endif - - -#ifdef __cplusplus -} -#endif - - -#endif // ! \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/pcie/fpcie/fpcie_misc.c b/bsp/phytium/libraries/standalone/drivers/pcie/fpcie/fpcie_misc.c deleted file mode 100644 index cea658c0fd..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/pcie/fpcie/fpcie_misc.c +++ /dev/null @@ -1,161 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fpcie_misc.c - * Date: 2022-08-10 14:55:11 - * LastEditTime: 2022-08-18 08:59:17 - * Description: This file is for pcie miscellaneous interrupt operation. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/8/18 init commit - */ - - -#include "fpcie.h" -#include "fpcie_hw.h" -#include "fassert.h" -#include "fdebug.h" - - -/***************************** Include Files *********************************/ - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ -#define FPCIE_INTR_DEBUG_TAG "FPCIE_INTR" -#define FPCIE_INTR_ERROR(format, ...) FT_DEBUG_PRINT_E(FPCIE_INTR_DEBUG_TAG, format, ##__VA_ARGS__) -#define FPCIE_INTR_DEBUG_I(format, ...) FT_DEBUG_PRINT_I(FPCIE_INTR_DEBUG_TAG, format, ##__VA_ARGS__) -#define FPCIE_INTR_DEBUG_W(format, ...) FT_DEBUG_PRINT_W(FPCIE_INTR_DEBUG_TAG, format, ##__VA_ARGS__) -/************************** Function Prototypes ******************************/ - -FError FPcieMiscSetHandler(FPcie *instance_p, u32 handler_type, - void *func_pointer, void *call_back_ref) -{ - FError status; - FASSERT(instance_p != NULL); - FASSERT(func_pointer != NULL); - FASSERT(instance_p->is_ready == (u32)FT_COMPONENT_IS_READY); - - switch (handler_type) - { - case FPCIE_HANDLER_DMASEND: - status = FT_SUCCESS; - instance_p->fpcie_dma_tx_cb = ((FPcieIrqCallBack)(void *)func_pointer); - instance_p->dma_tx_args = call_back_ref; - break; - case FPCIE_HANDLER_DMARECV: - status = FT_SUCCESS; - instance_p->fpcie_dma_rx_cb = ((FPcieIrqCallBack)(void *)func_pointer); - instance_p->dma_rx_args = call_back_ref; - break; - case FPCIE_HANDLER_DMASEND_ERROR: - status = FT_SUCCESS; - instance_p->fpcie_dma_tx_error_cb = ((FPcieIrqCallBack)(void *)func_pointer); - instance_p->dma_tx_error_args = call_back_ref; - break; - case FPCIE_HANDLER_DMARECV_ERROR: - status = FT_SUCCESS; - instance_p->fpcie_dma_rx_error_cb = ((FPcieIrqCallBack)(void *)func_pointer); - instance_p->dma_rx_error_args = call_back_ref; - break; - default: - status = FPCIE_ERR_INVALID_PARAM; - break; - } - return status; -} - -void FPcieMiscIrq(s32 vector, void *args) -{ - FPcie *instance_p = (FPcie *)args; - uintptr_t control_address; - u32 reg_value; - (void)vector; - FASSERT(instance_p != NULL); - - if (FPCIE_READREG(instance_p->config.peu0_config_address, FPCIE_REG_MISC_INT_STATE_OFFSET) & FPCIE_MISC_STATE_C0_DMA_INT_MASK) - { - FPCIE_INTR_DEBUG_I("PEU0 C0 DMA IRQ!"); - control_address = instance_p->config.control_c0_address; - } - else if (FPCIE_READREG(instance_p->config.peu0_config_address, FPCIE_REG_MISC_INT_STATE_OFFSET) & FPCIE_MISC_STATE_C1_DMA_INT_MASK) - { - FPCIE_INTR_DEBUG_I("PEU0 C1 DMA IRQ!"); - control_address = instance_p->config.control_c1_address; - } - else if (FPCIE_READREG(instance_p->config.peu0_config_address, FPCIE_REG_MISC_INT_STATE_OFFSET) & FPCIE_MISC_STATE_C2_DMA_INT_MASK) - { - FPCIE_INTR_DEBUG_I("PEU0 C2 DMA IRQ!"); - control_address = instance_p->config.control_c2_address; - } - else if (FPCIE_READREG(instance_p->config.peu1_config_address, FPCIE_REG_MISC_INT_STATE_OFFSET) & FPCIE_MISC_STATE_C0_DMA_INT_MASK) - { - FPCIE_INTR_DEBUG_I("PEU0 C0 DMA IRQ!"); - control_address = instance_p->config.control_c3_address; - } - else if (FPCIE_READREG(instance_p->config.peu1_config_address, FPCIE_REG_MISC_INT_STATE_OFFSET) & FPCIE_MISC_STATE_C1_DMA_INT_MASK) - { - FPCIE_INTR_DEBUG_I("PEU0 C1 DMA IRQ!"); - control_address = instance_p->config.control_c4_address; - } - else if (FPCIE_READREG(instance_p->config.peu1_config_address, FPCIE_REG_MISC_INT_STATE_OFFSET) & FPCIE_MISC_STATE_C2_DMA_INT_MASK) - { - FPCIE_INTR_DEBUG_I("PEU0 C2 DMA IRQ!"); - control_address = instance_p->config.control_c5_address; - } - - FPCIE_INTR_DEBUG_I("Pcie misc irq!"); - FPCIE_INTR_DEBUG_I("Pcie dma irq status : 0x%08lx", FPCIE_READREG(control_address, FPCIE_REG_DMA_INT_STATUS_OFFSET)); - - reg_value = FPCIE_READREG(control_address, FPCIE_REG_DMA_INT_STATUS_OFFSET); - - if (reg_value & FPCIE_CTRL_DMA_INT_STATUS_CH0_DONE_MASK) - { - if (instance_p->fpcie_dma_rx_cb) - { - instance_p->fpcie_dma_rx_cb(instance_p->dma_rx_args); - } - } - - if (reg_value & FPCIE_CTRL_DMA_INT_STATUS_CH1_DONE_MASK) - { - if (instance_p->fpcie_dma_tx_cb) - { - instance_p->fpcie_dma_tx_cb(instance_p->dma_tx_args); - } - } - - if (reg_value & FPCIE_CTRL_DMA_INT_STATUS_CH0_ERR_MASK) - { - if (instance_p->fpcie_dma_rx_error_cb) - { - instance_p->fpcie_dma_rx_error_cb(instance_p->dma_rx_error_args); - } - } - - if (reg_value & FPCIE_CTRL_DMA_INT_STATUS_CH1_ERR_MASK) - { - if (instance_p->fpcie_dma_tx_error_cb) - { - instance_p->fpcie_dma_tx_error_cb(instance_p->dma_tx_error_args); - } - } - - FPCIE_WRITEREG(control_address, FPCIE_REG_DMA_INT_STATUS_OFFSET, FPCIE_CTRL_DMA_INT_STATUS_ALL_MASK); -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/pcie/fpcie/fpcie_sinit.c b/bsp/phytium/libraries/standalone/drivers/pcie/fpcie/fpcie_sinit.c deleted file mode 100644 index 102f1e0d12..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/pcie/fpcie/fpcie_sinit.c +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fpcie_sinit.c - * Date: 2022-08-10 14:55:11 - * LastEditTime: 2022-08-18 08:59:22 - * Description: This file is for pcie static variables implementation. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/8/18 init commit - */ - -#include "fpcie.h" -#include "fparameters.h" - -extern FPcieConfig FPcieConfigTable[FPCIE_NUM]; - - -FPcieConfig *FPcieLookupConfig(u32 instance_id) -{ - FPcieConfig *ptr = NULL; - u32 index; - - for (index = 0; index < (u32)FPCIE_NUM; index++) - { - if (FPcieConfigTable[index].instance_id == instance_id) - { - ptr = &FPcieConfigTable[index]; - break; - } - } - - return (FPcieConfig *)ptr; -} diff --git a/bsp/phytium/libraries/standalone/drivers/pin/fgpio/Kconfig b/bsp/phytium/libraries/standalone/drivers/pin/fgpio/Kconfig deleted file mode 100644 index 02c30d70d6..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/pin/fgpio/Kconfig +++ /dev/null @@ -1,7 +0,0 @@ - -config ENABLE_FGPIO - bool - prompt "Use FGPIO" - default n - - diff --git a/bsp/phytium/libraries/standalone/drivers/pin/fgpio/fgpio.c b/bsp/phytium/libraries/standalone/drivers/pin/fgpio/fgpio.c deleted file mode 100644 index a48064cd40..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/pin/fgpio/fgpio.c +++ /dev/null @@ -1,466 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fgpio.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:25:29 - * Description:  This files is for GPIO user API implmentation - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/3/1 init commit - * 2.0 zhugengyu 2022/7/1 support e2000 - */ - - -/***************************** Include Files *********************************/ -#include "fdebug.h" -#include "fparameters.h" - -#include "fgpio_hw.h" -#include "fgpio.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ -#define FGPIO_DEBUG_TAG "FGPIO" -#define FGPIO_ERROR(format, ...) FT_DEBUG_PRINT_E(FGPIO_DEBUG_TAG, format, ##__VA_ARGS__) -#define FGPIO_WARN(format, ...) FT_DEBUG_PRINT_W(FGPIO_DEBUG_TAG, format, ##__VA_ARGS__) -#define FGPIO_INFO(format, ...) FT_DEBUG_PRINT_I(FGPIO_DEBUG_TAG, format, ##__VA_ARGS__) -#define FGPIO_DEBUG(format, ...) FT_DEBUG_PRINT_D(FGPIO_DEBUG_TAG, format, ##__VA_ARGS__) - -/************************** Function Prototypes ******************************/ - -/************************** Variable Definitions *****************************/ - -/*****************************************************************************/ -/** - * @name: FGpioCfgInitialize - * @msg: 初始化GPIO控制器实例 - * @return {FError} FGPIO_SUCCESS 表示初始化成功 - * @param {FGpio} *instance, GPIO控制器实例 - * @param {FGpioConfig} *config, GPIO控制器配置 - */ -FError FGpioCfgInitialize(FGpio *const instance, const FGpioConfig *const config) -{ - FASSERT(instance && config); - - if (0 == config->base_addr) - { - FGPIO_ERROR("Invalid base address !!!"); - return FGPIO_ERR_INVALID_PARA; - } - - if (config != &instance->config) - { - instance->config = *config; - } - - /* mask interrupt for all pins */ - FGpioWriteReg32(instance->config.base_addr, FGPIO_INTMASK_OFFSET, FGPIO_INTR_PORTA_MASKALL); - - instance->is_ready = FT_COMPONENT_IS_READY; - return FGPIO_SUCCESS; -} - -/** - * @name: FGpioDeInitialize - * @msg: 去初始化GPIO控制器实例 - * @return {*} - * @param {FGpio} *instance, GPIO控制器实例 - */ -void FGpioDeInitialize(FGpio *const instance) -{ - FASSERT(instance); - u32 port_id; - u32 pin_id; - FGpioPin *pin = NULL; - - for (port_id = FGPIO_PORT_A; port_id < FGPIO_PORT_NUM; port_id++) - { - for (pin_id = FGPIO_PIN_0; pin_id < FGPIO_PIN_NUM; pin_id++) - { - pin = instance->pins[port_id][pin_id]; - if (NULL != pin) - { - FGpioPinDeInitialize(pin); - } - } - } - - instance->is_ready = 0; - return; -} - -/** - * @name: FGpioPinInitialize - * @msg: 初始化GPIO引脚实例 - * @return {FError} FGPIO_SUCCESS 表示初始化成功 - * @param {FGpio} *instance, GPIO控制器实例 - * @param {FGpioPin} *pin_instance, GPIO引脚实例 - * @param {FGpioPinId} index, GPIO引脚索引 - */ -FError FGpioPinInitialize(FGpio *const instance, FGpioPin *const pin_instance, - const FGpioPinId index) -{ - FASSERT(instance && pin_instance); - FASSERT_MSG(index.port < FGPIO_PORT_NUM, "Invalid gpio port %d", index); - FASSERT_MSG(index.pin < FGPIO_PIN_NUM, "Invalid gpio pin %d", index); - - if (FT_COMPONENT_IS_READY != instance->is_ready) - { - FGPIO_ERROR("gpio instance is not yet inited !!!"); - return FGPIO_ERR_NOT_INIT; - } - - if (FT_COMPONENT_IS_READY == pin_instance->is_ready) - { - FGPIO_ERROR("gpio pin already inited !!!"); - return FGPIO_ERR_ALREADY_INIT; - } - - pin_instance->index = index; - instance->pins[index.port][index.pin] = pin_instance; - pin_instance->instance = instance; - pin_instance->irq_cb = NULL; - pin_instance->irq_cb_params = NULL; - pin_instance->irq_one_time = FALSE; - pin_instance->is_ready = FT_COMPONENT_IS_READY; - - return FGPIO_SUCCESS; -} - -/** - * @name: FGpioPinDeInitialize - * @msg: 去初始化GPIO引脚实例 - * @return {NONE} - * @param {FGpioPin} *pin, GPIO引脚实例 - */ -void FGpioPinDeInitialize(FGpioPin *const pin) -{ - FASSERT(pin); - FGpio *const instance = pin->instance; - - if ((NULL == instance) || (FT_COMPONENT_IS_READY != instance->is_ready) || - (FT_COMPONENT_IS_READY != pin->is_ready)) - { - FGPIO_ERROR("gpio instance is not yet inited !!!"); - return; - } - - if (FGPIO_DIR_INPUT == FGpioGetDirection(pin)) - { - FGpioSetInterruptMask(pin, FALSE); /* 关闭引脚中断 */ - } - - FGpioPinId index = pin->index; - FASSERT_MSG(instance->pins[index.port][index.pin] == pin, "invalid pin instance"); - instance->pins[index.port][index.pin] = NULL; - pin->instance = NULL; - pin->is_ready = 0U; - - return; -} - -/** - * @name: FGpioGetPinIrqSourceType - * @msg: 获取引脚中断的上报方式 - * @return {FGpioIrqSourceType} 引脚中断的上报方式 - * @param {FGpioPin} *pin, GPIO引脚实例 - */ -FGpioIrqSourceType FGpioGetPinIrqSourceType(FGpioPinId pin_id) -{ -#if defined(FGPIO_VERSION_1) /* FT2000-4, D2000 */ - if (FGPIO_PORT_B == pin_id.port) - { - return FGPIO_IRQ_NOT_SUPPORT; - } -#endif - - if (FGPIO_PORT_A == pin_id.port) - { -#if defined(FGPIO_VERSION_2) /* E2000 GPIO 0 ~ 5 */ - if (pin_id.ctrl <= FGPIO_WITH_PIN_IRQ) /* 0 ~ 2 中断单独上报 */ - { - return FGPIO_IRQ_BY_PIN; - } -#endif - - return FGPIO_IRQ_BY_CONTROLLER; - } - - return FGPIO_IRQ_NOT_SUPPORT; -} - -/** - * @name: FGpioReadRegDir - * @msg: 从寄存器读取GPIO组的输入输出方向 - * @return {u32} GPIO组的输入输出方向, bit[8:0]有效 - * @param {uintptr} base_addr, GPIO控制器基地址 - * @param {FGpioPortIndex} port, GPIO组, A/B - */ -static u32 FGpioReadRegDir(uintptr base_addr, const FGpioPortIndex port) -{ - u32 reg_val = 0; - - if (FGPIO_PORT_A == port) - { - reg_val = FGpioReadReg32(base_addr, FGPIO_SWPORTA_DDR_OFFSET); - } -#if defined(FGPIO_VERSION_1) /* FT2000-4, D2000 */ - else if (FGPIO_PORT_B == port) - { - reg_val = FGpioReadReg32(base_addr, FGPIO_SWPORTB_DDR_OFFSET); - } -#endif - else - { - FASSERT(0); - } - - return reg_val; -} - -/** - * @name: FGpioWriteRegDir - * @msg: 向寄存器写入GPIO组的输入输出方向 - * @return {*} - * @param {uintptr} base_addr, GPIO控制器基地址 - * @param {FGpioPortIndex} port, GPIO组, A/B - * @param {u32} reg_val, GPIO组的输入输出方向, bit[8:0]有效 - */ -static void FGpioWriteRegDir(uintptr base_addr, const FGpioPortIndex port, const u32 reg_val) -{ - if (FGPIO_PORT_A == port) - { - FGpioWriteReg32(base_addr, FGPIO_SWPORTA_DDR_OFFSET, reg_val); - } -#if defined(FGPIO_VERSION_1) /* FT2000-4, D2000 */ - else if (FGPIO_PORT_B == port) - { - FGpioWriteReg32(base_addr, FGPIO_SWPORTB_DDR_OFFSET, reg_val); - } -#endif - else - { - FASSERT(0); - } - - return; -} - -/** - * @name: FGpioSetDirection - * @msg: 设置GPIO引脚的输入输出方向 - * @return {*} - * @param {FGpioPin} *instance, GPIO控制器实例 - * @param {FGpioDirection} dir, 待设置的GPIO的方向 - * @note 初始化 GPIO 实例后使用此函数 - */ -void FGpioSetDirection(FGpioPin *const pin, FGpioDirection dir) -{ - FASSERT(pin); - FGpio *const instance = pin->instance; - FASSERT(instance); - FASSERT_MSG(instance->is_ready == FT_COMPONENT_IS_READY, "gpio instance not is yet inited !!!"); - u32 reg_val; - FGpioPinId index = pin->index; - uintptr base_addr = instance->config.base_addr; - - reg_val = FGpioReadRegDir(base_addr, index.port); - - if (FGPIO_DIR_INPUT == dir) - { - reg_val &= ~BIT(index.pin); /* 0-Input */ - } - else if (FGPIO_DIR_OUTPUT == dir) - { - reg_val |= BIT(index.pin); /* 1-Output */ - } - else - { - FASSERT(0); - } - - FGpioWriteRegDir(base_addr, index.port, reg_val); - return; -} - -/** - * @name: FGpioGetDirection - * @msg: 获取GPIO引脚的输入输出方向 - * @return {FGpioDirection} GPIO引脚方向 - * @param {FGpioPin} *pin, GPIO引脚实例 - * @note 初始化 GPIO 实例后使用此函数 - */ -FGpioDirection FGpioGetDirection(FGpioPin *const pin) -{ - FASSERT(pin); - FGpio *const instance = pin->instance; - FASSERT(instance); - FASSERT(instance->is_ready == FT_COMPONENT_IS_READY); - - FGpioPinId index = pin->index; - uintptr base_addr = instance->config.base_addr; - u32 reg_val = FGpioReadRegDir(base_addr, index.port); - - return (BIT(index.pin) & reg_val) ? FGPIO_DIR_OUTPUT : FGPIO_DIR_INPUT; -} - -/** - * @name: FGpioReadRegVal - * @msg: 获取GPIO组的输出寄存器值 - * @return {u32} 输出寄存器值 bit[8:0]有效 - * @param {uintptr} base_addr, GPIO控制器基地址 - * @param {FGpioPortIndex} port, GPIO组 - */ -static u32 FGpioReadRegVal(uintptr base_addr, const FGpioPortIndex port) -{ - u32 reg_val = 0; - - if (FGPIO_PORT_A == port) - { - reg_val = FGpioReadReg32(base_addr, FGPIO_SWPORTA_DR_OFFSET); - } -#if defined(FGPIO_VERSION_1) /* FT2000-4, D2000 */ - else if (FGPIO_PORT_B == port) - { - reg_val = FGpioReadReg32(base_addr, FGPIO_SWPORTB_DR_OFFSET); - } -#endif - else - { - FASSERT(0); - } - - return reg_val; -} - -/** - * @name: FGpioWriteRegVal - * @msg: 设置GPIO组的输出寄存器值 - * @return {*} - * @param {uintptr} base_addr, GPIO控制器基地址 - * @param {FGpioPortIndex} port, GPIO组 - * @param {u32} reg_val, 输出寄存器值 bit[8:0]有效 - */ -void FGpioWriteRegVal(uintptr base_addr, const FGpioPortIndex port, const u32 reg_val) -{ - if (FGPIO_PORT_A == port) - { - FGpioWriteReg32(base_addr, FGPIO_SWPORTA_DR_OFFSET, reg_val); - } -#if defined(FGPIO_VERSION_1) /* FT2000-4, D2000 */ - else if (FGPIO_PORT_B == port) - { - FGpioWriteReg32(base_addr, FGPIO_SWPORTB_DR_OFFSET, reg_val); - } -#endif - else - { - FASSERT(0); - } - - return; -} - -/** - * @name: FGpioSetOutputValue - * @msg: 设置GPIO引脚的输出值 - * @return {FError} FGPIO_SUCCESS 表示设置成功 - * @param {FGpioPin} *pin, GPIO引脚实例 - * @param {FGpioPinVal} output, GPIO引脚的输出值 - * @note 初始化 GPIO 实例后使用此函数,先设置 GPIO 引脚为输出后调用此函数 - */ -FError FGpioSetOutputValue(FGpioPin *const pin, const FGpioPinVal output) -{ - FASSERT(pin); - FGpio *const instance = pin->instance; - FASSERT(instance); - FASSERT_MSG(instance->is_ready == FT_COMPONENT_IS_READY, "gpio instance is not yet inited !!!"); - - FGpioPinId index = pin->index; - uintptr base_addr = instance->config.base_addr; - u32 reg_val; - - if (FGPIO_DIR_OUTPUT != FGpioGetDirection(pin)) - { - FGPIO_ERROR("Need to set GPIO direction as OUTPUT first !!!"); - return FGPIO_ERR_INVALID_STATE; - } - - FGPIO_INFO("pin-%d at port %d", index.pin, index.port); - reg_val = FGpioReadRegVal(base_addr, index.port); - if (FGPIO_PIN_LOW == output) - { - reg_val &= ~BIT(index.pin); - } - else if (FGPIO_PIN_HIGH == output) - { - reg_val |= BIT(index.pin); - } - else - { - FASSERT(0); - } - - FGPIO_INFO("Output val 0x%x", reg_val); - FGpioWriteRegVal(base_addr, index.port, reg_val); - FGPIO_INFO("Output val 0x%x", FGpioReadRegVal(base_addr, index.port)); - return FGPIO_SUCCESS; -} - -/** - * @name: FGpioGetInputValue - * @msg: 获取GPIO引脚的输入值 - * @return {FGpioPinVal} 获取的输入值,高电平/低电平 - * @param {FGpioPin} *instance, GPIO引脚实例 - * @note 初始化 GPIO 实例后使用此函数,先设置 GPIO 引脚为输入后调用此函数 - */ -FGpioPinVal FGpioGetInputValue(FGpioPin *const pin) -{ - FASSERT(pin); - FGpio *const instance = pin->instance; - FASSERT(instance); - FASSERT(instance->is_ready == FT_COMPONENT_IS_READY); - FGpioPinId index = pin->index; - uintptr base_addr = instance->config.base_addr; - u32 reg_val; - - if (FGPIO_DIR_INPUT != FGpioGetDirection(pin)) - { - FGPIO_ERROR("Need to set GPIO direction as INPUT first !!!"); - return FGPIO_PIN_LOW; - } - - if (FGPIO_PORT_A == index.port) - { - reg_val = FGpioReadReg32(base_addr, FGPIO_EXT_PORTA_OFFSET); - } -#if defined(FGPIO_VERSION_1) /* FT2000-4, D2000 */ - else if (FGPIO_PORT_B == index.port) - { - reg_val = FGpioReadReg32(base_addr, FGPIO_EXT_PORTB_OFFSET); - } -#endif - else - { - FASSERT(0); - } - - FGPIO_INFO("Input val: 0x%x.", reg_val); - return (BIT(index.pin) & reg_val) ? FGPIO_PIN_HIGH : FGPIO_PIN_LOW; -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/pin/fgpio/fgpio.h b/bsp/phytium/libraries/standalone/drivers/pin/fgpio/fgpio.h deleted file mode 100644 index 3aeee3f91f..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/pin/fgpio/fgpio.h +++ /dev/null @@ -1,242 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fgpio.h - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:25:35 - * Description:  This files is for GPIO user API definition - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/3/1 init commit - * 2.0 zhugengyu 2022/7/1 support e2000 - */ - - -#ifndef FGPIO_H -#define FGPIO_H - -#include "fparameters.h" -#include "ftypes.h" -#include "fassert.h" -#include "ferror_code.h" -#include "sdkconfig.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/************************** Constant Definitions *****************************/ -#define FGPIO_SUCCESS FT_SUCCESS -#define FGPIO_ERR_INVALID_PARA FT_MAKE_ERRCODE(ErrModBsp, ErrBspGpio, 0x0) -#define FGPIO_ERR_INVALID_STATE FT_MAKE_ERRCODE(ErrModBsp, ErrBspGpio, 0x1) -#define FGPIO_ERR_NOT_INIT FT_MAKE_ERRCODE(ErrModBsp, ErrBspGpio, 0x2) -#define FGPIO_ERR_ALREADY_INIT FT_MAKE_ERRCODE(ErrModBsp, ErrBspGpio, 0x3) - -#if defined(CONFIG_TARGET_F2000_4) || defined(CONFIG_TARGET_D2000) -#define FGPIO_VERSION_1 /* 用于FT2000/4和D2000平台的GPIO 0 ~ 1 */ -#elif defined(CONFIG_TARGET_E2000) -#define FGPIO_VERSION_2 /* 用于E2000平台的GPIO 3 ~ 5 */ -#elif defined(TARDIGRADE) - -#else -#error "Invalid target board !!!" -#endif - -typedef enum -{ - FGPIO_PORT_A = 0, -#if defined(FGPIO_VERSION_1) /* FT2000-4, D2000 */ - FGPIO_PORT_B, -#endif - - FGPIO_PORT_NUM -} FGpioPortIndex; /* GPIO引脚所在的组 */ - -typedef enum -{ - FGPIO_PIN_0 = 0, - FGPIO_PIN_1, - FGPIO_PIN_2, - FGPIO_PIN_3, - FGPIO_PIN_4, - FGPIO_PIN_5, - FGPIO_PIN_6, - FGPIO_PIN_7, -#if defined(FGPIO_VERSION_2) || defined(TARDIGRADE)/* E2000 GPIO 0 ~ 5 */ - FGPIO_PIN_8, - FGPIO_PIN_9, - FGPIO_PIN_10, - FGPIO_PIN_11, - FGPIO_PIN_12, - FGPIO_PIN_13, - FGPIO_PIN_14, - FGPIO_PIN_15, -#endif - - FGPIO_PIN_NUM -} FGpioPinIndex; /* GPIO引脚号 */ - -#if defined(FGPIO_VERSION_1) /* FT2000-4, D2000 */ -FASSERT_STATIC(8 == FGPIO_PIN_NUM); /* pin 0 ~ 7 */ -FASSERT_STATIC(2 == FGPIO_PORT_NUM); /* port a/b */ -#elif defined(FGPIO_VERSION_2) /* E2000 GPIO 0 ~ 5 */ -FASSERT_STATIC(16 == FGPIO_PIN_NUM); /* pin 0 ~ 15 */ -FASSERT_STATIC(1 == FGPIO_PORT_NUM); /* port a */ -#endif -typedef enum -{ - FGPIO_DIR_INPUT = 0, /* 输入 */ - FGPIO_DIR_OUTPUT /* 输出 */ -} FGpioDirection; /* GPIO引脚的输入输出方向 */ - -typedef enum -{ - FGPIO_IRQ_TYPE_EDGE_FALLING = 0, /* 下降沿中断,引脚检测到电平从高变低时触发 */ - FGPIO_IRQ_TYPE_EDGE_RISING, /* 上升沿中断,引脚检测到电平从低变高时触发 */ - FGPIO_IRQ_TYPE_LEVEL_LOW, /* 低电平中断,引脚电平为低时触发 */ - FGPIO_IRQ_TYPE_LEVEL_HIGH /* 高电平中断,引脚电平为高时触发 */ -} FGpioIrqType; /* GPIO引脚中断类型 */ - -typedef enum -{ - FGPIO_IRQ_NOT_SUPPORT, /* 不支持引脚中断 */ - FGPIO_IRQ_BY_CONTROLLER, /* 引脚中断控制器合并上报 */ -#if defined(FGPIO_VERSION_2) /* E2000 GPIO 0 ~ 5 */ - FGPIO_IRQ_BY_PIN, /* 引脚中断单独上报 */ -#endif -} FGpioIrqSourceType; - -typedef enum -{ - FGPIO_PIN_LOW = 0, /* 低电平 */ - FGPIO_PIN_HIGH /* 高电平 */ -} FGpioPinVal; /* GPIO引脚电平类型 */ - -/**************************** Type Definitions *******************************/ -typedef struct _FGpioPin FGpioPin; -typedef struct _FGpio FGpio; - -typedef struct -{ - u32 instance_id; /* GPIO实例ID */ - uintptr base_addr; /* GPIO控制器基地址 */ -#if defined(FGPIO_VERSION_1) || defined(TARDIGRADE) /* FT2000-4, D2000 */ - u32 irq_num; /* GPIO控制器中断号 */ -#elif defined(FGPIO_VERSION_2) /* E2000 GPIO 0 ~ 5 */ - u32 irq_num[FGPIO_PIN_NUM]; /* GPIO各引脚的中断号,如果是控制器中断,则数组所有值一致 */ -#endif - u32 irq_priority; /* 中断优先级 */ -} FGpioConfig; /* GPIO控制器配置 */ - -typedef struct -{ - u32 ctrl; /* GPIO控制器号 */ - FGpioPortIndex port; /* GPIO引脚所在的组 */ - FGpioPinIndex pin; /* GPIO引脚号 */ -} FGpioPinId; /* GPIO引脚索引 */ - -typedef void (*FGpioInterruptCallback)(s32 vector, void *param); /* GPIO引脚中断回调函数类型 */ - -typedef struct _FGpioPin -{ - FGpioPinId index; /* 索引 */ - u32 is_ready; - FGpio *instance; - FGpioInterruptCallback irq_cb; /* 中断回调函数, Port-A有效 */ - void *irq_cb_params; /* 中断回调函数的入参, Port-A有效 */ - boolean irq_one_time; /* Port-A有效, TRUE: 进入中断后关闭该引脚的中断,用于电平敏感中断,防止一直进入中断 */ -} FGpioPin; /* GPIO引脚实例 */ - -typedef struct _FGpio -{ - FGpioConfig config; - u32 is_ready; - FGpioPin *pins[FGPIO_PORT_NUM][FGPIO_PIN_NUM]; -} FGpio; /* GPIO控制器实例 */ - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ -/* 生成GPIO引脚索引 */ -#define FGPIO_PIN(port, pin) \ - (FGpioPinId) { \ - (port), (pin) \ - } - -/************************** Function Prototypes ******************************/ -/* 获取GPIO控制器的默认配置 */ -const FGpioConfig *FGpioLookupConfig(u32 instance_id); - -/* 初始化GPIO控制器实例 */ -FError FGpioCfgInitialize(FGpio *const instance, const FGpioConfig *const config); - -/* 初始化GPIO引脚实例 */ -FError FGpioPinInitialize(FGpio *const instance, FGpioPin *const pin, - const FGpioPinId pin_id); - -/* 去初始化GPIO引脚实例 */ -void FGpioPinDeInitialize(FGpioPin *const pin); - -/* 获取引脚中断的上报方式 */ -FGpioIrqSourceType FGpioGetPinIrqSourceType(FGpioPinId pin_id); - -/* 去初始化GPIO控制器实例 */ -void FGpioDeInitialize(FGpio *const instance); - -/* 设置GPIO引脚的输入输出方向 */ -void FGpioSetDirection(FGpioPin *const pin, FGpioDirection dir); - -/* 获取GPIO引脚的输入输出方向 */ -FGpioDirection FGpioGetDirection(FGpioPin *const pin); - -/* 设置GPIO引脚的输出值 */ -FError FGpioSetOutputValue(FGpioPin *const pin, const FGpioPinVal output); - -/* 获取GPIO引脚的输入值 */ -FGpioPinVal FGpioGetInputValue(FGpioPin *const pin); - -/* 获取GPIO A组引脚的中断屏蔽位 */ -void FGpioGetInterruptMask(FGpio *const instance, u32 *mask, u32 *enabled); - -/* 设置GPIO A组引脚的中断屏蔽位 */ -void FGpioSetInterruptMask(FGpioPin *const pin, boolean enable); - -/* 获取GPIO A组引脚的中断类型和中断极性 */ -void FGpioGetInterruptType(FGpio *const instance, u32 *levels, u32 *polarity); - -/* 设置GPIO A组引脚的中断类型 */ -void FGpioSetInterruptType(FGpioPin *const pin, const FGpioIrqType type); - -/* GPIO控制器中断处理函数 */ -void FGpioInterruptHandler(s32 vector, void *param); - -#if defined(FGPIO_VERSION_2) /* E2000 GPIO 0 ~ 2 */ -/* GPIO引脚中断处理函数 */ -void FGpioPinInterruptHandler(s32 vector, void *param); -#endif - -/* 注册GPIO A组引脚中断回调函数 */ -void FGpioRegisterInterruptCB(FGpioPin *const pin, FGpioInterruptCallback cb, - void *cb_param, boolean irq_one_time); - -/* 打印GPIO控制寄存器信息 */ -void FGpioDumpRegisters(uintptr base_addr); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/bsp/phytium/libraries/standalone/drivers/pin/fgpio/fgpio_g.c b/bsp/phytium/libraries/standalone/drivers/pin/fgpio/fgpio_g.c deleted file mode 100644 index 0b05494f9b..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/pin/fgpio/fgpio_g.c +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fgpio_g.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:25:29 - * Description:  This files is for GPIO static configuration implementation - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/3/1 init commit - * 2.0 zhugengyu 2022/7/1 support e2000 - */ - - -/***************************** Include Files *********************************/ -#include "fparameters.h" - -#include "fgpio_hw.h" -#include "fgpio.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ - -/************************** Variable Definitions *****************************/ - -/*****************************************************************************/ -#if defined(FGPIO_VERSION_1) /* FT2000-4, D2000 */ -const FGpioConfig fgpio_cfg_tbl[FGPIO_NUM] = -{ - [FGPIO0_ID] = - { - .instance_id = FGPIO0_ID, - .base_addr = FGPIO0_BASE_ADDR, - .irq_num = FGPIO0_IRQ_NUM, - .irq_priority = 0 - }, - [FGPIO1_ID] = - { - .instance_id = FGPIO1_ID, - .base_addr = FGPIO1_BASE_ADDR, - .irq_num = FGPIO1_IRQ_NUM, - .irq_priority = 0 - } -}; -#elif defined(FGPIO_VERSION_2) /* E2000 GPIO 0 ~ 5 */ -FGpioConfig fgpio_cfg_tbl[FGPIO_NUM] = -{ - [FGPIO0_ID] = - { - .instance_id = FGPIO0_ID, - .base_addr = FGPIO0_BASE_ADDR, - .irq_priority = 0 - }, - [FGPIO1_ID] = - { - .instance_id = FGPIO1_ID, - .base_addr = FGPIO1_BASE_ADDR, - .irq_priority = 0 - }, - [FGPIO2_ID] = - { - .instance_id = FGPIO2_ID, - .base_addr = FGPIO2_BASE_ADDR, - .irq_priority = 0 - }, - [FGPIO3_ID] = - { - .instance_id = FGPIO3_ID, - .base_addr = FGPIO3_BASE_ADDR, - .irq_priority = 0 - }, - [FGPIO4_ID] = - { - .instance_id = FGPIO4_ID, - .base_addr = FGPIO4_BASE_ADDR, - .irq_priority = 0 - }, - [FGPIO5_ID] = - { - .instance_id = FGPIO5_ID, - .base_addr = FGPIO5_BASE_ADDR, - .irq_priority = 0 - }, -}; -#elif defined(TARDIGRADE) /* TARDIGRADE */ -const FGpioConfig fgpio_cfg_tbl[FGPIO_NUM] = -{ - [FGPIO0_ID] = - { - .instance_id = FGPIO0_ID, - .base_addr = FGPIO0_BASE_ADDR, - .irq_num = FGPIO0_IRQ_NUM, - .irq_priority = 0 - }, - [FGPIO1_ID] = - { - .instance_id = FGPIO1_ID, - .base_addr = FGPIO1_BASE_ADDR, - .irq_num = FGPIO1_IRQ_NUM, - .irq_priority = 0 - }, - [FGPIO2_ID] = - { - .instance_id = FGPIO2_ID, - .base_addr = FGPIO2_BASE_ADDR, - .irq_num = FGPIO2_IRQ_NUM, - .irq_priority = 0 - }, - [FGPIO3_ID] = - { - .instance_id = FGPIO3_ID, - .base_addr = FGPIO3_BASE_ADDR, - .irq_num = FGPIO3_IRQ_NUM, - .irq_priority = 0 - } - -}; -#endif \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/pin/fgpio/fgpio_hw.h b/bsp/phytium/libraries/standalone/drivers/pin/fgpio/fgpio_hw.h deleted file mode 100644 index 150e04ab8a..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/pin/fgpio/fgpio_hw.h +++ /dev/null @@ -1,175 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fgpio_hw.h - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:25:35 - * Description:  This files is for GPIO register definition - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/3/1 init commit - * 2.0 zhugengyu 2022/7/1 support e2000 - */ - - -#ifndef FGPIO_HW_H -#define FGPIO_HW_H - -#include "fio.h" -#include "fkernel.h" - -/***************************** Include Files *********************************/ -#include "fio.h" -#include "fkernel.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/************************** Constant Definitions *****************************/ -/** @name Register Map - * - * Register offsets from the base address of an GPIO device. - * @{ - */ -#define FGPIO_SWPORTA_DR_OFFSET 0x00 /* WR Port A Output Data Register */ -#define FGPIO_SWPORTA_DDR_OFFSET 0x04 /* WR Port A Data Direction Register */ -#define FGPIO_EXT_PORTA_OFFSET 0x08 /* RO Port A Input Data Register */ -#define FGPIO_SWPORTB_DR_OFFSET 0x0c /* WR Port B Output Data Register */ -#define FGPIO_SWPORTB_DDR_OFFSET 0x10 /* WR Port B Data Direction Register */ -#define FGPIO_EXT_PORTB_OFFSET 0x14 /* RO Port B Input Data Register */ - -#define FGPIO_INTEN_OFFSET 0x18 /* WR Port A Interrput Enable Register */ -#define FGPIO_INTMASK_OFFSET 0x1c /* WR Port A Interrupt Mask Register */ -#define FGPIO_INTTYPE_LEVEL_OFFSET 0x20 /* WR Port A Interrupt Level Register */ -#define FGPIO_INT_POLARITY_OFFSET 0x24 /* WR Port A Interrupt Polarity Register */ -#define FGPIO_INTSTATUS_OFFSET 0x28 /* RO Port A Interrupt Status Register */ -#define FGPIO_RAW_INTSTATUS_OFFSET 0x2c /* RO Port A Raw Interrupt Status Register */ -#define FGPIO_LS_SYNC_OFFSET 0x30 /* WR Level-sensitive Synchronization Enable Register */ -#define FGPIO_DEBOUNCE_OFFSET 0x34 /* WR Debounce Enable Register */ -#define FGPIO_PORTA_EOI_OFFSET 0x38 /* WO Port A Clear Interrupt Register */ - -/** @name FGPIO_SWPORTA_DR_OFFSET Register - */ -#define FGPIO_SWPORTA_DR_SET(dir) SET_REG32_BITS((dir), 7, 0) -#define FGPIO_SWPORTA_DR_GET(reg_val) GET_REG32_BITS((reg_val), 7, 0) -#define FGPIO_SWPORTA_DR_MASK GENMASK(7, 0) - -/** @name FGPIO_SWPORTA_DDR_OFFSET Register - */ -#define FGPIO_SWPORTA_DDR_SET(dir) SET_REG32_BITS((dir), 7, 0) -#define FGPIO_SWPORTA_DDR_GET(reg_val) GET_REG32_BITS((reg_val), 7, 0) -#define FGPIO_SWPORTA_DDR_MASK GENMASK(7, 0) - -/** @name FGPIO_EXT_PORTA_OFFSET Register - */ -#define FGPIO_EXT_PORTA_SET(dir) SET_REG32_BITS((dir), 7, 0) -#define FGPIO_EXT_PORTA_GET(reg_val) GET_REG32_BITS((reg_val), 7, 0) -#define FGPIO_EXT_PORTA_MASK GENMASK(7, 0) - -/** @name FGPIO_SWPORTB_DR_OFFSET Register - */ -#define FGPIO_SWPORTB_DR_SET(dir) SET_REG32_BITS((dir), 7, 0) -#define FGPIO_SWPORTB_DR_GET(reg_val) GET_REG32_BITS((reg_val), 7, 0) -#define FGPIO_SWPORTB_DR_MASK GENMASK(7, 0) - -/** @name FGPIO_SWPORTB_DDR_OFFSET Register - */ -#define FGPIO_SWPORTB_DDR_SET(dir) SET_REG32_BITS((dir), 7, 0) -#define FGPIO_SWPORTB_DDR_GET(reg_val) GET_REG32_BITS((reg_val), 7, 0) -#define FGPIO_SWPORTB_DDR_MASK GENMASK(7, 0) - -/** @name FGPIO_EXT_PORTB_OFFSET Register - */ -#define FGPIO_EXT_PORTB_SET(dir) SET_REG32_BITS((dir), 7, 0) -#define FGPIO_EXT_PORTB_GET(reg_val) GET_REG32_BITS((reg_val), 7, 0) -#define FGPIO_EXT_PORTB_MASK GENMASK(7, 0) - -/** @name FGPIO_INTEN_OFFSET Register - */ -#define FGPIO_INTR_PORTA_EN(n) BIT(n) /* 1: enable the intr of n-th port in group-a */ - -/** @name FGPIO_INTMASK_OFFSET Register - */ -#define FGPIO_INTR_PORTA_MASK(n) BIT(n) /* 1: disable the intr of n-th port in group-a */ -#define FGPIO_INTR_PORTA_MASKALL GENMASK(15, 0) - -/** @name FGPIO_INTTYPE_LEVEL_OFFSET Register - */ -#define FGPIO_INTR_PORTA_LEVEL(n) BIT(n) /* 1: intr by edge, 0: intr by level */ - -/** @name FGPIO_INT_POLARITY_OFFSET Register - */ -#define FGPIO_INTR_PORTA_POLARITY(n) BIT(n) /* 1: intr by rising-edge/high-level, 0: intr by falling-edge/low-level */ - -/** @name FGPIO_INTSTATUS_OFFSET Register - */ -#define FGPIO_INTR_PORTA_STATUS(n) BIT(n) /* intr status */ - -/** @name FGPIO_RAW_INTSTATUS_OFFSET Register - */ -#define FGPIO_INTR_PORTA_RAW_STATUS(n) BIT(n) /* intr status without masking */ - -/** @name FGPIO_LS_SYNC_OFFSET Register - */ -#define FGPIO_PCLK_INTR_SYNC(n) BIT(n) /* 1: sync to pclk_intr */ - -/** @name FGPIO_DEBOUNCE_OFFSET Register - */ -#define FGPIO_DEBOUNCE_CLK_CONFIG_SET(clk) SET_REG32_BITS((clk), 15, 7) -#define FGPIO_DEBOUNCE_CLK_CONFIG_GET(reg_val) GET_REG32_BITS((reg_val), 15, 7) -#define FGPIO_DEBOUNCE_CLK_CONFIG_MASK GENMASK(15, 7) -#define FGPIO_DEBOUNCE_EN(n) BIT(n) /* 1: enable debounce */ - -/** @name FGPIO_PORTA_EOI_OFFSET Register - */ -#define FGPIO_CLR_INTR_PORTA(n) BIT(n) /* 1: clear interrupt */ - - -/**************************** Type Definitions *******************************/ - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ -static inline u32 FGpioReadReg32(uintptr base_addr, uintptr reg_off) -{ - return FtIn32(base_addr + reg_off); -} - -static inline void FGpioWriteReg32(uintptr base_addr, uintptr reg_off, const u32 reg_val) -{ - FtOut32(base_addr + reg_off, reg_val); -} - -static inline void FGpioSetBit32(uintptr base_addr, uintptr reg_off, u32 bit) -{ - if (0 == bit) - { - FtClearBit32(base_addr + reg_off, bit); - } - else if (1 == bit) - { - FtSetBit32(base_addr + reg_off, bit); - } -} - -/************************** Function Prototypes ******************************/ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/bsp/phytium/libraries/standalone/drivers/pin/fgpio/fgpio_intr.c b/bsp/phytium/libraries/standalone/drivers/pin/fgpio/fgpio_intr.c deleted file mode 100644 index a4fc9bf2ec..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/pin/fgpio/fgpio_intr.c +++ /dev/null @@ -1,332 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fgpio_intr.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:25:29 - * Description:  This files is for GPIO interrupt function implementation - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/3/1 init commit - * 2.0 zhugengyu 2022/7/1 support e2000 - */ - - -/***************************** Include Files *********************************/ -#include "fdebug.h" -#include "fparameters.h" - -#include "fgpio_hw.h" -#include "fgpio.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ -#define FGPIO_DEBUG_TAG "FGPIO-INTR" -#define FGPIO_ERROR(format, ...) FT_DEBUG_PRINT_E(FGPIO_DEBUG_TAG, format, ##__VA_ARGS__) -#define FGPIO_WARN(format, ...) FT_DEBUG_PRINT_W(FGPIO_DEBUG_TAG, format, ##__VA_ARGS__) -#define FGPIO_INFO(format, ...) FT_DEBUG_PRINT_I(FGPIO_DEBUG_TAG, format, ##__VA_ARGS__) -#define FGPIO_DEBUG(format, ...) FT_DEBUG_PRINT_D(FGPIO_DEBUG_TAG, format, ##__VA_ARGS__) - -/************************** Function Prototypes ******************************/ - -/************************** Variable Definitions *****************************/ - -/*****************************************************************************/ -/** - * @name: FGpioGetInterruptMask - * @msg: 获取GPIO A组引脚的中断屏蔽位 - * @return {*} - * @param {FGpio} *instance, GPIO控制器实例 - * @param {u32} *mask, 返回的GPIO A组引脚中断屏蔽位 - * @param {u32} *enabled, 返回的GPIO A组中断使能位 - * @note 获取的是A组所有Pin的中断屏蔽位和中断使能位 - */ -void FGpioGetInterruptMask(FGpio *const instance, u32 *mask, u32 *enabled) -{ - FASSERT(instance); - FASSERT(instance->is_ready == FT_COMPONENT_IS_READY); - uintptr base_addr = instance->config.base_addr; - - if (NULL != mask) - { - *mask = FGpioReadReg32(base_addr, FGPIO_INTMASK_OFFSET); - } - - if (NULL != enabled) - { - *enabled = FGpioReadReg32(base_addr, FGPIO_INTEN_OFFSET); - } - - return; -} - -/** - * @name: FGpioSetInterruptMask - * @msg: 设置GPIO A组引脚的中断屏蔽位 - * @return {*} - * @param {FGpioPin} *pin, GPIO引脚实例 - * @param {boolean} enable, TRUE表示使能GPIO引脚中断,FALSE表示去使能GPIO引脚中断 - * @note index对应的引脚必须为A组引脚,B组引脚不支持中断 - */ -void FGpioSetInterruptMask(FGpioPin *const pin, boolean enable) -{ - FASSERT(pin); - FGpio *const instance = pin->instance; - FASSERT(instance); - FASSERT(instance->is_ready == FT_COMPONENT_IS_READY); - uintptr base_addr = instance->config.base_addr; - u32 mask_bits = 0; - u32 enable_bits = 0; - FGpioPinId index = pin->index; - -#if defined(FGPIO_VERSION_1) /* FT2000-4, D2000 */ - if (FGPIO_PORT_B == index.port) - { - FGPIO_ERROR("None interrupt support for PORT-B !!!"); - return; - } -#endif - - if (FGPIO_DIR_OUTPUT == FGpioGetDirection(pin)) - { - FGPIO_ERROR("None interrupt support for output GPIO !!!"); - return; - } - - FGpioGetInterruptMask(instance, &mask_bits, &enable_bits); - if (TRUE == enable) - { - mask_bits &= ~BIT(index.pin); /* not mask: 0 */ - enable_bits |= BIT(index.pin); /* enable pin irq: 1 */ - } - else - { - mask_bits |= BIT(index.pin); /* mask: 1 */ - enable_bits &= ~BIT(index.pin); /* disable pin irq: 0 */ - } - - FGpioWriteReg32(base_addr, FGPIO_INTMASK_OFFSET, mask_bits); - FGpioWriteReg32(base_addr, FGPIO_INTEN_OFFSET, enable_bits); - - return; -} - -/** - * @name: FGpioGetInterruptType - * @msg: 获取GPIO A组引脚的中断类型和中断极性 - * @return {*} - * @param {FGpio} *instance, GPIO控制器实例 - * @param {u32} *levels, GPIO A组引脚中断电平类型 - * @param {u32} *polarity, GPIO A组引脚中断极性类型 - * @note 获取的是A组所有Pin的电平和极性 - */ -void FGpioGetInterruptType(FGpio *const instance, u32 *levels, u32 *polarity) -{ - FASSERT(instance); - FASSERT(instance->is_ready == FT_COMPONENT_IS_READY); - uintptr base_addr = instance->config.base_addr; - - if (NULL != levels) - { - *levels = FGpioReadReg32(base_addr, FGPIO_INTTYPE_LEVEL_OFFSET); - } - - if (NULL != polarity) - { - *polarity = FGpioReadReg32(base_addr, FGPIO_INTTYPE_LEVEL_OFFSET); - } - - return; -} - -/** - * @name: FGpioSetInterruptType - * @msg: 设置GPIO引脚的中断类型 - * @return {*} - * @param {FGpioPin} *pin, GPIO引脚实例 - * @param {FGpioIrqType} type, GPIO引脚中断触发类型 - * @note index对应的引脚必须为A组引脚,B组引脚不支持中断 - */ -void FGpioSetInterruptType(FGpioPin *const pin, const FGpioIrqType type) -{ - FASSERT(pin); - FGpio *const instance = pin->instance; - FASSERT(instance); - FASSERT(instance->is_ready == FT_COMPONENT_IS_READY); - uintptr base_addr = instance->config.base_addr; - u32 level = 0; - u32 polarity = 0; - FGpioPinId index = pin->index; - -#if defined(FGPIO_VERSION_1) /* FT2000-4, D2000 */ - if (FGPIO_PORT_B == index.port) - { - FGPIO_ERROR("None interrupt support for PORT-B !!!"); - return; - } -#endif - - FGpioGetInterruptType(instance, &level, &polarity); - - switch (type) - { - case FGPIO_IRQ_TYPE_EDGE_FALLING: - level |= BIT(index.pin); /* 边沿敏感型 */ - polarity &= ~BIT(index.pin); /* 下降沿或低电平 */ - break; - case FGPIO_IRQ_TYPE_EDGE_RISING: - level |= BIT(index.pin); /* 边沿敏感型 */ - polarity |= BIT(index.pin); /* 上升沿或高电平 */ - break; - case FGPIO_IRQ_TYPE_LEVEL_LOW: - level &= ~BIT(index.pin); /* 电平敏感型 */ - polarity &= ~BIT(index.pin); /* 下降沿或低电平 */ - break; - case FGPIO_IRQ_TYPE_LEVEL_HIGH: - level &= ~BIT(index.pin); /* 电平敏感型 */ - polarity |= BIT(index.pin); /* 上升沿或高电平 */ - break; - default: - break; - } - - FGpioWriteReg32(base_addr, FGPIO_INTTYPE_LEVEL_OFFSET, level); - FGpioWriteReg32(base_addr, FGPIO_INT_POLARITY_OFFSET, polarity); - - return; -} - -/** - * @name: FGpioInterruptHandler - * @msg: GPIO中断处理函数 - * @return {*} - * @param {s32} vector, 中断输入参数1 - * @param {void} *param, 中断输入参数2 - * @note 需要用户将此函数注册到Interrtup上,使能GPIO中断才能生效 - */ -void FGpioInterruptHandler(s32 vector, void *param) -{ - FGpio *const instance = (FGpio * const)param; - FGpioPin *pin = NULL; - FASSERT(instance); - int loop; - uintptr base_addr = instance->config.base_addr; - u32 status = FGpioReadReg32(base_addr, FGPIO_INTSTATUS_OFFSET); - u32 raw_status = FGpioReadReg32(base_addr, FGPIO_RAW_INTSTATUS_OFFSET); - -#if defined(FGPIO_VERSION_2) /* E2000 gpio 3 ~ 5 */ - FASSERT_MSG(FGPIO_WITH_PIN_IRQ < instance->config.instance_id, "Handle interrupt through pin !!!") -#endif - - FGPIO_INFO("status: 0x%x, raw_status: 0x%x.", status, raw_status); - for (loop = FGPIO_PIN_0; loop < FGPIO_PIN_NUM; loop++) - { - if (status & BIT(loop)) - { - pin = instance->pins[FGPIO_PORT_A][loop]; - if (NULL == pin) - { - continue; - } - - if (pin->irq_cb) - { - pin->irq_cb(0U, pin->irq_cb_params); - - /* disable pin interrupt after triggered */ - if (TRUE == pin->irq_one_time) - { - FGpioSetInterruptMask(pin, FALSE); - } - } - else - { - FGPIO_WARN("No irq handler callback for GPIO-%d-A-%d.", - instance->config.instance_id, - loop); - } - } - } - - /* clear interrupt status */ - FGpioWriteReg32(base_addr, FGPIO_PORTA_EOI_OFFSET, status); - return; -} - -#if defined(FGPIO_VERSION_2) /* E2000 GPIO 0 ~ 2 */ -/** - * @name: FGpioPinInterruptHandler - * @msg: GPIO引脚中断处理函数 - * @return {NONE} - * @param {s32} vector, 中断输入参数1 - * @param {void} *param, 中断输入参数2 - */ -void FGpioPinInterruptHandler(s32 vector, void *param) -{ - FGpioPin *const pin = (FGpioPin * const)param; - FASSERT(pin); - FGpio *const instance = pin->instance; - FASSERT(instance); - uintptr base_addr = instance->config.base_addr; - - u32 status = FGpioReadReg32(base_addr, FGPIO_INTSTATUS_OFFSET); - u32 raw_status = FGpioReadReg32(base_addr, FGPIO_RAW_INTSTATUS_OFFSET); - - FGPIO_INFO("status: 0x%x, raw_status: 0x%x.", status, raw_status); - if (pin->irq_cb) - { - pin->irq_cb(0U, pin->irq_cb_params); - - /* disable pin interrupt after triggered */ - if (TRUE == pin->irq_one_time) - { - FGpioSetInterruptMask(pin, FALSE); - } - } - else - { - FGPIO_WARN("No irq handler callback for GPIO-%d-A-%d.", - pin->index.ctrl, - pin->index.pin); - } - - - /* clear interrupt status */ - FGpioWriteReg32(base_addr, FGPIO_PORTA_EOI_OFFSET, status); - return; -} -#endif - -/** - * @name: FGpioRegisterInterruptCB - * @msg: 注册GPIO引脚中断回调函数 - * @return {*} - * @param {FGpioPin} pin, GPIO引脚实例 - * @param {FGpioInterruptCallback} cb, GPIO引脚中断回调函数 - * @param {void} *cb_param, GPIO引脚中断回调函数输入参数 - * @param {boolean} irq_one_time, TRUE表示引脚中断触发一次后自动关闭中断,用于电平敏感中断 - * @note 注册的回调函数在FGpioInterruptHandler中被调用 - */ -void FGpioRegisterInterruptCB(FGpioPin *const pin, FGpioInterruptCallback cb, void *cb_param, boolean irq_one_time) -{ - FASSERT(pin); - pin->irq_cb = cb; - pin->irq_cb_params = cb_param; - pin->irq_one_time = irq_one_time; - return; -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/pin/fgpio/fgpio_selftest.c b/bsp/phytium/libraries/standalone/drivers/pin/fgpio/fgpio_selftest.c deleted file mode 100644 index b8ebdf2518..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/pin/fgpio/fgpio_selftest.c +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fgpio_selftest.c - * Date: 2022-06-17 14:32:12 - * LastEditTime: 2022-06-17 14:32:12 - * Description:  This files is for dumping gpio register info - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/3/1 init commit - * 2.0 zhugengyu 2022/7/1 support e2000 - */ -/***************************** Include Files *********************************/ -#include "fdebug.h" -#include "fassert.h" - -#include "fgpio_hw.h" -#include "fgpio.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ -#define FGPIO_DEBUG_TAG "FGPIO-TEST" -#define FGPIO_ERROR(format, ...) FT_DEBUG_PRINT_E(FGPIO_DEBUG_TAG, format, ##__VA_ARGS__) -#define FGPIO_WARN(format, ...) FT_DEBUG_PRINT_W(FGPIO_DEBUG_TAG, format, ##__VA_ARGS__) -#define FGPIO_INFO(format, ...) FT_DEBUG_PRINT_I(FGPIO_DEBUG_TAG, format, ##__VA_ARGS__) -#define FGPIO_DEBUG(format, ...) FT_DEBUG_PRINT_D(FGPIO_DEBUG_TAG, format, ##__VA_ARGS__) - -#define FGPIO_DUMPER(base_addr, reg_off, reg_name) \ - FGPIO_DEBUG("\t\t[%s]@0x%x\t=\t0x%x", reg_name, (reg_off), FGpioReadReg32((base_addr), (reg_off))) -/************************** Function Prototypes ******************************/ - -/************************** Variable Definitions *****************************/ - -/*****************************************************************************/ - -/** - * @name: FGpioDumpRegisters - * @msg: 打印GPIO控制寄存器信息 - * @return {NONE} - * @param {uintptr} base_addr, GPIO控制器基地址 - */ -void FGpioDumpRegisters(uintptr base_addr) -{ - FASSERT(0 != base_addr); - - FGPIO_DEBUG("Dump register info @0x%x", base_addr); - FGPIO_DUMPER(base_addr, FGPIO_SWPORTA_DR_OFFSET, "dr"); - FGPIO_DUMPER(base_addr, FGPIO_SWPORTA_DDR_OFFSET, "ddr"); - FGPIO_DUMPER(base_addr, FGPIO_EXT_PORTA_OFFSET, "ext_porta"); -#if defined(FGPIO_VERSION_1) /* D2000 FT2000/4 */ - FGPIO_DUMPER(base_addr, FGPIO_SWPORTB_DR_OFFSET, "portb_dr"); - FGPIO_DUMPER(base_addr, FGPIO_SWPORTB_DDR_OFFSET, "portb_ddr"); - FGPIO_DUMPER(base_addr, FGPIO_EXT_PORTB_OFFSET, "ext_portb"); -#endif - FGPIO_DUMPER(base_addr, FGPIO_INTEN_OFFSET, "inten"); - FGPIO_DUMPER(base_addr, FGPIO_INTMASK_OFFSET, "intmask"); - FGPIO_DUMPER(base_addr, FGPIO_INTTYPE_LEVEL_OFFSET, "intr_level"); - FGPIO_DUMPER(base_addr, FGPIO_INT_POLARITY_OFFSET, "intr_polarity"); - FGPIO_DUMPER(base_addr, FGPIO_INTSTATUS_OFFSET, "intr_status"); - FGPIO_DUMPER(base_addr, FGPIO_RAW_INTSTATUS_OFFSET, "raw_int_status"); - FGPIO_DUMPER(base_addr, FGPIO_LS_SYNC_OFFSET, "ls_sync"); - FGPIO_DUMPER(base_addr, FGPIO_DEBOUNCE_OFFSET, "debounce"); - FGPIO_DUMPER(base_addr, FGPIO_PORTA_EOI_OFFSET, "porta_eoi"); - - return; -} diff --git a/bsp/phytium/libraries/standalone/drivers/pin/fgpio/fgpio_sinit.c b/bsp/phytium/libraries/standalone/drivers/pin/fgpio/fgpio_sinit.c deleted file mode 100644 index dff107acc0..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/pin/fgpio/fgpio_sinit.c +++ /dev/null @@ -1,152 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fgpio_sinit.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 08:25:29 - * Description:  This files is for GPIO static variables implementation - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/3/1 init commit - * 2.0 zhugengyu 2022/7/1 support e2000 - */ - - -/***************************** Include Files *********************************/ -#include "fparameters.h" - -#include "fgpio_hw.h" -#include "fgpio.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ - -/************************** Variable Definitions *****************************/ -#if defined(FGPIO_VERSION_1)|| defined(TARDIGRADE) /* FT2000-4, D2000 */ -extern const FGpioConfig fgpio_cfg_tbl[FGPIO_NUM]; -#elif defined(FGPIO_VERSION_2) /* E2000 GPIO 0 ~ 5 */ -extern FGpioConfig fgpio_cfg_tbl[FGPIO_NUM]; -#endif - -/*****************************************************************************/ - -#if defined(FGPIO_VERSION_1) || defined(TARDIGRADE) /* FT2000-4, D2000 */ -/** - * @name: FGpioLookupConfig - * @msg: 获取GPIO控制器的默认配置 - * @return {const FGpioConfig *} GPIO控制器的默认配置 - * @param {u32} instance_id, GPIO控制器实例号 - */ -const FGpioConfig *FGpioLookupConfig(u32 instance_id) -{ - const FGpioConfig *ptr = NULL; - u32 index; - - for (index = 0; index < FGPIO_NUM; index++) - { - if (fgpio_cfg_tbl[index].instance_id == instance_id) - { - ptr = &fgpio_cfg_tbl[index]; - break; - } - } - - return ptr; -} -#elif defined(FGPIO_VERSION_2) /* E2000 GPIO 0 ~ 5 */ -/** - * @name: FGpioSetIrqNum - * @msg: 设置GPIO控制器各引脚的中断号 - * @return {NONE} - * @param {u32} instance_id, GPIO控制器实例号 - * @param {FGpioConfig} *ptr, GPIO控制器的默认配置 - */ -static void FGpioSetIrqNum(u32 instance_id, FGpioConfig *ptr) -{ - u32 pin_id; - u32 irq_num; - - if (FGPIO_WITH_PIN_IRQ >= instance_id) /* GPIO 0 ~ 2 */ - { - /* each pin has its own interrupt id */ - for (pin_id = FGPIO_PIN_0; pin_id < FGPIO_PIN_NUM; pin_id++) - { - ptr->irq_num[pin_id] = FGPIO_PIN_IRQ_NUM_GET(instance_id, pin_id); - } - } - else - { - if (FGPIO3_ID == instance_id) - { - irq_num = FGPIO_3_IRQ_NUM; - } - else if (FGPIO4_ID == instance_id) - { - irq_num = FGPIO_4_IRQ_NUM; - } - else if (FGPIO5_ID == instance_id) - { - irq_num = FGPIO_5_IRQ_NUM; - } - - /* all pins in the controller share the same interrupt id */ - for (pin_id = FGPIO_PIN_0; pin_id < FGPIO_PIN_NUM; pin_id++) - { - ptr->irq_num[pin_id] = irq_num; - } - } - - return; -} - -/** - * @name: FGpioLookupConfig - * @msg: 获取GPIO控制器的默认配置 - * @return {const FGpioConfig *} GPIO控制器的默认配置 - * @param {u32} instance_id, GPIO控制器实例号 - */ -const FGpioConfig *FGpioLookupConfig(u32 instance_id) -{ - const FGpioConfig *ptr = NULL; - u32 index; - static boolean irq_num_set = FALSE; - - if (FALSE == irq_num_set) /* set irq num in the first time */ - { - for (index = 0; index < FGPIO_NUM; index++) - { - FGpioSetIrqNum(index, &fgpio_cfg_tbl[index]); - } - irq_num_set = TRUE; - } - - for (index = 0; index < FGPIO_NUM; index++) /* find configs of controller */ - { - if (fgpio_cfg_tbl[index].instance_id == instance_id) - { - ptr = &fgpio_cfg_tbl[index]; - break; - } - } - - return ptr; -} - -#endif \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/pwm/Kconfig b/bsp/phytium/libraries/standalone/drivers/pwm/Kconfig deleted file mode 100644 index 5a6185cf4e..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/pwm/Kconfig +++ /dev/null @@ -1,9 +0,0 @@ -menu "FPWM Configuration" - config USE_FPWM - bool - prompt "Use FPWM" - default n - -endmenu - - diff --git a/bsp/phytium/libraries/standalone/drivers/pwm/fpwm/fpwm.c b/bsp/phytium/libraries/standalone/drivers/pwm/fpwm/fpwm.c deleted file mode 100644 index 4d2022b53c..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/pwm/fpwm/fpwm.c +++ /dev/null @@ -1,834 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fpwm.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-04-15 11:45:05 - * Description:  This file is for the minimum required function implementations for this driver. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 wangxiaodong 2022/4/15 init commit - */ - -#include -#include "fkernel.h" -#include "ftypes.h" -#include "ferror_code.h" -#include "fdebug.h" -#include "fpwm.h" -#include "fpwm_hw.h" -#include "fparameters.h" -#include "fsleep.h" - -#define FPWM_DEBUG_TAG "PWM" -#define FPWM_ERROR(format, ...) FT_DEBUG_PRINT_E(FPWM_DEBUG_TAG, format, ##__VA_ARGS__) -#define FPWM_WARN(format, ...) FT_DEBUG_PRINT_W(FPWM_DEBUG_TAG, format, ##__VA_ARGS__) -#define FPWM_INFO(format, ...) FT_DEBUG_PRINT_I(FPWM_DEBUG_TAG, format, ##__VA_ARGS__) -#define FPWM_DEBUG(format, ...) FT_DEBUG_PRINT_D(FPWM_DEBUG_TAG, format, ##__VA_ARGS__) - -/** - * @name: FPwmReset - * @msg: reset pwm - * @param {FPwmCtrl} *pctrl, instance of FPWM controller - * @param {u32} channel, pwm module's channel, 0/1 - * @return err code information, FPWM_SUCCESS indicates success,others indicates failed - */ -FError FPwmReset(FPwmCtrl *pctrl, u32 channel) -{ - FASSERT(pctrl != NULL); - FASSERT(channel < FPWM_CHANNEL_NUM); - - u32 reg_val = 0; - int timeout = FPWM_RESET_TIMEOUT; - uintptr base_addr = pctrl->config.pwm_base_addr + FPWM_N(channel); - - reg_val = FPWM_READ_REG32(base_addr, FPWM_TIM_CTRL_OFFSET); - reg_val |= FPWM_TIM_CTRL_RESET; - FPWM_WRITE_REG32(base_addr, FPWM_TIM_CTRL_OFFSET, reg_val); - - /* Check for the reset complete*/ - do - { - reg_val = FPWM_READ_REG32(base_addr, FPWM_TIM_CTRL_OFFSET); - } - while ((FPWM_TIM_CTRL_RESET & reg_val) && (0 <= --timeout)); - - if (0 >= timeout) - { - FPWM_ERROR("Time out while waiting for pwm reset to complete"); - return FPWM_ERR_TIMEOUT; - } - return FPWM_SUCCESS; -} - -/** - * @name: FPwmEnable - * @msg: enable pwm - * @param {FPwmCtrl} *pctrl, instance of FPWM controller - * @param {u32} channel, pwm module's channel, 0/1 - * @return - */ -void FPwmEnable(FPwmCtrl *pctrl, u32 channel) -{ - FASSERT(pctrl != NULL); - FASSERT(channel < FPWM_CHANNEL_NUM); - u32 reg_val = 0; - uintptr base_addr = pctrl->config.pwm_base_addr + FPWM_N(channel); - - reg_val = FPWM_READ_REG32(base_addr, FPWM_TIM_CTRL_OFFSET); - reg_val |= FPWM_TIM_CTRL_ENABLE; - FPWM_WRITE_REG32(base_addr, FPWM_TIM_CTRL_OFFSET, reg_val); - - pctrl->channel_ctrl_enable[channel] = TRUE; -} - -/** - * @name: FPwmDisable - * @msg: disable pwm - * @param {FPwmCtrl} *pctrl, instance of FPWM controller - * @param {u32} channel, pwm module's channel, 0/1 - * @return - */ -void FPwmDisable(FPwmCtrl *pctrl, u32 channel) -{ - FASSERT(pctrl != NULL); - FASSERT(channel < FPWM_CHANNEL_NUM); - u32 reg_val = 0; - uintptr base_addr = pctrl->config.pwm_base_addr + FPWM_N(channel); - - reg_val = FPWM_READ_REG32(base_addr, FPWM_TIM_CTRL_OFFSET); - reg_val &= (~FPWM_TIM_CTRL_ENABLE); - FPWM_WRITE_REG32(base_addr, FPWM_TIM_CTRL_OFFSET, reg_val); - - pctrl->channel_ctrl_enable[channel] = FALSE; - -} - -/** - * @name: FPwmTimCtrlModeSet - * @msg: config pwm timer counter mode. - * @param {FPwmCtrl} *pctrl, instance of FPWM controller - * @param {u32} channel, pwm module's channel, 0/1 - * @param {FPwmTimCtrlMode} mode, counter mode parameters of FPWM - * @return - */ -static void FPwmTimCtrlModeSet(FPwmCtrl *pctrl, u32 channel, FPwmTimCtrlMode mode) -{ - FASSERT(pctrl != NULL); - FASSERT(mode < FPWM_TIM_CTRL_MODE_NUM); - /* check whether the state is disabled */ - FASSERT(pctrl->channel_ctrl_enable[channel] == FALSE); - - u32 reg_val = 0; - - uintptr base_addr = pctrl->config.pwm_base_addr + FPWM_N(channel); - reg_val = FPWM_READ_REG32(base_addr, FPWM_TIM_CTRL_OFFSET); - - switch (mode) - { - /* modulo */ - case FPWM_MODULO: - reg_val &= (~FPWM_TIM_CTRL_MODE_UD); - break; - /* up-and-down */ - case FPWM_UP_DOWN: - reg_val |= FPWM_TIM_CTRL_MODE_UD; - break; - default: - break; - } - - FPWM_WRITE_REG32(base_addr, FPWM_TIM_CTRL_OFFSET, reg_val); -} - -/** - * @name: FPwmTimInterruptEnable - * @msg: enable pwm timer global and counter-overflow interrupt - * @param {FPwmCtrl} *pctrl, instance of FPWM controller - * @param {u32} channel, pwm module's channel, 0/1 - * @return - */ -static void FPwmTimInterruptEnable(FPwmCtrl *pctrl, u32 channel) -{ - FASSERT(pctrl != NULL); - u32 reg_val = 0; - uintptr base_addr = pctrl->config.pwm_base_addr + FPWM_N(channel); - - reg_val = FPWM_READ_REG32(base_addr, FPWM_TIM_CTRL_OFFSET); - reg_val &= (~(FPWM_TIM_CTRL_OVFIF_ENABLE | FPWM_TIM_CTRL_GIE)); - reg_val |= (FPWM_TIM_CTRL_OVFIF_ENABLE | FPWM_TIM_CTRL_GIE); - - FPWM_WRITE_REG32(base_addr, FPWM_TIM_CTRL_OFFSET, reg_val); -} - -/** - * @name: FPwmTimInterruptDisable - * @msg: disable pwm timer global and counter-overflow interrupt - * @param {FPwmCtrl} *pctrl, instance of FPWM controller - * @param {u32} channel, pwm module's channel, 0/1 - * @return - */ -static void FPwmTimInterruptDisable(FPwmCtrl *pctrl, u32 channel) -{ - FASSERT(pctrl != NULL); - u32 reg_val = 0; - uintptr base_addr = pctrl->config.pwm_base_addr + FPWM_N(channel); - - reg_val = FPWM_READ_REG32(base_addr, FPWM_TIM_CTRL_OFFSET); - reg_val &= (~(FPWM_TIM_CTRL_OVFIF_ENABLE | FPWM_TIM_CTRL_GIE)); - - FPWM_WRITE_REG32(base_addr, FPWM_TIM_CTRL_OFFSET, reg_val); -} - -/** - * @name: FPwmDivSet - * @msg: config pwm div, div range:0~4095, corresponding to 1~4096 - * @param {FPwmCtrl} *pctrl, instance of FPWM controller - * @param {u32} channel, pwm module's channel, 0/1 - * @param {u16} div, div parameters - * @return - */ -static void FPwmDivSet(FPwmCtrl *pctrl, u32 channel, u16 div) -{ - u32 reg_val = 0; - FASSERT(pctrl != NULL); - FASSERT(div < FPWM_TIM_CTRL_DIV_MAX); - uintptr base_addr = pctrl->config.pwm_base_addr + FPWM_N(channel); - - reg_val = FPWM_READ_REG32(base_addr, FPWM_TIM_CTRL_OFFSET); - reg_val |= (FPWM_TIM_CTRL_DIV_MASK & FPWM_TIM_CTRL_DIV(div)); - - FPWM_WRITE_REG32(base_addr, FPWM_TIM_CTRL_OFFSET, reg_val); -} - -/** - * @name: FPwmPeriodSet - * @msg: config pwm period, range:1~0xffff - * @param {FPwmCtrl} *pctrl, instance of FPWM controller - * @param {u32} channel, pwm module's channel, 0/1 - * @param {u16} pwm_period, period parameters - * @return err code information, FPWM_SUCCESS indicates success,others indicates failed - */ -static void FPwmPeriodSet(FPwmCtrl *pctrl, u32 channel, u16 pwm_period) -{ - FASSERT(pctrl != NULL); - u32 reg_val = 0; - u64 cycles = 0; - uintptr base_addr = pctrl->config.pwm_base_addr + FPWM_N(channel); - - reg_val = FPWM_READ_REG32(base_addr, FPWM_PERIOD_OFFSET); - reg_val &= (~FPWM_PERIOD_CCR_MASK); - reg_val |= (pwm_period & FPWM_PERIOD_CCR_MASK); - - FPWM_WRITE_REG32(base_addr, FPWM_PERIOD_OFFSET, reg_val); -} - -/** - * @name: FPwmDutySourceSet - * @msg: config pwm duty source, from pwm_ccr register or fifo - * @param {FPwmCtrl} *pctrl, instance of FPWM controller - * @param {u32} channel, pwm module's channel, 0/1 - * @param {FPwmDutySourceMode} duty_source, duty source parameters - * @return - */ -static void FPwmDutySourceSet(FPwmCtrl *pctrl, u32 channel, FPwmDutySourceMode duty_source) -{ - FASSERT(pctrl != NULL); - FASSERT(duty_source < FPWM_DUTY_SEL_MODE_NUM); - u32 reg_val = 0; - uintptr base_addr = pctrl->config.pwm_base_addr + FPWM_N(channel); - - reg_val = FPWM_READ_REG32(base_addr, FPWM_CTRL_OFFSET); - switch (duty_source) - { - /* duty from PWM_CCR */ - case FPWM_DUTY_CCR: - reg_val &= (~FPWM_CTRL_DUTY_SOURCE_FIFO); - break; - /* from FIFO */ - case FPWM_DUTY_FIFO: - reg_val |= FPWM_CTRL_DUTY_SOURCE_FIFO; - break; - default: - break; - } - - FPWM_WRITE_REG32(base_addr, FPWM_CTRL_OFFSET, reg_val); -} - -/** - * @name: FPwmPulseSet - * @msg: config pwm duty, pwm_ccr is less than pwm_period - * @param {FPwmCtrl} *pctrl, instance of FPWM controller - * @param {u32} channel, pwm module's channel, 0/1 - * @param {u16} pwm_ccr, pwm_ccr parameters - * @return err code information, FPWM_SUCCESS indicates success,others indicates failed - */ -FError FPwmPulseSet(FPwmCtrl *pctrl, u32 channel, u16 pwm_ccr) -{ - FASSERT(pctrl != NULL); - FASSERT(channel < FPWM_CHANNEL_NUM); - u32 reg_val = 0; - u64 cycles = 0; - u32 state = 0; - u16 pwm_period_ccr = 0; - - uintptr base_addr = pctrl->config.pwm_base_addr + FPWM_N(channel); - - /* Check the pwm_ccr < pwm_period_ccr */ - pwm_period_ccr = (u16)FPWM_READ_REG32(base_addr, FPWM_PERIOD_OFFSET); - if (pwm_ccr > pwm_period_ccr) - { - FPWM_ERROR("The pwm ccr is larger than the period"); - return FPWM_ERR_INVAL_PARM; - } - - reg_val = FPWM_READ_REG32(base_addr, FPWM_CTRL_OFFSET); - - /* Check the duty source */ - if (reg_val & FPWM_CTRL_DUTY_SOURCE_FIFO) - { - /* Check the duty fifo is not full */ - state = FPWM_READ_REG32(base_addr, FPWM_STATE_OFFSET); - if (state & FPWM_STATE_FIFO_FULL) - { - FPWM_ERROR("The fifo of the pwm is full"); - return FPWM_ERR_CMD_FAILED; - } - } - - reg_val = FPWM_READ_REG32(base_addr, FPWM_CCR_OFFSET); - reg_val &= (~FPWM_CCR_MASK); - reg_val |= (pwm_ccr & FPWM_CCR_MASK); - - FPWM_WRITE_REG32(base_addr, FPWM_CCR_OFFSET, reg_val); - - return FPWM_SUCCESS; -} - -/** - * @name: FPwmCtrlModeSet - * @msg: config pwm mode, currently only support compare output - * @param {FPwmCtrl} *pctrl, instance of FPWM controller - * @param {u32} channel, pwm module's channel, 0/1 - * @return - */ -static void FPwmCtrlModeSet(FPwmCtrl *pctrl, u32 channel) -{ - FASSERT(pctrl != NULL); - u32 reg_val = 0; - uintptr base_addr = pctrl->config.pwm_base_addr + FPWM_N(channel); - - reg_val = FPWM_READ_REG32(base_addr, FPWM_CTRL_OFFSET); - - reg_val |= FPWM_CTRL_MODE_OUTPUT; - - FPWM_WRITE_REG32(base_addr, FPWM_CTRL_OFFSET, reg_val); -} - -/** - * @name: FPwmPolaritySet - * @msg: config pwm compare output polarity - * @param {FPwmCtrl} *pctrl, instance of FPWM controller - * @param {u32} channel, pwm module's channel, 0/1 - * @param {FPwmPolarity} polarity, compare output polarity parameters - * @return - */ -static void FPwmPolaritySet(FPwmCtrl *pctrl, u32 channel, FPwmPolarity polarity) -{ - FASSERT(pctrl != NULL); - FASSERT(polarity < FPWM_POLARITY_NUM); - /* check whether the state is disabled */ - FASSERT(pctrl->channel_ctrl_enable[channel] == FALSE); - uintptr base_addr = pctrl->config.pwm_base_addr + FPWM_N(channel); - - u32 reg_val = 0; - reg_val = FPWM_READ_REG32(base_addr, FPWM_CTRL_OFFSET); - reg_val &= (~FPWM_CTRL_CMP_MASK); - reg_val |= FPWM_CTRL_CMP(polarity); - FPWM_WRITE_REG32(base_addr, FPWM_CTRL_OFFSET, reg_val); -} - -/** - * @name: FPwmDbReset - * @msg: reset pwm db - * @param {FPwmCtrl} *pctrl, instance of FPWM controller - * @return err code information, FPWM_SUCCESS indicates success,others indicates failed - */ -static FError FPwmDbReset(FPwmCtrl *pctrl) -{ - FASSERT(pctrl != NULL); - - u32 reg_val = 0; - int timeout = FPWM_RESET_TIMEOUT; - uintptr base_addr = pctrl->config.db_base_addr; - - reg_val = FPWM_READ_REG32(base_addr, FPWM_DB_CTRL_OFFSET); - reg_val |= FPWM_DB_CTRL_RESET; - FPWM_WRITE_REG32(base_addr, FPWM_DB_CTRL_OFFSET, reg_val); - - /* Check for the db reset complete*/ - do - { - reg_val = FPWM_READ_REG32(base_addr, FPWM_DB_CTRL_OFFSET); - } - while ((FPWM_DB_CTRL_RESET & reg_val) && (0 <= --timeout)); - - if (0 >= timeout) - { - FPWM_ERROR("Time out while waiting for pwm db reset to complete"); - return FPWM_ERR_TIMEOUT; - } - return FPWM_SUCCESS; -} - -/** - * @name: FPwmDbPolaritySet - * @msg: config pwm db polarity - * @param {FPwmCtrl} *pctrl, instance of FPWM controller - * @param {FPwmDbPolarity} db_polarity, db polarity parameters - * @return err code information, FPWM_SUCCESS indicates success,others indicates failed - */ -FError FPwmDbPolaritySet(FPwmCtrl *pctrl, FPwmDbPolarity db_polarity) -{ - FASSERT(pctrl != NULL); - FASSERT(db_polarity < FPWM_DB_POLARITY_NUM); - u32 reg_val = 0; - uintptr base_addr = pctrl->config.db_base_addr; - - reg_val = FPWM_READ_REG32(base_addr, FPWM_DB_CTRL_OFFSET); - reg_val &= (~FPWM_DB_CTRL_POLSEL_MASK); - reg_val |= FPWM_DB_CTRL_POLSEL(db_polarity); - FPWM_WRITE_REG32(base_addr, FPWM_DB_CTRL_OFFSET, reg_val); - - return FPWM_SUCCESS; -} - -/** - * @name: FPwmDbFallCycleSet - * @msg: config pwm db fall cycle - * @param {FPwmCtrl} *pctrl, instance of FPWM controller - * @param {u16} fall_edge_delay, db fall cycle parameters - * @return - */ -static void FPwmDbFallCycleSet(FPwmCtrl *pctrl, u16 fall_edge_delay) -{ - FASSERT(pctrl != NULL); - FASSERT(fall_edge_delay < FPWM_DB_DLY_MAX); - u32 reg_val = 0; - uintptr pwm_base_addr = pctrl->config.pwm_base_addr; - uintptr db_base_addr = pctrl->config.db_base_addr; - - u32 pwm_period = FPWM_READ_REG32(pwm_base_addr, FPWM_PERIOD_OFFSET); - - reg_val = FPWM_READ_REG32(db_base_addr, FPWM_DB_DLY_OFFSET); - reg_val &= (~FPWM_DB_DLY_FALL_MASK); - reg_val |= FPWM_DB_DLY_FALL(fall_edge_delay); - FPWM_WRITE_REG32(db_base_addr, FPWM_DB_DLY_OFFSET, reg_val); -} - -/** - * @name: FPwmDbRiseCycleSet - * @msg: config pwm db rise cycle - * @param {FPwmCtrl} *pctrl, instance of FPWM controller - * @param {u16} rise_edge_delay, db rise cycle parameters - * @return - */ -static void FPwmDbRiseCycleSet(FPwmCtrl *pctrl, u16 rise_edge_delay) -{ - FASSERT(pctrl != NULL); - FASSERT(rise_edge_delay < FPWM_DB_DLY_MAX); - u32 reg_val = 0; - uintptr pwm_base_addr = pctrl->config.pwm_base_addr; - uintptr db_base_addr = pctrl->config.db_base_addr; - - u32 pwm_period = FPWM_READ_REG32(pwm_base_addr, FPWM_PERIOD_OFFSET); - - reg_val = FPWM_READ_REG32(db_base_addr, FPWM_DB_DLY_OFFSET); - reg_val &= (~FPWM_DB_DLY_RISE_MASK); - reg_val |= (u32)(rise_edge_delay & FPWM_DB_DLY_RISE_MASK); - FPWM_WRITE_REG32(db_base_addr, FPWM_DB_DLY_OFFSET, reg_val); -} - -/** - * @name: FPwmDbInModeSet - * @msg: config pwm db in source mode, pwm0 or pwm1 - * @param {FPwmCtrl} *pctrl, instance of FPWM controller - * @param {FPwmDbInMode} db_in_mode, db in mode parameters - * @return void - */ -static void FPwmDbInModeSet(FPwmCtrl *pctrl, FPwmDbInMode db_in_mode) -{ - FASSERT(db_in_mode < FPWM_DB_IN_MODE_NUM); - u32 reg_val = 0; - uintptr base_addr = pctrl->config.db_base_addr; - - reg_val = FPWM_READ_REG32(base_addr, FPWM_DB_CTRL_OFFSET); - switch (db_in_mode) - { - case FPWM_DB_IN_MODE_PWM0: - reg_val &= (~FPWM_DB_CTRL_IN_MODE); - break; - case FPWM_DB_IN_MODE_PWM1: - reg_val |= FPWM_DB_CTRL_IN_MODE; - break; - default: - break; - } - - FPWM_WRITE_REG32(base_addr, FPWM_DB_CTRL_OFFSET, reg_val); -} - -static void FPwmDbOutModeSet(FPwmCtrl *pctrl, FPwmDbOutMode db_out_mode) -{ - FASSERT(db_out_mode < FPWM_DB_OUT_MODE_NUM); - u32 reg_val = 0; - uintptr base_addr = pctrl->config.db_base_addr; - - reg_val = FPWM_READ_REG32(base_addr, FPWM_DB_CTRL_OFFSET); - reg_val &= (~FPWM_DB_CTRL_OUT_MODE_MASK); - reg_val |= FPWM_DB_CTRL_OUT_MODE(db_out_mode); - FPWM_WRITE_REG32(base_addr, FPWM_DB_CTRL_OFFSET, reg_val); -} - -/** - * @name: FPwmInterruptEnable - * @msg: enable pwm compare output interrupt - * @param {FPwmCtrl} *pctrl, instance of FPWM controller - * @param {u32} channel, pwm module's channel, 0/1 - * @param {FPwmIntrEventType} intr_type, pwm interrupt event type - * @return - */ -void FPwmInterruptEnable(FPwmCtrl *pctrl, u32 channel, FPwmIntrEventType intr_type) -{ - FASSERT(pctrl != NULL); - FASSERT(channel < FPWM_CHANNEL_NUM); - u32 reg_val = 0; - uintptr base_addr = pctrl->config.pwm_base_addr + FPWM_N(channel); - - reg_val = FPWM_READ_REG32(base_addr, FPWM_CTRL_OFFSET); - - if (intr_type == FPWM_INTR_EVENT_COUNTER) - { - reg_val &= (~FPWM_CTRL_INTR_COUNTER_ENABLE); - reg_val |= FPWM_CTRL_INTR_COUNTER_ENABLE; - } - - if (intr_type == FPWM_INTR_EVENT_FIFO_EMPTY) - { - reg_val &= (~FPWM_CTRL_INTR_FIFO_EMPTY_ENABLE); - reg_val |= FPWM_CTRL_INTR_FIFO_EMPTY_ENABLE; - } - - FPWM_WRITE_REG32(base_addr, FPWM_CTRL_OFFSET, reg_val); -} - -/** - * @name: FPwmInterruptDisable - * @msg: disable pwm compare output interrupt - * @param {FPwmCtrl} *pctrl, instance of FPWM controller - * @param {u32} channel, pwm module's channel, 0/1 - * @param {FPwmIntrEventType} intr_type, pwm interrupt event type - * @return - */ -void FPwmInterruptDisable(FPwmCtrl *pctrl, u32 channel, FPwmIntrEventType intr_type) -{ - FASSERT(pctrl != NULL); - FASSERT(channel < FPWM_CHANNEL_NUM); - u32 reg_val = 0; - uintptr base_addr = pctrl->config.pwm_base_addr + FPWM_N(channel); - - reg_val = FPWM_READ_REG32(base_addr, FPWM_CTRL_OFFSET); - - if (intr_type == FPWM_INTR_EVENT_COUNTER) - { - reg_val &= (~FPWM_CTRL_INTR_COUNTER_ENABLE); - } - - if (intr_type == FPWM_INTR_EVENT_FIFO_EMPTY) - { - reg_val &= (~FPWM_CTRL_INTR_FIFO_EMPTY_ENABLE); - } - - FPWM_WRITE_REG32(base_addr, FPWM_CTRL_OFFSET, reg_val); -} - -/** - * @name: FPwmDbVariableSet - * @msg: set pwm db Variable config, users need call this function before - * FPwmVariableSet if you want to use deadband function. - * @param {FPwmCtrl} *pctrl, instance of FPWM controller - * @param {FPwmDbVariableConfig} db_cfg_p, db config parameters, include mode and cycles - * @return err code information, FPWM_SUCCESS indicates success,others indicates failed - */ -FError FPwmDbVariableSet(FPwmCtrl *pctrl, FPwmDbVariableConfig *db_cfg_p) -{ - FASSERT(pctrl != NULL); - FASSERT(db_cfg_p != NULL); - - FError ret = FPWM_SUCCESS; - - ret = FPwmDbReset(pctrl); - if (ret != FPWM_SUCCESS) - { - FPWM_ERROR("%s ,The FPwmDbReset call failed",__func__); - return FPWM_ERR_CMD_FAILED; - } - - FPwmDbRiseCycleSet(pctrl, db_cfg_p->db_rise_cycle); - - FPwmDbFallCycleSet(pctrl, db_cfg_p->db_fall_cycle); - - ret = FPwmDbPolaritySet(pctrl, db_cfg_p->db_polarity_sel); - if (ret != FPWM_SUCCESS) - { - FPWM_ERROR("%s ,The FPwmDbPolaritySet call failed",__func__); - return FPWM_ERR_CMD_FAILED; - } - - FPwmDbInModeSet(pctrl, db_cfg_p->db_in_mode); - - FPwmDbOutModeSet(pctrl, db_cfg_p->db_out_mode); - - return ret; -} - -/** - * @name: FPwmDbVariableGet - * @msg: get pwm deadband variable configuration. - * @param {FPwmCtrl} *pctrl, instance of FPWM controller - * @param {FPwmDbVariableConfig} *db_cfg_p, pwm deadband config parameters - * @return err code information, FPWM_SUCCESS indicates success,others indicates failed - */ -FError FPwmDbVariableGet(FPwmCtrl *pctrl, FPwmDbVariableConfig *db_cfg_p) -{ - FASSERT(pctrl != NULL); - FASSERT(db_cfg_p != NULL); - FError ret = FPWM_SUCCESS; - - uintptr db_base_addr = pctrl->config.db_base_addr; - - u32 db_ctrl = FPWM_READ_REG32(db_base_addr, FPWM_DB_CTRL_OFFSET); - /* db input source*/ - db_cfg_p->db_in_mode = - (db_ctrl & FPWM_DB_CTRL_IN_MODE) ? FPWM_DB_IN_MODE_PWM1 : FPWM_DB_IN_MODE_PWM0; - - /* db polarity select*/ - db_cfg_p->db_polarity_sel = FPWM_DB_CTRL_POLSEL_GET(db_ctrl & FPWM_DB_CTRL_POLSEL_MASK); - /* db output mode*/ - db_cfg_p->db_out_mode = FPWM_DB_CTRL_OUT_MODE_GET(db_ctrl & FPWM_DB_CTRL_OUT_MODE_MASK); - - u32 db_dly = FPWM_READ_REG32(db_base_addr, FPWM_DB_DLY_OFFSET); - /* db falling edge delay cycle */ - db_cfg_p->db_fall_cycle = FPWM_DB_DLY_FALL_GET(db_dly & FPWM_DB_DLY_FALL_MASK); - /* db rising edge delay cycle */ - db_cfg_p->db_rise_cycle = (db_dly & FPWM_DB_DLY_RISE_MASK); - - return ret; - -} - -/** - * @name: FPwmVariableSet - * @msg: set pwm channel variable configuration, users need call this function after - * FPwmDbVariableSet if you want to use deadband function. - * @param {FPwmCtrl} *pctrl, instance of FPWM controller - * @param {u32} channel, pwm module's channel, 0/1 - * @param {FPwmVariableConfig} pwm_cfg_p, pwm config parameters, include mode and duty - * @return err code information, FPWM_SUCCESS indicates success,others indicates failed - */ -FError FPwmVariableSet(FPwmCtrl *pctrl, u32 channel, FPwmVariableConfig *pwm_cfg_p) -{ - FASSERT(pctrl != NULL); - FASSERT(channel < FPWM_CHANNEL_NUM); - FASSERT(pwm_cfg_p != NULL); - FError ret = FPWM_SUCCESS; - -#if defined(FLSD_CONFIG_BASE) - /* enable lsd pwm syn */ - FPwmLsdEnable(FLSD_CONFIG_BASE, pctrl->config.instance_id); -#endif - /* bit[0]:set pwm_tim_ctrl SW_RST */ - ret = FPwmReset(pctrl, channel); - if (ret != FPWM_SUCCESS) - { - FPWM_ERROR("%s ,FPwmReset call failed",__func__); - return FPWM_ERR_CMD_FAILED; - } - - /* pwm timer ctrl disable, before can config */ - FPwmDisable(pctrl, channel); - - /* bit[2]:set tim_ctrl Mode */ - FPwmTimCtrlModeSet(pctrl, channel, pwm_cfg_p->tim_ctrl_mode); - - /* bit[4,5]:set tim_ctrl interrput */ - FPwmTimInterruptEnable(pctrl, channel); - - /*bit[16~27]: set tim_ctrl DIV 0~4095 */ - FPwmDivSet(pctrl, channel, pwm_cfg_p->tim_ctrl_div); - - /*bit[0~15]: set pwm_period */ - FPwmPeriodSet(pctrl, channel, pwm_cfg_p->pwm_period); - - /*bit[2]:pwm control mode, input capture or output compare */ - FPwmCtrlModeSet(pctrl, channel); - - /*bit[3]:pwm control mode irq */ - FPwmInterruptEnable(pctrl, channel, FPWM_INTR_EVENT_COUNTER); - FPwmInterruptEnable(pctrl, channel, FPWM_INTR_EVENT_FIFO_EMPTY); - - /*bit[4~6]:pwm ctrl polarity config CMP:0b100*/ - FPwmPolaritySet(pctrl, channel, pwm_cfg_p->pwm_polarity); - - /*bit[8]:pwm duty source , duty from ccr or fifo */ - FPwmDutySourceSet(pctrl, channel, pwm_cfg_p->pwm_duty_source_mode); - - /*pwm pulse set, duty */ - ret = FPwmPulseSet(pctrl, channel, pwm_cfg_p->pwm_pulse); - if (ret != FPWM_SUCCESS) - { - FPWM_ERROR("%s , FPwmPulseSet failed",__func__); - return FPWM_ERR_CMD_FAILED; - } - - return ret; -} - -/** - * @name: FPwmVariableGet - * @msg: get pwm channel variable configuration. - * @param {FPwmCtrl} *pctrl, instance of FPWM controller - * @param {u32} channel, pwm module's channel, 0/1 - * @param {FPwmVariableConfig} *pwm_cfg_p, pwm config parameters, include mode and duty - * @return err code information, FPWM_SUCCESS indicates success,others indicates failed - */ -FError FPwmVariableGet(FPwmCtrl *pctrl, u32 channel, FPwmVariableConfig *pwm_cfg_p) -{ - FASSERT(pctrl != NULL); - FASSERT(channel < FPWM_CHANNEL_NUM); - FASSERT(pwm_cfg_p != NULL); - FError ret = FPWM_SUCCESS; - - uintptr pwm_base_addr = pctrl->config.pwm_base_addr + FPWM_N(channel); - - u32 tim_ctrl = FPWM_READ_REG32(pwm_base_addr, FPWM_TIM_CTRL_OFFSET); - /* tim_ctrl mode, counter mode */ - pwm_cfg_p->tim_ctrl_mode = - (tim_ctrl & FPWM_TIM_CTRL_MODE_UD) ? FPWM_UP_DOWN : FPWM_MODULO; - /* pwm divider */ - pwm_cfg_p->tim_ctrl_div = FPWM_TIM_CTRL_DIV_GET(tim_ctrl & FPWM_TIM_CTRL_DIV_MASK); - - /* pwm period value */ - u32 pwm_period = FPWM_READ_REG32(pwm_base_addr, FPWM_PERIOD_OFFSET) ; - pwm_cfg_p->pwm_period = (u16)(pwm_period & FPWM_PERIOD_CCR_MASK); - - u32 pwm_ctrl = FPWM_READ_REG32(pwm_base_addr, FPWM_CTRL_OFFSET); - /* pwm mode, compare output */ - pwm_cfg_p->pwm_mode = - (pwm_ctrl & FPWM_CTRL_MODE_OUTPUT) ? FPWM_OUTPUT_COMPARE : FPWM_NONE_MODE; - - /* pwm compare output polarity */ - pwm_cfg_p->pwm_polarity = FPWM_CTRL_CMP_GET(pwm_ctrl & FPWM_CTRL_CMP_MASK); - - /* pwm duty value source */ - pwm_cfg_p->pwm_duty_source_mode = - (pwm_ctrl & FPWM_CTRL_DUTY_SOURCE_FIFO) ? FPWM_DUTY_FIFO : FPWM_DUTY_CCR; - - /* pwm pulse value */ - u32 pwm_ccr = FPWM_READ_REG32(pwm_base_addr, FPWM_CCR_OFFSET); - pwm_cfg_p->pwm_pulse = (u16)(pwm_ccr & FPWM_CCR_MASK); - - return ret; -} - -/** - * @name: FPwmDeInitialize - * @msg: DeInitialization function for the device instance - * @param {FPwmCtrl} *pctrl, instance of FPWM controller - * @return {*} - */ -void FPwmDeInitialize(FPwmCtrl *pctrl) -{ - FASSERT(pctrl); - - pctrl->is_ready = 0; - memset(pctrl, 0, sizeof(*pctrl)); - - return; -} - -/** - * @name: FPwmCfgInitialize - * @msg: Initializes a specific instance such that it is ready to be used. - * @param {FPwmCtrl} *pctrl, instance of FPWM controller - * @param {FPwmConfig} *input_config_p, Configuration parameters of FPWM - * @return err code information, FPWM_SUCCESS indicates success,others indicates failed - */ -FError FPwmCfgInitialize(FPwmCtrl *pctrl, const FPwmConfig *input_config_p) -{ - FASSERT(pctrl && input_config_p); - - FError ret = FPWM_SUCCESS; - /* - * If the device is started, disallow the initialize and return a Status - * indicating it is started. This allows the user to de-initialize the device - * and reinitialize, but prevents a user from inadvertently - * initializing. - */ - if (FT_COMPONENT_IS_READY == pctrl->is_ready) - { - FPWM_WARN("The device has been initialized!!!"); - } - - /*Set default values and configuration data */ - FPwmDeInitialize(pctrl); - - pctrl->config = *input_config_p; -#if defined(CONFIG_TARGET_E2000) - ret = FPwmDbReset(pctrl); - if (ret != FPWM_SUCCESS) - { - FPWM_ERROR("%s ,The FPwmDbReset call failed"); - return FPWM_ERR_CMD_FAILED; - } -#endif - pctrl->is_ready = FT_COMPONENT_IS_READY; - - return ret; -} - -/** - * @name: FPwmGpioSet - * @msg: Control gpio output - * @param {FPwmCtrl} *pctrl, instance of FPWM controller - * @param {u32} channel, pwm module's channel, 0/1 - * @param {u32} output, set high or low level, 0-low, 1-high - * @return void - */ -void FPwmGpioSet(FPwmCtrl *pctrl, u32 channel, u32 output) -{ - FASSERT(pctrl != NULL); - u32 reg_val = 0; - uintptr base_addr = pctrl->config.pwm_base_addr + FPWM_N(channel); - - reg_val = FPWM_READ_REG32(base_addr, FPWM_CCR_OFFSET); - if(output) - reg_val |= FPWM_CCR_GPIO; - else - reg_val &= (~FPWM_CCR_GPIO); - FPWM_WRITE_REG32(base_addr, FPWM_CCR_OFFSET, reg_val); - -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/pwm/fpwm/fpwm.h b/bsp/phytium/libraries/standalone/drivers/pwm/fpwm/fpwm.h deleted file mode 100644 index 7a7ca6e9c7..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/pwm/fpwm/fpwm.h +++ /dev/null @@ -1,224 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fpwm.h - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-04-15 11:45:05 - * Description: This file is for detailed description of the device configuration and driver. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 wangxiaodong 2022/4/15 init commit - */ - -#ifndef FPWM_H -#define FPWM_H - -#include "ftypes.h" -#include "fdebug.h" -#include "ferror_code.h" -#include "fkernel.h" -#include "fassert.h" -#include "fparameters.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -#define FPWM_SUCCESS FT_SUCCESS -#define FPWM_ERR_INVAL_PARM FT_MAKE_ERRCODE(ErrModBsp, ErrBspPwm, 1) -#define FPWM_ERR_NOT_READY FT_MAKE_ERRCODE(ErrModBsp, ErrBspPwm, 2) -#define FPWM_ERR_TIMEOUT FT_MAKE_ERRCODE(ErrModBsp, ErrBspPwm, 3) -#define FPWM_ERR_NOT_SUPPORT FT_MAKE_ERRCODE(ErrModBsp, ErrBspPwm, 4) -#define FPWM_ERR_CMD_FAILED FT_MAKE_ERRCODE(ErrModBsp, ErrBspPwm, 5) - -typedef enum -{ - FPWM_INTR_EVENT_COUNTER = 0, /**< Handler type for counter interrupt */ - FPWM_INTR_EVENT_FIFO_EMPTY = 1, /**< Handler type for fifo empty interrupt*/ - FPWM_INTR_EVENT_NUM -} FPwmIntrEventType; - -/* duty sel */ -typedef enum -{ - FPWM_DUTY_CCR = 0, /* duty value from pwm ccr register */ - FPWM_DUTY_FIFO = 1, /* duty value from fifo */ - FPWM_DUTY_SEL_MODE_NUM -} FPwmDutySourceMode; - -/* tim_ctrl mode, counter mode */ -typedef enum -{ - FPWM_MODULO = 0, /* count from 0~period */ - FPWM_UP_DOWN = 1, /* count from 0~period~0 */ - FPWM_TIM_CTRL_MODE_NUM -} FPwmTimCtrlMode; - -/* pwm mode, only the compare output mode is supported currently*/ -typedef enum -{ - FPWM_NONE_MODE = 0,/* no mode */ - FPWM_OUTPUT_COMPARE = 1,/* compare output mode */ - FPWM_CTRL_MODE_NUM -} FPwmCtrlMode; - -/** - * enum pwm_polarity - polarity of a PWM compare signal - * @FPWM_POLARITY_NORMAL: a high signal for the duration of the duty- - * cycle, followed by a low signal for the remainder of the pulse - * period - * @FPWM_POLARITY_INVERSED: a low signal for the duration of the duty- - * cycle, followed by a high signal for the remainder of the pulse - * period - */ -typedef enum -{ - FPWM_POLARITY_OUTPUT_HIGH = 0b000, - FPWM_POLARITY_OUTPUT_LOW = 0b001, - FPWM_POLARITY_OUTPUT_FLIP = 0b010, - FPWM_POLARITY_INVERSED = 0b011, - FPWM_POLARITY_NORMAL = 0b100, - FPWM_POLARITY_CCR_LOW = 0b101, - FPWM_POLARITY_CCR_HIGH = 0b110, - FPWM_POLARITY_INIT = 0b111, - FPWM_POLARITY_NUM -} FPwmPolarity; - - -/* db polarity select */ -typedef enum -{ - FPWM_DB_AH = 0, /* no flip */ - FPWM_DB_ALC = 1,/* pwm0 flip */ - FPWM_DB_AHC, /* pwm1 flip */ - FPWM_DB_AL, /* pwm0 and pwm1 flip */ - FPWM_DB_POLARITY_NUM -} FPwmDbPolarity; - -/* db out mode */ -typedef enum -{ - FPWM_DB_OUT_MODE_BYPASS = 0b00, /* by pass */ - FPWM_DB_OUT_MODE_FORBID_RISE = 0b01,/* forbid rise delay */ - FPWM_DB_OUT_MODE_FORBID_FALL = 0b10,/* forbid fall delay */ - FPWM_DB_OUT_MODE_ENABLE_RISE_FALL = 0b11,/* enable rise and fall delay */ - FPWM_DB_OUT_MODE_NUM -} FPwmDbOutMode; - -/* db input source select, channel 0 or 1 */ -typedef enum -{ - FPWM_DB_IN_MODE_PWM0 = 0,/* db input source choose pwm0 */ - FPWM_DB_IN_MODE_PWM1 = 1,/* db input source choose pwm1 */ - FPWM_DB_IN_MODE_NUM -} FPwmDbInMode; - -typedef struct -{ - FPwmDbPolarity db_polarity_sel;/* db polarity select*/ - FPwmDbOutMode db_out_mode;/* db output mode*/ - FPwmDbInMode db_in_mode;/* db input source*/ - u16 db_fall_cycle;/* db falling edge delay cycle */ - u16 db_rise_cycle;/* db rising edge delay cycle */ -} FPwmDbVariableConfig; - -typedef struct -{ - FPwmTimCtrlMode tim_ctrl_mode;/* tim_ctrl mode, counter mode */ - u16 tim_ctrl_div;/* pwm divider */ - u16 pwm_period;/* pwm period value */ - FPwmCtrlMode pwm_mode;/* pwm mode, compare output */ - FPwmPolarity pwm_polarity;/* pwm compare output polarity */ - FPwmDutySourceMode pwm_duty_source_mode;/* pwm duty value source */ - u16 pwm_pulse;/* pwm pulse value */ - -} FPwmVariableConfig; - -typedef struct -{ - u8 instance_id;/* pwm id */ - uintptr db_base_addr; - uintptr pwm_base_addr; - - u64 base_clk; - u32 irq_num[FPWM_CHANNEL_NUM]; /* pwm irq num */ - u32 irq_prority[FPWM_CHANNEL_NUM]; /* pwm irq priority */ - const char *instance_name;/* instance name */ - -} FPwmConfig; /* Pwm配置 */ - -typedef void (*FPwmIntrEventHandler)(void *param); - -typedef struct -{ - FPwmConfig config;/* Pwm配置 */ - u32 is_ready;/* Pwm初始化完成标志 */ - - u8 channel_ctrl_enable[FPWM_CHANNEL_NUM]; /* pwm channel ctrl enable state */ - - FPwmIntrEventHandler event_handler[FPWM_INTR_EVENT_NUM]; /* event handler for interrupt */ - void *event_param[FPWM_INTR_EVENT_NUM]; /* parameters ptr of event handler */ - -} FPwmCtrl; - - -/* interrupt handler function */ -void FPwmIntrHandler(s32 vector, void *args); - -/* register the handler function */ -void FPwmRegisterInterruptHandler(FPwmCtrl *instance_p, FPwmIntrEventType event_type, FPwmIntrEventHandler handler, void *param); - -/* get pwm configs by id */ -const FPwmConfig *FPwmLookupConfig(u32 instance_id); - -/* DeInitialization function for the device instance */ -void FPwmDeInitialize(FPwmCtrl *pctrl); - -/*Initializes a specific instance such that it is ready to be used*/ -FError FPwmCfgInitialize(FPwmCtrl *pctrl, const FPwmConfig *input_config_p); - -/* set pwm db configuration */ -FError FPwmDbVariableSet(FPwmCtrl *pctrl, FPwmDbVariableConfig *db_cfg_p); - -/* get pwm db configuration */ -FError FPwmDbVariableGet(FPwmCtrl *pctrl, FPwmDbVariableConfig *db_cfg_p); - -/* set pwm channel configuration */ -FError FPwmVariableSet(FPwmCtrl *pctrl, u32 channel, FPwmVariableConfig *pwm_cfg_p); - -/* get pwm channel configuration */ -FError FPwmVariableGet(FPwmCtrl *pctrl, u32 channel, FPwmVariableConfig *pwm_cfg_p); - -/* config pwm pulse, pwm_ccr is less than pwm_period */ -FError FPwmPulseSet(FPwmCtrl *pctrl, u32 channel, u16 pwm_ccr); - -/* disable pwm */ -void FPwmDisable(FPwmCtrl *pctrl, u32 channel); - -/* enable pwm */ -void FPwmEnable(FPwmCtrl *pctrl, u32 channel); - -/* dump some pwm registers value */ -void FPwmDump(uintptr base_addr); - -/* control gpio output */ -void FPwmGpioSet(FPwmCtrl *pctrl, u32 channel, u32 output); - -#ifdef __cplusplus -} -#endif - -#endif \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/pwm/fpwm/fpwm_g.c b/bsp/phytium/libraries/standalone/drivers/pwm/fpwm/fpwm_g.c deleted file mode 100644 index 81ba3b2ef3..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/pwm/fpwm/fpwm_g.c +++ /dev/null @@ -1,150 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fpwm_g.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-04-16 11:45:05 - * Description:  This file is for pwm static configuration implementation. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 wangxiaodong 2022/4/16 init commit - */ - -#include "fparameters.h" -#include "fpwm.h" -#include "fpwm_hw.h" -#include "sdkconfig.h" - -#if defined(CONFIG_TARGET_E2000) -/* default configs of pwm ctrl */ -const FPwmConfig FPwmConfigTbl[FPWM_NUM] = -{ - [FPWM0_ID] = - { - .instance_id = FPWM0_ID, - .db_base_addr = FPWM0_BASE_ADR, - .pwm_base_addr = FPWM0_BASE_ADR + FPWM_OFFSET, - .base_clk = FPWM_CLK_FREQ_HZ, - .irq_num[FPWM_CHANNEL_0] = FPWM0_IRQ_NUM, - .irq_num[FPWM_CHANNEL_1] = FPWM1_IRQ_NUM, - .irq_prority[FPWM_CHANNEL_0] = 0, - .irq_prority[FPWM_CHANNEL_1] = 0, - .instance_name = "PWM_CTRL0", - }, - [FPWM1_ID] = - { - .instance_id = FPWM1_ID, - .db_base_addr = FPWM1_BASE_ADR, - .pwm_base_addr = FPWM1_BASE_ADR + FPWM_OFFSET, - .base_clk = FPWM_CLK_FREQ_HZ, - .irq_num[FPWM_CHANNEL_0] = FPWM2_IRQ_NUM, - .irq_num[FPWM_CHANNEL_1] = FPWM3_IRQ_NUM, - .irq_prority[FPWM_CHANNEL_0] = 0, - .irq_prority[FPWM_CHANNEL_1] = 0, - .instance_name = "PWM_CTRL1", - }, - [FPWM2_ID] = - { - .instance_id = FPWM2_ID, - .db_base_addr = FPWM2_BASE_ADR, - .pwm_base_addr = FPWM2_BASE_ADR + FPWM_OFFSET, - .base_clk = FPWM_CLK_FREQ_HZ, - .irq_num[FPWM_CHANNEL_0] = FPWM4_IRQ_NUM, - .irq_num[FPWM_CHANNEL_1] = FPWM5_IRQ_NUM, - .irq_prority[FPWM_CHANNEL_0] = 0, - .irq_prority[FPWM_CHANNEL_1] = 0, - .instance_name = "PWM_CTRL2", - }, - [FPWM3_ID] = - { - .instance_id = FPWM3_ID, - .db_base_addr = FPWM3_BASE_ADR, - .pwm_base_addr = FPWM3_BASE_ADR + FPWM_OFFSET, - .base_clk = FPWM_CLK_FREQ_HZ, - .irq_num[FPWM_CHANNEL_0] = FPWM6_IRQ_NUM, - .irq_num[FPWM_CHANNEL_1] = FPWM7_IRQ_NUM, - .irq_prority[FPWM_CHANNEL_0] = 0, - .irq_prority[FPWM_CHANNEL_1] = 0, - .instance_name = "PWM_CTRL3", - }, - [FPWM4_ID] = - { - .instance_id = FPWM4_ID, - .db_base_addr = FPWM4_BASE_ADR, - .pwm_base_addr = FPWM4_BASE_ADR + FPWM_OFFSET, - .base_clk = FPWM_CLK_FREQ_HZ, - .irq_num[FPWM_CHANNEL_0] = FPWM8_IRQ_NUM, - .irq_num[FPWM_CHANNEL_1] = FPWM9_IRQ_NUM, - .irq_prority[FPWM_CHANNEL_0] = 0, - .irq_prority[FPWM_CHANNEL_1] = 0, - .instance_name = "PWM_CTRL4", - }, - [FPWM5_ID] = - { - .instance_id = FPWM5_ID, - .db_base_addr = FPWM5_BASE_ADR, - .pwm_base_addr = FPWM5_BASE_ADR + FPWM_OFFSET, - .base_clk = FPWM_CLK_FREQ_HZ, - .irq_num[FPWM_CHANNEL_0] = FPWM10_IRQ_NUM, - .irq_num[FPWM_CHANNEL_1] = FPWM11_IRQ_NUM, - .irq_prority[FPWM_CHANNEL_0] = 0, - .irq_prority[FPWM_CHANNEL_1] = 0, - .instance_name = "PWM_CTRL5", - }, - [FPWM6_ID] = - { - .instance_id = FPWM6_ID, - .db_base_addr = FPWM6_BASE_ADR, - .pwm_base_addr = FPWM6_BASE_ADR + FPWM_OFFSET, - .base_clk = FPWM_CLK_FREQ_HZ, - .irq_num[FPWM_CHANNEL_0] = FPWM12_IRQ_NUM, - .irq_num[FPWM_CHANNEL_1] = FPWM13_IRQ_NUM, - .irq_prority[FPWM_CHANNEL_0] = 0, - .irq_prority[FPWM_CHANNEL_1] = 0, - .instance_name = "PWM_CTRL6", - }, - [FPWM7_ID] = - { - .instance_id = FPWM7_ID, - .db_base_addr = FPWM7_BASE_ADR, - .pwm_base_addr = FPWM7_BASE_ADR + FPWM_OFFSET, - .base_clk = FPWM_CLK_FREQ_HZ, - .irq_num[FPWM_CHANNEL_0] = FPWM14_IRQ_NUM, - .irq_num[FPWM_CHANNEL_1] = FPWM15_IRQ_NUM, - .irq_prority[FPWM_CHANNEL_0] = 0, - .irq_prority[FPWM_CHANNEL_1] = 0, - .instance_name = "PWM_CTRL7", - }, - - -}; - -#elif defined(TARDIGRADE) -/* default configs of pwm ctrl */ -const FPwmConfig FPwmConfigTbl[FPWM_NUM] = -{ - [FPWM0_ID] = - { - .instance_id = FPWM0_ID, - .pwm_base_addr = FPWM0_BASE_ADR, - .base_clk = FPWM_CLK_FREQ_HZ, - .irq_num[FPWM_CHANNEL_0] = FPWM0_IRQ_NUM, - .irq_prority[FPWM_CHANNEL_0] = 0, - .instance_name = "PWM_CTRL0", - }, - -}; - -#endif \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/pwm/fpwm/fpwm_hw.c b/bsp/phytium/libraries/standalone/drivers/pwm/fpwm/fpwm_hw.c deleted file mode 100644 index 4a4449fe18..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/pwm/fpwm/fpwm_hw.c +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fpwm_hw.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-25 11:45:05 - * Description:  This file is for pwm register implementation. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 wangxiaodong 2022/4/15 init commit - */ - -#include -#include "fparameters.h" -#include "fpwm_hw.h" -#include "fassert.h" - -/** - * @name: FPwmLsdEnable - * @msg: enable pwm lsd syn - * @param {uintptr} lsd_addr, base address of the lsd_pwm_syn - * @param {u8} pwm_id, pwm id parameters of FPWM - * @return - */ -void FPwmLsdEnable(uintptr lsd_addr, u8 pwm_id) -{ - FASSERT(pwm_id < FPWM_NUM); - u32 reg_val = 0; - - reg_val = FPWM_READ_REG32(lsd_addr, FLSD_MIO_PWM_SYN_OFFSET); - - reg_val |= (FLSD_MIO_PWM_SYN_MASK & (1 << pwm_id)); - - FPWM_WRITE_REG32(lsd_addr, FLSD_MIO_PWM_SYN_OFFSET, reg_val); -} - -/** - * @name: FPwmLsdDisable - * @msg: disable pwm lsd syn - * @param {uintptr} lsd_addr, base address of the lsd_pwm_syn - * @param {u8} pwm_id, pwm id parameters of FPWM - * @return - */ -void FPwmLsdDisable(uintptr lsd_addr, u8 pwm_id) -{ - FASSERT(pwm_id < FPWM_NUM); - u32 reg_val = 0; - - reg_val = FPWM_READ_REG32(lsd_addr, FLSD_MIO_PWM_SYN_OFFSET); - - reg_val &= (~(FLSD_MIO_PWM_SYN_MASK & (1 << pwm_id))); - - FPWM_WRITE_REG32(lsd_addr, FLSD_MIO_PWM_SYN_OFFSET, reg_val); -} - - -/** - * @name: FPwmDump - * @msg: dump some pwm registers value. - * @param {FPwmCtrl} *pctrl, instance of FPWM controller - * @return - */ -void FPwmDump(uintptr base_addr) -{ - uintptr db_base_addr = base_addr; - uintptr pwm_base_addr = base_addr + FPWM_OFFSET; - - printf("Off[0x%x]: FPWM_DB_CTRL_OFFSET = 0x%08x\r\n", db_base_addr + FPWM_DB_CTRL_OFFSET, FPWM_READ_REG32(db_base_addr, FPWM_DB_CTRL_OFFSET)); - printf("Off[0x%x]: FPWM_DB_DLY_OFFSET = 0x%08x\r\n", db_base_addr + FPWM_DB_DLY_OFFSET, FPWM_READ_REG32(db_base_addr, FPWM_DB_DLY_OFFSET)); - printf("\r\n"); - printf("Off[0x%x]: FPWM_TIM_CNT_OFFSET = 0x%08x\r\n", pwm_base_addr + FPWM_TIM_CNT_OFFSET, FPWM_READ_REG32(pwm_base_addr, FPWM_TIM_CNT_OFFSET)); - printf("Off[0x%x]: FPWM_TIM_CTRL_OFFSET = 0x%08x\r\n", pwm_base_addr + FPWM_TIM_CTRL_OFFSET, FPWM_READ_REG32(pwm_base_addr, FPWM_TIM_CTRL_OFFSET)); - printf("Off[0x%x]: FPWM_STATE_OFFSET = 0x%08x\r\n", pwm_base_addr + FPWM_STATE_OFFSET, FPWM_READ_REG32(pwm_base_addr, FPWM_STATE_OFFSET)); - printf("Off[0x%x]: FPWM_PERIOD_OFFSET = 0x%08x\r\n", pwm_base_addr + FPWM_PERIOD_OFFSET, FPWM_READ_REG32(pwm_base_addr, FPWM_PERIOD_OFFSET)); - printf("Off[0x%x]: FPWM_CTRL_OFFSET = 0x%08x\r\n", pwm_base_addr + FPWM_CTRL_OFFSET, FPWM_READ_REG32(pwm_base_addr, FPWM_CTRL_OFFSET)); - printf("Off[0x%x]: FPWM_CCR_OFFSET = 0x%08x\r\n", pwm_base_addr + FPWM_CCR_OFFSET, FPWM_READ_REG32(pwm_base_addr, FPWM_CCR_OFFSET)); - - pwm_base_addr = pwm_base_addr + FPWM_OFFSET; - printf("\r\n"); - printf("Off[0x%x]: FPWM_TIM_CNT_OFFSET = 0x%08x\r\n", pwm_base_addr + FPWM_TIM_CNT_OFFSET, FPWM_READ_REG32(pwm_base_addr, FPWM_TIM_CNT_OFFSET)); - printf("Off[0x%x]: FPWM_TIM_CTRL_OFFSET = 0x%08x\r\n", pwm_base_addr + FPWM_TIM_CTRL_OFFSET, FPWM_READ_REG32(pwm_base_addr, FPWM_TIM_CTRL_OFFSET)); - printf("Off[0x%x]: FPWM_STATE_OFFSET = 0x%08x\r\n", pwm_base_addr + FPWM_STATE_OFFSET, FPWM_READ_REG32(pwm_base_addr, FPWM_STATE_OFFSET)); - printf("Off[0x%x]: FPWM_PERIOD_OFFSET = 0x%08x\r\n", pwm_base_addr + FPWM_PERIOD_OFFSET, FPWM_READ_REG32(pwm_base_addr, FPWM_PERIOD_OFFSET)); - printf("Off[0x%x]: FPWM_CTRL_OFFSET = 0x%08x\r\n", pwm_base_addr + FPWM_CTRL_OFFSET, FPWM_READ_REG32(pwm_base_addr, FPWM_CTRL_OFFSET)); - printf("Off[0x%x]: FPWM_CCR_OFFSET = 0x%08x\r\n", pwm_base_addr + FPWM_CCR_OFFSET, FPWM_READ_REG32(pwm_base_addr, FPWM_CCR_OFFSET)); - -#if defined(FLSD_CONFIG_BASE) - printf("Off[0x%x]: FPWM_LSD_OFFSET = 0x%08x\r\n", FLSD_CONFIG_BASE + FLSD_MIO_PWM_SYN_OFFSET, FPWM_READ_REG32(FLSD_CONFIG_BASE, FLSD_MIO_PWM_SYN_OFFSET)); -#endif - printf("\r\n"); - -} diff --git a/bsp/phytium/libraries/standalone/drivers/pwm/fpwm/fpwm_hw.h b/bsp/phytium/libraries/standalone/drivers/pwm/fpwm/fpwm_hw.h deleted file mode 100644 index 0c28cf086e..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/pwm/fpwm/fpwm_hw.h +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fpwm_hw.h - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-25 11:45:05 - * Description:  This file is for pwm register definition. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 wangxiaodong 2022/4/15 init commit - */ - -#ifndef FPWM_HW_H -#define FPWM_HW_H - -#include "fkernel.h" -#include "ftypes.h" -#include "fio.h" -#include "fparameters.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/* pwm register definitions */ -#define FPWM_BASE_ADR(n) ((FPWM_BASE_ADDR)+(n<<12)) /* 0<=n<=7 */ - -#define FPWM0_BASE_ADR FPWM_BASE_ADR(0) /* PWM 0 base address */ -#define FPWM1_BASE_ADR FPWM_BASE_ADR(1) /* PWM 1 base address */ -#define FPWM2_BASE_ADR FPWM_BASE_ADR(2) -#define FPWM3_BASE_ADR FPWM_BASE_ADR(3) -#define FPWM4_BASE_ADR FPWM_BASE_ADR(4) -#define FPWM5_BASE_ADR FPWM_BASE_ADR(5) -#define FPWM6_BASE_ADR FPWM_BASE_ADR(6) -#define FPWM7_BASE_ADR FPWM_BASE_ADR(7) - -/* DB register */ -#define FPWM_DB_CTRL_OFFSET 0x00 -#define FPWM_DB_DLY_OFFSET 0x04 - -#define FPWM_OFFSET 0x400 -#define FPWM_TIM_CNT_OFFSET 0x00 -#define FPWM_TIM_CTRL_OFFSET 0x04 -#define FPWM_STATE_OFFSET 0x08 -#define FPWM_PERIOD_OFFSET 0x0C -#define FPWM_CTRL_OFFSET 0x10 -#define FPWM_CCR_OFFSET 0x14 - -#define FPWM_MODE_CHANNEL 2 -#define FPWM_N(x) ((FPWM_OFFSET)*(x)) - -#define FPWM_RESET_TIMEOUT 10 - -#define NSEC_PER_SEC (1000000000ULL) - -/* pwm db_ctrl field */ -#define FPWM_DB_CTRL_RESET BIT(0) -#define FPWM_DB_CTRL_IN_MODE BIT(1) -#define FPWM_DB_CTRL_POLSEL(data) ((data) << 2) -#define FPWM_DB_CTRL_POLSEL_MASK GENMASK(3, 2) -#define FPWM_DB_CTRL_POLSEL_GET(data) ((data) >> 2) -#define FPWM_DB_CTRL_OUT_MODE(data) ((data) << 4) -#define FPWM_DB_CTRL_OUT_MODE_MASK GENMASK(5, 4) -#define FPWM_DB_CTRL_OUT_MODE_GET(data) ((data) >> 4) - -/* pwm db_ctrl field */ -#define FPWM_DB_DLY_MAX 1024 -#define FPWM_DB_DLY_RISE_MASK GENMASK(9, 0) -#define FPWM_DB_DLY_FALL_MASK GENMASK(19, 10) -#define FPWM_DB_DLY_FALL(data) ((data) << 10) -#define FPWM_DB_DLY_FALL_GET(data) ((data) >> 10) - -/* pwm tim_ctrl field */ -#define FPWM_TIM_CTRL_DIV_MAX 4096 - -#define FPWM_TIM_CTRL_RESET BIT(0) -#define FPWM_TIM_CTRL_ENABLE BIT(1) -#define FPWM_TIM_CTRL_MODE_UD BIT(2) /* mode, modulo or up-and-down */ -#define FPWM_TIM_CTRL_OVFIF_ENABLE BIT(4) /* counter-overflow intr enable */ -#define FPWM_TIM_CTRL_GIE BIT(5) /* overall intr enable */ -#define FPWM_TIM_CTRL_DIV(data) ((data) << 16) -#define FPWM_TIM_CTRL_DIV_MASK GENMASK(27, 16) -#define FPWM_TIM_CTRL_DIV_GET(data) ((data) >> 16) - -/* pwm_state field */ -#define FPWM_STATE_COUNTER_CLEAR BIT(0) -#define FPWM_STATE_OVFIF_COUNTER BIT(1) -#define FPWM_STATE_FIFO_EMPTY BIT(2) -#define FPWM_STATE_FIFO_FULL BIT(3) - -/* pwm_period field */ -#define FPWM_PERIOD_CCR_MASK GENMASK(15, 0) - -/* pwm_ctrl field */ -#define FPWM_CTRL_MODE_OUTPUT BIT(2) -#define FPWM_CTRL_INTR_COUNTER_ENABLE BIT(3) -#define FPWM_CTRL_CMP(data) ((data) << 4) -#define FPWM_CTRL_CMP_MASK GENMASK(6, 4) -#define FPWM_CTRL_CMP_GET(data) ((data) >> 4) -#define FPWM_CTRL_DUTY_SOURCE_FIFO BIT(8) -#define FPWM_CTRL_INTR_FIFO_EMPTY_ENABLE BIT(9) - -/* pwm_ccr field */ -#define FPWM_CCR_MASK GENMASK(15, 0) -#define FPWM_CCR_GPIO BIT(16) - -/* pwm lsd cfg, lsd pwm sync control */ -#define FLSD_MIO_PWM_SYN_OFFSET 0x20 -#define FLSD_MIO_PWM_SYN_MASK GENMASK(7, 0) - -/***************** Macros (Inline Functions) Definitions *********************/ - -/* 读FPWM寄存器 */ -#define FPWM_READ_REG32(addr, reg_offset) FtIn32((addr) + (u32)reg_offset) - -/* 写FPWM寄存器 */ -#define FPWM_WRITE_REG32(addr, reg_offset, reg_value) FtOut32((addr) + (u32)reg_offset, (u32)reg_value) - -#define FPWM_SETBIT(base_addr, reg_offset, data) FtSetBit32((base_addr) + (u32)(reg_offset), (u32)(data)) - -#define FPWM_CLEARBIT(base_addr, reg_offset, data) FtClearBit32((base_addr) + (u32)(reg_offset), (u32)(data)) - -/* enable pwm lsd syn */ -void FPwmLsdEnable(uintptr lsd_addr, u8 pwm_id); - -/* disable pwm lsd syn */ -void FPwmLsdDisable(uintptr lsd_addr, u8 pwm_id); - -#ifdef __cplusplus -} -#endif - -#endif \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/pwm/fpwm/fpwm_intr.c b/bsp/phytium/libraries/standalone/drivers/pwm/fpwm/fpwm_intr.c deleted file mode 100644 index 49773c9cd3..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/pwm/fpwm/fpwm_intr.c +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fpwm_intr.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-04-25 11:45:05 - * Description:  This file is for pwm interrupt handler implementation. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 wangxiaodong 2022/4/25 init commit - */ - -#include "fparameters.h" -#include "fassert.h" -#include "fpwm.h" -#include "fpwm_hw.h" - -#define FT_PWM_DEBUG_TAG "FT_PWM_INTR" -#define FPWM_DEBUG(format, ...) FT_DEBUG_PRINT_D(FT_PWM_DEBUG_TAG, format, ##__VA_ARGS__) -#define FPWM_INFO(format, ...) FT_DEBUG_PRINT_I(FT_PWM_DEBUG_TAG, format, ##__VA_ARGS__) -#define FPWM_WARN(format, ...) FT_DEBUG_PRINT_W(FT_PWM_DEBUG_TAG, format, ##__VA_ARGS__) -#define FPWM_ERROR(format, ...) FT_DEBUG_PRINT_E(FT_PWM_DEBUG_TAG, format, ##__VA_ARGS__) - -#define FPWM_CALL_INTR_EVENT_HANDLDER(instance_p, event) \ - if (instance_p->event_handler[event]) \ - instance_p->event_handler[event](instance_p->event_param[event]) - -/** - * @name: FPwmRegisterInterruptHandler - * @msg: register FPwm interrupt handler function - * @param {FPwm} *instance_p, pointer to the pwm instance - * @param {FPwmIntrEvtType} event_type, interrupt event type - * @param {FPwmEvtHandler} handler, interrupt event handler - * @param {void} *param, contains a pointer to the driver instance - * @return {*} - */ -void FPwmRegisterInterruptHandler(FPwmCtrl *instance_p, FPwmIntrEventType event_type, FPwmIntrEventHandler handler, void *param) -{ - FASSERT(instance_p); - FASSERT(event_type < FPWM_INTR_EVENT_NUM); - instance_p->event_handler[event_type] = handler; - instance_p->event_param[event_type] = param; -} - -/** - * @name: FPwmIntrHandler - * @msg: This function is the interrupt handler for the driver. - * It must be connected to an interrupt system by the application such that it - * can be called when an interrupt occurs. - * @param vector Irq num ,Don't need attention . - * @param args contains a pointer to the driver instance - */ -void FPwmIntrHandler(s32 vector, void *args) -{ - u32 status; - static int i = 0; - FPwmCtrl *pctrl = (FPwmCtrl *)args; - - FASSERT(pctrl != NULL); - FASSERT(pctrl->is_ready == FT_COMPONENT_IS_READY); - uintptr pwm_base_addr = 0; - u8 channel = 0; - - for (channel = 0; channel < FPWM_MODE_CHANNEL; channel++) - { - pwm_base_addr = pctrl->config.pwm_base_addr + FPWM_N(channel); - - status = FPWM_READ_REG32(pwm_base_addr, FPWM_CTRL_OFFSET); - if (!(status & (FPWM_CTRL_INTR_COUNTER_ENABLE | FPWM_CTRL_INTR_FIFO_EMPTY_ENABLE))) - { - continue; - } - - status = FPWM_READ_REG32(pwm_base_addr, FPWM_STATE_OFFSET); - if (0 == status) - { - continue; - } - - /* Check for the type of error interrupt and Processing it */ - if (status & FPWM_STATE_OVFIF_COUNTER) - { - status &= (~FPWM_STATE_OVFIF_COUNTER); - FPWM_SETBIT(pwm_base_addr, FPWM_STATE_OFFSET, FPWM_STATE_COUNTER_CLEAR); - FPWM_CALL_INTR_EVENT_HANDLDER(pctrl, FPWM_INTR_EVENT_COUNTER); - } - - if (status & FPWM_STATE_FIFO_EMPTY) - { - FPWM_SETBIT(pwm_base_addr, FPWM_STATE_OFFSET, FPWM_STATE_FIFO_EMPTY); - FPWM_CALL_INTR_EVENT_HANDLDER(pctrl, FPWM_INTR_EVENT_FIFO_EMPTY); - } - } - -} - diff --git a/bsp/phytium/libraries/standalone/drivers/pwm/fpwm/fpwm_sinit.c b/bsp/phytium/libraries/standalone/drivers/pwm/fpwm/fpwm_sinit.c deleted file mode 100644 index f7a9487c23..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/pwm/fpwm/fpwm_sinit.c +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fpwm_sinit.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-04-25 11:45:05 - * Description:  This file is for pwm static variables implementation. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 wangxiaodong 2022/4/25 init commit - */ - - -/***************************** Include Files *********************************/ - -#include "fpwm.h" -#include "fparameters.h" -#include "fassert.h" - -extern FPwmConfig FPwmConfigTbl[FPWM_NUM]; - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ - -/*****************************************************************************/ - -/** - * @name: FPwmLookupConfig - * @msg: get pwm configs by id - * @return {*} - * @param {u32} instanceId, id of pwm ctrl - */ -const FPwmConfig *FPwmLookupConfig(u32 instance_id) -{ - const FPwmConfig *pconfig = NULL; - FASSERT(instance_id < FPWM_NUM); - - u32 index = 0; - - for (index = 0; index < (u32)FPWM_NUM; index++) - { - if (FPwmConfigTbl[index].instance_id == instance_id) - { - pconfig = &FPwmConfigTbl[index]; - break; - } - } - - return (FPwmConfig *)pconfig; -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/qspi/Kconfig b/bsp/phytium/libraries/standalone/drivers/qspi/Kconfig deleted file mode 100644 index a16b375482..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/qspi/Kconfig +++ /dev/null @@ -1,8 +0,0 @@ -menu "Qspi Configuration" - config USE_FQSPI - bool - prompt "Use FQSPI" - default n - -endmenu - diff --git a/bsp/phytium/libraries/standalone/drivers/qspi/fqspi/fqspi.c b/bsp/phytium/libraries/standalone/drivers/qspi/fqspi/fqspi.c deleted file mode 100644 index f28004b792..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/qspi/fqspi/fqspi.c +++ /dev/null @@ -1,315 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fqspi.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-03-28 09:00:41 - * Description:  This files is for the qspi specific functions implementations - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 wangxiaodong 2022/3/29 first release - * 1.1 wangxiaodong 2022/9/9 improve functions - * 1.2 zhangyan 2022/12/7 improve functions - */ - -#include -#include "fkernel.h" -#include "fassert.h" -#include "fqspi.h" -#include "fqspi_hw.h" -#include "fsleep.h" -#include "fqspi_flash.h" - -#define FQSPI_DEBUG_TAG "FQSPI" -#define FQSPI_ERROR(format, ...) FT_DEBUG_PRINT_E(FQSPI_DEBUG_TAG, format, ##__VA_ARGS__) -#define FQSPI_WARN(format, ...) FT_DEBUG_PRINT_W(FQSPI_DEBUG_TAG, format, ##__VA_ARGS__) -#define FQSPI_INFO(format, ...) FT_DEBUG_PRINT_I(FQSPI_DEBUG_TAG, format, ##__VA_ARGS__) -#define FQSPI_DEBUG(format, ...) FT_DEBUG_PRINT_D(FQSPI_DEBUG_TAG, format, ##__VA_ARGS__) - - -/** - * @name: FQspiCfgInitialize - * @msg: Initializes a specific instance such that it is ready to be used. - * @param {FQspiCtrl} *pctrl, instance of FQSPI controller - * @param {FQspiConfig} *input_config_p, Configuration parameters of FQSPI - * @return err code information, FQSPI_SUCCESS indicates success,others indicates failed - */ -FError FQspiCfgInitialize(FQspiCtrl *pctrl, const FQspiConfig *input_config_p) -{ - FASSERT(pctrl && input_config_p); - - FError ret = FQSPI_SUCCESS; - /* - * If the device is started, disallow the initialize and return a Status - * indicating it is started. This allows the user to de-initialize the device - * and reinitialize, but prevents a user from inadvertently - * initializing. - */ - if (FT_COMPONENT_IS_READY == pctrl->is_ready) - { - FQSPI_WARN("Device is already initialized!!!"); - } - - /*Set default values and configuration data */ - FQspiDeInitialize(pctrl); - - pctrl->config = *input_config_p; - - pctrl->is_ready = FT_COMPONENT_IS_READY; - - return ret; -} - -/** - * @name: FQspiDeInitialize - * @msg: DeInitialization function for the device instance - * @param {FQspiCtrl} *pctrl, instance of FQSPI controller - * @return {*} - */ -void FQspiDeInitialize(FQspiCtrl *pctrl) -{ - FASSERT(pctrl); - - pctrl->is_ready = 0; - memset(pctrl, 0, sizeof(*pctrl)); - - return; -} - -/** - * @name: FQspiSetCapacityAndNum - * @msg: Initializes the capacity and number of flash connect to specific instance. - * @param {FQspiCtrl} *pctrl, instance of FQSPI controller - * @return void - */ -void FQspiSetCapacityAndNum(FQspiCtrl *pctrl) -{ - FASSERT(pctrl); - u32 reg_val = 0; - FQspiConfig *config_p = &pctrl->config; - uintptr base_addr = pctrl->config.base_addr; - - switch (config_p->capacity) - { - case FQSPI_FLASH_CAP_4MB: - pctrl->flash_size = SZ_4M; - break; - case FQSPI_FLASH_CAP_8MB: - pctrl->flash_size = SZ_8M; - break; - case FQSPI_FLASH_CAP_16MB: - pctrl->flash_size = SZ_16M; - break; - case FQSPI_FLASH_CAP_32MB: - pctrl->flash_size = SZ_32M; - break; - case FQSPI_FLASH_CAP_64MB: - pctrl->flash_size = SZ_64M; - break; - case FQSPI_FLASH_CAP_128MB: - pctrl->flash_size = SZ_128M; - break; - case FQSPI_FLASH_CAP_256MB: - pctrl->flash_size = SZ_256M; - break; - default: - pctrl->flash_size = SZ_4M; - break; - } - - /* Write flash capacity and numbers information to qspi Capacity register */ - reg_val = (FQSPI_CAP_FLASH_NUM_MASK & FQSPI_CAP_FLASH_NUM(config_p->dev_num)) | - (FQSPI_CAP_FLASH_CAP_MASK & FQSPI_CAP_FLASH_CAP(config_p->capacity)); - - /*write value to flash capacity register 0x00 */ - FQSPI_WRITE_REG32(base_addr, FQSPI_REG_CAP_OFFSET, reg_val); - FQSPI_INFO("The flash chip size is %ld bytes.\n", pctrl->flash_size); -} - - -/** - * @name: FQspiRdCfgConfig - * @msg: config read config register - * @param {FQspiCtrl} *pctrl, instance of FQSPI controller - * @return err code information, FQSPI_SUCCESS indicates success,others indicates failed - */ -FError FQspiRdCfgConfig(FQspiCtrl *pctrl) -{ - FASSERT(pctrl); - FError ret = FQSPI_SUCCESS; - u32 cmd_reg = 0; - uintptr base_addr = pctrl->config.base_addr; - - FQspiRdCfgDef rd_config = pctrl->rd_cfg; - - cmd_reg |= FQSPI_RD_CFG_CMD(rd_config.rd_cmd); - cmd_reg |= FQSPI_RD_CFG_THROUGH(rd_config.rd_through); - cmd_reg |= FQSPI_RD_CFG_TRANSFER(rd_config.rd_transfer); - cmd_reg |= FQSPI_RD_CFG_ADDR_SEL(rd_config.rd_addr_sel); - cmd_reg |= FQSPI_RD_CFG_LATENCY(rd_config.rd_latency); - cmd_reg |= FQSPI_RD_CFG_MODE_BYTE(rd_config.mode_byte); - - if ((rd_config.mode_byte) || (rd_config.cmd_sign == 0)) - { - cmd_reg |= FQSPI_RD_CFG_CMD_SIGN(rd_config.cmd_sign); - } - else - { - FQSPI_ERROR("rd_cfg mode_byte disable !!!"); - return FQSPI_INVAL_PARAM; - } - - if ((rd_config.rd_latency == FQSPI_CMD_LATENCY_ENABLE) || (rd_config.dummy == 0)) - { - rd_config.dummy = rd_config.dummy ? rd_config.dummy : 1; - cmd_reg |= FQSPI_RD_CFG_DUMMY(rd_config.dummy); - } - else - { - FQSPI_ERROR("rd_cfg latency disable !!!"); - return FQSPI_INVAL_PARAM; - } - - cmd_reg |= FQSPI_RD_CFG_D_BUFFER(rd_config.d_buffer); - cmd_reg |= FQSPI_RD_CFG_SCK_SEL(rd_config.rd_sck_sel); - - FQSPI_WRITE_REG32(base_addr, FQSPI_REG_RD_CFG_OFFSET, cmd_reg); - return ret; -} - -/** - * @name: FQspiWrCfgConfig - * @msg: config write config register - * @param {FQspiCtrl} *pctrl, instance of FQSPI controller - * @return err code information, FQSPI_SUCCESS indicates success,others indicates failed - */ -FError FQspiWrCfgConfig(FQspiCtrl *pctrl) -{ - FASSERT(pctrl); - FError ret = FQSPI_SUCCESS; - u32 cmd_reg = 0; - uintptr base_addr = pctrl->config.base_addr; - - FQspiWrCfgDef wr_config = pctrl->wr_cfg; - - cmd_reg |= FQSPI_WR_CFG_CMD(wr_config.wr_cmd); - cmd_reg |= FQSPI_WR_CFG_WAIT(wr_config.wr_wait); - cmd_reg |= FQSPI_WR_CFG_THROUGH(wr_config.wr_through); - cmd_reg |= FQSPI_WR_CFG_TRANSFER(wr_config.wr_transfer); - cmd_reg |= FQSPI_WR_CFG_ADDRSEL(wr_config.wr_addr_sel); - cmd_reg |= FQSPI_WR_CFG_MODE(wr_config.wr_mode); - cmd_reg |= FQSPI_WR_CFG_SCK_SEL(wr_config.wr_sck_sel); - - FQSPI_WRITE_REG32(base_addr, FQSPI_REG_WR_CFG_OFFSET, cmd_reg); - - return ret; -} - - -/** - * @name: FQspiCommandPortConfig - * @msg: config command port register - * @param {FQspiCtrl} *pctrl, instance of FQSPI controller - * @return err code information, FQSPI_SUCCESS indicates success,others indicates failed - */ -FError FQspiCommandPortConfig(FQspiCtrl *pctrl) -{ - FASSERT(pctrl); - FError ret = FQSPI_SUCCESS; - u32 cmd_reg = 0; - uintptr base_addr = pctrl->config.base_addr; - - FQspiCommandPortDef cmd_port_config = pctrl->cmd_def; - - cmd_reg |= FQSPI_CMD_PORT_CMD_MASK & FQSPI_CMD_PORT_CMD(cmd_port_config.cmd); - - cmd_reg |= FQSPI_CMD_PORT_WAIT(cmd_port_config.wait); - - cmd_reg |= FQSPI_CMD_PORT_THROUGH(cmd_port_config.through); - - cmd_reg |= FQSPI_CMD_PORT_CS_MASK & FQSPI_CMD_PORT_CS(cmd_port_config.cs); - - cmd_reg |= FQSPI_CMD_PORT_TRANSFER(cmd_port_config.transfer); - - cmd_reg |= FQSPI_CMD_PORT_CMD_ADDR(cmd_port_config.cmd_addr); - - cmd_reg |= FQSPI_CMD_PORT_LATENCY(cmd_port_config.latency); - - cmd_reg |= FQSPI_CMD_PORT_DATA_TRANS(cmd_port_config.data_transfer); - - cmd_reg |= FQSPI_CMD_PORT_ADDR_SEL(cmd_port_config.addr_sel); - - if ((cmd_port_config.latency == FQSPI_CMD_LATENCY_ENABLE) || (cmd_port_config.dummy == 0)) - { - cmd_port_config.dummy = cmd_port_config.dummy ? cmd_port_config.dummy : 1; - cmd_reg |= FQSPI_CMD_PORT_DUMMY(cmd_port_config.dummy); - } - else - { - FQSPI_ERROR("cmd_port latency disable !!!"); - return FQSPI_INVAL_PARAM; - } - - cmd_reg |= FQSPI_CMD_PORT_P_BUFFER(cmd_port_config.p_buffer); - - /* read data num */ - cmd_reg |= FQSPI_CMD_PORT_RW_NUM_MASK & FQSPI_CMD_PORT_RW_NUM(cmd_port_config.rw_num); - - cmd_reg |= FQSPI_CMD_PORT_CLK_SEL_MASK & FQSPI_CMD_PORT_CLK_SEL(cmd_port_config.sck_sel); - - FQSPI_WRITE_REG32(base_addr, FQSPI_REG_CMD_PORT_OFFSET, cmd_reg); - - return ret; -} - - -/** - * @name: FQspiChannelSet - * @msg: config qspi cs num - * @param {FQspiCtrl} *pctrl, instance of FQSPI controller - * @param {u32} channel, cs number - * @return - */ -void FQspiChannelSet(FQspiCtrl *pctrl, u32 channel) -{ - FASSERT(pctrl); - FASSERT(channel < FQSPI_CS_NUM); - pctrl->config.channel = channel; -} - -/** - * @name: FQspiCsTimingSet - * @msg: config qspi cs timing - * @param {FQspiCtrl} *pctrl, instance of FQSPI controller - * @param {FQspiCsTimingCfgDef} cs_timing_cfg, cs timing - * @return err code information, FQSPI_SUCCESS indicates success,others indicates failed - */ -void FQspiCsTimingSet(FQspiCtrl *pctrl, FQspiCsTimingCfgDef *cs_timing_cfg) -{ - FASSERT(pctrl); - u32 cmd_reg = 0; - uintptr base_addr = pctrl->config.base_addr; - - cmd_reg |= FQSPI_FUN_SET_CS_HOLD(cs_timing_cfg->cs_hold); - - cmd_reg |= FQSPI_FUN_SET_CS_SETUP(cs_timing_cfg->cs_setup); - - cmd_reg |= FQSPI_FUN_SET_CS_DELAY(cs_timing_cfg->cs_delay); - - FQSPI_WRITE_REG32(base_addr, FQSPI_REG_CS_TIMING_SET_OFFSET, cmd_reg); - -} - - diff --git a/bsp/phytium/libraries/standalone/drivers/qspi/fqspi/fqspi.h b/bsp/phytium/libraries/standalone/drivers/qspi/fqspi/fqspi.h deleted file mode 100644 index f8e259de95..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/qspi/fqspi/fqspi.h +++ /dev/null @@ -1,240 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fqspi.h - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 09:00:55 - * Description:  This files is for the qspi functions related definitions - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 wangxiaodong 2022/3/29 first release - * 1.1 wangxiaodong 2022/9/9 improve functions - * 1.2 zhangyan 2022/12/7 improve functions - */ - -#ifndef BSP_DRIVERS_FQSPI_H -#define BSP_DRIVERS_FQSPI_H - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include "fkernel.h" -#include "ftypes.h" -#include "ferror_code.h" -#include "fdebug.h" -#include "fparameters.h" - -#define FQSPI_SUCCESS FT_SUCCESS -#define FQSPI_INVAL_PARAM FT_MAKE_ERRCODE(ErrModBsp, ErrBspQSpi, 1) -#define FQSPI_NOT_READY FT_MAKE_ERRCODE(ErrModBsp, ErrBspQSpi, 2) -#define FQSPI_NOT_ALLIGN FT_MAKE_ERRCODE(ErrModBsp, ErrBspQSpi, 3) -#define FQSPI_NOT_SUPPORT FT_MAKE_ERRCODE(ErrModBsp, ErrBspQSpi, 4) -#define FQSPI_TIMEOUT FT_MAKE_ERRCODE(ErrModBsp, ErrBspQSpi, 5) - -/* FQSPI Transfer mode, command-addr-data protocols */ -typedef enum -{ - FQSPI_TRANSFER_1_1_1 = 0x0, - FQSPI_TRANSFER_1_1_2 = 0x1, - FQSPI_TRANSFER_1_1_4 = 0x2, - FQSPI_TRANSFER_1_2_2 = 0x3, - FQSPI_TRANSFER_1_4_4 = 0x4, - FQSPI_TRANSFER_2_2_2 = 0x5, - FQSPI_TRANSFER_4_4_4 = 0x6 -} FQspiTransferMode; - -/* FQSPI Flash Capcity type */ -typedef enum -{ - FQSPI_FLASH_CAP_4MB = 0b000, - FQSPI_FLASH_CAP_8MB = 0b001, - FQSPI_FLASH_CAP_16MB = 0b010, - FQSPI_FLASH_CAP_32MB = 0b011, - FQSPI_FLASH_CAP_64MB = 0b100, - FQSPI_FLASH_CAP_128MB = 0b101, - FQSPI_FLASH_CAP_256MB = 0b110, -} FQspiFlashCapcityType; - -/* FQSPI pclk divider type */ -typedef enum -{ - FQSPI_SCK_DIV_128 = 0x0, - FQSPI_SCK_DIV_2 = 0x1, - FQSPI_SCK_DIV_4 = 0x2, - FQSPI_SCK_DIV_8 = 0x3, - FQSPI_SCK_DIV_16 = 0x4, - FQSPI_SCK_DIV_32 = 0x5, - FQSPI_SCK_DIV_64 = 0x6 -} FQspiSckDivType; - -/* FQSPI Address type */ -typedef enum -{ - FQSPI_ADDR_SEL_3 = 0x0, - FQSPI_ADDR_SEL_4 = 0x1 -} FQspiAddrType; - -/* Specifies if the Instruction need transfer address */ -typedef enum -{ - FQSPI_CMD_ADDR_DISABLE = 0x0, - FQSPI_CMD_ADDR_ENABLE = 0x1 -} FQspiCmdAddrType; - -/* Specifies if the Instruction have latency */ -typedef enum -{ - FQSPI_CMD_LATENCY_DISABLE = 0x0, - FQSPI_CMD_LATENCY_ENABLE = 0x1 -} FQspiCmdLatencyType; - -/* Specifies if the Instruction need transfer data */ -typedef enum -{ - FQSPI_CMD_DATA_DISABLE = 0x0, - FQSPI_CMD_DATA_ENABLE = 0x1 -} FQspiCmdDataType; - -/* Specifies if the Instruction use buffer */ -typedef enum -{ - FQSPI_USE_BUFFER_DISABLE = 0x0, - FQSPI_USE_BUFFER_ENABLE = 0x1 -} FQspiUseBufferType; - -/* Specifies if the Instruction need some execution time */ -typedef enum -{ - FQSPI_WAIT_DISABLE = 0x0, - FQSPI_WAIT_ENABLE = 0x1 -} FQspiWaitType; - - -typedef enum -{ - FQSPI_XIP_EXIT = 0x0, - FQSPI_XIP_ENTER = 0x1 -} FQspiXIPState; - -typedef struct -{ - u32 instance_id; /* Id of device */ - uintptr base_addr; /* Base address of qspi */ - uintptr mem_start; /* Start address of qspi memory */ - u32 capacity; /* Flash capacity */ - u32 dev_num; /* Qspi device number */ - u32 channel; /* channel number, cs number */ -} FQspiConfig; - -/* rd_cfg register */ -typedef struct -{ - u8 rd_cmd : 8; /* Specifies the Instruction to be sent */ - u8 rd_through : 1; - u8 rd_transfer : 3;/* Specifies the Instruction tranfer Mode 1-1-1~4-4-4*/ - u8 rd_addr_sel : 1;/* Specifies the Instruction addr mode 3 byte addr or 4 byte addr*/ - u8 rd_latency : 1; /* Specifies if the Instruction need read latency*/ - u8 mode_byte : 1; /* Specifies if the Instruction need modifier*/ - u8 cmd_sign : 8; /* Specifies the Instruction modifier*/ - u8 dummy : 5; /* Specifies the Number of Dummy Cycles.*/ - u8 d_buffer : 1; /* Specifies if the Instruction use buffer to read data*/ - u8 rd_sck_sel : 3; /* Specifies the pclk division .*/ -} FQspiRdCfgDef; - -/* wr_cfg register */ -typedef struct -{ - u8 wr_cmd : 8; /* Specifies the Instruction to be sent */ - u16 reserved : 14; - u8 wr_wait : 1; - u8 wr_through : 1; - u8 wr_transfer : 3;/* Specifies the Instruction tranfer Mode 1-1-1~4-4-4*/ - u8 wr_addr_sel : 1;/* Specifies the Instruction addr mode 3 byte addr or 4 byte addr*/ - u8 wr_mode : 1; /* Specifies if the Instruction need modifier*/ - u8 wr_sck_sel : 3; /* Specifies the pclk division .*/ -} FQspiWrCfgDef; - -/* cmd_port register */ -typedef struct -{ - u8 cmd : 8; /* Specifies the Instruction to be sent */ - u8 reserved : 1; - u8 wait : 1; - u8 through : 1; - u8 cs : 2; - u8 transfer : 3;/* Specifies the Instruction tranfer Mode 1-1-1~4-4-4*/ - u8 cmd_addr : 1; /* Specifies if the Instruction need transfer address*/ - u8 latency : 1; /* Specifies if the Instruction need read latency*/ - u8 data_transfer : 1; /* Specifies if the Instruction need tranfer data*/ - u8 addr_sel : 1; /* Specifies the Instruction addr mode 3 byte addr or 4 byte addr*/ - u8 dummy : 5; /* Specifies the Number of Dummy Cycles.*/ - u8 p_buffer : 1; /* Specifies if the Instruction use buffer to read data*/ - u8 rw_num : 3; /* Specifies the read or write bytes number.*/ - u8 sck_sel : 3; /* Specifies the pclk division .*/ -} FQspiCommandPortDef; - -typedef struct -{ - u8 cs_hold; /* Specifies the cs valid hold time */ - u8 cs_setup; /* Specifies the cs valid setup time */ - u16 cs_delay; /* Specifies the cs delay time */ -} FQspiCsTimingCfgDef; - -typedef struct -{ - FQspiConfig config; - FQspiRdCfgDef rd_cfg; - FQspiWrCfgDef wr_cfg; - FQspiCommandPortDef cmd_def; - FQspiCsTimingCfgDef cs_timing_cfg; - u32 is_ready; /**< Device is initialized and ready */ - u32 flash_size; /* size of QSPI flash */ - u8 mf_id; /* manufacturer information */ -} FQspiCtrl; - -/* lookup FQSPI default Configuration parameters */ -const FQspiConfig *FQspiLookupConfig(u32 instance_id); - -/* set capacity and number of flash connect to qspi */ -void FQspiSetCapacityAndNum(FQspiCtrl *pctrl); - -/* qspi instance initialization */ -FError FQspiCfgInitialize(FQspiCtrl *pctrl, const FQspiConfig *input_config_p); - -/* qspi instance de-initialization */ -void FQspiDeInitialize(FQspiCtrl *pctrl); - -/* command port register config */ -FError FQspiCommandPortConfig(FQspiCtrl *pctrl); - -/* read register config */ -FError FQspiRdCfgConfig(FQspiCtrl *pctrl); - -/* write register config */ -FError FQspiWrCfgConfig(FQspiCtrl *pctrl); - -/* qspi cs number set */ -void FQspiChannelSet(FQspiCtrl *pctrl, u32 channel); - -/* qspi cs timing set */ -void FQspiCsTimingSet(FQspiCtrl *pctrl, FQspiCsTimingCfgDef *cs_timing_cfg); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/bsp/phytium/libraries/standalone/drivers/qspi/fqspi/fqspi_flash.c b/bsp/phytium/libraries/standalone/drivers/qspi/fqspi/fqspi_flash.c deleted file mode 100644 index 78b32a4cc3..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/qspi/fqspi/fqspi_flash.c +++ /dev/null @@ -1,1111 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fqspi_flash.c - * Date: 2022-07-12 15:42:55 - * LastEditTime: 2022-07-12 15:42:56 - * Description: This file is for S25FS256, GD25Q256, GD25Q64 norflash program functions - * - * Modify History: - * Ver Who Date Changes - * ----- ------ -------- -------------------------------------- - * 1.0 wangxiaodong 2022/3/29 first release - * 1.1 wangxiaodong 2022/9/9 improve functions - */ - -#include -#include "fkernel.h" -#include "fassert.h" -#include "fqspi_flash.h" -#include "fqspi_hw.h" -#include "fqspi.h" -#include "sdkconfig.h" - -#define FQSPI_DEBUG_TAG "FQSPI_FLASH" -#define FQSPI_ERROR(format, ...) FT_DEBUG_PRINT_E(FQSPI_DEBUG_TAG, format, ##__VA_ARGS__) -#define FQSPI_WARN(format, ...) FT_DEBUG_PRINT_W(FQSPI_DEBUG_TAG, format, ##__VA_ARGS__) -#define FQSPI_INFO(format, ...) FT_DEBUG_PRINT_I(FQSPI_DEBUG_TAG, format, ##__VA_ARGS__) -#define FQSPI_DEBUG(format, ...) FT_DEBUG_PRINT_D(FQSPI_DEBUG_TAG, format, ##__VA_ARGS__) - -/* When entering direct address access mode, - read and write memory addresses need to be accessed in 4-byte alignment */ -#define FQSPI_ALIGNED_BYTE 4 - -typedef struct -{ - char *name; - u8 mf_id; - u8 type_id; - u8 capacity_id; - u32 capacity; -} FQspiFlashInfo; - -/* supported manufacturer information table */ -static const FQspiFlashInfo flash_info_table[] = FQSPI_FLASH_INFO_TABLE; - -/* - * @name: FQspiFlashDetect - * @msg: detect qspi flash information, include id, type, capacity, set qspi capacity register. - * @param {FQspiCtrl} *pctrl, instance of FQSPI controller - * @return {FError} err code information, FQSPI_SUCCESS indicates success,others indicates failed - */ -FError FQspiFlashDetect(FQspiCtrl *pctrl) -{ - FASSERT(pctrl); - FError ret = FQSPI_SUCCESS; - u8 flash_id[3] = {0}; - u8 i = 0; - u32 index; - u32 cs_number = 0; - u32 min_detected_cs = FQSPI_CS_NUM ; - - for (index = 0; index < FQSPI_CS_NUM ; index++) - { - /* read id to flash_id */ - pctrl->config.channel = index; - ret = FQspiFlashSpecialInstruction(pctrl, FQSPI_FLASH_CMD_RDID, flash_id, sizeof(flash_id)); - if (FQSPI_SUCCESS != ret) - { - FQSPI_INFO("Read flash id failed, ret 0x%x\r\n", ret); - return ret; - } - - if (flash_id[0] != 0xff) - { - FQSPI_INFO("CSN%d flash id = 0x%x, 0x%x, 0x%x\r\n", index, flash_id[0], flash_id[1], flash_id[2]); - } - else - { - FQSPI_INFO("The Detected CSN%d flash is not matched", index); - } - - for (i = 0; i < sizeof(flash_info_table) / sizeof(FQspiFlashInfo); i++) - { - if ((flash_info_table[i].mf_id == flash_id[0]) && (flash_info_table[i].type_id == flash_id[1]) - && (flash_info_table[i].capacity_id == flash_id[2])) - { - pctrl->mf_id = flash_info_table[i].mf_id; - pctrl->config.capacity = flash_info_table[i].capacity; - cs_number++; - /*get the min detected flash channel*/ - min_detected_cs = (min_detected_cs > index)?index:min_detected_cs ; - FQSPI_INFO("CSN%d Find a %s flash chip.\n", index, flash_info_table[i].name); - break; - } - } - /*The default channel is the min detected flash*/ - pctrl->config.channel = min_detected_cs; - - if (i == sizeof(flash_info_table) / sizeof(FQspiFlashInfo) && flash_id[0] != 0xff) - { - FQSPI_INFO("The Detected CSN%d flash not detected, id = 0x%x, 0x%x, 0x%x\r\n", index, flash_id[0], flash_id[1], flash_id[2]); - } - - } - - pctrl->config.dev_num = cs_number - 1; - /* set flash num and flash capacity */ - FQspiSetCapacityAndNum(pctrl); - return ret; -} - -/* - * @name: FQspiFlashReset - * @msg: qspi Flash soft reset, FQSPI_CMD_ENABLE_RESET and FQSPI_CMD_RESET. - * @param {FQspiCtrl} *pctrl, instance of FQSPI controller - * @return {FError} err code information, FQSPI_SUCCESS indicates success,others indicates failed - */ -static FError FQspiFlashReset(FQspiCtrl *pctrl) -{ - FASSERT(pctrl); - FError ret = FQSPI_SUCCESS; - ret = FQspiFlashWriteReg(pctrl, FQSPI_CMD_ENABLE_RESET, NULL, 0); - if (FQSPI_SUCCESS != ret) - { - FQSPI_ERROR("Failed to enable reset, test result 0x%x\r\n", ret); - return ret; - } - - ret = FQspiFlashWriteReg(pctrl, FQSPI_CMD_RESET, NULL, 0); - if (FQSPI_SUCCESS != ret) - { - FQSPI_ERROR("Failed to reset, test result 0x%x\r\n", ret); - return ret; - } - - return ret; -} - -/** - * @name: FQspiFlashSpecialInstruction - * @msg: Read some flash information by different cmd - * @param {FQspiCtrl} *pctrl, instance of FQSPI controller - * @param {u8} cmd, read register value command, include RDID, RDSR1, RDSR2, RDCR... - * @param {u8} *buf, read buffer - * @param {size_t} len, read length - * @return {FError} err code information, FQSPI_SUCCESS indicates success,others indicates failed - */ -FError FQspiFlashSpecialInstruction(FQspiCtrl *pctrl, u8 cmd, u8 *buf, size_t len) -{ - FASSERT(pctrl && buf); - FError ret = FQSPI_SUCCESS; - if (FT_COMPONENT_IS_READY != pctrl->is_ready) - { - FQSPI_ERROR("Nor flash not ready !!!"); - return FQSPI_NOT_READY; - } - - uintptr base_addr = pctrl->config.base_addr; - - memset(&pctrl->cmd_def, 0, sizeof(pctrl->cmd_def)); - pctrl->cmd_def.cmd = cmd; - pctrl->cmd_def.wait = FQSPI_WAIT_DISABLE; - pctrl->cmd_def.through = 0; - pctrl->cmd_def.cs = pctrl->config.channel; - pctrl->cmd_def.transfer = FQSPI_TRANSFER_1_1_1; - pctrl->cmd_def.cmd_addr = FQSPI_CMD_ADDR_DISABLE; - pctrl->cmd_def.latency = FQSPI_CMD_LATENCY_DISABLE; - pctrl->cmd_def.data_transfer = FQSPI_CMD_DATA_ENABLE; - pctrl->cmd_def.addr_sel = FQSPI_ADDR_SEL_3; - pctrl->cmd_def.dummy = 0; - pctrl->cmd_def.p_buffer = FQSPI_USE_BUFFER_ENABLE; - pctrl->cmd_def.rw_num = (len - 1); - pctrl->cmd_def.sck_sel = FQSPI_SCK_DIV_128; - - ret = FQspiCommandPortConfig(pctrl); - if (ret != FT_SUCCESS) - { - FQSPI_ERROR("FQspiFlashSpecialInstruction FQspiCommandPortConfig failed!"); - return ret; - } - - FQspiCommandPortSend(base_addr); - - FQspiGetLdPortData(base_addr, buf, len); - - return ret; -} - -/** - * @name: FQspiFlashReadSfdp - * @msg: Read flash Serial Flash Discoverable Parameters - * @param {FQspiCtrl} *pctrl, instance of FQSPI controller - * @param {u32} offset,Relative Byte Address Offset - * @param {u8} *buf, read buffer - * @param {size_t} len, read length - * @return {FError} err code information, FQSPI_SUCCESS indicates success,others indicates failed - */ -FError FQspiFlashReadSfdp(FQspiCtrl *pctrl, u32 offset, u8 *buf, size_t len) -{ - FASSERT(pctrl && buf); - FError ret = FQSPI_SUCCESS; - if (FT_COMPONENT_IS_READY != pctrl->is_ready) - { - FQSPI_ERROR("Nor flash not ready !!!"); - return FQSPI_NOT_READY; - } - - uintptr base_addr = pctrl->config.base_addr; - - memset(&pctrl->cmd_def, 0, sizeof(pctrl->cmd_def)); - pctrl->cmd_def.cmd = FQSPI_FLASH_CMD_SFDP; - pctrl->cmd_def.wait = FQSPI_WAIT_DISABLE; - pctrl->cmd_def.through = 0; - pctrl->cmd_def.cs = pctrl->config.channel; - pctrl->cmd_def.transfer = FQSPI_TRANSFER_1_1_1; - pctrl->cmd_def.cmd_addr = FQSPI_CMD_ADDR_ENABLE; - pctrl->cmd_def.latency = FQSPI_CMD_LATENCY_ENABLE; - pctrl->cmd_def.data_transfer = FQSPI_CMD_DATA_ENABLE; - pctrl->cmd_def.addr_sel = FQSPI_ADDR_SEL_3; - pctrl->cmd_def.dummy = 8; - pctrl->cmd_def.p_buffer = FQSPI_USE_BUFFER_ENABLE; - pctrl->cmd_def.rw_num = (len - 1); - pctrl->cmd_def.sck_sel = FQSPI_SCK_DIV_128; - - ret = FQspiCommandPortConfig(pctrl); - if (ret != FT_SUCCESS) - { - FQSPI_ERROR("FQspiFlashReadSfdp FQspiCommandPortConfig failed!"); - return ret; - } - - /* write addr port register */ - FQspiAddrPortConfig(base_addr, offset); - - FQspiCommandPortSend(base_addr); - - FQspiGetLdPortData(base_addr, buf, len); - - return ret; -} - -/** - * @name: FQspiFlashReadReg - * @msg: Read Qspi register value - * @param {FQspiCtrl} *pctrl, instance of FQSPI controller - * @param {u32} offset,Relative Byte Address Offset - * @param {u8} *buf, read buffer - * @param {size_t} len, read length - * @return {FError} err code information, FQSPI_SUCCESS indicates success,others indicates failed - */ -FError FQspiFlashReadReg(FQspiCtrl *pctrl, u32 offset, u8 *buf, size_t len) -{ - FASSERT(pctrl && buf); - FError ret = FQSPI_SUCCESS; - u32 cmd_reg = 0; - uintptr base_addr = pctrl->config.base_addr; - - if (FT_COMPONENT_IS_READY != pctrl->is_ready) - { - FQSPI_ERROR("Nor flash not ready !!!"); - return FQSPI_NOT_READY; - } - - memset(&pctrl->cmd_def, 0, sizeof(pctrl->cmd_def)); - pctrl->cmd_def.cmd = FQSPI_FLASH_CMD_RDAR; - pctrl->cmd_def.wait = FQSPI_WAIT_DISABLE; - pctrl->cmd_def.through = 0; - pctrl->cmd_def.cs = pctrl->config.channel; - pctrl->cmd_def.transfer = FQSPI_TRANSFER_1_1_1; - pctrl->cmd_def.cmd_addr = FQSPI_CMD_ADDR_ENABLE; - pctrl->cmd_def.latency = FQSPI_CMD_LATENCY_ENABLE; - pctrl->cmd_def.data_transfer = FQSPI_CMD_DATA_ENABLE; - pctrl->cmd_def.addr_sel = FQSPI_ADDR_SEL_3; - pctrl->cmd_def.dummy = 8; - pctrl->cmd_def.p_buffer = FQSPI_USE_BUFFER_ENABLE; - pctrl->cmd_def.rw_num = (len - 1); - pctrl->cmd_def.sck_sel = FQSPI_SCK_DIV_128; - - ret = FQspiCommandPortConfig(pctrl); - if (ret != FT_SUCCESS) - { - FQSPI_ERROR("FQspiFlashReadReg FQspiCommandPortConfig failed!"); - return ret; - } - - /* write addr port register */ - FQspiAddrPortConfig(base_addr, offset); - - FQspiCommandPortSend(base_addr); - - FQspiGetLdPortData(base_addr, buf, len); - - /* wait SR1V bit0 WIP is ready, not device busy */ - ret = FQspiFlashWaitForCmd(pctrl); - if (ret != FT_SUCCESS) - { - FQSPI_ERROR("FQspiFlashReadReg FQspiCommandPortConfig failed!"); - return ret; - } - - return ret; -} - -/** - * @name: FQspiFlashReadData - * @msg: read flash data - * @param {FQspiCtrl} *pctrl, instance of FQSPI controller - * @param {u32} chip_addr, The start address of the chip to read - * @param {u8} *buf, read buffer - * @param {size_t} len, read length - * @return size_t Indicates the length of the data read, zero indicates read fails - */ -size_t FQspiFlashReadData(FQspiCtrl *pctrl, u32 chip_addr, u8 *buf, size_t len) -{ - /* addr of copy dst or src might be zero */ - FASSERT(pctrl && buf); - size_t loop = 0; - const size_t cnt = len / FQSPI_ALIGNED_BYTE; /* cnt number of 4-bytes need copy */ - const size_t remain = len % FQSPI_ALIGNED_BYTE; /* remain number of 1-byte not aligned */ - u8 align_buf[FQSPI_ALIGNED_BYTE]; - size_t copy_len = 0; - u32 addr = pctrl->config.mem_start + pctrl->config.channel * pctrl->flash_size + chip_addr; - intptr src_addr = (intptr)addr; /* conver to 32/64 bit addr */ - intptr dst_addr = (intptr)buf; - - if (FT_COMPONENT_IS_READY != pctrl->is_ready) - { - FQSPI_ERROR("Nor flash not ready !!!"); - return 0; - } - if (0 == pctrl->rd_cfg.rd_cmd) - { - FQSPI_ERROR("Nor flash read command is not ready !!!"); - return 0; - } - - if (0 == len) - { - return 0; - } - - if (IS_ALIGNED(src_addr, FQSPI_ALIGNED_BYTE)) /* if copy src is aligned by 4 bytes */ - { - /* read 4-bytes aligned buf part */ - for (loop = 0; loop < cnt; loop++) - { - *(u32 *)dst_addr = *(volatile u32 *)(src_addr); - src_addr += FQSPI_ALIGNED_BYTE; - dst_addr += FQSPI_ALIGNED_BYTE; - } - - copy_len += (loop << 2); - - if (remain > 0) - { - *(u32 *)align_buf = *(volatile u32 *)(src_addr); - } - - /* read remain un-aligned buf byte by byte */ - for (loop = 0; loop < remain; loop++) - { - *(u8 *)dst_addr = align_buf[loop]; - dst_addr += 1; - } - - copy_len += loop; - - } - else /* if copy src is not aligned */ - { - /* read byte by byte */ - for (loop = 0; loop < len; loop++) - { - *(u8 *)dst_addr = *(volatile u8 *)(src_addr); - dst_addr += 1; - src_addr += 1; - } - copy_len += loop; - - } - - return copy_len; -} - -/** - * @name: FQspiFlashReadDataConfig - * @msg: read flash data configuration - * @param {FQspiCtrl} *pctrl, instance of FQSPI controller - * @param {u8} command, command to read flash,see the Flash manual for details - * @return {FError} err code information, FQSPI_SUCCESS indicates success,others indicates failed 表示配置成功,其它返回值表示配置失败 - */ -FError FQspiFlashReadDataConfig(FQspiCtrl *pctrl, u8 command) -{ - FASSERT(pctrl); - FError ret = FQSPI_SUCCESS; - - if (FT_COMPONENT_IS_READY != pctrl->is_ready) - { - FQSPI_ERROR("Nor flash not ready !!!"); - ret |= FQSPI_NOT_READY; - return ret; - } - - uintptr base_addr = pctrl->config.base_addr; - - /* clear sr1 = 0, set config register1 bit1 quad = 1 */ - u8 wrr_buf[2] = {0x0, 0x02}; - - FQspiXIPModeSet(base_addr, FQSPI_XIP_ENTER); - - /* set cmd region, command */ - memset(&pctrl->rd_cfg, 0, sizeof(pctrl->rd_cfg)); - pctrl->rd_cfg.rd_cmd = command; - - /* read buffer */ - pctrl->rd_cfg.d_buffer = FQSPI_USE_BUFFER_ENABLE; - pctrl->rd_cfg.rd_sck_sel = FQSPI_SCK_DIV_128; - - switch (command) - { - case FQSPI_FLASH_CMD_READ: - FQspiFlashReset(pctrl); - pctrl->rd_cfg.rd_addr_sel = FQSPI_ADDR_SEL_3; - pctrl->rd_cfg.rd_transfer = FQSPI_TRANSFER_1_1_1; - break; - - case FQSPI_FLASH_CMD_4READ: - pctrl->rd_cfg.rd_addr_sel = FQSPI_ADDR_SEL_4; - pctrl->rd_cfg.rd_transfer = FQSPI_TRANSFER_1_1_1; - break; - - case FQSPI_FLASH_CMD_FAST_READ: - pctrl->rd_cfg.rd_addr_sel = FQSPI_ADDR_SEL_3; - pctrl->rd_cfg.rd_transfer = FQSPI_TRANSFER_1_1_1; - pctrl->rd_cfg.dummy = 8; - pctrl->rd_cfg.rd_latency = FQSPI_CMD_LATENCY_ENABLE; - break; - - case FQSPI_FLASH_CMD_4FAST_READ: - pctrl->rd_cfg.rd_addr_sel = FQSPI_ADDR_SEL_4; - pctrl->rd_cfg.rd_transfer = FQSPI_TRANSFER_1_1_1; - pctrl->rd_cfg.dummy = 8; - pctrl->rd_cfg.rd_latency = FQSPI_CMD_LATENCY_ENABLE; - break; - - case FQSPI_FLASH_CMD_DOR: - pctrl->rd_cfg.rd_addr_sel = FQSPI_ADDR_SEL_3; - pctrl->rd_cfg.rd_transfer = FQSPI_TRANSFER_1_1_2; - pctrl->rd_cfg.dummy = 8; - pctrl->rd_cfg.rd_latency = FQSPI_CMD_LATENCY_ENABLE; - break; - - case FQSPI_FLASH_CMD_QOR: - pctrl->rd_cfg.rd_addr_sel = FQSPI_ADDR_SEL_3; - pctrl->rd_cfg.rd_transfer = FQSPI_TRANSFER_1_1_4; - pctrl->rd_cfg.dummy = 8; - pctrl->rd_cfg.rd_latency = FQSPI_CMD_LATENCY_ENABLE; - break; - - case FQSPI_FLASH_CMD_QWFR: - pctrl->rd_cfg.rd_addr_sel = FQSPI_ADDR_SEL_3; - pctrl->rd_cfg.rd_transfer = FQSPI_TRANSFER_1_4_4; - pctrl->rd_cfg.dummy = 2; - pctrl->rd_cfg.rd_latency = FQSPI_CMD_LATENCY_ENABLE; - break; - - case FQSPI_FLASH_CMD_DUAL_READ: - pctrl->rd_cfg.rd_addr_sel = FQSPI_ADDR_SEL_3; - pctrl->rd_cfg.rd_transfer = FQSPI_TRANSFER_1_2_2; - pctrl->rd_cfg.rd_latency = FQSPI_CMD_LATENCY_ENABLE; - pctrl->rd_cfg.dummy = 4; - if (pctrl->mf_id == FQSPI_FLASH_MF_ID_CYPRESS) - { - pctrl->rd_cfg.mode_byte = 0x1; - pctrl->rd_cfg.cmd_sign = FQSPI_QUAD_READ_MODE_CMD; - pctrl->rd_cfg.dummy = 8; - } - else if (pctrl->mf_id == FQSPI_FLASH_MF_ID_GIGADEVICE) - { - pctrl->rd_cfg.dummy = 4; - } - else if (pctrl->mf_id == FQSPI_FLASH_MF_ID_BOYA) - { - pctrl->rd_cfg.dummy = 4; - } - break; - - case FQSPI_FLASH_CMD_QIOR: - /* set SR1V and CR1V */ - FQspiFlashEnableWrite(pctrl); - - pctrl->rd_cfg.rd_addr_sel = FQSPI_ADDR_SEL_3; - pctrl->rd_cfg.rd_transfer = FQSPI_TRANSFER_1_4_4; - pctrl->rd_cfg.rd_latency = FQSPI_CMD_LATENCY_ENABLE; - - pctrl->rd_cfg.dummy = 6; - - if (pctrl->mf_id == FQSPI_FLASH_MF_ID_CYPRESS) - { - pctrl->rd_cfg.dummy = 10; - /* use wrr write config register 1 */ - ret = FQspiFlashWriteReg(pctrl, FQSPI_FLASH_CMD_WRR, wrr_buf, sizeof(wrr_buf)); - if (FQSPI_SUCCESS != ret) - { - FQSPI_ERROR("Failed to write cmd wrr, test result 0x%x", ret); - return 0; - } - } - else if (pctrl->mf_id == FQSPI_FLASH_MF_ID_GIGADEVICE) - { - pctrl->rd_cfg.dummy = 6; - /* use wrr write config register 1 */ - ret = FQspiFlashWriteReg(pctrl, FQSPI_FLASH_CMD_WRR, wrr_buf, sizeof(wrr_buf)); - if (FQSPI_SUCCESS != ret) - { - FQSPI_ERROR("Failed to write cmd wrr, test result 0x%x", ret); - return 0; - } - } - else if (pctrl->mf_id == FQSPI_FLASH_MF_ID_BOYA) - { - pctrl->rd_cfg.dummy = 6; - ret = FQspiFlashWriteReg(pctrl, FQSPI_FLASH_CMD_WRITE_SR2, &wrr_buf[1], 1); - if (FQSPI_SUCCESS != ret) - { - FQSPI_ERROR("Failed to write cmd wrr, test result 0x%x", ret); - return 0; - } - } - - break; - - case FQSPI_FLASH_CMD_4QIOR: - pctrl->rd_cfg.rd_addr_sel = FQSPI_ADDR_SEL_4; - pctrl->rd_cfg.rd_transfer = FQSPI_TRANSFER_1_4_4; - pctrl->rd_cfg.mode_byte = 0x1; - pctrl->rd_cfg.cmd_sign = FQSPI_QUAD_READ_MODE_CMD; - pctrl->rd_cfg.rd_latency = FQSPI_CMD_LATENCY_ENABLE; - pctrl->rd_cfg.dummy = 8; - - /* set SR1V and CR1V */ - FQspiFlashEnableWrite(pctrl); - /* use wrr write config register 1 */ - ret = FQspiFlashWriteReg(pctrl, FQSPI_FLASH_CMD_WRR, wrr_buf, sizeof(wrr_buf)); - if (FQSPI_SUCCESS != ret) - { - FQSPI_ERROR("Failed to write cmd wrr, test result 0x%x\r\n", ret); - return ret; - } - break; - - default: - return FQSPI_INVAL_PARAM; - break; - } - - ret = FQspiRdCfgConfig(pctrl); - - return ret; -} - -/** - * @name: FQspiFlashWriteData - * @msg: write flash data - * @param {FQspiCtrl} *pctrl, instance of FQSPI controller - * @param {u8} command, command to write flash,see the Flash manual for details - * @param {u32} chip_addr, The start address of the chip to write - * @param {u8} *buf, write buffer - * @param {size_t} len, write length - * @return {FError} err code information, FQSPI_SUCCESS indicates success,others indicates failed 表示写入成功,其它返回值表示写入失败 - */ -FError FQspiFlashWriteData(FQspiCtrl *pctrl, u8 command, u32 chip_addr, const u8 *buf, size_t len) -{ - FASSERT(pctrl && buf); - FError ret = FQSPI_SUCCESS; - u32 loop = 0; - const u32 mask = (u32)GENMASK(1, 0); - u32 reg_val = 0; - u32 val = 0; - u32 aligned_bit = 0; - - u8 tmp[FQSPI_ALIGNED_BYTE] = {0xff, 0xff, 0xff, 0xff}; - u32 addr = pctrl->config.mem_start + pctrl->config.channel * pctrl->flash_size + chip_addr; - uintptr base_addr = pctrl->config.base_addr; - - if (FT_COMPONENT_IS_READY != pctrl->is_ready) - { - FQSPI_ERROR("Nor flash not ready !!!"); - return FQSPI_NOT_READY; - } - - /* Flash write enable */ - FQspiFlashEnableWrite(pctrl); - - memset(&pctrl->wr_cfg, 0, sizeof(pctrl->wr_cfg)); - /* set cmd region, command */ - pctrl->wr_cfg.wr_cmd = command; - pctrl->wr_cfg.wr_wait = FQSPI_WAIT_ENABLE; - /* clear addr select bit */ - pctrl->wr_cfg.wr_addr_sel = 0; - /* set wr mode, use buffer */ - pctrl->wr_cfg.wr_mode = FQSPI_USE_BUFFER_ENABLE; - /* set sck_sel region, clk_div */ - pctrl->wr_cfg.wr_sck_sel = FQSPI_SCK_DIV_128; - - /* set addr_sel region, FQSPI_ADDR_SEL_3 or FQSPI_ADDR_SEL_4 */ - switch (command) - { - case FQSPI_FLASH_CMD_PP: - pctrl->wr_cfg.wr_addr_sel = FQSPI_ADDR_SEL_3; - break; - case FQSPI_FLASH_CMD_QPP: - pctrl->wr_cfg.wr_addr_sel = FQSPI_ADDR_SEL_3; - pctrl->wr_cfg.wr_transfer = FQSPI_TRANSFER_1_1_4; - break; - case FQSPI_FLASH_CMD_4PP: - case FQSPI_FLASH_CMD_4QPP: - pctrl->wr_cfg.wr_addr_sel = FQSPI_ADDR_SEL_4; - break; - default: - ret |= FQSPI_NOT_SUPPORT; - return ret; - break; - } - - /*write wr_cfg to Write config register 0x08 */ - FQspiWrCfgConfig(pctrl); - - if (IS_ALIGNED(addr, FQSPI_ALIGNED_BYTE)) /* if copy src is aligned by 4 bytes */ - { - /* write alligned data into memory space */ - for (loop = 0; loop < (len >> 2); loop++) - { - FQSPI_DAT_WRITE(addr + FQSPI_ALIGNED_BYTE * loop, *(u32 *)(buf + FQSPI_ALIGNED_BYTE * loop)); - } - /* write not alligned data into memory space */ - if (len & mask) - { - addr = addr + (len & ~mask); - memcpy(tmp, buf + (len & ~mask), len & mask); - FQSPI_DAT_WRITE(addr, *(u32 *)(tmp)); - } - } - else - { - aligned_bit = (addr & mask); - addr = addr - aligned_bit; - reg_val = FQSPI_READ_REG32(addr, 0); - - for (loop = 0; loop < (FQSPI_ALIGNED_BYTE - aligned_bit); loop++) - { - val = (val << 8) | (buf[loop]); - reg_val &= (~(0xff << (loop * 8))); - } - - reg_val |= val; - reg_val = __builtin_bswap32(reg_val); - FQSPI_DAT_WRITE(addr, reg_val); - - buf = buf + loop; - len = len - loop; - addr = addr + FQSPI_ALIGNED_BYTE; - - FQSPI_DEBUG("addr=%p, buf=%p, len=%d, value=%#x\r\n", addr, buf, len, *(u32 *)(buf)); - - for (loop = 0; loop < (len >> 2); loop++) - { - FQSPI_DAT_WRITE(addr + FQSPI_ALIGNED_BYTE * loop, *(u32 *)(buf + FQSPI_ALIGNED_BYTE * loop)); - } - - if (!IS_ALIGNED(len, FQSPI_ALIGNED_BYTE)) - { - buf = buf + FQSPI_ALIGNED_BYTE * loop; - len = len - FQSPI_ALIGNED_BYTE * loop; - addr = addr + FQSPI_ALIGNED_BYTE * loop; - memcpy(tmp, buf, len); - FQSPI_DAT_WRITE(addr, *(u32 *)(tmp)); - } - } - - /* flush buffer data to Flash */ - FQspiWriteFlush(base_addr); - - ret = FQspiFlashWaitForCmd(pctrl); - - return ret; -} - -/** - * @name: FQspiFlashPortReadData - * @msg: read flash data use register port - * @param {FQspiCtrl} *pctrl, instance of FQSPI controller - * @param {u8} cmd, command to read flash,see the Flash manual for details - * @param {u32} chip_addr, The start address of the chip to read - * @param {u8} *buf, read buffer - * @param {size_t} len, read length - * @return {FError} err code information, FQSPI_SUCCESS indicates success,others indicates failed - */ -FError FQspiFlashPortReadData(FQspiCtrl *pctrl, u8 cmd, u32 chip_addr, u8 *buf, size_t len) -{ - FASSERT(pctrl && buf); - if (FT_COMPONENT_IS_READY != pctrl->is_ready) - { - FQSPI_ERROR("Nor flash not ready !!!"); - return FQSPI_NOT_READY; - } - - FError ret = FQSPI_SUCCESS; - u32 addr = chip_addr + pctrl->config.channel * pctrl->flash_size; - uintptr base_addr = pctrl->config.base_addr; - - FQspiXIPModeSet(base_addr, FQSPI_XIP_EXIT); - - memset(&pctrl->cmd_def, 0, sizeof(pctrl->cmd_def)); - pctrl->cmd_def.cmd = cmd; - pctrl->cmd_def.wait = FQSPI_WAIT_ENABLE; - pctrl->cmd_def.through = 0; - pctrl->cmd_def.cs = pctrl->config.channel; - pctrl->cmd_def.transfer = FQSPI_TRANSFER_1_1_1; - pctrl->cmd_def.cmd_addr = FQSPI_CMD_ADDR_ENABLE; - pctrl->cmd_def.latency = FQSPI_CMD_LATENCY_DISABLE; - pctrl->cmd_def.data_transfer = FQSPI_CMD_DATA_ENABLE; - pctrl->cmd_def.addr_sel = FQSPI_ADDR_SEL_3; - pctrl->cmd_def.dummy = 0; - pctrl->cmd_def.p_buffer = FQSPI_USE_BUFFER_ENABLE; - pctrl->cmd_def.rw_num = (len - 1); - pctrl->cmd_def.sck_sel = FQSPI_SCK_DIV_128; - - ret = FQspiCommandPortConfig(pctrl); - if (ret != FT_SUCCESS) - { - FQSPI_ERROR("FQspiFlashPortReadData FQspiCommandPortConfig failed!"); - return ret; - } - - /* write addr port register */ - FQspiAddrPortConfig(base_addr, addr); - - FQspiCommandPortSend(base_addr); - - FQspiGetLdPortData(base_addr, buf, len); - - /* wait SR1V bit0 WIP is ready, not device busy */ - ret = FQspiFlashWaitForCmd(pctrl); - - return ret; -} - -/** - * @name: FQspiFlashPortWriteData - * @msg: write flash data use register port - * @param {FQspiCtrl} *pctrl, instance of FQSPI controller - * @param {u8} cmd, command to write flash,see the Flash manual for details - * @param {u32} chip_addr, The start address of the chip to write - * @param {u8} *buf, write buffer - * @param {size_t} len, write length - * @return {FError} err code information, FQSPI_SUCCESS indicates success,others indicates failed - */ -FError FQspiFlashPortWriteData(FQspiCtrl *pctrl, u8 cmd, u32 chip_addr, u8 *buf, size_t len) -{ - FASSERT(pctrl && buf); - FASSERT(len <= FQSPI_CMD_PORT_CMD_RW_MAX); - - if (FT_COMPONENT_IS_READY != pctrl->is_ready) - { - FQSPI_ERROR("Nor flash not ready !!!"); - return FQSPI_NOT_READY; - } - - FError ret = FQSPI_SUCCESS; - u32 addr = chip_addr + pctrl->config.channel * pctrl->flash_size; - uintptr base_addr = pctrl->config.base_addr; - - /* Flash write enable */ - FQspiFlashEnableWrite(pctrl); - - memset(&pctrl->cmd_def, 0, sizeof(pctrl->cmd_def)); - pctrl->cmd_def.cmd = cmd; - pctrl->cmd_def.wait = FQSPI_WAIT_ENABLE; - pctrl->cmd_def.through = 0; - pctrl->cmd_def.cs = pctrl->config.channel; - pctrl->cmd_def.transfer = FQSPI_TRANSFER_1_1_1; - pctrl->cmd_def.cmd_addr = FQSPI_CMD_ADDR_ENABLE; - pctrl->cmd_def.latency = FQSPI_CMD_LATENCY_DISABLE; - pctrl->cmd_def.data_transfer = FQSPI_CMD_DATA_ENABLE; - pctrl->cmd_def.addr_sel = FQSPI_ADDR_SEL_3; - pctrl->cmd_def.dummy = 0; - pctrl->cmd_def.p_buffer = FQSPI_USE_BUFFER_DISABLE; - pctrl->cmd_def.rw_num = (len - 1); - pctrl->cmd_def.sck_sel = FQSPI_SCK_DIV_128; - - /*write cmd_reg to Command port register 0x10 */ - ret = FQspiCommandPortConfig(pctrl); - if (ret != FT_SUCCESS) - { - FQSPI_ERROR("FQspiFlashPortWriteData FQspiCommandPortConfig failed!"); - return ret; - } - - /* write addr port register */ - FQspiAddrPortConfig(base_addr, addr); - - FQspiSetLdPortData(base_addr, buf, len); - - /* wait SR1V bit0 WIP is ready, not device busy */ - ret = FQspiFlashWaitForCmd(pctrl); - - return ret; -} - - -/** - * @name: FQspiFlashErase - * @msg: erase flash data - * @param {FQspiCtrl} *pctrl, instance of FQSPI controller - * @param {u8} command, command to erase flash, see the Flash manual for details - * @param {u32} offset,Relative Byte Address Offset - * @return {FError} err code information, FQSPI_SUCCESS indicates success,others indicates failed 表示擦除成功,其它返回值表示擦除失败 - */ -FError FQspiFlashErase(FQspiCtrl *pctrl, u8 command, u32 offset) -{ - FASSERT(pctrl); - FError ret = FQSPI_SUCCESS; - if (FT_COMPONENT_IS_READY != pctrl->is_ready) - { - FQSPI_ERROR("Nor flash not ready !!!"); - return FQSPI_NOT_READY; - } - - uintptr base_addr = pctrl->config.base_addr; - - /* Flash write enable */ - FQspiFlashEnableWrite(pctrl); - - memset(&pctrl->cmd_def, 0, sizeof(pctrl->cmd_def)); - pctrl->cmd_def.cmd = command; - pctrl->cmd_def.cs = pctrl->config.channel; - pctrl->cmd_def.sck_sel = FQSPI_SCK_DIV_128; - - switch (command) - { - case FQSPI_FLASH_CMD_SE: - /* set addr_sel region, FQSPI_ADDR_SEL_3 or FQSPI_ADDR_SEL_4 */ - pctrl->cmd_def.addr_sel = FQSPI_ADDR_SEL_3; - - /* set cmd_addr region, by command, have addr transfer */ - pctrl->cmd_def.cmd_addr = FQSPI_CMD_ADDR_ENABLE; - - /* need some execution time */ - pctrl->cmd_def.wait = FQSPI_WAIT_ENABLE; - - break; - case FQSPI_FLASH_CMD_4SE: - pctrl->cmd_def.addr_sel = FQSPI_ADDR_SEL_4; - pctrl->cmd_def.cmd_addr = FQSPI_CMD_ADDR_ENABLE; - pctrl->cmd_def.wait = FQSPI_WAIT_ENABLE; - - break; - case FQSPI_FLASH_CMD_P4E: - pctrl->cmd_def.addr_sel = FQSPI_ADDR_SEL_3; - pctrl->cmd_def.cmd_addr = FQSPI_CMD_ADDR_ENABLE; - - break; - case FQSPI_FLASH_CMD_4P4E: - pctrl->cmd_def.addr_sel = FQSPI_ADDR_SEL_4; - pctrl->cmd_def.cmd_addr = FQSPI_CMD_ADDR_ENABLE; - - break; - case FQSPI_FLASH_CMD_BE: - pctrl->cmd_def.addr_sel = FQSPI_ADDR_SEL_3; - break; - case FQSPI_FLASH_CMD_4BE: - pctrl->cmd_def.addr_sel = FQSPI_ADDR_SEL_3; - break; - default: - return FQSPI_NOT_SUPPORT; - } - - /*write cmd_reg to Command port register 0x10 */ - ret = FQspiCommandPortConfig(pctrl); - if (ret != FT_SUCCESS) - { - FQSPI_ERROR("FQspiFlashErase FQspiCommandPortConfig failed!"); - return ret; - } - - /* set addr port register, specify addr transfer */ - FQspiAddrPortConfig(base_addr, offset); - - /*write value to low bit port register 0x1c, make command valid */ - FQspiCommandPortSend(base_addr); - - /* wait command perform end */ - ret = FQspiFlashWaitForCmd(pctrl); - - return ret; -} - -/** - * @name: FQspiFlashEnableWrite - * @msg: Flash write enable - * @param {FQspiCtrl} *pctrl, instance of FQSPI controller - * @return {FError} err code information, FQSPI_SUCCESS indicates success,others indicates failed 表示执行成功,其它返回值表示执行失败 - */ -FError FQspiFlashEnableWrite(FQspiCtrl *pctrl) -{ - FASSERT(pctrl); - FError ret = FQSPI_SUCCESS; - u32 timeout = FQSPI_BUSY_TIMEOUT_US; - - if (FT_COMPONENT_IS_READY != pctrl->is_ready) - { - FQSPI_ERROR("Nor flash not ready !!!"); - return FQSPI_NOT_READY; - } - uintptr base_addr = pctrl->config.base_addr; - - memset(&pctrl->cmd_def, 0, sizeof(pctrl->cmd_def)); - pctrl->cmd_def.cmd = FQSPI_FLASH_CMD_WREN; - pctrl->cmd_def.cs = pctrl->config.channel; - pctrl->cmd_def.sck_sel = FQSPI_SCK_DIV_128; - - /*write cmd_reg to Command port register 0x10 */ - ret = FQspiCommandPortConfig(pctrl); - if (ret != FT_SUCCESS) - { - FQSPI_ERROR("FQspiFlashEnableWrite FQspiCommandPortConfig failed!"); - return ret; - } - - /*write value to low bit port register 0x1c, make command valid */ - FQspiCommandPortSend(base_addr); - - /* wait SR1V bit0 WIP is ready, not device busy */ - ret = FQspiFlashWaitForCmd(pctrl); - - return ret; -} - -/** - * @name: FQspiFlashDisableWrite - * @msg: Flash write disable - * @param {FQspiCtrl} *pctrl, instance of FQSPI controller - * @return {FError} err code information, FQSPI_SUCCESS indicates success,others indicates failed 表示执行成功,其它返回值表示执行失败 - */ -FError FQspiFlashDisableWrite(FQspiCtrl *pctrl) -{ - FASSERT(pctrl); - FError ret = FQSPI_SUCCESS; - if (FT_COMPONENT_IS_READY != pctrl->is_ready) - { - FQSPI_ERROR("Nor flash not ready !!!"); - return FQSPI_NOT_READY; - } - uintptr base_addr = pctrl->config.base_addr; - - memset(&pctrl->cmd_def, 0, sizeof(pctrl->cmd_def)); - pctrl->cmd_def.cmd = FQSPI_FLASH_CMD_WRDI; - pctrl->cmd_def.cs = pctrl->config.channel; - pctrl->cmd_def.sck_sel = FQSPI_SCK_DIV_128; - - /*write cmd_reg to Command port register 0x10 */ - ret = FQspiCommandPortConfig(pctrl); - if (ret != FT_SUCCESS) - { - FQSPI_ERROR("FQspiFlashDisableWrite FQspiCommandPortConfig failed!"); - return ret; - } - - /*write value to low bit port register 0x1c, make command valid */ - FQspiCommandPortSend(base_addr); - - return ret; -} - -/** - * @name: FQspiFlashWriteReg - * @msg: write flash register - * @param {FQspiCtrl} *pctrl, instance of FQSPI controller - * @param {u8} command, command to write flash register,see the Flash manual for details - * @param {u8} *buf, write buffer - * @param {size_t} len, write length - * @return {FError} err code information, FQSPI_SUCCESS indicates success,others indicates failed 表示写入成功,其它返回值表示写入失败 - */ -FError FQspiFlashWriteReg(FQspiCtrl *pctrl, u8 command, const u8 *buf, size_t len) -{ - FASSERT(pctrl); - FError ret = FQSPI_SUCCESS; - u8 sr1_v = 0; - - if (FT_COMPONENT_IS_READY != pctrl->is_ready) - { - FQSPI_ERROR("Nor flash not ready !!!"); - return FQSPI_NOT_READY; - } - - uintptr base_addr = pctrl->config.base_addr; - - memset(&pctrl->cmd_def, 0, sizeof(pctrl->cmd_def)); - pctrl->cmd_def.cmd = command; - pctrl->cmd_def.cs = pctrl->config.channel; - pctrl->cmd_def.data_transfer = FQSPI_CMD_DATA_ENABLE; - pctrl->cmd_def.p_buffer = FQSPI_USE_BUFFER_ENABLE; - pctrl->cmd_def.sck_sel = FQSPI_SCK_DIV_128; - - if (len > 4) - { - FQSPI_ERROR("Data length exceed. commad 0x%lx, len:%d \n", command, len); - return FQSPI_INVAL_PARAM; - } - else if ((len > 0) && (buf != NULL)) - { - /* set rw_num region, len - 1 */ - pctrl->cmd_def.rw_num = (len - 1); - - /*write cmd_reg to Command port register 0x10 */ - FQspiCommandPortConfig(pctrl); - - /* set ld port data(buf) and make command valid */ - FQspiSetLdPortData(base_addr, buf, len); - } - else - { - /*write cmd_reg to Command port register 0x10 */ - FQspiCommandPortConfig(pctrl); - - FQspiCommandPortSend(base_addr); - } - - /* wait SR1V bit0 WIP is ready, not device busy */ - ret = FQspiFlashWaitForCmd(pctrl); - - return ret; -} - -/** - * @name: FQspiFlashWaitForCmd - * @msg: wait flash command execution complete - * @param {FQspiCtrl} *pctrl, instance of FQSPI controller - * @return {FError} err code information, FQSPI_SUCCESS indicates success,others indicates failed 表示成功完成,其它返回值表示失败 - */ -FError FQspiFlashWaitForCmd(FQspiCtrl *pctrl) -{ - FASSERT(pctrl); - u32 timeout = FQSPI_BUSY_TIMEOUT_US; - FError ret = FQSPI_SUCCESS; - u8 sr1 = 0; - - uintptr base_addr = pctrl->config.base_addr; - - ret = FQspiFlashSpecialInstruction(pctrl, FQSPI_FLASH_CMD_RDSR1, &sr1, sizeof(sr1)); - if (FQSPI_SUCCESS != ret) - { - FQSPI_ERROR("Failed to read sr1, result 0x%x\r\n", ret); - return ret; - } - - do - { - timeout--; - /* read value from low bit port register 0x1c, - Read Status Register 1 is related to SR1V WIP field (bit0) */ - FQspiGetLdPortData(base_addr, &sr1, 1); - - if (!timeout) - { - FQSPI_ERROR("Wait cmd timeout !!!"); - ret = FQSPI_TIMEOUT; - break; - } - - } - while (sr1 & FQSPI_NOR_FLASH_STATE_BUSY); - - return ret; -} - -/** - * @name: FQspiFlashWProtectSet - * @msg: Set qspi write protection function - * @param {FQspiCtrl} *pctrl, instance of FQSPI controller - * @param {u32} Write protect function enable/disable 1:enable,0:disable - * @return err code information, FQSPI_SUCCESS indicates success,others indicates failed - */ -FError FQspiFlashWProtectSet(FQspiCtrl *pctrl, boolean wprotect, u8 channel) -{ - FASSERT(pctrl); - FError ret = FQSPI_SUCCESS; - u8 wp_block[2] = {FQSPI_FLASH_WP_ENABLE, FQSPI_FLASH_WP_DISABLE}; - FQspiChannelSet(pctrl, channel); - ret = FQspiFlashEnableWrite(pctrl); - if (wprotect == TRUE) - { - ret = FQspiFlashWriteReg(pctrl, FQSPI_FLASH_CMD_WRR, &wp_block[0], 1); - } - else if (wprotect == FALSE) - { - ret = FQspiFlashWriteReg(pctrl, FQSPI_FLASH_CMD_WRR, &wp_block[1], 1); - } - return ret; -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/qspi/fqspi/fqspi_flash.h b/bsp/phytium/libraries/standalone/drivers/qspi/fqspi/fqspi_flash.h deleted file mode 100644 index 5eae7a1028..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/qspi/fqspi/fqspi_flash.h +++ /dev/null @@ -1,163 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fqspi_flash.h - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-07-12 16:20:55 - * Description:   - * This file is for S25FS256, GD25Q256, GD25Q64 norflash program, includes reading and writing registers and data, - * Users can refer to this file to adapt chips from other manufacturers. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 wangxiaodong 2021/11/12 first release - * 1.1 wangxiaodong 2022/3/29 improve functions - * 1.2 wangxiaodong 2022/7/5 adapt to e2000 - * 1.3 wangxiaodong 2022/9/9 improve functions - * 1.4 zhangyan 2022/12/7 improve functions - */ - -#ifndef FQSPI_FLASH_H -#define FQSPI_FLASH_H - -#include "fkernel.h" -#include "ftypes.h" -#include "ferror_code.h" -#include "fqspi.h" - - -#ifdef __cplusplus -extern "C" -{ -#endif - - -/* qspi flash support manufacturer JEDEC ID */ -#define FQSPI_FLASH_MF_ID_CYPRESS 0x01 -#define FQSPI_FLASH_MF_ID_GIGADEVICE 0xC8 -#define FQSPI_FLASH_MF_ID_BOYA 0x68 -#define FQSPI_FLASH_MF_ID_WINBOND 0xEF - -/* qspi flash supported information table */ -#define FQSPI_FLASH_INFO_TABLE \ - { \ - {"S25FS256S", FQSPI_FLASH_MF_ID_CYPRESS, 0x02, 0x19, FQSPI_FLASH_CAP_32MB}, \ - {"GD25Q32C", FQSPI_FLASH_MF_ID_GIGADEVICE, 0x40, 0x16, FQSPI_FLASH_CAP_4MB}, \ - {"GD25Q32E", FQSPI_FLASH_MF_ID_GIGADEVICE, 0x60, 0x16, FQSPI_FLASH_CAP_4MB}, \ - {"GD25Q64B", FQSPI_FLASH_MF_ID_GIGADEVICE, 0x40, 0x17, FQSPI_FLASH_CAP_8MB}, \ - {"GD25LQ128E", FQSPI_FLASH_MF_ID_GIGADEVICE, 0x40, 0x18, FQSPI_FLASH_CAP_16MB}, \ - {"GD25LQ128E", FQSPI_FLASH_MF_ID_GIGADEVICE, 0x60, 0x18, FQSPI_FLASH_CAP_16MB}, \ - {"GD25QL256D", FQSPI_FLASH_MF_ID_GIGADEVICE, 0x60, 0x19, FQSPI_FLASH_CAP_32MB}, \ - {"BY25Q64BS", FQSPI_FLASH_MF_ID_BOYA, 0x40, 0x17, FQSPI_FLASH_CAP_8MB}, \ - {"BY25Q128BS", FQSPI_FLASH_MF_ID_BOYA, 0x40, 0x18, FQSPI_FLASH_CAP_16MB}, \ - {"BY25Q32BS", FQSPI_FLASH_MF_ID_BOYA, 0x40, 0x16, FQSPI_FLASH_CAP_4MB}, \ - {"W25Q128", FQSPI_FLASH_MF_ID_WINBOND, 0x40, 0x18, FQSPI_FLASH_CAP_16MB} \ - } - -#define FQSPI_FLASH_CMD_WRR 0x01 /* Write status register */ -#define FQSPI_FLASH_CMD_PP 0x02 /* Page program */ -#define FQSPI_FLASH_CMD_READ 0x03 /* Normal read data bytes */ -#define FQSPI_FLASH_CMD_WRDI 0x04 /* Write disable */ -#define FQSPI_FLASH_CMD_RDSR1 0x05 /* Read status register */ -#define FQSPI_FLASH_CMD_WREN 0x06 /* Write enable */ -#define FQSPI_FLASH_CMD_RDSR2 0x07 /* Read status register */ -#define FQSPI_FLASH_CMD_FAST_READ 0x0B /* Fast read data bytes */ -#define FQSPI_FLASH_CMD_4FAST_READ 0x0C /* Fast read data bytes */ -#define FQSPI_FLASH_CMD_DUAL_READ 0xBB /* Dual read data bytes */ -#define FQSPI_FLASH_CMD_4PP 0x12 /* Page program */ -#define FQSPI_FLASH_CMD_4READ 0x13 /* Normal read data bytes */ -#define FQSPI_FLASH_CMD_P4E 0x20 /* Erase 4kb sector */ -#define FQSPI_FLASH_CMD_4P4E 0x21 /* Erase 4kb sector */ -#define FQSPI_FLASH_CMD_QPP 0x32 /* Quad Page program */ -#define FQSPI_FLASH_CMD_4QPP 0x34 /* Quad Page program */ -#define FQSPI_FLASH_CMD_RDCR 0x35 /* Read config register */ -#define FQSPI_FLASH_CMD_BE 0x60 /* Bulk erase */ -#define FQSPI_FLASH_CMD_RDAR 0x65 /* Read Any Register */ -#define FQSPI_FLASH_CMD_DOR 0x3B /* Dual read data bytes*/ -#define FQSPI_FLASH_CMD_QOR 0x6B /* Quad read data bytes */ -#define FQSPI_FLASH_CMD_QWFR 0xE7 /* Quad word fast read data bytes */ -#define FQSPI_FLASH_CMD_4QOR 0x6C /* Quad read data bytes */ -#define FQSPI_FLASH_CMD_WRAR 0x71 /* Write Any Register */ -#define FQSPI_FLASH_CMD_RDID 0x9F /* Read JEDEC ID */ -#define FQSPI_FLASH_CMD_4BAM 0xB7 /* Enter 4 Bytes Mode */ -#define FQSPI_FLASH_CMD_4BE 0xC7 /* Bulk erase */ -#define FQSPI_FLASH_CMD_SE 0xD8 /* Sector erase */ -#define FQSPI_FLASH_CMD_4SE 0xDC /* Sector erase */ -#define FQSPI_FLASH_CMD_4BEX 0xE9 /* Exit 4 Bytes Mode */ -#define FQSPI_FLASH_CMD_QIOR 0xEB /* Quad read data bytes */ -#define FQSPI_FLASH_CMD_4QIOR 0xEC /* Quad read data bytes */ -#define FQSPI_FLASH_CMD_SFDP 0x5A /* Read JEDEC Serial Manu ID */ -#define FQSPI_CMD_ENABLE_RESET 0x66 /* Software Reset Enable */ -#define FQSPI_CMD_RESET 0x99 /* Software Reset */ -#define FQSPI_FLASH_CMD_RDSR3 0x15 /* Read status register 3 */ - -/* boya flash */ -#define FQSPI_FLASH_CMD_WRITE_SR2 0x31 /* Write status register 2 */ -#define FQSPI_FLASH_CMD_WRITE_SR3 0x11 /* Write status register 3 */ - -#define FQSPI_BUSY_TIMEOUT_US 1000000 -#define FQSPI_NOR_FLASH_STATE_BUSY BIT(0) - -#define FQSPI_FLASH_WP_ENABLE 0x7c -#define FQSPI_FLASH_WP_DISABLE 0x00 -/* Read some flash information */ -FError FQspiFlashSpecialInstruction(FQspiCtrl *pctrl, u8 cmd, u8 *buf, size_t len); - -/* read flash sfdp-Serial Flash Discoverable Parameter */ -FError FQspiFlashReadSfdp(FQspiCtrl *pctrl, u32 offset, u8 *buf, size_t len); - -/* read flash register */ -FError FQspiFlashReadReg(FQspiCtrl *pctrl, u32 offset, u8 *buf, size_t len); - -/* write flash register */ -FError FQspiFlashWriteReg(FQspiCtrl *pctrl, u8 command, const u8 *buf, size_t len); - -/* read flash data config */ -FError FQspiFlashReadDataConfig(FQspiCtrl *pctrl, u8 command); - -/* read flash data */ -size_t FQspiFlashReadData(FQspiCtrl *pctrl, u32 chip_addr, u8 *buf, size_t len); - -/* write flash data */ -FError FQspiFlashWriteData(FQspiCtrl *pctrl, u8 command, u32 chip_addr, const u8 *buf, size_t len); - -/* flash erase */ -FError FQspiFlashErase(FQspiCtrl *pctrl, u8 command, u32 offset); - -/* flash write enable */ -FError FQspiFlashEnableWrite(FQspiCtrl *pctrl); - -/* flash write disable */ -FError FQspiFlashDisableWrite(FQspiCtrl *pctrl); - -/* wait flash command execution complete */ -FError FQspiFlashWaitForCmd(FQspiCtrl *pctrl); - -/* read flash data use register port */ -FError FQspiFlashPortReadData(FQspiCtrl *pctrl, u8 cmd, u32 chip_addr, u8 *buf, size_t len); - -/* write flash data use register port */ -FError FQspiFlashPortWriteData(FQspiCtrl *pctrl, u8 cmd, u32 chip_addr, u8 *buf, size_t len); - -/* detect flash information */ -FError FQspiFlashDetect(FQspiCtrl *pctrl); - -/* qspi write protect set */ -FError FQspiFlashWProtectSet(FQspiCtrl *pctrl, boolean wprotect, u8 channel); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/bsp/phytium/libraries/standalone/drivers/qspi/fqspi/fqspi_g.c b/bsp/phytium/libraries/standalone/drivers/qspi/fqspi/fqspi_g.c deleted file mode 100644 index 14f01cbcd0..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/qspi/fqspi/fqspi_g.c +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fqspi_g.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 09:00:41 - * Description:  This file is for the qspi default configuration - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 wangxiaodong 2022/3/29 first release - * 1.1 wangxiaodong 2022/9/9 improve functions - */ - -#include "fparameters.h" -#include "fqspi.h" -#include "sdkconfig.h" - -FQspiConfig FQspiConfigTbl[FQSPI_NUM] = -{ - { - .instance_id = FQSPI0_ID, - .base_addr = FQSPI_BASE_ADDR, - .mem_start = FQSPI_MEM_START_ADDR, - .capacity = 0, - .dev_num = 0, - .channel = 0, - } -}; \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/qspi/fqspi/fqspi_hw.c b/bsp/phytium/libraries/standalone/drivers/qspi/fqspi/fqspi_hw.c deleted file mode 100644 index a7c7ac3442..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/qspi/fqspi/fqspi_hw.c +++ /dev/null @@ -1,158 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fqspi_hw.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 09:00:41 - * Description:  This file is for the qspi register related functions - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 wangxiaodong 2022/3/29 first release - */ -#include "ftypes.h" -#include "ferror_code.h" -#include "fassert.h" -#include "fdebug.h" -#include "fqspi_hw.h" - -#define FQSPI_DEBUG_TAG "FQSPI-HW" -#define FQSPI_ERROR(format, ...) FT_DEBUG_PRINT_E(FQSPI_DEBUG_TAG, format, ##__VA_ARGS__) -#define FQSPI_WARN(format, ...) FT_DEBUG_PRINT_W(FQSPI_DEBUG_TAG, format, ##__VA_ARGS__) -#define FQSPI_INFO(format, ...) FT_DEBUG_PRINT_I(FQSPI_DEBUG_TAG, format, ##__VA_ARGS__) -#define FQSPI_DEBUG(format, ...) FT_DEBUG_PRINT_D(FQSPI_DEBUG_TAG, format, ##__VA_ARGS__) - - -/** - * @name: FQspiGetLdPortData - * @msg: read low data port register data - * @param {uintptr} base_addr, FQSPI controller base address - * @param {u8} *buf, read buffer - * @param {size_t} len, read length - * @return - */ -void FQspiGetLdPortData(uintptr base_addr, u8 *buf, size_t len) -{ - FASSERT(buf); - u32 loop = 0; - u32 reg_val = 0; - - for (loop = 0; loop < len; loop++) - { - /* read 4 bytes one time */ - if (0 == loop % 4) - { - reg_val = FQSPI_READ_REG32(base_addr, FQSPI_REG_LD_PORT_OFFSET); - } - - /* assign buf byte by byte */ - buf[loop] = (u8)((reg_val >> (loop % 4) * 8) & 0xFF); - } - -} - -/** - * @name: FQspiSetLdPortData - * @msg: set low data port register data - * @param {uintptr} base_addr, FQSPI controller base address - * @param {u8} *buf, write buffer - * @param {size_t} len, write length - * @return - */ -void FQspiSetLdPortData(uintptr base_addr, const u8 *buf, size_t len) -{ - FASSERT(buf); - FASSERT((len < 5) && (len)); - u32 reg_val = 0; - - if (1 == len) - { - reg_val = buf[0]; - } - else if (2 == len) - { - reg_val = buf[1]; - reg_val = (reg_val << 8) + buf[0]; - } - else if (3 == len) - { - reg_val = buf[2]; - reg_val = (reg_val << 8) + buf[1]; - reg_val = (reg_val << 8) + buf[0]; - } - else - { - reg_val = buf[3]; - reg_val = (reg_val << 8) + buf[2]; - reg_val = (reg_val << 8) + buf[1]; - reg_val = (reg_val << 8) + buf[0]; - } - - /*write value to low bit port register 0x1c, make command valid */ - FQSPI_WRITE_REG32(base_addr, FQSPI_REG_LD_PORT_OFFSET, reg_val); -} - - -/** - * @name: FQspiWriteFlush - * @msg: config write flush register to make wr_cfg complete program - * @param {uintptr} base_addr, FQSPI controller base address - * @return - */ -void FQspiWriteFlush(uintptr base_addr) -{ - FQSPI_WRITE_REG32(base_addr, FQSPI_REG_FLUSH_OFFSET, 0x1); -} - -/** - * @name: FQspiCommandPortSend - * @msg: send command port register value - * @param {uintptr} base_addr, FQSPI controller base address - * @return void - */ -void FQspiCommandPortSend(uintptr base_addr) -{ - FQSPI_WRITE_REG32(base_addr, FQSPI_REG_LD_PORT_OFFSET, 0x0); -} - -/** - * @name: FQspiAddrPortConfig - * @msg: config address port register value - * @param {uintptr} base_addr, FQSPI controller base address - * @param {u32} addr addresss value write to register - * @return - */ -void FQspiAddrPortConfig(uintptr base_addr, u32 addr) -{ - FQSPI_WRITE_REG32(base_addr, FQSPI_REG_ADDR_PORT_OFFSET, addr); -} - -/** - * @name: FQspiXIPModeSet - * @msg: config qspi xip mode - * @param {uintptr} base_addr, FQSPI controller base address - * @param {u8} enable enable or disable xip mode - * @return - */ -void FQspiXIPModeSet(uintptr base_addr, u8 enable) -{ - if (enable) - { - FQSPI_WRITE_REG32(base_addr, FQSPI_REG_MODE_OFFSET, FQSPI_QUAD_READ_MODE_ENABLE); - } - else - { - FQSPI_WRITE_REG32(base_addr, FQSPI_REG_MODE_OFFSET, FQSPI_QUAD_READ_MODE_DISABLE); - } -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/qspi/fqspi/fqspi_hw.h b/bsp/phytium/libraries/standalone/drivers/qspi/fqspi/fqspi_hw.h deleted file mode 100644 index 2d4dd650a7..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/qspi/fqspi/fqspi_hw.h +++ /dev/null @@ -1,190 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fqspi_hw.h - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 09:00:23 - * Description:  This files is for the qspi register related definition - * - * Modify History: - * Ver   Who        Date        Changes - * ----- ------      --------    -------------------------------------- - * 1.0 wangxiaodong 2022/3/29 first release - * 1.1 wangxiaodong 2022/9/9 improve functions - * 1.2 zhangyan 2022/12/7 improve functions - */ - -#ifndef BSP_DRIVERS_FQSPI_HW_H -#define BSP_DRIVERS_FQSPI_HW_H - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include "fio.h" -#include "fkernel.h" - -/* register definition */ -#define FQSPI_REG_CAP_OFFSET (0x00) /* Flash capacity setting register */ -#define FQSPI_REG_RD_CFG_OFFSET (0x04) /* Address access reads configuration registers */ -#define FQSPI_REG_WR_CFG_OFFSET (0x08) /* Write buffer flush register */ -#define FQSPI_REG_FLUSH_OFFSET (0x0C) /* Write buffer flush register */ -#define FQSPI_REG_CMD_PORT_OFFSET (0x10) /* Command port register */ -#define FQSPI_REG_ADDR_PORT_OFFSET (0x14) /* Address port register */ -#define FQSPI_REG_HD_PORT_OFFSET (0x18) /* Upper bit port register */ -#define FQSPI_REG_LD_PORT_OFFSET (0x1C) /* low bit port register */ -#define FQSPI_REG_CS_TIMING_SET_OFFSET (0x20) /* CS setting register */ -#define FQSPI_REG_WIP_RD_OFFSET (0x24) /* WIP reads the Settings register */ -#define FQSPI_REG_WP_OFFSET (0x28) /* WP register */ -#define FQSPI_REG_MODE_OFFSET (0x2C) /* Mode setting register */ - -/* FQSPI_CAP */ -#define FQSPI_CAP_FLASH_NUM(data) ((data) << 3) /* Flash number */ -#define FQSPI_CAP_FLASH_CAP(data) ((data) << 0) /* The flash capacity */ - -#define FQSPI_CAP_FLASH_NUM_MASK GENMASK(4, 3) -#define FQSPI_CAP_FLASH_CAP_MASK GENMASK(2, 0) - -/* RD_CFG */ -#define FQSPI_RD_CFG_CMD(data) ((data) << 24) /* Read Command */ -#define FQSPI_RD_CFG_THROUGH(data) ((data) << 23) /* The programming flag in the status register */ -#define FQSPI_RD_CFG_TRANSFER(data) ((data) << 20) /* rd_tranfer region */ -#define FQSPI_RD_CFG_ADDR_SEL(data) ((data) << 19) /* rd_addr_sel region*/ -#define FQSPI_RD_CFG_LATENCY(data) ((data) << 18) /* rd_latency region*/ -#define FQSPI_RD_CFG_MODE_BYTE(data) ((data) << 17) /* mode byte region*/ -#define FQSPI_RD_CFG_CMD_SIGN(data) ((data) << 9) /* cmd_sign region*/ -#define FQSPI_RD_CFG_DUMMY(data) ((data-1) << 4) /* dummy region*/ -#define FQSPI_RD_CFG_D_BUFFER(data) ((data) << 3) /* d_buffer region*/ -#define FQSPI_RD_CFG_SCK_SEL(data) ((data) << 0) /* rd_sck_sel region*/ - -#define FQSPI_RD_CFG_CMD_MASK GENMASK(31, 24) -#define FQSPI_RD_CFG_SCK_SEL_MASK GENMASK(2, 0) -#define FQSPI_RD_CFG_TRANSFER_MASK GENMASK(22, 20) -#define FQSPI_RD_CFG_ADDR_SEL_MASK FQSPI_RD_CFG_ADDR_SEL(0x1) -#define FQSPI_RD_CFG_DUMMY_MASK GENMASK(8, 4) - -/* FQSPI_WR_CFG */ -#define FQSPI_WR_CFG_CMD(data) ((data) << 24) -#define FQSPI_WR_CFG_WAIT(data) ((data) << 9) -#define FQSPI_WR_CFG_THROUGH(data) ((data) << 8) -#define FQSPI_WR_CFG_TRANSFER(data) ((data) << 5) -#define FQSPI_WR_CFG_ADDRSEL(data) ((data) << 4) -#define FQSPI_WR_CFG_MODE(data) ((data) << 3) -#define FQSPI_WR_CFG_SCK_SEL(data) ((data) << 0) - -#define FQSPI_WR_CFG_CMD_MASK GENMASK(31, 24) -#define FQSPI_WR_CFG_SCK_SEL_MASK GENMASK(2, 0) -#define FQSPI_WR_CFG_ADDRSEL_MASK FQSPI_WR_CFG_ADDRSEL(0x1) - -/* FQSPI_CMD_PORT */ -#define FQSPI_CMD_PORT_CMD(data) ((data) << 24) -#define FQSPI_CMD_PORT_WAIT(data) ((data) << 22) -#define FQSPI_CMD_PORT_THROUGH(data) ((data) << 21) -#define FQSPI_CMD_PORT_CS(data) ((data) << 19) -#define FQSPI_CMD_PORT_TRANSFER(data) ((data) << 16) -#define FQSPI_CMD_PORT_CMD_ADDR(data) ((data) << 15) -#define FQSPI_CMD_PORT_LATENCY(data) ((data) << 14) -#define FQSPI_CMD_PORT_DATA_TRANS(data) ((data) << 13) -#define FQSPI_CMD_PORT_ADDR_SEL(data) ((data) << 12) -#define FQSPI_CMD_PORT_DUMMY(data) ((data-1) << 7) -#define FQSPI_CMD_PORT_P_BUFFER(data) ((data) << 6) -#define FQSPI_CMD_PORT_RW_NUM(data) ((data) << 3) -#define FQSPI_CMD_PORT_CLK_SEL(data) ((data) << 0) - -#define FQSPI_CMD_PORT_RW_NUM_MASK GENMASK(5, 3) -#define FQSPI_CMD_PORT_CLK_SEL_MASK GENMASK(2, 0) -#define FQSPI_CMD_PORT_CS_MASK GENMASK(20, 19) -#define FQSPI_CMD_PORT_CMD_MASK GENMASK(31, 24) -#define FQSPI_CMD_PORT_ADDR_SEL_MASK FQSPI_CMD_PORT_ADDR_SEL(0x1) - -#define FQSPI_CMD_PORT_CMD_RW_MAX 8 - -/* FQSPI_CS_TIMING_SET */ -#define FQSPI_FUN_SET_CS_HOLD(data) ((data) << 24) -#define FQSPI_FUN_SET_CS_SETUP(data) ((data) << 16) -#define FQSPI_FUN_SET_CS_DELAY(data) ((data) << 0) - -/* FQSPI_WIP_RD */ -#define FQSPI_WIP_RD_CMD(data) ((data) << 24) -#define FQSPI_WIP_RD_TRANSFER(data) ((data) << 3) -#define FQSPI_WIP_RD_SCK_SEL(data) ((data) << 0) - -/* FQSPI_WP */ -#define FQSPI_WP_EN(data) ((data) << 17) -#define FQSPI_WP_WP(data) ((data) << 16) -#define FQSPI_WP_HOLD(data) ((data) << 8) -#define FQSPI_WP_SETUP(data) ((data) << 0) - -/* FQSPI_MODE */ -#define FQSPI_MODE_VALID(data) ((data) << 8) -#define FQSPI_MODE_MODE(data) ((data) << 0) - -#define FQSPI_QUAD_READ_MODE_ENABLE 0xF0A0 /* enable FLASH XIP MODE */ -#define FQSPI_QUAD_READ_MODE_DISABLE 0xF0BF /* disable FLASH XIP MODE */ -#define FQSPI_QUAD_READ_MODE_CMD 0xA0 /* FLASH XIP MODE CMD SIGN */ - -typedef enum -{ - FQSPI_CMD_READ = 0x01, - FQSPI_CMD_WRITE = 0x02, -} FQspiCmdFlags; - -/** - * @name: FQSPI_READ_REG32 - * @msg: read FQSPI register - * @param {u32} addr, base address of FQSPI - * @param {u32} reg_offset, offset of register - * @return {u32} register value - */ -#define FQSPI_READ_REG32(addr, reg_offset) FtIn32((addr) + (u32)(reg_offset)) - -/** - * @name: FQSPI_WRITE_REG32 - * @msg: write FQSPI register - * @param {u32} addr, base address of FQSPI - * @param {u32} reg_offset, offset of register - * @param {u32} reg_value, set register value - * @return {void} - */ -#define FQSPI_WRITE_REG32(addr, reg_offset, reg_value) FtOut32(addr + (u32)reg_offset, (u32)reg_value) - -/* FQSPI Data Operations */ -#define FQSPI_DAT_WRITE(addr, dat) FtOut32((addr), (u32)(dat)) - - -/* read ld port data */ -void FQspiGetLdPortData(uintptr base_addr, u8 *buf, size_t len); - -/* set ld port data */ -void FQspiSetLdPortData(uintptr base_addr, const u8 *buf, size_t len); - -/* send command port register config */ -void FQspiCommandPortSend(uintptr base_addr); - -/* address port register config */ -void FQspiAddrPortConfig(uintptr base_addr, u32 addr); - -/* write flush register */ -void FQspiWriteFlush(uintptr base_addr); - -/* qspi xip mode set */ -void FQspiXIPModeSet(uintptr base_addr, u8 enable); - - - -#ifdef __cplusplus -} -#endif - -#endif \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/qspi/fqspi/fqspi_sinit.c b/bsp/phytium/libraries/standalone/drivers/qspi/fqspi/fqspi_sinit.c deleted file mode 100644 index b3d908bda0..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/qspi/fqspi/fqspi_sinit.c +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fqspi_sinit.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 09:01:10 - * Description:  This files is for getting default configuration of specific qspi instance_id - * - * Modify History: - * Ver   Who         Date        Changes - * -----  ------      --------    -------------------------------------- - * 1.0 wangxiaodong 2022/3/29 first release - * 1.1 wangxiaodong 2022/9/9 improve functions - */ - -#include "fparameters.h" -#include "fassert.h" -#include "fqspi.h" - -extern FQspiConfig FQspiConfigTbl[FQSPI_NUM]; - -const FQspiConfig *FQspiLookupConfig(u32 instance_id) -{ - FASSERT(instance_id < FQSPI_NUM); - const FQspiConfig *pconfig = NULL; - u32 index; - - for (index = 0; index < (u32)FQSPI_NUM; index++) - { - if (FQspiConfigTbl[index].instance_id == instance_id) - { - pconfig = &FQspiConfigTbl[index]; - break; - } - } - - return (const FQspiConfig *)pconfig; -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/rtc/Kconfig b/bsp/phytium/libraries/standalone/drivers/rtc/Kconfig deleted file mode 100644 index 63cedcbe5c..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/rtc/Kconfig +++ /dev/null @@ -1,9 +0,0 @@ -menu "FRTC Configuration" - config ENABLE_FRTC - bool - prompt "Use FRTC" - default n - -endmenu - - diff --git a/bsp/phytium/libraries/standalone/drivers/rtc/frtc/frtc.c b/bsp/phytium/libraries/standalone/drivers/rtc/frtc/frtc.c deleted file mode 100644 index 2936a06532..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/rtc/frtc/frtc.c +++ /dev/null @@ -1,237 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: frtc.c - * Date: 2021-08-25 14:53:42 - * LastEditTime: 2021-08-26 09:02:33 - * Description:  This file is for user API implmentation - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 Wangxiaodong 2021/8/26 first commit - */ - -#include -#include "fgeneric_timer.h" -#include "ftypes.h" -#include "fassert.h" - -#include "fdebug.h" -#include "fsleep.h" - -#include "frtc.h" -#include "frtc_hw.h" - - -#define FRTC_DEBUG_TAG "RTC" -#define FRTC_ERROR(format, ...) FT_DEBUG_PRINT_E(FRTC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FRTC_INFO(format, ...) FT_DEBUG_PRINT_I(FRTC_DEBUG_TAG, format, ##__VA_ARGS__) -#define FRTC_DEBUG(format, ...) FT_DEBUG_PRINT_D(FRTC_DEBUG_TAG, format, ##__VA_ARGS__) - -#define FRTC_IS_LEAP_YEAR(year) ((((year) % 4 == 0 ) && ((year) %100 != 0))||( (year) % 400 == 0)) - -/** - * @name: FRtcCheckDateTime - * @msg: check if the date year, month, day, hour, ... is valid - * @return {u32} whether the date is valid - * @param {FRtcDate} *date, pointer to a FRtcDate structure that contains year, month and day - */ -static FError FRtcCheckDateTime(const FRtcDateTime *date_time) -{ - FASSERT(date_time != NULL); - u8 w_hour = date_time->hour; - u8 w_minute = date_time->minute; - u8 w_second = date_time->second; - u8 w_year = date_time->year; - u8 w_month = date_time->month; - u8 w_day = date_time->mday; - u8 days_of_month[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; /* 月份天数表 */ - - /* 闰年2月+1天 */ - if ((w_month == 2) && (FRTC_IS_LEAP_YEAR(w_year))) - { - days_of_month[w_month - 1] += 1; - } - - /* 判断月份日期是否合法 */ - if ((w_month > 12) || (w_month < 1) || (w_day > days_of_month[w_month - 1]) || (w_day < 1)) - { - FRTC_ERROR("Invalid input date: month: %d, day: %d", w_month, w_day); - return FRTC_ERR_DATE_INVALID; - } - - /* 判断时分秒是否合法 */ - if ((w_hour > 23) || (w_minute > 59) || (w_second > 59)) - { - FRTC_ERROR("Invalid input time: hour: %d, minute: %d, second: %d", - w_hour, w_minute, w_second); - return FRTC_ERR_TIME_INVALID; - } - - return FRTC_SUCCESS; -} - -/** - * @name: FRtcSetDateTime - * @msg: Set current time in FRtcDateTime - * @return {u32} whether the time setting is successful - * @param {FRtcCtrl} *pctrl, pointer to a FRtcCtrl structure that contains - * the configuration information for the specified rtc module. - * @param {FRtcDate} *date, pointer to a FRtcDate structure that contains year, month and day - * @param {FRtcTime} *time, pointer to a FRtcTime structure that contains hour, minute and second - */ -FError FRtcSetDateTime(FRtcCtrl *pctrl, const FRtcDateTime *date_time) -{ - FASSERT(pctrl != NULL); - FASSERT(date_time != NULL); - uintptr base_addr = pctrl->config.control_base_addr; - struct tm tm; - time_t t; - u32 ret = 0; - - ret = FRtcCheckDateTime(date_time); - if (ret != FRTC_SUCCESS) - { - return ret; - } - - tm.tm_sec = date_time->second; - tm.tm_min = date_time->minute; - tm.tm_hour = date_time->hour; - /* tm->tm_wday */ - tm.tm_mday = date_time->mday; - tm.tm_mon = (date_time->month - 1); - tm.tm_year = (date_time->year - 1900); - - t = mktime(&tm); - - FRTC_WRITE_AES_SEL(base_addr, FRTC_AES_SEL_COUNTER); - - /* write low 32 bit first */ - FRTC_WRITE_CLR_LOW(base_addr, 0); - - /* write low 32 bit next */ - FRTC_WRITE_CLR(base_addr, t); - - return FT_SUCCESS; -} - -/** - * @name: FRtcGetDateTime - * @msg: Get current time in FRtcDateTime - * @return {*} - * @param {FRtcCtrl} *pctrl - * @param {FRtcDateTime} *date_time - */ -FError FRtcGetDateTime(FRtcCtrl *pctrl, FRtcDateTime *date_time) -{ - FASSERT(pctrl != NULL); - FASSERT(date_time != NULL); - time_t seconds = 0; - struct tm *time_p; - - FRtcReadTimeStamp(pctrl, &seconds, NULL); - time_p = localtime(&seconds); - - date_time->year = time_p->tm_year + 1900; - date_time->month = time_p->tm_mon + 1; - date_time->mday = time_p->tm_mday; - date_time->hour = time_p->tm_hour; - date_time->minute = time_p->tm_min; - date_time->second = time_p->tm_sec; - - return FRTC_SUCCESS; -} - -/** - * @name: FRtcReadTimeStamp - * @msg: Read time stamp in seconds and milliseconds - * @return {*} none - * @param {FRtcCtrl} *pctrl - * @param {time_t} *sec_p - * @param {time_t} *msec_p - */ -void FRtcReadTimeStamp(FRtcCtrl *pctrl, time_t *sec_p, time_t *msec_p) -{ - FASSERT(pctrl != NULL); - time_t sec = 0; - u32 msec = 0; - u32 tick = 0; - - uintptr base_addr = pctrl->config.control_base_addr; - - /* tick = 1/32.768k = 0.03ms = 30us, delay more than 4 ticks */ - fsleep_microsec(FRTC_COUNTER_DELAY); - - /* write AES_SEL register, to read CCVR and CDR register */ - FRTC_WRITE_AES_SEL(base_addr, FRTC_AES_SEL_COUNTER); - - /* tick = 1/32.768k = 0.03ms = 30us, delay more than 4 ticks */ - fsleep_microsec(FRTC_COUNTER_DELAY); - - /* read high 32 bit first */ - sec = FRTC_READ_CCVR(base_addr); - - /* read low 32 bit next, The lower 15 bits are valid */ - tick = (FRTC_READ_CDR_LOW(base_addr) & FRTC_COUNTER_LB_MASK); - - /* convert 15 bits tick to milliseconds, count by 32.768k */ - msec = ((tick * 1000) >> FRTC_COUNTER_HB_OFFSET); - - if (sec_p) - { - *sec_p = sec; - } - - if (msec_p) - { - *msec_p = msec; - } - - return; -} - -/** - * @name: FRtcCfgInitialize - * @msg: Initialize RTC ctrl - * @return {*} - * @param {FRtcCtrl} *instance_p - * @param {FRtcConfig} *input_config_p - */ -FError FRtcCfgInitialize(FRtcCtrl *instance_p, const FRtcConfig *input_config_p) -{ - FASSERT(instance_p && input_config_p); - uintptr base_addr = instance_p->config.control_base_addr; - - instance_p->config = *input_config_p; - instance_p->is_ready = FT_COMPONENT_IS_READY; - - return FRTC_SUCCESS; -} - -/** - * @name: FRtcCfgDeInitialize - * @msg: DeInitialization function for the device instance - * @param {FRtcCtrl} *instance_p FRTC驱动控制数据 - * @return {*} - */ -void FRtcCfgDeInitialize(FRtcCtrl *pctrl) -{ - FASSERT(pctrl); - - pctrl->is_ready = 0; - memset(pctrl, 0, sizeof(*pctrl)); - - return; -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/rtc/frtc/frtc.h b/bsp/phytium/libraries/standalone/drivers/rtc/frtc/frtc.h deleted file mode 100644 index 870a8bf7b9..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/rtc/frtc/frtc.h +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: frtc.h - * Date: 2021-08-25 14:53:42 - * LastEditTime: 2021-08-26 09:02:51 - * Description:  This file is for user API definition - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 Wangxiaodong 2021/8/26 first commit - */ - -#ifndef DRIVERS_RTC_FRTC_H -#define DRIVERS_RTC_FRTC_H - -#include - -#include "ftypes.h" -#include "ferror_code.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -typedef struct -{ - uintptr control_base_addr; /* rtc控制寄存器基地址 */ - const char *instance_name; /* instance name */ -} FRtcConfig; /* rtc配置 */ - -typedef struct -{ - FRtcConfig config; /* rtc配置 */ - u32 is_ready; /* rtc初始化完成标志 */ -} FRtcCtrl; - -typedef struct -{ - u16 year; /*Specifies the RTC Date Year. - This parameter must be a number between Min_Data = 2000 and Max_Data = 2099 */ - u8 month; /*Specifies the RTC Date Month. - This parameter must be a number between Min_Data = 1 and Max_Data = 12 */ - u8 mday; /*Specifies the RTC day of Month. - This parameter must be a number between Min_Data = 1 and Max_Data = 31 */ - u8 hour; /*Specifies the RTC Time Hour. - This parameter must be a number between Min_Data = 0 and Max_Data = 23 */ - u8 minute; /*Specifies the RTC Time Minute. - This parameter must be a number between Min_Data = 0 and Max_Data = 59 */ - u8 second; /*Specifies the RTC Time Second. - This parameter must be a number between Min_Data = 0 and Max_Data = 59 */ -} FRtcDateTime; - -#define FRTC_SUCCESS FT_SUCCESS -#define FRTC_ERR_DATE_INVALID FT_MAKE_ERRCODE(ErrModBsp, ErrBspRtc, BIT(1)) -#define FRTC_ERR_TIME_INVALID FT_MAKE_ERRCODE(ErrModBsp, ErrBspRtc, BIT(2)) - -/* rtc config init */ -const FRtcConfig *FRtcLookupConfig(void); - -/* initialize rtc ctrl */ -FError FRtcCfgInitialize(FRtcCtrl *instance_p, const FRtcConfig *config_p); - -/* deinitialize rtc ctrl */ -void FRtcCfgDeInitialize(FRtcCtrl *pctrl); - -/* set rtc time */ -FError FRtcSetDateTime(FRtcCtrl *pctrl, const FRtcDateTime *date_time); - -/* get rtc time */ -FError FRtcGetDateTime(FRtcCtrl *pctrl, FRtcDateTime *date_time); - -/* read rtc time in secs and mesc */ -void FRtcReadTimeStamp(FRtcCtrl *pctrl, time_t *sec, time_t *msec); - -#ifdef __cplusplus -} -#endif - -#endif \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/rtc/frtc/frtc_g.c b/bsp/phytium/libraries/standalone/drivers/rtc/frtc/frtc_g.c deleted file mode 100644 index e7457ccce2..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/rtc/frtc/frtc_g.c +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: frtc_g.c - * Date: 2021-08-25 14:53:42 - * LastEditTime: 2021-08-26 09:01:26 - * Description:  This file is for rtc static configuration - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 Wangxiaodong 2021/8/26 first commit - */ - -#include "fparameters.h" -#include "frtc.h" - -/* default configs of rtc ctrl */ -const FRtcConfig FRtcConfigTbl = -{ - .control_base_addr = RTC_CONTROL_BASE, - .instance_name = "RTC" -}; - diff --git a/bsp/phytium/libraries/standalone/drivers/rtc/frtc/frtc_hw.c b/bsp/phytium/libraries/standalone/drivers/rtc/frtc/frtc_hw.c deleted file mode 100644 index 947077908b..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/rtc/frtc/frtc_hw.c +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: frtc_hw.c - * Date: 2021-08-25 14:53:42 - * LastEditTime: 2021-08-26 09:01:40 - * Description:  This file is for rtc register read/write operation - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 Wangxiaodong 2021/8/26 first commit - */ - -/***************************** Include Files *********************************/ - -#include "frtc_hw.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ diff --git a/bsp/phytium/libraries/standalone/drivers/rtc/frtc/frtc_hw.h b/bsp/phytium/libraries/standalone/drivers/rtc/frtc/frtc_hw.h deleted file mode 100644 index 4f1a4ebe4b..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/rtc/frtc/frtc_hw.h +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: frtc_hw.h - * Date: 2021-08-25 14:53:42 - * LastEditTime: 2021-08-26 09:01:54 - * Description:  This file is for rtc register definition - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 wangxiaodong 2021/8/26 first commit - */ - -#ifndef DRIVERS_RTC_FRTC_HW_H -#define DRIVERS_RTC_FRTC_HW_H - - -#include "fkernel.h" -#include "ftypes.h" -#include "fio.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/* Rtc register definitions */ - -#define FRTC_CMR 0x04 -#define FRTC_AES_SEL 0x08 -#define FRTC_AES_SEL_COUNTER 0x100 - -#define FRTC_CCR 0x0C -#define FRTC_STAT 0x10 -#define FRTC_RSTAT 0x14 -#define FRTC_EOI 0x18 -#define FRTC_VER 0x1C -#define FRTC_CDR_LOW 0x20 -#define FRTC_CCVR 0x24 -#define FRTC_CLR_LOW 0x28 -#define FRTC_CLR 0x2c - -#define FRTC_COUNTER_HB_OFFSET 15 -#define FRTC_COUNTER_LB_MASK 0x7fff -#define FRTC_COUNTER_DELAY 150 - -/***************** Macros (Inline Functions) Definitions *********************/ - -/** - * @name: RTC_READ_REG32 - * @msg: 读取RTC寄存器 - * @param {u32} addr 定时器的基地址 - * @param {u32} reg_offset 定时器的寄存器的偏移 - * @return {u32} 寄存器参数 - */ -#define FRTC_READ_REG32(addr, reg_offset) FtIn32((addr) + (u32)reg_offset) - -/** - * @name: RTC_READ_REG64 - * @msg: 读取RTC寄存器 - * @param {u32} addr 定时器的基地址 - * @param {u32} reg_offset 定时器的寄存器的偏移 - * @return {u64} 寄存器参数 - */ -#define FRTC_READ_REG64(addr, reg_offset) FtIn64((addr) + (u64)reg_offset) - -/** - * @name: RTC_WRITE_REG32 - * @msg: 写入RTC寄存器 - * @param {u32} addr 定时器的基地址 - * @param {u32} reg_offset 定时器的寄存器的偏移 - * @param {u32} reg_value 写入寄存器参数 - * @return {void} - */ -#define FRTC_WRITE_REG32(addr, reg_offset, reg_value) FtOut32((addr) + (u32)reg_offset, (u32)reg_value) - -#define FRTC_WRITE_AES_SEL(addr, regVal) FRTC_WRITE_REG32((addr), FRTC_AES_SEL, (regVal)) -#define FRTC_WRITE_CLR_LOW(addr, regVal) FRTC_WRITE_REG32((addr), FRTC_CLR_LOW, (u32)(regVal)) -#define FRTC_WRITE_CLR(addr, regVal) FRTC_WRITE_REG32((addr), FRTC_CLR, (u32)(regVal)) - -#define FRTC_READ_CDR_LOW(addr) FRTC_READ_REG32((addr), FRTC_CDR_LOW) -#define FRTC_READ_CCVR(addr) FRTC_READ_REG32((addr), FRTC_CCVR) - - -#ifdef __cplusplus -} -#endif - -#endif \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/rtc/frtc/frtc_intr.c b/bsp/phytium/libraries/standalone/drivers/rtc/frtc/frtc_intr.c deleted file mode 100644 index 72b63b241a..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/rtc/frtc/frtc_intr.c +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: frtc_intr.c - * Date: 2021-08-25 14:53:42 - * LastEditTime: 2021-08-26 09:02:07 - * Description:  This file is for rtc interrupt operation - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 Wangxiaodong 2021/8/26 first commit - */ - -#include "fparameters.h" -#include "fassert.h" -#include "frtc.h" -#include "finterrupt.h" - - diff --git a/bsp/phytium/libraries/standalone/drivers/rtc/frtc/frtc_sinit.c b/bsp/phytium/libraries/standalone/drivers/rtc/frtc/frtc_sinit.c deleted file mode 100644 index 693bdde77c..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/rtc/frtc/frtc_sinit.c +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: frtc_sinit.c - * Date: 2021-08-25 14:53:42 - * LastEditTime: 2021-08-26 09:02:24 - * Description:  This file is for rtc static initialization functionality - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 Wangxiaodong 2021/8/26 first commit - */ - -/***************************** Include Files *********************************/ - -#include "frtc.h" - -extern const FRtcConfig FRtcConfigTbl; -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ - -/*****************************************************************************/ -/** - * @name: RtcLookupConfig - * @msg: get rtc configs by id - * @return {*} - * @param {u32} instanceId, id of rtc ctrl - */ -const FRtcConfig *FRtcLookupConfig(void) -{ - const FRtcConfig *pconfig = NULL; - - pconfig = &FRtcConfigTbl; - - return (const FRtcConfig *)pconfig; -} diff --git a/bsp/phytium/libraries/standalone/drivers/sata/Kconfig b/bsp/phytium/libraries/standalone/drivers/sata/Kconfig deleted file mode 100644 index f2c51a66d4..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/sata/Kconfig +++ /dev/null @@ -1,9 +0,0 @@ -menu "FSATA Configuration" - config ENABLE_FSATA - bool - prompt "Use FSATA" - default n - -endmenu - - diff --git a/bsp/phytium/libraries/standalone/drivers/sata/fsata/fsata.c b/bsp/phytium/libraries/standalone/drivers/sata/fsata/fsata.c deleted file mode 100644 index 54cb0bd5da..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/sata/fsata/fsata.c +++ /dev/null @@ -1,958 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fsata.c - * Date: 2022-02-10 14:55:11 - * LastEditTime: 2022-02-18 09:05:09 - * Description:  This file is for sata ctrl function implementation - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 wangxiaodong 2022/2/10 first release - * 1.1 wangxiaodong 2022/9/9 improve functions - * 1.2 wangxiaodong 2022/10/21 improve functions - */ - -#include -#include -#include "ftypes.h" -#include "fassert.h" -#include "fcache.h" -#include "fdebug.h" -#include "fsleep.h" -#include "fswap.h" -#include "fsata.h" -#include "fsata_hw.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ - -/************************** Variable Definitions *****************************/ - -#define FSATA_DEBUG_TAG "SATA" -#define FSATA_ERROR(format, ...) FT_DEBUG_PRINT_E(FSATA_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSATA_WARN(format, ...) FT_DEBUG_PRINT_W(FSATA_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSATA_INFO(format, ...) FT_DEBUG_PRINT_I(FSATA_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSATA_DEBUG(format, ...) FT_DEBUG_PRINT_D(FSATA_DEBUG_TAG, format, ##__VA_ARGS__) - -#ifndef MAX_SATA_BLOCKS_READ_WRITE - #define MAX_SATA_BLOCKS_READ_WRITE 0x80 -#endif - -/* Maximum timeouts for each event */ -#define WAIT_MS_RESET 1000 -#define WAIT_MS_TFD 20000 /* task file data transfer is not busy */ -#define WAIT_MS_DATAIO 20000 -#define WAIT_MS_LINKUP 200 - - -static FError FSataAhciDataIO(FSataCtrl *instance_p, u8 port, u8 *fis, - int fis_len, u8 *buf, int buf_len, boolean is_ncq, boolean is_write); - -/** - * @name: FSataAhciPortBase - * @msg: get port x base address - * @param {uintptr} base_address FSata base address - * @param {u32} port sata port number - * @return {uintptr} port x base address - */ -static uintptr FSataAhciPortBase(uintptr base_address, u32 port) -{ - return (base_address + 0x100 + (port * 0x80)); -} - -/** - * @name: FSataWaitCmdCompleted - * @msg: read register status and wait command execution is completed - * @param {uintptr} reg FSata register - * @param {int} timeout_msec wait timeout value - * @param {u32} sign register status flag bit - * @return {int} return 0 if command execute success, return -1 if command execute timeout - */ -static int FSataWaitCmdCompleted(uintptr reg, int timeout_msec, u32 sign) -{ - int i; - - for (i = 0; (FtIn32(reg)& sign) && (i < timeout_msec); i++) - { - fsleep_millisec(1); - } - - return (i < timeout_msec) ? 0 : -1; -} - -/** - * @name: FSataAhciLinkUp - * @msg: check sata ahci port link status - * @param {FSataCtrl} *instance_p, pointer to the FSataCtrl instance. - * @param {u8} port, port number - * @return {int} return FSATA_SUCCESS if successful, return others if failed - */ -static FError FSataAhciLinkUp(FSataCtrl *instance_p, u8 port) -{ - u32 reg_val; - int i = 0; - uintptr port_base_addr = instance_p->port[port].port_base_addr; - - /* - * Bring up SATA link. - * SATA link bringup time is usually less than 1 ms; only very - * rarely has it taken between 1-2 ms. Never seen it above 2 ms. - */ - while (i < WAIT_MS_LINKUP) - { - reg_val = FSATA_READ_REG32(port_base_addr, FSATA_PORT_SCR_STAT); - if ((reg_val & FSATA_PORT_SCR_STAT_DET_MASK) == FSATA_PORT_SCR_STAT_DET_PHYRDY) - { - return FSATA_SUCCESS; - } - fsleep_microsec(1000); - i++; - } - - return FSATA_ERR_TIMEOUT; -} - -/** - * @name: FSataAhciInquiry - * @msg: inquiry sata information - * @param {FSataCtrl} *instance_p, pointer to the FSataCtrl instance. - * @param {u8} port, port number - * @return {FError} return FSATA_SUCCESS if successful, return others if failed - */ -static FError FSataAhciInquiry(FSataCtrl *instance_p, u8 port) -{ - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - FError ret = FSATA_SUCCESS; - u16 *idbuf; - - /* 64位需要预留给内存池更大的空间 */ - static u16 tmpid[FSATA_ID_WORDS] __attribute__((aligned(128))) = {0}; - - u8 fis[20]; - /* Preset the FIS */ - memset(fis, 0, sizeof(fis)); - - fis[0] = FSATA_FIS_REG_HOST_TO_DEVICE; /* Register Host to Device FIS */ - fis[1] = FSATA_FIS_REG_HOST_TO_DEVICE_C; - fis[2] = FSATA_CMD_IDENTIFY_DEVICE; /* Command byte. */ - ret = FSataAhciDataIO(instance_p, port, fis, sizeof(fis), - (u8 *)tmpid, FSATA_ID_WORDS * 2, FALSE, FALSE); - if (ret != FSATA_SUCCESS) - { - FSATA_ERROR("FSataAhciInquiry: command failure. ret = %#x.", ret); - return FSATA_ERR_OPERATION; - } - - instance_p->ataid[port] = tmpid; - - return FSATA_SUCCESS; -} - -/** - * @name: FSataIdentityCopy - * @msg: parse sata Identity information to vendor, product, revision - * @param {unsigned char } *dest, pointer to the destination address. - * @param {unsigned char } *src, pointer to the source address. - * @param {u32} len, parse length. - * @return {void} - */ -static void FSataIdentityCopy(unsigned char *dest, unsigned char *src, u32 len) -{ - FASSERT(dest != NULL); - FASSERT(src != NULL); - FASSERT(len != 0); - - u32 start, end; - - start = 0; - while (start < len) - { - if (src[start] != 0x20)/* character is not sapce */ - { - break; - } - start++; - } - end = len - 1; - while (end > start) - { - if (src[end] != 0x20)/* character is not sapce */ - { - break; - } - end--; - } - for (; start <= end; start++) - { - *dest ++ = src[start]; - } - *dest = '\0'; -} - -/** - * @name: FSataIdToSectors - * @msg: parse sata Identity information to capacity. - * @param {u16} *id, pointer to Identity information . - * @return {u64} capacity - */ -static u64 FSataIdToSectors(u16 *id) -{ - if (FSataIdHasLba(id)) - { - if (FSataIdHasLba48(id)) - { - return FSATA_ID_U64(id, FSATA_ID_LBA48_SECTORS); - } - else - { - return (u64)(FSATA_ID_U32(id, FSATA_ID_LBA_SECTORS)); - } - } - else - { - return 0; - } -} - -/** - * @name: FSataIdStrCopy - * @msg: swap sata Identity information - * @param {u16} *dest, pointer to the destination address. - * @param {u16} *src, pointer to the source address. - * @param {int} len, swap length. - * @return {void} - */ -static void FSataIdStrCopy(u16 *dest, u16 *src, int len) -{ - int i; - for (i = 0; i < len / 2; i++) - { - dest[i] = __swab16(src[i]); - } -} - -/** - * @name: FSataBlockToMB - * @msg: Converts the number of blocks in 512 byte to 0.1MB - * @param {unsigned long} block_count, block count. - * @param {unsigned long} mul_by, multiple value. - * @param {int} div_by, divided value. - * @return {unsigned long} convert value - */ -static unsigned long FSataBlockToMB(unsigned long block_count, unsigned long mul, int div) -{ - unsigned long bc_quot, bc_rem; - - /* x * m / d == x / d * m + (x % d) * m / d */ - bc_quot = (block_count >> div); /* upper > div bit */ - bc_rem = block_count - (bc_quot << div); /* low div bit */ - return (bc_quot * mul + ((bc_rem * mul) >> div)); -} - -/** - * @name: FSataInfoPrint - * @msg: printf sata information - * @param {FSataInfo} *dev_desc, pointer to the FSata information. - * @return {void} - */ -void FSataInfoPrint(FSataInfo *dev_desc) -{ - unsigned long lba512; /* number of blocks if 512bytes block size */ - - if (dev_desc->type == FSATA_DEV_TYPE_UNKNOWN) - { - FSATA_INFO("Not available."); - return; - } - - if (dev_desc->if_type == FSATA_IF_TYPE_SCSI) - { - FSATA_INFO("Vendor: %s Prod: %s Rev: %s", - dev_desc->vendor, - dev_desc->product, - dev_desc->revision); - } - - if (dev_desc->type == FSATA_DEV_TYPE_HARDDISK) - { - FSATA_INFO("Type: Hard Disk"); - } - - if ((dev_desc->lba > 0L) && (dev_desc->blksz > 0L)) - { - unsigned long mb, mb_quot, mb_rem, gb, gb_quot, gb_rem; - unsigned long lba; - - lba = dev_desc->lba; - - lba512 = (lba * (dev_desc->blksz / 512)); - /* round to 1 digit */ - /* 2048 = (1024 * 1024) / 512 MB */ - mb = FSataBlockToMB(lba512, 10, 11); - - dev_desc->lba512 = lba512; - - FSATA_INFO("lba512=%lu, mb=%lu", lba512, mb); - - mb_quot = mb / 10; - mb_rem = mb - (10 * mb_quot); - - gb = mb / 1024; - gb_quot = gb / 10; - gb_rem = gb - (10 * gb_quot); - - FSATA_INFO("Capacity: %lu.%lu MB = %lu.%lu GB (%lu x %lu)", - mb_quot, mb_rem, - gb_quot, gb_rem, - (unsigned long)lba, - dev_desc->blksz); - } - else - { - FSATA_INFO("Capacity: not available."); - } -} - -/** - * @name: FSataAhciReadCapacity - * @msg: get sata capacity by parse instance_p ataid - * @param {FSataCtrl} *instance_p, pointer to the FSataCtrl instance. - * @param {u8} port, port number - * @param {unsigned long} *capacity, pointer to capacity value - * @param {unsigned long} *blksz, pointer to block size - * @return {FError} return FSATA_SUCCESS if successful, return others if failed - */ -static FError FSataAhciReadCapacity(FSataCtrl *instance_p, u8 port, - unsigned long *capacity, unsigned long *blksz) -{ - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - FError ret = FSATA_SUCCESS; - - u32 transfer_size; /* number of bytes per iteration */ - - if (!instance_p->ataid[port]) - { - FSATA_ERROR("READ CAPACITY10 command failure. " - "\tNo ATA info!\n" - "\tPlease run command INQUIRY first!"); - return FSATA_ERR_OPERATION; - } - - u64 cap64 = FSataIdToSectors(instance_p->ataid[port]); - if (cap64 > 0x100000000ULL) - { - cap64 = 0xffffffff; - } - - *capacity = (unsigned long)(cap64); - if (*capacity != 0xffffffff) - { - /* Read capacity (10) was sufficient for this drive. */ - *blksz = 512; - return FSATA_SUCCESS; - } - else - { - FSATA_DEBUG("Should read capacity 16?"); - } - - return FSATA_SUCCESS; -} - -/** - * @name: FSataAhciReadInfo - * @msg: get sata information - * @param {FSataCtrl} *instance_p, pointer to the FSataCtrl instance. - * @param {u8} port, port number - * @return {FError} return FSATA_SUCCESS if read successful, return others if read failed - */ -FError FSataAhciReadInfo(FSataCtrl *instance_p, u8 port) -{ - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - uintptr base_addr = instance_p->config.base_addr; - FError ret = FSATA_SUCCESS; - - u16 *idbuf; - unsigned long capacity, blksz; - unsigned char info_data[50]; - memset(info_data, 0, sizeof(info_data)); - - ret = FSataAhciInquiry(instance_p, port); - if (ret != FSATA_SUCCESS) - { - FSATA_ERROR("FSataAhciInquiry!"); - return FSATA_ERR_OPERATION; - } - - /* Parse SATA Information */ - idbuf = instance_p->ataid[port]; - FSataIdStrCopy((u16 *)&info_data[16], &idbuf[FSATA_ID_PROD], 16); - FSataIdStrCopy((u16 *)&info_data[32], &idbuf[FSATA_ID_FW_REV], 4); - - /* is ata device */ - if (!((__swab16(idbuf[0]) & FSATA_ID_ATA_DEVICE))) - { - instance_p->port[port].dev_info.type = FSATA_DEV_TYPE_HARDDISK; - memcpy(&info_data[8], "ATA ", 8); /* copy 8 bytes */ - } - else - { - instance_p->port[port].dev_info.type = FSATA_DEV_TYPE_UNKNOWN; - } - - /* get info for this device */ - FSataIdentityCopy((unsigned char *)instance_p->port[port].dev_info.vendor, &info_data[8], 8); - FSataIdentityCopy((unsigned char *)instance_p->port[port].dev_info.product, &info_data[16], 16); - FSataIdentityCopy((unsigned char *)instance_p->port[port].dev_info.revision, &info_data[32], 4); - - /* get sata capacity by parse ataid */ - ret = FSataAhciReadCapacity(instance_p, port, &capacity, &blksz); - if (ret != FSATA_SUCCESS) - { - FSATA_ERROR("FSataAhciReadCapacity error!"); - return FSATA_ERR_OPERATION; - } - - instance_p->port[port].dev_info.lba = capacity; - instance_p->port[port].dev_info.blksz = blksz; - instance_p->port[port].dev_info.if_type = FSATA_IF_TYPE_SCSI; - - FSataInfoPrint(&(instance_p->port[port].dev_info)); - - return ret; -} - -/** - * @name: FSataAhciReset - * @msg: reset ahci / hba(host bus adapter) - * @param {FSataCtrl} *instance_p, pointer to the FSataCtrl instance - * @return {FError} return FSATA_SUCCESS if successful, return others if failed - */ -static FError FSataAhciReset(FSataCtrl *instance_p) -{ - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - int i = WAIT_MS_RESET; - uintptr base_addr = instance_p->config.base_addr; - - u32 reg_val = 0; - - /* read host control register and reset */ - reg_val = FSATA_READ_REG32(base_addr, FSATA_HOST_CTL); - - if ((reg_val & FSATA_HOST_RESET) == 0) - { - FSATA_SETBIT(base_addr, FSATA_HOST_CTL, FSATA_HOST_RESET); - } - - /* reset must complete within 1 millisecond, or the hardware should be considered fried.*/ - do - { - fsleep_microsec(1000); - reg_val = FSATA_READ_REG32(base_addr, FSATA_HOST_CTL); - i--; - } - while ((i > 0) && (reg_val & FSATA_HOST_RESET)); - - if (i == 0) - { - FSATA_ERROR("Controller reset failed (0x%x).", reg_val); - return FSATA_ERR_TIMEOUT; - } - - return FSATA_SUCCESS; -} - -/** - * @name: FSataAhciInit - * @msg: init ahci / hba(host bus adapter) - * @param {FSataCtrl} *instance_p, pointer to the FSataCtrl instance - * @return {FError} return FSATA_SUCCESS if successful, return others if failed - */ -FError FSataAhciInit(FSataCtrl *instance_p) -{ - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - uintptr base_addr = instance_p->config.base_addr; - FError ret = FSATA_SUCCESS; - u32 i; - uintptr port_base_addr = 0; /* ahci port x base address */ - u32 reg_val = 0; - u32 port_num = 0; - - /* reset host control */ - ret = FSataAhciReset(instance_p); - if (ret != FSATA_SUCCESS) - { - return ret; - } - - /* ahci enable */ - FSATA_WRITE_REG32(base_addr, FSATA_HOST_CTL, FSATA_HOST_AHCI_EN); - FSATA_READ_REG32(base_addr, FSATA_HOST_CTL); - - /* read cap.np, set the ports bit which are available for software to use. */ - port_num = FSATA_READ_REG32(base_addr, FSATA_HOST_CAP) & FSATA_HOST_CAP_NP_MASK; - FSATA_WRITE_REG32(base_addr, FSATA_HOST_PORTS_IMPL, FSATA_HOST_PORTS_IMPL_MASK(port_num)); - - /* set instance_p paramameters */ - instance_p->n_ports = port_num + 1; - instance_p->port_map = FSATA_READ_REG32(base_addr, FSATA_HOST_PORTS_IMPL); - FSATA_DEBUG("port_map 0x%x n_ports %d", instance_p->port_map, instance_p->n_ports); - - for (i = 0; i < instance_p->n_ports; i++) - { - if (!(instance_p->port_map & BIT(i))) - { - continue; - } - /* set ports base address */ - instance_p->port[i].port_base_addr = FSataAhciPortBase(base_addr, i); - port_base_addr = instance_p->port[i].port_base_addr; - - /* make sure port is not active */ - reg_val = FSATA_READ_REG32(port_base_addr, FSATA_PORT_CMD); - if (reg_val & (FSATA_PORT_CMD_LIST_ON | FSATA_PORT_CMD_FIS_ON | - FSATA_PORT_CMD_FIS_RX | FSATA_PORT_CMD_START)) - { - FSATA_DEBUG("Port %d is active, reg = %#x. Deactivating.", i, reg_val); - reg_val &= ~(FSATA_PORT_CMD_LIST_ON | FSATA_PORT_CMD_FIS_ON | - FSATA_PORT_CMD_FIS_RX | FSATA_PORT_CMD_START); - FSATA_WRITE_REG32(port_base_addr, FSATA_PORT_CMD, reg_val); - - /* spec says 500 msecs for each bit, so this is slightly incorrect.*/ - fsleep_millisec(500); - } - - /* Add the spinup command to whatever mode bits may - * already be on in the command register, set not support staggered spin-up */ - reg_val = FSATA_READ_REG32(port_base_addr, FSATA_PORT_CMD); - reg_val |= FSATA_PORT_CMD_SPIN_UP; - FSATA_WRITE_REG32(port_base_addr, FSATA_PORT_CMD, reg_val); - - /* check sata port is linked */ - ret = FSataAhciLinkUp(instance_p, i); - if (ret) - { - FSATA_DEBUG("sata host %d, port %d link timeout.", instance_p->config.instance_id, i); - continue; - } - else - { - FSATA_DEBUG("sata host %d , port %d link ok.", instance_p->config.instance_id, i) ; - } - - /* Clear error status */ - reg_val = FSATA_READ_REG32(port_base_addr, FSATA_PORT_SCR_ERR); - if (reg_val) - { - FSATA_WRITE_REG32(port_base_addr, FSATA_PORT_SCR_ERR, reg_val); - } - - /* Device presence detected but Phy communication not established, retry once more */ - reg_val = FSATA_READ_REG32(port_base_addr, FSATA_PORT_SCR_STAT) & FSATA_PORT_SCR_STAT_DET_MASK; - if (reg_val == FSATA_PORT_SCR_STAT_DET_COMINIT) - { - FSATA_INFO("sata link %d down, retrying...", i); - i--; - continue; - } - - /* Clear error status */ - reg_val = FSATA_READ_REG32(port_base_addr, FSATA_PORT_SCR_ERR); - if (reg_val) - { - FSATA_WRITE_REG32(port_base_addr, FSATA_PORT_SCR_ERR, reg_val); - } - - /* clear port irq status */ - reg_val = FSATA_READ_REG32(port_base_addr, FSATA_PORT_IRQ_STAT); - if (reg_val) - { - FSATA_WRITE_REG32(port_base_addr, FSATA_PORT_IRQ_STAT, reg_val); - } - - /* clear host corresponding port interrupt status register */ - FSATA_WRITE_REG32(base_addr, FSATA_HOST_IRQ_STAT, BIT(i)); - - /* register linkup ports */ - reg_val = FSATA_READ_REG32(port_base_addr, FSATA_PORT_SCR_STAT); - if ((reg_val & FSATA_PORT_SCR_STAT_DET_MASK) == FSATA_PORT_SCR_STAT_DET_PHYRDY) - { - instance_p->link_port_map |= BIT(i); - } - } - if (instance_p->link_port_map == 0) - { - FSATA_ERROR("Sata ports link failed.\n"); - return FSATA_UNKNOWN_DEVICE; - } - - /* host interrupt enable */ - reg_val = FSATA_READ_REG32(base_addr, FSATA_HOST_CTL); - FSATA_WRITE_REG32(base_addr, FSATA_HOST_CTL, reg_val | FSATA_HOST_IRQ_EN); - - return FSATA_SUCCESS; -} - -/** - * @name: FSataAhciPortStart - * @msg: init ahci port, allocate Port Memory Usage - * @param {FSataCtrl} *instance_p, pointer to the FSataCtrl instance - * @param {u8} port, port number - * @param {uintptr} mem, Memory start address allocated to port - * @return {FError} return FSATA_SUCCESS if successful, return others if failed - */ -FError FSataAhciPortStart(FSataCtrl *instance_p, u8 port, uintptr mem) -{ - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - FASSERT(mem); - uintptr base_addr = instance_p->config.base_addr; - - FError ret = FSATA_SUCCESS; - FSataAhciPorts *port_info = &(instance_p->port[port]); - uintptr port_base_addr = port_info->port_base_addr; - - u32 reg_val = FSATA_READ_REG32(port_base_addr, FSATA_PORT_SCR_STAT); - if ((reg_val & FSATA_PORT_SCR_STAT_DET_MASK) != FSATA_PORT_SCR_STAT_DET_PHYRDY) - { - FSATA_ERROR("No Link on host %d port %d!", instance_p->config.instance_id, port); - return FSATA_ERR_OPERATION; - } - - memset((void *)mem, 0, FSATA_AHCI_PORT_PRIV_DMA_SZ); - - /* First item in chunk of DMA memory: 32 command lists, 32 bytes each in size */ - port_info->cmd_list = (FSataAhciCommandList *)(mem); - mem += FSATA_AHCI_CMD_LIST_HEADER_SIZE * FSATA_AHCI_CMD_LIST_HEADER_NUM; - - /* Second item: Received-FIS area */ - port_info->rx_fis = (FSataAhciRecvFis *)(mem); - mem += FSATA_AHCI_RX_FIS_SZ; - - /* Third item: data area for storing a single command and its scatter-gather table */ - port_info->cmd_tbl_base_addr = (uintptr)mem; - mem += FSATA_AHCI_CMD_TABLE_HEADER_SIZE; - - /* command table prdt */ - port_info->cmd_tbl_prdt = (FSataAhciCommandTablePrdt *)mem; - - /* set ahci port registers */ - FSATA_WRITE_REG32(port_base_addr, FSATA_PORT_LST_ADDR, - (uintptr)port_info->cmd_list & FSATA_PORT_CMD_LIST_ADDR_MASK); - - FSATA_WRITE_REG32(port_base_addr, FSATA_PORT_LST_ADDR_HI, 0); - - FSATA_WRITE_REG32(port_base_addr, FSATA_PORT_FIS_ADDR, - (uintptr)port_info->rx_fis & FSATA_PORT_CMD_FIS_ADDR_MASK); - - FSATA_WRITE_REG32(port_base_addr, FSATA_PORT_FIS_ADDR_HI, 0); - - FSATA_WRITE_REG32(port_base_addr, FSATA_PORT_CMD, FSATA_PORT_CMD_ICC_ACTIVE | FSATA_PORT_CMD_FIS_RX | - FSATA_PORT_CMD_POWER_ON | FSATA_PORT_CMD_SPIN_UP | FSATA_PORT_CMD_START); - - /* - * Make sure interface is not busy based on error and status - * information from task file data register before proceeding - */ - if (FSataWaitCmdCompleted(port_base_addr + FSATA_PORT_TFDATA, WAIT_MS_TFD, FSATA_BUSY)) - { - FSATA_DEBUG("Timeout exit!"); - return FSATA_ERR_TIMEOUT; - } - - instance_p->private_data |= BIT(port); - - return ret; -} - -/** - * @name: FSataAhciFillCmdTablePrdt - * @msg: allocate ahci command table prdt information - * @param {FSataCtrl} *instance_p, pointer to the FSataCtrl instance - * @param {u8} port, port number - * @param {unsigned char} *buffer, data buffer address - * @param {int} buf_len, data length - * @return {int} return item_count if successful, return -1 if failed - */ -static int FSataAhciFillCmdTablePrdt(FSataCtrl *instance_p, u8 port, - unsigned char *buf, int buf_len) -{ - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - - FSataAhciPorts *port_info = &(instance_p->port[port]); - FSataAhciCommandTablePrdt *command_table_prdt = port_info->cmd_tbl_prdt; - int item_count; - int i; - - item_count = ((buf_len - 1) / MAX_DATA_BYTE_COUNT) + 1; - if (item_count > FSATA_AHCI_PRTD_ITEM_NUM) - { - FSATA_ERROR("Too much command table prdt items %d!", item_count); - return -1; - } - - for (i = 0; i < item_count; i++) - { - command_table_prdt->addr_low = ((unsigned long) buf + i * MAX_DATA_BYTE_COUNT); - command_table_prdt->addr_high = 0; - command_table_prdt->data_byte = (0x3fffff & - (buf_len < MAX_DATA_BYTE_COUNT - ? (buf_len - 1) - : (MAX_DATA_BYTE_COUNT - 1))); - command_table_prdt++; - buf_len -= MAX_DATA_BYTE_COUNT; - } - - return item_count; -} - -/** - * @name: FSataAhciFillCmdList - * @msg: allocate ahci command list information - * @param {FSataAhciPorts} *port_info is a pointer to the FSataAhciPorts instance - * @param {u32} description_info, prdtl+flag+cfl - * @return {void} - */ -static void FSataAhciFillCmdList(FSataAhciPorts *port_info, u32 description_info) -{ - FASSERT(port_info != NULL); - - port_info->cmd_list->description_info = description_info; - port_info->cmd_list->status = 0; - port_info->cmd_list->tbl_addr = ((u32)port_info->cmd_tbl_base_addr & FSATA_PORT_CMD_TABLE_ADDR_MASK); -#ifdef __aarch64__ - port_info->cmd_list->tbl_addr_hi = (u32)(((port_info->cmd_tbl_base_addr) >> 16) >> 16); -#endif -} - -/** - * @name: FSataAhciDataIO - * @msg: transfer ahci command fis and data buffer - * @param {FSataCtrl} *instance_p, pointer to the FSataCtrl instance - * @param {u8} port number - * @param {u8} *fis, command fis buffer - * @param {int} fis_len, command fis length - * @param {u8} *buf, data read/write buffer - * @param {int} buf_len, data length - * @param {u8} is_write, 0-read, 1-write - * @return {FError} return FSATA_SUCCESS if successful, return others if failed - */ -static FError FSataAhciDataIO(FSataCtrl *instance_p, u8 port, u8 *fis, - int fis_len, u8 *buf, int buf_len, boolean is_ncq, boolean is_write) -{ - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - FASSERT(fis != NULL); - - FSataAhciPorts *port_info = &(instance_p->port[port]); - - uintptr base_addr = instance_p->config.base_addr; - uintptr port_base_addr = instance_p->port[port].port_base_addr; - - if (port >= instance_p->n_ports) - { - FSATA_DEBUG("Invalid port number %d.", port); - return FSATA_ERR_INVALID_PARAMETER; - } - - u32 reg_val = FSATA_READ_REG32(port_base_addr, FSATA_PORT_SCR_STAT); - if ((reg_val & FSATA_PORT_SCR_STAT_DET_MASK) != FSATA_PORT_SCR_STAT_DET_PHYRDY) - { - FSATA_ERROR("No Link on host %d port %d!", instance_p->config.instance_id, port); - return FSATA_ERR_OPERATION; - } - - /* copy fis command to command table CFIS */ - memcpy((unsigned char *)port_info->cmd_tbl_base_addr, fis, fis_len); - - /* copy data buffer address to command table prdt item */ - int prdt_length = FSataAhciFillCmdTablePrdt(instance_p, port, buf, buf_len); - if (prdt_length == -1) - { - FSATA_ERROR("FSataAhciFillCmdTablePrdt failed, buf_len = %d.\n", buf_len); - return FSATA_ERR_INVALID_PARAMETER; - } - - /* command list DW0: PRDTL(buf len) + W/R + CFL(fis len, 4 Byte(Dword) aligned) */ - u32 description_info = (prdt_length << 16) | (is_write << 6) | (fis_len >> 2); - - /* copy data to command list struct */ - FSataAhciFillCmdList(port_info, description_info); - - FCacheDCacheFlushRange((unsigned long)port_info->cmd_list, FSATA_AHCI_PORT_PRIV_DMA_SZ); - FCacheDCacheFlushRange((unsigned long)buf, (unsigned long)buf_len); - - /* set tag bit in SACT register before write CI register when use native cmd */ - if (is_ncq == TRUE) - { - FSATA_WRITE_REG32(port_base_addr, FSATA_PORT_SCR_ACT, FSATA_PORT_SCR_ACT_ENABLE); - } - - /* send cmd */ - FSATA_WRITE_REG32(port_base_addr, FSATA_PORT_CMD_ISSUE, FSATA_PORT_CMD_ISSUE_ENABLE); - - if (FSataWaitCmdCompleted(port_base_addr + FSATA_PORT_CMD_ISSUE, WAIT_MS_DATAIO, FSATA_PORT_CMD_ISSUE_ENABLE)) - { - FSATA_ERROR("Timeout exit!"); - return FSATA_ERR_TIMEOUT; - } - - return FSATA_SUCCESS; -} - -/** - * @name: FSataReadWrite - * @msg: read or write sata block data, choose if use ncq - * @param {FSataCtrl} *instance_p, pointer to the FSataCtrl instance - * @param {u8} port, port number - * @param {u32} start, start block - * @param {u32} blk_cnt, block count - * @param {u8} *buffer, data buffer - * @param {boolean} is_ncq, FALSE-not support ncq, TRUE-support ncq - * @param {boolean} is_write, read or write, FALSE-read, TRUE-write - * @return {FError} return FSATA_SUCCESS if successful, return others if failed - */ -FError FSataReadWrite(FSataCtrl *instance_p, u8 port, u32 start, - u16 blk_cnt, u8 *buffer, boolean is_ncq, boolean is_write) -{ - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - FASSERT(blk_cnt); - uintptr base_addr = instance_p->config.base_addr; - FError ret = FSATA_SUCCESS; - - u16 now_blocks; /* number of blocks per iteration */ - u32 transfer_size; /* number of bytes per iteration */ - - u8 fis[20]; - /* Preset the FIS */ - memset(fis, 0, sizeof(fis)); - - fis[0] = FSATA_FIS_REG_HOST_TO_DEVICE;/* fis type */ - fis[1] = FSATA_FIS_REG_HOST_TO_DEVICE_C; /* C and PM Port */ - if (is_ncq == FALSE) - { - fis[2] = is_write ? FSATA_CMD_WRITE_EXT : FSATA_CMD_READ_EXT; /* Command */ - } - else - { - fis[2] = is_write ? FSATA_CMD_FPDMA_WRITE : FSATA_CMD_FPDMA_READ; /* Command */ - } - - while (blk_cnt) - { - now_blocks = min((u16)MAX_SATA_BLOCKS_READ_WRITE, blk_cnt); - transfer_size = FSATA_SECT_SIZE * now_blocks; - if (is_ncq == FALSE) - { - /* FEATURE Reserved */ - fis[3] = 0; /* features 7:0 */ - fis[11] = 0; /* features 15:8 */ - - /* LBA of first logical sector to be transferred */ - fis[4] = ((start >> 0) & 0xff); /* lba 7:0 */ - fis[5] = ((start >> 8) & 0xff); /* lba 15:8 */ - fis[6] = ((start >> 16) & 0xff); /* lba 23:16 */ - fis[8] = ((start >> 24) & 0xff); /* lba 31:24 */ - - /* device reg, bit 6 Shall be set to one in read command */ - fis[7] = FSATA_CMD_EXT_DEVICE; - - /* The number of logical sectors to be transferred. */ - fis[12] = (now_blocks >> 0) & 0xff;/* count 7:0 */ - fis[13] = (now_blocks >> 8) & 0xff;/* count 15:8 */ - } - else - { - /* FEATURE:The number of logical sectors to be transferred. */ - fis[3] = (now_blocks >> 0) & 0xff; /* features 7:0 */ - fis[11] = (now_blocks >> 8) & 0xff; /* features 15:8 */ - - /* LBA of first logical sector to be transferred */ - fis[4] = ((start >> 0) & 0xff); /* lba 7:0 */ - fis[5] = ((start >> 8) & 0xff); /* lba 15:8 */ - fis[6] = ((start >> 16) & 0xff); /* lba 23:16 */ - fis[8] = ((start >> 24) & 0xff); /* lba 31:24 */ - - /* device reg, bit 6 Shall be set to one */ - fis[7] = FSATA_CMD_EXT_DEVICE; - - /* count */ - fis[12] = 0;/* count 7:0, NCQ TAG field */ - fis[13] = 0;/* count 15:8, Normal priority */ - } - - ret = FSataAhciDataIO(instance_p, port, fis, sizeof(fis), - buffer, transfer_size, is_ncq, is_write); - if (ret) - { - FSATA_ERROR("scsi_ahci: SCSI command failure. ret = %#x.", ret); - return FSATA_ERR_OPERATION; - } - - buffer += transfer_size; - blk_cnt -= now_blocks; - start += now_blocks; - } - return ret; -} - -/** - * @name: FSataCfgInitialize - * @msg: Initialize Sata ctrl - * @param {FSataCtrl} *instance_p, pointer to the FSataCtrl instance. - * @param {FSataConfig} *input_config_p, Default configuration parameters of FSata - * @return {FError} return FSATA_SUCCESS if successful, return others if failed - */ -FError FSataCfgInitialize(FSataCtrl *instance_p, const FSataConfig *input_config_p) -{ - FASSERT(instance_p); - - /*Set default values and configuration data */ - FSataCfgDeInitialize(instance_p); - - instance_p->config = *input_config_p; - - instance_p->is_ready = FT_COMPONENT_IS_READY; - - return FSATA_SUCCESS; -} - -/** - * @name: FSataCfgDeInitialize - * @msg: DeInitialization function for the device instance - * @param {FSataCtrl} *instance_p, pointer to the FSataCtrl instance. - * @return {*} - */ -void FSataCfgDeInitialize(FSataCtrl *pctrl) -{ - FASSERT(pctrl); - - pctrl->is_ready = 0; - memset(pctrl, 0, sizeof(*pctrl)); - - return; -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/sata/fsata/fsata.h b/bsp/phytium/libraries/standalone/drivers/sata/fsata/fsata.h deleted file mode 100644 index 67a225ee23..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/sata/fsata/fsata.h +++ /dev/null @@ -1,284 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fsata.h - * Date: 2022-02-10 14:55:11 - * LastEditTime: 2022-02-18 09:05:24 - * Description:  This file is for sata ctrl function definition - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 wangxiaodong 2022/2/10 first release - * 1.1 wangxiaodong 2022/9/9 improve functions - * 1.2 wangxiaodong 2022/10/21 improve functions - */ - -#ifndef FSATA_H -#define FSATA_H - -#include "ftypes.h" -#include "ferror_code.h" -#include "fkernel.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -#define FSATA_SUCCESS FT_SUCCESS -#define FSATA_ERR_INVALID_PARAMETER FT_MAKE_ERRCODE(ErrModBsp, ErrBspSata, 1) -#define FSATA_ERR_TIMEOUT FT_MAKE_ERRCODE(ErrModBsp, ErrBspSata, 2) -#define FSATA_ERR_OPERATION FT_MAKE_ERRCODE(ErrModBsp, ErrBspSata, 3) -#define FSATA_UNKNOWN_DEVICE FT_MAKE_ERRCODE(ErrModBsp, ErrBspSata, 4) - -/************************** Constant Definitions *****************************/ -#define FSATA_AHCI_MAX_PORTS 32 -#define FSATA_AHCI_MAX_PRD_ENTRIES 16 - -#define MAX_DATA_BYTE_COUNT SZ_4M - -#define FSATA_AHCI_CMD_LIST_HEADER_SIZE 0x20 -#define FSATA_AHCI_CMD_LIST_HEADER_NUM 32 -#define FSATA_AHCI_RX_FIS_SZ 0x100 -#define FSATA_AHCI_CMD_TABLE_HEADER_SIZE 0x80 -#define FSATA_AHCI_PRTD_ITEM_SIZE 0x10 -#define FSATA_AHCI_PRTD_ITEM_NUM 0x40 /*set 64 item, hardware max is 64K */ - -#define FSATA_AHCI_CMD_TABLE_SIZE (FSATA_AHCI_CMD_TABLE_HEADER_SIZE + (FSATA_AHCI_PRTD_ITEM_NUM * FSATA_AHCI_PRTD_ITEM_SIZE)) -#define FSATA_AHCI_PORT_PRIV_DMA_SZ (FSATA_AHCI_CMD_LIST_HEADER_SIZE * FSATA_AHCI_CMD_LIST_HEADER_NUM + \ - FSATA_AHCI_CMD_TABLE_SIZE + FSATA_AHCI_RX_FIS_SZ) - -#define FSATA_AHCI_CMD_ATAPI BIT(5) -#define FSATA_AHCI_CMD_WRITE BIT(6) -#define FSATA_AHCI_CMD_PREFETCH BIT(7) -#define FSATA_AHCI_CMD_RESET BIT(8) -#define FSATA_AHCI_CMD_CLR_BUSY BIT(10) - -#define FSATA_ID_LBA48_SECTORS 100 -#define FSATA_ID_LBA_SECTORS 60 - -#define FSATA_ID_ATA_DEVICE BIT(15) /* IDENTIFY DEVICE word 0, if ATA device */ -#define FSATA_ID_COMPLETE BIT(2) /* IDENTIFY DEVICE word 0, if the content of the IDENTIFY DEVICE data is incomplete */ - -#define FSATA_ID_FW_REV 23 /* firmware revision position */ -#define FSATA_ID_PROD 27 /* Model number position */ -#define FSATA_ID_WORDS 256 /* IDENTIFY DEVICE data length */ - -enum -{ - FSATA_FIS_REG_HOST_TO_DEVICE = 0x27, - FSATA_FIS_REG_DEVICE_TO_HOST = 0x34, - FSATA_FIS_DMA_SETUP = 0x41 -}; - -#define FSATA_FIS_REG_HOST_TO_DEVICE_C BIT(7) /* update of the command register */ -#define FSATA_CMD_EXT_DEVICE BIT(6) /* command device byte requirement */ - -enum -{ - FSATA_CMD_READ_EXT = 0x25, - FSATA_CMD_WRITE_EXT = 0x35, - FSATA_CMD_IDENTIFY_DEVICE = 0xEC, - FSATA_CMD_FPDMA_READ = 0x60, - FSATA_CMD_FPDMA_WRITE = 0x61 -}; - -#define FSATA_BUSY BIT(7) /* BSY status bit */ - -#define FSATA_SECT_SIZE 512 /* sata sector size */ - -#define FSATA_BLK_VEN_SIZE 40 /* device vendor string size */ -#define FSATA_BLK_PRD_SIZE 20 /* device product number size */ -#define FSATA_BLK_REV_SIZE 8 /* firmware revision size */ - -#define FSATA_DEV_TYPE_UNKNOWN 0xff /* not connected */ -#define FSATA_DEV_TYPE_HARDDISK 0x00 /* harddisk */ - -#define FSATA_IF_TYPE_UNKNOWN 0xff -#define FSATA_IF_TYPE_SCSI 0x00 - -enum -{ - FSATA_TYPE_PCIE = 0, - FSATA_TYPE_CONTROLLER = 1 -}; - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/* Number of User Addressable Logical Sectors lba28 */ -#define FSATA_ID_U32(id,n) \ - (((u32) (id)[(n) + 1] << 16) | ((u32) (id)[(n)])) - -/* Number of User Addressable Logical Sectors lba48 */ -#define FSATA_ID_U64(id,n) \ - ( ((u64) (id)[(n) + 3] << 48) | \ - ((u64) (id)[(n) + 2] << 32) | \ - ((u64) (id)[(n) + 1] << 16) | \ - ((u64) (id)[(n) + 0]) ) - -/* if sata id is support lba */ -#define FSataIdHasLba(id) ((id)[49] & BIT(9)) - -/* if sata id is support lba48 */ -static inline int FSataIdHasLba48(const u16 *id) -{ - if ((id[83] & 0xC000) != 0x4000) - { - return 0; - } - if (!FSATA_ID_U64(id, 100)) - { - return 0; - } - return id[83] & BIT(10); -} - -/**************************** Type Definitions *******************************/ -typedef void (*FSataIrqCallBack)(void *args); - -/* sata info */ -typedef struct -{ - unsigned char if_type; /* type of the interface */ - unsigned char type; /* device type */ - char vendor[FSATA_BLK_VEN_SIZE + 1]; /* device vendor string */ - char product[FSATA_BLK_PRD_SIZE + 1]; /* device product number */ - char revision[FSATA_BLK_REV_SIZE + 1]; /* firmware revision */ - unsigned long lba; /* number of blocks */ - unsigned long lba512; /* number of blocks of 512 bytes */ - unsigned long blksz; /* block size */ -} FSataInfo; - -/* Received FIS Structure */ -typedef struct __attribute__((__packed__)) -{ - u8 dma_setup_fis[28]; - u8 reserved0[4]; - u8 pio_setup_fis[20]; - u8 reserved1[12]; - u8 d2h_register_fis[20]; - u8 reserved2[4]; - u8 set_device_bits_fis[8]; - u8 unknown_fis[64]; - u8 reserved3[96]; -} -FSataAhciRecvFis; - -/* command list structure - command header */ -typedef struct -{ - u32 description_info;/* DW 0 – Description Information */ - u32 status; /* DW 1 - Command Status */ - u32 tbl_addr; /* DW 2 – Command Table Base Address */ - u32 tbl_addr_hi; /* DW 3 – Command Table Base Address Upper */ - u32 reserved[4]; -} FSataAhciCommandList; - -/* command table - PRDT */ -typedef struct -{ - u32 addr_low; /* DW 0 – Data Base Address */ - u32 addr_high; /* DW 1 – Data Base Address Upper */ - u32 reserved; /* DW 2 – Reserved */ - u32 data_byte; /* DW 3 – Description Information */ -} FSataAhciCommandTablePrdt; - -/* ahci port information structure */ -typedef struct -{ - uintptr port_base_addr; /* port base address */ - FSataAhciCommandList *cmd_list; /* Command List structure, will include cmd_tbl's address */ - FSataAhciRecvFis *rx_fis; /* Received FIS Structure */ - uintptr cmd_tbl_base_addr; /* command table addr, also the command table's first part */ - FSataAhciCommandTablePrdt *cmd_tbl_prdt;/* command table's second part , cmd_tbl + cmd_tbl_prdt = command table*/ - FSataInfo dev_info; -} FSataAhciPorts; - -typedef struct -{ - u32 instance_id; /* Device instance id */ - uintptr base_addr; /* sata base address */ - char *instance_name; /* instance name */ - u32 irq_num; /* Irq number */ -} FSataConfig; /* sata config */ - -typedef struct -{ - FSataConfig config; - u32 is_ready; - - FSataAhciPorts port[FSATA_AHCI_MAX_PORTS]; - u16 *ataid[FSATA_AHCI_MAX_PORTS]; - u32 n_ports; /* maximum number of ports supported by the ahci, Number of Ports (NP)*/ - u32 port_map; /* each bit indicate port can be used, If a bit is set to ‘1’, the corresponding port is available for software to use. */ - u32 link_port_map; /* each bit indicate port linkup sata device */ - u32 private_data; /* each bit indicate port sata achi started */ - - FSataIrqCallBack fsata_dhrs_cb; /* device-to-host register fis interrupt */ - void *dhrs_args; - FSataIrqCallBack fsata_pss_cb; /* pio setup fis interrupt */ - void *pss_args; - FSataIrqCallBack fsata_dss_cb; /* dma setup fis interrupt */ - void *dss_args; - FSataIrqCallBack fsata_sdbs_cb; /* set device bits interrupt */ - void *sdbs_args; - FSataIrqCallBack fsata_pcs_cb; /* port connect change status interrupt */ - void *pcs_args; - - volatile u8 dhrs_flag; - volatile u8 sdb_flag; -} FSataCtrl; - - -/************************** Function Prototypes ******************************/ - -/* sata config init */ -const FSataConfig *FSataLookupConfig(u32 instance_id, u8 type); - -/* initialize sata ctrl */ -FError FSataCfgInitialize(FSataCtrl *instance_p, const FSataConfig *input_config_p); - -/* deinitialize sata ctrl */ -void FSataCfgDeInitialize(FSataCtrl *pctrl); - -/* read sata info */ -FError FSataAhciReadInfo(FSataCtrl *instance_p, u8 port); - -/* init ahci */ -FError FSataAhciInit(FSataCtrl *instance_p); - -/* init ahci port */ -FError FSataAhciPortStart(FSataCtrl *instance_p, u8 port, uintptr mem); - -/* read or write sata data */ -FError FSataReadWrite(FSataCtrl *instance_p, u8 port, u32 start, - u16 blk_cnt, u8 *buffer, boolean is_ncq, boolean is_write); - -/* sata all irq handler entry */ -void FSataIrqHandler(s32 vector, void *param); - -/* set specific sata irq function entry */ -FError FSataSetHandler(FSataCtrl *instance_p, u32 handler_type, - void *func_pointer, void *call_back_ref); - -/* set sata irq mask */ -void FSataIrqEnable(FSataCtrl *instance_p, u32 int_mask); - -#ifdef __cplusplus -} -#endif - -#endif \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/sata/fsata/fsata_g.c b/bsp/phytium/libraries/standalone/drivers/sata/fsata/fsata_g.c deleted file mode 100644 index f02f0b1060..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/sata/fsata/fsata_g.c +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fsata_g.c - * Date: 2022-02-10 14:55:11 - * LastEditTime: 2022-02-18 09:03:08 - * Description:  This file is for static config of sata ctrl - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 wangxiaodong 2022/2/10 first release - * 1.1 wangxiaodong 2022/10/21 improve functions - */ - -#include "fparameters.h" -#include "fsata.h" -#include "sdkconfig.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ - -/************************** Variable Definitions *****************************/ - - -/* configs of pcie ahci ctrl */ -const FSataConfig FSataPcieConfigTbl[PLAT_AHCI_HOST_MAX_COUNT] = -{ - [0] = - { - .base_addr = AHCI_BASE_0, - .instance_name = "sata0", - .irq_num = AHCI_IRQ_0 /* Irq number */ - - }, - [1] = - { - .base_addr = AHCI_BASE_1, - .instance_name = "sata1", - .irq_num = AHCI_IRQ_1 /* Irq number */ - - }, - [2] = - { - .base_addr = AHCI_BASE_2, - .instance_name = "sata2", - .irq_num = AHCI_IRQ_2 /* Irq number */ - - }, - [3] = - { - .base_addr = AHCI_BASE_3, - .instance_name = "sata3", - .irq_num = AHCI_IRQ_3 /* Irq number */ - - }, - [4] = - { - .base_addr = AHCI_BASE_4, - .instance_name = "sata4", - .irq_num = AHCI_IRQ_4 /* Irq number */ - - }, -}; - -#if defined(CONFIG_TARGET_E2000) - -/* configs of controller ahci ctrl */ -const FSataConfig FSataControllerConfigTbl[FSATA_NUM] = -{ - [0] = - { - .instance_id = FSATA0_ID, - .base_addr = FSATA0_BASE_ADDR, - .instance_name = "sata0", - .irq_num = FSATA0_IRQ_NUM /* Irq number */ - - }, - [1] = - { - .instance_id = FSATA1_ID, - .base_addr = FSATA1_BASE_ADDR, - .instance_name = "sata1", - .irq_num = FSATA1_IRQ_NUM /* Irq number */ - - }, - -}; - -#endif diff --git a/bsp/phytium/libraries/standalone/drivers/sata/fsata/fsata_hw.c b/bsp/phytium/libraries/standalone/drivers/sata/fsata/fsata_hw.c deleted file mode 100644 index 54060db1b8..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/sata/fsata/fsata_hw.c +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fsata_hw.c - * Date: 2022-02-10 14:55:11 - * LastEditTime: 2022-02-18 09:03:23 - * Description:  This file is for sata register function - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 wangxiaodong 2022/2/10 first release - */ - -/***************************** Include Files *********************************/ - -#include "fsata_hw.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ diff --git a/bsp/phytium/libraries/standalone/drivers/sata/fsata/fsata_hw.h b/bsp/phytium/libraries/standalone/drivers/sata/fsata/fsata_hw.h deleted file mode 100644 index cfe7602779..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/sata/fsata/fsata_hw.h +++ /dev/null @@ -1,165 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fsata_hw.h - * Date: 2022-02-10 14:55:11 - * LastEditTime: 2022-02-18 09:03:41 - * Description:  This file is for ctrl of sata functions - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 wangxiaodong 2022/2/10 first release - * 1.1 wangxiaodong 2022/10/21 improve functions - */ - -#ifndef FSATA_HW_H -#define FSATA_HW_H - -#include "fkernel.h" -#include "ftypes.h" -#include "fio.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/************************** Constant Definitions *****************************/ -/* SATA register definitions */ - -/* Global controller registers */ -#define FSATA_HOST_CAP 0x00 /* host capabilities */ -#define FSATA_HOST_CTL 0x04 /* global host control */ -#define FSATA_HOST_IRQ_STAT 0x08 /* interrupt status */ -#define FSATA_HOST_PORTS_IMPL 0x0c /* bitmap of implemented ports */ -#define FSATA_HOST_VERSION 0x10 /* AHCI spec. version compliancy */ -#define FSATA_HOST_CAP2 0x24 /* host capabilities, extended */ - -/* FSATA_HOST_CTL bits */ -#define FSATA_HOST_CAP_NP_MASK GENMASK(4, 0) /* Number of Ports (NP) */ -#define FSATA_HOST_AHCI_EN BIT(31) /* AHCI enabled */ -#define FSATA_HOST_CAP_SMPS BIT(28) /* AHCI Supports Mechanical Presence Switch */ -#define FSATA_HOST_CAP_SSS BIT(27) /* AHCI staggered spin-up */ -#define FSATA_HOST_CAP_SPM BIT(17) /* AHCI port multiplier */ -#define FSATA_HOST_IRQ_EN BIT(1) /* global IRQ enable */ -#define FSATA_HOST_RESET BIT(0) /* reset controller; self-clear */ -#define FSATA_HOST_PORTS_IMPL_MASK(x) GENMASK(x, 0) /* Ports Implemented */ - -/* Registers for each SATA port */ -#define FSATA_PORT_LST_ADDR 0x00 /* command list DMA addr */ -#define FSATA_PORT_LST_ADDR_HI 0x04 /* command list DMA addr hi */ -#define FSATA_PORT_FIS_ADDR 0x08 /* FIS rx buf addr */ -#define FSATA_PORT_FIS_ADDR_HI 0x0c /* FIS rx buf addr hi */ -#define FSATA_PORT_IRQ_STAT 0x10 /* interrupt status */ -#define FSATA_PORT_IRQ_MASK 0x14 /* interrupt enable/disable mask */ -#define FSATA_PORT_CMD 0x18 /* port command */ -#define FSATA_PORT_TFDATA 0x20 /* taskfile data */ -#define FSATA_PORT_SIG 0x24 /* device TF signature */ -#define FSATA_PORT_SCR_STAT 0x28 /* SATA phy register: SStatus */ -#define FSATA_PORT_SCR_CTL 0x2c /* SATA phy register: SControl */ -#define FSATA_PORT_SCR_ERR 0x30 /* SATA phy register: SError */ -#define FSATA_PORT_SCR_ACT 0x34 /* SATA phy register: SActive */ -#define FSATA_PORT_CMD_ISSUE 0x38 /* command issue */ - -/* PORT_SCR_STAT bits */ -#define FSATA_PORT_SCR_STAT_DET_MASK GENMASK(3, 0) -#define FSATA_PORT_SCR_STAT_DET_COMINIT 0x1 -#define FSATA_PORT_SCR_STAT_DET_PHYRDY 0x3 /* SATA exist and phy connected */ - -/* PORT_CMD bits */ -#define FSATA_PORT_CMD_LIST_ADDR_MASK GENMASK(31, 10) -#define FSATA_PORT_CMD_FIS_ADDR_MASK GENMASK(31, 8) -#define FSATA_PORT_CMD_TABLE_ADDR_MASK GENMASK(31, 7) - -#define FSATA_PORT_CMD_ATAPI BIT(24) /* Device is ATAPI */ -#define FSATA_PORT_CMD_LIST_ON BIT(15) /* cmd list DMA engine running */ -#define FSATA_PORT_CMD_FIS_ON BIT(14) /* FIS DMA engine running */ -#define FSATA_PORT_CMD_FIS_RX BIT(4) /* Enable FIS receive DMA engine */ -#define FSATA_PORT_CMD_CLO BIT(3) /* Command list override */ -#define FSATA_PORT_CMD_POWER_ON BIT(2) /* Power up device */ -#define FSATA_PORT_CMD_SPIN_UP BIT(1) /* Spin up device */ -#define FSATA_PORT_CMD_START BIT(0) /* Enable port DMA engine */ - -#define FSATA_PORT_CMD_ICC_ACTIVE BIT(28) /* Put i/f in active state */ -#define FSATA_PORT_CMD_ICC_PARTIAL BIT(29) /* Put i/f in partial state */ -#define FSATA_PORT_CMD_ICC_SLUMBER (0x6 << 28) /* Put i/f in slumber state */ - -#define FSATA_PORT_TFDATA_ATA_BUSY BIT(7) /* BSY status bit */ -#define FSATA_PORT_TFDATA_ATA_DRDY BIT(6) /* device ready */ -#define FSATA_PORT_TFDATA_ATA_DF BIT(5) /* device fault */ -#define FSATA_PORT_TFDATA_ATA_DRQ BIT(3) /* data request i/o */ -#define FSATA_PORT_TFDATA_ATA_ERR BIT(0) /* have an error */ - -/* PORT_IRQ_{STAT,MASK} bits */ -#define FSATA_PORT_IRQ_COLD_PRES BIT(31) /* cold presence detect */ -#define FSATA_PORT_IRQ_TF_ERR BIT(30) /* task file error */ -#define FSATA_PORT_IRQ_HBUS_ERR BIT(29) /* host bus fatal error */ -#define FSATA_PORT_IRQ_HBUS_DATA_ERR BIT(28) /* host bus data error */ -#define FSATA_PORT_IRQ_IF_ERR BIT(27) /* interface fatal error */ -#define FSATA_PORT_IRQ_IF_NONFATAL BIT(26) /* interface non-fatal error */ -#define FSATA_PORT_IRQ_OVERFLOW BIT(24) /* xfer exhausted available S/G */ -#define FSATA_PORT_IRQ_BAD_PMP BIT(23) /* incorrect port multiplier */ - -#define FSATA_PORT_IRQ_PHYRDY BIT(22) /* PhyRdy changed */ -#define FSATA_PORT_IRQ_DEV_ILCK BIT(7) /* device interlock */ -#define FSATA_PORT_IRQ_CONNECT BIT(6) /* port connect change status */ -#define FSATA_PORT_IRQ_SG_DONE BIT(5) /* descriptor processed */ -#define FSATA_PORT_IRQ_UNK_FIS BIT(4) /* unknown FIS rx'd */ -#define FSATA_PORT_IRQ_SDB_FIS BIT(3) /* Set Device Bits FIS rx'd */ -#define FSATA_PORT_IRQ_DMAS_FIS BIT(2) /* DMA Setup FIS rx'd */ -#define FSATA_PORT_IRQ_PIOS_FIS BIT(1) /* PIO Setup FIS rx'd */ -#define FSATA_PORT_IRQ_D2H_REG_FIS BIT(0) /* D2H Register FIS rx'd */ - -#define FSATA_PORT_IRQ_FREEZE FSATA_PORT_IRQ_CONNECT | FSATA_PORT_IRQ_SDB_FIS | \ - FSATA_PORT_IRQ_D2H_REG_FIS | FSATA_PORT_IRQ_PIOS_FIS - -#define FSATA_PORT_SCR_ACT_ENABLE BIT(0) /* Port Serial ATA Active */ -#define FSATA_PORT_CMD_ISSUE_ENABLE BIT(0) /* Port Command Issue enable */ - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ - -/** - * @name: SATA_READ_REG32 - * @msg: 读取SATA寄存器 - * @param {u32} addr 定时器的基地址 - * @param {u32} reg_offset 定时器的寄存器的偏移 - * @return {u32} 寄存器参数 - */ -#define FSATA_READ_REG32(addr, reg_offset) FtIn32((addr) + (u32)reg_offset) - -/** - * @name: SATA_WRITE_REG32 - * @msg: 写入SATA寄存器 - * @param {u32} addr 定时器的基地址 - * @param {u32} reg_offset 定时器的寄存器的偏移 - * @param {u32} reg_value 写入寄存器参数 - * @return {void} - */ -#define FSATA_WRITE_REG32(addr, reg_offset, reg_value) FtOut32((addr) + (u32)reg_offset, (u32)reg_value) - -#define FSATA_SETBIT(base_addr, reg_offset, data) \ - FtSetBit32((base_addr) + (u32)(reg_offset), (u32)(data)) - -#define FSATA_CLEARBIT(base_addr, reg_offset, data) \ - FtClearBit32((base_addr) + (u32)(reg_offset), (u32)(data)) - -#ifdef __cplusplus -} -#endif - -#endif \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/sata/fsata/fsata_intr.c b/bsp/phytium/libraries/standalone/drivers/sata/fsata/fsata_intr.c deleted file mode 100644 index 066f54bcbd..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/sata/fsata/fsata_intr.c +++ /dev/null @@ -1,230 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fsata_intr.c - * Date: 2022-02-10 14:55:11 - * LastEditTime: 2022-02-18 09:03:57 - * Description:  This file is for intrrupt function of Sata ctrl - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 wangxiaodong 2022/2/10 first release - * 1.1 wangxiaodong 2022/10/21 improve functions - */ - -#include "fassert.h" -#include "fdebug.h" -#include "fsata.h" -#include "fsata_hw.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ - -/************************** Variable Definitions *****************************/ - -#define FSATA_DEBUG_TAG "FSATA_INTR" -#define FSATA_ERROR(format, ...) FT_DEBUG_PRINT_E(FSATA_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSATA_WARN(format, ...) FT_DEBUG_PRINT_W(FSATA_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSATA_INFO(format, ...) FT_DEBUG_PRINT_I(FSATA_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSATA_DEBUG(format, ...) FT_DEBUG_PRINT_D(FSATA_DEBUG_TAG, format, ##__VA_ARGS__) - -/** - * @name: FSataIrqEnable - * @msg: enable sata interrupt mask - * @param {FSataCtrl} *instance_p, pointer to the FSataCtrl instance - * @param {u32} int_mask, interrupt enable mask - * @return {void} - */ -void FSataIrqEnable(FSataCtrl *instance_p, u32 int_mask) -{ - u32 reg_value; - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - u32 port = instance_p->private_data; - u32 i; - for (i = 0; i < instance_p->n_ports; i++) - { - if (!(port & BIT(i))) - { - continue; - } - - uintptr port_base_addr = instance_p->port[i].port_base_addr; - FSATA_SETBIT(port_base_addr, FSATA_PORT_IRQ_MASK, int_mask); - } -} - -/** - * @name: FSataIrqDisable - * @msg: disable sata interrupt mask - * @param {FSataCtrl} *instance_p, pointer to the FSataCtrl instance - * @param {u32} int_mask, interrupt disable mask - * @return {void} - */ -void FSataIrqDisable(FSataCtrl *instance_p, u32 int_mask) -{ - u32 reg_value; - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - u32 port = instance_p->private_data; - u32 i; - for (i = 0; i < instance_p->n_ports; i++) - { - if (!(port & BIT(i))) - { - continue; - } - - uintptr port_base_addr = instance_p->port[i].port_base_addr; - - FSATA_CLEARBIT(port_base_addr, FSATA_PORT_IRQ_MASK, int_mask); - } -} - -/** - * @name: FSataSetHandler - * @msg: set sata interrupt handler function - * @param {FSataCtrl} *instance_p, pointer to the FSataCtrl instance - * @param {u32} irq_type, interrupt type - * @param {void} *func_pointer, interrupt handler function - * @param {void} *call_back_ref, interrupt handler function argument - * @return {FError} return FSATA_SUCCESS if successful, return others if failed - */ -FError FSataSetHandler(FSataCtrl *instance_p, u32 irq_type, void *func_pointer, void *call_back_ref) -{ - FError status = FT_SUCCESS; - FASSERT(instance_p != NULL); - FASSERT(func_pointer != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - - switch (irq_type) - { - case FSATA_PORT_IRQ_D2H_REG_FIS: - instance_p->fsata_dhrs_cb = ((FSataIrqCallBack)(void *)func_pointer); - instance_p->dhrs_args = call_back_ref; - break; - - case FSATA_PORT_IRQ_SDB_FIS: - instance_p->fsata_sdbs_cb = ((FSataIrqCallBack)(void *)func_pointer); - instance_p->sdbs_args = call_back_ref; - break; - - case FSATA_PORT_IRQ_CONNECT: - instance_p->fsata_pcs_cb = ((FSataIrqCallBack)(void *)func_pointer); - instance_p->pcs_args = call_back_ref; - break; - - case FSATA_PORT_IRQ_PIOS_FIS: - instance_p->fsata_pss_cb = ((FSataIrqCallBack)(void *)func_pointer); - instance_p->pss_args = call_back_ref; - break; - - default: - status = (FSATA_ERR_OPERATION); - break; - } - return status; -} - -/** - * @name: FSataIrqHandler - * @msg: sata interrupt handler entry - * @param {void} *param, function parameters, users can set - * @return {void} - */ -void FSataIrqHandler(s32 vector, void *param) -{ - FSataCtrl *instance_p = (FSataCtrl *)param; - FSataConfig *config_p; - - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - u32 port = instance_p->private_data; - u32 status; - u32 mask_status = 0; - uintptr base_addr = instance_p->config.base_addr; - u32 irq_state = 0; - u32 i = 0; - - uintptr port_base_addr = 0; - - for (i = 0; i < instance_p->n_ports; i++) - { - if (!(port & BIT(i))) - { - continue; - } - - port_base_addr = instance_p->port[i].port_base_addr; - irq_state = FSATA_READ_REG32(base_addr, FSATA_HOST_IRQ_STAT); - status = FSATA_READ_REG32(port_base_addr, FSATA_PORT_IRQ_STAT); - mask_status = FSATA_READ_REG32(port_base_addr, FSATA_PORT_IRQ_MASK); - - /* clear port first, host second */ - FSATA_WRITE_REG32(port_base_addr, FSATA_PORT_IRQ_STAT, status); - FSATA_WRITE_REG32(base_addr, FSATA_HOST_IRQ_STAT, irq_state); - - if (status & mask_status & FSATA_PORT_IRQ_D2H_REG_FIS) - { - if (instance_p->fsata_dhrs_cb) - { - instance_p->fsata_dhrs_cb(instance_p->dhrs_args); - } - } - - if (status & mask_status & FSATA_PORT_IRQ_PIOS_FIS) - { - if (instance_p->fsata_pss_cb) - { - instance_p->fsata_pss_cb(instance_p->pss_args); - } - } - - if (status & mask_status & FSATA_PORT_IRQ_SDB_FIS) - { - if (instance_p->fsata_sdbs_cb) - { - instance_p->fsata_sdbs_cb(instance_p->sdbs_args); - } - } - - if (status & mask_status & FSATA_PORT_IRQ_DMAS_FIS) - { - if (instance_p->fsata_dss_cb) - { - instance_p->fsata_dss_cb(instance_p->dss_args); - } - } - - if (status & mask_status & FSATA_PORT_IRQ_CONNECT) - { - if (instance_p->fsata_pcs_cb) - { - instance_p->fsata_pcs_cb(instance_p->pcs_args); - } - - /* reset hba */ - FSATA_WRITE_REG32(base_addr, FSATA_HOST_CTL, FSATA_HOST_RESET); - FSataAhciInit(instance_p); - FSataIrqEnable(instance_p, FSATA_PORT_IRQ_FREEZE); - } - - } -} - diff --git a/bsp/phytium/libraries/standalone/drivers/sata/fsata/fsata_sinit.c b/bsp/phytium/libraries/standalone/drivers/sata/fsata/fsata_sinit.c deleted file mode 100644 index b9cfa41b26..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/sata/fsata/fsata_sinit.c +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fsata_sinit.c - * Date: 2022-02-10 14:55:11 - * LastEditTime: 2022-02-18 09:04:15 - * Description:  This file is for sata static init - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 wangxiaodong 2022/2/10 first release - * 1.1 wangxiaodong 2022/10/21 improve functions - */ - -/***************************** Include Files *********************************/ - -#include "fsata.h" -#include "fparameters.h" -#include "sdkconfig.h" -#include "fassert.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ - -/************************** Variable Definitions *****************************/ - -extern const FSataConfig FSataPcieConfigTbl[PLAT_AHCI_HOST_MAX_COUNT]; - -#if defined(CONFIG_TARGET_E2000) - extern const FSataConfig FSataControllerConfigTbl[FSATA_NUM]; -#endif - -/*****************************************************************************/ -/** - * @name: FSataLookupConfig - * @msg: get sata configs by id and type, Support both pcie and SATA controllers - * @return {FSataConfig *} - * @param {u32} instance_id, id of sata ctrl - */ -const FSataConfig *FSataLookupConfig(u32 instance_id, u8 type) -{ - const FSataConfig *pconfig = NULL; - if (type == FSATA_TYPE_CONTROLLER) - { -#if defined(CONFIG_TARGET_E2000) - FASSERT(instance_id < FSATA_NUM); - pconfig = &FSataControllerConfigTbl[instance_id]; -#endif - } - else - { - FASSERT(instance_id < PLAT_AHCI_HOST_MAX_COUNT); - pconfig = &FSataPcieConfigTbl[instance_id]; - } - - return (const FSataConfig *)pconfig; -} - diff --git a/bsp/phytium/libraries/standalone/drivers/scmi/Kconfig b/bsp/phytium/libraries/standalone/drivers/scmi/Kconfig deleted file mode 100644 index 040726be74..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/scmi/Kconfig +++ /dev/null @@ -1,7 +0,0 @@ -menu "Scmi Configuration" - config ENABLE_SCMI_MHU - bool - prompt "Use Scmi MHU" - default n - -endmenu diff --git a/bsp/phytium/libraries/standalone/drivers/scmi/fscmi_mhu/fmhu.c b/bsp/phytium/libraries/standalone/drivers/scmi/fscmi_mhu/fmhu.c deleted file mode 100644 index 6636ffb480..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/scmi/fscmi_mhu/fmhu.c +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fmhu.c - * Date: 2022-12-29 18:07:32 - * LastEditTime: 2022-12-29 18:07:32 - * Description:  This file is for mhu channel binding - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 liushengming 2023/01/04 init - */ - -#include "fassert.h" -#include "fmhu.h" -#include "fmhu_hw.h" -/** - * @name: - * @msg: - * @return {*} - * @param {FScmiMhu} *instance_p - * @param {int} chan - */ -void FMhuChanProbe(FScmiMhu *instance_p) -{ - FASSERT(instance_p); - - instance_p->tx_complete = FALSE; - instance_p->msg_count = 0U; - - instance_p->send_data = FMhuSendData; - instance_p->startup = FMhuStartup; - instance_p->shutdown = FMhuShutdown; - instance_p->last_tx_done = FMhuLastTxDone; - - instance_p->mhu.is_ready = FT_COMPONENT_IS_READY; - - instance_p->startup(instance_p->mhu.config.base_addr); - return; -} - -/** - * @name: - * @msg: - * @return {*} - * @param {FScmiMhu} *instance_p - * @param {int} chan - */ -void FMhuChanRemove(FScmiMhu *instance_p) -{ - FASSERT(instance_p); - - instance_p->tx_complete = TRUE; - - instance_p->send_data = NULL; - instance_p->startup = NULL; - instance_p->shutdown = NULL; - instance_p->last_tx_done = NULL; - - instance_p->mhu.is_ready = 0U; - - instance_p->shutdown(instance_p->mhu.config.base_addr); - return; -} diff --git a/bsp/phytium/libraries/standalone/drivers/scmi/fscmi_mhu/fmhu.h b/bsp/phytium/libraries/standalone/drivers/scmi/fscmi_mhu/fmhu.h deleted file mode 100644 index 304eb0d771..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/scmi/fscmi_mhu/fmhu.h +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fmhu.h - * Date: 2022-12-29 18:07:43 - * LastEditTime: 2022-12-29 18:07:43 - * Description:  This file is for mhu function support and data struct - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 liushengming 2023/01/04 init - */ -#ifndef FMHU_H -#define FMHU_H - -#include "ftypes.h" -#include "ferror_code.h" - - -#ifdef __cplusplus -extern "C" -{ -#endif - -/************************** Constant Definitions *****************************/ -#define FMHU_SUCCESS FT_SUCCESS -#define FMHU_ERR_INVAL_PARM FT_MAKE_ERRCODE(ErrModBsp, ErrBspMhu, 1) -#define FMHU_ERR_NOT_READY FT_MAKE_ERRCODE(ErrModBsp, ErrBspMhu, 2) -#define FMHU_ERR_TIMEOUT FT_MAKE_ERRCODE(ErrModBsp, ErrBspMhu, 3) -#define FMHU_ERR_NOT_SUPPORT FT_MAKE_ERRCODE(ErrModBsp, ErrBspMhu, 4) -#define FMHU_ERR_INVAL_STATE FT_MAKE_ERRCODE(ErrModBsp, ErrBspMhu, 5) - -#define FSCMI_MBOX_TX_QUEUE_LEN 20 - -typedef void (*FMhuEvtHandler)(void *instance_p, void *param); - -typedef struct -{ - u32 mhu_chan_id; /* Mhu chan id */ - uintptr base_addr; /* Device base address */ - u32 irq_num; /* Device intrrupt id */ - u32 irq_prority; /* Device intrrupt priority */ - u32 work_mode; /* Device work mode intr or poll */ -} FMhuConfig; - -typedef struct -{ - FMhuConfig config; /* Current active configs */ - u32 is_ready; /* Device is initialized and ready */ - volatile u32 status; /* Mhu working or idle */ - FMhuEvtHandler slot_msg_recv;/* for interrupt handle */ -} FMhu; - -typedef struct -{ - FMhu mhu;/* mbox object instance */ - boolean tx_complete ; - /* send message */ - u32 msg_count, msg_free; - void *msg_data[FSCMI_MBOX_TX_QUEUE_LEN]; - void *payload; /* share memory */ - void (*send_data)( uintptr addr , u32 chan); - void (*startup)( uintptr addr ); - void (*shutdown)( uintptr addr ); - u32 (*last_tx_done)( uintptr addr ); -} FScmiMhu; - -void FMhuGetDefConfig(FMhuConfig *config_p,u32 chan_id); -void FMhuChanProbe(FScmiMhu *instance_p); -void FMhuChanRemove(FScmiMhu *instance_p); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/bsp/phytium/libraries/standalone/drivers/scmi/fscmi_mhu/fmhu_g.c b/bsp/phytium/libraries/standalone/drivers/scmi/fscmi_mhu/fmhu_g.c deleted file mode 100644 index 355418e364..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/scmi/fscmi_mhu/fmhu_g.c +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fmhu_g.c - * Date: 2022-12-29 16:41:46 - * LastEditTime: 2022-12-29 16:41:46 - * Description:  This file is for get default configs - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 liushengming 2022/12/30 init - */ - -#include -#include "ftypes.h" -#include "fparameters.h" -#include "fmhu.h" -#include "fassert.h" - -void FMhuGetDefConfig(FMhuConfig *config_p,u32 chan_id) -{ - FASSERT(NULL != config_p); - - memset(config_p, 0, sizeof(config_p)); - config_p->base_addr = FSCMI_MHU_BASE_ADDR; - config_p->irq_num = FSCMI_MHU_IRQ_NUM; - config_p->mhu_chan_id = chan_id; - config_p->work_mode = TRUE; -} diff --git a/bsp/phytium/libraries/standalone/drivers/scmi/fscmi_mhu/fmhu_hw.h b/bsp/phytium/libraries/standalone/drivers/scmi/fscmi_mhu/fmhu_hw.h deleted file mode 100644 index 0e7c8c2d76..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/scmi/fscmi_mhu/fmhu_hw.h +++ /dev/null @@ -1,144 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fmhu_hw.h - * Date: 2022-12-29 16:40:54 - * LastEditTime: 2022-12-29 16:40:55 - * Description:  This file is for mhu hardware define - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 liushengming 2023/12/30 init - */ -#ifndef FMHU_HW_H -#define FMHU_HW_H - -#include "fio.h" -#include "fkernel.h" -#include "ftypes.h" -#include "ferror_code.h" -#include "fassert.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -#define AP_OS_STAT_OFFSET 0x100 -#define AP_OS_SET_OFFSET 0x108 -#define AP_OS_CLR_OFFSET 0x110 - -#define AP_OS_INT_OFFSET 0x508 - -#define FMHU_DATA_MASK GENMASK(31, 0) - -#define FMHU_READ_REG32(addr, reg_offset) FtIn32((addr) + (u32)(reg_offset)) -#define FMHU_WRITE_REG32(addr, reg_offset, reg_value) FtOut32((addr) + (u32)(reg_offset), (u32)(reg_value)) - -/***************** Macros (Inline Functions) Definitions *********************/ - -#define FMHU_READ_STAT(addr) (u32)(FMHU_DATA_MASK & FMHU_READ_REG32(addr, AP_OS_STAT_OFFSET)) - -#define FMHU_READ_SECU(addr) (u32)((u32)(1U << 31) & FMHU_READ_REG32(addr, AP_OS_STAT_OFFSET)) - -#define FMHU_WRITE_SET(addr, dat) FMHU_WRITE_REG32((addr), AP_OS_SET_OFFSET, (dat)) - -#define FMHU_WRITE_CLR(addr, dat) FMHU_WRITE_REG32((addr), AP_OS_CLR_OFFSET, (dat)) - -#define FMHU_WRITE_INT(addr, dat) FMHU_WRITE_REG32((addr), AP_OS_INT_OFFSET, (dat)) - -/************************** Function Prototypes ******************************/ - -/** - * @name: FMhuGetChanStatus - * @msg: Mhu get channel status - * @return {*} - * @param {uintptr} addr - */ -static inline u32 FMhuGetChanStatus(uintptr addr) -{ - FASSERT(addr); - - return FMHU_READ_STAT(addr); -} - -/** - * @name: FMhuSendData - * @msg: Mhu write the AP_OS_SET register to send share memory Data - * @return {*} - * @param {uintptr} addr - * @param {u32} chan - */ -static inline void FMhuSendData(uintptr addr, u32 chan) -{ - FASSERT(addr); - - FMHU_WRITE_SET(addr, chan); - - return; -} - -/** - * @name: FMhuStartup - * @msg: - * @return {*} - * @param {uintptr} addr - */ -static inline void FMhuStartup(uintptr addr) -{ - FASSERT(addr); - - u32 val; - - val = FMHU_READ_STAT(addr); - FMHU_WRITE_CLR(addr, val); - - /* irq set */ - - return; -} - -/** - * @name: FMhuShutdown - * @msg: - * @return {*} - * @param {uintptr} addr - */ -static inline void FMhuShutdown(uintptr addr) -{ - FASSERT(addr); - - FMHU_WRITE_INT(addr,1); - - return; -} - -/** - * @name: FMhuLastTxDone - * @msg: - * @return {*} - * @param {uintptr} addr - */ -static inline u32 FMhuLastTxDone(uintptr addr) -{ - FASSERT(addr); - - return (FMHU_READ_SECU(addr) == (u32)(1U << 31)); -} - -#ifdef __cplusplus -} -#endif - -#endif \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/scmi/fscmi_mhu/fmhu_intr.c b/bsp/phytium/libraries/standalone/drivers/scmi/fscmi_mhu/fmhu_intr.c deleted file mode 100644 index 8c661fd6dd..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/scmi/fscmi_mhu/fmhu_intr.c +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fmhu_intr.c - * Date: 2022-12-29 16:42:08 - * LastEditTime: 2022-12-29 16:42:08 - * Description:  This file is for intr mode - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 0.0.1 liushengming 2022/12/29 create file - */ diff --git a/bsp/phytium/libraries/standalone/drivers/scmi/fscmi_mhu/fscmi.c b/bsp/phytium/libraries/standalone/drivers/scmi/fscmi_mhu/fscmi.c deleted file mode 100644 index e26af9b62d..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/scmi/fscmi_mhu/fscmi.c +++ /dev/null @@ -1,347 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fscmi.c - * Date: 2022-12-30 18:32:28 - * LastEditTime: 2022-12-30 18:32:28 - * Description: This file is for scmi protocol support - * - * Modify History: - * Ver Who Date Changes - * ----- ------ -------- -------------------------------------- - * 1.0 liushengming 2023/01/30 init - */ -#include -#include "fscmi.h" -#include "fmhu_hw.h" -#include "fio.h" -#include "fkernel.h" -#include "fdebug.h" -#include "fsleep.h" -#include "fassert.h" -#include "fscmi_base.h" -#include "fscmi_sensors.h" -#include "fscmi_perf.h" - -#define FSCMI_DEBUG_TAG "FSCMI" -#define FSCMI_ERROR(format, ...) FT_DEBUG_PRINT_E(FSCMI_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSCMI_WARN(format, ...) FT_DEBUG_PRINT_W(FSCMI_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSCMI_INFO(format, ...) FT_DEBUG_PRINT_I(FSCMI_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSCMI_DEBUG(format, ...) FT_DEBUG_PRINT_D(FSCMI_DEBUG_TAG, format, ##__VA_ARGS__) - -#define MSG_ID_MASK GENMASK(7, 0) -#define MSG_TYPE_MASK GENMASK(9, 8) -#define MSG_PROTOCOL_ID_MASK GENMASK(17, 10) -#define MSG_TOKEN_ID_MASK GENMASK(27, 18) - - -FError FScmiDoTransport(FScmi *instance_p,struct FScmiTransferInfo *info, u32 protocol_index) -{ - FError ret; - u32 tx_done = 0; - u32 chan_status = 0; - u32 delay_out = 0; - FMhuConfig *mhu_config = &instance_p->scmi_mhu.mhu.config; - - /* write data to share buffer */ - ret = FScmiProtocolTxPrepare(instance_p,protocol_index); - if(ret != FT_SUCCESS) - { - FSCMI_ERROR("%s,FScmiProtocolTxPrepare is error", __FUNCTION__); - return ret; - } - - if(instance_p->scmi_mhu.send_data) - { - instance_p->scmi_mhu.send_data(mhu_config->base_addr,mhu_config->mhu_chan_id); - } - chan_status = FMhuGetChanStatus(mhu_config->base_addr); - /* 等待发送完成 */ - while (tx_done == 0) - { - tx_done = instance_p->scmi_mhu.last_tx_done(mhu_config->base_addr); - if (tx_done == 1) - { - break; - } - else - { - fsleep_millisec(10); - delay_out++; - if (delay_out == 10) - { - FSCMI_ERROR("Send error,addr:0x%x,last_tx_done:0x%x",mhu_config->base_addr,tx_done); - return FSCMI_ERROR_WAIT_MBOX_TIMEOUT; - } - } - } - - /* 等待数据接收完成 */ - /* poll way */ - - if(info->poll_completion) - { - while(FScmiProtocolPollDone(instance_p,protocol_index) != TRUE); - /* get data */ - ret = FScmiFetchResponse(instance_p,protocol_index); - if(ret != FT_SUCCESS) - { - return FSCMI_ERROR_FETCH_RESPONSE; - } - } - else - { - /* interrupt way */ - } - - return FT_SUCCESS; -} -/** - * @name: - * @msg: - * @return {*} - * @param {u8} pro_id - * @param {u32} *protocol_index - */ -static FError FScmiProtocolMapping(const u8 pro_id,u32 *protocol_index) -{ - switch (pro_id) - { - case SCMI_PROTOCOL_BASE: - { - *protocol_index = BASE_PROTOCOL_INDEX; - return FT_SUCCESS; - } - case SCMI_PROTOCOL_PERF: - { - *protocol_index = PERF_DOMAIN_INDEX; - return FT_SUCCESS; - } - case SCMI_PROTOCOL_SENSOR: - { - *protocol_index = SENSOR_MANAGEMENT_INDEX; - return FT_SUCCESS; - } - default: - return FSCMI_ERROR_NOT_FOUND; - } - return FT_SUCCESS; -} - -struct FScmiTransferInfo *FScmiGetInfo(FScmi *instance_p, u8 pro_id) -{ - u32 index_id = 0; - FError ret; - ret = FScmiProtocolMapping(pro_id, &index_id); - if (ret != FT_SUCCESS) - { - FSCMI_ERROR("%s,Protocol mapping error", __FUNCTION__); - return NULL; - } - - return &instance_p->info[index_id]; -} - -FError FScmiFetchResponse(FScmi *instance_p, u8 pro_id) -{ - struct FScmiSharedMem *mem =(struct FScmiSharedMem *) instance_p->config.share_mem; - struct FScmiTransferInfo *trans_info; - u32 index_id = 0; - FError ret; - ret = FScmiProtocolMapping(pro_id, &index_id); - if (ret != FT_SUCCESS) - { - FSCMI_ERROR("%s,Protocol mapping error", __FUNCTION__); - return ret; - } - trans_info = &instance_p->info[index_id]; - trans_info->hdr.status = FtIn32((uintptr)mem->msg_payload); - /* Skip the length of header and statues in payload area i.e 8 bytes*/ - trans_info->rx.len = min(trans_info->rx.len, FtIn32((uintptr)(&mem->length)) - 8); - - /* Take a copy to the rx buffer.. */ - - if(trans_info->rx.len) - { - for (u32 i = 0; i < trans_info->rx.len; i++) - { - trans_info->rx.buf[i] = mem->msg_payload[i+4]; - } - } - - return FT_SUCCESS; -} - -FError FScmiProtocolPollDone(FScmi *instance_p,u8 pro_id) -{ - struct FScmiSharedMem *mem =(struct FScmiSharedMem *) instance_p->config.share_mem; - u32 index_id = 0; - FError ret; - ret = FScmiProtocolMapping(pro_id, &index_id); - if(ret != FT_SUCCESS) - { - FSCMI_ERROR("%s,Protocol mapping error",__FUNCTION__); - return FALSE; - } - - return FtIn32((uintptr)(&mem->channel_status)) & - (SCMI_SHMEM_CHAN_STAT_CHANNEL_ERROR | - SCMI_SHMEM_CHAN_STAT_CHANNEL_FREE); -} - - -static u32 FScmiPackHeader(struct FScmiMsgHdr *hdr_p) -{ - - return FIELD_PREP(MSG_ID_MASK, hdr_p->id) | - FIELD_PREP(MSG_TOKEN_ID_MASK, hdr_p->seq) | - FIELD_PREP(MSG_PROTOCOL_ID_MASK, hdr_p->protocol_id); -} - -FError FScmiProtocolTxPrepare(FScmi *instance_p,u8 pro_id) -{ - struct FScmiSharedMem *mem =(struct FScmiSharedMem *) instance_p->config.share_mem; - struct FScmiTransferInfo *trans_info; - u32 index_id = 0; - u32 time_out; - FError ret; - static int is_init = 0; - ret = FScmiProtocolMapping(pro_id, &index_id); - if(ret != FT_SUCCESS) - { - FSCMI_ERROR("Protocol mapping error"); - return ret; - } - trans_info = &instance_p->info[index_id]; - if(!is_init) - { - FtOut32((uintptr)&mem->channel_status,SCMI_SHMEM_CHAN_STAT_CHANNEL_FREE); - is_init = 1; - } - - while (0 == (FtIn32((uintptr)&mem->channel_status) &SCMI_SHMEM_CHAN_STAT_CHANNEL_FREE)) - { - time_out++; - fsleep_millisec(10); - if (time_out == 10) - { - FSCMI_ERROR("Memory of scmi status error,please check mhu channel set or memory addrs..."); - return FSCMI_ERROR_WAIT_MEM_TIMEOUT; - } - } - - FtOut32((uintptr)&mem->channel_status,0); - FtOut32((uintptr)&mem->flags, 0); - FtOut32((uintptr)&mem->length, sizeof(mem->msg_header) + trans_info->tx.len); - FtOut32((uintptr)&mem->msg_header,FScmiPackHeader(&trans_info->hdr)); - - if(trans_info->tx.len) - { - for (u32 i = 0; i < trans_info->tx.len; i++) - { - mem->msg_payload[i] = trans_info->tx.buf[i]; - } - } - - return FT_SUCCESS; -} - -FError FScmiMessageInit(FScmi *instance_p,u8 msg_id,u8 pro_id,u32 tx_size,u32 rx_size,u8 *tx_buffer) -{ - u32 index_id = 0; - FError ret; - struct FScmiTransferInfo *trans_info; - - ret = FScmiProtocolMapping(pro_id, &index_id); - if(ret != FT_SUCCESS) - { - FSCMI_ERROR("Protocol mapping error"); - return ret; - } - trans_info = &instance_p->info[index_id]; - - /* 检查 tx_size / rx_size 的长度*/ - if(tx_size > FSCMI_MSG_SIZE || rx_size > FSCMI_MSG_SIZE) - { - return FSCMI_ERROR_RANGE; - } - - if(tx_size > 0 && tx_buffer == NULL) - { - return FSCMI_ERROR_NULL_POINTER; - } - - /* init hdr */ - trans_info->hdr.seq = pro_id + msg_id ; - trans_info->hdr.id = msg_id; - trans_info->hdr.protocol_id = pro_id; - - /* init buffer */ - trans_info->tx.len = tx_size; - if(tx_size && tx_buffer) - { - memcpy(trans_info->tx.buf, tx_buffer, tx_size); - } - - trans_info->rx.len = rx_size ? :FSCMI_MSG_SIZE;/* */ - trans_info->poll_completion = TRUE; - - return FT_SUCCESS; - -} - - -FError FScmiCfgInitialize(FScmi *instance_p, const struct FScmiConfig *config) -{ - /* first init */ - instance_p->config = *config; - - FError ret; - - /* Second choice is the mbox driver */ - if (instance_p->config.mbox_type == FSCMI_MBOX_MHU_TYPE) - { - FMhuChanProbe(&instance_p->scmi_mhu); - } - else - { - return FSCMI_ERROR_TYPE; - } - - instance_p->config.share_mem = config->share_mem; - - /* The third initializes the base protocol */ - ret = FScmiBaseInit(instance_p); - if (instance_p->revision.version != FSCMI_VERSION) - { - return FSCMI_ERROR_VERSION; - } - - ret = FScmiSensorInit(instance_p); - if(ret != FT_SUCCESS) - { - FSCMI_ERROR("FScmiSensorInit init error.Error code:0x%x.",ret); - return FSCMI_ERROR_INIT; - } - - ret = FScmiPerfInit(instance_p); - if(ret != FT_SUCCESS) - { - FSCMI_ERROR("FScmiPerfInit init error.Error code:0x%x.",ret); - return FSCMI_ERROR_INIT; - } - /* Finally confirm the completion status */ - instance_p->is_ready = FT_COMPONENT_IS_READY; - - return FT_SUCCESS; -} diff --git a/bsp/phytium/libraries/standalone/drivers/scmi/fscmi_mhu/fscmi.h b/bsp/phytium/libraries/standalone/drivers/scmi/fscmi_mhu/fscmi.h deleted file mode 100644 index 8e3e65f1bd..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/scmi/fscmi_mhu/fscmi.h +++ /dev/null @@ -1,216 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fscmi.h - * scmi.h - * Date: 2022-12-30 18:32:33 - * LastEditTime: 2022-12-30 18:32:33 - * Description: This file is for scmi protocol struct and application interface - * - * Modify History: - * Ver Who Date Changes - * ----- ------ -------- -------------------------------------- - * 1.0 liushengming 2023/01/31 init - */ - - -#ifndef FSCMI_H -#define FSCMI_H - -#include "ftypes.h" -#include "ferror_code.h" -#include "fmhu.h" -#include "fparameters.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/* error code */ - -#define FSCMI_ERROR_TYPE FT_CODE_ERR(ErrModBsp, ErrBspScmi, 0x1u) -#define FSCMI_ERROR_RANGE FT_CODE_ERR(ErrModBsp, ErrBspScmi, 0x2u) -#define FSCMI_ERROR_NOT_FOUND FT_CODE_ERR(ErrModBsp, ErrBspScmi, 0x3u) -#define FSCMI_ERROR_NULL_POINTER FT_CODE_ERR(ErrModBsp, ErrBspScmi, 0x4u) -#define FSCMI_ERROR_WAIT_MBOX_TIMEOUT FT_CODE_ERR(ErrModBsp, ErrBspScmi, 0x5u) -#define FSCMI_ERROR_WAIT_MEM_TIMEOUT FT_CODE_ERR(ErrModBsp, ErrBspScmi, 0x6u) -#define FSCMI_ERROR_FETCH_RESPONSE FT_CODE_ERR(ErrModBsp, ErrBspScmi, 0x7u) -#define FSCMI_ERROR_REQUEST FT_CODE_ERR(ErrModBsp, ErrBspScmi, 0x8u) -#define FSCMI_ERROR_VERSION FT_CODE_ERR(ErrModBsp, ErrBspScmi, 0x9u) -#define FSCMI_ERROR_INIT FT_CODE_ERR(ErrModBsp, ErrBspScmi, 0xau) - -#define FSCMI_MBOX_MHU_TYPE 0 -#define FSCMI_VERSION 0x20000 -/* - * SCMI specification requires all parameters, message headers, return - * arguments or any protocol data to be expressed in little endian - * format only. - */ -struct FScmiSharedMem { - u32 reserved; - u32 channel_status; -#define SCMI_SHMEM_CHAN_STAT_CHANNEL_ERROR BIT(1) -#define SCMI_SHMEM_CHAN_STAT_CHANNEL_FREE BIT(0) - u32 reserved1[2]; - u32 flags; -#define SCMI_SHMEM_FLAG_INTR_ENABLED BIT(0) - u32 length; - u32 msg_header; - u8 msg_payload[0]; -}; - -enum FScmiStdProtocol { - SCMI_PROTOCOL_BASE = 0x10, - SCMI_PROTOCOL_POWER = 0x11, - SCMI_PROTOCOL_SYSTEM = 0x12, - SCMI_PROTOCOL_PERF = 0x13, - SCMI_PROTOCOL_CLOCK = 0x14, - SCMI_PROTOCOL_SENSOR = 0x15, -}; - -enum FScmiProtocolIndex -{ - BASE_PROTOCOL_INDEX , - PERF_DOMAIN_INDEX , - SENSOR_MANAGEMENT_INDEX , - FSCMI_SUPPORT_PROTOCOL_NUM , -}; - -/* base protocol */ -struct FScmiRevisionInfo -{ - u32 version; - u16 major_ver; - u16 minor_ver; - u8 num_protocols; - u8 num_agents; - u32 impl_ver; - char vendor_id[FSCMI_MAX_STR_SIZE]; - char sub_vendor_id[FSCMI_MAX_STR_SIZE]; -}; - -/* Sensor protocol */ -struct FScmiSensorInfo { - u32 id; - u8 type; - char name[FSCMI_MAX_STR_SIZE]; -}; - -struct FScmiSensorsInfo { - u32 version; - u16 major_ver; - u16 minor_ver; - u32 num_sensors; - u32 max_requests; - u64 reg_addr; - u32 reg_size; - struct FScmiSensorInfo sensor_info[FSCMI_MAX_NUM_SENSOR];/* TS0 TS1 */ -}; - -/* Performance domain protocol */ - -struct FScmiOpp { - u32 perf_val; - u32 power; - u32 trans_latency_us; -}; - -struct FPerfDomInfo { - boolean set_limits; - boolean set_perf; - boolean perf_limit_notify; - boolean perf_level_notify; - u32 opp_count; - u32 sustained_freq_khz; - u32 sustained_perf_level; - u32 mult_factor; - char name[FSCMI_MAX_STR_SIZE]; - struct FScmiOpp opp[FSCMI_MAX_OPPS]; -}; - -struct FScmiPerfInfo { - u32 version; - u16 major_ver; - u16 minor_ver; - u32 num_domains; - boolean power_scale_mw; - u64 stats_addr; - u32 stats_size; - struct FPerfDomInfo dom_info[FSCMI_MAX_PERF_DOMAINS]; -}; - -/* Scmi massage package */ -struct FScmiMsgHdr -{ - u8 id; /* message id */ - u8 protocol_id; /* protocol id */ - u16 seq; /* message token */ - u32 status; /* protocal status */ -}; - -struct FScmiMsg -{ - u8 buf[FSCMI_MSG_SIZE]; /* buffer in normal memory */ - u32 len; /* buffer length */ -}; - -struct FScmiTransferInfo -{ - struct FScmiMsgHdr hdr ; /* Message(Tx/Rx) header */ - struct FScmiMsg tx ; - struct FScmiMsg rx ; - boolean poll_completion; -}; - -/* Scmi protocol struct */ -struct FScmiConfig -{ - uintptr share_mem; /* Chan transport protocol shared memory */ - u32 mbox_type; /* select mbox driver */ -}; - -typedef struct -{ - u32 is_ready; /* Device is ininitialized and ready*/ - struct FScmiConfig config; - struct FScmiRevisionInfo revision; - struct FScmiSensorsInfo sensors; - struct FScmiPerfInfo perf; - struct FScmiTransferInfo info[FSCMI_SUPPORT_PROTOCOL_NUM]; - u8 protocols_imp[FSCMI_MAX_PROTOCOLS_IMP];/* List of protocols implemented, currently maximum of FSCMI_MAX_PROTOCOLS_IMP elements allocated by the base protocol */ - FScmiMhu scmi_mhu; -} FScmi; - -/* Base protocol function */ -FError FScmiCfgInitialize(FScmi *instance_p, const struct FScmiConfig *config); -FError FScmiMessageInit(FScmi *instance_p, u8 msg_id, u8 pro_id, u32 tx_size, u32 rx_size, u8 *tx_buffer); -FError FScmiProtocolTxPrepare(FScmi *instance_p, u8 pro_id); -FError FScmiProtocolPollDone(FScmi *instance_p, u8 pro_id); -FError FScmiFetchResponse(FScmi *instance_p, u8 pro_id); -struct FScmiTransferInfo *FScmiGetInfo(FScmi *instance_p, u8 pro_id); -FError FScmiDoTransport(FScmi *instance_p, struct FScmiTransferInfo *info, u32 protocol_index); -/* Sensor protocol function */ -FError FScmiSensorGetTemp(FScmi *instance_p, u32 sensor_id,s64 *temp); -/* Performance domain function */ -FError FScmiDvfsFreqSet(FScmi *instance_p, u32 domain, u64 freq, boolean poll); -FError FScmiDvfsFreqGet(FScmi *instance_p, u32 domain, u64 *freq, boolean poll); -u64 FScmiPerfGetOppFreq(FScmi *instance_p, u32 domain, u32 opp_num); - -#ifdef __cplusplus -} -#endif - - -#endif - diff --git a/bsp/phytium/libraries/standalone/drivers/scmi/fscmi_mhu/fscmi_base.c b/bsp/phytium/libraries/standalone/drivers/scmi/fscmi_mhu/fscmi_base.c deleted file mode 100644 index 75e7e9168c..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/scmi/fscmi_mhu/fscmi_base.c +++ /dev/null @@ -1,371 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fscmi_base.c - * Date: 2022-12-31 21:38:31 - * LastEditTime: 2022-12-31 21:47:30 - * Description: This file is for base protocol - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 liushengming 2023/01/12 init - */ - -#include -#include "fscmi.h" -#include "fscmi_base.h" -#include "fio.h" -#include "fdebug.h" -#include "fsleep.h" -#include "ftypes.h" -#include "fswap.h" -#include "fkernel.h" - -#define FSCMI_BASE_DEBUG_TAG "FSCMI_BASE" -#define FSCMI_BASE_ERROR(format, ...) FT_DEBUG_PRINT_E(FSCMI_BASE_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSCMI_BASE_WARN(format, ...) FT_DEBUG_PRINT_W(FSCMI_BASE_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSCMI_BASE_INFO(format, ...) FT_DEBUG_PRINT_I(FSCMI_BASE_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSCMI_BASE_DEBUG(format, ...) FT_DEBUG_PRINT_D(FSCMI_BASE_DEBUG_TAG, format, ##__VA_ARGS__) - -struct FScmiBaseAttributes { - u8 num_protocols; - u8 num_agents; - u16 reserved; -}; - -static FError FScmiBaseGetVersion(FScmi *instance_p,u32 *rev_info) -{ - FError ret; - struct FScmiTransferInfo *info; - - info = FScmiGetInfo(instance_p, SCMI_PROTOCOL_BASE); - if (info == NULL) - { - FSCMI_BASE_ERROR("Info data structure not found ,protocol id is %d",SCMI_PROTOCOL_BASE); - return FSCMI_ERROR_NULL_POINTER; - } - - /* Prepare hdr packaging */ - ret = FScmiMessageInit(instance_p, FSCMI_BASE_PROTOCOL_VERSION, SCMI_PROTOCOL_BASE, 0, sizeof(*rev_info),info->tx.buf); - - if(ret != FT_SUCCESS) - { - FSCMI_BASE_ERROR("Prepare hdr packaging is error ,protocol id is %d",SCMI_PROTOCOL_BASE); - return ret; - } - - ret = FScmiDoTransport(instance_p, info, SCMI_PROTOCOL_BASE); - if(ret != FT_SUCCESS) - { - FSCMI_BASE_ERROR("Transport package error ,protocol id is %d",SCMI_PROTOCOL_BASE); - return ret; - } - - /* Fill in the obtained parameters */ - *rev_info = FtIn32((uintptr)info->rx.buf); - - return FT_SUCCESS; -} - -static FError FScmiBaseGetVendor(FScmi *instance_p,boolean sub_vendor) -{ - FError ret; - struct FScmiTransferInfo *info; - u8 cmd; - char *vendor_id; - - info = FScmiGetInfo(instance_p, SCMI_PROTOCOL_BASE); - if (info == NULL) - { - FSCMI_BASE_ERROR("Info data structure not found ,protocol id is %d",SCMI_PROTOCOL_BASE); - return FSCMI_ERROR_NULL_POINTER; - } - - if (sub_vendor) { - cmd = FSCMI_BASE_PROTOCOL_DISCOVER_SUB_VENDOR; - vendor_id = instance_p->revision.sub_vendor_id; - } else { - cmd = FSCMI_BASE_PROTOCOL_DISCOVER_VENDOR; - vendor_id = instance_p->revision.vendor_id; - } - /* Prepare hdr packaging */ - ret = FScmiMessageInit(instance_p, cmd, SCMI_PROTOCOL_BASE, 0, FSCMI_MAX_STR_SIZE,info->tx.buf); - - if(ret != FT_SUCCESS) - { - FSCMI_BASE_ERROR("Prepare hdr packaging is error ,protocol id is %d",SCMI_PROTOCOL_BASE); - return ret; - } - - ret = FScmiDoTransport(instance_p, info, SCMI_PROTOCOL_BASE); - if(ret != FT_SUCCESS) - { - FSCMI_BASE_ERROR("Transport package error error ,protocol id is %d",SCMI_PROTOCOL_BASE); - return ret; - } - - /* Fill in the obtained parameters */ - memcpy(vendor_id,info->rx.buf,FSCMI_MAX_STR_SIZE); - - return FT_SUCCESS; -} - -static FError FScmiBaseGetAttributes(FScmi *instance_p, u8 *num_protocols, u8 *num_agents) -{ - FError ret; - struct FScmiTransferInfo *info; - struct FScmiBaseAttributes *attr_info; - - info = FScmiGetInfo(instance_p, SCMI_PROTOCOL_BASE); - if (info == NULL) - { - FSCMI_BASE_ERROR("Info data structure not found ,protocol id is %d",SCMI_PROTOCOL_BASE); - return FSCMI_ERROR_NULL_POINTER; - } - - /* Prepare hdr packaging */ - ret = FScmiMessageInit(instance_p, FSCMI_BASE_PROTOCOL_ATTRIBUTES, SCMI_PROTOCOL_BASE, 0, sizeof(*attr_info),info->tx.buf); - - if(ret != FT_SUCCESS) - { - FSCMI_BASE_ERROR("Prepare hdr packaging is error ,protocol id is %d",SCMI_PROTOCOL_BASE); - return ret; - } - - ret = FScmiDoTransport(instance_p, info, SCMI_PROTOCOL_BASE); - if(ret != FT_SUCCESS) - { - FSCMI_BASE_ERROR("Transport package error ,protocol id is %d",SCMI_PROTOCOL_BASE); - return ret; - } - - /* Fill in the obtained parameters */ - attr_info = (struct FScmiBaseAttributes *)info->rx.buf; - instance_p->revision.num_protocols = attr_info->num_protocols; - instance_p->revision.num_agents = attr_info->num_agents; - - return FT_SUCCESS; -} - -static FError FScmiBaseGetImplementVersion(FScmi *instance_p, u32 *impl_ver) -{ - FError ret; - struct FScmiTransferInfo *info; - struct FScmiBaseAttributes *attr_info; - - info = FScmiGetInfo(instance_p, SCMI_PROTOCOL_BASE); - if (info == NULL) - { - FSCMI_BASE_ERROR("Info data structure not found ,protocol id is %d",SCMI_PROTOCOL_BASE); - return FSCMI_ERROR_NULL_POINTER; - } - - /* Prepare hdr packaging */ - ret = FScmiMessageInit(instance_p, FSCMI_BASE_PROTOCOL_DISCOVER_IMPLEMENTATION_VERSION, SCMI_PROTOCOL_BASE, 0, sizeof(*impl_ver),info->tx.buf); - - if(ret != FT_SUCCESS) - { - FSCMI_BASE_ERROR("Prepare hdr packaging is error ,protocol id is %d",SCMI_PROTOCOL_BASE); - return ret; - } - - ret = FScmiDoTransport(instance_p, info, SCMI_PROTOCOL_BASE); - if(ret != FT_SUCCESS) - { - FSCMI_BASE_ERROR("Transport package error ,protocol id is %d",SCMI_PROTOCOL_BASE); - return ret; - } - - /* Fill in the obtained parameters */ - *impl_ver = FtIn32((uintptr)info->rx.buf); - - return FT_SUCCESS; -} - -static FError FScmiBaseGetImplementList(FScmi *instance_p , u8 *protocols_imp) -{ - FError ret; - struct FScmiTransferInfo *info; - struct FScmiBaseAttributes *attr_info; - - u32 *num_skip, *num_ret; - u8 *list; - u32 tot_num_ret = 0, loop_num_ret; - u32 loop; - - info = FScmiGetInfo(instance_p, SCMI_PROTOCOL_BASE); - if (info == NULL) - { - FSCMI_BASE_ERROR("Info data structure not found ,protocol id is %d",SCMI_PROTOCOL_BASE); - return FSCMI_ERROR_NULL_POINTER; - } - - /* Prepare hdr packaging */ - ret = FScmiMessageInit(instance_p, FSCMI_BASE_PROTOCOL_DISCOVER_LIST_PROTOCOLS, SCMI_PROTOCOL_BASE, sizeof(*num_skip), 0,info->tx.buf); - - if(ret != FT_SUCCESS) - { - FSCMI_BASE_ERROR("Prepare hdr packaging is error ,protocol id is %d",SCMI_PROTOCOL_BASE); - return ret; - } - - /* Fill in the obtained parameters */ - num_skip = (u32 *)info->tx.buf; - num_ret = (u32 *)info->rx.buf; - list = info->rx.buf + sizeof(num_ret); - - do { - /* Set the number of protocols to be skipped/already read */ - *num_skip = tot_num_ret; - - ret = FScmiDoTransport(instance_p, info, SCMI_PROTOCOL_BASE); - if(ret != FT_SUCCESS) - { - FSCMI_BASE_ERROR("Transport package error ,protocol id is %d",SCMI_PROTOCOL_BASE); - return ret; - } - - loop_num_ret = (*num_ret); - - if (tot_num_ret + loop_num_ret > FSCMI_MAX_PROTOCOLS_IMP) - { - FSCMI_BASE_ERROR("No. of Protocol > MAX_PROTOCOLS_IMP"); - break; - } - - for (loop = 0; loop < loop_num_ret; loop++) - protocols_imp[tot_num_ret + loop] = *(list + loop); - - tot_num_ret += loop_num_ret; - } while (loop_num_ret); - - return FT_SUCCESS; -} - -static FError FScmiBaseGetAgent(FScmi *instance_p,int id,char *name) -{ - FError ret; - struct FScmiTransferInfo *info; - struct FScmiBaseAttributes *attr_info; - - info = FScmiGetInfo(instance_p, SCMI_PROTOCOL_BASE); - if (info == NULL) - { - FSCMI_BASE_ERROR("Info data structure not found ,protocol id is %d",SCMI_PROTOCOL_BASE); - return FSCMI_ERROR_NULL_POINTER; - } - - /* Prepare hdr packaging */ - ret = FScmiMessageInit(instance_p, FSCMI_BASE_PROTOCOL_DISCOVER_AGENT, SCMI_PROTOCOL_BASE, sizeof(u32), FSCMI_MAX_STR_SIZE,info->tx.buf); - - if(ret != FT_SUCCESS) - { - FSCMI_BASE_ERROR("Prepare hdr packaging is error ,protocol id is %d",SCMI_PROTOCOL_BASE); - return ret; - } - - *info->tx.buf = id; - - ret = FScmiDoTransport(instance_p, info, SCMI_PROTOCOL_BASE); - if(ret != FT_SUCCESS) - { - FSCMI_BASE_ERROR("Transport package error ,protocol id is %d",SCMI_PROTOCOL_BASE); - return ret; - } - - /* Fill in the obtained parameters */ - memcpy(name, info->rx.buf, FSCMI_MAX_STR_SIZE); - - return FT_SUCCESS; -} - -/** - * @name: FScmiBaseInit - * @msg: Base protocol get SCMI support information - * @return {FError} 返回值 - * @param {FScmi} *instance_p scmi协议实例 - */ -FError FScmiBaseInit(FScmi *instance_p) -{ - FError ret; - char name[FSCMI_MAX_STR_SIZE]; - int id; - - /* first get PROTOCOL_VERSION FSCMI_BASE_PROTOCOL_VERSION*/ - ret = FScmiBaseGetVersion(instance_p,&instance_p->revision.version); - if(ret != FT_SUCCESS) - { - FSCMI_BASE_ERROR("Can't get version,please check mem_address or chan_id.Error code:0x%x.",ret); - return FSCMI_ERROR_REQUEST; - } - /* FSCMI_BASE_PROTOCOL_ATTRIBUTES */ - ret = FScmiBaseGetAttributes(instance_p,&instance_p->revision.num_protocols,&instance_p->revision.num_agents); - if(ret != FT_SUCCESS) - { - FSCMI_BASE_ERROR("Can't get num_protocols,please check mem_address or chan_id.Error code:0x%x.",ret); - return FSCMI_ERROR_REQUEST; - } - /* FSCMI_BASE_PROTOCOL_DISCOVER_VENDOR and FSCMI_BASE_PROTOCOL_DISCOVER_SUB_VENDOR */ - ret = FScmiBaseGetVendor(instance_p,FALSE); - if(ret != FT_SUCCESS) - { - FSCMI_BASE_ERROR("Can't get major_ver,please check mem_address or chan_id.Error code:0x%x.",ret); - return FSCMI_ERROR_REQUEST; - } - ret = FScmiBaseGetVendor(instance_p,TRUE); - if(ret != FT_SUCCESS) - { - FSCMI_BASE_ERROR("Can't get major_ver,please check mem_address or chan_id.Error code:0x%x.",ret); - return FSCMI_ERROR_REQUEST; - } - /* FSCMI_BASE_PROTOCOL_DISCOVER_IMPLEMENTATION_VERSION */ - ret = FScmiBaseGetImplementVersion(instance_p,&instance_p->revision.impl_ver); - if(ret != FT_SUCCESS) - { - FSCMI_BASE_ERROR("Can't get impl_ver,please check mem_address or chan_id.Error code:0x%x.",ret); - return FSCMI_ERROR_REQUEST; - } - /* FSCMI_BASE_PROTOCOL_DISCOVER_LIST_PROTOCOLS */ - ret = FScmiBaseGetImplementList(instance_p,instance_p->protocols_imp); - if(ret != FT_SUCCESS) - { - FSCMI_BASE_ERROR("Can't get vendor_id,please check mem_address or chan_id.Error code:0x%x.",ret); - return FSCMI_ERROR_REQUEST; - } - - instance_p->revision.major_ver = (instance_p->revision.version >> 16); - instance_p->revision.minor_ver = (instance_p->revision.version & 0xffff); - - FSCMI_BASE_INFO("SCMI Protocol v%d.%d '%s:%s' Firmware version 0x%x\n", instance_p->revision.major_ver, - instance_p->revision.minor_ver, - instance_p->revision.vendor_id, - instance_p->revision.sub_vendor_id, - instance_p->revision.impl_ver); - - FSCMI_BASE_INFO("Found %d protocol(s) %d agent(s)\n",instance_p->revision.num_protocols,instance_p->revision.num_agents); - - /* FSCMI_BASE_PROTOCOL_DISCOVER_AGENT */ - for ( id = 0; id < instance_p->revision.num_agents; id++) - { - ret = FScmiBaseGetAgent(instance_p,id,name); - if(ret != FT_SUCCESS) - { - FSCMI_BASE_ERROR("Can't get sub_vendor_id,please check mem_address or chan_id.Error code:0x%x.",ret); - return FSCMI_ERROR_REQUEST; - } - FSCMI_BASE_INFO("Agent %d:%s\n",id,name); - } - - return FT_SUCCESS; -} diff --git a/bsp/phytium/libraries/standalone/drivers/scmi/fscmi_mhu/fscmi_base.h b/bsp/phytium/libraries/standalone/drivers/scmi/fscmi_mhu/fscmi_base.h deleted file mode 100644 index 1ae4d46f2d..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/scmi/fscmi_mhu/fscmi_base.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fscmi_base.h - * Date: 2022-12-31 21:38:51 - * LastEditTime: 2022-12-31 21:38:51 - * Description: This file is for base protocol message - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 liushengming 2023/01/04 init - */ - - - -#ifndef FSCMI_BASE_PROTOCOL_H -#define FSCMI_BASE_PROTOCOL_H - -#include "ftypes.h" -#include "ferror_code.h" -#include "fparameters.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -#define FSCMI_BASE_PROTOCOL_VERSION 0x0 -#define FSCMI_BASE_PROTOCOL_ATTRIBUTES 0x1 -#define FSCMI_BASE_PROTOCOL_MESSAGE_ATTRIBUTES 0x2 -#define FSCMI_BASE_PROTOCOL_DISCOVER_VENDOR 0x3 -#define FSCMI_BASE_PROTOCOL_DISCOVER_SUB_VENDOR 0x4 -#define FSCMI_BASE_PROTOCOL_DISCOVER_IMPLEMENTATION_VERSION 0x5 -#define FSCMI_BASE_PROTOCOL_DISCOVER_LIST_PROTOCOLS 0x6 -#define FSCMI_BASE_PROTOCOL_DISCOVER_AGENT 0x7 -#define FSCMI_BASE_PROTOCOL_NOTIFY_ERRORS 0x8 -#define FSCMI_BASE_PROTOCOL_SET_DEVICE_PERMISSIONS 0x9 -#define FSCMI_BASE_PROTOCOL_SET_PROTOCOL_PERMISSIONS 0xa -#define FSCMI_BASE_PROTOCOL_RESET_AGENT_CONFIGURATION 0xb - -FError FScmiBaseInit(FScmi *instance_p); - -#ifdef __cplusplus -} -#endif - - -#endif - diff --git a/bsp/phytium/libraries/standalone/drivers/scmi/fscmi_mhu/fscmi_perf.c b/bsp/phytium/libraries/standalone/drivers/scmi/fscmi_mhu/fscmi_perf.c deleted file mode 100644 index 29620e8fc9..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/scmi/fscmi_mhu/fscmi_perf.c +++ /dev/null @@ -1,543 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fscmi_perf.c - * Date: 2023-01-18 15:38:15 - * LastEditTime: 2023-01-18 15:38:17 - * Description:  This file is for performance domain control - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 liushengming 2023/01/31 init - */ - -#include "fscmi_perf.h" -#include -#include "fscmi.h" -#include "fscmi_base.h" -#include "fio.h" -#include "fdebug.h" -#include "ftypes.h" -#include "fswap.h" -#include "fkernel.h" -#include "fassert.h" - -#define FSCMI_PERF_DEBUG_TAG "FSCMI_PERF" -#define FSCMI_PERF_ERROR(format, ...) FT_DEBUG_PRINT_E(FSCMI_PERF_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSCMI_PERF_WARN(format, ...) FT_DEBUG_PRINT_W(FSCMI_PERF_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSCMI_PERF_INFO(format, ...) FT_DEBUG_PRINT_I(FSCMI_PERF_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSCMI_PERF_DEBUG(format, ...) FT_DEBUG_PRINT_D(FSCMI_PERF_DEBUG_TAG, format, ##__VA_ARGS__) - -static FError FScmiPerfGetVersion(FScmi *instance_p,u32 *rev_info) -{ - FError ret; - struct FScmiTransferInfo *info; - - info = FScmiGetInfo(instance_p, SCMI_PROTOCOL_PERF); - if (info == NULL) - { - FSCMI_PERF_ERROR("Info data structure not found ,protocol id is %d",SCMI_PROTOCOL_PERF); - return FSCMI_ERROR_NULL_POINTER; - } - - /* Prepare hdr packaging */ - ret = FScmiMessageInit(instance_p, PERF_VERSION_GET, SCMI_PROTOCOL_PERF, 0, sizeof(*rev_info),info->tx.buf); - - if(ret != FT_SUCCESS) - { - FSCMI_PERF_ERROR("Prepare hdr packaging is error ,protocol id is %d",SCMI_PROTOCOL_PERF); - return ret; - } - - ret = FScmiDoTransport(instance_p, info, SCMI_PROTOCOL_PERF); - if(ret != FT_SUCCESS) - { - FSCMI_PERF_ERROR("Transport package error,protocol id is %d",SCMI_PROTOCOL_PERF); - return ret; - } - - /* Fill in the obtained parameters */ - *rev_info = FtIn32((uintptr)info->rx.buf); - - return FT_SUCCESS; -} - -static FError FScmiPerfAttributesGet(FScmi *instance_p,struct FScmiPerfInfo *pinfo) -{ - FError ret; - struct FScmiTransferInfo *info; - struct FScmiMsgRespPerfAttributes *attr; - - info = FScmiGetInfo(instance_p, SCMI_PROTOCOL_PERF); - if (info == NULL) - { - FSCMI_PERF_ERROR("Info data structure not found ,protocol id is %d",SCMI_PROTOCOL_PERF); - return FSCMI_ERROR_NULL_POINTER; - } - /* Prepare hdr packaging */ - ret = FScmiMessageInit(instance_p, PERF_ATTRIBUTES_GET, SCMI_PROTOCOL_PERF, 0, sizeof(*attr),info->tx.buf); - if(ret != FT_SUCCESS) - { - FSCMI_PERF_ERROR("Prepare hdr packaging is error ,protocol id is %d",SCMI_PROTOCOL_PERF); - return ret; - } - - attr = (struct FScmiMsgRespPerfAttributes *)info->rx.buf; - - ret = FScmiDoTransport(instance_p, info, SCMI_PROTOCOL_PERF); - if(ret != FT_SUCCESS) - { - FSCMI_PERF_ERROR("Transport package error,protocol id is %d",SCMI_PROTOCOL_PERF); - return ret; - } - - u16 flags = attr->flags; - pinfo->num_domains = attr->num_domains; - pinfo->power_scale_mw = POWER_SCALE_IN_MILLIWATT(flags); - pinfo->stats_addr = (u32)attr->stats_addr_low | ((u64)(attr->stats_addr_high) << 32); - pinfo->stats_size = attr->stats_size; - - return FT_SUCCESS; -} - -static FError FScmiPerfDomainAttributesGet(FScmi *instance_p, u32 domain, struct FPerfDomInfo *dom_info) -{ - FError ret; - struct FScmiTransferInfo *info; - struct FScmiMsgRespPerfDomainAttributes *attr; - - info = FScmiGetInfo(instance_p, SCMI_PROTOCOL_PERF); - if (info == NULL) - { - FSCMI_PERF_ERROR("Info data structure not found ,protocol id is %d",SCMI_PROTOCOL_PERF); - return FSCMI_ERROR_NULL_POINTER; - } - - /* Prepare hdr packaging */ - ret = FScmiMessageInit(instance_p, PERF_DOMAIN_ATTRIBUTES, SCMI_PROTOCOL_PERF, sizeof(domain), sizeof(*attr),info->tx.buf); - if(ret != FT_SUCCESS) - { - FSCMI_PERF_ERROR("Prepare hdr packaging is error ,protocol id is %d",SCMI_PROTOCOL_PERF); - return ret; - } - - *(u32 *)info->tx.buf = domain; - attr = (struct FScmiMsgRespPerfDomainAttributes *)info->rx.buf; - - ret = FScmiDoTransport(instance_p, info, SCMI_PROTOCOL_PERF); - if(ret != FT_SUCCESS) - { - FSCMI_PERF_ERROR("Transport package error,protocol id is %d",SCMI_PROTOCOL_PERF); - return ret; - } - - u32 flags = attr->flags; - - dom_info->set_limits = SUPPORTS_SET_LIMITS(flags); - dom_info->set_perf = SUPPORTS_SET_PERF_LVL(flags); - dom_info->perf_limit_notify = SUPPORTS_PERF_LIMIT_NOTIFY(flags); - dom_info->perf_level_notify = SUPPORTS_PERF_LEVEL_NOTIFY(flags); - dom_info->sustained_freq_khz = attr->sustained_freq_khz; - dom_info->sustained_perf_level = attr->sustained_perf_level; - if (!dom_info->sustained_freq_khz || - !dom_info->sustained_perf_level) - /* CPUFreq converts to kHz, hence default 1000 */ - dom_info->mult_factor = 1000; - else - dom_info->mult_factor = - (dom_info->sustained_freq_khz * 1000) / - dom_info->sustained_perf_level; - strlcpy(dom_info->name, attr->name, FSCMI_MAX_STR_SIZE); - - return FT_SUCCESS; -} - -static int opp_cmp_func(const void *opp1, const void *opp2) -{ - const struct FScmiOpp *t1 = opp1, *t2 = opp2; - - return t1->perf_val - t2->perf_val; -} - -static FError FScmiPerfDescribeLevelsGet(FScmi *instance_p, u32 domain, struct FPerfDomInfo *perf_dom) -{ - FError ret; - u32 cnt; - struct FScmiTransferInfo *info; - u32 tot_opp_cnt = 0; - u16 num_returned, num_remaining; - struct FScmiOpp *opp; - struct FScmiMsgPerfDescribeLevels *dom_info; - struct FScmiMsgRespPerfDescribeLevels *level_info; - - info = FScmiGetInfo(instance_p, SCMI_PROTOCOL_PERF); - if (info == NULL) - { - FSCMI_PERF_ERROR("Info data structure not found ,protocol id is %d",SCMI_PROTOCOL_PERF); - return FSCMI_ERROR_NULL_POINTER; - } - - /* Prepare hdr packaging */ - ret = FScmiMessageInit(instance_p, PERF_DESCRIBE_LEVELS, SCMI_PROTOCOL_PERF, sizeof(*dom_info), 0,info->tx.buf); - if(ret != FT_SUCCESS) - { - FSCMI_PERF_ERROR("Prepare hdr packaging is error ,protocol id is %d",SCMI_PROTOCOL_PERF); - return ret; - } - - dom_info = (struct FScmiMsgPerfDescribeLevels*)info->tx.buf; - level_info = (struct FScmiMsgRespPerfDescribeLevels *)info->rx.buf; - - do - { - dom_info->domain = domain; - /* Set the number of OPPs to be skipped/already read */ - dom_info->level_index = tot_opp_cnt; - - ret = FScmiDoTransport(instance_p, info, SCMI_PROTOCOL_PERF); - if(ret != FT_SUCCESS) - { - FSCMI_PERF_ERROR("Transport package error,protocol id is %d",SCMI_PROTOCOL_PERF); - return ret; - } - - num_returned = level_info->num_returned; - num_remaining = level_info->num_remaining; - if (tot_opp_cnt + num_returned > FSCMI_MAX_OPPS) - { - FSCMI_PERF_ERROR("No. of OPPs exceeded MAX_OPPS"); - break; - } - - opp = &perf_dom->opp[tot_opp_cnt]; - for (cnt = 0; cnt < num_returned; cnt++, opp++) { - opp->perf_val = level_info->opp[cnt].perf_val; - opp->power = level_info->opp[cnt].power; - opp->trans_latency_us = level_info->opp[cnt].transition_latency_us; - - FSCMI_PERF_INFO("Level %d: %d KHz Power cost%d Latency %dus\n", cnt, opp->perf_val, opp->power, opp->trans_latency_us); - } - - tot_opp_cnt += num_returned; - /* - * check for both returned and remaining to avoid infinite - * loop due to buggy firmware - */ - } while (num_returned && num_remaining); - - perf_dom->opp_count = tot_opp_cnt; - //sort(perf_dom->opp, tot_opp_cnt, sizeof(*opp), opp_cmp_func, NULL); - - return FT_SUCCESS; -} - -static FError FScmiPerfLimitsSet(FScmi *instance_p, u32 domain, u32 max_perf, u32 min_perf) -{ - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - FASSERT(domain < instance_p->perf.num_domains); - - FError ret; - struct FScmiTransferInfo *info; - struct FScmiPerfSetLimits *limits; - - info = FScmiGetInfo(instance_p, SCMI_PROTOCOL_PERF); - if (info == NULL) - { - FSCMI_PERF_ERROR("Info data structure not found ,protocol id is %d",SCMI_PROTOCOL_PERF); - return FSCMI_ERROR_NULL_POINTER; - } - - /* Prepare hdr packaging */ - ret = FScmiMessageInit(instance_p, PERF_LIMITS_SET, SCMI_PROTOCOL_PERF, sizeof(*limits), 0,info->tx.buf); - if(ret != FT_SUCCESS) - { - FSCMI_PERF_ERROR("Prepare hdr packaging is error ,protocol id is %d",SCMI_PROTOCOL_PERF); - return ret; - } - - limits = (struct FScmiPerfSetLimits *)info->tx.buf; - limits->domain = domain; - limits->max_level = max_perf; - limits->min_level = min_perf; - - ret = FScmiDoTransport(instance_p, info, SCMI_PROTOCOL_PERF); - if(ret != FT_SUCCESS) - { - FSCMI_PERF_ERROR("Transport package error,protocol id is %d",SCMI_PROTOCOL_PERF); - return ret; - } - - FSCMI_PERF_INFO("FScmiPerfLimitsSet domain:%d max_level:%d KHz, min_level:%d KHz.",limits->domain,limits->max_level,limits->min_level); - //FSCMI_PERF_INFO("FScmiPerfLimitsSet status:%d.",(int)instance_p->info->hdr.status); - return FT_SUCCESS; -} - -static FError FScmiPerfLimitsGet(FScmi *instance_p, u32 domain, u32 *max_perf, u32 *min_perf) -{ - FASSERT(instance_p != NULL); - FASSERT(max_perf != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - FASSERT(domain < instance_p->perf.num_domains); - - FError ret; - s32 status; - struct FScmiTransferInfo *info; - struct FScmiPerfGetLimits *limits; - - info = FScmiGetInfo(instance_p, SCMI_PROTOCOL_PERF); - if (info == NULL) - { - FSCMI_PERF_ERROR("Info data structure not found ,protocol id is %d",SCMI_PROTOCOL_PERF); - return FSCMI_ERROR_NULL_POINTER; - } - - /* Prepare hdr packaging */ - ret = FScmiMessageInit(instance_p, PERF_LIMITS_GET, SCMI_PROTOCOL_PERF, sizeof(u32), 0,info->tx.buf); - if(ret != FT_SUCCESS) - { - FSCMI_PERF_ERROR("Prepare hdr packaging is error ,protocol id is %d",SCMI_PROTOCOL_PERF); - return ret; - } - - *(u32 *)info->tx.buf = domain; - - ret = FScmiDoTransport(instance_p, info, SCMI_PROTOCOL_PERF); - if(ret != FT_SUCCESS) - { - FSCMI_PERF_ERROR("Transport package error,protocol id is %d",SCMI_PROTOCOL_PERF); - return ret; - } - limits = (struct FScmiPerfGetLimits *)info->rx.buf; - //status = limits->status; - *max_perf = limits->max_level; - *min_perf = limits->min_level; - FSCMI_PERF_INFO("FScmiPerfLimitsGet domain:%d, max_level:%d KHz, min_level:%d KHz.",domain,*max_perf,*min_perf); - return FT_SUCCESS; -} - -static FError FScmiPerfLevelSet(FScmi *instance_p, u32 domain, u32 level, boolean poll) -{ - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - FASSERT(domain < instance_p->perf.num_domains); - - FError ret; - struct FScmiTransferInfo *info; - struct FScmiPerfSetLevel *lvl; - - info = FScmiGetInfo(instance_p, SCMI_PROTOCOL_PERF); - if (info == NULL) - { - FSCMI_PERF_ERROR("Info data structure not found ,protocol id is %d",SCMI_PROTOCOL_PERF); - return FSCMI_ERROR_NULL_POINTER; - } - - /* Prepare hdr packaging */ - ret = FScmiMessageInit(instance_p, PERF_LEVEL_SET, SCMI_PROTOCOL_PERF, sizeof(*lvl), 0,info->tx.buf); - if(ret != FT_SUCCESS) - { - FSCMI_PERF_ERROR("Prepare hdr packaging is error ,protocol id is %d",SCMI_PROTOCOL_PERF); - return ret; - } - - info->poll_completion = poll; - lvl = (struct FScmiPerfSetLevel *)info->tx.buf; - lvl->domain = domain; - lvl->level = level; - ret = FScmiDoTransport(instance_p, info, SCMI_PROTOCOL_PERF); - if(ret != FT_SUCCESS) - { - FSCMI_PERF_ERROR("Transport package error,protocol id is %d",SCMI_PROTOCOL_PERF); - return ret; - } - FSCMI_PERF_INFO("FScmiPerfLevelSet domain:%d level:%d KHz.",lvl->domain,lvl->level); - return FT_SUCCESS; -} - -static FError FScmiPerfLevelGet(FScmi *instance_p, u32 domain, u32 *level, boolean poll) -{ - FASSERT(instance_p != NULL); - FASSERT(level != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - FASSERT(domain < instance_p->perf.num_domains); - - FError ret; - struct FScmiTransferInfo *info; - - info = FScmiGetInfo(instance_p, SCMI_PROTOCOL_PERF); - if (info == NULL) - { - FSCMI_PERF_ERROR("Info data structure not found ,protocol id is %d",SCMI_PROTOCOL_PERF); - return FSCMI_ERROR_NULL_POINTER; - } - - /* Prepare hdr packaging */ - ret = FScmiMessageInit(instance_p, PERF_LEVEL_GET, SCMI_PROTOCOL_PERF, sizeof(u32), sizeof(u32),info->tx.buf); - if(ret != FT_SUCCESS) - { - FSCMI_PERF_ERROR("Prepare hdr packaging is error ,protocol id is %d",SCMI_PROTOCOL_PERF); - return ret; - } - - info->poll_completion = poll; - *(u32 *)info->tx.buf = domain; - - ret = FScmiDoTransport(instance_p, info, SCMI_PROTOCOL_PERF); - if(ret != FT_SUCCESS) - { - FSCMI_PERF_ERROR("Transport package error,protocol id is %d",SCMI_PROTOCOL_PERF); - return ret; - } - - *level = *(u32 *)info->rx.buf; - FSCMI_PERF_INFO("FScmiPerfLevelGet domain:%d level:%d KHz.",domain,*level); - return FT_SUCCESS; -} - -/** - * @name: FScmiDvfsFreqSet - * @msg: Dynamic frequency scaling set - * @return {FError} 返回值 - * @param {FScmi} *instance_p scmi协议实例 - * @param {u32} domain 性能域id - * @param {u64} freq 频率值Hz,依据初始化获得的level对应的值写入,不支持任意调频 - * @param {boolean} poll 写入模式 - */ -FError FScmiDvfsFreqSet(FScmi *instance_p, u32 domain, u64 freq_Hz, boolean poll) -{ - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - FASSERT(domain < instance_p->perf.num_domains); - - FError ret; - struct FScmiPerfInfo *pi = &instance_p->perf; - struct FPerfDomInfo *dom = pi->dom_info + domain; - - ret = FScmiPerfLevelSet(instance_p, domain, freq_Hz / dom->mult_factor, poll); - if(ret != FT_SUCCESS) - { - FSCMI_PERF_ERROR("FScmiPerfLevelSet error ,protocol id is %d",SCMI_PROTOCOL_PERF); - return ret; - } - return FT_SUCCESS; -} - -/** - * @name: FScmiDvfsFreqGet - * @msg: Dynamic frequency scaling get - * @return {FError} 返回值 - * @param {FScmi} *instance_p scmi协议实例 - * @param {u32} domain 性能域id - * @param {u64} *freq 当前性能域的频率值 - * @param {boolean} poll 写入模式 - */ -FError FScmiDvfsFreqGet(FScmi *instance_p, u32 domain, u64 *freq, boolean poll) -{ - FASSERT(instance_p != NULL); - FASSERT(freq != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - FASSERT(domain < instance_p->perf.num_domains); - - FError ret; - u32 level; - struct FScmiPerfInfo *pi = &instance_p->perf; - struct FPerfDomInfo *dom = pi->dom_info + domain; - - ret = FScmiPerfLevelGet(instance_p, domain, &level, poll); - if(ret != FT_SUCCESS) - { - FSCMI_PERF_ERROR("FScmiPerfLevelGet error ,protocol id is %d",SCMI_PROTOCOL_PERF); - return ret; - } - *freq = level * dom->mult_factor; - return FT_SUCCESS; -} - -u64 FScmiPerfGetOppFreq(FScmi *instance_p,u32 domain,u32 opp_num) -{ - FASSERT(instance_p != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - FASSERT(domain < instance_p->perf.num_domains); - - struct FPerfDomInfo *dom = &instance_p->perf.dom_info[domain]; - - if (opp_num > dom->opp_count) - { - FSCMI_PERF_ERROR("Can't find opp_num,please check."); - return FSCMI_ERROR_REQUEST; - } - - return dom->opp[opp_num].perf_val * dom->mult_factor; -} - -/** - * @name: FScmiPerfInit - * @msg: Performance domain initialization - * @return {FError} 返回值 - * @param {FScmi} *instance_p scmi协议实例 - */ -FError FScmiPerfInit(FScmi *instance_p) -{ - FError ret; - struct FScmiPerfInfo *pinfo; - pinfo = &instance_p->perf; - - ret = FScmiPerfGetVersion(instance_p,&instance_p->perf.version); - if(ret != FT_SUCCESS) - { - FSCMI_PERF_ERROR("Can't get version,please check mem_address or chan_id.Error code:0x%x.",ret); - return FSCMI_ERROR_REQUEST; - } - instance_p->perf.major_ver = (instance_p->perf.version >> 16); - instance_p->perf.minor_ver = (instance_p->perf.version & 0xffff); - FSCMI_PERF_INFO("Perf Version %d.%d\n",instance_p->perf.major_ver, instance_p->perf.minor_ver); - - ret = FScmiPerfAttributesGet(instance_p, pinfo); - if(ret != FT_SUCCESS) - { - FSCMI_PERF_ERROR("Can't get version,please check mem_address or chan_id.Error code:0x%x.",ret); - return FSCMI_ERROR_REQUEST; - } - - FSCMI_PERF_INFO("SCMI Perf num_domains:%d,power_scale_mw:%d,stats_addr:0x%x,stats_size:0x%x.\n", instance_p->perf.num_domains, - instance_p->perf.power_scale_mw, - instance_p->perf.stats_addr, - instance_p->perf.stats_size); - for (u32 i = 0; i < pinfo->num_domains; i++) - { - struct FPerfDomInfo *dom = pinfo->dom_info + i; - - ret = FScmiPerfDomainAttributesGet(instance_p, i, dom); - if (ret != FT_SUCCESS) - { - FSCMI_PERF_ERROR("Can't get version,please check mem_address or chan_id.Error code:0x%x.",ret); - return FSCMI_ERROR_REQUEST; - } - - ret = FScmiPerfDescribeLevelsGet(instance_p, i, dom); - if (ret != FT_SUCCESS) - { - FSCMI_PERF_ERROR("Can't get version,please check mem_address or chan_id.Error code:0x%x.",ret); - return FSCMI_ERROR_REQUEST; - } - FSCMI_PERF_INFO("SCMI Perf opp_count:%d,sustained_freq_khz:%d KHz,sustained_perf_level:%d KHz,mult_factor:%d Hz,name:%s.\n", dom->opp_count, - dom->sustained_freq_khz, - dom->sustained_perf_level, - dom->mult_factor, - dom->name); - } - - return FT_SUCCESS; -} diff --git a/bsp/phytium/libraries/standalone/drivers/scmi/fscmi_mhu/fscmi_perf.h b/bsp/phytium/libraries/standalone/drivers/scmi/fscmi_mhu/fscmi_perf.h deleted file mode 100644 index 9bd63f3d76..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/scmi/fscmi_mhu/fscmi_perf.h +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fscmi_perf.h - * Date: 2022-12-29 16:40:54 - * LastEditTime: 2022-12-29 16:40:55 - * Description:  This file is for performance message struct - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 liushengming 2023/01/31 init - */ -#ifndef FSCMI_PERF_H -#define FSCMI_PERF_H - -#include "ftypes.h" -#include "ferror_code.h" -#include "fparameters.h" -#include "fscmi.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -enum FScmiPerformanceProtocolCmd { - PERF_VERSION_GET = 0x0, - PERF_ATTRIBUTES_GET = 0x1, - PERF_DOMAIN_ATTRIBUTES = 0x3, - PERF_DESCRIBE_LEVELS = 0x4, - PERF_LIMITS_SET = 0x5, - PERF_LIMITS_GET = 0x6, - PERF_LEVEL_SET = 0x7, - PERF_LEVEL_GET = 0x8, - PERF_NOTIFY_LIMITS = 0x9, - PERF_NOTIFY_LEVEL = 0xa, -}; - -struct FScmiMsgRespPerfAttributes { - u16 num_domains; - u16 flags; -#define POWER_SCALE_IN_MILLIWATT(x) ((x) & BIT(0)) - u32 stats_addr_low; - u32 stats_addr_high; - u32 stats_size; -}; - -struct FScmiMsgRespPerfDomainAttributes { - u32 flags; -#define SUPPORTS_SET_LIMITS(x) ((x) & BIT(31)) -#define SUPPORTS_SET_PERF_LVL(x) ((x) & BIT(30)) -#define SUPPORTS_PERF_LIMIT_NOTIFY(x) ((x) & BIT(29)) -#define SUPPORTS_PERF_LEVEL_NOTIFY(x) ((x) & BIT(28)) - u32 rate_limit_us; - u32 sustained_freq_khz; - u32 sustained_perf_level; - u8 name[FSCMI_MAX_STR_SIZE]; -}; - -struct FScmiMsgPerfDescribeLevels { - u32 domain; - u32 level_index; -}; - -struct FScmiPerfSetLimits { - u32 domain; - u32 max_level; - u32 min_level; -}; - -struct FScmiPerfGetLimits { - u32 max_level; - u32 min_level; -}; - -struct FScmiPerfSetLevel { - u32 domain; - u32 level; -}; - -struct FScmiPerfNotifyLevelOrLimits { - u32 domain; - u32 notify_enable; -}; - -struct FScmiMsgRespPerfDescribeLevels { - u16 num_returned; - u16 num_remaining; - struct { - u32 perf_val;/* Performance level value */ - u32 power;/* Power cost */ - u16 transition_latency_us;/* Worst-case transition latency in microseconds to move from any supported performance to the level indicated by this entry in the array */ - u16 reserved; - } opp[0]; -}; - -FError FScmiPerfInit(FScmi *instance_p); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/bsp/phytium/libraries/standalone/drivers/scmi/fscmi_mhu/fscmi_sensors.c b/bsp/phytium/libraries/standalone/drivers/scmi/fscmi_mhu/fscmi_sensors.c deleted file mode 100644 index 1130528b0d..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/scmi/fscmi_mhu/fscmi_sensors.c +++ /dev/null @@ -1,365 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fscmi_sensors.c - * Date: 2023-01-12 20:52:41 - * LastEditTime: 2023-01-12 20:52:42 - * Description:  This file is for cpu sersor information - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 liushengming 2023/01/13 init - */ - -#include "fscmi_sensors.h" -#include -#include "fscmi.h" -#include "fscmi_base.h" -#include "fio.h" -#include "fdebug.h" -#include "fsleep.h" -#include "ftypes.h" -#include "fswap.h" -#include "fkernel.h" -#include "fassert.h" - -#define FSCMI_SENSOR_DEBUG_TAG "FSCMI_SENSOR" -#define FSCMI_SENSOR_ERROR(format, ...) FT_DEBUG_PRINT_E(FSCMI_SENSOR_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSCMI_SENSOR_WARN(format, ...) FT_DEBUG_PRINT_W(FSCMI_SENSOR_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSCMI_SENSOR_INFO(format, ...) FT_DEBUG_PRINT_I(FSCMI_SENSOR_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSCMI_SENSOR_DEBUG(format, ...) FT_DEBUG_PRINT_D(FSCMI_SENSOR_DEBUG_TAG, format, ##__VA_ARGS__) - -static FError FScmiSensorGetVersion(FScmi *instance_p,u32 *rev_info) -{ - FError ret; - struct FScmiTransferInfo *info; - - info = FScmiGetInfo(instance_p, SCMI_PROTOCOL_SENSOR); - if (info == NULL) - { - FSCMI_SENSOR_ERROR("Info data structure not found ,protocol id is %d",SCMI_PROTOCOL_SENSOR); - return FSCMI_ERROR_NULL_POINTER; - } - - /* Prepare hdr packaging */ - ret = FScmiMessageInit(instance_p, SENSOR_VERSION_GET, SCMI_PROTOCOL_SENSOR, 0, sizeof(*rev_info),info->tx.buf); - - if(ret != FT_SUCCESS) - { - FSCMI_SENSOR_ERROR("Prepare hdr packaging is error ,protocol id is %d",SCMI_PROTOCOL_SENSOR); - return ret; - } - - ret = FScmiDoTransport(instance_p, info, SCMI_PROTOCOL_SENSOR); - if(ret != FT_SUCCESS) - { - FSCMI_SENSOR_ERROR("Transport package error,protocol id is %d",SCMI_PROTOCOL_SENSOR); - return ret; - } - - /* Fill in the obtained parameters */ - *rev_info = FtIn32((uintptr)info->rx.buf); - - return FT_SUCCESS; -} - -static FError FScmiSensorAttributesGet(FScmi *instance_p,struct FScmiSensorsInfo *si) -{ - FError ret; - struct FScmiTransferInfo *info; - struct FScmiMsgRespSensorAttributes *attr; - - info = FScmiGetInfo(instance_p, SCMI_PROTOCOL_SENSOR); - if (info == NULL) - { - FSCMI_SENSOR_ERROR("Info data structure not found ,protocol id is %d",SCMI_PROTOCOL_SENSOR); - return FSCMI_ERROR_NULL_POINTER; - } - - ret = FScmiMessageInit(instance_p, SENSOR_ATTRIBUTES_GET,SCMI_PROTOCOL_SENSOR, 0, sizeof(*attr), info->tx.buf); - if(ret != FT_SUCCESS) - { - FSCMI_SENSOR_ERROR("Prepare hdr packaging is error ,protocol id is %d",SCMI_PROTOCOL_SENSOR); - return ret; - } - - ret = FScmiDoTransport(instance_p, info, SCMI_PROTOCOL_SENSOR); - if(ret != FT_SUCCESS) - { - FSCMI_SENSOR_ERROR("Transport package error,protocol id is %d",SCMI_PROTOCOL_SENSOR); - return ret; - } - - /* Fill in the obtained parameters */ - attr = (struct FScmiMsgRespSensorAttributes *)info->rx.buf; - - si->num_sensors = (int)attr->num_sensors; - si->max_requests = (int)attr->max_requests; - si->reg_addr = (u32)attr->reg_addr_low | ((u64)(attr->reg_addr_high)) << 32; - si->reg_size = (u32)(attr->reg_size); - - return FT_SUCCESS; -} - -static FError FScmiSensorDescriptionGet(FScmi *instance_p,struct FScmiSensorsInfo *si) -{ - int ret, cnt; - u32 desc_index = 0; - u16 num_returned, num_remaining; - struct FScmiTransferInfo *info; - struct FScmiMsgRespSensorDescription *buf; - - info = FScmiGetInfo(instance_p, SCMI_PROTOCOL_SENSOR); - if (info == NULL) - { - FSCMI_SENSOR_ERROR("Info data structure not found ,protocol id is %d",SCMI_PROTOCOL_SENSOR); - return FSCMI_ERROR_NULL_POINTER; - } - - ret = FScmiMessageInit(instance_p, SENSOR_DESCRIPTION_GET, SCMI_PROTOCOL_SENSOR, sizeof(u32), 0, info->tx.buf); - if(ret != FT_SUCCESS) - { - FSCMI_SENSOR_ERROR("Prepare hdr packaging is error ,protocol id is %d",SCMI_PROTOCOL_SENSOR); - return ret; - } - - buf = (struct FScmiMsgRespSensorDescription *)info->rx.buf; - - FSCMI_SENSOR_INFO("DescriptionGet:num_returned:%d,num_remaining:%d.\n",buf->num_returned,buf->num_remaining); - do { - /* Set the number of sensors to be skipped/already read */ - *(u32 *)info->tx.buf = desc_index; - - ret = FScmiDoTransport(instance_p, info, SCMI_PROTOCOL_SENSOR); - if(ret != FT_SUCCESS) - { - FSCMI_SENSOR_ERROR("Transport package error,protocol id is %d",SCMI_PROTOCOL_SENSOR); - return ret; - } - - num_returned = (u16)(buf->num_returned); - num_remaining = (u16)(buf->num_remaining); - - if (desc_index + (u32)num_returned > si->num_sensors) { - FSCMI_SENSOR_ERROR("No. of sensors can't exceed:%d+%d > %d", desc_index, num_returned, si->num_sensors); - break; - } - - for (cnt = 0; cnt < num_returned; cnt++) { - u32 attrh; - struct FScmiSensorInfo *s; - - attrh = (u32)(buf->desc[cnt].attributes_high); - s = &si->sensor_info[desc_index + cnt]; - s->id = (u32)(buf->desc[cnt].id); - s->type = SENSOR_TYPE(attrh); - strlcpy(s->name, buf->desc[cnt].name, FSCMI_MAX_STR_SIZE); - FSCMI_SENSOR_INFO("DescriptionGet:id:%d,type:%d,name:%s.\n",s->id,s->type,s->name); - } - - desc_index += num_returned; - /* - * check for both returned and remaining to avoid infinite - * loop due to buggy firmware - */ - } while (num_returned && num_remaining); - return ret; -} - -static int FScmiSensorsTripPointSet(FScmi *instance_p,u32 sensor_id, u8 trip_id, u64 trip_value) -{ - FError ret; - u32 evt_cntl = SENSOR_TP_BOTH; - struct FScmiTransferInfo *info; - struct FScmiMsgSetSensorTripPoint *trip; - - info = FScmiGetInfo(instance_p, SCMI_PROTOCOL_SENSOR); - if (info == NULL) - { - FSCMI_SENSOR_ERROR("Info data structure not found ,protocol id is %d",SCMI_PROTOCOL_SENSOR); - return FSCMI_ERROR_NULL_POINTER; - } - - /* Prepare hdr packaging */ - ret = FScmiMessageInit(instance_p, SENSOR_TRIP_POINT_SET, SCMI_PROTOCOL_SENSOR, sizeof(*trip), 0,info->tx.buf); - if(ret != FT_SUCCESS) - { - FSCMI_SENSOR_ERROR("Prepare hdr packaging is error ,protocol id is %d",SCMI_PROTOCOL_SENSOR); - return ret; - } - - trip = (struct FScmiMsgSetSensorTripPoint *)info->tx.buf; - trip->id = sensor_id; - trip->event_control = evt_cntl; - trip->value_low = trip_value & 0xffffffff; - trip->value_high = trip_value >> 32; - - ret = FScmiDoTransport(instance_p, info, SCMI_PROTOCOL_SENSOR); - if(ret != FT_SUCCESS) - { - FSCMI_SENSOR_ERROR("Transport package error,protocol id is %d",SCMI_PROTOCOL_SENSOR); - return ret; - } - - return FT_SUCCESS; -} -static FError FScmiSensorsConfigurationSet(FScmi *instance_p,u32 sensor_id) -{ - FError ret; - u32 evt_cntl = BIT(0); - struct FScmiTransferInfo *info; - struct FScmiMsgSetSensorConfig *cfg; - - info = FScmiGetInfo(instance_p, SCMI_PROTOCOL_SENSOR); - if (info == NULL) - { - FSCMI_SENSOR_ERROR("Info data structure not found ,protocol id is %d",SCMI_PROTOCOL_SENSOR); - return FSCMI_ERROR_NULL_POINTER; - } - - /* Prepare hdr packaging */ - ret = FScmiMessageInit(instance_p, SENSOR_CONFIG_SET, SCMI_PROTOCOL_SENSOR, sizeof(*cfg), 0,info->tx.buf); - if(ret != FT_SUCCESS) - { - FSCMI_SENSOR_ERROR("Prepare hdr packaging is error ,protocol id is %d",SCMI_PROTOCOL_SENSOR); - return ret; - } - - cfg = (struct FScmiMsgSetSensorConfig *)info->tx.buf; - cfg->id = sensor_id; - cfg->event_control = evt_cntl; - - ret = FScmiDoTransport(instance_p, info, SCMI_PROTOCOL_SENSOR); - if(ret != FT_SUCCESS) - { - FSCMI_SENSOR_ERROR("Transport package error,protocol id is %d",SCMI_PROTOCOL_SENSOR); - return ret; - } - - return FT_SUCCESS; -} - -static FError FScmiSensorsReadingGet(FScmi *instance_p,u32 sensor_id, boolean async, s64 *value) -{ - FError ret; - struct FScmiTransferInfo *info; - struct FcmiMsgSensorReadingGet *sensor; - - info = FScmiGetInfo(instance_p, SCMI_PROTOCOL_SENSOR); - if (info == NULL) - { - FSCMI_SENSOR_ERROR("Info data structure not found ,protocol id is %d",SCMI_PROTOCOL_SENSOR); - return FSCMI_ERROR_NULL_POINTER; - } - - /* Prepare hdr packaging */ - ret = FScmiMessageInit(instance_p, SENSOR_READING_GET, SCMI_PROTOCOL_SENSOR, sizeof(*sensor), sizeof(u64),info->tx.buf); - if(ret != FT_SUCCESS) - { - FSCMI_SENSOR_ERROR("Prepare hdr packaging is error ,protocol id is %d",SCMI_PROTOCOL_SENSOR); - return ret; - } - - sensor = (struct FcmiMsgSensorReadingGet *)info->tx.buf; - sensor->id = sensor_id; - sensor->flags = async ? SENSOR_READ_ASYNC:0; - - ret = FScmiDoTransport(instance_p, info, SCMI_PROTOCOL_SENSOR); - if(ret != FT_SUCCESS) - { - FSCMI_SENSOR_ERROR("Transport package error,protocol id is %d",SCMI_PROTOCOL_SENSOR); - return ret; - } - - /* Fill in the obtained parameters */ - u32 *pval = (u32 *)info->rx.buf; - *value = *pval; - *value |= (s64)(*(pval +1)) << 32; - return FT_SUCCESS; -} - -/** - * @name: FScmiSensorGetTemp - * @msg: - * @return {FError} 返回值 - * @param {FScmi} *instance_p scmi协议实例 - * @param {u32} sensor_id 传感器ID,可以在初始化后获取 - * @param {s64} *temp 获取对应ID传感器的温度 - */ -FError FScmiSensorGetTemp(FScmi *instance_p, u32 sensor_id,s64 *temp) -{ - FASSERT(instance_p != NULL); - FASSERT(temp != NULL); - FASSERT(instance_p->is_ready == FT_COMPONENT_IS_READY); - - FError ret; - - if(instance_p->sensors.num_sensors > 0 && instance_p->sensors.num_sensors > sensor_id) - { - if (instance_p->sensors.sensor_info[sensor_id].type == DEGRESS_C) - { - FScmiSensorsReadingGet(instance_p, sensor_id, FALSE, temp); - FSCMI_SENSOR_INFO("FScmiSensorsReadingGet type DEGRESS_C value: %d `C.",*temp); - } - } - else - { - FSCMI_SENSOR_ERROR("Can't find sensor,please running function FScmiSensorInit first."); - } - return FT_SUCCESS; -} - -/** - * @name: FScmiSensorInit - * @msg: Sensor initialization - * @return {FError} 返回值 - * @param {FScmi} *instance_p scmi协议实例 - */ -FError FScmiSensorInit(FScmi *instance_p) -{ - u32 version; - FError ret; - struct FScmiSensorsInfo *sinfo; - sinfo = &instance_p->sensors; - - ret = FScmiSensorGetVersion(instance_p,&instance_p->sensors.version); - if(ret != FT_SUCCESS) - { - FSCMI_SENSOR_ERROR("Can't get version,please check mem_address or chan_id.Error code:0x%x.",ret); - return FSCMI_ERROR_REQUEST; - } - instance_p->sensors.major_ver = (instance_p->sensors.version >> 16); - instance_p->sensors.minor_ver = (instance_p->sensors.version & 0xffff); - FSCMI_SENSOR_INFO("Sensor Version %d.%d\n",instance_p->sensors.major_ver, instance_p->sensors.minor_ver); - - ret = FScmiSensorAttributesGet(instance_p, sinfo); - if(ret != FT_SUCCESS) - { - FSCMI_SENSOR_ERROR("Can't get version,please check mem_address or chan_id.Error code:0x%x.",ret); - return FSCMI_ERROR_REQUEST; - } - - FSCMI_SENSOR_INFO("SCMI Sensors num:%d,requests:%d,reg_addr:0x%x,reg_size:0x%x.\n", instance_p->sensors.num_sensors, - instance_p->sensors.max_requests, - instance_p->sensors.reg_addr, - instance_p->sensors.reg_size); - ret = FScmiSensorDescriptionGet(instance_p, sinfo); - if (ret != FT_SUCCESS) - { - FSCMI_SENSOR_ERROR("Can't get version,please check mem_address or chan_id.Error code:0x%x.",ret); - return FSCMI_ERROR_REQUEST; - } - return FT_SUCCESS; -} - diff --git a/bsp/phytium/libraries/standalone/drivers/scmi/fscmi_mhu/fscmi_sensors.h b/bsp/phytium/libraries/standalone/drivers/scmi/fscmi_mhu/fscmi_sensors.h deleted file mode 100644 index ee0edc3928..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/scmi/fscmi_mhu/fscmi_sensors.h +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fscmi_sensors.h - * Date: 2023-01-12 20:53:01 - * LastEditTime: 2023-01-12 20:53:01 - * Description:  This file is for cpu sensor message struct - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 liushengming 2023/01/13 init - */ - -#ifndef FSCMI_SENSORS_PROTOCOL_H -#define FSCMI_SENSORS_PROTOCOL_H - -#include "ftypes.h" -#include "ferror_code.h" -#include "fparameters.h" -#include "fscmi.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/* Sensor Type Enumerations */ -enum FScmiSensorType -{ - NONE=0x0, - UNSPECIFIED, - DEGRESS_C, - DEGRESS_F, - DEGRESS_K, -}; - -enum FScmiSensorProtocolCmd { - SENSOR_VERSION_GET = 0x0, - SENSOR_ATTRIBUTES_GET = 0x1, - SENSOR_DESCRIPTION_GET = 0x3, - SENSOR_CONFIG_SET = 0x4, - SENSOR_TRIP_POINT_SET = 0x5, - SENSOR_READING_GET = 0x6, -}; - -struct FScmiMsgRespSensorAttributes { - u16 num_sensors; - u8 max_requests; - u8 reserved; - u32 reg_addr_low; - u32 reg_addr_high; - u32 reg_size; -}; - -struct FScmiMsgRespSensorDescription { - u16 num_returned; - u16 num_remaining; - struct { - u32 id; - u32 attributes_low; -#define SUPPORTS_ASYNC_READ(x) ((x) & BIT(31)) -#define NUM_TRIP_POINTS(x) ((x) & 0xff) - u32 attributes_high; -#define SENSOR_TYPE(x) ((x) & 0xff) -#define SENSOR_SCALE(x) (((x) >> 11) & 0x1f) -#define SENSOR_UPDATE_SCALE(x) (((x) >> 22) & 0x1f) -#define SENSOR_UPDATE_BASE(x) (((x) >> 27) & 0x1f) - u8 name[FSCMI_MAX_STR_SIZE]; - } desc[0]; -}; - -struct FScmiMsgSetSensorConfig { - u32 id; - u32 event_control; -}; - -struct FScmiMsgSetSensorTripPoint { - u32 id; - u32 event_control; -#define SENSOR_TP_EVENT_MASK (0x3) -#define SENSOR_TP_DISABLED 0x0 -#define SENSOR_TP_POSITIVE 0x1 -#define SENSOR_TP_NEGATIVE 0x2 -#define SENSOR_TP_BOTH 0x3 -#define SENSOR_TP_ID(x) (((x) & 0xff) << 4) - u32 value_low; - u32 value_high; -}; - -struct FcmiMsgSensorReadingGet { - u32 id; - u32 flags; -#define SENSOR_READ_ASYNC BIT(0) -}; - -FError FScmiSensorInit(FScmi *instance_p); - -#ifdef __cplusplus -} -#endif - - -#endif diff --git a/bsp/phytium/libraries/standalone/drivers/serial/Kconfig b/bsp/phytium/libraries/standalone/drivers/serial/Kconfig deleted file mode 100644 index 95192bccbe..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/serial/Kconfig +++ /dev/null @@ -1,10 +0,0 @@ - -menu "Usart Configuration" - config ENABLE_Pl011_UART - bool - prompt "Use Pl011 uart" - default y - -endmenu - - diff --git a/bsp/phytium/libraries/standalone/drivers/serial/fpl011/fpl011.c b/bsp/phytium/libraries/standalone/drivers/serial/fpl011/fpl011.c deleted file mode 100644 index 6aabf5e803..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/serial/fpl011/fpl011.c +++ /dev/null @@ -1,286 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fpl011.c - * Date: 2021-11-02 14:53:42 - * LastEditTime: 2022-02-18 09:07:24 - * Description:  This file is for uart functions - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2021/11/2 first commit - * 1.1 liushengming 2022/02/18 fix bug - */ - -/***************************** Include Files ********************************/ -#include "fpl011.h" -#include "fio.h" -#include "ferror_code.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ - -u32 FPl011SendBuffer(FPl011 *uart_p); -u32 FPl011ReceiveBuffer(FPl011 *uart_p); - -static void FPl011StubHandler(void *Args, u32 Event, - u32 ByteCount); -/*****************************************************************************/ - - -FError FPl011CfgInitialize(FPl011 *uart_p, FPl011Config *config) -{ - u32 reg_value = 0; - FError ret ; - FASSERT(uart_p != NULL); - FASSERT(config != NULL); - - uart_p->config.instance_id = config->instance_id; - uart_p->config.base_address = config->base_address; - uart_p->config.ref_clock_hz = config->ref_clock_hz; - uart_p->config.irq_num = config->irq_num; - uart_p->config.baudrate = config->baudrate; - - uart_p->handler = FPl011StubHandler; - - uart_p->send_buffer.byte_p = NULL; - uart_p->send_buffer.requested_bytes = 0; - uart_p->send_buffer.remaining_bytes = 0; - - uart_p->receive_buffer.byte_p = NULL; - uart_p->receive_buffer.requested_bytes = 0; - uart_p->receive_buffer.remaining_bytes = 0; - uart_p->rxbs_error = 0; - - uart_p->is_ready = FT_COMPONENT_IS_READY; - ret = FPl011SetBaudRate(uart_p, uart_p->config.baudrate); - if (ret != FT_SUCCESS) - { - uart_p->is_ready = 0U; - } - else - { - /* - * Set up the default data format: 8 bit data, 1 stop bit, no - * parity - */ - reg_value = ((FPL011_FORMAT_WORDLENGTH_8BIT << 5) & FPL011LCR_H_WLEN); //config.base_address, FPL011LCR_H_OFFSET, reg_value); - - /* Set the RX FIFO trigger at 8 data bytes.Tx FIFO trigger is 8 data bytes*/ - reg_value = (1 << 3) | (1 << 0); - FUART_WRITEREG32(uart_p->config.base_address, FPL011IFLS_OFFSET, reg_value); - - /* Disable all interrupts, polled mode is the default */ - reg_value = 0; - FUART_WRITEREG32(uart_p->config.base_address, FPL011IMSC_OFFSET, reg_value); - } - - return FT_SUCCESS; -} - - -/** - * @name: FPl011Send - * @msg: This functions sends the specified buffer using the device in either - * polled or interrupt driven mode. - * @return The number of bytes actually sent. - * @param uart_p is a pointer to the FPl011 instance. - * @param byte_p is pointer to a buffer of data to be sent. - * @param length ontains the number of bytes to be sent. Any data that was already put into the - * transmit FIFO will be sent. - */ -u32 FPl011Send(FPl011 *uart_p, u8 *byte_p, u32 length) -{ - u32 sent_count = 0; - FASSERT(uart_p != NULL); - FASSERT(byte_p != NULL); - FASSERT(uart_p->is_ready == FT_COMPONENT_IS_READY); - - uart_p->send_buffer.byte_p = byte_p; - uart_p->send_buffer.requested_bytes = length; - uart_p->send_buffer.remaining_bytes = length; - sent_count = FPl011SendBuffer(uart_p); - return sent_count; -} - - - -static void FPl011StubHandler(void *args, u32 event, - u32 byte_count) -{ - (void)args; - (void)event; - (void)byte_count; - - FASSERT(0); -} - -/** - * @name: FPl011SendBuffer - * @msg: send data buffer through uart,if you close FIFO and open interrupt,recommend use FPl011BlockSend - * @return {*} - * @param uart_p - */ -u32 FPl011SendBuffer(FPl011 *uart_p) -{ - u32 sent_count = 0U; - u32 isbusy; - - isbusy = (u32)FUART_ISTRANSMITBUSY(uart_p->config.base_address); - while (isbusy == TRUE) - { - isbusy = (u32)FUART_ISTRANSMITBUSY(uart_p->config.base_address); - } - - /* - * If the TX FIFO is full, send nothing. - * Otherwise put bytes into the TX FIFO unil it is full, or all of the - * data has been put into the FIFO. - */ - while ((!FUART_ISTRANSMITFULL(uart_p->config.base_address)) && (uart_p->send_buffer.remaining_bytes > 0)) - { - sent_count = uart_p->send_buffer.requested_bytes - uart_p->send_buffer.remaining_bytes; - uart_p->send_buffer.remaining_bytes--; - - FUART_WRITEREG32(uart_p->config.base_address, FPL011DR_OFFSET, (u32)uart_p->send_buffer.byte_p[sent_count]); - } - return uart_p->send_buffer.requested_bytes - uart_p->send_buffer.remaining_bytes; -} - -/** - * @name: FPl011Receive - * @msg: This function attempts to receive a specified number of bytes of data - * from the device and store it into the specified buffer. - * @param uart_p is a pointer to the FPl011 instance - * @param byte_p is pointer to buffer for data to be received into - * @param length is the number of bytes to be received. - * @return The number of bytes received. - */ -u32 FPl011Receive(FPl011 *uart_p, u8 *byte_p, u32 length) -{ - u32 received; - - FASSERT(uart_p != NULL); - FASSERT(byte_p != NULL); - FASSERT(uart_p->is_ready == FT_COMPONENT_IS_READY); - - uart_p->receive_buffer.byte_p = byte_p; - uart_p->receive_buffer.requested_bytes = length; - uart_p->receive_buffer.remaining_bytes = length; - - received = FPl011ReceiveBuffer(uart_p); - - return received; -} - - -u32 FPl011ReceiveBuffer(FPl011 *uart_p) -{ - - u32 received_count = 0U; - u32 event; - u32 event_data; - u32 byte_value; - - while ((received_count < uart_p->receive_buffer.remaining_bytes) && !FUART_RECEIVEDATAEMPTY(uart_p->config.base_address)) - { - byte_value = FUART_READREG32(uart_p->config.base_address, FPL011DR_OFFSET); - - if (uart_p->rxbs_error) - { - if ((byte_value & FPL011DR_ALLE) != 0) - { - event_data = byte_value; - event = FPL011_EVENT_PARE_FRAME_BRKE; - - if (uart_p->handler) - { - uart_p->handler(uart_p->args, event, event_data); - } - } - } - uart_p->receive_buffer.byte_p[received_count] = (u8)(byte_value & 0xff); - received_count++; - } - - uart_p->rxbs_error = 0; - - if (uart_p->receive_buffer.byte_p != NULL) - { - uart_p->receive_buffer.byte_p += received_count; - } - uart_p->receive_buffer.remaining_bytes -= received_count; - - return received_count; -} - -/** - * @name: FPl011BlockSend - * @msg: initiate uart block send - * @return {*} - * @param uart_p - * @param byte_p - * @param length - */ -void FPl011BlockSend(FPl011 *uart_p, u8 *byte_p, u32 length) -{ - u32 index; - - FASSERT(uart_p != NULL); - FASSERT(byte_p != NULL); - FASSERT(uart_p->is_ready == FT_COMPONENT_IS_READY); - - for (index = 0; index < length; index++) - { - FPl011SendByte(uart_p->config.base_address, byte_p[index]); - } -} - -/** - * @name: FPl011BlockReceive - * @msg: initiate uart block receive - * @return {*} - * @param uart_p - */ -u8 FPl011BlockReceive(FPl011 *uart_p) -{ - FASSERT(uart_p != NULL); - FASSERT(uart_p->is_ready == FT_COMPONENT_IS_READY); - return FPl011RecvByte(uart_p->config.base_address); -} - -void FPl011IrqClearReciveTimeOut(FPl011 *uart_p) -{ - u32 reg_temp; - reg_temp = FPl011GetInterruptMask(uart_p); - reg_temp &= ~FPL011MIS_RTMIS; - FPl011SetInterruptMask(uart_p, reg_temp); -} - -void FPl011IrqEnableReciveTimeOut(FPl011 *uart_p) -{ - u32 reg_temp; - reg_temp = FPl011GetInterruptMask(uart_p); - reg_temp |= FPL011MIS_RTMIS; - FPl011SetInterruptMask(uart_p, reg_temp); -} diff --git a/bsp/phytium/libraries/standalone/drivers/serial/fpl011/fpl011.h b/bsp/phytium/libraries/standalone/drivers/serial/fpl011/fpl011.h deleted file mode 100644 index 0e2aac6025..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/serial/fpl011/fpl011.h +++ /dev/null @@ -1,184 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fpl011.h - * Date: 2021-11-02 14:53:42 - * LastEditTime: 2022-02-18 09:07:38 - * Description:  This file is for uart functions - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2021/11/2 first commit - * 1.1 liushengming 2022/02/18 fix bug - */ - -#ifndef FPL011_H -#define FPL011_H - -#include "ftypes.h" -#include "fassert.h" -#include "fpl011_hw.h" -#include "sdkconfig.h" - - -#ifdef __cplusplus -extern "C" -{ -#endif - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -#define FPL011_ERROR_PARAM FT_CODE_ERR(ErrModBsp, ErrBspUart, 0x1u) - -#define FPL011_BAUDRATE 115200U - -/* Config options */ -#define FPL011_OPTION_UARTEN 0x1U -#define FPL011_OPTION_RXEN 0x2U -#define FPL011_OPTION_TXEN 0x4U -#define FPL011_OPTION_FIFOEN 0x8U -#define FPL011_OPTION_CTS 0x10U -#define FPL011_OPTION_RTS 0x20U -#define FPL011_OPTION_DTR 0x40U -#define FPL011_OPTION_RTSEN 0x80U -#define FPL011_OPTION_CTSEN 0x100U -#define FPL011_OPTION_TXDMAEN 0x200U -#define FPL011_OPTION_RXDMAEN 0x400U - -/* Channel Operational Mode */ -#define FPL011_OPER_MODE_NORMAL (u8)0x00U /* Normal Mode */ -#define FPL011_OPER_MODE_LOCAL_LOOP (u8)0x01U /* Local Loop back Mode */ - - -/* Data format values */ -#define FPL011_FORMAT_WORDLENGTH_8BIT 0x3 -#define FPL011_FORMAT_WORDLENGTH_7BIT 0x2 -#define FPL011_FORMAT_WORDLENGTH_6BIT 0x1 -#define FPL011_FORMAT_WORDLENGTH_5BIT 0x0 - -#define FPL011_FORMAT_NO_PARITY 0U /* No parity */ -#define FPL011_FORMAT_EN_PARITY 1U /* Enable parity */ -#define FPL011_FORMAT_EVEN_PARITY 2U /* Even parity */ -#define FPL011_FORMAT_ODD_PARITY 0U /* Odd parity */ -#define FPL011_FORMAT_EN_STICK_PARITY 4U /* Stick parity */ -#define FPL011_FORMAT_NO_STICK_PARITY 0U /* Stick parity */ - -#define FPL011_FORMAT_PARITY_MASK 7U /* Format parity mask */ - -#define FPL011_FORMAT_EVEN_PARITY_SHIFT 1U /* Even parity shift */ -#define FPL011_FORMAT_EN_STICK_PARITY_SHIFT 5U /* Stick parity shift */ - -#define FPL011_FORMAT_2_STOP_BIT 1U -#define FPL011_FORMAT_1_STOP_BIT 0U - - -/* Callback events */ -#define FPL011_EVENT_RECV_DATA 1U /* Data receiving done */ -#define FPL011_EVENT_RECV_TOUT 2U /* A receive timeout occurred */ -#define FPL011_EVENT_SENT_DATA 3U /* Data transmission done */ -#define FPL011_EVENT_RECV_ERROR 4U /* A receive error detected */ -#define FPL011_EVENT_MODEM 5U /* Modem status changed */ -#define FPL011_EVENT_PARE_FRAME_BRKE 6U /* A receive parity, frame, break \ -* error detected */ -#define FPL011_EVENT_RECV_ORERR 7U /* A receive overrun error detected */ - - -/**************************** Type Definitions ******************************/ - -/** - * Keep track of data format setting of a device. - */ -typedef struct -{ - u32 baudrate ; /* In bps, ie 1200 */ - u32 data_bits ; /* Number of data bits */ - u32 parity ; /* Parity */ - u8 stopbits ; /* Number of stop bits */ -} FPl011Format ; - - -typedef struct -{ - u32 instance_id; /* Id of device*/ - uintptr base_address; - u32 ref_clock_hz; - u32 irq_num; - u32 baudrate; -} FPl011Config; - -typedef struct -{ - u8 *byte_p; - u32 requested_bytes; - u32 remaining_bytes; -} FPl011Buffer; - -typedef void (*FPl011EventHandler)(void *args, u32 event, u32 event_data); - -typedef struct -{ - FPl011Config config; /* Configuration data structure */ - u32 is_ready; /* Device is ininitialized and ready*/ - - FPl011Buffer send_buffer; - FPl011Buffer receive_buffer; - - FPl011EventHandler handler; - void *args; - uint8_t rxbs_error; /* An error occurs during receiving. 0 has no error and 1 has an error */ - -} FPl011; - - -/************************** Function Prototypes ******************************/ - -/* FPl011_uart_sinit.c */ -const FPl011Config *FPl011LookupConfig(u32 instance_id); -/* FPl011_uart.c */ -FError FPl011CfgInitialize(FPl011 *uart_p, FPl011Config *config); -void FPl011BlockSend(FPl011 *uart_p, u8 *byte_p, u32 length); -u32 FPl011Send(FPl011 *uart_p, u8 *byte_p, u32 length); -u32 FPl011Receive(FPl011 *uart_p, u8 *byte_p, u32 length); -u8 FPl011BlockReceive(FPl011 *uart_p); -void FPl011ProgramCtlReg(FPl011 *uart_p, u32 ctrl_reg); - -/* FPl011_uart_options.c */ -void FPl011SetOperMode(FPl011 *uart_p, u8 operation_mode); -void FPl011SetOptions(FPl011 *uart_p, u32 options); -void FPl011SetSpecificOptions(FPl011 *uart_p, u32 options); -void FPl011ClearSpecificOptions(FPl011 *uart_p, u32 options); -FError FPl011SetBaudRate(FPl011 *uart_p, u32 baudrate) ; -void FPl011GetDataFormat(FPl011 *uart_p, FPl011Format *format_p) ; -FError FPl011SetDataFormat(FPl011 *uart_p, FPl011Format *format_p) ; -void FPl011SetTxFifoThreadHold(FPl011 *uart_p, u8 trigger_level) ; -void FPl011SetRxFifoThreadhold(FPl011 *uart_p, u8 trigger_level) ; - -/* FPl011_uart_intr.c */ -u32 FPl011GetInterruptMask(FPl011 *uart_p) ; -void FPl011InterruptHandler(s32 vector, void *param); -void FPl011SetHandler(FPl011 *uart_p, FPl011EventHandler fun_p, void *args); -void FPl011SetInterruptMask(FPl011 *uart_p, u32 mask); -void FPl011InterruptClearAll(FPl011 *uart_p); - - - -#ifdef __cplusplus -} -#endif - -#endif // ! diff --git a/bsp/phytium/libraries/standalone/drivers/serial/fpl011/fpl011_g.c b/bsp/phytium/libraries/standalone/drivers/serial/fpl011/fpl011_g.c deleted file mode 100644 index 87483e4e9d..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/serial/fpl011/fpl011_g.c +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fpl011_g.c - * Date: 2021-11-02 14:53:42 - * LastEditTime: 2022-02-18 09:05:41 - * Description:  This file is for uart static configuration - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2021/11/2 first commit - * 1.1 liushengming 2022/02/18 add configs - */ - -/***************************** Include Files *********************************/ - -#include "fpl011.h" -#include "fparameters.h" -#include "sdkconfig.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ - -/************************** Variable Definitions *****************************/ - -const FPl011Config FPl011ConfigTable[FUART_NUM] = -{ - { - .instance_id = FUART0_ID, - .base_address = FUART0_BASE_ADDR, - .ref_clock_hz = FUART0_CLK_FREQ_HZ, - .irq_num = FUART0_IRQ_NUM, - .baudrate = 115200 - }, - { - .instance_id = FUART1_ID, - .base_address = FUART1_BASE_ADDR, - .ref_clock_hz = FUART1_CLK_FREQ_HZ, - .irq_num = FUART1_IRQ_NUM, - .baudrate = 115200 - }, -#ifndef TARDIGRADE - { - .instance_id = FUART2_ID, - .base_address = FUART2_BASE_ADDR, - .ref_clock_hz = FUART2_CLK_FREQ_HZ, - .irq_num = FUART2_IRQ_NUM, - .baudrate = 115200 - }, - { - .instance_id = FUART3_ID, - .base_address = FUART3_BASE_ADDR, - .ref_clock_hz = FUART3_CLK_FREQ_HZ, - .irq_num = FUART3_IRQ_NUM, - .baudrate = 115200 - } -#endif // !TARDIGRADE - -}; diff --git a/bsp/phytium/libraries/standalone/drivers/serial/fpl011/fpl011_hw.c b/bsp/phytium/libraries/standalone/drivers/serial/fpl011/fpl011_hw.c deleted file mode 100644 index 83bdfa6068..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/serial/fpl011/fpl011_hw.c +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fpl011_hw.c - * Date: 2021-11-02 14:53:42 - * LastEditTime: 2022-02-18 09:05:56 - * Description:  This file is for uart register function - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2021/11/2 first commit - * 1.1 liushengming 2022/02/18 add file head - */ - -/***************************** Include Files *********************************/ - -#include "fpl011_hw.h" - - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ - -/** - * @name: FPl011SendByte - * @msg: This function sends one byte using the device.This function operates in polled mode and blocks - * until the data has been put into the TX FIFO register. - * @param addr contains the base address of the device. - * @param Byte contains the byte to be sent. - */ -void FPl011SendByte(uintptr addr, u8 byte) -{ - - while (FUART_ISTRANSMITFULL(addr)) - { - ; - } - FUART_WRITEREG32(addr, FPL011DR_OFFSET, (u32)byte); -} - -/** - * @name: FPl011RecvByte - * @msg: This function receives a byte from the device. It operates in polled mode - * and blocks until a byte has received. - * @param addr contains the base address of the device. - */ -u8 FPl011RecvByte(uintptr addr) -{ - u32 recieved_byte; - - while (FUART_RECEIVEDATAEMPTY(addr)) - { - ; - } - recieved_byte = FUART_READREG32(addr, FPL011DR_OFFSET); - return recieved_byte; -} - diff --git a/bsp/phytium/libraries/standalone/drivers/serial/fpl011/fpl011_hw.h b/bsp/phytium/libraries/standalone/drivers/serial/fpl011/fpl011_hw.h deleted file mode 100644 index 1dcb5280c1..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/serial/fpl011/fpl011_hw.h +++ /dev/null @@ -1,260 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fpl011_hw.h - * Date: 2021-11-02 14:53:42 - * LastEditTime: 2022-02-18 09:06:10 - * Description:  This file is for definition of uart register - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2021/11/2 first commit - * 1.1 liushengming 2022/02/18 modified some defines - */ - -#ifndef FPL011_HW_H -#define FPL011_HW_H - -#include "ftypes.h" -#include "fassert.h" -#include "fio.h" - - -#ifdef __cplusplus -extern "C" -{ -#endif - - - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/** @name Register Map - * - * Register offsets for the UART. - */ -#define FPL011DR_OFFSET 0U /* Data */ -#define FPL011RSR_OFFSET 4U /* Receive Status Register/Error Clear */ -#define FPL011ECR_OFFSET FPL011RSR_OFFSET -#define FPL011FTR_OFFSET 0x18U /* Flag Register */ -#define FPL011ILPR_OFFSET 0x020U /* IrDA Low-Power Counter */ -#define FPL011IBRD_OFFSET 0x024U /* Integer Baud Rate */ -#define FPL011FBRD_OFFSET 0x028U /* Fractional Baud Rate */ -#define FPL011LCR_H_OFFSET 0x02cU /* Line Control */ -#define FPL011CR_OFFSET 0x030U /* Control */ -#define FPL011IFLS_OFFSET 0x034U /* Interrupt FIFO Level Select */ -#define FPL011IMSC_OFFSET 0x038U /* Interrupt Mask Set/Clear */ -#define FPL011RIS_OFFSET 0x03cU /* Raw interrupt Status */ -#define FPL011MIS_OFFSET 0x040U /* Mask interrupt Status */ -#define FPL011ICR_OFFSET 0x044U /* Interrupt Clear */ -#define FPL011DMACR_OFFSET 0x048U /* DMA Control */ - -/* Data RW */ -#define FPL011DR_OE 0x800U /* This bit is set to 1 if data is received and the received FIFO is full */ -#define FPL011DR_BE 0x400U /* Break error */ -#define FPL011DR_PE 0x200U /* Parity error */ -#define FPL011DR_FE 0x100U /* Frame error */ -#define FPL011DR_ALLE (FPL011DR_OE | FPL011DR_BE | FPL011DR_PE | FPL011DR_FE) -#define FPL011DR_DATA 0xffU - -/* Receive Status Register/Error Clear RW */ -#define FPL011RSR_OE 0x8U /* overflow error */ -#define FPL011RSR_BE 0x4U /* Break error */ -#define FPL011RSR_PE 0x2U /* Parity error */ -#define FPL011RSR_FE 0x1U /* Frame error */ - -#define FPL011ECR_CLE 0xffU /* Clear */ - -/* Flag Register RO */ -#define FPL011FTR_RI 0x100U /* Ring indicator */ -#define FPL011FTR_TXFE 0x80U /* Transmit FIFO empty */ -#define FPL011FTR_RXFF 0x40U /* Receive FIFO full */ -#define FPL011FTR_TXFF 0x20U /* Transmit FIFO full. */ -#define FPL011FTR_RXFE 0x10U /* Receive FIFO empty */ -#define FPL011FTR_BUSY 0x08U /* UART busy */ -#define FPL011FTR_DCD 0x04U /* Data carrier detect. */ -#define FPL011FTR_DSR 0x02U /* Data set ready. */ -#define FPL011FTR_CTS 0x1U /* Clear to send */ - -/* IrDA Low-Power Counter RW */ -#define FPL011ILPR_ILPDVSR 0xffU /* 8-bit low-power divisor value. These bits are cleared to 0 at reset */ - -/* Integer Baud Rate RW */ -#define FPL011IBRD_BAUD_DIVFRAC 0xffffU /* The fractional baud rate divisor. */ - -/* Fractional Baud Rate RW */ -#define FPL011FBRD_BAUD_DIVFRAC 0x3fU /* The fractional baud rate divisor. */ - -/* Line Control RW */ -#define FPL011LCR_H_SPS 0x80U /* Stick parity select. */ -#define FPL011LCR_H_WLEN 0x60U /* Word length. */ -#define FPL011LCR_H_FEN 0x10U /* Enable FIFOs. */ -#define FPL011LCR_H_STP2 0x08U /* Two stop bits select. */ -#define FPL011LCR_H_EPS 0x04U /* Even parity select. */ -#define FPL011LCR_H_PEN 0x02U /* Parity enable. */ -#define FPL011LCR_H_BRK 0x01U /* send break */ - -#define FPL011LCR_H_WLEN_SHIFT 0x00000005U /* Word length shift */ -#define FPL011LCR_H_WLEN_5_BIT 0x00000000U /* 5 bits data */ -#define FPL011LCR_H_WLEN_6_BIT 0x00000020U /* 6 bits data */ -#define FPL011LCR_H_WLEN_7_BIT 0x00000040U /* 7 bits data */ -#define FPL011LCR_H_WLEN_8_BIT 0x00000060U /* 8 bits data */ -#define FPL011LCR_H_STP_1_BIT 0x00000000U - -#define FPL011LCR_H_STP_MASK 0x00000008U /* Stop bits mask */ -#define FPL011LCR_H_STP_SHIFT 0x00000003U /* Stop bits shift */ -#define FPL011LCR_H_PARITY_EVEN 0x00000004U /* Even parity mode */ -#define FPL011LCR_H_PARITY_MASK 0x00000002U /* Parity mask */ -#define FPL011LCR_H_PARITY_SHIFT 0x00000001U /* Parity shift */ -#define FPL011LCR_H_PARITY_NONE 0x00000000U /* No parity mode */ -#define FPL011LCR_H_PARITY_ODD 0x00000000U /* Odd parity mode */ - -/* Control RW */ -#define FPL011CR_CTSEN 0x8000U /* CTS hardware flow control enable. */ -#define FPL011CR_RTSEN 0x4000U /* RTS hardware flow control enable. */ -#define FPL011CR_OUT2 0x2000U /* This bit is the complement of the UART Out2 (nUARTOut2) modem status output. */ -#define FPL011CR_OUT1 0x1000U /* This bit is the complement of the UART Out1 (nUARTOut1) modem status output. */ -#define FPL011CR_RTS 0x0800U /* Request to send. */ -#define FPL011CR_DTR 0x0400U /* Data transmit ready */ -#define FPL011CR_RXE 0x0200U /* Receive enable. */ -#define FPL011CR_TXE 0x0100U /* Transmit enable. */ -#define FPL011CR_LBE 0x0080U /* Loop back enable.*/ -#define FPL011CR_SIRLP 0x4U /* IrDA SIR low power mode. */ -#define FPL011CR_SIREN 0x2U /* SIR enable. */ -#define FPL011CR_UARTEN 0x1U /* UART enable. */ -#define FPL011CR_MODE_NORMAL 0x00000000U /* Normal Mode */ - - -/* Interrupt FIFO Level Select RW */ -#define FPL011IFLS_RXIFLSEL_MASK 0x00000038U /* Receive interrupt FIFO level select mask */ -#define FPL011IFLS_TXIFLSEL_MASK 0x00000007U /* Receive interrupt FIFO level select mask */ -#define FPL011IFLS_RXIFLSEL_1_8 0x00000000U /* Receive FIFO becomes . 1/8 full */ -#define FPL011IFLS_RXIFLSEL_1_4 0x00000008U /* Receive FIFO becomes . 1/4 full */ -#define FPL011IFLS_RXIFLSEL_1_2 0x00000010U /* Receive FIFO becomes * . 1/2 full */ -#define FPL011IFLS_RXIFLSEL_3_4 0x00000018U /* Receive FIFO becomes * . 3/4 full */ -#define FPL011IFLS_RXIFLSEL_7_8 0x00000020U /* Receive FIFO becomes * . 7/8 full */ -#define FPL011IFLS_TXIFLSEL_1_8 0x00000000U /* Transmit FIFO becomes * . 1/8 full */ -#define FPL011IFLS_TXIFLSEL_1_4 0x00000001U /* Transmit FIFO becomes * . 1/4 full */ -#define FPL011IFLS_TXIFLSEL_1_2 0x00000002U /* Transmit FIFO becomes * . 1/2 full */ -#define FPL011IFLS_TXIFLSEL_3_4 0x00000003U /* Transmit FIFO becomes * . 3/4 full */ -#define FPL011IFLS_TXIFLSEL_7_8 0x00000004U /* Transmit FIFO becomes * . 7/8 full */ - -/* Interrupt Mask Set/Clear RW */ -#define FPL011IMSC_OEIM 0x400U /* Overrun error interrupt mask. */ -#define FPL011IMSC_BEIM 0x200U /* Break error interrupt mask */ -#define FPL011IMSC_PEIM 0x100U /* Parity error interrupt mask. */ -#define FPL011IMSC_FEIM 0x80U /* Framing error interrupt mask. */ -#define FPL011IMSC_RTIM 0x40U /* Receive timeout interrupt mask. */ -#define FPL011IMSC_TXIM 0x20U /* Transmit interrupt mask. */ -#define FPL011IMSC_RXIM 0x10U /* Receive interrupt mask. */ -#define FPL011IMSC_DSRMIM 0x8U /* nUARTDSR modem interrupt mask. */ -#define FPL011IMSC_DCDMIM 0x4U /* nUARTDCD modem interrupt mask. */ -#define FPL011IMSC_CTSMIM 0x2U /* nUARTCTS modem interrupt mask. */ -#define FPL011IMSC_RIMIM 0x1U /* nUARTRI modem interrupt mask. */ -#define FPL011IMSC_ALLM 0x7ffU /* all interrupt mask */ - -/* Raw interrupt Status RO */ - -#define FPL011RIS_OEIS 0x400U /* Overrun error interrupt mask. */ -#define FPL011RIS_BEIS 0x200U /* Break error interrupt mask */ -#define FPL011RIS_PEIS 0x100U /* Parity error interrupt mask. */ -#define FPL011RIS_FEIS 0x80U /* Framing error interrupt mask. */ -#define FPL011RIS_RTIS 0x40U /* Receive timeout interrupt mask. */ -#define FPL011RIS_TXIS 0x20U /* Transmit interrupt mask. */ -#define FPL011RIS_RXIS 0x10U /* Receive interrupt mask. */ -#define FPL011RIS_DSRMIS 0x8U /* nUARTDSR modem interrupt mask. */ -#define FPL011RIS_DCDMIS 0x4U /* nUARTDCD modem interrupt mask. */ -#define FPL011RIS_CTSMIS 0x2U /* nUARTCTS modem interrupt mask. */ -#define FPL011RIS_RIMIS 0x1U /* nUARTRI modem interrupt mask. */ - -/* Mask interrupt Status R0 */ - -#define FPL011MIS_OEMIS 0x400U /* Overrun error interrupt mask. */ -#define FPL011MIS_BEMIS 0x200U /* Break error interrupt mask */ -#define FPL011MIS_PEMIS 0x100U /* Parity error interrupt mask. */ -#define FPL011MIS_FEMIS 0x80U /* Framing error interrupt mask. */ -#define FPL011MIS_RTMIS 0x40U /* Receive timeout interrupt mask. */ -#define FPL011MIS_TXMIS 0x20U /* Transmit interrupt mask. */ -#define FPL011MIS_RXMIS 0x10U /* Receive interrupt mask. */ -#define FPL011MIS_DSRMMIS 0x8U /* nUARTDSR modem interrupt mask. */ -#define FPL011MIS_DCDMMIS 0x4U /* nUARTDCD modem interrupt mask. */ -#define FPL011MIS_CTSMMIS 0x2U /* nUARTCTS modem interrupt mask. */ -#define FPL011MIS_RIMMIS 0x1U /* nUARTRI modem interrupt mask. */ - -/* Interrupt Clear WO */ -#define FPL011ICR_OEIC 0x400U /* Overrun error interrupt mask. */ -#define FPL011ICR_BEIC 0x200U /* Break error interrupt mask */ -#define FPL011ICR_PEIC 0x100U /* Parity error interrupt mask. */ -#define FPL011ICR_FEIC 0x80U /* Framing error interrupt mask. */ -#define FPL011ICR_RTIC 0x40U /* Receive timeout interrupt mask. */ -#define FPL011ICR_TXIC 0x20U /* Transmit interrupt mask. */ -#define FPL011ICR_RXIC 0x10U /* Receive interrupt mask. */ -#define FPL011ICR_DSRMIC 0x8U /* nUARTDSR modem interrupt mask. */ -#define FPL011ICR_DCDMIC 0x4U /* nUARTDCD modem interrupt mask. */ -#define FPL011ICR_CTSMIC 0x2U /* nUARTCTS modem interrupt mask. */ -#define FPL011ICR_RIMIC 0x1U /* nUARTRI modem interrupt mask. */ -#define FPL011ICR_ALL_CLEAR (FPL011ICR_OEIC |FPL011ICR_BEIC |FPL011ICR_PEIC |FPL011ICR_FEIC |FPL011ICR_RTIC |FPL011ICR_TXIC |FPL011ICR_RXIC |FPL011ICR_DSRMIC |FPL011ICR_DCDMIC |FPL011ICR_CTSMIC |FPL011ICR_RIMIC ) - -/* DMA Control RW */ -#define FPL011DMACR_DMAONERR 0x4U /* DMA on error. */ -#define FPL011DMACR_TXDMAE 0x2U /* Transmit DMA enable. */ -#define FPL011DMACR_RXDMAE 0x1U /* Receive DMA enable. */ - -/***************** Macros (Inline Functions) Definitions *********************/ - -#define FUART_READREG32(addr, reg_offset) FtIn32(addr + (u32)reg_offset) -#define FUART_WRITEREG32(addr, reg_offset, reg_value) FtOut32(addr + (u32)reg_offset, (u32)reg_value) - -/** - * @name: FUART_RECEIVEDATAEMPTY - * @msg: Used to confirm whether data has been received - * @param addr contains the base address of the device. - * @return {bool} true 是不存在数据 , false 是存在数据 - * - */ -#define FUART_RECEIVEDATAEMPTY(addr) (FtIn32(addr + FPL011FTR_OFFSET) & FPL011FTR_RXFE) - -/** - * @name: FUART_ISTRANSMITFULL - * @msg: Used to confirm whether data can be sent - * @param addr contains the base address of the device. - * @return {bool} true 是数据已满 , false 可以发送数据 - */ -#define FUART_ISTRANSMITFULL(addr) ((FtIn32(addr + FPL011FTR_OFFSET) & (u32)FPL011FTR_TXFF) == FPL011FTR_TXFF) - - -/** - * @name: FUART_ISTRANSMITBUSY - * @msg: Determine if a byte of data can be sent with the transmitter. - * @return TRUE if the TX is busy, FALSE if a byte can be put in the - * FIFO. - */ -#define FUART_ISTRANSMITBUSY(addr) ((FtIn32(addr + FPL011FTR_OFFSET) & (u32)FPL011FTR_BUSY) == FPL011FTR_BUSY) - -/************************** Function Prototypes ******************************/ - -void FPl011SendByte(uintptr addr, u8 byte); -u8 FPl011RecvByte(uintptr addr); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/bsp/phytium/libraries/standalone/drivers/serial/fpl011/fpl011_intr.c b/bsp/phytium/libraries/standalone/drivers/serial/fpl011/fpl011_intr.c deleted file mode 100644 index 9b75b63a04..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/serial/fpl011/fpl011_intr.c +++ /dev/null @@ -1,248 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fpl011_intr.c - * Date: 2021-11-02 14:53:42 - * LastEditTime: 2022-02-18 09:06:30 - * Description:  This file is for uart irq functions - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2021/11/2 first commit - * 1.1 liushengming 2022/02/18 fix bugs - */ - - -/***************************** Include Files *********************************/ -#include "fpl011.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Variable Definitions *****************************/ - -/************************** Function Prototypes ******************************/ -/*****************************************************************************/ - -extern u32 FPl011SendBuffer(FPl011 *uart_p); -extern u32 FPl011ReceiveBuffer(FPl011 *uart_p); - -static void FPl011ReceiveErrorHandler(FPl011 *uart_p, u32 InterruptStatus); -static void FPl011ReceiveDataHandler(FPl011 *uart_p); -static void FPl011ReceiveTimeoutHandler(FPl011 *uart_p); -static void FPl011SendDataHandler(FPl011 *uart_p, u32 InterruptStatus); - -/** - * @name: FPl011GetInterruptMask - * @msg: 此函数获取所有串口中断的mask。 - * @param uart_p - * @return mask - */ -/** - * @name: FPl011GetInterruptMask - * @msg: This function gets the interrupt mask. - * @param uart_p is a pointer to the uart instance - * @return {*} - */ -u32 FPl011GetInterruptMask(FPl011 *uart_p) -{ - FASSERT(uart_p != NULL); - return FUART_READREG32(uart_p->config.base_address, FPL011IMSC_OFFSET); -} - - -/** - * @name: FPl011SetInterruptMask - * @msg: This function sets the interrupt mask. - * @param uart_p is a pointer to the uart instance - * @param mask contains the interrupts to be enabled or disabled. - * A '1' enables an interrupt, and a '0' disables. - */ -void FPl011SetInterruptMask(FPl011 *uart_p, u32 mask) -{ - u32 temp_mask = mask; - FASSERT(uart_p != NULL); - - temp_mask &= FPL011IMSC_ALLM; - - FUART_WRITEREG32(uart_p->config.base_address, FPL011IMSC_OFFSET, temp_mask); -} - -/** - * @name: FPl011InterruptClear - * @msg: This function clears all interrupt state. - * @param uart_p is a pointer to the uart instance - */ -void FPl011InterruptClearAll(FPl011 *uart_p) -{ - FASSERT(uart_p != NULL); - - if (FUART_READREG32(uart_p->config.base_address, FPL011RIS_OFFSET)) - { - FUART_WRITEREG32(uart_p->config.base_address, FPL011ICR_OFFSET, 0xFFFFFFFF); - } -} - -/** - * @name: FPl011SetHandler - * @msg: This function sets the handler that will be called when an event (interrupt) - * occurs that needs application's attention. - * @param uart_p is a pointer to the uart instance - * @param fun_p is the pointer to the callback function. - * @param args is the upper layer callback reference passed back - * when the callback function is invoked. - * @return {*} - */ -void FPl011SetHandler(FPl011 *uart_p, FPl011EventHandler fun_p, void *args) -{ - FASSERT(uart_p != NULL); - FASSERT(fun_p != NULL); - FASSERT(uart_p->is_ready == FT_COMPONENT_IS_READY); - - uart_p->handler = fun_p; - uart_p->args = args; -} - - -/** - * @name: FPl011InterruptHandler - * @msg: This function is the interrupt handler for the driver. - * It must be connected to an interrupt system by the application such that it - * can be called when an interrupt occurs. - * @param vector Irq num ,Don't need attention . - * @param param contains a pointer to the driver instance - */ -void FPl011InterruptHandler(s32 vector, void *param) -{ - FPl011 *uart_p = (FPl011 *)param; - u32 reg_value = 0; - FASSERT(uart_p != NULL); - FASSERT(uart_p->is_ready == FT_COMPONENT_IS_READY); - - reg_value = FUART_READREG32(uart_p->config.base_address, FPL011IMSC_OFFSET); - reg_value &= FUART_READREG32(uart_p->config.base_address, FPL011MIS_OFFSET); - - if ((reg_value & ((u32)FPL011MIS_RXMIS)) != (u32)0) - { - /* Received data interrupt */ - FPl011ReceiveDataHandler(uart_p); - } - - if ((reg_value & ((u32)FPL011MIS_TXMIS)) != (u32)0) - { - /* Transmit data interrupt */ - FPl011SendDataHandler(uart_p, reg_value); - } - - if (((reg_value) & ((u32)FPL011MIS_OEMIS | (u32)FPL011MIS_BEMIS | (u32)FPL011MIS_PEMIS | (u32)FPL011MIS_FEMIS)) != (u32)0) - { - /* Received Error Status interrupt */ - FPl011ReceiveErrorHandler(uart_p, reg_value); - } - - if ((reg_value & ((u32)FPL011MIS_RTMIS)) != (u32)0) - { - /* Received Timeout interrupt */ - FPl011ReceiveTimeoutHandler(uart_p); - } - - if (((reg_value) & ((u32)FPL011MIS_DSRMMIS | (u32)FPL011MIS_DCDMMIS | (u32)FPL011MIS_CTSMMIS | (u32)FPL011MIS_RIMMIS)) != (u32)0) - { - /* Modem status interrupt */ - } - - /* Clear the interrupt status. */ - FUART_WRITEREG32(uart_p->config.base_address, FPL011ICR_OFFSET, - reg_value); - -} - -static void FPl011ReceiveErrorHandler(FPl011 *uart_p, u32 InterruptStatus) -{ - uart_p->rxbs_error = 0; - - if (((InterruptStatus) & ((u32)FPL011MIS_OEMIS | (u32)FPL011MIS_BEMIS | (u32)FPL011MIS_PEMIS | (u32)FPL011MIS_FEMIS)) != 0) - { - uart_p->rxbs_error = 1; - } - - (void)FPl011ReceiveBuffer(uart_p); - - if (0 == uart_p->rxbs_error) - { - if (uart_p->handler) - { - uart_p->handler(uart_p->args, FPL011_EVENT_RECV_ERROR, uart_p->receive_buffer.requested_bytes - uart_p->receive_buffer.remaining_bytes); - } - } -} - -/** - * @name: FPl011ReceiveDataHandler - * @msg: - * @param {*} - * @return {*} - */ -static void FPl011ReceiveDataHandler(FPl011 *uart_p) -{ - if ((u32)0 != uart_p->receive_buffer.remaining_bytes) - { - (void)FPl011ReceiveBuffer(uart_p); - } - if ((u32)0 == uart_p->receive_buffer.remaining_bytes) - { - if (uart_p->handler) - { - uart_p->handler(uart_p->args, FPL011_EVENT_RECV_DATA, uart_p->receive_buffer.requested_bytes - uart_p->receive_buffer.remaining_bytes); - } - } -} - -static void FPl011ReceiveTimeoutHandler(FPl011 *uart_p) -{ - u32 event; - - if ((u32)0 != uart_p->receive_buffer.remaining_bytes) - { - (void)FPl011ReceiveBuffer(uart_p); - } - if ((u32)0 == uart_p->receive_buffer.remaining_bytes) - { - event = FPL011_EVENT_RECV_TOUT; - } - else - { - event = FPL011_EVENT_RECV_DATA; - } - - if (uart_p->handler) - { - uart_p->handler(uart_p->args, event, uart_p->receive_buffer.requested_bytes - uart_p->receive_buffer.remaining_bytes); - } -} - -static void FPl011SendDataHandler(FPl011 *uart_p, u32 InterruptStatus) -{ - FPl011SendBuffer(uart_p); - if (uart_p->send_buffer.remaining_bytes == (u32)0) - { - if (uart_p->handler) - { - uart_p->handler(uart_p->args, FPL011_EVENT_SENT_DATA, uart_p->send_buffer.requested_bytes); - } - } -} diff --git a/bsp/phytium/libraries/standalone/drivers/serial/fpl011/fpl011_options.c b/bsp/phytium/libraries/standalone/drivers/serial/fpl011/fpl011_options.c deleted file mode 100644 index d94df0db0d..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/serial/fpl011/fpl011_options.c +++ /dev/null @@ -1,488 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fpl011_options.c - * Date: 2021-11-02 14:53:42 - * LastEditTime: 2022-02-18 09:06:45 - * Description:  This file is for uart option setting - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2021/11/2 first commit - * 1.1 liushengming 2022/02/18 fix bug - */ - - -/***************************** Include Files *********************************/ - -#include "fpl011.h" -#include "fpl011_hw.h" -#include "ftypes.h" - -/************************** Variable Definitions ****************************/ -/************************** Constant Definitions *****************************/ -/**************************** Type Definitions *******************************/ -/* - * The following data type is a map from an option to the offset in the - * register to which it belongs as well as its bit mask in that register. - */ -typedef struct -{ - u32 option; - u32 register_offset; - u32 mask; -} Mapping; - -static Mapping option_table[] = -{ - {FPL011_OPTION_UARTEN, FPL011CR_OFFSET, FPL011CR_UARTEN}, - {FPL011_OPTION_RXEN, FPL011CR_OFFSET, FPL011CR_RXE}, - {FPL011_OPTION_TXEN, FPL011CR_OFFSET, FPL011CR_TXE}, - {FPL011_OPTION_FIFOEN, FPL011LCR_H_OFFSET, FPL011LCR_H_FEN}, - {FPL011_OPTION_RTS, FPL011CR_OFFSET, FPL011CR_RTS}, - {FPL011_OPTION_DTR, FPL011CR_OFFSET, FPL011CR_DTR}, - {FPL011_OPTION_RTSEN, FPL011CR_OFFSET, FPL011CR_RTSEN}, - {FPL011_OPTION_CTSEN, FPL011CR_OFFSET, FPL011CR_CTSEN}, - {FPL011_OPTION_TXDMAEN, FPL011DMACR_OFFSET, FPL011DMACR_TXDMAE}, - {FPL011_OPTION_RXDMAEN, FPL011DMACR_OFFSET, FPL011DMACR_RXDMAE} -}; - -/***************** Macros (Inline Functions) Definitions *********************/ - -#define FUART_NUM_OPITIONS (sizeof(option_table) / sizeof(Mapping)) -/************************** Function Prototypes ******************************/ -/*****************************************************************************/ -/** - * @name: FPl011SetOptions - * @msg: Sets the options for the specified driver instance. The options are implemented as bit masks such that multiple options may be enabled or disabled simultaneously. - * @param uart_p is a pointer to the uart instance. - * @param options contains the options to be set which are bit masks - * contained in the file FPl011_uart.h and named FUART_OPTION_*. - */ -void FPl011SetOptions(FPl011 *uart_p, u32 options) -{ - u32 index; - u32 reg_value; - FASSERT(uart_p != NULL); - FASSERT(uart_p->is_ready == FT_COMPONENT_IS_READY); - - for (index = 0; index < FUART_NUM_OPITIONS; index++) - { - reg_value = FUART_READREG32(uart_p->config.base_address, option_table[index].register_offset); - - if ((options & option_table[index].option) != (u32)(0)) - { - reg_value |= option_table[index].mask; - } - else - { - reg_value &= ~option_table[index].mask; - } - - FUART_WRITEREG32(uart_p->config.base_address, option_table[index].register_offset, reg_value); - } -} - -/** - * @name: FPl011SetSpecificOptions - * @msg: Sets the options for the specified driver instance. - * @param {FPl011} *uart_p is a pointer to the uart instance. - * @param {u32} options contains the options to be set which are bit masks - * contained in the file FPl011_uart.h and named FUART_OPTION_*. - */ -void FPl011SetSpecificOptions(FPl011 *uart_p, u32 options) -{ - u32 index; - u32 reg_value; - FASSERT(uart_p != NULL); - - for (index = 0; index < FUART_NUM_OPITIONS; index++) - { - if ((options & option_table[index].option) == (u32)(0)) - { - continue; - } - reg_value = FUART_READREG32(uart_p->config.base_address, option_table[index].register_offset); - - /* set specific options */ - reg_value |= option_table[index].mask; - FUART_WRITEREG32(uart_p->config.base_address, option_table[index].register_offset, reg_value); - } -} - -/** - * @name: FPl011ClearSpecificOptions - * @msg: Clear the options for the specified driver instance. - * @param uart_p is a pointer to the uart instance. - * @param options contains the options to be set which are bit masks - * contained in the file FPl011_uart.h and named FUART_OPTION_*. - */ -void FPl011ClearSpecificOptions(FPl011 *uart_p, u32 options) -{ - u32 index; - u32 reg_value; - FASSERT(uart_p != NULL); - - for (index = 0; index < FUART_NUM_OPITIONS; index++) - { - if ((options & option_table[index].option) == (u32)(0)) - { - continue; - } - reg_value = FUART_READREG32(uart_p->config.base_address, option_table[index].register_offset); - - /* remove specific options */ - reg_value &= ~option_table[index].mask; - FUART_WRITEREG32(uart_p->config.base_address, option_table[index].register_offset, reg_value); - } -} - - - -/** - * @name: FPl011SetDataFormat - * @msg: Sets the data format for the specified UART. - * @param uart_p is a pointer to the uart instance. - * @param format_p is a pointer to a format structure that will - * contain the data format after this call completes. - * @return - * FT_SUCCESS if everything configured as expected - * FPL011_ERROR_PARAM if one of the parameters was not valid. - */ -FError FPl011SetDataFormat(FPl011 *uart_p, FPl011Format *format_p) -{ - FError ret ; - u32 line_ctrl_reg ; - FPl011Config *config_p; - FASSERT(uart_p != NULL); - FASSERT(uart_p->is_ready == FT_COMPONENT_IS_READY); - FASSERT(format_p != NULL) ; - - config_p = &uart_p->config; - - if ((format_p->data_bits > ((u32)(FPL011_FORMAT_WORDLENGTH_8BIT))) || - (format_p->parity > ((u32)(FPL011_FORMAT_PARITY_MASK))) || - (format_p->stopbits > ((u32)(FPL011_FORMAT_PARITY_MASK))) - ) - { - return FPL011_ERROR_PARAM ; - } - else - { - /* - * Try to set the baud rate and if it's not successful then - * don't continue altering the data format, this is done - * first to avoid the format from being altered when an - * error occurs - */ - ret = FPl011SetBaudRate(uart_p, format_p->baudrate) ; - if (ret != FT_SUCCESS) - { - - } - else - { - line_ctrl_reg = FUART_READREG32(config_p->base_address, FPL011LCR_H_OFFSET); - - /* - * Set the length of data (8,7,6) by first clearing - * out the bits that control it in the register, - * then set the length in the register - */ - line_ctrl_reg &= ~(u32)FPL011LCR_H_WLEN ; - line_ctrl_reg |= (format_p->data_bits << - FPL011LCR_H_WLEN_SHIFT); - - /* - * Set the number of stop bits in the mode register by - * first clearing out the bits that control it in the - * register, then set the number of stop bits in the - * register. - */ - line_ctrl_reg &= ~FPL011LCR_H_STP_MASK; - line_ctrl_reg |= (format_p->stopbits << - FPL011LCR_H_STP_SHIFT); - - /* - * Set the parity by first clearing out the bits that - * control it in the register, then set the bits in - * the register, the default is no parity after - * clearing the register bits - */ - line_ctrl_reg &= ~FPL011LCR_H_PARITY_MASK; - line_ctrl_reg |= ((format_p->parity & - FPL011_FORMAT_EN_PARITY) << - FPL011LCR_H_PARITY_SHIFT); - - /* Even/Odd parity set */ - line_ctrl_reg |= ((format_p->parity & - FPL011_FORMAT_EVEN_PARITY) << - FPL011_FORMAT_EVEN_PARITY_SHIFT); - - /* Stick parity enable/disable */ - line_ctrl_reg |= ((format_p->parity & - FPL011_FORMAT_EN_STICK_PARITY) << - FPL011_FORMAT_EN_STICK_PARITY_SHIFT); - - /* Update the Line control register */ - FUART_WRITEREG32(config_p->base_address, FPL011LCR_H_OFFSET, line_ctrl_reg) ; - - return FT_SUCCESS ; - } - } - - return ret ; -} - -/** - * @name: FPl011GetDataFormat - * @msg: Gets the data format for the specified UART. - * @param uart_p is a pointer to the uart instance. - * @param format_p is a pointer to a format structure that will - * contain the data format after this call completes. - */ -void FPl011GetDataFormat(FPl011 *uart_p, FPl011Format *format_p) -{ - u32 line_ctrl_reg ; - FPl011Config *config_p; - /* Assert validates the input arguments */ - FASSERT(uart_p != NULL); - FASSERT(uart_p->is_ready == FT_COMPONENT_IS_READY); - FASSERT(format_p != NULL) ; - - config_p = &uart_p->config; - /* - * Get the baud rate from the instance, this is not retrieved from - * the hardware because it is only kept as a divisor such that it - * is more difficult to get back to the baud rate - */ - format_p->baudrate = uart_p->config.baudrate ; - - line_ctrl_reg = FUART_READREG32(config_p->base_address, FPL011LCR_H_OFFSET); - - /* Get the length of data (8,7,6,5) */ - format_p->data_bits = ((line_ctrl_reg & FPL011LCR_H_WLEN) >> FPL011LCR_H_WLEN_SHIFT) ; - - /* Get the number of stop bits */ - format_p->stopbits = (u8)((line_ctrl_reg & FPL011LCR_H_STP_MASK) >> FPL011LCR_H_STP_SHIFT) ; - - /* Determine what parity is */ - format_p->parity = (u32)((line_ctrl_reg & (u32)FPL011LCR_H_PARITY_MASK) >> FPL011LCR_H_PARITY_SHIFT) ; -} - - - -/** - * @name: FPl011SetTxFifoThreadHold - * @msg: This functions sets the Tx FIFO trigger level to the 'TriggerLevel' - * argument. - * @param uart_p is a pointer to the uart instance. - * @param trigger_level contains the trigger level to set. This is a value - * from 0-32 (FPL011IFLS_TXIFLSEL_1_8 - FPL011IFLS_TXIFLSEL_7_8) - */ -void FPl011SetTxFifoThreadHold(FPl011 *uart_p, u8 trigger_level) -{ - u32 fifo_trig_reg; - FPl011Config *config_p; - FASSERT(uart_p != NULL); - FASSERT(trigger_level <= (u8)FPL011IFLS_TXIFLSEL_MASK) ; - FASSERT(uart_p->is_ready == FT_COMPONENT_IS_READY); - config_p = &uart_p->config; - - trigger_level = trigger_level & (u8)FPL011IFLS_TXIFLSEL_MASK; - - fifo_trig_reg = FUART_READREG32(config_p->base_address, - FPL011IFLS_OFFSET); - - fifo_trig_reg &= ~(FPL011IFLS_TXIFLSEL_MASK); - - fifo_trig_reg |= (u32)trigger_level; - - /* - * Write the new value for the FIFO control register to it such that - * the threshold is changed - */ - FUART_WRITEREG32(config_p->base_address, - FPL011IFLS_OFFSET, fifo_trig_reg); -} - - - -/** - * @name: FPl011SetRxFifoThreadhold - * @msg: This functions sets the Rx FIFO trigger level to the 'TriggerLevel' - * argument. - * @param uart_p is a pointer to the uart instance. - * @param trigger_level contains the trigger level to set. This is a value - * from 0-32 (FPL011IFLS_RXIFLSEL_1_8 - FPL011IFLS_RXIFLSEL_7_8) - */ -void FPl011SetRxFifoThreadhold(FPl011 *uart_p, u8 trigger_level) -{ - u32 fifo_trig_reg; - FPl011Config *config_p; - FASSERT(uart_p != NULL); - FASSERT(trigger_level <= (u8)FPL011IFLS_RXIFLSEL_MASK) ; - FASSERT(uart_p->is_ready == FT_COMPONENT_IS_READY); - config_p = &uart_p->config; - - trigger_level = trigger_level & (u8)FPL011IFLS_RXIFLSEL_MASK; - - fifo_trig_reg = FUART_READREG32(config_p->base_address, - FPL011IFLS_OFFSET); - - fifo_trig_reg &= ~FPL011IFLS_RXIFLSEL_MASK; - - fifo_trig_reg |= (u32)trigger_level ; - - /* - * Write the new value for the FIFO control register to it such that - * the threshold is changed - */ - FUART_WRITEREG32(config_p->base_address, - FPL011IFLS_OFFSET, fifo_trig_reg); -} - -/** - * @name: FPl011SetBaudRate - * @msg: Sets the baud rate for the device. - * @param uart_p is a pointer to the FPl011 instance - * @param BaudRate to be set - * @return - * FT_SUCCESS if everything configured as expected - * FPL011_ERROR_PARAM if the requested rate is not available - * because there was too much error - */ -FError FPl011SetBaudRate(FPl011 *uart_p, u32 baudrate) -{ - u32 temp; - u32 divider; - u32 remainder; - u32 fraction; - - FASSERT(NULL != uart_p); - if ((baudrate * 2) > uart_p->config.ref_clock_hz) - { - return FPL011_ERROR_PARAM; - } - - /* calculate baud rate divisor */ - temp = 16 * baudrate; - divider = uart_p->config.ref_clock_hz / temp; - remainder = uart_p->config.ref_clock_hz % temp; - temp = (128 * remainder) / temp; - fraction = temp / 2; - - if (0 != (temp & 1)) - { - fraction++; - } - - FPl011ClearSpecificOptions(uart_p, FPL011_OPTION_RXEN | FPL011_OPTION_TXEN); - /* set baud register */ - FUART_WRITEREG32(uart_p->config.base_address, FPL011IBRD_OFFSET, divider); - FUART_WRITEREG32(uart_p->config.base_address, FPL011FBRD_OFFSET, fraction); - FPl011SetSpecificOptions(uart_p, FPL011_OPTION_RXEN | FPL011_OPTION_TXEN); - uart_p->config.baudrate = baudrate; - return FT_SUCCESS; -} - -/** - * @name: FPl011ProgramCtlReg - * @msg: This function reprograms the control register according to the following - * sequence mentioned in the TRM - * @param uart_p is a pointer to the FPl011 instance - * @param ctrl_reg value to be written - */ -void FPl011ProgramCtlReg(FPl011 *uart_p, u32 ctrl_reg) -{ - u32 line_ctrl_reg; - u32 temp_ctrl_reg; - u32 isbusy; - u32 addr = uart_p->config.base_address; - FASSERT(uart_p); - - /* - * Check is TX completed. If Uart is disabled in the middle, cannot - * recover. So, keep this check before disable. - */ - isbusy = FUART_ISTRANSMITBUSY(addr); - while (isbusy == (u32)TRUE) - { - isbusy = (u32)FUART_ISTRANSMITBUSY(addr); - } - - /* Disable UART */ - temp_ctrl_reg = FUART_READREG32(addr, FPL011CR_OFFSET); - temp_ctrl_reg &= (~FPL011CR_UARTEN); - FUART_WRITEREG32(addr, FPL011CR_OFFSET, temp_ctrl_reg); - - /* - * Flush the transmit FIFO by setting the FEN bit to 0 in the - * Line Control Register - */ - line_ctrl_reg = FUART_READREG32(addr, FPL011LCR_H_OFFSET); - line_ctrl_reg &= ~FPL011LCR_H_FEN; - FUART_WRITEREG32(addr, FPL011LCR_H_OFFSET, line_ctrl_reg); - - /* Setup the Control Register with the passed argument.*/ - FUART_WRITEREG32(addr, FPL011CR_OFFSET, ctrl_reg); - - /* By default, driver works in FIFO mode, so set FEN as it is - * cleared above - */ - line_ctrl_reg |= FPL011LCR_H_FEN; - FUART_WRITEREG32(addr, FPL011LCR_H_OFFSET, line_ctrl_reg); - - /* Enable UART */ - temp_ctrl_reg = FUART_READREG32(addr, FPL011CR_OFFSET); - temp_ctrl_reg |= FPL011CR_UARTEN; - FUART_WRITEREG32(addr, FPL011CR_OFFSET, temp_ctrl_reg); -} - -/** - * @name: FPl011SetOperMode - * @msg: This function sets the operational mode of the UART. The UART can operate - * in one of four modes: Normal, Local Loopback. - * @param uart_p is a pointer to the FPl011 instance. - * @param operation_mode is the mode of the UART. - */ -void FPl011SetOperMode(FPl011 *uart_p, u8 operation_mode) -{ - u32 ctrl_reg; - FPl011Config *config_p; - FASSERT(uart_p != NULL); - FASSERT(operation_mode <= (u8)FPL011_OPER_MODE_LOCAL_LOOP) ; - FASSERT(uart_p->is_ready == FT_COMPONENT_IS_READY); - config_p = &uart_p->config; - - ctrl_reg = FUART_READREG32(config_p->base_address, FPL011CR_OFFSET) ; - - /* Set the correct value by masking the bits, then ORing the const. */ - ctrl_reg &= ~(u32)FPL011CR_LBE; - - switch (operation_mode) - { - case FPL011_OPER_MODE_NORMAL: - ctrl_reg |= FPL011CR_MODE_NORMAL; - break; - case FPL011_OPER_MODE_LOCAL_LOOP: - ctrl_reg |= FPL011CR_LBE; - break; - default: - break; - } - - /* Setup the Control Register with the passed argument.*/ - FPl011ProgramCtlReg(uart_p, ctrl_reg); -} diff --git a/bsp/phytium/libraries/standalone/drivers/serial/fpl011/fpl011_sinit.c b/bsp/phytium/libraries/standalone/drivers/serial/fpl011/fpl011_sinit.c deleted file mode 100644 index 382c9ace4b..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/serial/fpl011/fpl011_sinit.c +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fpl011_sinit.c - * Date: 2021-11-02 14:53:42 - * LastEditTime: 2022-02-18 09:07:00 - * Description:  This file is for uart static init - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2021/11/2 first commit - * 1.1 liushengming 2022/02/18 add file head - */ - -/***************************** Include Files *********************************/ - -#include "fpl011.h" -#include "fparameters.h" -#include "sdkconfig.h" - -extern FPl011Config FPl011ConfigTable[FUART_NUM]; -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ - -/*****************************************************************************/ -/** - * @name: FPl011LookupConfig - * @msg: Initializes a specific FPl011 instance such that it is ready to be used. - * @param contains the ID of the device - * @return {FPl011Config *} A pointer to the configuration structure or NULL if the - * specified device is not in the system. - */ -const FPl011Config *FPl011LookupConfig(u32 instance_id) -{ - const FPl011Config *cfg_ptr = NULL; - u32 index; - - for (index = 0; index < (u32)FUART_NUM; index++) - { - if (FPl011ConfigTable[index].instance_id == instance_id) - { - cfg_ptr = &FPl011ConfigTable[index]; - break; - } - } - - return (const FPl011Config *)cfg_ptr; -} diff --git a/bsp/phytium/libraries/standalone/drivers/spi/Kconfig b/bsp/phytium/libraries/standalone/drivers/spi/Kconfig deleted file mode 100644 index 9cfe5f79a3..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/spi/Kconfig +++ /dev/null @@ -1,9 +0,0 @@ - -config USE_FSPIM - bool - prompt "Use FSPIM" - default n - depends on USE_SPI - help - Select FSPIM driver component - diff --git a/bsp/phytium/libraries/standalone/drivers/spi/fspim/fspim.c b/bsp/phytium/libraries/standalone/drivers/spi/fspim/fspim.c deleted file mode 100644 index 0fc6f4bc6e..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/spi/fspim/fspim.c +++ /dev/null @@ -1,758 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fspim.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 09:08:32 - * Description:  This file is for spim api implementation. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2021/12/3 init commit - * 1.1 zhugengyu 2022/4/15 support test mode - * 1.2 zhugengyu 2022/5/13 support spi dma - * 1.3 liqiaozhong 2022/12/30 add check func and spim option func - */ - - -/***************************** Include Files *********************************/ - -#include -#include "fio.h" -#include "ferror_code.h" -#include "ftypes.h" -#include "fdebug.h" -#include "fspim_hw.h" -#include "fspim.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ -#define FSPIM_DEBUG_TAG "SPIM" -#define FSPIM_ERROR(format, ...) FT_DEBUG_PRINT_E(FSPIM_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSPIM_WARN(format, ...) FT_DEBUG_PRINT_W(FSPIM_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSPIM_INFO(format, ...) FT_DEBUG_PRINT_I(FSPIM_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSPIM_DEBUG(format, ...) FT_DEBUG_PRINT_D(FSPIM_DEBUG_TAG, format, ##__VA_ARGS__) - -/************************** Function Prototypes ******************************/ -FError FSpimReset(FSpim *instance_p); - -/************************** Variable Definitions *****************************/ -static const char *FSPIM_ERROR_CODE_MSG[FSPIM_NUM_OF_ERR_CODE] = -{ - "FSPIM_SUCCESS : The fspim was successful", - "FSPIM_ERR_INVAL_STATE : The fspim invalid state", - "FSPIM_ERR_NOT_READY : The fspim driver is not ready", - "FSPIM_ERR_INVAL_PARAM : The fspim input parameter is invalid", - "FSPIM_ERR_BUS_BUSY : The fspim bus is busy", - "FSPIM_ERR_NOT_SUPPORT : Operations are not supported by fspim", - "FSPIM_ERR_TIMEOUT : The fspim waits for a timeout", - "FSPIM_ERR_TRANS_FAIL : The fspim data transmission failed", -}; - - -/*****************************************************************************/ - -/* 此文件主要为了完成用户对外接口,用户可以使用这些接口直接开始工作 */ - -/* - 包括用户API的定义和实现 - - 同时包含必要的OPTION方法,方便用户进行配置 - - 如果驱动可以直接进行I/O操作,在此源文件下可以将API 进行实现 */ - -/* - * @name: FSpimCfgInitialize - * @msg: Initializes a specific instance such that it is ready to be used. - * @param {FSpim} *instance_p FSPIM驱动控制数据 - * @param {FSpimConfig} *config_p FSPIM驱动配置数据 - * @return 驱动初始化的错误码信息,FSPIM_SUCCESS 表示初始化成功,其它返回值表示初始化失败 - */ -FError FSpimCfgInitialize(FSpim *instance_p, const FSpimConfig *input_config_p) -{ - FASSERT(instance_p && input_config_p); - uintptr base_addr = instance_p->config.base_addr; - - FError ret = FSPIM_SUCCESS; - /* - * If the device is started, disallow the initialize and return a Status - * indicating it is started. This allows the user to de-initialize the device - * and reinitialize, but prevents a user from inadvertently - * initializing. - */ - if (FT_COMPONENT_IS_READY == instance_p->is_ready) - { - FSPIM_WARN("The device has been initialized!!!"); - } - - /* - * Set default values and configuration data, including setting the - * callback handlers to stubs so the system will not crash should the - * application not assign its own callbacks. - */ - FSpimDeInitialize(instance_p); - instance_p->config = *input_config_p; - - /* Reset the device. */ - ret = FSpimReset(instance_p); - if (FSPIM_SUCCESS == ret) - { - instance_p->is_ready = FT_COMPONENT_IS_READY; - } - - return ret; -} - -/** - * @name: FSpimDeInitialize - * @msg: DeInitialization function for the device instance - * @return {无} - * @param {FSpim} *instance_p FSPIM驱动控制数据 - */ -void FSpimDeInitialize(FSpim *instance_p) -{ - FASSERT(instance_p); - - instance_p->is_ready = 0; - memset(instance_p, 0, sizeof(*instance_p)); - - return; -} - -/** - * @name: FSpimReset - * @msg: Reset FSPIM controller - * @return {FError} FSPIM_SUCCESS表示重置成功,其它返回值表示重置失败 - * @param {FSpim} *instance_p - */ -FError FSpimReset(FSpim *instance_p) -{ - FASSERT(instance_p); - uintptr base_addr = instance_p->config.base_addr; - FError ret = FSPIM_SUCCESS; - u32 reg_val; - u32 fifo; - - /* 禁用SPI控制器 */ - FSpimSetEnable(base_addr, FALSE); - - /* 选择数据长度和帧格式 */ - reg_val = FSPIM_CTRL_R0_DFS(FSPIM_DEFAULT_DFS) | - FSPIM_CTRL_R0_FRF(FSPIM_DEFAULT_FRF) | - FSPIM_CTRL_R0_CFS(FSPIM_DEFAULT_CFS); - - if (instance_p->config.en_test) - { - reg_val |= FSPIM_CTRL_R0_SLV_SRL(FSPIM_SRL_TEST); /* 设置测试模式,TX Fifo和RX Fifo内部短接 */ - } - else - { - reg_val |= FSPIM_CTRL_R0_SLV_SRL(FSPIM_SRL_NORAML); /* 设置为正常模式 */ - } - - FSpimSetCtrlR0(base_addr, reg_val); - - /* 选择串行时钟极性和相位 */ - FSpimSetCpha(base_addr, instance_p->config.cpha); - FSpimSetCpol(base_addr, instance_p->config.cpol); - - /* 设置传输模式 */ - FSpimSetTransMode(base_addr, FSPIM_TRANS_MODE_RX_TX); - - /* 禁用slave */ - FSpimSetSlaveEnable(base_addr, FALSE); - - /* 禁用SPI 中断,设置slave设备 */ - FSpimMaskIrq(base_addr, FSPIM_IMR_ALL_BITS); - FSpimSelSlaveDev(base_addr, instance_p->config.slave_dev_id); - - /* 获取SPI RX/TX FIFO 深度 */ - if (0 == instance_p->tx_fifo_len) - { - fifo = FSpimGetTxFifoDepth(base_addr); - instance_p->tx_fifo_len = ((fifo == 1) ? 0 : fifo); - FSPIM_INFO("The fifo depth is %d ,tx effective length bits %d", fifo, instance_p->tx_fifo_len); - } - - if (0 == instance_p->rx_fifo_len) - { - fifo = FSpimGetRxFifoDepth(base_addr); - instance_p->rx_fifo_len = ((fifo == 1) ? 0 : fifo); - FSPIM_INFO("The fifo depth is %d ,rx effective length bits %d", fifo, instance_p->rx_fifo_len); - } - - FSPIM_WRITE_REG32(base_addr, FSPIM_DMA_CR_OFFSET, 0x0); /* disable ddma */ - - if (instance_p->config.en_dma) - { - /* recv data in continuous way */ - FSpimSetCtrlR1(base_addr, FSPIM_CTRL_R1_NDF_64KB); - - /* setup fifo threshold */ - FSpimSetRxFifoThreshold(base_addr, instance_p->rx_fifo_len); - FSpimSetTxFifoThreshold(base_addr, instance_p->tx_fifo_len); - - /* setup fifo DMA level to trigger interrupt */ - FSpimSetRxDMALevel(base_addr, FSPIM_RX_DMA_LEVEL); - FSpimSetTxDMALevel(base_addr, FSPIM_TX_DMA_LEVEL); - } - else - { - FSpimSetCtrlR1(base_addr, 0); - - FSpimSetRxFifoThreshold(base_addr, 0); - FSpimSetTxFifoThreshold(base_addr, 0); - FSpimSetRxDMALevel(base_addr, 0); - FSpimSetTxDMALevel(base_addr, 0); - } - - - ret = FSpimSetSpeed(base_addr, instance_p->config.max_freq_hz); - if (FSPIM_SUCCESS != ret) - { - return ret; - } - - FSPIM_WRITE_REG32(base_addr, FSPIM_RX_SAMPLE_DLY_OFFSET, FSPIM_DEFAULT_RSD); - - return ret; -} - -/* - * @name: FSpimSetOption - * @msg: Give user a way to set speed and polarity etc. - * @param {FSpim} *instance_p FSPIM驱动控制数据 - * @param {u32} option FSPIM操作标识数 - * @param {u32} value FSPIM用户自定参数 - * @return 驱动初始化的错误码信息,FSPIM_SUCCESS 表示设置成功,其它返回值表示设置失败 - */ -FError FSpimSetOption(FSpim *instance_p, u32 option, u32 value) -{ - FASSERT(instance_p); - uintptr base_addr = instance_p->config.base_addr; - FError ret = FSPIM_SUCCESS; - boolean enabled = FSpimGetEnable(base_addr); - - if (FT_COMPONENT_IS_READY != instance_p->is_ready) - { - FSPIM_ERROR("The device is not initialized!!!"); - return FSPIM_ERR_NOT_READY; - } - - FSpimSetEnable(base_addr, FALSE); - - if (option == FSPIM_CPOLTYPE_OPTION) - { - if (value == FSPIM_CPOL_HIGH || value == FSPIM_CPOL_LOW) - { - FSpimSetCpol(base_addr, value); - instance_p->config.cpol = value; - FSPIM_INFO("Set cpol to %d", value); - } - else - { - FSPIM_ERROR("Input error, CPOL value should be 0 or 1."); - return FSPIM_ERR_INVAL_PARAM; - } - } - - if (option == FSPIM_CPHATYPE_OPTION) - { - if (value == FSPIM_CPHA_2_EDGE || value == FSPIM_CPHA_1_EDGE) - { - FSpimSetCpha(base_addr, value); - instance_p->config.cpha = value; - FSPIM_INFO("Set cpha to %d", value); - } - else - { - FSPIM_ERROR("Input error, CPHA value should be 0 or 1."); - return FSPIM_ERR_INVAL_PARAM; - } - } - - if (option == FSPIM_FREQUENCY_OPTION) - { - if (value <= (FSPI_CLK_FREQ_HZ / FSPIM_BAUD_R_SCKDV_MIN)) - { - ret = FSpimSetSpeed(base_addr, value); - if (FSPIM_SUCCESS != ret) - { - return ret; - } - instance_p->config.max_freq_hz = value; - FSPIM_INFO("Set spim freqency to %d", value); - } - else - { - FSPIM_ERROR("Input error, spim freqency value should be less than 24M."); - return FSPIM_ERR_INVAL_PARAM; - } - } - - if (enabled) - { - FSpimSetEnable(base_addr, TRUE); - } - - return ret; -} - -/* - * @name: FSpimGetOption - * @msg: Give user a way to get speed and polarity etc. - * @param {FSpim} *instance_p FSPIM驱动控制数据 - * @param {u32} option FSPIM操作标识数 - * @return {u32} 获取到的参数值 - */ -u32 FSpimGetOption(FSpim *instance_p, u32 option) -{ - FASSERT(instance_p); - uintptr base_addr = instance_p->config.base_addr; - u32 value; - - if (option == FSPIM_CPOLTYPE_OPTION) - { - value = FSpimGetCpol(base_addr); - FSPIM_INFO("Get cpol value: %d", value); - return value; - } - - if (option == FSPIM_CPHATYPE_OPTION) - { - value = FSpimGetCpha(base_addr); - FSPIM_INFO("Get cpha value: %d", value); - return value; - } - - if (option == FSPIM_FREQUENCY_OPTION) - { - value = FSpimGetSpeed(base_addr); - FSPIM_INFO("Get freq_clock value: 0x%x, %d", value, value); - return value; - } -} -/** - * @name: FSpimGetTxRound - * @msg: 计算当前FIFO支持的发送字节数 - * @return {fsize_t} 当前TX FIFO可以容纳的字节数 - * @param {FSpim} *instance_p - */ -static fsize_t FSpimGetTxRound(FSpim *instance_p) -{ - fsize_t data_width = instance_p->config.n_bytes; - uintptr base_addr = instance_p->config.base_addr; - fsize_t tx_left_round, tx_fifo_room, rx_tx_gap; - - tx_left_round = (fsize_t)(instance_p->tx_buff_end - instance_p->tx_buff) / data_width; - tx_fifo_room = instance_p->tx_fifo_len - - FSpimGetTxFifoLevel(base_addr); - rx_tx_gap = ((fsize_t)(instance_p->rx_buff_end - instance_p->rx_buff) - - (fsize_t)(instance_p->tx_buff_end - instance_p->tx_buff)) / data_width; - - FSPIM_DEBUG("tx_left_round: %d, tx_fifo_room: %d, gap: %d", - tx_left_round, - tx_fifo_room, - ((fsize_t)(instance_p->tx_fifo_len) - rx_tx_gap)); - return min3(tx_left_round, - tx_fifo_room, - ((fsize_t)(instance_p->tx_fifo_len) - rx_tx_gap)); -} - -/** - * @name: FSpimFifoTx - * @msg: 利用Fifo进行发送 - * @return {无} - * @param {FSpim} *instance_p - */ -void FSpimFifoTx(FSpim *instance_p) -{ - FASSERT(instance_p); - fsize_t tx_round = FSpimGetTxRound(instance_p); - FSPIM_DEBUG("tx round: %d", tx_round); - uintptr base_addr = instance_p->config.base_addr; - u32 data_width = instance_p->config.n_bytes; - u16 data = 0xff; - - while (tx_round) - { - if (instance_p->tx_buff_end - instance_p->length) - { - if (FSPIM_1_BYTE == data_width) - { - /* - * Data Transfer Width is Byte (8 bit). - */ - data = *(u8 *)(instance_p->tx_buff); - } - else if (FSPIM_2_BYTE == data_width) - { - /* - * Data Transfer Width is Half Word (16 bit). - */ - data = *(u16 *)(instance_p->tx_buff); - } - else - { - FASSERT(0); - } - } - - FSpimWriteData(base_addr, data); - FSPIM_DEBUG(" send 0x%x", data); - instance_p->tx_buff += data_width; - tx_round--; - } -} - -/** - * @name: FSpimGetRxRound - * @msg: 获取当前Fifo支持的接收字节数 - * @return {fsize_t} 当前RX FIFO可以容纳的字节数 - * @param {FSpim} *instance_p - */ -static fsize_t FSpimGetRxRound(FSpim *instance_p) -{ - fsize_t data_width = instance_p->config.n_bytes; - uintptr base_addr = instance_p->config.base_addr; - - fsize_t rx_left_round = (fsize_t)(instance_p->rx_buff_end - instance_p->rx_buff) / data_width; - - FSPIM_DEBUG("left round %d, rx level %d", rx_left_round, FSpimGetRxFifoLevel(base_addr)); - return min(rx_left_round, (fsize_t)FSpimGetRxFifoLevel(base_addr)); -} - -/** - * @name: FSpimFifoRx - * @msg: 利用Fifo进行接收 - * @return {无} - * @param {FSpim} *instance_p - */ -void FSpimFifoRx(FSpim *instance_p) -{ - FASSERT(instance_p); - fsize_t rx_round = FSpimGetRxRound(instance_p); - FSPIM_DEBUG("rx round: %d", rx_round); - uintptr base_addr = instance_p->config.base_addr; - u32 data_width = instance_p->config.n_bytes; - u16 data; - - while (rx_round) - { - data = FSpimReadData(base_addr); - if ((fsize_t)(instance_p->rx_buff_end - instance_p->length)) - { - if (FSPIM_1_BYTE == data_width) - { - /* - * Data Transfer Width is Byte (8 bit). - */ - *(u8 *)(instance_p->rx_buff) = (u8)data; - FSPIM_DEBUG(" recv 0x%x", *(u8 *)(instance_p->rx_buff)); - } - else if (FSPIM_2_BYTE == data_width) - { - /* - * Data Transfer Width is Half Word (16 bit). - */ - *(u16 *)(instance_p->rx_buff) = (u16)data; - FSPIM_DEBUG(" recv 0x%x", *(u16 *)(instance_p->rx_buff)); - } - else - { - FASSERT(0); - } - - } - - instance_p->rx_buff += data_width; - rx_round--; - } - - return; -} - -/** - * @name: FSpimTransferPollFifo - * @msg: 先发送后接收数据 (阻塞处理),利用Fifo进行处理 - * @return {FError} FSPIM_SUCCESS表示处理成功,其它返回值表示处理失败 - * @param {FSpim} *instance_p 驱动控制数据 - * @param {void} *tx_buf 写缓冲区,可以为空,为空时表示只关注读数据,此时驱动会发送0xff读数据 - * @param {void} *rx_buf 读缓冲区, 可以为空,为空时表示值关注写数据,此时SPI总线上返回的数据会被抛弃 - * @param {fsize_t} len 进行传输的长度,如果tx_buf或者rx_buf不为空,则两个buf的长度必须为len - - 使用此函数前需要确保FSPIM驱动初始化成功 - - 从函数不会使用中断,会按照TX FIFO的深度进行传输,每次发送填满TX FIFO后触发发送/接收动作 - */ -FError FSpimTransferPollFifo(FSpim *instance_p, const void *tx_buf, void *rx_buf, fsize_t len) -{ - FASSERT(instance_p); - u32 reg_val; - uintptr base_addr = instance_p->config.base_addr; - u32 data_width = instance_p->config.n_bytes; - u32 tx_level; - FError ret = FSPIM_SUCCESS; - - if (FT_COMPONENT_IS_READY != instance_p->is_ready) - { - FSPIM_ERROR("The device is not initialized!!!"); - return FSPIM_ERR_NOT_READY; - } - - FSpimSetEnable(base_addr, FALSE); - - reg_val = FSpimGetCtrlR0(base_addr); - - reg_val &= ~FSPIM_CTRL_R0_DFS_MASK; - reg_val |= FSPIM_CTRL_R0_DFS((data_width << 3) - 1); - - reg_val &= ~FSPIM_CTRL_R0_TMOD_MASK; - if (tx_buf && rx_buf) - { - reg_val |= FSPIM_CTRL_R0_TMOD(FSPIM_TMOD_RX_TX); - } - else if (rx_buf) - { - reg_val |= FSPIM_CTRL_R0_TMOD(FSPIM_TMOD_RX_ONLY); - } - else - { - reg_val |= FSPIM_CTRL_R0_TMOD(FSPIM_TMOD_RX_TX); - } - - FSpimSetCtrlR0(base_addr, reg_val); - - FSpimMaskIrq(base_addr, FSPIM_IMR_ALL_BITS); - - instance_p->length = len; - instance_p->tx_buff = tx_buf; - instance_p->tx_buff_end = tx_buf + len; - instance_p->rx_buff = rx_buf; - instance_p->rx_buff_end = rx_buf + len; - FSPIM_DEBUG("tx buff@%p-%d, rx buff@%p-%d", - instance_p->tx_buff, len, - instance_p->rx_buff, len); - - FSpimSetEnable(base_addr, TRUE); - - do - { - FSpimFifoTx(instance_p); - FSpimFifoRx(instance_p); - } - while (instance_p->rx_buff_end > instance_p->rx_buff); - - return ret; -} - -/** - * @name: FSpimTransferByInterrupt - * @msg: 配置并打开spim中断传输,利用Fifo进行处理 - * @return {FError} FSPIM_SUCCESS表示成功打开中断,其它返回值表示失败 - * @param {FSpim} *instance_p 驱动控制数据 - * @param {void} *tx_buf 写缓冲区 - * @param {void} *rx_buf 读缓冲区 - * @param {fsize_t} len 读写缓冲区长度 (必须相等) - */ -FError FSpimTransferByInterrupt(FSpim *instance_p, const void *tx_buf, void *rx_buf, fsize_t len) -{ - FASSERT(instance_p); - u32 reg_val; - uintptr base_addr = instance_p->config.base_addr; - u32 data_width = instance_p->config.n_bytes; - u32 tx_level; - - if (FT_COMPONENT_IS_READY != instance_p->is_ready) - { - FSPIM_ERROR("The device is not initialized!!!"); - return FSPIM_ERR_NOT_READY; - } - - FSpimSetEnable(base_addr, FALSE); - - reg_val = FSpimGetCtrlR0(base_addr); - - reg_val &= ~FSPIM_CTRL_R0_DFS_MASK; - reg_val |= FSPIM_CTRL_R0_DFS((data_width << 3) - 1); - - reg_val &= ~FSPIM_CTRL_R0_TMOD_MASK; - if (tx_buf && rx_buf) - { - reg_val |= FSPIM_CTRL_R0_TMOD(FSPIM_TMOD_RX_TX); - } - else if (rx_buf) - { - reg_val |= FSPIM_CTRL_R0_TMOD(FSPIM_TMOD_RX_ONLY); - } - else - { - reg_val |= FSPIM_CTRL_R0_TMOD(FSPIM_TMOD_RX_TX); - } - - FSpimSetCtrlR0(base_addr, reg_val); - - FSpimMaskIrq(base_addr, FSPIM_IMR_ALL_BITS); - - instance_p->length = len; - instance_p->tx_buff = tx_buf; - instance_p->tx_buff_end = instance_p->tx_buff + len; - instance_p->rx_buff = rx_buf; - instance_p->rx_buff_end = instance_p->rx_buff + len; - - /* 设置中断触发的时机,fifo填满一半,或者所有的数据填完 */ - tx_level = min(instance_p->tx_fifo_len / 2, instance_p->length / data_width); - FSpimSetTxFifoThreshold(base_addr, tx_level); - FSpimUmaskIrq(base_addr, FSPIM_IMR_TXEIS | FSPIM_IMR_TXOIS | FSPIM_IMR_RXUIS | FSPIM_IMR_RXOIS); - - FSpimSetEnable(base_addr, TRUE); - - return FSPIM_SUCCESS; -} - -#if defined(FSPIM_VERSION_2) /* E2000 */ - -/** - * @name: FSpimTransferDMA - * @msg: 启动SPIM DMA数据传输 - * @return {FError} FSPIM_SUCCESS表示启动DMA传输成功,其它值表示失败 - * @param {FSpim} *instance_p, 驱动控制数据 - * @param {boolean} tx, TRUE: 启动发送DMA - * @param {boolean} rx, TRUE: 启动接收DMA - */ -FError FSpimTransferDMA(FSpim *instance_p, boolean tx, boolean rx) -{ - FASSERT(instance_p); - u32 reg_val; - uintptr base_addr = instance_p->config.base_addr; - u32 data_width = instance_p->config.n_bytes; - - if (FT_COMPONENT_IS_READY != instance_p->is_ready) - { - FSPIM_ERROR("device is not yet initialized!!!"); - return FSPIM_ERR_NOT_READY; - } - - FSpimSetEnable(base_addr, FALSE); - - /* set up spim transfer mode */ - reg_val = FSpimGetCtrlR0(base_addr); - reg_val &= ~FSPIM_CTRL_R0_DFS_MASK; - reg_val |= FSPIM_CTRL_R0_DFS((data_width << 3) - 1); - - reg_val &= ~FSPIM_CTRL_R0_TMOD_MASK; - if (tx && rx) - { - reg_val |= FSPIM_CTRL_R0_TMOD(FSPIM_TMOD_RX_TX); - } - else if (rx) - { - reg_val |= FSPIM_CTRL_R0_TMOD(FSPIM_TMOD_RX_ONLY); - } - else - { - reg_val |= FSPIM_CTRL_R0_TMOD(FSPIM_TMOD_RX_TX); - } - - FSpimSetCtrlR0(base_addr, reg_val); - - FSpimMaskIrq(base_addr, FSPIM_IMR_ALL_BITS); /* mask all interrupts */ - - FSpimSetEnable(base_addr, TRUE); - - /* enable DMA tx / rx */ - reg_val = FSPIM_READ_REG32(base_addr, FSPIM_DMA_CR_OFFSET); - if (tx) - { - reg_val |= FSPIM_DMA_CR_TDMAE; - } - else - { - reg_val &= ~FSPIM_DMA_CR_TDMAE; - } - - if (rx) - { - reg_val |= FSPIM_DMA_CR_RDMAE; - } - else - { - reg_val &= ~FSPIM_DMA_CR_RDMAE; - } - FSPIM_WRITE_REG32(base_addr, FSPIM_DMA_CR_OFFSET, reg_val); - - FSpimSelSlaveDev(base_addr, instance_p->config.slave_dev_id); - - return FSPIM_SUCCESS; -} - -/** - * @name: FSpimSetChipSelection - * @msg: 设置片选信号 - * @return {NONE} - * @param {FSpim} *instance_p, 驱动控制数据 - * @param {boolean} on, TRUE: 片选打开, FALSE: 片选关闭 - */ -void FSpimSetChipSelection(FSpim *instance_p, boolean on) -{ - FASSERT(instance_p); - u32 reg_val; - FSpimSlaveDevice cs_n = instance_p->config.slave_dev_id; - uintptr base_addr = instance_p->config.base_addr; - if (FT_COMPONENT_IS_READY != instance_p->is_ready) - { - FSPIM_ERROR("device is not yet initialized!!!"); - return; - } - - reg_val = FSPIM_READ_REG32(base_addr, FSPIM_CS_OFFSET); - - if (on) - { - reg_val |= FSPIM_CHIP_SEL_EN((u32)cs_n); - reg_val |= FSPIM_CHIP_SEL((u32)cs_n); - } - else - { - reg_val &= ~FSPIM_CHIP_SEL_EN((u32)cs_n); - reg_val &= ~FSPIM_CHIP_SEL((u32)cs_n); - } - - FSPIM_WRITE_REG32(base_addr, FSPIM_CS_OFFSET, reg_val); - - return; -} -#endif - -/** - * @name: FSpimErrorToMessage - * @msg: 获取FSPIM模块错误码对应的错误信息 - * @return {const char *}, 错误码信息,NULL表示失败 - * @param {FError} error, FSPIM输入错误码 - */ -const char *FSpimErrorToMessage(FError error) -{ - const char *msg = NULL; - if (FSPIM_SUCCESS != error && (FSPIM_ERR_CODE_PREFIX != error & (FT_ERRCODE_SYS_MODULE_MASK | FT_ERRCODE_SUB_MODULE_MASK))) - { - /* if input error do not belong to this module */ - return msg; - } - u32 index = error & FT_ERRCODE_TAIL_VALUE_MASK; - - if (index < FSPIM_NUM_OF_ERR_CODE) - { - msg = FSPIM_ERROR_CODE_MSG[index]; - } - - return msg; -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/spi/fspim/fspim.h b/bsp/phytium/libraries/standalone/drivers/spi/fspim/fspim.h deleted file mode 100644 index 7783ceb520..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/spi/fspim/fspim.h +++ /dev/null @@ -1,233 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fspim.h - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 09:08:38 - * Description:  This file is for providing spim basic api func and predefined variables. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2021/12/3 init commit - * 1.1 zhugengyu 2022/4/15 support test mode - * 1.2 zhugengyu 2022/5/13 support spi dma - * 1.3 liqiaozhong 2022/12/30 add check func and spim option func - */ - - -#ifndef DRIVERS_FSPI_M_H -#define DRIVERS_FSPI_M_H - -#ifdef __cplusplus -extern "C" -{ -#endif - -/***************************** Include Files *********************************/ -#include "fparameters.h" -#include "ftypes.h" -#include "ferror_code.h" -#include "fassert.h" -#include "sdkconfig.h" - -/************************** Constant Definitions *****************************/ - -#define FSPIM_SUCCESS FT_SUCCESS -#define FSPIM_ERR_INVAL_STATE FT_MAKE_ERRCODE(ErrModBsp, ErrBspSpi, 0) -#define FSPIM_ERR_NOT_READY FT_MAKE_ERRCODE(ErrModBsp, ErrBspSpi, 1) -#define FSPIM_ERR_INVAL_PARAM FT_MAKE_ERRCODE(ErrModBsp, ErrBspSpi, 2) -#define FSPIM_ERR_BUS_BUSY FT_MAKE_ERRCODE(ErrModBsp, ErrBspSpi, 3) -#define FSPIM_ERR_NOT_SUPPORT FT_MAKE_ERRCODE(ErrModBsp, ErrBspSpi, 4) -#define FSPIM_ERR_TIMEOUT FT_MAKE_ERRCODE(ErrModBsp, ErrBspSpi, 5) -#define FSPIM_ERR_TRANS_FAIL FT_MAKE_ERRCODE(ErrModBsp, ErrBspSpi, 6) -#define FSPIM_ERR_DMA_INIT FT_MAKE_ERRCODE(ErrModBsp, ErrBspSpi, 6) - -#define FSPIM_CPOLTYPE_OPTION 0 -#define FSPIM_CPHATYPE_OPTION 1 -#define FSPIM_FREQUENCY_OPTION 2 - -#if defined(CONFIG_TARGET_F2000_4) || defined(CONFIG_TARGET_D2000) || defined(TARDIGRADE) -#define FSPIM_VERSION_1 /* SPIM for FT2000/4 and D2000 */ -#elif defined(CONFIG_TARGET_E2000) -#define FSPIM_VERSION_2 /* SPIM for E2000 */ - -#else -#error "Invalid target board !!!" -#endif - -/* add up new error code above and plust FSPIM_ERR_CODE_MAX by ONE*/ -#define FSPIM_ERR_CODE_PREFIX FSPIM_ERR_TRANS_FAIL & (FT_ERRCODE_SYS_MODULE_MASK | FT_ERRCODE_SUB_MODULE_MASK) -#define FSPIM_NUM_OF_ERR_CODE 8 - -typedef enum -{ - FSPIM_DEV_MASTER_MODE = 0 /* only support master mode */ -} FSpimWorkMode; - -typedef enum -{ - FSPIM_SLAVE_DEV_0 = 0, - FSPIM_SLAVE_DEV_1, - FSPIM_SLAVE_DEV_2, - FSPIM_SLAVE_DEV_3, - - FSPIM_NUM_OF_SLAVE_DEV -} FSpimSlaveDevice; - -typedef enum -{ - FSPIM_1_BYTE = 1, - FSPIM_2_BYTE = 2, - - FSPIM_MAX_BYTES_NUM -} FSpimTransByte; - -typedef enum -{ - FSPIM_TRANS_MODE_RX_TX = 0x0, - FSPIM_TRANS_MODE_TX_ONLY = 0x1, - FSPIM_TRANS_MODE_RX_ONLY = 0x2, - FSPIM_TRANS_MODE_READ_EEPROM = 0x3, - - FSPIM_TRANS_MODE_MAX -} FSpimTransMode; - -/* - CPOL = 0, CPHA = 0, sample at the first rising edge - CPOL = 1, CPHA = 1, sample at the second rising edge - CPOL = 1, CPHA = 0, sample at the second falling edge - CPOL = 0, CPHA = 1, sample at the first falling edge -*/ - -typedef enum -{ - FSPIM_CPOL_LOW = 0, /* pharse 0 CPOL=0 */ - FSPIM_CPOL_HIGH /* pharse 1 CPOL=1 */ -} FSpimCpolType; - -typedef enum -{ - FSPIM_CPHA_1_EDGE = 0, /* sample at the 1st edge, CPHA=0 */ - FSPIM_CPHA_2_EDGE /* sample at the 2nd edge, CPHA=1 */ -} FSpimCphaType; - -typedef enum -{ - FSPIM_INTR_EVT_RX_DONE = 0, /* receive complete event */ - FSPIM_INTR_EVT_TX_OVERFLOW, /* send FIFO overflow event */ - FSPIM_INTR_EVT_RX_UNDERFLOW, /* receive FIFO underflow event */ - FSPIM_INTR_EVT_RX_OVERFLOW, /* receive FIFO overflow event */ - - FSPIM_INTR_EVT_NUM -} FSpimIntrEvtType; - -/**************************** Type Definitions *******************************/ - -/** - * This typedef contains configuration information for the device. - */ -typedef struct -{ - u32 instance_id; /* Device instance id */ - uintptr base_addr; /* Device base address */ - u32 irq_num; /* Device intrrupt id */ - u32 irq_prority; /* Device intrrupt priority */ - FSpimWorkMode work_mode; /* Device work mode */ - FSpimSlaveDevice slave_dev_id; /* Slave device id */ - u32 max_freq_hz; /* Clock frequency in Hz */ - FSpimTransByte n_bytes; /* Bytes in transfer */ - FSpimCpolType cpol; /* Polarity of the clock */ - FSpimCphaType cpha; /* Phase of the clock */ - boolean en_test; /* Enable test mode */ - boolean en_dma; /* Enable DMA */ -} FSpimConfig; - -typedef void (*FSpimEvtHandler)(void *instance_p, void *param); - -/** - * This typedef contains driver instance data. The user is required to allocate a - * variable of this type for every device in the system. A pointer - * to a variable of this type is then passed to the driver API functions. - */ -typedef struct -{ - FSpimConfig config; /* Current active configs */ - u32 is_ready; /* Device is initialized and ready */ - u32 length; /* Data length in transfer */ - const void *tx_buff; /* Tx buffer beg */ - void *rx_buff; /* Rx buffer beg */ - const void *tx_buff_end; /* Tx buffer end */ - void *rx_buff_end; /* Rx buffer end */ - u32 tx_fifo_len; /* Depth of tx fifo */ - u32 rx_fifo_len; /* Depth of rx fifo */ - FSpimEvtHandler evt_handler[FSPIM_INTR_EVT_NUM]; /* event handler for interrupt */ - void *evt_param[FSPIM_INTR_EVT_NUM]; /* parameters ptr of event handler */ -} FSpim; - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ -/* fspim_sinit.c */ -/* 获取FSPIM驱动的默认配置参数 */ -const FSpimConfig *FSpimLookupConfig(u32 instance_id); - -/* fspim.c */ -/* 完成FSPIM驱动实例的初始化,使之可以使用*/ -FError FSpimCfgInitialize(FSpim *instance_p, const FSpimConfig *cofig_p); - -/* 完成I2C驱动实例去使能,清零实例数据 */ -void FSpimDeInitialize(FSpim *instance_p); - -/* FSPIM临时修改参数操作 */ -FError FSpimSetOption(FSpim *instance_p, u32 option, u32 value); - -/* FSPIM获取某些参数 */ -u32 FSpimGetOption(FSpim *instance_p, u32 option); - -/* 先发送后接收数据 (阻塞处理),利用Fifo进行处理 */ -FError FSpimTransferPollFifo(FSpim *instance_p, const void *tx_buf, void *rx_buf, fsize_t len); - -#if defined(FSPIM_VERSION_2)/* E2000 */ - -/* 启动SPIM DMA数据传输 */ -FError FSpimTransferDMA(FSpim *instance_p, boolean tx, boolean rx); - -/* 设置片选信号 */ -void FSpimSetChipSelection(FSpim *instance_p, boolean on); -#endif - -/* 获取FSPIM模块错误码对应的错误信息 */ -const char *FSpimErrorToMessage(FError error); - -/* fspim_intr.c */ -/* 先发送后接收数据 (中断处理),利用Fifo进行处理 */ -FError FSpimTransferByInterrupt(FSpim *instance_p, const void *tx_buf, void *rx_buf, fsize_t len); - -/* SPIM中断处理函数 */ -void FSpimInterruptHandler(s32 vector, void *param); - -/* 注册FSPIM中断事件处理函数 */ -void FSpimRegisterIntrruptHandler(FSpim *instance_p, FSpimIntrEvtType evt, FSpimEvtHandler handler, void *param); - -/* 打印SPIM控制寄存器信息 */ -void FSpimDumpRegister(uintptr base_addr); - -#ifdef __cplusplus -} -#endif - - -#endif diff --git a/bsp/phytium/libraries/standalone/drivers/spi/fspim/fspim_g.c b/bsp/phytium/libraries/standalone/drivers/spi/fspim/fspim_g.c deleted file mode 100644 index d61e966e35..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/spi/fspim/fspim_g.c +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fspim_g.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 09:07:55 - * Description:  This file is for providing spim basic information. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2021/12/3 init commit - * 1.1 zhugengyu 2022/4/15 support test mode - */ - -/***************************** Include Files *********************************/ - -#include "ftypes.h" -#include "fparameters.h" -#include "sdkconfig.h" - -#include "fspim.h" -#include "fspim_hw.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ - -/************************** Variable Definitions *****************************/ - -const FSpimConfig FSPIM_CONFIG_TBL[FSPI_NUM] = -{ - [FSPI0_ID] = - { - .instance_id = FSPI0_ID, /* Id of device*/ - .base_addr = FSPI0_BASE_ADDR, - .irq_num = FSPI0_IRQ_NUM, - .irq_prority = 0, - .work_mode = FSPIM_DEV_MASTER_MODE, - .slave_dev_id = FSPIM_SLAVE_DEV_0, - .max_freq_hz = 4000000, - .n_bytes = 1, - .en_test = FALSE, - .en_dma = FALSE - }, - [FSPI1_ID] = - { - .instance_id = FSPI1_ID, /* Id of device*/ - .base_addr = FSPI1_BASE_ADDR, - .irq_num = FSPI1_IRQ_NUM, - .irq_prority = 0, - .work_mode = FSPIM_DEV_MASTER_MODE, - .slave_dev_id = FSPIM_SLAVE_DEV_0, - .max_freq_hz = 4000000, - .n_bytes = 1, - .en_test = FALSE, - .en_dma = FALSE - }, -#if defined(CONFIG_TARGET_E2000) - [FSPI2_ID] = - { - .instance_id = FSPI2_ID, /* Id of device*/ - .base_addr = FSPI2_BASE, - .irq_num = FSPI2_IRQ_NUM, - .irq_prority = 0, - .work_mode = FSPIM_DEV_MASTER_MODE, - .slave_dev_id = FSPIM_SLAVE_DEV_0, - .max_freq_hz = 4000000, - .n_bytes = 1, - .en_test = FALSE, - .en_dma = FALSE - }, - [FSPI3_ID] = - { - .instance_id = FSPI3_ID, /* Id of device*/ - .base_addr = FSPI3_BASE, - .irq_num = FSPI3_IRQ_NUM, - .irq_prority = 0, - .work_mode = FSPIM_DEV_MASTER_MODE, - .slave_dev_id = FSPIM_SLAVE_DEV_0, - .max_freq_hz = 4000000, - .n_bytes = 1, - .en_test = FALSE, - .en_dma = FALSE - }, -#endif -}; - - -/*****************************************************************************/ diff --git a/bsp/phytium/libraries/standalone/drivers/spi/fspim/fspim_hw.c b/bsp/phytium/libraries/standalone/drivers/spi/fspim/fspim_hw.c deleted file mode 100644 index 406c3b6ad1..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/spi/fspim/fspim_hw.c +++ /dev/null @@ -1,346 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fspim_hw.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 09:08:00 - * Description:  This file is for providing spim Hardware interaction func. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2021/12/3 init commit - * 1.1 zhugengyu 2022/4/15 support test mode - * 1.2 liqiaozhong 2023/1/4 add data get func - */ - - -#include "fassert.h" -#include "fdebug.h" -#include "fspim_hw.h" -#include "fspim.h" - -/***************************** Include Files *********************************/ - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ -#define FSPIM_DEBUG_TAG "SPIM-HW" -#define FSPIM_ERROR(format, ...) FT_DEBUG_PRINT_E(FSPIM_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSPIM_WARN(format, ...) FT_DEBUG_PRINT_W(FSPIM_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSPIM_INFO(format, ...) FT_DEBUG_PRINT_I(FSPIM_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSPIM_DEBUG(format, ...) FT_DEBUG_PRINT_D(FSPIM_DEBUG_TAG, format, ##__VA_ARGS__) - -/************************** Function Prototypes ******************************/ - -/** - * @name: FSpimGetTxFifoDepth - * @msg: 获取TX Fifo可以设置的最大深度 - * @return {u32} TX Fifo的深度 - * @param {uintptr} base_addr, SPI控制器基地址 - */ -u32 FSpimGetTxFifoDepth(uintptr base_addr) -{ - u32 fifo_depth; - for (fifo_depth = 1; fifo_depth < FSPIM_MAX_FIFO_DEPTH; fifo_depth++) - { - FSpimSetTxFifoThreshold(base_addr, fifo_depth); - if (fifo_depth != FSpimGetTxFifoThreshold(base_addr)) - { - FSPIM_INFO("The Tx fifo threshold is %d", fifo_depth); - break; - } - } - - FSpimSetTxFifoThreshold(base_addr, 0); - return fifo_depth; -} - -/** - * @name: FSpimGetRxFifoDepth - * @msg: 获取RX Fifo可以设置的最大深度 - * @return {u32} Rx Fifo的深度 - * @param {uintptr} base_addr, SPI控制器基地址 - */ -u32 FSpimGetRxFifoDepth(uintptr base_addr) -{ - u32 fifo_depth = FSPIM_MIN_FIFO_DEPTH; - while (FSPIM_MAX_FIFO_DEPTH >= fifo_depth) - { - FSpimSetRxFifoThreshold(base_addr, fifo_depth); - if (fifo_depth != FSpimGetRxFifoThreshold(base_addr)) - { - FSPIM_INFO("The Rx fifo threshold is %d", fifo_depth); - break; - } - - fifo_depth++; - } - - return fifo_depth; -} - -/** - * @name: FSpimSelSlaveDev - * @msg: 选择SPI从设备 - * @return {无} - * @param {uintptr} base_addr, SPI控制器基地址 - * @param {u32} slave_dev_id, 从设备ID - */ -void FSpimSelSlaveDev(uintptr base_addr, u32 slave_dev_id) -{ - FASSERT(slave_dev_id < FSPIM_NUM_OF_SLAVE_DEV); - u32 reg_val; - - reg_val = (FSPIM_SER_SELECT << slave_dev_id); - FSPIM_WRITE_REG32(base_addr, FSPIM_SER_OFFSET, reg_val); - return; -} - -/** - * @name: FSpimSetSpeed - * @msg: 设置SPI传输速度 - * @return {FError} - * @param {uintptr} base_addr, SPI控制器基地址 - * @param {u32} speed, SPI传输速度设置 - */ -FError FSpimSetSpeed(uintptr base_addr, u32 speed) -{ - FASSERT(speed != 0); - u32 clk_div; - boolean enabled = FSpimGetEnable(base_addr); - - if (enabled) - { - FSpimSetEnable(base_addr, FALSE); - } - - clk_div = FSPI_CLK_FREQ_HZ / speed; - if (clk_div < FSPIM_BAUD_R_SCKDV_MIN || clk_div > FSPIM_BAUD_R_SCKDV_MAX) - { - FSPIM_ERROR("Clk div is %d => do not support, this parameter should be set as an even from 2 to 65534.", clk_div); - return FSPIM_ERR_NOT_SUPPORT; - } - FSPIM_INFO("Set clk div as %d", clk_div); - FSPIM_WRITE_REG32(base_addr, FSPIM_BAUD_R_OFFSET, clk_div); - - if (enabled) - { - FSpimSetEnable(base_addr, TRUE); - } - - return FSPIM_SUCCESS; -} - -/** - * @name: FSpimGetSpeed - * @msg: 获取SPI传输速度 - * @return {u32}FSPIM传输频率 - * @param {uintptr} base_addr, SPI控制器基地址 - * @param {u32} speed, SPI传输速度设置 - */ -u32 FSpimGetSpeed(uintptr base_addr) -{ - u32 clk_div; - u32 spim_speed; - - return FSPIM_READ_REG32(base_addr, FSPIM_BAUD_R_OFFSET); -} - -/** - * @name: FSpimSetTransMode - * @msg: 设置SPI传输模式 - * @return {无} - * @param {uintptr} base_addr, SPI控制器基地址 - * @param {u32} trans_mode, SPI传输模式设置 - */ -void FSpimSetTransMode(uintptr base_addr, u32 trans_mode) -{ - FASSERT(trans_mode < FSPIM_TRANS_MODE_MAX); - u32 reg_val; - boolean enabled = FSpimGetEnable(base_addr); - - if (enabled) - { - FSpimSetEnable(base_addr, FALSE); - } - - reg_val = FSpimGetCtrlR0(base_addr); - reg_val &= ~FSPIM_CTRL_R0_TMOD_MASK; /* clear trans mode bits */ - switch (trans_mode) - { - case FSPIM_TRANS_MODE_RX_TX: - reg_val |= FSPIM_CTRL_R0_TMOD(FSPIM_TMOD_RX_TX); - break; - case FSPIM_TRANS_MODE_TX_ONLY: - reg_val |= FSPIM_CTRL_R0_TMOD(FSPIM_TMOD_TX_ONLY); - break; - case FSPIM_TRANS_MODE_RX_ONLY: - reg_val |= FSPIM_CTRL_R0_TMOD(FSPIM_TMOD_RX_ONLY); - break; - case FSPIM_TRANS_MODE_READ_EEPROM: - reg_val |= FSPIM_CTRL_R0_TMOD(FSPIM_TMOD_RD_EEPROM); - break; - default: - FASSERT(0); - break; - } - - FSpimSetCtrlR0(base_addr, reg_val); - - if (enabled) - { - FSpimSetEnable(base_addr, TRUE); - } - - return; -} - -/** - * @name: FSpimSetCpha - * @msg: 设置串行时钟相位 - * @return {无} - * @param {uintptr} base_addr, SPI控制器基地址 - * @param {u32} cpha_mode, SPI控制器的相位设置 - */ -void FSpimSetCpha(uintptr base_addr, u32 cpha_mode) -{ - u32 reg_val = FSpimGetCtrlR0(base_addr); - - reg_val &= ~FSPIM_CTRL_R0_SCPHA_MASK; /* clear bits */ - if (FSPIM_CPHA_1_EDGE == cpha_mode) - { - reg_val |= FSPIM_CTRL_R0_SCPHA(FSPIM_SCPHA_SWITCH_DATA_MID); - } - else if (FSPIM_CPHA_2_EDGE == cpha_mode) - { - reg_val |= FSPIM_CTRL_R0_SCPHA(FSPIM_SCPHA_SWITCH_DATA_BEG); - } - else - { - FASSERT(0); - } - - FSpimSetCtrlR0(base_addr, reg_val); -} - -/** - * @name: FSpimGetCpha - * @msg: 获取串行时钟相位 - * @return {FSpimCphaType}串行时钟相位 - * @param {uintptr} base_addr, SPI控制器基地址 - */ -FSpimCphaType FSpimGetCpha(uintptr base_addr) -{ - u32 reg_val = FSpimGetCtrlR0(base_addr); - - if (reg_val &= FSPIM_CTRL_R0_SCPHA(FSPIM_SCPHA_SWITCH_DATA_BEG)) - { - return FSPIM_CPHA_2_EDGE; - } - else - { - return FSPIM_CPHA_1_EDGE; - } -} - -/** - * @name: FSpimSetCpol - * @msg: 设置串行时钟极性 - * @return {无} - * @param {uintptr} base_addr, SPI控制器基地址 - * @param {u32} cpol_mode, SPI控制器的极性设置 - */ -void FSpimSetCpol(uintptr base_addr, u32 cpol_mode) -{ - u32 reg_val = FSpimGetCtrlR0(base_addr); - - reg_val &= ~FSPIM_CTRL_R0_SCPOL_MASK; /* clear bits */ - if (FSPIM_CPOL_LOW == cpol_mode) - { - reg_val |= FSPIM_CTRL_R0_SCPOL(FSPIM_SCPOL_INACTIVE_LOW); - } - else if (FSPIM_CPOL_HIGH == cpol_mode) - { - reg_val |= FSPIM_CTRL_R0_SCPOL(FSPIM_SCPOL_INACTIVE_HIGH); - } - else - { - FASSERT(0); - } - - FSpimSetCtrlR0(base_addr, reg_val); -} - -/** - * @name: FSpimGetCpol - * @msg: 获取串行时钟极性 - * @return {无} - * @param {uintptr} base_addr, SPI控制器基地址 - */ -FSpimCpolType FSpimGetCpol(uintptr base_addr) -{ - u32 reg_val = FSpimGetCtrlR0(base_addr); - - if (reg_val &= FSPIM_CTRL_R0_SCPOL(FSPIM_SCPOL_INACTIVE_HIGH)) - { - return FSPIM_CPOL_HIGH; - } - else - { - return FSPIM_CPOL_LOW; - } -} - -/** - * @name: FSpimSetSlaveEnable - * @msg: 使能/去使能和从设备的连接 - * @return {无} - * @param {uintptr} base_addr, SPI控制器基地址 - * @param {boolean} enable, TRUE: 使能从设备, FALSE: 去使能从设备 - */ -void FSpimSetSlaveEnable(uintptr base_addr, boolean enable) -{ - u32 reg_val; - boolean enabled = FSpimGetEnable(base_addr); - - if (enabled) - { - FSpimSetEnable(base_addr, FALSE); - } - - reg_val = FSpimGetCtrlR0(base_addr); - - reg_val &= ~FSPIM_CTRL_R0_SLV_OE_MASK; - if (enable) - { - reg_val |= FSPIM_CTRL_R0_SLV_OE(FSPIM_SLAVE_TX_ENABLE); - } - else - { - reg_val |= FSPIM_CTRL_R0_SLV_OE(FSPIM_SLAVE_TX_DISALE); - } - - FSpimSetCtrlR0(base_addr, reg_val); - - if (enabled) - { - FSpimSetEnable(base_addr, TRUE); - } - - return; -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/spi/fspim/fspim_hw.h b/bsp/phytium/libraries/standalone/drivers/spi/fspim/fspim_hw.h deleted file mode 100644 index 7519a493c8..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/spi/fspim/fspim_hw.h +++ /dev/null @@ -1,603 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fspim_hw.h - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 09:08:05 - * Description:  This file is for providing spim Hardware interaction api - * and some predefined variables. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2021/12/3 init commit - * 1.1 zhugengyu 2022/4/15 support test mode - * 1.2 zhugengyu 2022/5/13 support spi dma - * 1.3 liqiaozhong 2023/1/4 add data get func - */ - - -#ifndef DRIVERS_FSPIM_M_HW_H -#define DRIVERS_FSPIM_M_HW_H - -#ifdef __cplusplus -extern "C" -{ -#endif -/***************************** Include Files *********************************/ - -#include "fparameters.h" -#include "fkernel.h" -#include "fio.h" -#include "ftypes.h" -#include "fspim.h" - -/************************** Constant Definitions *****************************/ -/** @name Register Map - * - * Register offsets from the base address of an SD device. - * @{ - */ -/* offset map of SPI register */ -#define FSPIM_CTRL_R0_OFFSET 0x00 /* Ctrl register 0 */ -#define FSPIM_CTRL_R1_OFFSET 0x04 /* Ctrl register 1 */ -#define FSPIM_SSIENR_OFFSET 0x08 /* SPI enable register */ -#define FSPIM_MWCR_OFFSET 0x0c /* Microwire ctrl register */ -#define FSPIM_SER_OFFSET 0x10 /* Slave enable register */ -#define FSPIM_BAUD_R_OFFSET 0x14 /* Baudrate set register */ -#define FSPIM_TXFTL_R_OFFSET 0x18 /* Tx threshold register */ -#define FSPIM_RXFTL_R_OFFSET 0x1c /* Rx threshold register */ -#define FSPIM_TXFLR_OFFSET 0x20 /* Tx level register */ -#define FSPIM_RXFLR_OFFSET 0x24 /* Rx level register */ -#define FSPIM_SR_OFFSET 0x28 /* Status register */ -#define FSPIM_IMR_OFFSET 0x2c /* Intr mask register */ -#define FSPIM_ISR_OFFSET 0x30 /* Irq Status register */ -#define FSPIM_RIS_R_OFFSET 0x34 /* Intr status register */ -#define FSPIM_TXOI_CR_OFFSET 0x38 /* TX FIFO overflow intr clear register */ -#define FSPIM_RXOI_CR_OFFSET 0x3c /* RX FIFO overflow intr clear register */ -#define FSPIM_RXUI_CR_OFFSET 0x40 /* TX FIFO underflow intr clear register */ -#define FSPIM_MSTI_CR_OFFSET 0x44 /* Multi slave intr clear register */ -#define FSPIM_ICR_OFFSET 0x48 /* Intr clear register */ -#define FSPIM_DMA_CR_OFFSET 0x4c /* DMA ctrl register */ -#define FSPIM_DMA_TDLR_OFFSET 0x50 /* DMA TX Data level register */ -#define FSPIM_DMA_RDLR_OFFSET 0x54 /* DMA RX Data level register */ -#define FSPIM_IDR_OFFSET 0x58 /* Identification register */ -#define FSPIM_DR_OFFSET 0x60 /* Data register */ -#define FSPIM_RX_SAMPLE_DLY_OFFSET 0xfc /* RX Data delay register */ -#define FSPIM_CS_OFFSET 0x100 /* Chip selection register */ - -/** @name FSPIM_CTRL_R0_OFFSET Register - */ - -#define FSPIM_CTRL_R0_DFS_MASK GENMASK(3, 0) -#define FSPIM_CTRL_R0_DFS(x) (FSPIM_CTRL_R0_DFS_MASK & ((x) << 0)) /* 选择数据长度 */ -#define FSPIM_CTRL_R0_FRF(x) (GENMASK(5, 4) & ((x) << 4)) /* 选择传输模式 */ -#define FSPIM_CTRL_R0_SCPHA(x) ((x) << 6) /* 串行时钟相位 */ -#define FSPIM_CTRL_R0_SCPHA_MASK BIT(6) -enum -{ - FSPIM_SCPHA_SWITCH_DATA_MID = 0x0, - FSPIM_SCPHA_SWITCH_DATA_BEG = 0x1 -}; -#define FSPIM_CTRL_R0_SCPOL(x) ((x) << 7) /* 串行时钟极性 */ -#define FSPIM_CTRL_R0_SCPOL_MASK BIT(7) -enum -{ - FSPIM_SCPOL_INACTIVE_LOW = 0, - FSPIM_SCPOL_INACTIVE_HIGH = 1 -}; -#define FSPIM_CTRL_R0_TMOD_MASK GENMASK(9, 8) -#define FSPIM_CTRL_R0_TMOD(x) (FSPIM_CTRL_R0_TMOD_MASK & ((x) << 8)) /* 传输模式控制位 */ -#define FSPIM_CTRL_R0_TMOD_SHIFT 8 -enum -{ - FSPIM_TMOD_RX_TX = 0b00, - FSPIM_TMOD_TX_ONLY = 0b01, - FSPIM_TMOD_RX_ONLY = 0b10, - FSPIM_TMOD_RD_EEPROM = 0b11 -}; -#define FSPIM_CTRL_R0_SLV_OE(x) ((x) << 10) /* 从机发送逻辑使能位 */ -#define FSPIM_CTRL_R0_SLV_OE_MASK BIT(10) -enum -{ - FSPIM_SLAVE_TX_ENABLE = 0, - FSPIM_SLAVE_TX_DISALE = 1 -}; -#define FSPIM_CTRL_R0_SLV_SRL(x) ((x) << 11) /* 移位寄存器回环 */ -enum -{ - FSPIM_SRL_NORAML = 0, - FSPIM_SRL_TEST = 1 -}; -#define FSPIM_CTRL_R0_CFS(x) (GENMASK(5, 12) & ((x) << 12)) /* 数据大小控制位,用于 Microwire 模式 */ - -/** @name FSPIM_CTRL_R1_OFFSET Register - */ -/* FSPIM_TMOD_RX_ONLY 或 FSPIM_TMOD_RD_EEPROM 该字段设置为 SPI 连续接收的数据量 */ -#define FSPIM_CTRL_R1_NDF(x) (GENMASK(15, 0) & ((x) << 0)) -#define FSPIM_CTRL_R1_NDF_64KB 0b11 - -/** @name FSPIM_SSIENR_OFFSET Register - */ -#define FSPIM_SSIENR_SSI_EN(x) ((x) << 0) /* SPI 使能启用和禁用所有 SPI 操作 */ - -/** @name FSPIM_MWCR_OFFSET Register - */ -#define FSPIM_MWCR_MW_MOD(x) ((x) << 0) /* Microwire 传输模式 */ -enum -{ - FSPIM_MWMODE_NO_CONT_TRANS = 0, /* 非连续传输 */ - FSPIM_MWMODE_CONT_TRANS = 1 /* 连续传输 */ -}; - -#define FSPIM_MWCR_MDD(x) ((x) << 1) /* Microwire 控制位 */ -enum -{ - FSPIM_MWCR_RX_EXT = 0, /* 从外部串行设备接收数据 */ - FSPIM_MWCR_TX_EXT /* 数据发送到外部串行设备 */ -}; - -#define FSPIM_MWCR_MHS(x) ((x) << 2) /* Microwire 握手 */ -enum -{ - FSPU_MWCR_DISABLE_HANDSHAKING = 0, - FSPU_MWCR_ENABLE_HANDSHAKING = 1 -}; - -/** @name FSPIM_SER_OFFSET Register - */ -#define FSPIM_SER(x) (GENMASK(3, 0) & ((x) << 0)) /* 从机选择信号启动标志 */ -/* 寄存器中的每一个位都对应来自 SPI 主机的从选信号(ss_x_n]).当此寄 - 存器中的某个位被置为 1 时,串行口传输开始时 */ -enum -{ - FSPIM_SER_UNSELECT = 0x0, - FSPIM_SER_SELECT = 0x1 -}; - -/** @name FSPIM_BAUD_R_OFFSET Register - */ -#define FSPIM_BAUD_R_SCKDV(x) (GENMASK(15, 0) & ((x) << 0)) /* SCKDV 为 2 ~ 65534 之间的任何偶数值 */ -#define FSPIM_BAUD_R_SCKDV_MIN 2U -#define FSPIM_BAUD_R_SCKDV_MAX 65534U -#define FSPIM_BAUD_R_SCKDV_IS_VALID(x) (0 == (x) % 2) - -/** @name FSPIM_TXFTL_R_OFFSET Register - */ -#define FSPIM_TXFTL_R_TFT(x) (GENMASK(2, 0) & ((x) << 0)) /* 发送 FIFO 阙值 */ - -/** @name FSPIM_RXFTL_R_OFFSET Register - */ -#define FSPIM_RXFTL_R_RFT(x) (GENMASK(3, 0) & ((x) << 0)) /* 接收 FIFO 阙值 */ - -/** @name FSPIM_TXFLR_OFFSET Register - */ -#define FSPIM_TXFLR_TXTFL(x) (GENMASK(3, 0) & ((x) << 0)) /* 发送 FIFO 等级 */ - -/** @name FSPIM_RXFLR_OFFSET Register - */ -#define FSPIM_RXFLR_RXTFL(x) (GENMASK(3, 0) & ((x) << 0)) /* 接收 FIFO 等级 */ - -/** @name FSPIM_SR_OFFSET Register, RO - */ -#define FSPIM_SR_BUSY BIT(0) /* SPI 总线繁忙标志位 */ -#define FSPIM_SR_TFNF BIT(1) /* 发送 FIFO 不满 */ -#define FSPIM_SR_TFE BIT(2) /* 发送 FIFO 为空 */ -#define FSPIM_SR_RFNE BIT(3) /* 接收 FIFO 不为空 */ -#define FSPIM_SR_RFF BIT(4) /* 接收 FIFO 满 */ -#define FSPIM_SR_TXE BIT(5) /* 传输错误 */ -#define FSPIM_SR_DCOL BIT(6) /* 传输数据冲突错误 */ -#define FSPIM_SR_ALL_BITS GENMASK(0, 6) - -/** @name FSPIM_IMR_OFFSET Register - */ -#define FSPIM_IMR_TXEIS BIT(0) /* 发送 FIFO 空中断 */ -#define FSPIM_IMR_TXOIS BIT(1) /* 发送 FIFO 上溢中断 */ -#define FSPIM_IMR_RXUIS BIT(2) /* 接收 FIFO 下溢中断 */ -#define FSPIM_IMR_RXOIS BIT(3) /* 接收 FIFO 上溢中断 */ -#define FSPIM_IMR_RXFIS BIT(4) /* 接收 FIFO 满中断 */ -#define FSPIM_IMR_ALL_BITS GENMASK(4, 0) - -/** @name FSPIM_ISR_OFFSET Register - */ -#define FSPIM_ISR_TXEIS BIT(0) /* 发送 FIFO 空中断状态 */ -#define FSPIM_ISR_TXOIS BIT(1) /* 发送 FIFO 上溢中断状态 */ -#define FSPIM_ISR_RXUIS BIT(2) /* 接收 FIFO 下溢中断状态 */ -#define FSPIM_ISR_RXOIS BIT(3) /* 接收 FIFO 上溢中断状态 */ -#define FSPIM_ISR_RXFIS BIT(4) /* 接收 FIFO 满中断状态 */ -#define FSPIM_ISR_MSTIS BIT(5) /* 多主机竞争中断状态 */ - -/** @name FSPIM_RIS_R_OFFSET Register - */ -#define FSPIM_RIS_R_TXEIR BIT(0) /* 传输 FIFO 空生成中断状态 */ -#define FSPIM_RIS_R_TXOIR BIT(1) /* 传输 FIFO 上溢生成中断状态 */ -#define FSPIM_RIS_R_RXUIR BIT(2) /* 接收 FIFO 下溢生成中断状态 */ -#define FSPIM_RIS_R_RXOIR BIT(3) /* 接收 FIFO 上溢生成中断状态 */ -#define FSPIM_RIS_R_RXFIR BIT(4) /* 接收 FIFO 满生成中断状态 */ -#define FSPIM_RIS_R_MSTIR BIT(5) /* 多主机冲突生成中断状态 */ -#define FSPIM_RIS_R_ALL_BITS GENMASK(5, 0) - -/** @name FSPIM_TXOI_CR_OFFSET Register - */ -#define FSPIM_TXOICR BIT(0) /* 清除传输 FIFO 溢出中断 */ - -/** @name FSPIM_RXOI_CR_OFFSET Register - */ -#define FSPIM_RXOICR BIT(0) /* 清除传输 FIFO 溢出中断 */ - -/** @name FSPIM_RXUI_CR_OFFSET Register - */ -#define FSPIM_RXUICR BIT(0) /* 清除传输 FIFO 下溢中断 */ - -/** @name FSPIM_MSTI_CR_OFFSET Register - */ -#define FSPIM_MSTICR BIT(0) /* 清除多主争用中断 */ - -/** @name FSPIM_ICR_OFFSET Register - */ -#define FSPIM_ICR BIT(0) /* 清除中断 */ - -/** @name FSPIM_DMA_CR_OFFSET Register - */ -#define FSPIM_DMA_CR_RDMAE BIT(0) /* DMA 接收使能 */ -#define FSPIM_DMA_CR_TDMAE BIT(1) /* DMA 发送使能 */ - -/** @name FSPIM_DMA_TDLR_OFFSET Register - */ -#define FSPIM_DMATDL(x) (GENMASK(2, 0) & ((x) << 0)) /* 发送数据等级 */ - -/** @name FSPIM_DMA_RDLR_OFFSET Register - */ -#define FSPIM_DMARDL(x) (GENMASK(2, 0) & ((x) << 0)) /* 接收数据等级 */ - -/** @name FSPIM_IDR_OFFSET Register - */ -#define FSPIM_IDCODE(x) (GENMASK(31, 0) & ((x) << 0)) /* 识别码。即外部设备标识代码 */ - -/** @name FSPIM_DR_OFFSET Register - */ -#define FSPIM_DR(x) (GENMASK(15, 0) & ((x) << 0)) /* 数据寄存器 */ - -/** @name FSPIM_RX_SAMPLE_DLY_OFFSET Register - */ -#define FSPIM_RSD(x) (GENMASK(7, 0) & ((x) << 0)) /* 接收数据延时 */ - -/** @name FSPIM_CS_OFFSET Register - */ -#define FSPIM_NUM_OF_CS 4U -#define FSPIM_CHIP_SEL_EN(cs) BIT((cs) + FSPIM_NUM_OF_CS) /* 1: enable chip selection */ -#define FSPIM_CHIP_SEL(cs) BIT(cs) - -#define FSPIM_DEFAULT_DFS 0x7 -#define FSPIM_DEFAULT_FRF 0x0 -#define FSPIM_DEFAULT_RSD 0x6 -#define FSPIM_DEFAULT_CFS 0x0 - -#define FSPIM_MIN_FIFO_DEPTH 0 -#define FSPIM_MAX_FIFO_DEPTH 256 -#define FSPIM_TIMEOUT 256 - -#define FSPIM_TX_DMA_LEVEL 0x10 -#define FSPIM_RX_DMA_LEVEL 0xf -/**************************** Type Definitions *******************************/ - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ -#define FSPIM_READ_REG32(addr, reg_offset) FtIn32((addr) + (u32)(reg_offset)) -#define FSPIM_WRITE_REG32(addr, reg_offset, reg_value) FtOut32((addr) + (u32)(reg_offset), (u32)(reg_value)) - -/** - * @name: FSpimSetCtrlR0 - * @msg: 设置CTRL_R0寄存器 - * @return {*} - * @param {uintptr} base_addr - * @param {u32} val - */ -static inline void FSpimSetCtrlR0(uintptr base_addr, u32 val) -{ - FSPIM_WRITE_REG32(base_addr, FSPIM_CTRL_R0_OFFSET, val); -} - -/** - * @name: FSpimGetCtrlR0 - * @msg: 获取CTRL_R0寄存器的值 - * @return {*} - * @param {uintptr} base_addr - */ -static inline u32 FSpimGetCtrlR0(uintptr base_addr) -{ - return FSPIM_READ_REG32(base_addr, FSPIM_CTRL_R0_OFFSET); -} - -/** - * @name: FSpimSetCtrlR0 - * @msg: 设置CTRL_R1寄存器 - * @return {*} - * @param {uintptr} base_addr - * @param {u32} val - */ -static inline void FSpimSetCtrlR1(uintptr base_addr, u32 val) -{ - FSPIM_WRITE_REG32(base_addr, FSPIM_CTRL_R1_OFFSET, val); -} - -/** - * @name: FSpimSetTxFifoThreshold - * @msg: 设置TX Fifo阈值 - * @return {*} - * @param {uintptr} base_addr - * @param {u32} val - */ -static inline void FSpimSetTxFifoThreshold(uintptr base_addr, u32 val) -{ - FSPIM_WRITE_REG32(base_addr, FSPIM_TXFTL_R_OFFSET, val); -} - -/** - * @name: FSpimGetTxFifoThreshold - * @msg: 获取TX Fifo阈值 - * @return {*} - * @param {uintptr} base_addr - */ -static inline u32 FSpimGetTxFifoThreshold(uintptr base_addr) -{ - return FSPIM_READ_REG32(base_addr, FSPIM_TXFTL_R_OFFSET); -} - -/** - * @name: FSpimSetRxFifoThreshold - * @msg: 设置RX Fifo阈值 - * @return {*} - * @param {uintptr} base_addr - * @param {u32} val - */ -static inline void FSpimSetRxFifoThreshold(uintptr base_addr, u32 val) -{ - FSPIM_WRITE_REG32(base_addr, FSPIM_RXFTL_R_OFFSET, val); -} - -/** - * @name: FSpimGetRxFifoThreshold - * @msg: 获取RX Fifo阈值 - * @return {*} - * @param {uintptr} base_addr - */ -static inline u32 FSpimGetRxFifoThreshold(uintptr base_addr) -{ - return FSPIM_READ_REG32(base_addr, FSPIM_RXFTL_R_OFFSET); -} - -/** - * @name: FSpimGetTxFifoLevel - * @msg: 获取当前TX Fifo等级 - * @return {*} - * @param {uintptr} base_addr - */ -static inline u32 FSpimGetTxFifoLevel(uintptr base_addr) -{ - return FSPIM_READ_REG32(base_addr, FSPIM_TXFLR_OFFSET); -} - -/** - * @name: FSpimGetRxFifoLevel - * @msg: 获取当前RX Fifo等级 - * @return {*} - * @param {uintptr} base_addr - */ -static inline u32 FSpimGetRxFifoLevel(uintptr base_addr) -{ - return FSPIM_READ_REG32(base_addr, FSPIM_RXFLR_OFFSET); -} - -/** - * @name: FSpimGetTxDMALevel - * @msg: 获取当前的TX DMA等级 - * @return {*} - * @param {uintptr} base_addr - */ -static inline u32 FSpimGetTxDMALevel(uintptr base_addr) -{ - return FSPIM_READ_REG32(base_addr, FSPIM_DMA_TDLR_OFFSET); -} - -/** - * @name: FSpimGetRxDMALevel - * @msg: 获取当前的RX DMA等级 - * @return {*} - * @param {uintptr} base_addr - */ -static inline u32 FSpimGetRxDMALevel(uintptr base_addr) -{ - return FSPIM_READ_REG32(base_addr, FSPIM_DMA_RDLR_OFFSET); -} - -/** - * @name: FSpimSetTxDMALevel - * @msg: 设置TX DMA等级 - * @return {*} - * @param {uintptr} base_addr - * @param {u32} level, TX DMA等级, 应该与FIFO阈值保持一致 - */ -static inline void FSpimSetTxDMALevel(uintptr base_addr, u32 level) -{ - FSPIM_WRITE_REG32(base_addr, FSPIM_DMA_TDLR_OFFSET, level); -} - -/** - * @name: FSpimSetRxDMALevel - * @msg: 设置RX DMA等级 - * @return {*} - * @param {uintptr} base_addr - * @param {u32} level, RX DMA等级, 应该与FIFO阈值保持一致 - */ -static inline void FSpimSetRxDMALevel(uintptr base_addr, u32 level) -{ - FSPIM_WRITE_REG32(base_addr, FSPIM_DMA_RDLR_OFFSET, level); -} - - -/** - * @name: FSpimGetEnable - * @msg: 获取FSPIM控制器的使能状态 - * @return {*} - * @param {uintptr} base_addr - */ -static inline boolean FSpimGetEnable(uintptr base_addr) -{ - return FSPIM_READ_REG32(base_addr, FSPIM_SSIENR_OFFSET); -} - -/** - * @name: FSpimSetEnable - * @msg: 使能/去使能FSPIM控制器 - * @return {*} - * @param {uintptr} base_addr - * @param {boolean} enable - */ -static inline void FSpimSetEnable(uintptr base_addr, boolean enable) -{ - if (enable) - { - FSPIM_WRITE_REG32(base_addr, FSPIM_SSIENR_OFFSET, FSPIM_SSIENR_SSI_EN(1)); - } - else - { - FSPIM_WRITE_REG32(base_addr, FSPIM_SSIENR_OFFSET, FSPIM_SSIENR_SSI_EN(0)); - } -} - -/** - * @name: FSpimMaskIrq - * @msg: 屏蔽指定的中断位,去使能中断 - * @return {*} - * @param {uintptr} base_addr - * @param {u32} mask - */ -static inline void FSpimMaskIrq(uintptr base_addr, u32 mask) -{ - u32 curr_mask; - curr_mask = FSPIM_READ_REG32(base_addr, FSPIM_IMR_OFFSET) & ~mask; /* = 0 中断不活动*/ - FSPIM_WRITE_REG32(base_addr, FSPIM_IMR_OFFSET, curr_mask); -} - -/** - * @name: FSpimUmaskIrq - * @msg: 取消屏蔽指定的中断位,使能中断 - * @return {*} - * @param {uintptr} base_addr - * @param {u32} mask - */ -static inline void FSpimUmaskIrq(uintptr base_addr, u32 mask) -{ - u32 curr_mask; - curr_mask = FSPIM_READ_REG32(base_addr, FSPIM_IMR_OFFSET) | mask; /* = 1 中断活动 */ - FSPIM_WRITE_REG32(base_addr, FSPIM_IMR_OFFSET, curr_mask); -} - - -/** - * @name: FSpimGetMask - * @msg: 获取当前的中断屏蔽位 - * @return {*} - * @param {uintptr} base_addr - */ -static inline u32 FSpimGetMask(uintptr base_addr) -{ - return FSPIM_IMR_ALL_BITS & FSPIM_READ_REG32(base_addr, FSPIM_IMR_OFFSET); -} - -/** - * @name: FSpimGetTransMode - * @msg: 获取当前的传输模式 - * @return {*} - * @param {uintptr} base_addr - */ -static inline u32 FSpimGetTransMode(uintptr base_addr) -{ - return ((FSpimGetCtrlR0(base_addr) & FSPIM_CTRL_R0_TMOD_MASK) >> FSPIM_CTRL_R0_TMOD_SHIFT); -} - -/** - * @name: FSpimGetStatus - * @msg: 获取当前的FSPIM控制器状态 - * @return {*} - * @param {uintptr} base_addr - */ -static inline u32 FSpimGetStatus(uintptr base_addr) -{ - return FSPIM_READ_REG32(base_addr, FSPIM_SR_OFFSET); -} - -/** - * @name: FSpimWriteData - * @msg: 写SPI数据 - * @return {*} - * @param {uintptr} base_addr - * @param {u16} dat - */ -static inline void FSpimWriteData(uintptr base_addr, u16 dat) -{ - FSPIM_WRITE_REG32(base_addr, FSPIM_DR_OFFSET, FSPIM_DR(dat)); -} - -/** - * @name: FSpimReadData - * @msg: 读SPI数据 - * @return {*} - * @param {uintptr} base_addr - */ -static inline u16 FSpimReadData(uintptr base_addr) -{ - return (u16)(FSPIM_READ_REG32(base_addr, FSPIM_DR_OFFSET)); -} - -/************************** Function Prototypes ******************************/ -/* 使能/去使能和从设备的连接 */ -void FSpimSetSlaveEnable(uintptr base_addr, boolean enable); - -/* 获取TX Fifo可以设置的最大深度 */ -u32 FSpimGetTxFifoDepth(uintptr base_addr); - -/* 获取RX Fifo可以设置的最大深度 */ -u32 FSpimGetRxFifoDepth(uintptr base_addr); - -/* 选择SPI从设备 */ -void FSpimSelSlaveDev(uintptr base_addr, u32 slave_dev_id); - -/* 设置SPI传输速度 */ -FError FSpimSetSpeed(uintptr base_addr, u32 speed); - -/* 读取SPI传输速度 */ -u32 FSpimGetSpeed(uintptr base_addr); - -/* 设置SPI传输模式 */ -void FSpimSetTransMode(uintptr base_addr, u32 trans_mode); - -/* 设置串行时钟相位 */ -void FSpimSetCpha(uintptr base_addr, u32 cpha_mode); - -/* 设置串行时钟相位 */ -void FSpimSetCpol(uintptr base_addr, u32 cpol_mode); - -/* 读取串行时钟相位 */ -FSpimCphaType FSpimGetCpha(uintptr base_addr); - -/* 读取串行时钟极性 */ -FSpimCpolType FSpimGetCpol(uintptr base_addr); - -#ifdef __cplusplus -} -#endif - -#endif // ! \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/spi/fspim/fspim_intr.c b/bsp/phytium/libraries/standalone/drivers/spi/fspim/fspim_intr.c deleted file mode 100644 index c1b2945117..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/spi/fspim/fspim_intr.c +++ /dev/null @@ -1,133 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fspim_intr.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 09:08:10 - * Description:  This file is for providing spim interrupt func. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2021/12/3 init commit - * 1.1 zhugengyu 2022/4/15 support test mode - */ - -/***************************** Include Files *********************************/ -#include -#include "fio.h" -#include "ferror_code.h" -#include "ftypes.h" -#include "fassert.h" -#include "fdebug.h" -#include "fspim_hw.h" -#include "fspim.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ -/* be very careful to use print log in intrrupt handler */ -#define FSPIM_DEBUG_TAG "SPIM-INTR" -#define FSPIM_ERROR(format, ...) FT_DEBUG_PRINT_E(FSPIM_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSPIM_WARN(format, ...) FT_DEBUG_PRINT_W(FSPIM_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSPIM_INFO(format, ...) FT_DEBUG_PRINT_I(FSPIM_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSPIM_DEBUG(format, ...) FT_DEBUG_PRINT_D(FSPIM_DEBUG_TAG, format, ##__VA_ARGS__) - -#define FSPIM_CALL_INTR_EVT_HANDLDER(instance_p, evt) \ - if (instance_p->evt_handler[evt]) \ - instance_p->evt_handler[evt](instance_p, instance_p->evt_param[evt]) - -/************************** Function Prototypes ******************************/ -extern void FSpimFifoTx(FSpim *instance_p); -extern void FSpimFifoRx(FSpim *instance_p); -extern FError FSpimReset(FSpim *instance_p); - -/************************** Variable Definitions *****************************/ - -/*****************************************************************************/ -/** - * @name: FSpimInterruptHandler - * @msg: SPIM中断处理函数 - * @return {无} - * @param {s32} vector,中断向量号,此处不关心此参数 - * @param {void} *param, 中断输入参数, 指向FSPIM的驱动控制实例 - */ -void FSpimInterruptHandler(s32 vector, void *param) -{ - FASSERT(param); - FSpim *instance_p = (FSpim *)param; - uintptr base_addr = instance_p->config.base_addr; - u32 intr_status = FSPIM_RIS_R_ALL_BITS & FSPIM_READ_REG32(base_addr, FSPIM_RIS_R_OFFSET); - - if (0 == intr_status) - { - return; - } - - if ((FSPIM_RIS_R_TXOIR | FSPIM_RIS_R_RXOIR | FSPIM_RIS_R_RXUIR) & intr_status) /* 发送FIFO溢出 */ - { - FSPIM_WARN("Fifo overflow or underflow"); - if (FSPIM_RIS_R_TXOIR & intr_status) - { - FSPIM_CALL_INTR_EVT_HANDLDER(instance_p, FSPIM_INTR_EVT_TX_OVERFLOW); - } - - if (FSPIM_RIS_R_RXUIR & intr_status) - { - FSPIM_CALL_INTR_EVT_HANDLDER(instance_p, FSPIM_INTR_EVT_RX_UNDERFLOW); - } - - if (FSPIM_RIS_R_RXOIR & intr_status) - { - FSPIM_CALL_INTR_EVT_HANDLDER(instance_p, FSPIM_INTR_EVT_RX_OVERFLOW); - } - - FSpimReset(instance_p); - return; - } - - FSpimFifoRx(instance_p); /* 检查 RX Fifo是否为空,如果不为空则接收数据 */ - - if (instance_p->rx_buff_end == instance_p->rx_buff) /* RX 缓冲区已满,停止填入发送数据 */ - { - FSpimMaskIrq(base_addr, FSPIM_IMR_TXEIS); - FSPIM_CALL_INTR_EVT_HANDLDER(instance_p, FSPIM_INTR_EVT_RX_DONE); - return; - } - - if (FSPIM_RIS_R_TXEIR & intr_status) /* TX Fifo为空,填入待发送数据 */ - { - FSpimMaskIrq(base_addr, FSPIM_IMR_TXEIS); - FSpimFifoTx(instance_p); - FSpimUmaskIrq(base_addr, FSPIM_IMR_TXEIS); - } - - return; -} - -/** - * @name: FSpimRegisterIntrruptHandler - * @msg: 注册FSPIM中断事件处理函数 - * @return {*} - * @param {FI2c} *instance_p - * @param {u32} evt - * @param {FI2cEvtHandler} handler - */ -void FSpimRegisterIntrruptHandler(FSpim *instance_p, FSpimIntrEvtType evt, FSpimEvtHandler handler, void *param) -{ - FASSERT(instance_p && evt < FSPIM_INTR_EVT_NUM); - instance_p->evt_handler[evt] = handler; - instance_p->evt_param[evt] = param; -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/spi/fspim/fspim_selftest.c b/bsp/phytium/libraries/standalone/drivers/spi/fspim/fspim_selftest.c deleted file mode 100644 index c54b8df7dd..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/spi/fspim/fspim_selftest.c +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fspim_selftest.c - * Date: 2022-07-21 13:21:43 - * LastEditTime: 2022-07-21 13:21:44 - * Description:  This file is for providing spim self test func. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2021/12/3 init commit - * 1.1 zhugengyu 2022/4/15 support test mode - */ -/***************************** Include Files *********************************/ -#include "fio.h" -#include "fdebug.h" -#include "fassert.h" -#include "ftypes.h" - -#include "fspim_hw.h" -#include "fspim.h" -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ -#define FSPIM_DEBUG_TAG "SPIM-TEST" -#define FSPIM_ERROR(format, ...) FT_DEBUG_PRINT_E(FSPIM_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSPIM_WARN(format, ...) FT_DEBUG_PRINT_W(FSPIM_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSPIM_INFO(format, ...) FT_DEBUG_PRINT_I(FSPIM_DEBUG_TAG, format, ##__VA_ARGS__) -#define FSPIM_DEBUG(format, ...) FT_DEBUG_PRINT_D(FSPIM_DEBUG_TAG, format, ##__VA_ARGS__) - -#define FSPIM_DUMPER(base_addr, reg_off, reg_name) \ - FSPIM_DEBUG("\t\t[%s]@0x%x\t=\t0x%x", reg_name, (reg_off), FSPIM_READ_REG32((base_addr), (reg_off))) -/************************** Function Prototypes ******************************/ - -/*****************************************************************************/ - -void FSpimDumpRegister(uintptr base_addr) -{ - FSPIM_DEBUG("Dump register info @0x%x", base_addr); - FSPIM_DUMPER(base_addr, FSPIM_CTRL_R0_OFFSET, "ctrl_r0"); - FSPIM_DUMPER(base_addr, FSPIM_CTRL_R1_OFFSET, "ctrl_r1"); - FSPIM_DUMPER(base_addr, FSPIM_SSIENR_OFFSET, "ssienr"); - FSPIM_DUMPER(base_addr, FSPIM_MWCR_OFFSET, "mwcr"); - FSPIM_DUMPER(base_addr, FSPIM_SER_OFFSET, "ser"); - FSPIM_DUMPER(base_addr, FSPIM_BAUD_R_OFFSET, "baud"); - FSPIM_DUMPER(base_addr, FSPIM_TXFTL_R_OFFSET, "txftl"); - FSPIM_DUMPER(base_addr, FSPIM_RXFTL_R_OFFSET, "rxftl"); - FSPIM_DUMPER(base_addr, FSPIM_TXFLR_OFFSET, "txflr"); - FSPIM_DUMPER(base_addr, FSPIM_RXFLR_OFFSET, "rxflr"); - FSPIM_DUMPER(base_addr, FSPIM_SR_OFFSET, "sr"); - FSPIM_DUMPER(base_addr, FSPIM_IMR_OFFSET, "imr"); - FSPIM_DUMPER(base_addr, FSPIM_ISR_OFFSET, "isr"); - FSPIM_DUMPER(base_addr, FSPIM_RIS_R_OFFSET, "ris_r"); - FSPIM_DUMPER(base_addr, FSPIM_DMA_CR_OFFSET, "cr"); - FSPIM_DUMPER(base_addr, FSPIM_DMA_TDLR_OFFSET, "tdlr"); - FSPIM_DUMPER(base_addr, FSPIM_DMA_RDLR_OFFSET, "rdlr"); - FSPIM_DUMPER(base_addr, FSPIM_IDR_OFFSET, "idr"); - FSPIM_DUMPER(base_addr, FSPIM_RX_SAMPLE_DLY_OFFSET, "rx_sample"); - FSPIM_DUMPER(base_addr, FSPIM_CS_OFFSET, "cs"); -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/spi/fspim/fspim_sinit.c b/bsp/phytium/libraries/standalone/drivers/spi/fspim/fspim_sinit.c deleted file mode 100644 index fd3c85fc7f..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/spi/fspim/fspim_sinit.c +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fspim_sinit.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 09:08:24 - * Description:  This file is for providing spim init basic func. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2021/12/3 init commit - * 1.1 zhugengyu 2022/4/15 support test mode - */ - -/***************************** Include Files *********************************/ - -#include "ftypes.h" -#include "fparameters.h" -#include "fspim.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Variable Definitions *****************************/ - -extern const FSpimConfig FSPIM_CONFIG_TBL[FSPI_NUM]; - -/************************** Function Prototypes ******************************/ -/** - * @name: FSpimLookupConfig - * @msg: 获取FSPIM实例的默认配置 - * @return {const FSpimConfig *} FSPIM实例的默认配置 - * @param {u32} instance_id, SPI控制器ID - */ -const FSpimConfig *FSpimLookupConfig(u32 instance_id) -{ - const FSpimConfig *ptr = NULL; - u32 index; - - for (index = 0; index < (u32)FSPI_NUM; index++) - { - if (FSPIM_CONFIG_TBL[index].instance_id == instance_id) - { - ptr = &FSPIM_CONFIG_TBL[index]; - break; - } - } - - return (const FSpimConfig *)ptr; -} diff --git a/bsp/phytium/libraries/standalone/drivers/timer/Kconfig b/bsp/phytium/libraries/standalone/drivers/timer/Kconfig deleted file mode 100644 index ff5c83ebaa..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/timer/Kconfig +++ /dev/null @@ -1,9 +0,0 @@ -menu "Hardware Timer Configuration" - config ENABLE_TIMER_TACHO - bool - prompt "Use Timer Tacho" - depends on TARGET_E2000S || TARGET_E2000D || TARGET_E2000Q || TARGET_T2000Q - - default n -endmenu - diff --git a/bsp/phytium/libraries/standalone/drivers/timer/ftimer_tacho/ftacho.c b/bsp/phytium/libraries/standalone/drivers/timer/ftimer_tacho/ftacho.c deleted file mode 100644 index b7a69c9965..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/timer/ftimer_tacho/ftacho.c +++ /dev/null @@ -1,299 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: ftacho.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-05-20 09:08:52 - * Description:  This file is for user tacho API implmentation - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 liushengming 2022/05/20 first commit - */ - -/***************************** Include Files *********************************/ - -#include -#include "fassert.h" -#include "fkernel.h" -#include "fsleep.h" -#include "ftimer_tacho_hw.h" -#include "ftimer_tacho.h" -#include "fparameters.h" - -/************************** Function Prototypes ******************************/ -/** - * @name: FTachoInit - * @msg: 初始化Tacho,并且使能计数器和tachometer - * @return {FError} 驱动初始化的错误码信息,FTIMER_TACHO_SUCCESS 表示初始化成功,其它返回值表示初始化失败 - * @param {FTimerTachoCtrl} *instance_p 驱动控制数据结构 - * @param {FTimerTachoConfig} *config_p 驱动配置数据结构 - */ -FError FTachoInit(FTimerTachoCtrl *instance_p, const FTimerTachoConfig *config_p) -{ - FASSERT(instance_p && config_p); - - u32 reg_val = 0; - - if (instance_p->isready == FT_COMPONENT_IS_READY) - { - FTIMER_INFO("Device is already initialized !!!\r\n"); - return FTIMER_TACHO_ERR_IS_READ; - } - - /* set work mode */ - if (FTIMER_WORK_MODE_TACHO == config_p->work_mode) - { - reg_val |= FTIMER_REG_TACHO_MODE_TACHO; - reg_val |= FTACHO_REG_CAP_IN_ENABLE; - /* plus num of rpm calculate period */ - FTIMER_CMPL_WRITE(instance_p, config_p->plus_num); - } - else if (FTIMER_WORK_MODE_CAPTURE == config_p->work_mode) - { - reg_val |= FTIMER_REG_TACHO_MODE_CAPTURE; - reg_val |= FTIMER_REG_TACHO_CAPTURE_ENABLE; - /* set capture cnt to assert capture intr */ - reg_val |= FTIMER_REG_TACHO_CAPTURE_CNT_MASK & (config_p->captue_cnt << FTIMER_REG_TACHO_CAPTURE_CNT_SHIFT); - reg_val |= FTIMER_REG_ENABLE; - } - else - { - FTACHO_ERROR("Not support work_mode."); - return FTIMER_TACHO_ERR_INVAL_PARM; - } - - /* set timer bits */ - if (FTIMER_32_BITS == config_p->timer_bits) - { - reg_val &= (~FTIMER_REG_CNT_SERIES_64BIT); - } - else if (FTIMER_64_BITS == config_p->timer_bits) - { - reg_val |= FTIMER_REG_CNT_SERIES_64BIT; - } - else - { - FTACHO_ERROR("Invalid input 32/64bits."); - return FTIMER_TACHO_ERR_INVAL_PARM; - } - - /* set edge mode */ - if (FTACHO_FALLING_EDGE == config_p->edge_mode) - { - reg_val &= ~FTACHO_REG_MODE_MASK; - reg_val |= FTACHO_REG_MODE_FALLING_EDGE; - } - else if (FTACHO_RISING_EDGE == config_p->edge_mode) - { - reg_val &= ~FTACHO_REG_MODE_MASK; - reg_val |= FTACHO_REG_MODE_RISING_EDGE; - } - else if (FTACHO_DOUBLE_EDGE == config_p->edge_mode) - { - reg_val &= ~FTACHO_REG_MODE_MASK; - reg_val |= FTACHO_REG_MODE_DOUBLE_EDGE; - } - else - { - FTACHO_ERROR("Invalid input edge."); - return FTIMER_TACHO_ERR_INVAL_PARM; - } - - /* set jitter level */ - reg_val |= FTACHO_REG_ANTI_JITTER_MASK & - (config_p->jitter_level << FTACHO_REG_ANTI_JITTER_SHIFT); - - //use input config - if (config_p != &instance_p->config) - { - instance_p->config = *config_p; - } - - FTIMER_CTRL_WRITE(instance_p, reg_val); - instance_p->isready = FT_COMPONENT_IS_READY; - - return FTIMER_TACHO_SUCCESS; -} - -/** - * @name: FTachoGetFanRPM - * @msg: 获取风扇的转速值 - * @return {FError} 驱动初始化的错误码信息,FTIMER_TACHO_SUCCESS 表示初始化成功,其它返回值表示初始化失败 - * @param {FTimerTachoCtrl} *instance_p 驱动控制数据结构 - * @param {u32} *rpm 将获取到的数值写入到此地址 - */ -FError FTachoGetFanRPM(FTimerTachoCtrl *instance_p, u32 *rpm) -{ - u32 loop_cnt; - u32 raw_dat; - - FASSERT(instance_p); - - if (instance_p->isready != FT_COMPONENT_IS_READY || instance_p->config.work_mode != FTIMER_WORK_MODE_TACHO) - { - FTIMER_ERROR("Device is not ready or not work on TACHO_MODE!!!"); - return FTIMER_TACHO_ERR_NOT_READY; - } - - u32 cnt_num = FTIMER_CMPL_READ(instance_p); - - for (loop_cnt = 0;; loop_cnt++) - { - raw_dat = FTACHO_RESU_READ(instance_p); - /* wait for tacho result */ - if (raw_dat & FTACHO_REG_RESU_ISVALID) - { - break; - } - - if (loop_cnt < 300) - { - fsleep_millisec(20); //20ms - } - else - { - return FTIMER_TACHO_ERR_ABORT; - } - } - - raw_dat &= FTACHO_REG_RESU_MASK; - if (0 == raw_dat) - { - *rpm = 0; - } - else - { - /* calculate rpm */ - /* (60(second) * freq * tacho) / (2 * (cmp_l + 1)) cmp_l */ - *rpm = (FTIMER_CLK_FREQ_HZ * 60 * raw_dat) / (2 * (cnt_num + 1)); - } - - return FTIMER_TACHO_SUCCESS; -} - -/** - * @name: FTachoGetCaptureCnt - * @msg: 获取capture模式下,tacho输入脉冲的个数 - * @return {u32}返回获取到的数值 - * @param {FTimerTachoCtrl} *instance_p 驱动控制数据结构 - */ -u32 FTachoGetCaptureCnt(FTimerTachoCtrl *instance_p) -{ - u32 cap_cnt = FTIMER_TACHO_SUCCESS; - - FASSERT(instance_p); - - if (instance_p->isready != FT_COMPONENT_IS_READY || instance_p->config.work_mode != FTIMER_WORK_MODE_CAPTURE) - { - FTIMER_ERROR("Device is not ready or not work on CAPTURE_MODE!!!"); - return FTIMER_TACHO_ERR_NOT_READY; - } - - /* read cap cnt */ - cap_cnt = FTIMER_CNTL_READ(instance_p); - - return cap_cnt; -} - -/** - * @name: FTimerSwithMode - * @msg: 切换定时器模式和tachometer-capture模式 - * @return {FError} 驱动初始化的错误码信息,FTIMER_TACHO_SUCCESS 表示初始化成功,其它返回值表示初始化失败 - * @param {FTimerTachoCtrl} *instance_p 驱动控制数据结构 - * @param {FTimerTachoConfig} *pNewConfig 新的驱动配置数据结构 - */ -FError FTimerSwithMode(FTimerTachoCtrl *instance_p, FTimerTachoConfig *pNewConfig) -{ - FASSERT(instance_p && pNewConfig); - - u32 ret = FTIMER_TACHO_SUCCESS; - - if (instance_p->config.work_mode == pNewConfig->work_mode) - { - return FTIMER_TACHO_SUCCESS; - } - - /* disable and clear timer */ - u32 reg_val = FTIMER_CTRL_READ(instance_p); - reg_val &= (~FTIMER_REG_ENABLE); - reg_val |= FTIMER_REG_CNT_CLR; - FTIMER_CTRL_WRITE(instance_p, reg_val); - - if (FTIMER_WORK_MODE_TIMER == pNewConfig->work_mode) - { - ret = FTimerInit(instance_p, pNewConfig); - } - else - { - ret = FTachoInit(instance_p, pNewConfig); - } - - return ret; -} - -/** - * @name: FTachoSetCntPeriod - * @msg: 配置 tach计数周期 = pulse_num - * @return {void} - * @param {FTimerTachoCtrl} *instance_p 驱动控制数据结构 - * @param {u32}计数ticks - */ -void FTachoSetCntPeriod(FTimerTachoCtrl *instance_p, u32 ticks) -{ - FTIMER_CMPL_WRITE(instance_p, ticks); -} - -/** - * @name: FTachoSetOverLimit - * @msg: 预设tacho的最大值 - * @return {void} - * @param {FTimerTachoCtrl} *instance_p 驱动控制数据结构 - * @param {u32}上限值 - */ -void FTachoSetOverLimit(FTimerTachoCtrl *instance_p, u32 overLim) -{ - FTACHO_OVER_WRITE(instance_p, overLim); -} - -/** - * @name: FTachoSetUnderLimit - * @msg: 预设tacho的最小值 - * @return {void} - * @param {FTimerTachoCtrl} *instance_p 驱动控制数据结构 - * @param {u32}下限值 - */ -void FTachoSetUnderLimit(FTimerTachoCtrl *instance_p, u32 underLim) -{ - FTACHO_UNDER_WRITE(instance_p, underLim); -} - -/** - * @name: FTachoDeInit - * @msg: 去初始化,寄存器复位,结构体参数置0 - * @return {void} - * @param {FTimerTachoCtrl} *instance_p 驱动控制数据结构 - */ -void FTachoDeInit(FTimerTachoCtrl *instance_p) -{ - FASSERT(instance_p); - - /* reset reg*/ - FTimerSoftwareReset(instance_p); - - instance_p->isready = 0; - memset(instance_p, 0, sizeof(*instance_p)); - - return; -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/timer/ftimer_tacho/ftimer.c b/bsp/phytium/libraries/standalone/drivers/timer/ftimer_tacho/ftimer.c deleted file mode 100644 index 8bfd08c74f..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/timer/ftimer_tacho/ftimer.c +++ /dev/null @@ -1,460 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: ftimer.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 09:09:49 - * Description:  This file is for user timer API implmentation - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 liushengming 2022/02/18 first commit - */ - -/***************************** Include Files *********************************/ -#include -#include "fassert.h" -#include "ftimer_tacho_hw.h" -#include "ftimer_tacho.h" - - -/************************** Function Prototypes ******************************/ -/** - * @name: FTimerSoftwareReset - * @msg: 将控制器复位 - * @return {FError} 驱动初始化的错误码信息,FTIMER_TACHO_SUCCESS 表示初始化成功,其它返回值表示初始化失败 - * @param {FTimerTachoCtrl} *instance_p 驱动控制数据结构 - */ -FError FTimerSoftwareReset(FTimerTachoCtrl *instance_p) -{ - FASSERT(instance_p); - - if (instance_p->isready != FT_COMPONENT_IS_READY) - { - FTIMER_ERROR("Device is not ready!!!"); - return FTIMER_TACHO_ERR_NOT_READY; - } - - u32 reg_val = FTIMER_CTRL_READ(instance_p); - u32 Timeout = 0; - reg_val |= FTIMER_REG_TACHO_RESET; - FTIMER_CTRL_WRITE(instance_p, reg_val); - - do - { - reg_val = FTIMER_CTRL_READ(instance_p); - Timeout++; - } - while ((reg_val & FTIMER_REG_TACHO_RESET) && (Timeout < FTIMER_TIMEOUT)); - - if (Timeout >= FTIMER_TIMEOUT) - { - FTIMER_ERROR("Software Reset Failed!!!"); - return FTIMER_TACHO_ERR_FAILED; - } - - return FTIMER_TACHO_SUCCESS; -} - -/** - * @name: FTimerStart - * @msg: 启动timer_tacho外设,根据不同的功能,开启使能位 - * @return {FError} 驱动初始化的错误码信息,FTIMER_TACHO_SUCCESS 表示初始化成功,其它返回值表示初始化失败 - * @param {FTimerTachoCtrl} *instance_p 驱动控制数据结构 - */ -FError FTimerStart(FTimerTachoCtrl *instance_p) -{ - FASSERT(instance_p); - FASSERT(FT_COMPONENT_IS_READY == instance_p->isready); - - u32 reg_val; - reg_val = FTIMER_CTRL_READ(instance_p); - if (FTIMER_WORK_MODE_TIMER == instance_p->config.work_mode) - { - reg_val |= FTIMER_REG_ENABLE; - } - else - { - /* for tacho mode and capture mode */ - reg_val |= FTIMER_REG_ENABLE | FTACHO_REG_CAP_IN_ENABLE; - } - - FTIMER_CTRL_WRITE(instance_p, reg_val); - - return FTIMER_TACHO_SUCCESS; -} - -/** - * @name: FTimerStop - * @msg: 停止timer外设,根据不同的功能,关闭使能位,计数值停止并冻结 - * @return {FError} 驱动初始化的错误码信息,FTIMER_TACHO_SUCCESS 表示初始化成功,其它返回值表示初始化失败 - * @param {FTimerTachoCtrl} *instance_p 驱动控制数据结构 - */ -FError FTimerStop(FTimerTachoCtrl *instance_p) -{ - FASSERT(instance_p); - - FASSERT(FT_COMPONENT_IS_READY == instance_p->isready); - - u32 reg_val = FTIMER_CTRL_READ(instance_p); - - if (FTIMER_WORK_MODE_TIMER == instance_p->config.work_mode) - { - reg_val &= (~FTIMER_REG_ENABLE); - } - else - { - /* for tacho mode and capture mode */ - reg_val &= (~FTIMER_REG_ENABLE) & (~FTACHO_REG_CAP_IN_ENABLE); - } - - FTIMER_CTRL_WRITE(instance_p, reg_val); - - return FTIMER_TACHO_SUCCESS; -} - -/** - * @name: TimerSwithBits - * @msg: 计数器32/64切换 - * @return {FError} 驱动初始化的错误码信息,FTIMER_TACHO_SUCCESS 表示初始化成功,其它返回值表示初始化失败 - * @param {FTimerTachoCtrl} *instance_p 驱动控制数据结构 - */ -static FError TimerSwithBits(FTimerTachoCtrl *instance_p) -{ - u32 reg_val; - - FASSERT(instance_p); - - FASSERT(FT_COMPONENT_IS_READY == instance_p->isready); - - reg_val = FTIMER_CTRL_READ(instance_p); - - if (FTIMER_32_BITS == instance_p->config.timer_bits) - { - reg_val &= (~FTIMER_REG_CNT_SERIES_64BIT); - } - else if (FTIMER_64_BITS == instance_p->config.timer_bits) - { - reg_val |= FTIMER_REG_CNT_SERIES_64BIT; - } - else - { - FTIMER_ERROR("Invalid input"); - return FTIMER_TACHO_ERR_INVAL_PARM; - } - - FTIMER_CTRL_WRITE(instance_p, reg_val); - - return FTIMER_TACHO_SUCCESS; -} - -/** - * @name: TimerForceLoad - * @msg: 强制更新位置位 - * @return {void} 无 - * @param {FTimerTachoCtrl} *instance_p 驱动控制数据结构 - */ -static void TimerForceLoad(FTimerTachoCtrl *instance_p) -{ - u32 reg_val; - - FASSERT(instance_p); - - FASSERT(FT_COMPONENT_IS_READY == instance_p->isready); - - reg_val = FTIMER_CTRL_READ(instance_p); - reg_val |= FTIMER_REG_TACHO_FORCE_LOAD; - FTIMER_CTRL_WRITE(instance_p, reg_val); - - return; -} - -/** - * @name: FTimerSetPeriod32 - * @msg: 设置32位计数模式下,计数器的compare的值,达到此值,如果开启中断,则开启中断 - * @return {FError} 驱动初始化的错误码信息,FTIMER_TACHO_SUCCESS 表示初始化成功,其它返回值表示初始化失败 - * @param {FTimerTachoCtrl} *instance_p 驱动控制数据结构 - * @param {u32}NewCmpL - */ -FError FTimerSetPeriod32(FTimerTachoCtrl *instance_p, u32 new_cmp_l) -{ - FASSERT(instance_p); - - FASSERT(FT_COMPONENT_IS_READY == instance_p->isready); - - if (FTIMER_64_BITS == instance_p->config.timer_bits) - { - return FTIMER_TACHO_ERR_INVAL_PARM; - } - - /* update cmp val */ - FTIMER_CMPL_WRITE(instance_p, new_cmp_l); - - return FTIMER_TACHO_SUCCESS; -} - -/** - * @name: FTimerSetPeriod64 - * @msg: 设置64位计数模式下,计数器的compare的值,达到此值,如果开启中断,则开启中断 - * @return {FError} 驱动初始化的错误码信息,FTIMER_TACHO_SUCCESS 表示初始化成功,其它返回值表示初始化失败 - * @param {FTimerTachoCtrl} *instance_p 驱动控制数据结构 - * @param {u64}ticks - */ -FError FTimerSetPeriod64(FTimerTachoCtrl *instance_p, u64 ticks) -{ - u32 low_cmp; - u32 up_cmp; - FASSERT(instance_p); - - FASSERT(FT_COMPONENT_IS_READY == instance_p->isready); - - if (FTIMER_32_BITS == instance_p->config.timer_bits) - { - return FTIMER_TACHO_ERR_INVAL_PARM; - } - - low_cmp = (u32)(GENMASK_ULL(31, 0) & ticks); - up_cmp = (u32)((GENMASK_ULL(63, 32) & ticks) >> 32); - - /* MUST write low 32 bit first !!! */ - FTIMER_CMPL_WRITE(instance_p, low_cmp); - FTIMER_CMPU_WRITE(instance_p, up_cmp); - - return FTIMER_TACHO_SUCCESS; -} - -/** - * @name: FTimerSetStartVal - * @msg: 设置计数器初始值 - * @return {FError} 驱动初始化的错误码信息,FTIMER_TACHO_SUCCESS 表示初始化成功,其它返回值表示初始化失败 - * @param {FTimerTachoCtrl} *instance_p 驱动控制数据结构 - * @param {u32} cnt - */ -inline FError FTimerSetStartVal(FTimerTachoCtrl *instance_p, u32 cnt) -{ - u32 ret = FTIMER_TACHO_SUCCESS; - FASSERT(instance_p); - - FASSERT(FT_COMPONENT_IS_READY == instance_p->isready); - - ret = TimerSwithBits(instance_p); - if (FTIMER_TACHO_SUCCESS != ret) - { - return ret; - } - - FTIMER_STAR_WRITE(instance_p, cnt); - /* set force_load=1,invalid previous cmp val, - otherwise the previous cmp val still work */ - TimerForceLoad(instance_p); - - FTIMER_INFO("Set start val 0x%x", FTIMER_STAR_READ(instance_p)); - - return ret; -} - - -/** - * @name: FTimerGetCurCnt32 - * @msg: 32位模式下,获取计数器当前计数值 - * @return {u32}返回当前计数器的值 - * @param {FTimerTachoCtrl} *instance_p 驱动控制数据结构 - */ -u32 FTimerGetCurCnt32(FTimerTachoCtrl *instance_p) -{ - FASSERT(instance_p); - - FASSERT(FT_COMPONENT_IS_READY == instance_p->isready); - - return FTIMER_CNTL_READ(instance_p); -} - -/** - * @name: FTimerGetCurCnt64 - * @msg: 64位模式下,获取计数器当前计数值 - * @return {u64}返回当前计数器的值 - * @param {FTimerTachoCtrl} *instance_p 驱动控制数据结构 - */ -inline u64 FTimerGetCurCnt64(FTimerTachoCtrl *instance_p) -{ - u64 cnt = 0; - FASSERT(instance_p); - - FASSERT(FT_COMPONENT_IS_READY == instance_p->isready); - - /* must read lower 32 bits first */ - cnt |= (u64)FTIMER_CNTL_READ(instance_p); - cnt |= (u64)(((u64)FTIMER_CNTU_READ(instance_p)) << 32); - return cnt; -} - -/** - * @name: FTimerInit - * @msg: 完成TimerTacho驱动实例的初始化,使之在就绪状态 - * @return {FError} 驱动初始化的错误码信息,FTIMER_TACHO_SUCCESS 表示初始化成功,其它返回值表示初始化失败 - * @param {FTimerTachoCtrl} *instance_p 驱动控制数据结构 - * @param {FTimerTachoConfig} *config_p 驱动配置数据结构 - */ -FError FTimerInit(FTimerTachoCtrl *instance_p, const FTimerTachoConfig *config_p) -{ - FASSERT(instance_p && config_p); - - u32 reg_val = 0; - u32 Ret = FTIMER_TACHO_SUCCESS; - - if ((FTIMER_ONCE_CMP == config_p->cmp_type) && - (FTIMER_FREE_RUN != config_p->timer_mode)) - { - FTIMER_ERROR("Time mode shall be free-run when use once timer!!"); - return FTIMER_TACHO_ERR_INVAL_PARM; - } - - if (instance_p->isready == FT_COMPONENT_IS_READY) - { - FTIMER_INFO("Device is already initialized.!!!\r\n"); - return FTIMER_TACHO_ERR_IS_READ; - } - - if (FTIMER_WORK_MODE_TIMER == config_p->work_mode) - { - reg_val |= FTIMER_REG_TACHO_MODE_TIMER; - } - else - { - FTIMER_ERROR("Not support"); - return FTIMER_TACHO_ERR_INVAL_PARM; - } - - if (FTIMER_FREE_RUN == config_p->timer_mode) - { - reg_val &= (~FTIMER_REG_CNT_RESTART); - } - else if (FTIMER_RESTART == config_p->timer_mode) - { - reg_val |= FTIMER_REG_CNT_RESTART; - } - else - { - FTIMER_ERROR("Invalid input"); - return FTIMER_TACHO_ERR_INVAL_PARM; - } - - if (FTIMER_32_BITS == config_p->timer_bits) - { - reg_val &= (~FTIMER_REG_CNT_SERIES_64BIT); - } - else if (FTIMER_64_BITS == config_p->timer_bits) - { - reg_val |= FTIMER_REG_CNT_SERIES_64BIT; - } - else - { - FTIMER_ERROR("Invalid input"); - return FTIMER_TACHO_ERR_INVAL_PARM; - } - - if (FTIMER_ONCE_CMP == config_p->cmp_type) - { - reg_val |= FTIMER_REG_MODE_ONCE; - } - else if (FTIMER_CYC_CMP == config_p->cmp_type) - { - reg_val &= (~FTIMER_REG_MODE_ONCE); - } - else - { - FTIMER_ERROR("Invalid input"); - return FTIMER_TACHO_ERR_INVAL_PARM; - } - - if (TRUE == config_p->force_load) - { - reg_val |= FTIMER_REG_TACHO_FORCE_LOAD; - } - - if (TRUE == config_p->clear_cnt) - { - reg_val |= FTIMER_REG_CNT_CLR; - } - - /*use input config*/ - if (config_p != &instance_p->config) - { - instance_p->config = *config_p; - } - - FTIMER_CTRL_WRITE(instance_p, reg_val); - instance_p->isready = FT_COMPONENT_IS_READY; - - return FTIMER_TACHO_SUCCESS; -} - -void FTimerDeInit(FTimerTachoCtrl *instance_p) -{ - FASSERT(instance_p); - - /* stop timer first */ - FTimerStop(instance_p); - /* reset reg*/ - FTimerSoftwareReset(instance_p); - - instance_p->isready = 0; - memset(instance_p, 0, sizeof(*instance_p)); - - return; -} - -/** - * @name: FTimeSettingDump - * @msg: 打印寄存器信息 - * @return {FError} 驱动初始化的错误码信息,FTIMER_TACHO_SUCCESS 表示初始化成功,其它返回值表示初始化失败 - * @param {FTimerTachoCtrl} *instance_p 驱动控制数据结构 - */ -FError FTimeSettingDump(const FTimerTachoCtrl *instance_p) -{ - FASSERT(instance_p); - u32 CtrlReg = FTIMER_CTRL_READ(instance_p); - boolean is64Bit = ((CtrlReg & FTIMER_REG_CNT_SERIES_64BIT) != 0); - - FASSERT(FT_COMPONENT_IS_READY == instance_p->isready); - - FTIMER_DEBUG("ctrl: "); - FTIMER_DEBUG("===%d-bit timer", is64Bit ? 64 : 32); - FTIMER_DEBUG("===timer enabled: %d", (CtrlReg & FTIMER_REG_ENABLE) ? 1 : 0); - FTIMER_DEBUG("===timer mode: %d", (CtrlReg & FTIMER_REG_TACHO_MODE_TIMER) ? 1 : 0); - FTIMER_DEBUG("===once timer: %d", (CtrlReg & FTIMER_REG_MODE_ONCE) ? 1 : 0); - FTIMER_DEBUG("===restart mode: %d", (CtrlReg & FTIMER_REG_CNT_RESTART) ? 1 : 0); - FTIMER_DEBUG("===in reset: %d", (CtrlReg & FTIMER_REG_TACHO_RESET) ? 1 : 0); - FTIMER_DEBUG("===force load: %d", (CtrlReg & FTIMER_REG_TACHO_FORCE_LOAD) ? 1 : 0); - FTIMER_DEBUG("===clear cnt: %d", (CtrlReg & FTIMER_REG_CNT_CLR) ? 1 : 0); - - FTIMER_DEBUG("start cnt: 0x%08x", FTIMER_STAR_READ(instance_p)); - if (is64Bit) - { - FTIMER_DEBUG("cmp low: 0x%08x", FTIMER_CMPL_READ(instance_p)); - FTIMER_DEBUG("high: 0x%08x", FTIMER_CMPU_READ(instance_p)); - FTIMER_DEBUG("cur cnt: low: 0x%08x", FTIMER_CNTL_READ(instance_p)); - FTIMER_DEBUG("high: 0x%08x", FTIMER_CNTU_READ(instance_p)); - } - else - { - FTIMER_DEBUG("cmp low: 0x%08x", FTIMER_CMPL_READ(instance_p)); - FTIMER_DEBUG("cur cnt: low: 0x%08x", FTIMER_CNTL_READ(instance_p)); - } - - FTIMER_DEBUG("intr mask: 0x%08x", FTIMER_INTR_M_READ(instance_p)); - FTIMER_DEBUG("intr status: 0x%08x", FTIMER_INTR_S_READ(instance_p)); - - return FTIMER_TACHO_SUCCESS; -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/timer/ftimer_tacho/ftimer_tacho.h b/bsp/phytium/libraries/standalone/drivers/timer/ftimer_tacho/ftimer_tacho.h deleted file mode 100644 index 7912ca3e76..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/timer/ftimer_tacho/ftimer_tacho.h +++ /dev/null @@ -1,228 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: ftimer_tacho.h - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 09:09:43 - * Description:  This file is for user ftimer_tacho API definition - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 liushengming 2022/02/18 first commit - */ - -#ifndef FTIMER_TACHO_H -#define FTIMER_TACHO_H - -#include "ftypes.h" -#include "fdebug.h" -#include "ferror_code.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -#define FTIMER_TACHO_SUCCESS FT_SUCCESS -#define FTIMER_TACHO_ERR_INVAL_PARM FT_MAKE_ERRCODE(ErrModBsp, ErrBspTimer, 1) -#define FTIMER_TACHO_ERR_NOT_READY FT_MAKE_ERRCODE(ErrModBsp, ErrBspTimer, 2) -#define FTIMER_TACHO_ERR_INIT_FAILED FT_MAKE_ERRCODE(ErrModBsp, ErrBspTimer, 3) -#define FTIMER_TACHO_ERR_NOT_SUPPORT FT_MAKE_ERRCODE(ErrModBsp, ErrBspTimer, 4) -#define FTIMER_TACHO_ERR_INVAL_STATE FT_MAKE_ERRCODE(ErrModBsp, ErrBspTimer, 5) -#define FTIMER_TACHO_ERR_IS_READ FT_MAKE_ERRCODE(ErrModBsp, ErrBspTimer, 6) -#define FTIMER_TACHO_ERR_ABORT FT_MAKE_ERRCODE(ErrModBsp, ErrBspTimer, 7) -#define FTIMER_TACHO_ERR_FAILED FT_MAKE_ERRCODE(ErrModBsp, ErrBspTimer, 8) - -#define FTIMER_DEBUG_TAG "TIMER" -#define FTIMER_ERROR(format, ...) FT_DEBUG_PRINT_E(FTIMER_DEBUG_TAG, format, ##__VA_ARGS__) -#define FTIMER_INFO(format, ...) FT_DEBUG_PRINT_I(FTIMER_DEBUG_TAG, format, ##__VA_ARGS__) -#define FTIMER_DEBUG(format, ...) FT_DEBUG_PRINT_D(FTIMER_DEBUG_TAG, format, ##__VA_ARGS__) - -#define FTACHO_DEBUG_TAG "TACHO" -#define FTACHO_ERROR(format, ...) FT_DEBUG_PRINT_E(FTACHO_DEBUG_TAG, format, ##__VA_ARGS__) -#define FTACHO_INFO(format, ...) FT_DEBUG_PRINT_I(FTACHO_DEBUG_TAG, format, ##__VA_ARGS__) -#define FTACHO_DEBUG(format, ...) FT_DEBUG_PRINT_D(FTACHO_DEBUG_TAG, format, ##__VA_ARGS__) - -typedef enum -{ - /*TimerTacho mode */ - FTIMER_WORK_MODE_TIMER = 0, - FTIMER_WORK_MODE_TACHO, - FTIMER_WORK_MODE_CAPTURE -} FTimerTachoModeType; - -typedef enum -{ - /*Timer count mode*/ - FTIMER_FREE_RUN = 0, - FTIMER_RESTART -} FTimerCntModeType; - -typedef enum -{ - FTIMER_32_BITS = 0, - FTIMER_64_BITS -} FTimerBitsType; - -typedef enum -{ - FTIMER_ONCE_CMP = 0, - FTIMER_CYC_CMP -} FTimerCmpType; - -typedef enum -{ - FTACHO_EVENT_OVER = 0, /*tacho超速事件*/ - FTACHO_EVENT_UNDER, /*tacho低速事件*/ - FTIMER_EVENT_ROLL_OVER, /*计数器翻转事件*/ - FTIMER_EVENT_ONCE_CMP, /*单次定时输出事件*/ - FTIMER_EVENT_CYC_CMP, /*重复定时输出事件*/ - FTACHO_EVENT_CAPTURE, /*tacho输入捕获事件*/ - - FMAX_TIMER_TACHO_EVENT -} FTimerTachoEventType; - -typedef enum -{ - FTACHO_FALLING_EDGE = 0, /*下降沿触发模式*/ - FTACHO_RISING_EDGE, /*上升沿触发模式*/ - FTACHO_DOUBLE_EDGE /*双边沿触发模式*/ -} FTachoEdgeType; - -typedef enum -{ - FTACHO_JITTER_LEVEL0 = 0, /*消抖等级*/ - FTACHO_JITTER_LEVEL1, - FTACHO_JITTER_LEVEL2, - FTACHO_JITTER_LEVEL3, -} FTachoJitterLevelType; - -typedef struct -{ - u32 id; /* id of timer tacho */ - char name[12]; /* instance name */ - u32 irq_priority; /* intr priority */ - u32 work_mode; /* timer/tacho/capture mode */ - /* for timer function */ - u32 timer_mode; /* free-run/restart */ - u32 timer_bits; /* 32/64 bits */ - u32 cmp_type; /* once/cycle cmp */ - boolean clear_cnt; /* clear timer counts */ - boolean force_load; /* start count from start val */ - /* for tacho function */ - u32 edge_mode; /* rising/falling/double */ - u32 jitter_level; /* jitter level */ - u32 plus_num; /* plus_num of period to calculate rpm */ - u32 captue_cnt; /* in capture mode, when cnt reach this val, intr asserted */ -} FTimerTachoConfig; - -typedef void (*FTimerEventHandler)(void *instance_p); - -typedef struct -{ - FTimerTachoConfig config; /* Current active configs */ - boolean isready; /* Device is initialized and ready */ - FTimerEventHandler evt_handlers[FMAX_TIMER_TACHO_EVENT];/* event handler for interrupt */ -} FTimerTachoCtrl; - -/* Time & Tacho API */ -/*将控制器复位*/ -FError FTimerSoftwareReset(FTimerTachoCtrl *instance_p); - -/*获取中断设置*/ -u32 FTimerGetInterruptMask(FTimerTachoCtrl *instance_p); - -/*设置中断,根据不同的intrType,将对于的中断mask置位*/ -void FTimerSetInterruptMask(FTimerTachoCtrl *instance_p, - FTimerTachoEventType intrType, - boolean enable); - -/*启动timer_tacho外设,根据不同的功能,开启使能位*/ -FError FTimerStart(FTimerTachoCtrl *instance_p); - -/*停止timer外设,根据不同的功能,关闭使能位,计数值停止并冻结*/ -FError FTimerStop(FTimerTachoCtrl *instance_p); - -/*用于timer 与 tacho-capture两种模式的切换,切换需要失能和清除计数器*/ -FError FTimerSwithMode(FTimerTachoCtrl *instance_p, FTimerTachoConfig *new_config_p); - -/* 注册中断事件处理回调函数 */ -void FTimerRegisterEvtCallback(FTimerTachoCtrl *instance_p, - FTimerTachoEventType evt, - FTimerEventHandler callback); - -/*打印寄存器信息*/ -FError FTimeSettingDump(const FTimerTachoCtrl *instance_p); - -/*TimerTacho中断处理函数,如果注册回调函数,则跳转到回调函数*/ -void FTimerTachoIntrHandler(s32 vector, void *param); - -/*根据工作模式和状态设置相应的中断*/ -void FTimerTachoSetIntr(FTimerTachoCtrl *instance_p); - -/* Timer API */ -/*完成TimerTacho驱动实例的初始化,使之在就绪状态*/ -FError FTimerInit(FTimerTachoCtrl *instance_p, const FTimerTachoConfig *config_p); - -/*获取Timer驱动的默认配置参数*/ -void FTimerGetDefConfig(u32 timer_id, FTimerTachoConfig *config_p); - -/*设置32位计数模式下,计数器的compare的值,达到此值,如果开启中断,则开启中断*/ -FError FTimerSetPeriod32(FTimerTachoCtrl *instance_p, u32 ticks); - -/*设置64位计数模式下,计数器的compare的值,达到此值,如果开启中断,则开启中断*/ -FError FTimerSetPeriod64(FTimerTachoCtrl *instance_p, u64 ticks); - -/*32位模式下,获取计数器当前计数值*/ -u32 FTimerGetCurCnt32(FTimerTachoCtrl *instance_p); - -/*64位模式下,获取计数器当前计数值*/ -u64 FTimerGetCurCnt64(FTimerTachoCtrl *instance_p); - -/*设置计数器初始值*/ -FError FTimerSetStartVal(FTimerTachoCtrl *instance_p, u32 cnt); - -/*完成Timer驱动实例去使能,清零实例数据*/ -void FTimerDeInit(FTimerTachoCtrl *instance_p); - -/* Tacho API */ -/*完成Tacho驱动实例的初始化,使之在就绪状态*/ -FError FTachoInit(FTimerTachoCtrl *instance_p, const FTimerTachoConfig *config_p); - -/*获取Tacho驱动的默认配置参数*/ -void FTachoGetDefConfig(u32 tacho_id, FTimerTachoConfig *config_p); - -/*配置tach转速周期= pulse_num*/ -void FTachoSetCntPeriod(FTimerTachoCtrl *instance_p, u32 ticks); - -/*预设的 tach 最大值*/ -void FTachoSetOverLimit(FTimerTachoCtrl *instance_p, u32 overLim); - -/*预设的 tach 最小值*/ -void FTachoSetUnderLimit(FTimerTachoCtrl *instance_p, u32 underLim); - -/*根据预设采样周期的值,来获取风扇的转速值*/ -FError FTachoGetFanRPM(FTimerTachoCtrl *instance_p, u32 *rpm); - -/*获取capture模式下tacho输入脉冲的个数*/ -u32 FTachoGetCaptureCnt(FTimerTachoCtrl *instance_p); - -/*完成Tacho驱动实例去使能,清零实例数据*/ -void FTachoDeInit(FTimerTachoCtrl *instance_p); - -#ifdef __cplusplus -} -#endif - -#endif // ! \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/timer/ftimer_tacho/ftimer_tacho_g.c b/bsp/phytium/libraries/standalone/drivers/timer/ftimer_tacho/ftimer_tacho_g.c deleted file mode 100644 index 6353f21c6e..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/timer/ftimer_tacho/ftimer_tacho_g.c +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: ftimer_tacho_g.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 09:09:07 - * Description:  This file is for timer_tacho static configuration - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 liushengming 2022/02/18 first commit - */ - -/***************************** Include Files *********************************/ - -#include -#include "fparameters.h" -#include "fassert.h" -#include "ftimer_tacho_hw.h" -#include "ftimer_tacho.h" - -#define TACHO_PERIOD 1000000 /* 1000000/50000000 = 0.02s*/ -/************************** Function Prototypes ******************************/ -void FTimerGetDefConfig(u32 timer_id, FTimerTachoConfig *config_p) -{ - FASSERT((timer_id < FTIMER_NUM) && (NULL != config_p)); - - memset(config_p, 0, sizeof(FTimerTachoConfig)); - config_p->id = timer_id; - config_p->work_mode = FTIMER_WORK_MODE_TIMER; - config_p->timer_mode = FTIMER_RESTART; - config_p->timer_bits = FTIMER_32_BITS; - config_p->cmp_type = FTIMER_CYC_CMP; - config_p->clear_cnt = FALSE; - config_p->force_load = TRUE; -} - -void FTachoGetDefConfig(u32 tacho_id, FTimerTachoConfig *config_p) -{ - FASSERT((tacho_id < FTACHO_NUM) && (NULL != config_p)); - - memset(config_p, 0, sizeof(FTimerTachoConfig)); - config_p->id = tacho_id; - config_p->timer_bits = FTIMER_32_BITS; - config_p->work_mode = FTIMER_WORK_MODE_TACHO; - config_p->timer_mode = FTIMER_RESTART; - config_p->edge_mode = FTACHO_RISING_EDGE; - config_p->jitter_level = 0; - config_p->plus_num = TACHO_PERIOD;/*采样周期越长,能够检测到的单位时间脉冲越多,能够检测更小的频率*/ - config_p->clear_cnt = FALSE; - config_p->force_load = TRUE; -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/timer/ftimer_tacho/ftimer_tacho_hw.h b/bsp/phytium/libraries/standalone/drivers/timer/ftimer_tacho/ftimer_tacho_hw.h deleted file mode 100644 index d5d937ff8a..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/timer/ftimer_tacho/ftimer_tacho_hw.h +++ /dev/null @@ -1,164 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: ftimer_tacho_hw.h - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 09:09:15 - * Description:  This file is for timer_tacho register definition - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 liushengming 2022/02/18 first commit - */ - -#ifndef FTIMER_TACHO_HW_H -#define FTIMER_TACHO_HW_H - -#include "fio.h" -#include "ftypes.h" -#include "fkernel.h" -#include "fparameters.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/* register offset */ -#define FTIMER_CTRL_REG_OFFSET (0x0) /*Timer or Tachometer 控制寄存器*/ -#define FTACHO_RESULT_REG_OFFSET (0x4) /*一个转速周期内的时钟周期计数结果*/ -#define FTIMER_COMP_VALU_OFFSET (0x8) /*定时计数值高 32 位*/ -#define FTIMER_COMP_VALL_OFFSET (0x1c) /*timer模式下:定时计数值低32位,tacho模式下:配置tach转速周期 = pulse_num*/ -#define FTIMER_CNT_VALU_OFFSET (0x20) /*计数器当前计数值高 32 位*/ -#define FTIMER_CNT_VALL_OFFSET (0x24) /*计数器当前计数值低 32 位*/ -#define FTIMER_INTR_MASK_OFFSET (0x28) /*中断使能寄存器*/ -#define FTIMER_INTR_STATUS_OFFSET (0x2c) /*中断状态寄存器*/ -#define FTACHO_OVER_LIM_OFFSET (0x30) /*预设的 tach 最大值*/ -#define FTACHO_UNDER_LIM_OFFSET (0x34) /*预设的 tach 最小值*/ -#define FTIMER_START_VAL_OFFSET (0x38) /*计数器初始值*/ - -/* bit set */ -/* timer ctrl */ -#define FTIMER_REG_TACHO_MODE_MASK (0x3 << 0) /*bit [1:0] RW*/ -#define FTIMER_REG_TACHO_MODE_TIMER (0x0 << 0) /*定时器功能*/ -#define FTIMER_REG_TACHO_MODE_TACHO (0x1 << 0) /*tachometer 功能*/ -#define FTIMER_REG_TACHO_MODE_CAPTURE (0x2 << 0) /*输入 capture 功能*/ - -#define FTIMER_REG_TACHO_RESET (0x1 << 2) /*in reset status*/ - -#define FTIMER_REG_TACHO_FORCE_LOAD (0x1 << 3) /*force to update*/ -#define FTIMER_REG_TACHO_CAPTURE_ENABLE (0x1 << 4) /*enable input capture*/ -#define FTIMER_REG_TACHO_CAPTURE_CNT_MASK (0x7f << 5) /*in capture mode, cause intr when egde counting reach this val*/ -#define FTIMER_REG_TACHO_CAPTURE_CNT_SHIFT 5 /*cap_cnt shift*/ - -#define FTACHO_REG_ANTI_JITTER_MASK (0x3 << 18) /*anti jitter num = N + 1*/ -#define FTACHO_REG_ANTI_JITTER_SHIFT 18 /*anti_jitter_number shift*/ - -#define FTACHO_REG_MODE_MASK (0x3 << 20) /*select tacho input mode*/ -#define FTACHO_REG_MODE_FALLING_EDGE (0x0 << 20) /*select falling edge*/ -#define FTACHO_REG_MODE_RISING_EDGE (0x1 << 20) /*select rising edge*/ -#define FTACHO_REG_MODE_DOUBLE_EDGE (0x2 << 20) /*select both falling edge and rising*/ - -#define FTIMER_REG_CNT_RESTART (0x1 << 22) /*select timer restart mode*/ -#define FTIMER_REG_CNT_FREERUN (0x0 << 22) /*select timer free_run mode*/ - -#define FTIMER_REG_CNT_SERIES_64BIT (0x1 << 24) /*select counter bit 64 */ -#define FTIMER_REG_CNT_SERIES_32BIT (0x0 << 24) /*select counter bit 32 */ - -#define FTIMER_REG_ENABLE (0x1 << 25) /*enable timer count*/ - -#define FTIMER_REG_CNT_CLR (0x1 << 26) /*clear counter*/ -#define FTIMER_REG_CNT_NOCLR (0x0 << 26) /*don't clear counter*/ - -#define FTIMER_REG_MODE_ONCE (0x1 << 27) /*one time timer*/ -#define FTIMER_REG_MODE_CYC (0x0 << 27) /*cycle timer*/ - -#define FTACHO_REG_CAP_IN_ENABLE (0x1 << 31) /*enable tacho capture input*/ - -/* tacho result */ -#define FTACHO_REG_RESU_MASK GENMASK(30, 0) /*bit [30:0], tacho result*/ -#define FTACHO_REG_RESU_ISVALID (0x1 << 31) /*tacho result is valid*/ - -/* tacho over */ -#define FTACHO_REG_OVER_MASK GENMASK(30, 0) /*tacho max value mask*/ - -/* tacho under */ -#define FTACHO_REG_UNDER_MASK GENMASK(30, 0) /*tacho min value mask*/ - -/* intr mask */ -#define FTACHO_OVER_INTR_EN (0x1 << 0) /*tach 超转速中断使能*/ -#define FTACHO_UNDER_INTR_EN (0x1 << 1) /*tach 低于转速中断使能*/ -#define FTIMER_ROLLOVER_INTR_EN (0x1 << 2) /*计数器翻转中断使能*/ -#define FTIMER_ONCECMP_INTR_EN (0x1 << 3) /*一次定时输出中断使能*/ -#define FTIMER_CYCCMP_INTR_EN (0x1 << 4) /*重复定时输出中断使能*/ -#define FTACHO_CAPTURE_INTR_EN (0x1 << 5) /*tach 输入捕获中断使能*/ - -#define FTIMER_ALL_INTR_EN (FTIMER_ROLLOVER_INTR_EN | FTIMER_ONCECMP_INTR_EN | FTIMER_CYCCMP_INTR_EN) - -/* intr status */ -#define FTACHO_OVER_INTR_STATUS (0x1 << 0) /*tach 超转速中断*/ -#define FTACHO_UNDER_INTR_STATUS (0x1 << 1) /*tach 低于转速中断*/ -#define FTIMER_ROLLOVER_INTR_STATUS (0x1 << 2) /*计数器翻转中断*/ -#define FTIMER_ONCECMP_INTR_STATUS (0x1 << 3) /*一次定时输出中断*/ -#define FTIMER_CYCCMP_INTR_STATUS (0x1 << 4) /*重复定时输出中断*/ -#define FTACHO_CAPTURE_INTR_STATUS (0x1 << 5) /*tach 输入捕获中断*/ - -/** - * @name: FTIMER_READ_REG32 - * @msg: 读取定时器寄存器 - * @param {u32} addr 定时器的基地址 - * @param {u32} reg_offset 定时器的寄存器的偏移 - * @return {u32} 寄存器参数 - */ -#define FTIMER_READ_REG32(addr, reg_offset) FtIn32(addr + (u32)reg_offset) - -/** - * @name: FTIMER_WRITE_REG32 - * @msg: 写入定时器寄存器 - * @param {u32} addr 定时器的基地址 - * @param {u32} reg_offset 定时器的寄存器的偏移 - * @param {u32} reg_value 写入寄存器参数 - * @return {void} - */ -#define FTIMER_WRITE_REG32(addr, reg_offset, reg_value) FtOut32(addr + (u32)reg_offset, (u32)reg_value) - -#define FTIMER_TIMEOUT 3000 /*超时时间*/ - -#define FTIMER_BASE_ADDR(instance_p) FTIMER_TACHO_BASE_ADDR((instance_p)->config.id) /*获取设备基地址*/ -/*read and write reg value*/ -#define FTIMER_CTRL_READ(instance_p) FTIMER_READ_REG32(FTIMER_BASE_ADDR(instance_p), FTIMER_CTRL_REG_OFFSET) -#define FTIMER_CTRL_WRITE(instance_p, regVal) FTIMER_WRITE_REG32(FTIMER_BASE_ADDR(instance_p), FTIMER_CTRL_REG_OFFSET, (regVal)) -#define FTIMER_CMPL_READ(instance_p) FTIMER_READ_REG32(FTIMER_BASE_ADDR(instance_p), FTIMER_COMP_VALL_OFFSET) -#define FTIMER_CMPL_WRITE(instance_p, cmpL) FTIMER_WRITE_REG32(FTIMER_BASE_ADDR(instance_p), FTIMER_COMP_VALL_OFFSET, (cmpL)) -#define FTIMER_CMPU_READ(instance_p) FTIMER_READ_REG32(FTIMER_BASE_ADDR(instance_p), FTIMER_COMP_VALU_OFFSET) -#define FTIMER_CMPU_WRITE(instance_p, cmpU) FTIMER_WRITE_REG32(FTIMER_BASE_ADDR(instance_p), FTIMER_COMP_VALU_OFFSET, (cmpU)) -#define FTIMER_STAR_WRITE(instance_p, cnt) FTIMER_WRITE_REG32(FTIMER_BASE_ADDR(instance_p), FTIMER_START_VAL_OFFSET, (cnt)) -#define FTIMER_STAR_READ(instance_p) FTIMER_READ_REG32(FTIMER_BASE_ADDR(instance_p), FTIMER_START_VAL_OFFSET) -#define FTIMER_CNTL_READ(instance_p) FTIMER_READ_REG32(FTIMER_BASE_ADDR(instance_p), FTIMER_CNT_VALL_OFFSET) -#define FTIMER_CNTU_READ(instance_p) FTIMER_READ_REG32(FTIMER_BASE_ADDR(instance_p), FTIMER_CNT_VALU_OFFSET) -#define FTACHO_RESU_READ(instance_p) FTIMER_READ_REG32(FTIMER_BASE_ADDR(instance_p), FTACHO_RESULT_REG_OFFSET) -#define FTACHO_OVER_WRITE(instance_p, over) FTIMER_WRITE_REG32(FTIMER_BASE_ADDR(instance_p), FTACHO_OVER_LIM_OFFSET, (over)) -#define FTACHO_UNDER_WRITE(instance_p, under) FTIMER_WRITE_REG32(FTIMER_BASE_ADDR(instance_p), FTACHO_UNDER_LIM_OFFSET, (under)) - -#define FTIMER_INTR_M_READ(instance_p) FTIMER_READ_REG32(FTIMER_BASE_ADDR(instance_p), FTIMER_INTR_MASK_OFFSET) -#define FTIMER_INTR_M_WRITE(instance_p, mask) FTIMER_WRITE_REG32(FTIMER_BASE_ADDR(instance_p), FTIMER_INTR_MASK_OFFSET, (mask)) -#define FTIMER_INTR_S_READ(instance_p) FTIMER_READ_REG32(FTIMER_BASE_ADDR(instance_p), FTIMER_INTR_STATUS_OFFSET) -/* write 1 clear */ -#define FTIMER_INTR_S_CLEAR(instance_p, status) FTIMER_WRITE_REG32(FTIMER_BASE_ADDR(instance_p), FTIMER_INTR_STATUS_OFFSET, (status)) - -#ifdef __cplusplus -} -#endif - -#endif // ! \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/timer/ftimer_tacho/ftimer_tacho_intr.c b/bsp/phytium/libraries/standalone/drivers/timer/ftimer_tacho/ftimer_tacho_intr.c deleted file mode 100644 index c7318ede81..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/timer/ftimer_tacho/ftimer_tacho_intr.c +++ /dev/null @@ -1,211 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: ftimer_tacho_intr.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 09:09:36 - * Description:  This file is for timer_tacho interrupt operation - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 liushengming 2022/02/18 first commit - */ - -/***************************** Include Files *********************************/ -#include "fassert.h" -#include "ftimer_tacho.h" -#include "ftimer_tacho_hw.h" - -/************************** Constant Definitions *****************************/ - -static const u32 g_intrBits[FMAX_TIMER_TACHO_EVENT] = -{ - FTACHO_OVER_INTR_EN, FTACHO_UNDER_INTR_EN, - FTIMER_ROLLOVER_INTR_EN, FTIMER_ONCECMP_INTR_EN, FTIMER_CYCCMP_INTR_EN, - FTACHO_CAPTURE_INTR_EN -}; - -static const u32 g_intrStats[FMAX_TIMER_TACHO_EVENT] = -{ - FTACHO_OVER_INTR_STATUS, FTACHO_UNDER_INTR_STATUS, - FTIMER_ROLLOVER_INTR_STATUS, FTIMER_ONCECMP_INTR_STATUS, FTIMER_CYCCMP_INTR_STATUS, - FTACHO_CAPTURE_INTR_STATUS -}; - -/************************** Function Prototypes ******************************/ -/** - * @name: FTimerGetInterruptMask - * @msg: 获取中断设置 - * @return {u32} 返回中断寄存器的值 - * @param {FTimerTachoCtrl} *instance_p 驱动控制数据结构 - */ -u32 FTimerGetInterruptMask(FTimerTachoCtrl *instance_p) -{ - FASSERT(instance_p); - return FTIMER_INTR_M_READ(instance_p); -} - -/** - * @name: FTimerSetInterruptMask - * @msg: 设置中断 - * @return {void} - * @param {FTimerTachoCtrl} *instance_p 驱动控制数据结构 - * @param {enum} intrType 中断枚举类型 - * @param {boolean} enable 使能或者失能 - */ -void FTimerSetInterruptMask(FTimerTachoCtrl *instance_p, - FTimerTachoEventType intrType, - boolean enable) -{ - FASSERT(instance_p && intrType < FMAX_TIMER_TACHO_EVENT); - u32 mask = FTIMER_INTR_M_READ(instance_p); - - if (enable) - { - mask |= g_intrBits[intrType]; - } - else - { - mask &= ~g_intrBits[intrType]; - } - - FTIMER_INTR_M_WRITE(instance_p, mask); -} - -/** - * @name: FTimerTachoIntrHandler - * @msg: 中断服务函数,跳转到自己注册的回调函数(如果注册,没有注册则跳转到FTimerDefaultEvtCallback) - * @return {void} - * @param {s32} vector,中断向量号,此处不关心此参数 - * @param {void} *param, 中断输入参数, 指向FTimerTachoCtrl的驱动控制实例 - */ -void FTimerTachoIntrHandler(s32 vector, void *param) -{ - FASSERT(param); - - FTimerTachoCtrl *instance_p = (FTimerTachoCtrl *)param; - const u32 intr_status = FTIMER_INTR_S_READ(instance_p); - u32 loop; - FTimerEventHandler evtHandler; - - FTIMER_INFO("Intr entered cause: 0x%x.\r\n", intr_status); - - /* check intr status bit by bit */ - for (loop = 0; loop < FMAX_TIMER_TACHO_EVENT; loop++) - { - evtHandler = instance_p->evt_handlers[loop]; - - if ((g_intrStats[loop] & intr_status) && (NULL != evtHandler)) - { - evtHandler((void *)instance_p); - } - } - - FTIMER_INTR_S_CLEAR(instance_p, intr_status); -} - -/** - * @name: FTimerDefaultEvtCallback - * @msg: 默认中断回调函数 - * @return {void} - * @param {void} *param,函数输入参数指向FTimerTachoCtrl的驱动控制实例 - */ -static void FTimerDefaultEvtCallback(void *param) -{ - FASSERT(param); - FTimerTachoCtrl *instance_p = (FTimerTachoCtrl *)param; - const u32 intr_status = FTIMER_INTR_S_READ(instance_p); - - FTIMER_INFO("timer id: 0x%x, intr cause: 0x%x.\r\n", intr_status); -} - -/** - * @name: FTimerRegisterEvtCallback - * @msg: 回调函数的注册函数 - * @return {void} - * @param {FTimerTachoCtrl} *instance_p 驱动控制数据结构 - * @param {enum} intrType 中断枚举类型 - * @param {FTimerEventHandler} - */ -void FTimerRegisterEvtCallback(FTimerTachoCtrl *instance_p, - FTimerTachoEventType evt, - FTimerEventHandler callback) -{ - FASSERT(instance_p && evt < FMAX_TIMER_TACHO_EVENT); - instance_p->evt_handlers[evt] = callback; -} - -/** - * @name: FTimerTachoSetIntr - * @msg: 根据工作模式和状态设置相应的中断 - * @return {void} - * @param {FTimerTachoCtrl} *instance_p 驱动控制数据结构 - */ -void FTimerTachoSetIntr(FTimerTachoCtrl *instance_p) -{ - FASSERT(instance_p); - - if (FTIMER_WORK_MODE_TIMER == instance_p->config.work_mode) - { - if (FTIMER_ONCE_CMP == instance_p->config.cmp_type) - { - FTimerSetInterruptMask(instance_p, FTIMER_EVENT_ONCE_CMP, TRUE); - if (instance_p->evt_handlers[FTIMER_EVENT_ONCE_CMP] == NULL) - { - FTimerRegisterEvtCallback(instance_p, FTIMER_EVENT_ONCE_CMP, FTimerDefaultEvtCallback); - } - } - else - { - FTimerSetInterruptMask(instance_p, FTIMER_EVENT_CYC_CMP, TRUE); - if (instance_p->evt_handlers[FTIMER_EVENT_CYC_CMP] == NULL) - { - FTimerRegisterEvtCallback(instance_p, FTIMER_EVENT_CYC_CMP, FTimerDefaultEvtCallback); - } - } - /*暂时屏蔽不开启翻转中断,因为cmp设置触发就是最大值,等同于翻转中断*/ - /*FTimerSetInterruptMask(instance_p, FTIMER_EVENT_ROLL_OVER, TRUE);*/ - if (instance_p->evt_handlers[FTIMER_EVENT_ROLL_OVER] == NULL) - { - FTimerRegisterEvtCallback(instance_p, FTIMER_EVENT_ROLL_OVER, FTimerDefaultEvtCallback); - } - } - else if (FTIMER_WORK_MODE_TACHO == instance_p->config.work_mode) - { - FTimerSetInterruptMask(instance_p, FTACHO_EVENT_OVER, TRUE); - FTimerSetInterruptMask(instance_p, FTACHO_EVENT_UNDER, TRUE); - if (instance_p->evt_handlers[FTACHO_EVENT_OVER] == NULL) - { - FTimerRegisterEvtCallback(instance_p, FTACHO_EVENT_OVER, FTimerDefaultEvtCallback); - } - if (instance_p->evt_handlers[FTACHO_EVENT_UNDER] == NULL) - { - FTimerRegisterEvtCallback(instance_p, FTACHO_EVENT_UNDER, FTimerDefaultEvtCallback); - } - } - else if (FTIMER_WORK_MODE_CAPTURE == instance_p->config.work_mode) - { - FTimerSetInterruptMask(instance_p, FTACHO_EVENT_CAPTURE, TRUE); - if (instance_p->evt_handlers[FTACHO_EVENT_CAPTURE] == NULL) - { - FTimerRegisterEvtCallback(instance_p, FTACHO_EVENT_CAPTURE, FTimerDefaultEvtCallback); - } - } - else - { - FASSERT(0); - } - FTIMER_INFO("Mask:0x%x.\r\n", FTIMER_INTR_M_READ(instance_p)); - return; -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/usb/Kconfig b/bsp/phytium/libraries/standalone/drivers/usb/Kconfig deleted file mode 100644 index 18d0f459d8..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/usb/Kconfig +++ /dev/null @@ -1,9 +0,0 @@ -config ENABLE_USB_FXHCI - bool - prompt "Use USB3.0 Host(FUSB_HC_XHCI)" - default n - depends on USE_USB - help - Select USB FUSB_HC_XHCI Host driver component - - diff --git a/bsp/phytium/libraries/standalone/drivers/usb/fusb.c b/bsp/phytium/libraries/standalone/drivers/usb/fusb.c deleted file mode 100644 index a7a2fea4b5..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/usb/fusb.c +++ /dev/null @@ -1,1060 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fusb.c - * Date: 2022-02-11 13:33:11 - * LastEditTime: 2022-02-18 09:22:06 - * Description:  This file is for implmentation of USB user API - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/2/8 init commit - */ - -#include - -#include "fdebug.h" -#include "fsleep.h" - -#include "fusb_private.h" -#include "fxhci.h" - -#define FUSB_DEBUG_TAG "FUSB" -#define FUSB_ERROR(format, ...) FT_DEBUG_PRINT_E(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) -#define FUSB_WARN(format, ...) FT_DEBUG_PRINT_W(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) -#define FUSB_INFO(format, ...) FT_DEBUG_PRINT_I(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) -#define FUSB_DEBUG(format, ...) FT_DEBUG_PRINT_D(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) - -#define FUSB_DR_DESC FUsbGenerateReqType(FUSB_REQ_DEVICE_TO_HOST, FUSB_REQ_TYPE_STANDARD, FUSB_REQ_RECP_DEV) - -/* - * Certain Lexar / Micron USB 2.0 disks will fail the FUsbGetDescriptor(FUSB_DESC_TYPE_CONFIG) - * call due to timing issues. Work around this by making extra attempts on - * failure. - */ -#define FUSB_GET_DESCRIPTOR_RETRIES 3 - -/** - * @name: FUsbCfgInitialize - * @msg: 初始化USB实例 - * @return {FError} 初始化错误码 - * @param {FUsb} *instance, USB实例 - * @param {const FUsbConfig} *input_config, USB输入配置 - * @note 在PCIE模式下,USB Hc实例在PCIE总线发现控制器后创建 - */ -FError FUsbCfgInitialize(FUsb *instance, const FUsbConfig *input_config) -{ - FASSERT(instance && input_config); - FError ret = FUSB_SUCCESS; - - if (input_config != &instance->config) - { - instance->config = *input_config; - } - - instance->hc = NULL; /* non usb host attached */ - - /* create usb hc instance, which will be add as the head of hc list */ - if (NULL == FXhciHcInit(instance, instance->config.base_addr)) - { - ret = FUSB_ERR_ALLOCATE_FAIL; - } - - if (FUSB_SUCCESS == ret) - { - instance->is_ready = FT_COMPONENT_IS_READY; - } - - return ret; -} - -/** - * @name: FUsbDeInitialize - * @msg: 去初始化USB实例 - * @return {*} - * @param {FUsb} *instance, USB实例 - */ -void FUsbDeInitialize(FUsb *instance) -{ - FASSERT(instance); - - if (FT_COMPONENT_IS_READY != instance->is_ready) - { - FUSB_ERROR("USB not ready !!!"); - return; - } - - instance->is_ready = 0; - - return; -} - -/** - * @name: FUsbPoll - * @msg: 轮询所有的USB控制器连接的所有设备, 更新设备拓扑 - * @return {*} - * @param {FUsb} *instance, USB实例 - */ -void FUsbPoll(FUsb *instance) -{ - FASSERT(instance); - - if (FT_COMPONENT_IS_READY != instance->is_ready) - { - FUSB_ERROR("USB not ready !!!"); - return; - } - - if (FUsbPollPrepare) - { - FUsbPollPrepare(instance); - } - - FUsbHc *controller = instance->hc; - if (controller != NULL) - { - int i; - for (i = 0; i < FUSB_MAX_DEV_NUM; i++) - { - if (controller->devices[i] != NULL) - { - controller->devices[i]->poll(controller->devices[i]); - } - } - } - - return; -} - -/** - * @name: FUsbExit - * @msg: 关闭所有的USB控制器,移除所有连接的设备 - * @return {*} - * @param {FUsb} *instance, USB实例 - */ -void FUsbExit(FUsb *instance) -{ - FASSERT(instance); - - if (FT_COMPONENT_IS_READY != instance->is_ready) - { - FUSB_ERROR("USB not ready !!!"); - return; - } - - if (FUsbExitPrepare) - { - FUsbExitPrepare(instance); - } - - FUsbHc *controller = instance->hc; - if (controller != NULL) - { - FASSERT(controller->shutdown); - controller->shutdown(controller); - FUSB_FREE(instance, instance->hc); - instance->hc = NULL; - } - - - return; -} - -/** - * @name: FUsbMempAllocate - * @msg: 从USB内存池分配一块内存,并清零分配的空间 - * @return {void *} 分配的内存空间,如果失败返回NULL - * @param {FUsb} *instance, USB实例 - * @param {size_t} size, 请求分配的字节数 - * @param {size_t} align, 分配空间的对齐方式,起始地址按align字节对齐 - */ -void *FUsbMempAllocate(FUsb *instance, size_t size, size_t align) -{ - FASSERT(instance); - void *result = NULL; - FUsbMemAllocator *allocator = &(instance->config.allocator); - - if (allocator->malloc_align) - { - result = allocator->malloc_align(size, align); - } - - return result; -} - -/** - * @name: FUsbMempFree - * @msg: 释放从USB内存池分配的空间 - * @return {*} - * @param {FUsb} *instance, USB实例 - * @param {void} *ptr, 待释放空间的首地址 - */ -void FUsbMempFree(FUsb *instance, void *ptr) -{ - FASSERT(instance); - FUsbMemAllocator *allocator = &(instance->config.allocator); - - if ((NULL != ptr) && (allocator->free)) - { - allocator->free(ptr); - } - - return; -} - -#ifdef FMEMP_TAG_DEBUG -void *FUsbMempAllocateTag(FUsb *instance, size_t size, size_t align, const char *file, unsigned long line, const char *msg) -{ - FASSERT(instance); - void *result = NULL; - FMemp *memp = &instance->memp; - - if (FUSB_DEFAULT_ALIGN == align) - { - result = FMempCallocTag(memp, 1, size, file, line, msg); - } - else - { - result = FMempMallocAlignTag(memp, size, align, file, line, msg); - if (NULL != result) - { - memset(result, 0, size); - } - } - - return result; -} - -void FUsbMempFreeTag(FUsb *instance, void *ptr) -{ - FASSERT(instance); - if (NULL != ptr) - { - FMempFreeTag(&instance->memp, ptr); - } - - return; -} -#endif - -/** - * @name: FUsbAllocateHc - * @msg: 创建USB控制器实例,添加到USB实例的Hc链表中 - * @return {*} - * @param {FUsb} *instance, USB实例 - */ -FUsbHc *FUsbAllocateHc(FUsb *instance) -{ - FASSERT(instance); - FUsbHc *controller = FUSB_ALLOCATE(instance, sizeof(FUsbHc), FUSB_DEFAULT_ALIGN); - instance->hc = controller; - - - return controller; -} - -/** - * @name: FUsbDetachHc - * @msg: 删除USB控制器实例,从USB实例的Hc链表中删去 - * @return {*} - * @param {FUsbHc} *controller, USB控制器实例 - */ -void FUsbDetachHc(FUsbHc *controller) -{ - if (controller == NULL) - { - return; - } - - FUsb *instance = controller->usb; - FUsbDetachDev(controller, 0); /* tear down root hub tree */ - - return; -} - -/** - * @name: FUsbFindValidInitFunc - * @msg: 寻找特定USB设备的初始化函数 - * @return {*} - * @param {FUsb} *instance, USB实例 - * @param {FUsbDevIndex} *index, 特定USB设备的索引 - */ -static FUsbDevInitHandler FUsbFindValidInitFunc(FUsb *instance, const FUsbDevIndex *index) -{ - FASSERT(instance); - u32 loop; - FUsbDevInitFunc *func; - FUsbDevInitHandler handler = NULL; - - for (loop = 0; loop < instance->dev_init_num; loop++) - { - func = &instance->dev_init[loop]; - if ((index->category == func->index.category) && - (index->class == func->index.class) && - (index->sub_class == func->index.sub_class) && - (index->protocol == func->index.protocol)) - { - handler = func->handler; - } - } - - return handler; -} - -/** - * @name: FUsbAssignDevInitFunc - * @msg: 指定特定USB设备的初始化函数,供创建USB设备实例时使用 - * @return {FError} 处理返回错误码 - * @param {FUsb} *instance, USB实例 - * @param {FUsbDevIndex} *index, 特定USB设备的索引 - * @param {FUsbDevInitHandler} handler, 特定USB设备的初始化函数 - */ -FError FUsbAssignDevInitFunc(FUsb *instance, const FUsbDevIndex *index, FUsbDevInitHandler handler) -{ - FASSERT(instance && index && handler); - if (FUSB_MAX_DEV_TYPE_NUM == instance->dev_init_num) - { - return FUSB_ERR_INVALID_PARA; - } - - if (NULL != FUsbFindValidInitFunc(instance, index)) - { - FUSB_WARN("Will remove device init for class 0x%x", index->class); - } - - instance->dev_init[instance->dev_init_num].index = *index; - instance->dev_init[instance->dev_init_num].handler = handler; - instance->dev_init_num++; - - return FUSB_SUCCESS; -} - -/** - * @name: FUsbInitDevEntry - * @msg: 初始化USB设备 - * @return {*} - * @param {FUsbHc} *controller, USB Hc - * @param {int} slot_id,slot号 - */ -FUsbDev *FUsbInitDevEntry(FUsbHc *controller, int slot_id) -{ - FASSERT(controller && controller->usb); - FASSERT(FUSB_SLOT_ID_VALID(slot_id)); - - FUsb *instace = controller->usb; - FUsbDev *dev = FUSB_ALLOCATE(instace, sizeof(FUsbDev), FUSB_DEFAULT_ALIGN); - - if (NULL == dev) - { - FUSB_ERROR("No memory to allocate device structure ."); - return NULL; - } - - if (controller->devices[slot_id] != NULL) - { - FUSB_WARN("Warning: device %d reassigned? ", slot_id); - } - - controller->devices[slot_id] = dev; - dev->controller = controller; - dev->address = FUSB_NO_DEV_ADDR; - dev->hub = FUSB_NO_HUB; - dev->port = FUSB_NO_PORT; - dev->init = FUsbNopDevInit; - dev->init(controller->devices[slot_id]); - - return dev; -} - -/** - * @name: FUsbGetAllDevEntries - * @msg: 获取USB控制器上连接的所有USB设备实例 - * @return {size_t} 实际获取的USB设备实例数目 - * @param {FUsbHc} *controller, USB控制器实例 - * @param {FUsbDev} *devs, 放置USB设备实例的缓冲区 - * @param {size_t} max_dev_num, 最多可以获取的USB设备实例数目 - */ -size_t FUsbGetAllDevEntries(FUsbHc *controller, FUsbDev *devs[], size_t max_dev_num) -{ - FASSERT(controller && devs && max_dev_num > 0); - size_t loop; - size_t num = 0; - - /* loop over all dev address in case there are holes */ - for (loop = 0; loop < FUSB_MAX_DEV_NUM; loop++) - { - if (NULL != controller->devices[loop]) - { - devs[num] = controller->devices[loop]; - num++; - - /* get at most max_dev_num device entry before exit */ - if (num >= max_dev_num) - { - break; - } - } - } - - return num; -} - -/** - * @name: FUsbDecodeMaxPacketSz0 - * @msg: 根据USB设备速度,选择最大包长度 - * @return {*} 输出最大包长度 - * @param {FUsbSpeed} speed, USB设备速度类型 - * @param {u8} bMaxPacketSize0, 输入最大包长度 - */ -int FUsbDecodeMaxPacketSz0(FUsbSpeed speed, u8 bMaxPacketSize0) -{ - switch (speed) - { - case FUSB_LOW_SPEED: - if (bMaxPacketSize0 != 8) - { - FUSB_ERROR("Invalid MPS0: 0x%02x ", bMaxPacketSize0); - bMaxPacketSize0 = 8; - } - return bMaxPacketSize0; - case FUSB_FULL_SPEED: - switch (bMaxPacketSize0) - { - case 8: - case 16: - case 32: - case 64: - return bMaxPacketSize0; - default: - FUSB_ERROR("Invalid MPS0: 0x%02x ", bMaxPacketSize0); - return 8; - } - case FUSB_HIGH_SPEED: - if (bMaxPacketSize0 != 64) - { - FUSB_ERROR("Invalid MPS0: 0x%02x ", bMaxPacketSize0); - bMaxPacketSize0 = 64; - } - return bMaxPacketSize0; - case FUSB_SUPER_SPEED: - /* Intentional fallthrough */ - case FUSB_SUPER_SPEED_PLUS: - if (bMaxPacketSize0 != 9) - { - FUSB_ERROR("Invalid MPS0: 0x%02x ", bMaxPacketSize0); - bMaxPacketSize0 = 9; - } - return 1 << bMaxPacketSize0; - default: - return 8; - } -} - -/** - * @name: FUsbSetFeature - * @msg: 标准USB主机请求,使能设备/接口/端点的某个特性 - * @return {FUsbTransCode} 控制传输的返回值,小于0表示失败,大于0表示成功传输的字节数目 - * @param {FUsbDev} *dev, USB设备实例 - * @param {int} endp, 设备号(0x00)/接口号/端点号 - * @param {int} feature, 待使能的特性 - * @param {int} rtype, 请求类型,由FUsbGenerateReqType生成 - */ -FUsbTransCode FUsbSetFeature(FUsbDev *dev, int endp, int feature, int rtype) -{ - FASSERT(dev && dev->controller && dev->controller->control); - FUsbDevReq dr; - - dr.bmRequestType = rtype; - dr.data_dir = FUSB_REQ_HOST_TO_DEVICE; - dr.bRequest = FUSB_SET_FEATURE; - dr.wValue = feature; - dr.wIndex = endp; - dr.wLength = 0; - - return dev->controller->control(dev, FUSB_OUT, sizeof(dr), &dr, 0, NULL); -} - -/** - * @name: FUsbGetStatus - * @msg: 标准USB主机请求,获取设备/接口/端点的状态 - * @return {FUsbTransCode} 控制传输的返回值,小于0表示失败,大于0表示成功传输的字节数目 - * @param {FUsbDev} *dev, USB设备实例 - * @param {int} intf,设备号(0x00)/接口号/端点号 - * @param {int} rtype, 请求类型,由FUsbGenerateReqType生成 - * @param {int} len, Data Stage的数据长度 - * @param {void} *data, Data Stage的数据缓冲区 - */ -FUsbTransCode FUsbGetStatus(FUsbDev *dev, int intf, int rtype, int len, void *data) -{ - FASSERT(dev && dev->controller && dev->controller->control); - FUsbDevReq dr; - - dr.bmRequestType = rtype; - dr.data_dir = FUSB_REQ_DEVICE_TO_HOST; - dr.bRequest = FUSB_GET_STATUS; - dr.wValue = 0; - dr.wIndex = intf; - dr.wLength = len; - - return dev->controller->control(dev, FUSB_IN, sizeof(dr), &dr, len, data); -} - -/** - * @name: FUsbGetDescriptor - * @msg: 标准USB主机请求,获取指定描述符 - * @return {FUsbTransCode} 控制传输的返回值,小于0表示失败,大于0表示成功传输的字节数目 - * @param {FUsbDev} *dev, USB设备实例 - * @param {int} rtype, 请求类型,由FUsbGenerateReqType生成 - * @param {FUsbDescriptorType} desc_type, 描述符类型 - * @param {int} desc_idx, 描述符索引 - * @param {void} *data, Data Stage的数据缓冲区 - * @param {size_t} len, Data Stage的数据长度 - */ -FUsbTransCode FUsbGetDescriptor(FUsbDev *dev, int rtype, FUsbDescriptorType desc_type, int desc_idx, void *data, - size_t len) -{ - FASSERT(dev && dev->controller && dev->controller->control); - FUsbDevReq dr; - int fail_tries = 0; - FUsbTransCode ret = FUSB_CC_ZERO_BYTES; - - while (fail_tries++ < FUSB_GET_DESCRIPTOR_RETRIES) - { - dr.bmRequestType = rtype; - dr.bRequest = FUSB_GET_DESCRIPTOR; - dr.wValue = desc_type << 8 | desc_idx; - dr.wIndex = 0; - dr.wLength = len; - - ret = dev->controller->control(dev, FUSB_IN, - sizeof(dr), &dr, len, data); - - if (ret == (int)len) - { - break; - } - - fsleep_microsec(10); - } - - return ret; -} - -/** - * @name: FUsbGetStringDescriptor - * @msg: USB主机请求,获取字符串描述符 - * @return {int} 控制传输的返回值,小于0表示失败,大于0表示成功传输的字节数目 - * @param {FUsbDev} *dev, USB设备实例 - * @param {int} rtype, 请求类型,由FUsbGenerateReqType生成 - * @param {int} desc_type, 描述符类型 - * @param {int} desc_idx, 描述符索引 - * @param {int} lang_id, 语言类型 - * @param {void} *data, Data Stage的数据缓冲区 - * @param {size_t} len, Data Stage的数据长度 - */ -FUsbTransCode FUsbGetStringDescriptor(FUsbDev *dev, int rtype, FUsbDescriptorType desc_type, int desc_idx, int lang_id, void *data, size_t len) -{ - FASSERT(dev && dev->controller && dev->controller->control); - FUsbDevReq dr; - int fail_tries = 0; - FUsbTransCode ret = FUSB_CC_ZERO_BYTES; - - while (fail_tries++ < FUSB_GET_DESCRIPTOR_RETRIES) - { - dr.bmRequestType = rtype; - dr.bRequest = FUSB_GET_DESCRIPTOR; - dr.wValue = desc_type << 8 | desc_idx; - dr.wIndex = lang_id; - dr.wLength = len; - - ret = dev->controller->control(dev, FUSB_IN, sizeof(dr), &dr, len, data); - if (ret == (int)len) - { - break; - } - - fsleep_microsec(10); - } - - return ret; -} - -/** - * @name: FUsbSetConfiguration - * @msg: 标准USB主机请求,设置配置值 - * @return {FUsbTransCode} 控制传输的返回值,小于0表示失败,大于0表示成功传输的字节数目 - * @param {FUsbDev} *dev, USB设备实例 - */ -FUsbTransCode FUsbSetConfiguration(FUsbDev *dev) -{ - FASSERT(dev && dev->controller && dev->controller->control); - FUsbDevReq dr; - - dr.bmRequestType = 0; - dr.bRequest = FUSB_SET_CONFIGURATION; - dr.wValue = dev->configuration->bConfigurationValue; - dr.wIndex = 0; - dr.wLength = 0; - - return dev->controller->control(dev, FUSB_OUT, sizeof(dr), &dr, 0, NULL); -} - -/** - * @name: FUsbClearFeature - * @msg: 标准USB主机请求,去使能设备/接口/端点的某个特性 - * @return {FUsbTransCode} 控制传输的返回值,小于0表示失败,大于0表示成功传输的字节数目 - * @param {FUsbDev} *dev, USB设备实例 - * @param {int} endp, 设备号(0x00)/接口号/端点号 - * @param {int} feature,待去除的特性 - * @param {int} rtype, 请求类型,由FUsbGenerateReqType生成 - */ -FUsbTransCode FUsbClearFeature(FUsbDev *dev, int endp, int feature, int rtype) -{ - FASSERT(dev && dev->controller && dev->controller->control); - FUsbDevReq dr; - - dr.bmRequestType = rtype; - dr.data_dir = FUSB_REQ_HOST_TO_DEVICE; - dr.bRequest = FUSB_CLEAR_FEATURE; - dr.wValue = feature; - dr.wIndex = endp; - dr.wLength = 0; - - return dev->controller->control(dev, FUSB_OUT, sizeof(dr), &dr, 0, NULL) < 0; -} - -/** - * @name: FUsbSpeedtoDefaultMaxPacketSz - * @msg: 根据设备速度获取最大包长度 - * @return {int} 最大包长度 - * @param {FUsbSpeed} speed, 设备速度类型 - */ -int FUsbSpeedtoDefaultMaxPacketSz(FUsbSpeed speed) -{ - switch (speed) - { - case FUSB_LOW_SPEED: - return 8; - case FUSB_FULL_SPEED: - case FUSB_HIGH_SPEED: - return 64; - case FUSB_SUPER_SPEED: - /* Intentional fallthrough */ - case FUSB_SUPER_SPEED_PLUS: - default: - return 512; - } -} - -/** - * @name: FUsbDecodeInterval - * @msg: 获取USB传输间隔时间 - * @return {int} 传输间隔时间, 0表示失败 - * @param {FUsbSpeed} speed, USB设备速度类型 - * @param {FUsbEpType} type, 端点类型 - * @param {unsigned char} bInterval, 设置的间隔时间 - */ -static int FUsbDecodeInterval(FUsbSpeed speed, const FUsbEpType type, const unsigned char bInterval) -{ - /* Normalize bInterval to log2 of microframes */ -#define LOG2(a) ((sizeof(unsigned) << 3) - __builtin_clz(a) - 1) - switch (speed) - { - case FUSB_LOW_SPEED: - switch (type) - { - case FUSB_ISOCHRONOUS_EP: - case FUSB_INTERRUPT_EP: - return LOG2(bInterval) + 3; - default: - return 0; - } - case FUSB_FULL_SPEED: - switch (type) - { - case FUSB_ISOCHRONOUS_EP: - return (bInterval - 1) + 3; - case FUSB_INTERRUPT_EP: - return LOG2(bInterval) + 3; - default: - return 0; - } - case FUSB_HIGH_SPEED: - switch (type) - { - case FUSB_ISOCHRONOUS_EP: - case FUSB_INTERRUPT_EP: - return bInterval - 1; - default: - return LOG2(bInterval); - } - case FUSB_SUPER_SPEED: - /* Intentional fallthrough */ - case FUSB_SUPER_SPEED_PLUS: - switch (type) - { - case FUSB_ISOCHRONOUS_EP: - case FUSB_INTERRUPT_EP: - return bInterval - 1; - default: - return 0; - } - default: - return 0; - } -#undef LOG2 -} - -/** - * @name: FUsbSetAddress - * @msg: 获取USB设备的描述符信息,根据USB设备类型完成配置和初始化 - * @return {FUsbDevAddr} 为USB设备分配的地址,-1表示USB设备初始化失败 - * @param {FUsbHc} *controller, USB控制器实例 - * @param {FUsbSpeed} speed, USB设备速度类型 - * @param {int} hubport, USB设备连接的Hub端口号 - * @param {int} hubaddr, USB设备连接Hub的地址 - */ -static FUsbDevAddr FUsbSetAddress(FUsbHc *controller, FUsbSpeed speed, int hubport, int hubaddr) -{ - FASSERT(controller); - FUsbDev *dev = controller->set_address(controller, speed, - hubport, hubaddr); - FUsbDevIndex index; - FUsbDevInitHandler init_handler = NULL; - - FUsb *instace = controller->usb; - FASSERT(instace); - if (NULL == dev) - { - FUSB_INFO("Set address failed."); - return FUSB_NO_DEV_ADDR; - } - - FASSERT(NULL == dev->descriptor); - dev->descriptor = FUSB_ALLOCATE(instace, sizeof(*dev->descriptor), FUSB_DEFAULT_ALIGN); - if ((NULL == dev->descriptor) || FUsbGetDescriptor(dev, FUSB_DR_DESC, FUSB_DESC_TYPE_DEVICE, 0, - dev->descriptor, sizeof(*dev->descriptor)) != sizeof(*dev->descriptor)) - { - FUSB_INFO("FUsbGetDescriptor(FUSB_DESC_TYPE_DEVICE) failed."); - FUsbDetachDev(controller, dev->address); - return FUSB_NO_DEV_ADDR; - } - - FUSB_INFO("Found device (0x%04x:0x%04x, USB %x.%x, MPS0: %d) ", - dev->descriptor->idVendor, dev->descriptor->idProduct, - dev->descriptor->bcdUSB >> 8, dev->descriptor->bcdUSB & 0xff, - dev->endpoints[0].maxpacketsize); - - FUSB_INFO("Device has %d configurations.", - dev->descriptor->bNumConfigurations); - if (dev->descriptor->bNumConfigurations == 0) - { - /* device isn't usable */ - FUSB_INFO("No usable configuration!"); - FUsbDetachDev(controller, dev->address); - return FUSB_NO_DEV_ADDR; - } - - u16 buf[2]; - if (FUsbGetDescriptor(dev, FUSB_DR_DESC, FUSB_DESC_TYPE_CONFIG, 0, buf, sizeof(buf)) != sizeof(buf)) - { - FUSB_INFO("First FUsbGetDescriptor(FUSB_DESC_TYPE_CONFIG) failed."); - FUsbDetachDev(controller, dev->address); - return FUSB_NO_DEV_ADDR; - } - - /* workaround for some USB devices: wait until they're ready, or - * they send a NAK when they're not allowed to do. 1ms is enough */ - fsleep_millisec(1); - FASSERT(NULL == dev->configuration); - dev->configuration = FUSB_ALLOCATE(instace, buf[1], FUSB_DEFAULT_ALIGN); - if (NULL == dev->configuration) - { - FUSB_INFO("Could not allocate %d bytes for FUSB_DESC_TYPE_CONFIG.", buf[1]); - FUsbDetachDev(controller, dev->address); - return FUSB_NO_DEV_ADDR; - } - - if (FUsbGetDescriptor(dev, FUSB_DR_DESC, FUSB_DESC_TYPE_CONFIG, 0, dev->configuration, - buf[1]) != buf[1]) - { - FUSB_INFO("FUsbGetDescriptor(FUSB_DESC_TYPE_CONFIG) failed."); - FUsbDetachDev(controller, dev->address); - return FUSB_NO_DEV_ADDR; - } - - FUsbConfigurationDescriptor *cd = dev->configuration; - if (cd->wTotalLength != buf[1]) - { - FUSB_INFO("Configuration descriptor size changed, aborting."); - FUsbDetachDev(controller, dev->address); - return FUSB_NO_DEV_ADDR; - } - - /* - * If the device is not well known (ifnum == -1), we use the first - * interface we encounter, as there was no need to implement something - * else for the time being. If you need it, see the SetInterface and - * GetInterface functions in the USB specification and set it yourself. - */ - FUSB_INFO("Device has %x interfaces.", cd->bNumInterfaces); - - u8 *end = (void *)dev->configuration + cd->wTotalLength; - FUsbInterfaceDescriptor *intf; - u8 *ptr; - - /* Find our interface (or the first good one if we don't know) */ - for (ptr = (void *)dev->configuration + sizeof(*cd);; ptr += ptr[0]) - { - if (ptr + 2 > end || !ptr[0] || ptr + ptr[0] > end) - { - FUSB_INFO("Couldn't find usable FUSB_DESC_TYPE_INTERFACE."); - FUsbDetachDev(controller, dev->address); - return FUSB_NO_DEV_ADDR; - } - - if (ptr[1] != FUSB_DESC_TYPE_INTERFACE) - { - continue; - } - - intf = (void *)ptr; - if (intf->bLength != sizeof(*intf)) - { - FUSB_INFO("Skipping broken FUSB_DESC_TYPE_INTERFACE."); - continue; - } - - FUSB_INFO("Interface %d: class 0x%x, sub 0x%x. proto 0x%x.", - intf->bInterfaceNumber, intf->bInterfaceClass, - intf->bInterfaceSubClass, intf->bInterfaceProtocol); - ptr += sizeof(*intf); - - break; - } - - /* Gather up all endpoints belonging to this interface */ - dev->num_endp = 1; - for (; ptr + 2 <= end && ptr[0] && ptr + ptr[0] <= end; ptr += ptr[0]) - { - if (ptr[1] == FUSB_DESC_TYPE_INTERFACE || ptr[1] == FUSB_DESC_TYPE_CONFIG || - (size_t)dev->num_endp >= ARRAY_SIZE(dev->endpoints)) - { - break; - } - - if (ptr[1] != FUSB_DESC_TYPE_ENDPOINT) - { - continue; - } - - FUsbEndpointDescriptor *desc = (void *)ptr; - static const char *transfertypes[4] = - { - "control", "isochronous", "bulk", "interrupt" - }; - FUSB_INFO(" #Endpoint %d (%s), max packet size %x, type %s ", - desc->bEndpointAddress & 0x7f, - (desc->bEndpointAddress & 0x80) ? "in" : "out", - desc->wMaxPacketSize, - transfertypes[desc->bmAttributes & 0x3]); - - FUsbEndpoint *ep = &dev->endpoints[dev->num_endp++]; - ep->dev = dev; - ep->endpoint = desc->bEndpointAddress; - ep->toggle = 0; - ep->maxpacketsize = desc->wMaxPacketSize; - ep->direction = (desc->bEndpointAddress & 0x80) ? FUSB_IN : FUSB_OUT; - ep->type = desc->bmAttributes & 0x3; - ep->interval = FUsbDecodeInterval(dev->speed, ep->type, - desc->bInterval); - } - - if ((controller->finish_device_config && - controller->finish_device_config(dev)) || - FUsbSetConfiguration(dev) < 0) - { - FUSB_INFO("Could not finalize device configuration. "); - FUsbDetachDev(controller, dev->address); - return FUSB_NO_DEV_ADDR; - } - - int class = dev->descriptor->bDeviceClass; - if (class == 0) - { - class = intf->bInterfaceClass; - } - - switch (class) - { - case FUSB_AUDIO_DEVICE: - FUSB_INFO("Audio Class "); - break; - case FUSB_COMM_DEVICE: - FUSB_INFO("Communication Class "); - break; - case FUSB_HID_DEVICE: - FUSB_INFO("HID Class "); - break; - case FUSB_PHYSICAL_DEVICE: - FUSB_INFO("Physical Class"); - break; - case FUSB_IMAGE_DEVICE: - FUSB_INFO("Camera Class "); - break; - case FUSB_PRINTER_DEVICE: - FUSB_INFO("Printer Class"); - break; - case FUSB_MASS_STORAGE_DEVICE: - FUSB_INFO("Mass Storage Class "); - break; - case FUSB_HUB_DEVICE: - FUSB_INFO("Hub Class "); - break; - default: - FUSB_ERROR("Unsupported Class %x ", class); - break; - } - - index.category = FUSB_STANDARD_INTERFACE; - index.class = class; - index.sub_class = intf->bInterfaceSubClass; - index.protocol = intf->bInterfaceProtocol; - - FUSB_INFO("Class: 0x%x sub-class: 0x%x, protocol: 0x%x.", - index.class, index.sub_class, index.protocol); - - init_handler = FUsbFindValidInitFunc(instace, &index); - if (NULL != init_handler) - { - dev->init = init_handler; - dev->class = (FUsbDevClass)class; - } - else - { - FUSB_WARN("Init function for the device not found, use generic one instead !!!"); - dev->init = FUsbGenericDevInit; - } - - return dev->address; -} - -/** - * @name: FUsbDetachDev - * @msg: 从USB主机移除指定USB设备(USB设备驱动使用) - * @return {*} - * @param {FUsbHc} *controller, USB控制器实例 - * @param {int} devno, USB设备索引 - * @note Should be called by the hub drivers whenever a physical detach occurs - * and can be called by USB class drivers if they are unsatisfied with a - * malfunctioning device. - */ -void FUsbDetachDev(FUsbHc *controller, int devno) -{ - FUsb *instace = controller->usb; - /* check if device exists, as we may have - been called yet by the USB class driver */ - if (controller->devices[devno]) - { - controller->devices[devno]->destroy(controller->devices[devno]); - - if (controller->destroy_device) - { - controller->destroy_device(controller, devno); - } - - FUSB_FREE(instace, controller->devices[devno]->descriptor); - controller->devices[devno]->descriptor = NULL; - FUSB_FREE(instace, controller->devices[devno]->configuration); - controller->devices[devno]->configuration = NULL; - - /* Tear down the device itself *after* destroy_device() - * has had a chance to interrogate it. */ - FUSB_FREE(instace, controller->devices[devno]); - controller->devices[devno] = NULL; - } - - return; -} - -/** - * @name: FUsbAttachDev - * @msg: 向USB主机添加USB设备(USB设备驱动使用) - * @return {FUsbDevAddr} 分配的USB设备地址 - * @param {FUsbHc} *controller, USB控制器实例 - * @param {int} hubaddress, Hub地址 - * @param {int} port, 连接的Port - * @param {FUsbSpeed} speed, USB设备的设置速度类型 - */ -FUsbDevAddr FUsbAttachDev(FUsbHc *controller, int hubaddress, int port, FUsbSpeed speed) -{ - static const char *speeds[] = {"FULL", "LOW", "HIGH", "SUPER", "ULTRA-SUPER"}; - FUSB_INFO("%s-Speed Device ", ((size_t)speed < sizeof(speeds) / sizeof(char *)) - ? speeds[speed] - : "Unkonwn"); - FUsbDevAddr newdev = FUsbSetAddress(controller, speed, port, hubaddress); - if (newdev == FUSB_NO_DEV_ADDR) - { - return FUSB_NO_DEV_ADDR; - } - - FUsbDev *newdev_t = controller->devices[newdev]; - - /* determine responsible driver - current done in set_address */ - newdev_t->init(newdev_t); - - /* init() may have called FUsbDetachDev() yet, so check */ - return controller->devices[newdev] ? newdev : FUSB_NO_DEV_ADDR; -} - -/** - * @name: FUsbGenericDestory - * @msg: 一般USB设备去初始化函数 - * @return {*} - * @param {FUsbDev} *dev, USB设备实例 - */ -static void FUsbGenericDestory(FUsbDev *dev) -{ - if (FUsbGenericRemove) - { - FUsbGenericRemove(dev); - } - - return; -} - -/** - * @name: FUsbGenericDevInit - * @msg: 默认的USB设备初始化函数 - * @return {*} - * @param {FUsbDev} *dev, USB设备实例 - */ -void FUsbGenericDevInit(FUsbDev *dev) -{ - dev->data = NULL; - dev->destroy = FUsbGenericDestory; - - if (FUsbGenericCreate) - { - FUsbGenericCreate(dev); - } - - if (dev->data == NULL) - { - FUSB_INFO("Detaching device not used by payload."); - FUsbDetachDev(dev->controller, dev->address); - } - - return; -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/usb/fusb.h b/bsp/phytium/libraries/standalone/drivers/usb/fusb.h deleted file mode 100644 index fde6391d31..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/usb/fusb.h +++ /dev/null @@ -1,398 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fusb.h - * Date: 2022-02-11 13:33:11 - * LastEditTime: 2022-02-18 09:22:25 - * Description:  This files is for definition of FUSB user interface - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/2/7 init commit - */ - -#ifndef FUSB_H -#define FUSB_H - -/***************************** Include Files *********************************/ -#include "ftypes.h" -#include "ferror_code.h" -#include "fassert.h" -#include "fusb_def.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/************************** Constant Definitions *****************************/ -#define FUSB_SUCCESS FT_SUCCESS -#define FUSB_ERR_WAIT_TIMEOUT FT_MAKE_ERRCODE(ErrModBsp, ErrUsb, 0x0) -#define FUSB_ERR_INVALID_PARA FT_MAKE_ERRCODE(ErrModBsp, ErrUsb, 0x1) -#define FUSB_ERR_NOT_SUPPORT FT_MAKE_ERRCODE(ErrModBsp, ErrUsb, 0x2) -#define FUSB_ERR_NON_INSTANCE FT_MAKE_ERRCODE(ErrModBsp, ErrUsb, 0x3) -#define FUSB_ERR_INVALID_DATA FT_MAKE_ERRCODE(ErrModBsp, ErrUsb, 0x4) -#define FUSB_ERR_DESC_PARSE_ERR FT_MAKE_ERRCODE(ErrModBsp, ErrUsb, 0x5) -#define FUSB_ERR_ALLOCATE_FAIL FT_MAKE_ERRCODE(ErrModBsp, ErrUsb, 0x6) -#define FUSB_ERR_TRANS_FAIL FT_MAKE_ERRCODE(ErrModBsp, ErrUsb, 0x7) - -/* SetAddress() recovery interval (USB 2.0 specification 9.2.6.3 */ -#define FUSB_SET_ADDRESS_MDELAY 2 - -/* - * USB sets an upper limit of 5 seconds for any transfer to be completed. - * - * Data originally from FUSB_HC_EHCI driver: - * Tested with some USB2.0 flash sticks: - * TUR turn around took about 2.2s for the slowest (13fe:3800), maximum - * of 250ms for the others. - * - * SET ADDRESS on xHCI controllers. - * The USB specification indicates that devices must complete processing - * of a SET ADDRESS request within 50 ms. However, some hubs were found - * to take more than 100 ms to complete a SET ADDRESS request on a - * downstream port. - */ -#define FUSB_USB_MAX_PROCESSING_TIME_US (5 * 1000 * 1000) -#define FUSB_FULL_LOW_SPEED_FRAME_US 1000 -#define FUSB_MAX_CTRL_NUM 1 -#define FUSB_MAX_DEV_TYPE_NUM 8 -#define FUSB_MAX_DEV_NUM 128 -#define FUSB_MAX_EP_NUM 32 -#define FUSB_MAX_SLOT_NUM FUSB_MAX_DEV_NUM - -#define FUSB_SLOT_ID_VALID(slot) ((0 <= (slot)) && (FUSB_MAX_SLOT_NUM > (slot))) - - -#define FUSB_DEFAULT_ALIGN 1 -#define FUSB_NO_DEV_ADDR -1 -#define FUSB_NO_HUB -1 -#define FUSB_NO_PORT -1 - -/**************************** Type Definitions *******************************/ - -typedef struct _FUsbDev FUsbDev; -typedef struct _FUsbHc FUsbHc; -typedef struct _FUsb FUsb; - -/* Transfer complete code for USB */ -enum -{ - FUSB_CC_ZERO_BYTES = 0, - FUSB_CC_SUCCESS = 1 - - /* for XHCI transfer complete code, please refer to e.g. FXHCI_CC_SUCCESS */ - /* be careful not define conflict CC code */ -}; - -/* less than 0 means error (implemented by usb Hc, e.g. FXhciTransCode), - greater or equal than 0 means bytes transfered */ -typedef int FUsbTransCode; - -typedef struct -{ - FUsbDev *dev; /* device instance of this endpoint */ - int endpoint; /* endpoint address ep0 = 0, epn = n */ - FUsbDirection direction; /* type or direction of ep */ - int toggle; /* ep state for some device to toggle */ - int maxpacketsize; /* max packet size for ep transfer */ - FUsbEpType type; /* transfer type of ep, control, bulk or so on */ - int interval; /* expressed as binary logarithm of the number - of microframes (i.e. t = 125us * 2^interval) */ -} FUsbEndpoint; /* encapsulates a single endpoint of an USB device */ -typedef struct -{ - const FUsbDescriptor *buf; - u32 buf_len; - boolean is_valid; - const FUsbDescriptor *end_pos; - const FUsbDescriptor *next_pos; - const FUsbDescriptor *cur_desc; - const FUsbDescriptor *err_pos; -} FUsbConfigParser; /* parser for configure descriptor */ - -typedef struct -{ -#define FUSB_USBSTR_MIN_LEN 4 - FUsbStringDescriptor *usb_str; -#define FUSB_STRDESC_BUF_MAX 64 - char str_buf[FUSB_STRDESC_BUF_MAX]; -} FUsbStringParser; /* parser for string descriptor */ - -typedef int FUsbDevAddr; - -typedef struct _FUsbDev -{ - FUsbHc *controller; /* Hc instance where device attached */ - FUsbEndpoint endpoints[FUSB_MAX_EP_NUM]; /* all Ep instance of device */ - int num_endp; /* num of Ep in use */ - FUsbDevAddr address; /* USB address */ - FUsbDevClass class; /* USB device class, e.g hid */ - int hub; /* hub where device is attached to */ - int port; /* port where device is attached */ - FUsbSpeed speed; /* speed type of device */ - void *data; /* private data for specific type of device */ - FUsbDeviceDescriptor *descriptor; /* device descriptor ever get from device hw */ - FUsbConfigurationDescriptor *configuration; /* configure descriptor followed with interface descriptor ever get from device hw */ - FUsbConfigParser config_parser; /* parser for configure descriptor */ - FUsbStringParser string_parser; /* parser for string descriptor */ - void (*init)(FUsbDev *dev); /* device init function of specific device type for register */ - void (*destroy)(FUsbDev *dev); /* device deinit function of specific device type for register */ - void (*poll)(FUsbDev *dev); /* device poll function of specific device type for register */ -} FUsbDev; /* encapsulates a single USB device */ - -typedef enum -{ - FUSB_HC_OHCI = 0, - FUSB_HC_UHCI = 1, - FUSB_HC_EHCI = 2, - FUSB_HC_XHCI = 3, - FUSB_HC_DWC2 = 4 -} FUsbHcType; - -typedef struct _FUsbHc -{ - uintptr reg_base; /* base address of Hc register */ - FUsb *usb; /* instance of USB system */ - FUsbHcType type; /* type of Hc, e.g XHCI */ - FUsbDev *devices[FUSB_MAX_DEV_NUM]; /* dev 0 is root hub, 127 is last addressable */ - - /* start(): Resume operation. */ - void (*start)(FUsbHc *controller); - /* stop(): Stop operation but keep controller initialized. */ - void (*stop)(FUsbHc *controller); - /* reset(): Perform a controller reset. The controller needs to - be (re)initialized afterwards to work (again). */ - FUsbTransCode(*reset)(FUsbHc *controller); - /* init(): Initialize a (previously reset) controller - to a working state. */ - void (*init)(FUsbHc *controller); - /* shutdown(): Stop operation, detach host controller and shutdown - this driver instance. After calling shutdown() any - other usage of this hci_t* is invalid. */ - void (*shutdown)(FUsbHc *controller); - - FUsbTransCode(*bulk)(FUsbEndpoint *ep, int size, u8 *data, int finalize); - FUsbTransCode(*control)(FUsbDev *dev, FUsbDirection pid, int dr_length, - void *devreq, int data_length, u8 *data); - void *(*create_intr_queue)(FUsbEndpoint *ep, int reqsize, int reqcount, int reqtiming); - void (*destroy_intr_queue)(FUsbEndpoint *ep, void *queue); - u8 *(*poll_intr_queue)(void *queue); - void *instance; /* instance to specific Hc implementation, e.g XHCI */ - - /* set_address(): Tell the USB device its address (xHCI - controllers want to do this by - themselves). Also, allocate the FUsbDev - structure, initialize enpoint 0 - (including MPS) and return it. */ - FUsbDev *(*set_address)(FUsbHc *controller, FUsbSpeed speed, - int hubport, int hubaddr); - /* finish_device_config(): Another hook for xHCI, returns 0 on success. */ - int (*finish_device_config)(FUsbDev *dev); - /* destroy_device(): Finally, destroy all structures that - were allocated during set_address() - and finish_device_config(). */ - void (*destroy_device)(FUsbHc *controller, int devaddr); -} FUsbHc; /* encapsulates a single USB host */ - -typedef struct -{ - void *(*malloc_align)(size_t size, size_t align); - void (*free)(void *mem); -} FUsbMemAllocator; /* memory allocator used in USB system */ - -typedef struct -{ - u32 instance_id; /* id for this USB system */ - uintptr base_addr; /* base addr of Hc register, set as 0 for pci-usb */ - u32 irq_num; - u32 irq_priority; - FUsbMemAllocator allocator; /* memory allocator to support dynamic memory */ -} FUsbConfig; /* configure data of the USB system */ - -typedef enum -{ - FUSB_STANDARD_INTERFACE, - FUSB_VENDOR_SPECIFIED -} FUsbDevCategory; - -typedef struct -{ - FUsbDevCategory category; - FUsbDevClass class; - u32 sub_class; - u32 protocol; -} FUsbDevIndex; - -typedef void (* FUsbDevInitHandler)(FUsbDev *dev); - -typedef struct -{ - FUsbDevIndex index; - FUsbDevInitHandler handler; -} FUsbDevInitFunc; - -typedef struct _FUsb -{ - FUsbConfig config; /* configuration of USB system */ - void *pcie_instance; /* NULL if unused */ - void *pcie_info[FUSB_MAX_CTRL_NUM]; /* NULL if unused */ - FUsbHc *hc; /* first hc, there might have multiple hc in pcie-mode */ - /* hook to set init function for specific device type */ - FUsbDevInitFunc dev_init[FUSB_MAX_DEV_TYPE_NUM]; - u32 dev_init_num; /* number of init function in used */ - u32 is_ready; /* indicator of system okay */ -} FUsb; /* instance of the USB system */ - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ -static FUsbDev *FUsbGetDevEntry(FUsbHc *controller, int dev_address) -{ - FASSERT(controller && controller->devices); - FUsbDev *result = NULL; - u32 loop; - - for (loop = 0; loop < FUSB_MAX_DEV_NUM; loop++) - { - if ((NULL != controller->devices[loop]) && (dev_address == controller->devices[loop]->address)) - { - result = controller->devices[loop]; - break; - } - } - - return result; -} - -/* - * returns the speed is above FUSB_SUPER_SPEED or not - */ -static inline boolean FUsbIsSuperSpeed(FUsbSpeed speed) -{ - return (speed == FUSB_SUPER_SPEED || speed == FUSB_SUPER_SPEED_PLUS); -} - -static inline unsigned char FUsbGenerateReqType(FUsbReqDirection dir, FUsbReqType type, FUsbReqRecpient recp) -{ - return (dir << 7) | (type << 5) | recp; -} - -/************************** Function Prototypes ******************************/ -/* 获取USB的默认配置 */ -const FUsbConfig *FUsbLookupConfig(u32 instance_id); - -/* 初始化USB实例 */ -FError FUsbCfgInitialize(FUsb *instance, const FUsbConfig *config); - -/* 去初始化USB实例 */ -void FUsbDeInitialize(FUsb *instance); - -/* 轮询所有的USB控制器连接的所有设备, 更新设备拓扑 */ -void FUsbPoll(FUsb *instance); - -/* 关闭所有的USB控制器,移除所有连接的设备 */ -void FUsbExit(FUsb *instance); - -/* 从USB内存池分配一块内存,并清零分配的空间 */ -void *FUsbMempAllocate(FUsb *instance, size_t size, size_t align); - -/* 释放从USB内存池分配的空间 */ -void FUsbMempFree(FUsb *instance, void *ptr); - -/* 指定特定USB设备的初始化函数,供创建USB设备实例时使用 */ -FError FUsbAssignDevInitFunc(FUsb *instance, const FUsbDevIndex *index, FUsbDevInitHandler handler); - -/* 获取USB控制器上连接的所有USB设备实例 */ -size_t FUsbGetAllDevEntries(FUsbHc *controller, FUsbDev *devs[], size_t max_dev_num); - -/* 标准USB主机请求,使能设备/接口/端点的某个特性 */ -FUsbTransCode FUsbSetFeature(FUsbDev *dev, int endp, int feature, int rtype); - -/* 标准USB主机请求,获取设备/接口/端点的状态 */ -FUsbTransCode FUsbGetStatus(FUsbDev *dev, int endp, int rtype, int len, void *data); - -/* 标准USB主机请求,获取指定描述符 */ -FUsbTransCode FUsbGetDescriptor(FUsbDev *dev, int rtype, FUsbDescriptorType descType, int descIdx, - void *data, size_t len); - -/* USB主机请求,获取字符串描述符 */ -FUsbTransCode FUsbGetStringDescriptor(FUsbDev *dev, int rtype, FUsbDescriptorType desc_type, int desc_idx, int lang_id, - void *data, size_t len); - -/* 标准USB主机请求,设置配置值 */ -FUsbTransCode FUsbSetConfiguration(FUsbDev *dev); - -/* 标准USB主机请求,去使能设备/接口/端点的某个特性 */ -FUsbTransCode FUsbClearFeature(FUsbDev *dev, int endp, int feature, int rtype); - -/* 打印描述符信息 */ -void FUsbDumpAllDescriptors(FUsbDev *dev); - -/* 从USB主机移除指定USB设备(USB设备驱动使用) */ -void FUsbDetachDev(FUsbHc *controller, int devno); - -/* 向USB主机添加USB设备(USB设备驱动使用) */ -FUsbDevAddr FUsbAttachDev(FUsbHc *controller, int hubaddress, int port, - FUsbSpeed speed); - -/** - * To be implemented by application. It's called by the USB - * stack just before iterating over known devices to poll them for - * status change. - */ -void __attribute__((weak)) FUsbPollPrepare(FUsb *instance); - -/** - * To be implemented by application. It's called by the USB - * stack just before exit known Hc. - */ -void __attribute__((weak)) FUsbExitPrepare(FUsb *instance); - -/** - * To be implemented by application. It's called by the USB stack - * when a new USB device is found which isn't claimed by a built in driver, - * so the client has the chance to know about it. - * - * @param dev descriptor for the USB device - */ -void __attribute__((weak)) FUsbGenericCreate(FUsbDev *dev); - -/** - * To be implemented by application. It's called by the USB stack - * when it finds out that a USB device is removed which wasn't claimed by a - * built in driver. - * - * @param dev descriptor for the USB device - */ -void __attribute__((weak)) FUsbGenericRemove(FUsbDev *dev); - -/* 支持带TAG的内存分配,用于跟踪动态内存使用 */ -#ifdef FMEMP_TAG_DEBUG -void *FUsbMempAllocateTag(FUsb *instance, size_t size, size_t align, const char *file, unsigned long line, const char *msg); -void FUsbMempFreeTag(FUsb *instance, void *ptr); - -#define FUSB_ALLOCATE(instance, size, align) FUsbMempAllocateTag((instance), (size), (align), __FILE__, __LINE__, "") -#define FUSB_FREE(instance, ptr) FUsbMempFreeTag((instance), (ptr)) -#else -#define FUSB_ALLOCATE(instance, size, align) FUsbMempAllocate((instance), (size), (align)) -#define FUSB_FREE(instance, ptr) FUsbMempFree((instance), (ptr)) -#endif - -#ifdef __cplusplus -} -#endif - - -#endif diff --git a/bsp/phytium/libraries/standalone/drivers/usb/fusb_debug.c b/bsp/phytium/libraries/standalone/drivers/usb/fusb_debug.c deleted file mode 100644 index ebb0c4924d..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/usb/fusb_debug.c +++ /dev/null @@ -1,242 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fusb_debug.c - * Date: 2022-02-11 13:33:11 - * LastEditTime: 2022-02-18 09:18:04 - * Description:  This files is for implmentation of USB debug utilities - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/2/7 init commit - */ - -#include "fdebug.h" - -#include "fusb_private.h" - -#define FUSB_DEBUG_TAG "FUSB_DEBUG" -#define FUSB_ERROR(format, ...) FT_DEBUG_PRINT_E(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) -#define FUSB_WARN(format, ...) FT_DEBUG_PRINT_W(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) -#define FUSB_INFO(format, ...) FT_DEBUG_PRINT_I(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) -#define FUSB_DEBUG(format, ...) FT_DEBUG_PRINT_D(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) - -static inline boolean FUsbIsValidStringIndex(u8 id) -{ - return (0 != id) && (0xff != id); -} - -/** - * @name: FUsbDumpAllDescriptors - * @msg: 打印USB设备的描述符信息(设备描述符,配置描述符和接口描述符) - * @return {*} - * @param {FUsbDev} *dev, USB设备实例,已完成初始化 - */ -void FUsbDumpAllDescriptors(FUsbDev *dev) -{ - FError ret = FUSB_SUCCESS; - if ((NULL == dev) || (NULL == dev->configuration)) - { - return; - } - - const FUsbDeviceDescriptor *dev_desc = NULL; - const FUsbConfigurationDescriptor *config_desc = NULL; - const FUsbInterfaceDescriptor *if_desc = NULL; - FASSERT(dev->controller && dev->controller->usb); - FUsb *instance = dev->controller->usb; - u8 if_num = 0; - u8 func_id = 0; - FUsbConfigParser *parser = &dev->config_parser; - - dev_desc = dev->descriptor; - config_desc = dev->configuration; - - /* init descriptor parser in each dump */ - ret = FUsbSetupConfigParser(dev, config_desc, config_desc->wTotalLength); - FUsbSetupStringParser(dev); - if (FUSB_SUCCESS != ret) - { - return; - } - - if (FUsbIsValidStringIndex(dev_desc->iManufacturer)) - { - ret = FUsbSearchStringDescriptor(instance, dev, dev_desc->iManufacturer); - if (FUSB_SUCCESS == ret) - { - printf(" Manufacturer: %s\r\n", FUsbGetString(dev)); - } - } - - if (FUsbIsValidStringIndex(dev_desc->iProduct)) - { - ret = FUsbSearchStringDescriptor(instance, dev, dev_desc->iProduct); - if (FUSB_SUCCESS == ret) - { - printf(" Product: %s\r\n", FUsbGetString(dev)); - } - } - - if (FUsbIsValidStringIndex(dev_desc->iSerialNumber)) - { - ret = FUsbSearchStringDescriptor(instance, dev, dev_desc->iSerialNumber); - if (FUSB_SUCCESS == ret) - { - printf(" Serial No.: %s\r\n", FUsbGetString(dev)); - } - } - - while (NULL != (if_desc = (const FUsbInterfaceDescriptor *)FUsbGetDescriptorFromParser(parser, FUSB_DESC_TYPE_INTERFACE))) - { - if (if_desc->bInterfaceNumber > if_num) - { - if_num = if_desc->bInterfaceNumber; - } - - if (if_desc->bInterfaceNumber != if_num) - { - FUSB_INFO("Alternate setting %u ignored", if_desc->bInterfaceNumber); - continue; - } - - if (FUsbIsValidStringIndex(if_desc->iInterface)) - { - ret = FUsbSearchStringDescriptor(instance, dev, if_desc->iInterface); - if (FUSB_SUCCESS == ret) - { - printf(" Interface: %s\r\n", FUsbGetString(dev)); - } - } - - } - - /* revoke descriptor parser after used */ - FUsbRevokeConfigParser(dev); - FUsbRevokeStringParser(dev); - - return; -} - -/** - * @name: FUsbDumpDeviceDescriptor - * @msg: 打印设备描述符信息 - * @return {*} - * @param {FUsbDeviceDescriptor} *descriptor, 设备描述符 - */ -void FUsbDumpDeviceDescriptor(const FUsbDeviceDescriptor *descriptor) -{ - if (NULL != descriptor) - { - FUSB_INFO(""); - FUSB_INFO("===Device Descriptor"); - FUSB_INFO(" bLength: %d", descriptor->bLength); - FUSB_INFO(" bDescriptorType: %d", descriptor->bDescriptorType); - FUSB_INFO(" bcdUSB: 0x%x", descriptor->bcdUSB); - FUSB_INFO(" bDeviceClass: %d", descriptor->bDeviceClass); - FUSB_INFO(" bDeviceSubClass: %d", descriptor->bDeviceSubClass); - FUSB_INFO(" bDeviceProtocol: %d", descriptor->bDeviceProtocol); - FUSB_INFO(" bMaxPacketSize0: %d", descriptor->bMaxPacketSize0); - FUSB_INFO(" idVendor: 0x%x", descriptor->idVendor); - FUSB_INFO(" idProduct: 0x%x", descriptor->idProduct); - FUSB_INFO(" bcdDevice: 0x%x", descriptor->bcdDevice); - FUSB_INFO(" iManufacturer: %d", descriptor->iManufacturer); - FUSB_INFO(" iSerialNumber: %d", descriptor->iSerialNumber); - FUSB_INFO(" bNumConfigurations: %d", descriptor->bNumConfigurations); - FUSB_INFO(""); - } -} - -/** - * @name: FUsbDumpConfigDescriptor - * @msg: 打印配置描述符信息 - * @return {*} - * @param {FUsbConfigurationDescriptor} *descriptor, 配置描述符 - */ -void FUsbDumpConfigDescriptor(const FUsbConfigurationDescriptor *descriptor) -{ - if (NULL != descriptor) - { - FUSB_INFO(""); - FUSB_INFO("===Configure Descriptor"); - FUSB_INFO(" bLength: %d", descriptor->bLength); - FUSB_INFO(" bDescriptorType: %d", descriptor->bDescriptorType); - FUSB_INFO(" wTotalLength: %d", descriptor->wTotalLength); - FUSB_INFO(" bNumInterfaces: %d", descriptor->bNumInterfaces); /* 该配置下有多少个接口描述符 */ - FUSB_INFO(" bConfigurationValue: %d", descriptor->bConfigurationValue); /* 该配置描述符的配置号信息 */ - FUSB_INFO(" iConfiguration: %d", descriptor->iConfiguration); - FUSB_INFO(" bmAttributes: 0x%x", descriptor->bmAttributes); - FUSB_INFO(" remote-weakup: %s", - (descriptor->bmAttributes & FUSB_CONFIG_DESC_ATTR_REMOTE_WEAKUP) ? "yes" : "no"); - FUSB_INFO(" self-power: %s", - (descriptor->bmAttributes & FUSB_CONFIG_DESC_ATTR_SELF_POWER) ? "yes" : "no"); - FUSB_INFO(" usb1.0-compatible: %s", - (descriptor->bmAttributes & FUSB_CONFIG_DESC_ATTR_USB1_COMPATIABLE) ? "yes" : "no"); - FUSB_INFO(" max power: %dmA", 2 * (descriptor->bMaxPower)); - FUSB_INFO(" "); - } -} - -/** - * @name: FUsbDumpInterfaceDescriptor - * @msg: 打印接口描述符信息 - * @return {*} - * @param {FUsbInterfaceDescriptor} *descriptor, 接口描述符 - */ -void FUsbDumpInterfaceDescriptor(const FUsbInterfaceDescriptor *descriptor) -{ - if (NULL != descriptor) - { - FUSB_INFO(""); - FUSB_INFO("===Interface Descriptor"); - FUSB_INFO(" bLength: %d", descriptor->bLength); - FUSB_INFO(" bDescriptorType: %d", descriptor->bDescriptorType); - FUSB_INFO(" bInterfaceNumber: %d", descriptor->bInterfaceNumber); - FUSB_INFO(" bAlternateSetting: %d", descriptor->bAlternateSetting); - FUSB_INFO(" bNumEndpoints: %d", descriptor->bNumEndpoints); - FUSB_INFO(" bInterfaceClass: %d", descriptor->bInterfaceClass); - FUSB_INFO(" bInterfaceSubClass: %d", descriptor->bInterfaceSubClass); - FUSB_INFO(" bInterfaceProtocol: %d", descriptor->bInterfaceProtocol); - FUSB_INFO(" iInterface: %d", descriptor->iInterface); - FUSB_INFO(" "); - } -} - -/** - * @name: FUsbDumpEndpointDescriptor - * @msg: 打印端点描述符信息 - * @return {*} - * @param {FUsbEndpointDescriptor} *descriptor, 端点描述符 - */ -void FUsbDumpEndpointDescriptor(const FUsbEndpointDescriptor *descriptor) -{ - if (NULL != descriptor) - { - FUSB_INFO(""); - FUSB_INFO("===Endpoint Descriptor"); - FUSB_INFO(" bLength: %d", descriptor->bLength); - FUSB_INFO(" bDescriptorType: %d", descriptor->bDescriptorType); - FUSB_INFO(" bEndpointAddress: %d", descriptor->bEndpointAddress); - FUSB_INFO(" ep num: %d", FUSB_EP_DESC_EP_NUM(descriptor->bEndpointAddress)); - FUSB_INFO(" ep dir: %s", - (FUSB_EP_DESC_EP_DIR_IN & descriptor->bEndpointAddress) ? "IN" : "OUT"); - FUSB_INFO(" bmAttributes: 0x%x", descriptor->bmAttributes); - FUSB_INFO(" trans type: %d ([0]-%s, [1]-%s, [2]-%s, [3]-%s)", - FUSB_EP_DESC_TRANS_TYPE(descriptor->bmAttributes), - "control", "isochronous", "bulk", "interrupt"); - FUSB_INFO(" wMaxPacketSize: %d", descriptor->wMaxPacketSize); - FUSB_INFO(" bInterval: %d", descriptor->bInterval); - FUSB_INFO(" "); - } -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/usb/fusb_def.h b/bsp/phytium/libraries/standalone/drivers/usb/fusb_def.h deleted file mode 100644 index f2c453d89b..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/usb/fusb_def.h +++ /dev/null @@ -1,289 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fusb_def.h - * Date: 2022-02-11 13:33:11 - * LastEditTime: 2022-02-18 09:18:24 - * Description:  This files is for definition of spec defined USB data structure - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/2/7 init commit - */ - -#ifndef FUSB_DEF_H -#define FUSB_DEF_H - -/***************************** Include Files *********************************/ - -#include "ftypes.h" - - -#ifdef __cplusplus -extern "C" -{ -#endif - -/************************** Constant Definitions *****************************/ -typedef enum -{ - FUSB_UNKNOWN_SPEED = -1, - FUSB_FULL_SPEED = 0, - FUSB_LOW_SPEED = 1, - FUSB_HIGH_SPEED = 2, - FUSB_SUPER_SPEED = 3, - FUSB_SUPER_SPEED_PLUS = 4, -} FUsbSpeed; - -typedef enum -{ - FUSB_REQ_HOST_TO_DEVICE = 0, - FUSB_REQ_DEVICE_TO_HOST = 1 -} FUsbReqDirection; - -typedef enum -{ - FUSB_REQ_TYPE_STANDARD = 0, - FUSB_REQ_TYPE_CLASS = 1, - FUSB_REQ_TYPE_VENDOR = 2, - FUSB_REQ_TYPE_RESERVED = 3 -} FUsbReqType; - -typedef enum -{ - FUSB_REQ_RECP_DEV = 0, - FUSB_REQ_RECP_IF = 1, - FUSB_REQ_RECP_EP = 2, - FUSB_REQ_RECP_OTHER = 3 -} FUsbReqRecpient; - -/* refer to Table 9-5. Descriptor Types in USB spec. for details */ -typedef enum -{ - FUSB_DESC_TYPE_NONE = 0, - FUSB_DESC_TYPE_DEVICE = 1, - FUSB_DESC_TYPE_CONFIG = 2, - FUSB_DESC_TYPE_STRING = 3, - FUSB_DESC_TYPE_INTERFACE = 4, - FUSB_DESC_TYPE_ENDPOINT = 5, - FUSB_DESC_TYPE_HUB = 41, - FUSB_DESC_TYPE_SUPER_SPEED_HUB = 42 -} FUsbDescriptorType; - -typedef enum -{ - FUSB_GET_STATUS = 0, - FUSB_CLEAR_FEATURE = 1, - FUSB_SET_FEATURE = 3, - FUSB_SET_ADDRESS = 5, - FUSB_GET_DESCRIPTOR = 6, - FUSB_SET_DESCRIPTOR = 7, - FUSB_GET_CONFIGURATION = 8, - FUSB_SET_CONFIGURATION = 9, - FUSB_GET_INTERFACE = 10, - FUSB_SET_INTERFACE = 11, - FUSB_SYNCH_FRAME = 12 -} FUsbRequestCode; - -typedef enum -{ - FUSB_ENDPOINT_HALT = 0, - FUSB_DEVICE_REMOTE_WAKEUP = 1, - FUSB_TEST_MODE = 2 -} FUsbFeatureSelectors; - -typedef enum -{ - FUSB_SETUP, - FUSB_IN, - FUSB_OUT -} FUsbDirection; - -typedef enum -{ - FUSB_CONTROL_EP = 0, - FUSB_ISOCHRONOUS_EP = 1, - FUSB_BULK_EP = 2, - FUSB_INTERRUPT_EP = 3 -} FUsbEpType; - -typedef enum -{ - FUSB_UNKOWN_DEVICE = 0x0, - FUSB_AUDIO_DEVICE = 0x01, - FUSB_COMM_DEVICE = 0x02, - FUSB_HID_DEVICE = 0x03, - FUSB_PHYSICAL_DEVICE = 0x05, - FUSB_IMAGE_DEVICE = 0x06, - FUSB_PRINTER_DEVICE = 0x07, - FUSB_MASS_STORAGE_DEVICE = 0x08, - FUSB_HUB_DEVICE = 0x09, -} FUsbDevClass; /* definition of device class */ - -/**************************** Type Definitions *******************************/ - -/* following data structure is defined according to spec. name their member - may not compliant with code convention */ -typedef struct -{ - unsigned char bDescLength; - unsigned char bDescriptorType; - unsigned char bNbrPorts; /* Number of downstream facing ports supports */ - union - { - struct - { - unsigned long logicalPowerSwitchingMode: 2; /* BIT[1:0] */ - unsigned long isCompoundDevice: 1; /* BIT[2] */ - unsigned long overcurrentProtectionMode: 2; /* BIT[4:3] */ - unsigned long ttThinkTime: 2; /* BIT[6:5] */ - unsigned long arePortIndicatorsSupported: 1; /* BIT[7] */ - unsigned long: 8; - } __attribute__((packed)); - unsigned short wHubCharacteristics; - } __attribute__((packed)); - unsigned char bPowerOn2PwrGood; /* in 2 ms intervals */ - unsigned char bHubContrCurrent; /* max current requirements */ - char DeviceRemovable[]; /* indicates if a port has a removable device attached */ -} __attribute__((packed)) FUsbHubDescriptor; - -typedef struct -{ - unsigned char bLength; - unsigned char bDescriptorType; - unsigned short bcdUSB; - unsigned char bDeviceClass; - unsigned char bDeviceSubClass; - unsigned char bDeviceProtocol; - unsigned char bMaxPacketSize0; - unsigned short idVendor; - unsigned short idProduct; - unsigned short bcdDevice; - unsigned char iManufacturer; - unsigned char iProduct; - unsigned char iSerialNumber; - unsigned char bNumConfigurations; -} __attribute__((packed)) FUsbDeviceDescriptor; - -typedef struct -{ - unsigned char bLength; - unsigned char bDescriptorType; - unsigned short wTotalLength; - unsigned char bNumInterfaces; - unsigned char bConfigurationValue; - unsigned char iConfiguration; - unsigned char bmAttributes; -#define FUSB_CONFIG_DESC_ATTR_REMOTE_WEAKUP BIT(5) /* 1: remote wakeup feature */ -#define FUSB_CONFIG_DESC_ATTR_SELF_POWER BIT(6) /* 1: self-powered 0: bus-powered */ -#define FUSB_CONFIG_DESC_ATTR_USB1_COMPATIABLE BIT(7) /* 1: compatibility with USB 1.0 */ - unsigned char bMaxPower; - /* configuration descriptor may follow more buffers, need to allocate dynamic memory for all contents */ -} __attribute__((packed)) FUsbConfigurationDescriptor; - -typedef struct -{ - unsigned char bLength; - unsigned char bDescriptorType; - unsigned char bInterfaceNumber; - unsigned char bAlternateSetting; - unsigned char bNumEndpoints; - unsigned char bInterfaceClass; - unsigned char bInterfaceSubClass; - unsigned char bInterfaceProtocol; - unsigned char iInterface; -} __attribute__((packed)) FUsbInterfaceDescriptor; - -typedef struct -{ - unsigned char bLength; - unsigned char bDescriptorType; - unsigned char bEndpointAddress; - /* Low-speed devices can have a maximum of 3 endpoint, other devices can have 16 (0–15) */ -#define FUSB_EP_DESC_EP_NUM(x) (GENMASK(3, 0) & (x)) /* endpoint number */ -#define FUSB_EP_DESC_EP_DIR_IN BIT(7) /* direction, 0: OUT, 1: IN */ - unsigned char bmAttributes; -#define FUSB_EP_DESC_TRANS_TYPE(x) (GENMASK(1, 0) & (x)) -#define FUSB_EP_DESC_TRANS_CTRL 0b00 /* control */ -#define FUSB_EP_DESC_TRANS_ISOC 0b01 /* isochronous */ -#define FUSB_EP_DESC_TRANS_BULK 0b10 /* bulk */ -#define FUSB_EP_DESC_TRANS_INTR 0b11 /* interrupt */ - unsigned short wMaxPacketSize; -#define FUSB_EP_DESC_MAX_PACKET_SZ GENMASK(10, 0) - unsigned char bInterval; -} __attribute__((packed)) FUsbEndpointDescriptor; - -typedef union -{ - struct - { - u8 len; - u8 type; - } header; -#define FUSB_DESCRIPTOR_HEADER_SIZE 2 - FUsbConfigurationDescriptor configuration; - FUsbInterfaceDescriptor interface; - FUsbEndpointDescriptor endpoint; -} __attribute__((packed)) FUsbDescriptor; - -typedef struct -{ - unsigned char bLength; - unsigned char bDescriptorType; - unsigned short bcdHID; - unsigned char bCountryCode; - unsigned char bNumDescriptors; - unsigned char bReportDescriptorType; - unsigned short wReportDescriptorLength; -} __attribute__((packed)) FUsbHidDescriptor; - -typedef struct -{ - u8 len; /* Descriptor size in bytes (variable) */ - u8 type; /* The constant String (0x03 DESCRIPTOR_STRING) */ - u16 string[0]; /* Unicode UTF- 16LE string */ -} __attribute__((packed)) FUsbStringDescriptor; - -typedef struct -{ - union - { - struct - { - FUsbReqRecpient req_recp: 5; - FUsbReqType req_type: 2; - FUsbReqDirection data_dir: 1; - } __attribute__((packed)); - unsigned char bmRequestType; - } __attribute__((packed)); - unsigned char bRequest; - unsigned short wValue; - unsigned short wIndex; - unsigned short wLength; -} __attribute__((packed)) FUsbDevReq; - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ -#define FUSB_DEFAULT_LANG_ID 0x409 /* English */ - -/************************** Function Prototypes ******************************/ - - -#ifdef __cplusplus -} -#endif - - -#endif \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/usb/fusb_dev.c b/bsp/phytium/libraries/standalone/drivers/usb/fusb_dev.c deleted file mode 100644 index dad3877a3c..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/usb/fusb_dev.c +++ /dev/null @@ -1,447 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fusb_dev.c - * Date: 2022-02-11 13:33:11 - * LastEditTime: 2022-02-18 09:18:45 - * Description:  This files is for USB device function implementation - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/2/7 init commit - */ - -#include -#include "fdebug.h" -#include "fusb_private.h" - -#define FUSB_DEBUG_TAG "FUSB-DEV" -#define FUSB_ERROR(format, ...) FT_DEBUG_PRINT_E(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) -#define FUSB_WARN(format, ...) FT_DEBUG_PRINT_W(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) -#define FUSB_INFO(format, ...) FT_DEBUG_PRINT_I(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) -#define FUSB_DEBUG(format, ...) FT_DEBUG_PRINT_D(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) - -#define FUSB_DR_DESC FUsbGenerateReqType(FUSB_REQ_DEVICE_TO_HOST, FUSB_REQ_TYPE_STANDARD, FUSB_REQ_RECP_DEV) - -#define FUSB_SKIP_BYTES(desc, bytes) ((FUsbDescriptor *) ((u8 *) (desc) + (bytes))) -#define FUSB_CONFIG_DESC_SIZE 512 /* best guess */ - -static void FUsbNopDevDestory(FUsbDev *dev) -{ - FUsbNopDevInit(dev); - dev->address = FUSB_NO_DEV_ADDR; - dev->hub = FUSB_NO_HUB; - dev->port = FUSB_NO_PORT; -} - -static void FUsbNopDevPoll(FUsbDev *dev) -{ - return; -} - -/** - * @name: FUsbNopDevInit - * @msg: 默认的USB设备初始化函数 - * @return {*} - * @param {FUsbDev} *dev, USB设备实例 - */ -void FUsbNopDevInit(FUsbDev *dev) -{ - dev->descriptor = NULL; - dev->configuration = NULL; - dev->destroy = FUsbNopDevDestory; - dev->poll = FUsbNopDevPoll; -} - -static inline boolean FUsbParserIsValid(const FUsbConfigParser *parser) -{ - FASSERT(parser); - return parser->is_valid; -} - -static FError FUsbParserDescriptor(FUsbConfigParser *parser) -{ - FASSERT(parser && parser->buf); - const FUsbDescriptor *cur_pos = parser->buf; - const FUsbDescriptor *desc_end; - FUsbDescriptorType last_desc_type = FUSB_DESC_TYPE_NONE; - FUsbDescriptorType desc_type; - u8 desc_len, exp_len, alt_len; - FError ret = FUSB_SUCCESS; - - while (FUSB_SKIP_BYTES(cur_pos, FUSB_DESCRIPTOR_HEADER_SIZE) < parser->end_pos) - { - /* get length and type of descriptor */ - desc_len = cur_pos->header.len; - desc_type = cur_pos->header.type; - - desc_end = FUSB_SKIP_BYTES(cur_pos, desc_len); - if (desc_end > parser->end_pos) - { - FUSB_ERROR("Parse descriptor out of boundary !!!"); - parser->err_pos = cur_pos; - ret = FUSB_ERR_DESC_PARSE_ERR; - goto err_handle; - } - - exp_len = 0; - alt_len = 0; - switch (desc_type) - { - case FUSB_DESC_TYPE_CONFIG: - if (FUSB_DESC_TYPE_NONE != last_desc_type) - { - FUSB_ERROR("Configuration descriptor must be the first !!!"); - parser->err_pos = cur_pos; - ret = FUSB_ERR_DESC_PARSE_ERR; - goto err_handle; - } - exp_len = sizeof(FUsbConfigurationDescriptor); - break; - case FUSB_DESC_TYPE_INTERFACE: - if (FUSB_DESC_TYPE_NONE == last_desc_type) - { - FUSB_ERROR("Interface descriptor must not be the first !!!"); - parser->err_pos = cur_pos; - ret = FUSB_ERR_DESC_PARSE_ERR; - goto err_handle; - } - exp_len = sizeof(FUsbInterfaceDescriptor); - break; - case FUSB_DESC_TYPE_ENDPOINT: - if ((FUSB_DESC_TYPE_NONE == last_desc_type) || - (FUSB_DESC_TYPE_CONFIG == last_desc_type)) - { - FUSB_ERROR("Endpoint descriptor must follow interface descriptor !!!"); - parser->err_pos = cur_pos; - ret = FUSB_ERR_DESC_PARSE_ERR; - goto err_handle; - } - break; - default: - FUSB_DEBUG("Descriptor %d not handled !!!", desc_type); - break; - } - - if (((exp_len != 0) && (desc_len != exp_len)) && - ((alt_len == 0) || (desc_len != alt_len))) - { - FUSB_ERROR("Descriptor %d invalid !!!", desc_type); - parser->err_pos = cur_pos; - ret = FUSB_ERR_DESC_PARSE_ERR; - goto err_handle; - } - - last_desc_type = desc_type; - cur_pos = desc_end; - } - - if (cur_pos != parser->end_pos) - { - parser->err_pos = cur_pos; - ret = FUSB_ERR_DESC_PARSE_ERR; - goto err_handle; - } - -err_handle: - if (FUSB_SUCCESS == ret) - { - parser->is_valid = TRUE; - } - - return ret; -} - -/** - * @name: FUsbSetupConfigParser - * @msg: 配置USB配置描述符解析器 - * @return {*} - * @param {FUsbDev} *dev, USB设备实例 - * @param {void} *buf, 配置描述符缓冲区 - * @param {u32} buf_len, 配置描述符缓冲区长度 - */ -FError FUsbSetupConfigParser(FUsbDev *dev, const void *buf, u32 buf_len) -{ - FASSERT(dev && buf && (buf_len > 0)); - const FUsbConfigurationDescriptor *config_desc; - FUsbConfigParser *parser = &dev->config_parser; - - memset(parser, 0, sizeof(*parser)); - - parser->buf = buf; - parser->buf_len = buf_len; - parser->is_valid = FALSE; - parser->end_pos = FUSB_SKIP_BYTES(parser->buf, parser->buf_len); - parser->next_pos = parser->buf; - parser->cur_desc = NULL; - parser->err_pos = parser->buf; - - if ((parser->buf_len < sizeof(u32)) || (parser->buf_len > FUSB_CONFIG_DESC_SIZE)) - { - FUSB_ERROR("Invalid buffer length !!!"); - return FUSB_ERR_INVALID_DATA; - } - - /* input buffer must start with config desc */ - config_desc = (FUsbConfigurationDescriptor *)parser->buf; - if ((config_desc->bLength != sizeof(FUsbConfigurationDescriptor)) || - (config_desc->bDescriptorType != FUSB_DESC_TYPE_CONFIG) || - (config_desc->wTotalLength > parser->buf_len)) - { - FUSB_ERROR("Invalid configuration descriptor !!!"); - return FUSB_ERR_INVALID_DATA; - } - - /* adjust end position */ - if (config_desc->wTotalLength < parser->buf_len) - { - parser->end_pos = FUSB_SKIP_BYTES(parser->buf, config_desc->wTotalLength); - } - - return FUsbParserDescriptor(parser); -} - -/** - * @name: FUsbRevokeConfigParser - * @msg: 去初始化USB配置描述符解析器 - * @return {*} - * @param {FUsbDev} *dev, USB设备实例 - */ -void FUsbRevokeConfigParser(FUsbDev *dev) -{ - FASSERT(dev); - memset(&dev->config_parser, 0, sizeof(dev->config_parser)); - return; -} - -/** - * @name: FUsbGetDescriptorFromParser - * @msg: 从配置描述符解析器中获取指定类型的描述符(端点描述符/接口描述符) - * @return {const FUsbDescriptor *} 获取的描述符 - * @param {FUsbConfigParser} *parser, 配置描述符解析器 - * @param {FUsbDescriptorType} type, 获取描述符的类型 - */ -const FUsbDescriptor *FUsbGetDescriptorFromParser(FUsbConfigParser *parser, FUsbDescriptorType type) -{ - FASSERT(parser); - if (!FUsbParserIsValid(parser)) - { - FUSB_ERROR("Config parse is not valid !!!"); - return NULL; - } - - const FUsbDescriptor *result = NULL; - FUsbDescriptorType desc_type; - u8 desc_len; - const FUsbDescriptor *desc_end; - - /* travesal all descriptors */ - while (parser->next_pos < parser->end_pos) - { - desc_len = parser->next_pos->header.len; - desc_type = parser->next_pos->header.type; - - desc_end = FUSB_SKIP_BYTES(parser->next_pos, desc_len); - if (desc_end > parser->end_pos) - { - break; - } - - if ((FUSB_DESC_TYPE_ENDPOINT == type) && - (FUSB_DESC_TYPE_INTERFACE == desc_type)) - { - break; /* there is no chance to find endpoint desc after interface desc */ - } - - if (type == desc_type) - { - /* target desc found !!! */ - result = parser->next_pos; - parser->next_pos = desc_end; - break; - } - - parser->next_pos = desc_end;/* check next one */ - } - - if (NULL != result) - { - parser->err_pos = result; - } - - parser->cur_desc = result; - return result; -} - -/** - * @name: FUsbSetupStringParser - * @msg: 初始化字符串描述符解析器 - * @return {*} - * @param {FUsbDev} *dev, USB设备实例 - */ -void FUsbSetupStringParser(FUsbDev *dev) -{ - FASSERT(dev); - FUsbStringParser *parser = &dev->string_parser; - - if (NULL != parser->usb_str) - { - FUSB_WARN("String descriptor exists, might cause memory leakage !!!"); - } - - parser->usb_str = NULL; - memset(parser->str_buf, 0, sizeof(parser->str_buf)); - - return; -} - -/** - * @name: FUsbRevokeStringParser - * @msg: 去初始化字符串描述符解析器 - * @return {*} - * @param {FUsbDev} *dev, USB设备实例 - */ -void FUsbRevokeStringParser(FUsbDev *dev) -{ - FASSERT(dev); - FUsbStringParser *parser = &dev->string_parser; - FASSERT(dev->controller && dev->controller->usb); - FUsb *instance = dev->controller->usb; - - if (NULL != parser->usb_str) - { - FUSB_FREE(instance, parser->usb_str); - parser->usb_str = NULL; - } - - return; -} - -/** - * @name: FUsbSearchStringDescriptor - * @msg: 检索字符串描述符,保存在FUsbStringParser结构中 - * @return {*} - * @param {FUsb} *instance, USB实例 - * @param {FUsbDev} *dev, USB设备实例 - * @param {u8} id, 要获取字符串描述符的ID - */ -FError FUsbSearchStringDescriptor(FUsb *instance, FUsbDev *dev, u8 id) -{ - FASSERT(instance && dev); - FUsbStringParser *parser = &dev->string_parser; - const FUsbStringDescriptor *usb_str = NULL; - u8 total_len; - u8 char_num; - u16 character; - - /* re-malloc usb string desc buffer with length 4 */ - if (NULL != parser->usb_str) - { - FUSB_FREE(instance, parser->usb_str); - parser->usb_str = NULL; - } - - parser->usb_str = FUSB_ALLOCATE(instance, FUSB_USBSTR_MIN_LEN, FUSB_DEFAULT_ALIGN); - if (NULL == parser->usb_str) - { - return FUSB_ERR_ALLOCATE_FAIL; - } - - /* get header of string for the full length */ - if (FUsbGetStringDescriptor(dev, FUSB_DR_DESC, FUSB_DESC_TYPE_STRING, id, FUSB_DEFAULT_LANG_ID, - parser->usb_str, FUSB_USBSTR_MIN_LEN) < 0) - { - FUSB_ERROR("Parse string descriptor failed (len: %d) !!!", FUSB_USBSTR_MIN_LEN); - return FUSB_ERR_DESC_PARSE_ERR; - } - - /* check if string descriptor header is valid */ - total_len = parser->usb_str->len; - if ((total_len < FUSB_DESCRIPTOR_HEADER_SIZE) || - ((total_len & 1) != 0) || - (parser->usb_str->type != FUSB_DESC_TYPE_STRING)) - { - FUSB_ERROR("Get invalid string descriptor (len: %d) !!!", FUSB_USBSTR_MIN_LEN); - return FUSB_ERR_DESC_PARSE_ERR; - } - - /* return if no need to get more */ - if (total_len <= FUSB_USBSTR_MIN_LEN) - { - return FUSB_SUCCESS; - } - - /* re-malloc usb string desc buffer with full length */ - FASSERT(parser->usb_str); - FUSB_FREE(instance, parser->usb_str); - parser->usb_str = NULL; - - parser->usb_str = FUSB_ALLOCATE(instance, total_len, FUSB_DEFAULT_ALIGN); - if (NULL == parser->usb_str) - { - return FUSB_ERR_ALLOCATE_FAIL; - } - - /* get the whole string descriptor */ - if (FUsbGetStringDescriptor(dev, FUSB_DR_DESC, FUSB_DESC_TYPE_STRING, id, FUSB_DEFAULT_LANG_ID, - parser->usb_str, total_len) < 0) - { - FUSB_ERROR("Parse string descriptor failed (len: %d)!!!", total_len); - return FUSB_ERR_DESC_PARSE_ERR; - } - - if ((parser->usb_str->len < FUSB_DESCRIPTOR_HEADER_SIZE) || - ((parser->usb_str->len & 1) != 0) || - (parser->usb_str->type != FUSB_DESC_TYPE_STRING)) - { - FUSB_ERROR("Get invalid string descriptor (len: %d) !!!", total_len); - return FUSB_ERR_DESC_PARSE_ERR; - } - - /* convert into ASCII string */ - usb_str = parser->usb_str; - char_num = (usb_str->len - FUSB_DESCRIPTOR_HEADER_SIZE) / 2; /* in 16-bit way */ - - if (char_num >= FUSB_STRDESC_BUF_MAX - 1) - { - return FUSB_ERR_NOT_SUPPORT; - } - - for (u8 i = 0; i < char_num; i++) - { - character = usb_str->string[i]; - if (character < ' ' /* 0x20 */ - || character > '~') /* 0x7E */ - { - character = '_'; - } - - parser->str_buf[i] = (char)character; - } - - parser->str_buf[char_num] = '\0'; - return FUSB_SUCCESS; -} - -/** - * @name: FUsbGetString - * @msg: 获取刚刚检索到的字符串描述符内容 - * @return {const char *}, 字符串描述符中的内容 - * @param {FUsbDev} *dev, USB设备实例 - */ -const char *FUsbGetString(const FUsbDev *const dev) -{ - FASSERT(dev); - return (const char *)dev->string_parser.str_buf; -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/usb/fusb_g.c b/bsp/phytium/libraries/standalone/drivers/usb/fusb_g.c deleted file mode 100644 index a8f32188f0..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/usb/fusb_g.c +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fusb_g.c - * Date: 2022-02-11 13:33:11 - * LastEditTime: 2022-02-18 09:19:07 - * Description:  This files is for gloabl parameters - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/2/7 init commit - */ - -/***************************** Include Files *********************************/ -#include "fparameters.h" -#include "fusb_private.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ - -/************************** Variable Definitions *****************************/ -const FUsbConfig FUSBHC_CONFIG_TBL[FUSB3_NUM] = -{ - [FUSB3_ID_0] = - { - .instance_id = FUSB3_ID_0, - .base_addr = FUSB3_0_BASE_ADDR, - .irq_num = FUSB3_0_IRQ_NUM, - .irq_priority = 0U, - .allocator = NULL - }, - - [FUSB3_ID_1] = - { - .instance_id = FUSB3_ID_1, - .base_addr = FUSB3_1_BASE_ADDR, - .irq_num = FUSB3_1_IRQ_NUM, - .irq_priority = 0U, - .allocator = NULL - } -}; - - -/*****************************************************************************/ diff --git a/bsp/phytium/libraries/standalone/drivers/usb/fusb_generic_hub.c b/bsp/phytium/libraries/standalone/drivers/usb/fusb_generic_hub.c deleted file mode 100644 index 2b15580396..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/usb/fusb_generic_hub.c +++ /dev/null @@ -1,331 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fusb_generic_hub.c - * Date: 2022-02-11 13:33:11 - * LastEditTime: 2022-02-18 09:19:27 - * Description:  This files is for implmentation of generic hub function - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/2/7 init commit - */ - -#include "fsleep.h" -#include "fdebug.h" -#include "fusb.h" -#include "fusb_generic_hub.h" - -#define FUSB_DEBUG_TAG "FUSB_HUB" -#define FUSB_ERROR(format, ...) FT_DEBUG_PRINT_E(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) -#define FUSB_WARN(format, ...) FT_DEBUG_PRINT_W(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) -#define FUSB_INFO(format, ...) FT_DEBUG_PRINT_I(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) -#define FUSB_DEBUG(format, ...) FT_DEBUG_PRINT_D(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) - -void FUsbGenericHubDestory(FUsbDev *const dev) -{ - FUsbGenericHub *const hub = FUSB_GEN_HUB_GET(dev); - FUsb *instace = dev->controller->usb; - if (!hub) - { - return; - } - - /* First, detach all devices behind this hub */ - int port; - for (port = 1; port <= hub->num_ports; ++port) - { - if (hub->ports[port] >= 0) - { - FUSB_INFO("Generic hub: Detachment at port %d ", port); - FUsbDetachDev(dev->controller, hub->ports[port]); - hub->ports[port] = FUSB_NO_DEV_ADDR; - } - } - - /* Disable all ports */ - if (hub->ops->disable_port) - { - for (port = 1; port <= hub->num_ports; ++port) - { - hub->ops->disable_port(dev, port); - } - } - - FUSB_FREE(instace, hub->ports); // free(hub->ports); - FUSB_FREE(instace, hub); // free(hub); -} - -static int FUsbGenericHubDebounce(FUsbDev *const dev, const int port) -{ - FUsbGenericHub *const hub = FUSB_GEN_HUB_GET(dev); - - const int step_ms = 1; /* linux uses 25ms, we're busy anyway */ - const int at_least_ms = 100; /* 100ms as in usb20 spec 9.1.2 */ - const int timeout_ms = 1500; /* linux uses this value */ - - int total_ms = 0; - int stable_ms = 0; - while (stable_ms < at_least_ms && total_ms < timeout_ms) - { - fsleep_millisec(step_ms); - - const int changed = hub->ops->port_status_changed(dev, port); - const int connected = hub->ops->port_connected(dev, port); - if (changed < 0 || connected < 0) - { - return -1; - } - - if (!changed && connected) - { - stable_ms += step_ms; - } - else - { - FUSB_INFO("Generic hub: Unstable connection at %d ", - port); - stable_ms = 0; - } - total_ms += step_ms; - } - if (total_ms >= timeout_ms) - { - FUSB_INFO("Generic hub: Debouncing timed out at %d ", port); - } - return 0; /* ignore timeouts, try to always go on */ -} - -int FUsbGenericHubWaitForPort(FUsbDev *const dev, const int port, - const int wait_for, - int (*const port_op)(FUsbDev *, int), - int timeout_steps, const int step_us) -{ - int state; - do - { - state = port_op(dev, port); - if (state < 0) - { - return -1; - } - else if (!!state == wait_for) - { - return timeout_steps; - } - fsleep_microsec(step_us); - --timeout_steps; - } - while (timeout_steps); - - return 0; -} - -int FUsbGenericHubResetPort(FUsbDev *const dev, const int port) -{ - FUsbGenericHub *const hub = FUSB_GEN_HUB_GET(dev); - - if (hub->ops->start_port_reset(dev, port) < 0) - { - return -1; - } - - /* wait for 10ms (usb20 spec 11.5.1.5: reset should take 10 to 20ms) */ - fsleep_millisec(10); - - /* now wait 12ms for the hub to finish the reset */ - const int ret = FUsbGenericHubWaitForPort( - /* time out after 120 * 100us = 12ms */ - dev, port, 0, hub->ops->port_in_reset, 120, 100); - if (ret < 0) - { - return -1; - } - else if (!ret) - { - FUSB_INFO("Generic hub: Reset timed out at port %d ", port); - } - - return 0; /* ignore timeouts, try to always go on */ -} - -static int FUsbGenericHubDetachDev(FUsbDev *const dev, const int port) -{ - FUsbGenericHub *const hub = FUSB_GEN_HUB_GET(dev); - - FUsbDetachDev(dev->controller, hub->ports[port]); - hub->ports[port] = FUSB_NO_DEV_ADDR; - - return 0; -} - -static int FUsbGenericHubAttachDev(FUsbDev *const dev, const int port) -{ - FUsbGenericHub *const hub = FUSB_GEN_HUB_GET(dev); - - if (FUsbGenericHubDebounce(dev, port) < 0) - { - return -1; - } - - if (hub->ops->reset_port) - { - if (hub->ops->reset_port(dev, port) < 0) - { - return -1; - } - - if (!hub->ops->port_connected(dev, port)) - { - FUSB_INFO( - "Generic hub: Port %d disconnected after " - "reset. Possibly upgraded, rescan required. ", - port); - return 0; - } - - /* after reset the port will be enabled automatically */ - const int ret = FUsbGenericHubWaitForPort( - /* time out after 1,000 * 10us = 10ms */ - dev, port, 1, hub->ops->port_enabled, 1000, 10); - if (ret < 0) - { - return -1; - } - else if (!ret) - FUSB_INFO("Generic hub: Port %d still " - "disabled after 10ms ", - port); - } - - const FUsbSpeed speed = hub->ops->port_speed(dev, port); - if (speed >= 0) - { - FUSB_DEBUG("Generic hub: Success at port %d ", port); - if (hub->ops->reset_port) - { - fsleep_millisec(10); - } /* Reset recovery time - (usb20 spec 7.1.7.5) */ - hub->ports[port] = FUsbAttachDev( - dev->controller, dev->address, port, speed); - } - return 0; -} - -int FUsbGenericHubScanPort(FUsbDev *const dev, const int port) -{ - FUsbGenericHub *const hub = FUSB_GEN_HUB_GET(dev); - - if (hub->ports[port] >= 0) - { - FUSB_INFO("Generic hub: Detachment at port %d ", port); - const int ret = FUsbGenericHubDetachDev(dev, port); - if (ret < 0) - { - return ret; - } - } - - if (hub->ops->port_connected(dev, port)) - { - FUSB_INFO("Generic hub: Attachment at port %d ", port); - return FUsbGenericHubAttachDev(dev, port); - } - - return 0; -} - -static void FUsbGenericHubPoll(FUsbDev *const dev) -{ - FUsbGenericHub *const hub = FUSB_GEN_HUB_GET(dev); - if (!hub) - { - return; - } - - if (hub->ops->hub_status_changed && - hub->ops->hub_status_changed(dev) != FUSB_CC_SUCCESS) - { - return; - } - - int port; - for (port = 1; port <= hub->num_ports; ++port) - { - const FUsbTransCode ret = hub->ops->port_status_changed(dev, port); - if (ret < 0) - { - FUSB_WARN("Transcode %d", ret); - return; - } - else if (ret == FUSB_CC_SUCCESS) - { - FUSB_INFO("Generic hub: Port change at %d ", port); - if (FUsbGenericHubScanPort(dev, port) < 0) - { - return; - } - } - } -} - -int FUsbGenericHubInit(FUsbDev *const dev, const int num_ports, - const FUsbGenericHubOps *const ops) -{ - int port; - FUsb *instance = dev->controller->usb; - - dev->destroy = FUsbGenericHubDestory; - dev->poll = FUsbGenericHubPoll; - FASSERT(NULL == dev->data); - dev->data = FUSB_ALLOCATE(instance, sizeof(FUsbGenericHub), FUSB_DEFAULT_ALIGN); - if (NULL == dev->data) - { - FUSB_ERROR("Generic hub: Out of memory "); - return -1; - } - - FUsbGenericHub *const hub = FUSB_GEN_HUB_GET(dev); - hub->num_ports = num_ports; - FASSERT(NULL == hub->ports); - hub->ports = FUSB_ALLOCATE(instance, sizeof(*hub->ports) * (num_ports + 1), FUSB_DEFAULT_ALIGN); - hub->ops = ops; - if (NULL == hub->ports) - { - FUSB_ERROR("Generic hub: Out of memory "); - FUSB_FREE(instance, dev->data); - dev->data = NULL; - return -1; - } - - for (port = 1; port <= num_ports; ++port) - { - hub->ports[port] = FUSB_NO_DEV_ADDR; - } - - /* Enable all ports */ - if (ops->enable_port) - { - for (port = 1; port <= num_ports; ++port) - { - ops->enable_port(dev, port); - } - - /* wait once for all ports */ - fsleep_millisec(20); - } - - return 0; -} diff --git a/bsp/phytium/libraries/standalone/drivers/usb/fusb_generic_hub.h b/bsp/phytium/libraries/standalone/drivers/usb/fusb_generic_hub.h deleted file mode 100644 index ce91d73f0b..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/usb/fusb_generic_hub.h +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fusb_generic_hub.h - * Date: 2022-02-11 13:33:11 - * LastEditTime: 2022-02-18 09:20:23 - * Description:  This files is for definition of generic hub function - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/2/7 init commit - */ - -#ifndef FUSB_GENERIC_HUB_H -#define FUSB_GENERIC_HUB_H - -#include "fusb_private.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -typedef struct -{ - /* negative results denote an error */ - - /* returns 1 if the hub's status changed since the last call (optional) */ - FUsbTransCode(*hub_status_changed)(FUsbDev *); - /* returns 1 if the port's status changed since the last call */ - FUsbTransCode(*port_status_changed)(FUsbDev *, int port); - /* returns 1 if something is connected to the port */ - FUsbTransCode(*port_connected)(FUsbDev *, int port); - /* returns 1 if port is currently resetting */ - FUsbTransCode(*port_in_reset)(FUsbDev *, int port); - /* returns 1 if the port is enabled */ - FUsbTransCode(*port_enabled)(FUsbDev *, int port); - /* returns speed if port is enabled, negative value if not */ - FUsbSpeed(*port_speed)(FUsbDev *, int port); - - /* enables (powers up) a port (optional) */ - FUsbTransCode(*enable_port)(FUsbDev *, int port); - /* disables (powers down) a port (optional) */ - FUsbTransCode(*disable_port)(FUsbDev *, int port); - /* starts a port reset (required if reset_port is set to a generic one from below) */ - FUsbTransCode(*start_port_reset)(FUsbDev *, int port); - - /* performs a port reset (optional, generic implementations below) */ - FUsbTransCode(*reset_port)(FUsbDev *, int port); -} FUsbGenericHubOps; - -typedef struct -{ - int num_ports; - /* port numbers are always 1 based, - so we waste one int for convenience */ - int *ports; /* allocated to sizeof(*ports)*(num_ports+1) */ -#define FUSB_NO_DEV_ADDR -1 - - const FUsbGenericHubOps *ops; - - void *data; -} FUsbGenericHub; - -void FUsbGenericHubDestory(FUsbDev *); -int FUsbGenericHubWaitForPort(FUsbDev *const dev, const int port, - const int wait_for, - int (*const port_op)(FUsbDev *, int), - int timeout_steps, const int step_us); -int FUsbGenericHubResetPort(FUsbDev *, int port); -int FUsbGenericHubScanPort(FUsbDev *, int port); -/* the provided generic_hub_ops struct has to be static */ -int FUsbGenericHubInit(FUsbDev *, int num_ports, const FUsbGenericHubOps *); - -#define FUSB_GEN_HUB_GET(FUsbDev) ((FUsbGenericHub *)(FUsbDev)->data) - -#ifdef __cplusplus -} -#endif - - -#endif diff --git a/bsp/phytium/libraries/standalone/drivers/usb/fusb_hid.c b/bsp/phytium/libraries/standalone/drivers/usb/fusb_hid.c deleted file mode 100644 index 89d1867bfa..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/usb/fusb_hid.c +++ /dev/null @@ -1,587 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fusb_hid.c - * Date: 2022-09-28 18:26:42 - * LastEditTime: 2022-09-29 14:50:09 - * Description:  This files is for usb hid class implmentation - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/9/28 init commit - */ - -#include - -#include "fkernel.h" -#include "fdebug.h" -#include "fsleep.h" - -#include "fusb.h" -#include "fusb_hid.h" - -enum FUsbHidRequests -{ - GET_REPORT = 0x1, - GET_IDLE = 0x2, - GET_PROTOCOL = 0x3, - SET_REPORT = 0x9, - SET_IDLE = 0xa, - SET_PROTOCOL = 0xb -}; - -enum FUsbHidKeyboardModifiers -{ - KB_MOD_SHIFT = (1 << 0), - KB_MOD_ALT = (1 << 1), - KB_MOD_CTRL = (1 << 2), - KB_MOD_CAPSLOCK = (1 << 3), -}; - -typedef union -{ - struct - { - u8 modifiers; - u8 repeats; - u8 keys[6]; - }; - u8 buffer[8]; -} FUsbHidKeyboardEvent; - -typedef struct -{ - void *queue; - FUsbHidDescriptor *descriptor; - - FUsbHidKeyboardEvent previous; - int lastkeypress; - int repeat_delay; -} FUsbHid; - -#define KEYBOARD_REPEAT_MS 30 -#define INITIAL_REPEAT_DELAY 10 -#define REPEAT_DELAY 2 - -#define FUSB_HID_INST(dev) ((FUsbHid*)(dev)->data) - -#define FUSB_DEBUG_TAG "FUSB_HID" -#define FUSB_ERROR(format, ...) FT_DEBUG_PRINT_E(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) -#define FUSB_WARN(format, ...) FT_DEBUG_PRINT_W(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) -#define FUSB_INFO(format, ...) FT_DEBUG_PRINT_I(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) -#define FUSB_DEBUG(format, ...) FT_DEBUG_PRINT_D(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) - -static const char *boot_protos[3] = { "(none)", "keyboard", "mouse" }; - -static void FUsbHidDestory(FUsbDev *dev) -{ - FUsb *instance = dev->controller->usb; - - if (FUSB_HID_INST(dev)->queue) - { - int i; - for (i = 0; i <= dev->num_endp; i++) - { - if (dev->endpoints[i].endpoint == 0) - { - continue; - } - if (dev->endpoints[i].type != FUSB_INTERRUPT_EP) - { - continue; - } - if (dev->endpoints[i].direction != FUSB_IN) - { - continue; - } - break; - } - dev->controller->destroy_intr_queue( - &dev->endpoints[i], FUSB_HID_INST(dev)->queue); - FUSB_HID_INST(dev)->queue = NULL; - } - FUSB_FREE(instance, FUSB_HID_INST(dev)->descriptor); - FUSB_HID_INST(dev)->descriptor = NULL; - - FUSB_FREE(instance, dev->data); -} - -/* keybuffer is global to all USB keyboards */ -static int keycount; -#define KEYBOARD_BUFFER_SIZE 16 -static short keybuffer[KEYBOARD_BUFFER_SIZE]; -static int modifiers; - -static const char *countries[36][2] = -{ - { "not supported", "us" }, - { "Arabic", "ae" }, - { "Belgian", "be" }, - { "Canadian-Bilingual", "ca" }, - { "Canadian-French", "ca" }, - { "Czech Republic", "cz" }, - { "Danish", "dk" }, - { "Finnish", "fi" }, - { "French", "fr" }, - { "German", "de" }, - { "Greek", "gr" }, - { "Hebrew", "il" }, - { "Hungary", "hu" }, - { "International (ISO)", "iso" }, - { "Italian", "it" }, - { "Japan (Katakana)", "jp" }, - { "Korean", "us" }, - { "Latin American", "us" }, - { "Netherlands/Dutch", "nl" }, - { "Norwegian", "no" }, - { "Persian (Farsi)", "ir" }, - { "Poland", "pl" }, - { "Portuguese", "pt" }, - { "Russia", "ru" }, - { "Slovakia", "sl" }, - { "Spanish", "es" }, - { "Swedish", "se" }, - { "Swiss/French", "ch" }, - { "Swiss/German", "ch" }, - { "Switzerland", "ch" }, - { "Taiwan", "tw" }, - { "Turkish-Q", "tr" }, - { "UK", "uk" }, - { "US", "us" }, - { "Yugoslavia", "yu" }, - { "Turkish-F", "tr" }, - /* 36 - 255: Reserved */ -}; - -struct FUsbHidLayoutMaps -{ - const char *country; - const short map[4][0x80]; -}; - -static const struct FUsbHidLayoutMaps *map; - -static const struct FUsbHidLayoutMaps keyboard_layouts[] = -{ - { - .country = "us", - .map = { - { /* No modifier */ - -1, -1, -1, -1, 'a', 'b', 'c', 'd', - 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', - /* 0x10 */ - 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', - 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', - /* 0x20 */ - '3', '4', '5', '6', '7', '8', '9', '0', - '\n', '\e', '\b', '\t', ' ', '-', '=', '[', - /* 0x30 */ - ']', '\\', -1, ';', '\'', '`', ',', '.', - '/', -1 /* CapsLk */, KEY_F(1), KEY_F(2), KEY_F(3), KEY_F(4), KEY_F(5), KEY_F(6), - /* 0x40 */ - KEY_F(7), KEY_F(8), KEY_F(9), KEY_F(10), KEY_F(11), KEY_F(12), KEY_PRINT, -1 /* ScrLk */, - KEY_BREAK, KEY_IC, KEY_HOME, KEY_PPAGE, KEY_DC, KEY_END, KEY_NPAGE, KEY_RIGHT, - /* 50 */ - KEY_LEFT, KEY_DOWN, KEY_UP, -1 /*NumLck*/, '/', '*', '-' /* = ? */, '+', - KEY_ENTER, KEY_END, KEY_DOWN, KEY_NPAGE, KEY_LEFT, -1, KEY_RIGHT, KEY_HOME, - /* 60 */ - KEY_UP, KEY_PPAGE, -1, KEY_DC, -1 /* < > | */, -1 /* Win Key Right */, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - /* 70 */ - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - }, - { /* Shift modifier */ - -1, -1, -1, -1, 'A', 'B', 'C', 'D', - 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', - /* 0x10 */ - 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', - 'U', 'V', 'W', 'X', 'Y', 'Z', '!', '@', - /* 0x20 */ - '#', '$', '%', '^', '&', '*', '(', ')', - '\n', '\e', '\b', '\t', ' ', '_', '+', '[', - /* 0x30 */ - ']', '\\', -1, ':', '\'', '`', ',', '.', - '/', -1 /* CapsLk */, KEY_F(1), KEY_F(2), KEY_F(3), KEY_F(4), KEY_F(5), KEY_F(6), - /* 0x40 */ - KEY_F(7), KEY_F(8), KEY_F(9), KEY_F(10), KEY_F(11), KEY_F(12), KEY_PRINT, -1 /* ScrLk */, - KEY_BREAK, KEY_IC, KEY_HOME, KEY_PPAGE, KEY_DC, KEY_END, KEY_NPAGE, KEY_RIGHT, - /* 50 */ - KEY_LEFT, KEY_DOWN, KEY_UP, -1 /*NumLck*/, '/', '*', '-' /* = ? */, '+', - KEY_ENTER, KEY_END, KEY_DOWN, KEY_NPAGE, KEY_LEFT, -1, KEY_RIGHT, KEY_HOME, - /* 60 */ - KEY_UP, KEY_PPAGE, -1, KEY_DC, -1 /* < > | */, -1 /* Win Key Right */, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - /* 70 */ - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - }, - { /* Alt */ - -1, -1, -1, -1, 'a', 'b', 'c', 'd', - 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', - /* 0x10 */ - 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', - 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', - /* 0x20 */ - '3', '4', '5', '6', '7', '8', '9', '0', - '\n', '\e', '\b', '\t', ' ', '-', '=', '[', - /* 0x30 */ - ']', '\\', -1, ';', '\'', '`', ',', '.', - '/', -1 /* CapsLk */, KEY_F(1), KEY_F(2), KEY_F(3), KEY_F(4), KEY_F(5), KEY_F(6), - /* 0x40 */ - KEY_F(7), KEY_F(8), KEY_F(9), KEY_F(10), KEY_F(11), KEY_F(12), KEY_PRINT, -1 /* ScrLk */, - KEY_BREAK, KEY_IC, KEY_HOME, KEY_PPAGE, KEY_DC, KEY_END, KEY_NPAGE, KEY_RIGHT, - /* 50 */ - KEY_LEFT, KEY_DOWN, KEY_UP, -1 /*NumLck*/, '/', '*', '-' /* = ? */, '+', - KEY_ENTER, KEY_END, KEY_DOWN, KEY_NPAGE, KEY_LEFT, -1, KEY_RIGHT, KEY_HOME, - /* 60 */ - KEY_UP, KEY_PPAGE, -1, KEY_DC, -1 /* < > | */, -1 /* Win Key Right */, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - /* 70 */ - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - }, - { /* Shift+Alt modifier */ - -1, -1, -1, -1, 'A', 'B', 'C', 'D', - 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', - /* 0x10 */ - 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', - 'U', 'V', 'W', 'X', 'Y', 'Z', '!', '@', - /* 0x20 */ - '#', '$', '%', '^', '&', '*', '(', ')', - '\n', '\e', '\b', '\t', ' ', '-', '=', '[', - /* 0x30 */ - ']', '\\', -1, ':', '\'', '`', ',', '.', - '/', -1 /* CapsLk */, KEY_F(1), KEY_F(2), KEY_F(3), KEY_F(4), KEY_F(5), KEY_F(6), - /* 0x40 */ - KEY_F(7), KEY_F(8), KEY_F(9), KEY_F(10), KEY_F(11), KEY_F(12), KEY_PRINT, -1 /* ScrLk */, - KEY_BREAK, KEY_IC, KEY_HOME, KEY_PPAGE, KEY_DC, KEY_END, KEY_NPAGE, KEY_RIGHT, - /* 50 */ - KEY_LEFT, KEY_DOWN, KEY_UP, -1 /*NumLck*/, '/', '*', '-' /* = ? */, '+', - KEY_ENTER, KEY_END, KEY_DOWN, KEY_NPAGE, KEY_LEFT, -1, KEY_RIGHT, KEY_HOME, - /* 60 */ - KEY_UP, KEY_PPAGE, -1, KEY_DC, -1 /* < > | */, -1 /* Win Key Right */, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - /* 70 */ - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - } - } - }, -}; - -static void FUsbHidKeyboardQueue(int ch) -{ - /* ignore key presses if buffer full */ - if (keycount < KEYBOARD_BUFFER_SIZE) - { - keybuffer[keycount++] = ch; - } -} - -/* handle hid received data */ -static void FUsbHidProcessKeyboardEvent(FUsbHid *const inst, - const FUsbHidKeyboardEvent *const current) -{ - const FUsbHidKeyboardEvent *const previous = &inst->previous; - - int i, keypress = 0; - - modifiers = 0; - - if (current->modifiers & 0x01) /* Left-Ctrl */ - { - modifiers |= KB_MOD_CTRL; - } - if (current->modifiers & 0x02) /* Left-Shift */ - { - modifiers |= KB_MOD_SHIFT; - } - if (current->modifiers & 0x04) /* Left-Alt */ - { - modifiers |= KB_MOD_ALT; - } - if (current->modifiers & 0x08) /* Left-GUI */ - { - - } - - if (current->modifiers & 0x10) /* Right-Ctrl */ - { - modifiers |= KB_MOD_CTRL; - } - if (current->modifiers & 0x20) /* Right-Shift */ - { - modifiers |= KB_MOD_SHIFT; - } - if (current->modifiers & 0x40) /* Right-AltGr */ - { - modifiers |= KB_MOD_ALT; - } - if (current->modifiers & 0x80) /* Right-GUI */ - { - - } - - if ((current->modifiers & 0x05) && ((current->keys[0] == 0x4c) || - (current->keys[0] == 0x63))) - { - /* todo, Reboot here */ - } - - /* Did the event change at all? */ - if (inst->lastkeypress && - !memcmp(current, previous, sizeof(*current))) - { - /* No. Then it's a key repeat event. */ - if (inst->repeat_delay) - { - inst->repeat_delay--; - } - else - { - FUsbHidKeyboardQueue(inst->lastkeypress); - inst->repeat_delay = REPEAT_DELAY; - } - - return; - } - - inst->lastkeypress = 0; - - for (i = 0; i < 6; i++) - { - int j; - int skip = 0; - /* No more keys? skip */ - if (current->keys[i] == 0) - { - return; - } - - for (j = 0; j < 6; j++) - { - if (current->keys[i] == previous->keys[j]) - { - skip = 1; - break; - } - } - - if (skip) - { - continue; - } - - /* Mask off KB_MOD_CTRL */ - keypress = map->map[modifiers & 0x03][current->keys[i]]; - - if (modifiers & KB_MOD_CTRL) - { - switch (keypress) - { - case 'a' ... 'z': - keypress &= 0x1f; - break; - default: - continue; - } - } - - if (keypress == -1) - { - /* Debug: Print unknown keys */ - FUSB_INFO("usbhid: <%x> %x [ %x %x %x %x %x %x ] %d\n", - current->modifiers, current->repeats, - current->keys[0], current->keys[1], - current->keys[2], current->keys[3], - current->keys[4], current->keys[5], i); - - /* Unknown key? Try next one in the queue */ - continue; - } - - FUsbHidKeyboardQueue(keypress); - - /* Remember for authentic key repeat */ - inst->lastkeypress = keypress; - inst->repeat_delay = INITIAL_REPEAT_DELAY; - } -} - -static void FUsbHidPoll(FUsbDev *dev) -{ - FUsbHidKeyboardEvent current; - const u8 *buf; - - while ((buf = dev->controller->poll_intr_queue(FUSB_HID_INST(dev)->queue))) - { - memcpy(¤t.buffer, buf, 8); - FUsbHidProcessKeyboardEvent(FUSB_HID_INST(dev), ¤t); - FUSB_HID_INST(dev)->previous = current; - } -} - -static void FUsbHidSetIdle(FUsbDev *dev, FUsbInterfaceDescriptor *interface, u16 duration) -{ - FUsbDevReq dr; - dr.data_dir = FUSB_REQ_HOST_TO_DEVICE; - dr.req_type = FUSB_REQ_TYPE_CLASS; - dr.req_recp = FUSB_REQ_RECP_IF; - dr.bRequest = SET_IDLE; - dr.wValue = (duration >> 2) << 8; - dr.wIndex = interface->bInterfaceNumber; - dr.wLength = 0; - dev->controller->control(dev, FUSB_OUT, sizeof(FUsbDevReq), &dr, 0, NULL); -} - -static void FUsbHidSetProtocol(FUsbDev *dev, FUsbInterfaceDescriptor *interface, FUsbHidProtocol proto) -{ - FUsbDevReq dr; - dr.data_dir = FUSB_REQ_HOST_TO_DEVICE; - dr.req_type = FUSB_REQ_TYPE_CLASS; - dr.req_recp = FUSB_REQ_RECP_IF; - dr.bRequest = SET_PROTOCOL; - dr.wValue = proto; - dr.wIndex = interface->bInterfaceNumber; - dr.wLength = 0; - dev->controller->control(dev, FUSB_OUT, sizeof(FUsbDevReq), &dr, 0, 0); -} - -static int FUsbHidSetLayout(const char *country) -{ - /* FIXME should be per keyboard */ - for (fsize_t i = 0; i < ARRAY_SIZE(keyboard_layouts); i++) - { - if (strncmp(keyboard_layouts[i].country, country, - strlen(keyboard_layouts[i].country))) - { - continue; - } - - /* Found, changing keyboard layout */ - map = &keyboard_layouts[i]; - FUSB_DEBUG(" Keyboard layout '%s'\n", map->country); - return 0; - } - - FUSB_DEBUG(" Keyboard layout '%s' not found, using '%s'\n", - country, map->country); - - /* Nothing found, not changed */ - return -1; -} - -void FUsbHidInit(FUsbDev *dev) -{ - FUsb *instance = dev->controller->usb; - - FUsbConfigurationDescriptor *cd = (FUsbConfigurationDescriptor *)dev->configuration; - FUsbInterfaceDescriptor *interface = (FUsbInterfaceDescriptor *)(((char *) cd) + cd->bLength); - - if (interface->bInterfaceSubClass == FUSB_HID_SUBCLASS_BOOT) - { - u8 countrycode; - FUSB_DEBUG(" supports boot interface..\n"); - FUSB_DEBUG(" it's a %s\n", - boot_protos[interface->bInterfaceProtocol]); - switch (interface->bInterfaceProtocol) - { - case FUSB_HID_BOOT_PROTOCOL_KEYBOARD: - dev->data = FUSB_ALLOCATE(instance, sizeof(FUsbHid), FUSB_DEFAULT_ALIGN); - FUSB_DEBUG(" configuring...\n"); - FUsbHidSetProtocol(dev, interface, FUSB_HID_PROTOCOL_BOOT); - FUsbHidSetIdle(dev, interface, KEYBOARD_REPEAT_MS); - FUSB_DEBUG(" activating...\n"); - - FUsbHidDescriptor *desc = FUSB_ALLOCATE(instance, sizeof(FUsbHidDescriptor), FUSB_DEFAULT_ALIGN); - if (!desc || FUsbGetDescriptor(dev, FUsbGenerateReqType( - FUSB_REQ_DEVICE_TO_HOST, FUSB_REQ_TYPE_STANDARD, FUSB_REQ_RECP_IF), - 0x21, 0, desc, sizeof(*desc)) != sizeof(*desc)) - { - FUSB_DEBUG("FUsbGetDescriptor(HID) failed\n"); - FUsbDetachDev(dev->controller, dev->address); - return; - } - FUSB_HID_INST(dev)->descriptor = desc; - countrycode = desc->bCountryCode; - /* 35 countries defined: */ - if (countrycode >= ARRAY_SIZE(countries)) - { - countrycode = 0; - } - FUSB_INFO(" Keyboard has %s layout (country code %02x)\n", - countries[countrycode][0], countrycode); - - /* Set keyboard layout accordingly */ - FUsbHidSetLayout(countries[countrycode][1]); - - // only add here, because we only support boot-keyboard HID devices - dev->destroy = FUsbHidDestory; - dev->poll = FUsbHidPoll; - int i; - for (i = 1; i < dev->num_endp; i++) - { - if (dev->endpoints[i].type != FUSB_INTERRUPT_EP) - { - continue; - } - if (dev->endpoints[i].direction != FUSB_IN) - { - continue; - } - break; - } - - if (i >= dev->num_endp) - { - FUSB_DEBUG("Could not find HID endpoint\n"); - FUsbDetachDev(dev->controller, dev->address); - return; - } - - FUSB_DEBUG(" found endpoint %x for interrupt-in\n", i); - /* 20 buffers of 8 bytes, for every 10 msecs */ - FUSB_HID_INST(dev)->queue = dev->controller->create_intr_queue(&dev->endpoints[i], 8, 20, 10); - keycount = 0; - FUSB_DEBUG(" configuration done.\n"); - break; - case FUSB_HID_BOOT_PROTOCOL_MOUSE: - FUSB_DEBUG("NOTICE: USB mice are not supported.\n"); - break; - } - } -} - -int FUsbHidCheckInput(FUsbDev *dev, int times) -{ - short ret; - FUsb *instance = dev->controller->usb; - - for (int i = 0; i < times; i++) - { - FUsbPoll(instance); - - while (keycount != 0) - { - ret = keybuffer[0]; - memmove(keybuffer, keybuffer + 1, --keycount); - FUSB_INFO("%c", ret); - } - - fsleep_millisec(10); - } - - FUSB_INFO("\r\n"); -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/usb/fusb_hid.h b/bsp/phytium/libraries/standalone/drivers/usb/fusb_hid.h deleted file mode 100644 index da43bbeefd..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/usb/fusb_hid.h +++ /dev/null @@ -1,328 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fusb_hid.h - * Date: 2022-02-11 13:33:09 - * LastEditTime: 2022-02-17 17:49:20 - * Description:  This files is for definition of USB hub device function - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/9/28 init commit - */ - -#ifndef FUSB_HID_H -#define FUSB_HID_H - -/***************************** Include Files *********************************/ - -#include "fusb.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/************************** Constant Definitions *****************************/ -/*---------------------------------------------------------------------- - * - * Function and Keypad Key Definitions. - * Many are just for compatibility. - * - */ - -#define KEY_CODE_YES 0x100 /* If get_wch() gives a key code */ - -#define KEY_BREAK 0x101 /* Not on PC KBD */ -#define KEY_DOWN 0x102 /* Down arrow key */ -#define KEY_UP 0x103 /* Up arrow key */ -#define KEY_LEFT 0x104 /* Left arrow key */ -#define KEY_RIGHT 0x105 /* Right arrow key */ -#define KEY_HOME 0x106 /* home key */ -#define KEY_BACKSPACE 0x107 /* not on pc */ -#define KEY_F0 0x108 /* function keys; 64 reserved */ - -#define KEY_DL 0x148 /* delete line */ -#define KEY_IL 0x149 /* insert line */ -#define KEY_DC 0x14a /* delete character */ -#define KEY_IC 0x14b /* insert char or enter ins mode */ -#define KEY_EIC 0x14c /* exit insert char mode */ -#define KEY_CLEAR 0x14d /* clear screen */ -#define KEY_EOS 0x14e /* clear to end of screen */ -#define KEY_EOL 0x14f /* clear to end of line */ -#define KEY_SF 0x150 /* scroll 1 line forward */ -#define KEY_SR 0x151 /* scroll 1 line back (reverse) */ -#define KEY_NPAGE 0x152 /* next page */ -#define KEY_PPAGE 0x153 /* previous page */ -#define KEY_STAB 0x154 /* set tab */ -#define KEY_CTAB 0x155 /* clear tab */ -#define KEY_CATAB 0x156 /* clear all tabs */ -#define KEY_ENTER 0x157 /* enter or send (unreliable) */ -#define KEY_SRESET 0x158 /* soft/reset (partial/unreliable) */ -#define KEY_RESET 0x159 /* reset/hard reset (unreliable) */ -#define KEY_PRINT 0x15a /* print/copy */ -#define KEY_LL 0x15b /* home down/bottom (lower left) */ -#define KEY_ABORT 0x15c /* abort/terminate key (any) */ -#define KEY_SHELP 0x15d /* short help */ -#define KEY_LHELP 0x15e /* long help */ -#define KEY_BTAB 0x15f /* Back tab key */ -#define KEY_BEG 0x160 /* beg(inning) key */ -#define KEY_CANCEL 0x161 /* cancel key */ -#define KEY_CLOSE 0x162 /* close key */ -#define KEY_COMMAND 0x163 /* cmd (command) key */ -#define KEY_COPY 0x164 /* copy key */ -#define KEY_CREATE 0x165 /* create key */ -#define KEY_END 0x166 /* end key */ -#define KEY_EXIT 0x167 /* exit key */ -#define KEY_FIND 0x168 /* find key */ -#define KEY_HELP 0x169 /* help key */ -#define KEY_MARK 0x16a /* mark key */ -#define KEY_MESSAGE 0x16b /* message key */ -#define KEY_MOVE 0x16c /* move key */ -#define KEY_NEXT 0x16d /* next object key */ -#define KEY_OPEN 0x16e /* open key */ -#define KEY_OPTIONS 0x16f /* options key */ -#define KEY_PREVIOUS 0x170 /* previous object key */ -#define KEY_REDO 0x171 /* redo key */ -#define KEY_REFERENCE 0x172 /* ref(erence) key */ -#define KEY_REFRESH 0x173 /* refresh key */ -#define KEY_REPLACE 0x174 /* replace key */ -#define KEY_RESTART 0x175 /* restart key */ -#define KEY_RESUME 0x176 /* resume key */ -#define KEY_SAVE 0x177 /* save key */ -#define KEY_SBEG 0x178 /* shifted beginning key */ -#define KEY_SCANCEL 0x179 /* shifted cancel key */ -#define KEY_SCOMMAND 0x17a /* shifted command key */ -#define KEY_SCOPY 0x17b /* shifted copy key */ -#define KEY_SCREATE 0x17c /* shifted create key */ -#define KEY_SDC 0x17d /* shifted delete char key */ -#define KEY_SDL 0x17e /* shifted delete line key */ -#define KEY_SELECT 0x17f /* select key */ -#define KEY_SEND 0x180 /* shifted end key */ -#define KEY_SEOL 0x181 /* shifted clear line key */ -#define KEY_SEXIT 0x182 /* shifted exit key */ -#define KEY_SFIND 0x183 /* shifted find key */ -#define KEY_SHOME 0x184 /* shifted home key */ -#define KEY_SIC 0x185 /* shifted input key */ - -#define KEY_SLEFT 0x187 /* shifted left arrow key */ -#define KEY_SMESSAGE 0x188 /* shifted message key */ -#define KEY_SMOVE 0x189 /* shifted move key */ -#define KEY_SNEXT 0x18a /* shifted next key */ -#define KEY_SOPTIONS 0x18b /* shifted options key */ -#define KEY_SPREVIOUS 0x18c /* shifted prev key */ -#define KEY_SPRINT 0x18d /* shifted print key */ -#define KEY_SREDO 0x18e /* shifted redo key */ -#define KEY_SREPLACE 0x18f /* shifted replace key */ -#define KEY_SRIGHT 0x190 /* shifted right arrow */ -#define KEY_SRSUME 0x191 /* shifted resume key */ -#define KEY_SSAVE 0x192 /* shifted save key */ -#define KEY_SSUSPEND 0x193 /* shifted suspend key */ -#define KEY_SUNDO 0x194 /* shifted undo key */ -#define KEY_SUSPEND 0x195 /* suspend key */ -#define KEY_UNDO 0x196 /* undo key */ - -/* PDCurses-specific key definitions -- PC only */ - -#define ALT_0 0x197 -#define ALT_1 0x198 -#define ALT_2 0x199 -#define ALT_3 0x19a -#define ALT_4 0x19b -#define ALT_5 0x19c -#define ALT_6 0x19d -#define ALT_7 0x19e -#define ALT_8 0x19f -#define ALT_9 0x1a0 -#define ALT_A 0x1a1 -#define ALT_B 0x1a2 -#define ALT_C 0x1a3 -#define ALT_D 0x1a4 -#define ALT_E 0x1a5 -#define ALT_F 0x1a6 -#define ALT_G 0x1a7 -#define ALT_H 0x1a8 -#define ALT_I 0x1a9 -#define ALT_J 0x1aa -#define ALT_K 0x1ab -#define ALT_L 0x1ac -#define ALT_M 0x1ad -#define ALT_N 0x1ae -#define ALT_O 0x1af -#define ALT_P 0x1b0 -#define ALT_Q 0x1b1 -#define ALT_R 0x1b2 -#define ALT_S 0x1b3 -#define ALT_T 0x1b4 -#define ALT_U 0x1b5 -#define ALT_V 0x1b6 -#define ALT_W 0x1b7 -#define ALT_X 0x1b8 -#define ALT_Y 0x1b9 -#define ALT_Z 0x1ba - -#define CTL_LEFT 0x1bb /* Control-Left-Arrow */ -#define CTL_RIGHT 0x1bc -#define CTL_PGUP 0x1bd -#define CTL_PGDN 0x1be -#define CTL_HOME 0x1bf -#define CTL_END 0x1c0 - -#define KEY_A1 0x1c1 /* upper left on Virtual keypad */ -#define KEY_A2 0x1c2 /* upper middle on Virt. keypad */ -#define KEY_A3 0x1c3 /* upper right on Vir. keypad */ -#define KEY_B1 0x1c4 /* middle left on Virt. keypad */ -#define KEY_B2 0x1c5 /* center on Virt. keypad */ -#define KEY_B3 0x1c6 /* middle right on Vir. keypad */ -#define KEY_C1 0x1c7 /* lower left on Virt. keypad */ -#define KEY_C2 0x1c8 /* lower middle on Virt. keypad */ -#define KEY_C3 0x1c9 /* lower right on Vir. keypad */ - -#define PADSLASH 0x1ca /* slash on keypad */ -#define PADENTER 0x1cb /* enter on keypad */ -#define CTL_PADENTER 0x1cc /* ctl-enter on keypad */ -#define ALT_PADENTER 0x1cd /* alt-enter on keypad */ -#define PADSTOP 0x1ce /* stop on keypad */ -#define PADSTAR 0x1cf /* star on keypad */ -#define PADMINUS 0x1d0 /* minus on keypad */ -#define PADPLUS 0x1d1 /* plus on keypad */ -#define CTL_PADSTOP 0x1d2 /* ctl-stop on keypad */ -#define CTL_PADCENTER 0x1d3 /* ctl-enter on keypad */ -#define CTL_PADPLUS 0x1d4 /* ctl-plus on keypad */ -#define CTL_PADMINUS 0x1d5 /* ctl-minus on keypad */ -#define CTL_PADSLASH 0x1d6 /* ctl-slash on keypad */ -#define CTL_PADSTAR 0x1d7 /* ctl-star on keypad */ -#define ALT_PADPLUS 0x1d8 /* alt-plus on keypad */ -#define ALT_PADMINUS 0x1d9 /* alt-minus on keypad */ -#define ALT_PADSLASH 0x1da /* alt-slash on keypad */ -#define ALT_PADSTAR 0x1db /* alt-star on keypad */ -#define ALT_PADSTOP 0x1dc /* alt-stop on keypad */ -#define CTL_INS 0x1dd /* ctl-insert */ -#define ALT_DEL 0x1de /* alt-delete */ -#define ALT_INS 0x1df /* alt-insert */ -#define CTL_UP 0x1e0 /* ctl-up arrow */ -#define CTL_DOWN 0x1e1 /* ctl-down arrow */ -#define CTL_TAB 0x1e2 /* ctl-tab */ -#define ALT_TAB 0x1e3 -#define ALT_MINUS 0x1e4 -#define ALT_EQUAL 0x1e5 -#define ALT_HOME 0x1e6 -#define ALT_PGUP 0x1e7 -#define ALT_PGDN 0x1e8 -#define ALT_END 0x1e9 -#define ALT_UP 0x1ea /* alt-up arrow */ -#define ALT_DOWN 0x1eb /* alt-down arrow */ -#define ALT_RIGHT 0x1ec /* alt-right arrow */ -#define ALT_LEFT 0x1ed /* alt-left arrow */ -#define ALT_ENTER 0x1ee /* alt-enter */ -#define ALT_ESC 0x1ef /* alt-escape */ -#define ALT_BQUOTE 0x1f0 /* alt-back quote */ -#define ALT_LBRACKET 0x1f1 /* alt-left bracket */ -#define ALT_RBRACKET 0x1f2 /* alt-right bracket */ -#define ALT_SEMICOLON 0x1f3 /* alt-semi-colon */ -#define ALT_FQUOTE 0x1f4 /* alt-forward quote */ -#define ALT_COMMA 0x1f5 /* alt-comma */ -#define ALT_STOP 0x1f6 /* alt-stop */ -#define ALT_FSLASH 0x1f7 /* alt-forward slash */ -#define ALT_BKSP 0x1f8 /* alt-backspace */ -#define CTL_BKSP 0x1f9 /* ctl-backspace */ -#define PAD0 0x1fa /* keypad 0 */ - -#define CTL_PAD0 0x1fb /* ctl-keypad 0 */ -#define CTL_PAD1 0x1fc -#define CTL_PAD2 0x1fd -#define CTL_PAD3 0x1fe -#define CTL_PAD4 0x1ff -#define CTL_PAD5 0x200 -#define CTL_PAD6 0x201 -#define CTL_PAD7 0x202 -#define CTL_PAD8 0x203 -#define CTL_PAD9 0x204 - -#define ALT_PAD0 0x205 /* alt-keypad 0 */ -#define ALT_PAD1 0x206 -#define ALT_PAD2 0x207 -#define ALT_PAD3 0x208 -#define ALT_PAD4 0x209 -#define ALT_PAD5 0x20a -#define ALT_PAD6 0x20b -#define ALT_PAD7 0x20c -#define ALT_PAD8 0x20d -#define ALT_PAD9 0x20e - -#define CTL_DEL 0x20f /* clt-delete */ -#define ALT_BSLASH 0x210 /* alt-back slash */ -#define CTL_ENTER 0x211 /* ctl-enter */ - -#define SHF_PADENTER 0x212 /* shift-enter on keypad */ -#define SHF_PADSLASH 0x213 /* shift-slash on keypad */ -#define SHF_PADSTAR 0x214 /* shift-star on keypad */ -#define SHF_PADPLUS 0x215 /* shift-plus on keypad */ -#define SHF_PADMINUS 0x216 /* shift-minus on keypad */ -#define SHF_UP 0x217 /* shift-up on keypad */ -#define SHF_DOWN 0x218 /* shift-down on keypad */ -#define SHF_IC 0x219 /* shift-insert on keypad */ -#define SHF_DC 0x21a /* shift-delete on keypad */ - -#define KEY_MOUSE 0x21b /* "mouse" key */ -#define KEY_SHIFT_L 0x21c /* Left-shift */ -#define KEY_SHIFT_R 0x21d /* Right-shift */ -#define KEY_CONTROL_L 0x21e /* Left-control */ -#define KEY_CONTROL_R 0x21f /* Right-control */ -#define KEY_ALT_L 0x220 /* Left-alt */ -#define KEY_ALT_R 0x221 /* Right-alt */ -#define KEY_RESIZE 0x222 /* Window resize */ -#define KEY_SUP 0x223 /* Shifted up arrow */ -#define KEY_SDOWN 0x224 /* Shifted down arrow */ - -#define KEY_MIN KEY_BREAK /* Minimum curses key value */ -#define KEY_MAX KEY_SDOWN /* Maximum curses key */ - -#define KEY_F(n) (KEY_F0 + (n)) - -/**************************** Type Definitions *******************************/ -enum -{ - FUSB_HID_SUBCLASS_NONE = 0, - FUSB_HID_SUBCLASS_BOOT = 1 -}; - -typedef enum -{ - FUSB_HID_PROTOCOL_BOOT = 0, - FUSB_HID_PROTOCOL_REPORT = 1 -} FUsbHidProtocol; - -enum -{ - FUSB_HID_BOOT_PROTOCOL_NONE = 0, - FUSB_HID_BOOT_PROTOCOL_KEYBOARD = 1, - FUSB_HID_BOOT_PROTOCOL_MOUSE = 2 -}; - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ -/* USB HID的初始化函数,由应用程序注册到FUSB框架中 */ -void FUsbHidInit(FUsbDev *dev); -int FUsbHidCheckInput(FUsbDev *dev, int times); - -#ifdef __cplusplus -} -#endif - - -#endif diff --git a/bsp/phytium/libraries/standalone/drivers/usb/fusb_hub.c b/bsp/phytium/libraries/standalone/drivers/usb/fusb_hub.c deleted file mode 100644 index bf2bc3cc2c..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/usb/fusb_hub.c +++ /dev/null @@ -1,515 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fusb_hub.c - * Date: 2022-02-11 13:33:07 - * LastEditTime: 2022-02-17 17:48:52 - * Description:  This files is for implmentation of USB hub function - * you may refer to chapter 11 Hub specification for details - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/2/7 init commit - */ - -#include "fkernel.h" -#include "fdebug.h" -#include "fassert.h" - -#include "fusb_private.h" -#include "fusb_generic_hub.h" - -#define FUSB_DEBUG_TAG "FUSB_HUB" -#define FUSB_ERROR(format, ...) FT_DEBUG_PRINT_E(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) -#define FUSB_WARN(format, ...) FT_DEBUG_PRINT_W(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) -#define FUSB_INFO(format, ...) FT_DEBUG_PRINT_I(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) -#define FUSB_DEBUG(format, ...) FT_DEBUG_PRINT_D(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) - -/* assume that FUSB_REQ_HOST_TO_DEVICE is overwritten if necessary */ -#define DR_PORT FUsbGenerateReqType(FUSB_REQ_HOST_TO_DEVICE, FUSB_REQ_TYPE_CLASS, FUSB_REQ_RECP_OTHER) /* 10100011B */ -#define DR_HUB FUsbGenerateReqType(FUSB_REQ_HOST_TO_DEVICE, FUSB_REQ_TYPE_CLASS, FUSB_REQ_RECP_DEV) /* 10100000B */ - -#define FUSB_HUB_PORT_STATUS 0 -#define FUSB_HUB_PORT_CHANGE 1 - -#define FUSB_HUB_PORT_BUF_LEN 2 - -/* status (and status change) bits, refer to Table 10-10, Port Status Field in USB spec */ -#define FUSB_HUB_STATUS_PORT_CONNECTION BIT(0) /* reflects if device is currently connected to this port */ -#define FUSB_HUB_STATUS_PORT_ENABLE BIT(1) /* reflects if this port is enabled */ -#define FUSB_HUB_STATUS_PORT_SUSPEND BIT(2) /* reflects if this port is suspend, only for USB2 */ -#define FUSB_HUB_STATUS_PORT_OVER_CURRENT BIT(3) /* reports over-current conditions in this port */ -#define FUSB_HUB_STATUS_PORT_RESET BIT(4) /* reset signaling asserted */ -#define FUSB_HUB_STATUS_BH_PORT_RESET BIT(5) /* warm reset completed */ -#define FUSB_HUB_STATUS_PORT_LINK_STATE BIT(6) /* link state changed */ -#define FUSB_HUB_STATUS_PORT_PORT_CONFIG_ERROR BIT(7) /* port fails to config */ - -/* feature selectors (for setting / clearing features), refer to USB spec. Table 10-17. Hub Class Feature Selectors for details */ -#define FUSB_HUB_SEL_PORT_RESET 4 -#define FUSB_HUB_SEL_PORT_POWER 8 -#define FUSB_HUB_SEL_C_PORT_CONNECTION 16 -#define FUSB_HUB_SEL_C_PORT_ENABLE 17 /* USB2 only */ -#define FUSB_HUB_SEL_C_PORT_SUSPEND 18 /* USB2 only */ -#define FUSB_HUB_SEL_C_PORT_OVER_CURRENT 19 -#define FUSB_HUB_SEL_C_PORT_RESET 20 -#define FUSB_HUB_SEL_C_PORT_LINK_STATE 25 -#define FUSB_HUB_SEL_C_PORT_CONFIG_ERROR 26 -#define FUSB_HUB_SEL_C_BH_PORT_RESET 27 - -/* request type (USB 3.0 hubs only) */ -#define SET_HUB_DEPTH 12 - -/** - * @name: FUsbHubIntrEp - * @msg: 获取USB Hub的中断端点 - * @return {FUsbEndpoint *} 中断类型的功能端点 - * @param {FUsbDev} *dev, Hub实例 - */ -static FUsbEndpoint *FUsbHubIntrEp(FUsbDev *const dev) -{ - FASSERT(dev); - int i; - - for (i = 0; i < dev->num_endp; ++i) - { - if (dev->endpoints[i].type == FUSB_INTERRUPT_EP && - dev->endpoints[i].direction == FUSB_IN) - { - return &dev->endpoints[i]; - } - } - - return NULL; -} - -/** - * @name: FUsbHubPortStatusChange - * @msg: Usb Hub的Port状态变化回调函数 - * @return {FUsbTransCode} USB请求返回值 - * @param {FUsbDev} *dev, Hub实例 - * @param {int} port, Port号 - */ -static FUsbTransCode FUsbHubPortStatusChange(FUsbDev *const dev, const int port) -{ - FASSERT(dev); - unsigned short buf[FUSB_HUB_PORT_BUF_LEN]; /* Hub Status and Change Status */ - FUsbTransCode ret = FUsbGetStatus(dev, port, DR_PORT, sizeof(buf), buf); - - if (ret >= FUSB_CC_ZERO_BYTES) - { - ret = buf[FUSB_HUB_PORT_CHANGE] & FUSB_HUB_STATUS_PORT_CONNECTION; - if (ret) - { - ret = FUsbClearFeature(dev, port, FUSB_HUB_SEL_C_PORT_CONNECTION, DR_PORT); - } - } - - return ret; -} - -/** - * @name: FUsbHubPortConnected - * @msg: Usb Hub的Port连接回调函数 - * @return {FUsbTransCode} USB请求返回值 - * @param {FUsbDev} *dev, Hub实例 - * @param {int} port, Port号 - */ -static FUsbTransCode FUsbHubPortConnected(FUsbDev *const dev, const int port) -{ - FASSERT(dev); - unsigned short buf[FUSB_HUB_PORT_BUF_LEN]; /* Hub Status and Change Status */ - FUsbTransCode ret = FUsbGetStatus(dev, port, DR_PORT, sizeof(buf), buf); - - if (ret >= FUSB_CC_ZERO_BYTES) - { - ret = buf[FUSB_HUB_PORT_STATUS] & FUSB_HUB_STATUS_PORT_CONNECTION; - } - - return ret; -} - -/** - * @name: FUsbHubPortInReset - * @msg: 检查Hub port是否处于Reset状态 - * @return {FUsbTransCode} USB请求返回值 - * @param {FUsbDev} *dev, Hub实例 - * @param {int} port, Port号 - */ -static FUsbTransCode FUsbHubPortInReset(FUsbDev *const dev, const int port) -{ - FASSERT(dev); - unsigned short buf[FUSB_HUB_PORT_BUF_LEN]; /* Hub Status and Change Status */ - FUsbTransCode ret = FUsbGetStatus(dev, port, DR_PORT, sizeof(buf), buf); - - if (ret >= FUSB_CC_ZERO_BYTES) - { - ret = buf[FUSB_HUB_PORT_STATUS] & FUSB_HUB_STATUS_PORT_RESET; - } - - return ret; -} - -/** - * @name: FUsbHubPortEnabled - * @msg: 检查Hub port是否已使能 - * @return {FUsbTransCode} USB请求返回值 - * @param {FUsbDev} *dev, Hub实例 - * @param {int} port, Port号 - */ -static FUsbTransCode FUsbHubPortEnabled(FUsbDev *const dev, const int port) -{ - FASSERT(dev); - unsigned short buf[FUSB_HUB_PORT_BUF_LEN]; /* Hub Status and Change Status */ - FUsbTransCode ret = FUsbGetStatus(dev, port, DR_PORT, sizeof(buf), buf); - - if (ret >= FUSB_CC_ZERO_BYTES) - { - ret = buf[FUSB_HUB_PORT_STATUS] & FUSB_HUB_STATUS_PORT_ENABLE; - } - - return ret; -} - -/** - * @name: FUsbHubPortSpeed - * @msg: 获取Hub port的速度类型 - * @return {FUsbSpeed} Port的速度类型,支持SuperSpeed和HighSpeed - * @param {FUsbDev} *dev, Hub实例 - * @param {int} port, Port号 - */ -static FUsbSpeed FUsbHubPortSpeed(FUsbDev *const dev, const int port) -{ - FASSERT(dev); - unsigned short buf[FUSB_HUB_PORT_BUF_LEN]; /* Hub Status and Change Status */ - FUsbTransCode ret = FUsbGetStatus(dev, port, DR_PORT, sizeof(buf), buf); - int speed; - - if (ret >= FUSB_CC_ZERO_BYTES && (buf[FUSB_HUB_PORT_STATUS] & FUSB_HUB_STATUS_PORT_ENABLE)) - { - /* SuperSpeed hubs can only have SuperSpeed devices. */ - if (FUsbIsSuperSpeed(dev->speed)) - { - return dev->speed; - } - - /*[bit] 10 9 (USB 2.0 port status word) - * 0 0 full speed - * 0 1 low speed - * 1 0 high speed - * 1 1 invalid - */ - speed = (buf[FUSB_HUB_PORT_STATUS] >> 9) & 0x3; - if (speed != 0x3) /* high-speed device */ - { - return speed; - } - } - - return FUSB_UNKNOWN_SPEED; -} - -/** - * @name: FUsbHubEnablePort - * @msg: 使能Hub port - * @return {FUsbTransCode} USB请求返回值 - * @param {FUsbDev} *dev, Hub实例 - * @param {int} port, port号 - */ -static FUsbTransCode FUsbHubEnablePort(FUsbDev *const dev, const int port) -{ - FASSERT(dev); - return FUsbSetFeature(dev, port, FUSB_HUB_SEL_PORT_POWER, DR_PORT); -} - -/** - * @name: FUsbHubStartPortReset - * @msg: 开始Reset Hub port - * @return {FUsbTransCode} USB请求返回值 - * @param {FUsbDev} *dev, Hub实例 - * @param {int} port, port号 - */ -static FUsbTransCode FUsbHubStartPortReset(FUsbDev *const dev, const int port) -{ - FASSERT(dev); - return FUsbSetFeature(dev, port, FUSB_HUB_SEL_PORT_RESET, DR_PORT); -} - -static void FUsbHubSetHubDepth(FUsbDev *const dev) -{ - FASSERT(dev); - FUsbDevReq dr = - { - .bmRequestType = FUsbGenerateReqType(FUSB_REQ_HOST_TO_DEVICE, - FUSB_REQ_TYPE_CLASS, FUSB_REQ_RECP_DEV), - .bRequest = SET_HUB_DEPTH, - .wValue = 0, - .wIndex = 0, - .wLength = 0, - }; - FUsbDev *parent = dev; - - FASSERT(dev->controller); - while (parent->hub > 0) - { - FASSERT(dev->controller->devices[parent->hub]); - parent = dev->controller->devices[parent->hub]; - dr.wValue++; - } - - FUsbTransCode ret = dev->controller->control(dev, FUSB_OUT, sizeof(dr), &dr, 0, NULL); - if (ret < FUSB_CC_ZERO_BYTES) - { - FUSB_ERROR("Failed SET_HUB_DEPTH(%d) on hub %d: %d ", - dr.wValue, dev->address, ret); - } - - return; -} - -static const FUsbGenericHubOps FUSB_HUB_OPS = -{ - .hub_status_changed = NULL, - .port_status_changed = FUsbHubPortStatusChange, - .port_connected = FUsbHubPortConnected, - .port_in_reset = FUsbHubPortInReset, - .port_enabled = FUsbHubPortEnabled, - .port_speed = FUsbHubPortSpeed, - .enable_port = FUsbHubEnablePort, - .disable_port = NULL, - .start_port_reset = FUsbHubStartPortReset, - .reset_port = FUsbGenericHubResetPort, -}; - -/* Clear CSC if set and enumerate port if it's connected regardless of change - bits. Some broken hubs don't set CSC if already connected during reset. */ -static void FUsbHubPortInit(FUsbDev *const dev, const int port) -{ - FASSERT(dev); - unsigned short buf[FUSB_HUB_PORT_BUF_LEN]; /* Hub Status and Change Status */ - FUsbTransCode ret = FUsbGetStatus(dev, port, DR_PORT, sizeof(buf), buf); - - if (ret < FUSB_CC_ZERO_BYTES) - { - return; - } - - if (buf[FUSB_HUB_PORT_CHANGE] & FUSB_HUB_STATUS_PORT_CONNECTION) - { - FUsbClearFeature(dev, port, FUSB_HUB_SEL_C_PORT_CONNECTION, DR_PORT); - } - - if (buf[FUSB_HUB_PORT_STATUS] & FUSB_HUB_STATUS_PORT_CONNECTION) - { - FUSB_INFO("Usb hub: Port coldplug at %d ", port); - FUsbGenericHubScanPort(dev, port); - } - - return; -} - -/** - * @name: FUsbHubHandlePortChange - * @msg: Hub端口状态变化的处理回调函数 - * @return {*} - * @param {FUsbDev} *dev - * @param {int} port - */ -static FUsbTransCode FUsbHubHandlePortChange(FUsbDev *const dev, const int port) -{ - FASSERT(dev); - static const struct - { - unsigned short change_bit; - unsigned short clear_sel; - } change_bits[] = - { - {FUSB_HUB_STATUS_PORT_CONNECTION, FUSB_HUB_SEL_C_PORT_CONNECTION}, - {FUSB_HUB_STATUS_PORT_ENABLE, FUSB_HUB_SEL_C_PORT_ENABLE}, - {FUSB_HUB_STATUS_PORT_SUSPEND, FUSB_HUB_SEL_C_PORT_SUSPEND}, - {FUSB_HUB_STATUS_PORT_OVER_CURRENT, FUSB_HUB_SEL_C_PORT_OVER_CURRENT}, - {FUSB_HUB_STATUS_PORT_RESET, FUSB_HUB_SEL_C_PORT_RESET}, - {FUSB_HUB_STATUS_BH_PORT_RESET, FUSB_HUB_SEL_C_BH_PORT_RESET}, - {FUSB_HUB_STATUS_PORT_LINK_STATE, FUSB_HUB_SEL_C_PORT_LINK_STATE}, - {FUSB_HUB_STATUS_PORT_PORT_CONFIG_ERROR, FUSB_HUB_SEL_C_PORT_CONFIG_ERROR}, - }; - - FUsbTransCode ret = 0; - unsigned int i; - unsigned short checked_bits = 0; - unsigned short buf[FUSB_HUB_PORT_BUF_LEN] = {0, 0}; /* Hub Status and Change Status */ - - ret = FUsbGetStatus(dev, port, DR_PORT, sizeof(buf), buf); - if (ret < FUSB_CC_ZERO_BYTES) - { - return ret; - } - - /* - * Second word holds the change bits. The interrupt transfer shows - * a logical or of these bits, so we have to clear them all. - */ - for (i = 0; i < ARRAY_SIZE(change_bits); ++i) - { - if (buf[FUSB_HUB_PORT_CHANGE] & change_bits[i].change_bit) - { - /* clear feature if specific change bit = 1 */ - FUsbClearFeature(dev, port, change_bits[i].clear_sel, DR_PORT); - } - - checked_bits |= change_bits[i].change_bit; - } - - if (buf[FUSB_HUB_PORT_CHANGE] & ~checked_bits) - { - FUSB_DEBUG("Spurious change bit at port %d ", port); - } - - /* Now, handle connection changes. */ - if (buf[FUSB_HUB_PORT_CHANGE] & FUSB_HUB_STATUS_PORT_CONNECTION) - { - FUSB_DEBUG("Port change at %d ", port); - ret = FUsbGenericHubScanPort(dev, port); - } - - return ret; -} - -/** - * @name: FUsbHubPoll - * @msg: 轮询Hub的所有端口,检查端口状态变化 - * @return {*} - * @param {FUsbDev} *dev, Hub设备实例 - */ -static void FUsbHubPoll(FUsbDev *const dev) -{ - FASSERT(dev); - int port, i; - u8 buf[32] = {0}; - const u8 *ibuf; - - /* First, gather all change bits from finished interrupt transfers. */ - const size_t port_bytes = min(ARRAY_SIZE(buf), - (size_t)DIV_ROUND_UP(FUSB_GEN_HUB_GET(dev)->num_ports + 1, 8)); - - while (NULL != (ibuf = dev->controller->poll_intr_queue(FUSB_GEN_HUB_GET(dev)->data))) - { - for (i = 0; (size_t)i < port_bytes; ++i) - { - buf[i] |= ibuf[i]; - } - } - - for (port = 1; port <= FUSB_GEN_HUB_GET(dev)->num_ports; ++port) - { - /* ports start at bit1; bit0 is hub status change */ - if (buf[port / 8] & (1 << (port % 8))) - { - if (FUsbHubHandlePortChange(dev, port) < 0) - { - return; - } - } - } - - return; -} - -/** - * @name: FUsbHubDestory - * @msg: USB Hub的去初始化函数 - * @return {*} - * @param {FUsbDev} *dev, Hub设备实例 - */ -static void FUsbHubDestory(FUsbDev *const dev) -{ - FASSERT(dev); - FUsbEndpoint *const intr_ep = FUsbHubIntrEp(dev); - FASSERT(intr_ep); /* interrupt ep must exists */ - dev->controller->destroy_intr_queue(intr_ep, FUSB_GEN_HUB_GET(dev)->data); - FUsbGenericHubDestory(dev); -} - -/** - * @name: FUsbHubInit - * @msg: USB Hub的初始化函数,由应用程序注册到FUSB框架中 - * @return {*} - * @param {FUsbDev} *dev, Hub设备实例 - */ -void FUsbHubInit(FUsbDev *dev) -{ - FASSERT(dev); - FUsbEndpoint *const intr_ep = FUsbHubIntrEp(dev); /* get the first intrrupt ep found */ - if (NULL == intr_ep) - { - FUSB_ERROR("No interrupt-in endpoint found "); - return; - } - - FASSERT(dev->controller); - - /* Get number of ports from hub descriptor */ - int type = FUsbIsSuperSpeed(dev->speed) ? FUSB_DESC_TYPE_SUPER_SPEED_HUB : FUSB_DESC_TYPE_HUB; /* similar enough */ - FUsbHubDescriptor desc; /* won't fit the whole thing, we don't care */ - if (FUsbGetDescriptor(dev, FUsbGenerateReqType(FUSB_REQ_DEVICE_TO_HOST, FUSB_REQ_TYPE_CLASS, FUSB_REQ_RECP_DEV), type, 0, &desc, sizeof(desc)) != sizeof(desc)) - { - FUSB_ERROR("FUsbGetDescriptor(HUB) failed "); - FUsbDetachDev(dev->controller, dev->address); - return; - } - - if (FUsbIsSuperSpeed(dev->speed)) - { - FUsbHubSetHubDepth(dev); - } - - /* - * Register interrupt transfer: - * one bit per port + one bit for the hub, - * 20 transfers in the queue, like our HID driver, - * one transfer per 256ms - */ - void *const intrq = dev->controller->create_intr_queue( - intr_ep, intr_ep->maxpacketsize, 20, 256); - if (NULL == intrq) - { - FUsbDetachDev(dev->controller, dev->address); - return; - } - - /* - * Limit the number of ports by the max packet size of - * the interrupt endpoint. This shouldn't be necessary - * but prevents a potential overflow in FUsbHubPoll(). - */ - const unsigned int num_ports = - min((int)desc.bNbrPorts, intr_ep->maxpacketsize * 8 - 1); - if (FUsbGenericHubInit(dev, num_ports, &FUSB_HUB_OPS)) - { - dev->controller->destroy_intr_queue(intr_ep, intrq); - FUsbDetachDev(dev->controller, dev->address); - return; - } - - unsigned int port; - for (port = 1; port <= num_ports; ++port) - { - FUsbHubPortInit(dev, port); - } - - FUSB_GEN_HUB_GET(dev)->data = intrq; - dev->poll = FUsbHubPoll; - dev->destroy = FUsbHubDestory; - - return; -} diff --git a/bsp/phytium/libraries/standalone/drivers/usb/fusb_hub.h b/bsp/phytium/libraries/standalone/drivers/usb/fusb_hub.h deleted file mode 100644 index 62750491d9..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/usb/fusb_hub.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fusb_hub.h - * Date: 2022-02-11 13:33:09 - * LastEditTime: 2022-02-17 17:49:20 - * Description:  This files is for definition of USB hub device function - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/2/7 init commit - */ - -#ifndef FUSB_HUB_H -#define FUSB_HUB_H - -/***************************** Include Files *********************************/ - -#include "fusb.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ -enum -{ - FUSB_HUB_SUBCLASS_DEFAULT = 0x0 -}; - -enum -{ - FUSB_HUB_PROTOCOL_FULL_SPEED = 0x0, - FUSB_HUB_PROTOCOL_HIGH_SPEED_WITH_SINGLE_TT = 0x1, - FUSB_HUB_PROTOCOL_HIGH_SPEED_WITH_MULTIPLE_TT = 0x2 -}; - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ -/* USB Hub的初始化函数,由应用程序注册到FUSB框架中 */ -void FUsbHubInit(FUsbDev *dev); - -#ifdef __cplusplus -} -#endif - - -#endif diff --git a/bsp/phytium/libraries/standalone/drivers/usb/fusb_msc.c b/bsp/phytium/libraries/standalone/drivers/usb/fusb_msc.c deleted file mode 100644 index 237db1db64..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/usb/fusb_msc.c +++ /dev/null @@ -1,906 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fusb_msc.c - * Date: 2022-02-11 13:33:09 - * LastEditTime: 2022-02-17 17:49:43 - * Description:  This files is for implementation of USB mass storage function - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/2/7 init commit - */ - -#include -#include "fparameters.h" -#include "fswap.h" -#include "fsleep.h" -#include "fassert.h" -#include "fgeneric_timer.h" -#include "fdebug.h" - -#include "fusb.h" -#include "fusb_msc.h" - - -#define FUSB_DEBUG_TAG "FUSB_MSC" -#define FUSB_ERROR(format, ...) FT_DEBUG_PRINT_E(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) -#define FUSB_WARN(format, ...) FT_DEBUG_PRINT_W(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) -#define FUSB_INFO(format, ...) FT_DEBUG_PRINT_I(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) -#define FUSB_DEBUG(format, ...) FT_DEBUG_PRINT_D(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) - -static inline tick_t FUsbMscGetTick(void) -{ - return GenericTimerRead(GENERIC_TIMER_ID0); -} - -static inline tick_t FUsbMscStartTick(void) -{ - GenericTimerStart(GENERIC_TIMER_ID0); - return FUsbMscGetTick(); -} - -static inline void FUsbMscStopTick(void) -{ - GenericTimerStop(GENERIC_TIMER_ID0); -} - -static inline boolean FUsbMscTimeout(tick_t start_tick, tick_t timeout_tick) -{ - return (FUsbMscGetTick() - start_tick) > timeout_tick; -} - -static void FUsbMassStorageForceInit(FUsbDev *dev, u32 quirks); -static int FUsbMscRwBlks(FUsbDev *dev, int start, int n, FUsbMassStorageDirection dir, u8 *buf); - -static const char *FUsbMscSubClassString[7] = -{ - "(none)", - "RBC", - "MMC-2", - "QIC-157", - "UFI", - "SFF-8070i", - "SCSI transparent" -}; - -static const char *FUsbMscProtocolStrings[0x51] = -{ - "Control/Bulk/Interrupt protocol (with command completion interrupt)", - "Control/Bulk/Interrupt protocol (with no command completion interrupt)", - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - "Bulk-Only Transport" -}; - -/** - * @name: FUsbMscCreateDisk - * @msg: 调用应用程序实现的钩子函数,创建USB Disk - * @return {*} - * @param {FUsbDev} *dev, USB大容量存储设备实例 - */ -static void FUsbMscCreateDisk(FUsbDev *dev) -{ - FASSERT(dev); - - if (FUsbDiskCreate) - { - FUsbDiskCreate(dev); - MSC_INST(dev)->usbdisk_created = 1; - } - - return; -} - -/** - * @name: FUsbMscRemoveDisk - * @msg: 调用应用程序实现的钩子函数,移除USB Disk - * @return {*} - * @param {FUsbDev} *dev, USB大容量存储设备实例 - */ -static void FUsbMscRemoveDisk(FUsbDev *dev) -{ - FASSERT(dev); - - if (MSC_INST(dev)->usbdisk_created && FUsbDiskRemove) - { - FUsbDiskRemove(dev); - } - - return; -} - -/** - * @name: FUsbMscDestory - * @msg: 移除USB大容量存储设备实例 - * @return {*} - * @param {FUsbDev} *dev, USB大容量存储设备实例 - */ -static void FUsbMscDestory(FUsbDev *dev) -{ - FASSERT(dev && dev->controller); - FUsb *instance = dev->controller->usb; - FASSERT(instance); - - if (NULL != dev->data) - { - FUsbMscRemoveDisk(dev); - FUSB_FREE(instance, dev->data); - } - - dev->data = NULL; - return; -} - -const int DEV_RESET = 0xff; -const int GET_MAX_LUN = 0xfe; -/* Many USB3 devices do not work with large transfer requests. - * Limit the request size to 64KB chunks to ensure maximum compatibility. */ -const int MAX_CHUNK_BYTES = 1024 * 64; - -const unsigned int cbw_signature = 0x43425355; /* according to USB mass-bulk spec. helps to identify data packets */ -const unsigned int csw_signature = 0x53425355; - -/* following data structure following name convention in USB mass-bulk spec., which may not compiliance to other code */ - -/* A packet containing a command block and associated information. */ -typedef struct -{ - unsigned int dCBWSignature; - unsigned int dCBWTag; - unsigned int dCBWDataTransferLength; - unsigned char bmCBWFlags; - unsigned long bCBWLUN : 4; /* device Logical Unit Number (LUN) */ - unsigned long : 4; - unsigned long bCBWCBLength : 5; - unsigned long : 3; - unsigned char CBWCB[31 - 15]; -} __attribute__((packed)) FUsbMscCbw; /* Command Block Wrapper (CBW) */ - -/* A packet containing the status of a command block */ -typedef struct -{ - unsigned int dCSWSignature; - unsigned int dCSWTag; - unsigned int dCSWDataResidue; - unsigned char bCSWStatus; -} __attribute__((packed)) FUsbMscCsw; - -enum -{ - /* - * MSC commands can be - * successful, - * fail with proper response or - * fail totally, which results in detaching of the USB device - * and immediate cleanup of the FUsbDev structure. - * In the latter case the caller has to make sure, that he won't - * use the device any more. - */ - MSC_COMMAND_OK = 0, - MSC_COMMAND_FAIL, - MSC_COMMAND_DETACHED -}; - -static int FUsbMscRequestSense(FUsbDev *dev); -static int FUsbMscRequestNoMedia(FUsbDev *dev); -static void FUsbMscPoll(FUsbDev *dev); - -static int FUsbClearStall(FUsbEndpoint *ep) -{ - FASSERT(ep); - int ret = FUsbClearFeature(ep->dev, ep->endpoint, FUSB_ENDPOINT_HALT, - FUsbGenerateReqType(FUSB_REQ_HOST_TO_DEVICE, FUSB_REQ_TYPE_STANDARD, FUSB_REQ_RECP_EP)); - - ep->toggle = 0; - - return ret; -} - -static int FUsbMscResetTransport(FUsbDev *dev) -{ - FUsbDevReq dr; - memset(&dr, 0, sizeof(dr)); - dr.bmRequestType = 0; - dr.data_dir = FUSB_REQ_HOST_TO_DEVICE; - dr.req_type = FUSB_REQ_TYPE_CLASS; - dr.req_recp = FUSB_REQ_RECP_IF; - dr.bRequest = DEV_RESET; - dr.wValue = 0; - dr.wIndex = 0; - dr.wLength = 0; - - if (MSC_INST(dev)->quirks & FUSB_MSC_QUIRK_NO_RESET) - { - return MSC_COMMAND_FAIL; - } - - /* if any of these fails, detach device, as we are lost */ - if (dev->controller->control(dev, FUSB_OUT, sizeof(dr), &dr, 0, 0) < 0 || - FUsbClearStall(MSC_INST(dev)->bulk_in) || - FUsbClearStall(MSC_INST(dev)->bulk_out)) - { - FUSB_INFO("Detaching unresponsive device. "); - FUsbDetachDev(dev->controller, dev->address); - return MSC_COMMAND_DETACHED; - } - /* return fail as we are only called in case of failure */ - return MSC_COMMAND_FAIL; -} - -/* device may stall this command, so beware! */ -static void FUsbMscInitLuns(FUsbDev *dev) -{ - FUsbMassStorage *msc = MSC_INST(dev); - FUsbDevReq dr; - dr.bmRequestType = 0; - dr.data_dir = FUSB_REQ_DEVICE_TO_HOST; - dr.req_type = FUSB_REQ_TYPE_CLASS; - dr.req_recp = FUSB_REQ_RECP_IF; - dr.bRequest = GET_MAX_LUN; - dr.wValue = 0; - dr.wIndex = 0; - dr.wLength = 1; - - /* send class-spefic request Get Max Lun */ - if ((MSC_INST(dev)->quirks & FUSB_MSC_QUIRK_NO_LUNS) || - (dev->controller->control(dev, FUSB_IN, sizeof(dr), &dr, - sizeof(msc->num_luns), &msc->num_luns) < FUSB_CC_ZERO_BYTES)) - { - msc->num_luns = 0; /* assume only 1 lun if req fails */ - } - - msc->num_luns++; /* Get Max LUN returns number of last LUN */ - msc->lun = 0; - - return; -} - -unsigned int tag; -static void FUsbMscWrapCbw(FUsbMscCbw *cbw, int datalen, FUsbMassStorageDirection dir, const u8 *cmd, - int cmdlen, u8 lun) -{ - memset(cbw, 0, sizeof(FUsbMscCbw)); - - /* commands are typically shorter, but we don't want overflows */ - if ((size_t)cmdlen > sizeof(cbw->CBWCB)) - { - cmdlen = (int)sizeof(cbw->CBWCB); - } - - cbw->dCBWSignature = cbw_signature; - cbw->dCBWTag = ++tag; /* command block tag to device */ - cbw->bCBWLUN = lun; /* logic unit number to send */ - - cbw->dCBWDataTransferLength = datalen; /* number of bytes of data expect to transfer */ - cbw->bmCBWFlags = dir; - - memcpy(cbw->CBWCB, cmd, cmdlen); /* the command block to be executed by the device */ - - cbw->bCBWCBLength = cmdlen; /* the valid length of the CBWCB in bytes */ - return; -} - -static int FUsbMscGetCsw(FUsbEndpoint *ep, FUsbMscCsw *csw) -{ - FUsbHc *ctrlr = ep->dev->controller; - int ret = ctrlr->bulk(ep, sizeof(FUsbMscCsw), (u8 *)csw, 1); - - /* Some broken sticks send a zero-length packet at the end of their data - transfer which would show up here. Skip it to get the actual CSW. */ - if (ret == 0) - { - ret = ctrlr->bulk(ep, sizeof(FUsbMscCsw), (u8 *)csw, 1); - } - - if (ret < 0) - { - FUsbClearStall(ep); - ret = ctrlr->bulk(ep, sizeof(FUsbMscCsw), (u8 *)csw, 1); - if (ret < 0) - { - return FUsbMscResetTransport(ep->dev); - } - } - - if (ret != sizeof(FUsbMscCsw) || csw->dCSWTag != tag || - csw->dCSWSignature != csw_signature) - { - FUSB_INFO("MSC: received malformed CSW "); - return FUsbMscResetTransport(ep->dev); - } - - return MSC_COMMAND_OK; -} - -static int FUsbMscExecCmd(FUsbDev *dev, FUsbMassStorageDirection dir, const u8 *cb, int cblen, - u8 *buf, int buflen, int residue_ok) -{ - FUsbMscCbw cbw; - FUsbMscCsw csw; - - int always_succeed = 0; - if ((cb[0] == 0x1b) && (cb[4] == 1)) /* check if it is Bulk-Only Mass Storage Reset request with reques type 00100001b */ - { - /* start command, always succeed */ - always_succeed = 1; - } - - FUsbMscWrapCbw(&cbw, buflen, dir, cb, cblen, MSC_INST(dev)->lun); - - if (dev->controller->bulk(MSC_INST(dev)->bulk_out, sizeof(cbw), (u8 *)&cbw, 0) < 0) - { - return FUsbMscResetTransport(dev); - } - - if (buflen > 0) - { - if (dir == FUSB_DIR_DATA_IN) - { - if (dev->controller->bulk(MSC_INST(dev)->bulk_in, buflen, buf, 0) < 0) - { - FUsbClearStall(MSC_INST(dev)->bulk_in); - } - } - else - { - if (dev->controller->bulk(MSC_INST(dev)->bulk_out, buflen, buf, 0) < 0) - { - FUsbClearStall(MSC_INST(dev)->bulk_out); - } - } - } - - int ret = FUsbMscGetCsw(MSC_INST(dev)->bulk_in, &csw); - - if (ret) - { - return ret; - } - else if (always_succeed == 1) - { - /* return success, regardless of message */ - return MSC_COMMAND_OK; - } - else if (csw.bCSWStatus == 2) - { - /* phase error, reset transport */ - return FUsbMscResetTransport(dev); - } - else if (csw.bCSWStatus == 0) - { - if ((csw.dCSWDataResidue == 0) || residue_ok) - /* no error, exit */ - { - return MSC_COMMAND_OK; - } - else - /* missed some bytes */ - { - return MSC_COMMAND_FAIL; - } - } - else - { - if (cb[0] == 0x03) - /* requesting sense failed, that's bad */ - { - return MSC_COMMAND_FAIL; - } - else if (cb[0] == 0) - /* If command was TEST UNIT READY determine if the - * device is of removable type indicating no media - * found. */ - { - return FUsbMscRequestNoMedia(dev); - } - /* error "check condition" or reserved error */ - ret = FUsbMscRequestSense(dev); - /* return fail or the status of FUsbMscRequestSense if it's worse */ - return ret ? ret : MSC_COMMAND_FAIL; - } -} - -typedef struct -{ - unsigned char command; /* 0 */ - unsigned char res1; /* 1 */ - unsigned int block; /* 2-5 */ - unsigned char res2; /* 6 */ - unsigned short numblocks; /* 7-8 */ - unsigned char control; /* 9 - the block is 10 bytes long */ -} __attribute__((packed)) FUsbMscCmdBlk; - -typedef struct -{ - unsigned char command; /* 0 */ - unsigned char res1; /* 1 */ - unsigned char res2; /* 2 */ - unsigned char res3; /* 3 */ - union - { - /* 4 */ - struct - { - unsigned long start : 1; /* for START STOP UNIT */ - unsigned long : 7; - }; - unsigned char length; /* for REQUEST SENSE */ - }; - unsigned char control; /* 5 */ -} __attribute__((packed)) FUsbMscCmdBlk6; - -/** - * Like FUsbMscRwBlks, but for soft-sectors of 512b size. Converts the - * start and count from 512b units. - * Start and count must be aligned so that they match the native - * sector size. - * - */ -/** - * @name: FUsbMscRwBlk512 - * @msg: 读写USB大容量存储设备,以512字节为一块 - * @param dev device to access - * @param start first sector to access - * @param n number of sectors to access - * @param dir direction of access: FUSB_DIR_DATA_IN == read, FUSB_DIR_DATA_OUT == write - * @param buf buffer to read into or write from. Must be at least n*512 bytes - * @return 0 on success, 1 on failure - */ -int FUsbMscRwBlk512(FUsbDev *dev, int start, int n, - FUsbMassStorageDirection dir, u8 *buf) -{ - int blocksize_divider = MSC_INST(dev)->blocksize / 512; - return FUsbMscRwBlks(dev, start / blocksize_divider, - n / blocksize_divider, dir, buf); -} - -/** - * Reads or writes a number of sequential blocks on a USB storage device. - * As it uses the READ(10) SCSI-2 command, it's limited to storage devices - * of at most 2TB. It assumes sectors of 512 bytes. - * - * @param dev device to access - * @param start first sector to access - * @param n number of sectors to access - * @param dir direction of access: FUSB_DIR_DATA_IN == read, FUSB_DIR_DATA_OUT == write - * @param buf buffer to read into or write from. Must be at least n*sectorsize bytes - * @return 0 on success, 1 on failure - */ -static int FUsbMscRwChunk(FUsbDev *dev, int start, int n, FUsbMassStorageDirection dir, u8 *buf) -{ - FUsbMscCmdBlk cb; - memset(&cb, 0, sizeof(cb)); - if (dir == FUSB_DIR_DATA_IN) - { - /* read */ - cb.command = 0x28; - } - else - { - /* write */ - cb.command = 0x2a; - } - cb.block = htonl(start); - cb.numblocks = htons(n); - - return FUsbMscExecCmd(dev, dir, (u8 *)&cb, sizeof(cb), buf, - n * MSC_INST(dev)->blocksize, 0) != MSC_COMMAND_OK - ? 1 - : 0; -} - -/** - * Reads or writes a number of sequential blocks on a USB storage device - * that is split into MAX_CHUNK_BYTES size requests. - * - * As it uses the READ(10) SCSI-2 command, it's limited to storage devices - * of at most 2TB. It assumes sectors of 512 bytes. - * - * @param dev device to access - * @param start first sector to access - * @param n number of sectors to access - * @param dir direction of access: FUSB_DIR_DATA_IN == read, - * FUSB_DIR_DATA_OUT == write - * @param buf buffer to read into or write from. - * Must be at least n*sectorsize bytes - * @return 0 on success, 1 on failure - */ -static int FUsbMscRwBlks(FUsbDev *dev, int start, int n, FUsbMassStorageDirection dir, u8 *buf) -{ - int chunk_size = MAX_CHUNK_BYTES / MSC_INST(dev)->blocksize; - int chunk; - - /* Read as many full chunks as needed. */ - for (chunk = 0; chunk < (n / chunk_size); chunk++) - { - if (FUsbMscRwChunk(dev, start + (chunk * chunk_size), - chunk_size, dir, - buf + (chunk * MAX_CHUNK_BYTES)) != MSC_COMMAND_OK) - { - return 1; - } - } - - /* Read any remaining partial chunk at the end. */ - if (n % chunk_size) - { - if (FUsbMscRwChunk(dev, start + (chunk * chunk_size), - n % chunk_size, dir, - buf + (chunk * MAX_CHUNK_BYTES)) != MSC_COMMAND_OK) - { - return 1; - } - } - - return 0; -} - -/* Only request it, we don't interpret it. - On certain errors, that's necessary to get devices out of - a special state called "Contingent Allegiance Condition" */ -static int FUsbMscRequestSense(FUsbDev *dev) -{ - u8 buf[19]; - FUsbMscCmdBlk6 cb; - memset(&cb, 0, sizeof(cb)); - cb.command = 0x3; - cb.length = sizeof(buf); - - return FUsbMscExecCmd(dev, FUSB_DIR_DATA_IN, (u8 *)&cb, - sizeof(cb), buf, sizeof(buf), 1); -} - -static int FUsbMscRequestNoMedia(FUsbDev *dev) -{ - u8 buf[19]; - int ret; - FUsbMscCmdBlk6 cb; - memset(&cb, 0, sizeof(cb)); - cb.command = 0x3; - cb.length = sizeof(buf); - - ret = FUsbMscExecCmd(dev, FUSB_DIR_DATA_IN, (u8 *)&cb, - sizeof(cb), buf, sizeof(buf), 1); - - if (ret) - { - return ret; - } - - /* Check if sense key is set to NOT READY. */ - if ((buf[2] & 0xf) != 2) - { - return MSC_COMMAND_FAIL; - } - - /* Check if additional sense code is 0x3a. */ - if (buf[12] != 0x3a) - { - return MSC_COMMAND_FAIL; - } - - /* No media is present. Return MSC_COMMAND_OK while marking the disk - * not ready. */ - FUSB_INFO("Empty media found. "); - MSC_INST(dev)->ready = FUSB_MSC_NOT_READY; - return MSC_COMMAND_OK; -} - -static int FUsbMscCheckIfReady(FUsbDev *dev) -{ - FUsbMscCmdBlk6 cb; - memset(&cb, 0, sizeof(cb)); /* full initialization for T-U-R */ - - /* Bulk-Only Mass Storage Reset, class-specific request */ - return FUsbMscExecCmd(dev, FUSB_DIR_DATA_OUT, (u8 *)&cb, - sizeof(cb), 0, 0, 0); -} - -static int FUsbMscSpinUp(FUsbDev *dev) -{ - FUsbMscCmdBlk6 cb; - memset(&cb, 0, sizeof(cb)); - cb.command = 0x1b; - cb.start = 1; - return FUsbMscExecCmd(dev, FUSB_DIR_DATA_OUT, (u8 *)&cb, - sizeof(cb), 0, 0, 0); -} - -static int FUsbMscReadCapcity(FUsbDev *dev) -{ - FUsbMscCmdBlk cb; - memset(&cb, 0, sizeof(cb)); - cb.command = 0x25; /* read capacity */ - u32 buf[2]; - - FUSB_INFO("Reading capacity of mass storage device. "); - int count = 0, ret; - while (count++ < 20) - { - switch (ret = FUsbMscExecCmd(dev, FUSB_DIR_DATA_IN, (u8 *)&cb, - sizeof(cb), (u8 *)buf, 8, 0)) - { - case MSC_COMMAND_OK: - break; - case MSC_COMMAND_FAIL: - continue; - default: /* if it's worse return */ - return ret; - } - break; - } - if (count >= 20) - { - /* still not successful, assume 2tb in 512byte sectors, which is just the same garbage as any other number, but probably more usable. */ - FUSB_WARN("Assuming 2 TB with 512-byte sectors as read capacity didn't answer. "); - MSC_INST(dev)->numblocks = 0xffffffff; - MSC_INST(dev)->blocksize = 512; - } - else - { - MSC_INST(dev)->numblocks = ntohl(buf[0]) + 1; - MSC_INST(dev)->blocksize = ntohl(buf[1]); - } - - FUSB_INFO(" %d %d-byte sectors (%d MB) ", MSC_INST(dev)->numblocks, - MSC_INST(dev)->blocksize, - /* round down high block counts to avoid integer overflow */ - MSC_INST(dev)->numblocks > 1000000 - ? (MSC_INST(dev)->numblocks / 1000) * MSC_INST(dev)->blocksize / 1000 - : MSC_INST(dev)->numblocks * MSC_INST(dev)->blocksize / 1000 / 1000); - - return MSC_COMMAND_OK; -} - -static int FUsbMscWaitReady(FUsbDev *dev) -{ - int i; - /* SCSI/ATA specs say we have to wait up to 30s, but most devices - * are ready much sooner. Use a 5 sec timeout to better accommodate - * devices which fail to respond. */ - const tick_t timeout_tick = 1000000; - FError ret = FUSB_ERR_WAIT_TIMEOUT; - - FUSB_INFO(" Waiting for device to become ready..."); - - /* Initially mark the device ready. */ - MSC_INST(dev)->ready = FUSB_MSC_READY; - tick_t start_tick = FUsbMscStartTick(); - - do - { - switch (FUsbMscCheckIfReady(dev)) - { - case MSC_COMMAND_OK: - break; - case MSC_COMMAND_FAIL: - fsleep_millisec(100); - FUSB_INFO("."); - continue; - default: - /* Device detached, return immediately */ - return FUSB_MSC_DETACHED; - } - break; - } - while (!FUsbMscTimeout(start_tick, timeout_tick)); - - if (FUsbMscTimeout(start_tick, timeout_tick)) - { - FUSB_INFO("Timeout. Device not ready. "); - MSC_INST(dev)->ready = FUSB_MSC_NOT_READY; - } - - /* Don't bother spinning up the storage device if the device is not - * ready. This can happen when empty card readers are present. - * Polling will pick it back up if readiness changes. */ - if (!MSC_INST(dev)->ready) - { - return MSC_INST(dev)->ready; - } - - for (i = 0; i < 30; i++) - { - FUSB_INFO("."); - switch (FUsbMscSpinUp(dev)) - { - case MSC_COMMAND_OK: - FUSB_INFO(" OK."); - break; - case MSC_COMMAND_FAIL: - fsleep_millisec(100); - continue; - default: - /* Device detached, return immediately */ - return FUSB_MSC_DETACHED; - } - break; - } - - if (FUsbMscReadCapcity(dev) == MSC_COMMAND_DETACHED) - { - return FUSB_MSC_DETACHED; - } - - return MSC_INST(dev)->ready; -} - -/** - * @name: FUsbMassStorageInit - * @msg: USB大容量存储设备的初始化函数,由应用程序注册到FUSB框架中 - * @return {*} - * @param {FUsbDev} *dev, USB大容量存储设备实例 - */ -void FUsbMassStorageInit(FUsbDev *dev) -{ - FASSERT(dev && dev->configuration); - FUsbConfigurationDescriptor *cd = - (FUsbConfigurationDescriptor *)dev->configuration; - FASSERT(FUSB_DESC_TYPE_CONFIG == cd->bDescriptorType); - FUsbInterfaceDescriptor *interface = - (FUsbInterfaceDescriptor *)(((char *)cd) + cd->bLength); - FASSERT(FUSB_DESC_TYPE_INTERFACE == interface->bDescriptorType); - - if (FUSB_MASS_STORAGE_DEVICE != interface->bInterfaceClass) - { - FUSB_ERROR("Class %d not supported. ", interface->bInterfaceClass); - return; - } - - FUSB_INFO(" command set: %s protocol: %s ", - FUsbMscSubClassString[interface->bInterfaceSubClass], - FUsbMscProtocolStrings[interface->bInterfaceProtocol]); - - if (interface->bInterfaceProtocol != FUSB_MSC_PROTOCOL_BULK_ONLY) - { - FUSB_ERROR(" Protocol not supported. "); - FUsbDetachDev(dev->controller, dev->address); - return; - } - - if ((interface->bInterfaceSubClass != FUSB_MSC_SUBCLASS_ATAPI_8020) && /* ATAPI 8020 */ - (interface->bInterfaceSubClass != FUSB_MSC_SUBCLASS_ATAPI_8070) && /* ATAPI 8070 */ - (interface->bInterfaceSubClass != FUSB_MSC_SUBCLASS_SCSI)) - { - /* SCSI */ - /* Other protocols, such as ATAPI don't seem to be very popular. looks like ATAPI would be really easy to add, if necessary. */ - FUSB_ERROR(" Interface SubClass not supported. "); - FUsbDetachDev(dev->controller, dev->address); - return; - } - - FUsbMassStorageForceInit(dev, 0); - return; -} - -/* Force a device to enumerate as MSC, without checking class/protocol types. - It must still have a bulk endpoint pair and respond to MSC commands. */ -static void FUsbMassStorageForceInit(FUsbDev *dev, u32 quirks) -{ - FASSERT(dev && dev->controller); - int i; - FUsb *instance = dev->controller->usb; - FASSERT(instance); - - /* init .data before setting .destroy */ - dev->data = NULL; - dev->destroy = FUsbMscDestory; - dev->poll = FUsbMscPoll; - - FASSERT(NULL == dev->data); - dev->data = FUSB_ALLOCATE(instance, sizeof(FUsbMassStorage), FUSB_DEFAULT_ALIGN); - if (NULL == dev->data) - { - FUSB_ERROR("Not enough memory for USB MSC device. "); - FASSERT(0); - } - - MSC_INST(dev)->bulk_in = NULL; - MSC_INST(dev)->bulk_out = NULL; - MSC_INST(dev)->usbdisk_created = 0; - MSC_INST(dev)->quirks = quirks; - - /* loop over all ep except ep0 to get bulk-in/bulk-out ep instance */ - for (i = 1; i <= dev->num_endp; i++) - { - if (dev->endpoints[i].endpoint == 0) - { - continue; - } - if (dev->endpoints[i].type != FUSB_BULK_EP) - { - continue; - } - if ((dev->endpoints[i].direction == FUSB_IN) && (MSC_INST(dev)->bulk_in == 0)) - { - MSC_INST(dev)->bulk_in = &dev->endpoints[i]; - } - if ((dev->endpoints[i].direction == FUSB_OUT) && (MSC_INST(dev)->bulk_out == 0)) - { - MSC_INST(dev)->bulk_out = &dev->endpoints[i]; - } - } - - /* check if non bulk-in ep */ - if (MSC_INST(dev)->bulk_in == NULL) - { - FUSB_ERROR("Couldn't find bulk-in endpoint."); - FUsbDetachDev(dev->controller, dev->address); - return; - } - - /* check if non bulk-out ep */ - if (MSC_INST(dev)->bulk_out == NULL) - { - FUSB_ERROR("Couldn't find bulk-out endpoint."); - FUsbDetachDev(dev->controller, dev->address); - return; - } - - FUSB_INFO("Using endpoint %x as in, %x as out.", - MSC_INST(dev)->bulk_in->endpoint, - MSC_INST(dev)->bulk_out->endpoint); - - /* Some sticks need a little more time to get ready after SET_CONFIG. */ - fsleep_microsec(50); - - FUsbMscInitLuns(dev); - FUSB_INFO("Has %d luns.", MSC_INST(dev)->num_luns); - - /* Test if msc is ready (nothing to do if it isn't). */ - if (FUsbMscWaitReady(dev) != FUSB_MSC_READY) - { - return; - } - - /* Create the disk. */ - FUsbMscCreateDisk(dev); - - return; -} - -static void FUsbMscPoll(FUsbDev *dev) -{ - FUsbMassStorage *msc = MSC_INST(dev); - int prev_ready = msc->ready; - - if (FUsbMscWaitReady(dev) == FUSB_MSC_DETACHED) - { - return; - } - - if (!prev_ready && msc->ready) - { - FUSB_INFO("USB msc: not ready -> ready (lun %d) ", msc->lun); - FUsbMscCreateDisk(dev); - } - else if (prev_ready && !msc->ready) - { - FUSB_INFO("USB msc: ready -> not ready (lun %d) ", msc->lun); - FUsbMscRemoveDisk(dev); - } - else if (!prev_ready && !msc->ready) - { - u8 new_lun = (msc->lun + 1) % msc->num_luns; - FUSB_INFO("USB msc: not ready (lun %d) -> lun %d ", msc->lun, - new_lun); - msc->lun = new_lun; - } - - return; -} diff --git a/bsp/phytium/libraries/standalone/drivers/usb/fusb_msc.h b/bsp/phytium/libraries/standalone/drivers/usb/fusb_msc.h deleted file mode 100644 index 0e9d7c2eef..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/usb/fusb_msc.h +++ /dev/null @@ -1,163 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fusb_msc.h - * Date: 2022-02-11 13:33:09 - * LastEditTime: 2022-02-17 17:50:46 - * Description:  This files is for definition of USB mass storage function - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/2/7 init commit - */ - -#ifndef FUSB_MSC_H -#define FUSB_MSC_H - -/***************************** Include Files *********************************/ - -#include "fusb.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/************************** Constant Definitions *****************************/ -/* Possible values for quirks field. */ -enum -{ - /* Don't check for LUNs (force assumption that there's only one LUN). */ - FUSB_MSC_QUIRK_NO_LUNS = 1 << 0, - /* Never do a BULK_ONLY reset, just continue. This means that the device - cannot recover from phase errors and won't detach automatically for - unrecoverable errors. Do not use unless you have to. */ - FUSB_MSC_QUIRK_NO_RESET = 1 << 1, -}; - -/* Possible values for ready field. */ -enum -{ - FUSB_MSC_DETACHED = -1, /* Disk detached or out to lunch. */ - FUSB_MSC_NOT_READY = 0, /* Disk not ready yet -- empty card reader */ - FUSB_MSC_READY = 1, /* Disk ready to communicate. */ -}; - -enum -{ - FUSB_MSC_SUBCLASS_ATAPI_8020 = 0x2, - FUSB_MSC_SUBCLASS_ATAPI_8070 = 0x5, - FUSB_MSC_SUBCLASS_SCSI = 0x6 -}; - -/* Protocols of MSC */ -enum -{ - FUSB_MSC_PROTOCOL_BULK_ONLY = 0x50 /* Usb bulk-only transfer protocol */ -}; - -typedef enum -{ - FUSB_DIR_DATA_IN = 0x80, /* data from the device to the host */ - FUSB_DIR_DATA_OUT = 0 /* data from the host to the device */ -} FUsbMassStorageDirection; - -/**************************** Type Definitions *******************************/ -typedef struct -{ - unsigned int blocksize; - unsigned int numblocks; - FUsbEndpoint *bulk_in; - FUsbEndpoint *bulk_out; - u8 quirks : 7; - u8 usbdisk_created : 1; - s8 ready; - u8 lun; - u8 num_luns; - void *data; /* For use by consumers of libpayload. */ -} FUsbMassStorage; - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ -#define MSC_INST(dev) ((FUsbMassStorage*)(dev)->data) - -/** - * @name: FUsbMscGetCapcityMB - * @msg: 获取USB大容量存储设备的容量,单位MB - * @return {fsize_t} 容量,MB - * @param {FUsbDev} *dev, USB大容量存储设备实例 - */ -static inline u32 FUsbMscGetCapcityMB(FUsbDev *dev) -{ - FASSERT(dev); - return (u32)(MSC_INST(dev)->numblocks > 1000000 - ? (MSC_INST(dev)->numblocks / 1024) * MSC_INST(dev)->blocksize / 1024 - : MSC_INST(dev)->numblocks * MSC_INST(dev)->blocksize / 1024 / 1024); -} - -/** - * @name: FUsbMscGetBlkSize - * @msg: 获取USB大容量存储设备的块大小 - * @return {*} 块大小,字节数 - * @param {FUsbDev} *dev, USB大容量存储设备实例 - */ -static inline u32 FUsbMscGetBlkSize(FUsbDev *dev) -{ - FASSERT(dev); - return (u32)MSC_INST(dev)->blocksize; -} - -/** - * @name: FUsbMscGetBlkNum - * @msg: 获取USB大容量存储设备块数目 - * @return {*} 块数目 - * @param {FUsbDev} *dev, USB大容量存储设备实例 - */ -static inline u32 FUsbMscGetBlkNum(FUsbDev *dev) -{ - FASSERT(dev); - return (u32)MSC_INST(dev)->numblocks; -} - -/************************** Function Prototypes ******************************/ -/* 读写USB大容量存储设备,以512字节为一块 */ -int FUsbMscRwBlk512(FUsbDev *dev, int start, int n, FUsbMassStorageDirection dir, u8 *buf); - -/* USB大容量存储设备的初始化函数,由应用程序注册到FUSB框架中 */ -void FUsbMassStorageInit(FUsbDev *dev); - -/** - * To be implemented by application. It's called by the USB stack - * when a new USB storage device is found, so the client has the chance - * to know about it. - * - * @param dev descriptor for the USB storage device - */ -void __attribute__((weak)) FUsbDiskCreate(FUsbDev *dev); - -/** - * To be implemented by application. It's called by the USB stack - * when it finds out that a USB storage device is removed. - * - * @param dev descriptor for the USB storage device - */ -void __attribute__((weak)) FUsbDiskRemove(FUsbDev *dev); - -#ifdef __cplusplus -} -#endif - - -#endif diff --git a/bsp/phytium/libraries/standalone/drivers/usb/fusb_private.h b/bsp/phytium/libraries/standalone/drivers/usb/fusb_private.h deleted file mode 100644 index 9ad5e4c3e3..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/usb/fusb_private.h +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fusb_private.h - * Date: 2022-02-11 13:33:11 - * LastEditTime: 2022-02-18 09:21:22 - * Description:  This files is for definition of internal function interface - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/2/7 init commit - */ - -#ifndef FUSB_PRIVATE_H -#define FUSB_PRIVATE_H - -/***************************** Include Files *********************************/ -#ifdef __aarch64__ - #include "faarch64.h" -#else - #include "faarch32.h" -#endif - -#include "fkernel.h" -#include "fio.h" -#include "fassert.h" -#include "fusb.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ -#define FUSB_REG32_GET_BITS(x, a, b) (u32)((((u32)(x)) & GENMASK(a, b)) >> b) -#define FUSB_REG32_SET_BITS(x, a, b) (u32)((((u32)(x)) << b) & GENMASK(a, b)) -#define FUSB_REG64_GET_BITS(x, a, b) (u64)((((u64)(x)) & GENMASK_ULL(a, b)) >> b) -#define FUSB_REG64_SET_BITS(x, a, b) (u64)((((u64)(x)) << b) & GENMASK_ULL(a, b)) - -/************************** Function Prototypes ******************************/ -/* 创建USB控制器实例,添加到USB实例的Hc链表中 */ -FUsbHc *FUsbAllocateHc(FUsb *instance); - -/* 删除USB控制器实例,从USB实例的Hc链表中删去 */ -void FUsbDetachHc(FUsbHc *controller); - -/* 初始化USB设备 */ -FUsbDev *FUsbInitDevEntry(FUsbHc *controller, int slot_id); - -/* 根据USB设备速度,选择最大包长度 */ -int FUsbDecodeMaxPacketSz0(FUsbSpeed speed, u8 bMaxPacketSize0); - -/* 据设备速度获取最大包长度 */ -int FUsbSpeedtoDefaultMaxPacketSz(FUsbSpeed speed); - -/* 配置USB配置描述符解析器 */ -FError FUsbSetupConfigParser(FUsbDev *dev, const void *buf, u32 buf_len); - -/* 去初始化USB配置描述符解析器 */ -void FUsbRevokeConfigParser(FUsbDev *dev); - -/* 初始化字符串描述符解析器 */ -void FUsbSetupStringParser(FUsbDev *dev); - -/* 去初始化字符串描述符解析器 */ -void FUsbRevokeStringParser(FUsbDev *dev); - -/* 检索字符串描述符,保存在FUsbStringParser结构中 */ -FError FUsbSearchStringDescriptor(FUsb *instance, FUsbDev *dev, u8 id); - -/* 获取刚刚检索到的字符串描述符内容 */ -const char *FUsbGetString(const FUsbDev *const dev); - -/* 从配置描述符解析器中获取指定类型的描述符(端点描述符/接口描述符) */ -const FUsbDescriptor *FUsbGetDescriptorFromParser(FUsbConfigParser *parser, FUsbDescriptorType type); - -/* 默认的USB设备初始化函数 */ -void FUsbNopDevInit(FUsbDev *dev); - -/* 默认的USB设备初始化函数 */ -void FUsbGenericDevInit(FUsbDev *dev); - -/* 打印设备描述符信息 */ -void FUsbDumpDeviceDescriptor(const FUsbDeviceDescriptor *descriptor); - -/* 打印配置描述符信息 */ -void FUsbDumpConfigDescriptor(const FUsbConfigurationDescriptor *descriptor); - -/* 打印接口描述符信息 */ -void FUsbDumpInterfaceDescriptor(const FUsbInterfaceDescriptor *descriptor); - -/* 打印端点描述符信息 */ -void FUsbDumpEndpointDescriptor(const FUsbEndpointDescriptor *descriptor); - -#ifdef __cplusplus -} -#endif - -#endif \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/usb/fusb_sinit.c b/bsp/phytium/libraries/standalone/drivers/usb/fusb_sinit.c deleted file mode 100644 index fe4f5e6283..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/usb/fusb_sinit.c +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fusb_sinit.c - * Date: 2022-02-11 13:33:11 - * LastEditTime: 2022-02-18 09:21:45 - * Description:  This files is for static initialization of USB - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/2/8 init version - */ - -/***************************** Include Files *********************************/ -#include "fparameters.h" -#include "fusb_private.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Variable Definitions *****************************/ -extern const FUsbConfig FUSBHC_CONFIG_TBL[FUSB3_NUM]; - -/************************** Function Prototypes ******************************/ -/** - * @name: FUsbLookupConfig - * @msg: 获取USB的默认配置 - * @return {const FUsbConfig *} USB默认配置 - * @param {u32} instance_id USB实例号 - */ -const FUsbConfig *FUsbLookupConfig(u32 instance_id) -{ - const FUsbConfig *ptr = NULL; - u32 index; - - for (index = 0; index < (u32)FUSB3_NUM; index++) - { - if (FUSBHC_CONFIG_TBL[index].instance_id == instance_id) - { - ptr = &FUSBHC_CONFIG_TBL[index]; - break; - } - } - - return (const FUsbConfig *)ptr; -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/usb/fxhci/fxhci.c b/bsp/phytium/libraries/standalone/drivers/usb/fxhci/fxhci.c deleted file mode 100644 index ce11238173..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/usb/fxhci/fxhci.c +++ /dev/null @@ -1,1284 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fxhci.c - * Date: 2022-02-11 13:33:12 - * LastEditTime: 2022-02-18 09:17:20 - * Description:  This files is for implmentation of XHCI driver - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/2/7 init commit - */ - -#include -#include "fsleep.h" -#include "fcache.h" - -#include "fparameters.h" -#include "fdebug.h" - -#include "fxhci_private.h" - -#define FUSB_DEBUG_TAG "FXHCI" -#define FUSB_ERROR(format, ...) FT_DEBUG_PRINT_E(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) -#define FUSB_WARN(format, ...) FT_DEBUG_PRINT_W(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) -#define FUSB_INFO(format, ...) FT_DEBUG_PRINT_I(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) -#define FUSB_DEBUG(format, ...) FT_DEBUG_PRINT_D(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) - -typedef enum -{ - FXHCI_OP_REG, -} FXhciHandShakeType; - -static void FXhciStart(FUsbHc *controller); -static void FXhciStop(FUsbHc *controller); -static FXhciTransCode FXhciReset(FUsbHc *controller); -static void FXhciReinit(FUsbHc *controller); -static void FXhciShutdown(FUsbHc *controller); -static FXhciTransCode FXhciBulk(FUsbEndpoint *ep, int size, u8 *data, int finalize); -static FXhciTransCode FXhciControl(FUsbDev *dev, FUsbDirection dir, int drlen, void *devreq, - int dalen, u8 *data); -static void *FXhciCreateIntrQueue(FUsbEndpoint *ep, int reqsize, int reqcount, int reqtiming); -static void FXhciDestoryIntrQueue(FUsbEndpoint *ep, void *queue); -static u8 *FXhciPollIntrQueue(void *queue); - -/* - * Some structures must not cross page boundaries. To get this, - * we align them by their size (or the next greater power of 2). - */ -/** - * @name: FXhciAlign - * @msg: 分配一段对齐的内存 - * @return {*} - * @param {FXhci} *xhci, XHCI控制器实例 - * @param {size_t} min_align, 对齐方式 - * @param {size_t} size, 请求的字节数目 - */ -void *FXhciAlign(FXhci *const xhci, const size_t min_align, const size_t size) -{ - FASSERT(xhci && xhci->usb); - size_t align; - FUsb *instance = xhci->usb; - - if (!(size & (size - 1))) - { - align = size; /* It's a power of 2 */ - } - else - { - align = 1 << ((sizeof(unsigned) << 3) - __builtin_clz(size)); - } - - if (align < min_align) - { - align = min_align; - } - - return FUSB_ALLOCATE(instance, size, align); -} - -#ifdef FMEMP_TAG_DEBUG -void *FXhciAlignTag(FXhci *const xhci, const size_t min_align, const size_t size, const char *file, unsigned long line, const char *msg) -{ - FASSERT(xhci && xhci->usb); - size_t align; - FUsb *instance = xhci->usb; - - if (!(size & (size - 1))) - { - align = size; /* It's a power of 2 */ - } - else - { - align = 1 << ((sizeof(unsigned) << 3) - __builtin_clz(size)); - } - - if (align < min_align) - { - align = min_align; - } - - return FUsbMempAllocateTag(instance, size, align, file, line, msg); -} -#endif - -/** - * @name: FXhciClearTrb - * @msg: 清空TRB,反转TRB的Cycle state - * @return {*} - * @param {FXhciTrb} *trb, TRB实例 - * @param {int} pcs, TRB ring的Cycle state - */ -void FXhciClearTrb(FXhciTrb *const trb, const int pcs) -{ - FASSERT(trb); - - trb->ptr_low = 0; - trb->ptr_high = 0; - trb->status = 0; - trb->control = !pcs; - - return; -} - -/** - * @name: FXhciInitCycleRing - * @msg: 初始化TRB ring - * @return {*} - * @param {FXhciTransRing} *tr, TRB ring实例 - * @param {size_t} ring_size, TRB ring中的TRB数目 - */ -void FXhciInitCycleRing(FXhciTransRing *const tr, const size_t ring_size) -{ - FASSERT(tr && tr->ring); - - memset((void *)tr->ring, 0, ring_size * sizeof(*tr->ring)); - FXHCI_TRB_SET(TT, &tr->ring[ring_size - 1], FXHCI_TRB_LINK); /* TRB Type */ - FXHCI_TRB_SET(TC, &tr->ring[ring_size - 1], 1); /* Toggle Cycle */ - - /* only one segment that points to itself */ - tr->ring[ring_size - 1].ptr_low = (uintptr)(tr->ring); - - tr->pcs = 1; - tr->cur = tr->ring; - - return; -} - -/** - * @name: FXhciHandShake - * @msg: 等待XHCI状态,完成握手 - * @return {FError} 等待返回值 - * @param {FXhci} *xhci, xhci实例 - * @param {FXhciHandShakeType} type, 等待类型,e.g 等待Op寄存器 - * @param {uintptr} reg_off, 寄存器偏移量 - * @param {u32} mask, 寄存器掩码位 - * @param {u32} wait_for, 等待的状态,如果状态到达,成功退出 - * @param {s32} timeout, 等待的tick超时 - */ -static FError FXhciHandShake(FXhci *xhci, FXhciHandShakeType type, uintptr reg_off, u32 mask, u32 wait_for, s32 timeout) -{ - FASSERT(xhci); - FError ret = FUSB_SUCCESS; - - switch (type) - { - case FXHCI_OP_REG: - ret = FXhciWaitOper32(&xhci->mmio, reg_off, mask, wait_for, timeout); - break; - default: - FASSERT(0); - break; - } - - return ret; -} - -/** - * @name: FXhciWaitReady - * @msg: 等待XHCI控制器重置完成 - * @return {*} - * @param {FXhci} *xhci, xhci实例 - */ -static FError FXhciWaitReady(FXhci *const xhci) -{ - FASSERT(xhci); - FUSB_INFO("Waiting for controller to be ready."); - FError ret = FXhciHandShake(xhci, FXHCI_OP_REG, FXHCI_REG_OP_USBSTS, FXHCI_REG_OP_USBSTS_CNR, 0, FXHCI_TIMEOUT); - - if (FUSB_SUCCESS == ret) - { - FUSB_INFO("Waiting for controller success."); - } - else - { - FUSB_ERROR("Waiting for controller timeout."); - } - - return ret; -} - -/** - * @name: FXhciHcInit - * @msg: 创建XHCI USB 控制器实例,完成初始化 - * @return {FUsbHc *} XHCI控制器实例 - * @param {FUsb} *instance, USB实例 - * @param {uintptr} base_addr, XHCI控制器基地址 - */ -FUsbHc *FXhciHcInit(FUsb *instance, uintptr base_addr) -{ - FASSERT(instance); - int i; - FXhciMMIO *mmio = NULL; - u32 reg_val; - u16 hc_version; - uintptr xhci_base_addr = base_addr + FUSB3_XHCI_OFFSET; - - FUSB_DEBUG("Xhci base addr: 0x%x.", xhci_base_addr); - /* First, allocate and initialize static controller structures */ - FUsbHc *const controller = FUsbAllocateHc(instance); - if (NULL == controller) - { - FUSB_ERROR("Out of memory."); - return NULL; - } - - /* set USB Hc CB according to XHCI */ - controller->type = FUSB_HC_XHCI; - controller->start = FXhciStart; - controller->stop = FXhciStop; - controller->reset = FXhciReset; - controller->init = FXhciReinit; - controller->shutdown = FXhciShutdown; - controller->bulk = FXhciBulk; - controller->control = FXhciControl; - controller->set_address = FXhciSetAddress; - controller->finish_device_config = FXhciFinishDevConfig; - controller->destroy_device = FXhciDestoryDev; - controller->create_intr_queue = FXhciCreateIntrQueue; - controller->destroy_intr_queue = FXhciDestoryIntrQueue; - controller->poll_intr_queue = FXhciPollIntrQueue; - - /* allocate xhci instance */ - controller->reg_base = base_addr; - FASSERT(NULL == controller->instance); - controller->instance = FUSB_ALLOCATE(instance, sizeof(FXhci), FUSB_DEFAULT_ALIGN); - if (NULL == controller->instance) - { - FUSB_INFO("Out of memory."); - goto _free_controller; - } - - controller->usb = instance; - - FXhci *const xhci = (FXhci *)controller->instance; - xhci->usb = instance; - - /* init roothub at slot-0 */ - FUsbInitDevEntry(controller, 0); - xhci->roothub = controller->devices[0]; - - /* allocate command ring and event ring */ - FASSERT((NULL == xhci->cr.ring) && (NULL == xhci->er.ring) && - (NULL == xhci->ev_ring_table)); - xhci->cr.ring = FXHCI_ALIGN(xhci, 64, FXHCI_COMMAND_RING_SIZE * sizeof(FXhciTrb)); - xhci->er.ring = FXHCI_ALIGN(xhci, 64, FXHCI_EVENT_RING_SIZE * sizeof(FXhciTrb)); - xhci->ev_ring_table = FXHCI_ALIGN(xhci, 64, sizeof(FXhciErstEntry)); - if ((NULL == xhci->roothub) || (NULL == xhci->cr.ring) || - (NULL == xhci->er.ring) || (NULL == xhci->ev_ring_table)) - { - FUSB_INFO("Out of memory."); - goto _free_xhci; - } - - /* setup xhci mmio for register access */ - mmio = &xhci->mmio; - FXhciSetupMMIO(mmio, xhci_base_addr); - - /* check if XHCI version is supported */ - hc_version = FXhciReadHcVersion(mmio); - if (hc_version < FXHCI_HC_VERSION_MIN || hc_version > FXHCI_HC_VERSION_MAX) - { - FUSB_ERROR("Xhci version 0x%x not support.", hc_version); - goto _free_xhci; - } - - const unsigned pagesize = FXhciReadOper32(mmio, FXHCI_REG_OP_PAGESIZE) << 12; - - FUSB_INFO("regbase: 0x%x", mmio->base); - FUSB_INFO("caplen: 0x%x", FXhciReadCaplen(mmio)); - FUSB_INFO("rtsoff: 0X%x", mmio->runtime_base - mmio->base); - FUSB_INFO("dboff: 0X%x", mmio->doorbell_base - mmio->base); - FUSB_INFO("hciversion: 0x%x", FXhciReadHcVersion(mmio)); - FUSB_INFO("context size: %dB ", FXhciGetCtxSize(mmio)); - FUSB_INFO("page size: %dB ", pagesize); - - /* - * We haven't touched the hardware yet. So we allocate all dynamic - * structures at first and can still chicken out easily if we run out - * of memory. - */ - reg_val = FXhciReadCap32(&xhci->mmio, FXHCI_REG_CAP_HCSPARAMS1); - xhci->max_slots_en = FXHCI_REG_CAP_HCSPARAMS1_MAX_SLOTS_GET(reg_val); /* record max slot num */ - - /* allocate device related memory, DCBAA and device info */ - FASSERT(NULL == xhci->dcbaa); - xhci->dcbaa = FXHCI_ALIGN(xhci, 64, (xhci->max_slots_en + 1) * sizeof(u64)); - FASSERT(NULL == xhci->dev); - xhci->dev = FUSB_ALLOCATE(instance, (xhci->max_slots_en + 1) * sizeof(*xhci->dev), FUSB_DEFAULT_ALIGN); - if ((NULL == xhci->dcbaa) || (NULL == xhci->dev)) - { - FUSB_INFO("Out of memory."); - goto _free_xhci; - } - - /* - * Let dcbaa[0] point to another array of pointers, sp_ptrs. - * The pointers therein point to scratchpad buffers (pages). - */ - reg_val = FXhciReadCap32(&xhci->mmio, FXHCI_REG_CAP_HCSPARAMS2); - const size_t max_sp_bufs = FXHCI_REG_CAP_HCSPARAMS2_MAX_SCRATCHPAD_BUFS_GET(reg_val); - FUSB_INFO("Max scratchpad bufs: 0x%lx reg_val : 0x%x.", max_sp_bufs, reg_val); - if (0 < max_sp_bufs) - { - FUSB_INFO("Allocate sp_ptrs."); - const size_t sp_ptrs_size = max_sp_bufs * sizeof(u64); - /* allocate scratchpad bufs entry to preserve pointers of scratchpad buf */ - FASSERT(NULL == xhci->sp_ptrs); - xhci->sp_ptrs = FXHCI_ALIGN(xhci, 64, sp_ptrs_size); - if (NULL == xhci->sp_ptrs) - { - FUSB_INFO("Out of memory."); - goto _free_xhci_structs; - } - - for (i = 0; (size_t)i < max_sp_bufs; ++i) - { - /* allocate each scratchpad buf */ - void *const page = FUSB_ALLOCATE(instance, pagesize, pagesize); - if (NULL == page) - { - FUSB_INFO("Out of memory."); - goto _free_xhci_structs; - } - - xhci->sp_ptrs[i] = (uintptr)(page); /* assign pointer to scratchpad buf*/ - } - - xhci->dcbaa[0] = (uintptr)(xhci->sp_ptrs); /* assign pointer to scratchpad bufs entry */ - } - - /* Now start working on the hardware */ - if (FUSB_SUCCESS != FXhciWaitReady(xhci)) - { - goto _free_xhci_structs; - } - - /* TODO: Check if BIOS claims ownership (and hand over) */ - - if (FUSB_CC_SUCCESS != FXhciReset(controller)) - { - goto _free_xhci_structs; - } - - FXhciReinit(controller); - - /* init roothub device instance */ - xhci->roothub->controller = controller; - xhci->roothub->init = FXhciRootHubInit; - xhci->roothub->init(xhci->roothub); - - FUSB_INFO("Init xhc@%p success.", controller); - return controller; - -_free_xhci_structs: - if (xhci->sp_ptrs) - { - for (i = 0; (size_t)i < max_sp_bufs; ++i) - { - if (xhci->sp_ptrs[i]) - { - FUSB_FREE(instance, (void *)(uintptr)(xhci->sp_ptrs[i])); - } - } - } - FUSB_FREE(instance, xhci->sp_ptrs); - FUSB_FREE(instance, xhci->dcbaa); - -_free_xhci: - FUSB_FREE(instance, (void *)xhci->ev_ring_table); - FUSB_FREE(instance, (void *)xhci->er.ring); - FUSB_FREE(instance, (void *)xhci->cr.ring); - FUSB_FREE(instance, xhci->roothub); - FUSB_FREE(instance, xhci->dev); - FUSB_FREE(instance, xhci); - -_free_controller: - FUsbDetachHc(controller); - FUSB_FREE(instance, controller); - - return NULL; -} - -/** - * @name: FXhciReset - * @msg: 重置XHCI控制器 - * @return {*} - * @param {FUsbHc} *controller, USB Hc控制器 - */ -static FUsbTransCode FXhciReset(FUsbHc *const controller) -{ - FASSERT(controller); - FXhci *const xhci = FXHCI_INST_GET(controller); - FASSERT(xhci); - u32 reg_val; - - /* stop xhci if still run */ - FXhciStop(controller); - - reg_val = FXhciReadOper32(&xhci->mmio, FXHCI_REG_OP_USBCMD); - reg_val |= FXHCI_REG_OP_USBCMD_HCRST; - FXhciWriteOper32(&xhci->mmio, FXHCI_REG_OP_USBCMD, reg_val); - - FUSB_INFO("Resetting hc..."); - if (FUSB_SUCCESS != FXhciHandShake(xhci, FXHCI_OP_REG, FXHCI_REG_OP_USBCMD, FXHCI_REG_OP_USBCMD_HCRST, 0, FXHCI_TIMEOUT)) - { - FUSB_ERROR("Wait hc reset timeout !!!"); - return -1; - } - - return FUSB_CC_SUCCESS; -} - -/** - * @name: FXhciReinit - * @msg: 重新初始化XHCI控制器 - * @return {*} - * @param {FUsbHc} *controller, USB Hc控制器 - */ -static void FXhciReinit(FUsbHc *controller) -{ - FASSERT(controller); - FXhci *const xhci = FXHCI_INST_GET(controller); - FASSERT(xhci); - const FUsbConfig *const config = &controller->usb->config; - u32 reg_val; - u64 reg_val64; - - /* wait xhci ready */ - if (FUSB_SUCCESS != FXhciWaitReady(xhci)) - { - return; - } - - /* Enable all available slots */ - reg_val = FXhciReadOper32(&xhci->mmio, FXHCI_REG_OP_CONFIG); - reg_val &= ~FXHCI_REG_OP_CONFIG_MAX_SLOTS_EN_MASK; - reg_val |= FXHCI_REG_OP_CONFIG_MAX_SLOTS_EN_SET(xhci->max_slots_en); - FXhciWriteOper32(&xhci->mmio, FXHCI_REG_OP_CONFIG, reg_val); - - /* Set DCBAA */ - FXhciWriteOper64(&xhci->mmio, FXHCI_REG_OP_DCBAAP, (u64)(uintptr)xhci->dcbaa); - FUSB_INFO("dcba at 0x%lx", FXhciReadOper64(&xhci->mmio, FXHCI_REG_OP_DCBAAP)); - - /* Initialize command ring */ - FXhciInitCycleRing(&xhci->cr, FXHCI_COMMAND_RING_SIZE); - FUSB_INFO("command ring @%p", xhci->cr.ring); - reg_val64 = FXhciReadOper64(&xhci->mmio, FXHCI_REG_OP_CRCR); - - reg_val64 = FXHCI_REG_OP_CRCR_CR_PTR_MASK & (u64)(uintptr)xhci->cr.ring; - reg_val64 |= FXHCI_REG_OP_CRCR_RCS & xhci->cr.pcs; - FXhciWriteOper64(&xhci->mmio, FXHCI_REG_OP_CRCR, reg_val64); - - /* Make sure interrupts are disabled */ - reg_val = FXhciReadOper32(&xhci->mmio, FXHCI_REG_OP_USBCMD); - reg_val &= ~FXHCI_REG_OP_USBCMD_INTE; - FXhciWriteOper32(&xhci->mmio, FXHCI_REG_OP_USBCMD, reg_val); - - /* Initialize event ring */ - FXhciResetEvtRing(&xhci->er); - FUSB_INFO("event ring @%p (0x%08p) ", - xhci->er.ring, (uintptr)(xhci->er.ring)); - - reg_val = FXhciReadCap32(&xhci->mmio, FXHCI_REG_CAP_HCSPARAMS2); - FUSB_INFO("ERST Max: %d", - FXHCI_REG_CAP_HCSPARAMS2_ERST_MAX_GET(reg_val)); - memset((void *)xhci->ev_ring_table, 0x00, sizeof(FXhciErstEntry)); - xhci->ev_ring_table[0].seg_base_lo = (uintptr)(xhci->er.ring); - xhci->ev_ring_table[0].seg_base_hi = 0; - xhci->ev_ring_table[0].seg_size = FXHCI_EVENT_RING_SIZE; - - /* pass event ring table to hardware */ - WMB(); - - /* Initialize primary interrupter */ - FXhciWriteRt32(&xhci->mmio, 0, FXHCI_REG_RT_IR_ERSTSZ, FXHCI_REG_RT_IR_ERSTSZ_MASK & 1); /* Segment Table Size = 1 */ - FXhciUpdateEvtDQ(xhci); - - /* erstba has to be written at last */ - FXhciWriteRt64(&xhci->mmio, 0, FXHCI_REG_RT_IR_ERSTBA, FXHCI_REG_RT_IR_ERSTBA_MASK & ((u64)(uintptr)xhci->ev_ring_table)); - FUSB_INFO("ERST base: 0x%lx == %p", - FXhciReadRt64(&xhci->mmio, 0, FXHCI_REG_RT_IR_ERSTBA), - xhci->ev_ring_table); - - FXhciStart(controller); - - /* run Cmd Nop to test if command ring okay */ - for (int i = 0; i < 3; ++i) - { - FUSB_INFO("Noop run #%d .", i); - if (FXHCI_CC_SUCCESS != FXhciCmdNop(xhci)) - { - FUSB_ERROR("Noop command failed. "); - break; - } - } - - return; -} - -/** - * @name: FXhciShutdown - * @msg: 关闭XHCI控制器 - * @return {*} - * @param {FUsbHc} *controller, USB Hc控制器 - */ -static void FXhciShutdown(FUsbHc *const controller) -{ - int i; - u32 reg_val; - - if (controller == NULL) - { - return; - } - - /* detach the Hc instance */ - FUsbDetachHc(controller); - - FXhci *const xhci = FXHCI_INST_GET(controller); - FASSERT(xhci && xhci->usb); - FUsb *instance = xhci->usb; - FXhciStop(controller); /* stop xhci instance */ - - /* free scatchpad bufs */ - if (NULL != xhci->sp_ptrs) - { - reg_val = FXhciReadCap32(&xhci->mmio, FXHCI_REG_CAP_HCSPARAMS2); - const size_t max_sp_bufs = FXHCI_REG_CAP_HCSPARAMS2_MAX_SCRATCHPAD_BUFS_GET(reg_val); - for (i = 0; (size_t)i < max_sp_bufs; ++i) - { - if (NULL != (void *)(uintptr)xhci->sp_ptrs[i]) - { - FUSB_FREE(instance, (void *)(uintptr)(xhci->sp_ptrs[i])); - } - } - } - - - FUSB_FREE(instance, xhci->sp_ptrs); - FUSB_FREE(instance, xhci->dcbaa); - FUSB_FREE(instance, xhci->dev); - FUSB_FREE(instance, (void *)xhci->ev_ring_table); - FUSB_FREE(instance, (void *)xhci->er.ring); - FUSB_FREE(instance, (void *)xhci->cr.ring); - FUSB_FREE(instance, xhci); - - return; -} - -/** - * @name: FXhciStart - * @msg: 启动XHCI控制器 - * @return {*} - * @param {FUsbHc} *controller, USB Hc控制器 - */ -static void FXhciStart(FUsbHc *controller) -{ - FASSERT(controller); - FXhci *const xhci = FXHCI_INST_GET(controller); - FASSERT(xhci); - u32 reg_val; - - /* setting the USBCMD register Run/Stop (R/S) bit to ‘1’ */ - reg_val = FXhciReadOper32(&xhci->mmio, FXHCI_REG_OP_USBCMD); - reg_val |= FXHCI_REG_OP_USBCMD_RUN_STOP; - FXhciWriteOper32(&xhci->mmio, FXHCI_REG_OP_USBCMD, reg_val); - - if (FUSB_SUCCESS != FXhciHandShake(xhci, FXHCI_OP_REG, FXHCI_REG_OP_USBSTS, FXHCI_REG_OP_USBSTS_HCH, 0, FXHCI_TIMEOUT)) - { - FUSB_ERROR("Wait hc start timeout !!!"); - } - - return; -} - -/** - * @name: FXhciStop - * @msg: 停止XHCI控制器 - * @return {*} - * @param {FUsbHc} *controller, USB Hc控制器 - */ -static void FXhciStop(FUsbHc *controller) -{ - FASSERT(controller); - FXhci *const xhci = FXHCI_INST_GET(controller); - FASSERT(xhci); - u32 reg_val; - - /* setting the USBCMD register Run/Stop (R/S) bit to ‘0’ */ - reg_val = FXhciReadOper32(&xhci->mmio, FXHCI_REG_OP_USBCMD); - reg_val &= ~FXHCI_REG_OP_USBCMD_RUN_STOP; - FXhciWriteOper32(&xhci->mmio, FXHCI_REG_OP_USBCMD, reg_val); - - if (FUSB_SUCCESS != FXhciHandShake(xhci, FXHCI_OP_REG, FXHCI_REG_OP_USBSTS, FXHCI_REG_OP_USBSTS_HCH, FXHCI_REG_OP_USBSTS_HCH, FXHCI_TIMEOUT)) - { - FUSB_ERROR("Wait hc stop timeout !!!"); - } - - return; -} - -/** - * @name: FXhciResetEp - * @msg: 重置XHCI端点 - * @return {FError} 返回错误码 - * @param {FUsbDev} *dev, 端点所在的USB设备实例 - * @param {FUsbEndpoint} *ep, 端点实例 - */ -static FError FXhciResetEp(FUsbDev *const dev, FUsbEndpoint *const ep) -{ - FASSERT(dev && dev->controller); - FXhci *const xhci = FXHCI_INST_GET(dev->controller); - FASSERT(xhci); - const int slot_id = dev->address; - const int ep_id = (NULL != ep) ? FXhciEpId(ep) : FXHCI_EP0_ID; /* ep-0 or normal ep */ - FXhciEpCtx *const epctx = xhci->dev[slot_id].ctx.ep[ep_id]; - - FUSB_INFO("Resetting ID %d EP %d (ep state: %d) ", - slot_id, ep_id, FXHCI_EC_GET(STATE, epctx)); - - /* Run Reset Endpoint Command if the EP is in Halted state */ - if (FXHCI_EC_GET(STATE, epctx) == FXHCI_EC_STATE_HALTED) - { - const FXhciTransCode cc = FXhciCmdResetEp(xhci, slot_id, ep_id); - if (cc != FXHCI_CC_SUCCESS) - { - FUSB_INFO("Reset endpoint command failed: %d .", cc); - return FUSB_ERR_TRANS_FAIL; - } - } - - /* Clear TT buffer for bulk and control endpoints behind a TT */ - const int hub = dev->hub; - if (hub && dev->speed < FUSB_HIGH_SPEED && - dev->controller->devices[hub]->speed == FUSB_HIGH_SPEED) - { - /* TODO */; - } - - /* Reset transfer ring if the endpoint is in the right state */ - const unsigned ep_state = FXHCI_EC_GET(STATE, epctx); - if (ep_state == FXHCI_EC_STATE_STOPPED || ep_state == FXHCI_EC_STATE_ERROR) - { - FXhciTransRing *const tr = - xhci->dev[slot_id].transfer_rings[ep_id]; - const FXhciTransCode cc = FXhciCmdSetTrDq(xhci, slot_id, ep_id, - tr->ring, 1); - if (cc != FXHCI_CC_SUCCESS) - { - FUSB_INFO("Set TR dequeue command failed: %d .", cc); - return FUSB_ERR_TRANS_FAIL; - } - - FXhciInitCycleRing(tr, FXHCI_TRANSFER_RING_SIZE); - } - - FUSB_INFO("Finished resetting ID %d EP %d (ep state: %d) ", - slot_id, ep_id, FXHCI_EC_GET(STATE, epctx)); - - return FUSB_SUCCESS; -} - -/** - * @name: FXhciEnqueueTrb - * @msg: TRB入队,向TRB ring加入一条TRB - * @return {*} - * @param {FXhciTransRing} *tr, TRB ring实例 - */ -static void FXhciEnqueueTrb(FXhciTransRing *const tr) -{ - FASSERT(tr); - - const int chain = FXHCI_TRB_GET(CH, tr->cur); - FXHCI_TRB_SET(C, tr->cur, tr->pcs); /* Cycle Bit */ - ++tr->cur; - - while (FXHCI_TRB_GET(TT, tr->cur) == FXHCI_TRB_LINK) - { - FUSB_DEBUG("Handling link pointer. "); - - const int tc = FXHCI_TRB_GET(TC, tr->cur); - FXHCI_TRB_SET(CH, tr->cur, chain); /* Chain Bit */ - - WMB(); - - FXHCI_TRB_SET(C, tr->cur, tr->pcs); /* Cycle Bit */ - tr->cur = (void *)(uintptr)(tr->cur->ptr_low); - - /* toggle cycle state */ - if (tc) - { - tr->pcs ^= 1; - } - } - - return; -} - -/** - * @name: FXhciRingDoorbell - * @msg: 提醒Hc处理刚加入的TRB - * @return {*} - * @param {FUsbEndpoint} *ep, 端点实例 - */ -static void FXhciRingDoorbell(FUsbEndpoint *const ep) -{ - FASSERT(ep); - FXhci *xhci = FXHCI_INST_GET(ep->dev->controller); - - /* Ensure all TRB changes are written to memory. */ - WMB(); - - FXhciWriteDb32(&xhci->mmio, ep->dev->address, FXhciEpId(ep)); - - return; -} - -/** - * @name: FXhciEnqueueTD - * @msg: 填充一条TRB - * @return {*} - * @param {FXhciTransRing} *tr, TRB ring实例 - * @param {int} ep, 端点实例 - * @param {size_t} mps, 最大包长度 - * @param {int} dalen, 数据长度 - * @param {void} *data, 数据缓冲区 - * @param {int} dir, 发送方向 - */ -static void FXhciEnqueueTD(FXhciTransRing *const tr, const int ep, const size_t mps, - const int dalen, void *const data, const int dir) -{ - FASSERT(tr); - FXhciTrb *trb = NULL; /* cur TRB */ - u8 *cur_start = data; /* cur data pointer */ - size_t length = dalen; /* remaining bytes */ - size_t packets = (length + mps - 1) / mps; /* remaining packets */ - size_t residue = 0; /* residue from last TRB */ - size_t trb_count = 0; /* TRBs added so far */ - - while ((length > 0) || (trb_count == 0) /* enqueue at least one */) - { - const size_t cur_end = ((size_t)cur_start + 0x10000) & ~0xffff; /* best guess, send at most 0x1000 bytes */ - size_t cur_length = cur_end - (size_t)cur_start; - - if (length < cur_length) - { - cur_length = length; - packets = 0; - length = 0; - } - else - { - packets -= (residue + cur_length) / mps; - residue = (residue + cur_length) % mps; - length -= cur_length; - } - - trb = tr->cur; - FXhciClearTrb(trb, tr->pcs); - trb->ptr_low = (uintptr)(cur_start); - FXHCI_TRB_SET(TL, trb, cur_length); /* Transfer Length */ - FXHCI_TRB_SET(TDS, trb, min((size_t)FXHCI_TRB_MAX_TD_SIZE, packets)); /* TD Size */ - FXHCI_TRB_SET(CH, trb, 1); /* associate this TRB with the next TRB on the Ring */ - - /* Check for first, data stage TRB, only Ep0 can handle */ - if ((trb_count == 0) && ep == FXHCI_EP0_ID) - { - FXHCI_TRB_SET(DIR, trb, dir); /* Direction */ - FXHCI_TRB_SET(TT, trb, FXHCI_TRB_DATA_STAGE); /* TRB Type */ - } - else - { - FXHCI_TRB_SET(TT, trb, FXHCI_TRB_NORMAL); /* TRB Type */ - } - - /* - * This is a workaround for Synopsys DWC3. If the ENT flag is - * not set for the Normal and Data Stage TRBs. We get Event TRB - * with length 0x20d from the controller when we enqueue a TRB - * for the IN endpoint with length 0x200. - */ - if (0 == length) - { - /* xHC shall fetch and evaluate the next TRB before saving the endpoint state */ - FXHCI_TRB_SET(ENT, trb, 1); /* Evaluate Next TRB */ - } - - FXhciEnqueueTrb(tr); - - cur_start += cur_length; - ++trb_count; - } - - trb = tr->cur; - FXhciClearTrb(trb, tr->pcs); - trb->ptr_low = (uintptr)(trb); /* for easier debugging only */ - FXHCI_TRB_SET(TT, trb, FXHCI_TRB_EVENT_DATA); /* set transfer type */ - FXHCI_TRB_SET(IOC, trb, 1); /* xHc shalle notify the system of the completion by placing an Transfer Event TRB on the Event ring */ - - FXhciEnqueueTrb(tr); - - return; -} - -/** - * @name: FXhciControl - * @msg: XHCI控制传输 - * @return {FXhciTransCode} 传输返回值 - * @param {FUsbDev} *dev, USB设备实例 - * @param {FUsbDirection} dir, 控制传输类型, IN, OUT, SETUP - * @param {int} drlen, USB请求长度 - * @param {void} *devreq, USB请求,参考FUsbDevReq - * @param {int} dalen, 控制传输数据长度 - * @param {unsigned char} *src, 控制传输数据 - */ -static FXhciTransCode FXhciControl(FUsbDev *const dev, const FUsbDirection dir, - const int drlen, void *const devreq, const int dalen, - unsigned char *const src) -{ - FASSERT(dev && dev->controller); - unsigned char *data = src; - FXhci *const xhci = FXHCI_INST_GET(dev->controller); - FASSERT(xhci); - FXhciEpCtx *const epctx = xhci->dev[dev->address].ctx.ep0; - FXhciTransRing *const tr = xhci->dev[dev->address].transfer_rings[1]; - FASSERT(epctx && tr); - - /* check the transfer data length, less than WORD size, u16 pointer can hold */ - const size_t off = (size_t)data & 0xffff; - if ((off + dalen) > ((FXHCI_TRANSFER_RING_SIZE - 4) << 16)) - { - FUSB_ERROR("Unsupported transfer size 0x%lx!!!", dalen); - return FXHCI_CC_GENERAL_ERROR; - } - - /* Reset endpoint if it's not running and not disabled */ - const unsigned ep_state = FXHCI_EC_GET(STATE, epctx); - if (ep_state > FXHCI_EC_STATE_RUNNING) - { - if (FUSB_SUCCESS != FXhciResetEp(dev, NULL)) - { - FUSB_ERROR("Reset endpoint failed !!!"); - return FXHCI_CC_GENERAL_ERROR; - } - } - - /* Fill and enqueue setup TRB */ - FXhciTrb *const setup = tr->cur; - FXhciClearTrb(setup, tr->pcs); - setup->ptr_low = ((u32 *)devreq)[0]; /* request data */ - setup->ptr_high = ((u32 *)devreq)[1]; - FXHCI_TRB_SET(TL, setup, drlen/*8*/); /* Transfer length */ - FXHCI_TRB_SET(TRT, setup, (dalen > 0) ? ((dir == FUSB_OUT) ? FXHCI_TRB_TRT_OUT_DATA : FXHCI_TRB_TRT_IN_DATA) : FXHCI_TRB_TRT_NO_DATA); - FXHCI_TRB_SET(TT, setup, FXHCI_TRB_SETUP_STAGE); /* TRB Type */ - FXHCI_TRB_SET(IDT, setup, 1); /* Immediate Data (IDT). shall be set to ‘1’ in a Setup Stage TRB */ - FXHCI_TRB_SET(IOC, setup, 1); /* Interrupt On Completion (IOC) */ - FXhciEnqueueTrb(tr); - - /* Fill and enqueue data TRBs (if any) */ - if (dalen > 0) - { - const unsigned mps = FXHCI_EC_GET(MPS, epctx); - const unsigned dt_dir = (dir == FUSB_OUT) ? FXHCI_TRB_DIR_OUT : FXHCI_TRB_DIR_IN; - FXhciEnqueueTD(tr, FXHCI_EP0_ID, mps, dalen, data, dt_dir); - } - - /* Fill status TRB */ - FXhciTrb *const status = tr->cur; - FXhciClearTrb(status, tr->pcs); - FXHCI_TRB_SET(DIR, status, (dir == FUSB_OUT) ? FXHCI_TRB_DIR_IN : FXHCI_TRB_DIR_OUT); /* Direction */ - FXHCI_TRB_SET(TT, status, FXHCI_TRB_STATUS_STAGE); /* TRB Type */ - FXHCI_TRB_SET(IOC, status, 1); /* Interrupt On Completion */ - FXhciEnqueueTrb(tr); - - /* Ring doorbell for EP0 */ - FXhciRingDoorbell(&dev->endpoints[0]); - - /* Wait for transfer events from IN DATA OUT stages */ - int i, transferred = 0; - const int n_stages = 2 + !!dalen; /* 2 stage without data */ - - /* flush cache of request data / transfer data before transfer */ - if (dalen > 0) - { - FCacheDCacheInvalidateRange((uintptr)data, dalen); - FCacheDCacheInvalidateRange((uintptr)devreq, drlen); - } - - for (i = 0; i < n_stages; ++i) - { - const FXhciTransCode ret = FXhciWaitForTransfer(xhci, dev->address, 1); - transferred += ret; /* record bytes transfered successfully */ - if (ret < FXHCI_CC_ZERO_BYTES) /* negative ret means transfer error */ - { - if (ret == FXHCI_CC_TIMEOUT) - { - FUSB_ERROR("Stopping ID %d EP 1 ", - dev->address); - FXhciCmdStopEp(xhci, dev->address, FXHCI_EP0_ID); - } - - FUSB_ERROR("Stage %d/%d failed: %d \r\n" - " trb ring: @%p \r\n" - " setup trb: @%p \r\n" - " status trb: @%p \r\n" - " ep state: %d -> %d \r\n" - " usbsts: 0x%08x ", - i, n_stages, ret, - tr->ring, setup, status, - ep_state, FXHCI_EC_GET(STATE, epctx), - FXhciReadOper32(&xhci->mmio, FXHCI_REG_OP_USBSTS)); - return ret; - } - } - - /* flush cache of request data / transfer data after transfer */ - if (dalen > 0) - { - FCacheDCacheInvalidateRange((uintptr)data, dalen); - FCacheDCacheInvalidateRange((uintptr)devreq, drlen); - } - - return transferred; -} - -/** - * @name: FXhciBulk - * @msg: XHCI块传输 - * @return {FXhciTransCode} - * @param {FUsbEndpoint} *ep, 端点实例 - * @param {int} size, - * @param {u8} *src - * @param {int} finalize - * @note: finalize == 1: if data is of packet aligned size, add a zero length packet - */ -static FXhciTransCode FXhciBulk(FUsbEndpoint *const ep, const int size, u8 *const src, - const int finalize) -{ - /* finalize: Hopefully the xHCI controller always does this. - We have no control over the packets. */ - FASSERT(ep); - u8 *data = src; - FXhci *const xhci = FXHCI_INST_GET(ep->dev->controller); - FASSERT(xhci); - const int slot_id = ep->dev->address; - const int ep_id = FXhciEpId(ep); /* must not for Ep0 */ - FXhciEpCtx *const epctx = xhci->dev[slot_id].ctx.ep[ep_id]; - FXhciTransRing *const tr = xhci->dev[slot_id].transfer_rings[ep_id]; - - /* check the transfer data length, less than WORD size, u16 pointer can hold */ - const size_t off = (size_t)data & 0xffff; - if ((off + size) > ((FXHCI_TRANSFER_RING_SIZE - 2) << 16)) - { - FUSB_INFO("Unsupported transfer size ."); - return FXHCI_CC_GENERAL_ERROR; - } - - /* Reset endpoint if it's not running */ - const unsigned ep_state = FXHCI_EC_GET(STATE, epctx); - if (ep_state > FXHCI_EC_STATE_RUNNING) - { - if (FUSB_SUCCESS != FXhciResetEp(ep->dev, ep)) - { - return FXHCI_CC_GENERAL_ERROR; - } - } - - FCacheDCacheInvalidateRange((uintptr)data, size); - - /* Enqueue transfer and ring doorbell */ - const unsigned mps = FXHCI_EC_GET(MPS, epctx); - const unsigned dir = (ep->direction == FUSB_OUT) ? FXHCI_TRB_DIR_OUT : FXHCI_TRB_DIR_IN; - FXhciEnqueueTD(tr, ep_id, mps, size, data, dir); - FXhciRingDoorbell(ep); - - /* Wait for transfer event */ - const FXhciTransCode ret = FXhciWaitForTransfer(xhci, ep->dev->address, ep_id); - if (ret < FXHCI_CC_ZERO_BYTES) - { - if (ret == FXHCI_CC_TIMEOUT) - { - FUSB_INFO("Stopping ID %d EP %d ", - ep->dev->address, ep_id); - FXhciCmdStopEp(xhci, ep->dev->address, ep_id); - } - - FUSB_INFO("Bulk transfer failed: %d \r\n" - " ep state: %d -> %d \r\n" - " usbsts: 0x%08x ", - ret, ep_state, - FXHCI_EC_GET(STATE, epctx), - FXhciReadOper32(&xhci->mmio, FXHCI_REG_OP_USBSTS)); - - return ret; - } - - return ret; -} - -/** - * @name: FXhciNextTrb - * @msg: 获取下一个可用的TRB - * @return {FXhciTrb*} 可用的TRB - * @param {FXhciTrb} *cur, 当前TRB - * @param {int} *pcs, 传入的待反转的Cycle state - */ -static FXhciTrb *FXhciNextTrb(FXhciTrb *cur, int *const pcs) -{ - FASSERT(cur); - ++cur; - - while (FXHCI_TRB_GET(TT, cur) == FXHCI_TRB_LINK) - { - if (pcs && FXHCI_TRB_GET(TC, cur)) - { - *pcs ^= 1; - } - - cur = (void *)(uintptr)(cur->ptr_low); - } - - return cur; -} - -/** - * @name: FXhciCreateIntrQueue - * @msg: 创建XHCI的中断队列 - * @return {void *} 成功则返回指向中断队列的指针,失败返回NULL - * @param {FUsbEndpoint} *ep, 端点实例 - * @param {int} reqsize, 中断队列可接受的请求字节数 - * @param {int} reqcount, 中断队列可接受的最大请求数目 - * @param {int} reqtiming, 请求超时 - * @note create and hook-up an intr queue into device schedul - */ -static void *FXhciCreateIntrQueue(FUsbEndpoint *const ep, const int reqsize, const int reqcount, - const int reqtiming) -{ - /* reqtiming: We ignore it and use the interval from the - endpoint descriptor configured earlier. */ - FASSERT(ep); - FXhci *const xhci = FXHCI_INST_GET(ep->dev->controller); - FASSERT(xhci && xhci->usb); - FUsb *instance = xhci->usb; - const int slot_id = ep->dev->address; - const int ep_id = FXhciEpId(ep); - FXhciTransRing *const tr = xhci->dev[slot_id].transfer_rings[ep_id]; - - if (reqcount > (FXHCI_TRANSFER_RING_SIZE - 2)) - { - FUSB_INFO("Reqcount is too high, at most %d supported .", - FXHCI_TRANSFER_RING_SIZE - 2); - return NULL; - } - - if (reqsize > 0x10000) - { - FUSB_INFO("Reqsize is too large, at most 64KiB supported ."); - return NULL; - } - - if (xhci->dev[slot_id].interrupt_queues[ep_id]) - { - FUSB_INFO("Only one interrupt queue per endpoint supported ."); - return NULL; - } - - /* Allocate intrq structure and reqdata chunks */ - FXhciIntrQ *const intrq = FUSB_ALLOCATE(instance, sizeof(*intrq), FUSB_DEFAULT_ALIGN); - if (NULL == intrq) - { - FUSB_INFO("Out of memory."); - return NULL; - } - - int i; - int pcs = tr->pcs; - FXhciTrb *cur = tr->cur; - for (i = 0; i < reqcount; ++i) - { - if (FXHCI_TRB_GET(C, cur) == (unsigned int)pcs) - { - FUSB_INFO("Not enough empty TRBs ."); - goto _free_return; - } - - /* allocate request buffer for each TRB */ - void *const reqdata = FXHCI_ALIGN(xhci, 1, reqsize); - if (NULL == reqdata) - { - FUSB_INFO("Out of memory."); - goto _free_return; - } - - FXhciClearTrb(cur, pcs); - cur->ptr_low = (uintptr)(reqdata); - cur->ptr_high = 0; - FXHCI_TRB_SET(TL, cur, reqsize); /* Transfer Length */ - FXHCI_TRB_SET(TT, cur, FXHCI_TRB_NORMAL); /* TRB Type */ - FXHCI_TRB_SET(ISP, cur, 1); /* Interrupt-on Short Packet */ - FXHCI_TRB_SET(IOC, cur, 1); /* Interrupt On Completion */ - - cur = FXhciNextTrb(cur, &pcs); - } - - intrq->size = reqsize; - intrq->count = reqcount; - intrq->next = tr->cur; - intrq->ready = NULL; - intrq->ep = ep; - xhci->dev[slot_id].interrupt_queues[ep_id] = intrq; - - /* Now enqueue all the prepared TRBs but the last - and ring the doorbell. */ - for (i = 0; i < (reqcount - 1); ++i) - { - FXhciEnqueueTrb(tr); - } - - FXhciRingDoorbell(ep); - return intrq; - -_free_return: - cur = tr->cur; - for (--i; i >= 0; --i) - { - FUSB_FREE(instance, (void *)(uintptr)(cur->ptr_low)); - cur = FXhciNextTrb(cur, NULL); - } - FUSB_FREE(instance, intrq); - return NULL; -} - -/** - * @name: FXhciDestoryIntrQueue - * @msg: 删除中断队列 - * @return {*} - * @param {FUsbEndpoint} *ep, 端点实例 - * @param {void} *q, 中断队列 - * @note remove queue from device schedule, dropping all data that came in - */ -static void FXhciDestoryIntrQueue(FUsbEndpoint *const ep, void *const q) -{ - FASSERT(ep && q); - FXhci *const xhci = FXHCI_INST_GET(ep->dev->controller); - FASSERT(xhci); - FUsb *instance = xhci->usb; - const int slot_id = ep->dev->address; - const int ep_id = FXhciEpId(ep); - FXhciTransRing *const tr = xhci->dev[slot_id].transfer_rings[ep_id]; - FXhciIntrQ *const intrq = (FXhciIntrQ *)q; - - /* Make sure the endpoint is stopped */ - if (FXHCI_EC_GET(STATE, xhci->dev[slot_id].ctx.ep[ep_id]) == FXHCI_EC_STATE_RUNNING) - { - const FXhciTransCode cc = FXhciCmdStopEp(xhci, slot_id, ep_id); - if (cc != FXHCI_CC_SUCCESS) - { - FUSB_INFO("Warning: Failed to stop endpoint ."); - } - } - - /* Process all remaining transfer events */ - FXhciHandleEvts(xhci); - - /* Free all pending transfers and the interrupt queue structure */ - int i; - for (i = 0; (size_t)i < intrq->count; ++i) - { - FUSB_FREE(instance, (void *)(uintptr)(intrq->next->ptr_low)); - intrq->next = FXhciNextTrb(intrq->next, NULL); - } - - xhci->dev[slot_id].interrupt_queues[ep_id] = NULL; - FUSB_FREE(instance, (void *)intrq); - - /* Reset the controller's dequeue pointer and reinitialize the ring */ - FXhciCmdSetTrDq(xhci, slot_id, ep_id, tr->ring, 1); - FXhciInitCycleRing(tr, FXHCI_TRANSFER_RING_SIZE); - - return; -} - -/** - * @name: FXhciPollIntrQueue - * @msg: 轮询一次中断队列进行处理 - * @return {*} - * @param {void} *q, 中断队列 - * @note read one intr-packet from queue, if available. extend the queue for new input. - return NULL if nothing new available. - Recommended use: while (data=poll_intr_queue(q)) process(data); - */ -static u8 *FXhciPollIntrQueue(void *const q) -{ - if (NULL == q) - { - return NULL; - } - - FXhciIntrQ *const intrq = (FXhciIntrQ *)q; - FUsbEndpoint *const ep = intrq->ep; - FXhci *const xhci = FXHCI_INST_GET(ep->dev->controller); - FASSERT(xhci); - - /* TODO: Reset interrupt queue if it gets halted? */ - FXhciHandleEvts(xhci); - - u8 *reqdata = NULL; - while (!reqdata && intrq->ready) - { - const int ep_id = FXhciEpId(ep); - FXhciTransRing *const tr = - xhci->dev[ep->dev->address].transfer_rings[ep_id]; - - /* Fetch the request's buffer */ - reqdata = (void *)(uintptr)(intrq->next->ptr_low); - - /* Enqueue the last (spare) TRB and ring doorbell */ - FXhciEnqueueTrb(tr); - FXhciRingDoorbell(ep); - - /* Reuse the current buffer for the next spare TRB */ - FXhciClearTrb(tr->cur, tr->pcs); - tr->cur->ptr_low = (uintptr)(reqdata); - tr->cur->ptr_high = 0; - FXHCI_TRB_SET(TL, tr->cur, intrq->size); /* Transfer Length */ - FXHCI_TRB_SET(TT, tr->cur, FXHCI_TRB_NORMAL); /* TRB Type */ - FXHCI_TRB_SET(ISP, tr->cur, 1); /* Interrupt-on Short Packet */ - FXHCI_TRB_SET(IOC, tr->cur, 1); /* Interrupt On Completion */ - - /* Check if anything was transferred */ - const size_t read = FXHCI_TRB_GET(TL, intrq->next); - if (!read) - { - reqdata = NULL; - } - else if (read < intrq->size) - /* At least zero it, poll interface is rather limited */ - { - memset(reqdata + read, 0x00, intrq->size - read); - } - - /* Advance the interrupt queue */ - if (intrq->ready == intrq->next) - /* This was last TRB being ready */ - { - intrq->ready = NULL; - } - intrq->next = FXhciNextTrb(intrq->next, NULL); - } - - return reqdata; -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/usb/fxhci/fxhci.h b/bsp/phytium/libraries/standalone/drivers/usb/fxhci/fxhci.h deleted file mode 100644 index 9221bb352b..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/usb/fxhci/fxhci.h +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fxhci.h - * Date: 2022-02-11 13:33:12 - * LastEditTime: 2022-02-18 09:17:44 - * Description:  This files is for definition of XHCI user function - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/2/7 init commit - */ - -#ifndef FXHCI_H -#define FXHCI_H - -/***************************** Include Files *********************************/ -#include "fusb.h" - - -#ifdef __cplusplus -extern "C" -{ -#endif - -/************************** Constant Definitions *****************************/ -#define FXHCI_EVENT_RING_SIZE 64 -#define FXHCI_TRANSFER_RING_SIZE 32 /* Never raise this above 256 to prevent transfer event length overflow! */ -#define FXHCI_COMMAND_RING_SIZE 4 -#define FXHCI_NUM_EPS 32 - -#define FXHCI_HC_VERSION_MIN 0x96 /* supported XHCI version from v0.96 to v1.2 */ -#define FXHCI_HC_VERSION_MAX 0x120 - -/* completion code for xhci */ -enum -{ - /* Make these high enough to not collide with negative FUSB_HC_XHCI CCs */ - FXHCI_CC_TIMEOUT = -65, - FXHCI_CC_CONTROLLER_ERROR = -66, - FXHCI_CC_COMMUNICATION_ERROR = -67, - FXHCI_CC_OUT_OF_MEMORY = -68, - FXHCI_CC_DRIVER_ERROR = -69, - FXHCI_CC_GENERAL_ERROR = -1, - - FXHCI_CC_ZERO_BYTES = FUSB_CC_ZERO_BYTES, - - /* defined according to Table 130: TRB Completion Code Definitions in spec */ - FXHCI_CC_SUCCESS = FUSB_CC_SUCCESS, - - /* Use as -FXHCI_CC_TRB_ERROR when return as error */ - FXHCI_CC_TRB_ERROR = 5, - FXHCI_CC_STALL_ERROR = 6, - FXHCI_CC_RESOURCE_ERROR = 7, - FXHCI_CC_BANDWIDTH_ERROR = 8, - FXHCI_CC_NO_SLOTS_AVAILABLE = 9, - FXHCI_CC_SLOT_NOT_ENABLED = 11, - FXHCI_CC_SHORT_PACKET = 13, - FXHCI_CC_EVENT_RING_FULL_ERROR = 21, - FXHCI_CC_COMMAND_RING_STOPPED = 24, - FXHCI_CC_COMMAND_ABORTED = 25, - FXHCI_CC_STOPPED = 26, - FXHCI_CC_STOPPED_LENGTH_INVALID = 27 -}; - -typedef FUsbTransCode FXhciTransCode; -/**************************** Type Definitions *******************************/ - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ -/* 创建XHCI USB 控制器实例,完成初始化 */ -FUsbHc *FXhciHcInit(FUsb *instance, uintptr base_addr); - -#ifdef __cplusplus -} -#endif - - -#endif - - diff --git a/bsp/phytium/libraries/standalone/drivers/usb/fxhci/fxhci_cmd.c b/bsp/phytium/libraries/standalone/drivers/usb/fxhci/fxhci_cmd.c deleted file mode 100644 index a25961bf66..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/usb/fxhci/fxhci_cmd.c +++ /dev/null @@ -1,255 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fxhci_cmd.c - * Date: 2022-02-11 13:33:12 - * LastEditTime: 2022-02-18 09:11:23 - * Description:  This files is for implementation of XHCI command - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/2/7 init commit - */ - -#include "fdebug.h" -#include "fxhci_private.h" - -#define FUSB_DEBUG_TAG "FXHCI_CMD" -#define FUSB_ERROR(format, ...) FT_DEBUG_PRINT_E(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) -#define FUSB_WARN(format, ...) FT_DEBUG_PRINT_W(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) -#define FUSB_INFO(format, ...) FT_DEBUG_PRINT_I(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) -#define FUSB_DEBUG(format, ...) FT_DEBUG_PRINT_D(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) - -FXhciTrb *FXhciNextCmdTrb(FXhci *const xhci) -{ - FXhciClearTrb(xhci->cr.cur, xhci->cr.pcs); - return xhci->cr.cur; -} - -void FXhciPostCmd(FXhci *const xhci) -{ - FUSB_INFO("Command %d (@%p).", FXHCI_TRB_GET(TT, xhci->cr.cur), xhci->cr.cur); - - FXHCI_TRB_SET(C, xhci->cr.cur, xhci->cr.pcs); /* Cycle Bit */ - ++xhci->cr.cur; - - /* pass command trb to hardware */ - WMB(); - - /* Ring the doorbell */ - FXhciWriteDb32(&xhci->mmio, FXHCI_REG_DB_HOST_CONTROLLER, FXHCI_REG_DB_TARGET_HC_COMMAND); - - while (FXHCI_TRB_GET(TT, xhci->cr.cur) == FXHCI_TRB_LINK) - { - FUSB_DEBUG("Handling link pointer (@%p).", xhci->cr.cur); - const int tc = FXHCI_TRB_GET(TC, xhci->cr.cur); /* Completion Code */ - FXHCI_TRB_SET(C, xhci->cr.cur, xhci->cr.pcs); /* Cycle Bit */ - xhci->cr.cur = (void *)(uintptr)(xhci->cr.cur->ptr_low); - if (tc) - { - xhci->cr.pcs ^= 1; - } - } -} - -static FXhciTransCode FXhciWaitForCmd(FXhci *const xhci, - const FXhciTrb *const cmd_trb, - const int clear_event) -{ - FXhciTransCode cc; - u64 reg_val64; - - cc = FXhciWaitForCmdDone(xhci, cmd_trb, clear_event); - if (cc != FXHCI_CC_TIMEOUT) - { - return cc; - } - - /* Abort command on timeout */ - FUSB_ERROR("Aborting command (@%p), CRCR: 0x%x.", cmd_trb, FXhciReadOper64(&xhci->mmio, FXHCI_REG_OP_CRCR)); - - /* - * Ref. xHCI Specification Revision 1.2, May 2019. - * Section 5.4.5, Table 5-24. - * - * Abort the command and stop the ring. - */ - reg_val64 = FXhciReadOper64(&xhci->mmio, FXHCI_REG_OP_CRCR); - reg_val64 |= FXHCI_REG_OP_CRCR_CA; - FXhciWriteOper64(&xhci->mmio, FXHCI_REG_OP_CRCR, reg_val64); - - cc = FXhciWaitForCmdAborted(xhci, cmd_trb); - - if ((FXhciReadOper64(&xhci->mmio, FXHCI_REG_OP_CRCR) & FXHCI_REG_OP_CRCR_CRR)) - { - FUSB_ERROR("FXhciWaitForCmd: Command ring still running."); - } - - return cc; -} - -FXhciTransCode FXhciCmdNop(FXhci *const xhci) -{ - FXhciTrb *const cmd = FXhciNextCmdTrb(xhci); - FXHCI_TRB_SET(TT, cmd, FXHCI_TRB_CMD_NOOP); /* TRB Type */ - - FXhciPostCmd(xhci); - - /* wait for result in event ring */ - FXhciTransCode cc = FXhciWaitForCmdDone(xhci, cmd, 1); - - FUSB_INFO("Command ring is %srunning: cc: %d.", - (FXhciReadOper64(&xhci->mmio, FXHCI_REG_OP_CRCR) & FXHCI_REG_OP_CRCR_CRR) ? "" : "not ", /* check if cmd ring is running */ - cc); - - if (cc != FXHCI_CC_SUCCESS) - { - FUSB_ERROR("Noop command failed."); - } - - return cc; -} - -/* - * xhci_cmd_* return >= 0: xhci completion code (cc) - * < 0: driver error code - */ - -FXhciTransCode FXhciCmdEnableSlot(FXhci *const xhci, int *const slot_id) -{ - FXhciTrb *const cmd = FXhciNextCmdTrb(xhci); - FXHCI_TRB_SET(TT, cmd, FXHCI_TRB_CMD_ENABLE_SLOT); /* TRB Type */ - FXhciPostCmd(xhci); - - FXhciTransCode cc = FXhciWaitForCmd(xhci, cmd, 0); - if (cc >= 0) - { - if (cc == FXHCI_CC_SUCCESS) - { - *slot_id = FXHCI_TRB_GET(ID, xhci->er.cur); - if (*slot_id > xhci->max_slots_en) - { - cc = FXHCI_CC_CONTROLLER_ERROR; - } - } - - FXhciAdvanceEvtRing(xhci); - FXhciHandleEvts(xhci); - } - - return cc; -} - -FXhciTransCode FXhciCmdDisableSlot(FXhci *const xhci, const int slot_id) -{ - FXhciTrb *const cmd = FXhciNextCmdTrb(xhci); - - FXHCI_TRB_SET(TT, cmd, FXHCI_TRB_CMD_DISABLE_SLOT); /* TRB Type */ - FXHCI_TRB_SET(ID, cmd, slot_id); /* Slot ID */ - FXhciPostCmd(xhci); - - return FXhciWaitForCmd(xhci, cmd, 1); -} - -FXhciTransCode FXhciCmdAddressDevice(FXhci *const xhci, - const int slot_id, - FXhciInputCtx *const ic) -{ - FXhciTrb *const cmd = FXhciNextCmdTrb(xhci); - - FXHCI_TRB_SET(TT, cmd, FXHCI_TRB_CMD_ADDRESS_DEV); /* TRB Type */ - FXHCI_TRB_SET(ID, cmd, slot_id); /* Slot ID */ - cmd->ptr_low = (uintptr)(ic->raw); - FXhciPostCmd(xhci); - - return FXhciWaitForCmd(xhci, cmd, 1); -} - -FXhciTransCode FXhciCmdConfigureEp(FXhci *const xhci, - const int slot_id, - const int config_id, - FXhciInputCtx *const ic) -{ - FXhciTrb *const cmd = FXhciNextCmdTrb(xhci); - - FXHCI_TRB_SET(TT, cmd, FXHCI_TRB_CMD_CONFIGURE_EP); /* TRB Type */ - FXHCI_TRB_SET(ID, cmd, slot_id); /* Slot ID */ - cmd->ptr_low = (uintptr)(ic->raw); - - if (config_id == 0) - { - FXHCI_TRB_SET(DC, cmd, 1); /* Deconfigure */ - } - - FXhciPostCmd(xhci); - - return FXhciWaitForCmd(xhci, cmd, 1); -} - -FXhciTransCode FXhciCmdEvaluateCtx(FXhci *const xhci, - const int slot_id, - FXhciInputCtx *const ic) -{ - FXhciTrb *const cmd = FXhciNextCmdTrb(xhci); - - FXHCI_TRB_SET(TT, cmd, FXHCI_TRB_CMD_EVAL_CTX); /* TRB Type */ - FXHCI_TRB_SET(ID, cmd, slot_id); /* Slot ID */ - - cmd->ptr_low = (uintptr)(ic->raw); - FXhciPostCmd(xhci); - - return FXhciWaitForCmd(xhci, cmd, 1); -} - -FXhciTransCode FXhciCmdResetEp(FXhci *const xhci, const int slot_id, const int ep) -{ - FXhciTrb *const cmd = FXhciNextCmdTrb(xhci); - - FXHCI_TRB_SET(TT, cmd, FXHCI_TRB_CMD_RESET_EP); /* TRB Type */ - FXHCI_TRB_SET(ID, cmd, slot_id); /* Slot ID */ - FXHCI_TRB_SET(EP, cmd, ep); /* Endpoint ID */ - - FXhciPostCmd(xhci); - - return FXhciWaitForCmd(xhci, cmd, 1); -} - -FXhciTransCode FXhciCmdStopEp(FXhci *const xhci, const int slot_id, const int ep) -{ - FXhciTrb *const cmd = FXhciNextCmdTrb(xhci); - - FXHCI_TRB_SET(TT, cmd, FXHCI_TRB_CMD_STOP_EP); /* TRB Type */ - FXHCI_TRB_SET(ID, cmd, slot_id); /* Slot ID */ - FXHCI_TRB_SET(EP, cmd, ep); /* Endpoint ID */ - - FXhciPostCmd(xhci); - - return FXhciWaitForCmd(xhci, cmd, 1); -} - -FXhciTransCode FXhciCmdSetTrDq(FXhci *const xhci, const int slot_id, const int ep, - FXhciTrb *const dq_trb, const int dcs) -{ - FXhciTrb *const cmd = FXhciNextCmdTrb(xhci); - - FXHCI_TRB_SET(TT, cmd, FXHCI_TRB_CMD_SET_TR_DQ); /* TRB Type */ - FXHCI_TRB_SET(ID, cmd, slot_id); /* Slot ID */ - FXHCI_TRB_SET(EP, cmd, ep); /* Endpoint ID */ - - cmd->ptr_low = (uintptr)(dq_trb) | dcs; - - FXhciPostCmd(xhci); - - return FXhciWaitForCmd(xhci, cmd, 1); -} diff --git a/bsp/phytium/libraries/standalone/drivers/usb/fxhci/fxhci_debug.c b/bsp/phytium/libraries/standalone/drivers/usb/fxhci/fxhci_debug.c deleted file mode 100644 index 13663444ec..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/usb/fxhci/fxhci_debug.c +++ /dev/null @@ -1,141 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fxhci_debug.c - * Date: 2022-02-11 13:33:12 - * LastEditTime: 2022-02-18 09:12:15 - * Description:  This files is for implementation of XHCI debug utilities - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/2/7 init commit - */ - -#include -#include "fdebug.h" -#include "fxhci_private.h" - -#define FUSB_DEBUG_TAG "FXHCI_DEBUG" -#define FUSB_ERROR(format, ...) FT_DEBUG_PRINT_E(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) -#define FUSB_WARN(format, ...) FT_DEBUG_PRINT_W(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) -#define FUSB_INFO(format, ...) FT_DEBUG_PRINT_I(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) -#define FUSB_DEBUG(format, ...) FT_DEBUG_PRINT_D(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) - -void FXhciDumpSlotCtx(const FXhciSlotCtx *const sc) -{ - FUSB_INFO("Slot Context (@%p): ", sc); - FUSB_INFO(" FIELD1\t0x%08x ", sc->f1); - FUSB_INFO(" FIELD2\t0x%08x ", sc->f2); - FUSB_INFO(" FIELD3\t0x%08x ", sc->f3); - FUSB_INFO(" FIELD4\t0x%08x ", sc->f4); - FXHCI_SC_DUMP(FUSB_INFO, ROUTE, sc); - FXHCI_SC_DUMP(FUSB_INFO, SPEED1, sc); - FXHCI_SC_DUMP(FUSB_INFO, MTT, sc); - FXHCI_SC_DUMP(FUSB_INFO, HUB, sc); - FXHCI_SC_DUMP(FUSB_INFO, CTXENT, sc); - FXHCI_SC_DUMP(FUSB_INFO, RHPORT, sc); - FXHCI_SC_DUMP(FUSB_INFO, NPORTS, sc); - FXHCI_SC_DUMP(FUSB_INFO, TTID, sc); - FXHCI_SC_DUMP(FUSB_INFO, TTPORT, sc); - FXHCI_SC_DUMP(FUSB_INFO, TTT, sc); - FXHCI_SC_DUMP(FUSB_INFO, UADDR, sc); - FXHCI_SC_DUMP(FUSB_INFO, STATE, sc); -} - -void FXhciDumpEpCtx(const FXhciEpCtx *const ec) -{ - FUSB_INFO("Endpoint Context (@%p): ", ec); - FUSB_INFO(" FIELD1\t0x%08x ", ec->f1); - FUSB_INFO(" FIELD2\t0x%08x ", ec->f2); - FUSB_INFO(" TRDQ_L\t0x%08x ", ec->tr_dq_low); - FUSB_INFO(" TRDQ_H\t0x%08x ", ec->tr_dq_high); - FUSB_INFO(" FIELD5\t0x%08x ", ec->f5); - FXHCI_EC_DUMP(FUSB_INFO, STATE, ec); - FXHCI_EC_DUMP(FUSB_INFO, INTVAL, ec); - FXHCI_EC_DUMP(FUSB_INFO, CERR, ec); - FXHCI_EC_DUMP(FUSB_INFO, TYPE, ec); - FXHCI_EC_DUMP(FUSB_INFO, MBS, ec); - FXHCI_EC_DUMP(FUSB_INFO, MPS, ec); - FXHCI_EC_DUMP(FUSB_INFO, DCS, ec); - FXHCI_EC_DUMP(FUSB_INFO, AVRTRB, ec); - FXHCI_EC_DUMP(FUSB_INFO, MXESIT, ec); -} - -void FXhciDumpDevCtx(const FXhciDevCtx *const dc, const u32 ctx_mask) -{ - unsigned int i; - - if (ctx_mask & 1) - { - FXhciDumpSlotCtx(dc->slot); - } - - for (i = 1; i <= FXHCI_SC_GET(CTXENT, dc->slot); ++i) - { - if (ctx_mask & (1 << i)) - { - FXhciDumpEpCtx(dc->ep[i]); - } - } -} - -void FXhciDumpInputCtx(const FXhciInputCtx *const ic) -{ - FUSB_INFO("Input Control add: 0x%08x ", *ic->add); - FUSB_INFO("Input Control drop: 0x%08x ", *ic->drop); - FXhciDumpDevCtx(&ic->dev, *ic->add); -} - -void FXhciDumpTransferTrb(const FXhciTrb *const cur) -{ - FUSB_INFO("Transfer TRB (@%p): ", cur); - FUSB_INFO(" PTR_L\t0x%08x ", cur->ptr_low); - FUSB_INFO(" PTR_H\t0x%08x ", cur->ptr_high); - FUSB_INFO(" STATUS\t0x%08x ", cur->status); - FUSB_INFO(" CNTRL\t0x%08x ", cur->control); - FXHCI_TRB_DUMP(FUSB_INFO, TL, cur); - FXHCI_TRB_DUMP(FUSB_INFO, TDS, cur); - FXHCI_TRB_DUMP(FUSB_INFO, C, cur); - FXHCI_TRB_DUMP(FUSB_INFO, ISP, cur); - FXHCI_TRB_DUMP(FUSB_INFO, CH, cur); - FXHCI_TRB_DUMP(FUSB_INFO, IOC, cur); - FXHCI_TRB_DUMP(FUSB_INFO, IDT, cur); - FXHCI_TRB_DUMP(FUSB_INFO, TT, cur); - FXHCI_TRB_DUMP(FUSB_INFO, DIR, cur); -} - -static const FXhciTrb *FXhciNextTrb(const FXhciTrb *const cur) -{ - if (FXHCI_TRB_GET(TT, cur) == FXHCI_TRB_LINK) - { - return (!cur->ptr_low) ? NULL : (void *)(uintptr)(cur->ptr_low); - } - else - { - return cur + 1; - } -} - -void FXhciDumpTransferTrbs(const FXhciTrb *const first, const FXhciTrb *const last) -{ - const FXhciTrb *cur; - for (cur = first; cur; cur = FXhciNextTrb(cur)) - { - FXhciDumpTransferTrb(cur); - if (cur == last) - { - break; - } - } -} diff --git a/bsp/phytium/libraries/standalone/drivers/usb/fxhci/fxhci_dev.c b/bsp/phytium/libraries/standalone/drivers/usb/fxhci/fxhci_dev.c deleted file mode 100644 index e284bf6bdc..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/usb/fxhci/fxhci_dev.c +++ /dev/null @@ -1,649 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fxhci_dev.c - * Date: 2022-02-11 13:33:12 - * LastEditTime: 2022-02-18 09:12:46 - * Description:  This files is for implementation of XHCI device - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/2/7 init commit - */ - -#include -#include "fsleep.h" -#include "fcache.h" -#include "fdebug.h" - -#include "fxhci_private.h" - -#define FUSB_DEBUG_TAG "FXHCI_DEV" -#define FUSB_ERROR(format, ...) FT_DEBUG_PRINT_E(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) -#define FUSB_WARN(format, ...) FT_DEBUG_PRINT_W(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) -#define FUSB_INFO(format, ...) FT_DEBUG_PRINT_I(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) -#define FUSB_DEBUG(format, ...) FT_DEBUG_PRINT_D(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) - -static u32 FXhciGenRounte(FXhci *const xhci, const int hubport, const int hubaddr) -{ - FASSERT(xhci); - if (!hubaddr) - { - return 0; - } - - u32 route_string = FXHCI_SC_GET(ROUTE, xhci->dev[hubaddr].ctx.slot); - int i; - - for (i = 0; i < 20; i += 4) - { - if (!(route_string & (0xf << i))) - { - route_string |= (hubport & 0xf) << i; - break; - } - } - - return route_string; -} - -static int FXhciGetRoothubPort(FXhci *const xhci, const int hubport, const int hubaddr) -{ - FASSERT(xhci); - if (!hubaddr) - { - return hubport; - } - - return FXHCI_SC_GET(RHPORT, xhci->dev[hubaddr].ctx.slot); -} - -static int FXhciGetTT(FXhci *const xhci, const FUsbSpeed speed, - const int hubport, const int hubaddr, - int *const tt, int *const tt_port) -{ - FASSERT(xhci); - if (!hubaddr) - { - return 0; - } - - const FXhciSlotCtx *const slot = xhci->dev[hubaddr].ctx.slot; - - if ((*tt = FXHCI_SC_GET(TTID, slot))) - { - *tt_port = FXHCI_SC_GET(TTPORT, slot); - } - else if (speed < FUSB_HIGH_SPEED && - FXHCI_SC_GET(SPEED1, slot) - 1 == FUSB_HIGH_SPEED) - { - *tt = hubaddr; - *tt_port = hubport; - } - - return *tt != 0; -} - -static void FXhciReapSlots(FXhci *const xhci, int skip_slot) -{ - FASSERT(xhci); - int i; - FUsb *instance = xhci->usb; - - FUSB_INFO("Xhci resource shortage, trying to reap old slots."); - for (i = 1; i <= xhci->max_slots_en; i++) - { - if (i == skip_slot) - { - continue; /* don't reap slot we were working on */ - } - if (xhci->dev[i].transfer_rings[1]) - { - continue; /* slot still in use */ - } - if (NULL == xhci->dev[i].ctx.raw) - { - continue; /* slot already disabled */ - } - - const FXhciTransCode cc = FXhciCmdDisableSlot(xhci, i); - if (cc != FXHCI_CC_SUCCESS) - { - FUSB_INFO("Failed to disable slot %d: %d.", i, cc); - } - else - { - FUSB_INFO("Successfully reaped slot %d.", i); - } - xhci->dcbaa[i] = 0; - - FUSB_FREE(instance, xhci->dev[i].ctx.raw); - xhci->dev[i].ctx.raw = NULL; - } -} - -static FXhciInputCtx *FXhciMakeInputCtx(FXhci *xhci, const size_t ctxsize) -{ - int i; - const size_t size = (1 + FXHCI_NUM_EPS) * ctxsize; - FUsb *instance = xhci->usb; - FXhciInputCtx *const ic = FUSB_ALLOCATE(instance, sizeof(*ic), FUSB_DEFAULT_ALIGN); - void *dma_buffer = FUSB_ALLOCATE(instance, size, 64); - - if ((NULL == ic) || (NULL == dma_buffer)) - { - FUSB_FREE(instance, ic); - FUSB_FREE(instance, dma_buffer); - return NULL; - } - - - memset(dma_buffer, 0, size); - ic->drop = dma_buffer + 0; - ic->add = dma_buffer + 4; - dma_buffer += ctxsize; - for (i = 0; i < FXHCI_NUM_EPS; i++, dma_buffer += ctxsize) - { - ic->dev.ep[i] = dma_buffer; - } - - return ic; -} - -/** - * @name: FXhciSetAddress - * @msg: 设备USB设备的地址 - * @return {FUsbDev *}, USB设备实例 - * @param {FUsbHc} *controller, USB控制器实例 - * @param {FUsbSpeed} speed, USB设备的速度类型 - * @param {int} hubport, USB设备连接的port号 - * @param {int} hubaddr, USB设备连接的hub地址 - */ -FUsbDev *FXhciSetAddress(FUsbHc *controller, FUsbSpeed speed, int hubport, int hubaddr) -{ - FXhci *const xhci = FXHCI_INST_GET(controller); - FASSERT(xhci); - const size_t ctxsize = FXhciGetCtxSize(&xhci->mmio); - FXhciDevInfo *di = NULL; - FUsbDev *dev = NULL; - FUsb *instance = controller->usb; - int i; - - FXhciInputCtx *const ic = FXhciMakeInputCtx(xhci, ctxsize); - FXhciTransRing *const tr = FUSB_ALLOCATE(instance, sizeof(*tr), FUSB_DEFAULT_ALIGN); - - if (NULL != tr) - { - FASSERT(NULL == tr->ring); - tr->ring = FXHCI_ALIGN(xhci, 16, FXHCI_TRANSFER_RING_SIZE * sizeof(FXhciTrb)); - } - - if ((NULL == ic) || (NULL == tr) || (NULL == tr->ring)) - { - FUSB_INFO("Out of memory."); - goto _free_return; - } - - - int slot_id; - FXhciTransCode cc = FXhciCmdEnableSlot(xhci, &slot_id); - if (cc == FXHCI_CC_NO_SLOTS_AVAILABLE) - { - FXhciReapSlots(xhci, 0); - cc = FXhciCmdEnableSlot(xhci, &slot_id); - } - - if (cc != FXHCI_CC_SUCCESS) - { - FUSB_INFO("Enable slot failed: %d.", cc); - goto _free_return; - } - else - { - FUSB_INFO("Enabled slot %d.", slot_id); - } - - di = &xhci->dev[slot_id]; - void *dma_buffer = FUSB_ALLOCATE(instance, FXHCI_NUM_EPS * ctxsize, 64); - if (NULL == dma_buffer) - { - goto _disable_return; - } - - memset(dma_buffer, 0, FXHCI_NUM_EPS * ctxsize); - for (i = 0; i < FXHCI_NUM_EPS; i++, dma_buffer += ctxsize) - { - di->ctx.ep[i] = dma_buffer; - } - - *ic->add = (1 << 0) /* Slot Context */ | (1 << 1) /* EP0 Context */; - - FXHCI_SC_SET(ROUTE, ic->dev.slot, FXhciGenRounte(xhci, hubport, hubaddr)); - FXHCI_SC_SET(SPEED1, ic->dev.slot, speed + 1); - FXHCI_SC_SET(CTXENT, ic->dev.slot, 1); /* the endpoint 0 context */ - FXHCI_SC_SET(RHPORT, ic->dev.slot, FXhciGetRoothubPort(xhci, hubport, hubaddr)); - - int tt, tt_port; - if (FXhciGetTT(xhci, speed, hubport, hubaddr, &tt, &tt_port)) - { - FUSB_INFO("TT for %d: %d[%d].", slot_id, tt, tt_port); - FXHCI_SC_SET(MTT, ic->dev.slot, FXHCI_SC_GET(MTT, xhci->dev[tt].ctx.slot)); - FXHCI_SC_SET(TTID, ic->dev.slot, tt); - FXHCI_SC_SET(TTPORT, ic->dev.slot, tt_port); - } - - di->transfer_rings[1] = tr; - FXhciInitCycleRing(tr, FXHCI_TRANSFER_RING_SIZE); - - ic->dev.ep0->tr_dq_low = (uintptr)(tr->ring); - ic->dev.ep0->tr_dq_high = 0; - FXHCI_EC_SET(TYPE, ic->dev.ep0, FXHCI_EP_CONTROL); - FXHCI_EC_SET(AVRTRB, ic->dev.ep0, 8); - FXHCI_EC_SET(MPS, ic->dev.ep0, FUsbSpeedtoDefaultMaxPacketSz(speed)); - FXHCI_EC_SET(CERR, ic->dev.ep0, 3); - FXHCI_EC_SET(DCS, ic->dev.ep0, 1); - - xhci->dcbaa[slot_id] = (uintptr)(di->ctx.raw); - - FCacheDCacheInvalidateRange((uintptr)ic, sizeof(*ic)); /* flush cache of input address */ - - cc = FXhciCmdAddressDevice(xhci, slot_id, ic); - if (cc == FXHCI_CC_RESOURCE_ERROR) - { - FXhciReapSlots(xhci, slot_id); - cc = FXhciCmdAddressDevice(xhci, slot_id, ic); - } - - if (cc != FXHCI_CC_SUCCESS) - { - FUSB_INFO("Address device failed: %d.", cc); - goto _disable_return; - } - else - { - FUSB_INFO("Addressed device %d (USB: %d).", - slot_id, FXHCI_SC_GET(UADDR, di->ctx.slot)); - } - - fsleep_millisec(FUSB_SET_ADDRESS_MDELAY); - - dev = FUsbInitDevEntry(controller, slot_id); - if (!dev) - { - goto _disable_return; - } - - dev->address = slot_id; - dev->hub = hubaddr; - dev->port = hubport; - dev->speed = speed; - dev->endpoints[0].dev = dev; - dev->endpoints[0].endpoint = 0; - dev->endpoints[0].toggle = 0; - dev->endpoints[0].direction = FUSB_SETUP; - dev->endpoints[0].type = FUSB_CONTROL_EP; - - u8 buf[8]; - if (FUsbGetDescriptor(dev, FUsbGenerateReqType(FUSB_REQ_DEVICE_TO_HOST, FUSB_REQ_TYPE_STANDARD, FUSB_REQ_RECP_DEV), FUSB_DESC_TYPE_DEVICE, 0, buf, sizeof(buf)) != sizeof(buf)) - { - FUSB_INFO("First FUsbGetDescriptor(FUSB_DESC_TYPE_DEVICE) failed."); - goto _disable_return; - } - - dev->endpoints[0].maxpacketsize = FUsbDecodeMaxPacketSz0(speed, buf[7]); - if (dev->endpoints[0].maxpacketsize != FUsbSpeedtoDefaultMaxPacketSz(speed)) - { - memset((void *)ic->dev.ep0, 0x00, ctxsize); - *ic->add = (1 << 1); /* EP0 Context */ - FXHCI_EC_SET(MPS, ic->dev.ep0, dev->endpoints[0].maxpacketsize); - - /* flush cache of input context before send command */ - FCacheDCacheInvalidateRange((uintptr)ic, sizeof(*ic)); - - cc = FXhciCmdEvaluateCtx(xhci, slot_id, ic); - if (cc == FXHCI_CC_RESOURCE_ERROR) - { - FXhciReapSlots(xhci, slot_id); - cc = FXhciCmdEvaluateCtx(xhci, slot_id, ic); - } - if (cc != FXHCI_CC_SUCCESS) - { - FUSB_INFO("Context evaluation failed: %d.", cc); - goto _disable_return; - } - } - - goto _free_ic_return; - -_disable_return: - FXhciCmdDisableSlot(xhci, slot_id); - xhci->dcbaa[slot_id] = 0; - FUsbDetachDev(controller, slot_id); - dev = NULL; -_free_return: - if (tr) - { - FUSB_FREE(instance, (void *)tr->ring); - } - FUSB_FREE(instance, tr); - if (di) - { - FUSB_FREE(instance, di->ctx.raw); - di->ctx.raw = 0; - } -_free_ic_return: - if (ic) - { - FUSB_FREE(instance, ic->raw); - FUSB_FREE(instance, ic); - } - return dev; -} - -static int FXhciFinishHubConfig(FUsbDev *const dev, FXhciInputCtx *const ic) -{ - int type = FUsbIsSuperSpeed(dev->speed) ? 0x2a : 0x29; /* similar enough */ - FUsbHubDescriptor desc; - - if (FUsbGetDescriptor(dev, FUsbGenerateReqType(FUSB_REQ_DEVICE_TO_HOST, FUSB_REQ_TYPE_CLASS, FUSB_REQ_RECP_DEV), type, 0, &desc, sizeof(desc)) != sizeof(desc)) - { - FUSB_INFO("Failed to fetch hub descriptor."); - return FXHCI_CC_COMMUNICATION_ERROR; - } - - FXHCI_SC_SET(HUB, ic->dev.slot, 1); - FXHCI_SC_SET(MTT, ic->dev.slot, 0); /* No support for Multi-TT */ - FXHCI_SC_SET(NPORTS, ic->dev.slot, desc.bNbrPorts); - - if (dev->speed == FUSB_HIGH_SPEED) - FXHCI_SC_SET(TTT, ic->dev.slot, - (desc.wHubCharacteristics >> 5) & 0x0003); - - return 0; -} - -static size_t FXhciBoundInterval(const FUsbEndpoint *const ep) -{ - if ((ep->dev->speed == FUSB_LOW_SPEED && - (ep->type == FUSB_ISOCHRONOUS_EP || - ep->type == FUSB_INTERRUPT_EP)) || - (ep->dev->speed == FUSB_FULL_SPEED && - ep->type == FUSB_INTERRUPT_EP)) - { - if (ep->interval < 3) - { - return 3; - } - else if (ep->interval > 11) - { - return 11; - } - else - { - return ep->interval; - } - } - else - { - if (ep->interval < 0) - { - return 0; - } - else if (ep->interval > 15) - { - return 15; - } - else - { - return ep->interval; - } - } -} - -static int FXhciFinishEpConfig(const FUsbEndpoint *const ep, FXhciInputCtx *const ic) -{ - FXhci *const xhci = FXHCI_INST_GET(ep->dev->controller); - FASSERT(xhci); - FUsb *instance = xhci->usb; - const int ep_id = FXhciEpId(ep); - FUSB_INFO("ep_id: %d.", ep_id); - - if (ep_id <= 1 || 32 <= ep_id) - { - return FXHCI_CC_DRIVER_ERROR; - } - - FXhciTransRing *const tr = FUSB_ALLOCATE(instance, sizeof(*tr), FUSB_DEFAULT_ALIGN); - if (NULL != tr) - { - FASSERT(NULL == tr->ring); - tr->ring = FXHCI_ALIGN(xhci, 16, FXHCI_TRANSFER_RING_SIZE * sizeof(FXhciTrb)); - } - - if ((NULL == tr) || (NULL == tr->ring)) - { - FUSB_FREE(instance, tr); - FUSB_ERROR("Out of memory."); - return FXHCI_CC_OUT_OF_MEMORY; - } - - xhci->dev[ep->dev->address].transfer_rings[ep_id] = tr; - FXhciInitCycleRing(tr, FXHCI_TRANSFER_RING_SIZE); - - *ic->add |= (1 << ep_id); - if ((int)FXHCI_SC_GET(CTXENT, ic->dev.slot) < ep_id) - { - FXHCI_SC_SET(CTXENT, ic->dev.slot, ep_id); - } - - FXhciEpCtx *const epctx = ic->dev.ep[ep_id]; - - FUSB_DEBUG("Filling epctx (@%p).", epctx); - epctx->tr_dq_low = (uintptr)(tr->ring); - epctx->tr_dq_high = 0; - - FXHCI_EC_SET(INTVAL, epctx, FXhciBoundInterval(ep)); - FXHCI_EC_SET(CERR, epctx, 3); - FXHCI_EC_SET(TYPE, epctx, ep->type | ((ep->direction != FUSB_OUT) << 2)); - FXHCI_EC_SET(MPS, epctx, ep->maxpacketsize); - FXHCI_EC_SET(DCS, epctx, 1); - - size_t avrtrb; - switch (ep->type) - { - case FUSB_BULK_EP: - case FUSB_ISOCHRONOUS_EP: - avrtrb = 3 * 1024; - break; - case FUSB_INTERRUPT_EP: - avrtrb = 1024; - break; - default: - avrtrb = 8; - break; - } - FXHCI_EC_SET(AVRTRB, epctx, avrtrb); - FXHCI_EC_SET(MXESIT, epctx, FXHCI_EC_GET(MPS, epctx) * FXHCI_EC_GET(MBS, epctx)); - - return 0; -} - -/** - * @name: FXhciFinishDevConfig - * @msg: 完成USB设备配置 - * @return {FXhciTransCode} 传输返回码 - * @param {FUsbDev} *dev, USB设备实例 - */ -FXhciTransCode FXhciFinishDevConfig(FUsbDev *const dev) -{ - FXhci *const xhci = FXHCI_INST_GET(dev->controller); - FASSERT(xhci); - FUsb *instance = xhci->usb; - int slot_id = dev->address; - FXhciDevInfo *const di = &xhci->dev[slot_id]; - - int i; - FXhciTransCode ret = FXHCI_CC_ZERO_BYTES; - - FXhciInputCtx *const ic = FXhciMakeInputCtx(xhci, FXhciGetCtxSize(&xhci->mmio)); - if (!ic) - { - FUSB_INFO("Out of memory."); - return FXHCI_CC_OUT_OF_MEMORY; - } - - *ic->add = (1 << 0); /* Slot Context */ - - ic->dev.slot->f1 = di->ctx.slot->f1; - ic->dev.slot->f2 = di->ctx.slot->f2; - ic->dev.slot->f3 = di->ctx.slot->f3; - /* f4 *must* be 0 in the Input Context... yeah, it's weird, I know. */ - - FCacheDCacheInvalidateRange((uintptr)ic, sizeof(*ic)); - - if (dev->descriptor->bDeviceClass == FUSB_HUB_DEVICE) - { - ret = FXhciFinishHubConfig(dev, ic); - if (ret) - { - goto _free_return; - } - } - - for (i = 1; i < dev->num_endp; ++i) - { - ret = FXhciFinishEpConfig(&dev->endpoints[i], ic); - if (ret) - { - goto _free_ep_ctx_return; - } - } - - const int config_id = dev->configuration->bConfigurationValue; - FUSB_INFO("config_id: %d ", config_id); - FXhciTransCode cc = FXhciCmdConfigureEp(xhci, slot_id, config_id, ic); - - if (cc == FXHCI_CC_RESOURCE_ERROR || cc == FXHCI_CC_BANDWIDTH_ERROR) - { - FXhciReapSlots(xhci, slot_id); - cc = FXhciCmdConfigureEp(xhci, slot_id, config_id, ic); - } - - if (cc != FXHCI_CC_SUCCESS) - { - FUSB_INFO("Configure endpoint failed: %d.", cc); - ret = FXHCI_CC_CONTROLLER_ERROR; - goto _free_ep_ctx_return; - } - else - { - FUSB_INFO("Endpoints configured."); - } - - goto _free_return; - -_free_ep_ctx_return: - for (i = 2; i < 31; ++i) - { - if (di->transfer_rings[i]) - { - FUSB_FREE(instance, (void *)di->transfer_rings[i]->ring); - FUSB_FREE(instance, di->transfer_rings[i]); - } - di->transfer_rings[i] = NULL; - } -_free_return: - if (NULL != ic) - { - FUSB_FREE(instance, ic->raw); - FUSB_FREE(instance, ic); - } - return ret; -} - -/** - * @name: FXhciDestoryDev - * @msg: 删除指定USB设备实例 - * @return {*} - * @param {FUsbHc} *controller, USB控制器实例 - * @param {int} slot_id, USB设备所在的slot号 - */ -void FXhciDestoryDev(FUsbHc *const controller, const int slot_id) -{ - FXhci *const xhci = FXHCI_INST_GET(controller); - FASSERT(xhci); - FUsb *instance = xhci->usb; - - if (slot_id <= 0 || slot_id > xhci->max_slots_en) - { - return; - } - - FXhciInputCtx *const ic = FXhciMakeInputCtx(xhci, FXhciGetCtxSize(&xhci->mmio)); - if (NULL == ic) - { - FUSB_WARN("Out of memory, leaking resources! "); - return; - } - - const int num_eps = controller->devices[slot_id]->num_endp; - *ic->add = 0; /* Leave Slot/EP0 state as it is for now. */ - *ic->drop = (1 << num_eps) - 1; /* Drop all endpoints we can. */ - *ic->drop &= ~(1 << 1 | 1 << 0); /* Not allowed to drop EP0 or Slot. */ - - FCacheDCacheInvalidateRange((uintptr)ic, sizeof(*ic)); - - FXhciTransCode cc = FXhciCmdEvaluateCtx(xhci, slot_id, ic); - - if (NULL != ic) - { - FUSB_FREE(instance, ic->raw); - FUSB_FREE(instance, ic); - } - - if (cc != FXHCI_CC_SUCCESS) - { - FUSB_INFO("Failed to quiesce slot %d: %d.", slot_id, cc); - } - - cc = FXhciCmdStopEp(xhci, slot_id, FXHCI_EP0_ID); - if (cc != FXHCI_CC_SUCCESS) - { - FUSB_INFO("Failed to stop EP0 on slot %d: %d.", slot_id, cc); - } - - int i; - FXhciDevInfo *const di = &xhci->dev[slot_id]; - for (i = 1; i < /*num_eps*/FXHCI_NUM_EPS; ++i) - { - if (di->transfer_rings[i]) - { - FUSB_FREE(instance, (void *)di->transfer_rings[i]->ring); - FUSB_FREE(instance, (void *)di->transfer_rings[i]); - } - FUSB_FREE(instance, di->interrupt_queues[i]); - } - - /* free device context */ - if (NULL != di->ctx.raw) - { - FUSB_FREE(instance, di->ctx.raw); - di->ctx.raw = NULL; - } - - FUSB_INFO("Stopped slot %d, but not disabling it yet.", slot_id); - di->transfer_rings[1] = NULL; - - return; -} diff --git a/bsp/phytium/libraries/standalone/drivers/usb/fxhci/fxhci_evt.c b/bsp/phytium/libraries/standalone/drivers/usb/fxhci/fxhci_evt.c deleted file mode 100644 index 0995b6eeef..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/usb/fxhci/fxhci_evt.c +++ /dev/null @@ -1,379 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fxhci_evt.c - * Date: 2022-02-11 13:33:12 - * LastEditTime: 2022-02-18 09:13:09 - * Description:  This files is for implementation of XHCI event - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/2/7 init commit - */ - -#include "fsleep.h" -#include "fdebug.h" - -#include "fxhci_private.h" - -#define FUSB_DEBUG_TAG "FXHCI-EVT" -#define FUSB_ERROR(format, ...) FT_DEBUG_PRINT_E(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) -#define FUSB_WARN(format, ...) FT_DEBUG_PRINT_W(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) -#define FUSB_INFO(format, ...) FT_DEBUG_PRINT_I(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) -#define FUSB_DEBUG(format, ...) FT_DEBUG_PRINT_D(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) - -/** - * @name: FXhciResetEvtRing - * @msg: 重置Event TRB ring - * @return {*} - * @param {FXhciEvtRing} *er, Event TRB ring实例 - */ -void FXhciResetEvtRing(FXhciEvtRing *const er) -{ - int i; - for (i = 0; i < FXHCI_EVENT_RING_SIZE; ++i) - { - er->ring[i].control &= ~FXHCI_TRB_CYCLE; - } - er->cur = er->ring; - er->last = er->ring + FXHCI_EVENT_RING_SIZE; - er->ccs = 1; - er->adv = 1; -} - -static inline int FXhciEvtReady(const FXhciEvtRing *const er) -{ - return (er->cur->control & FXHCI_TRB_CYCLE) == er->ccs; -} - -void FXhciUpdateEvtDQ(FXhci *const xhci) -{ - if (xhci->er.adv) - { - FUSB_DEBUG("Updating dq ptr: @0x%lx -> %p.", - FXhciReadRt64(&xhci->mmio, 0, FXHCI_REG_RT_IR_ERDP), - xhci->er.cur); - FXhciWriteRt64(&xhci->mmio, 0, FXHCI_REG_RT_IR_ERDP, FXHCI_REG_RT_IR_ERDP_MASK & ((u64)(uintptr)xhci->er.cur)); - xhci->er.adv = 0; - } -} - -void FXhciAdvanceEvtRing(FXhci *const xhci) -{ - xhci->er.cur++; - xhci->er.adv = 1; - if (xhci->er.cur == xhci->er.last) - { - FUSB_DEBUG("Roll over in event ring."); - xhci->er.cur = xhci->er.ring; - xhci->er.ccs ^= 1; - FXhciUpdateEvtDQ(xhci); - } -} - -static void FXhciHandleTransferEvt(FXhci *const xhci) -{ - const FXhciTrb *const ev = xhci->er.cur; - - const FXhciTransCode cc = FXHCI_TRB_GET(CC, ev); /* Completion Code */ - const int id = FXHCI_TRB_GET(ID, ev); - const int ep = FXHCI_TRB_GET(EP, ev); - - FXhciIntrQ *intrq; - - if (id && id <= xhci->max_slots_en && - (intrq = xhci->dev[id].interrupt_queues[ep])) - { - /* It's a running interrupt endpoint */ - intrq->ready = (void *)(uintptr)(ev->ptr_low); - if (cc == FXHCI_CC_SUCCESS || cc == FXHCI_CC_SHORT_PACKET) - { - FXHCI_TRB_SET(TL, intrq->ready, - intrq->size - FXHCI_TRB_GET(EVTL, ev)); /* Transfer Length */ - } - else - { - FUSB_INFO("Interrupt transfer failed: %d.", cc); - FXHCI_TRB_SET(TL, intrq->ready, 0); /* Transfer Length */ - } - } - else if (cc == FXHCI_CC_STOPPED || cc == FXHCI_CC_STOPPED_LENGTH_INVALID) - { - /* Ignore 'Forced Stop Events' */ - } - else - { - FUSB_WARN("Warning: \r\n" - "Spurious transfer event for ID %d, EP %d: \r\n" - " Pointer: 0x%08x%08x \r\n" - " TL: 0x%06x \r\n" - " CC: %d ", - id, ep, - ev->ptr_high, ev->ptr_low, - FXHCI_TRB_GET(EVTL, ev), cc); - } - - FXhciAdvanceEvtRing(xhci); -} - -static void FXhciHandleCmdCompletionEvt(FXhci *const xhci) -{ - const FXhciTrb *const ev = xhci->er.cur; - - FUSB_INFO("Warning: Spurious command completion event: \r\n" - " Pointer: 0x%08x%08x \r\n" - " CC: %d \r\n" - " Slot ID: %d \r\n" - " Cycle: %d ", - ev->ptr_high, ev->ptr_low, - FXHCI_TRB_GET(CC, ev), FXHCI_TRB_GET(ID, ev), ev->control & FXHCI_TRB_CYCLE); - FXhciAdvanceEvtRing(xhci); -} - -static void FXhciHandleHostCtrlEvt(FXhci *const xhci) -{ - const FXhciTrb *const ev = xhci->er.cur; - - const FXhciTransCode cc = FXHCI_TRB_GET(CC, ev); - switch (cc) - { - case FXHCI_CC_EVENT_RING_FULL_ERROR: - FUSB_INFO("Event ring full! (@%p).", xhci->er.cur); - /* - * If we get here, we have processed the whole queue: - * xHC pushes this event, when it sees the ring full, - * full of other events. - * IMO it's save and necessary to update the dequeue - * pointer here. - */ - FXhciAdvanceEvtRing(xhci); - FXhciUpdateEvtDQ(xhci); - break; - default: - FUSB_INFO("Warning: spurious host controller event: %d.", cc); - FXhciAdvanceEvtRing(xhci); - break; - } -} - -/* handle standard types: - * - command completion event - * - port status change event - * - transfer event - * - host controller event - */ -static void FXhciHandleEvt(FXhci *const xhci) -{ - const FXhciTrb *const ev = xhci->er.cur; - - const int trb_type = FXHCI_TRB_GET(TT, ev); - switch (trb_type) - { - /* Either pass along the event or advance event ring */ - case FXHCI_TRB_EV_TRANSFER: - FXhciHandleTransferEvt(xhci); - break; - case FXHCI_TRB_EV_CMD_CMPL: - FXhciHandleCmdCompletionEvt(xhci); - break; - case FXHCI_TRB_EV_PORTSC: - FUSB_INFO("Port status change event for %d: %d. ", - FXHCI_TRB_GET(PORT, ev), FXHCI_TRB_GET(CC, ev)); - /* We ignore the event as we look for the PORTSC - registers instead, at a time when it suits _us_. */ - FXhciAdvanceEvtRing(xhci); - break; - case FXHCI_TRB_EV_HOST: - FXhciHandleHostCtrlEvt(xhci); - break; - default: - FUSB_INFO("Warning: spurious event: %d, completion code: %d.", - trb_type, FXHCI_TRB_GET(CC, ev)); - FXhciAdvanceEvtRing(xhci); - break; - } -} - -void FXhciHandleEvts(FXhci *const xhci) -{ - while (FXhciEvtReady(&xhci->er)) - { - FXhciHandleEvt(xhci); - } - - FXhciUpdateEvtDQ(xhci); - return; -} - -static unsigned long FXhciWaitForEvt(const FXhciEvtRing *const er, - unsigned long *const timeout_us) -{ - while (!FXhciEvtReady(er) && *timeout_us) - { - --*timeout_us; - fsleep_microsec(1); - } - return *timeout_us; -} - -static unsigned long FXhciWaitForEvtType(FXhci *const xhci, - const int trb_type, - unsigned long *const timeout_us) -{ - while (FXhciWaitForEvt(&xhci->er, timeout_us)) - { - if (FXHCI_TRB_GET(TT, xhci->er.cur) == (unsigned int)trb_type) - { - break; - } - - FXhciHandleEvt(xhci); - } - - return *timeout_us; -} - -/* - * Ref. xHCI Specification Revision 1.2, May 2019. - * Section 4.6.1.2. - * - * Process events from xHCI Abort command. - * - * Returns FXHCI_CC_COMMAND_RING_STOPPED on success and FXHCI_CC_TIMEOUT on failure. - */ - -FXhciTransCode FXhciWaitForCmdAborted(FXhci *const xhci, const FXhciTrb *const address) -{ - /* - * Specification says that something might be seriously wrong, if - * we don't get a response after 5s. Still, let the caller decide, - * what to do then. - */ - unsigned long timeout_us = FUSB_USB_MAX_PROCESSING_TIME_US; /* 5s */ - FXhciTransCode cc = FXHCI_CC_TIMEOUT; - /* - * Expects two command completion events: - * The first with CC == COMMAND_ABORTED should point to address - * (not present if command was not running), - * the second with CC == COMMAND_RING_STOPPED should point to new dq. - */ - while (FXhciWaitForEvtType(xhci, FXHCI_TRB_EV_CMD_CMPL, &timeout_us)) - { - if ((xhci->er.cur->ptr_low == (uintptr)(address)) && - (xhci->er.cur->ptr_high == 0)) - { - cc = FXHCI_TRB_GET(CC, xhci->er.cur); - FXhciAdvanceEvtRing(xhci); - break; - } - - FXhciHandleCmdCompletionEvt(xhci); - } - if (timeout_us == 0) - { - FUSB_INFO("Warning: timeout waiting COMMAND_ABORTED or COMMAND_RING_STOPPED."); - goto update_and_return; - } - if (cc == FXHCI_CC_COMMAND_RING_STOPPED) - { - /* There may not have been a command to abort. */ - goto update_and_return; - } - - timeout_us = FUSB_USB_MAX_PROCESSING_TIME_US; /* 5s */ - while (FXhciWaitForEvtType(xhci, FXHCI_TRB_EV_CMD_CMPL, &timeout_us)) - { - if (FXHCI_TRB_GET(CC, xhci->er.cur) == FXHCI_CC_COMMAND_RING_STOPPED) - { - cc = FXHCI_CC_COMMAND_RING_STOPPED; - FXhciAdvanceEvtRing(xhci); - break; - } - - FXhciHandleCmdCompletionEvt(xhci); - } - if (timeout_us == 0) - FUSB_INFO("Warning: timeout waiting for COMMAND_RING_STOPPED."); - -update_and_return: - FXhciUpdateEvtDQ(xhci); - return cc; -} - -/* - * returns cc of command in question (pointed to by `address`) - * caller should abort command if cc is FXHCI_CC_TIMEOUT - */ -FXhciTransCode FXhciWaitForCmdDone(FXhci *const xhci, - const FXhciTrb *const address, - const int clear_event) -{ - unsigned long timeout_us = FUSB_USB_MAX_PROCESSING_TIME_US; /* 5s */ - FXhciTransCode cc = FXHCI_CC_TIMEOUT; - - while (FXhciWaitForEvtType(xhci, FXHCI_TRB_EV_CMD_CMPL, &timeout_us)) - { - if ((xhci->er.cur->ptr_low == (uintptr)(address)) && - (xhci->er.cur->ptr_high == 0)) - { - cc = FXHCI_TRB_GET(CC, xhci->er.cur); - break; - } - - FXhciHandleCmdCompletionEvt(xhci); - } - - if (!timeout_us) - { - FUSB_INFO("Warning: timeout waiting for FXHCI_TRB_EV_CMD_CMPL."); - } - else if (clear_event) - { - FXhciAdvanceEvtRing(xhci); - } - - FXhciUpdateEvtDQ(xhci); - return cc; -} - -/* returns amount of bytes transferred on success, negative CC on error */ -FXhciTransCode FXhciWaitForTransfer(FXhci *const xhci, const int slot_id, const int ep_id) -{ - /* 5s for all types of transfers */ - unsigned long timeout_us = FUSB_USB_MAX_PROCESSING_TIME_US; - FXhciTransCode ret = FXHCI_CC_TIMEOUT; - while (FXhciWaitForEvtType(xhci, FXHCI_TRB_EV_TRANSFER, &timeout_us)) - { - if (FXHCI_TRB_GET(ID, xhci->er.cur) == (unsigned int)slot_id && - FXHCI_TRB_GET(EP, xhci->er.cur) == (unsigned int)ep_id) - { - ret = -FXHCI_TRB_GET(CC, xhci->er.cur); - if (ret == -FXHCI_CC_SUCCESS || ret == -FXHCI_CC_SHORT_PACKET) - { - ret = FXHCI_TRB_GET(EVTL, xhci->er.cur); - } - FXhciAdvanceEvtRing(xhci); - break; - } - - FXhciHandleTransferEvt(xhci); - } - if (!timeout_us) - { - FUSB_INFO("Warning: timeout waiting for FXHCI_TRB_EV_TRANSFER. "); - } - - FXhciUpdateEvtDQ(xhci); - return ret; -} diff --git a/bsp/phytium/libraries/standalone/drivers/usb/fxhci/fxhci_hw.c b/bsp/phytium/libraries/standalone/drivers/usb/fxhci/fxhci_hw.c deleted file mode 100644 index aa06b6e48f..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/usb/fxhci/fxhci_hw.c +++ /dev/null @@ -1,221 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fxhci_hw.c - * Date: 2022-02-11 13:33:12 - * LastEditTime: 2022-02-18 09:13:30 - * Description:  This files is for implementation of XHCI register functions - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/2/7 init commit - */ - -/***************************** Include Files *********************************/ -#include "fdebug.h" -#include "fgeneric_timer.h" -#include "fsleep.h" - -#include "fxhci_private.h" - - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ -#define FUSB_DEBUG_TAG "FXHCI_HW" -#define FUSB_ERROR(format, ...) FT_DEBUG_PRINT_E(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) -#define FUSB_WARN(format, ...) FT_DEBUG_PRINT_W(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) -#define FUSB_INFO(format, ...) FT_DEBUG_PRINT_I(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) -#define FUSB_DEBUG(format, ...) FT_DEBUG_PRINT_D(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) - -/************************** Function Prototypes ******************************/ - -/************************** Variable Definitions *****************************/ - -/*****************************************************************************/ -FError FXhciSetupMMIO(FXhciMMIO *mmio, uintptr base_addr) -{ - FASSERT(mmio); - u32 reg_val; - - mmio->base = base_addr; - - /* add to register base to find the beginning of the Operational Register Space */ - mmio->oper_base = mmio->base + FtIn8(mmio->base + FXHCI_REG_CAP_CAPLENGTH); - mmio->doorbell_base = mmio->base + FXHCI_REG_CAP_DBOFF_GET(FtIn32(mmio->base + FXHCI_REG_CAP_DBOFF)); - mmio->runtime_base = mmio->base + FXHCI_REG_CAP_RTSOFF_GET(FtIn32(mmio->base + FXHCI_REG_CAP_RTSOFF)); - mmio->port_base = mmio->oper_base + FXHCI_REG_OP_PORTS_BASE; - - /* cache static information of CAP_HCSPARAMS */ - mmio->hcx_params[0] = FtIn32(mmio->base + FXHCI_REG_CAP_HCSPARAMS1); - mmio->hcx_params[1] = FtIn32(mmio->base + FXHCI_REG_CAP_HCSPARAMS2); - mmio->hcx_params[2] = FtIn32(mmio->base + FXHCI_REG_CAP_HCSPARAMS3); - mmio->hcx_params[3] = FtIn32(mmio->base + FXHCI_REG_CAP_HCCPARAMS); - - reg_val = mmio->hcx_params[3]; - mmio->xecp_base = mmio->base + (FXHCI_REG_CAP_HCCPARAMS_XECP_GET(reg_val) << 2); - - FUSB_DEBUG(" mmio base: 0x%x", mmio->base); - FUSB_DEBUG(" oper base: 0x%x", mmio->oper_base); - FUSB_DEBUG(" doorbell base: 0x%x", mmio->doorbell_base); - FUSB_DEBUG(" runtime base: 0x%x", mmio->runtime_base); - FUSB_DEBUG(" port base: 0x%x", mmio->port_base); - - return FUSB_SUCCESS; -} - -static void FXhciParseExtCap(FXhciMMIO *mmio, const uintptr offset, const u32 cap_id) -{ - FASSERT(mmio); - FASSERT(mmio->base != 0); - u32 reg_val; - u32 major_ver, minor_ver; - u32 psic; /* Protocol Speed ID (PSI) */ - - switch (cap_id) - { - case FXHCI_EXT_CAP_ID_USB_LEGACY_SUPPORT: - reg_val = FXhciReadExtCap32(mmio, offset + FXHCI_REG_EXT_CAP_USBLEGSUP_OFFSET); - FUSB_INFO(" BIOS owned %d OS owned %d", - FXHCI_USBLEGSUP_BIOS_OWNED_SEMAPHORE & reg_val, - FXHCI_USBLEGSUP_OS_OWNED_SEMAPHORE & reg_val); - - reg_val = FXhciReadExtCap32(mmio, offset + FXHCI_REG_EXT_CAP_USBLEGCTLSTS_OFFSET); - FUSB_INFO(" SMI ctrl/status 0x%x", reg_val); - break; - case FXHCI_EXT_CAP_ID_SUPPORT_PROTOCOL: - reg_val = FXhciReadExtCap32(mmio, offset + FXHCI_REG_EXT_CAP_USBSPCFDEF_OFFSET); - FUSB_INFO(" Name: %c%c%c%c", - *((char *)®_val), *((char *)®_val + 1), - *((char *)®_val + 2), *((char *)®_val + 3)); - - reg_val = FXhciReadExtCap32(mmio, offset + FXHCI_REG_EXT_CAP_USBSPCF_OFFSET); - major_ver = FXHCI_USBSPCF_MAJOR_REVERSION_GET(reg_val); - minor_ver = FXHCI_USBSPCF_MINOR_REVERSION_GET(reg_val); - FUSB_INFO(" Version: %d.%d", major_ver, minor_ver); - - reg_val = FXhciReadExtCap32(mmio, offset + FXHCI_REG_EXT_CAP_USBSPCFDEF2_OFFSET); - FUSB_INFO(" Compatible ports: [%d-%d]", - FXHCI_USBSPCFDEF2_COMPATIBLE_PORT_OFF_GET(reg_val), - FXHCI_USBSPCFDEF2_COMPATIBLE_PORT_OFF_GET(reg_val) + FXHCI_USBSPCFDEF2_COMPATIBLE_PORT_CNT_GET(reg_val) - 1); - - if (FXHCI_MAJOR_REVERSION_USB2 == major_ver) - { - mmio->usb2_ports.port_beg = FXHCI_USBSPCFDEF2_COMPATIBLE_PORT_OFF_GET(reg_val); - mmio->usb2_ports.port_end = FXHCI_USBSPCFDEF2_COMPATIBLE_PORT_OFF_GET(reg_val) + FXHCI_USBSPCFDEF2_COMPATIBLE_PORT_CNT_GET(reg_val) - 1; - - FUSB_INFO(" High-speed only: %d, Integrated hub: %d, Hardware LMP: %d", - FXHCI_USBSPCFDEF2_USB2_HIGH_SPEED_ONLY & reg_val, - FXHCI_USBSPCFDEF2_USB2_INTERGRATED_HUB & reg_val, - FXHCI_USBSPCFDEF2_USB2_HW_LMP_CAP & reg_val); - } - else if (FXHCI_MAJOR_REVERSION_USB3 == major_ver) - { - mmio->usb3_ports.port_beg = FXHCI_USBSPCFDEF2_COMPATIBLE_PORT_OFF_GET(reg_val); - mmio->usb3_ports.port_end = FXHCI_USBSPCFDEF2_COMPATIBLE_PORT_OFF_GET(reg_val) + FXHCI_USBSPCFDEF2_COMPATIBLE_PORT_CNT_GET(reg_val) - 1; - } - - psic = FXHCI_USBSPCFDEF2_PROTOCOL_SPEED_ID_CNT_GET(reg_val); - FUSB_INFO(" PSIC: 0x%x", psic); - - if (0 != psic) - { - reg_val = FXhciReadExtCap32(mmio, offset + FXHCI_REG_PROTOCOL_SPEED_ID_OFFSET(psic)); - - FUSB_INFO(" Protocol speed-id: %d^%d", - FXHCI_PROTOCOL_SPEED_ID_VALUE_GET(reg_val), - FXHCI_PROTOCOL_SPEED_ID_EXPONENT_GET(reg_val)); - FUSB_INFO(" PSI type: %d, PSI full-duplex: %d, Mantissa: 0x%x", - FXHCI_PROTOCOL_SPEED_ID_PSI_TYPE_GET(reg_val), - (FXHCI_PROTOCOL_SPEED_ID_PSI_FULL_DUPLEX & reg_val == FXHCI_PROTOCOL_SPEED_ID_PSI_FULL_DUPLEX), - FXHCI_PROTOCOL_SPEED_ID_MANTISSA_GET(reg_val)); - } - else - { - if (FXHCI_MAJOR_REVERSION_USB3 == major_ver) - { - FUSB_INFO("For USB3, only the default super speed bit rate is supported !!!"); - } - else if (FXHCI_MAJOR_REVERSION_USB2 == major_ver) - { - FUSB_INFO("For USB2, default full speed, low speed and high speed bit rate supported !!!"); - } - } - - break; - case FXHCI_EXT_CAP_ID_USB_DEBUG_CAPABILITY: - - break; - default: - FUSB_WARN("Unhandled extend capabilities %d", cap_id); - break; - } - - return; -} - -void FXhciListExtCap(FXhciMMIO *mmio) -{ - FASSERT(mmio); - FASSERT(mmio->base != 0); - - uintptr next_ext_cap_offset = 0; - uintptr ext_cap_offset = 0; - u32 cap_id = 0; - u32 reg_val; - - FUSB_INFO("Extended capabilities"); - do - { - reg_val = FXhciReadExtCap32(mmio, ext_cap_offset); - next_ext_cap_offset = (FXHCI_REG_EXT_CAP_NEXT_CAP_PTR_GET(reg_val) << 2); - cap_id = FXHCI_REG_EXT_CAP_CAP_ID_GET(reg_val); - FXhciParseExtCap(mmio, ext_cap_offset, cap_id); - - FUSB_INFO("Capability ID: %d, Next Capability Pointer: 0x%x", - cap_id, next_ext_cap_offset); - ext_cap_offset += next_ext_cap_offset; - } - while (0 != next_ext_cap_offset); - - return; -} - -FError FXhciWaitOper32(FXhciMMIO *mmio, u32 offset, u32 mask, u32 exp_val, u32 timeout_tick) -{ - FASSERT(mmio); - FASSERT(mmio->base != 0); - FError ret = FUSB_ERR_WAIT_TIMEOUT; - u32 tick = 0U; - - do - { - if ((FXhciReadOper32(mmio, offset) & mask) == exp_val) - { - ret = FUSB_SUCCESS; - break; - } - fsleep_millisec(10); - } - while (tick++ < timeout_tick); - - if (FUSB_SUCCESS != ret) - { - FUSB_ERROR("Waitting status 0x%x timeout, current 0x%x, tick: %ld", exp_val, mask, tick); - } - - return ret; -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/usb/fxhci/fxhci_hw.h b/bsp/phytium/libraries/standalone/drivers/usb/fxhci/fxhci_hw.h deleted file mode 100644 index c3e3605014..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/usb/fxhci/fxhci_hw.h +++ /dev/null @@ -1,588 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fxhci_hw.h - * Date: 2022-02-11 13:33:12 - * LastEditTime: 2022-02-18 09:13:47 - * Description:  This files is for definition of XHCI hardware register interface - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/2/7 init commit - */ - -#ifndef FXHCI_HW_H -#define FXHCI_HW_H - -/***************************** Include Files *********************************/ -#include "fio.h" -#include "fassert.h" -#include "fkernel.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/************************** Constant Definitions *****************************/ -/** @name Register Map - * - * Register offsets from the base address of an SD device. - * @{ - */ -/***************** eXtensible Host Controller Capability Registers ***********************/ -#define FXHCI_REG_CAP_CAPLENGTH 0x00 /* specify the limits, restrictions and capabilities */ -#define FXHCI_REG_CAP_HCIVERSION 0x02 /* Interface Version Number */ -#define FXHCI_REG_CAP_HCSPARAMS1 0x04 /* Host Controller Structural Parameters 1 */ -#define FXHCI_REG_CAP_HCSPARAMS2 0x08 /* Host Controller Structural Parameters 2 */ -#define FXHCI_REG_CAP_HCSPARAMS3 0x0C /* Host Controller Structural Parameters 3 */ -#define FXHCI_REG_CAP_HCCPARAMS 0x10 /* Capability Parameters 1 */ -#define FXHCI_REG_CAP_DBOFF 0x14 /* Doorbell Offset Register */ -#define FXHCI_REG_CAP_RTSOFF 0x18 /* Runtime Register Space Offset Register */ - -/***************** Host Controller Operational Registers ***********************/ -#define FXHCI_REG_OP_USBCMD 0x00 /* USB Command Register */ -#define FXHCI_REG_OP_USBSTS 0x04 /* USB Status Register */ -#define FXHCI_REG_OP_PAGESIZE 0x08 /* Page Size Register */ -#define FXHCI_REG_OP_DNCTRL 0x14 /* Device Notification Control Register */ -#define FXHCI_REG_OP_CRCR 0x18 /* Command Ring Control Register */ -#define FXHCI_REG_OP_DCBAAP 0x30 /* Device Context Base Address Array Pointer Register */ -#define FXHCI_REG_OP_CONFIG 0x38 /* Configure Register */ - -/* Port Status and Ctrl Register : OP Base + (400h + (10h * (n–1))) 'n' is port num */ -#define FXHCI_REG_OP_PORTS_BASE 0x400 /* Port Status and Control Register Base */ -#define FXHCI_REG_OP_PORTS_SIZE 0x10 /* Size of one Port SC Register */ -#define FXHCI_REG_OP_PORTS_PORTSC 0x00 /* Port Status and Control Register */ -#define FXHCI_REG_OP_PORTS_PORTPMSC 0x04 /* USB3 Port Power Management Status and Control Register */ -#define FXHCI_REG_OP_PORTS_PORTLI 0x08 /* Port Link Info Register */ - -/***************** Host Controller Runtime Registers ***********************/ -#define FXHCI_REG_RT_MFINDEX 0x00 /* Microframe Index */ -#define FXHCI_REG_RT_IR0 0x20 /* Interrupter Register Set 0 */ -#define FXHCI_REG_RT_IR1023 0x8000 /* Interrupter Register Set 1023 */ - -/* Interrupter Register Set : RT Base + 020h + (32 * Interrupter) */ -#define FXHCI_REG_RT_IR_SIZE 0x20 /* Size of one IR Register */ -#define FXHCI_REG_RT_IR_IMAN 0x00 /* Interrupter Management Register */ -#define FXHCI_REG_RT_IR_IMOD 0x04 /* Interrupter Moderation Register */ -#define FXHCI_REG_RT_IR_ERSTSZ 0x08 /* Event Ring Segment Table Size Register */ -#define FXHCI_REG_RT_IR_ERSTBA 0x10 /* Event Ring Segment Table Base Address Register */ -#define FXHCI_REG_RT_IR_ERDP 0x18 /* Event Ring Dequeue Pointer Register */ - -/***************** Doorbell Register ***********************/ -#define FXHCI_REG_DB_SIZE 4 /* Doorbell registers are 32 bits in length */ - -/***************** eXtensible Host Controller Capability Registers ***********************/ - -/** @name FXHCI_REG_CAP_HCSPARAMS1 Register - */ -#define FXHCI_REG_CAP_HCSPARAMS1_MAX_SLOTS_GET(x) FUSB_REG32_GET_BITS(x, 7, 0) /* Number of Device Slots (MaxSlots) */ -#define FXHCI_REG_CAP_HCSPARAMS1_MAX_INTRS_GET(x) FUSB_REG32_GET_BITS(x, 18, 8) /* Number of Interrupters (MaxIntrs) */ -#define FXHCI_REG_CAP_HCSPARAMS1_MAX_PORTS_GET(x) FUSB_REG32_GET_BITS(x, 31, 24) /* Number of Ports (MaxPorts) */ - -/** @name FXHCI_REG_CAP_HCSPARAMS2 Register - */ -#define FXHCI_REG_CAP_HCSPARAMS2_IST_GET(x) FUSB_REG32_GET_BITS(x, 3, 0) /* Isochronous Scheduling Threshold (IST) */ -#define FXHCI_REG_CAP_HCSPARAMS2_ERST_MAX_GET(x) FUSB_REG32_GET_BITS(x, 7, 4) /* Event Ring Segment Table Max (ERST Max) */ -#define FXHCI_REG_CAP_HCSPARAMS2_SPR (1 << 26) /* Scratchpad Restore (SPR) */ -#define FXHCI_REG_CAP_HCSPARAMS2_MAX_SCRATCHPAD_BUFS_GET(x) FUSB_REG32_GET_BITS(x, 31, 27) /* Max Scratchpad Buffers (Max Scratchpad Bufs) */ - -/** @name FXHCI_REG_CAP_HCSPARAMS3 Register - */ -#define FXHCI_REG_CAP_HCSPARAMS3_U1_DEV_EXIT_LATENCY_GET(x) FUSB_REG32_GET_BITS(x, 7, 0) /* U1 Device Exit Latency */ -#define FXHCI_REG_CAP_HCSPARAMS3_U2_DEV_EXIT_LATENCY_GET(x) FUSB_REG32_GET_BITS(x, 31, 16) /* U2 Device Exit Latency */ - -/** @name FXHCI_REG_CAP_HCCPARAMS Register - */ -#define FXHCI_REG_CAP_HCCPARAMS_AC64 (1 << 0) /* 64-bit Addressing Capabilitya 1: 64-bit */ -#define FXHCI_REG_CAP_HCCPARAMS_BNC (1 << 1) /* BW Negotiation Capability (BNC) 1: support */ -#define FXHCI_REG_CAP_HCCPARAMS_CSZ (1 << 2) /* Context Size (CSZ) 1: 64 byte context data */ -#define FXHCI_REG_CAP_HCCPARAMS_PPC (1 << 3) /* Port Power Control (PPC) 1: support */ -#define FXHCI_REG_CAP_HCCPARAMS_PIND (1 << 4) /* Port Indicators (PIND) 1: support */ -#define FXHCI_REG_CAP_HCCPARAMS_LHRC (1 << 5) /* Light HC Reset Capability (LHRC) 1: support */ -#define FXHCI_REG_CAP_HCCPARAMS_LTC (1 << 6) /* Latency Tolerance Messaging Capability (LTC) */ -#define FXHCI_REG_CAP_HCCPARAMS_NSS (1 << 7) /* No Secondary SID Support (NSS) */ -#define FXHCI_REG_CAP_HCCPARAMS_MAX_PSA_SIZE_GET(x) FUSB_REG32_GET_BITS(x, 15, 12) /* Maximum Primary Stream Array Size (MaxPSASize) */ -#define FXHCI_REG_CAP_HCCPARAMS_XECP_GET(x) FUSB_REG32_GET_BITS(x, 31, 16) /* xHCI Extended Capabilities Pointer (xECP) */ - -/** @name FXHCI_REG_CAP_DBOFF Register - */ -#define FXHCI_REG_CAP_DBOFF_GET(x) ((x) & GENMASK(31, 2)) /* 32-byte offset of the Doorbell Array base address from the Base */ - -/** @name FXHCI_REG_CAP_RTSOFF Register - */ -#define FXHCI_REG_CAP_RTSOFF_GET(x) ((x) & GENMASK(31, 5)) /* 32-byte offset of the xHCI Runtime Registers */ - -/***************** Host Controller Operational Registers ***********************/ - -/** @name FXHCI_REG_OP_USBCMD Register - */ -#define FXHCI_REG_OP_USBCMD_RUN_STOP (1 << 0) /* Run/Stop (R/S) 1: RUN, 0: STOP - RW */ -#define FXHCI_REG_OP_USBCMD_HCRST (1 << 1) /* Host Controller Reset (HCRST) 1: RESET - RW */ -#define FXHCI_REG_OP_USBCMD_INTE (1 << 2) /* Interrupter Enable (INTE) 1: enabled - RW */ -#define FXHCI_REG_OP_USBCMD_HSEE (1 << 3) /* Host System Error Enable (HSEE) - RW */ -#define FXHCI_REG_OP_USBCMD_LHCRST (1 << 7) /* Light Host Controller Reset (LHCRST) - RW */ -#define FXHCI_REG_OP_USBCMD_CSS (1 << 8) /* Controller Save State (CSS) - RW */ -#define FXHCI_REG_OP_USBCMD_CRS (1 << 9) /* Controller Restore State (CRS) - RW */ -#define FXHCI_REG_OP_USBCMD_EWE (1 << 10) /* Enable Wrap Event (EWE) - RW */ -#define FXHCI_REG_OP_USBCMD_EU3S (1 << 11) /* Enable U3 MFINDEX Stop (EU3S) - RW */ - -/** @name FXHCI_REG_OP_USBSTS Register - */ -#define FXHCI_REG_OP_USBSTS_HCH (1 << 0) /* 1: Stopped executing */ -#define FXHCI_REG_OP_USBSTS_HSE (1 << 2) /* 1: Serious error detected */ -#define FXHCI_REG_OP_USBSTS_EINT (1 << 3) /* 1: Interrupt Pending (IP) */ -#define FXHCI_REG_OP_USBSTS_PCD (1 << 4) /* 1: Port Change Detect */ -#define FXHCI_REG_OP_USBSTS_SSS (1 << 8) /* remain 1 while the xHC saves its internal state */ -#define FXHCI_REG_OP_USBSTS_RSS (1 << 9) /* remain 1 while the xHC restores its internal state */ -#define FXHCI_REG_OP_USBSTS_SRE (1 << 10) /* if error occurs during a Save or Restore operation this bit shall be set to ‘1’. */ -#define FXHCI_REG_OP_USBSTS_CNR (1 << 11) /* 1: Controller Not Ready */ -#define FXHCI_REG_OP_USBSTS_HCE (1 << 12) /* 1: Internal xHC error condition */ -#define FXHCI_REG_OP_USBSTS_PRSRV_MASK ((1 << 1) | 0xffffe000) /* Rsvd bits */ - -/** @name FXHCI_REG_OP_PAGESIZE Register - */ -/* This xHC supports a page size of 2^(n+12) if bit n is Set */ -#define FXHCI_REG_OP_PAGESIZE_4K (1 << 0) /* if bit 0 is Set, the xHC supports 4k byte page sizes */ - -/** @name FXHCI_REG_OP_CRCR Register - */ -#define FXHCI_REG_OP_CRCR_RCS (1 << 0) /* Ring Cycle State, value of the xHC Consumer Cycle State (CCS) flag */ -#define FXHCI_REG_OP_CRCR_CS (1 << 1) /* Command Stop, 1 */ -#define FXHCI_REG_OP_CRCR_CA (1 << 2) /* Command Abort, 1 */ -#define FXHCI_REG_OP_CRCR_CRR (1 << 3) /* Command Ring Running */ -#define FXHCI_REG_OP_CRCR_CR_PTR_MASK GENMASK_ULL(63, 6) /* Command Ring Pointer, Dequeue Ptr of Command Ring */ - -/** @name FXHCI_REG_OP_DCBAAP Register - */ -#define FXHCI_REG_OP_DCBAAP_MASK GENMASK_ULL(63, 6) /* bit[31:6] Ptr of DCBAA */ - -/** @name FXHCI_REG_OP_CONFIG Register - */ -#define FXHCI_REG_OP_CONFIG_MAX_SLOTS_EN_MASK GENMASK(7, 0) /* Max Device Slots Enabled (MaxSlotsEn) – RW */ -#define FXHCI_REG_OP_CONFIG_MAX_SLOTS_EN_SET(x) FUSB_REG32_SET_BITS(x, 7, 0) /* bit[7:0] Max Device Slots Enabled */ -#define FXHCI_REG_OP_CONFIG_MAX_SLOTS_EN_GET(x) FUSB_REG32_GET_BITS(x, 7, 0) - -/** @name FXHCI_REG_OP_PORTS_PORTSC Register - */ -#define FXHCI_REG_OP_PORTS_PORTSC_CCS (1 << 0) /* Current Connect Status (CCS) – ROS */ -#define FXHCI_REG_OP_PORTS_PORTSC_PED (1 << 1) /* Port Enabled/Disabled (PED) – RW1CS */ -#define FXHCI_REG_OP_PORTS_PORTSC_OCA (1 << 3) /* Over-current Active (OCA) – RO */ -#define FXHCI_REG_OP_PORTS_PORTSC_PR (1 << 4) /* Port Reset (PR) – RW1S */ -#define FXHCI_REG_OP_PORTS_PORTSC_PLS_GET(x) FUSB_REG32_GET_BITS(x, 8, 5) /* Port Link State (PLS) – RWS */ -#define FXHCI_REG_OP_PORTS_PORTSC_PLS_SET(x) FUSB_REG32_SET_BITS(x, 8, 5) -#define FXHCI_REG_OP_PORTS_PORTSC_PLS_MASK GENMASK(8, 5) -#define FXHCI_REG_OP_PORTS_PORTSC_PLS(x) (x << 5) -/* Read value of Port Link State (PLS) */ -/* refer to FXHCI doc page-408 for details (Port Link State) */ -enum -{ - FXHCI_LINK_STATE_U0 = 0, /* U0 State */ - FXHCI_LINK_STATE_U1 = 1, /* U1 State */ - FXHCI_LINK_STATE_U2 = 2, /* U2 State */ - FXHCI_LINK_STATE_U3 = 3, /* U3 State (Device Suspended) */ - FXHCI_LINK_STATE_DISABLED = 4, /* Disabled State */ - FXHCI_LINK_STATE_RX_DETECT = 5, /* RxDetect State (Disconnected) */ - FXHCI_LINK_STATE_INACTIVE = 6, /* Inactive State */ - FXHCI_LINK_STATE_POLLING = 7, /* Polling State */ - FXHCI_LINK_STATE_RECOVERY = 8, /* Recovery State */ - FXHCI_LINK_STATE_HOT_RESET = 9, /* Hot Reset State */ - FXHCI_LINK_STATE_COMPLIANCE_MODE = 10, /* Compliance Mode State */ - FXHCI_LINK_STATE_TEST_MODE = 11, /* Test Mode State */ - FXHCI_LINK_STATE_RESUME = 15, /* Resume State */ - - FXHCI_LINK_STATE_MAX -}; - -#define FXHCI_REG_OP_PORTS_PORTSC_PLS_SET(x) FUSB_REG32_SET_BITS(x, 8, 5) - -#define FXHCI_REG_OP_PORTS_PORTSC_PP (1 << 9) /* Port Power (PP) – RWS */ -#define FXHCI_REG_OP_PORTS_PORTSC_PORT_SPEED_GET(x) FUSB_REG32_GET_BITS(x, 13, 10) /* Port Speed (Port Speed) – ROS */ -/* Protocol Speed ID (PSI) 1~15 */ -enum -{ - FXHCI_PORT_SPEED_UNDEFINED = 0, - FXHCI_PORT_SPEED_1 = 1, - FXHCI_PORT_SPEED_15 = 15, -}; - - -#define FXHCI_REG_OP_PORTS_PORTSC_PIC_SET(x) FUSB_REG32_SET_BITS(x, 15, 14) -#define FXHCI_REG_OP_PORTS_PORTSC_PIC_MASK GENMASK(15, 14) -enum -{ - FXHCI_PORT_INDICATOR_OFF = 0, - FXHCI_PORT_INDICATOR_AMBER = 1, - FXHCI_PORT_INDICATOR_GREEN = 2, - FXHCI_PORT_INDICATOR_UNDEFINED = 3 -}; - -#define FXHCI_REG_OP_PORTS_PORTSC_LWS (1 << 16) /* Port Link State Write Strobe (LWS) */ -#define FXHCI_REG_OP_PORTS_PORTSC_CSC (1 << 17) /* Connect Status Change (CSC) */ -#define FXHCI_REG_OP_PORTS_PORTSC_PEC (1 << 18) /* Port Enabled/Disabled Change (PEC) 1: clear PED */ -#define FXHCI_REG_OP_PORTS_PORTSC_WRC (1 << 19) /* Warm Port Reset Change 1: Warm Reset complete */ -#define FXHCI_REG_OP_PORTS_PORTSC_OCC (1 << 20) /* Over-current Change 1: Over-current Active */ -#define FXHCI_REG_OP_PORTS_PORTSC_PRC (1 << 21) /* Port Reset Change 1: Transition of Port Reset */ -#define FXHCI_REG_OP_PORTS_PORTSC_PLC (1 << 22) /* Port Link State Change 1: PLS transition */ -#define FXHCI_REG_OP_PORTS_PORTSC_CEC (1 << 23) /* Port Config Error Change 1: Port Config Error detected */ -#define FXHCI_REG_OP_PORTS_PORTSC_CAS (1 << 24) /* Cold Attach Status 1: Far-end Receiver Terminations were detected */ -#define FXHCI_REG_OP_PORTS_PORTSC_WCE (1 << 25) /* Wake on Connect Enable 1: enable port to be sensitive to device connects */ -#define FXHCI_REG_OP_PORTS_PORTSC_WDE (1 << 26) /* Wake on Disconnect Enable 1: enable port to be sensitive to device disconnects */ -#define FXHCI_REG_OP_PORTS_PORTSC_WOE (1 << 27) /* Wake on Over-current Enable 1: enable port to be sensitive to over-current conditions */ -#define FXHCI_REG_OP_PORTS_PORTSC_DR (1 << 30) /* Device Removable, 0: Device is removable. 1: Device is non-removable */ -#define FXHCI_REG_OP_PORTS_PORTSC_WPR (1 << 31) /* Warm Port Reset 1: follow Warm Reset sequence */ -#define FXHCI_REG_OP_PORTS_PORTSC_RW_MASK (FXHCI_REG_OP_PORTS_PORTSC_PR | FXHCI_REG_OP_PORTS_PORTSC_PLS_MASK | FXHCI_REG_OP_PORTS_PORTSC_PP \ - | FXHCI_REG_OP_PORTS_PORTSC_PIC_MASK | FXHCI_REG_OP_PORTS_PORTSC_LWS | FXHCI_REG_OP_PORTS_PORTSC_WCE \ - | FXHCI_REG_OP_PORTS_PORTSC_WDE | FXHCI_REG_OP_PORTS_PORTSC_WOE) - -/***************** Host Controller Runtime Registers ***********************/ - -/** @name FXHCI_REG_RT_IR_IMAN Register - */ -#define FXHCI_REG_RT_IR_IMAN_IP (1 << 0) /* Interrupt Pending, 1: an interrupt is pending for this Interrupter */ -#define FXHCI_REG_RT_IR_IMAN_IE (1 << 1) /* Interrupt Enable, 1: capable of generating an interrupt. */ - -/** @name FXHCI_REG_RT_IR_IMOD Register - */ -#define FXHCI_REG_RT_IR_IMOD_IMODI_MASK GENMASK(15, 0) /* bit[15:0] Interrupt Moderation Interval default 4000 ==> 1ms */ -#define FXHCI_REG_RT_IR_IMOD_IMODC_MASK GENMASK(31, 16) /* bit[31:16] Interrupt Moderation Counter(Down counter) */ - -/** @name FXHCI_REG_RT_IR_ERSTSZ Register - */ -#define FXHCI_REG_RT_IR_ERSTSZ_MASK GENMASK(15, 0) /* bit[15:0] the number of valid Event Ring Segment Table entries */ - -/** @name FXHCI_REG_RT_IR_ERSTBA Register - */ -#define FXHCI_REG_RT_IR_ERSTBA_MASK GENMASK_ULL(63, 6) /* Event Ring Segment Table Base Address */ - -/** @name FXHCI_REG_RT_IR_ERDP Register - */ -#define FXHCI_REG_RT_IR_ERDP_DESI_MASK GENMASK_ULL(2, 0) /* bit[2:0] Dequeue ERST Segment Index */ -#define FXHCI_REG_RT_IR_ERDP_EHB (1 << 3) /* Event Handler Busy */ -#define FXHCI_REG_RT_IR_ERDP_MASK GENMASK_ULL(63, 4) /* Event Ring Dequeue Pointer */ - -/***************** Doorbell Register ***********************/ -#define FXHCI_REG_DB_TARGET_HC_COMMAND 0 /* Host Controller Doorbell (0) Command Doorbell */ -#define FXHCI_REG_DB_TARGET_EP0 1 /* Device Context Doorbells Control EP 0 Enqueue Pointer Update */ -#define FXHCI_REG_DB_TARGET_EP1_OUT 2 /* EP 1 OUT Enqueue Pointer Update */ -#define FXHCI_REG_DB_TARGET_EP1_IN 3 /* EP 1 IN Enqueue Pointer Update */ -#define FXHCI_REG_DB_TARGET_EP15_OUT 30 /* EP 15 OUT Enqueue Pointer Update */ -#define FXHCI_REG_DB_TARGET_EP15_IN 31 /* EP 15 IN Enqueue Pointer Update */ - -/***************** xHCI Extended Capabilities Registers ***********************/ -#define FXHCI_REG_EXT_CAP_CAP_ID_GET(x) FUSB_REG32_GET_BITS(x, 7, 0) -/* refer to 'Table 138: xHCI Extended Capability Codes' for more details */ -enum -{ - FXHCI_EXT_CAP_ID_USB_LEGACY_SUPPORT = 1, - FXHCI_EXT_CAP_ID_SUPPORT_PROTOCOL = 2, - FXHCI_EXT_CAP_ID_EXTEND_POWER_MANAGEMENT = 3, - FXHCI_EXT_CAP_ID_IO_VIRTUALIZATION = 4, - FXHCI_EXT_CAP_ID_MESSAGE_INTERRUPT = 5, - FXHCI_EXT_CAP_ID_LOCAL_MEMORY = 6, - FXHCI_EXT_CAP_ID_USB_DEBUG_CAPABILITY = 10, - FXHCI_EXT_CAP_ID_EXT_MESSAGE_INTERRUPT = 17, - - FXHCI_EXT_CAP_ID_VENDOR_DEFINED_MIN = 192, - FXHCI_EXT_CAP_ID_VENDOR_DEFINED_MAX = 255 -}; - -#define FXHCI_REG_EXT_CAP_NEXT_CAP_PTR_GET(x) FUSB_REG32_GET_BITS(x, 15, 8) -#define FXHCI_REG_EXT_CAP_CAP_SPEC_GET(x) FUSB_REG32_GET_BITS(x, 31, 16) -/* Ext capabilities specific definitions */ -/* USB Legacy Support Capability */ -#define FXHCI_REG_EXT_CAP_USBLEGSUP_OFFSET 0x0 /* used by pre-OS software (BIOS) and the operating system to coordinate ownership of the xHC. */ -#define FXHCI_USBLEGSUP_BIOS_OWNED_SEMAPHORE (1 << 16) /* RW, The BIOS sets this bit to establish ownership of the xHC */ -#define FXHCI_USBLEGSUP_OS_OWNED_SEMAPHORE (1 << 24) /* RW, System software sets this bit to request ownership of the xHC */ - -#define FXHCI_REG_EXT_CAP_USBLEGCTLSTS_OFFSET 0x4 /* uses this register to enable System Management Interrupts (SMIs) for every xHCI/USB event it needs to track */ -#define FXHCI_USBLEGCTLSTS_USB_SMI_EN (1 << 0) /* RW, enable interrupts to trach event */ -#define FXHCI_USBLEGCTLSTS_SMI_HC_ERR_EN (1 << 4) /* RW */ -#define FXHCI_USBLEGCTLSTS_SMI_OS_OWE_EN (1 << 13) /* RW */ -#define FXHCI_USBLEGCTLSTS_SMI_PCI_CMD_EN (1 << 14) /* RW */ -#define FXHCI_USBLEGCTLSTS_SMI_BAR_EN (1 << 15) /* RW */ -#define FXHCI_USBLEGCTLSTS_SMI_EVT_INTERRUPT (1 << 16) /* RO */ -#define FXHCI_USBLEGCTLSTS_SMI_HC_SYS_ERR (1 << 20) /* RO */ -#define FXHCI_USBLEGCTLSTS_SMI_OS_OWN_CHG (1 << 29) /* RW1C */ -#define FXHCI_USBLEGCTLSTS_SMI_PCI_CMD (1 << 30) /* RW1C */ -#define FXHCI_USBLEGCTLSTS_SMI_BAR (1 << 31) /* RW1C */ - -/* xHCI Supported Protocol Capability */ -#define FXHCI_REG_EXT_CAP_USBSPCF_OFFSET 0x0 -#define FXHCI_USBSPCF_MINOR_REVERSION_GET(x) FUSB_REG32_GET_BITS(x, 23, 16) -#define FXHCI_USBSPCF_MAJOR_REVERSION_GET(x) FUSB_REG32_GET_BITS(x, 31, 24) -enum -{ - FXHCI_MAJOR_REVERSION_USB2 = 2, - FXHCI_MAJOR_REVERSION_USB3 = 3 -}; - -#define FXHCI_REG_EXT_CAP_USBSPCFDEF_OFFSET 0x4 -#define FXHCI_USBSPCFDEF_NAME_STRING_GET(x) FUSB_REG32_GET_BITS(x, 31, 0) /* four ASCII characters may be defined */ -#define FXHCI_USBSPCFDEF_NAME_STRING_USB 0x20425355 /* ASCII = "USB" */ - -#define FXHCI_REG_EXT_CAP_USBSPCFDEF2_OFFSET 0x8 -#define FXHCI_USBSPCFDEF2_COMPATIBLE_PORT_OFF_GET(x) FUSB_REG32_GET_BITS(x, 7, 0) -#define FXHCI_USBSPCFDEF2_COMPATIBLE_PORT_CNT_GET(x) FUSB_REG32_GET_BITS(x, 15, 8) -#define FXHCI_USBSPCFDEF2_PROTOCOL_DEFINED_GET(x) FUSB_REG32_GET_BITS(x, 27, 16) -/* USB3 - No Protocol Defined fields */ -/* USB2 */ -#define FXHCI_USBSPCFDEF2_USB2_HIGH_SPEED_ONLY (1 << 17) /* High-speed Only (HSO) - RO */ -#define FXHCI_USBSPCFDEF2_USB2_INTERGRATED_HUB (1 << 18) /* Integrated Hub Implemented (IHI) - RO */ -#define FXHCI_USBSPCFDEF2_USB2_HW_LMP_CAP (1 << 19) /* Hardware LMP Capability (HLC) - RO */ - -#define FXHCI_USBSPCFDEF2_PROTOCOL_SPEED_ID_CNT_GET(x) FUSB_REG32_GET_BITS(x, 31, 28) - -/* Protocol Speed ID (PSI) */ -#define FXHCI_REG_PROTOCOL_SPEED_ID_OFFSET(psic) (0xc + ((psic) * sizeof(u32))) -#define FXHCI_PROTOCOL_SPEED_ID_VALUE_GET(x) FUSB_REG32_GET_BITS(x, 3, 0) /* Protocol Speed ID Value (PSIV) */ -#define FXHCI_PROTOCOL_SPEED_ID_EXPONENT_GET(x) FUSB_REG32_GET_BITS(x, 5, 4) /* Protocol Speed ID Exponent (PSIE) */ -#define FXHCI_PROTOCOL_SPEED_ID_PSI_TYPE_GET(x) FUSB_REG32_GET_BITS(x, 7, 6) /* PSI Type (PLT) */ -enum -{ - FXHCI_PROTOCOL_SPEED_ID_PSI_SYMMETRIC = 0, - FXHCI_PROTOCOL_SPEED_ID_PSI_ASYMMETRIC_RX = 2, - FXHCI_PROTOCOL_SPEED_ID_PSI_ASYMMETRIC_TX = 3 -}; -#define FXHCI_PROTOCOL_SPEED_ID_PSI_FULL_DUPLEX (1 << 8) -#define FXHCI_PROTOCOL_SPEED_ID_MANTISSA_GET(x) FUSB_REG32_GET_BITS(x, 31, 16) /* Protocol Speed ID Mantissa (PSIM) */ - -/**************************** Type Definitions *******************************/ - -/* Device Context Base Address Array */ -#define FXHCI_SCRATCHPAD_BUF_ARRAY_BASE_ADDR_MASK GENMASK_ULL(63, 6) /* Array Element 0 Field Bit */ -#define FXHCI_DEVICE_CONTEXT_BASE_ADDR_MASK GENMASK_ULL(63, 6) /* Array Element 1-n Field Bit */ - -/* Slot index */ -#define FXHCI_REG_DB_HOST_CONTROLLER 0 -#define FXHCI_REG_DB_DEVICE_CONTEXT1 1 -#define FXHCI_REG_DB_DEVICE_CONTEXT255 255 - -typedef struct -{ - u8 port_beg; - u8 port_end; -} FXhciPortRange; - -typedef enum -{ - FXHCI_USB2_COMPATIBLE_PORT, - FXHCI_USB3_COMPATIBLE_PORT, - - FXHCI_NONE_COMPATIBLE_PORT -} FXhciPortCompatible; - -typedef struct -{ - uintptr base; /* Capability registers offset */ - uintptr oper_base; /* Operational registers offset */ - uintptr doorbell_base; /* Doorbell registers offset */ - uintptr runtime_base; /* Runtime registers offset */ - uintptr port_base; /* Port register set offset */ - uintptr xecp_base; /* xHCI Extended Capabilities register offset */ - u32 hcx_params[4]; /* Capability cache */ - FXhciPortRange usb2_ports; - FXhciPortRange usb3_ports; -} FXhciMMIO; - - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ -static inline FXhciPortCompatible FUsb3CheckPortCompatible(FXhciMMIO *mmio, u8 port_id) -{ - FASSERT(mmio); - if ((port_id >= mmio->usb3_ports.port_beg) && (port_id <= mmio->usb3_ports.port_end)) - { - return FXHCI_USB3_COMPATIBLE_PORT; - } - else if ((port_id >= mmio->usb2_ports.port_beg) && (port_id <= mmio->usb2_ports.port_end)) - { - return FXHCI_USB2_COMPATIBLE_PORT; - } - - FASSERT(0); /* must not reach there */ - return FXHCI_NONE_COMPATIBLE_PORT; -} - -static inline u32 FXhciReadCap(const FXhciMMIO *mmio) -{ - FASSERT(mmio); - FASSERT(mmio->base != 0); - - return FtIn32(mmio->base + FXHCI_REG_CAP_CAPLENGTH); -} - -static inline u8 FXhciReadCaplen(const FXhciMMIO *mmio) -{ - FASSERT(mmio); - FASSERT(mmio->base != 0); - u32 reg_val = FXhciReadCap(mmio); - - /* get lower 8-bits */ - return (u8)(reg_val & 0xff); -} - -static inline u16 FXhciReadHcVersion(const FXhciMMIO *mmio) -{ - FASSERT(mmio); - FASSERT(mmio->base != 0); - u32 reg_val = FXhciReadCap(mmio); - - /* get upper 16 bits */ - return (u16)((reg_val >> 16) & 0xffff); -} - -static inline u32 FXhciReadCap32(const FXhciMMIO *mmio, u32 offset) -{ - FASSERT(mmio); - FASSERT(mmio->base != 0); - - offset -= FXHCI_REG_CAP_HCSPARAMS1; - offset /= 4; - - FASSERT(offset < 4); - return mmio->hcx_params[offset]; /* read caps from cache */ -} - -static inline u32 FXhciReadOper32(const FXhciMMIO *mmio, u32 offset) -{ - FASSERT(mmio); - FASSERT(mmio->base != 0); - - return FtIn32(mmio->oper_base + offset); -} - -static inline u64 FXhciReadOper64(const FXhciMMIO *mmio, u32 offset) -{ - FASSERT(mmio); - FASSERT(mmio->base != 0); - - uintptr addr = mmio->oper_base + offset; - - u64 val = FtIn32(addr); - val |= ((u64)FtIn32(addr + 4)) << 32; - - return val; -} - -static inline void FXhciWriteOper32(const FXhciMMIO *mmio, u32 offset, u32 val) -{ - FASSERT(mmio); - FASSERT(mmio->base != 0); - - FtOut32(mmio->oper_base + offset, val); -} - -static inline void FXhciWriteOper64(const FXhciMMIO *mmio, u32 offset, u64 val) -{ - FASSERT(mmio); - FASSERT(mmio->base != 0); - - FXhciWriteOper32(mmio, offset, LOWER_32_BITS(val)); - FXhciWriteOper32(mmio, offset + 4, UPPER_32_BITS(val)); -} - -static inline u32 FXhciReadPort32(const FXhciMMIO *mmio, u32 port, u32 offset) -{ - FASSERT(mmio); - FASSERT(mmio->base != 0); - - /* Operational Base + (400h + (10h * (n–1))) */ - return FtIn32(mmio->port_base + port * FXHCI_REG_OP_PORTS_SIZE + offset); -} - -static inline void FXhciWritePort32(const FXhciMMIO *mmio, u32 port, u32 offset, u32 val) -{ - FASSERT(mmio); - FASSERT(mmio->base != 0); - - FtOut32(mmio->port_base + port * FXHCI_REG_OP_PORTS_SIZE + offset, val); -} - -static inline u32 FXhciReadRt32(const FXhciMMIO *mmio, u32 interrupt, u32 offset) -{ - FASSERT(mmio); - FASSERT(mmio->base != 0); - - /* Runtime Base + 020h + (32 * Interrupter) */ - return FtIn32(mmio->runtime_base + FXHCI_REG_RT_IR0 + interrupt * FXHCI_REG_RT_IR_SIZE + offset); -} - -static inline u64 FXhciReadRt64(const FXhciMMIO *mmio, u32 interrupt, u32 offset) -{ - FASSERT(mmio); - FASSERT(mmio->base != 0); - - uintptr addr = mmio->runtime_base + FXHCI_REG_RT_IR0 + interrupt * FXHCI_REG_RT_IR_SIZE + offset; - u64 reg_val = FtIn32(addr); - reg_val |= (u64)FtIn32(addr + 4) << 32; - - return reg_val; -} - -static inline void FXhciWriteRt32(const FXhciMMIO *mmio, u32 interrupt, u32 offset, u32 val) -{ - FASSERT(mmio); - FASSERT(mmio->base != 0); - - FtOut32(mmio->runtime_base + FXHCI_REG_RT_IR0 + interrupt * FXHCI_REG_RT_IR_SIZE + offset, val); -} - -static inline void FXhciWriteRt64(const FXhciMMIO *mmio, u32 interrupt, u32 offset, u64 val) -{ - FASSERT(mmio); - FASSERT(mmio->base != 0); - - FXhciWriteRt32(mmio, interrupt, offset, (u32)val); - FXhciWriteRt32(mmio, interrupt, offset + 4, (u32)(val >> 32)); -} - -static inline u32 FXhciReadExtCap32(const FXhciMMIO *mmio, u32 offset) -{ - FASSERT(mmio); - FASSERT(mmio->base != 0); - FASSERT(mmio->xecp_base != 0); - - return FtIn32(mmio->xecp_base + offset); -} - -static inline void FXhciWriteDb32(const FXhciMMIO *mmio, u32 slot, u32 val) -{ - FASSERT(mmio); - FASSERT(mmio->base != 0); - - FtOut32(mmio->doorbell_base + slot * FXHCI_REG_DB_SIZE, val); -} - -static inline int FXhciGetCtxSize(const FXhciMMIO *mmio) -{ - FASSERT(mmio); - FASSERT(mmio->base != 0); - - u32 reg_val = FXhciReadCap32(mmio, FXHCI_REG_CAP_HCCPARAMS); - return ((reg_val & FXHCI_REG_CAP_HCCPARAMS_CSZ) == FXHCI_REG_CAP_HCCPARAMS_CSZ) ? 64 : 32; -} - -/************************** Function Prototypes ******************************/ -FError FXhciSetupMMIO(FXhciMMIO *mmio, uintptr base_addr); -void FXhciListExtCap(FXhciMMIO *mmio); -FError FXhciWaitOper32(FXhciMMIO *mmio, u32 offset, u32 mask, u32 exp_val, u32 timeout_tick); - -#ifdef __cplusplus -} -#endif - - -#endif \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/usb/fxhci/fxhci_private.h b/bsp/phytium/libraries/standalone/drivers/usb/fxhci/fxhci_private.h deleted file mode 100644 index e181a7b999..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/usb/fxhci/fxhci_private.h +++ /dev/null @@ -1,475 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fxhci_private.h - * Date: 2022-02-11 13:33:12 - * LastEditTime: 2022-02-18 09:16:44 - * Description:  This files is for definition of XHCI internal function - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/2/7 init commit - */ - -#ifndef FXHCI_PRIVATE_H -#define FXHCI_PRIVATE_H - -/***************************** Include Files *********************************/ -#include "fusb_private.h" -#include "fxhci_hw.h" -#include "fxhci.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/************************** Constant Definitions *****************************/ -typedef enum -{ - FXHCI_TRB_NORMAL = 1, - FXHCI_TRB_SETUP_STAGE = 2, - FXHCI_TRB_DATA_STAGE = 3, - FXHCI_TRB_STATUS_STAGE = 4, - FXHCI_TRB_LINK = 6, - FXHCI_TRB_EVENT_DATA = 7, - FXHCI_TRB_CMD_ENABLE_SLOT = 9, - FXHCI_TRB_CMD_DISABLE_SLOT = 10, - FXHCI_TRB_CMD_ADDRESS_DEV = 11, - FXHCI_TRB_CMD_CONFIGURE_EP = 12, - FXHCI_TRB_CMD_EVAL_CTX = 13, - FXHCI_TRB_CMD_RESET_EP = 14, - FXHCI_TRB_CMD_STOP_EP = 15, - FXHCI_TRB_CMD_SET_TR_DQ = 16, - FXHCI_TRB_CMD_NOOP = 23, - FXHCI_TRB_EV_TRANSFER = 32, - FXHCI_TRB_EV_CMD_CMPL = 33, - FXHCI_TRB_EV_PORTSC = 34, - FXHCI_TRB_EV_HOST = 37, -} FXhciTrbType; - -enum -{ - FXHCI_TRB_TRT_NO_DATA = 0, - FXHCI_TRB_TRT_OUT_DATA = 2, - FXHCI_TRB_TRT_IN_DATA = 3 -}; - -enum -{ - FXHCI_TRB_DIR_OUT = 0, - FXHCI_TRB_DIR_IN = 1 -}; - -#define FXHCI_TRB_MAX_TD_SIZE 0x1F /* bits 21:17 of TD Size in TRB */ -#define FXHCI_DMA_SIZE (64 * 1024) -#define FXHCI_TIMEOUT 1000000 - -enum -{ - FXHCI_EP_ISOC_OUT = 1, - FXHCI_EP_BULK_OUT = 2, - FXHCI_EP_INTR_OUT = 3, - FXHCI_EP_CONTROL = 4, - FXHCI_EP_ISOC_IN = 5, - FXHCI_EP_BULK_IN = 6, - FXHCI_EP_INTR_IN = 7 -}; - -/**************************** Type Definitions *******************************/ -typedef volatile struct -{ - u32 ptr_low; - u32 ptr_high; - u32 status; - u32 control; -} FXhciTrb; - -typedef struct -{ - FXhciTrb *ring; - FXhciTrb *cur; - FXhciTrb *last; - u8 ccs; - u8 adv; -} FXhciEvtRing; - -typedef struct -{ - FXhciTrb *ring; - FXhciTrb *cur; - u8 pcs; -} __attribute__((packed)) FXhciTransRing; - -typedef FXhciTransRing FXhciCmdRing; - -typedef volatile struct -{ - u32 f1; - u32 f2; - u32 f3; - u32 f4; - u32 rsvd[4]; -} FXhciSlotCtx; - -typedef volatile struct -{ - u32 f1; - u32 f2; - u32 tr_dq_low; - u32 tr_dq_high; - u32 f5; - u32 rsvd[3]; -} FXhciEpCtx; - -typedef union -{ - /* set of pointers, so we can dynamically adjust Slot/EP context size */ - struct - { - union - { - FXhciSlotCtx *slot; - void *raw; /* Pointer to the whole dev context. */ - }; - FXhciEpCtx *ep0; - FXhciEpCtx *eps1_30[FXHCI_NUM_EPS - 2]; - }; - FXhciEpCtx *ep[FXHCI_NUM_EPS]; /* At index 0 it's actually the slotctx, - we have it like that so we can use - the ep_id directly as index. */ -} FXhciDevCtx; - -typedef struct -{ - union - { - /* The drop flags are located at the start of the */ - u32 *drop; /* structure, so a pointer to them is equivalent */ - void *raw; /* to a pointer to the whole (raw) input context. */ - }; - u32 *add; - FXhciDevCtx dev; -} FXhciInputCtx; - -typedef struct -{ - u32 seg_base_lo; - u32 seg_base_hi; - u32 seg_size; - u32 rsvd; -} FXhciErstEntry; - -typedef struct -{ - size_t size; /* Size of each transfer */ - size_t count; /* The number of TRBs to fill at once */ - FXhciTrb *next; /* The next TRB expected to be processed by the controller */ - FXhciTrb *ready; /* The last TRB in the transfer ring processed by the controller */ - FUsbEndpoint *ep; -} FXhciIntrQ; - -typedef struct -{ - FXhciDevCtx ctx; - FXhciTransRing *transfer_rings[FXHCI_NUM_EPS]; - FXhciIntrQ *interrupt_queues[FXHCI_NUM_EPS]; -} FXhciDevInfo; - -typedef enum -{ - FXHCI_DMA_SET_ADDR = 0, - FXHCI_DMA_INPUT_CTX, - FXHCI_DMA_TRANS_RING, - FXHCI_DMA_TRANS_RING_TRB, - - FXHCI_MAX_DMA_TYPE -} FXhciDMAType; - -typedef struct -{ - FXhciDMAType type; -#define FXHCI_MAX_DMA_ENTRY 10 - void *entries[FXHCI_MAX_DMA_ENTRY]; - uintptr count; -} FXhciDMABuffer; - -typedef struct -{ - /* R/W, volatile, Memory -> bitfields allowed */ - u64 *dcbaa; /* pointers to sp_ptrs and output (device) contexts */ - u64 *sp_ptrs; /* pointers to scratchpad buffers */ - - FXhciCmdRing cr; - FXhciEvtRing er; - volatile FXhciErstEntry *ev_ring_table; - - FUsbDev *roothub; - - u8 max_slots_en; - FXhciDevInfo *dev; /* array of devinfos by slot_id */ - FUsb *usb; - FXhciMMIO mmio; -} FXhci; -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ -#define FXHCI_MASK(startbit, lenbit) (((1<<(lenbit))-1)<<(startbit)) - -/* shorcut to access TRB */ -#define FXHCI_TRB_PORT_FIELD ptr_low /* Pointer field of Port TRB */ -#define FXHCI_TRB_PORT_START 24 -#define FXHCI_TRB_PORT_LEN 8 -#define FXHCI_TRB_TL_FIELD status /* TL - Transfer Length */ -#define FXHCI_TRB_TL_START 0 -#define FXHCI_TRB_TL_LEN 17 -#define FXHCI_TRB_EVTL_FIELD status /* EVTL - (Event TRB) Transfer Length */ -#define FXHCI_TRB_EVTL_START 0 -#define FXHCI_TRB_EVTL_LEN 24 -#define FXHCI_TRB_TDS_FIELD status /* TDS - TD Size */ -#define FXHCI_TRB_TDS_START 17 -#define FXHCI_TRB_TDS_LEN 5 -#define FXHCI_TRB_CC_FIELD status /* CC - Completion Code */ -#define FXHCI_TRB_CC_START 24 -#define FXHCI_TRB_CC_LEN 8 -#define FXHCI_TRB_C_FIELD control /* C - Cycle Bit */ -#define FXHCI_TRB_C_START 0 -#define FXHCI_TRB_C_LEN 1 -#define FXHCI_TRB_TC_FIELD control /* TC - Toggle Cycle */ -#define FXHCI_TRB_TC_START 1 -#define FXHCI_TRB_TC_LEN 1 -#define FXHCI_TRB_ENT_FIELD control /* ENT - Evaluate Next TRB */ -#define FXHCI_TRB_ENT_START 1 -#define FXHCI_TRB_ENT_LEN 1 -#define FXHCI_TRB_ISP_FIELD control /* ISP - Interrupt-on Short Packet */ -#define FXHCI_TRB_ISP_START 2 -#define FXHCI_TRB_ISP_LEN 1 -#define FXHCI_TRB_CH_FIELD control /* CH - Chain Bit */ -#define FXHCI_TRB_CH_START 4 -#define FXHCI_TRB_CH_LEN 1 -#define FXHCI_TRB_IOC_FIELD control /* IOC - Interrupt On Completion */ -#define FXHCI_TRB_IOC_START 5 -#define FXHCI_TRB_IOC_LEN 1 -#define FXHCI_TRB_IDT_FIELD control /* IDT - Immediate Data */ -#define FXHCI_TRB_IDT_START 6 -#define FXHCI_TRB_IDT_LEN 1 -#define FXHCI_TRB_DC_FIELD control /* DC - Deconfigure */ -#define FXHCI_TRB_DC_START 9 -#define FXHCI_TRB_DC_LEN 1 -#define FXHCI_TRB_TT_FIELD control /* TT - TRB Type */ -#define FXHCI_TRB_TT_START 10 -#define FXHCI_TRB_TT_LEN 6 -#define FXHCI_TRB_TRT_FIELD control /* TRT - Transfer Type */ -#define FXHCI_TRB_TRT_START 16 -#define FXHCI_TRB_TRT_LEN 2 -#define FXHCI_TRB_DIR_FIELD control /* DIR - Direction */ -#define FXHCI_TRB_DIR_START 16 -#define FXHCI_TRB_DIR_LEN 1 -#define FXHCI_TRB_EP_FIELD control /* EP - Endpoint ID */ -#define FXHCI_TRB_EP_START 16 -#define FXHCI_TRB_EP_LEN 5 -#define FXHCI_TRB_ID_FIELD control /* ID - Slot ID */ -#define FXHCI_TRB_ID_START 24 -#define FXHCI_TRB_ID_LEN 8 -#define FXHCI_TRB_MASK(tok) FXHCI_MASK(FXHCI_TRB_##tok##_START, FXHCI_TRB_##tok##_LEN) -#define FXHCI_TRB_GET(tok, trb) (((trb)->FXHCI_TRB_##tok##_FIELD & FXHCI_TRB_MASK(tok)) \ - >> FXHCI_TRB_##tok##_START) -#define FXHCI_TRB_SET(tok, trb, to) (trb)->FXHCI_TRB_##tok##_FIELD = \ - (((trb)->FXHCI_TRB_##tok##_FIELD & ~FXHCI_TRB_MASK(tok)) | \ - (((to) << FXHCI_TRB_##tok##_START) & FXHCI_TRB_MASK(tok))) -#define FXHCI_TRB_DUMP(dumper, tok, trb) dumper(" "#tok"\t0x%04x ", FXHCI_TRB_GET(tok, trb)) - -#define FXHCI_TRB_CYCLE (1 << 0) - -/* shortcut to access slot context */ -#define FXHCI_SC_ROUTE_FIELD f1 /* ROUTE - Route String */ -#define FXHCI_SC_ROUTE_START 0 -#define FXHCI_SC_ROUTE_LEN 20 -#define FXHCI_SC_SPEED1_FIELD f1 /* SPEED - Port speed plus one (compared to FUsbSpeed enum) */ -#define FXHCI_SC_SPEED1_START 20 -#define FXHCI_SC_SPEED1_LEN 4 -#define FXHCI_SC_MTT_FIELD f1 /* MTT - Multi Transaction Translator */ -#define FXHCI_SC_MTT_START 25 -#define FXHCI_SC_MTT_LEN 1 -#define FXHCI_SC_HUB_FIELD f1 /* HUB - Is this a hub? */ -#define FXHCI_SC_HUB_START 26 -#define FXHCI_SC_HUB_LEN 1 -#define FXHCI_SC_CTXENT_FIELD f1 /* CTXENT - Context Entries (number of following ep contexts) */ -#define FXHCI_SC_CTXENT_START 27 -#define FXHCI_SC_CTXENT_LEN 5 -#define FXHCI_SC_RHPORT_FIELD f2 /* RHPORT - Root Hub Port Number */ -#define FXHCI_SC_RHPORT_START 16 -#define FXHCI_SC_RHPORT_LEN 8 -#define FXHCI_SC_NPORTS_FIELD f2 /* NPORTS - Number of Ports */ -#define FXHCI_SC_NPORTS_START 24 -#define FXHCI_SC_NPORTS_LEN 8 -#define FXHCI_SC_TTID_FIELD f3 /* TTID - TT Hub Slot ID */ -#define FXHCI_SC_TTID_START 0 -#define FXHCI_SC_TTID_LEN 8 -#define FXHCI_SC_TTPORT_FIELD f3 /* TTPORT - TT Port Number */ -#define FXHCI_SC_TTPORT_START 8 -#define FXHCI_SC_TTPORT_LEN 8 -#define FXHCI_SC_TTT_FIELD f3 /* TTT - TT Think Time */ -#define FXHCI_SC_TTT_START 16 -#define FXHCI_SC_TTT_LEN 2 -#define FXHCI_SC_UADDR_FIELD f4 /* UADDR - USB Device Address */ -#define FXHCI_SC_UADDR_START 0 -#define FXHCI_SC_UADDR_LEN 8 -#define FXHCI_SC_STATE_FIELD f4 /* STATE - Slot State */ -#define FXHCI_SC_STATE_START 27 -#define FXHCI_SC_STATE_LEN 5 -#define FXHCI_SC_MASK(tok) FXHCI_MASK(FXHCI_SC_##tok##_START, FXHCI_SC_##tok##_LEN) -#define FXHCI_SC_GET(tok, sc) (((sc)->FXHCI_SC_##tok##_FIELD & FXHCI_SC_MASK(tok)) \ - >> FXHCI_SC_##tok##_START) -#define FXHCI_SC_SET(tok, sc, to) (sc)->FXHCI_SC_##tok##_FIELD = \ - (((sc)->FXHCI_SC_##tok##_FIELD & ~FXHCI_SC_MASK(tok)) | \ - (((to) << FXHCI_SC_##tok##_START) & FXHCI_SC_MASK(tok))) -#define FXHCI_SC_DUMP(dumper, tok, sc) dumper(" "#tok"\t0x%04x ", FXHCI_SC_GET(tok, sc)) - -/* shortcut to access endpoint context */ -#define FXHCI_EC_STATE_FIELD f1 /* STATE - Endpoint State */ -#define FXHCI_EC_STATE_START 0 -#define FXHCI_EC_STATE_LEN 3 -#define FXHCI_EC_INTVAL_FIELD f1 /* INTVAL - Interval */ -#define FXHCI_EC_INTVAL_START 16 -#define FXHCI_EC_INTVAL_LEN 8 -#define FXHCI_EC_CERR_FIELD f2 /* CERR - Error Count */ -#define FXHCI_EC_CERR_START 1 -#define FXHCI_EC_CERR_LEN 2 -#define FXHCI_EC_TYPE_FIELD f2 /* TYPE - EP Type */ -#define FXHCI_EC_TYPE_START 3 -#define FXHCI_EC_TYPE_LEN 3 -#define FXHCI_EC_MBS_FIELD f2 /* MBS - Max Burst Size */ -#define FXHCI_EC_MBS_START 8 -#define FXHCI_EC_MBS_LEN 8 -#define FXHCI_EC_MPS_FIELD f2 /* MPS - Max Packet Size */ -#define FXHCI_EC_MPS_START 16 -#define FXHCI_EC_MPS_LEN 16 -#define FXHCI_EC_DCS_FIELD tr_dq_low /* DCS - Dequeue Cycle State */ -#define FXHCI_EC_DCS_START 0 -#define FXHCI_EC_DCS_LEN 1 -#define FXHCI_EC_AVRTRB_FIELD f5 /* AVRTRB - Average TRB Length */ -#define FXHCI_EC_AVRTRB_START 0 -#define FXHCI_EC_AVRTRB_LEN 16 -#define FXHCI_EC_MXESIT_FIELD f5 /* MXESIT - Max ESIT Payload */ -#define FXHCI_EC_MXESIT_START 16 -#define FXHCI_EC_MXESIT_LEN 16 -#define FXHCI_EC_BPKTS_FIELD rsvd[0] /* BPKTS - packets tx in scheduled uframe */ -#define FXHCI_EC_BPKTS_START 0 -#define FXHCI_EC_BPKTS_LEN 6 -#define FXHCI_EC_BBM_FIELD rsvd[0] /* BBM - burst mode for scheduling */ -#define FXHCI_EC_BBM_START 11 -#define FXHCI_EC_BBM_LEN 1 - -#define FXHCI_EC_MASK(tok) FXHCI_MASK(FXHCI_EC_##tok##_START, FXHCI_EC_##tok##_LEN) -#define FXHCI_EC_GET(tok, ec) (((ec)->FXHCI_EC_##tok##_FIELD & FXHCI_EC_MASK(tok)) \ - >> FXHCI_EC_##tok##_START) -#define FXHCI_EC_SET(tok, ec, to) (ec)->FXHCI_EC_##tok##_FIELD = \ - (((ec)->FXHCI_EC_##tok##_FIELD & ~FXHCI_EC_MASK(tok)) | \ - (((to) << FXHCI_EC_##tok##_START) & FXHCI_EC_MASK(tok))) -#define FXHCI_EC_DUMP(dumper, tok, ec) dumper(" "#tok"\t0x%04x ", FXHCI_EC_GET(tok, ec)) - -/* the current operational state of the endpoint. */ -enum -{ - FXHCI_EC_STATE_DISABLED = 0, /* endpoint is not operational */ - FXHCI_EC_STATE_RUNNING = 1, /* endpoint is operational */ - FXHCI_EC_STATE_HALTED = 2, /* endpoint is halted due to a Halt condition detected on the USB */ - FXHCI_EC_STATE_STOPPED = 3, /* endpoint is not running due to a Stop Endpoint Command */ - FXHCI_EC_STATE_ERROR = 4 /* endpoint is not running due to a TRB Error */ -}; - -#define FXHCI_INST_GET(controller) ((FXhci*)((controller)->instance)) - -static inline int FXhciEpId(const FUsbEndpoint *const ep) -{ - /* calculate endpoint ID (Device Context Index (DCI)) The range of DCI values is 0 to 31. - * For Isoch, Interrupt, or Bulk type endpoints - * DCI = (Endpoint Number * 2) + Direction , Direction = ‘0’ for OUT ‘1’ for IN - * For Control type endpoints - * DCI = (Endpoint Number * 2) + 1. - */ - return ((ep->endpoint & 0x7f) * 2) + (ep->direction != FUSB_OUT); -} - -#define FXHCI_EP0_ID 1 - -/************************** Function Prototypes ******************************/ -/* 初始化Roothub */ -void FXhciRootHubInit(FUsbDev *dev); - -/* 分配一段对齐的内存 */ -void *FXhciAlign(FXhci *xhci, const size_t min_align, const size_t size); - -/* 初始化TRB ring */ -void FXhciInitCycleRing(FXhciTransRing *ring, const size_t ring_size); - -/* 设备USB设备的地址 */ -FUsbDev *FXhciSetAddress(FUsbHc *hc, FUsbSpeed speed, int hubport, int hubaddr); - -/* 完成USB设备配置 */ -FXhciTransCode FXhciFinishDevConfig(FUsbDev *hc); - -/* 删除指定USB设备实例 */ -void FXhciDestoryDev(FUsbHc *xhci, int slot_id); - -/* 重置Event TRB ring */ -void FXhciResetEvtRing(FXhciEvtRing *ring); - -void FXhciAdvanceEvtRing(FXhci *xhci); -void FXhciUpdateEvtDQ(FXhci *xhci); -void FXhciHandleEvts(FXhci *xhci); - -FXhciTransCode FXhciWaitForCmdAborted(FXhci *xhci, const FXhciTrb *trb); -FXhciTransCode FXhciWaitForCmdDone(FXhci *xhci, const FXhciTrb *trb, int clear_event); -FXhciTransCode FXhciWaitForTransfer(FXhci *xhci, const int slot_id, const int ep_id); - -void FXhciClearTrb(FXhciTrb *trb, int pcs); -FXhciTrb *FXhciNextCmdTrb(FXhci *xhci); -void FXhciPostCmd(FXhci *xhci); - -FXhciTransCode FXhciCmdNop(FXhci *const xhci); -FXhciTransCode FXhciCmdEnableSlot(FXhci *xhci, int *slot_id); -FXhciTransCode FXhciCmdDisableSlot(FXhci *xhci, int slot_id); -FXhciTransCode FXhciCmdAddressDevice(FXhci *xhci, int slot_id, FXhciInputCtx *ctx); -FXhciTransCode FXhciCmdConfigureEp(FXhci *xhci, int slot_id, int config_id, FXhciInputCtx *ctx); -FXhciTransCode FXhciCmdEvaluateCtx(FXhci *xhci, int slot_id, FXhciInputCtx *ctx); -FXhciTransCode FXhciCmdResetEp(FXhci *xhci, int slot_id, int ep); -FXhciTransCode FXhciCmdStopEp(FXhci *xhci, int slot_id, int ep); -FXhciTransCode FXhciCmdSetTrDq(FXhci *xhci, int slot_id, int ep, FXhciTrb *trb, int dcs); - -void FXhciDumpSlotCtx(const FXhciSlotCtx *ctx); -void FXhciDumpEpCtx(const FXhciEpCtx *ctx); -void FXhciDumpDevCtx(const FXhciDevCtx *ctx, const u32 ctx_mask); -void FXhciDumpInputCtx(const FXhciInputCtx *ctx); -void FXhciDumpTransferTrb(const FXhciTrb *trb); -void FXhciDumpTransferTrbs(const FXhciTrb *first, const FXhciTrb *last); - - -/* 支持带TAG的内存分配,用于跟踪动态内存使用 */ -#ifdef FMEMP_TAG_DEBUG -void *FXhciAlignTag(FXhci *const xhci, const size_t min_align, const size_t size, const char *file, unsigned long line, const char *msg); - -#define FXHCI_ALIGN(xhci, min_align, size) FXhciAlignTag((xhci), (min_align), (size), __FILE__, __LINE__, "") -#else - -#define FXHCI_ALIGN(xhci, min_align, size) FXhciAlign((xhci), (min_align), (size)) -#endif - -#ifdef __cplusplus -} -#endif - - -#endif diff --git a/bsp/phytium/libraries/standalone/drivers/usb/fxhci/fxhci_roothub.c b/bsp/phytium/libraries/standalone/drivers/usb/fxhci/fxhci_roothub.c deleted file mode 100644 index 83b545be0a..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/usb/fxhci/fxhci_roothub.c +++ /dev/null @@ -1,193 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fxhci_roothub.c - * Date: 2022-02-11 13:33:12 - * LastEditTime: 2022-02-18 09:17:02 - * Description:  This files is for implementation of XHCI roothub function - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/2/7 init commit - */ - -#include "fdebug.h" - -#include "fusb.h" -#include "fusb_generic_hub.h" -#include "fxhci_private.h" - -#define FUSB_DEBUG_TAG "FXHCI_ROOTHUB" -#define FUSB_ERROR(format, ...) FT_DEBUG_PRINT_E(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) -#define FUSB_WARN(format, ...) FT_DEBUG_PRINT_W(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) -#define FUSB_INFO(format, ...) FT_DEBUG_PRINT_I(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) -#define FUSB_DEBUG(format, ...) FT_DEBUG_PRINT_D(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) - -static int FXhciRootHubStatusChanged(FUsbDev *const dev) -{ - FXhci *const xhci = FXHCI_INST_GET(dev->controller); - FASSERT(xhci); - u32 reg_val = FXhciReadOper32(&xhci->mmio, FXHCI_REG_OP_USBSTS); - const int changed = !!(FXHCI_REG_OP_USBSTS_PCD & reg_val); - - /* clear port change bit */ - if (changed) - { - reg_val &= FXHCI_REG_OP_USBSTS_PRSRV_MASK; - reg_val |= FXHCI_REG_OP_USBSTS_PCD; - FXhciWriteOper32(&xhci->mmio, FXHCI_REG_OP_USBSTS, reg_val); - } - - return changed; -} - -static int FXhciRootHubPortStatusChanged(FUsbDev *const dev, const int port) -{ - FXhci *const xhci = FXHCI_INST_GET(dev->controller); - FASSERT(xhci); - u32 portsc = FXhciReadPort32(&xhci->mmio, port - 1, FXHCI_REG_OP_PORTS_PORTSC); - const int changed = !!(portsc & (FXHCI_REG_OP_PORTS_PORTSC_CSC | FXHCI_REG_OP_PORTS_PORTSC_PRC)); - - /* always clear all the status change bits */ - portsc &= FXHCI_REG_OP_PORTS_PORTSC_RW_MASK; - portsc |= 0x00fe0000; - FXhciWritePort32(&xhci->mmio, port - 1, FXHCI_REG_OP_PORTS_PORTSC, portsc); - - return changed; -} - -static int FXhciRootHubPortConnected(FUsbDev *const dev, const int port) -{ - FXhci *const xhci = FXHCI_INST_GET(dev->controller); - FASSERT(xhci); - u32 portsc = FXhciReadPort32(&xhci->mmio, port - 1, FXHCI_REG_OP_PORTS_PORTSC); - return portsc & FXHCI_REG_OP_PORTS_PORTSC_CCS; -} - -static int FXhciRootHubPortInReset(FUsbDev *const dev, const int port) -{ - FXhci *const xhci = FXHCI_INST_GET(dev->controller); - FASSERT(xhci); - u32 portsc = FXhciReadPort32(&xhci->mmio, port - 1, FXHCI_REG_OP_PORTS_PORTSC); - return !!(portsc & FXHCI_REG_OP_PORTS_PORTSC_PR); -} - -static int FXhciRootHubPortEnabled(FUsbDev *const dev, const int port) -{ - FXhci *const xhci = FXHCI_INST_GET(dev->controller); - FASSERT(xhci); - u32 portsc = FXhciReadPort32(&xhci->mmio, port - 1, FXHCI_REG_OP_PORTS_PORTSC); - return !!(portsc & FXHCI_REG_OP_PORTS_PORTSC_PED); -} - -static FUsbSpeed FXhciRootHubPortSpeed(FUsbDev *const dev, const int port) -{ - FXhci *const xhci = FXHCI_INST_GET(dev->controller); - FASSERT(xhci); - u32 portsc = FXhciReadPort32(&xhci->mmio, port - 1, FXHCI_REG_OP_PORTS_PORTSC); - - if (portsc & FXHCI_REG_OP_PORTS_PORTSC_PED) - { - return FXHCI_REG_OP_PORTS_PORTSC_PORT_SPEED_GET(portsc) - 1; - } - else - { - return FUSB_UNKNOWN_SPEED; - } -} - -static int FXhciRootHubResetPort(FUsbDev *const dev, const int port) -{ - FXhci *const xhci = FXHCI_INST_GET(dev->controller); - FASSERT(xhci); - u32 portsc = FXhciReadPort32(&xhci->mmio, port - 1, FXHCI_REG_OP_PORTS_PORTSC); - - /* Trigger port reset. */ - portsc &= FXHCI_REG_OP_PORTS_PORTSC_RW_MASK; - portsc |= FXHCI_REG_OP_PORTS_PORTSC_PR; - FXhciWritePort32(&xhci->mmio, port - 1, FXHCI_REG_OP_PORTS_PORTSC, portsc); - - /* Wait for port_in_reset == 0, up to 150 * 1000us = 150ms */ - if (FUsbGenericHubWaitForPort(dev, port, 0, FXhciRootHubPortInReset, - 150, 1000) == 0) - { - FUSB_INFO("Xhci root hub: Reset timed out at port %d ", port); - } - else - { - portsc = FXhciReadPort32(&xhci->mmio, port - 1, FXHCI_REG_OP_PORTS_PORTSC); - portsc &= FXHCI_REG_OP_PORTS_PORTSC_RW_MASK; - portsc |= FXHCI_REG_OP_PORTS_PORTSC_PRC | FXHCI_REG_OP_PORTS_PORTSC_WRC; - FXhciWritePort32(&xhci->mmio, port - 1, FXHCI_REG_OP_PORTS_PORTSC, portsc); - } - - return 0; -} - -static int FXhciRootHubEnablePort(FUsbDev *const dev, int port) -{ - FXhci *const xhci = FXHCI_INST_GET(dev->controller); - FASSERT(xhci); - u32 portsc = FXhciReadPort32(&xhci->mmio, port - 1, FXHCI_REG_OP_PORTS_PORTSC); - - /* - * Before sending commands to a port, the Port Power in - * PORTSC register should be enabled. - */ - portsc &= FXHCI_REG_OP_PORTS_PORTSC_RW_MASK; - portsc |= FXHCI_REG_OP_PORTS_PORTSC_PP; - FXhciWritePort32(&xhci->mmio, port - 1, FXHCI_REG_OP_PORTS_PORTSC, portsc); - - return 0; -} - -static const FUsbGenericHubOps FXHCI_ROOTHUB_OPS = -{ - .hub_status_changed = FXhciRootHubStatusChanged, - .port_status_changed = FXhciRootHubPortStatusChanged, - .port_connected = FXhciRootHubPortConnected, - .port_in_reset = FXhciRootHubPortInReset, - .port_enabled = FXhciRootHubPortEnabled, - .port_speed = FXhciRootHubPortSpeed, - .enable_port = FXhciRootHubEnablePort, - .disable_port = NULL, - .start_port_reset = NULL, - .reset_port = FXhciRootHubResetPort, -}; - -/** - * @name: FXhciRootHubInit - * @msg: 初始化Roothub - * @return {*} - * @param {FUsbDev} *dev, Roothub实例 - */ -void FXhciRootHubInit(FUsbDev *dev) -{ - u32 reg_val; - FXhci *xhci = FXHCI_INST_GET(dev->controller); - FASSERT(xhci); - - /* we can set them here because a root hub _really_ shouldn't - appear elsewhere */ - dev->address = 0; - dev->hub = FUSB_NO_HUB; - dev->port = FUSB_NO_PORT; - - reg_val = FXhciReadCap32(&xhci->mmio, FXHCI_REG_CAP_HCSPARAMS1); - const int num_ports = FXHCI_REG_CAP_HCSPARAMS1_MAX_PORTS_GET(reg_val); /* TODO: maybe we need to read extended caps */ - - FUsbGenericHubInit(dev, num_ports, &FXHCI_ROOTHUB_OPS); - - FUSB_INFO("Xhci: root hub init done. "); -} diff --git a/bsp/phytium/libraries/standalone/drivers/watchdog/Kconfig b/bsp/phytium/libraries/standalone/drivers/watchdog/Kconfig deleted file mode 100644 index 5da173ab68..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/watchdog/Kconfig +++ /dev/null @@ -1,10 +0,0 @@ - -menu "FWDT Configuration" - config USE_FWDT - bool - prompt "Use FWDT" - default n - -endmenu - - diff --git a/bsp/phytium/libraries/standalone/drivers/watchdog/fwdt/fwdt.c b/bsp/phytium/libraries/standalone/drivers/watchdog/fwdt/fwdt.c deleted file mode 100644 index 34ec0c23af..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/watchdog/fwdt/fwdt.c +++ /dev/null @@ -1,257 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * FilePath: fwdt.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-07-15 17:05:09 - * Description:  This file is for wdt ctrl function implementation. - * Users can operate as a single stage watchdog or a two stages watchdog. - * In the single stage mode, when the timeout is reached, your system will - * be reset by WS1. The first signal (WS0) is ignored. - * In the two stages mode, when the timeout is reached, the first signal (WS0) - * will trigger panic. If the system is getting into trouble and cannot be reset - * by panic or restart properly by the kdump kernel(if supported), then the - * second stage (as long as the first stage) will be reached, system will be - * reset by WS1. This function can help administrator to backup the system - * context info by panic console output or kdump. - * - * GWDT: - * two stages mode: - * |--------WOR-------WS0--------WOR-------WS1 - * |----timeout-----(panic)----timeout-----reset - * - * single stage mode: - * |------WOR-----WS0(ignored)-----WOR------WS1 - * |--------------timeout-------------------reset - * - * Note: Since this watchdog timer has two stages, and each stage is determined - * by WOR, in the single stage mode, the timeout is (WOR * 2); in the two - * stages mode, the timeout is WOR. - * This driver use two stages mode, when WS0=1, it can Raise the timeout interrupt. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 Wangxiaodong 2021/8/25 init - * 1.1 Wangxiaodong 2021/11/5 restruct - * 1.2 Wangxiaodong 2022/7/20 add some functions - */ - -#include -#include "fgeneric_timer.h" -#include "fkernel.h" -#include "fparameters.h" -#include "ftypes.h" -#include "ferror_code.h" -#include "fdebug.h" -#include "fwdt.h" -#include "fwdt_hw.h" - -#define FWDT_DEBUG_TAG "FWDT" -#define FWDT_ERROR(format, ...) FT_DEBUG_PRINT_E(FWDT_DEBUG_TAG, format, ##__VA_ARGS__) -#define FWDT_WARN(format, ...) FT_DEBUG_PRINT_W(FWDT_DEBUG_TAG, format, ##__VA_ARGS__) -#define FWDT_INFO(format, ...) FT_DEBUG_PRINT_I(FWDT_DEBUG_TAG, format, ##__VA_ARGS__) -#define FWDT_DEBUG(format, ...) FT_DEBUG_PRINT_D(FWDT_DEBUG_TAG, format, ##__VA_ARGS__) - -/** - * @name: FWdtCfgInitialize - * @msg: Initializes a specific instance such that it is ready to be used. - * @param {FWdtCtrl} *pctrl, instance of FWDT controller - * @param {FWdtConfig} *input_config_p, Configuration parameters of FWdt - * @return err code information, FWDT_SUCCESS indicates success,others indicates failed - */ -FError FWdtCfgInitialize(FWdtCtrl *pctrl, const FWdtConfig *input_config_p) -{ - FASSERT(pctrl && input_config_p); - - FError ret = FWDT_SUCCESS; - /* - * If the device is started, disallow the initialize and return a Status - * indicating it is started. This allows the user to de-initialize the device - * and reinitialize, but prevents a user from inadvertently - * initializing. - */ - if (FT_COMPONENT_IS_READY == pctrl->is_ready) - { - FWDT_WARN("Device is already initialized!!!"); - } - - /*Set default values and configuration data */ - FWdtDeInitialize(pctrl); - - pctrl->config = *input_config_p; - - pctrl->is_ready = FT_COMPONENT_IS_READY; - - return ret; -} - -/** - * @name: FWdtDeInitialize - * @msg: DeInitialization function for the device instance - * @param {FWdtCtrl} *pctrl, instance of FWDT controller - * @return {*} - */ -void FWdtDeInitialize(FWdtCtrl *pctrl) -{ - FASSERT(pctrl); - - pctrl->is_ready = 0; - memset(pctrl, 0, sizeof(*pctrl)); - - return; -} - -/** - * @name: FWdtSetTimeout - * @msg: Set Timeout Value, the first time it will raise a signal, which is typically - * wired to an interrupt; If this watchdog remains un-refreshed, it will raise a - * second signal which can be used to interrupt higher-privileged software - * or cause a PE reset. - * @param {WdtCtrl} *pctrl, instance of FWDT controller. - * @param {u32} timeout, represent in seconds, this parameter must be a number between 1 and 89. - * @return {FError} err code information, FWDT_SUCCESS indicates success, others indicates failed. - */ -FError FWdtSetTimeout(FWdtCtrl *pctrl, u32 timeout) -{ - FASSERT(pctrl != NULL); - if (pctrl->is_ready != FT_COMPONENT_IS_READY) - { - FWDT_ERROR("Device is not ready!!!"); - return FWDT_NOT_READY; - } - if (timeout > FWDT_MAX_TIMEOUT) - { - FWDT_ERROR("Timeout value is invalid."); - return FWDT_ERR_INVAL_PARM; - } - uintptr base_addr = pctrl->config.control_base_addr; - - FWDT_WRITE_REG32(base_addr, FWDT_GWDT_WOR, (u32)(FWDT_CLK_FREQ_HZ * timeout)); - - return FWDT_SUCCESS; -} - -/** - * @name: WdtGetTimeleft - * @msg: Get Timeout countdown, in seconds - * @param {FWdtCtrl} *pctrl, pointer to a WdtCtrl structure that contains - * the configuration information for the specified wdt module. - * @return {u32} Timeout countdown, in seconds - */ -u32 FWdtGetTimeleft(FWdtCtrl *pctrl) -{ - FASSERT(pctrl != NULL); - u64 timeleft = 0; - uintptr base_addr = pctrl->config.control_base_addr; - - /* if the ws0 bit of register WCS is zero,indicates that there is one more timeout opportunity */ - if (!(FWdtReadWCS(base_addr) & FWDT_GWDT_WCS_WS0)) - { - timeleft += FWdtReadWOR(base_addr); - } - - u32 wcvh = (u32)FWdtReadWCVH(base_addr); - u32 wcvl = (u32)FWdtReadWCVL(base_addr); - u64 wcv = (((u64)wcvh << 32) | wcvl); - - timeleft += (wcv - GenericTimerRead(GENERIC_TIMER_ID0)); - - FWDT_DEBUG("wcvh=%llx, wcvl=%llx, wcv=%llx, timeleft=%llx\n", wcvh, wcvl, wcv, timeleft); - - do_div(timeleft, FWDT_CLK_FREQ_HZ); - - return (u32)timeleft; -} - -/** - * @name: FWdtRefresh - * @msg: Refresh watchdog - * @param {WdtCtrl} *pctrl, instance of FWDT controller. - * @return {FError} err code information, FWDT_SUCCESS indicates success, others indicates failed. - */ -FError FWdtRefresh(FWdtCtrl *pctrl) -{ - FASSERT(pctrl != NULL); - if (pctrl->is_ready != FT_COMPONENT_IS_READY) - { - FWDT_ERROR("Device is not ready!!!"); - return FWDT_NOT_READY; - } - uintptr base_addr = pctrl->config.refresh_base_addr; - FWDT_WRITE_REG32(base_addr, FWDT_GWDT_WRR, 0); - return FWDT_SUCCESS; -} - -/** - * @name: FWdtStart - * @msg: Start watchdog - * @param {WdtCtrl} *pctrl, instance of FWDT controller - * @return {FError} err code information, FWDT_SUCCESS indicates success, others indicates failed. - */ -FError FWdtStart(FWdtCtrl *pctrl) -{ - FASSERT(pctrl != NULL); - if (pctrl->is_ready != FT_COMPONENT_IS_READY) - { - FWDT_ERROR("Device is not ready!!!"); - return FWDT_NOT_READY; - } - - uintptr base_addr = pctrl->config.control_base_addr; - FWDT_WRITE_REG32(base_addr, FWDT_GWDT_WCS, FWDT_GWDT_WCS_WDT_EN); - - return FWDT_SUCCESS; -} - -/** - * @name: FWdtStop - * @msg: Stop watchdog - * @param {WdtCtrl} *pctrl, instance of FWDT controller - * @return {FError} err code information, FWDT_SUCCESS indicates success, others indicates failed. - */ -FError FWdtStop(FWdtCtrl *pctrl) -{ - FASSERT(pctrl != NULL); - uintptr base_addr = pctrl->config.control_base_addr; - FWDT_WRITE_REG32(base_addr, FWDT_GWDT_WCS, 0); - return FWDT_SUCCESS; -} - -/** - * @name: FWdtReadFWdtReadWIIDR - * @msg: Read wdt iidr register value. - * @param {FWdtCtrl} *pctrl, instance of FWDT controller - * @param {FWdtIdentifier} *wdt_identify, wdt identifier struct. - * @return {FError} err code information, FWDT_SUCCESS indicates success, others indicates failed. - */ -FError FWdtReadFWdtReadWIIDR(FWdtCtrl *pctrl, FWdtIdentifier *wdt_identify) -{ - FASSERT(pctrl != NULL); - FASSERT(wdt_identify != NULL); - - if (pctrl->is_ready != FT_COMPONENT_IS_READY) - { - FWDT_ERROR("Device is not ready!!!"); - return FWDT_NOT_READY; - } - - u32 reg_val = 0; - uintptr base_addr = pctrl->config.refresh_base_addr; - reg_val = FWDT_READ_REG32(base_addr, FWDT_GWDT_W_IIR); - - wdt_identify->version = (u16)((reg_val & FWDT_VERSION_MASK) >> 16); - wdt_identify->continuation_code = (u8)((reg_val & FWDT_CONTINUATION_CODE_MASK) >> 8); - wdt_identify->identity_code = (u8)((reg_val & FWDT_IDENTIFY_CODE_MASK)); - - return FWDT_SUCCESS; -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/watchdog/fwdt/fwdt.h b/bsp/phytium/libraries/standalone/drivers/watchdog/fwdt/fwdt.h deleted file mode 100644 index 3710f1051b..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/watchdog/fwdt/fwdt.h +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fwdt.h - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 09:24:34 - * Description:  This file is for wdt ctrl function definition. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 Wangxiaodong 2021/8/26 init - * 1.1 Wangxiaodong 2021/11/5 restruct - */ - -#ifndef FWDT_H -#define FWDT_H - -#include "ftypes.h" -#include "fdebug.h" -#include "ferror_code.h" -#include "fkernel.h" -#include "fassert.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -#define FWDT_SUCCESS FT_SUCCESS -#define FWDT_ERR_INVAL_PARM FT_MAKE_ERRCODE(ErrModBsp, ErrBspWdt, 1) -#define FWDT_NOT_READY FT_MAKE_ERRCODE(ErrModBsp, ErrBspWdt, 2) -#define FWDT_NOT_SUPPORT FT_MAKE_ERRCODE(ErrModBsp, ErrBspWdt, 3) -#define FWDT_TIMEOUT FT_MAKE_ERRCODE(ErrModBsp, ErrBspWdt, 4) - -/* max timeout = 0xFFFFFFFF/ WDT_CLK = 89 */ -#define FWDT_MAX_TIMEOUT 89 - -typedef struct -{ - u16 version; /* wdt version */ - u8 continuation_code;/* JEP106 continuation code of the implementer */ - u8 identity_code; /* JEP106 identity code of the implementer */ -} FWdtIdentifier; /* wdt Identifier*/ - -typedef struct -{ - u32 instance_id;/* wdt id */ - uintptr refresh_base_addr;/* wdt refresh base addr */ - uintptr control_base_addr;/* wdt control base addr */ - u32 irq_num; /* wdt irq num */ - u32 irq_prority;/* wdt irq priority */ - u32 irq_twice_num; /* wdt twice irq num */ - u32 irq_twice_prority;/* wdt twice irq priority */ - const char *instance_name;/* instance name */ -} FWdtConfig; /* wdt config */ - -typedef struct -{ - FWdtConfig config; /* wdt config */ - u32 is_ready; /* wdt initialize the complete flag */ -} FWdtCtrl; - - -/* get wdt default configs */ -const FWdtConfig *FWdtLookupConfig(u32 instance_id); - -/* wdt config init */ -FError FWdtCfgInitialize(FWdtCtrl *pctrl, const FWdtConfig *input_config_p); - -/* wdt config deinit */ -void FWdtDeInitialize(FWdtCtrl *pctrl); - -/* set wdt timeout value*/ -FError FWdtSetTimeout(FWdtCtrl *pCtrl, u32 timeout); - -u32 FWdtGetTimeleft(FWdtCtrl *pctrl); - -/* fresh the wdt */ -FError FWdtRefresh(FWdtCtrl *pCtrl); - -/* start wdt*/ -FError FWdtStart(FWdtCtrl *pCtrl); - -/* stop wdt*/ -FError FWdtStop(FWdtCtrl *pCtrl); - -/* read wdt w_iidr register*/ -FError FWdtReadFWdtReadWIIDR(FWdtCtrl *pctrl, FWdtIdentifier *wdt_identify); - -#ifdef __cplusplus -} -#endif - -#endif \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/watchdog/fwdt/fwdt_g.c b/bsp/phytium/libraries/standalone/drivers/watchdog/fwdt/fwdt_g.c deleted file mode 100644 index b1a16e0caf..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/watchdog/fwdt/fwdt_g.c +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fwdt_g.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-06-18 09:22:49 - * Description:  This file is for static config of wdt device. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 Wangxiaodong 2021/8/25 init - * 1.1 Wangxiaodong 2022/6/25 adapt to e2000 - */ - -#include "fparameters.h" -#include "fwdt.h" - -/* default configs of wdt ctrl */ -const FWdtConfig FWdtConfigTbl[FWDT_NUM] = -{ - [FWDT0_ID] = - { - .instance_id = FWDT0_ID, - .refresh_base_addr = FWDT0_REFRESH_BASE_ADDR, - .control_base_addr = FWDT_CONTROL_BASE_ADDR(FWDT0_REFRESH_BASE_ADDR), - .irq_num = FWDT0_IRQ_NUM, - .irq_prority = 0, - #if defined(TARDIGRADE) - .irq_twice_num = FWDT0_TWICE_IRQ_NUM, - .irq_twice_prority = 0, - #endif - .instance_name = "WDT-0" - }, - [FWDT1_ID] = - { - .instance_id = FWDT1_ID, - .refresh_base_addr = FWDT1_REFRESH_BASE_ADDR, - .control_base_addr = FWDT_CONTROL_BASE_ADDR(FWDT1_REFRESH_BASE_ADDR), - .irq_num = FWDT1_IRQ_NUM, - .irq_prority = 0, - #if defined(TARDIGRADE) - .irq_twice_num = FWDT1_TWICE_IRQ_NUM, - .irq_twice_prority = 0, - #endif - .instance_name = "WDT-1" - }, - - #if defined(TARDIGRADE) - [FWDT2_ID] = - { - .instance_id = FWDT2_ID, - .refresh_base_addr = FWDT2_REFRESH_BASE_ADDR, - .control_base_addr = FWDT_CONTROL_BASE_ADDR(FWDT2_REFRESH_BASE_ADDR), - .irq_num = FWDT2_IRQ_NUM, - .irq_prority = 0, - .irq_twice_num = FWDT2_TWICE_IRQ_NUM, - .irq_twice_prority = 0, - .instance_name = "WDT-2" - }, - [FWDT3_ID] = - { - .instance_id = FWDT3_ID, - .refresh_base_addr = FWDT3_REFRESH_BASE_ADDR, - .control_base_addr = FWDT_CONTROL_BASE_ADDR(FWDT3_REFRESH_BASE_ADDR), - .irq_num = FWDT3_IRQ_NUM, - .irq_prority = 0, - .irq_twice_num = FWDT3_TWICE_IRQ_NUM, - .irq_twice_prority = 0, - .instance_name = "WDT-3" - }, - [FWDT4_ID] = - { - .instance_id = FWDT4_ID, - .refresh_base_addr = FWDT4_REFRESH_BASE_ADDR, - .control_base_addr = FWDT_CONTROL_BASE_ADDR(FWDT4_REFRESH_BASE_ADDR), - .irq_num = FWDT4_IRQ_NUM, - .irq_prority = 0, - .irq_twice_num = FWDT4_TWICE_IRQ_NUM, - .irq_twice_prority = 0, - .instance_name = "WDT-4" - }, - [FWDT5_ID] = - { - .instance_id = FWDT5_ID, - .refresh_base_addr = FWDT5_REFRESH_BASE_ADDR, - .control_base_addr = FWDT_CONTROL_BASE_ADDR(FWDT5_REFRESH_BASE_ADDR), - .irq_num = FWDT5_IRQ_NUM, - .irq_prority = 0, - .irq_twice_num = FWDT5_TWICE_IRQ_NUM, - .irq_twice_prority = 0, - .instance_name = "WDT-5" - }, - [FWDT6_ID] = - { - .instance_id = FWDT6_ID, - .refresh_base_addr = FWDT6_REFRESH_BASE_ADDR, - .control_base_addr = FWDT_CONTROL_BASE_ADDR(FWDT6_REFRESH_BASE_ADDR), - .irq_num = FWDT6_IRQ_NUM, - .irq_prority = 0, - .irq_twice_num = FWDT6_TWICE_IRQ_NUM, - .irq_twice_prority = 0, - .instance_name = "WDT-6" - }, - [FWDT7_ID] = - { - .instance_id = FWDT7_ID, - .refresh_base_addr = FWDT7_REFRESH_BASE_ADDR, - .control_base_addr = FWDT_CONTROL_BASE_ADDR(FWDT7_REFRESH_BASE_ADDR), - .irq_num = FWDT7_IRQ_NUM, - .irq_prority = 0, - .irq_twice_num = FWDT7_TWICE_IRQ_NUM, - .irq_twice_prority = 0, - .instance_name = "WDT-7" - }, - #endif // TARDIGRADE -}; diff --git a/bsp/phytium/libraries/standalone/drivers/watchdog/fwdt/fwdt_hw.c b/bsp/phytium/libraries/standalone/drivers/watchdog/fwdt/fwdt_hw.c deleted file mode 100644 index d31383ef8c..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/watchdog/fwdt/fwdt_hw.c +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fwdt_hw.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-18 09:23:08 - * Description:  This file is for wdt register implementation. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 wangxiaodong 2022/4/15 init commit - */ - -/***************************** Include Files *********************************/ -#include -#include "fparameters.h" -#include "fwdt_hw.h" -#include "fdebug.h" - - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ - -#define FWDT_DEBUG_TAG "FWDT_HW" -#define FWDT_ERROR(format, ...) FT_DEBUG_PRINT_E(FWDT_DEBUG_TAG, format, ##__VA_ARGS__) -#define FWDT_WARN(format, ...) FT_DEBUG_PRINT_W(FWDT_DEBUG_TAG, format, ##__VA_ARGS__) -#define FWDT_INFO(format, ...) FT_DEBUG_PRINT_I(FWDT_DEBUG_TAG, format, ##__VA_ARGS__) -#define FWDT_DEBUG(format, ...) FT_DEBUG_PRINT_D(FWDT_DEBUG_TAG, format, ##__VA_ARGS__) - -/** - * @name: FWdtDump - * @msg: debug register value for wdt. - * @param {uintptr} base_addr, base address of FWDT controller - * @return {*} - */ -void FWdtDump(uintptr base_addr) -{ - FWDT_DEBUG("Off[0x%x]: = 0x%08x\r\n", base_addr + FWDT_GWDT_WRR, FWDT_READ_REG32(base_addr, FWDT_GWDT_WRR)); - FWDT_DEBUG("Off[0x%x]: = 0x%08x\r\n", base_addr + FWDT_GWDT_W_IIR, FWDT_READ_REG32(base_addr, FWDT_GWDT_W_IIR)); - - base_addr = FWDT_CONTROL_BASE_ADDR(base_addr); - FWDT_DEBUG("Off[0x%x]: = 0x%08x\r\n", base_addr + FWDT_GWDT_WCS, FWDT_READ_REG32(base_addr, FWDT_GWDT_WCS)); - FWDT_DEBUG("Off[0x%x]: = 0x%08x\r\n", base_addr + FWDT_GWDT_WOR, FWDT_READ_REG32(base_addr, FWDT_GWDT_WOR)); - FWDT_DEBUG("Off[0x%x]: = 0x%08x\r\n", base_addr + FWDT_GWDT_WCVL, FWDT_READ_REG32(base_addr, FWDT_GWDT_WCVL)); - FWDT_DEBUG("Off[0x%x]: = 0x%08x\r\n", base_addr + FWDT_GWDT_WCVH, FWDT_READ_REG32(base_addr, FWDT_GWDT_WCVH)); - - FWDT_DEBUG("\r\n"); - -} diff --git a/bsp/phytium/libraries/standalone/drivers/watchdog/fwdt/fwdt_hw.h b/bsp/phytium/libraries/standalone/drivers/watchdog/fwdt/fwdt_hw.h deleted file mode 100644 index f1d7ab9821..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/watchdog/fwdt/fwdt_hw.h +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fwdt_hw.h - * Date: 2021-08-25 10:27:42 - * LastEditTime: 2022-02-25 11:44:33 - * Description:  This file is for wdt register definition. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 wangxiaodong 2022/4/15 init commit - */ - -#ifndef FWDT_HW_H -#define FWDT_HW_H - -#include "fkernel.h" -#include "fio.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/* Watchdog register definitions */ - -/* refresh frame */ -#define FWDT_GWDT_WRR 0x000 -#define FWDT_GWDT_W_IIR 0xfcc - -/* control frame */ -#define FWDT_GWDT_WCS 0x000 /* WCS register */ -#define FWDT_GWDT_WOR 0x008 -#define FWDT_GWDT_WCVL 0x010 -#define FWDT_GWDT_WCVH 0x014 - -/* Watchdog Control and Status Register */ -#define FWDT_GWDT_WCS_WDT_EN BIT(0) -#define FWDT_GWDT_WCS_WS0 BIT(1) -#define FWDT_GWDT_WCS_WS1 BIT(2) - -/***************** Macros (Inline Functions) Definitions *********************/ - -/** - * @name: WDT_READ_REG32 - * @msg: read WDT register - * @param {u32} addr, base address - * @param {u32} reg_offset, register offset - * @return {u32} register value - */ -#define FWDT_READ_REG32(addr, reg_offset) FtIn32((addr) + (u32)(reg_offset)) - -/** - * @name: FWDT_WRITE_REG32 - * @msg: write WDT register - * @param {u32} addr, base address - * @param {u32} reg_offset, register offset - * @param {u32} reg_value, value write to register - * @return {u32} register value - */ -#define FWDT_WRITE_REG32(addr, reg_offset, reg_value) FtOut32((addr) + (u32)(reg_offset), (u32)(reg_value)) - -#define FWDT_VERSION_MASK GENMASK(19, 16) -#define FWDT_CONTINUATION_CODE_MASK GENMASK(11, 8) -#define FWDT_IDENTIFY_CODE_MASK GENMASK(6, 0) -/** - * @name: FWdtReadWCVH - * @msg: Read wdt wcvh register value. wcvl and wclh register stores the comparison value of the watchdog count. - * timeout value = comparison value - sys_cnt. - * @param {uintptr} addr, pointer to a WdtCtrl base addr. - * @return {u32} register value - */ - -static inline u32 FWdtReadWCVH(uintptr addr) -{ - return FWDT_READ_REG32(addr, FWDT_GWDT_WCVH); -} - -/** - * @name: FWdtReadWCVL - * @msg: Read wdt wcvl register value. wcvl and wclh register stores the comparison value of the watchdog count. - * timeout value = comparison value - sys_cnt. - * @param {uintptr} addr, pointer to a WdtCtrl base addr. - * @return {u32} register value - */ -static inline u32 FWdtReadWCVL(uintptr addr) -{ - return FWDT_READ_REG32(addr, FWDT_GWDT_WCVL); -} - -/** - * @name: FWdtReadWOR - * @msg: Read wdt wor register value. used to set timeout value, wor + sys_cnt = wcv. - * @param {uintptr} addr, pointer to a WdtCtrl base addr. - * @return {u32} register value - */ -static inline u32 FWdtReadWOR(uintptr addr) -{ - return FWDT_READ_REG32(addr, FWDT_GWDT_WOR); -} - -/** - * @name: FWdtReadWCS - * @msg: Read wdt wcs register value. wcs is control and state register. bit0 enable(1) or disable(0) wdt. - * @param {uintptr} addr, pointer to a WdtCtrl base addr. - * @return {u32} register value - */ -static inline u32 FWdtReadWCS(uintptr addr) -{ - return FWDT_READ_REG32(addr, FWDT_GWDT_WCS); -} - -void FWdtDump(uintptr base_addr); - -#ifdef __cplusplus -} -#endif - -#endif \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/drivers/watchdog/fwdt/fwdt_sinit.c b/bsp/phytium/libraries/standalone/drivers/watchdog/fwdt/fwdt_sinit.c deleted file mode 100644 index 89250d8438..0000000000 --- a/bsp/phytium/libraries/standalone/drivers/watchdog/fwdt/fwdt_sinit.c +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fwdt_sinit.c - * Date: 2022-02-10 14:53:42 - * LastEditTime: 2022-02-25 11:45:05 - * Description:  This file is for wdt static variables implementation. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 wangxiaodong 2022/4/25 init commit - */ - - -/***************************** Include Files *********************************/ - -#include "fwdt.h" -#include "fparameters.h" - -#define FWDT_DEBUG_TAG "WDT_SINIT" -#define FWDT_ERROR(format, ...) FT_DEBUG_PRINT_E(FWDT_DEBUG_TAG, format, ##__VA_ARGS__) -#define FWDT_WARN(format, ...) FT_DEBUG_PRINT_W(FWDT_DEBUG_TAG, format, ##__VA_ARGS__) -#define FWDT_INFO(format, ...) FT_DEBUG_PRINT_I(FWDT_DEBUG_TAG, format, ##__VA_ARGS__) -#define FWDT_DEBUG(format, ...) FT_DEBUG_PRINT_D(FWDT_DEBUG_TAG, format, ##__VA_ARGS__) - - -extern FWdtConfig FWdtConfigTbl[FWDT_NUM]; -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ - -/*****************************************************************************/ - -/** - * @name: FWdtLookupConfig - * @msg: get wdt configs by id - * @param {u32} instance_id, id of wdt ctrl - * @return {FWdtConfig *}, wdt config address - */ -const FWdtConfig *FWdtLookupConfig(u32 instance_id) -{ - const FWdtConfig *pconfig = NULL; - u32 index; - - if (instance_id >= FWDT_NUM) - { - FWDT_ERROR("wdt id is not invalid."); - return NULL; - } - - for (index = 0; index < (u32)FWDT_NUM; index++) - { - if (FWdtConfigTbl[index].instance_id == instance_id) - { - pconfig = &FWdtConfigTbl[index]; - break; - } - } - return (const FWdtConfig *)pconfig; -} - diff --git a/bsp/phytium/libraries/standalone/gitinfo b/bsp/phytium/libraries/standalone/gitinfo deleted file mode 100644 index 4a54f59d73..0000000000 --- a/bsp/phytium/libraries/standalone/gitinfo +++ /dev/null @@ -1,3 +0,0 @@ -[commit-id]: 9404e64c23d012173cfe3caf9281475bd27a149b -[branch]: iopad -[date]: 2023-07-17 18:51:36 diff --git a/bsp/phytium/libraries/standalone/port/arch/armv8/aarch32/faarch32.c b/bsp/phytium/libraries/standalone/port/arch/armv8/aarch32/faarch32.c deleted file mode 100644 index 5fc72f95f6..0000000000 --- a/bsp/phytium/libraries/standalone/port/arch/armv8/aarch32/faarch32.c +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright : (C) 2023 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fcp15.c - * Date: 2022-02-10 14:53:41 - * LastEditTime: 2022-02-17 17:36:17 - * Description:  This file is for cp15 function port for driver - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2023/2/28 first release - */ - -/***************************** Include Files *********************************/ -#include "fassert.h" -#include "faarch32.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ - -/************************** Function *****************************************/ diff --git a/bsp/phytium/libraries/standalone/port/arch/armv8/aarch32/faarch32.h b/bsp/phytium/libraries/standalone/port/arch/armv8/aarch32/faarch32.h deleted file mode 100644 index b2221399ab..0000000000 --- a/bsp/phytium/libraries/standalone/port/arch/armv8/aarch32/faarch32.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright : (C) 2023 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fcp15.h - * Date: 2022-02-10 14:53:41 - * LastEditTime: 2022-02-17 17:36:17 - * Description:  This file is for cp15 function port for driver - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2023/2/28 first release - */ -#ifndef FDRV_AARCH32_H -#define FDRV_AARCH32_H - -/***************************** Include Files *********************************/ -#include -#include "ftypes.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ - -/************************** Function *****************************************/ -static inline void WMB(void) -{ - __asm__ __volatile__("dsb" \ - : \ - : \ - : "memory"); -} - -#ifdef __cplusplus -} -#endif - -#endif \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/port/arch/armv8/aarch32/fcache.c b/bsp/phytium/libraries/standalone/port/arch/armv8/aarch32/fcache.c deleted file mode 100644 index ed999cdfc7..0000000000 --- a/bsp/phytium/libraries/standalone/port/arch/armv8/aarch32/fcache.c +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright : (C) 2023 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fcache.h - * Date: 2022-02-10 14:53:41 - * LastEditTime: 2022-02-17 17:36:17 - * Description:  This file is for aarch32 cache functions port for driver - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2023/2/28 first release - */ - -/***************************** Include Files *********************************/ -#include -#include "fassert.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ -extern void rt_hw_cpu_dcache_invalidate(void *addr, int size); -extern void rt_hw_cpu_dcache_clean(void *addr, int size); - -/************************** Function *****************************************/ -void FCacheDCacheInvalidate(void) -{ - /* there is no dcache invalidate implmentation for contrex-a aarch32, use flush instead */ - rt_cpu_dcache_clean_flush(); -} - -void FCacheDCacheInvalidateRange(intptr adr, intptr len) -{ - rt_hw_cpu_dcache_invalidate((void *)adr, (int)len); -} - -void FCacheDCacheFlushRange(intptr adr, intptr len) -{ - rt_hw_cpu_dcache_clean((void *)adr, (int)len); -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/port/arch/armv8/aarch32/fgeneric_timer.c b/bsp/phytium/libraries/standalone/port/arch/armv8/aarch32/fgeneric_timer.c deleted file mode 100644 index 39eee00f4f..0000000000 --- a/bsp/phytium/libraries/standalone/port/arch/armv8/aarch32/fgeneric_timer.c +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright : (C) 2023 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fgeneric_timer.c - * Date: 2022-02-10 14:53:41 - * LastEditTime: 2022-02-17 17:36:17 - * Description:  This file is for generic timer function port for driver - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2023/2/28 first release - */ - -/***************************** Include Files *********************************/ -#include - -#include "fkernel.h" -#include "fassert.h" -#include "fgeneric_timer.h" - -/************************** Constant Definitions *****************************/ -#define CNTP_CTL_ENABLE (1U << 0) /* Enables the timer */ -#define CNTP_CTL_IMASK (1U << 1) /* Timer interrupt mask bit */ -#define CNTP_CTL_ISTATUS (1U << 2) /* The status of the timer */ - -/**************************** Type Definitions *******************************/ - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ - -/************************** Function *****************************************/ -u64 GenericTimerRead(u32 id) -{ - return (u64)gtimer_get_current_value(); -} - -void GenericTimerStart(u32 id) -{ - u32 ctrl = gtimer_get_control(); /* get CNTP_CTL */ - - if (!(ctrl & CNTP_CTL_ENABLE)) - { - ctrl |= CNTP_CTL_ENABLE; /* enable gtimer if off */ - gtimer_set_control(ctrl); /* set CNTP_CTL */ - } -} - -void GenericTimerStop(u32 id) -{ - u32 ctrl = gtimer_get_control(); /* get CNTP_CTL */ - if ((ctrl & CNTP_CTL_ENABLE)) - { - ctrl &= ~CNTP_CTL_ENABLE; /* disable gtimer if on */ - gtimer_set_control(ctrl); /* set CNTP_CTL */ - } -} - -u32 GenericTimerFrequecy(void) -{ - u32 rate = gtimer_get_counter_frequency(); /* get CNTFRQ bit[31:0] freq of system counter */ - FASSERT_MSG((rate > 1000000), "invalid freqency %ud", rate); - return rate; -} - -void GenericTimerSetTimerCompareValue(u32 id, u32 interval) -{ - /* set CNTP_CVAL, set compare value for physical timer */ - gtimer_set_load_value((rt_uint64_t)interval); -} - -void GenericTimerInterruptEnable(u32 id) -{ - u64 ctrl = gtimer_get_control(); - if (ctrl & CNTP_CTL_IMASK) - { - ctrl &= ~CNTP_CTL_IMASK; - gtimer_set_control(ctrl); - } -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/port/arch/armv8/aarch32/fsleep.c b/bsp/phytium/libraries/standalone/port/arch/armv8/aarch32/fsleep.c deleted file mode 100644 index 4fbdd2d9a3..0000000000 --- a/bsp/phytium/libraries/standalone/port/arch/armv8/aarch32/fsleep.c +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright : (C) 2023 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fsleep.c - * Date: 2022-02-10 14:53:41 - * LastEditTime: 2022-02-17 17:36:17 - * Description:  This file is for sleep function port for driver - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2023/2/28 first release - */ - -/***************************** Include Files *********************************/ -#include "fparameters.h" -#include "fassert.h" -#include "fgeneric_timer.h" -#include "fsleep.h" -#include "fkernel.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ - -/************************** Function *****************************************/ -static u32 fsleep_general(u32 ticks, u32 div) -{ - u64 end_time; - u64 cur_time; - GenericTimerStart(GENERIC_TIMER_ID0); - cur_time = GenericTimerRead(GENERIC_TIMER_ID0); - end_time = cur_time + ((u64)ticks * GenericTimerFrequecy() / div); - - do - { - cur_time = GenericTimerRead(GENERIC_TIMER_ID0); - } - while (cur_time < end_time); - - return 0; -} - -u32 fsleep_seconds(u32 seconds) -{ - return fsleep_general(seconds, 1); -} - -u32 fsleep_millisec(u32 mseconds) -{ - return fsleep_general(mseconds, NANO_TO_MICRO); -} - -u32 fsleep_microsec(u32 mseconds) -{ - return fsleep_general(mseconds, NANO_TO_KILO); -} diff --git a/bsp/phytium/libraries/standalone/port/arch/armv8/aarch32/fsmcc.c b/bsp/phytium/libraries/standalone/port/arch/armv8/aarch32/fsmcc.c deleted file mode 100644 index 8d1944669c..0000000000 --- a/bsp/phytium/libraries/standalone/port/arch/armv8/aarch32/fsmcc.c +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright : (C) 2023 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fsmcc.c - * Created Date: 2023-06-16 11:30:41 - * Last Modified: 2023-06-30 13:19:25 - * Description: This file is for - * - * Modify History: - * Ver Who Date Changes - * ----- ---------- -------- --------------------------------- - * 1.0 huanghe 2023-06-16 first init - */ - - -#include "fsmcc.h" -#include "ftypes.h" - - -/** -@name: FSmcccHvcCall -@msg: 执行HVC(虚拟化监管CALL)指令。 -@param {unsigned long} arg0: 第一个参数传递给HVC调用。 -@param {unsigned long} arg1: 第二个参数传递给HVC调用。 -@param {unsigned long} arg2: 第三个参数传递给HVC调用。 -@param {unsigned long} arg3: 第四个参数传递给HVC调用。 -@param {unsigned long} arg4: 第五个参数传递给HVC调用。 -@param {unsigned long} arg5: 第六个参数传递给HVC调用。 -@param {unsigned long} arg6: 第七个参数传递给HVC调用。 -@param {unsigned long} arg7: 第八个参数传递给HVC调用。 -@param {struct FSmcccRes*} res: 结构体指针,用于保存HVC调用的结果。 -@note: 此函数执行SMC(虚拟化监管CALL)指令,并将结果保存在提供的结构体指针中。 -*/ -void FSmcccHvcCall(unsigned long arg0, unsigned long arg1, - unsigned long arg2, unsigned long arg3, - unsigned long arg4, unsigned long arg5, - unsigned long arg6, unsigned long arg7, - struct FSmcccRes *res) -{ - register unsigned long r0 asm("r0") = arg0; - register unsigned long r1 asm("r1") = arg1; - register unsigned long r2 asm("r2") = arg2; - register unsigned long r3 asm("r3") = arg3; - register unsigned long r4 asm("r4") = arg4; - register unsigned long r5 asm("r5") = arg5; - register unsigned long r6 asm("r6") = arg6; - register unsigned long r7 asm("r7") = arg7; - - asm volatile( - "hvc #0\n" - : "+r"(r0), "+r"(r1), "+r"(r2), "+r"(r3), - "+r"(r4), "+r"(r5), "+r"(r6), "+r"(r7) - : - : "memory"); - - res->a0 = r0; - res->a1 = r1; - res->a2 = r2; - res->a3 = r3; -} - - -/** -@name: FSmcccSmcCall -@msg: 执行SMC(Secure Monitor Call)指令。 -@param {unsigned long} arg0: 第一个参数传递给SMC调用。 -@param {unsigned long} arg1: 第二个参数传递给SMC调用。 -@param {unsigned long} arg2: 第三个参数传递给SMC调用。 -@param {unsigned long} arg3: 第四个参数传递给SMC调用。 -@param {unsigned long} arg4: 第五个参数传递给SMC调用。 -@param {unsigned long} arg5: 第六个参数传递给SMC调用。 -@param {unsigned long} arg6: 第七个参数传递给SMC调用。 -@param {unsigned long} arg7: 第八个参数传递给SMC调用。 -@param {struct FSmcccRes*} res: 结构体指针,用于保存SMC调用的结果。 -@note: 此函数执行SMC(Secure Monitor Call)指令,并将结果保存在提供的结构体指针中。 -*/ -void FSmcccSmcCall(unsigned long arg0, unsigned long arg1, - unsigned long arg2, unsigned long arg3, - unsigned long arg4, unsigned long arg5, - unsigned long arg6, unsigned long arg7, - struct FSmcccRes *res) -{ - register unsigned long r0 asm("r0") = arg0; - register unsigned long r1 asm("r1") = arg1; - register unsigned long r2 asm("r2") = arg2; - register unsigned long r3 asm("r3") = arg3; - register unsigned long r4 asm("r4") = arg4; - register unsigned long r5 asm("r5") = arg5; - register unsigned long r6 asm("r6") = arg6; - register unsigned long r7 asm("r7") = arg7; - - asm volatile( - "smc #0\n" - : "+r"(r0), "+r"(r1), "+r"(r2), "+r"(r3), - "+r"(r4), "+r"(r5), "+r"(r6), "+r"(r7) - : - : "memory"); - - res->a0 = r0; - res->a1 = r1; - res->a2 = r2; - res->a3 = r3; -} - diff --git a/bsp/phytium/libraries/standalone/port/arch/armv8/aarch32/fsmcc.h b/bsp/phytium/libraries/standalone/port/arch/armv8/aarch32/fsmcc.h deleted file mode 100644 index 53bb22f1dd..0000000000 --- a/bsp/phytium/libraries/standalone/port/arch/armv8/aarch32/fsmcc.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright : (C) 2023 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fsmcc.h - * Created Date: 2023-06-16 11:30:49 - * Last Modified: 2023-06-16 15:47:29 - * Description: This file is for - * - * Modify History: - * Ver Who Date Changes - * ----- ---------- -------- --------------------------------- - * 1.0 huanghe 2023-06-16 first init - */ -#ifndef ARCH_ARMV8_AARCH32_SMCC_H -#define ARCH_ARMV8_AARCH32_SMCC_H - - - -#ifdef __cplusplus -extern "C" -{ -#endif -#include "ftypes.h" - -struct FSmcccRes { - unsigned long a0; - unsigned long a1; - unsigned long a2; - unsigned long a3; -}; - - -void FSmcccHvcCall(unsigned long arg0, unsigned long arg1, - unsigned long arg2, unsigned long arg3, - unsigned long arg4, unsigned long arg5, - unsigned long arg6, unsigned long arg7, - struct FSmcccRes *res) ; - - - -void FSmcccSmcCall(unsigned long arg0, unsigned long arg1, - unsigned long arg2, unsigned long arg3, - unsigned long arg4, unsigned long arg5, - unsigned long arg6, unsigned long arg7, - struct FSmcccRes *res) ; - -void FSmcccSmcGetSocIdCall(struct FSmcccRes *res) ; - -#ifdef __cplusplus -} -#endif - -#endif // !FT_SMC_H diff --git a/bsp/phytium/libraries/standalone/port/arch/armv8/aarch64/faarch64.c b/bsp/phytium/libraries/standalone/port/arch/armv8/aarch64/faarch64.c deleted file mode 100644 index c1a9fbf618..0000000000 --- a/bsp/phytium/libraries/standalone/port/arch/armv8/aarch64/faarch64.c +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright : (C) 2023 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: faarch64.c - * Date: 2022-02-10 14:53:41 - * LastEditTime: 2022-02-17 17:36:17 - * Description:  This file is for aarch64 function port for driver - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2023/2/28 first release - */ - -/***************************** Include Files *********************************/ -#include "fassert.h" -#include "faarch64.h" -#include "rtdef.h" -#include "cpuport.h" -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ - -/************************** Function *****************************************/ -void WMB(void) -{ - rt_hw_dsb(); -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/port/arch/armv8/aarch64/faarch64.h b/bsp/phytium/libraries/standalone/port/arch/armv8/aarch64/faarch64.h deleted file mode 100644 index 9c0c9ee4fe..0000000000 --- a/bsp/phytium/libraries/standalone/port/arch/armv8/aarch64/faarch64.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright : (C) 2023 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: faarch64.h - * Date: 2022-02-10 14:53:41 - * LastEditTime: 2022-02-17 17:36:17 - * Description:  This file is for aarch64 function port for driver - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2023/2/28 first release - */ -#ifndef FDRV_AARCH64_H -#define FDRV_AARCH64_H - -/***************************** Include Files *********************************/ -#include -#include "ftypes.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ - -/************************** Function *****************************************/ -void WMB(void); - -#ifdef __cplusplus -} -#endif - -#endif \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/port/arch/armv8/aarch64/farm_smccc.h b/bsp/phytium/libraries/standalone/port/arch/armv8/aarch64/farm_smccc.h deleted file mode 100644 index 670d4bf993..0000000000 --- a/bsp/phytium/libraries/standalone/port/arch/armv8/aarch64/farm_smccc.h +++ /dev/null @@ -1,137 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: farm_smccc.h - * Date: 2022-02-10 14:53:41 - * LastEditTime: 2022-02-17 17:32:15 - * Description:  This file is for initiating SMC call - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2022/6/13 first release - */ - -#ifndef FARM_SMCCC_H -#define FARM_SMCCC_H - -#include - -#ifdef __cplusplus -extern "C" -{ -#endif - -/* - * This file provides common defines for ARM SMC Calling Convention as - * specified in - * http://infocenter.arm.com/help/topic/com.arm.doc.den0028a/index.html - */ - -#define ARM_SMCCC_STD_CALL 0 -#define ARM_SMCCC_FAST_CALL 1 -#define ARM_SMCCC_TYPE_SHIFT 31 - -#define ARM_SMCCC_SMC_32 0 -#define ARM_SMCCC_SMC_64 1 -#define ARM_SMCCC_CALL_CONV_SHIFT 30 - -#define ARM_SMCCC_OWNER_MASK 0x3F -#define ARM_SMCCC_OWNER_SHIFT 24 - -#define ARM_SMCCC_FUNC_MASK 0xFFFF - -#define ARM_SMCCC_IS_FAST_CALL(smc_val) \ - ((smc_val) & (ARM_SMCCC_FAST_CALL << ARM_SMCCC_TYPE_SHIFT)) -#define ARM_SMCCC_IS_64(smc_val) \ - ((smc_val) & (ARM_SMCCC_SMC_64 << ARM_SMCCC_CALL_CONV_SHIFT)) -#define ARM_SMCCC_FUNC_NUM(smc_val) ((smc_val)&ARM_SMCCC_FUNC_MASK) -#define ARM_SMCCC_OWNER_NUM(smc_val) \ - (((smc_val) >> ARM_SMCCC_OWNER_SHIFT) & ARM_SMCCC_OWNER_MASK) - -#define ARM_SMCCC_CALL_VAL(type, calling_convention, owner, func_num) \ - (((type) << ARM_SMCCC_TYPE_SHIFT) | \ - ((calling_convention) << ARM_SMCCC_CALL_CONV_SHIFT) | \ - (((owner)&ARM_SMCCC_OWNER_MASK) << ARM_SMCCC_OWNER_SHIFT) | \ - ((func_num)&ARM_SMCCC_FUNC_MASK)) - -#define ARM_SMCCC_OWNER_ARCH 0 -#define ARM_SMCCC_OWNER_CPU 1 -#define ARM_SMCCC_OWNER_SIP 2 -#define ARM_SMCCC_OWNER_OEM 3 -#define ARM_SMCCC_OWNER_STANDARD 4 -#define ARM_SMCCC_OWNER_TRUSTED_APP 48 -#define ARM_SMCCC_OWNER_TRUSTED_APP_END 49 -#define ARM_SMCCC_OWNER_TRUSTED_OS 50 -#define ARM_SMCCC_OWNER_TRUSTED_OS_END 63 - -#define ARM_SMCCC_QUIRK_NONE 0 -#define ARM_SMCCC_QUIRK_QCOM_A6 1 /* Save/restore register a6 */ - -#ifndef __ASSEMBLY__ - -/** - * struct arm_smccc_res - Result from SMC/HVC call - * @a0-a3 result values from registers 0 to 3 - */ -struct arm_smccc_res -{ - unsigned long a0; - unsigned long a1; - unsigned long a2; - unsigned long a3; -}; - -/** - * struct arm_smccc_quirk - Contains quirk information - * @id: quirk identification - * @state: quirk specific information - * @a6: Qualcomm quirk entry for returning post-smc call contents of a6 - */ -struct arm_smccc_quirk -{ - int id; - union - { - unsigned long a6; - } state; -}; - -/** - * __arm_smccc_smc() - make SMC calls - * @a0-a7: arguments passed in registers 0 to 7 - * @res: result values from registers 0 to 3 - * @quirk: points to an arm_smccc_quirk, or NULL when no quirks are required. - * - * This function is used to make SMC calls following SMC Calling Convention. - * The content of the supplied param are copied to registers 0 to 7 prior - * to the SMC instruction. The return values are updated with the content - * from register 0 to 3 on return from the SMC instruction. An optional - * quirk structure provides vendor specific behavior. - */ -void __arm_smccc_smc(unsigned long a0, unsigned long a1, - unsigned long a2, unsigned long a3, unsigned long a4, - unsigned long a5, unsigned long a6, unsigned long a7, - struct arm_smccc_res *res, struct arm_smccc_quirk *quirk); - -#define arm_smccc_smc(...) __arm_smccc_smc(__VA_ARGS__) - -#define arm_smccc_smc_quirk(...) __arm_smccc_smc(__VA_ARGS__) - -#endif /*__ASSEMBLY__*/ - -#ifdef __cplusplus -} -#endif - -#endif /*__LINUX_ARM_SMCCC_H*/ \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/port/arch/armv8/aarch64/fcache.c_x b/bsp/phytium/libraries/standalone/port/arch/armv8/aarch64/fcache.c_x deleted file mode 100644 index cfda8c9404..0000000000 --- a/bsp/phytium/libraries/standalone/port/arch/armv8/aarch64/fcache.c_x +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright : (C) 2023 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fcache.c - * Date: 2022-02-10 14:53:41 - * LastEditTime: 2022-02-17 17:36:17 - * Description:  This file is for aarch64 cache function port for driver - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2023/2/28 first release - */ - -/***************************** Include Files *********************************/ -#include "fassert.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ - -/************************** Function *****************************************/ -void FCacheDCacheInvalidate(void) -{ - rt_hw_dcache_invalidate_all(); -} - -void FCacheDCacheInvalidateRange(intptr adr, intptr len) -{ - rt_hw_dcache_invalidate_range((unsigned long)adr, (unsigned long)len); -} - -void FCacheDCacheFlushRange(intptr adr, intptr len) -{ - rt_hw_dcache_flush_range((unsigned long)adr, (unsigned long)len); -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/port/arch/armv8/aarch64/fgeneric_timer.c b/bsp/phytium/libraries/standalone/port/arch/armv8/aarch64/fgeneric_timer.c deleted file mode 100644 index a4b56a101b..0000000000 --- a/bsp/phytium/libraries/standalone/port/arch/armv8/aarch64/fgeneric_timer.c +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright : (C) 2023 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fgeneric_timer.c - * Date: 2022-02-10 14:53:41 - * LastEditTime: 2022-02-17 17:36:17 - * Description:  This file is for generic timer function port for driver - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2023/2/28 first release - */ - -/***************************** Include Files *********************************/ -#include - -#include "fassert.h" -#include "fgeneric_timer.h" - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ - -/************************** Function *****************************************/ -u64 GenericTimerRead(u32 id) -{ - return (u64)rt_hw_get_gtimer_val(); -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/port/arch/armv8/aarch64/fsleep.c b/bsp/phytium/libraries/standalone/port/arch/armv8/aarch64/fsleep.c deleted file mode 100644 index d6ce7e0071..0000000000 --- a/bsp/phytium/libraries/standalone/port/arch/armv8/aarch64/fsleep.c +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright : (C) 2023 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fsleep.c - * Date: 2022-02-10 14:53:41 - * LastEditTime: 2022-02-17 17:36:17 - * Description:  This file is for sleep function port for driver - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2023/2/28 first release - */ - -/***************************** Include Files *********************************/ -#include - -#include "fassert.h" -#include "fsleep.h" -#include "fkernel.h" -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ - -/************************** Function *****************************************/ -static u32 fsleep_general(u32 ticks, u32 div) -{ - u64 end_time; - u64 cur_time; - cur_time = rt_hw_get_gtimer_val(); - end_time = cur_time + ((u64)ticks * rt_hw_get_gtimer_frq() / div); - - do - { - cur_time = rt_hw_get_gtimer_val(); - } - while (cur_time < end_time); - - return 0; -} - -u32 fsleep_seconds(u32 seconds) -{ - return fsleep_general(seconds, 1); -} - -u32 fsleep_millisec(u32 mseconds) -{ - return fsleep_general(mseconds, NANO_TO_MICRO); -} - -u32 fsleep_microsec(u32 useconds) -{ - return fsleep_general(useconds, NANO_TO_KILO); -} \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/port/arch/armv8/aarch64/fsmcc.c b/bsp/phytium/libraries/standalone/port/arch/armv8/aarch64/fsmcc.c deleted file mode 100644 index 4865c0840b..0000000000 --- a/bsp/phytium/libraries/standalone/port/arch/armv8/aarch64/fsmcc.c +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright : (C) 2023 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fsmcc.c - * Created Date: 2023-06-19 11:12:23 - * Last Modified: 2023-06-30 13:17:16 - * Description: This file is for - * - * Modify History: - * Ver Who Date Changes - * ----- ---------- -------- --------------------------------- - */ - -#include "fsmcc.h" -#include "ftypes.h" - - - -/** -@name: FSmcccSmcCall -@msg: 执行SMC(Secure Monitor Call)指令。 -@param {unsigned long} arg0: 第一个参数传递给SMC调用。 -@param {unsigned long} arg1: 第二个参数传递给SMC调用。 -@param {unsigned long} arg2: 第三个参数传递给SMC调用。 -@param {unsigned long} arg3: 第四个参数传递给SMC调用。 -@param {unsigned long} arg4: 第五个参数传递给SMC调用。 -@param {unsigned long} arg5: 第六个参数传递给SMC调用。 -@param {unsigned long} arg6: 第七个参数传递给SMC调用。 -@param {unsigned long} arg7: 第八个参数传递给SMC调用。 -@param {struct FSmcccRes*} res: 结构体指针,用于保存SMC调用的结果。 -@note: 此函数执行SMC(Secure Monitor Call)指令,并将结果保存在提供的结构体指针中。 -*/ -void FSmcccSmcCall(unsigned long arg0, unsigned long arg1, - unsigned long arg2, unsigned long arg3, - unsigned long arg4, unsigned long arg5, - unsigned long arg6, unsigned long arg7, - struct FSmcccRes *res) -{ - register unsigned long x0 asm("x0") = arg0; - register unsigned long x1 asm("x1") = arg1; - register unsigned long x2 asm("x2") = arg2; - register unsigned long x3 asm("x3") = arg3; - register unsigned long x4 asm("x4") = arg4; - register unsigned long x5 asm("x5") = arg5; - register unsigned long x6 asm("x6") = arg6; - register unsigned long x7 asm("x7") = arg7; - - asm volatile( - "smc #0\n" - : "+r"(x0), "+r"(x1), "+r"(x2), "+r"(x3), - "+r"(x4), "+r"(x5), "+r"(x6), "+r"(x7) - : - : "memory"); - - res->a0 = x0; - res->a1 = x1; - res->a2 = x2; - res->a3 = x3; -} - -/** -@name: FSmcccHvcCall -@msg: 执行HVC(虚拟化监管CALL)指令。 -@param {unsigned long} arg0: 第一个参数传递给HVC调用。 -@param {unsigned long} arg1: 第二个参数传递给HVC调用。 -@param {unsigned long} arg2: 第三个参数传递给HVC调用。 -@param {unsigned long} arg3: 第四个参数传递给HVC调用。 -@param {unsigned long} arg4: 第五个参数传递给HVC调用。 -@param {unsigned long} arg5: 第六个参数传递给HVC调用。 -@param {unsigned long} arg6: 第七个参数传递给HVC调用。 -@param {unsigned long} arg7: 第八个参数传递给HVC调用。 -@param {struct FSmcccRes*} res: 结构体指针,用于保存HVC调用的结果。 -@note: 此函数执行SMC(虚拟化监管CALL)指令,并将结果保存在提供的结构体指针中。 -*/ -void FSmcccHvcCall(unsigned long arg0, unsigned long arg1, - unsigned long arg2, unsigned long arg3, - unsigned long arg4, unsigned long arg5, - unsigned long arg6, unsigned long arg7, - struct FSmcccRes *res) -{ - register unsigned long x0 asm("x0") = arg0; - register unsigned long x1 asm("x1") = arg1; - register unsigned long x2 asm("x2") = arg2; - register unsigned long x3 asm("x3") = arg3; - register unsigned long x4 asm("x4") = arg4; - register unsigned long x5 asm("x5") = arg5; - register unsigned long x6 asm("x6") = arg6; - register unsigned long x7 asm("x7") = arg7; - - asm volatile( - "hvc #0\n" - : "+r"(x0), "+r"(x1), "+r"(x2), "+r"(x3), - "+r"(x4), "+r"(x5), "+r"(x6), "+r"(x7) - : - : "memory"); - - res->a0 = x0; - res->a1 = x1; - res->a2 = x2; - res->a3 = x3; -} - diff --git a/bsp/phytium/libraries/standalone/port/arch/armv8/aarch64/fsmcc.h b/bsp/phytium/libraries/standalone/port/arch/armv8/aarch64/fsmcc.h deleted file mode 100644 index 1cb1cda92f..0000000000 --- a/bsp/phytium/libraries/standalone/port/arch/armv8/aarch64/fsmcc.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright : (C) 2023 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fsmcc.h - * Created Date: 2023-06-19 11:12:31 - * Last Modified: 2023-06-21 16:11:36 - * Description: This file is for - * - * Modify History: - * Ver Who Date Changes - * ----- ---------- -------- --------------------------------- - * 1.0 huanghe 2023-06-16 first release - */ - - -#ifndef ARCH_ARMV8_AARCH64_SMCC_H -#define ARCH_ARMV8_AARCH64_SMCC_H - - - -#ifdef __cplusplus -extern "C" -{ -#endif -#include "ftypes.h" - -struct FSmcccRes { - unsigned long a0; - unsigned long a1; - unsigned long a2; - unsigned long a3; -}; - - -void FSmcccHvcCall(unsigned long arg0, unsigned long arg1, - unsigned long arg2, unsigned long arg3, - unsigned long arg4, unsigned long arg5, - unsigned long arg6, unsigned long arg7, - struct FSmcccRes *res) ; - - - -void FSmcccSmcCall(unsigned long arg0, unsigned long arg1, - unsigned long arg2, unsigned long arg3, - unsigned long arg4, unsigned long arg5, - unsigned long arg6, unsigned long arg7, - struct FSmcccRes *res) ; - -void FSmcccSmcGetSocIdCall(struct FSmcccRes *res) ; - -#ifdef __cplusplus -} -#endif - -#endif // !ARCH_ARMV8_AARCH64_SMCC_H diff --git a/bsp/phytium/libraries/standalone/port/arch/armv8/aarch64/fsmccc_call.S b/bsp/phytium/libraries/standalone/port/arch/armv8/aarch64/fsmccc_call.S deleted file mode 100644 index 27e8e61f26..0000000000 --- a/bsp/phytium/libraries/standalone/port/arch/armv8/aarch64/fsmccc_call.S +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fsmccc-call.S - * Date: 2022-02-10 14:53:41 - * LastEditTime: 2022-02-17 17:31:23 - * Description:  This file is for initiating SMC call - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 huanghe 2021/7/3 first release - */ - -.macro SMCCC instr - \instr #0 - ldr x4, [sp] - stp x0, x1, [x4, #0] - stp x2, x3, [x4, #16] - ldr x4, [sp, #8] - cbz x4, 1f /* no quirk structure */ - ldr x9, [x4, #0] - cmp x9, #1 - b.ne 1f - str x6, [x4, 4] -1: ret -.endm SMCCC instr - -/* - * void arm_smccc_smc(unsigned long a0, unsigned long a1, unsigned long a2, - * unsigned long a3, unsigned long a4, unsigned long a5, - * unsigned long a6, unsigned long a7, struct arm_smccc_res *res, - * struct arm_smccc_quirk *quirk) - */ - .globl __arm_smccc_smc -.type __arm_smccc_smc, "function" - .cfi_startproc -__arm_smccc_smc: - SMCCC smc - .cfi_endproc diff --git a/bsp/phytium/libraries/standalone/port/arch/fcache.h b/bsp/phytium/libraries/standalone/port/arch/fcache.h deleted file mode 100644 index 4e1d9d268e..0000000000 --- a/bsp/phytium/libraries/standalone/port/arch/fcache.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright : (C) 2023 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fcache.h - * Date: 2022-02-10 14:53:41 - * LastEditTime: 2022-02-17 17:36:17 - * Description:  This file is for aarch32 cache functions port for driver - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2023/2/28 first release - */ -#ifndef FDRV_CACHE_AARCH32_H -#define FDRV_CACHE_AARCH32_H - -/***************************** Include Files *********************************/ -#include -#include "ftypes.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ - -/************************** Function *****************************************/ -void FCacheDCacheInvalidate(void); -void FCacheDCacheInvalidateRange(intptr adr, intptr len); -void FCacheDCacheFlushRange(intptr adr, intptr len); - -#ifdef __cplusplus -} -#endif - -#endif \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/port/arch/fgeneric_timer.h b/bsp/phytium/libraries/standalone/port/arch/fgeneric_timer.h deleted file mode 100644 index f1ae3e33f1..0000000000 --- a/bsp/phytium/libraries/standalone/port/arch/fgeneric_timer.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright : (C) 2023 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fgeneric_timer.h - * Date: 2022-02-10 14:53:41 - * LastEditTime: 2022-02-17 17:36:17 - * Description:  This file is for generic timer function port for driver - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2023/2/28 first release - */ -#ifndef FDRV_GENERIC_TIMER_AARCH32_H -#define FDRV_GENERIC_TIMER_AARCH32_H - -/***************************** Include Files *********************************/ -#include -#include "ftypes.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/************************** Constant Definitions *****************************/ - -/**************************** Type Definitions *******************************/ - -/************************** Variable Definitions *****************************/ - -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ - -/************************** Function *****************************************/ -/* Set generic timer CompareValue */ -void GenericTimerSetTimerCompareValue(u32 id, u32 interval); - -/* Set generic timer TimerValue */ -void GenericTimerSetTimerValue(u32 id, u32 timeout); - -/* Unmask generic timer interrupt */ -void GenericTimerInterruptEnable(u32 id); - -/* Mask generic timer interrupt */ -void GenericTimerInterruptDisable(u32 id); - -/* Enable generic timer */ -void GenericTimerStart(u32 id); - -/* Get generic timer physical count value */ -u64 GenericTimerRead(u32 id); - -/* Get generic timer frequency of the system counter */ -u32 GenericTimerFrequecy(void); - -/* Disable generic timer */ -void GenericTimerStop(u32 id); - -#ifdef __cplusplus -} -#endif - -#endif \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/port/arch/fsleep.h b/bsp/phytium/libraries/standalone/port/arch/fsleep.h deleted file mode 100644 index b0e78fa80f..0000000000 --- a/bsp/phytium/libraries/standalone/port/arch/fsleep.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: fsleep.h - * Date: 2021-05-28 08:48:40 - * LastEditTime: 2022-02-17 18:02:51 - * Description:  This file is for sleep function port for driver - * - * Modify History: - * Ver Who Date Changes - * ----- ------ -------- -------------------------------------- - * 1.0 zhugengyu 2023/2/28 first release - */ - - -#ifndef FDRV_FSLEEP_H -#define FDRV_FSLEEP_H - -#include "ftypes.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -u32 fsleep_seconds(u32 seconds); /* 按秒延迟 */ -u32 fsleep_millisec(u32 mseconds); /* 按毫秒延迟 */ -u32 fsleep_microsec(u32 useconds); /* 按微秒延迟 */ - -#ifdef __cplusplus -} -#endif - - -#endif // ! \ No newline at end of file diff --git a/bsp/phytium/libraries/standalone/port/fcompiler.h b/bsp/phytium/libraries/standalone/port/fcompiler.h deleted file mode 100644 index 48ffd42311..0000000000 --- a/bsp/phytium/libraries/standalone/port/fcompiler.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * @Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * @FilePath: fcompiler.h - * @Date: 2023-05-26 11:11:30 - * @LastEditTime: 2023-05-26 11:11:31 - * @Description: This file is for gcc compiler compilation - * - * @Modify History: - * Ver Who Date Changes - * ----- ------ -------- -------------------------------------- - * 1.0 huanghe 2023-05-26 init - */ - - -#ifndef FCOMPILER_H -#define FCOMPILER_H - -#ifdef __cplusplus -extern "C" -{ -#endif - -#define FCOMPILER_SECTION(section_name) __attribute__ ((section (section_name))) -#if defined(__aarch64__) -#define FAARCH64_USE __aarch64__ -#endif - -#ifdef __cplusplus -} -#endif - -#endif // ! - diff --git a/bsp/phytium/libraries/standalone/port/sdkconfig.h b/bsp/phytium/libraries/standalone/port/sdkconfig.h deleted file mode 100644 index bac3f96b45..0000000000 --- a/bsp/phytium/libraries/standalone/port/sdkconfig.h +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: sdkopts.h - * Date: 2022-09-16 13:54:28 - * LastEditTime: 2022-09-16 13:54:28 - * Description: This file is for configure sdkconfig in non-Kconfig way - * - * Modify History: - * Ver Who Date Changes - * ----- ------ -------- -------------------------------------- - * 1.0 zhugengyu 2023/03/01 first release - */ - -#ifndef SDK_CONFIG_H -#define SDK_CONFIG_H - -#include "rtconfig.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#if defined(TARGET_ARMV8_AARCH32) -#define CONFIG_TARGET_ARMV8_AARCH32 -#elif defined(TARGET_ARMV8_AARCH64) -#define CONFIG_TARGET_ARMV8_AARCH64 -#endif - -#if defined(TARGET_E2000D) -#define CONFIG_TARGET_E2000 -#define CONFIG_TARGET_E2000D -#elif defined(TARGET_E2000Q) -#define CONFIG_TARGET_E2000 -#define CONFIG_TARGET_E2000Q -#elif defined(TARGET_E2000S) -#define CONFIG_TARGET_E2000 -#define CONFIG_TARGET_E2000S -#elif defined(TARGET_D2000) -#define CONFIG_TARGET_D2000 -#elif defined(TARGET_F2000_4) -#define CONFIG_TARGET_F2000_4 -#elif defined(TARGET_PHYTIUMPI) -#define CONFIG_TARGET_E2000 -#define CONFIG_TARGET_PHYTIUMPI -#endif - -#if defined(LOG_VERBOS) -#define CONFIG_LOG_VERBOS -#elif defined(LOG_DEBUG) -#define CONFIG_LOG_DEBUG -#elif defined(LOG_INFO) -#define CONFIG_LOG_INFO -#elif defined(LOG_WARN) -#define CONFIG_LOG_WARN -#elif defined(LOG_ERROR) -#define CONFIG_LOG_ERROR -#elif defined(LOG_NONE) -#define CONFIG_LOG_NONE -#endif - -#if defined(BSP_USING_UART) -#define CONFIG_USE_SERIAL -#define CONFIG_ENABLE_Pl011_UART -#endif - -#if defined(BSP_USING_CAN) -#define CONFIG_USE_CAN -#define CONFIG_USE_FCAN -#define CONFIG_FCAN_USE_CANFD -#endif - -#if defined(BSP_USING_QSPI) -#define CONFIG_USE_QSPI -#define CONFIG_USE_FQSPI -#endif - -#if defined(BSP_USING_ETH) -#define CONFIG_USE_ETH -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* SDK_CONFIG_H */ \ No newline at end of file