From e1dcf7e7a3b5c0e76171ba0b7145af12693adcc4 Mon Sep 17 00:00:00 2001 From: Vincent Chen Date: Wed, 3 May 2023 07:46:41 +0000 Subject: [PATCH 3/3] board: sifive: spl: Set remote thermal of TMP451 to 85 deg C for the unmatched board For TMP451 on the unmatched board, the default value of the remote thermal threshold is 108 deg C. This commit initilizes it to 85 deg C at SPL. --- board/sifive/unmatched/spl.c | 29 +++++++++++++++++++++++++++++ configs/sifive_unmatched_defconfig | 3 +++ drivers/misc/Kconfig | 14 ++++++++++++++ include/configs/sifive-unmatched.h | 4 ++++ 4 files changed, 50 insertions(+) diff --git a/board/sifive/unmatched/spl.c b/board/sifive/unmatched/spl.c index f3a661a8..05ba5916 100644 --- a/board/sifive/unmatched/spl.c +++ b/board/sifive/unmatched/spl.c @@ -10,6 +10,8 @@ #include #include #include +#include +#include #include #include #include @@ -26,6 +28,27 @@ #define MODE_SELECT_SD 0xb #define MODE_SELECT_MASK GENMASK(3, 0) +#define TMP451_REMOTE_THERM_LIMIT_REG_OFFSET 0x19 +#define TMP451_REMOTE_THERM_LIMIT_INIT_VALUE 0x55 + +static inline int init_tmp451_remote_therm_limit(void) +{ + struct udevice *dev; + unsigned char r_therm_limit = TMP451_REMOTE_THERM_LIMIT_INIT_VALUE; + int ret; + + ret = i2c_get_chip_for_busnum(CONFIG_SYS_TMP451_BUS_NUM, + CONFIG_SYS_I2C_TMP451_ADDR, + CONFIG_SYS_I2C_TMP451_ADDR_LEN, + &dev); + + if (!ret) + ret = dm_i2c_write(dev, TMP451_REMOTE_THERM_LIMIT_REG_OFFSET, + &r_therm_limit, + sizeof(unsigned char)); + return ret; +} + static inline int spl_reset_device_by_gpio(const char *label, int pin, int low_width) { int ret; @@ -92,6 +115,12 @@ int spl_board_init_f(void) pwm_device_init(); + ret = init_tmp451_remote_therm_limit(); + if (ret) { + debug("TMP451 remote THERM limit init failed: %d\n", ret); + goto end; + } + ret = spl_gemgxl_init(); if (ret) { debug("Gigabit ethernet PHY (VSC8541) init failed: %d\n", ret); diff --git a/configs/sifive_unmatched_defconfig b/configs/sifive_unmatched_defconfig index 74cdb4ea..e843378c 100644 --- a/configs/sifive_unmatched_defconfig +++ b/configs/sifive_unmatched_defconfig @@ -68,3 +68,6 @@ CONFIG_SYSRESET=y CONFIG_SYSRESET_SBI=y CONFIG_CMD_POWEROFF=y CONFIG_SYSRESET_CMD_POWEROFF=y +CONFIG_SYS_TMP451_BUS_NUM=0 +CONFIG_SYS_I2C_TMP451_ADDR=0x4c +CONFIG_SYS_I2C_TMP451_ADDR_LEN=1 diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig index b5707a15..8ea6f014 100644 --- a/drivers/misc/Kconfig +++ b/drivers/misc/Kconfig @@ -552,6 +552,20 @@ config SYS_I2C_EEPROM_ADDR if I2C_EEPROM +config SYS_TMP451_BUS_NUM + int "Bus number of TMP451 device" + default 0 + +config SYS_I2C_TMP451_ADDR + hex "Chip address of the TMP451 device" + default 0 + +config SYS_I2C_TMP451_ADDR_LEN + int "Length in bytes of the TMP451 memory array address" + default 1 + help + Note: This is NOT the chip address length! + config SYS_I2C_EEPROM_ADDR_OVERFLOW hex "EEPROM Address Overflow" default 0x0 diff --git a/include/configs/sifive-unmatched.h b/include/configs/sifive-unmatched.h index 74150b7d..6a8eb1e6 100644 --- a/include/configs/sifive-unmatched.h +++ b/include/configs/sifive-unmatched.h @@ -13,6 +13,10 @@ #define CFG_SYS_SDRAM_BASE 0x80000000 +#define CONFIG_SYS_TMP451_BUS_NUM 0 +#define CONFIG_SYS_I2C_TMP451_ADDR 0x4c +#define CONFIG_SYS_I2C_TMP451_ADDR_LEN 0x1 + /* Environment options */ #define BOOT_TARGET_DEVICES(func) \ -- 2.40.1