#!/usr/bin/env bash ############################################################################### # # Copyright (C) 2009-2013 Nintendo. All rights reserved. # # These coded instructions, statements, and computer programs contain # proprietary information of Nintendo of America Inc. and/or Nintendo # Company Ltd., and are protected by Federal copyright law. They may # not be disclosed to third parties or copied or duplicated in any form, # in whole or in part, without the prior written consent of Nintendo. # ############################################################################### ################################################################################ # cafe_pcfs2nand # This script enables a CAT_DEV to boot from NAND. It must not be executed # directly from the bash command prompt. Instead, invoke this using: # source update2nand ################################################################################ source cafe_utils ############################################################################### # compute_flat_version ############################################################################### compute_flat_version() { IFS="." local v=( $1 ) echo $((${v[0]} * 1000000 + ${v[1]} * 10000 + ${v[2]} * 1000 + ${v[3]})) } ################################################################################ # main ################################################################################ reflash=${1:-1} call_mionps=${2:-1} Bash_sourced_check 0 `basename "$BASH_SOURCE"` update2nand rval=$? if [ $rval == 0 ]; then #------------------------------------------------------------------------------ #---- initialization #------------------------------------------------------------------------------ SCRIPT_EXE_TIMESTAMP=`date +%m_%d_%Y_%H%M%S` LOGDIR="$CAFE_ROOT/${SESSION_PATH_PREFIX}`basename "$0"`/${SCRIPT_EXE_TIMESTAMP}" echo `basename "$0"` echo log directory is $LOGDIR mkdir -p "$LOGDIR" # Cleanup any old logs rm -f "$TMP/${SESSION_PATH_PREFIX}cafestop_mion.log" CAFESTOP_STATUS=0 export _CCRSYSCFG1= #disable Initialize_serial_port_and_directory cafestop #echo CAFE_CONSOLE=$CAFE_CONSOLE #------------------------------------------------------------------------------ #---- cafestop #------------------------------------------------------------------------------ echo Executing cafestop"..." source cafestop 1> "$LOGDIR"/cafestop0.txt 2>&1 if [ -e "$TMP/${SESSION_PATH_PREFIX}cafestop_mion.log" ]; then mv "$TMP/${SESSION_PATH_PREFIX}cafestop_mion.log" "${LOGDIR}/cafestop0_mion.log" fi if [ $CAFESTOP_STATUS -ne 0 ]; then echo `basename "$0"`: cafestop failure. exit 1 fi #------------------------------------------------------------------------------ #---- cafeon #------------------------------------------------------------------------------ source hostcheckversion hb_ver_flat=$(compute_flat_version $CAFERUN_HOSTBRIDGE_VERSION) echo Executing cafeon"..." set -e if [ $hb_ver_flat -lt $(compute_flat_version 3.2.4.1) ] then cafeon 1> "$LOGDIR"/cafeon.txt 2>&1 else cafeon -e nomodecheck 1> "$LOGDIR"/cafeon.txt 2>&1 fi if [ -e "$TMP/${SESSION_PATH_PREFIX}cafestop_mion.log" ]; then mv "$TMP/${SESSION_PATH_PREFIX}cafestop_mion.log" "${LOGDIR}/cafeon_mion.log" fi set +e Monitor_For_Output -k "source -p -q /vol/content" $MONITOR_DEFAULT_TIMEOUT "$LOGDIR" if [ $? -ne 0 ]; then echo `basename $0`: monitor failed waiting for cafeon success message. exit 1 fi # test to see if last boot was NAND or PCFS was_pcfs_boot=`grep "BOOT1: Loaded firmware image from SDIO." "$LOGDIR"/* 2>/dev/null | wc -l` #------------------------------------------------------------------------------ #---- recover command #------------------------------------------------------------------------------ echo Executing devkitmsg recover -v"..." set -e devkitmsg recover -v -p $SESSION_LAUNCH_CTRL_PORT set +e Monitor_For_Output -K "WUD_BCMFWCheck" $MONITOR_DEFAULT_TIMEOUT "$LOGDIR" #note: need -K here, not -k if [ $? -ne 0 ]; then echo `basename "$0"`: monitor failed waiting for devkitmsg recover success message. exit 1 fi #------------------------------------------------------------------------------ #---- if last boot was NAND, first update BOOT1 to PCFS #------------------------------------------------------------------------------ if [ $was_pcfs_boot -eq 0 ]; then if [ ! -d "$CAFE_MLC_DIR/sys/update/bootloader/aaa-boot1-dual" ]; then mkdir -p $CAFE_MLC_DIR/sys/update/bootloader cp -rf $CAFE_MLC_DIR/sys/update/mixed/aaa-boot1-dual $CAFE_MLC_DIR/sys/update/bootloader fi echo `basename "$0"`: NAND boot detected, BOOT1 will be updated before updating to NAND echo Executing devkitmsg \'update /vol/storage_hfiomlc01/sys/update/bootloader\' -v"..." set -e devkitmsg 'update /vol/storage_hfiomlc01/sys/update/bootloader' -v -p $SESSION_LAUNCH_CTRL_PORT set +e Monitor_For_Output -k "Update Done, err 0" $MONITOR_DEFAULT_TIMEOUT "$LOGDIR" if [ $? -ne 0 ]; then echo `basename "$0"`: monitor failed waiting for devkitmsg update success message. exit 1 fi else echo `basename "$0"`: PCFS boot detected, no BOOT1 update needed fi #------------------------------------------------------------------------------ #---- update command #------------------------------------------------------------------------------ if [ $reflash -eq 1 ]; then echo Executing devkitmsg \'devkitmsg 'reflash /vol/storage_hfiomlc01/sys/update/nand'\' -v"..." set -e devkitmsg 'reflash /vol/storage_hfiomlc01/sys/update/nand' -v -p $SESSION_LAUNCH_CTRL_PORT set +e Monitor_For_Output -k "MCP: System update was successful" $MONITOR_DEFAULT_TIMEOUT "$LOGDIR" if [ $? -ne 0 ]; then echo `basename "$0"`: monitor failed waiting for devkitmsg reflash success message. exit 1 fi else # Update only. This will not reformat. echo Executing devkitmsg \'update /vol/storage_hfiomlc01/sys/update/nand\' -v"..." set -e devkitmsg 'update /vol/storage_hfiomlc01/sys/update/nand' -v -p $SESSION_LAUNCH_CTRL_PORT set +e Monitor_For_Output -k "Update Done, err 0" $MONITOR_DEFAULT_TIMEOUT "$LOGDIR" if [ $? -ne 0 ]; then echo `basename "$0"`: monitor failed waiting for devkitmsg update success message. exit 1 fi fi if [ $call_mionps -eq 1 ] then "$CAFE_ROOT\system\bin\tool\mionps" $BRIDGE_CURRENT_IP_ADDRESS 2 -s 1 fi #------------------------------------------------------------------------------ #---- set default boot mode to development #------------------------------------------------------------------------------ devkitmsg 'sys_mode 1' -v -p $SESSION_LAUNCH_CTRL_PORT if [ ! -z $CAFE_TEST_SELF_REFRESH ] then devkitmsg 'standby_en 1' -v -p $SESSION_LAUNCH_CTRL_PORT fi #------------------------------------------------------------------------------ #---- cafestop #------------------------------------------------------------------------------ echo Executing cafestop"..." source cafestop 1> "$LOGDIR"/cafestop1.txt 2>&1 if [ -e "$TMP/${SESSION_PATH_PREFIX}cafestop_mion.log" ]; then mv "$TMP/${SESSION_PATH_PREFIX}cafestop_mion.log" "${LOGDIR}/cafestop1_mion.log" fi if [ $CAFESTOP_STATUS -ne 0 ]; then echo `basename $0`: cafestop failure. exit 1 fi #------------------------------------------------------------------------------ #---- success! #------------------------------------------------------------------------------ echo Removing log directory $LOGDIR"..." rm -rf "$LOGDIR" echo `basename "$0"` complete. Exiting with code 0. exit 0 else echo `basename "$BASH_SOURCE"` error: Format deprecated. Instead, use \"source setbootmode NAND\". >/dev/stderr fi unset SCRIPT_IS_SOURCED