patch-2.4.0-test8 linux/arch/arm/boot/compressed/head.S

Next file: linux/arch/arm/boot/compressed/setup-sa1100.S
Previous file: linux/arch/arm/boot/compressed/head-nexuspci.S
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.4.0-test7/linux/arch/arm/boot/compressed/head.S linux/arch/arm/boot/compressed/head.S
@@ -85,7 +85,7 @@
 		.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 +198,10 @@
 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 +218,20 @@
 		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

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)