1*e2211743Swdenk /* 2*e2211743Swdenk * (C) Copyright 2000-2002 3*e2211743Swdenk * Wolfgang Denk, DENX Software Engineering, wd@denx.de. 4*e2211743Swdenk * 5*e2211743Swdenk * See file CREDITS for list of people who contributed to this 6*e2211743Swdenk * project. 7*e2211743Swdenk * 8*e2211743Swdenk * This program is free software; you can redistribute it and/or 9*e2211743Swdenk * modify it under the terms of the GNU General Public License as 10*e2211743Swdenk * published by the Free Software Foundation; either version 2 of 11*e2211743Swdenk * the License, or (at your option) any later version. 12*e2211743Swdenk * 13*e2211743Swdenk * This program is distributed in the hope that it will be useful, 14*e2211743Swdenk * but WITHOUT ANY WARRANTY; without even the implied warranty of 15*e2211743Swdenk * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16*e2211743Swdenk * GNU General Public License for more details. 17*e2211743Swdenk * 18*e2211743Swdenk * You should have received a copy of the GNU General Public License 19*e2211743Swdenk * along with this program; if not, write to the Free Software 20*e2211743Swdenk * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 21*e2211743Swdenk * MA 02111-1307 USA 22*e2211743Swdenk */ 23*e2211743Swdenk 24*e2211743Swdenk #ifndef __COMMON_H_ 25*e2211743Swdenk #define __COMMON_H_ 1 26*e2211743Swdenk 27*e2211743Swdenk #undef _LINUX_CONFIG_H 28*e2211743Swdenk #define _LINUX_CONFIG_H 1 /* avoid reading Linux autoconf.h file */ 29*e2211743Swdenk 30*e2211743Swdenk typedef unsigned char uchar; 31*e2211743Swdenk typedef volatile unsigned long vu_long; 32*e2211743Swdenk typedef volatile unsigned short vu_short; 33*e2211743Swdenk typedef volatile unsigned char vu_char; 34*e2211743Swdenk 35*e2211743Swdenk #include <config.h> 36*e2211743Swdenk #include <linux/bitops.h> 37*e2211743Swdenk #include <linux/types.h> 38*e2211743Swdenk #include <linux/string.h> 39*e2211743Swdenk #include <asm/ptrace.h> 40*e2211743Swdenk #include <stdarg.h> 41*e2211743Swdenk #if defined(CONFIG_PCI) && defined(CONFIG_440) 42*e2211743Swdenk #include <pci.h> 43*e2211743Swdenk #endif 44*e2211743Swdenk #ifdef CONFIG_8xx 45*e2211743Swdenk #include <asm/8xx_immap.h> 46*e2211743Swdenk #elif defined(CONFIG_8260) 47*e2211743Swdenk #include <asm/immap_8260.h> 48*e2211743Swdenk #endif 49*e2211743Swdenk #ifdef CONFIG_4xx 50*e2211743Swdenk #include <ppc4xx.h> 51*e2211743Swdenk #endif 52*e2211743Swdenk #ifdef CONFIG_HYMOD 53*e2211743Swdenk #include <asm/hymod.h> 54*e2211743Swdenk #endif 55*e2211743Swdenk #ifdef CONFIG_ARM 56*e2211743Swdenk #define asmlinkage /* nothing */ 57*e2211743Swdenk #endif 58*e2211743Swdenk 59*e2211743Swdenk #include <part.h> 60*e2211743Swdenk #include <flash.h> 61*e2211743Swdenk #include <image.h> 62*e2211743Swdenk 63*e2211743Swdenk #ifdef DEBUG 64*e2211743Swdenk #define debug(fmt,args...) printf (fmt ,##args) 65*e2211743Swdenk #else 66*e2211743Swdenk #define debug(fmt,args...) 67*e2211743Swdenk #endif /* DEBUG */ 68*e2211743Swdenk 69*e2211743Swdenk typedef void (interrupt_handler_t)(void *); 70*e2211743Swdenk 71*e2211743Swdenk #include <asm/u-boot.h> /* boot information for Linux kernel */ 72*e2211743Swdenk #include <asm/global_data.h> /* global data used for startup functions */ 73*e2211743Swdenk 74*e2211743Swdenk /* enable common handling for all TQM8xxL boards */ 75*e2211743Swdenk #if defined(CONFIG_TQM823L) || defined(CONFIG_TQM850L) || \ 76*e2211743Swdenk defined(CONFIG_TQM855L) || defined(CONFIG_TQM860L) 77*e2211743Swdenk # ifndef CONFIG_TQM8xxL 78*e2211743Swdenk # define CONFIG_TQM8xxL 79*e2211743Swdenk # endif 80*e2211743Swdenk #endif 81*e2211743Swdenk 82*e2211743Swdenk 83*e2211743Swdenk /* 84*e2211743Swdenk * Function Prototypes 85*e2211743Swdenk */ 86*e2211743Swdenk 87*e2211743Swdenk #if CONFIG_SERIAL_SOFTWARE_FIFO 88*e2211743Swdenk void serial_buffered_init (void); 89*e2211743Swdenk void serial_buffered_putc (const char); 90*e2211743Swdenk void serial_buffered_puts (const char *); 91*e2211743Swdenk int serial_buffered_getc (void); 92*e2211743Swdenk int serial_buffered_tstc (void); 93*e2211743Swdenk #endif /* CONFIG_SERIAL_SOFTWARE_FIFO */ 94*e2211743Swdenk 95*e2211743Swdenk void hang (void) __attribute__ ((noreturn)); 96*e2211743Swdenk 97*e2211743Swdenk /* */ 98*e2211743Swdenk long int initdram (int); 99*e2211743Swdenk int display_options (void); 100*e2211743Swdenk void print_size (ulong, const char *); 101*e2211743Swdenk 102*e2211743Swdenk /* common/main.c */ 103*e2211743Swdenk void main_loop (void); 104*e2211743Swdenk int run_command (const char *cmd, int flag); 105*e2211743Swdenk int readline (const char *const prompt); 106*e2211743Swdenk void reset_cmd_timeout(void); 107*e2211743Swdenk 108*e2211743Swdenk /* common/board.c */ 109*e2211743Swdenk void board_init_f (ulong); 110*e2211743Swdenk void board_init_r (gd_t *, ulong); 111*e2211743Swdenk int checkboard (void); 112*e2211743Swdenk int checkflash (void); 113*e2211743Swdenk int checkdram (void); 114*e2211743Swdenk char * strmhz(char *buf, long hz); 115*e2211743Swdenk int last_stage_init(void); 116*e2211743Swdenk 117*e2211743Swdenk /* common/flash.c */ 118*e2211743Swdenk void flash_perror (int); 119*e2211743Swdenk 120*e2211743Swdenk /* common/cmd_bootm.c */ 121*e2211743Swdenk void print_image_hdr (image_header_t *hdr); 122*e2211743Swdenk 123*e2211743Swdenk extern ulong load_addr; /* Default Load Address */ 124*e2211743Swdenk 125*e2211743Swdenk /* common/cmd_nvedit.c */ 126*e2211743Swdenk int env_init (void); 127*e2211743Swdenk void env_relocate (void); 128*e2211743Swdenk char *getenv (uchar *); 129*e2211743Swdenk int getenv_r (uchar *name, uchar *buf, unsigned len); 130*e2211743Swdenk int saveenv (void); 131*e2211743Swdenk #ifdef CONFIG_PPC /* ARM version to be fixed! */ 132*e2211743Swdenk void inline setenv (char *, char *); 133*e2211743Swdenk #endif /* CONFIG_PPC */ 134*e2211743Swdenk #ifdef CONFIG_ARM 135*e2211743Swdenk # include <asm/u-boot-arm.h> /* ARM version to be fixed! */ 136*e2211743Swdenk #endif /* CONFIG_ARM */ 137*e2211743Swdenk 138*e2211743Swdenk void pci_init (void); 139*e2211743Swdenk void pciinfo (int, int); 140*e2211743Swdenk 141*e2211743Swdenk #if defined(CONFIG_PCI) && defined(CONFIG_440) 142*e2211743Swdenk # if defined(CFG_PCI_PRE_INIT) 143*e2211743Swdenk int pci_pre_init (struct pci_controller * ); 144*e2211743Swdenk # endif 145*e2211743Swdenk # if defined(CFG_PCI_TARGET_INIT) 146*e2211743Swdenk void pci_target_init (struct pci_controller *); 147*e2211743Swdenk # endif 148*e2211743Swdenk # if defined(CFG_PCI_MASTER_INIT) 149*e2211743Swdenk void pci_master_init (struct pci_controller *); 150*e2211743Swdenk # endif 151*e2211743Swdenk int is_pci_host (struct pci_controller *); 152*e2211743Swdenk #endif 153*e2211743Swdenk 154*e2211743Swdenk int misc_init_f (void); 155*e2211743Swdenk int misc_init_r (void); 156*e2211743Swdenk 157*e2211743Swdenk /* $(BOARD)/$(BOARD).c */ 158*e2211743Swdenk void reset_phy (void); 159*e2211743Swdenk 160*e2211743Swdenk /* $(BOARD)/eeprom.c */ 161*e2211743Swdenk void eeprom_init (void); 162*e2211743Swdenk int eeprom_read (unsigned dev_addr, unsigned offset, uchar *buffer, unsigned cnt); 163*e2211743Swdenk int eeprom_write (unsigned dev_addr, unsigned offset, uchar *buffer, unsigned cnt); 164*e2211743Swdenk #ifdef CONFIG_LWMON 165*e2211743Swdenk extern uchar pic_read (uchar reg); 166*e2211743Swdenk extern void pic_write (uchar reg, uchar val); 167*e2211743Swdenk #endif 168*e2211743Swdenk 169*e2211743Swdenk /* 170*e2211743Swdenk * Set this up regardless of board 171*e2211743Swdenk * type, to prevent errors. 172*e2211743Swdenk */ 173*e2211743Swdenk #if defined(CONFIG_SPI) || !defined(CFG_I2C_EEPROM_ADDR) 174*e2211743Swdenk # define CFG_DEF_EEPROM_ADDR 0 175*e2211743Swdenk #else 176*e2211743Swdenk # define CFG_DEF_EEPROM_ADDR CFG_I2C_EEPROM_ADDR 177*e2211743Swdenk #endif /* CONFIG_SPI || !defined(CFG_I2C_EEPROM_ADDR) */ 178*e2211743Swdenk 179*e2211743Swdenk #if defined(CONFIG_PCU_E) || defined(CONFIG_CCM) 180*e2211743Swdenk extern void spi_init_f (void); 181*e2211743Swdenk extern void spi_init_r (void); 182*e2211743Swdenk extern ssize_t spi_read (uchar *, int, uchar *, int); 183*e2211743Swdenk extern ssize_t spi_write (uchar *, int, uchar *, int); 184*e2211743Swdenk #endif 185*e2211743Swdenk 186*e2211743Swdenk #ifdef CONFIG_RPXCLASSIC 187*e2211743Swdenk void rpxclassic_init (void); 188*e2211743Swdenk #endif 189*e2211743Swdenk 190*e2211743Swdenk #ifdef CONFIG_MBX 191*e2211743Swdenk /* $(BOARD)/mbx8xx.c */ 192*e2211743Swdenk void mbx_init (void); 193*e2211743Swdenk void board_serial_init (void); 194*e2211743Swdenk void board_ether_init (void); 195*e2211743Swdenk #endif 196*e2211743Swdenk 197*e2211743Swdenk #if defined(CONFIG_RPXCLASSIC) || defined(CONFIG_MBX) || defined(CONFIG_IAD210) 198*e2211743Swdenk void board_get_enetaddr (uchar *addr); 199*e2211743Swdenk #endif 200*e2211743Swdenk 201*e2211743Swdenk #ifdef CONFIG_HERMES 202*e2211743Swdenk /* $(BOARD)/hermes.c */ 203*e2211743Swdenk void hermes_start_lxt980 (int speed); 204*e2211743Swdenk #endif 205*e2211743Swdenk 206*e2211743Swdenk #ifdef CONFIG_EVB64260 207*e2211743Swdenk void evb64260_init(void); 208*e2211743Swdenk void debug_led(int, int); 209*e2211743Swdenk void display_mem_map(void); 210*e2211743Swdenk void perform_soft_reset(void); 211*e2211743Swdenk #endif 212*e2211743Swdenk 213*e2211743Swdenk void load_sernum_ethaddr (void); 214*e2211743Swdenk 215*e2211743Swdenk /* $(BOARD)/$(BOARD).c */ 216*e2211743Swdenk int board_pre_init (void); 217*e2211743Swdenk int board_postclk_init (void); /* after clocks/timebase, before env/serial */ 218*e2211743Swdenk void board_poweroff (void); 219*e2211743Swdenk 220*e2211743Swdenk #if defined(CFG_DRAM_TEST) 221*e2211743Swdenk int testdram(void); 222*e2211743Swdenk #endif /* CFG_DRAM_TEST */ 223*e2211743Swdenk 224*e2211743Swdenk /* $(CPU)/start.S */ 225*e2211743Swdenk #ifdef CONFIG_8xx 226*e2211743Swdenk uint get_immr (uint); 227*e2211743Swdenk #endif 228*e2211743Swdenk uint get_pvr (void); 229*e2211743Swdenk uint rd_ic_cst (void); 230*e2211743Swdenk void wr_ic_cst (uint); 231*e2211743Swdenk void wr_ic_adr (uint); 232*e2211743Swdenk uint rd_dc_cst (void); 233*e2211743Swdenk void wr_dc_cst (uint); 234*e2211743Swdenk void wr_dc_adr (uint); 235*e2211743Swdenk int icache_status (void); 236*e2211743Swdenk void icache_enable (void); 237*e2211743Swdenk void icache_disable(void); 238*e2211743Swdenk int dcache_status (void); 239*e2211743Swdenk void dcache_enable (void); 240*e2211743Swdenk void dcache_disable(void); 241*e2211743Swdenk void relocate_code (ulong, gd_t *, ulong); 242*e2211743Swdenk ulong get_endaddr (void); 243*e2211743Swdenk void trap_init (ulong); 244*e2211743Swdenk #if defined (CONFIG_4xx) || \ 245*e2211743Swdenk defined (CONFIG_74xx_7xx) || \ 246*e2211743Swdenk defined (CONFIG_74x) || \ 247*e2211743Swdenk defined (CONFIG_75x) || \ 248*e2211743Swdenk defined (CONFIG_74xx) 249*e2211743Swdenk unsigned char in8(unsigned int); 250*e2211743Swdenk void out8(unsigned int, unsigned char); 251*e2211743Swdenk unsigned short in16(unsigned int); 252*e2211743Swdenk unsigned short in16r(unsigned int); 253*e2211743Swdenk void out16(unsigned int, unsigned short value); 254*e2211743Swdenk void out16r(unsigned int, unsigned short value); 255*e2211743Swdenk unsigned long in32(unsigned int); 256*e2211743Swdenk unsigned long in32r(unsigned int); 257*e2211743Swdenk void out32(unsigned int, unsigned long value); 258*e2211743Swdenk void out32r(unsigned int, unsigned long value); 259*e2211743Swdenk void ppcDcbf(unsigned long value); 260*e2211743Swdenk void ppcDcbi(unsigned long value); 261*e2211743Swdenk void ppcSync(void); 262*e2211743Swdenk #endif 263*e2211743Swdenk 264*e2211743Swdenk /* $(CPU)/cpu.c */ 265*e2211743Swdenk int checkcpu (void); 266*e2211743Swdenk int checkicache (void); 267*e2211743Swdenk int checkdcache (void); 268*e2211743Swdenk void upmconfig (unsigned int, unsigned int *, unsigned int); 269*e2211743Swdenk ulong get_tbclk (void); 270*e2211743Swdenk 271*e2211743Swdenk /* $(CPU)/serial.c */ 272*e2211743Swdenk int serial_init (void); 273*e2211743Swdenk void serial_setbrg (void); 274*e2211743Swdenk void serial_putc (const char); 275*e2211743Swdenk void serial_puts (const char *); 276*e2211743Swdenk void serial_addr (unsigned int); 277*e2211743Swdenk int serial_getc (void); 278*e2211743Swdenk int serial_tstc (void); 279*e2211743Swdenk 280*e2211743Swdenk /* $(CPU)/speed.c */ 281*e2211743Swdenk int get_clocks (void); 282*e2211743Swdenk #if defined(CONFIG_8260) 283*e2211743Swdenk int prt_8260_clks (void); 284*e2211743Swdenk #endif 285*e2211743Swdenk #ifdef CONFIG_4xx 286*e2211743Swdenk ulong get_OPB_freq (void); 287*e2211743Swdenk ulong get_PCI_freq (void); 288*e2211743Swdenk #endif 289*e2211743Swdenk #if defined(CONFIG_S3C2400) || defined(CONFIG_S3C2410) 290*e2211743Swdenk ulong get_FCLK (void); 291*e2211743Swdenk ulong get_HCLK (void); 292*e2211743Swdenk ulong get_PCLK (void); 293*e2211743Swdenk ulong get_UCLK (void); 294*e2211743Swdenk #endif 295*e2211743Swdenk ulong get_bus_freq (ulong); 296*e2211743Swdenk 297*e2211743Swdenk #if defined(CONFIG_4xx) || defined(CONFIG_IOP480) 298*e2211743Swdenk # if defined(CONFIG_440) 299*e2211743Swdenk typedef PPC440_SYS_INFO sys_info_t; 300*e2211743Swdenk # else 301*e2211743Swdenk typedef PPC405_SYS_INFO sys_info_t; 302*e2211743Swdenk # endif 303*e2211743Swdenk void get_sys_info ( sys_info_t * ); 304*e2211743Swdenk #endif 305*e2211743Swdenk 306*e2211743Swdenk /* $(CPU)/cpu_init.c */ 307*e2211743Swdenk #if defined(CONFIG_8xx) || defined(CONFIG_8260) 308*e2211743Swdenk void cpu_init_f (volatile immap_t *immr); 309*e2211743Swdenk #endif 310*e2211743Swdenk #ifdef CONFIG_4xx 311*e2211743Swdenk void cpu_init_f (void); 312*e2211743Swdenk #endif 313*e2211743Swdenk int cpu_init_r (void); 314*e2211743Swdenk #if defined(CONFIG_8260) 315*e2211743Swdenk int prt_8260_rsr (void); 316*e2211743Swdenk #endif 317*e2211743Swdenk 318*e2211743Swdenk /* $(CPU)/interrupts.c */ 319*e2211743Swdenk int interrupt_init (void); 320*e2211743Swdenk void timer_interrupt (struct pt_regs *); 321*e2211743Swdenk void external_interrupt (struct pt_regs *); 322*e2211743Swdenk void irq_install_handler(int, interrupt_handler_t *, void *); 323*e2211743Swdenk void irq_free_handler (int); 324*e2211743Swdenk void reset_timer (void); 325*e2211743Swdenk ulong get_timer (ulong base); 326*e2211743Swdenk void set_timer (ulong t); 327*e2211743Swdenk void enable_interrupts (void); 328*e2211743Swdenk int disable_interrupts (void); 329*e2211743Swdenk 330*e2211743Swdenk /* $(CPU)/.../commproc.c */ 331*e2211743Swdenk int dpram_init (void); 332*e2211743Swdenk uint dpram_base(void); 333*e2211743Swdenk uint dpram_base_align(uint align); 334*e2211743Swdenk uint dpram_alloc(uint size); 335*e2211743Swdenk uint dpram_alloc_align(uint size,uint align); 336*e2211743Swdenk void post_word_store (ulong); 337*e2211743Swdenk ulong post_word_load (void); 338*e2211743Swdenk 339*e2211743Swdenk /* $(CPU)/.../<eth> */ 340*e2211743Swdenk void mii_init (void); 341*e2211743Swdenk 342*e2211743Swdenk /* $(CPU)/.../lcd.c */ 343*e2211743Swdenk ulong lcd_setmem (ulong); 344*e2211743Swdenk 345*e2211743Swdenk /* $(CPU)/.../vfd.c */ 346*e2211743Swdenk ulong vfd_setmem (ulong); 347*e2211743Swdenk 348*e2211743Swdenk /* $(CPU)/.../video.c */ 349*e2211743Swdenk ulong video_setmem (ulong); 350*e2211743Swdenk 351*e2211743Swdenk /* ppc/cache.c */ 352*e2211743Swdenk void flush_cache (unsigned long, unsigned long); 353*e2211743Swdenk 354*e2211743Swdenk /* ppc/ticks.S */ 355*e2211743Swdenk unsigned long long get_ticks(void); 356*e2211743Swdenk void wait_ticks (unsigned long); 357*e2211743Swdenk 358*e2211743Swdenk /* ppc/time.c */ 359*e2211743Swdenk void udelay (unsigned long); 360*e2211743Swdenk ulong usec2ticks (unsigned long usec); 361*e2211743Swdenk ulong ticks2usec (unsigned long ticks); 362*e2211743Swdenk int init_timebase (void); 363*e2211743Swdenk 364*e2211743Swdenk /* ppc/vsprintf.c */ 365*e2211743Swdenk ulong simple_strtoul(const char *cp,char **endp,unsigned int base); 366*e2211743Swdenk long simple_strtol(const char *cp,char **endp,unsigned int base); 367*e2211743Swdenk void panic(const char *fmt, ...); 368*e2211743Swdenk int sprintf(char * buf, const char *fmt, ...); 369*e2211743Swdenk int vsprintf(char *buf, const char *fmt, va_list args); 370*e2211743Swdenk 371*e2211743Swdenk /* ppc/crc32.c */ 372*e2211743Swdenk ulong crc32 (ulong, const unsigned char *, uint); 373*e2211743Swdenk ulong crc32_no_comp (ulong, const unsigned char *, uint); 374*e2211743Swdenk 375*e2211743Swdenk /* common/console.c */ 376*e2211743Swdenk extern void **syscall_tbl; 377*e2211743Swdenk 378*e2211743Swdenk int console_init_f(void); /* Before relocation; uses the serial stuff */ 379*e2211743Swdenk int console_init_r(void); /* After relocation; uses the console stuff */ 380*e2211743Swdenk int console_assign (int file, char *devname); /* Assign the console */ 381*e2211743Swdenk int ctrlc (void); 382*e2211743Swdenk int had_ctrlc (void); /* have we had a Control-C since last clear? */ 383*e2211743Swdenk void clear_ctrlc (void); /* clear the Control-C condition */ 384*e2211743Swdenk int disable_ctrlc (int); /* 1 to disable, 0 to enable Control-C detect */ 385*e2211743Swdenk 386*e2211743Swdenk /* 387*e2211743Swdenk * STDIO based functions (can always be used) 388*e2211743Swdenk */ 389*e2211743Swdenk 390*e2211743Swdenk /* serial stuff */ 391*e2211743Swdenk void serial_printf (const char *fmt, ...); 392*e2211743Swdenk 393*e2211743Swdenk /* stdin */ 394*e2211743Swdenk int getc(void); 395*e2211743Swdenk int tstc(void); 396*e2211743Swdenk 397*e2211743Swdenk /* stdout */ 398*e2211743Swdenk void putc(const char c); 399*e2211743Swdenk void puts(const char *s); 400*e2211743Swdenk void printf(const char *fmt, ...); 401*e2211743Swdenk 402*e2211743Swdenk /* stderr */ 403*e2211743Swdenk #define eputc(c) fputc(stderr, c) 404*e2211743Swdenk #define eputs(s) fputs(stderr, s) 405*e2211743Swdenk #define eprintf(fmt,args...) fprintf(stderr,fmt ,##args) 406*e2211743Swdenk 407*e2211743Swdenk /* 408*e2211743Swdenk * FILE based functions (can only be used AFTER relocation!) 409*e2211743Swdenk */ 410*e2211743Swdenk 411*e2211743Swdenk #define stdin 0 412*e2211743Swdenk #define stdout 1 413*e2211743Swdenk #define stderr 2 414*e2211743Swdenk #define MAX_FILES 3 415*e2211743Swdenk 416*e2211743Swdenk void fprintf(int file, const char *fmt, ...); 417*e2211743Swdenk void fputs(int file, const char *s); 418*e2211743Swdenk void fputc(int file, const char c); 419*e2211743Swdenk int ftstc(int file); 420*e2211743Swdenk int fgetc(int file); 421*e2211743Swdenk 422*e2211743Swdenk int pcmcia_init (void); 423*e2211743Swdenk 424*e2211743Swdenk #ifdef CONFIG_SHOW_BOOT_PROGRESS 425*e2211743Swdenk void show_boot_progress (int status); 426*e2211743Swdenk #endif 427*e2211743Swdenk 428*e2211743Swdenk #endif /* __COMMON_H_ */ 429