|
@@ -22,8 +22,11 @@
|
|
|
|
|
|
extern int __map_without_ltlbs;
|
|
|
|
|
|
+static unsigned long block_mapped_ram;
|
|
|
+
|
|
|
/*
|
|
|
- * Return PA for this VA if it is in IMMR area, or 0
|
|
|
+ * Return PA for this VA if it is in an area mapped with LTLBs.
|
|
|
+ * Otherwise, returns 0
|
|
|
*/
|
|
|
phys_addr_t v_block_mapped(unsigned long va)
|
|
|
{
|
|
@@ -33,11 +36,13 @@ phys_addr_t v_block_mapped(unsigned long va)
|
|
|
return 0;
|
|
|
if (va >= VIRT_IMMR_BASE && va < VIRT_IMMR_BASE + IMMR_SIZE)
|
|
|
return p + va - VIRT_IMMR_BASE;
|
|
|
+ if (va >= PAGE_OFFSET && va < PAGE_OFFSET + block_mapped_ram)
|
|
|
+ return __pa(va);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
- * Return VA for a given PA or 0 if not mapped
|
|
|
+ * Return VA for a given PA mapped with LTLBs or 0 if not mapped
|
|
|
*/
|
|
|
unsigned long p_block_mapped(phys_addr_t pa)
|
|
|
{
|
|
@@ -47,6 +52,8 @@ unsigned long p_block_mapped(phys_addr_t pa)
|
|
|
return 0;
|
|
|
if (pa >= p && pa < p + IMMR_SIZE)
|
|
|
return VIRT_IMMR_BASE + pa - p;
|
|
|
+ if (pa < block_mapped_ram)
|
|
|
+ return (unsigned long)__va(pa);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -133,6 +140,8 @@ unsigned long __init mmu_mapin_ram(unsigned long top)
|
|
|
if (mapped)
|
|
|
memblock_set_current_limit(mapped);
|
|
|
|
|
|
+ block_mapped_ram = mapped;
|
|
|
+
|
|
|
return mapped;
|
|
|
}
|
|
|
|