]> 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 66a0874ef15dfdecfc37802a7a94fe9d57238024..b2402dcc9fd59b1c73db1c8eb4936fbfd0ee731e 100644 (file)
 #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);
@@ -245,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)){
@@ -301,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;
 
@@ -519,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)
 {