diff options
author | Bill Gatliff <bgat@billgatliff.com> | 2007-05-31 17:02:22 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2007-07-12 06:13:33 -0400 |
commit | 9d20fdd58e74d4d26dc5216efaaa0f800c23dd3a (patch) | |
tree | bc8520791f304ce297a52f575930c2797067521c /arch/arm/kernel/head.S | |
parent | 7d09e85448dfa78e3e58186c934449aaf6d49b50 (diff) |
[ARM] 4423/1: add ATAGS support
Examines the ATAGS pointer (r2) at boot, and interprets
a nonzero value as a reference to an ATAGS structure. A
suitable ATAGS structure replaces the kernel's command line.
Signed-off-by: Bill Gatliff <bgat@billgatliff.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/kernel/head.S')
-rw-r--r-- | arch/arm/kernel/head.S | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/arch/arm/kernel/head.S b/arch/arm/kernel/head.S index 41f98b4ba2ee..7898cbc9861a 100644 --- a/arch/arm/kernel/head.S +++ b/arch/arm/kernel/head.S | |||
@@ -29,6 +29,10 @@ | |||
29 | #define KERNEL_RAM_VADDR (PAGE_OFFSET + TEXT_OFFSET) | 29 | #define KERNEL_RAM_VADDR (PAGE_OFFSET + TEXT_OFFSET) |
30 | #define KERNEL_RAM_PADDR (PHYS_OFFSET + TEXT_OFFSET) | 30 | #define KERNEL_RAM_PADDR (PHYS_OFFSET + TEXT_OFFSET) |
31 | 31 | ||
32 | #define ATAG_CORE 0x54410001 | ||
33 | #define ATAG_CORE_SIZE ((2*4 + 3*4) >> 2) | ||
34 | |||
35 | |||
32 | /* | 36 | /* |
33 | * swapper_pg_dir is the virtual address of the initial page table. | 37 | * swapper_pg_dir is the virtual address of the initial page table. |
34 | * We place the page tables 16K below KERNEL_RAM_VADDR. Therefore, we must | 38 | * We place the page tables 16K below KERNEL_RAM_VADDR. Therefore, we must |
@@ -61,7 +65,7 @@ | |||
61 | * | 65 | * |
62 | * This is normally called from the decompressor code. The requirements | 66 | * This is normally called from the decompressor code. The requirements |
63 | * are: MMU = off, D-cache = off, I-cache = dont care, r0 = 0, | 67 | * are: MMU = off, D-cache = off, I-cache = dont care, r0 = 0, |
64 | * r1 = machine nr. | 68 | * r1 = machine nr, r2 = atags pointer. |
65 | * | 69 | * |
66 | * This code is mostly position independent, so if you link the kernel at | 70 | * This code is mostly position independent, so if you link the kernel at |
67 | * 0xc0008000, you call this at __pa(0xc0008000). | 71 | * 0xc0008000, you call this at __pa(0xc0008000). |
@@ -85,6 +89,7 @@ ENTRY(stext) | |||
85 | bl __lookup_machine_type @ r5=machinfo | 89 | bl __lookup_machine_type @ r5=machinfo |
86 | movs r8, r5 @ invalid machine (r5=0)? | 90 | movs r8, r5 @ invalid machine (r5=0)? |
87 | beq __error_a @ yes, error 'a' | 91 | beq __error_a @ yes, error 'a' |
92 | bl __vet_atags | ||
88 | bl __create_page_tables | 93 | bl __create_page_tables |
89 | 94 | ||
90 | /* | 95 | /* |