Re: [PATCH v6 0/2] PCI: dwc: Add support for 64-bit MSI target addresses

From: Robin Murphy
Date: Tue Jan 31 2023 - 07:43:12 EST


On 2023-01-31 12:29, Evgenii Shatokhin wrote:
Hi,

On 26.08.2022 02:54, Will McVicker wrote:
Hi All,

I've update patch 2/2 to address Robin's suggestions. This includes:

  * Dropping the while-loop for retrying with a 64-bit mask in favor of
    retrying within the error if-statement.
  * Using an int for the DMA mask instead of a bool and ternary operation.

Thanks again for the reviews and sorry for the extra revision today!
Hopefully this is the last one :) If not, I'd be fine to submit patch 1/2
without 2/2 to avoid resending patch 1/2 for future revisions of patch 2/2
(unless I don't need to do that anyway).

The first patch of the series made it into the mainline kernel, but, it seems, the second one ("PCI: dwc: Add support for 64-bit MSI target address") did not. As of 6.2-rc6, it is still missing.

Was it intentionally dropped because of some issues or, perhaps, just by accident? If it was by accident, could you please queue it for inclusion into mainline again?

Yes, it was dropped due to the PCI_MSI_FLAGS_64BIT usage apparently being incorrect, and some other open debate (which all happened on the v5 thread):

https://lore.kernel.org/linux-pci/YzVTmy9MWh+AjshC@lpieralisi/

The DMA mask issues have now been sorted out, so you, or Will, or anyone else interested should be free to rework this on top of linux-next (although at this point, more realistically on top of 6.3-rc1 in a few weeks).

Thanks,
Robin.

Support for 64-bit MSI target addresses is needed for some of our SoCs. I ran into a situation when there was no available RAM in ZONE_DMA32 during initialization of PCIe host. Hence, dmam_alloc_coherent() failed in dw_pcie_msi_host_init() and initialization failed with -ENOMEM:

[    0.374834] dw-pcie 4000000.pcie0: host bridge /soc/pcie0@4000000 ranges:
[    0.375813] dw-pcie 4000000.pcie0:      MEM 0x0041000000..0x004fffffff -> 0x0041000000
[    0.376171] dw-pcie 4000000.pcie0:   IB MEM 0x0400000000..0x07ffffffff -> 0x0400000000
[    0.377914] dw-pcie 4000000.pcie0: Failed to alloc and map MSI data
[    0.378191] dw-pcie 4000000.pcie0: Failed to initialize host
[    0.378255] dw-pcie: probe of 4000000.pcie0 failed with error -12

Mainline kernel 6.2-rc6 was used in that test.

The hardware supports 64-bit target addresses, so the patch "PCI: dwc: Add support for 64-bit MSI target address" should help with this particular failure.



Thanks,
Will

Will McVicker (2):
   PCI: dwc: Drop dependency on ZONE_DMA32

v6:
  * Retrying DMA allocation with 64-bit mask within the error if-statement.
  * Use an int for the DMA mask instead of a bool and ternary operation.

v5:
  * Updated patch 2/2 to first try with a 32-bit DMA mask. On failure,
    retry with a 64-bit mask if supported.

v4:
  * Updated commit descriptions.
  * Renamed msi_64b -> msi_64bit.
  * Dropped msi_64bit ternary use.
  * Dropped export of dw_pcie_msi_capabilities.

v3:
   * Switched to a managed DMA allocation.
   * Simplified the DMA allocation cleanup.
   * Dropped msi_page from struct dw_pcie_rp.
   * Allocating a u64 instead of a full page.

v2:
   * Fixed build error caught by kernel test robot
   * Fixed error handling reported by Isaac Manjarres
  PCI: dwc: Add support for 64-bit MSI target address

  .../pci/controller/dwc/pcie-designware-host.c | 43 +++++++++----------
  drivers/pci/controller/dwc/pcie-designware.c  |  8 ++++
  drivers/pci/controller/dwc/pcie-designware.h  |  2 +-
  3 files changed, 30 insertions(+), 23 deletions(-)


base-commit: 568035b01cfb107af8d2e4bd2fb9aea22cf5b868

Thank you in advance.

Regards,
Evgenii