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 */
17unsigned long cached_to_uncached = SZ_512M;
18unsigned long uncached_size = SZ_512M;
19unsigned long uncached_start, uncached_end;
20EXPORT_SYMBOL(uncached_start);
21EXPORT_SYMBOL(uncached_end);
22
23int virt_addr_uncached(unsigned long kaddr)
24{
25	return (kaddr >= uncached_start) && (kaddr < uncached_end);
26}
27EXPORT_SYMBOL(virt_addr_uncached);
28
29void __init uncached_init(void)
30{
31#ifdef CONFIG_29BIT
32	uncached_start = P2SEG;
33#else
34	uncached_start = memory_end;
35#endif
36	uncached_end = uncached_start + uncached_size;
37}
38
39void __init uncached_resize(unsigned long size)
40{
41	uncached_size = size;
42	uncached_end = uncached_start + uncached_size;
43}
44