From: Lorenzo Pieralisi <lpieralisi@kernel.org>
To: Serge Semin <fancer.lancer@gmail.com>,
Will McVicker <willmcvicker@google.com>
Cc: "Jingoo Han" <jingoohan1@gmail.com>,
"Gustavo Pimentel" <gustavo.pimentel@synopsys.com>,
"Rob Herring" <robh@kernel.org>,
"Krzysztof Wilczyński" <kw@linux.com>,
"Bjorn Helgaas" <bhelgaas@google.com>,
kernel-team@android.com, "Vidya Sagar" <vidyas@nvidia.com>,
"Christoph Hellwig" <hch@infradead.org>,
"Robin Murphy" <robin.murphy@arm.com>,
linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org,
"kernel test robot" <lkp@intel.com>
Subject: Re: [PATCH v5 2/2] PCI: dwc: Add support for 64-bit MSI target address
Date: Fri, 30 Sep 2022 15:46:56 +0200 [thread overview]
Message-ID: <YzbzUCikdpesdbLU@lpieralisi> (raw)
In-Reply-To: <20220928120510.rkdlnczytxuioxcn@mobilestation>
On Wed, Sep 28, 2022 at 03:05:10PM +0300, Serge Semin wrote:
> On Thu, Aug 25, 2022 at 06:50:25PM +0000, Will McVicker wrote:
[...]
> > diff --git a/drivers/pci/controller/dwc/pcie-designware-host.c b/drivers/pci/controller/dwc/pcie-designware-host.c
> > index 39f3b37d4033..8928a9a29d58 100644
> > --- a/drivers/pci/controller/dwc/pcie-designware-host.c
> > +++ b/drivers/pci/controller/dwc/pcie-designware-host.c
> > @@ -330,6 +330,9 @@ static int dw_pcie_msi_host_init(struct dw_pcie_rp *pp)
> > u64 *msi_vaddr;
> > int ret;
> > u32 ctrl, num_ctrls;
> > + bool msi_64bit = false;
> > + bool retry_64bit = false;
> > + u16 msi_capabilities;
> >
> > for (ctrl = 0; ctrl < MAX_MSI_CTRLS; ctrl++)
> > pp->irq_mask[ctrl] = ~0;
> > @@ -367,16 +370,33 @@ static int dw_pcie_msi_host_init(struct dw_pcie_rp *pp)
> > dw_chained_msi_isr, pp);
> > }
> >
> > - ret = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(32));
> > - if (ret)
> > - dev_warn(dev, "Failed to set DMA mask to 32-bit. Devices with only 32-bit MSI support may not work properly\n");
>
> > + msi_capabilities = dw_pcie_msi_capabilities(pci);
> > + if (msi_capabilities & PCI_MSI_FLAGS_ENABLE)
> > + msi_64bit = msi_capabilities & PCI_MSI_FLAGS_64BIT;
>
> Note this capability flag has nothing to do with the DW PCIe iMSI-RX
> engine, which is used here to detect and report MSI TLPs. By design
> iMSI-RX always support 64-bit addresses. If you imply having that flag
> set by the DW PCIe platform drivers on the platform-specific probe
> stage as an indication of MSI address range, then ok.
The MSI cap shows that - AFAICS - the RP can be programmed with
a 64-bit MSI(DMA) address. It is fair to say that this is not
enough to guarantee that the DMA mask for the host bridge can be
inferred to be 64-bit though.
I am inclined to drop this patch (only) from the PCI queue because
it is unclear to me whether it really does the right thing.
Lorenzo
> > - msi_vaddr = dmam_alloc_coherent(dev, sizeof(u64), &pp->msi_data,
> > - GFP_KERNEL);
> > - if (!msi_vaddr) {
> > - dev_err(dev, "Failed to alloc and map MSI data\n");
> > - dw_pcie_free_msi(pp);
> > - return -ENOMEM;
> > + while (true) {
> > + dev_dbg(dev, "Setting MSI DMA mask to %s-bit.\n",
> > + retry_64bit ? "64" : "32");
>
> > + ret = dma_set_mask_and_coherent(dev, retry_64bit ?
> > + DMA_BIT_MASK(64) :
> > + DMA_BIT_MASK(32));
>
> I'd suggest to just drop this. No DMA actually performed on getting the
> MSI TLPs. So modifying the device DMA-mask due to something which
> doesn't cause DMA and based on the flag which doesn't indicates the
> device DMA-capability is at least inappropriate.
>
> > + if (ret)
> > + dev_warn(dev, "Failed to set DMA mask to %s-bit.\n",
> > + retry_64bit ? "64" : "32");
> > +
>
> > + msi_vaddr = dmam_alloc_coherent(dev, sizeof(u64), &pp->msi_data,
> > + GFP_KERNEL);
>
> As I noted earlier the DMA-coherent memory can be too expensive. So
> it's a waste of one allocating with no intent of usage. Instead of this
> just get back the alloc_page() method here and pass the flag GFP_DMA32
> to that function if MSI-capability reported the PCI_MSI_FLAGS_64BIT
> unset.
>
> -Sergey
>
> > + if (!msi_vaddr) {
> > + dev_err(dev, "Failed to alloc and map MSI data\n");
> > + if (msi_64bit && !retry_64bit) {
> > + retry_64bit = true;
> > + continue;
> > + }
> > +
> > + dw_pcie_free_msi(pp);
> > + return -ENOMEM;
> > + }
> > + break;
> > }
> >
> > return 0;
> > diff --git a/drivers/pci/controller/dwc/pcie-designware.c b/drivers/pci/controller/dwc/pcie-designware.c
> > index c6725c519a47..650a7f22f9d0 100644
> > --- a/drivers/pci/controller/dwc/pcie-designware.c
> > +++ b/drivers/pci/controller/dwc/pcie-designware.c
> > @@ -82,6 +82,14 @@ u8 dw_pcie_find_capability(struct dw_pcie *pci, u8 cap)
> > }
> > EXPORT_SYMBOL_GPL(dw_pcie_find_capability);
> >
> > +u16 dw_pcie_msi_capabilities(struct dw_pcie *pci)
> > +{
> > + u8 offset;
> > +
> > + offset = dw_pcie_find_capability(pci, PCI_CAP_ID_MSI);
> > + return dw_pcie_readw_dbi(pci, offset + PCI_MSI_FLAGS);
> > +}
> > +
> > static u16 dw_pcie_find_next_ext_capability(struct dw_pcie *pci, u16 start,
> > u8 cap)
> > {
> > diff --git a/drivers/pci/controller/dwc/pcie-designware.h b/drivers/pci/controller/dwc/pcie-designware.h
> > index a871ae7eb59e..45fcdfc8c035 100644
> > --- a/drivers/pci/controller/dwc/pcie-designware.h
> > +++ b/drivers/pci/controller/dwc/pcie-designware.h
> > @@ -332,6 +332,7 @@ void dw_pcie_version_detect(struct dw_pcie *pci);
> >
> > u8 dw_pcie_find_capability(struct dw_pcie *pci, u8 cap);
> > u16 dw_pcie_find_ext_capability(struct dw_pcie *pci, u8 cap);
> > +u16 dw_pcie_msi_capabilities(struct dw_pcie *pci);
> >
> > int dw_pcie_read(void __iomem *addr, int size, u32 *val);
> > int dw_pcie_write(void __iomem *addr, int size, u32 val);
> > --
> > 2.37.2.672.g94769d06f0-goog
> >
> >
next prev parent reply other threads:[~2022-09-30 13:47 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-08-25 18:50 [PATCH v5 0/2] PCI: dwc: Add support for 64-bit MSI target addresses Will McVicker
2022-08-25 18:50 ` [PATCH v5 1/2] PCI: dwc: Drop dependency on ZONE_DMA32 Will McVicker
2022-09-28 11:41 ` Serge Semin
2022-09-29 18:25 ` Robin Murphy
2022-09-29 19:32 ` Serge Semin
2022-09-30 11:01 ` Robin Murphy
2022-09-30 12:57 ` Serge Semin
2022-09-30 15:39 ` Robin Murphy
2022-09-30 17:02 ` William McVicker
2022-10-03 8:04 ` Lorenzo Pieralisi
2022-10-03 16:40 ` William McVicker
2022-10-07 22:45 ` Serge Semin
2022-08-25 18:50 ` [PATCH v5 2/2] PCI: dwc: Add support for 64-bit MSI target address Will McVicker
2022-08-25 20:59 ` Robin Murphy
2022-08-25 21:22 ` William McVicker
2022-09-09 13:29 ` Christoph Hellwig
2022-09-09 13:47 ` Robin Murphy
2022-09-09 14:47 ` Christoph Hellwig
2022-09-09 15:00 ` Robin Murphy
2022-09-28 12:05 ` Serge Semin
2022-09-28 17:52 ` William McVicker
2022-09-29 8:13 ` Lorenzo Pieralisi
2022-09-29 18:50 ` William McVicker
2022-09-29 19:00 ` Serge Semin
2022-09-30 13:46 ` Lorenzo Pieralisi [this message]
2022-09-30 14:14 ` Serge Semin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=YzbzUCikdpesdbLU@lpieralisi \
--to=lpieralisi@kernel.org \
--cc=bhelgaas@google.com \
--cc=fancer.lancer@gmail.com \
--cc=gustavo.pimentel@synopsys.com \
--cc=hch@infradead.org \
--cc=jingoohan1@gmail.com \
--cc=kernel-team@android.com \
--cc=kw@linux.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=lkp@intel.com \
--cc=robh@kernel.org \
--cc=robin.murphy@arm.com \
--cc=vidyas@nvidia.com \
--cc=willmcvicker@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.