X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=arch%2Fppc%2Fboot%2Fsimple%2Fembed_config.c;h=c342b47e763e526e469b869603d224226ba12919;hb=f7f1b0f1e2fbadeab12d24236000e778aa9b1ead;hp=4dc12e6ab5759d2fdc3674ff1fef3f8bc81a6300;hpb=9213980e6a70d8473e0ffd4b39ab5b6caaba9ff5;p=linux-2.6.git diff --git a/arch/ppc/boot/simple/embed_config.c b/arch/ppc/boot/simple/embed_config.c index 4dc12e6ab..c342b47e7 100644 --- a/arch/ppc/boot/simple/embed_config.c +++ b/arch/ppc/boot/simple/embed_config.c @@ -16,7 +16,7 @@ #endif #ifdef CONFIG_8260 #include -#include +#include #endif #ifdef CONFIG_40x #include @@ -97,7 +97,7 @@ embed_config(bd_t **bdp) #endif /* CONFIG_MBX */ #if defined(CONFIG_RPXLITE) || defined(CONFIG_RPXCLASSIC) || \ - defined(CONFIG_RPX6) || defined(CONFIG_EP405) + defined(CONFIG_RPX8260) || defined(CONFIG_EP405) /* Helper functions for Embedded Planet boards. */ /* Because I didn't find anything that would do this....... @@ -147,7 +147,7 @@ rpx_eth(bd_t *bd, u_char *cp) } } -#ifdef CONFIG_RPX6 +#ifdef CONFIG_RPX8260 static uint rpx_baseten(u_char *cp) { @@ -415,9 +415,9 @@ clk_8260(bd_t *bd) { uint scmr, vco_out, clkin; uint plldf, pllmf, corecnf; - volatile immap_t *ip; + volatile cpm2_map_t *ip; - ip = (immap_t *)IMAP_ADDR; + ip = (cpm2_map_t *)CPM_MAP_ADDR; scmr = ip->im_clkrst.car_scmr; /* The clkin is always bus frequency. @@ -457,9 +457,9 @@ clk_8280(bd_t *bd) { uint scmr, main_clk, clkin; uint pllmf, corecnf; - volatile immap_t *ip; + volatile cpm2_map_t *ip; - ip = (immap_t *)IMAP_ADDR; + ip = (cpm2_map_t *)CPM_MAP_ADDR; scmr = ip->im_clkrst.car_scmr; /* The clkin is always bus frequency. @@ -506,7 +506,7 @@ embed_config(bd_t **bdp) memcpy(bd->bi_enetaddr, cp, 6); /* can busfreq be calculated? */ - pvr = mfspr(PVR); + pvr = mfspr(SPRN_PVR); if ((pvr & 0xffff0000) == 0x80820000) { bd->bi_busfreq = 100000000; clk_8280(bd); @@ -588,7 +588,7 @@ embed_config(bd_t **bdp) } #endif /* SBS8260 */ -#ifdef CONFIG_RPX6 +#ifdef CONFIG_RPX8260 void embed_config(bd_t **bdp) { @@ -749,25 +749,25 @@ embed_config(bd_t ** bdp) static const unsigned long line_size = 32; static const unsigned long congruence_classes = 256; unsigned long addr; - u_char *cp; - int i; + unsigned long dccr; bd_t *bd; /* - * At one point, we were getting machine checks. Linux was not - * invalidating the data cache before it was enabled. The - * following code was added to do that. Soon after we had done - * that, we found the real reasons for the machine checks. I've - * run the kernel a few times with the following code - * temporarily removed without any apparent problems. However, - * I objdump'ed the kernel and boot code and found out that - * there were no other dccci's anywhere, so I put the code back - * in and have been reluctant to remove it. It seems safer to - * just leave it here. + * Invalidate the data cache if the data cache is turned off. + * - The 405 core does not invalidate the data cache on power-up + * or reset but does turn off the data cache. We cannot assume + * that the cache contents are valid. + * - If the data cache is turned on this must have been done by + * a bootloader and we assume that the cache contents are + * valid. */ - for (addr = 0; - addr < (congruence_classes * line_size); addr += line_size) { - __asm__("dccci 0,%0": :"b"(addr)); + __asm__("mfdccr %0": "=r" (dccr)); + if (dccr == 0) { + for (addr = 0; + addr < (congruence_classes * line_size); + addr += line_size) { + __asm__("dccci 0,%0": :"b"(addr)); + } } bd = &bdinfo; @@ -775,6 +775,9 @@ embed_config(bd_t ** bdp) bd->bi_memsize = XPAR_DDR_0_SIZE; bd->bi_intfreq = XPAR_CORE_CLOCK_FREQ_HZ; bd->bi_busfreq = XPAR_PLB_CLOCK_FREQ_HZ; + bd->bi_pci_busfreq = XPAR_PCI_0_CLOCK_FREQ_HZ; + timebase_period_ns = 1000000000 / bd->bi_tbfreq; + /* see bi_tbfreq definition in arch/ppc/platforms/4xx/xilinx_ml300.h */ } #endif /* CONFIG_XILINX_ML300 */