X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=lib_ppc%2Fboard.c;h=92ebbd9411cfd53ed1922ac5debf0fb7b8fddb84;hb=fa838874cf29a18ce11371c048358f683c74ff0e;hp=15cf67a29871666e99596df092d38dbb84e845e8;hpb=0608e04da9d0df5d00cf48a1d9141e2ea1bc9635;p=u-boot diff --git a/lib_ppc/board.c b/lib_ppc/board.c index 15cf67a298..92ebbd9411 100644 --- a/lib_ppc/board.c +++ b/lib_ppc/board.c @@ -48,6 +48,7 @@ #include #endif #include +#include #ifdef CFG_ALLOC_DPRAM #if !(defined(CONFIG_8260)||defined(CONFIG_MPC8560)) #include @@ -84,15 +85,17 @@ void nand_init (void); static char *failed = "*** failed ***\n"; -#if defined(CONFIG_PCU_E) || defined(CONFIG_OXC) +#if defined(CONFIG_OXC) || defined(CONFIG_PCU_E) || defined(CONFIG_RMU) extern flash_info_t flash_info[]; #endif #include -#if ( ((CFG_ENV_ADDR+CFG_ENV_SIZE) < CFG_MONITOR_BASE) || \ - (CFG_ENV_ADDR >= (CFG_MONITOR_BASE + CFG_MONITOR_LEN)) ) || \ - defined(CFG_ENV_IS_IN_NVRAM) +#if defined(CFG_ENV_IS_EMBEDDED) +#define TOTAL_MALLOC_LEN CFG_MALLOC_LEN +#elif ( ((CFG_ENV_ADDR+CFG_ENV_SIZE) < CFG_MONITOR_BASE) || \ + (CFG_ENV_ADDR >= (CFG_MONITOR_BASE + CFG_MONITOR_LEN)) ) || \ + defined(CFG_ENV_IS_IN_NVRAM) #define TOTAL_MALLOC_LEN (CFG_MALLOC_LEN + CFG_ENV_SIZE) #else #define TOTAL_MALLOC_LEN CFG_MALLOC_LEN @@ -261,8 +264,11 @@ init_fnc_t *init_sequence[] = { board_early_init_f, #endif -#if !defined(CONFIG_TQM866M) +#if !defined(CONFIG_8xx_CPUCLK_DEFAULT) get_clocks, /* get CPU and bus clocks (etc.) */ +#if defined(CONFIG_TQM8xxL) && !defined(CONFIG_TQM866M) + adjust_sdram_tbs_8xx, +#endif init_timebase, #endif #ifdef CFG_ALLOC_DPRAM @@ -274,7 +280,7 @@ init_fnc_t *init_sequence[] = { board_postclk_init, #endif env_init, -#if defined(CONFIG_TQM866M) +#if defined(CONFIG_8xx_CPUCLK_DEFAULT) get_clocks_866, /* get CPU and bus clocks according to the environment variable */ sdram_adjust_866, /* adjust sdram refresh rate according to the new clock */ init_timebase, @@ -291,6 +297,9 @@ init_fnc_t *init_sequence[] = { #if defined(CONFIG_MPC5xxx) prt_mpc5xxx_clks, #endif /* CONFIG_MPC5xxx */ +#if defined(CONFIG_MPC8220) + prt_mpc8220_clks, +#endif checkboard, INIT_FUNC_WATCHDOG_INIT #if defined(CONFIG_MISC_INIT_F) @@ -348,6 +357,8 @@ void board_init_f (ulong bootflag) /* Pointer is writable since we allocated a register for it */ gd = (gd_t *) (CFG_INIT_RAM_ADDR + CFG_GBL_DATA_OFFSET); + /* compiler optimization barrier needed for GCC >= 3.4 */ + __asm__ __volatile__("": : :"memory"); #if !(defined(CONFIG_8260) || defined(CONFIG_MPC8560)) /* Clear initial global data */ @@ -469,6 +480,9 @@ void board_init_f (ulong bootflag) #ifdef CONFIG_IP860 bd->bi_sramstart = SRAM_BASE; /* start of SRAM memory */ bd->bi_sramsize = SRAM_SIZE; /* size of SRAM memory */ +#elif defined CONFIG_MPC8220 + bd->bi_sramstart = CFG_SRAM_BASE; /* start of SRAM memory */ + bd->bi_sramsize = CFG_SRAM_SIZE; /* size of SRAM memory */ #else bd->bi_sramstart = 0; /* FIXME */ /* start of SRAM memory */ bd->bi_sramsize = 0; /* FIXME */ /* size of SRAM memory */ @@ -481,6 +495,26 @@ void board_init_f (ulong bootflag) #if defined(CONFIG_MPC5xxx) bd->bi_mbar_base = CFG_MBAR; /* base of internal registers */ #endif +#if defined(CONFIG_MPC8220) + bd->bi_mbar_base = CFG_MBAR; /* base of internal registers */ + bd->bi_inpfreq = gd->inp_clk; + bd->bi_pcifreq = gd->pci_clk; + bd->bi_vcofreq = gd->vco_clk; + bd->bi_pevfreq = gd->pev_clk; + bd->bi_flbfreq = gd->flb_clk; + + /* store bootparam to sram (backward compatible), here? */ + { + u32 *sram = (u32 *)CFG_SRAM_BASE; + *sram++ = gd->ram_size; + *sram++ = gd->bus_clk; + *sram++ = gd->inp_clk; + *sram++ = gd->cpu_clk; + *sram++ = gd->vco_clk; + *sram++ = gd->flb_clk; + *sram++ = 0xb8c3ba11; /* boot signature */ + } +#endif bd->bi_bootflags = bootflag; /* boot / reboot flag (for LynxOS) */ @@ -508,27 +542,6 @@ void board_init_f (ulong bootflag) #if defined(CONFIG_405GP) || defined(CONFIG_405EP) bd->bi_pci_busfreq = get_PCI_freq (); bd->bi_opbfreq = get_OPB_freq (); - -#if defined(CONFIG_I2CFAST) - /* - * set bi_iic_fast for linux taking environment variable - * "i2cfast" into account - */ - { - char *s = getenv ("i2cfast"); - if (s && ((*s == 'y') || (*s == 'Y'))) { - bd->bi_iic_fast[0] = 1; - bd->bi_iic_fast[1] = 1; - } else { - bd->bi_iic_fast[0] = 0; - bd->bi_iic_fast[1] = 0; - } - } -#else - bd->bi_iic_fast[0] = 0; - bd->bi_iic_fast[1] = 0; -#endif - #elif defined(CONFIG_XILINX_ML300) bd->bi_pci_busfreq = get_PCI_freq (); #endif @@ -596,6 +609,10 @@ void board_init_r (gd_t *id, ulong dest_addr) monitor_flash_len = (ulong)&__init_end - dest_addr; +#ifdef CONFIG_SERIAL_MULTI + serial_initialize(); +#endif + /* * We have to relocate the command table manually */ @@ -684,10 +701,8 @@ void board_init_r (gd_t *id, ulong dest_addr) s = getenv ("flashchecksum"); if (s && (*s == 'y')) { printf (" CRC: %08lX", - crc32 (0, - (const unsigned char *) CFG_FLASH_BASE, - flash_size) - ); + crc32 (0, (const unsigned char *) CFG_FLASH_BASE, flash_size) + ); } putc ('\n'); # else /* !CFG_FLASH_CHECKSUM */ @@ -700,8 +715,9 @@ void board_init_r (gd_t *id, ulong dest_addr) bd->bi_flashstart = CFG_FLASH_BASE; /* update start of FLASH memory */ bd->bi_flashsize = flash_size; /* size of FLASH memory (final value) */ -# if defined(CONFIG_PCU_E) || defined(CONFIG_OXC) - bd->bi_flashoffset = 0; +# if defined(CONFIG_PCU_E) || defined(CONFIG_OXC) || defined(CONFIG_RMU) + /* flash mapped at end of memory map */ + bd->bi_flashoffset = TEXT_BASE + flash_size; # elif CFG_MONITOR_BASE == CFG_FLASH_BASE bd->bi_flashoffset = monitor_flash_len; /* reserved area for startup monitor */ # else @@ -742,6 +758,31 @@ void board_init_r (gd_t *id, ulong dest_addr) * where had to use getenv_r(), which can be pretty slow when * the environment is in EEPROM. */ + +#if defined(CFG_EXTBDINFO) +#if defined(CONFIG_405GP) || defined(CONFIG_405EP) +#if defined(CONFIG_I2CFAST) + /* + * set bi_iic_fast for linux taking environment variable + * "i2cfast" into account + */ + { + char *s = getenv ("i2cfast"); + if (s && ((*s == 'y') || (*s == 'Y'))) { + bd->bi_iic_fast[0] = 1; + bd->bi_iic_fast[1] = 1; + } else { + bd->bi_iic_fast[0] = 0; + bd->bi_iic_fast[1] = 0; + } + } +#else + bd->bi_iic_fast[0] = 0; + bd->bi_iic_fast[1] = 0; +#endif /* CONFIG_I2CFAST */ +#endif /* CONFIG_405GP, CONFIG_405EP */ +#endif /* CFG_EXTBDINFO */ + s = getenv ("ethaddr"); #if defined (CONFIG_MBX) || defined (CONFIG_RPXCLASSIC) || defined(CONFIG_IAD210) if (s == NULL) @@ -764,8 +805,7 @@ void board_init_r (gd_t *id, ulong dest_addr) load_sernum_ethaddr (); #endif -#if defined(CFG_GT_6426x) || defined(CONFIG_PN62) || defined(CONFIG_PPCHAMELEONEVB) || \ - defined(CONFIG_MPC8540ADS) || defined(CONFIG_MPC8560ADS) || defined(CONFIG_440_GX) +#if defined(CONFIG_ETH1ADDR) /* handle the 2nd ethernet address */ s = getenv ("eth1addr"); @@ -776,8 +816,7 @@ void board_init_r (gd_t *id, ulong dest_addr) s = (*e) ? e + 1 : e; } #endif -#if defined(CFG_GT_6426x) || defined(CONFIG_MPC8540ADS) || defined(CONFIG_MPC8560ADS) || \ - defined(CONFIG_440_GX) +#if defined(CONFIG_ETH2ADDR) /* handle the 3rd ethernet address */ s = getenv ("eth2addr"); @@ -793,7 +832,7 @@ void board_init_r (gd_t *id, ulong dest_addr) } #endif -#if defined(CONFIG_440_GX) +#if defined(CONFIG_ETH3ADDR) /* handle 4th ethernet address */ s = getenv("eth3addr"); #if defined(CONFIG_XPEDITE1K) @@ -809,7 +848,7 @@ void board_init_r (gd_t *id, ulong dest_addr) #endif #if defined(CONFIG_TQM8xxL) || defined(CONFIG_TQM8260) || \ - defined(CONFIG_CCM) + defined(CONFIG_CCM) || defined(CONFIG_KUP4K) || defined(CONFIG_KUP4X) load_sernum_ethaddr (); #endif /* IP Address */ @@ -817,7 +856,7 @@ void board_init_r (gd_t *id, ulong dest_addr) WATCHDOG_RESET (); -#if defined(CONFIG_PCI) && !defined(CONFIG_BAB7xx) +#if defined(CONFIG_PCI) && !defined(CONFIG_BAB7xx) && !defined(CONFIG_CPC45) /* * Do pci configuration */ @@ -860,12 +899,12 @@ void board_init_r (gd_t *id, ulong dest_addr) defined(CONFIG_IP860) || \ defined(CONFIG_IVML24) || \ defined(CONFIG_IVMS8) || \ - defined(CONFIG_LWMON) || \ defined(CONFIG_MPC8260ADS) || \ defined(CONFIG_MPC8266ADS) || \ defined(CONFIG_MPC8560ADS) || \ defined(CONFIG_PCU_E) || \ defined(CONFIG_RPXSUPER) || \ + defined(CONFIG_STXGP3) || \ defined(CONFIG_SPD823TS) ) WATCHDOG_RESET (); @@ -901,8 +940,6 @@ void board_init_r (gd_t *id, ulong dest_addr) set_timer (0); - /* Insert function pointers now that we have relocated the code */ - /* Initialize from environment */ if ((s = getenv ("loadaddr")) != NULL) { load_addr = simple_strtoul (s, NULL, 16);