Commit 991d656d authored by Christophe Leroy's avatar Christophe Leroy Committed by Michael Ellerman

powerpc/8xx: Fix permanently mapped IMMR region.

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: default avatarChristophe Leroy <christophe.leroy@c-s.fr>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/45f4f414bcd7198b0755cf4287ff216fbfc24b9d.1574774187.git.christophe.leroy@c-s.fr
parent f509247b
...@@ -21,33 +21,34 @@ extern int __map_without_ltlbs; ...@@ -21,33 +21,34 @@ extern int __map_without_ltlbs;
static unsigned long block_mapped_ram; 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 * Otherwise, returns 0
*/ */
phys_addr_t v_block_mapped(unsigned long va) phys_addr_t v_block_mapped(unsigned long va)
{ {
unsigned long p = PHYS_IMMR_BASE; unsigned long p = PHYS_IMMR_BASE;
if (__map_without_ltlbs)
return 0;
if (va >= VIRT_IMMR_BASE && va < VIRT_IMMR_BASE + IMMR_SIZE) if (va >= VIRT_IMMR_BASE && va < VIRT_IMMR_BASE + IMMR_SIZE)
return p + va - VIRT_IMMR_BASE; return p + va - VIRT_IMMR_BASE;
if (__map_without_ltlbs)
return 0;
if (va >= PAGE_OFFSET && va < PAGE_OFFSET + block_mapped_ram) if (va >= PAGE_OFFSET && va < PAGE_OFFSET + block_mapped_ram)
return __pa(va); return __pa(va);
return 0; 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_block_mapped(phys_addr_t pa)
{ {
unsigned long p = PHYS_IMMR_BASE; unsigned long p = PHYS_IMMR_BASE;
if (__map_without_ltlbs)
return 0;
if (pa >= p && pa < p + IMMR_SIZE) if (pa >= p && pa < p + IMMR_SIZE)
return VIRT_IMMR_BASE + pa - p; return VIRT_IMMR_BASE + pa - p;
if (__map_without_ltlbs)
return 0;
if (pa < block_mapped_ram) if (pa < block_mapped_ram)
return (unsigned long)__va(pa); return (unsigned long)__va(pa);
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment