Recent changes [1] replaced the use of no_64bit_msi with msi_addr_mask.
As a result, msi_addr_mask is now expected to be initialized to
DMA_BIT_MASK(64) when a pci_dev is set up. However, this initialization
was missed on powerpc due to differences in the device initialization
path compared to other architectures. Due to this, now pci device probe
method fails on powerpc system.

On powerpc systems, struct pci_dev instances are created from device
tree nodes via of_create_pci_dev(). Because msi_addr_mask was not
initialized there, it remained zero. Later, during MSI setup,
msi_verify_entries() validates the programmed MSI address against
pdev->msi_addr_mask. Since the mask was not set correctly, the
validation fails, causing PCI driver probe failures for devices on
powerpc systems.

Initialize pdev->msi_addr_mask to DMA_BIT_MASK(64) in
of_create_pci_dev() so that MSI address validation succeeds and device
probe works as expected.

[1] 
https://lore.kernel.org/all/[email protected]/

Fixes: 386ced19e9a3 ("PCI/MSI: Convert the boolean no_64bit_msi flag to a DMA 
address mask")
Signed-off-by: Nilay Shroff <[email protected]>
---
 arch/powerpc/kernel/pci_of_scan.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/arch/powerpc/kernel/pci_of_scan.c 
b/arch/powerpc/kernel/pci_of_scan.c
index 756043dd06e9..26ec97ce6b40 100644
--- a/arch/powerpc/kernel/pci_of_scan.c
+++ b/arch/powerpc/kernel/pci_of_scan.c
@@ -211,6 +211,12 @@ struct pci_dev *of_create_pci_dev(struct device_node *node,
        dev->current_state = PCI_UNKNOWN;       /* unknown power state */
        dev->error_state = pci_channel_io_normal;
        dev->dma_mask = 0xffffffff;
+       /*
+        * Assume 64-bit addresses for MSI initially. Will be changed to 32-bit
+        * if MSI (rather than MSI-X) capability does not have
+        * PCI_MSI_FLAGS_64BIT. Can also be overridden by driver.
+        */
+       dev->msi_addr_mask = DMA_BIT_MASK(64);
 
        /* Early fixups, before probing the BARs */
        pci_fixup_device(pci_fixup_early, dev);
-- 
2.52.0


Reply via email to