]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
PCI: cadence: Set PCI_BASE_ADDRESS_MEM_TYPE_64 if a 64-bit BAR was set-up
authorNiklas Cassel <niklas.cassel@axis.com>
Wed, 28 Mar 2018 11:50:12 +0000 (13:50 +0200)
committerLorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Tue, 3 Apr 2018 11:38:04 +0000 (12:38 +0100)
cdns_pcie_ep_set_bar() does some round-up of the BAR size, which means
that a 64-bit BAR can be set-up, even when the flag
PCI_BASE_ADDRESS_MEM_TYPE_64 isn't set.

If a 64-bit BAR was set-up, set the flag PCI_BASE_ADDRESS_MEM_TYPE_64,
so that the calling function can know what BAR width that was actually
set-up.

I'm not sure why cdns_pcie_ep_set_bar() doesn't obey the flag
PCI_BASE_ADDRESS_MEM_TYPE_64, but I leave this for the MAINTAINER to
fix, since there might be a reason why this flag is ignored.

Signed-off-by: Niklas Cassel <niklas.cassel@axis.com>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Acked-by: Alan Douglas <adouglas@cadence.com>
drivers/pci/cadence/pcie-cadence-ep.c

index cef36cd6b710911894f49eb640e87420587026a3..2905e098678c2de2bb47e41a2d962e71b4780c13 100644 (file)
@@ -106,6 +106,9 @@ static int cdns_pcie_ep_set_bar(struct pci_epc *epc, u8 fn,
                if (is_64bits && (bar & 1))
                        return -EINVAL;
 
+               if (is_64bits && !(flags & PCI_BASE_ADDRESS_MEM_TYPE_64))
+                       epf_bar->flags |= PCI_BASE_ADDRESS_MEM_TYPE_64;
+
                if (is_64bits && is_prefetch)
                        ctrl = CDNS_PCIE_LM_BAR_CFG_CTRL_PREFETCH_MEM_64BITS;
                else if (is_prefetch)