xref: /rk3399_rockchip-uboot/arch/arm/include/asm/arch-omap5/sys_proto.h (revision 0b1b60c77954df19b5a601e2ba87614f2d0bbb8b)
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