95 lines
2.4 KiB
ArmAsm
95 lines
2.4 KiB
ArmAsm
/******************************************************************************
|
|
* Copyright (c) 2004, 2008 IBM Corporation
|
|
* All rights reserved.
|
|
* This program and the accompanying materials
|
|
* are made available under the terms of the BSD License
|
|
* which accompanies this distribution, and is available at
|
|
* http://www.opensource.org/licenses/bsd-license.php
|
|
*
|
|
* Contributors:
|
|
* IBM Corporation - initial implementation
|
|
*****************************************************************************/
|
|
#include "macros.h"
|
|
#include "termctrl.h"
|
|
#include "boot_abort.h"
|
|
#include <cpu.h>
|
|
|
|
#define MSG_LOOK_HDR TERM_CTRL_BRIGHT, TERM_BG_RED, TERM_FG_WHITE
|
|
|
|
ASM_ENTRY(msg_e_crc)
|
|
.ascii MSG_LOOK_HDR
|
|
.ascii "\n\r\n\rE1001 - Boot ROM CRC failure\n\r"
|
|
.ascii TERM_CTRL_RESET, "\0"
|
|
.align 2
|
|
|
|
ASM_ENTRY(msg_e_nomem)
|
|
.ascii MSG_LOOK_HDR
|
|
.ascii "\n\r\n\rE1002 - Memory could not be initialized\n\r"
|
|
.ascii TERM_CTRL_RESET, "\0"
|
|
.align 2
|
|
|
|
ASM_ENTRY(msg_e_nofile)
|
|
.ascii MSG_LOOK_HDR
|
|
.ascii "\n\r\n\rE1003 - Firmware image incomplete"
|
|
.ascii TERM_CTRL_RESET
|
|
.ascii "\n\r internal FLS1-FFS-0.\0"
|
|
.align 2
|
|
|
|
ASM_ENTRY(msg_e_ierror)
|
|
.ascii MSG_LOOK_HDR
|
|
.ascii "\n\r\n\rE1004 - Unspecified Internal Firmware Error"
|
|
.ascii TERM_CTRL_RESET
|
|
.ascii "\n\r internal FLSX-SE-0.\0"
|
|
.align 2
|
|
|
|
/* E1005 : used in memory init code */
|
|
|
|
/*****************************************************************************
|
|
* Boot Abort Handler
|
|
*
|
|
* Input:
|
|
* R3 - capability informatin (i/o etc.)
|
|
* R4 - handling suggestion
|
|
* R5 - error string reference
|
|
* R6 - error number
|
|
*
|
|
* Return:
|
|
* if possible input to H8 and NVRAM log and console , then reboot/halt
|
|
*
|
|
* Input definitions:
|
|
*
|
|
* R3 bits: 63 (h8/console possible) ... add more
|
|
* R4 bits: 63 (do not attempt reboot)
|
|
* R5 reference to error message string
|
|
* R6 32-bit error enumerator
|
|
*
|
|
******************************************************************************/
|
|
ASM_ENTRY(boot_abort)
|
|
/* save arguments */
|
|
mr r31, r3
|
|
mr r30, r4
|
|
mr r29, r5
|
|
mr r28, r6
|
|
|
|
/* check if i/o is possible, if yes then print message */
|
|
li r10, ABORT_CANIO
|
|
and. r3, r31, r10
|
|
bne abort_noio
|
|
|
|
/* use i/o ..., first print reference message */
|
|
/* then add internal number if != 0 */
|
|
mr r3, r29
|
|
mfspr r4, HSPRG0 /* get runbase */
|
|
or r3, r3, r4
|
|
bl io_print
|
|
mr r3, r28
|
|
li r28, 0
|
|
cmpd r3, r28
|
|
beq 0f
|
|
bl io_printhex32
|
|
0:
|
|
|
|
abort_noio:
|
|
b $ // FIXME
|
|
/* never reached */
|
|
|