From 32c1cb0e2b22f94cd0e67cadd85da7a12b055e4d Mon Sep 17 00:00:00 2001 From: wenfei6316 Date: Wed, 13 Dec 2023 11:39:02 +0800 Subject: [PATCH] config for riscv64 arch Signed-off-by: wenfei6316 Change-Id: I26c7ce49c3e2bc990649fa5f91fc33d86157814f --- adapter/khdf/linux/model/audio/Kconfig | 2 +- adapter/khdf/linux/model/input/Kconfig | 9 ++++- adapter/uhdf2/hdi/BUILD.gn | 2 + adapter/uhdf2/hdi/src/hdf_load_hdi.c | 2 +- adapter/uhdf2/hdi/src/hdi_support.cpp | 2 +- adapter/uhdf2/host/BUILD.gn | 5 ++- adapter/uhdf2/host/src/driver_loader_full.c | 2 +- framework/include/utils/hdf_base.h | 2 +- framework/model/input/driver/hdf_touch.c | 38 +++++++++++++++++++ framework/model/input/driver/input_config.h | 10 +++++ .../model/input/driver/input_config_parser.c | 14 +++++++ .../input/driver/touchscreen/touch_gt911.c | 5 +++ 12 files changed, 86 insertions(+), 7 deletions(-) diff --git a/adapter/khdf/linux/model/audio/Kconfig b/adapter/khdf/linux/model/audio/Kconfig index b2695b704..d6eb80624 100644 --- a/adapter/khdf/linux/model/audio/Kconfig +++ b/adapter/khdf/linux/model/audio/Kconfig @@ -69,4 +69,4 @@ config DRIVERS_HDF_AUDIO_IMX8MM default n depends on DRIVERS_HDF_AUDIO help - Answer Y to choice HDF Audio Codec driver. \ No newline at end of file + Answer Y to choice HDF Audio Codec driver. diff --git a/adapter/khdf/linux/model/input/Kconfig b/adapter/khdf/linux/model/input/Kconfig index 74c265553..ee6f60bf5 100644 --- a/adapter/khdf/linux/model/input/Kconfig +++ b/adapter/khdf/linux/model/input/Kconfig @@ -12,6 +12,13 @@ config DRIVERS_HDF_TP_5P5_GT911 help Answer Y to enable HDF TP 5P5 GT911 driver. +config DRIVERS_HDF_TP_TH1520_GT911 + bool "Enable HDF tp 5P5 c9xx GT911 driver" + default n + depends on DRIVERS_HDF_INPUT + help + Answer Y to enable HDF TP 5P5 c9xx GT911 driver. + config DRIVERS_HDF_TP_2P35_FT6236 bool "Enable HDF tp 2P35 FT6236 driver" default n @@ -38,4 +45,4 @@ config ARCH_NXP_TOUCH default n depends on DRIVERS_HDF_INPUT help - Answer Y to enable HDF TP nxp ft5x06 touch. \ No newline at end of file + Answer Y to enable HDF TP nxp ft5x06 touch. diff --git a/adapter/uhdf2/hdi/BUILD.gn b/adapter/uhdf2/hdi/BUILD.gn index 5b2be8b53..a9816acf2 100644 --- a/adapter/uhdf2/hdi/BUILD.gn +++ b/adapter/uhdf2/hdi/BUILD.gn @@ -43,6 +43,8 @@ if (defined(ohos_lite)) { ohos_shared_library("libhdi") { if (target_cpu == "arm64" || target_cpu == "x86_64") { defines = [ "__ARM64__" ] + } else if (target_cpu == "riscv64") { + defines = [ "__RISCV64__" ] } include_dirs = [ diff --git a/adapter/uhdf2/hdi/src/hdf_load_hdi.c b/adapter/uhdf2/hdi/src/hdf_load_hdi.c index c010bd45b..c1786b11b 100644 --- a/adapter/uhdf2/hdi/src/hdf_load_hdi.c +++ b/adapter/uhdf2/hdi/src/hdf_load_hdi.c @@ -23,7 +23,7 @@ #define HDF_LOG_TAG dev_load_hdi -#ifdef __ARM64__ +#if defined(__ARM64__) || defined(__RISCV64__) #define HDI_SO_PATH HDF_LIBRARY_DIR"64" #else #define HDI_SO_PATH HDF_LIBRARY_DIR diff --git a/adapter/uhdf2/hdi/src/hdi_support.cpp b/adapter/uhdf2/hdi/src/hdi_support.cpp index b01743be3..2dfc1cec4 100644 --- a/adapter/uhdf2/hdi/src/hdi_support.cpp +++ b/adapter/uhdf2/hdi/src/hdi_support.cpp @@ -27,7 +27,7 @@ #define HDF_LOG_TAG load_hdi -#ifdef __ARM64__ +#if defined(__ARM64__) || defined(__RISCV64__) #define HDI_SO_PATH HDF_LIBRARY_DIR "64" #else #define HDI_SO_PATH HDF_LIBRARY_DIR diff --git a/adapter/uhdf2/host/BUILD.gn b/adapter/uhdf2/host/BUILD.gn index 64129f6c2..b3e5f520e 100644 --- a/adapter/uhdf2/host/BUILD.gn +++ b/adapter/uhdf2/host/BUILD.gn @@ -33,8 +33,11 @@ if (defined(ohos_lite)) { } } else { ohos_shared_library("libhdf_host") { - if (target_cpu == "arm64" || target_cpu == "x86_64") { + if (target_cpu == "arm64" || target_cpu == "x86_64" || + target_cpu == "riscv64") { defines = [ "__ARM64__" ] + } else if (target_cpu == "riscv64") { + defines = [ "__RISCV64__" ] } all_dependent_configs = [ ":libhdf_host_all_dependent_config" ] diff --git a/adapter/uhdf2/host/src/driver_loader_full.c b/adapter/uhdf2/host/src/driver_loader_full.c index da57b2dd7..22310442c 100644 --- a/adapter/uhdf2/host/src/driver_loader_full.c +++ b/adapter/uhdf2/host/src/driver_loader_full.c @@ -27,7 +27,7 @@ #define DRIVER_DESC "driverDesc" #define HDF_LOG_TAG driver_loader_full -#ifdef __ARM64__ +#if defined(__ARM64__) || defined(__RISCV64__) #define DRIVER_PATH HDF_LIBRARY_DIR"64/" #else #define DRIVER_PATH HDF_LIBRARY_DIR"/" diff --git a/framework/include/utils/hdf_base.h b/framework/include/utils/hdf_base.h index c3356a08c..3d6e3214a 100644 --- a/framework/include/utils/hdf_base.h +++ b/framework/include/utils/hdf_base.h @@ -95,7 +95,7 @@ typedef enum { #define HDF_ETC_DIR "/etc" #define HDF_CONFIG_DIR "/etc" #else -#ifdef __aarch64__ +#if defined(__aarch64__) || (defined(__riscv) && __riscv_xlen == 64) #define HDF_LIBRARY_FULL_PATH(x) "/vendor/lib64/" x ".z.so" #else #define HDF_LIBRARY_FULL_PATH(x) "/vendor/lib/" x ".z.so" diff --git a/framework/model/input/driver/hdf_touch.c b/framework/model/input/driver/hdf_touch.c index f706f3c95..a1e32c230 100644 --- a/framework/model/input/driver/hdf_touch.c +++ b/framework/model/input/driver/hdf_touch.c @@ -160,6 +160,29 @@ static int32_t HandlePowerEvent(ChipDevice *chipDev, uint32_t *timing, uint32_t return ret; } +#if defined(CONFIG_ARCH_RV64I) +static int32_t InputPinMuxCfg(uint64_t regAddr, int32_t regSize, uint64_t regValue) +{ + uint8_t *base = NULL; + uint64_t value; + if (regAddr == 0) { + HDF_LOGE("%s: regAddr invalid", __func__); + return HDF_FAILURE; + } + + base = OsalIoRemap(regAddr, regSize); + if (base == NULL) { + HDF_LOGE("%s: ioremap failed", __func__); + return HDF_FAILURE; + } + + value = OSAL_READL(base); + regValue = (value & regValue); + OSAL_WRITEL(regValue, base); + OsalIoUnmap((void *)base); + return HDF_SUCCESS; +} +#else static int32_t InputPinMuxCfg(uint32_t regAddr, int32_t regSize, uint32_t regValue) { #if defined(CONFIG_ARCH_SPRD) || defined(CONFIG_ARCH_ROCKCHIP) || defined(LOSCFG_PLATFORM_STM32MP157) || \ @@ -182,6 +205,7 @@ static int32_t InputPinMuxCfg(uint32_t regAddr, int32_t regSize, uint32_t regVal OsalIoUnmap((void *)base); return HDF_SUCCESS; } +#endif #if defined(CONFIG_ARCH_ROCKCHIP) static int32_t SetResetStatus(TouchDriver *driver) @@ -244,10 +268,17 @@ static int32_t SetTiming(ChipDevice *chipDev, bool enable) #endif int32_t i; int32_t ret; +#if defined(CONFIG_ARCH_RV64I) + uint64_t rstPinAddr; + uint64_t rstPinValue; + uint64_t intPinAddr; + uint64_t intPinValue; +#else uint32_t rstPinAddr; uint32_t rstPinValue; uint32_t intPinAddr; uint32_t intPinValue; +#endif SeqArray pwrOnTiming = {0}; SeqArray pwroffTiming = {0}; TouchDriver *driver = chipDev->driver; @@ -959,10 +990,17 @@ static int32_t TouchSetupBus(TouchDriver *driver, TouchBoardCfg *config) uint8_t busType = config->bus.busType; uint8_t busNum = config->bus.i2c.busNum; if (busType == I2C_TYPE) { +#if defined(CONFIG_ARCH_RV64I) + uint64_t i2cClkAddr = config->bus.i2c.i2cClkReg[0]; + uint64_t i2cClkValue = config->bus.i2c.i2cClkReg[1]; + uint64_t i2cDataAddr = config->bus.i2c.i2cDataReg[0]; + uint64_t i2cDataValue = config->bus.i2c.i2cDataReg[1]; +#else uint32_t i2cClkAddr = config->bus.i2c.i2cClkReg[0]; uint32_t i2cClkValue = config->bus.i2c.i2cClkReg[1]; uint32_t i2cDataAddr = config->bus.i2c.i2cDataReg[0]; uint32_t i2cDataValue = config->bus.i2c.i2cDataReg[1]; +#endif if (InputPinMuxCfg(i2cClkAddr, REGISTER_BYTE_SIZE, i2cClkValue) != HDF_SUCCESS) { return HDF_FAILURE; diff --git a/framework/model/input/driver/input_config.h b/framework/model/input/driver/input_config.h index fb964dbf5..75313f304 100644 --- a/framework/model/input/driver/input_config.h +++ b/framework/model/input/driver/input_config.h @@ -25,8 +25,13 @@ typedef struct { uint8_t busNum; uint16_t clkGpio; uint16_t dataGpio; +#if defined(CONFIG_ARCH_RV64I) + uint64_t i2cClkReg[REG_CONFIG_LEN]; + uint64_t i2cDataReg[REG_CONFIG_LEN]; +#else uint32_t i2cClkReg[REG_CONFIG_LEN]; uint32_t i2cDataReg[REG_CONFIG_LEN]; +#endif } BoardI2cCfg; typedef struct { @@ -52,8 +57,13 @@ typedef struct { typedef struct { uint16_t rstGpio; uint16_t intGpio; +#if defined(CONFIG_ARCH_RV64I) + uint64_t rstPinReg[REG_CONFIG_LEN]; + uint64_t intPinReg[REG_CONFIG_LEN]; +#else uint32_t rstPinReg[REG_CONFIG_LEN]; uint32_t intPinReg[REG_CONFIG_LEN]; +#endif } BoardPinCfg; typedef struct { diff --git a/framework/model/input/driver/input_config_parser.c b/framework/model/input/driver/input_config_parser.c index d60edc4fb..09f9b248b 100644 --- a/framework/model/input/driver/input_config_parser.c +++ b/framework/model/input/driver/input_config_parser.c @@ -136,10 +136,17 @@ static int32_t ParseBus(struct DeviceResourceIface *parser, const struct DeviceR CHECK_PARSER_RET(ret, "GetUint16"); ret = parser->GetUint16(busNode, "dataGpio", &bus->i2c.dataGpio, 0); CHECK_PARSER_RET(ret, "GetUint16"); +#if defined(CONFIG_ARCH_RV64I) + ret = parser->GetUint64Array(busNode, "i2cClkIomux", bus->i2c.i2cClkReg, REG_CONFIG_LEN, 0); + CHECK_PARSER_RET(ret, "GetUint64Array"); + ret = parser->GetUint64Array(busNode, "i2cDataIomux", bus->i2c.i2cDataReg, REG_CONFIG_LEN, 0); + CHECK_PARSER_RET(ret, "GetUint64Array"); +#else ret = parser->GetUint32Array(busNode, "i2cClkIomux", bus->i2c.i2cClkReg, REG_CONFIG_LEN, 0); CHECK_PARSER_RET(ret, "GetUint32Array"); ret = parser->GetUint32Array(busNode, "i2cDataIomux", bus->i2c.i2cDataReg, REG_CONFIG_LEN, 0); CHECK_PARSER_RET(ret, "GetUint32Array"); +#endif } else if (bus->busType == SPI) { ret = parser->GetUint8(busNode, "busNum", &bus->spi.busNum, 0); CHECK_PARSER_RET(ret, "GetUint8"); @@ -165,10 +172,17 @@ static int32_t ParsePins(struct DeviceResourceIface *parser, const struct Device CHECK_PARSER_RET(ret, "GetUint16"); ret = parser->GetUint16(pinsNode, "intGpio", &pins->intGpio, 0); CHECK_PARSER_RET(ret, "GetUint16"); +#if defined(CONFIG_ARCH_RV64I) + ret = parser->GetUint64Array(pinsNode, "rstRegCfg", pins->rstPinReg, REG_CONFIG_LEN, 0); + CHECK_PARSER_RET(ret, "GetUint64Array"); + ret = parser->GetUint64Array(pinsNode, "intRegCfg", pins->intPinReg, REG_CONFIG_LEN, 0); + CHECK_PARSER_RET(ret, "GetUint64Array"); +#else ret = parser->GetUint32Array(pinsNode, "rstRegCfg", pins->rstPinReg, REG_CONFIG_LEN, 0); CHECK_PARSER_RET(ret, "GetUint32Array"); ret = parser->GetUint32Array(pinsNode, "intRegCfg", pins->intPinReg, REG_CONFIG_LEN, 0); CHECK_PARSER_RET(ret, "GetUint32Array"); +#endif return HDF_SUCCESS; } diff --git a/framework/model/input/driver/touchscreen/touch_gt911.c b/framework/model/input/driver/touchscreen/touch_gt911.c index d4be2ac04..135ed06f2 100644 --- a/framework/model/input/driver/touchscreen/touch_gt911.c +++ b/framework/model/input/driver/touchscreen/touch_gt911.c @@ -130,6 +130,11 @@ static void ParsePointData(ChipDevice *device, FrameData *frame, uint8_t *buf, u ((buf[GT_POINT_SIZE * i + GT_X_HIGH] & ONE_BYTE_MASK) << ONE_BYTE_OFFSET); frame->fingers[i].y = (buf[GT_POINT_SIZE * i + GT_Y_LOW] & ONE_BYTE_MASK) | ((buf[GT_POINT_SIZE * i + GT_Y_HIGH] & ONE_BYTE_MASK) << ONE_BYTE_OFFSET); +#elif defined(CONFIG_ARCH_RV64I) + frame->fingers[i].x = (buf[GT_POINT_SIZE * i + GT_X_LOW] & ONE_BYTE_MASK) | + ((buf[GT_POINT_SIZE * i + GT_X_HIGH] & ONE_BYTE_MASK) << ONE_BYTE_OFFSET); + frame->fingers[i].y = (buf[GT_POINT_SIZE * i + GT_Y_LOW] & ONE_BYTE_MASK) | + ((buf[GT_POINT_SIZE * i + GT_Y_HIGH] & ONE_BYTE_MASK) << ONE_BYTE_OFFSET); #else frame->fingers[i].y = (buf[GT_POINT_SIZE * i + GT_X_LOW] & ONE_BYTE_MASK) | ((buf[GT_POINT_SIZE * i + GT_X_HIGH] & ONE_BYTE_MASK) << ONE_BYTE_OFFSET); -- Gitee