patch-2.1.80 linux/arch/arm/kernel/head-armo.S

Next file: linux/arch/arm/kernel/head-armv.S
Previous file: linux/arch/arm/kernel/entry-common.S
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.1.79/linux/arch/arm/kernel/head-armo.S linux/arch/arm/kernel/head-armo.S
@@ -0,0 +1,64 @@
+/*
+ * linux/arch/arm/kernel/head.S
+ *
+ * Copyright (C) 1994, 1995, 1996, 1997 Russell King
+ *
+ * 26-bit kernel startup code
+ */
+#include <linux/config.h>
+#include <linux/linkage.h>
+
+		.text
+		.align
+/*
+ * Entry point.
+ */
+ENTRY(stext)
+ENTRY(_stext)
+__entry:	cmp	pc, #0x02000000
+		ldrlt	pc, LC1			@ if 0x01800000, call at 0x02080000
+		teq	r0, #0			@ Check for old calling method
+		blne	Loldparams		@ Move page if old
+		adr	r5, LC0
+		ldmia	r5, {r5, r6, sl, sp}	@ Setup stack
+		mov	r4, #0
+1:		cmp	r5, sl			@ Clear BSS
+		strcc	r4, [r5], #4
+		bcc	1b
+		mov	r0, #0xea000000		@ Point undef instr to continuation
+		adr	r5, Lcontinue - 12
+		orr	r5, r0, r5, lsr #2
+		str	r5, [r4, #4]
+		mov	r2, r4
+		ldr	r5, Larm2_id
+		swp	r0, r0, [r2]		@ check for swp (ARM2 can't)
+		ldr	r5, Larm250_id
+		mrc	15, 0, r0, c0, c0	@ check for CP#15 (ARM250 can't)
+		mov	r5, r0			@ Use processor ID if we do have CP#15
+Lcontinue:	str	r5, [r6]
+		mov	r5, #0xeb000000		@ Point undef instr vector to itself
+		sub	r5, r5, #2
+		str	r5, [r4, #4]
+		mov	fp, #0
+		b	SYMBOL_NAME(start_kernel)
+
+LC1:		.word	SYMBOL_NAME(_stext)
+LC0:		.word	SYMBOL_NAME(_edata)
+		.word	SYMBOL_NAME(arm_id)
+		.word	SYMBOL_NAME(_end)
+		.word	SYMBOL_NAME(init_task_union)+8192
+Larm2_id:	.long	0x41560200
+Larm250_id:	.long	0x41560250
+		.align
+
+Loldparams:	mov	r4, #0x02000000
+		add	r3, r4, #0x00080000
+		add	r4, r4, #0x0007c000
+1:		ldmia	r0!, {r5 - r12}
+		stmia	r4!, {r5 - r12}
+		cmp	r4, r3
+		blt	1b
+		movs	pc, lr
+
+		.align	13
+ENTRY(this_must_match_init_task)

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov