|
@@ -89,6 +89,7 @@ void pe_level_printk(const struct pnv_ioda_pe *pe, const char *level,
|
|
|
}
|
|
|
|
|
|
static bool pnv_iommu_bypass_disabled __read_mostly;
|
|
|
+static bool pci_reset_phbs __read_mostly;
|
|
|
|
|
|
static int __init iommu_setup(char *str)
|
|
|
{
|
|
@@ -110,6 +111,14 @@ static int __init iommu_setup(char *str)
|
|
|
}
|
|
|
early_param("iommu", iommu_setup);
|
|
|
|
|
|
+static int __init pci_reset_phbs_setup(char *str)
|
|
|
+{
|
|
|
+ pci_reset_phbs = true;
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+early_param("ppc_pci_reset_phbs", pci_reset_phbs_setup);
|
|
|
+
|
|
|
static inline bool pnv_pci_is_m64(struct pnv_phb *phb, struct resource *r)
|
|
|
{
|
|
|
/*
|
|
@@ -4033,9 +4042,10 @@ static void __init pnv_pci_init_ioda_phb(struct device_node *np,
|
|
|
* If we're running in kdump kernel, the previous kernel never
|
|
|
* shutdown PCI devices correctly. We already got IODA table
|
|
|
* cleaned out. So we have to issue PHB reset to stop all PCI
|
|
|
- * transactions from previous kernel.
|
|
|
+ * transactions from previous kernel. The ppc_pci_reset_phbs
|
|
|
+ * kernel parameter will force this reset too.
|
|
|
*/
|
|
|
- if (is_kdump_kernel()) {
|
|
|
+ if (is_kdump_kernel() || pci_reset_phbs) {
|
|
|
pr_info(" Issue PHB reset ...\n");
|
|
|
pnv_eeh_phb_reset(hose, EEH_RESET_FUNDAMENTAL);
|
|
|
pnv_eeh_phb_reset(hose, EEH_RESET_DEACTIVATE);
|