diff --git a/drivers/pci/pci-rcar-gen3.c b/drivers/pci/pci-rcar-gen3.c index cd116a536e5d69482dfd2f71f5990dd01cb3d0f0..6b08409b85d1a344553aba67cb7587dce7e51bb2 100644 --- a/drivers/pci/pci-rcar-gen3.c +++ b/drivers/pci/pci-rcar-gen3.c @@ -23,6 +23,7 @@ #include #include #include +#include #define PCIECAR 0x000010 #define PCIECCTLR 0x000018 @@ -347,10 +348,12 @@ static int rcar_gen3_pcie_probe(struct udevice *dev) if (hose->regions[i].phys_start == 0) continue; - mask = (hose->regions[i].size - 1) & ~0xf; + mask = (roundup_pow_of_two(hose->regions[i].size) - 1) & ~0xf; mask |= LAR_ENABLE; - writel(hose->regions[i].phys_start, priv->regs + PCIEPRAR(0)); - writel(hose->regions[i].phys_start, priv->regs + PCIELAR(0)); + writel(rounddown_pow_of_two(hose->regions[i].phys_start), + priv->regs + PCIEPRAR(0)); + writel(rounddown_pow_of_two(hose->regions[i].phys_start), + priv->regs + PCIELAR(0)); writel(mask, priv->regs + PCIELAMR(0)); break; }