blob: f82fe048c431e38cc0edba506972653f0d0654a6 [file] [log] [blame]
XP Chen0e483352021-05-12 09:44:26 -05001#!/bin/bash
2# help information
3
Charles Boyer0dd80062022-03-17 14:57:50 -05004# Provide source directive to shellcheck.
5# shellcheck source=meta-fii/meta-kudo/recipes-kudo/kudo-fw-utility/kudo-fw/kudo-lib.sh
Charles Boyer2adad362021-11-24 15:58:03 -06006source /usr/libexec/kudo-fw/kudo-lib.sh
XP Chen0e483352021-05-12 09:44:26 -05007
8function usage_rst() {
9 echo " kudo rst [parameter]"
10 echo " hotswap --> reset the whole kudo node"
11 echo " system --> reset the host"
12 echo " btn --> trigger a power button event"
13 echo " shutdown --> send out shutdown signal to CPU"
14 echo " display --> "
15}
16
17function usage_led() {
XP Chen0e483352021-05-12 09:44:26 -050018 echo " kudo led 'att'/'boot' [parameter]"
19 echo " on --> change to CPU console"
20 echo " off --> change to CPU 0 SCP console"
21 echo " status --> change to CPU 1 SCP console"
22}
23
24function usage_uart() {
25 echo " kudo uart [parameter]"
Lancelot Kao19bfafb2021-05-25 15:04:57 -050026 echo " host --> show CPU console"
27 echo " scp --> show SCP0 console"
28 echo " swhost --> change to CPU console to ttyS1"
29 echo " swscp1 --> change to CPU 0 SCP console to ttyS3"
30 echo " swscp2 --> change to CPU 1 SCP console"
31 echo " swhosthr --> change CPU console to header"
32 echo " swscphr --> change SCP console to header"
XP Chen0e483352021-05-12 09:44:26 -050033 echo " display --> "
34}
35
36function usage() {
37 echo " kudo BMC console system utilities"
38 echo " kudo [optional] [parameter]"
39 echo " rst --> reset traget device"
40 echo " fw --> get version"
41 echo " uart --> control the uart mux"
42 echo " led --> control the leds"
43}
44
45function reset() {
46 case $1 in
47 hotswap)
Charles Boyerd7d34232022-02-09 08:32:22 -060048 # Virtual reset
49 set_gpio_ctrl HOTSWAP 1
XP Chen0e483352021-05-12 09:44:26 -050050 ;;
51 system)
Charles Boyerd7d34232022-02-09 08:32:22 -060052 # S0 system reset
53 set_gpio_ctrl S0_SYSRESET 0
XP Chen0e483352021-05-12 09:44:26 -050054 sleep 1
Charles Boyerd7d34232022-02-09 08:32:22 -060055 set_gpio_ctrl S0_SYSRESET 1
XP Chen0e483352021-05-12 09:44:26 -050056 ;;
57 btn)
Charles Boyerd7d34232022-02-09 08:32:22 -060058 # virtual power button
59 set_gpio_ctrl POWER_OUT 1
XP Chen0e483352021-05-12 09:44:26 -050060 sleep 1
Charles Boyerd7d34232022-02-09 08:32:22 -060061 set_gpio_ctrl POWER_OUT 0
XP Chen0e483352021-05-12 09:44:26 -050062 ;;
63 shutdown)
Charles Boyerd7d34232022-02-09 08:32:22 -060064 # BMC_CPU_SHD_REQ
65 set_gpio_ctrl S0_SHD_REQ 0
XP Chen0e483352021-05-12 09:44:26 -050066 sleep 3
Charles Boyerd7d34232022-02-09 08:32:22 -060067 set_gpio_ctrl S0_SHD_REQ 1
XP Chen0e483352021-05-12 09:44:26 -050068 ;;
69 forceOff)
Charles Boyerd7d34232022-02-09 08:32:22 -060070 # virtual power button
71 set_gpio_ctrl POWER_OUT 1
XP Chen0e483352021-05-12 09:44:26 -050072 sleep 6
Charles Boyerd7d34232022-02-09 08:32:22 -060073 set_gpio_ctrl POWER_OUT 0
XP Chen0e483352021-05-12 09:44:26 -050074 ;;
75 display)
Charles Boyerd7d34232022-02-09 08:32:22 -060076 echo "Virtual reset #$(get_gpio_num HOTSWAP)" "$(get_gpio_ctrl HOTSWAP)"
77 echo "S0 System reset #$(get_gpio_num S0_SYSRESET)" "$(get_gpio_ctrl S0_SYSRESET)"
78 echo "Power Button #$(get_gpio_num POWER_OUT)" "$(get_gpio_ctrl POWER_OUT)"
79 echo "BMC_CPU SHD Req #$(get_gpio_num S0_SHD_REQ)" "$(get_gpio_ctrl S0_SHD_REQ)"
XP Chen0e483352021-05-12 09:44:26 -050080 ;;
81 *)
82 usage_rst
83 ;;
84 esac
85}
86
87function fw_rev() {
88 BMC_CPLD_VER_FILE="/run/cpld0.version"
89 MB_CPLD_VER_FILE="/run/cpld1.version"
90
Charles Boyer0dd80062022-03-17 14:57:50 -050091 cmd=$(cat ${BMC_CPLD_VER_FILE})
92 echo " BMC_CPLD: " "${cmd}"
93 cmd=$(cat ${MB_CPLD_VER_FILE})
94 echo " MB_CPLD: " "${cmd}"
XP Chen0e483352021-05-12 09:44:26 -050095
XP Chen9d2a1e02021-08-25 16:40:01 -050096 # BMC Version
97
98 # Save VERSION_ID line in string "VERSION_ID=vXX.XX-XX-kudo"
Charles Boyer0dd80062022-03-17 14:57:50 -050099 StringVersion=$(awk '/VERSION_ID/' /etc/os-release)
XP Chen9d2a1e02021-08-25 16:40:01 -0500100
101 #Save Major Version value between v and . "vXX." then convert Hex to Decimal
102 MajorVersion=${StringVersion#*v}
Charles Boyer635aa5e2022-04-19 13:40:43 -0500103 MajorVersion=$(( 10#${MajorVersion%.*}))
XP Chen9d2a1e02021-08-25 16:40:01 -0500104
105 #Save SubMajor Version valeu between . and - ".XX-" then convert Hex to Decimal
Ashwin Muraliba38d482022-03-21 17:00:41 -0500106 SubMajorVersion=${StringVersion##*.}
Charles Boyer635aa5e2022-04-19 13:40:43 -0500107 SubMajorVersion=$(( 10#${SubMajorVersion%%-*}))
XP Chen9d2a1e02021-08-25 16:40:01 -0500108
109 #Save Minor Version value between - and - "-XX-" then convert Hex to Decimal
110 MinorVersion=${StringVersion#*-}
Charles Boyer635aa5e2022-04-19 13:40:43 -0500111 MinorVersion=$(( 10#${MinorVersion%-*}))
XP Chen9d2a1e02021-08-25 16:40:01 -0500112
113 echo " BMC: " ${MajorVersion}.${SubMajorVersion}.${MinorVersion}
XP Chen0e483352021-05-12 09:44:26 -0500114
115 #BMC PWR Sequencer
Charles Boyeraf721712022-02-09 09:17:35 -0600116 i2cset -y -f -a "${I2C_BMC_PWRSEQ[0]}" 0x"${I2C_BMC_PWRSEQ[1]}" 0xfe 0x0000 w
117 cmd=$(i2cget -y -f -a "${I2C_BMC_PWRSEQ[0]}" 0x"${I2C_BMC_PWRSEQ[1]}" 0xfe i 2 | awk '{print substr($0,3)}')
XP Chen0e483352021-05-12 09:44:26 -0500118 echo " BMC PowerSequencer : ${cmd}"
119 #only display with smbios exists
120 if [[ -e /var/lib/smbios/smbios2 ]]; then
121 cmd=$(busctl introspect xyz.openbmc_project.Smbios.MDR_V2 \
122 /xyz/openbmc_project/inventory/system/chassis/motherboard/bios | grep Version | awk '{print $4}')
123 echo " Bios: $cmd"
124 fi
125
Charles Boyeraf721712022-02-09 09:17:35 -0600126 cmd=$(i2cget -f -y "${I2C_S0_SMPRO[0]}" 0x"${I2C_S0_SMPRO[1]}" 0x1 w);
XP Chen0e483352021-05-12 09:44:26 -0500127 echo " SCP Firmware: ${cmd}"
Karthikeyan Sundaram0759c752021-11-24 14:33:55 -0600128 get_scp_eeprom
XP Chen0e483352021-05-12 09:44:26 -0500129
Kyle Niemana28c4af2022-08-08 12:29:17 -0500130 adm1266_ver "${I2C_MB_PWRSEQ1[0]}" | grep REVISION
XP Chen0e483352021-05-12 09:44:26 -0500131
132}
133
134function uartmux() {
135 case $1 in
136 host)
Charles Boyer0dd80062022-03-17 14:57:50 -0500137 if [ "$(tty)" == "/dev/ttyS0" ]; then
Lancelot Kao19bfafb2021-05-25 15:04:57 -0500138 echo "Couldn't redirect to the host console within BMC local console"
139 else
140 echo "Entering Console use 'shift ~~..' to quit"
141 obmc-console-client -c /etc/obmc-console/server.ttyS1.conf
142 fi
143 ;;
144 scp)
Charles Boyer0dd80062022-03-17 14:57:50 -0500145 if [ "$(tty)" == "/dev/ttyS0" ]; then
Lancelot Kao19bfafb2021-05-25 15:04:57 -0500146 echo "Couldn't redirect to the scp console within BMC local console"
147 else
148 echo "Entering Console use 'shift ~~..' to quit"
149 obmc-console-client -c /etc/obmc-console/server.ttyS3.conf
150 fi
151 ;;
152 swhost)
Charles Boyerd7d34232022-02-09 08:32:22 -0600153 set_gpio_ctrl S0_UART0_BMC_SEL 1
XP Chen0e483352021-05-12 09:44:26 -0500154 ;;
Lancelot Kao19bfafb2021-05-25 15:04:57 -0500155 swscp1)
Charles Boyerd7d34232022-02-09 08:32:22 -0600156 set_gpio_ctrl S0_UART1_BMC_SEL 1
157 set_gpio_ctrl S1_UART0_BMC_SEL 1
158 set_gpio_ctrl S1_UART1_BMC_SEL 0
XP Chen0e483352021-05-12 09:44:26 -0500159 ;;
Lancelot Kao19bfafb2021-05-25 15:04:57 -0500160 swscp2)
Charles Boyerd7d34232022-02-09 08:32:22 -0600161 set_gpio_ctrl S0_UART1_BMC_SEL 1
162 set_gpio_ctrl S1_UART0_BMC_SEL 1
163 set_gpio_ctrl S1_UART1_BMC_SEL 1
XP Chen0e483352021-05-12 09:44:26 -0500164 ;;
Lancelot Kao19bfafb2021-05-25 15:04:57 -0500165 swhosthr)
Charles Boyerd7d34232022-02-09 08:32:22 -0600166 set_gpio_ctrl S0_UART0_BMC_SEL 0
XP Chen0e483352021-05-12 09:44:26 -0500167 ;;
Lancelot Kao19bfafb2021-05-25 15:04:57 -0500168 swscphr)
Charles Boyerd7d34232022-02-09 08:32:22 -0600169 set_gpio_ctrl S0_UART1_BMC_SEL 0
170 set_gpio_ctrl S1_UART0_BMC_SEL 0
XP Chen0e483352021-05-12 09:44:26 -0500171 ;;
172 display)
Charles Boyerd7d34232022-02-09 08:32:22 -0600173 if [ "$(get_gpio_ctrl S0_UART0_BMC_SEL)" -eq 1 ]; then
XP Chen0e483352021-05-12 09:44:26 -0500174 echo " CPU host to BMC console"
175 else
176 echo " CPU host to header"
177 fi
Charles Boyerd7d34232022-02-09 08:32:22 -0600178 if [ "$(get_gpio_ctrl S0_UART1_BMC_SEL)" -eq 1 ] && [ "$(get_gpio_ctrl S1_UART0_BMC_SEL)" -eq 1 ]; then
179 if [ "$(get_gpio_ctrl S1_UART1_BMC_SEL)" -eq 1 ]; then
XP Chen0e483352021-05-12 09:44:26 -0500180 echo " SCP2 host to BMC console"
181 else
182 echo " SCP1 host to BMC console"
183 fi
Charles Boyerd7d34232022-02-09 08:32:22 -0600184 elif [ "$(get_gpio_ctrl S0_UART1_BMC_SEL)" -eq 0 ] && [ "$(get_gpio_ctrl S1_UART0_BMC_SEL)" -eq 0 ]; then
185 if [ "$(get_gpio_ctrl S1_UART1_BMC_SEL)" -eq 1 ]; then
XP Chen0e483352021-05-12 09:44:26 -0500186 echo " SCP2 host to Header"
187 else
188 echo " SCP1 host to Header"
189 fi
190 else
191 echo "It's unknown status"
Charles Boyerd7d34232022-02-09 08:32:22 -0600192 echo "S0_UART0_BMC_SEL $(get_gpio_ctrl S0_UART0_BMC_SEL)"
193 echo "S0_UART1_BMC_SEL $(get_gpio_ctrl S0_UART1_BMC_SEL)"
194 echo "S1_UART0_BMC_SEL $(get_gpio_ctrl S1_UART0_BMC_SEL)"
195 echo "S1_UART1_BMC_SEL $(get_gpio_ctrl S1_UART1_BMC_SEL)"
XP Chen0e483352021-05-12 09:44:26 -0500196 fi
197 ;;
198 *)
199 usage_uart
200 ;;
201 esac
202}
203
204function ledtoggle() {
205
Charles Boyeraf721712022-02-09 09:17:35 -0600206 CurrentLED=$( i2cget -y -f -a "${I2C_MB_CPLD[0]}" 0x"${I2C_MB_CPLD[1]}" 0x05 i 1 | cut -d ' ' -f 2)
XP Chen0e483352021-05-12 09:44:26 -0500207 case $1 in
208 boot)
Charles Boyer0dd80062022-03-17 14:57:50 -0500209 cmd=$(((CurrentLED & 0x40) != 0))
XP Chen0e483352021-05-12 09:44:26 -0500210 case $2 in
211 on)
212 #turn on LED
213 if [[ $cmd -eq 0 ]]; then
Charles Boyer0dd80062022-03-17 14:57:50 -0500214 setValue=$(( 0x40 + CurrentLED ))
Charles Boyeraf721712022-02-09 09:17:35 -0600215 i2cset -y -f -a "${I2C_MB_CPLD[0]}" 0x"${I2C_MB_CPLD[1]}" 0x10 $setValue
XP Chen0e483352021-05-12 09:44:26 -0500216 fi
217 ;;
218 off)
219 #turn off led
220 if [[ $cmd -eq 1 ]]; then
Charles Boyer0dd80062022-03-17 14:57:50 -0500221 setValue=$(( 0x80 & CurrentLED ))
Charles Boyeraf721712022-02-09 09:17:35 -0600222 i2cset -y -f -a "${I2C_MB_CPLD[0]}" 0x"${I2C_MB_CPLD[1]}" 0x10 $setValue
XP Chen0e483352021-05-12 09:44:26 -0500223 fi
224 ;;
225 toggle)
226 #turn on LED
Charles Boyer0dd80062022-03-17 14:57:50 -0500227 setValue=$(( 0x40 ^ CurrentLED ))
Charles Boyeraf721712022-02-09 09:17:35 -0600228 i2cset -y -f -a "${I2C_MB_CPLD[0]}" 0x"${I2C_MB_CPLD[1]}" 0x10 $setValue
XP Chen0e483352021-05-12 09:44:26 -0500229 ;;
230 status)
231 #displayLED status
232 if [[ $cmd -eq 1 ]]; then
233 echo "on"
234 else
235 echo "off"
236 fi
237 ;;
238 *)
239 usage_led
240 ;;
241 esac
242 ;;
243 att)
Charles Boyer0dd80062022-03-17 14:57:50 -0500244 cmd=$(((CurrentLED & 0x80) != 0))
XP Chen0e483352021-05-12 09:44:26 -0500245 case $2 in
246 on)
247 #turn on LED
248 if [[ $cmd -eq 0 ]]; then
Charles Boyer0dd80062022-03-17 14:57:50 -0500249 setValue=$(( 0x80 + CurrentLED ))
Charles Boyeraf721712022-02-09 09:17:35 -0600250 i2cset -y -f -a "${I2C_MB_CPLD[0]}" 0x"${I2C_MB_CPLD[1]}" 0x10 $setValue
XP Chen0e483352021-05-12 09:44:26 -0500251 fi
252 ;;
253 off)
254 #turn off led
255 if [[ $cmd -eq 1 ]]; then
Charles Boyer0dd80062022-03-17 14:57:50 -0500256 setValue=$(( 0x40 & CurrentLED ))
Charles Boyeraf721712022-02-09 09:17:35 -0600257 i2cset -y -f -a "${I2C_MB_CPLD[0]}" 0x"${I2C_MB_CPLD[1]}" 0x10 $setValue
XP Chen0e483352021-05-12 09:44:26 -0500258 fi
259 ;;
260 toggle)
261 #turn on LED
Charles Boyer0dd80062022-03-17 14:57:50 -0500262 setValue=$(( 0x80 ^ CurrentLED ))
Charles Boyeraf721712022-02-09 09:17:35 -0600263 i2cset -y -f -a "${I2C_MB_CPLD[0]}" 0x"${I2C_MB_CPLD[1]}" 0x10 $setValue
XP Chen0e483352021-05-12 09:44:26 -0500264 ;;
265 status)
266 #displayLED status
267 if [[ $cmd -eq 1 ]]; then
268 echo "on"
269 else
270 echo "off"
271 fi
272 ;;
273 *)
274 usage_led
275 ;;
276 esac
277 ;;
278 *)
279 usage_led
280 ;;
281 esac
282}
283
284function usblist() {
285 for i in {0..8}
286 do
Charles Boyer0dd80062022-03-17 14:57:50 -0500287 cmd=$(devmem 0xf083"${i}"154)
288 printf "udc%d : 0xF803%d154-" "${i}" "${i}"
XP Chen0e483352021-05-12 09:44:26 -0500289 $cmd
290 done
291}
292
293case $1 in
294 rst)
Charles Boyer0dd80062022-03-17 14:57:50 -0500295 reset "$2"
XP Chen0e483352021-05-12 09:44:26 -0500296 ;;
297 fw)
298 fw_rev
299 ;;
300 uart)
Charles Boyer0dd80062022-03-17 14:57:50 -0500301 uartmux "$2"
XP Chen0e483352021-05-12 09:44:26 -0500302 ;;
303 usb)
304 usblist
305 ;;
306 led)
Charles Boyer0dd80062022-03-17 14:57:50 -0500307 ledtoggle "$2" "$3"
XP Chen0e483352021-05-12 09:44:26 -0500308 ;;
309 *)
310 usage
311 ;;
312esac