diff options
Diffstat (limited to 'meta-ampere/meta-jade/recipes-ampere/flash/ampere-flash-utils/ampere_flash_bios.sh')
-rwxr-xr-x | meta-ampere/meta-jade/recipes-ampere/flash/ampere-flash-utils/ampere_flash_bios.sh | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/meta-ampere/meta-jade/recipes-ampere/flash/ampere-flash-utils/ampere_flash_bios.sh b/meta-ampere/meta-jade/recipes-ampere/flash/ampere-flash-utils/ampere_flash_bios.sh new file mode 100755 index 0000000000..876671c1bb --- /dev/null +++ b/meta-ampere/meta-jade/recipes-ampere/flash/ampere-flash-utils/ampere_flash_bios.sh @@ -0,0 +1,103 @@ +#!/bin/bash +# +# Copyright (c) 2021 Ampere Computing LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +do_flash () { + # Check the PNOR partition available + HOST_MTD=$(cat /proc/mtd | grep "pnor" | sed -n 's/^\(.*\):.*/\1/p') + if [ -z "$HOST_MTD" ]; + then + # If the PNOR partition is not available, then bind again driver + echo "--- Bind the ASpeed SMC driver" + echo 1e630000.spi > /sys/bus/platform/drivers/aspeed-smc/bind + sleep 2 + + HOST_MTD=$(cat /proc/mtd | grep "pnor" | sed -n 's/^\(.*\):.*/\1/p') + if [ -z "$HOST_MTD" ]; + then + echo "Fail to probe Host SPI-NOR device" + exit 1 + fi + + echo "--- Flashing firmware to @/dev/$HOST_MTD" + flash_eraseall /dev/$HOST_MTD + flashcp -v $IMAGE /dev/$HOST_MTD + + echo "--- Unbind the ASpeed SMC driver" + echo 1e630000.spi > /sys/bus/platform/drivers/aspeed-smc/unbind + else + echo "--- Flashing firmware to @/dev/$HOST_MTD" + flash_eraseall /dev/$HOST_MTD + flashcp -v $IMAGE /dev/$HOST_MTD + fi +} + + +if [ $# -eq 0 ]; then + echo "Usage: $(basename $0) <BIOS image file>" + exit 0 +fi + +IMAGE="$1" +if [ ! -f $IMAGE ]; then + echo $IMAGE + echo "The image file $IMAGE does not exist" + exit 1 +fi + +# Turn off the Host if it is currently ON +chassisstate=$(obmcutil chassisstate | awk -F. '{print $NF}') +echo "--- Current Chassis State: $chassisstate" +if [ "$chassisstate" == 'On' ]; +then + echo "--- Turning the Chassis off" + obmcutil chassisoff + sleep 10 + # Check if HOST was OFF + chassisstate_off=$(obmcutil chassisstate | awk -F. '{print $NF}') + if [ "$chassisstate_off" == 'On' ]; + then + echo "--- Error : Failed turning the Chassis off" + exit 1 + fi +fi + +# Switch the host SPI bus to BMC" +echo "--- Switch the host SPI bus to BMC." +gpioset 0 226=0 + +if [[ $? -ne 0 ]]; then + echo "ERROR: Switch the host SPI bus to BMC. Please check gpio state" + exit 1 +fi + +# Flash the firmware +do_flash + +# Switch the host SPI bus to HOST." +echo "--- Switch the host SPI bus to HOST." +gpioset 0 226=1 + +if [[ $? -ne 0 ]]; then + echo "ERROR: Switch the host SPI bus to HOST. Please check gpio state" + exit 1 +fi + +if [ "$chassisstate" == 'On' ]; +then + sleep 5 + echo "Turn on the Host" + obmcutil chassison +fi |