1 #include <linux/init.h> 2 #include <linux/module.h> 3 #include <asm/sizes.h> 4 #include <asm/page.h> 5 #include <asm/addrspace.h> 6 7 /* 8 * This is the offset of the uncached section from its cached alias. 9 * 10 * Legacy platforms handle trivial transitions between cached and 11 * uncached segments by making use of the 1:1 mapping relationship in 12 * 512MB lowmem, others via a special uncached mapping. 13 * 14 * Default value only valid in 29 bit mode, in 32bit mode this will be 15 * updated by the early PMB initialization code. 16 */ 17 unsigned long cached_to_uncached = SZ_512M; 18 unsigned long uncached_size = SZ_512M; 19 unsigned long uncached_start, uncached_end; 20 EXPORT_SYMBOL(uncached_start); 21 EXPORT_SYMBOL(uncached_end); 22 23 int virt_addr_uncached(unsigned long kaddr) 24 { 25 return (kaddr >= uncached_start) && (kaddr < uncached_end); 26 } 27 EXPORT_SYMBOL(virt_addr_uncached); 28 29 void __init uncached_init(void) 30 { 31 #if defined(CONFIG_29BIT) || !defined(CONFIG_MMU) 32 uncached_start = P2SEG; 33 #else 34 uncached_start = memory_end; 35 #endif 36 uncached_end = uncached_start + uncached_size; 37 } 38 39 void __init uncached_resize(unsigned long size) 40 { 41 uncached_size = size; 42 uncached_end = uncached_start + uncached_size; 43 } 44