summaryrefslogtreecommitdiff
path: root/meta-fii/meta-kudo/recipes-kudo/kudo-fw-utility
diff options
context:
space:
mode:
authorCharles Boyer <Charles.Boyer@fii-usa.com>2022-02-09 17:32:22 +0300
committerCharles Boyer <Charles.Boyer@fii-usa.com>2022-04-21 21:37:36 +0300
commitd7d3423ca60a040efcd61db301eea48c5f6635f4 (patch)
tree7e2cc147f52905789f9012f58b08f267052f0e51 /meta-fii/meta-kudo/recipes-kudo/kudo-fw-utility
parent65ab13e0ec825b88e8fb32195127dee1cba2d579 (diff)
downloadopenbmc-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/meta-kudo/recipes-kudo/kudo-fw-utility')
-rw-r--r--meta-fii/meta-kudo/recipes-kudo/kudo-fw-utility/kudo-fw/kudo-fw.sh42
-rw-r--r--meta-fii/meta-kudo/recipes-kudo/kudo-fw-utility/kudo-fw/kudo-lib.sh39
2 files changed, 50 insertions, 31 deletions
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
}