pci: renesas: Make map address and mask power of two on Gen3
Both the map address and mask must be power of two per documentation, adjust the code accordingly. Signed-off-by: Marek Vasut <marek.vasut+renesas@gmail.com> Cc: Bin Meng <bmeng.cn@gmail.com> Cc: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
This commit is contained in:
@@ -23,6 +23,7 @@
|
|||||||
#include <pci.h>
|
#include <pci.h>
|
||||||
#include <wait_bit.h>
|
#include <wait_bit.h>
|
||||||
#include <linux/bitops.h>
|
#include <linux/bitops.h>
|
||||||
|
#include <linux/log2.h>
|
||||||
|
|
||||||
#define PCIECAR 0x000010
|
#define PCIECAR 0x000010
|
||||||
#define PCIECCTLR 0x000018
|
#define PCIECCTLR 0x000018
|
||||||
@@ -347,10 +348,12 @@ static int rcar_gen3_pcie_probe(struct udevice *dev)
|
|||||||
if (hose->regions[i].phys_start == 0)
|
if (hose->regions[i].phys_start == 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
mask = (hose->regions[i].size - 1) & ~0xf;
|
mask = (roundup_pow_of_two(hose->regions[i].size) - 1) & ~0xf;
|
||||||
mask |= LAR_ENABLE;
|
mask |= LAR_ENABLE;
|
||||||
writel(hose->regions[i].phys_start, priv->regs + PCIEPRAR(0));
|
writel(rounddown_pow_of_two(hose->regions[i].phys_start),
|
||||||
writel(hose->regions[i].phys_start, priv->regs + PCIELAR(0));
|
priv->regs + PCIEPRAR(0));
|
||||||
|
writel(rounddown_pow_of_two(hose->regions[i].phys_start),
|
||||||
|
priv->regs + PCIELAR(0));
|
||||||
writel(mask, priv->regs + PCIELAMR(0));
|
writel(mask, priv->regs + PCIELAMR(0));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user