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