Thanks Philippe - this looks like a decent solution to the problem (and I intend to use this for the upcoming cx4 support as well).
Acked-by: Ian Munsie <imun...@au1.ibm.com> Excerpts from Philippe Bergheaud's message of 2016-06-30 13:45:37 +0200: > One should not attempt to switch a PHB into CAPI mode if there is > a switch between the PHB and the adapter. This patch modifies the > cxl driver to ignore CAPI adapters misplaced in switched slots. > > Signed-off-by: Philippe Bergheaud <fe...@linux.vnet.ibm.com> > --- > This patch fixes Bz 142217. > > drivers/misc/cxl/pci.c | 29 +++++++++++++++++++++++++++++ > 1 file changed, 29 insertions(+) > > diff --git a/drivers/misc/cxl/pci.c b/drivers/misc/cxl/pci.c > index a08fcc8..2f978ed 100644 > --- a/drivers/misc/cxl/pci.c > +++ b/drivers/misc/cxl/pci.c > @@ -1280,6 +1280,30 @@ static void cxl_pci_remove_adapter(struct cxl *adapter) > device_unregister(&adapter->dev); > } > > +#define CXL_MAX_PCIEX_PARENT 2 > + > +static int cxl_slot_is_switched(struct pci_dev *dev) > +{ > + struct device_node *np; > + int depth = 0; > + const __be32 *prop; > + > + if (!(np = pci_device_to_OF_node(dev))) { > + pr_err("cxl: np = NULL\n"); > + return -ENODEV; > + } > + of_node_get(np); > + while (np) { > + np = of_get_next_parent(np); > + prop = of_get_property(np, "device_type", NULL); > + if (!prop || strcmp((char *)prop, "pciex")) > + break; > + depth++; > + } > + of_node_put(np); > + return (depth > CXL_MAX_PCIEX_PARENT); > +} > + > static int cxl_probe(struct pci_dev *dev, const struct pci_device_id *id) > { > struct cxl *adapter; > @@ -1291,6 +1315,11 @@ static int cxl_probe(struct pci_dev *dev, const struct > pci_device_id *id) > return -ENODEV; > } > > + if (cxl_slot_is_switched(dev)) { > + dev_dbg(&dev->dev, "cxl_init_adapter: Ignoring switched slot > device\n"); > + return -ENODEV; > + } > + > if (cxl_verbose) > dump_cxl_config_space(dev); > _______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev