]>
Commit | Line | Data |
---|---|---|
83d290c5 | 1 | /* SPDX-License-Identifier: GPL-2.0+ */ |
dafa84d2 PD |
2 | /* |
3 | * (C) Copyright 2000-2009 | |
4 | * Wolfgang Denk, DENX Software Engineering, wd@denx.de. | |
5 | * | |
6 | * Copy the startup prototype, previously defined in common.h | |
7 | * Copyright (C) 2018, STMicroelectronics - All Rights Reserved | |
dafa84d2 PD |
8 | */ |
9 | ||
10 | #ifndef __INIT_H_ | |
11 | #define __INIT_H_ 1 | |
12 | ||
67c4e9f8 SG |
13 | #include <linux/types.h> |
14 | ||
dafa84d2 PD |
15 | #ifndef __ASSEMBLY__ /* put C only stuff in this section */ |
16 | ||
17 | /* | |
18 | * Function Prototypes | |
19 | */ | |
20 | ||
21 | /* common/board_f.c */ | |
d6f87712 | 22 | void board_init_f(ulong dummy); |
dafa84d2 PD |
23 | |
24 | /** | |
25 | * arch_cpu_init() - basic cpu-dependent setup for an architecture | |
26 | * | |
27 | * This is called after early malloc is available. It should handle any | |
28 | * CPU- or SoC- specific init needed to continue the init sequence. See | |
29 | * board_f.c for where it is called. If this is not provided, a default | |
30 | * version (which does nothing) will be used. | |
31 | * | |
dc145a7b | 32 | * Return: 0 on success, otherwise error |
dafa84d2 PD |
33 | */ |
34 | int arch_cpu_init(void); | |
35 | ||
d6f87712 PD |
36 | /** |
37 | * arch_cpu_init_dm() - init CPU after driver model is available | |
38 | * | |
39 | * This is called immediately after driver model is available before | |
40 | * relocation. This is similar to arch_cpu_init() but is able to reference | |
41 | * devices | |
42 | * | |
dc145a7b | 43 | * Return: 0 if OK, -ve on error |
d6f87712 PD |
44 | */ |
45 | int arch_cpu_init_dm(void); | |
46 | ||
dafa84d2 PD |
47 | /** |
48 | * mach_cpu_init() - SoC/machine dependent CPU setup | |
49 | * | |
50 | * This is called after arch_cpu_init(). It should handle any | |
51 | * SoC or machine specific init needed to continue the init sequence. See | |
52 | * board_f.c for where it is called. If this is not provided, a default | |
53 | * version (which does nothing) will be used. | |
54 | * | |
dc145a7b | 55 | * Return: 0 on success, otherwise error |
dafa84d2 PD |
56 | */ |
57 | int mach_cpu_init(void); | |
58 | ||
d6f87712 PD |
59 | /** |
60 | * arch_fsp_init() - perform firmware support package init | |
61 | * | |
62 | * Where U-Boot relies on binary blobs to handle part of the system init, this | |
63 | * function can be used to set up the blobs. This is used on some Intel | |
64 | * platforms. | |
dc145a7b MS |
65 | * |
66 | * Return: 0 | |
d6f87712 PD |
67 | */ |
68 | int arch_fsp_init(void); | |
69 | ||
70 | int dram_init(void); | |
71 | ||
72 | /** | |
73 | * dram_init_banksize() - Set up DRAM bank sizes | |
74 | * | |
75 | * This can be implemented by boards to set up the DRAM bank information in | |
76 | * gd->bd->bi_dram(). It is called just before relocation, after dram_init() | |
77 | * is called. | |
78 | * | |
79 | * If this is not provided, a default implementation will try to set up a | |
80 | * single bank. It will do this if CONFIG_NR_DRAM_BANKS and | |
81 | * CONFIG_SYS_SDRAM_BASE are set. The bank will have a start address of | |
82 | * CONFIG_SYS_SDRAM_BASE and the size will be determined by a call to | |
83 | * get_effective_memsize(). | |
84 | * | |
dc145a7b | 85 | * Return: 0 if OK, -ve on error |
d6f87712 PD |
86 | */ |
87 | int dram_init_banksize(void); | |
88 | ||
89 | /** | |
dc145a7b | 90 | * arch_reserve_stacks() - Reserve all necessary stacks |
d6f87712 PD |
91 | * |
92 | * This is used in generic board init sequence in common/board_f.c. Each | |
93 | * architecture could provide this function to tailor the required stacks. | |
94 | * | |
95 | * On entry gd->start_addr_sp is pointing to the suggested top of the stack. | |
96 | * The callee ensures gd->start_add_sp is 16-byte aligned, so architectures | |
97 | * require only this can leave it untouched. | |
98 | * | |
99 | * On exit gd->start_addr_sp and gd->irq_sp should be set to the respective | |
100 | * positions of the stack. The stack pointer(s) will be set to this later. | |
101 | * gd->irq_sp is only required, if the architecture needs it. | |
102 | * | |
dc145a7b | 103 | * Return: 0 if no error |
d6f87712 PD |
104 | */ |
105 | int arch_reserve_stacks(void); | |
106 | ||
b8aa55cb PD |
107 | /** |
108 | * init_cache_f_r() - Turn on the cache in preparation for relocation | |
109 | * | |
dc145a7b | 110 | * Return: 0 if OK, -ve on error |
b8aa55cb PD |
111 | */ |
112 | int init_cache_f_r(void); | |
113 | ||
5d6c61ac MS |
114 | #if !CONFIG_IS_ENABLED(CPU) |
115 | /** | |
116 | * print_cpuinfo() - Display information about the CPU | |
117 | * | |
118 | * Return: 0 if OK, -ve on error | |
119 | */ | |
d6f87712 | 120 | int print_cpuinfo(void); |
5d6c61ac | 121 | #endif |
d6f87712 PD |
122 | int timer_init(void); |
123 | int reserve_mmu(void); | |
124 | int misc_init_f(void); | |
dc145a7b | 125 | |
d6f87712 PD |
126 | #if defined(CONFIG_DTB_RESELECT) |
127 | int embedded_dtb_select(void); | |
128 | #endif | |
129 | ||
11f86cba PD |
130 | /* common/init/board_init.c */ |
131 | extern ulong monitor_flash_len; | |
132 | ||
133 | /** | |
134 | * ulong board_init_f_alloc_reserve - allocate reserved area | |
dc145a7b | 135 | * @top: top of the reserve area, growing down. |
11f86cba PD |
136 | * |
137 | * This function is called by each architecture very early in the start-up | |
138 | * code to allow the C runtime to reserve space on the stack for writable | |
139 | * 'globals' such as GD and the malloc arena. | |
140 | * | |
dc145a7b | 141 | * Return: bottom of reserved area |
11f86cba PD |
142 | */ |
143 | ulong board_init_f_alloc_reserve(ulong top); | |
144 | ||
145 | /** | |
146 | * board_init_f_init_reserve - initialize the reserved area(s) | |
dc145a7b | 147 | * @base: top from which reservation was done |
11f86cba PD |
148 | * |
149 | * This function is called once the C runtime has allocated the reserved | |
150 | * area on the stack. It must initialize the GD at the base of that area. | |
11f86cba PD |
151 | */ |
152 | void board_init_f_init_reserve(ulong base); | |
153 | ||
67c4e9f8 SG |
154 | struct global_data; |
155 | ||
11f86cba PD |
156 | /** |
157 | * arch_setup_gd() - Set up the global_data pointer | |
dc145a7b | 158 | * @gd_ptr: Pointer to global data |
11f86cba PD |
159 | * |
160 | * This pointer is special in some architectures and cannot easily be assigned | |
161 | * to. For example on x86 it is implemented by adding a specific record to its | |
162 | * Global Descriptor Table! So we we provide a function to carry out this task. | |
163 | * For most architectures this can simply be: | |
164 | * | |
165 | * gd = gd_ptr; | |
11f86cba | 166 | */ |
67c4e9f8 | 167 | void arch_setup_gd(struct global_data *gd_ptr); |
11f86cba | 168 | |
dafa84d2 | 169 | /* common/board_r.c */ |
67c4e9f8 SG |
170 | void board_init_r(struct global_data *id, ulong dest_addr) |
171 | __attribute__ ((noreturn)); | |
e2c219cd PD |
172 | |
173 | int cpu_init_r(void); | |
174 | int last_stage_init(void); | |
175 | int mac_read_from_eeprom(void); | |
176 | int set_cpu_clk_info(void); | |
177 | int update_flash_size(int flash_size); | |
178 | int arch_early_init_r(void); | |
179 | void pci_init(void); | |
180 | int misc_init_r(void); | |
181 | #if defined(CONFIG_VID) | |
182 | int init_func_vid(void); | |
183 | #endif | |
184 | ||
fc22ee21 PD |
185 | /* common/board_info.c */ |
186 | int checkboard(void); | |
187 | int show_board_info(void); | |
dafa84d2 | 188 | |
67c4e9f8 SG |
189 | /** |
190 | * Get the uppermost pointer that is valid to access | |
191 | * | |
192 | * Some systems may not map all of their address space. This function allows | |
193 | * boards to indicate what their highest support pointer value is for DRAM | |
194 | * access. | |
195 | * | |
196 | * @param total_size Size of U-Boot (unused?) | |
197 | */ | |
198 | ulong board_get_usable_ram_top(ulong total_size); | |
199 | ||
5255932f SG |
200 | int board_early_init_f(void); |
201 | ||
202 | /* manipulate the U-Boot fdt before its relocation */ | |
203 | int board_fix_fdt(void *rw_fdt_blob); | |
204 | int board_late_init(void); | |
205 | int board_postclk_init(void); /* after clocks/timebase, before env/serial */ | |
206 | int board_early_init_r(void); | |
207 | ||
2cf431c2 SG |
208 | /* TODO(sjg@chromium.org): Drop this when DM_PCI migration is completed */ |
209 | void pci_init_board(void); | |
210 | ||
d67bdaa7 SG |
211 | void trap_init(unsigned long reloc_addr); |
212 | ||
dafa84d2 PD |
213 | #endif /* __ASSEMBLY__ */ |
214 | /* Put only stuff here that the assembler can digest */ | |
215 | ||
216 | #endif /* __INIT_H_ */ |