summaryrefslogtreecommitdiff
path: root/drivers/of
diff options
context:
space:
mode:
authorGeert Uytterhoeven <geert+renesas@glider.be>2014-08-20 19:10:31 +0400
committerGrant Likely <grant.likely@linaro.org>2014-09-08 18:57:26 +0400
commit8f73d4b7011061f46ba6f46006b2848b412ff43f (patch)
tree7a0d70a3d0751a9ac7680c74f2a0772545d434da /drivers/of
parent7dbe5849fb50fc9b5b77a8f590c87a577ddc9bb6 (diff)
downloadlinux-8f73d4b7011061f46ba6f46006b2848b412ff43f.tar.xz
of: Fix memory block alignment in early_init_dt_add_memory_arch()
If a memory block is not aligned to PAGE_SIZE, its base address must be rounded up, not down, and its size must be reduced. Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be> Signed-off-by: Grant Likely <grant.likely@linaro.org>
Diffstat (limited to 'drivers/of')
-rw-r--r--drivers/of/fdt.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c
index 79cb8313c7d8..2d34afb2647d 100644
--- a/drivers/of/fdt.c
+++ b/drivers/of/fdt.c
@@ -928,7 +928,11 @@ int __init early_init_dt_scan_chosen(unsigned long node, const char *uname,
void __init __weak early_init_dt_add_memory_arch(u64 base, u64 size)
{
const u64 phys_offset = __pa(PAGE_OFFSET);
- base &= PAGE_MASK;
+
+ if (!PAGE_ALIGNED(base)) {
+ size -= PAGE_SIZE - (base & ~PAGE_MASK);
+ base = PAGE_ALIGN(base);
+ }
size &= PAGE_MASK;
if (base > MAX_PHYS_ADDR) {