diff options
Diffstat (limited to 'arch')
-rw-r--r-- | arch/powerpc/platforms/powernv/pci-ioda.c | 16 | ||||
-rw-r--r-- | arch/powerpc/platforms/powernv/pci-p5ioc2.c | 6 |
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 | ||
1053 | void __init pnv_pci_init_ioda_phb(struct device_node *np, int ioda_type) | 1058 | void __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 | ||
1214 | void pnv_pci_init_ioda2_phb(struct device_node *np) | 1224 | void 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 | ||
1219 | void __init pnv_pci_init_ioda_hub(struct device_node *np) | 1229 | void __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 | ||
98 | static void __init pnv_pci_init_p5ioc2_phb(struct device_node *np, | 98 | static 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 | } |