]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-client.git/commitdiff
sparc/PCI: Initialize msi_addr_mask for OF-created PCI devices
authorNilay Shroff <nilay@linux.ibm.com>
Fri, 20 Feb 2026 07:02:28 +0000 (12:32 +0530)
committerBjorn Helgaas <bhelgaas@google.com>
Tue, 3 Mar 2026 16:29:48 +0000 (10:29 -0600)
Recent changes replaced the use of no_64bit_msi with msi_addr_mask, which
is now expected to be initialized to DMA_BIT_MASK(64) during PCI device
setup. On SPARC systems, this initialization was inadvertently missed for
devices instantiated from device tree nodes, leaving msi_addr_mask unset
for OF-created pci_dev instances. As a result, MSI address validation fails
during probe, causing affected devices to fail initialization.

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

Fixes: 386ced19e9a3 ("PCI/MSI: Convert the boolean no_64bit_msi flag to a DMA address mask")
Signed-off-by: Nilay Shroff <nilay@linux.ibm.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Tested-by: Han Gao <gaohan@iscas.ac.cn> # SPARC Enterprise T5220
Tested-by: Nathaniel Roach <nroach44@nroach44.id.au> # SPARC T5-2
Reviewed-by: Vivian Wang <wangruikang@iscas.ac.cn>
Link: https://patch.msgid.link/20260220070239.1693303-3-nilay@linux.ibm.com
arch/sparc/kernel/pci.c

index 7e41574634b33957fecca5abe1c70610207a390d..1603d50fdcad32144a898ce472d5f521af557b73 100644 (file)
@@ -355,6 +355,13 @@ static struct pci_dev *of_create_pci_dev(struct pci_pbm_info *pbm,
        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);
+
        if (of_node_name_eq(node, "pci")) {
                /* a PCI-PCI bridge */
                dev->hdr_type = PCI_HEADER_TYPE_BRIDGE;