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