diff options
Diffstat (limited to 'target/device/Atmel/linux/kernel-patches-2.6.22.1/linux-2.6.22.1-005-atags-support.patch')
-rw-r--r-- | target/device/Atmel/linux/kernel-patches-2.6.22.1/linux-2.6.22.1-005-atags-support.patch | 122 |
1 files changed, 0 insertions, 122 deletions
diff --git a/target/device/Atmel/linux/kernel-patches-2.6.22.1/linux-2.6.22.1-005-atags-support.patch b/target/device/Atmel/linux/kernel-patches-2.6.22.1/linux-2.6.22.1-005-atags-support.patch deleted file mode 100644 index 0068ef17c..000000000 --- a/target/device/Atmel/linux/kernel-patches-2.6.22.1/linux-2.6.22.1-005-atags-support.patch +++ /dev/null @@ -1,122 +0,0 @@ ---- linux-2.6.22/arch/arm/kernel/head-common.S 2007-05-16 10:13:04.000000000 -0500 -+++ linux-2.6.22-bgat/arch/arm/kernel/head-common.S 2007-05-30 21:54:45.000000000 -0500 -@@ -20,7 +20,8 @@ - .long _end @ r7 - .long processor_id @ r4 - .long __machine_arch_type @ r5 -- .long cr_alignment @ r6 -+ .long __atags_pointer @ r6 -+ .long cr_alignment @ r7 - .long init_thread_union + THREAD_START_SP @ sp - - /* -@@ -29,6 +30,7 @@ - * - * r0 = cp#15 control register - * r1 = machine ID -+ * r2 = atags pointer - * r9 = processor ID - */ - .type __mmap_switched, %function -@@ -47,11 +49,12 @@ - strcc fp, [r6],#4 - bcc 1b - -- ldmia r3, {r4, r5, r6, sp} -+ ldmia r3, {r4, r5, r6, r7, sp} - str r9, [r4] @ Save processor ID - str r1, [r5] @ Save machine type -+ str r2, [r6] @ Save atags pointer - bic r4, r0, #CR_A @ Clear 'A' bit -- stmia r6, {r0, r4} @ Save control register values -+ stmia r7, {r0, r4} @ Save control register values - b start_kernel - - /* -@@ -215,3 +218,34 @@ - bl __lookup_machine_type - mov r0, r5 - ldmfd sp!, {r4 - r6, pc} -+ -+/* Determine validity of the r2 atags pointer. The heuristic requires -+ * that the pointer be aligned, in the first 16k of physical RAM and -+ * that the ATAG_CORE marker is first and present. Future revisions -+ * of this function may be more lenient with the physical address and -+ * may also be able to move the ATAGS block if necessary. -+ * -+ * r8 = machinfo -+ * -+ * Returns: -+ * r2 either valid atags pointer, or zero -+ * r5, r6 corrupted -+ */ -+ -+ .type __vet_atags, %function -+__vet_atags: -+ tst r2, #0x3 @ aligned? -+ bne 1f -+ -+ ldr r5, [r2, #0] @ is first tag ATAG_CORE? -+ subs r5, r5, #ATAG_CORE_SIZE -+ bne 1f -+ ldr r5, [r2, #4] -+ ldr r6, =ATAG_CORE -+ cmp r5, r6 -+ bne 1f -+ -+ mov pc, lr @ atag pointer is ok -+ -+1: mov r2, #0 -+ mov pc, lr ---- linux-2.6.22/arch/arm/kernel/head.S 2007-05-30 08:29:34.000000000 -0500 -+++ linux-2.6.22-bgat/arch/arm/kernel/head.S 2007-05-30 22:05:53.000000000 -0500 -@@ -29,6 +29,10 @@ - #define KERNEL_RAM_VADDR (PAGE_OFFSET + TEXT_OFFSET) - #define KERNEL_RAM_PADDR (PHYS_OFFSET + TEXT_OFFSET) - -+#define ATAG_CORE 0x54410001 -+#define ATAG_CORE_SIZE ((2*4 + 3*4) >> 2) -+ -+ - /* - * swapper_pg_dir is the virtual address of the initial page table. - * We place the page tables 16K below KERNEL_RAM_VADDR. Therefore, we must -@@ -61,7 +65,7 @@ - * - * This is normally called from the decompressor code. The requirements - * are: MMU = off, D-cache = off, I-cache = dont care, r0 = 0, -- * r1 = machine nr. -+ * r1 = machine nr, r2 = atags pointer. - * - * This code is mostly position independent, so if you link the kernel at - * 0xc0008000, you call this at __pa(0xc0008000). -@@ -85,6 +89,7 @@ - bl __lookup_machine_type @ r5=machinfo - movs r8, r5 @ invalid machine (r5=0)? - beq __error_a @ yes, error 'a' -+ bl __vet_atags - bl __create_page_tables - - /* ---- linux-2.6.22/arch/arm/kernel/setup.c 2007-05-30 08:29:34.000000000 -0500 -+++ linux-2.6.22-bgat/arch/arm/kernel/setup.c 2007-05-30 22:07:08.000000000 -0500 -@@ -63,6 +63,8 @@ - unsigned int __machine_arch_type; - EXPORT_SYMBOL(__machine_arch_type); - -+unsigned int __atags_pointer __initdata; -+ - unsigned int system_rev; - EXPORT_SYMBOL(system_rev); - -@@ -780,7 +782,9 @@ - if (mdesc->soft_reboot) - reboot_setup("s"); - -- if (mdesc->boot_params) -+ if (__atags_pointer) -+ tags = phys_to_virt(__atags_pointer); -+ else if (mdesc->boot_params) - tags = phys_to_virt(mdesc->boot_params); - - /* |