mirror of https://gitee.com/openkylin/linux.git
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: Scott Wood <scottwood@freescale.com>
This commit is contained in:
parent
501c8de7b0
commit
2f7d2b74a9
|
@ -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)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_BOOKE
|
#if defined(CONFIG_8xx) || defined(CONFIG_PPC64)
|
||||||
{
|
/* On 8xx there is no need to kmap since highmem is not supported */
|
||||||
|
__flush_dcache_icache(page_address(page));
|
||||||
|
#else
|
||||||
|
if (IS_ENABLED(CONFIG_BOOKE) || sizeof(phys_addr_t) > sizeof(void *)) {
|
||||||
void *start = kmap_atomic(page);
|
void *start = kmap_atomic(page);
|
||||||
__flush_dcache_icache(start);
|
__flush_dcache_icache(start);
|
||||||
kunmap_atomic(start);
|
kunmap_atomic(start);
|
||||||
|
} else {
|
||||||
|
__flush_dcache_icache_phys(page_to_pfn(page) << PAGE_SHIFT);
|
||||||
}
|
}
|
||||||
#elif defined(CONFIG_8xx) || defined(CONFIG_PPC64)
|
|
||||||
/* On 8xx there is no need to kmap since highmem is not supported */
|
|
||||||
__flush_dcache_icache(page_address(page));
|
|
||||||
#else
|
|
||||||
__flush_dcache_icache_phys(page_to_pfn(page) << PAGE_SHIFT);
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(flush_dcache_icache_page);
|
EXPORT_SYMBOL(flush_dcache_icache_page);
|
||||||
|
|
Loading…
Reference in New Issue