diff options
author | Ralf Baechle <ralf@linux-mips.org> | 1998-08-25 09:12:35 +0000 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 1998-08-25 09:12:35 +0000 |
commit | c7fc24dc4420057f103afe8fc64524ebc25c5d37 (patch) | |
tree | 3682407a599b8f9f03fc096298134cafba1c9b2f /arch/arm/boot/compressed/head-nexuspci.S | |
parent | 1d793fade8b063fde3cf275bf1a5c2d381292cd9 (diff) |
o Merge with Linux 2.1.116.
o New Newport console code.
o New G364 console code.
Diffstat (limited to 'arch/arm/boot/compressed/head-nexuspci.S')
-rw-r--r-- | arch/arm/boot/compressed/head-nexuspci.S | 96 |
1 files changed, 51 insertions, 45 deletions
diff --git a/arch/arm/boot/compressed/head-nexuspci.S b/arch/arm/boot/compressed/head-nexuspci.S index 92840fbda..1fd49a95c 100644 --- a/arch/arm/boot/compressed/head-nexuspci.S +++ b/arch/arm/boot/compressed/head-nexuspci.S @@ -1,35 +1,32 @@ /* * linux/arch/arm/boot/compressed/head-nexuspci.S * - * Copyright (C) 1996 Philip Blundell + * Copyright (C) 1996, 1997, 1998 Philip Blundell + * + * NexusPCI is unusual because we don't have a bootloader -- the kernel is + * run directly out of ROM at the moment. Maybe this will change one day and + * then this file can go away. + * */ -#define ARM_CP p15 -#define ARM610_REG_CONTROL cr1 -#define ARM_REG_ZERO cr0 - .text -start: b skip1 - b go_uncompress - b go_uncompress - b go_uncompress - b go_uncompress +.globl _start +_start: b reset + b undefined + b undefined + b undefined + b undefined + b undefined + b undefined + b undefined b go_uncompress - b go_uncompress - b go_uncompress - b go_uncompress - b go_uncompress -skip1: mov sp, #0x40000000 - add sp, sp, #0x200000 - mov r2, #0x20000000 + +reset: mov r2, #0x20000000 @ LED off mov r1, #0x1a str r1, [r2] - MOV r0, #0x30 - MCR ARM_CP, 0, r0, ARM610_REG_CONTROL, ARM_REG_ZERO - - mov r2, #0x10000000 + mov r2, #0x10000000 @ SCC init mov r1, #42 strb r1, [r2, #8] @@ -57,37 +54,46 @@ skip1: mov sp, #0x40000000 mov r1, #5 strb r1, [r2, #0x8] - mov r0, #0x50 + ldr r2, =_start + ldr r3, =_edata + mov r8, r2 + mov r0, #0 +1: + ldmia r0!, {r4, r5, r6, r7} + stmia r2!, {r4, r5, r6, r7} + cmp r2, r3 + ble 1b + + ldr r3, =_edata + ldr r1, =_end + mov r2, #0 +1: + strb r2, [r3] + cmp r3, r1 + beq 2f + add r3, r3, #1 + b 1b +2: + add pc, r8, #0x20 + +undefined: ldr r4, =undef_msg +1: ldrb r0, [r4], #1 + movs r0, r0 +2: beq 2b bl _ll_write_char + b 1b - mov r4, #0x40000000 - mov r1, #0x00200000 - add r4, r4, r1 -copylp: - ldr r3, [r1] - str r3, [r4, r1] - subs r1, r1, #4 - bne copylp - - add pc, r4, #0x28 - +undef_msg: .ascii "Undefined instruction (or other problem)\000" + .align 4 /* * Uncompress the kernel */ go_uncompress: - mov r0, #0x40000000 - add r0, r0, #0x300000 - bl _decompress_kernel - - mov r0, #0x40000000 - add r1, r0, #0x300000 - mov r2, #0x100000 - -clp2: ldr r3, [r1, r2] - str r3, [r0, r2] - subs r2, r2, #4 - bne clp2 + mov r0, #0x40000000 + ldr sp, =user_stack + add sp, sp, #4096 + bl decompress_kernel mov r2, #0x40000000 mov r0, #0 |