Skip to content

Commit

Permalink
ARM: shmobile: Update romImage to relocate appended DTB
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Magnus Damm authored and Simon Horman committed Jul 17, 2013
1 parent ad81f05 commit 2c408d1
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 6 deletions.
43 changes: 39 additions & 4 deletions arch/arm/boot/compressed/head-shmobile.S
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
2 changes: 0 additions & 2 deletions arch/arm/mach-shmobile/include/mach/zboot.h
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
#ifndef ZBOOT_H
#define ZBOOT_H

#include <asm/mach-types.h>
#include <mach/zboot_macros.h>

/**************************************************
Expand All @@ -11,7 +10,6 @@
**************************************************/

#ifdef CONFIG_MACH_MACKEREL
#define MACH_TYPE MACH_TYPE_MACKEREL
#define MEMORY_START 0x40000000
#include "mach/head-mackerel.txt"
#else
Expand Down

0 comments on commit 2c408d1

Please sign in to comment.