13f1e6370SPotin Lai#!/bin/bash 23f1e6370SPotin Lai# shellcheck source=meta-facebook/recipes-fb/obmc_functions/files/fb-common-functions 33f1e6370SPotin Laisource /usr/libexec/fb-common-functions 43f1e6370SPotin Lai 53f1e6370SPotin LaiGPIO_HIGH=1 63f1e6370SPotin LaiGPIO_LOW=0 73f1e6370SPotin Lai 83f1e6370SPotin Laiwait_gpio_value() 93f1e6370SPotin Lai{ 103f1e6370SPotin Lai local net_name=$1 113f1e6370SPotin Lai local max_retries=$3 123f1e6370SPotin Lai local delay_secs=$4 133f1e6370SPotin Lai local expd_val=$2 143f1e6370SPotin Lai 153f1e6370SPotin Lai local gpio_val=0 163f1e6370SPotin Lai local trycnt=1 173f1e6370SPotin Lai 183f1e6370SPotin Lai until [[ $gpio_val -gt 0 || $trycnt -gt $max_retries ]] 193f1e6370SPotin Lai do 203f1e6370SPotin Lai gpio_val=$(get_gpio "$net_name") 213f1e6370SPotin Lai rc=$? 223f1e6370SPotin Lai if [[ $rc -ne 0 ]]; then 233f1e6370SPotin Lai err_msg="Unable to read $net_name" 243f1e6370SPotin Lai echo "$err_msg" 253f1e6370SPotin Lai return 1 263f1e6370SPotin Lai fi 273f1e6370SPotin Lai if [[ $gpio_val -eq $expd_val ]]; then 283f1e6370SPotin Lai return 0 293f1e6370SPotin Lai fi 303f1e6370SPotin Lai sleep "$delay_secs" 313f1e6370SPotin Lai ((trycnt++)) 323f1e6370SPotin Lai done 333f1e6370SPotin Lai 343f1e6370SPotin Lai err_msg="wait_gpio_value failed, gpio_val=$gpio_val, exp_val=$expd_val" 353f1e6370SPotin Lai echo "$err_msg" 363f1e6370SPotin Lai return 1 373f1e6370SPotin Lai} 383f1e6370SPotin Lai 393f1e6370SPotin Laibind_i2c_muxes() 403f1e6370SPotin Lai{ 413f1e6370SPotin Lai # Module 0 I2C Mux 423f1e6370SPotin Lai # i2c24 - i2c27 433f1e6370SPotin Lai echo "0-0071" > /sys/bus/i2c/drivers/pca954x/bind 443f1e6370SPotin Lai # i2c28 - i2c31 453f1e6370SPotin Lai echo "0-0072" > /sys/bus/i2c/drivers/pca954x/bind 463f1e6370SPotin Lai # i2c32 - i2c35 473f1e6370SPotin Lai echo "0-0073" > /sys/bus/i2c/drivers/pca954x/bind 483f1e6370SPotin Lai 493f1e6370SPotin Lai # Module 1 I2C Mux 503f1e6370SPotin Lai # i2c36 - i2c39 513f1e6370SPotin Lai echo "0-0075" > /sys/bus/i2c/drivers/pca954x/bind 523f1e6370SPotin Lai # i2c40 - i2c43 533f1e6370SPotin Lai echo "0-0076" > /sys/bus/i2c/drivers/pca954x/bind 543f1e6370SPotin Lai # i2c44 - i2c47 553f1e6370SPotin Lai echo "0-0077" > /sys/bus/i2c/drivers/pca954x/bind 563f1e6370SPotin Lai 573f1e6370SPotin Lai # HDD Board I2C Mux, i2c48 - i2c55 58*4ce60f98SPotin Lai echo "30-0070" > /sys/bus/i2c/drivers/pca954x/bind 593f1e6370SPotin Lai} 603f1e6370SPotin Lai 613f1e6370SPotin Laibind_gpio_expanders() 623f1e6370SPotin Lai{ 633f1e6370SPotin Lai # Module 0 IOEXP 643f1e6370SPotin Lai echo "2-0020" > /sys/bus/i2c/drivers/pca953x/bind 653f1e6370SPotin Lai # Module 1 IOEXP 663f1e6370SPotin Lai echo "2-0021" > /sys/bus/i2c/drivers/pca953x/bind 673f1e6370SPotin Lai # HMC IOEXP 683f1e6370SPotin Lai echo "2-0027" > /sys/bus/i2c/drivers/pca953x/bind 693f1e6370SPotin Lai # BMC IOEXP 703f1e6370SPotin Lai echo "6-0021" > /sys/bus/i2c/drivers/pca953x/bind 713f1e6370SPotin Lai # IO Mezz 0 IOEXP 723f1e6370SPotin Lai echo "29-0020" > /sys/bus/i2c/drivers/pca953x/bind 733f1e6370SPotin Lai # IO Mezz 1 IOEXP 743f1e6370SPotin Lai echo "41-0021" > /sys/bus/i2c/drivers/pca953x/bind 753f1e6370SPotin Lai} 763f1e6370SPotin Lai 773f1e6370SPotin Laibind_fru_eeproms() 783f1e6370SPotin Lai{ 793f1e6370SPotin Lai # Module 0 FRU 803f1e6370SPotin Lai echo "13-0050" /sys/bus/i2c/drivers/at24/bind 813f1e6370SPotin Lai # Module 1 FRU 823f1e6370SPotin Lai echo "12-0050" /sys/bus/i2c/drivers/at24/bind 833f1e6370SPotin Lai # HMC FRU 843f1e6370SPotin Lai echo "13-0057" /sys/bus/i2c/drivers/at24/bind 853f1e6370SPotin Lai # Left CBC FRU 863f1e6370SPotin Lai echo "13-0054" /sys/bus/i2c/drivers/at24/bind 873f1e6370SPotin Lai # Right CBC FRU 883f1e6370SPotin Lai echo "13-0055" /sys/bus/i2c/drivers/at24/bind 893f1e6370SPotin Lai # IO Mezz 0 FRU 903f1e6370SPotin Lai echo "29-0050" /sys/bus/i2c/drivers/at24/bind 913f1e6370SPotin Lai # IO Mezz 1 FRU 923f1e6370SPotin Lai echo "41-0050" /sys/bus/i2c/drivers/at24/bind 93*4ce60f98SPotin Lai # HDD Board FRU 94*4ce60f98SPotin Lai echo "54-0052" /sys/bus/i2c/drivers/at24/bind 953f1e6370SPotin Lai} 963f1e6370SPotin Lai 973f1e6370SPotin Laireset_host_usb() 983f1e6370SPotin Lai{ 993f1e6370SPotin Lai set_gpio "USB_HUB_RESET_L" "$GPIO_LOW" 1003f1e6370SPotin Lai sleep 1 1013f1e6370SPotin Lai set_gpio "USB_HUB_RESET_L" "$GPIO_HIGH" 1023f1e6370SPotin Lai} 1033f1e6370SPotin Lai 1043f1e6370SPotin Lairebind_hmc_usb_network() 1053f1e6370SPotin Lai{ 1063f1e6370SPotin Lai echo 1e6a1000.usb > /sys/bus/platform/drivers/ehci-platform/unbind 1073f1e6370SPotin Lai echo 1e6a1000.usb > /sys/bus/platform/drivers/ehci-platform/bind 1083f1e6370SPotin Lai} 1093f1e6370SPotin Lai 1103f1e6370SPotin Laiis_stby_good() 1113f1e6370SPotin Lai{ 1123f1e6370SPotin Lai local gpio_val 1133f1e6370SPotin Lai 1143f1e6370SPotin Lai if ! gpio_val=$(get_gpio "STBY_POWER_PG_3V3"); then 1153f1e6370SPotin Lai return 1 1163f1e6370SPotin Lai fi 1173f1e6370SPotin Lai 1183f1e6370SPotin Lai if [[ $gpio_val -eq 0 ]]; then 1193f1e6370SPotin Lai return 1 1203f1e6370SPotin Lai fi 1213f1e6370SPotin Lai 1223f1e6370SPotin Lai return 0 1233f1e6370SPotin Lai} 1243f1e6370SPotin Lai 1253f1e6370SPotin Laiset_bmc_ready() 1263f1e6370SPotin Lai{ 1273f1e6370SPotin Lai local bmc_ready="/sys/class/leds/bmc_ready_noled/brightness" 1283f1e6370SPotin Lai local bmc_ready_cpld="/sys/class/leds/bmc_ready_cpld_noled/brightness" 1293f1e6370SPotin Lai 1303f1e6370SPotin Lai echo 1 > ${bmc_ready} 1313f1e6370SPotin Lai echo 1 > ${bmc_ready_cpld} 1323f1e6370SPotin Lai return 0 1333f1e6370SPotin Lai} 1343f1e6370SPotin Lai 1353f1e6370SPotin Laiif ! is_stby_good; then 1363f1e6370SPotin Lai set_gpio "SCM_HPM_STBY_RST_N" "$GPIO_LOW" 1373f1e6370SPotin Laifi 1383f1e6370SPotin Lai 1393f1e6370SPotin Laiset_gpio "SCM_HPM_STBY_EN" "$GPIO_HIGH" 1403f1e6370SPotin Laiset_gpio "stby_power_en_cpld" "$GPIO_HIGH" 1413f1e6370SPotin Laiif ! wait_gpio_value "STBY_POWER_PG_3V3" "$GPIO_HIGH" 20 1; then 1423f1e6370SPotin Lai echo "Error: failed to get STBY_POWER_PG_3V3 as high (1) in 20 sec" 1433f1e6370SPotin Lai exit 1 1443f1e6370SPotin Laifi 1453f1e6370SPotin Laiset_gpio "stby_power_gd_cpld" "$GPIO_HIGH" 1463f1e6370SPotin Lai 1473f1e6370SPotin Laibind_i2c_muxes 1483f1e6370SPotin Laibind_gpio_expanders 1493f1e6370SPotin Lai 1503f1e6370SPotin Laiset_gpio "BMC_12V_CTRL" "$GPIO_HIGH" 1513f1e6370SPotin Laireset_host_usb 1523f1e6370SPotin Lai 1533f1e6370SPotin Laiset_gpio "HMC_PGOOD" "$GPIO_HIGH" 1543f1e6370SPotin Laiset_gpio "EROT_FPGA_RST_L" "$GPIO_HIGH" 1553f1e6370SPotin Laiset_gpio "SEC_EROT_FPGA_RST_L" "$GPIO_HIGH" 1563f1e6370SPotin Laiset_gpio "HMC_EROT_RST_L" "$GPIO_HIGH" 1573f1e6370SPotin Laiset_gpio "SCM_HPM_STBY_RST_N" "$GPIO_HIGH" 1583f1e6370SPotin Lai 1593f1e6370SPotin Laiif ! wait_gpio_value "HMC_READY" "$GPIO_HIGH" 180 1; then 1603f1e6370SPotin Lai echo "Error: failed to get HMC_READY as high (1) in 180 sec" 1613f1e6370SPotin Lai exit 1 1623f1e6370SPotin Laifi 1633f1e6370SPotin Lai 1643f1e6370SPotin Lairebind_hmc_usb_network 1653f1e6370SPotin Lai 1663f1e6370SPotin Laiif ! wait_gpio_value "FPGA_READY_BMC" "$GPIO_HIGH" 180 1; then 1673f1e6370SPotin Lai echo "Error: failed to get FPGA_READY_BMC as high (1) in 180 sec" 1683f1e6370SPotin Lai exit 1 1693f1e6370SPotin Laifi 1703f1e6370SPotin Lai 1713f1e6370SPotin Laibind_fru_eeproms 1723f1e6370SPotin Laiset_bmc_ready 1733f1e6370SPotin Lai 1743f1e6370SPotin Laiexit 0 175