From 07f84ed283b913cbdf87181ae2ed65467d923df5 Mon Sep 17 00:00:00 2001 From: Vincent Chen Date: Mon, 24 Jan 2022 02:57:40 -0800 Subject: [PATCH 2/2] 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 +++++++++++++++++++++++++++++ drivers/misc/Kconfig | 10 ++++++++++ include/configs/sifive-unmatched.h | 4 ++++ scripts/config_whitelist.txt | 1 + 4 files changed, 44 insertions(+) --- 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); --- a/drivers/misc/Kconfig +++ b/drivers/misc/Kconfig @@ -536,8 +536,18 @@ config SYS_I2C_EEPROM_ADDR depends on ID_EEPROM || I2C_EEPROM || SPL_I2C_EEPROM || CMD_EEPROM || ENV_IS_IN_EEPROM default 0 +config SYS_I2C_TMP451_ADDR + hex "Chip address of the TMP451 device" + default 0 + if I2C_EEPROM +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 --- a/include/configs/sifive-unmatched.h +++ b/include/configs/sifive-unmatched.h @@ -15,6 +15,10 @@ #define CONFIG_STANDALONE_LOAD_ADDR 0x80200000 +#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) \ --- a/scripts/config_whitelist.txt +++ b/scripts/config_whitelist.txt @@ -1268,6 +1268,7 @@ CONFIG_SYS_TIMER_BASE CONFIG_SYS_TIMER_COUNTER CONFIG_SYS_TIMER_COUNTS_DOWN CONFIG_SYS_TIMER_RATE +CONFIG_SYS_TMP451_BUS_NUM CONFIG_SYS_TMPVIRT CONFIG_SYS_TSEC1_OFFSET CONFIG_SYS_TX_ETH_BUFFER