[U-Boot] [PATCH 1/2] omap4/5/am33xx: Make lowlevel_init available to all armv7 platforms
R, Sricharan
r.sricharan at ti.com
Mon Aug 13 08:28:20 CEST 2012
Hi Tom,
On Thu, Aug 9, 2012 at 9:31 PM, Tom Rini <trini at ti.com> wrote:
> Make the lowlevel_init function that these platforms have which just
> sets up the stack and calls a C function available to all armv7
> platforms. As part of this we change some of the macros that are used
> to be more clear. Previously (except for am335x evm) we had been
> setting CONFIG_SYS_INIT_SP_ADDR to a series of new defines that are
> equivalent to simply referencing NON_SECURE_SRAM_END. On am335x evm we
> should have been doing this initially and do now.
>
> Cc: Sricharan R <r.sricharan at ti.com>
> Signed-off-by: Tom Rini <trini at ti.com>
> ---
> arch/arm/cpu/armv7/Makefile | 6 ++-
> arch/arm/cpu/armv7/lowlevel_init.S | 50 ++++++++++++++++++++++++
> arch/arm/cpu/armv7/omap-common/lowlevel_init.S | 18 ---------
> arch/arm/include/asm/arch-am33xx/hardware.h | 3 +-
> arch/arm/include/asm/arch-am33xx/omap.h | 1 -
> arch/arm/include/asm/arch-omap4/omap.h | 1 -
> arch/arm/include/asm/arch-omap5/omap.h | 2 -
> include/configs/am335x_evm.h | 4 +-
> include/configs/omap4_common.h | 7 +---
> include/configs/omap5_evm.h | 7 +---
> 10 files changed, 63 insertions(+), 36 deletions(-)
> create mode 100644 arch/arm/cpu/armv7/lowlevel_init.S
>
> diff --git a/arch/arm/cpu/armv7/Makefile b/arch/arm/cpu/armv7/Makefile
> index 6b2addc..788eada 100644
> --- a/arch/arm/cpu/armv7/Makefile
> +++ b/arch/arm/cpu/armv7/Makefile
> @@ -32,8 +32,12 @@ COBJS += cache_v7.o
> COBJS += cpu.o
> COBJS += syslib.o
>
> +ifneq ($(CONFIG_AM33XX)$(CONFIG_OMAP44XX)$(CONFIG_OMAP54XX),)
> +SOBJS += lowlevel_init.o
> +endif
> +
> SRCS := $(START:.o=.S) $(COBJS:.o=.c)
> -OBJS := $(addprefix $(obj),$(COBJS))
> +OBJS := $(addprefix $(obj),$(COBJS) $(SOBJS))
> START := $(addprefix $(obj),$(START))
>
> all: $(obj).depend $(START) $(LIB)
> diff --git a/arch/arm/cpu/armv7/lowlevel_init.S b/arch/arm/cpu/armv7/lowlevel_init.S
> new file mode 100644
> index 0000000..ef04575
> --- /dev/null
> +++ b/arch/arm/cpu/armv7/lowlevel_init.S
> @@ -0,0 +1,50 @@
> +/*
> + * A lowlevel_init function that sets up the stack to call a C function to
> + * perform further init.
> + *
> + * (C) Copyright 2010
> + * Texas Instruments, <www.ti.com>
> + *
> + * Author :
> + * Aneesh V <aneesh at ti.com>
> + *
> + * 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 <asm-offsets.h>
> +#include <config.h>
> +#include <linux/linkage.h>
> +
> +ENTRY(lowlevel_init)
> + /*
> + * Setup a temporary stack
> + */
> + ldr sp, =CONFIG_SYS_INIT_SP_ADDR
> +
> + /*
> + * Save the old lr(passed in ip) and the current lr to stack
> + */
> + push {ip, lr}
> +
> + /*
> + * go setup pll, mux, memory
> + */
> + bl s_init
> + pop {ip, pc}
> +ENDPROC(lowlevel_init)
> diff --git a/arch/arm/cpu/armv7/omap-common/lowlevel_init.S b/arch/arm/cpu/armv7/omap-common/lowlevel_init.S
> index ccc6bb6..1ece073 100644
> --- a/arch/arm/cpu/armv7/omap-common/lowlevel_init.S
> +++ b/arch/arm/cpu/armv7/omap-common/lowlevel_init.S
> @@ -78,24 +78,6 @@ ENTRY(save_boot_params)
> bx lr
> ENDPROC(save_boot_params)
>
> -ENTRY(lowlevel_init)
> - /*
> - * Setup a temporary stack
> - */
> - ldr sp, =LOW_LEVEL_SRAM_STACK
> -
> - /*
> - * Save the old lr(passed in ip) and the current lr to stack
> - */
> - push {ip, lr}
> -
> - /*
> - * go setup pll, mux, memory
> - */
> - bl s_init
> - pop {ip, pc}
> -ENDPROC(lowlevel_init)
> -
> ENTRY(set_pl310_ctrl_reg)
> PUSH {r4-r11, lr} @ save registers - ROM code may pollute
> @ our registers
> diff --git a/arch/arm/include/asm/arch-am33xx/hardware.h b/arch/arm/include/asm/arch-am33xx/hardware.h
> index c617331..62332f2 100644
> --- a/arch/arm/include/asm/arch-am33xx/hardware.h
> +++ b/arch/arm/include/asm/arch-am33xx/hardware.h
> @@ -19,8 +19,9 @@
> #ifndef __AM33XX_HARDWARE_H
> #define __AM33XX_HARDWARE_H
>
> +#include <asm/arch/omap.h>
> +
> /* Module base addresses */
> -#define LOW_LEVEL_SRAM_STACK 0x4030B7FC
> #define UART0_BASE 0x44E09000
>
> /* DM Timer base addresses */
> diff --git a/arch/arm/include/asm/arch-am33xx/omap.h b/arch/arm/include/asm/arch-am33xx/omap.h
> index fc2b7a5..850f8a5 100644
> --- a/arch/arm/include/asm/arch-am33xx/omap.h
> +++ b/arch/arm/include/asm/arch-am33xx/omap.h
> @@ -30,7 +30,6 @@
> */
> #define NON_SECURE_SRAM_START 0x40304000
> #define NON_SECURE_SRAM_END 0x4030E000
> -#define LOW_LEVEL_SRAM_STACK 0x4030B7FC
>
> /* ROM code defines */
> /* Boot device */
> diff --git a/arch/arm/include/asm/arch-omap4/omap.h b/arch/arm/include/asm/arch-omap4/omap.h
> index 03bd923..d4b5076 100644
> --- a/arch/arm/include/asm/arch-omap4/omap.h
> +++ b/arch/arm/include/asm/arch-omap4/omap.h
> @@ -172,7 +172,6 @@ struct control_lpddr2io_regs {
> /* base address for indirect vectors (internal boot mode) */
> #define SRAM_ROM_VECT_BASE 0x4030D000
> /* Temporary SRAM stack used while low level init is done */
> -#define LOW_LEVEL_SRAM_STACK NON_SECURE_SRAM_END
> #define SRAM_SCRATCH_SPACE_ADDR NON_SECURE_SRAM_START
> /* SRAM scratch space entries */
> #define OMAP4_SRAM_SCRATCH_OMAP4_REV SRAM_SCRATCH_SPACE_ADDR
> diff --git a/arch/arm/include/asm/arch-omap5/omap.h b/arch/arm/include/asm/arch-omap5/omap.h
> index 7f05cb5..9dce49a 100644
> --- a/arch/arm/include/asm/arch-omap5/omap.h
> +++ b/arch/arm/include/asm/arch-omap5/omap.h
> @@ -262,8 +262,6 @@ struct omap_sys_ctrl_regs {
> #define NON_SECURE_SRAM_END 0x40320000 /* Not inclusive */
> /* base address for indirect vectors (internal boot mode) */
> #define SRAM_ROM_VECT_BASE 0x4031F000
> -/* Temporary SRAM stack used while low level init is done */
> -#define LOW_LEVEL_SRAM_STACK NON_SECURE_SRAM_END
>
> #define SRAM_SCRATCH_SPACE_ADDR NON_SECURE_SRAM_START
> /*
> diff --git a/include/configs/am335x_evm.h b/include/configs/am335x_evm.h
> index 2bfe8c6..a8a6b8e 100644
> --- a/include/configs/am335x_evm.h
> +++ b/include/configs/am335x_evm.h
> @@ -148,7 +148,7 @@
> #define CONFIG_MAX_RAM_BANK_SIZE (1024 << 20) /* 1GB */
>
> #define CONFIG_SYS_SDRAM_BASE PHYS_DRAM_1
> -#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_SDRAM_BASE + 0x1000 - \
> +#define CONFIG_SYS_INIT_SP_ADDR (NON_SECURE_SRAM_END - \
> GENERATED_GBL_DATA_SIZE)
> /* Platform/Board specific defs */
> #define CONFIG_SYS_TIMERBASE 0x48040000 /* Use Timer2 */
> @@ -195,7 +195,7 @@
> #define CONFIG_SPL
> #define CONFIG_SPL_TEXT_BASE 0x402F0400
> #define CONFIG_SPL_MAX_SIZE (46 * 1024)
> -#define CONFIG_SPL_STACK LOW_LEVEL_SRAM_STACK
> +#define CONFIG_SPL_STACK CONFIG_SYS_INIT_SP_ADDR
>
> #define CONFIG_SPL_BSS_START_ADDR 0x80000000
> #define CONFIG_SPL_BSS_MAX_SIZE 0x80000 /* 512 KB */
> diff --git a/include/configs/omap4_common.h b/include/configs/omap4_common.h
> index 6f298a1..2771839 100644
> --- a/include/configs/omap4_common.h
> +++ b/include/configs/omap4_common.h
> @@ -225,10 +225,7 @@
> #define CONFIG_NR_DRAM_BANKS 1
>
> #define CONFIG_SYS_SDRAM_BASE 0x80000000
> -#define CONFIG_SYS_INIT_RAM_ADDR 0x4030D800
> -#define CONFIG_SYS_INIT_RAM_SIZE 0x800
> -#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_INIT_RAM_ADDR + \
> - CONFIG_SYS_INIT_RAM_SIZE - \
> +#define CONFIG_SYS_INIT_SP_ADDR (NON_SECURE_SRAM_END - \
> GENERATED_GBL_DATA_SIZE)
>
> #ifndef CONFIG_SYS_L2CACHE_OFF
> @@ -249,7 +246,7 @@
> #define CONFIG_SPL
> #define CONFIG_SPL_TEXT_BASE 0x40304350
> #define CONFIG_SPL_MAX_SIZE (38 * 1024)
> -#define CONFIG_SPL_STACK LOW_LEVEL_SRAM_STACK
> +#define CONFIG_SPL_STACK CONFIG_SYS_INIT_SP_ADDR
>
> /*
> * 64 bytes before this address should be set aside for u-boot.img's
> diff --git a/include/configs/omap5_evm.h b/include/configs/omap5_evm.h
> index 0884280..4d6de16 100644
> --- a/include/configs/omap5_evm.h
> +++ b/include/configs/omap5_evm.h
> @@ -228,10 +228,7 @@
> #define CONFIG_NR_DRAM_BANKS 1
>
> #define CONFIG_SYS_SDRAM_BASE 0x80000000
> -#define CONFIG_SYS_INIT_RAM_ADDR 0x4030D800
> -#define CONFIG_SYS_INIT_RAM_SIZE 0x800
> -#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_INIT_RAM_ADDR + \
> - CONFIG_SYS_INIT_RAM_SIZE - \
> +#define CONFIG_SYS_INIT_SP_ADDR (NON_SECURE_SRAM_END - \
> GENERATED_GBL_DATA_SIZE)
>
> #define CONFIG_SYS_EMIF_PRECALCULATED_TIMING_REGS
> @@ -246,7 +243,7 @@
> #define CONFIG_SPL
> #define CONFIG_SPL_TEXT_BASE 0x40300350
> #define CONFIG_SPL_MAX_SIZE 0x19000 /* 100K */
> -#define CONFIG_SPL_STACK LOW_LEVEL_SRAM_STACK
> +#define CONFIG_SPL_STACK CONFIG_SYS_INIT_SP_ADDR
>
> #define CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR 0x300 /* address 0x60000 */
> #define CONFIG_SYS_U_BOOT_MAX_SIZE_SECTORS 0x200 /* 256 KB */
Looks fine cleanup for me.
A small concern now is the size of available SRAM for
SPL text is now reduced by GENERATED_GBL_DATA_SIZE, though it is small.
SRAM size available for SPL code is a concern in OMAP4 platforms.
Do you prefer keeping CONFIG_SPL_STACK to NON_SECURE_SRAM_END ?.
Except for that
Acked-by: R Sricharan <r.sricharan at ti.com>
Thanks,
Sricharan
More information about the U-Boot
mailing list