Message ID | 1465362594-10437-1-git-send-email-imunsie@au.ibm.com (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
Ian Munsie <imunsie@au1.ibm.com> writes: > diff --git a/arch/powerpc/platforms/powernv/pci-ioda.c b/arch/powerpc/platforms/powernv/pci-ioda.c > index 3a5ea82..5a42e98 100644 > --- a/arch/powerpc/platforms/powernv/pci-ioda.c > +++ b/arch/powerpc/platforms/powernv/pci-ioda.c > @@ -2793,7 +2793,9 @@ int pnv_phb_to_cxl_mode(struct pci_dev *dev, uint64_t mode) > pe_info(pe, "Switching PHB to CXL\n"); > > rc = opal_pci_set_phb_cxl_mode(phb->opal_id, mode, pe->pe_number); > - if (rc) > + if (rc == OPAL_UNSUPPORTED) > + dev_err(&dev->dev, "Required cxl mode not supported by firmware - update skiboot\n"); > + else if (rc) > dev_err(&dev->dev, "opal_pci_set_phb_cxl_mode failed: > %i\n", rc); Could mention version required, which would be skiboot 5.3.x or higher. This could be something we start doing - there's enough random bits of functionality we could tell the user exactly what they have to upgrade to to have work.
Ian Munsie <imunsie@au1.ibm.com> writes: > From: Ian Munsie <imunsie@au1.ibm.com> > > This adds support for using CAPP DMA mode, which is required for XSL > based cards such as the Mellanox CX4 to function. > > This is currently an RFC as it depends on the corresponding support to > be merged into skiboot first, which was submitted here: > http://patchwork.ozlabs.org/patch/625582/ Merged to skiboot as of 5477148a439fda9fb55ea4a828c958fcdcc10f2e - which will make it into skiboot 5.3.x
On Wed, 2016-08-06 at 05:09:54 UTC, Ian Munsie wrote: > From: Ian Munsie <imunsie@au1.ibm.com> > > This adds support for using CAPP DMA mode, which is required for XSL > based cards such as the Mellanox CX4 to function. > > This is currently an RFC as it depends on the corresponding support to > be merged into skiboot first, which was submitted here: > http://patchwork.ozlabs.org/patch/625582/ > > In the event that the skiboot on the system does not have the above > support, it will indicate as such in the kernel log and abort the init > process. > > Signed-off-by: Ian Munsie <imunsie@au1.ibm.com> Applied to powerpc next, thanks. https://git.kernel.org/powerpc/c/b385c9e971468eb8816b267424 cheers
diff --git a/arch/powerpc/include/asm/opal-api.h b/arch/powerpc/include/asm/opal-api.h index 9bb8ddf..d29c584 100644 --- a/arch/powerpc/include/asm/opal-api.h +++ b/arch/powerpc/include/asm/opal-api.h @@ -825,6 +825,7 @@ enum { OPAL_PHB_CAPI_MODE_CAPI = 1, OPAL_PHB_CAPI_MODE_SNOOP_OFF = 2, OPAL_PHB_CAPI_MODE_SNOOP_ON = 3, + OPAL_PHB_CAPI_MODE_DMA = 4, }; /* OPAL I2C request */ diff --git a/arch/powerpc/platforms/powernv/pci-ioda.c b/arch/powerpc/platforms/powernv/pci-ioda.c index 3a5ea82..5a42e98 100644 --- a/arch/powerpc/platforms/powernv/pci-ioda.c +++ b/arch/powerpc/platforms/powernv/pci-ioda.c @@ -2793,7 +2793,9 @@ int pnv_phb_to_cxl_mode(struct pci_dev *dev, uint64_t mode) pe_info(pe, "Switching PHB to CXL\n"); rc = opal_pci_set_phb_cxl_mode(phb->opal_id, mode, pe->pe_number); - if (rc) + if (rc == OPAL_UNSUPPORTED) + dev_err(&dev->dev, "Required cxl mode not supported by firmware - update skiboot\n"); + else if (rc) dev_err(&dev->dev, "opal_pci_set_phb_cxl_mode failed: %i\n", rc); return rc; diff --git a/drivers/misc/cxl/cxl.h b/drivers/misc/cxl/cxl.h index 92e7f19..aa69a84 100644 --- a/drivers/misc/cxl/cxl.h +++ b/drivers/misc/cxl/cxl.h @@ -542,6 +542,7 @@ struct cxl_service_layer_ops { void (*debugfs_stop_trace)(struct cxl *adapter); void (*write_timebase_ctrl)(struct cxl *adapter); u64 (*timebase_read)(struct cxl *adapter); + int capi_mode; }; struct cxl_native { diff --git a/drivers/misc/cxl/pci.c b/drivers/misc/cxl/pci.c index 556718d..648817a 100644 --- a/drivers/misc/cxl/pci.c +++ b/drivers/misc/cxl/pci.c @@ -1249,7 +1249,7 @@ static int cxl_configure_adapter(struct cxl *adapter, struct pci_dev *dev) if ((rc = adapter->native->sl_ops->adapter_regs_init(adapter, dev))) goto err; - if ((rc = pnv_phb_to_cxl_mode(dev, OPAL_PHB_CAPI_MODE_CAPI))) + if ((rc = pnv_phb_to_cxl_mode(dev, adapter->native->sl_ops->capi_mode))) goto err; /* If recovery happened, the last step is to turn on snooping. @@ -1293,6 +1293,7 @@ static const struct cxl_service_layer_ops psl_ops = { .debugfs_stop_trace = cxl_stop_trace, .write_timebase_ctrl = write_timebase_ctrl_psl, .timebase_read = timebase_read_psl, + .capi_mode = OPAL_PHB_CAPI_MODE_CAPI, }; static const struct cxl_service_layer_ops xsl_ops = { @@ -1300,6 +1301,7 @@ static const struct cxl_service_layer_ops xsl_ops = { .debugfs_add_adapter_sl_regs = cxl_debugfs_add_adapter_xsl_regs, .write_timebase_ctrl = write_timebase_ctrl_xsl, .timebase_read = timebase_read_xsl, + .capi_mode = OPAL_PHB_CAPI_MODE_DMA, }; static void set_sl_ops(struct cxl *adapter, struct pci_dev *dev)