diff options
author | Charles Boyer <Charles.Boyer@fii-usa.com> | 2022-02-09 17:32:22 +0300 |
---|---|---|
committer | Charles Boyer <Charles.Boyer@fii-usa.com> | 2022-04-21 21:37:36 +0300 |
commit | d7d3423ca60a040efcd61db301eea48c5f6635f4 (patch) | |
tree | 7e2cc147f52905789f9012f58b08f267052f0e51 /meta-fii | |
parent | 65ab13e0ec825b88e8fb32195127dee1cba2d579 (diff) | |
download | openbmc-d7d3423ca60a040efcd61db301eea48c5f6635f4.tar.xz |
meta-fii: meta-kudo: Use GPIO line names instead of number
Replaces hard-coded GPIO throughout the Kudo layer with a reference
to its line name from DTS.
The process to dynamically obtain the GPIO number for Get is added
to kudo-lib.sh,
1. Use `gpiofind <Line Name>` to obtain gpiochip# and pin#
2. If the gpiochip# exceeds the number of GPIO banks of Nuvoton,
then it is an I/O Expander.
a. Use `gpiodetect` and extract the I2C bus-addr
b. Obtain GPIO base value from sysfs using bus-addr
c. The GPIO number is then the (base + pin#)
3. If the gpiochip# is within Nuvoton GPIO banks, then calculate
the GPIO number as ((gpiochip#)*32 + pin#)
Then the GPIO number can be used in the export to obtain the value.
Tested with Nuvoton:
- Can read/set Nuvoton GPIO with defined line names
- Can read/set GPIO from I/O Expanders with defined line names
Signed-off-by: Charles Boyer <Charles.Boyer@fii-usa.com>
Change-Id: I651c0707a8bbc170d3c5a5fc261e5f9c62453e9f
Diffstat (limited to 'meta-fii')
6 files changed, 118 insertions, 100 deletions
diff --git a/meta-fii/meta-kudo/recipes-kudo/host/files/ampere_power_util.sh b/meta-fii/meta-kudo/recipes-kudo/host/files/ampere_power_util.sh index 8b2ce0b2d8..934af16d43 100644 --- a/meta-fii/meta-kudo/recipes-kudo/host/files/ampere_power_util.sh +++ b/meta-fii/meta-kudo/recipes-kudo/host/files/ampere_power_util.sh @@ -16,9 +16,9 @@ hotswap() { force_off() { echo "Powering down Server" - set_gpio_ctrl 203 out 1 + set_gpio_ctrl POWER_OUT 1 sleep 6 - set_gpio_ctrl 203 out 0 + set_gpio_ctrl POWER_OUT 0 } power_off() { @@ -29,9 +29,9 @@ power_off() { power_on() { echo "Powering on Server" - set_gpio_ctrl 203 out 1 + set_gpio_ctrl POWER_OUT 1 sleep 1 - set_gpio_ctrl 203 out 0 + set_gpio_ctrl POWER_OUT 0 busctl set-property xyz.openbmc_project.State.Chassis /xyz/openbmc_project/state/chassis0 xyz.openbmc_project.State.Chassis RequestedPowerTransition s xyz.openbmc_project.State.Chassis.Transition.On } @@ -45,8 +45,8 @@ power_status() { } host_status() { - BOOT_OK=$(get_gpio_ctrl 194) - S5_N=$(get_gpio_ctrl 204) + BOOT_OK=$(get_gpio_ctrl S0_FW_BOOT_OK) + S5_N=$(get_gpio_ctrl S0_SLPS5_N) if [ "$S5_N" == 1 ] || [ "$BOOT_OK" == 1 ]; then echo "on" else @@ -66,9 +66,9 @@ graceful_shutdown() { echo "Triggering graceful shutdown" mkdir /run/openbmc timestamp > "/run/openbmc/host@0-shutdown-req-time" - set_gpio_ctrl 70 out 0 + set_gpio_ctrl S0_SHD_REQ 0 sleep 3 - set_gpio_ctrl 70 out 1 + set_gpio_ctrl S0_SHD_REQ 1 fi } @@ -76,9 +76,9 @@ host_reset() { if [ "$(host_status)" == "on" ]; then echo "Triggering sysreset pin" busctl set-property xyz.openbmc_project.Watchdog /xyz/openbmc_project/watchdog/host0 xyz.openbmc_project.State.Watchdog ExpireAction s xyz.openbmc_project.State.Watchdog.Action.None - set_gpio_ctrl 65 out 0 + set_gpio_ctrl S0_SYSRESET 0 sleep 1 - set_gpio_ctrl 65 out 1 + set_gpio_ctrl S0_SYSRESET 1 else echo "Host is off, cannot reset." fi diff --git a/meta-fii/meta-kudo/recipes-kudo/kudo-fw-utility/kudo-fw/kudo-fw.sh b/meta-fii/meta-kudo/recipes-kudo/kudo-fw-utility/kudo-fw/kudo-fw.sh index 6231aeb49f..6f9ec72208 100644 --- a/meta-fii/meta-kudo/recipes-kudo/kudo-fw-utility/kudo-fw/kudo-fw.sh +++ b/meta-fii/meta-kudo/recipes-kudo/kudo-fw-utility/kudo-fw/kudo-fw.sh @@ -74,23 +74,23 @@ function fwbios() { } function fwbmccpld() { - # BMC_JTAG_MUX_1 #218 0:BMC 1:MB - set_gpio_ctrl 218 out 0 + # BMC_JTAG_MUX_1 0:BMC 1:MB + set_gpio_ctrl MB_JTAG_MUX_SEL 0 if [ "$(loadsvf -d /dev/jtag0 -s $1 -m 0)" -ne 0 ]; then echo "BMC CPLD update failed" >&2 return 1 fi wait - set_gpio_ctrl 218 out 1 + set_gpio_ctrl MB_JTAG_MUX_SEL 1 return 0 } function fwmbcpld() { - # BMC_JTAG_MUX_1 #218 0:BMC 1:MB - # BMC_JTAG_SEL #164 0:BMC 1:CPU - set_gpio_ctrl 218 out 1 - set_gpio_ctrl 164 out 1 + # BMC_JTAG_MUX_1 0:BMC 1:MB + # BMC_JTAG_SEL 0:BMC 1:CPU + set_gpio_ctrl MB_JTAG_MUX_SEL 1 + set_gpio_ctrl BMC_JTAG_MUX_SEL 1 if [ "$(loadsvf -d /dev/jtag0 -s $1 -m 0)" -ne 0 ]; then echo "Mobo CPLD update failed" >&2 return 1 @@ -101,11 +101,11 @@ function fwmbcpld() { } function fwscp() { - # BMC_I2C_BACKUP_SEL #168 0:failover, 1:main - # BMC_CPU_EEPROM_I2C_SEL #85 0:BMC, 1:CPU - scp_eeprom_sel=$(get_gpio_ctrl 168) - set_gpio_ctrl 168 out 1 - set_gpio_ctrl 85 out 0 + # BMC_I2C_BACKUP_SEL 0:failover, 1:main + # BMC_CPU_EEPROM_I2C_SEL 0:BMC, 1:CPU + scp_eeprom_sel=$(get_gpio_ctrl BACKUP_SCP_SEL) + set_gpio_ctrl BACKUP_SCP_SEL 1 + set_gpio_ctrl CPU_EEPROM_SEL 0 #shellcheck disable=SC2010 I2C_BUS_DEV=$(ls -l $devpath/"13-0077/" | grep channel-0 | awk '{ print $11}' | cut -c 8-) if [ "$(ampere_eeprom_prog -b $I2C_BUS_DEV -s 0x50 -p -f $1)" -ne 0 ]; then @@ -113,18 +113,18 @@ function fwscp() { return 1 fi wait - set_gpio_ctrl 85 out 1 - set_gpio_ctrl 168 out "$scp_eeprom_sel" + set_gpio_ctrl CPU_EEPROM_SEL 1 + set_gpio_ctrl BACKUP_SCP_SEL "$scp_eeprom_sel" return 0 } function fwscpback() { - # BMC_I2C_BACKUP_SEL #168 0:failover, 1:main - # BMC_CPU_EEPROM_I2C_SEL #85 0:BMC, 1:CPU - scp_eeprom_sel=$(get_gpio_ctrl 168) - set_gpio_ctrl 168 out 0 - set_gpio_ctrl 85 out 0 + # BMC_I2C_BACKUP_SEL 0:failover, 1:main + # BMC_CPU_EEPROM_I2C_SEL 0:BMC, 1:CPU + scp_eeprom_sel=$(get_gpio_ctrl BACKUP_SCP_SEL) + set_gpio_ctrl BACKUP_SCP_SEL 0 + set_gpio_ctrl CPU_EEPROM_SEL 0 #shellcheck disable=SC2010 I2C_BUS_DEV=$(ls -l $devpath/"13-0077/" | grep channel-0 | awk '{ print $11}' | cut -c 8-) if [ "$(ampere_eeprom_prog -b $I2C_BUS_DEV -s 0x50 -p -f $1)" -ne 0 ]; then @@ -132,8 +132,8 @@ function fwscpback() { return 1 fi wait - set_gpio_ctrl 85 out 1 - set_gpio_ctrl 168 out "$scp_eeprom_sel" + set_gpio_ctrl CPU_EEPROM_SEL 1 + set_gpio_ctrl BACKUP_SCP_SEL "$scp_eeprom_sel" return 0 } diff --git a/meta-fii/meta-kudo/recipes-kudo/kudo-fw-utility/kudo-fw/kudo-lib.sh b/meta-fii/meta-kudo/recipes-kudo/kudo-fw-utility/kudo-fw/kudo-lib.sh index 503e413cef..063cc55c9c 100644 --- a/meta-fii/meta-kudo/recipes-kudo/kudo-fw-utility/kudo-fw/kudo-lib.sh +++ b/meta-fii/meta-kudo/recipes-kudo/kudo-fw-utility/kudo-fw/kudo-lib.sh @@ -1,19 +1,38 @@ #!/bin/bash +# get_gpio_num +# Dynamically obtains GPIO number from chip base and I2C expanders through line name +# line-name +function get_gpio_num() { + #shellcheck disable=SC2207 + CHIP_PIN=($(gpiofind "$1" | awk '{print substr ($1, 9 ), $2 }')) + #shellcheck disable=SC2128 + if [ -z "$CHIP_PIN" ]; then + echo "Could not find GPIO with name: $1" + return 1 + fi + + if [ "${CHIP_PIN[0]}" -gt 7 ]; then + BUS_ADDR=$(gpiodetect | grep gpiochip"${CHIP_PIN[0]}" | awk '{print substr($2, 2, length($2) - 2)}') + GPIO_BASE=$(cat /sys/bus/i2c/devices/"$BUS_ADDR"/gpio/*/base) + echo "$((GPIO_BASE+CHIP_PIN[1]))" + else + echo "$((CHIP_PIN[0]*32+CHIP_PIN[1]))" + fi +} + # set_gpio_ctrl -# pin #, direction, high(1)/low(0) +# line-name, high(1)/low(0) function set_gpio_ctrl() { - echo "$1" > /sys/class/gpio/export - echo "$2" > /sys/class//gpio/gpio"$1"/direction - echo "$3" > /sys/class/gpio/gpio"$1"/value - echo "$1" > /sys/class/gpio/unexport - sleep 1 + #shellcheck disable=SC2046 + gpioset $(gpiofind "$1")="$2" } # get_gpio_ctrl -# pin # +# line-name function get_gpio_ctrl() { - echo "$1" > /sys/class/gpio/export - cat /sys/class/gpio/gpio"$1"/value - echo "$1" > /sys/class/gpio/unexport + GPIO_NUM=$(get_gpio_num "$1") + echo "$GPIO_NUM" > /sys/class/gpio/export + cat /sys/class/gpio/gpio"$GPIO_NUM"/value + echo "$GPIO_NUM" > /sys/class/gpio/unexport } diff --git a/meta-fii/meta-kudo/recipes-kudo/kudo-sys-utility/kudo-boot/init_once.sh b/meta-fii/meta-kudo/recipes-kudo/kudo-sys-utility/kudo-boot/init_once.sh index cd80674c21..fa5395d2b0 100644 --- a/meta-fii/meta-kudo/recipes-kudo/kudo-sys-utility/kudo-boot/init_once.sh +++ b/meta-fii/meta-kudo/recipes-kudo/kudo-sys-utility/kudo-boot/init_once.sh @@ -6,17 +6,17 @@ source /usr/libexec/kudo-fw/kudo-lib.sh function set_mux_default(){ # set all mux route to CPU before power on host - # BMC_CPU_RTC_I2C_SEL #120 - set_gpio_ctrl 120 out 1 - # BMC_CPU_DDR_I2C_SEL #84 - set_gpio_ctrl 84 out 1 - # BMC_CPU_EEPROM_I2C_SEL #85 - set_gpio_ctrl 85 out 1 - # BMC_CPU_PMBUS_SEL #86 - set_gpio_ctrl 86 out 1 + # BMC_CPU_RTC_I2C_SEL + set_gpio_ctrl CPU_RTC_SEL 1 + # BMC_CPU_DDR_I2C_SEL + set_gpio_ctrl CPU_DDR_SEL 1 + # BMC_CPU_EEPROM_I2C_SEL + set_gpio_ctrl CPU_EEPROM_SEL 1 + # BMC_CPU_PMBUS_SEL + set_gpio_ctrl CPU_VRD_SEL 1 # LED control - # LED_BMC_LIVE #7 - set_gpio_ctrl 7 out 1 + # LED_BMC_LIVE + set_gpio_ctrl LED_BMC_ALIVE 1 # SPI control # Send command to CPLD to switch the bios spi interface to host @@ -32,27 +32,27 @@ boardver=$(printf '%d' "$(awk '{print $6}' /sys/bus/i2c/drivers/fiicpld/34-0076/ # Set BMC_I2C_BACKUP_SEL to secondary. if [[ $boardver -lt 64 ]]; then echo "EVT system. Choosing secondary SCP EEPROM." - set_gpio_ctrl 168 out 0 + set_gpio_ctrl BACKUP_SCP_SEL 0 set_mux_default # Power control - # S0_BMC_OK, GPIO 69 - set_gpio_ctrl 69 out 1 + # S0_BMC_OK + set_gpio_ctrl S0_BMC_OK 1 else echo "DVT or PVT system" # sleep so that FRU and all ipmitool Devices are ready before HOST OS - # gpio 143 for HPM_STBY_RST_N do to DC-SCM spec - set_gpio_ctrl 143 out 1 # on DVT this became HPM_STBY_RST_N (EVT1 came from CPLD) + # HPM_STBY_RST_N to DC-SCM spec + set_gpio_ctrl HPM_STBY_RST_N 1 # on DVT this became HPM_STBY_RST_N (EVT1 came from CPLD) sleep 5 # for the MUX to get ready set_mux_default # Power control - # S0_BMC_OK, GPIO 69 - set_gpio_ctrl 69 out 1 + # S0_BMC_OK + set_gpio_ctrl S0_BMC_OK 1 fi # Disable CPU 1 CLK when cpu not detected # echo init_once cpu $CPU1_STATUS > /dev/ttyS0 # echo init_once board $boardver > /dev/ttyS0 -CPU1_STATUS_N=$(get_gpio_ctrl 136) +CPU1_STATUS_N=$(get_gpio_ctrl S1_STATUS_N) if [[ $CPU1_STATUS_N == 1 ]]; then #Execute this only on DVT systems if [[ $boardver -lt 64 ]]; then diff --git a/meta-fii/meta-kudo/recipes-kudo/kudo-sys-utility/kudo-cmd/kudo.sh b/meta-fii/meta-kudo/recipes-kudo/kudo-sys-utility/kudo-cmd/kudo.sh index 694c23cc9b..58d0d0e6bb 100644 --- a/meta-fii/meta-kudo/recipes-kudo/kudo-sys-utility/kudo-cmd/kudo.sh +++ b/meta-fii/meta-kudo/recipes-kudo/kudo-sys-utility/kudo-cmd/kudo.sh @@ -45,38 +45,38 @@ function usage() { function reset() { case $1 in hotswap) - # Virtual reset #94 - set_gpio_ctrl 94 out 1 + # Virtual reset + set_gpio_ctrl HOTSWAP 1 ;; system) - # S0 system reset #65 - set_gpio_ctrl 65 out 0 + # S0 system reset + set_gpio_ctrl S0_SYSRESET 0 sleep 1 - set_gpio_ctrl 65 out 1 + set_gpio_ctrl S0_SYSRESET 1 ;; btn) - # power button #203 - set_gpio_ctrl 203 out 1 + # virtual power button + set_gpio_ctrl POWER_OUT 1 sleep 1 - set_gpio_ctrl 203 out 0 + set_gpio_ctrl POWER_OUT 0 ;; shutdown) - # BMC_CPU_SHD_REQ #70 - set_gpio_ctrl 70 out 0 + # BMC_CPU_SHD_REQ + set_gpio_ctrl S0_SHD_REQ 0 sleep 3 - set_gpio_ctrl 70 out 1 + set_gpio_ctrl S0_SHD_REQ 1 ;; forceOff) - # power button #203 - set_gpio_ctrl 203 out 1 + # virtual power button + set_gpio_ctrl POWER_OUT 1 sleep 6 - set_gpio_ctrl 203 out 0 + set_gpio_ctrl POWER_OUT 0 ;; display) - echo "Virtual reset #94" "$(get_gpio_ctrl 94)" - echo "S0 System reset #65" "$(get_gpio_ctrl 65)" - echo "Power Button #203" "$(get_gpio_ctrl 203)" - echo "BMC_CPU SHD Req #70" "$(get_gpio_ctrl 70)" + echo "Virtual reset #$(get_gpio_num HOTSWAP)" "$(get_gpio_ctrl HOTSWAP)" + echo "S0 System reset #$(get_gpio_num S0_SYSRESET)" "$(get_gpio_ctrl S0_SYSRESET)" + echo "Power Button #$(get_gpio_num POWER_OUT)" "$(get_gpio_ctrl POWER_OUT)" + echo "BMC_CPU SHD Req #$(get_gpio_num S0_SHD_REQ)" "$(get_gpio_ctrl S0_SHD_REQ)" ;; *) usage_rst @@ -149,49 +149,49 @@ function uartmux() { fi ;; swhost) - set_gpio_ctrl 167 out 1 + set_gpio_ctrl S0_UART0_BMC_SEL 1 ;; swscp1) - set_gpio_ctrl 161 out 1 - set_gpio_ctrl 177 out 1 - set_gpio_ctrl 198 out 0 + set_gpio_ctrl S0_UART1_BMC_SEL 1 + set_gpio_ctrl S1_UART0_BMC_SEL 1 + set_gpio_ctrl S1_UART1_BMC_SEL 0 ;; swscp2) - set_gpio_ctrl 161 out 1 - set_gpio_ctrl 177 out 1 - set_gpio_ctrl 198 out 1 + set_gpio_ctrl S0_UART1_BMC_SEL 1 + set_gpio_ctrl S1_UART0_BMC_SEL 1 + set_gpio_ctrl S1_UART1_BMC_SEL 1 ;; swhosthr) - set_gpio_ctrl 167 out 0 + set_gpio_ctrl S0_UART0_BMC_SEL 0 ;; swscphr) - set_gpio_ctrl 161 out 0 - set_gpio_ctrl 177 out 0 + set_gpio_ctrl S0_UART1_BMC_SEL 0 + set_gpio_ctrl S1_UART0_BMC_SEL 0 ;; display) - if [ "$(get_gpio_ctrl 167)" -eq 1 ]; then + if [ "$(get_gpio_ctrl S0_UART0_BMC_SEL)" -eq 1 ]; then echo " CPU host to BMC console" else echo " CPU host to header" fi - if [ "$(get_gpio_ctrl 161)" -eq 1 ] && [ "$(get_gpio_ctrl 177)" -eq 1 ]; then - if [ "$(get_gpio_ctrl 198)" -eq 1 ]; then + if [ "$(get_gpio_ctrl S0_UART1_BMC_SEL)" -eq 1 ] && [ "$(get_gpio_ctrl S1_UART0_BMC_SEL)" -eq 1 ]; then + if [ "$(get_gpio_ctrl S1_UART1_BMC_SEL)" -eq 1 ]; then echo " SCP2 host to BMC console" else echo " SCP1 host to BMC console" fi - elif [ "$(get_gpio_ctrl 161)" -eq 0 ] && [ "$(get_gpio_ctrl 177)" -eq 0 ]; then - if [ "$(get_gpio_ctrl 198)" -eq 1 ]; then + elif [ "$(get_gpio_ctrl S0_UART1_BMC_SEL)" -eq 0 ] && [ "$(get_gpio_ctrl S1_UART0_BMC_SEL)" -eq 0 ]; then + if [ "$(get_gpio_ctrl S1_UART1_BMC_SEL)" -eq 1 ]; then echo " SCP2 host to Header" else echo " SCP1 host to Header" fi else echo "It's unknown status" - echo "167" "$(get_gpio_ctrl 167)" - echo "161" "$(get_gpio_ctrl 161)" - echo "177" "$(get_gpio_ctrl 177)" - echo "198" "$(get_gpio_ctrl 198)" + echo "S0_UART0_BMC_SEL $(get_gpio_ctrl S0_UART0_BMC_SEL)" + echo "S0_UART1_BMC_SEL $(get_gpio_ctrl S0_UART1_BMC_SEL)" + echo "S1_UART0_BMC_SEL $(get_gpio_ctrl S1_UART0_BMC_SEL)" + echo "S1_UART1_BMC_SEL $(get_gpio_ctrl S1_UART1_BMC_SEL)" fi ;; *) diff --git a/meta-fii/meta-kudo/recipes-phosphor/console/obmc-console/kudo_uart_mux_ctrl.sh b/meta-fii/meta-kudo/recipes-phosphor/console/obmc-console/kudo_uart_mux_ctrl.sh index b9453391d3..9947483f35 100644 --- a/meta-fii/meta-kudo/recipes-phosphor/console/obmc-console/kudo_uart_mux_ctrl.sh +++ b/meta-fii/meta-kudo/recipes-phosphor/console/obmc-console/kudo_uart_mux_ctrl.sh @@ -31,12 +31,11 @@ echo "Ampere UART MUX CTRL UART port $1 to mode" > /dev/ttyS0 case "$1" in ttyS1) - set_gpio_ctrl 167 out 1 + set_gpio_ctrl S0_UART0_BMC_SEL 1 ;; ttyS3) - set_gpio_ctrl 161 out 1 - set_gpio_ctrl 183 out 1 - set_gpio_ctrl 198 out 0 + set_gpio_ctrl S0_UART1_BMC_SEL 1 + set_gpio_ctrl S1_UART1_BMC_SEL 0 ;; *) echo "Invalid tty passed to $0. Exiting!" > /dev/ttyS0 |