aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
Diffstat (limited to 'arch')
-rw-r--r--arch/powerpc/platforms/powernv/pci-ioda.c16
-rw-r--r--arch/powerpc/platforms/powernv/pci-p5ioc2.c6
2 files changed, 17 insertions, 5 deletions
diff --git a/arch/powerpc/platforms/powernv/pci-ioda.c b/arch/powerpc/platforms/powernv/pci-ioda.c
index 2931d97baa56..319ed61d674a 100644
--- a/arch/powerpc/platforms/powernv/pci-ioda.c
+++ b/arch/powerpc/platforms/powernv/pci-ioda.c
@@ -974,6 +974,11 @@ static void pnv_pci_ioda_fixup(void)
974 pnv_pci_ioda_setup_PEs(); 974 pnv_pci_ioda_setup_PEs();
975 pnv_pci_ioda_setup_seg(); 975 pnv_pci_ioda_setup_seg();
976 pnv_pci_ioda_setup_DMA(); 976 pnv_pci_ioda_setup_DMA();
977
978#ifdef CONFIG_EEH
979 eeh_addr_cache_build();
980 eeh_init();
981#endif
977} 982}
978 983
979/* 984/*
@@ -1050,7 +1055,8 @@ static void pnv_pci_ioda_shutdown(struct pnv_phb *phb)
1050 OPAL_ASSERT_RESET); 1055 OPAL_ASSERT_RESET);
1051} 1056}
1052 1057
1053void __init pnv_pci_init_ioda_phb(struct device_node *np, int ioda_type) 1058void __init pnv_pci_init_ioda_phb(struct device_node *np,
1059 u64 hub_id, int ioda_type)
1054{ 1060{
1055 struct pci_controller *hose; 1061 struct pci_controller *hose;
1056 static int primary = 1; 1062 static int primary = 1;
@@ -1088,6 +1094,7 @@ void __init pnv_pci_init_ioda_phb(struct device_node *np, int ioda_type)
1088 hose->first_busno = 0; 1094 hose->first_busno = 0;
1089 hose->last_busno = 0xff; 1095 hose->last_busno = 0xff;
1090 hose->private_data = phb; 1096 hose->private_data = phb;
1097 phb->hub_id = hub_id;
1091 phb->opal_id = phb_id; 1098 phb->opal_id = phb_id;
1092 phb->type = ioda_type; 1099 phb->type = ioda_type;
1093 1100
@@ -1173,6 +1180,9 @@ void __init pnv_pci_init_ioda_phb(struct device_node *np, int ioda_type)
1173 phb->ioda.io_size, phb->ioda.io_segsize); 1180 phb->ioda.io_size, phb->ioda.io_segsize);
1174 1181
1175 phb->hose->ops = &pnv_pci_ops; 1182 phb->hose->ops = &pnv_pci_ops;
1183#ifdef CONFIG_EEH
1184 phb->eeh_ops = &ioda_eeh_ops;
1185#endif
1176 1186
1177 /* Setup RID -> PE mapping function */ 1187 /* Setup RID -> PE mapping function */
1178 phb->bdfn_to_pe = pnv_ioda_bdfn_to_pe; 1188 phb->bdfn_to_pe = pnv_ioda_bdfn_to_pe;
@@ -1213,7 +1223,7 @@ void __init pnv_pci_init_ioda_phb(struct device_node *np, int ioda_type)
1213 1223
1214void pnv_pci_init_ioda2_phb(struct device_node *np) 1224void pnv_pci_init_ioda2_phb(struct device_node *np)
1215{ 1225{
1216 pnv_pci_init_ioda_phb(np, PNV_PHB_IODA2); 1226 pnv_pci_init_ioda_phb(np, 0, PNV_PHB_IODA2);
1217} 1227}
1218 1228
1219void __init pnv_pci_init_ioda_hub(struct device_node *np) 1229void __init pnv_pci_init_ioda_hub(struct device_node *np)
@@ -1236,6 +1246,6 @@ void __init pnv_pci_init_ioda_hub(struct device_node *np)
1236 for_each_child_of_node(np, phbn) { 1246 for_each_child_of_node(np, phbn) {
1237 /* Look for IODA1 PHBs */ 1247 /* Look for IODA1 PHBs */
1238 if (of_device_is_compatible(phbn, "ibm,ioda-phb")) 1248 if (of_device_is_compatible(phbn, "ibm,ioda-phb"))
1239 pnv_pci_init_ioda_phb(phbn, PNV_PHB_IODA1); 1249 pnv_pci_init_ioda_phb(phbn, hub_id, PNV_PHB_IODA1);
1240 } 1250 }
1241} 1251}
diff --git a/arch/powerpc/platforms/powernv/pci-p5ioc2.c b/arch/powerpc/platforms/powernv/pci-p5ioc2.c
index 5d378f2d9e26..b68db6325c1b 100644
--- a/arch/powerpc/platforms/powernv/pci-p5ioc2.c
+++ b/arch/powerpc/platforms/powernv/pci-p5ioc2.c
@@ -95,7 +95,7 @@ static void pnv_pci_p5ioc2_dma_dev_setup(struct pnv_phb *phb,
95 set_iommu_table_base(&pdev->dev, &phb->p5ioc2.iommu_table); 95 set_iommu_table_base(&pdev->dev, &phb->p5ioc2.iommu_table);
96} 96}
97 97
98static void __init pnv_pci_init_p5ioc2_phb(struct device_node *np, 98static void __init pnv_pci_init_p5ioc2_phb(struct device_node *np, u64 hub_id,
99 void *tce_mem, u64 tce_size) 99 void *tce_mem, u64 tce_size)
100{ 100{
101 struct pnv_phb *phb; 101 struct pnv_phb *phb;
@@ -136,6 +136,7 @@ static void __init pnv_pci_init_p5ioc2_phb(struct device_node *np,
136 phb->hose->first_busno = 0; 136 phb->hose->first_busno = 0;
137 phb->hose->last_busno = 0xff; 137 phb->hose->last_busno = 0xff;
138 phb->hose->private_data = phb; 138 phb->hose->private_data = phb;
139 phb->hub_id = hub_id;
139 phb->opal_id = phb_id; 140 phb->opal_id = phb_id;
140 phb->type = PNV_PHB_P5IOC2; 141 phb->type = PNV_PHB_P5IOC2;
141 phb->model = PNV_PHB_MODEL_P5IOC2; 142 phb->model = PNV_PHB_MODEL_P5IOC2;
@@ -229,7 +230,8 @@ void __init pnv_pci_init_p5ioc2_hub(struct device_node *np)
229 for_each_child_of_node(np, phbn) { 230 for_each_child_of_node(np, phbn) {
230 if (of_device_is_compatible(phbn, "ibm,p5ioc2-pcix") || 231 if (of_device_is_compatible(phbn, "ibm,p5ioc2-pcix") ||
231 of_device_is_compatible(phbn, "ibm,p5ioc2-pciex")) { 232 of_device_is_compatible(phbn, "ibm,p5ioc2-pciex")) {
232 pnv_pci_init_p5ioc2_phb(phbn, tce_mem, tce_per_phb); 233 pnv_pci_init_p5ioc2_phb(phbn, hub_id,
234 tce_mem, tce_per_phb);
233 tce_mem += tce_per_phb; 235 tce_mem += tce_per_phb;
234 } 236 }
235 } 237 }