Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2c408d14 authored by Magnus Damm's avatar Magnus Damm Committed by Simon Horman
Browse files

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:

0ce53cdc ARM: mach-shmobile: Use DT_MACHINE for mackerel

Signed-off-by: default avatarMagnus Damm <damm@opensource.se>
Signed-off-by: default avatarSimon Horman <horms+renesas@verge.net.au>
parent ad81f054
Loading
Loading
Loading
Loading
+39 −4
Original line number Original line Diff line number Diff line
@@ -55,12 +55,47 @@ __tmp_stack:
__continue:
__continue:
#endif /* CONFIG_ZBOOT_ROM_MMC || CONFIG_ZBOOT_ROM_SH_MOBILE_SDHI */
#endif /* CONFIG_ZBOOT_ROM_MMC || CONFIG_ZBOOT_ROM_SH_MOBILE_SDHI */


	/* Set board ID necessary for boot */
	adr	r0, dtb_info
	ldr	r7, 1f				@ Set machine type register
	ldmia	r0, {r1, r3, r4, r5, r7}
	mov	r8, #0				@ pass null pointer as atag

	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
	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 :
2 :


#endif /* CONFIG_ZBOOT_ROM */
#endif /* CONFIG_ZBOOT_ROM */
+0 −2
Original line number Original line Diff line number Diff line
#ifndef ZBOOT_H
#ifndef ZBOOT_H
#define ZBOOT_H
#define ZBOOT_H


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


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


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