Commit 2f7d2b74 authored by Scott Wood's avatar Scott Wood

powerpc/mm: Don't call __flush_dcache_icache_phys() with PA>VA

__flush_dcache_icache_phys() requires the ability to access the
memory with the MMU disabled, which means that on a 32-bit system
any memory above 4 GiB is inaccessible.  In particular, mpc86xx is
32-bit and can have more than 4 GiB of RAM.
Signed-off-by: default avatarScott Wood <scottwood@freescale.com>
parent 501c8de7
...@@ -40,7 +40,12 @@ extern void __flush_dcache_icache(void *page_va); ...@@ -40,7 +40,12 @@ extern void __flush_dcache_icache(void *page_va);
extern void flush_dcache_icache_page(struct page *page); extern void flush_dcache_icache_page(struct page *page);
#if defined(CONFIG_PPC32) && !defined(CONFIG_BOOKE) #if defined(CONFIG_PPC32) && !defined(CONFIG_BOOKE)
extern void __flush_dcache_icache_phys(unsigned long physaddr); extern void __flush_dcache_icache_phys(unsigned long physaddr);
#endif /* CONFIG_PPC32 && !CONFIG_BOOKE */ #else
static inline void __flush_dcache_icache_phys(unsigned long physaddr)
{
BUG();
}
#endif
extern void flush_dcache_range(unsigned long start, unsigned long stop); extern void flush_dcache_range(unsigned long start, unsigned long stop);
#ifdef CONFIG_PPC32 #ifdef CONFIG_PPC32
......
...@@ -414,17 +414,17 @@ void flush_dcache_icache_page(struct page *page) ...@@ -414,17 +414,17 @@ void flush_dcache_icache_page(struct page *page)
return; return;
} }
#endif #endif
#ifdef CONFIG_BOOKE #if defined(CONFIG_8xx) || defined(CONFIG_PPC64)
{
void *start = kmap_atomic(page);
__flush_dcache_icache(start);
kunmap_atomic(start);
}
#elif defined(CONFIG_8xx) || defined(CONFIG_PPC64)
/* On 8xx there is no need to kmap since highmem is not supported */ /* On 8xx there is no need to kmap since highmem is not supported */
__flush_dcache_icache(page_address(page)); __flush_dcache_icache(page_address(page));
#else #else
if (IS_ENABLED(CONFIG_BOOKE) || sizeof(phys_addr_t) > sizeof(void *)) {
void *start = kmap_atomic(page);
__flush_dcache_icache(start);
kunmap_atomic(start);
} else {
__flush_dcache_icache_phys(page_to_pfn(page) << PAGE_SHIFT); __flush_dcache_icache_phys(page_to_pfn(page) << PAGE_SHIFT);
}
#endif #endif
} }
EXPORT_SYMBOL(flush_dcache_icache_page); EXPORT_SYMBOL(flush_dcache_icache_page);
......
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