]> git.sur5r.net Git - u-boot/blobdiff - board/freescale/mpc8572ds/mpc8572ds.c
Enabled the Freescale SGMII riser card on 8572DS
[u-boot] / board / freescale / mpc8572ds / mpc8572ds.c
index b6eb28e9c8a62626fe3b20f5c0b0da028ae32bb2..b2402dcc9fd59b1c73db1c8eb4936fbfd0ee731e 100644 (file)
@@ -25,6 +25,7 @@
 #include <pci.h>
 #include <asm/processor.h>
 #include <asm/mmu.h>
+#include <asm/cache.h>
 #include <asm/immap_85xx.h>
 #include <asm/immap_fsl_pci.h>
 #include <asm/fsl_ddr_sdram.h>
 #include <miiphy.h>
 #include <libfdt.h>
 #include <fdt_support.h>
+#include <tsec.h>
 
 #include "../common/pixis.h"
+#include "../common/sgmii_riser.h"
 
 #if defined(CONFIG_DDR_ECC) && !defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER)
 extern void ddr_enable_ecc(unsigned int dram_size);
@@ -244,7 +247,7 @@ void pci_init_board(void)
                extern void fsl_pci_init(struct pci_controller *hose);
                struct pci_controller *hose = &pcie2_hose;
                int pcie_ep = (host_agent == 2) || (host_agent == 4) ||
-                       (host_agent == 6);
+                       (host_agent == 6) || (host_agent == 0);
                int pcie_configured  = io_sel & 4;
 
                if (pcie_configured && !(devdisr & MPC85xx_DEVDISR_PCIE)){
@@ -300,7 +303,7 @@ void pci_init_board(void)
                volatile ccsr_fsl_pci_t *pci = (ccsr_fsl_pci_t *) CONFIG_SYS_PCIE1_ADDR;
                extern void fsl_pci_init(struct pci_controller *hose);
                struct pci_controller *hose = &pcie1_hose;
-               int pcie_ep = (host_agent == 1) || (host_agent == 4) ||
+               int pcie_ep = (host_agent <= 1) || (host_agent == 4) ||
                        (host_agent == 5);
                int pcie_configured  = io_sel & 6;
 
@@ -359,7 +362,6 @@ void pci_init_board(void)
 
 int board_early_init_r(void)
 {
-       unsigned int i;
        const unsigned int flashbase = CONFIG_SYS_FLASH_BASE;
        const u8 flash_esel = 2;
 
@@ -368,11 +370,9 @@ int board_early_init_r(void)
         * so that flash can be erased properly.
         */
 
-       /* Invalidate any remaining lines of the flash from caches. */
-       for (i = 0; i < 256*1024*1024; i+=32) {
-               asm volatile ("dcbi %0,%1": : "b" (flashbase), "r" (i));
-               asm volatile ("icbi %0,%1": : "b" (flashbase), "r" (i));
-       }
+       /* Flush d-cache and invalidate i-cache of any FLASH data */
+        flush_dcache();
+        invalidate_icache();
 
        /* invalidate existing TLB entry for flash + promjet */
        disable_tlb(flash_esel);
@@ -521,6 +521,52 @@ unsigned long get_board_ddr_clk(ulong dummy)
 }
 #endif
 
+#ifdef CONFIG_TSEC_ENET
+int board_eth_init(bd_t *bis)
+{
+       struct tsec_info_struct tsec_info[4];
+       volatile ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
+       int num = 0;
+
+#ifdef CONFIG_TSEC1
+       SET_STD_TSEC_INFO(tsec_info[num], 1);
+       if (!(gur->pordevsr & MPC85xx_PORDEVSR_SGMII1_DIS))
+               tsec_info[num].flags |= TSEC_SGMII;
+       num++;
+#endif
+#ifdef CONFIG_TSEC2
+       SET_STD_TSEC_INFO(tsec_info[num], 2);
+       if (!(gur->pordevsr & MPC85xx_PORDEVSR_SGMII2_DIS))
+               tsec_info[num].flags |= TSEC_SGMII;
+       num++;
+#endif
+#ifdef CONFIG_TSEC3
+       SET_STD_TSEC_INFO(tsec_info[num], 3);
+       if (!(gur->pordevsr & MPC85xx_PORDEVSR_SGMII3_DIS))
+               tsec_info[num].flags |= TSEC_SGMII;
+       num++;
+#endif
+#ifdef CONFIG_TSEC4
+       SET_STD_TSEC_INFO(tsec_info[num], 4);
+       if (!(gur->pordevsr & MPC85xx_PORDEVSR_SGMII4_DIS))
+               tsec_info[num].flags |= TSEC_SGMII;
+       num++;
+#endif
+
+       if (!num) {
+               printf("No TSECs initialized\n");
+
+               return 0;
+       }
+
+       fsl_sgmii_riser_init(tsec_info, num);
+
+       tsec_eth_init(bis, tsec_info, num);
+
+       return 0;
+}
+#endif
+
 #if defined(CONFIG_OF_BOARD_SETUP)
 void ft_board_setup(void *blob, bd_t *bd)
 {