1#!/bin/bash 2 3# shellcheck source=meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-platform-init/gpio-lib.sh 4source /usr/sbin/gpio-lib.sh 5 6function bind_rtc_driver() { 7 # If rtc device can not present, bind the device 8 if [[ ! -e /dev/rtc0 ]]; then 9 echo "Bind rtc driver" 10 echo 6-0051 > /sys/bus/i2c/drivers/rtc-pcf85063/bind 11 fi 12} 13 14function pre-platform-init() { 15 echo "Do pre platform init" 16} 17 18function post-platform-init() { 19 20 # When BMC is rebooted, because PSON_L has pull up to P3V3_STB, it changes its 21 # value to HIGH. Add code to check P3V3_STB and recover PSON_L to correct state 22 # before setting BMC_RDY. 23 cnt=10 24 pgood="" 25 while [ $cnt -gt 0 ]; 26 do 27 pgood=$(busctl get-property org.openbmc.control.Power /org/openbmc/control/power0 org.openbmc.control.Power pgood | cut -d' ' -f2) 28 if [[ "$pgood" != '' ]]; then 29 break; 30 fi 31 cnt=$(( cnt - 1 )) 32 sleep 1 33 done 34 35 if [ "$pgood" == '1' ]; then 36 echo "PSU is on. Setting PSON to 0" 37 gpio_name_set power-chassis-control 0 38 else 39 echo "pgood D-Bus property response as 0. PSU is off." 40 # for unknown reason when stress reboot bmc power-control.exe detect power-chassis-good is 1 (power on) 41 # But "busctl get-property org.openbmc.control.Power /org/openbmc/control/power0 org.openbmc.control.Power pgood" responses 0 (power off) 42 # Add sleep 3 seconds after the pgood dbus reponse (power off) and recheck the power-chassis-good to confirm about the PSU power state 43 sleep 3 44 pgood=$(gpio_name_get power-chassis-good) 45 if [ "$pgood" == '0' ]; then 46 echo "power-chassis-good reponse as 0. Confirm PSU is off. Setting PSON to 1." 47 gpio_name_set power-chassis-control 1 48 fi 49 fi 50 gpio_name_set host0-sysreset-n 1 51 52 # gpio-leds is controlling bmc-ready, not by gpio 53 echo 1 > /sys/class/leds/bmc-ready/brightness 54 55 echo "Set default FAN speed to 60%" 56 for filename in /sys/class/hwmon/*/pwm* 57 do 58 echo 153 > "$filename" 59 done 60 61 # Bind rtc driver 62 bind_rtc_driver 63} 64 65export output_high_gpios_in_ac=( 66 # add device enable, mux setting, device select gpios 67 "spi0-backup-sel" 68 "i2c-backup-sel" 69) 70 71export output_low_gpios_in_ac=( 72 # add device enable, mux setting, device select gpios 73 "spi0-program-sel" 74 "ocp-main-pwren" 75) 76 77export input_gpios_in_ac=( 78 # add device enable, mux setting, device select gpios 79) 80 81export output_high_gpios_in_bmc_reboot=( 82 "host0-sysreset-n" 83 "host0-pmin-n" 84 "bmc-debug-mode" 85 "vrd-sel" 86 "spd-sel" 87 "ext-high-temp-n" 88 "fpga-program-b" 89 "wd-disable-n" 90 "hpm-stby-rst-n" 91 "jtag-sel-s0" 92 "cpld-user-mode" 93 "jtag-srst-n" 94 "host0-shd-req-n" 95) 96 97export output_low_gpios_in_bmc_reboot=( 98 "rtc-battery-voltage-read-enable" 99 "s0-rtc-lock" 100 "hpm-fw-recovery" 101 "led-fault" 102 "spi-nor-access" 103 "host0-special-boot" 104) 105 106export input_gpios_in_bmc_reboot=( 107 "s0-vrd-fault-n" 108 "s1-vrd-fault-n" 109 "irq-n" 110 "presence-ps0" 111 "presence-ps1" 112 "hsc-12vmain-alt2-n" 113 "eth-phy-int-n" 114 "s0-pcp-oc-warn-n" 115 "s1-pcp-oc-warn-n" 116 "cpu-bios-recover" 117 "s0-heartbeat" 118 "hs-scout-proc-hot" 119 "s0-vr-hot-n" 120 "s1-vr-hot-n" 121 "hsc-12vmain-alt1-n" 122 "power-chassis-good" 123 "s0-ddr-save" 124 "soc-spi-nor-access" 125 "presence-cpu0" 126 "jtag-dbgr-prsnt-n" 127 "ps0-ac-loss-n" 128 "ps1-ac-loss-n" 129 "s1-ddr-save" 130 "sys-pgood" 131 "presence-cpu1" 132 "s0-fault-alert" 133 "s0-sys-auth-failure-n" 134 "host0-ready" 135 "ocp-pgood" 136 "s1-fault-alert" 137 "s1-fw-boot-ok" 138 "s0-spi-auth-fail-n" 139 "s1-sys-auth-failure-n" 140 "cpld-s1-spi-auth-fail-n" 141 "ps0-pgood" 142 "ps1-pgood" 143 "s0-soc-pgood" 144) 145