9
0
Fork 0

imx: Internal boot sources, handle all header offsets

Makes the internal boot source configurable.
Also changes section names slightly so that .flash_header_0x1000 isn't
matched to .flash_header_0x100* etc.

Signed-off-by: Marc Reilly <marc@cpdesign.com.au>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
Marc Reilly 2010-10-01 13:40:57 +10:00 committed by Sascha Hauer
parent b82ee742d0
commit 5785072b37
3 changed files with 53 additions and 15 deletions

View File

@ -40,6 +40,28 @@ config ARCH_IMX_INTERNAL_BOOT
bool "support internal boot mode"
depends on ARCH_IMX25 || ARCH_IMX35
choice
depends on ARCH_IMX_INTERNAL_BOOT
prompt "Internal boot source"
help
Determines the location of the header information for internal boot.
0x100 for OneNAND
0x400 for NAND, SD/MMC or Serial ROM
0x1000 for NOR
config ARCH_IMX_INTERNAL_BOOT_NAND
default y
bool "NAND, SD/MMC, Serial ROM"
select NAND_IMX_BOOT
config ARCH_IMX_INTERNAL_BOOT_NOR
bool "NOR"
config ARCH_IMX_INTERNAL_BOOT_ONENAND
bool "OneNAND"
endchoice
comment "Freescale i.MX System-on-Chip"
choice

View File

@ -5,13 +5,13 @@
.pre_image : { \
KEEP(*(.flash_header_start*)) \
. = 0x100; \
KEEP(*(.flash_header_0x100*)) \
KEEP(*(.dcd_entry_0x100*)) \
KEEP(*(.image_len_0x100*)) \
KEEP(*(.flash_header_0x0100*)) \
KEEP(*(.dcd_entry_0x0100*)) \
KEEP(*(.image_len_0x0100*)) \
. = 0x400; \
KEEP(*(.flash_header_0x400*)) \
KEEP(*(.dcd_entry_0x400*)) \
KEEP(*(.image_len_0x400*)) \
KEEP(*(.flash_header_0x0400*)) \
KEEP(*(.dcd_entry_0x0400*)) \
KEEP(*(.image_len_0x0400*)) \
. = 0x1000; \
KEEP(*(.flash_header_0x1000*)) \
KEEP(*(.dcd_entry_0x1000*)) \

View File

@ -3,17 +3,33 @@
#define __flash_header_start __section(.flash_header_start)
#define __flash_header_0x100 __section(.flash_header_0x100)
#define __dcd_entry_0x100 __section(.dcd_entry_0x100)
#define __image_len_0x100 __section(.image_len_0x100)
#if defined(CONFIG_ARCH_IMX_INTERNAL_BOOT_NOR)
#define __flash_header_section __section(.flash_header_0x1000)
#define __dcd_entry_section __section(.dcd_entry_0x1000)
#define __image_len_section __section(.image_len_0x1000)
#define FLASH_HEADER_OFFSET 0x1000
#elif defined(CONFIG_ARCH_IMX_INTERNAL_BOOT_ONENAND)
#define __flash_header_section __section(.flash_header_0x0100)
#define __dcd_entry_section __section(.dcd_entry_0x0100)
#define __image_len_section __section(.image_len_0x0100)
#define FLASH_HEADER_OFFSET 0x0100
#else
#define __flash_header_section __section(.flash_header_0x0400)
#define __dcd_entry_section __section(.dcd_entry_0x0400)
#define __image_len_section __section(.image_len_0x0400)
#define FLASH_HEADER_OFFSET 0x0400
#endif
#define __flash_header_0x400 __section(.flash_header_0x400)
#define __dcd_entry_0x400 __section(.dcd_entry_0x400)
#define __image_len_0x400 __section(.image_len_0x400)
/*
* NOR is not automatically copied anywhere by the boot ROM
*/
#if defined (CONFIG_ARCH_IMX_INTERNAL_BOOT_NOR)
#define DEST_BASE IMX_CS0_BASE
#else
#define DEST_BASE TEXT_BASE
#endif
#define __flash_header_0x1000 __section(.flash_header_0x1000)
#define __dcd_entry_0x1000 __section(.dcd_entry_0x1000)
#define __image_len_0x1000 __section(.image_len_0x1000)
#define FLASH_HEADER_BASE (DEST_BASE + FLASH_HEADER_OFFSET)
struct imx_dcd_entry {
unsigned long ptr_type;