Skip to content
Snippets Groups Projects
Commit 9608e7de authored by Albert ARIBAUD's avatar Albert ARIBAUD
Browse files

edminiv2: switch to SPL


ED Mini V2 is based on Orion 5x which boots at fixed
address 0xFFFF0000 in NOR Flash. Place SPL there, and
switch U-Boot from .bin to .img format, stored in
NOR Flash at 0xFFF90000.

Note: this patch was tested on HW and works, i.e.
it boots U-Boot properly, but SPL console output
currently does not appear, due to GD being trashed
by arch/arm/lib/spl.c. This trashing is soon to be
removed, and then ED Mini V2 SPL console output will
become visible.

Signed-off-by: default avatarAlbert ARIBAUD <albert.u.boot@aribaud.net>
parent c1b0fad9
No related branches found
No related tags found
No related merge requests found
/*
* (C) Copyright 2014 Albert ARIBAUD <albert.u.boot@aribaud.net>
*
* Based on:
*
* Allwinner Technology Co., Ltd. <www.allwinnertech.com>
* Tom Cubie <tangliang@allwinnertech.com>
*
* Based on omap-common/u-boot-spl.lds:
*
* (C) Copyright 2002
* Gary Jennejohn, DENX Software Engineering, <garyj@denx.de>
*
* (C) Copyright 2010
* Texas Instruments, <www.ti.com>
* Aneesh V <aneesh@ti.com>
*
* SPDX-License-Identifier: GPL-2.0+
*/
MEMORY { .nor : ORIGIN = CONFIG_SPL_TEXT_BASE,\
LENGTH = CONFIG_SPL_MAX_SIZE }
MEMORY { .bss : ORIGIN = CONFIG_SPL_BSS_START_ADDR, \
LENGTH = CONFIG_SPL_BSS_MAX_SIZE }
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
SECTIONS
{
.text :
{
__start = .;
*(.vectors)
CPUDIR/start.o (.text)
*(.text*)
} > .nor
. = ALIGN(4);
.rodata : { *(SORT_BY_ALIGNMENT(.rodata*)) } >.nor
. = ALIGN(4);
.data : { *(SORT_BY_ALIGNMENT(.data*)) } >.nor
. = ALIGN(4);
.u_boot_list : {
KEEP(*(SORT(.u_boot_list*)));
} > .nor
. = ALIGN(4);
__image_copy_end = .;
_end = .;
.bss :
{
. = ALIGN(4);
__bss_start = .;
*(.bss*)
. = ALIGN(4);
__bss_end = .;
} > .bss
}
/*
* (C) Copyright 2014 Albert ARIBAUD <albert.u.boot@aribaud.net>
*
* SPDX-License-Identifier: GPL-2.0+
*/
#ifndef _ASM_ARCH_SPL_H_
#define _ASM_ARCH_SPL_H_
#define BOOT_DEVICE_NOR 1
...@@ -5,6 +5,7 @@ choice ...@@ -5,6 +5,7 @@ choice
config TARGET_EDMINIV2 config TARGET_EDMINIV2
bool "LaCie Ethernet Disk mini V2" bool "LaCie Ethernet Disk mini V2"
select SUPPORT_SPL
endchoice endchoice
......
...@@ -234,7 +234,9 @@ int arch_cpu_init(void) ...@@ -234,7 +234,9 @@ int arch_cpu_init(void)
/* Enable and invalidate L2 cache in write through mode */ /* Enable and invalidate L2 cache in write through mode */
invalidate_l2_cache(); invalidate_l2_cache();
#ifdef CONFIG_SPL_BUILD
orion5x_config_adr_windows(); orion5x_config_adr_windows();
#endif
return 0; return 0;
} }
......
...@@ -62,14 +62,16 @@ ...@@ -62,14 +62,16 @@
/* /*
* Low-level init happens right after start.S has switched to SVC32, * Low-level init happens right after start.S has switched to SVC32,
* flushed and disabled caches and disabled MMU. We're still running * flushed and disabled caches and disabled MMU. We're still running
* from the boot chip select, so the first thing we should do is set * from the boot chip select, so the first thing SPL should do is to
* up RAM for us to relocate into. * set up the RAM to copy U-Boot into.
*/ */
.globl lowlevel_init .globl lowlevel_init
lowlevel_init: lowlevel_init:
#ifdef CONFIG_SPL_BUILD
/* Use 'r4 as the base for internal register accesses */ /* Use 'r4 as the base for internal register accesses */
ldr r4, =ORION5X_REGS_PHY_BASE ldr r4, =ORION5X_REGS_PHY_BASE
...@@ -273,5 +275,13 @@ lowlevel_init: ...@@ -273,5 +275,13 @@ lowlevel_init:
orr r2, r2, r6 orr r2, r2, r6
str r2, [r3, #0x484] str r2, [r3, #0x484]
/* enable for 2 GB DDR; detection should find out real amount */
sub r6, r6, r6
str r6, [r3, #0x500]
ldr r6, =0x7fff0001
str r6, [r3, #0x504]
#endif /* CONFIG_SPL_BUILD */
/* Return to U-boot via saved link register */ /* Return to U-boot via saved link register */
mov pc, lr mov pc, lr
...@@ -12,6 +12,8 @@ ...@@ -12,6 +12,8 @@
#include <miiphy.h> #include <miiphy.h>
#include <asm/arch/orion5x.h> #include <asm/arch/orion5x.h>
#include "../common/common.h" #include "../common/common.h"
#include <spl.h>
#include <ns16550.h>
DECLARE_GLOBAL_DATA_PTR; DECLARE_GLOBAL_DATA_PTR;
...@@ -83,3 +85,21 @@ void reset_phy(void) ...@@ -83,3 +85,21 @@ void reset_phy(void)
mv_phy_88e1116_init("egiga0", 8); mv_phy_88e1116_init("egiga0", 8);
} }
#endif /* CONFIG_RESET_PHY_R */ #endif /* CONFIG_RESET_PHY_R */
/*
* SPL serial setup and NOR boot device selection
*/
#ifdef CONFIG_SPL_BUILD
void spl_board_init(void)
{
preloader_console_init();
}
u32 spl_boot_device(void)
{
return BOOT_DEVICE_NOR;
}
#endif /* CONFIG_SPL_BUILD */
CONFIG_ARM=y CONFIG_SPL=y
CONFIG_ORION5X=y +S:CONFIG_ARM=y
CONFIG_TARGET_EDMINIV2=y +S:CONFIG_ORION5X=y
+S:CONFIG_TARGET_EDMINIV2=y
...@@ -13,9 +13,30 @@ ...@@ -13,9 +13,30 @@
#define _CONFIG_EDMINIV2_H #define _CONFIG_EDMINIV2_H
/* general settings */ /* general settings */
#define CONFIG_SYS_TEXT_BASE 0xfff90000
#define CONFIG_SYS_GENERIC_BOARD #define CONFIG_SYS_GENERIC_BOARD
/*
* SPL
*/
#define CONFIG_SPL_FRAMEWORK
#define CONFIG_SPL_LIBGENERIC_SUPPORT
#define CONFIG_SPL_LIBCOMMON_SUPPORT
#define CONFIG_SPL_SERIAL_SUPPORT
#define CONFIG_SPL_NOR_SUPPORT
#define CONFIG_SPL_TEXT_BASE 0xffff0000
#define CONFIG_SPL_MAX_SIZE 0x0000fff0
#define CONFIG_SPL_STACK 0x00020000
#define CONFIG_SPL_BSS_START_ADDR 0x00020000
#define CONFIG_SPL_BSS_MAX_SIZE 0x0001ffff
#define CONFIG_SYS_SPL_MALLOC_START 0x00040000
#define CONFIG_SYS_SPL_MALLOC_SIZE 0x0001ffff
#define CONFIG_SPL_LDSCRIPT "$(CPUDIR)/orion5x/u-boot-spl.lds"
#define CONFIG_SPL_BOARD_INIT
#define CONFIG_SYS_UBOOT_BASE 0xfff90000
#define CONFIG_SYS_UBOOT_START 0x00800000
#define CONFIG_SYS_TEXT_BASE 0x00800000
/* /*
* Version number information * Version number information
*/ */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment