|
@@ -40,10 +40,14 @@ static struct pci_controller pcie2_hose;
|
|
|
static struct pci_controller pcie3_hose;
|
|
|
#endif
|
|
|
|
|
|
+#ifdef CONFIG_PCIE4
|
|
|
+static struct pci_controller pcie4_hose;
|
|
|
+#endif
|
|
|
+
|
|
|
void pci_init_board(void)
|
|
|
{
|
|
|
volatile ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
|
|
|
- struct fsl_pci_info pci_info[3];
|
|
|
+ struct fsl_pci_info pci_info[4];
|
|
|
u32 devdisr;
|
|
|
int first_free_busno = 0;
|
|
|
int num = 0;
|
|
@@ -119,6 +123,28 @@ void pci_init_board(void)
|
|
|
#else
|
|
|
setbits_be32(&gur->devdisr, FSL_CORENET_DEVDISR_PCIE3); /* disable */
|
|
|
#endif
|
|
|
+
|
|
|
+#ifdef CONFIG_PCIE4
|
|
|
+ pcie_configured = is_serdes_configured(PCIE4);
|
|
|
+
|
|
|
+ if (pcie_configured && !(devdisr & FSL_CORENET_DEVDISR_PCIE4)) {
|
|
|
+ set_next_law(CONFIG_SYS_PCIE4_MEM_PHYS, LAW_SIZE_512M,
|
|
|
+ LAW_TRGT_IF_PCIE_4);
|
|
|
+ set_next_law(CONFIG_SYS_PCIE4_IO_PHYS, LAW_SIZE_64K,
|
|
|
+ LAW_TRGT_IF_PCIE_4);
|
|
|
+ SET_STD_PCIE_INFO(pci_info[num], 4);
|
|
|
+ pcie_ep = fsl_setup_hose(&pcie4_hose, pci_info[num].regs);
|
|
|
+ printf(" PCIE4 connected to as %s (base addr %lx)\n",
|
|
|
+ pcie_ep ? "End Point" : "Root Complex",
|
|
|
+ pci_info[num].regs);
|
|
|
+ first_free_busno = fsl_pci_init_port(&pci_info[num++],
|
|
|
+ &pcie4_hose, first_free_busno);
|
|
|
+ } else {
|
|
|
+ printf (" PCIE4: disabled\n");
|
|
|
+ }
|
|
|
+#else
|
|
|
+ setbits_be32(&gur->devdisr, FSL_CORENET_DEVDISR_PCIE4); /* disable */
|
|
|
+#endif
|
|
|
}
|
|
|
|
|
|
void pci_of_setup(void *blob, bd_t *bd)
|