diff options
| -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 | } |
