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> 282e5ba489SSricharan #include <asm/arch/clocks.h> 29508a58faSSricharan 30687054a7SLokesh Vutla struct pad_conf_entry { 31687054a7SLokesh Vutla u32 offset; 32687054a7SLokesh Vutla u32 val; 33687054a7SLokesh Vutla }; 34687054a7SLokesh Vutla 35508a58faSSricharan struct omap_sysinfo { 36508a58faSSricharan char *board_string; 37508a58faSSricharan }; 38508a58faSSricharan extern const struct omap_sysinfo sysinfo; 39508a58faSSricharan 40508a58faSSricharan void gpmc_init(void); 41508a58faSSricharan void watchdog_init(void); 42508a58faSSricharan u32 get_device_type(void); 43508a58faSSricharan void do_set_mux(u32 base, struct pad_conf_entry const *array, int size); 44508a58faSSricharan void set_muxconf_regs_essential(void); 45508a58faSSricharan void set_muxconf_regs_non_essential(void); 46508a58faSSricharan void sr32(void *, u32, u32, u32); 47508a58faSSricharan u32 wait_on_value(u32, u32, void *, u32); 48508a58faSSricharan void sdelay(unsigned long); 49508a58faSSricharan void setup_clocks_for_console(void); 50508a58faSSricharan void prcm_init(void); 5101b753ffSSRICHARAN R void bypass_dpll(u32 const base); 52508a58faSSricharan void freq_update_core(void); 53508a58faSSricharan u32 get_sys_clk_freq(void); 54508a58faSSricharan u32 omap5_ddr_clk(void); 55508a58faSSricharan void cancel_out(u32 *num, u32 *den, u32 den_limit); 56508a58faSSricharan void sdram_init(void); 57508a58faSSricharan u32 omap_sdram_size(void); 58508a58faSSricharan u32 cortex_rev(void); 59508a58faSSricharan void init_omap_revision(void); 60508a58faSSricharan void do_io_settings(void); 61a78274b2SNishanth Menon void omap_vc_init(u16 speed_khz); 62a78274b2SNishanth Menon int omap_vc_bypass_send_value(u8 sa, u8 reg_addr, u8 reg_data); 6370239507SLokesh Vutla u32 warm_reset(void); 6438f25b12SLokesh Vutla void force_emif_self_refresh(void); 65ef1697e9SLokesh Vutla void get_ioregs(const struct ctrl_ioregs **regs); 66d4d986eeSLokesh Vutla void srcomp_enable(void); 67*0b1b60c7SLokesh Vutla void setup_warmreset_time(void); 68508a58faSSricharan 69508a58faSSricharan /* 70508a58faSSricharan * This is used to verify if the configuration header 71508a58faSSricharan * was executed by Romcode prior to control of transfer 72508a58faSSricharan * to the bootloader. SPL is responsible for saving and 73508a58faSSricharan * passing this to the u-boot. 74508a58faSSricharan */ 75508a58faSSricharan extern struct omap_boot_parameters boot_params; 76508a58faSSricharan 77508a58faSSricharan static inline u32 running_from_sdram(void) 78508a58faSSricharan { 79508a58faSSricharan u32 pc; 80508a58faSSricharan asm volatile ("mov %0, pc" : "=r" (pc)); 81508a58faSSricharan return ((pc >= OMAP54XX_DRAM_ADDR_SPACE_START) && 82508a58faSSricharan (pc < OMAP54XX_DRAM_ADDR_SPACE_END)); 83508a58faSSricharan } 84508a58faSSricharan 85508a58faSSricharan static inline u8 uboot_loaded_by_spl(void) 86508a58faSSricharan { 87508a58faSSricharan /* 8878f455c0SSricharan * u-boot can be running from sdram either because of configuration 8978f455c0SSricharan * Header or by SPL. If because of CH, then the romcode sets the 9078f455c0SSricharan * CHSETTINGS executed bit to true in the boot parameter structure that 9178f455c0SSricharan * it passes to the bootloader.This parameter is stored in the ch_flags 9278f455c0SSricharan * variable by both SPL and u-boot.Check out for CHSETTINGS, which is a 9378f455c0SSricharan * mandatory section if CH is present. 94508a58faSSricharan */ 9578f455c0SSricharan if ((boot_params.ch_flags) & (CH_FLAGS_CHSETTINGS)) 9678f455c0SSricharan return 0; 9778f455c0SSricharan else 98508a58faSSricharan return running_from_sdram(); 99508a58faSSricharan } 100508a58faSSricharan /* 101508a58faSSricharan * The basic hardware init of OMAP(s_init()) can happen in 4 102508a58faSSricharan * different contexts: 103508a58faSSricharan * 1. SPL running from SRAM 104508a58faSSricharan * 2. U-Boot running from FLASH 105508a58faSSricharan * 3. Non-XIP U-Boot loaded to SDRAM by SPL 106508a58faSSricharan * 4. Non-XIP U-Boot loaded to SDRAM by ROM code using the 107508a58faSSricharan * Configuration Header feature 108508a58faSSricharan * 109508a58faSSricharan * This function finds this context. 110508a58faSSricharan * Defining as inline may help in compiling out unused functions in SPL 111508a58faSSricharan */ 112508a58faSSricharan static inline u32 omap_hw_init_context(void) 113508a58faSSricharan { 114508a58faSSricharan #ifdef CONFIG_SPL_BUILD 115508a58faSSricharan return OMAP_INIT_CONTEXT_SPL; 116508a58faSSricharan #else 117508a58faSSricharan if (uboot_loaded_by_spl()) 118508a58faSSricharan return OMAP_INIT_CONTEXT_UBOOT_AFTER_SPL; 119508a58faSSricharan else if (running_from_sdram()) 120508a58faSSricharan return OMAP_INIT_CONTEXT_UBOOT_AFTER_CH; 121508a58faSSricharan else 122508a58faSSricharan return OMAP_INIT_CONTEXT_UBOOT_FROM_NOR; 123508a58faSSricharan #endif 124508a58faSSricharan } 125508a58faSSricharan 126*0b1b60c7SLokesh Vutla static inline u32 div_round_up(u32 num, u32 den) 127*0b1b60c7SLokesh Vutla { 128*0b1b60c7SLokesh Vutla return (num + den - 1)/den; 129*0b1b60c7SLokesh Vutla } 130*0b1b60c7SLokesh Vutla 131*0b1b60c7SLokesh Vutla static inline u32 usec_to_32k(u32 usec) 132*0b1b60c7SLokesh Vutla { 133*0b1b60c7SLokesh Vutla return div_round_up(32768 * usec, 1000000); 134*0b1b60c7SLokesh Vutla } 135508a58faSSricharan #endif 136