183d290c5STom Rini /* SPDX-License-Identifier: GPL-2.0+ */
2e2211743Swdenk /*
33b74e7ecSWolfgang Denk * (C) Copyright 2000-2009
4e2211743Swdenk * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
5e2211743Swdenk */
6e2211743Swdenk
7e2211743Swdenk #ifndef __COMMON_H_
8d0b8feefSWolfgang Denk #define __COMMON_H_ 1
9e2211743Swdenk
10fcd3c87eSWolfgang Denk #ifndef __ASSEMBLY__ /* put C only stuff in this section */
11fcd3c87eSWolfgang Denk
12e2211743Swdenk typedef unsigned char uchar;
13e2211743Swdenk typedef volatile unsigned long vu_long;
14e2211743Swdenk typedef volatile unsigned short vu_short;
15e2211743Swdenk typedef volatile unsigned char vu_char;
16e2211743Swdenk
17e2211743Swdenk #include <config.h>
182307ea40SJoe Hershberger #include <errno.h>
19a7b81769SMasahiro Yamada #include <time.h>
2025ddd1fbSWolfgang Denk #include <asm-offsets.h>
21e2211743Swdenk #include <linux/bitops.h>
220a70fb4cSMasahiro Yamada #include <linux/bug.h>
235bc516edSMasahiro Yamada #include <linux/delay.h>
24e2211743Swdenk #include <linux/types.h>
25b44b3026SMasahiro Yamada #include <linux/printk.h>
26e2211743Swdenk #include <linux/string.h>
279aed5080SMarek Vasut #include <linux/stringify.h>
28e2211743Swdenk #include <asm/ptrace.h>
29e2211743Swdenk #include <stdarg.h>
307fea7b1aSMasahiro Yamada #include <stdio.h>
31cba1da49SMasahiro Yamada #include <linux/kernel.h>
3285043159SSimon Glass
33e2211743Swdenk #include <part.h>
34e2211743Swdenk #include <flash.h>
35e2211743Swdenk #include <image.h>
36e2211743Swdenk
374d1fd7f1SYork Sun #ifdef __LP64__
384d1fd7f1SYork Sun #define CONFIG_SYS_SUPPORT_64BIT_DATA
394d1fd7f1SYork Sun #endif
404d1fd7f1SYork Sun
410e98b0a6SSimon Glass #include <log.h>
4221726a7aSSimon Glass
43e2211743Swdenk typedef void (interrupt_handler_t)(void *);
44e2211743Swdenk
45e2211743Swdenk #include <asm/u-boot.h> /* boot information for Linux kernel */
46e2211743Swdenk #include <asm/global_data.h> /* global data used for startup functions */
47e2211743Swdenk
483fbeeea6SHeiko Schocher #if defined(CONFIG_ENV_IS_EMBEDDED)
493fbeeea6SHeiko Schocher #define TOTAL_MALLOC_LEN CONFIG_SYS_MALLOC_LEN
503fbeeea6SHeiko Schocher #elif ( ((CONFIG_ENV_ADDR+CONFIG_ENV_SIZE) < CONFIG_SYS_MONITOR_BASE) || \
513fbeeea6SHeiko Schocher (CONFIG_ENV_ADDR >= (CONFIG_SYS_MONITOR_BASE + CONFIG_SYS_MONITOR_LEN)) ) || \
523fbeeea6SHeiko Schocher defined(CONFIG_ENV_IS_IN_NVRAM)
533fbeeea6SHeiko Schocher #define TOTAL_MALLOC_LEN (CONFIG_SYS_MALLOC_LEN + CONFIG_ENV_SIZE)
543fbeeea6SHeiko Schocher #else
553fbeeea6SHeiko Schocher #define TOTAL_MALLOC_LEN CONFIG_SYS_MALLOC_LEN
563fbeeea6SHeiko Schocher #endif
57c7de829cSwdenk
58d6f87712SPatrick Delaunay /* startup functions, used in:
59d6f87712SPatrick Delaunay * common/board_f.c
6011f86cbaSPatrick Delaunay * common/init/board_init.c
61e2c219cdSPatrick Delaunay * common/board_r.c
62fc22ee21SPatrick Delaunay * common/board_info.c
63d6f87712SPatrick Delaunay */
64dafa84d2SPatrick Delaunay #include <init.h>
65dafa84d2SPatrick Delaunay
66c7de829cSwdenk /*
67e2211743Swdenk * Function Prototypes
68e2211743Swdenk */
69e2211743Swdenk void hang (void) __attribute__ ((noreturn));
70e2211743Swdenk
71f6c019c4SWolfgang Denk int cpu_init(void);
72f6c019c4SWolfgang Denk
732ea09c83SSimon Glass #include <display_options.h>
74e2211743Swdenk
75e2211743Swdenk /* common/main.c */
76e2211743Swdenk void main_loop (void);
77009dde19SSimon Glass int run_command(const char *cmd, int flag);
781d43bfd2SThomas Betker int run_command_repeatable(const char *cmd, int flag);
79d51004a8SSimon Glass
80d51004a8SSimon Glass /**
81d51004a8SSimon Glass * Run a list of commands separated by ; or even \0
82d51004a8SSimon Glass *
83d51004a8SSimon Glass * Note that if 'len' is not -1, then the command does not need to be nul
84d51004a8SSimon Glass * terminated, Memory will be allocated for the command in that case.
85d51004a8SSimon Glass *
86d51004a8SSimon Glass * @param cmd List of commands to run, each separated bu semicolon
87d51004a8SSimon Glass * @param len Length of commands excluding terminator if known (-1 if not)
88d51004a8SSimon Glass * @param flag Execution flags (CMD_FLAG_...)
89d51004a8SSimon Glass * @return 0 on success, or != 0 on error.
90d51004a8SSimon Glass */
91d51004a8SSimon Glass int run_command_list(const char *cmd, int len, int flag);
92e2211743Swdenk
93e2c219cdSPatrick Delaunay int checkflash(void);
94e2c219cdSPatrick Delaunay int checkdram(void);
956ab6b2afSMasahiro Yamada extern u8 __dtb_dt_begin[]; /* embedded device tree blob */
969bd76b80SGoldschmidt Simon extern u8 __dtb_dt_spl_begin[]; /* embedded device tree blob for SPL/TPL */
97d6f87712SPatrick Delaunay int mdm_init(void);
98e2211743Swdenk
9915a33e49SSimon Glass /**
10015a33e49SSimon Glass * Show the DRAM size in a board-specific way
10115a33e49SSimon Glass *
10215a33e49SSimon Glass * This is used by boards to display DRAM information in their own way.
10315a33e49SSimon Glass *
10415a33e49SSimon Glass * @param size Size of DRAM (which should be displayed along with other info)
10515a33e49SSimon Glass */
106ea11b401SAndrew Bradford void board_show_dram(phys_size_t size);
10715a33e49SSimon Glass
10813d06981SSimon Glass /**
1097b78d643SAlexander Graf * Get the uppermost pointer that is valid to access
1107b78d643SAlexander Graf *
1117b78d643SAlexander Graf * Some systems may not map all of their address space. This function allows
1127b78d643SAlexander Graf * boards to indicate what their highest support pointer value is for DRAM
1137b78d643SAlexander Graf * access.
1147b78d643SAlexander Graf *
1157b78d643SAlexander Graf * @param total_size Size of U-Boot (unused?)
1167b78d643SAlexander Graf */
1177b78d643SAlexander Graf ulong board_get_usable_ram_top(ulong total_size);
1187b78d643SAlexander Graf
1197b78d643SAlexander Graf /**
120e29607edSMa Haijun * arch_fixup_fdt() - Write arch-specific information to fdt
12113d06981SSimon Glass *
122e29607edSMa Haijun * Defined in arch/$(ARCH)/lib/bootm-fdt.c
12313d06981SSimon Glass *
12413d06981SSimon Glass * @blob: FDT blob to write to
12513d06981SSimon Glass * @return 0 if ok, or -ve FDT_ERR_... on failure
12613d06981SSimon Glass */
127e29607edSMa Haijun int arch_fixup_fdt(void *blob);
12813d06981SSimon Glass
129e2211743Swdenk /* common/flash.c */
130e2211743Swdenk void flash_perror (int);
131e2211743Swdenk
13274de7aefSWolfgang Denk /* common/cmd_source.c */
13374de7aefSWolfgang Denk int source (ulong addr, const char *fit_uname);
134e2211743Swdenk
135e2211743Swdenk extern ulong load_addr; /* Default Load Address */
1361aec244aSSimon Glass extern ulong save_addr; /* Default Save Address */
1371aec244aSSimon Glass extern ulong save_size; /* Default Save Size */
138e2211743Swdenk
13906283a64SJason Hobbs /* common/cmd_net.c */
14006283a64SJason Hobbs int do_tftpb(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]);
14106283a64SJason Hobbs
142669df7e4SRob Herring /* common/cmd_fat.c */
143669df7e4SRob Herring int do_fat_fsload(cmd_tbl_t *, int, int, char * const []);
144669df7e4SRob Herring
145669df7e4SRob Herring /* common/cmd_ext2.c */
146669df7e4SRob Herring int do_ext2load(cmd_tbl_t *, int, int, char * const []);
147669df7e4SRob Herring
148e2211743Swdenk /* common/cmd_nvedit.c */
149e2211743Swdenk int env_init (void);
150e2211743Swdenk void env_relocate (void);
15126a41790SRafal Jaworowski int envmatch (uchar *, int);
15220f86a0aSSimon Glass
15300caae6dSSimon Glass /**
15400caae6dSSimon Glass * env_get() - Look up the value of an environment variable
15500caae6dSSimon Glass *
15600caae6dSSimon Glass * In U-Boot proper this can be called before relocation (which is when the
15700caae6dSSimon Glass * environment is loaded from storage, i.e. GD_FLG_ENV_READY is 0). In that
15800caae6dSSimon Glass * case this function calls env_get_f().
15900caae6dSSimon Glass *
16000caae6dSSimon Glass * @varname: Variable to look up
16100caae6dSSimon Glass * @return value of variable, or NULL if not found
16200caae6dSSimon Glass */
16300caae6dSSimon Glass char *env_get(const char *varname);
16400caae6dSSimon Glass
16500caae6dSSimon Glass /**
16600caae6dSSimon Glass * env_get_f() - Look up the value of an environment variable (early)
16700caae6dSSimon Glass *
16800caae6dSSimon Glass * This function is called from env_get() if the environment has not been
16900caae6dSSimon Glass * loaded yet (GD_FLG_ENV_READY flag is 0). Some environment locations will
17000caae6dSSimon Glass * support reading the value (slowly) and some will not.
17100caae6dSSimon Glass *
17200caae6dSSimon Glass * @varname: Variable to look up
17300caae6dSSimon Glass * @return value of variable, or NULL if not found
17400caae6dSSimon Glass */
17500caae6dSSimon Glass int env_get_f(const char *name, char *buf, unsigned len);
17600caae6dSSimon Glass
177bfebc8c9SSimon Glass /**
178bfebc8c9SSimon Glass * env_get_ulong() - Return an environment variable as an integer value
179bfebc8c9SSimon Glass *
180bfebc8c9SSimon Glass * Most U-Boot environment variables store hex values. For those which store
181bfebc8c9SSimon Glass * (e.g.) base-10 integers, this function can be used to read the value.
182bfebc8c9SSimon Glass *
183bfebc8c9SSimon Glass * @name: Variable to look up
184bfebc8c9SSimon Glass * @base: Base to use (e.g. 10 for base 10, 2 for binary)
185bfebc8c9SSimon Glass * @default_val: Default value to return if no value is found
186bfebc8c9SSimon Glass * @return the value found, or @default_val if none
187bfebc8c9SSimon Glass */
188bfebc8c9SSimon Glass ulong env_get_ulong(const char *name, int base, ulong default_val);
18976b8f79cSSimon Glass
19076b8f79cSSimon Glass /**
191bfebc8c9SSimon Glass * env_get_hex() - Return an environment variable as a hex value
19276b8f79cSSimon Glass *
19376b8f79cSSimon Glass * Decode an environment as a hex number (it may or may not have a 0x
19476b8f79cSSimon Glass * prefix). If the environment variable cannot be found, or does not start
19576b8f79cSSimon Glass * with hex digits, the default value is returned.
19676b8f79cSSimon Glass *
19776b8f79cSSimon Glass * @varname: Variable to decode
19876b8f79cSSimon Glass * @default_val: Value to return on error
19976b8f79cSSimon Glass */
200bfebc8c9SSimon Glass ulong env_get_hex(const char *varname, ulong default_val);
20176b8f79cSSimon Glass
202ec8a252cSJoe Hershberger /*
203ec8a252cSJoe Hershberger * Read an environment variable as a boolean
204ec8a252cSJoe Hershberger * Return -1 if variable does not exist (default to true)
205ec8a252cSJoe Hershberger */
206bfebc8c9SSimon Glass int env_get_yesno(const char *var);
207382bee57SSimon Glass
208382bee57SSimon Glass /**
209382bee57SSimon Glass * env_set() - set an environment variable
210382bee57SSimon Glass *
211382bee57SSimon Glass * This sets or deletes the value of an environment variable. For setting the
212382bee57SSimon Glass * value the variable is created if it does not already exist.
213382bee57SSimon Glass *
214382bee57SSimon Glass * @varname: Variable to adjust
215382bee57SSimon Glass * @value: Value to set for the variable, or NULL or "" to delete the variable
216382bee57SSimon Glass * @return 0 if OK, 1 on error
217382bee57SSimon Glass */
218382bee57SSimon Glass int env_set(const char *varname, const char *value);
219382bee57SSimon Glass
220bfc59966SSimon Glass /**
221018f5303SSimon Glass * env_set_ulong() - set an environment variable to an integer
222018f5303SSimon Glass *
223018f5303SSimon Glass * @varname: Variable to adjust
224018f5303SSimon Glass * @value: Value to set for the variable (will be converted to a string)
225018f5303SSimon Glass * @return 0 if OK, 1 on error
226018f5303SSimon Glass */
227018f5303SSimon Glass int env_set_ulong(const char *varname, ulong value);
228018f5303SSimon Glass
229018f5303SSimon Glass /**
230018f5303SSimon Glass * env_set_hex() - set an environment variable to a hex value
231018f5303SSimon Glass *
232018f5303SSimon Glass * @varname: Variable to adjust
233018f5303SSimon Glass * @value: Value to set for the variable (will be converted to a hex string)
234018f5303SSimon Glass * @return 0 if OK, 1 on error
235018f5303SSimon Glass */
236018f5303SSimon Glass int env_set_hex(const char *varname, ulong value);
237018f5303SSimon Glass
238018f5303SSimon Glass /**
239018f5303SSimon Glass * env_set_addr - Set an environment variable to an address in hex
240bfc59966SSimon Glass *
2411bce2aebSRobert P. J. Day * @varname: Environment variable to set
242bfc59966SSimon Glass * @addr: Value to set it to
243bfc59966SSimon Glass * @return 0 if ok, 1 on error
244bfc59966SSimon Glass */
env_set_addr(const char * varname,const void * addr)245018f5303SSimon Glass static inline int env_set_addr(const char *varname, const void *addr)
246bfc59966SSimon Glass {
247018f5303SSimon Glass return env_set_hex(varname, (ulong)addr);
248bfc59966SSimon Glass }
249bfc59966SSimon Glass
25004a85b3bSwdenk #ifdef CONFIG_AUTO_COMPLETE
251*03dcf17dSBoris Brezillon int env_complete(char *var, int maxv, char *cmdv[], int maxsz, char *buf,
252*03dcf17dSBoris Brezillon bool dollar_comp);
25304a85b3bSwdenk #endif
2542f70c49eSHeiko Schocher int get_env_id (void);
25504a85b3bSwdenk
256ad10dd9aSstroese void pci_init_board(void);
257e2211743Swdenk
25827b207fdSwdenk /* common/exports.c */
25927b207fdSwdenk void jumptable_init(void);
26027b207fdSwdenk
261ecb1dc89SMike Frysinger /* common/kallsysm.c */
262ecb1dc89SMike Frysinger const char *symbol_lookup(unsigned long addr, unsigned long *caddr);
263ecb1dc89SMike Frysinger
264c83bf6a2Swdenk /* common/memsize.c */
265a55d23ccSAlbert ARIBAUD long get_ram_size (long *, long);
266e3866163SYork Sun phys_size_t get_effective_memsize(void);
267c83bf6a2Swdenk
268e2211743Swdenk /* $(BOARD)/$(BOARD).c */
269e2211743Swdenk void reset_phy (void);
2707f6c2cbcSwdenk void fdc_hw_init (void);
271e2211743Swdenk
272f1b1f770SAdam Ford #if !defined(CONFIG_ENV_EEPROM_IS_ON_I2C) && defined(CONFIG_SYS_I2C_EEPROM_ADDR)
2736d0f6bcfSJean-Christophe PLAGNIOL-VILLARD # define CONFIG_SYS_DEF_EEPROM_ADDR CONFIG_SYS_I2C_EEPROM_ADDR
274548738b4SHeiko Schocher #endif
275e2211743Swdenk
276e2211743Swdenk /* $(BOARD)/$(BOARD).c */
277c837dcb1Swdenk int board_early_init_f (void);
2782a792753Smario.six@gdsys.cc int board_fix_fdt (void *rw_fdt_blob); /* manipulate the U-Boot fdt before its relocation */
279c837dcb1Swdenk int board_late_init (void);
280e2211743Swdenk int board_postclk_init (void); /* after clocks/timebase, before env/serial */
281c837dcb1Swdenk int board_early_init_r (void);
282e2211743Swdenk
2836d0f6bcfSJean-Christophe PLAGNIOL-VILLARD #if defined(CONFIG_SYS_DRAM_TEST)
284e2211743Swdenk int testdram(void);
2856d0f6bcfSJean-Christophe PLAGNIOL-VILLARD #endif /* CONFIG_SYS_DRAM_TEST */
286e2211743Swdenk
287e2211743Swdenk /* $(CPU)/start.S */
288e2211743Swdenk int icache_status (void);
289e2211743Swdenk void icache_enable (void);
290e2211743Swdenk void icache_disable(void);
291e2211743Swdenk int dcache_status (void);
292e2211743Swdenk void dcache_enable (void);
293e2211743Swdenk void dcache_disable(void);
2942c451f78SAneesh V void mmu_disable(void);
2955c6db120SBenoît Thébaudeau #if defined(CONFIG_ARM)
2965c6db120SBenoît Thébaudeau void relocate_code(ulong);
2975c6db120SBenoît Thébaudeau #else
2985c6db120SBenoît Thébaudeau void relocate_code(ulong, gd_t *, ulong) __attribute__ ((noreturn));
299959eaa74SBenoît Thébaudeau #endif
300e2211743Swdenk ulong get_endaddr (void);
301e2211743Swdenk void trap_init (ulong);
3026e2941d7SSimon Glass
303e2211743Swdenk /* $(CPU)/cpu.c */
cpumask_next(int cpu,unsigned int mask)304fbb9ecf7STimur Tabi static inline int cpumask_next(int cpu, unsigned int mask)
305fbb9ecf7STimur Tabi {
306fbb9ecf7STimur Tabi for (cpu++; !((1 << cpu) & mask); cpu++)
307fbb9ecf7STimur Tabi ;
308fbb9ecf7STimur Tabi
309fbb9ecf7STimur Tabi return cpu;
310fbb9ecf7STimur Tabi }
311fbb9ecf7STimur Tabi
312fbb9ecf7STimur Tabi #define for_each_cpu(iter, cpu, num_cpus, mask) \
313fbb9ecf7STimur Tabi for (iter = 0, cpu = cpumask_next(-1, mask); \
314fbb9ecf7STimur Tabi iter < num_cpus; \
315fbb9ecf7STimur Tabi iter++, cpu = cpumask_next(cpu, mask)) \
316fbb9ecf7STimur Tabi
3170e870980SPoonam Aggrwal int cpu_numcores (void);
318b8bf0adcSShaveta Leekha int cpu_num_dspcores(void);
319fbb9ecf7STimur Tabi u32 cpu_mask (void);
320b8bf0adcSShaveta Leekha u32 cpu_dsp_mask(void);
321fbb9ecf7STimur Tabi int is_core_valid (unsigned int);
322cbcbf71bSSimon Glass
323026d7958SDiego Dorta void s_init(void);
324026d7958SDiego Dorta
325e2211743Swdenk int checkcpu (void);
326e2211743Swdenk int checkicache (void);
327e2211743Swdenk int checkdcache (void);
328e2211743Swdenk void upmconfig (unsigned int, unsigned int *, unsigned int);
329e2211743Swdenk ulong get_tbclk (void);
3301fb4dab2SPrzemyslaw Marczak void reset_misc (void);
3313ec924a3Swdenk void reset_cpu (ulong addr);
3326a16e0dfSKim Phillips void ft_cpu_setup(void *blob, bd_t *bd);
3336a16e0dfSKim Phillips void ft_pci_setup(void *blob, bd_t *bd);
3346a16e0dfSKim Phillips
335ba6a1698SAndre Przywara void smp_set_core_boot_addr(unsigned long addr, int corenr);
336ba6a1698SAndre Przywara void smp_kick_all_cpus(void);
337e2211743Swdenk
338e2211743Swdenk /* $(CPU)/serial.c */
339e2211743Swdenk int serial_init (void);
340e2211743Swdenk void serial_setbrg (void);
341e2211743Swdenk void serial_putc (const char);
342756f586aSwdenk void serial_putc_raw(const char);
343e2211743Swdenk void serial_puts (const char *);
344e2211743Swdenk int serial_getc (void);
345e2211743Swdenk int serial_tstc (void);
346e2211743Swdenk
347e2211743Swdenk /* $(CPU)/speed.c */
348e2211743Swdenk int get_clocks (void);
349e2211743Swdenk ulong get_bus_freq (ulong);
350550650ddSStefan Roese int get_serial_clock(void);
351e2211743Swdenk
352e2211743Swdenk /* $(CPU)/interrupts.c */
353e2211743Swdenk int interrupt_init (void);
354e2211743Swdenk void timer_interrupt (struct pt_regs *);
355e2211743Swdenk void external_interrupt (struct pt_regs *);
356e2211743Swdenk void irq_install_handler(int, interrupt_handler_t *, void *);
357e2211743Swdenk void irq_free_handler (int);
358e2211743Swdenk void reset_timer (void);
359b2e16a85SSimon Glass
360b2e16a85SSimon Glass /* Return value of monotonic microsecond timer */
361b2e16a85SSimon Glass unsigned long timer_get_us(void);
362b2e16a85SSimon Glass
363e2211743Swdenk void enable_interrupts (void);
364e2211743Swdenk int disable_interrupts (void);
365e2211743Swdenk
366e2211743Swdenk /* $(CPU)/.../commproc.c */
367e2211743Swdenk int dpram_init (void);
368e2211743Swdenk uint dpram_base(void);
369e2211743Swdenk uint dpram_base_align(uint align);
370e2211743Swdenk uint dpram_alloc(uint size);
371e2211743Swdenk uint dpram_alloc_align(uint size,uint align);
372bdccc4feSwdenk void bootcount_store (ulong);
373bdccc4feSwdenk ulong bootcount_load (void);
374e2211743Swdenk
375e2211743Swdenk /* $(CPU)/.../<eth> */
376c5bded3cSWolfgang Denk void mii_init (void);
377e2211743Swdenk
378e2211743Swdenk /* $(CPU)/.../lcd.c */
379e2211743Swdenk ulong lcd_setmem (ulong);
380e2211743Swdenk
381e2211743Swdenk /* $(CPU)/.../video.c */
382e2211743Swdenk ulong video_setmem (ulong);
383e2211743Swdenk
384ea0364f1SPeter Tyser /* arch/$(ARCH)/lib/cache.c */
385cba4b180SAneesh V void enable_caches(void);
386e2211743Swdenk void flush_cache (unsigned long, unsigned long);
3872c451f78SAneesh V void flush_dcache_all(void);
38803d3bfb0SStefan Roese void flush_dcache_range(unsigned long start, unsigned long stop);
38903d3bfb0SStefan Roese void invalidate_dcache_range(unsigned long start, unsigned long stop);
3902c451f78SAneesh V void invalidate_dcache_all(void);
3912c451f78SAneesh V void invalidate_icache_all(void);
3920db5bca8Swdenk
3934d24a11eSSimon Glass enum {
3944d24a11eSSimon Glass /* Disable caches (else flush caches but leave them active) */
3954d24a11eSSimon Glass CBL_DISABLE_CACHES = 1 << 0,
3964d24a11eSSimon Glass CBL_SHOW_BOOTSTAGE_REPORT = 1 << 1,
3974d24a11eSSimon Glass
3984d24a11eSSimon Glass CBL_ALL = 3,
3994d24a11eSSimon Glass };
4004d24a11eSSimon Glass
4014d24a11eSSimon Glass /**
4024d24a11eSSimon Glass * Clean up ready for linux
4034d24a11eSSimon Glass *
4044d24a11eSSimon Glass * @param flags Flags to control what is done
4054d24a11eSSimon Glass */
4064d24a11eSSimon Glass int cleanup_before_linux_select(int flags);
4074d24a11eSSimon Glass
408ea0364f1SPeter Tyser /* arch/$(ARCH)/lib/ticks.S */
40919ea4678SSimon Glass uint64_t get_ticks(void);
410e2211743Swdenk void wait_ticks (unsigned long);
411e2211743Swdenk
412ea0364f1SPeter Tyser /* arch/$(ARCH)/lib/time.c */
413e2211743Swdenk ulong usec2ticks (unsigned long usec);
414e2211743Swdenk ulong ticks2usec (unsigned long ticks);
415e2211743Swdenk
41678acc472SPeter Tyser /* lib/gunzip.c */
417376ddf9dSJean-Jacques Hiblot int gzip_parse_header(const unsigned char *src, unsigned long len);
41887d93a1bSWolfgang Wegner int gunzip(void *, int, unsigned char *, unsigned long *);
41987d93a1bSWolfgang Wegner int zunzip(void *dst, int dstlen, unsigned char *src, unsigned long *lenp,
42087d93a1bSWolfgang Wegner int stoponerr, int offset);
42187d93a1bSWolfgang Wegner
422918e9ebbSEric Nelson /**
423918e9ebbSEric Nelson * gzwrite progress indicators: defined weak to allow board-specific
424918e9ebbSEric Nelson * overrides:
425918e9ebbSEric Nelson *
426918e9ebbSEric Nelson * gzwrite_progress_init called on startup
427918e9ebbSEric Nelson * gzwrite_progress called during decompress/write loop
428918e9ebbSEric Nelson * gzwrite_progress_finish called at end of loop to
429918e9ebbSEric Nelson * indicate success (retcode=0) or failure
430918e9ebbSEric Nelson */
431918e9ebbSEric Nelson void gzwrite_progress_init(u64 expected_size);
432918e9ebbSEric Nelson
433918e9ebbSEric Nelson void gzwrite_progress(int iteration,
434918e9ebbSEric Nelson u64 bytes_written,
435918e9ebbSEric Nelson u64 total_bytes);
436918e9ebbSEric Nelson
437918e9ebbSEric Nelson void gzwrite_progress_finish(int retcode,
438918e9ebbSEric Nelson u64 totalwritten,
439918e9ebbSEric Nelson u64 totalsize,
440918e9ebbSEric Nelson u32 expected_crc,
441918e9ebbSEric Nelson u32 calculated_crc);
442918e9ebbSEric Nelson
443918e9ebbSEric Nelson /**
444918e9ebbSEric Nelson * decompress and write gzipped image from memory to block device
445918e9ebbSEric Nelson *
446918e9ebbSEric Nelson * @param src compressed image address
447918e9ebbSEric Nelson * @param len compressed image length in bytes
448918e9ebbSEric Nelson * @param dev block device descriptor
449918e9ebbSEric Nelson * @param szwritebuf bytes per write (pad to erase size)
450918e9ebbSEric Nelson * @param startoffs offset in bytes of first write
451918e9ebbSEric Nelson * @param szexpected expected uncompressed length
452918e9ebbSEric Nelson * may be zero to use gzip trailer
453918e9ebbSEric Nelson * for files under 4GiB
454918e9ebbSEric Nelson */
455918e9ebbSEric Nelson int gzwrite(unsigned char *src, int len,
4564101f687SSimon Glass struct blk_desc *dev,
457918e9ebbSEric Nelson unsigned long szwritebuf,
458918e9ebbSEric Nelson u64 startoffs,
459918e9ebbSEric Nelson u64 szexpected);
460918e9ebbSEric Nelson
461027b728dSJulius Werner /* lib/lz4_wrapper.c */
462027b728dSJulius Werner int ulz4fn(const void *src, size_t srcn, void *dst, size_t *dstn);
463027b728dSJulius Werner
46454c6977eSWolfgang Denk /* lib/qsort.c */
46554c6977eSWolfgang Denk void qsort(void *base, size_t nmemb, size_t size,
46654c6977eSWolfgang Denk int(*compar)(const void *, const void *));
467560d424bSMike Frysinger int strcmp_compar(const void *, const void *);
46854c6977eSWolfgang Denk
469e11938eaSJason Hobbs /* lib/uuid.c */
470d718ded0SPrzemyslaw Marczak #include <uuid.h>
471e11938eaSJason Hobbs
47278acc472SPeter Tyser /* lib/vsprintf.c */
4739785c905SSimon Glass #include <vsprintf.h>
474e2211743Swdenk
47578acc472SPeter Tyser /* lib/strmhz.c */
47655f7934dSEd Swarthout char * strmhz(char *buf, unsigned long hz);
4770768b7a8SHaavard Skinnemoen
47878acc472SPeter Tyser /* lib/crc32.c */
479449609f5SPrafulla Wadaskar #include <u-boot/crc.h>
480e2211743Swdenk
4819acf1ca5SMichael Walle /* lib/rand.c */
4829acf1ca5SMichael Walle #define RAND_MAX -1U
4839acf1ca5SMichael Walle void srand(unsigned int seed);
4849acf1ca5SMichael Walle unsigned int rand(void);
4859acf1ca5SMichael Walle unsigned int rand_r(unsigned int *seedp);
4869acf1ca5SMichael Walle
487e2211743Swdenk /*
488e2211743Swdenk * STDIO based functions (can always be used)
489e2211743Swdenk */
490e2211743Swdenk /* serial stuff */
491d9c27253SWolfgang Denk int serial_printf (const char *fmt, ...)
492dc4b0b38SAndrew Klossner __attribute__ ((format (__printf__, 1, 2)));
493e2211743Swdenk
49488d52c6aSLei Wen /* lib/gzip.c */
49588d52c6aSLei Wen int gzip(void *dst, unsigned long *lenp,
49688d52c6aSLei Wen unsigned char *src, unsigned long srclen);
49788d52c6aSLei Wen int zzip(void *dst, unsigned long *lenp, unsigned char *src,
49888d52c6aSLei Wen unsigned long srclen, int stoponerr,
49988d52c6aSLei Wen int (*func)(unsigned long, unsigned long));
50088d52c6aSLei Wen
5014ef8d53cSJoe Hershberger /* lib/net_utils.c */
5024ef8d53cSJoe Hershberger #include <net.h>
env_get_ip(char * var)503723806ccSSimon Glass static inline struct in_addr env_get_ip(char *var)
5044ef8d53cSJoe Hershberger {
50500caae6dSSimon Glass return string_to_ip(env_get(var));
5064ef8d53cSJoe Hershberger }
5074ef8d53cSJoe Hershberger
508e2211743Swdenk int pcmcia_init (void);
509e2211743Swdenk
5102d8d190cSUri Mashiach #ifdef CONFIG_LED_STATUS
511fb364becSWolfgang Denk # include <status_led.h>
512fb364becSWolfgang Denk #endif
513097e1783SSimon Glass
514097e1783SSimon Glass #include <bootstage.h>
515e2211743Swdenk
51648522bb5SJoe Hershberger #ifdef CONFIG_SHOW_ACTIVITY
51748522bb5SJoe Hershberger void show_activity(int arg);
51848522bb5SJoe Hershberger #endif
51948522bb5SJoe Hershberger
520fcd3c87eSWolfgang Denk /* Multicore arch functions */
521fcd3c87eSWolfgang Denk #ifdef CONFIG_MP
52220b016a3SMichal Simek int cpu_status(u32 nr);
52320b016a3SMichal Simek int cpu_reset(u32 nr);
52420b016a3SMichal Simek int cpu_disable(u32 nr);
52520b016a3SMichal Simek int cpu_release(u32 nr, int argc, char * const argv[]);
526fcd3c87eSWolfgang Denk #endif
527fcd3c87eSWolfgang Denk
5282a6713b0SAndre Przywara #else /* __ASSEMBLY__ */
5292a6713b0SAndre Przywara
530fcd3c87eSWolfgang Denk #endif /* __ASSEMBLY__ */
531fcd3c87eSWolfgang Denk
532fcd3c87eSWolfgang Denk /* Put only stuff here that the assembler can digest */
533fcd3c87eSWolfgang Denk
534fcd3c87eSWolfgang Denk #ifdef CONFIG_POST
535fcd3c87eSWolfgang Denk #define CONFIG_HAS_POST
536800eb096SMichael Zaidman #ifndef CONFIG_POST_ALT_LIST
537800eb096SMichael Zaidman #define CONFIG_POST_STD_LIST
538800eb096SMichael Zaidman #endif
539fcd3c87eSWolfgang Denk #endif
540fcd3c87eSWolfgang Denk
541155cfb5eSAnton Staaf #define ROUND(a,b) (((a) + (b) - 1) & ~((b) - 1))
5424b03ac8bSAndy Fleming
5431e41f5adSAnton Staaf /*
544c9689ca3SSimon Glass * check_member() - Check the offset of a structure member
545c9689ca3SSimon Glass *
546c9689ca3SSimon Glass * @structure: Name of structure (e.g. global_data)
547c9689ca3SSimon Glass * @member: Name of member (e.g. baudrate)
548c9689ca3SSimon Glass * @offset: Expected offset in bytes
549c9689ca3SSimon Glass */
550c9689ca3SSimon Glass #define check_member(structure, member, offset) _Static_assert( \
551c9689ca3SSimon Glass offsetof(struct structure, member) == offset, \
552c9689ca3SSimon Glass "`struct " #structure "` offset for `" #member "` is not " #offset)
553c9689ca3SSimon Glass
554476476e7SSimon Glass /* Avoid using CONFIG_EFI_STUB directly as we may boot from other loaders */
555476476e7SSimon Glass #ifdef CONFIG_EFI_STUB
556476476e7SSimon Glass #define ll_boot_init() false
557476476e7SSimon Glass #else
558476476e7SSimon Glass #define ll_boot_init() true
559476476e7SSimon Glass #endif
560476476e7SSimon Glass
561c3eb3fe4SMike Frysinger /* Pull in stuff for the build system */
562c3eb3fe4SMike Frysinger #ifdef DO_DEPS_ONLY
563c3eb3fe4SMike Frysinger # include <environment.h>
564c3eb3fe4SMike Frysinger #endif
565c3eb3fe4SMike Frysinger
566e2211743Swdenk #endif /* __COMMON_H_ */
567