提交 4a0eb757 编写于 作者: S SRICHARAN R 提交者: Tom Rini

ARM: OMAP: Cleanup boot parameters usage

The boot parameters are read from individual variables
assigned for each of them. This been corrected and now
they are stored as a part of the global data 'gd'
structure. So read them from 'gd' instead.
Signed-off-by: NSricharan R <r.sricharan@ti.com>
[trini: Add igep0033 hunk]
Signed-off-by: NTom Rini <trini@ti.com>
上级 fda06812
...@@ -37,7 +37,13 @@ ENTRY(lowlevel_init) ...@@ -37,7 +37,13 @@ ENTRY(lowlevel_init)
*/ */
ldr sp, =CONFIG_SYS_INIT_SP_ADDR ldr sp, =CONFIG_SYS_INIT_SP_ADDR
bic sp, sp, #7 /* 8-byte alignment for ABI compliance */ bic sp, sp, #7 /* 8-byte alignment for ABI compliance */
#ifdef CONFIG_SPL_BUILD
ldr r8, =gdata
#else
sub sp, #GD_SIZE
bic sp, sp, #7
mov r8, sp
#endif
/* /*
* Save the old lr(passed in ip) and the current lr to stack * Save the old lr(passed in ip) and the current lr to stack
*/ */
......
...@@ -23,31 +23,17 @@ ...@@ -23,31 +23,17 @@
#include <asm/arch/mmc_host_def.h> #include <asm/arch/mmc_host_def.h>
#include <asm/arch/sys_proto.h> #include <asm/arch/sys_proto.h>
/* DECLARE_GLOBAL_DATA_PTR;
* This is used to verify if the configuration header
* was executed by rom code prior to control of transfer
* to the bootloader. SPL is responsible for saving and
* passing the boot_params pointer to the u-boot.
*/
struct omap_boot_parameters boot_params __attribute__ ((section(".data")));
#ifdef CONFIG_SPL_BUILD #ifdef CONFIG_SPL_BUILD
/*
* We use static variables because global data is not ready yet.
* Initialized data is available in SPL right from the beginning.
* We would not typically need to save these parameters in regular
* U-Boot. This is needed only in SPL at the moment.
*/
u32 omap_bootmode = MMCSD_MODE_FAT;
u32 spl_boot_device(void) u32 spl_boot_device(void)
{ {
return (u32) (boot_params.omap_bootdevice); return (u32) (gd->arch.omap_boot_params.omap_bootdevice);
} }
u32 spl_boot_mode(void) u32 spl_boot_mode(void)
{ {
return omap_bootmode; return gd->arch.omap_boot_params.omap_bootmode;
} }
void spl_board_init(void) void spl_board_init(void)
...@@ -73,4 +59,15 @@ int board_mmc_init(bd_t *bis) ...@@ -73,4 +59,15 @@ int board_mmc_init(bd_t *bis)
} }
return 0; return 0;
} }
void __noreturn jump_to_image_no_args(struct spl_image_info *spl_image)
{
typedef void __noreturn (*image_entry_noargs_t)(u32 *);
image_entry_noargs_t image_entry =
(image_entry_noargs_t) spl_image->entry_point;
debug("image entry point: 0x%X\n", spl_image->entry_point);
/* Pass the saved boot_params from rom code */
image_entry((u32 *)&gd->arch.omap_boot_params);
}
#endif #endif
...@@ -28,59 +28,13 @@ ...@@ -28,59 +28,13 @@
#include <config.h> #include <config.h>
#include <asm/arch/omap.h> #include <asm/arch/omap.h>
#include <asm/omap_common.h>
#include <asm/arch/spl.h> #include <asm/arch/spl.h>
#include <linux/linkage.h> #include <linux/linkage.h>
ENTRY(save_boot_params) ENTRY(save_boot_params)
/* ldr r1, =OMAP_SRAM_SCRATCH_BOOT_PARAMS
* See if the rom code passed pointer is valid:
* It is not valid if it is not in non-secure SRAM
* This may happen if you are booting with the help of
* debugger
*/
ldr r2, =NON_SECURE_SRAM_START
cmp r2, r0
bgt 1f
ldr r2, =NON_SECURE_SRAM_END
cmp r2, r0
blt 1f
/*
* store the boot params passed from rom code or saved
* and passed by SPL
*/
cmp r0, #0
beq 1f
ldr r1, =boot_params
str r0, [r1] str r0, [r1]
#ifdef CONFIG_SPL_BUILD
/* Store the boot device in spl_boot_device */
ldrb r2, [r0, #BOOT_DEVICE_OFFSET] @ r1 <- value of boot device
and r2, #BOOT_DEVICE_MASK
ldr r3, =boot_params
strb r2, [r3, #BOOT_DEVICE_OFFSET] @ spl_boot_device <- r1
/*
* boot mode is only valid for device that can be raw or FAT booted.
* in other cases it may be fatal to look. While platforms differ
* in the values used for each MMC slot, they are contiguous.
*/
cmp r2, #MMC_BOOT_DEVICES_START
blt 2f
cmp r2, #MMC_BOOT_DEVICES_END
bgt 2f
/* Store the boot mode (raw/FAT) in omap_bootmode */
ldr r2, [r0, #DEV_DESC_PTR_OFFSET] @ get the device descriptor ptr
ldr r2, [r2, #DEV_DATA_PTR_OFFSET] @ get the pDeviceData ptr
ldr r2, [r2, #BOOT_MODE_OFFSET] @ get the boot mode
ldr r3, =omap_bootmode
str r2, [r3]
#endif
2:
ldrb r2, [r0, #CH_FLAGS_OFFSET]
ldr r3, =boot_params
strb r2, [r3, #CH_FLAGS_OFFSET]
1:
bx lr bx lr
ENDPROC(save_boot_params) ENDPROC(save_boot_params)
......
...@@ -27,6 +27,8 @@ ...@@ -27,6 +27,8 @@
#include <asm/omap_common.h> #include <asm/omap_common.h>
#include <asm/arch/mux_omap4.h> #include <asm/arch/mux_omap4.h>
DECLARE_GLOBAL_DATA_PTR;
struct omap_sysinfo { struct omap_sysinfo {
char *board_string; char *board_string;
}; };
...@@ -59,13 +61,6 @@ int omap_vc_bypass_send_value(u8 sa, u8 reg_addr, u8 reg_data); ...@@ -59,13 +61,6 @@ int omap_vc_bypass_send_value(u8 sa, u8 reg_addr, u8 reg_data);
u32 warm_reset(void); u32 warm_reset(void);
void force_emif_self_refresh(void); void force_emif_self_refresh(void);
void setup_warmreset_time(void); void setup_warmreset_time(void);
/*
* This is used to verify if the configuration header
* was executed by Romcode prior to control of transfer
* to the bootloader. SPL is responsible for saving and
* passing this to the u-boot.
*/
extern struct omap_boot_parameters boot_params;
static inline u32 running_from_sdram(void) static inline u32 running_from_sdram(void)
{ {
...@@ -85,7 +80,7 @@ static inline u8 uboot_loaded_by_spl(void) ...@@ -85,7 +80,7 @@ static inline u8 uboot_loaded_by_spl(void)
* variable by both SPL and u-boot.Check out for CHSETTINGS, which is a * variable by both SPL and u-boot.Check out for CHSETTINGS, which is a
* mandatory section if CH is present. * mandatory section if CH is present.
*/ */
if ((boot_params.ch_flags) & (CH_FLAGS_CHSETTINGS)) if ((gd->arch.omap_boot_params.ch_flags) & (CH_FLAGS_CHSETTINGS))
return 0; return 0;
else else
return running_from_sdram(); return running_from_sdram();
......
...@@ -27,6 +27,8 @@ ...@@ -27,6 +27,8 @@
#include <asm/omap_common.h> #include <asm/omap_common.h>
#include <asm/arch/clocks.h> #include <asm/arch/clocks.h>
DECLARE_GLOBAL_DATA_PTR;
struct pad_conf_entry { struct pad_conf_entry {
u32 offset; u32 offset;
u32 val; u32 val;
...@@ -66,14 +68,6 @@ void get_ioregs(const struct ctrl_ioregs **regs); ...@@ -66,14 +68,6 @@ void get_ioregs(const struct ctrl_ioregs **regs);
void srcomp_enable(void); void srcomp_enable(void);
void setup_warmreset_time(void); void setup_warmreset_time(void);
/*
* This is used to verify if the configuration header
* was executed by Romcode prior to control of transfer
* to the bootloader. SPL is responsible for saving and
* passing this to the u-boot.
*/
extern struct omap_boot_parameters boot_params;
static inline u32 running_from_sdram(void) static inline u32 running_from_sdram(void)
{ {
u32 pc; u32 pc;
...@@ -92,7 +86,7 @@ static inline u8 uboot_loaded_by_spl(void) ...@@ -92,7 +86,7 @@ static inline u8 uboot_loaded_by_spl(void)
* variable by both SPL and u-boot.Check out for CHSETTINGS, which is a * variable by both SPL and u-boot.Check out for CHSETTINGS, which is a
* mandatory section if CH is present. * mandatory section if CH is present.
*/ */
if ((boot_params.ch_flags) & (CH_FLAGS_CHSETTINGS)) if ((gd->arch.omap_boot_params.ch_flags) & (CH_FLAGS_CHSETTINGS))
return 0; return 0;
else else
return running_from_sdram(); return running_from_sdram();
......
...@@ -25,6 +25,8 @@ ...@@ -25,6 +25,8 @@
#ifndef _OMAP_COMMON_H_ #ifndef _OMAP_COMMON_H_
#define _OMAP_COMMON_H_ #define _OMAP_COMMON_H_
#ifndef __ASSEMBLY__
#include <common.h> #include <common.h>
#define NUM_SYS_CLKS 8 #define NUM_SYS_CLKS 8
...@@ -558,6 +560,7 @@ static inline u32 omap_revision(void) ...@@ -558,6 +560,7 @@ static inline u32 omap_revision(void)
extern u32 *const omap_si_rev; extern u32 *const omap_si_rev;
return *omap_si_rev; return *omap_si_rev;
} }
#endif
/* /*
* silicon revisions. * silicon revisions.
......
...@@ -125,17 +125,13 @@ void spl_parse_image_header(const struct image_header *header) ...@@ -125,17 +125,13 @@ void spl_parse_image_header(const struct image_header *header)
__weak void __noreturn jump_to_image_no_args(struct spl_image_info *spl_image) __weak void __noreturn jump_to_image_no_args(struct spl_image_info *spl_image)
{ {
typedef void __noreturn (*image_entry_noargs_t)(u32 *); typedef void __noreturn (*image_entry_noargs_t)(void);
image_entry_noargs_t image_entry = image_entry_noargs_t image_entry =
(image_entry_noargs_t) spl_image->entry_point; (image_entry_noargs_t) spl_image->entry_point;
debug("image entry point: 0x%X\n", spl_image->entry_point); debug("image entry point: 0x%X\n", spl_image->entry_point);
/* Pass the saved boot_params from rom code */ image_entry();
#if defined(CONFIG_VIRTIO) || defined(CONFIG_ZEBU)
image_entry = (image_entry_noargs_t)0x80100000;
#endif
u32 boot_params_ptr_addr = (u32)&boot_params_ptr;
image_entry((u32 *)boot_params_ptr_addr);
} }
#ifdef CONFIG_SPL_RAM_DEVICE #ifdef CONFIG_SPL_RAM_DEVICE
......
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
#define __CONFIG_AM335X_EVM_H #define __CONFIG_AM335X_EVM_H
#define CONFIG_AM33XX #define CONFIG_AM33XX
#define CONFIG_OMAP
#include <asm/arch/omap.h> #include <asm/arch/omap.h>
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#define __CONFIG_IGEP0033_H #define __CONFIG_IGEP0033_H
#define CONFIG_AM33XX #define CONFIG_AM33XX
#define CONFIG_OMAP
#include <asm/arch/omap.h> #include <asm/arch/omap.h>
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
#define __CONFIG_PCM051_H #define __CONFIG_PCM051_H
#define CONFIG_AM33XX #define CONFIG_AM33XX
#define CONFIG_OMAP
#include <asm/arch/omap.h> #include <asm/arch/omap.h>
......
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
#define CONFIG_TI81XX #define CONFIG_TI81XX
#define CONFIG_TI814X #define CONFIG_TI814X
#define CONFIG_SYS_NO_FLASH #define CONFIG_SYS_NO_FLASH
#define CONFIG_OMAP
#include <asm/arch/omap.h> #include <asm/arch/omap.h>
......
...@@ -44,7 +44,6 @@ struct spl_image_info { ...@@ -44,7 +44,6 @@ struct spl_image_info {
#define SPL_COPY_PAYLOAD_ONLY 1 #define SPL_COPY_PAYLOAD_ONLY 1
extern struct spl_image_info spl_image; extern struct spl_image_info spl_image;
extern u32 *boot_params_ptr;
/* SPL common functions */ /* SPL common functions */
void preloader_console_init(void); void preloader_console_init(void);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册