]> git.sur5r.net Git - u-boot/blobdiff - board/mpc8360emds/mpc8360emds.c
Merge with /home/hs/jupiter/u-boot
[u-boot] / board / mpc8360emds / mpc8360emds.c
index d70a4c3cbd01b57d762b23505161efe84047e6a7..535884cb509d1e54192e1c0d838219e44d70a266 100644 (file)
 #else
 #include <asm/mmu.h>
 #endif
+#if defined(CONFIG_OF_FLAT_TREE)
+#include <ft_build.h>
+#endif
+
+const qe_iop_conf_t qe_iop_conf_tab[] = {
+       /* GETH1 */
+       {0,  3, 1, 0, 1}, /* TxD0 */
+       {0,  4, 1, 0, 1}, /* TxD1 */
+       {0,  5, 1, 0, 1}, /* TxD2 */
+       {0,  6, 1, 0, 1}, /* TxD3 */
+       {1,  6, 1, 0, 3}, /* TxD4 */
+       {1,  7, 1, 0, 1}, /* TxD5 */
+       {1,  9, 1, 0, 2}, /* TxD6 */
+       {1, 10, 1, 0, 2}, /* TxD7 */
+       {0,  9, 2, 0, 1}, /* RxD0 */
+       {0, 10, 2, 0, 1}, /* RxD1 */
+       {0, 11, 2, 0, 1}, /* RxD2 */
+       {0, 12, 2, 0, 1}, /* RxD3 */
+       {0, 13, 2, 0, 1}, /* RxD4 */
+       {1,  1, 2, 0, 2}, /* RxD5 */
+       {1,  0, 2, 0, 2}, /* RxD6 */
+       {1,  4, 2, 0, 2}, /* RxD7 */
+       {0,  7, 1, 0, 1}, /* TX_EN */
+       {0,  8, 1, 0, 1}, /* TX_ER */
+       {0, 15, 2, 0, 1}, /* RX_DV */
+       {0, 16, 2, 0, 1}, /* RX_ER */
+       {0,  0, 2, 0, 1}, /* RX_CLK */
+       {2,  9, 1, 0, 3}, /* GTX_CLK - CLK10 */
+       {2,  8, 2, 0, 1}, /* GTX125 - CLK9 */
+       /* GETH2 */
+       {0, 17, 1, 0, 1}, /* TxD0 */
+       {0, 18, 1, 0, 1}, /* TxD1 */
+       {0, 19, 1, 0, 1}, /* TxD2 */
+       {0, 20, 1, 0, 1}, /* TxD3 */
+       {1,  2, 1, 0, 1}, /* TxD4 */
+       {1,  3, 1, 0, 2}, /* TxD5 */
+       {1,  5, 1, 0, 3}, /* TxD6 */
+       {1,  8, 1, 0, 3}, /* TxD7 */
+       {0, 23, 2, 0, 1}, /* RxD0 */
+       {0, 24, 2, 0, 1}, /* RxD1 */
+       {0, 25, 2, 0, 1}, /* RxD2 */
+       {0, 26, 2, 0, 1}, /* RxD3 */
+       {0, 27, 2, 0, 1}, /* RxD4 */
+       {1, 12, 2, 0, 2}, /* RxD5 */
+       {1, 13, 2, 0, 3}, /* RxD6 */
+       {1, 11, 2, 0, 2}, /* RxD7 */
+       {0, 21, 1, 0, 1}, /* TX_EN */
+       {0, 22, 1, 0, 1}, /* TX_ER */
+       {0, 29, 2, 0, 1}, /* RX_DV */
+       {0, 30, 2, 0, 1}, /* RX_ER */
+       {0, 31, 2, 0, 1}, /* RX_CLK */
+       {2,  2, 1, 0, 2}, /* GTX_CLK = CLK10 */
+       {2,  3, 2, 0, 1}, /* GTX125 - CLK4 */
+
+       {0,  1, 3, 0, 2}, /* MDIO */
+       {0,  2, 1, 0, 1}, /* MDC */
+
+       {0,  0, 0, 0, QE_IOP_TAB_END}, /* END of table */
+};
 
 int board_early_init_f(void)
 {
-       volatile u8 *bcsr = (volatile u8 *)CFG_BCSR;
+
+       u8 *bcsr = (u8 *)CFG_BCSR;
+       const immap_t *immr = (immap_t *)CFG_IMMR;
 
        /* Enable flash write */
        bcsr[0xa] &= ~0x04;
 
+       /* Disable G1TXCLK, G2TXCLK h/w buffers (rev.2 h/w bug workaround) */
+       if (immr->sysconf.spridr == SPR_8360_REV20 ||
+           immr->sysconf.spridr == SPR_8360E_REV20)
+               bcsr[0xe] = 0x30;
+
        return 0;
 }
 
