]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
powerpc/8xx: Fix permanently mapped IMMR region.
authorChristophe Leroy <christophe.leroy@c-s.fr>
Tue, 26 Nov 2019 13:16:50 +0000 (13:16 +0000)
committerMichael Ellerman <mpe@ellerman.id.au>
Thu, 23 Jan 2020 10:31:14 +0000 (21:31 +1100)
When not using large TLBs, the IMMR region is still
mapped as a whole block in the FIXMAP area.

Properly report that the IMMR region is block-mapped even
when not using large TLBs.

Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/45f4f414bcd7198b0755cf4287ff216fbfc24b9d.1574774187.git.christophe.leroy@c-s.fr
arch/powerpc/mm/nohash/8xx.c

index 96eb8e43f39b5484db1f22192ff20740276b7a2b..3189308dece4c9a09b5f32d332a307945679ce62 100644 (file)
@@ -21,33 +21,34 @@ extern int __map_without_ltlbs;
 static unsigned long block_mapped_ram;
 
 /*
- * Return PA for this VA if it is in an area mapped with LTLBs.
+ * Return PA for this VA if it is in an area mapped with LTLBs or fixmap.
  * Otherwise, returns 0
  */
 phys_addr_t v_block_mapped(unsigned long va)
 {
        unsigned long p = PHYS_IMMR_BASE;
 
-       if (__map_without_ltlbs)
-               return 0;
        if (va >= VIRT_IMMR_BASE && va < VIRT_IMMR_BASE + IMMR_SIZE)
                return p + va - VIRT_IMMR_BASE;
+       if (__map_without_ltlbs)
+               return 0;
        if (va >= PAGE_OFFSET && va < PAGE_OFFSET + block_mapped_ram)
                return __pa(va);
        return 0;
 }
 
 /*
- * Return VA for a given PA mapped with LTLBs or 0 if not mapped
+ * Return VA for a given PA mapped with LTLBs or fixmap
+ * Return 0 if not mapped
  */
 unsigned long p_block_mapped(phys_addr_t pa)
 {
        unsigned long p = PHYS_IMMR_BASE;
 
-       if (__map_without_ltlbs)
-               return 0;
        if (pa >= p && pa < p + IMMR_SIZE)
                return VIRT_IMMR_BASE + pa - p;
+       if (__map_without_ltlbs)
+               return 0;
        if (pa < block_mapped_ram)
                return (unsigned long)__va(pa);
        return 0;