]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
pci: pci_mvebu: set BAR0 after memory space is set
authorMarek Behún <marek.behun@nic.cz>
Wed, 7 Aug 2019 13:01:56 +0000 (15:01 +0200)
committerStefan Roese <sr@denx.de>
Mon, 12 Aug 2019 11:59:31 +0000 (13:59 +0200)
The non-DM version of this driver used to set BAR0 register after the
calls to pci_set_region.
I found out that for some strange reason the ath10k driver in kernel
fails to work if this is done the other way around.
I know that Linux's driver should not depend on how U-Boot does things,
but for some strange reason it does and this seems to be the simplest
solution. Fix it since it caused regressions on Omnia.

Signed-off-by: Marek Behún <marek.behun@nic.cz>
Cc: Stefan Roese <sr@denx.de>
Cc: Dirk Eibach <dirk.eibach@gdsys.cc>
Cc: Mario Six <mario.six@gdsys.cc>
Cc: Chris Packham <chris.packham@alliedtelesis.co.nz>
Cc: Phil Sutter <phil@nwl.cc>
Cc: VlaoMao <vlaomao@gmail.com>
Tested-by: Chris Packham <judge.packham@gmail.com>
Reviewed-by: Stefan Roese <sr@denx.de>
Signed-off-by: Stefan Roese <sr@denx.de>
drivers/pci/pci_mvebu.c

index e21dc10c2fa2d0fa06c145f0860177cbca6d320d..f9b08f38a1516cd16601ca7a3f349ea97e137771 100644 (file)
@@ -313,10 +313,6 @@ static int mvebu_pcie_probe(struct udevice *dev)
        reg |= BIT(10);         /* disable interrupts */
        writel(reg, pcie->base + PCIE_CMD_OFF);
 
-       /* Set BAR0 to internal registers */
-       writel(SOC_REGS_PHY_BASE, pcie->base + PCIE_BAR_LO_OFF(0));
-       writel(0, pcie->base + PCIE_BAR_HI_OFF(0));
-
        /* PCI memory space */
        pci_set_region(hose->regions + 0, pcie->mem.start,
                       pcie->mem.start, PCIE_MEM_SIZE, PCI_REGION_MEM);
@@ -326,6 +322,10 @@ static int mvebu_pcie_probe(struct udevice *dev)
                       PCI_REGION_MEM | PCI_REGION_SYS_MEMORY);
        hose->region_count = 2;
 
+       /* Set BAR0 to internal registers */
+       writel(SOC_REGS_PHY_BASE, pcie->base + PCIE_BAR_LO_OFF(0));
+       writel(0, pcie->base + PCIE_BAR_HI_OFF(0));
+
        bus++;
 
        return 0;