PCI: endpoint: Fix pci_epf_alloc_space() to set correct MEM TYPE flags
authorKishon Vijay Abraham I <kishon@ti.com>
Mon, 14 Jan 2019 11:15:06 +0000 (16:45 +0530)
committerLorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Fri, 15 Feb 2019 09:59:48 +0000 (09:59 +0000)
pci_epf_alloc_space() sets the MEM TYPE flags to indicate a 32-bit
Base Address Register irrespective of the size. Fix it here to indicate
64-bit BAR if the size is > 2GB.

Tested-by: Gustavo Pimentel <gustavo.pimentel@synopsys.com>
Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
drivers/pci/endpoint/pci-epf-core.c

index 825fa24..8bfdcd2 100644 (file)
@@ -131,7 +131,9 @@ void *pci_epf_alloc_space(struct pci_epf *epf, size_t size, enum pci_barno bar)
        epf->bar[bar].phys_addr = phys_addr;
        epf->bar[bar].size = size;
        epf->bar[bar].barno = bar;
-       epf->bar[bar].flags = PCI_BASE_ADDRESS_SPACE_MEMORY;
+       epf->bar[bar].flags |= upper_32_bits(size) ?
+                               PCI_BASE_ADDRESS_MEM_TYPE_64 :
+                               PCI_BASE_ADDRESS_MEM_TYPE_32;
 
        return space;
 }