arm, davinci: add support for new spl framework
Signed-off-by: Heiko Schocher <hs@denx.de> Cc: Albert ARIBAUD <albert.u.boot@aribaud.net> Cc: Sandeep Paulraj <s-paulraj@ti.com> Cc: Scott Wood <scottwood@freescale.com> Signed-off-by: Sandeep Paulraj <s-paulraj@ti.com>
This commit is contained in:
parent
18e8ff18fa
commit
435199f380
8
Makefile
8
Makefile
@ -416,9 +416,13 @@ $(obj)u-boot.sha1: $(obj)u-boot.bin
|
||||
$(obj)u-boot.dis: $(obj)u-boot
|
||||
$(OBJDUMP) -d $< > $@
|
||||
|
||||
$(obj)u-boot.ubl: $(obj)u-boot-nand.bin
|
||||
$(obj)u-boot.ubl: $(obj)spl/u-boot-spl.bin $(obj)u-boot.bin
|
||||
$(OBJCOPY) ${OBJCFLAGS} --pad-to=$(PAD_TO) -O binary $(obj)spl/u-boot-spl $(obj)spl/u-boot-spl-pad.bin
|
||||
cat $(obj)spl/u-boot-spl-pad.bin $(obj)u-boot.bin > $(obj)u-boot-ubl.bin
|
||||
$(obj)tools/mkimage -n $(UBL_CONFIG) -T ublimage \
|
||||
-e $(CONFIG_SYS_TEXT_BASE) -d $< $@
|
||||
-e $(CONFIG_SYS_TEXT_BASE) -d $(obj)u-boot-ubl.bin $(obj)u-boot.ubl
|
||||
rm $(obj)u-boot-ubl.bin
|
||||
rm $(obj)spl/u-boot-spl-pad.bin
|
||||
|
||||
ifeq ($(CONFIG_SANDBOX),y)
|
||||
GEN_UBOOT = \
|
||||
|
@ -35,6 +35,11 @@ COBJS-$(CONFIG_SOC_DM644X) += dm644x.o
|
||||
COBJS-$(CONFIG_SOC_DM646X) += dm646x.o
|
||||
COBJS-$(CONFIG_DRIVER_TI_EMAC) += lxt972.o dp83848.o et1011c.o ksz8873.o
|
||||
|
||||
ifdef CONFIG_SPL_BUILD
|
||||
COBJS-y += spl.o
|
||||
COBJS-y += dm365_lowlevel.o
|
||||
endif
|
||||
|
||||
SOBJS = reset.o
|
||||
|
||||
ifndef CONFIG_SKIP_LOWLEVEL_INIT
|
||||
|
63
arch/arm/cpu/arm926ejs/davinci/spl.c
Normal file
63
arch/arm/cpu/arm926ejs/davinci/spl.c
Normal file
@ -0,0 +1,63 @@
|
||||
/*
|
||||
* Copyright (C) 2011
|
||||
* Heiko Schocher, DENX Software Engineering, hs@denx.de.
|
||||
*
|
||||
* See file CREDITS for list of people who contributed to this
|
||||
* project.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*/
|
||||
#include <common.h>
|
||||
#include <asm/u-boot.h>
|
||||
#include <asm/utils.h>
|
||||
#include <nand.h>
|
||||
#include <asm/arch/dm365_lowlevel.h>
|
||||
#include <ns16550.h>
|
||||
|
||||
void puts(const char *str)
|
||||
{
|
||||
while (*str)
|
||||
putc(*str++);
|
||||
}
|
||||
|
||||
void putc(char c)
|
||||
{
|
||||
if (c == '\n')
|
||||
NS16550_putc((NS16550_t)(CONFIG_SYS_NS16550_COM1), '\r');
|
||||
|
||||
NS16550_putc((NS16550_t)(CONFIG_SYS_NS16550_COM1), c);
|
||||
}
|
||||
|
||||
inline void hang(void)
|
||||
{
|
||||
puts("### ERROR ### Please RESET the board ###\n");
|
||||
for (;;)
|
||||
;
|
||||
}
|
||||
|
||||
void board_init_f(ulong dummy)
|
||||
{
|
||||
dm36x_lowlevel_init(0);
|
||||
relocate_code(CONFIG_SPL_STACK, NULL, CONFIG_SPL_TEXT_BASE);
|
||||
}
|
||||
|
||||
void board_init_r(gd_t *id, ulong dummy)
|
||||
{
|
||||
|
||||
nand_init();
|
||||
puts("Nand boot...\n");
|
||||
nand_boot();
|
||||
}
|
@ -126,7 +126,15 @@ _fiq:
|
||||
|
||||
.globl _TEXT_BASE
|
||||
_TEXT_BASE:
|
||||
#ifdef CONFIG_NAND_SPL /* deprecated, use instead CONFIG_SPL_BUILD */
|
||||
.word CONFIG_SYS_TEXT_BASE
|
||||
#else
|
||||
#ifdef CONFIG_SPL_BUILD
|
||||
.word CONFIG_SPL_TEXT_BASE
|
||||
#else
|
||||
.word CONFIG_SYS_TEXT_BASE
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
* These are defined in the board-specific linker script.
|
||||
@ -192,7 +200,15 @@ reset:
|
||||
|
||||
/* Set stackpointer in internal RAM to call board_init_f */
|
||||
call_board_init_f:
|
||||
#ifdef CONFIG_NAND_SPL /* deprecated, use instead CONFIG_SPL_BUILD */
|
||||
ldr sp, =(CONFIG_SYS_INIT_SP_ADDR)
|
||||
#else
|
||||
#ifdef CONFIG_SPL_BUILD
|
||||
ldr sp, =(CONFIG_SPL_STACK)
|
||||
#else
|
||||
ldr sp, =(CONFIG_SYS_INIT_SP_ADDR)
|
||||
#endif
|
||||
#endif
|
||||
bic sp, sp, #7 /* 8-byte alignment for ABI compliance */
|
||||
ldr r0,=0x00000000
|
||||
bl board_init_f
|
||||
@ -217,6 +233,7 @@ stack_setup:
|
||||
mov sp, r4
|
||||
|
||||
adr r0, _start
|
||||
sub r9, r6, r0 /* r9 <- relocation offset */
|
||||
cmp r0, r6
|
||||
beq clear_bss /* skip relocation */
|
||||
mov r1, r6 /* r1 <- scratch for copy loop */
|
||||
@ -271,12 +288,17 @@ fixnext:
|
||||
#endif
|
||||
|
||||
clear_bss:
|
||||
#ifndef CONFIG_SPL_BUILD
|
||||
#ifdef CONFIG_SPL_BUILD
|
||||
/* No relocation for SPL */
|
||||
ldr r0, =__bss_start
|
||||
ldr r1, =__bss_end__
|
||||
#else
|
||||
ldr r0, _bss_start_ofs
|
||||
ldr r1, _bss_end_ofs
|
||||
mov r4, r6 /* reloc addr */
|
||||
add r0, r0, r4
|
||||
add r1, r1, r4
|
||||
#endif
|
||||
mov r2, #0x00000000 /* clear */
|
||||
|
||||
clbss_l:str r2, [r0] /* clear loop... */
|
||||
@ -284,6 +306,7 @@ clbss_l:str r2, [r0] /* clear loop... */
|
||||
cmp r0, r1
|
||||
bne clbss_l
|
||||
|
||||
#ifndef CONFIG_SPL_BUILD
|
||||
bl coloured_LED_init
|
||||
bl red_led_on
|
||||
#endif
|
||||
|
@ -64,3 +64,4 @@ CONFIG_SPL_POWER_SUPPORT (drivers/power/libpower.o)
|
||||
CONFIG_SPL_NAND_SUPPORT (drivers/mtd/nand/libnand.o)
|
||||
CONFIG_SPL_DMA_SUPPORT (drivers/dma/libdma.o)
|
||||
CONFIG_SPL_POST_MEM_SUPPORT (post/drivers/memory.o)
|
||||
CONFIG_SPL_NAND_LOAD (drivers/mtd/nand/nand_spl_load.o)
|
||||
|
@ -30,6 +30,9 @@ ifdef CONFIG_SPL_BUILD
|
||||
ifdef CONFIG_SPL_NAND_SIMPLE
|
||||
COBJS-y += nand_spl_simple.o
|
||||
endif
|
||||
ifdef CONFIG_SPL_NAND_LOAD
|
||||
COBJS-y += nand_spl_load.o
|
||||
endif
|
||||
else
|
||||
COBJS-y += nand.o
|
||||
COBJS-y += nand_bbt.o
|
||||
|
56
drivers/mtd/nand/nand_spl_load.c
Normal file
56
drivers/mtd/nand/nand_spl_load.c
Normal file
@ -0,0 +1,56 @@
|
||||
/*
|
||||
* Copyright (C) 2011
|
||||
* Heiko Schocher, DENX Software Engineering, hs@denx.de.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <nand.h>
|
||||
|
||||
/*
|
||||
* The main entry for NAND booting. It's necessary that SDRAM is already
|
||||
* configured and available since this code loads the main U-Boot image
|
||||
* from NAND into SDRAM and starts it from there.
|
||||
*/
|
||||
void nand_boot(void)
|
||||
{
|
||||
int ret;
|
||||
__attribute__((noreturn)) void (*uboot)(void);
|
||||
|
||||
/*
|
||||
* Load U-Boot image from NAND into RAM
|
||||
*/
|
||||
ret = nand_spl_load_image(CONFIG_SYS_NAND_U_BOOT_OFFS,
|
||||
CONFIG_SYS_NAND_U_BOOT_SIZE,
|
||||
(void *)CONFIG_SYS_NAND_U_BOOT_DST);
|
||||
|
||||
#ifdef CONFIG_NAND_ENV_DST
|
||||
ret = nand_spl_load_image(CONFIG_ENV_OFFSET, CONFIG_ENV_SIZE,
|
||||
(void *)CONFIG_NAND_ENV_DST);
|
||||
|
||||
#ifdef CONFIG_ENV_OFFSET_REDUND
|
||||
ret = nand_spl_load_image(CONFIG_ENV_OFFSET_REDUND, CONFIG_ENV_SIZE,
|
||||
(void *)CONFIG_NAND_ENV_DST + CONFIG_ENV_SIZE);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Jump to U-Boot image
|
||||
*/
|
||||
uboot = (void *)CONFIG_SYS_NAND_U_BOOT_START;
|
||||
(*uboot)();
|
||||
}
|
Loading…
Reference in New Issue
Block a user