diff options
author | Stefan Kristiansson <stefan.kristiansson@saunalahti.fi> | 2011-11-10 10:38:29 -0500 |
---|---|---|
committer | Jonas Bonn <jonas@southpole.se> | 2012-02-17 03:55:22 -0500 |
commit | dec830189e1e192a80f574243a2dc31bdc1c4fc5 (patch) | |
tree | 864ae5fd9b3975805195eb2b0396d80e6a408425 /arch/openrisc/kernel/head.S | |
parent | 2e1c958de4e22b6badc13dba1a0ebaa5aa798664 (diff) |
openrisc: enable passing of flattened device tree pointer
This patch enables passing a fdt pointer to the kernel.
This makes for the kernel parameter API:
void kernel(unsigned int fdt);
which, in accordance with the OpenRISC ABI results in:
r3 = pointer to fdt
Signed-off-by: Stefan Kristiansson <stefan.kristiansson@saunalahti.fi>
Signed-off-by: Jonas Bonn <jonas@southpole.se>
Diffstat (limited to 'arch/openrisc/kernel/head.S')
-rw-r--r-- | arch/openrisc/kernel/head.S | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/arch/openrisc/kernel/head.S b/arch/openrisc/kernel/head.S index c75018d22644..1088b5fca3bd 100644 --- a/arch/openrisc/kernel/head.S +++ b/arch/openrisc/kernel/head.S | |||
@@ -26,6 +26,7 @@ | |||
26 | #include <asm/cache.h> | 26 | #include <asm/cache.h> |
27 | #include <asm/spr_defs.h> | 27 | #include <asm/spr_defs.h> |
28 | #include <asm/asm-offsets.h> | 28 | #include <asm/asm-offsets.h> |
29 | #include <linux/of_fdt.h> | ||
29 | 30 | ||
30 | #define tophys(rd,rs) \ | 31 | #define tophys(rd,rs) \ |
31 | l.movhi rd,hi(-KERNELBASE) ;\ | 32 | l.movhi rd,hi(-KERNELBASE) ;\ |
@@ -440,6 +441,9 @@ _dispatch_do_ipage_fault: | |||
440 | __HEAD | 441 | __HEAD |
441 | .global _start | 442 | .global _start |
442 | _start: | 443 | _start: |
444 | /* save kernel parameters */ | ||
445 | l.or r25,r0,r3 /* pointer to fdt */ | ||
446 | |||
443 | /* | 447 | /* |
444 | * ensure a deterministic start | 448 | * ensure a deterministic start |
445 | */ | 449 | */ |
@@ -471,7 +475,6 @@ _start: | |||
471 | CLEAR_GPR(r22) | 475 | CLEAR_GPR(r22) |
472 | CLEAR_GPR(r23) | 476 | CLEAR_GPR(r23) |
473 | CLEAR_GPR(r24) | 477 | CLEAR_GPR(r24) |
474 | CLEAR_GPR(r25) | ||
475 | CLEAR_GPR(r26) | 478 | CLEAR_GPR(r26) |
476 | CLEAR_GPR(r27) | 479 | CLEAR_GPR(r27) |
477 | CLEAR_GPR(r28) | 480 | CLEAR_GPR(r28) |
@@ -565,6 +568,18 @@ enable_mmu: | |||
565 | // reset the simulation counters | 568 | // reset the simulation counters |
566 | l.nop 5 | 569 | l.nop 5 |
567 | 570 | ||
571 | /* check fdt header magic word */ | ||
572 | l.lwz r3,0(r25) /* load magic from fdt into r3 */ | ||
573 | l.movhi r4,hi(OF_DT_HEADER) | ||
574 | l.ori r4,r4,lo(OF_DT_HEADER) | ||
575 | l.sfeq r3,r4 | ||
576 | l.bf _fdt_found | ||
577 | l.nop | ||
578 | /* magic number mismatch, set fdt pointer to null */ | ||
579 | l.or r25,r0,r0 | ||
580 | _fdt_found: | ||
581 | /* pass fdt pointer to or32_early_setup in r3 */ | ||
582 | l.or r3,r0,r25 | ||
568 | LOAD_SYMBOL_2_GPR(r24, or32_early_setup) | 583 | LOAD_SYMBOL_2_GPR(r24, or32_early_setup) |
569 | l.jalr r24 | 584 | l.jalr r24 |
570 | l.nop | 585 | l.nop |