meta-facebook: catalina: catalina-sys-init: enhance i2c bind
We saw catalina-sys-init service failed at bind command somtimes due to
the device already bound.
Implement bind_12c_device() function, Enhance the bind_12c_device()
function to include a check that determines whether the device is
already bound. The function should only execute the bind command if the
device is not currently bound.
Test results:
catalina-sys-init finished successfully.
```
root@bmc:~# systemctl status catalina-sys-init
○ catalina-sys-init.service - Catalina Early System Init
Loaded: loaded (/usr/lib/systemd/system/catalina-sys-init.service; enabled; preset: enabled)
Active: inactive (dead) since Thu 2024-08-22 09:21:20 PDT; 25s ago
Process: 362 ExecStart=/usr/libexec/catalina/catalina-early-sys-init (code=exited, status=0/SUCCESS)
Main PID: 362 (code=exited, status=0/SUCCESS)
CPU: 770ms
Aug 22 09:21:17 bmc Catalina Early Init[364]: set_gpio: set stby_power_gd_cpld = 1 success
Aug 22 09:21:17 bmc Catalina Early Init[364]: set_gpio: can not find gpio, USB_HUB_RESET_L
Aug 22 09:21:18 bmc Catalina Early Init[364]: set_gpio: can not find gpio, USB_HUB_RESET_L
Aug 22 09:21:18 bmc Catalina Early Init[364]: set_gpio: set HMC_PGOOD = 1 success
Aug 22 09:21:18 bmc Catalina Early Init[364]: set_gpio: set EROT_FPGA_RST_L = 1 success
Aug 22 09:21:18 bmc Catalina Early Init[364]: set_gpio: set SEC_EROT_FPGA_RST_L = 1 success
Aug 22 09:21:18 bmc Catalina Early Init[364]: set_gpio: set HMC_EROT_RST_L = 1 success
Aug 22 09:21:18 bmc Catalina Early Init[364]: set_gpio: set SCM_HPM_STBY_RST_N = 1 success
Aug 22 09:21:20 bmc systemd[1]: catalina-sys-init.service: Deactivated successfully.
Aug 22 09:21:20 bmc systemd[1]: Finished Catalina Early System Init.
```
Change-Id: I5284b119ff0d6064f421ddb068132440967406d1
Signed-off-by: Potin Lai <potin.lai@quantatw.com>
diff --git a/meta-facebook/meta-catalina/recipes-catalina/plat-svc/files/catalina-early-sys-init b/meta-facebook/meta-catalina/recipes-catalina/plat-svc/files/catalina-early-sys-init
index 2037f89..4f6191b 100644
--- a/meta-facebook/meta-catalina/recipes-catalina/plat-svc/files/catalina-early-sys-init
+++ b/meta-facebook/meta-catalina/recipes-catalina/plat-svc/files/catalina-early-sys-init
@@ -7,16 +7,16 @@
# Workaround
# rebind PDB i2c mux
-echo 1-0070 > /sys/bus/i2c/drivers/pca954x/bind
+bind_i2c_device pca954x 1-0070
# rebind PDB Fan IC
-echo 18-0021 > /sys/bus/i2c/drivers/max31790/bind
-echo 18-0027 > /sys/bus/i2c/drivers/max31790/bind
+bind_i2c_device max31790 18-0021
+bind_i2c_device max31790 18-0027
# rebind PDB FRU
-echo 21-0054 > /sys/bus/i2c/drivers/at24/bind
+bind_i2c_device at24 21-0054
+bind_i2c_device at24 21-0054
# rebind OSFP FRU
-echo 22-0051 > /sys/bus/i2c/drivers/at24/bind
+bind_i2c_device at24 22-0051
# rebind FIO FRU
-echo 23-0053 > /sys/bus/i2c/drivers/at24/bind
-
+bind_i2c_device at24 23-0053
exit 0
diff --git a/meta-facebook/meta-catalina/recipes-catalina/plat-svc/files/standby-power-enable b/meta-facebook/meta-catalina/recipes-catalina/plat-svc/files/standby-power-enable
index f5987b0..72cbd19 100644
--- a/meta-facebook/meta-catalina/recipes-catalina/plat-svc/files/standby-power-enable
+++ b/meta-facebook/meta-catalina/recipes-catalina/plat-svc/files/standby-power-enable
@@ -40,58 +40,58 @@
{
# Module 0 I2C Mux
# i2c24 - i2c27
- echo "0-0071" > /sys/bus/i2c/drivers/pca954x/bind
+ bind_i2c_device pca954x 0-0071
# i2c28 - i2c31
- echo "0-0072" > /sys/bus/i2c/drivers/pca954x/bind
+ bind_i2c_device pca954x 0-0072
# i2c32 - i2c35
- echo "0-0073" > /sys/bus/i2c/drivers/pca954x/bind
+ bind_i2c_device pca954x 0-0073
# Module 1 I2C Mux
# i2c36 - i2c39
- echo "0-0075" > /sys/bus/i2c/drivers/pca954x/bind
+ bind_i2c_device pca954x 0-0075
# i2c40 - i2c43
- echo "0-0076" > /sys/bus/i2c/drivers/pca954x/bind
+ bind_i2c_device pca954x 0-0076
# i2c44 - i2c47
- echo "0-0077" > /sys/bus/i2c/drivers/pca954x/bind
+ bind_i2c_device pca954x 0-0077
# HDD Board I2C Mux, i2c48 - i2c55
- echo "30-0070" > /sys/bus/i2c/drivers/pca954x/bind
+ bind_i2c_device pca954x 30-0070
}
bind_gpio_expanders()
{
# Module 0 IOEXP
- echo "2-0020" > /sys/bus/i2c/drivers/pca953x/bind
+ bind_i2c_device pca953x 2-0020
# Module 1 IOEXP
- echo "2-0021" > /sys/bus/i2c/drivers/pca953x/bind
+ bind_i2c_device pca953x 2-0021
# HMC IOEXP
- echo "2-0027" > /sys/bus/i2c/drivers/pca953x/bind
+ bind_i2c_device pca953x 2-0027
# BMC IOEXP
- echo "6-0021" > /sys/bus/i2c/drivers/pca953x/bind
+ bind_i2c_device pca953x 6-0021
# IO Mezz 0 IOEXP
- echo "29-0020" > /sys/bus/i2c/drivers/pca953x/bind
+ bind_i2c_device pca953x 29-0020
# IO Mezz 1 IOEXP
- echo "41-0021" > /sys/bus/i2c/drivers/pca953x/bind
+ bind_i2c_device pca953x 41-0021
}
bind_fru_eeproms()
{
# Module 0 FRU
- echo "13-0050" /sys/bus/i2c/drivers/at24/bind
+ bind_i2c_device at24 13-0050
# Module 1 FRU
- echo "12-0050" /sys/bus/i2c/drivers/at24/bind
+ bind_i2c_device at24 12-0050
# HMC FRU
- echo "13-0057" /sys/bus/i2c/drivers/at24/bind
+ bind_i2c_device at24 13-0057
# Left CBC FRU
- echo "13-0054" /sys/bus/i2c/drivers/at24/bind
+ bind_i2c_device at24 13-0054
# Right CBC FRU
- echo "13-0055" /sys/bus/i2c/drivers/at24/bind
+ bind_i2c_device at24 13-0055
# IO Mezz 0 FRU
- echo "29-0050" /sys/bus/i2c/drivers/at24/bind
+ bind_i2c_device at24 29-0050
# IO Mezz 1 FRU
- echo "41-0050" /sys/bus/i2c/drivers/at24/bind
+ bind_i2c_device at24 41-0050
# HDD Board FRU
- echo "54-0052" /sys/bus/i2c/drivers/at24/bind
+ bind_i2c_device at24 54-0052
}
reset_host_usb()
diff --git a/meta-facebook/recipes-fb/obmc_functions/files/fb-common-functions b/meta-facebook/recipes-fb/obmc_functions/files/fb-common-functions
index b04332a..d073b66 100644
--- a/meta-facebook/recipes-fb/obmc_functions/files/fb-common-functions
+++ b/meta-facebook/recipes-fb/obmc_functions/files/fb-common-functions
@@ -37,3 +37,15 @@
echo " success"
return 0
}
+
+bind_i2c_device()
+{
+ DRIVER_NAME="$1"
+ DEV_BUS_ADDR="$2"
+ DRIVER_DIR_PATH="/sys/bus/i2c/drivers/${DRIVER_NAME}"
+ DRIVER_BIND_PATH="${DRIVER_DIR_PATH}/bind"
+ if [ ! -L "${DRIVER_DIR_PATH}/${DEV_BUS_ADDR}" ]; then
+ echo "bind_i2c_device: $DRIVER_NAME, $DEV_BUS_ADDR"
+ echo "${DEV_BUS_ADDR}" > "${DRIVER_BIND_PATH}"
+ fi
+}