| From a525334825811a408225b449440a19fc42af42b7 Mon Sep 17 00:00:00 2001 |
| From: Magnus Damm <damm@opensource.se> |
| Date: Thu, 27 Jun 2013 08:48:07 +0900 |
| Subject: ARM: shmobile: Update romImage to relocate appended DTB |
| |
| Instead of relying of MACH_TYPE for board identification, |
| update the romImage code to relocate an appended DTB to |
| the beginning of RAM. This implementation is independent |
| of ARM_APPENDED_DTB, this because it is necessary to copy |
| the DTB to memory so the kernel can access it. |
| |
| Without this patch Mackerel does not boot via the Mask ROM |
| over USB (r_usb_boot) - this since non-DT boot was broken |
| ages ago in commit: |
| |
| 0ce53cd ARM: mach-shmobile: Use DT_MACHINE for mackerel |
| |
| Signed-off-by: Magnus Damm <damm@opensource.se> |
| Signed-off-by: Simon Horman <horms+renesas@verge.net.au> |
| (cherry picked from commit 2c408d149299e99c89fc4be80fb4fe00a7016f02) |
| Signed-off-by: Simon Horman <horms+renesas@verge.net.au> |
| --- |
| arch/arm/boot/compressed/head-shmobile.S | 43 ++++++++++++++++++++++++++--- |
| arch/arm/mach-shmobile/include/mach/zboot.h | 2 -- |
| 2 files changed, 39 insertions(+), 6 deletions(-) |
| |
| diff --git a/arch/arm/boot/compressed/head-shmobile.S b/arch/arm/boot/compressed/head-shmobile.S |
| index e2d63633..e7f80928 100644 |
| --- a/arch/arm/boot/compressed/head-shmobile.S |
| +++ b/arch/arm/boot/compressed/head-shmobile.S |
| @@ -55,12 +55,47 @@ __tmp_stack: |
| __continue: |
| #endif /* CONFIG_ZBOOT_ROM_MMC || CONFIG_ZBOOT_ROM_SH_MOBILE_SDHI */ |
| |
| - /* Set board ID necessary for boot */ |
| - ldr r7, 1f @ Set machine type register |
| - mov r8, #0 @ pass null pointer as atag |
| + adr r0, dtb_info |
| + ldmia r0, {r1, r3, r4, r5, r7} |
| + |
| + sub r0, r0, r1 @ calculate the delta offset |
| + add r5, r5, r0 @ _edata |
| + |
| + ldr lr, [r5, #0] @ check if valid DTB is present |
| + cmp lr, r3 |
| + bne 0f |
| + |
| + add r9, r7, #31 @ rounded up to a multiple |
| + bic r9, r9, #31 @ ... of 32 bytes |
| + |
| + add r6, r9, r5 @ copy from _edata |
| + add r9, r9, r4 @ to MEMORY_START |
| + |
| +1: ldmdb r6!, {r0 - r3, r10 - r12, lr} |
| + cmp r6, r5 |
| + stmdb r9!, {r0 - r3, r10 - r12, lr} |
| + bhi 1b |
| + |
| + /* Success: Zero board ID, pointer to start of memory for atag/dtb */ |
| + mov r7, #0 |
| + mov r8, r4 |
| b 2f |
| |
| -1 : .long MACH_TYPE |
| + .align 2 |
| +dtb_info: |
| + .word dtb_info |
| +#ifndef __ARMEB__ |
| + .word 0xedfe0dd0 @ sig is 0xd00dfeed big endian |
| +#else |
| + .word 0xd00dfeed |
| +#endif |
| + .word MEMORY_START |
| + .word _edata |
| + .word 0x4000 @ maximum DTB size |
| +0: |
| + /* Failure: Zero board ID, NULL atag/dtb */ |
| + mov r7, #0 |
| + mov r8, #0 @ pass null pointer as atag |
| 2 : |
| |
| #endif /* CONFIG_ZBOOT_ROM */ |
| diff --git a/arch/arm/mach-shmobile/include/mach/zboot.h b/arch/arm/mach-shmobile/include/mach/zboot.h |
| index f2d8744c..c3c4669a 100644 |
| --- a/arch/arm/mach-shmobile/include/mach/zboot.h |
| +++ b/arch/arm/mach-shmobile/include/mach/zboot.h |
| @@ -1,7 +1,6 @@ |
| #ifndef ZBOOT_H |
| #define ZBOOT_H |
| |
| -#include <asm/mach-types.h> |
| #include <mach/zboot_macros.h> |
| |
| /************************************************** |
| @@ -11,7 +10,6 @@ |
| **************************************************/ |
| |
| #ifdef CONFIG_MACH_MACKEREL |
| -#define MACH_TYPE MACH_TYPE_MACKEREL |
| #define MEMORY_START 0x40000000 |
| #include "mach/head-mackerel.txt" |
| #else |
| -- |
| 1.8.4.3.gca3854a |
| |