summaryrefslogtreecommitdiffstats
path: root/sys/powerpc/booke
diff options
context:
space:
mode:
authorjhibbits <jhibbits@FreeBSD.org>2015-11-21 06:03:46 +0000
committerjhibbits <jhibbits@FreeBSD.org>2015-11-21 06:03:46 +0000
commitc5f1bced2235ce9258be40f613bd19e7c66500fc (patch)
tree1fb74543e08ec0017394fa3ccbe533748bf4c282 /sys/powerpc/booke
parentc4d318f006ab7a786ecffa936c0b7388f6e08a39 (diff)
downloadFreeBSD-src-c5f1bced2235ce9258be40f613bd19e7c66500fc.zip
FreeBSD-src-c5f1bced2235ce9258be40f613bd19e7c66500fc.tar.gz
trunc_page() goes through unsigned long, which is too short.
sizeof(unsigned long) < sizeof(vm_paddr_t) on Book-E, which uses 36-bit addressing. With this, a CCSR with a physical address above 4GB successfully maps. Sponsored by: Alex Perez/Inertial Computing
Diffstat (limited to 'sys/powerpc/booke')
-rw-r--r--sys/powerpc/booke/pmap.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/sys/powerpc/booke/pmap.c b/sys/powerpc/booke/pmap.c
index 645d606..2539c33e 100644
--- a/sys/powerpc/booke/pmap.c
+++ b/sys/powerpc/booke/pmap.c
@@ -3298,7 +3298,7 @@ pmap_early_io_map(vm_paddr_t pa, vm_size_t size)
return (tlb1[i].virt + (pa - tlb1[i].phys));
}
- pa_base = trunc_page(pa);
+ pa_base = rounddown(pa, PAGE_SIZE);
size = roundup(size + (pa - pa_base), PAGE_SIZE);
tlb1_map_base = roundup2(tlb1_map_base, 1 << (ilog2(size) & ~1));
va = tlb1_map_base + (pa - pa_base);
OpenPOWER on IntegriCloud