@@ -47,7 +113,7 @@ void sdram_init(void);
 
 long int initdram(int board_type)
 {
-       volatile immap_t *im = (immap_t *) CFG_IMMRBAR;
+       volatile immap_t *im = (immap_t *) CFG_IMMR;
        u32 msize = 0;
 
        if ((im->sysconf.immrbar & IMMRBAR_BASE_ADDR) != (u32) im)
@@ -82,7 +148,7 @@ long int initdram(int board_type)
  ************************************************************************/
 int fixed_sdram(void)
 {
-       volatile immap_t *im = (immap_t *) CFG_IMMRBAR;
+       volatile immap_t *im = (immap_t *) CFG_IMMR;
        u32 msize = 0;
        u32 ddr_size;
        u32 ddr_size_log2;
@@ -99,6 +165,20 @@ int fixed_sdram(void)
 #if (CFG_DDR_SIZE != 256)
 #warning Currenly any ddr size other than 256 is not supported
 #endif
+#ifdef CONFIG_DDR_II
+       im->ddr.csbnds[0].csbnds = CFG_DDR_CS0_BNDS;
+       im->ddr.cs_config[0] = CFG_DDR_CS0_CONFIG;
+       im->ddr.timing_cfg_0 = CFG_DDR_TIMING_0;
+       im->ddr.timing_cfg_1 = CFG_DDR_TIMING_1;
+       im->ddr.timing_cfg_2 = CFG_DDR_TIMING_2;
+       im->ddr.timing_cfg_3 = CFG_DDR_TIMING_3;
+       im->ddr.sdram_cfg = CFG_DDR_SDRAM_CFG;
+       im->ddr.sdram_cfg2 = CFG_DDR_SDRAM_CFG2;
+       im->ddr.sdram_mode = CFG_DDR_MODE;
+       im->ddr.sdram_mode2 = CFG_DDR_MODE2;
+       im->ddr.sdram_interval = CFG_DDR_INTERVAL;
+       im->ddr.sdram_clk_cntl = CFG_DDR_CLK_CNTL;
+#else
        im->ddr.csbnds[0].csbnds = 0x00000007;
        im->ddr.csbnds[1].csbnds = 0x0008000f;
 
@@ -111,6 +191,7 @@ int fixed_sdram(void)
 
        im->ddr.sdram_mode = CFG_DDR_MODE;
        im->ddr.sdram_interval = CFG_DDR_INTERVAL;
+#endif
        udelay(200);
        im->ddr.sdram_cfg |= SDRAM_CFG_MEM_EN;
 
@@ -137,7 +218,7 @@ int checkboard(void)
 
 void sdram_init(void)
 {
-       volatile immap_t *immap = (immap_t *) CFG_IMMRBAR;
+       volatile immap_t *immap = (immap_t *) CFG_IMMR;
        volatile lbus83xx_t *lbc = &immap->lbus;
        uint *sdram_addr = (uint *) CFG_LBC_SDRAM_BASE;
 
@@ -208,7 +289,7 @@ void sdram_init(void)
  */
 void ecc_print_status(void)
 {
-       volatile immap_t *immap = (immap_t *) CFG_IMMRBAR;
+       volatile immap_t *immap = (immap_t *) CFG_IMMR;
        volatile ddr83xx_t *ddr = &immap->ddr;
 
        printf("\nECC mode: %s\n\n",
@@ -288,7 +369,7 @@ void ecc_print_status(void)
 
 int do_ecc(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
 {
-       volatile immap_t *immap = (immap_t *) CFG_IMMRBAR;
+       volatile immap_t *immap = (immap_t *) CFG_IMMR;
        volatile ddr83xx_t *ddr = &immap->ddr;
        volatile u32 val;
        u64 *addr;
@@ -476,6 +557,7 @@ int do_ecc(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
 
                                /* write memory location injecting errors */
                                ppcDWstore((u32 *) i, pattern);
+                               __asm__ __volatile__("sync");
 
                                /* disable injects */
                                ddr->ecc_err_inject &= ~ECC_ERR_INJECT_EIEN;
@@ -484,10 +566,12 @@ int do_ecc(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
 
                                /* read data, this generates ECC error */
                                ppcDWload((u32 *) i, ret);
+                               __asm__ __volatile__("sync");
 
                                /* re-initialize memory, double word write the location again,
                                 * generates new ECC code this time */
                                ppcDWstore((u32 *) i, writeback);
+                               __asm__ __volatile__("sync");
                        }
                        enable_interrupts();
                        return 0;
@@ -529,6 +613,7 @@ int do_ecc(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
                                 * double word write the location again,
                                 * generates new ECC code this time */
                                ppcDWstore((u32 *) i, writeback);
+                               __asm__ __volatile__("sync");
                        }
                        enable_interrupts();
                        return 0;
@@ -572,3 +657,23 @@ U_BOOT_CMD(ecc, 4, 0, do_ecc,
           "  - writes pattern with word access, generates error\n"
           "  - disables injects\n" "  - re-inits memory");
 #endif                         /* if defined(CONFIG_DDR_ECC) && defined(CONFIG_DDR_ECC_CMD) */
+
+#if defined(CONFIG_OF_FLAT_TREE) && defined(CONFIG_OF_BOARD_SETUP)
+void
+ft_board_setup(void *blob, bd_t *bd)
+{
+       u32 *p;
+       int len;
+
+#ifdef CONFIG_PCI
+       ft_pci_setup(blob, bd);
+#endif
+       ft_cpu_setup(blob, bd);
+
+       p = ft_get_prop(blob, "/memory/reg", &len);
+       if (p != NULL) {
+               *p++ = cpu_to_be32(bd->bi_memstart);
+               *p = cpu_to_be32(bd->bi_memsize);
+       }
+}
+#endif