summaryrefslogtreecommitdiffstats
path: root/drivers/of
diff options
context:
space:
mode:
authorGeert Uytterhoeven2014-08-20 17:10:31 +0200
committerGrant Likely2014-09-08 16:57:26 +0200
commit8f73d4b7011061f46ba6f46006b2848b412ff43f (patch)
tree7a0d70a3d0751a9ac7680c74f2a0772545d434da /drivers/of
parentof: make sure of_alias is initialized before accessing it (diff)
downloadkernel-qcow2-linux-8f73d4b7011061f46ba6f46006b2848b412ff43f.tar.gz
kernel-qcow2-linux-8f73d4b7011061f46ba6f46006b2848b412ff43f.tar.xz
kernel-qcow2-linux-8f73d4b7011061f46ba6f46006b2848b412ff43f.zip
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) {