X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=include%2Fcommon.h;h=ba31727a7979e4fbe5b4b566b8ecf8ca0ec6ccad;hb=6e2941d787819ae1221d7f8295fa67d2ba94a913;hp=f9f4605dba6458fe4984a7c4b7aeef11d82c65d7;hpb=e6de55ec5bf306df3b3cc8e7a4cc17fa1e78ca6c;p=oweals%2Fu-boot.git diff --git a/include/common.h b/include/common.h index f9f4605dba..ba31727a79 100644 --- a/include/common.h +++ b/include/common.h @@ -15,64 +15,22 @@ typedef volatile unsigned long vu_long; typedef volatile unsigned short vu_short; typedef volatile unsigned char vu_char; +/* Allow sharing constants with type modifiers between C and assembly. */ +#define _AC(X, Y) (X##Y) + #include +#include +#include #include #include +#include #include #include #include #include #include #include -#if defined(CONFIG_PCI) && defined(CONFIG_4xx) -#include -#endif -#if defined(CONFIG_8xx) -#include -#if defined(CONFIG_MPC859) || defined(CONFIG_MPC859T) || \ - defined(CONFIG_MPC866) || \ - defined(CONFIG_MPC866P) -# define CONFIG_MPC866_FAMILY 1 -#elif defined(CONFIG_MPC885) -# define CONFIG_MPC885_FAMILY 1 -#endif -#if defined(CONFIG_MPC860) \ - || defined(CONFIG_MPC860T) \ - || defined(CONFIG_MPC866_FAMILY) \ - || defined(CONFIG_MPC885_FAMILY) -# define CONFIG_MPC86x 1 -#endif -#elif defined(CONFIG_5xx) -#include -#elif defined(CONFIG_MPC5xxx) -#include -#elif defined(CONFIG_MPC512X) -#include -#elif defined(CONFIG_MPC8260) -#if defined(CONFIG_MPC8247) \ - || defined(CONFIG_MPC8272) -#define CONFIG_MPC8272_FAMILY 1 -#endif -#include -#endif -#ifdef CONFIG_MPC86xx -#include -#include -#endif -#ifdef CONFIG_MPC85xx -#include -#include -#endif -#ifdef CONFIG_MPC83xx -#include -#include -#endif -#ifdef CONFIG_4xx -#include -#endif -#ifdef CONFIG_BLACKFIN -#include -#endif + #ifdef CONFIG_SOC_DA8XX #include #endif @@ -100,6 +58,13 @@ typedef volatile unsigned char vu_char; #define _DEBUG 0 #endif +#ifdef CONFIG_SPL_BUILD +#define _SPL_BUILD 1 +#else +#define _SPL_BUILD 0 +#endif + +/* Define this at the top of a file to add a prefix to debug messages */ #ifndef pr_fmt #define pr_fmt(fmt) fmt #endif @@ -115,9 +80,14 @@ typedef volatile unsigned char vu_char; printf(pr_fmt(fmt), ##args); \ } while (0) +/* Show a message if DEBUG is defined in a file */ #define debug(fmt, args...) \ debug_cond(_DEBUG, fmt, ##args) +/* Show a message if not in SPL */ +#define warn_non_spl(fmt, args...) \ + debug_cond(!_SPL_BUILD, fmt, ##args) + /* * An assertion is run-time check done in debug mode only. If DEBUG is not * defined then it is skipped. If DEBUG is defined and the assertion fails, @@ -151,28 +121,6 @@ typedef void (interrupt_handler_t)(void *); #include /* boot information for Linux kernel */ #include /* global data used for startup functions */ -/* - * enable common handling for all TQM8xxL/M boards: - * - CONFIG_TQM8xxM will be defined for all TQM8xxM boards - * - CONFIG_TQM8xxL will be defined for all TQM8xxL _and_ TQM8xxM boards - * and for the TQM885D board - */ -#if defined(CONFIG_TQM823M) || defined(CONFIG_TQM850M) || \ - defined(CONFIG_TQM855M) || defined(CONFIG_TQM860M) || \ - defined(CONFIG_TQM862M) || defined(CONFIG_TQM866M) -# ifndef CONFIG_TQM8xxM -# define CONFIG_TQM8xxM -# endif -#endif -#if defined(CONFIG_TQM823L) || defined(CONFIG_TQM850L) || \ - defined(CONFIG_TQM855L) || defined(CONFIG_TQM860L) || \ - defined(CONFIG_TQM862L) || defined(CONFIG_TQM8xxM) || \ - defined(CONFIG_TQM885D) -# ifndef CONFIG_TQM8xxL -# define CONFIG_TQM8xxL -# endif -#endif - #if defined(CONFIG_ENV_IS_EMBEDDED) #define TOTAL_MALLOC_LEN CONFIG_SYS_MALLOC_LEN #elif ( ((CONFIG_ENV_ADDR+CONFIG_ENV_SIZE) < CONFIG_SYS_MONITOR_BASE) || \ @@ -188,14 +136,28 @@ typedef void (interrupt_handler_t)(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); + void hang (void) __attribute__ ((noreturn)); int timer_init(void); int cpu_init(void); -/* */ -phys_size_t initdram (int); - #include /* common/main.c */ @@ -266,17 +228,26 @@ int mac_read_from_eeprom(void); extern u8 __dtb_dt_begin[]; /* embedded device tree blob */ int set_cpu_clk_info(void); int mdm_init(void); -#if defined(CONFIG_DISPLAY_CPUINFO) int print_cpuinfo(void); -#else -static inline int print_cpuinfo(void) -{ - return 0; -} -#endif int update_flash_size(int flash_size); int arch_early_init_r(void); +/* + * setup_board_extra() - Fill in extra details in the bd_t structure + * + * @return 0 if OK, -ve on error + */ +int setup_board_extra(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. + */ +int arch_fsp_init(void); + /** * arch_cpu_init_dm() - init CPU after driver model is available * @@ -335,9 +306,6 @@ extern ulong load_addr; /* Default Load Address */ extern ulong save_addr; /* Default Save Address */ extern ulong save_size; /* Default Save Size */ -/* common/cmd_doc.c */ -void doc_probe(unsigned long physadr); - /* common/cmd_net.c */ int do_tftpb(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]); @@ -393,29 +361,6 @@ static inline int setenv_addr(const char *varname, const void *addr) return setenv_hex(varname, (ulong)addr); } -#ifdef CONFIG_ARM -# include -# include -# include /* ARM version to be fixed! */ -#endif /* CONFIG_ARM */ -#ifdef CONFIG_X86 /* x86 version to be fixed! */ -# include -#endif /* CONFIG_X86 */ -#ifdef CONFIG_SANDBOX -# include /* TODO(sjg) what needs to be fixed? */ -#endif -#ifdef CONFIG_NDS32 -# include -# include -# include -#endif /* CONFIG_NDS32 */ -#ifdef CONFIG_MIPS -# include -#endif /* CONFIG_MIPS */ -#ifdef CONFIG_ARC -# include -#endif /* CONFIG_ARC */ - #ifdef CONFIG_AUTO_COMPLETE int env_complete(char *var, int maxv, char *cmdv[], int maxsz, char *buf); #endif @@ -424,25 +369,6 @@ int get_env_id (void); void pci_init (void); void pci_init_board(void); -#if defined(CONFIG_PCI) && defined(CONFIG_4xx) - int pci_pre_init (struct pci_controller *); - int is_pci_host (struct pci_controller *); -#endif - -#if defined(CONFIG_PCI) && (defined(CONFIG_440) || defined(CONFIG_405EX)) -# if defined(CONFIG_SYS_PCI_TARGET_INIT) - void pci_target_init (struct pci_controller *); -# endif -# if defined(CONFIG_SYS_PCI_MASTER_INIT) - void pci_master_init (struct pci_controller *); -# endif -#if defined(CONFIG_440SPE) || \ - defined(CONFIG_460EX) || defined(CONFIG_460GT) || \ - defined(CONFIG_405EX) - void pcie_setup_hoses(int busno); -#endif -#endif - int misc_init_f (void); int misc_init_r (void); @@ -452,9 +378,6 @@ void jumptable_init(void); /* common/kallsysm.c */ const char *symbol_lookup(unsigned long addr, unsigned long *caddr); -/* api/api.c */ -void api_init (void); - /* common/memsize.c */ long get_ram_size (long *, long); phys_size_t get_effective_memsize(void); @@ -464,9 +387,19 @@ void reset_phy (void); void fdc_hw_init (void); /* $(BOARD)/eeprom.c */ +#ifdef CONFIG_CMD_EEPROM void eeprom_init (int bus); int eeprom_read (unsigned dev_addr, unsigned offset, uchar *buffer, unsigned cnt); int eeprom_write (unsigned dev_addr, unsigned offset, uchar *buffer, unsigned cnt); +#else +/* + * Some EEPROM code is depecated because it used the legacy I2C interface. Add + * some macros here so we don't have to touch every one of those uses + */ +#define eeprom_init(bus) +#define eeprom_read(dev_addr, offset, buffer, cnt) ((void)-ENOSYS) +#define eeprom_write(dev_addr, offset, buffer, cnt) ((void)-ENOSYS) +#endif /* * Set this up regardless of board @@ -489,6 +422,7 @@ extern ssize_t spi_write (uchar *, int, uchar *, int); /* $(BOARD)/$(BOARD).c */ int board_early_init_f (void); +int board_fix_fdt (void *rw_fdt_blob); /* manipulate the U-Boot fdt before its relocation */ int board_late_init (void); int board_postclk_init (void); /* after clocks/timebase, before env/serial */ int board_early_init_r (void); @@ -499,21 +433,6 @@ int testdram(void); #endif /* CONFIG_SYS_DRAM_TEST */ /* $(CPU)/start.S */ -#if defined(CONFIG_5xx) || \ - defined(CONFIG_8xx) -uint get_immr (uint); -#endif -#if defined(CONFIG_MPC5xxx) -uint get_svr (void); -#endif -uint get_pvr (void); -uint get_svr (void); -uint rd_ic_cst (void); -void wr_ic_cst (uint); -void wr_ic_adr (uint); -uint rd_dc_cst (void); -void wr_dc_cst (uint); -void wr_dc_adr (uint); int icache_status (void); void icache_enable (void); void icache_disable(void); @@ -528,47 +447,12 @@ void relocate_code(ulong, gd_t *, ulong) __attribute__ ((noreturn)); #endif ulong get_endaddr (void); void trap_init (ulong); -#if defined (CONFIG_4xx) || \ - defined (CONFIG_MPC5xxx) || \ - defined (CONFIG_MPC85xx) || \ - defined (CONFIG_MPC86xx) || \ - defined (CONFIG_MPC83xx) -unsigned char in8(unsigned int); -void out8(unsigned int, unsigned char); -unsigned short in16(unsigned int); -unsigned short in16r(unsigned int); -void out16(unsigned int, unsigned short value); -void out16r(unsigned int, unsigned short value); -unsigned long in32(unsigned int); -unsigned long in32r(unsigned int); -void out32(unsigned int, unsigned long value); -void out32r(unsigned int, unsigned long value); -void ppcDcbf(unsigned long value); -void ppcDcbi(unsigned long value); -void ppcSync(void); -void ppcDcbz(unsigned long value); -#endif + #if defined (CONFIG_MICROBLAZE) unsigned short in16(unsigned int); void out16(unsigned int, unsigned short value); #endif -#if defined (CONFIG_MPC83xx) -void ppcDWload(unsigned int *addr, unsigned int *ret); -void ppcDWstore(unsigned int *addr, unsigned int *value); -void disable_addr_trans(void); -void enable_addr_trans(void); -#if defined(CONFIG_DDR_ECC) && !defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER) -void ddr_enable_ecc(unsigned int dram_size); -#endif -#endif - -/* - * Return the current value of a monotonically increasing microsecond timer. - * Granularity may be larger than 1us if hardware does not support this. - */ -ulong timer_get_us(void); - /* $(CPU)/cpu.c */ static inline int cpumask_next(int cpu, unsigned int mask) { @@ -588,7 +472,17 @@ int cpu_num_dspcores(void); u32 cpu_mask (void); u32 cpu_dsp_mask(void); int is_core_valid (unsigned int); -int probecpu (void); + +/** + * 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. + */ +int arch_cpu_init(void); + int checkcpu (void); int checkicache (void); int checkdcache (void); @@ -618,20 +512,7 @@ int serial_stub_tstc(struct stdio_dev *sdev); /* $(CPU)/speed.c */ int get_clocks (void); -int get_clocks_866 (void); -int sdram_adjust_866 (void); -int adjust_sdram_tbs_8xx (void); -#if defined(CONFIG_MPC8260) -int prt_8260_clks (void); -#elif defined(CONFIG_MPC5xxx) -int prt_mpc5xxx_clks (void); -#endif -#ifdef CONFIG_4xx -ulong get_OPB_freq (void); -ulong get_PCI_freq (void); -#endif -#if defined(CONFIG_S3C24X0) || \ - defined(CONFIG_LH7A40X) || \ +#if defined(CONFIG_LH7A40X) || \ defined(CONFIG_EP93XX) ulong get_FCLK (void); ulong get_HCLK (void); @@ -653,52 +534,7 @@ ulong get_PERCLK3(void); ulong get_bus_freq (ulong); int get_serial_clock(void); -#if defined(CONFIG_MPC85xx) -typedef MPC85xx_SYS_INFO sys_info_t; -void get_sys_info ( sys_info_t * ); -void ft_fixup_cpu(void *, u64); -void ft_fixup_num_cores(void *); -#endif -#if defined(CONFIG_MPC86xx) -typedef MPC86xx_SYS_INFO sys_info_t; -void get_sys_info ( sys_info_t * ); -static inline ulong get_ddr_freq(ulong dummy) -{ - return get_bus_freq(dummy); -} -#else -ulong get_ddr_freq(ulong); -#endif - -#if defined(CONFIG_4xx) -# if defined(CONFIG_440) -# if defined(CONFIG_440SPE) - unsigned long determine_sysper(void); - unsigned long determine_pci_clock_per(void); -# endif -# endif -typedef PPC4xx_SYS_INFO sys_info_t; -int ppc440spe_revB(void); -void get_sys_info ( sys_info_t * ); -#endif - -/* $(CPU)/cpu_init.c */ -#if defined(CONFIG_8xx) || defined(CONFIG_MPC8260) -void cpu_init_f (volatile immap_t *immr); -#endif -#if defined(CONFIG_4xx) || defined(CONFIG_MCF52x2) || defined(CONFIG_MPC86xx) -void cpu_init_f (void); -#endif -#ifdef CONFIG_MPC85xx -ulong cpu_init_f(void); -#endif - int cpu_init_r (void); -#if defined(CONFIG_MPC8260) -int prt_8260_rsr (void); -#elif defined(CONFIG_MPC83xx) -int prt_83xx_rsr (void); -#endif /* $(CPU)/interrupts.c */ int interrupt_init (void); @@ -707,7 +543,6 @@ void external_interrupt (struct pt_regs *); void irq_install_handler(int, interrupt_handler_t *, void *); void irq_free_handler (int); void reset_timer (void); -ulong get_timer (ulong base); /* Return value of monotonic microsecond timer */ unsigned long timer_get_us(void); @@ -763,10 +598,8 @@ uint64_t get_ticks(void); void wait_ticks (unsigned long); /* arch/$(ARCH)/lib/time.c */ -void __udelay (unsigned long); ulong usec2ticks (unsigned long usec); ulong ticks2usec (unsigned long ticks); -int init_timebase (void); /* lib/gunzip.c */ int gunzip(void *, int, unsigned char *, unsigned long *); @@ -820,10 +653,6 @@ void qsort(void *base, size_t nmemb, size_t size, int(*compar)(const void *, const void *)); int strcmp_compar(const void *, const void *); -/* lib/time.c */ -void udelay (unsigned long); -void mdelay(unsigned long); - /* lib/uuid.c */ #include @@ -853,17 +682,20 @@ int getc(void); int tstc(void); /* stdout */ -#if defined(CONFIG_SPL_BUILD) && !defined(CONFIG_SPL_SERIAL_SUPPORT) -#define putc(...) do { } while (0) -#define puts(...) do { } while (0) -#define printf(...) do { } while (0) -#define vprintf(...) do { } while (0) -#else +#if !defined(CONFIG_SPL_BUILD) || \ + (defined(CONFIG_TPL_BUILD) && defined(CONFIG_TPL_SERIAL_SUPPORT)) || \ + (defined(CONFIG_SPL_BUILD) && !defined(CONFIG_TPL_BUILD) && \ + defined(CONFIG_SPL_SERIAL_SUPPORT)) void putc(const char c); void puts(const char *s); int printf(const char *fmt, ...) __attribute__ ((format (__printf__, 1, 2))); int vprintf(const char *fmt, va_list args); +#else +#define putc(...) do { } while (0) +#define puts(...) do { } while (0) +#define printf(...) do { } while (0) +#define vprintf(...) do { } while (0) #endif /* stderr */ @@ -902,7 +734,7 @@ static inline struct in_addr getenv_ip(char *var) int pcmcia_init (void); -#ifdef CONFIG_STATUS_LED +#ifdef CONFIG_LED_STATUS # include #endif @@ -920,18 +752,18 @@ int cpu_disable(int nr); int cpu_release(int nr, int argc, char * const argv[]); #endif -#endif /* __ASSEMBLY__ */ +#else /* __ASSEMBLY__ */ -#ifdef CONFIG_PPC -/* - * Has to be included outside of the #ifndef __ASSEMBLY__ section. - * Otherwise might lead to compilation errors in assembler files. - */ -#include -#endif +/* Drop a C type modifier (like in 3UL) for constants used in assembly. */ +#define _AC(X, Y) X + +#endif /* __ASSEMBLY__ */ /* Put only stuff here that the assembler can digest */ +/* Declare an unsigned long constant digestable both by C and an assembler. */ +#define UL(x) _AC(x, UL) + #ifdef CONFIG_POST #define CONFIG_HAS_POST #ifndef CONFIG_POST_ALT_LIST