diff options
| author | Aneesh V <aneesh@ti.com> | 2011-07-21 09:09:59 -0400 | 
|---|---|---|
| committer | U-Boot <uboot@aari01-12.(none)> | 2011-08-03 12:49:19 +0200 | 
| commit | d2f18c275eef1eaca58919fb34ea0abf3bfbddcd (patch) | |
| tree | fabf0165cbcdee72523cb7557236237ddbad5b64 | |
| parent | 732590b397ac608369767b2579fdca0937f8adcd (diff) | |
| download | olio-uboot-2014.01-d2f18c275eef1eaca58919fb34ea0abf3bfbddcd.tar.xz olio-uboot-2014.01-d2f18c275eef1eaca58919fb34ea0abf3bfbddcd.zip | |
omap4: utility function to identify the context of hw init
The basic hardware init of OMAP4(s_init()) can happen in 4
different contexts:
 1. SPL running from SRAM
 2. U-Boot running from FLASH
 3. Non-XIP U-Boot loaded to SDRAM by SPL
 4. Non-XIP U-Boot loaded to SDRAM by ROM code using the
    Configuration Header feature
What level of hw initialization gets done depends on this
context. Add a utility function to find this context.
Signed-off-by: Aneesh V <aneesh@ti.com>
Signed-off-by: Sandeep Paulraj <s-paulraj@ti.com>
| -rw-r--r-- | arch/arm/include/asm/arch-omap4/sys_proto.h | 49 | ||||
| -rw-r--r-- | arch/arm/include/asm/omap_common.h | 34 | 
2 files changed, 82 insertions, 1 deletions
| diff --git a/arch/arm/include/asm/arch-omap4/sys_proto.h b/arch/arm/include/asm/arch-omap4/sys_proto.h index 4fa4f4b2d..6b596b489 100644 --- a/arch/arm/include/asm/arch-omap4/sys_proto.h +++ b/arch/arm/include/asm/arch-omap4/sys_proto.h @@ -23,10 +23,12 @@  #include <asm/arch/omap4.h>  #include <asm/io.h> +#include <asm/omap_common.h>  struct omap_sysinfo {  	char *board_string;  }; +extern const struct omap_sysinfo sysinfo;  void gpmc_init(void);  void watchdog_init(void); @@ -37,6 +39,51 @@ u32 wait_on_value(u32, u32, void *, u32);  void sdelay(unsigned long);  void set_pl310_ctrl_reg(u32 val); -extern const struct omap_sysinfo sysinfo; +static inline u32 running_from_sdram(void) +{ +	u32 pc; +	asm volatile ("mov %0, pc" : "=r" (pc)); +	return ((pc >= OMAP44XX_DRAM_ADDR_SPACE_START) && +	    (pc < OMAP44XX_DRAM_ADDR_SPACE_END)); +} + +static inline u8 uboot_loaded_by_spl(void) +{ +	/* +	 * Configuration Header is not supported yet, so u-boot init running +	 * from SDRAM implies that it was loaded by SPL. When this situation +	 * changes one of these approaches could be taken: +	 * i.  Pass a magic from SPL to U-Boot and U-Boot save it at a known +	 *     location. +	 * ii. Check the OPP. CH can support only 50% OPP while SPL initializes +	 *     the DPLLs at 100% OPP. +	 */ +	return running_from_sdram(); +} +/* + * The basic hardware init of OMAP(s_init()) can happen in 4 + * different contexts: + *  1. SPL running from SRAM + *  2. U-Boot running from FLASH + *  3. Non-XIP U-Boot loaded to SDRAM by SPL + *  4. Non-XIP U-Boot loaded to SDRAM by ROM code using the + *     Configuration Header feature + * + * This function finds this context. + * Defining as inline may help in compiling out unused functions in SPL + */ +static inline u32 omap4_hw_init_context(void) +{ +#ifdef CONFIG_SPL_BUILD +	return OMAP_INIT_CONTEXT_SPL; +#else +	if (uboot_loaded_by_spl()) +		return OMAP_INIT_CONTEXT_UBOOT_AFTER_SPL; +	else if (running_from_sdram()) +		return OMAP_INIT_CONTEXT_UBOOT_AFTER_CH; +	else +		return OMAP_INIT_CONTEXT_UBOOT_FROM_NOR; +#endif +}  #endif diff --git a/arch/arm/include/asm/omap_common.h b/arch/arm/include/asm/omap_common.h new file mode 100644 index 000000000..d80f66507 --- /dev/null +++ b/arch/arm/include/asm/omap_common.h @@ -0,0 +1,34 @@ +/* + * (C) Copyright 2010 + * Texas Instruments, <www.ti.com> + * + * Aneesh V <aneesh@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 + */ +#ifndef	_OMAP_COMMON_H_ +#define	_OMAP_COMMON_H_ + +/* HW Init Context */ +#define OMAP_INIT_CONTEXT_SPL			0 +#define OMAP_INIT_CONTEXT_UBOOT_FROM_NOR	1 +#define OMAP_INIT_CONTEXT_UBOOT_AFTER_SPL	2 +#define OMAP_INIT_CONTEXT_UBOOT_AFTER_CH	3 + +#endif /* _OMAP_COMMON_H_ */ |