xref: /rk3399_rockchip-uboot/arch/arm/include/asm/arch-omap5/sys_proto.h (revision 4596dcc1d4ea5763e0f92cf5becd9fc7d4c6e674)
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 
304a0eb757SSRICHARAN R DECLARE_GLOBAL_DATA_PTR;
314a0eb757SSRICHARAN R 
32687054a7SLokesh Vutla struct pad_conf_entry {
33687054a7SLokesh Vutla 	u32 offset;
34687054a7SLokesh Vutla 	u32 val;
35687054a7SLokesh Vutla };
36687054a7SLokesh Vutla 
37508a58faSSricharan struct omap_sysinfo {
38508a58faSSricharan 	char *board_string;
39508a58faSSricharan };
40508a58faSSricharan extern const struct omap_sysinfo sysinfo;
41508a58faSSricharan 
42508a58faSSricharan void gpmc_init(void);
43508a58faSSricharan void watchdog_init(void);
44508a58faSSricharan u32 get_device_type(void);
45508a58faSSricharan void do_set_mux(u32 base, struct pad_conf_entry const *array, int size);
46508a58faSSricharan void set_muxconf_regs_essential(void);
47508a58faSSricharan void set_muxconf_regs_non_essential(void);
48508a58faSSricharan void sr32(void *, u32, u32, u32);
49508a58faSSricharan u32 wait_on_value(u32, u32, void *, u32);
50508a58faSSricharan void sdelay(unsigned long);
51508a58faSSricharan void setup_clocks_for_console(void);
52508a58faSSricharan void prcm_init(void);
5301b753ffSSRICHARAN R void bypass_dpll(u32 const base);
54508a58faSSricharan void freq_update_core(void);
55508a58faSSricharan u32 get_sys_clk_freq(void);
56508a58faSSricharan u32 omap5_ddr_clk(void);
57508a58faSSricharan void cancel_out(u32 *num, u32 *den, u32 den_limit);
58508a58faSSricharan void sdram_init(void);
59508a58faSSricharan u32 omap_sdram_size(void);
60508a58faSSricharan u32 cortex_rev(void);
61*4596dcc1STom Rini void save_omap_boot_params(void);
62508a58faSSricharan void init_omap_revision(void);
63508a58faSSricharan void do_io_settings(void);
64a78274b2SNishanth Menon void omap_vc_init(u16 speed_khz);
65a78274b2SNishanth Menon int omap_vc_bypass_send_value(u8 sa, u8 reg_addr, u8 reg_data);
6670239507SLokesh Vutla u32 warm_reset(void);
6738f25b12SLokesh Vutla void force_emif_self_refresh(void);
68ef1697e9SLokesh Vutla void get_ioregs(const struct ctrl_ioregs **regs);
69d4d986eeSLokesh Vutla void srcomp_enable(void);
700b1b60c7SLokesh Vutla void setup_warmreset_time(void);
71508a58faSSricharan 
72508a58faSSricharan static inline u32 running_from_sdram(void)
73508a58faSSricharan {
74508a58faSSricharan 	u32 pc;
75508a58faSSricharan 	asm volatile ("mov %0, pc" : "=r" (pc));
76508a58faSSricharan 	return ((pc >= OMAP54XX_DRAM_ADDR_SPACE_START) &&
77508a58faSSricharan 	    (pc < OMAP54XX_DRAM_ADDR_SPACE_END));
78508a58faSSricharan }
79508a58faSSricharan 
80508a58faSSricharan static inline u8 uboot_loaded_by_spl(void)
81508a58faSSricharan {
82508a58faSSricharan 	/*
8378f455c0SSricharan 	 * u-boot can be running from sdram either because of configuration
8478f455c0SSricharan 	 * Header or by SPL. If because of CH, then the romcode sets the
8578f455c0SSricharan 	 * CHSETTINGS executed bit to true in the boot parameter structure that
8678f455c0SSricharan 	 * it passes to the bootloader.This parameter is stored in the ch_flags
8778f455c0SSricharan 	 * variable by both SPL and u-boot.Check out for CHSETTINGS, which is a
8878f455c0SSricharan 	 * mandatory section if CH is present.
89508a58faSSricharan 	 */
904a0eb757SSRICHARAN R 	if ((gd->arch.omap_boot_params.ch_flags) & (CH_FLAGS_CHSETTINGS))
9178f455c0SSricharan 		return 0;
9278f455c0SSricharan 	else
93508a58faSSricharan 		return running_from_sdram();
94508a58faSSricharan }
95508a58faSSricharan /*
96508a58faSSricharan  * The basic hardware init of OMAP(s_init()) can happen in 4
97508a58faSSricharan  * different contexts:
98508a58faSSricharan  *  1. SPL running from SRAM
99508a58faSSricharan  *  2. U-Boot running from FLASH
100508a58faSSricharan  *  3. Non-XIP U-Boot loaded to SDRAM by SPL
101508a58faSSricharan  *  4. Non-XIP U-Boot loaded to SDRAM by ROM code using the
102508a58faSSricharan  *     Configuration Header feature
103508a58faSSricharan  *
104508a58faSSricharan  * This function finds this context.
105508a58faSSricharan  * Defining as inline may help in compiling out unused functions in SPL
106508a58faSSricharan  */
107508a58faSSricharan static inline u32 omap_hw_init_context(void)
108508a58faSSricharan {
109508a58faSSricharan #ifdef CONFIG_SPL_BUILD
110508a58faSSricharan 	return OMAP_INIT_CONTEXT_SPL;
111508a58faSSricharan #else
112508a58faSSricharan 	if (uboot_loaded_by_spl())
113508a58faSSricharan 		return OMAP_INIT_CONTEXT_UBOOT_AFTER_SPL;
114508a58faSSricharan 	else if (running_from_sdram())
115508a58faSSricharan 		return OMAP_INIT_CONTEXT_UBOOT_AFTER_CH;
116508a58faSSricharan 	else
117508a58faSSricharan 		return OMAP_INIT_CONTEXT_UBOOT_FROM_NOR;
118508a58faSSricharan #endif
119508a58faSSricharan }
120508a58faSSricharan 
1210b1b60c7SLokesh Vutla static inline u32 div_round_up(u32 num, u32 den)
1220b1b60c7SLokesh Vutla {
1230b1b60c7SLokesh Vutla 	return (num + den - 1)/den;
1240b1b60c7SLokesh Vutla }
1250b1b60c7SLokesh Vutla 
1260b1b60c7SLokesh Vutla static inline u32 usec_to_32k(u32 usec)
1270b1b60c7SLokesh Vutla {
1280b1b60c7SLokesh Vutla 	return div_round_up(32768 * usec, 1000000);
1290b1b60c7SLokesh Vutla }
130508a58faSSricharan #endif
131