summaryrefslogtreecommitdiffstats
path: root/arch/arm/boot
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/boot')
-rw-r--r--arch/arm/boot/Makefile11
-rw-r--r--arch/arm/boot/bootp/Makefile2
-rw-r--r--arch/arm/boot/bootp/bootp.lds39
-rw-r--r--arch/arm/boot/bootp/init.S12
-rw-r--r--arch/arm/boot/compressed/Makefile4
-rw-r--r--arch/arm/boot/compressed/head-ftvpci.S40
-rw-r--r--arch/arm/boot/compressed/head-netwinder.S9
-rw-r--r--arch/arm/boot/compressed/head-nexuspci.S101
-rw-r--r--arch/arm/boot/compressed/head.S29
-rw-r--r--arch/arm/boot/compressed/ll_char_wr.S14
-rw-r--r--arch/arm/boot/compressed/setup-sa1100.S2
-rw-r--r--arch/arm/boot/compressed/vmlinux.lds.in9
12 files changed, 155 insertions, 117 deletions
diff --git a/arch/arm/boot/Makefile b/arch/arm/boot/Makefile
index 2811e80ef..6fbdb5ea1 100644
--- a/arch/arm/boot/Makefile
+++ b/arch/arm/boot/Makefile
@@ -42,6 +42,13 @@ INITRD_PHYS = 0x00800000
INITRD_VIRT = 0xc0800000
endif
+ifeq ($(CONFIG_ARCH_INTEGRATOR),y)
+ZTEXTADDR = 0x00008000
+PARAMS = 0x00000100
+INITRD_PHYS = 0x00800000
+INITRD_VIRT = 0xc0800000
+endif
+
ifeq ($(CONFIG_ARCH_NEXUSPCI),y)
ZTEXTADDR = 0x40200000
ZRELADDR = 0x40008000
@@ -105,10 +112,10 @@ initrd:
@test "$(INITRD)" != "" || (echo You must specify INITRD; exit -1)
install: $(CONFIGURE) Image
- sh ./install.sh $(VERSION).$(PATCHLEVEL).$(SUBLEVEL) Image $(TOPDIR)/System.map "$(INSTALL_PATH)"
+ sh ./install.sh $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) Image $(TOPDIR)/System.map "$(INSTALL_PATH)"
zinstall: $(CONFIGURE) zImage
- sh ./install.sh $(VERSION).$(PATCHLEVEL).$(SUBLEVEL) zImage $(TOPDIR)/System.map "$(INSTALL_PATH)"
+ sh ./install.sh $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) zImage $(TOPDIR)/System.map "$(INSTALL_PATH)"
clean:
$(RM) Image zImage bootpImage
diff --git a/arch/arm/boot/bootp/Makefile b/arch/arm/boot/bootp/Makefile
index c513c8ad3..918e3eb9e 100644
--- a/arch/arm/boot/bootp/Makefile
+++ b/arch/arm/boot/bootp/Makefile
@@ -23,4 +23,4 @@ initrd.o: $(INITRD)
.PHONY: $(INITRD) $(ZSYSTEM)
-clean:; $(RM) bootp bootp.lds
+clean:; $(RM) bootp
diff --git a/arch/arm/boot/bootp/bootp.lds b/arch/arm/boot/bootp/bootp.lds
new file mode 100644
index 000000000..8c4e6895f
--- /dev/null
+++ b/arch/arm/boot/bootp/bootp.lds
@@ -0,0 +1,39 @@
+/*
+ * linux/arch/arm/boot/bootp/bootp.lds
+ *
+ * Copyright (C) 2000 Russell King
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SECTIONS
+{
+ . = 0;
+ _text = .;
+ .text : {
+ _stext = .;
+ _start = .;
+ init.o(.start)
+ kernel_start = .;
+ kernel.o
+ kernel_len = . - kernel_start;
+ . = ALIGN(32);
+ *(.text)
+ initrd_start = .;
+ initrd.o
+ initrd_len = . - initrd_start;
+ . = ALIGN(32);
+ _etext = .;
+ }
+
+ .stab 0 : { *(.stab) }
+ .stabstr 0 : { *(.stabstr) }
+ .stab.excl 0 : { *(.stab.excl) }
+ .stab.exclstr 0 : { *(.stab.exclstr) }
+ .stab.index 0 : { *(.stab.index) }
+ .stab.indexstr 0 : { *(.stab.indexstr) }
+ .comment 0 : { *(.comment) }
+}
diff --git a/arch/arm/boot/bootp/init.S b/arch/arm/boot/bootp/init.S
index c5682212f..2b498b7bb 100644
--- a/arch/arm/boot/bootp/init.S
+++ b/arch/arm/boot/bootp/init.S
@@ -1,6 +1,14 @@
/*
- * Header file for splitting kernel + initrd. Note that we pass
- * r0 through to r3 straight through.
+ * linux/arch/arm/boot/bootp/init.S
+ *
+ * Copyright (C) 2000 Russell King
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * Header file for splitting kernel + initrd. Note that we pass
+ * r0 through to r3 straight through.
*/
.section .start,#alloc,#execinstr
.type _entry, #function
diff --git a/arch/arm/boot/compressed/Makefile b/arch/arm/boot/compressed/Makefile
index 2a0108021..46b754ec5 100644
--- a/arch/arm/boot/compressed/Makefile
+++ b/arch/arm/boot/compressed/Makefile
@@ -24,6 +24,10 @@ ifeq ($(CONFIG_ARCH_NETWINDER),y)
OBJS += head-netwinder.o
endif
+ifeq ($(CONFIG_ARCH_INTEGRATOR),y)
+OBJS += head-netwinder.o
+endif
+
ifeq ($(CONFIG_ARCH_NEXUSPCI),y)
HEAD = head-nexuspci.o
endif
diff --git a/arch/arm/boot/compressed/head-ftvpci.S b/arch/arm/boot/compressed/head-ftvpci.S
new file mode 100644
index 000000000..a8c806ef3
--- /dev/null
+++ b/arch/arm/boot/compressed/head-ftvpci.S
@@ -0,0 +1,40 @@
+/*
+ * linux/arch/arm/boot/compressed/head-ftvpci.S
+ *
+ * Copyright (C) 2000 FutureTV Labs Ltd.
+ *
+ * Special startup code for FTV PCI board.
+ */
+
+ .section ".start", #alloc, #execinstr
+ftv_start:
+ mcr p15, 0, r0, c7, c5, 0 @ flush I cache
+ mrc p15, 0, r0, c1, c0
+ orr r0, r0, #1 << 12
+ mcr p15, 0, r0, c1, c0 @ enable I cache
+ mov r0, #0
+ mcreq p15, 0, r0, c15, c1, 2 @ enable clock switching
+
+ /* check to see if the kernel must be relocated */
+ ldr ip, =ftv_start
+ adr sl, ftv_start
+ teq ip, sl
+ beq 2f @ no need to copy
+
+ /* in the wrong place -> presumably, executing out of ROM */
+ sub ip, ip, sl @ displacement
+ ldr lr, =_start @ destination
+ sub sp, lr, ip @ source
+ ldr fp, =_edata @ end of copied area
+1: ldmia sp!, {r0, r1, r2, r3, r4, r5, r6, r10}
+ stmia lr!, {r0, r1, r2, r3, r4, r5, r6, r10}
+ cmp lr, fp
+ ble 1b
+
+2:
+ mov r8, #0
+ mov r7, #3
+ b 1f
+.ltorg
+1:
+ /* fall back into head.S */
diff --git a/arch/arm/boot/compressed/head-netwinder.S b/arch/arm/boot/compressed/head-netwinder.S
index eca1d773d..5eecdec42 100644
--- a/arch/arm/boot/compressed/head-netwinder.S
+++ b/arch/arm/boot/compressed/head-netwinder.S
@@ -1,3 +1,12 @@
+/*
+ * linux/arch/arm/boot/compressed/head-netwinder.S
+ *
+ * Copyright (C) 2000 Russell King
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
#define K(a,b,c) ((a) << 24 | (b) << 12 | (c))
.section ".start", #alloc, #execinstr
diff --git a/arch/arm/boot/compressed/head-nexuspci.S b/arch/arm/boot/compressed/head-nexuspci.S
deleted file mode 100644
index 1fd49a95c..000000000
--- a/arch/arm/boot/compressed/head-nexuspci.S
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * linux/arch/arm/boot/compressed/head-nexuspci.S
- *
- * 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.
- *
- */
-
- .text
-
-.globl _start
-_start: b reset
- b undefined
- b undefined
- b undefined
- b undefined
- b undefined
- b undefined
- b undefined
- b go_uncompress
-
-reset: mov r2, #0x20000000 @ LED off
- mov r1, #0x1a
- str r1, [r2]
-
- mov r2, #0x10000000 @ SCC init
-
- mov r1, #42
- strb r1, [r2, #8]
-
- mov r1, #48
- strb r1, [r2, #8]
-
- mov r1, #16
- strb r1, [r2, #8]
-
- mov r1, #0x93
- strb r1, [r2, #0]
- mov r1, #0x17
- strb r1, [r2, #0]
-
- mov r1, #0xbb
- strb r1, [r2, #0x4]
-
- mov r1, #0x78
- strb r1, [r2, #0x10]
-
- mov r1, #160
- strb r1, [r2, #0x8]
-
- mov r1, #5
- strb r1, [r2, #0x8]
-
- 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
-
-undef_msg: .ascii "Undefined instruction (or other problem)\000"
- .align 4
-
-/*
- * Uncompress the kernel
- */
-go_uncompress:
- mov r0, #0x40000000
- ldr sp, =user_stack
- add sp, sp, #4096
- bl decompress_kernel
-
- mov r2, #0x40000000
- mov r0, #0
- mov r1, #3
- add pc, r2, #0x20 @ call via EXEC entry
diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S
index ef9090f72..21bdb43c0 100644
--- a/arch/arm/boot/compressed/head.S
+++ b/arch/arm/boot/compressed/head.S
@@ -1,7 +1,11 @@
/*
- * linux/arch/arm/boot/compressed/head.S
+ * linux/arch/arm/boot/compressed/head.S
*
- * Copyright (C) 1996-1999 Russell King
+ * Copyright (C) 1996-1999 Russell King
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
*/
#include <linux/config.h>
#include <linux/linkage.h>
@@ -85,7 +89,7 @@ start:
.word 0x016f2818 @ Magic numbers to help the loader
.word start
1: mov r7, r1 @ save architecture ID
- mov r8, r0 @ save r0
+ mov r8, #0 @ save r0
#ifdef CONFIG_ANGELBOOT
/*
* Booting from Angel - need to enter SVC mode and disable
@@ -198,9 +202,10 @@ cache_on: ldr r1, proc_sa110_type
1:
sub r3, r4, #16384 @ Page directory size
bic r3, r3, #0xff @ Align the pointer
- bic r3, r3, #0x3f
+ bic r3, r3, #0x3f00
/*
- * Initialise the page tables
+ * Initialise the page tables, turning on the cacheable and bufferable
+ * bits for the RAM area only.
*/
mov r0, r3
mov r8, r0, lsr #18
@@ -217,6 +222,20 @@ cache_on: ldr r1, proc_sa110_type
add r1, r1, #1048576
teq r0, r2
bne 1b
+/*
+ * If ever we are running from Flash, then we surely want the cache
+ * to be enabled also for our execution instance... We map 2MB of it
+ * so there is no map overlap problem for up to 1 MB compressed kernel.
+ * If the execution is in RAM then we would only be duplicating the above.
+ */
+ mov r1, #0x1e
+ orr r1, r1, #3 << 10
+ mov r2, pc, lsr #20
+ orr r1, r1, r2, lsl #20
+ add r0, r3, r2, lsl #2
+ str r1, [r0], #4
+ add r1, r1, #1048576
+ str r1, [r0]
mov r0, #0
mcr p15, 0, r0, c7, c10, 4 @ drain write buffer
diff --git a/arch/arm/boot/compressed/ll_char_wr.S b/arch/arm/boot/compressed/ll_char_wr.S
index 57865f2fd..8e1c8bc34 100644
--- a/arch/arm/boot/compressed/ll_char_wr.S
+++ b/arch/arm/boot/compressed/ll_char_wr.S
@@ -1,12 +1,16 @@
/*
- * linux/arch/arm/lib/ll_char_wr.S
+ * linux/arch/arm/lib/ll_char_wr.S
*
- * Copyright (C) 1995, 1996 Russell King.
+ * Copyright (C) 1995, 1996 Russell King.
*
- * Speedups & 1bpp code (C) 1996 Philip Blundell & Russell King.
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
*
- * 10-04-96 RMK Various cleanups & reduced register usage.
- * 08-04-98 RMK Shifts re-ordered
+ * Speedups & 1bpp code (C) 1996 Philip Blundell & Russell King.
+ *
+ * 10-04-96 RMK Various cleanups & reduced register usage.
+ * 08-04-98 RMK Shifts re-ordered
*/
@ Regs: [] = corruptible
diff --git a/arch/arm/boot/compressed/setup-sa1100.S b/arch/arm/boot/compressed/setup-sa1100.S
index f7657773b..3babde180 100644
--- a/arch/arm/boot/compressed/setup-sa1100.S
+++ b/arch/arm/boot/compressed/setup-sa1100.S
@@ -138,7 +138,7 @@ skip_uart:
@ The machine type is passed in r0
mov r0, r3
#ifdef CONFIG_SA1100_NANOENGINE
- teq r0, #32 @ MACH_TYPE_NANOENGINE
+ teq r0, #MACH_TYPE_NANOENGINE
beq SYMBOL_NAME(bse_setup)
#endif
diff --git a/arch/arm/boot/compressed/vmlinux.lds.in b/arch/arm/boot/compressed/vmlinux.lds.in
index f7469c634..86ed5e6e3 100644
--- a/arch/arm/boot/compressed/vmlinux.lds.in
+++ b/arch/arm/boot/compressed/vmlinux.lds.in
@@ -1,3 +1,12 @@
+/*
+ * linux/arch/arm/boot/compressed/vmlinux.lds.in
+ *
+ * Copyright (C) 2000 Russell King
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
OUTPUT_ARCH(arm)
ENTRY(_start)
SECTIONS