1#!/usr/bin/env bash 2############################################################################### 3# 4# Copyright (C) 2009-2013 Nintendo. All rights reserved. 5# 6# These coded instructions, statements, and computer programs contain 7# proprietary information of Nintendo of America Inc. and/or Nintendo 8# Company Ltd., and are protected by Federal copyright law. They may 9# not be disclosed to third parties or copied or duplicated in any form, 10# in whole or in part, without the prior written consent of Nintendo. 11# 12############################################################################### 13 14################################################################################ 15# cafe_pcfs2nand 16# This script enables a CAT_DEV to boot from NAND. It must not be executed 17# directly from the bash command prompt. Instead, invoke this using: 18# source update2nand 19################################################################################ 20source cafe_utils 21 22############################################################################### 23# compute_flat_version 24############################################################################### 25 26compute_flat_version() 27{ 28 IFS="." 29 local v=( $1 ) 30 echo $((${v[0]} * 1000000 + ${v[1]} * 10000 + ${v[2]} * 1000 + ${v[3]})) 31} 32 33################################################################################ 34# main 35################################################################################ 36reflash=${1:-1} 37call_mionps=${2:-1} 38 39Bash_sourced_check 0 `basename "$BASH_SOURCE"` update2nand 40rval=$? 41 42if [ $rval == 0 ]; then 43 #------------------------------------------------------------------------------ 44 #---- initialization 45 #------------------------------------------------------------------------------ 46 SCRIPT_EXE_TIMESTAMP=`date +%m_%d_%Y_%H%M%S` 47 LOGDIR="$CAFE_ROOT/${SESSION_PATH_PREFIX}`basename "$0"`/${SCRIPT_EXE_TIMESTAMP}" 48 echo `basename "$0"` 49 echo log directory is $LOGDIR 50 mkdir -p "$LOGDIR" 51 52 # Cleanup any old logs 53 rm -f "$TMP/${SESSION_PATH_PREFIX}cafestop_mion.log" 54 55 CAFESTOP_STATUS=0 56 export _CCRSYSCFG1= #disable 57 Initialize_serial_port_and_directory cafestop 58 #echo CAFE_CONSOLE=$CAFE_CONSOLE 59 60 #------------------------------------------------------------------------------ 61 #---- cafestop 62 #------------------------------------------------------------------------------ 63 echo Executing cafestop"..." 64 source cafestop 1> "$LOGDIR"/cafestop0.txt 2>&1 65 if [ -e "$TMP/${SESSION_PATH_PREFIX}cafestop_mion.log" ]; then 66 mv "$TMP/${SESSION_PATH_PREFIX}cafestop_mion.log" "${LOGDIR}/cafestop0_mion.log" 67 fi 68 if [ $CAFESTOP_STATUS -ne 0 ]; then 69 echo `basename "$0"`: cafestop failure. 70 exit 1 71 fi 72 73 #------------------------------------------------------------------------------ 74 #---- cafeon 75 #------------------------------------------------------------------------------ 76 source hostcheckversion 77 hb_ver_flat=$(compute_flat_version $CAFERUN_HOSTBRIDGE_VERSION) 78 79 echo Executing cafeon"..." 80 set -e 81 if [ $hb_ver_flat -lt $(compute_flat_version 3.2.4.1) ] 82 then 83 cafeon 1> "$LOGDIR"/cafeon.txt 2>&1 84 else 85 cafeon -e nomodecheck 1> "$LOGDIR"/cafeon.txt 2>&1 86 fi 87 if [ -e "$TMP/${SESSION_PATH_PREFIX}cafestop_mion.log" ]; then 88 mv "$TMP/${SESSION_PATH_PREFIX}cafestop_mion.log" "${LOGDIR}/cafeon_mion.log" 89 fi 90 set +e 91 Monitor_For_Output -k "source -p -q /vol/content" $MONITOR_DEFAULT_TIMEOUT "$LOGDIR" 92 if [ $? -ne 0 ]; then 93 echo `basename $0`: monitor failed waiting for cafeon success message. 94 exit 1 95 fi 96 # test to see if last boot was NAND or PCFS 97 was_pcfs_boot=`grep "BOOT1: Loaded firmware image from SDIO." "$LOGDIR"/* 2>/dev/null | wc -l` 98 99 #------------------------------------------------------------------------------ 100 #---- recover command 101 #------------------------------------------------------------------------------ 102 echo Executing devkitmsg recover -v"..." 103 set -e 104 devkitmsg recover -v -p $SESSION_LAUNCH_CTRL_PORT 105 set +e 106 Monitor_For_Output -K "WUD_BCMFWCheck" $MONITOR_DEFAULT_TIMEOUT "$LOGDIR" #note: need -K here, not -k 107 if [ $? -ne 0 ]; then 108 echo `basename "$0"`: monitor failed waiting for devkitmsg recover success message. 109 exit 1 110 fi 111 112 #------------------------------------------------------------------------------ 113 #---- if last boot was NAND, first update BOOT1 to PCFS 114 #------------------------------------------------------------------------------ 115 if [ $was_pcfs_boot -eq 0 ]; then 116 if [ ! -d "$CAFE_MLC_DIR/sys/update/bootloader/aaa-boot1-dual" ]; then 117 mkdir -p $CAFE_MLC_DIR/sys/update/bootloader 118 cp -rf $CAFE_MLC_DIR/sys/update/mixed/aaa-boot1-dual $CAFE_MLC_DIR/sys/update/bootloader 119 fi 120 echo `basename "$0"`: NAND boot detected, BOOT1 will be updated before updating to NAND 121 echo Executing devkitmsg \'update /vol/storage_hfiomlc01/sys/update/bootloader\' -v"..." 122 set -e 123 devkitmsg 'update /vol/storage_hfiomlc01/sys/update/bootloader' -v -p $SESSION_LAUNCH_CTRL_PORT 124 set +e 125 Monitor_For_Output -k "Update Done, err 0" $MONITOR_DEFAULT_TIMEOUT "$LOGDIR" 126 if [ $? -ne 0 ]; then 127 echo `basename "$0"`: monitor failed waiting for devkitmsg update success message. 128 exit 1 129 fi 130 else 131 echo `basename "$0"`: PCFS boot detected, no BOOT1 update needed 132 fi 133 134 #------------------------------------------------------------------------------ 135 #---- update command 136 #------------------------------------------------------------------------------ 137 if [ $reflash -eq 1 ]; then 138 echo Executing devkitmsg \'devkitmsg 'reflash /vol/storage_hfiomlc01/sys/update/nand'\' -v"..." 139 set -e 140 devkitmsg 'reflash /vol/storage_hfiomlc01/sys/update/nand' -v -p $SESSION_LAUNCH_CTRL_PORT 141 set +e 142 Monitor_For_Output -k "MCP: System update was successful" $MONITOR_DEFAULT_TIMEOUT "$LOGDIR" 143 if [ $? -ne 0 ]; then 144 echo `basename "$0"`: monitor failed waiting for devkitmsg reflash success message. 145 exit 1 146 fi 147 else # Update only. This will not reformat. 148 echo Executing devkitmsg \'update /vol/storage_hfiomlc01/sys/update/nand\' -v"..." 149 set -e 150 devkitmsg 'update /vol/storage_hfiomlc01/sys/update/nand' -v -p $SESSION_LAUNCH_CTRL_PORT 151 set +e 152 Monitor_For_Output -k "Update Done, err 0" $MONITOR_DEFAULT_TIMEOUT "$LOGDIR" 153 if [ $? -ne 0 ]; then 154 echo `basename "$0"`: monitor failed waiting for devkitmsg update success message. 155 exit 1 156 fi 157 fi 158 159 if [ $call_mionps -eq 1 ] 160 then 161 "$CAFE_ROOT\system\bin\tool\mionps" $BRIDGE_CURRENT_IP_ADDRESS 2 -s 1 162 fi 163 164 #------------------------------------------------------------------------------ 165 #---- set default boot mode to development 166 #------------------------------------------------------------------------------ 167 devkitmsg 'sys_mode 1' -v -p $SESSION_LAUNCH_CTRL_PORT 168 169 if [ ! -z $CAFE_TEST_SELF_REFRESH ] 170 then 171 devkitmsg 'standby_en 1' -v -p $SESSION_LAUNCH_CTRL_PORT 172 fi 173 174 #------------------------------------------------------------------------------ 175 #---- cafestop 176 #------------------------------------------------------------------------------ 177 echo Executing cafestop"..." 178 source cafestop 1> "$LOGDIR"/cafestop1.txt 2>&1 179 if [ -e "$TMP/${SESSION_PATH_PREFIX}cafestop_mion.log" ]; then 180 mv "$TMP/${SESSION_PATH_PREFIX}cafestop_mion.log" "${LOGDIR}/cafestop1_mion.log" 181 fi 182 if [ $CAFESTOP_STATUS -ne 0 ]; then 183 echo `basename $0`: cafestop failure. 184 exit 1 185 fi 186 187 #------------------------------------------------------------------------------ 188 #---- success! 189 #------------------------------------------------------------------------------ 190 echo Removing log directory $LOGDIR"..." 191 rm -rf "$LOGDIR" 192 echo `basename "$0"` complete. Exiting with code 0. 193 exit 0 194else 195 echo `basename "$BASH_SOURCE"` error: Format deprecated. Instead, use \"source setbootmode NAND\". >/dev/stderr 196fi 197unset SCRIPT_IS_SOURCED 198