1508a58faSSricharan /* 2508a58faSSricharan * (C) Copyright 2010 3508a58faSSricharan * Texas Instruments, <www.ti.com> 4508a58faSSricharan * 5508a58faSSricharan * This program is free software; you can redistribute it and/or 6508a58faSSricharan * modify it under the terms of the GNU General Public License as 7508a58faSSricharan * published by the Free Software Foundation; either version 2 of 8508a58faSSricharan * the License, or (at your option) any later version. 9508a58faSSricharan * 10508a58faSSricharan * This program is distributed in the hope that it will be useful, 11508a58faSSricharan * but WITHOUT ANY WARRANTY; without even the implied warranty of 12508a58faSSricharan * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13508a58faSSricharan * GNU General Public License for more details. 14508a58faSSricharan * 15508a58faSSricharan * You should have received a copy of the GNU General Public License 16508a58faSSricharan * along with this program; if not, write to the Free Software 17508a58faSSricharan * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 18508a58faSSricharan * MA 02111-1307 USA 19508a58faSSricharan */ 20508a58faSSricharan 21508a58faSSricharan #ifndef _SYS_PROTO_H_ 22508a58faSSricharan #define _SYS_PROTO_H_ 23508a58faSSricharan 24508a58faSSricharan #include <asm/arch/omap.h> 25508a58faSSricharan #include <asm/io.h> 26508a58faSSricharan #include <asm/arch/clocks.h> 27508a58faSSricharan #include <asm/omap_common.h> 28508a58faSSricharan #include <asm/arch/mux_omap5.h> 292e5ba489SSricharan #include <asm/arch/clocks.h> 30508a58faSSricharan 31508a58faSSricharan struct omap_sysinfo { 32508a58faSSricharan char *board_string; 33508a58faSSricharan }; 34508a58faSSricharan extern const struct omap_sysinfo sysinfo; 35508a58faSSricharan 36508a58faSSricharan void gpmc_init(void); 37508a58faSSricharan void watchdog_init(void); 38508a58faSSricharan u32 get_device_type(void); 39508a58faSSricharan void do_set_mux(u32 base, struct pad_conf_entry const *array, int size); 40508a58faSSricharan void set_muxconf_regs_essential(void); 41508a58faSSricharan void set_muxconf_regs_non_essential(void); 42508a58faSSricharan void sr32(void *, u32, u32, u32); 43508a58faSSricharan u32 wait_on_value(u32, u32, void *, u32); 44508a58faSSricharan void sdelay(unsigned long); 45508a58faSSricharan void omap_rev_string(char *omap_rev_string); 46508a58faSSricharan void setup_clocks_for_console(void); 47508a58faSSricharan void prcm_init(void); 48508a58faSSricharan void bypass_dpll(u32 *const base); 49508a58faSSricharan void freq_update_core(void); 50508a58faSSricharan u32 get_sys_clk_freq(void); 51508a58faSSricharan u32 omap5_ddr_clk(void); 52508a58faSSricharan void cancel_out(u32 *num, u32 *den, u32 den_limit); 53508a58faSSricharan void sdram_init(void); 54508a58faSSricharan u32 omap_sdram_size(void); 55508a58faSSricharan u32 cortex_rev(void); 56508a58faSSricharan void init_omap_revision(void); 57508a58faSSricharan void do_io_settings(void); 58508a58faSSricharan 59508a58faSSricharan /* 60508a58faSSricharan * This is used to verify if the configuration header 61508a58faSSricharan * was executed by Romcode prior to control of transfer 62508a58faSSricharan * to the bootloader. SPL is responsible for saving and 63508a58faSSricharan * passing this to the u-boot. 64508a58faSSricharan */ 65508a58faSSricharan extern struct omap_boot_parameters boot_params; 66508a58faSSricharan 67508a58faSSricharan static inline u32 running_from_sdram(void) 68508a58faSSricharan { 69508a58faSSricharan u32 pc; 70508a58faSSricharan asm volatile ("mov %0, pc" : "=r" (pc)); 71508a58faSSricharan return ((pc >= OMAP54XX_DRAM_ADDR_SPACE_START) && 72508a58faSSricharan (pc < OMAP54XX_DRAM_ADDR_SPACE_END)); 73508a58faSSricharan } 74508a58faSSricharan 75508a58faSSricharan static inline u8 uboot_loaded_by_spl(void) 76508a58faSSricharan { 77508a58faSSricharan /* 78*78f455c0SSricharan * u-boot can be running from sdram either because of configuration 79*78f455c0SSricharan * Header or by SPL. If because of CH, then the romcode sets the 80*78f455c0SSricharan * CHSETTINGS executed bit to true in the boot parameter structure that 81*78f455c0SSricharan * it passes to the bootloader.This parameter is stored in the ch_flags 82*78f455c0SSricharan * variable by both SPL and u-boot.Check out for CHSETTINGS, which is a 83*78f455c0SSricharan * mandatory section if CH is present. 84508a58faSSricharan */ 85*78f455c0SSricharan if ((boot_params.ch_flags) & (CH_FLAGS_CHSETTINGS)) 86*78f455c0SSricharan return 0; 87*78f455c0SSricharan else 88508a58faSSricharan return running_from_sdram(); 89508a58faSSricharan } 90508a58faSSricharan /* 91508a58faSSricharan * The basic hardware init of OMAP(s_init()) can happen in 4 92508a58faSSricharan * different contexts: 93508a58faSSricharan * 1. SPL running from SRAM 94508a58faSSricharan * 2. U-Boot running from FLASH 95508a58faSSricharan * 3. Non-XIP U-Boot loaded to SDRAM by SPL 96508a58faSSricharan * 4. Non-XIP U-Boot loaded to SDRAM by ROM code using the 97508a58faSSricharan * Configuration Header feature 98508a58faSSricharan * 99508a58faSSricharan * This function finds this context. 100508a58faSSricharan * Defining as inline may help in compiling out unused functions in SPL 101508a58faSSricharan */ 102508a58faSSricharan static inline u32 omap_hw_init_context(void) 103508a58faSSricharan { 104508a58faSSricharan #ifdef CONFIG_SPL_BUILD 105508a58faSSricharan return OMAP_INIT_CONTEXT_SPL; 106508a58faSSricharan #else 107508a58faSSricharan if (uboot_loaded_by_spl()) 108508a58faSSricharan return OMAP_INIT_CONTEXT_UBOOT_AFTER_SPL; 109508a58faSSricharan else if (running_from_sdram()) 110508a58faSSricharan return OMAP_INIT_CONTEXT_UBOOT_AFTER_CH; 111508a58faSSricharan else 112508a58faSSricharan return OMAP_INIT_CONTEXT_UBOOT_FROM_NOR; 113508a58faSSricharan #endif 114508a58faSSricharan } 115508a58faSSricharan 116508a58faSSricharan static inline u32 omap_revision(void) 117508a58faSSricharan { 118508a58faSSricharan extern u32 *const omap5_revision; 119508a58faSSricharan return *omap5_revision; 120508a58faSSricharan } 121508a58faSSricharan 122508a58faSSricharan #endif 123