]>
Commit | Line | Data |
---|---|---|
e85e335f MF |
1 | /* |
2 | * arch/xtensa/include/asm/xchal_vaddr_remap.h | |
3 | * | |
4 | * Xtensa macros for MMU V3 Support. Deals with re-mapping the Virtual | |
5 | * Memory Addresses from "Virtual == Physical" to their prevvious V2 MMU | |
6 | * mappings (KSEG at 0xD0000000 and KIO at 0XF0000000). | |
7 | * | |
8 | * This file is subject to the terms and conditions of the GNU General Public | |
9 | * License. See the file "COPYING" in the main directory of this archive | |
10 | * for more details. | |
11 | * | |
12 | * Copyright (C) 2008 - 2012 Tensilica Inc. | |
13 | * | |
14 | * Pete Delaney <piet@tensilica.com> | |
15 | * Marc Gauthier <marc@tensilica.com | |
16 | */ | |
17 | ||
18 | #ifndef _XTENSA_VECTORS_H | |
19 | #define _XTENSA_VECTORS_H | |
20 | ||
8f8d5745 | 21 | #include <asm/core.h> |
f1883aa7 | 22 | #include <asm/kmem_layout.h> |
e85e335f | 23 | |
260c64bb | 24 | #if XCHAL_HAVE_PTP_MMU |
4809bb46 BS |
25 | #define XCHAL_KIO_CACHED_VADDR 0xe0000000 |
26 | #define XCHAL_KIO_BYPASS_VADDR 0xf0000000 | |
6cb97111 | 27 | #define XCHAL_KIO_DEFAULT_PADDR 0xf0000000 |
260c64bb MF |
28 | #else |
29 | #define XCHAL_KIO_BYPASS_VADDR XCHAL_KIO_PADDR | |
30 | #define XCHAL_KIO_DEFAULT_PADDR 0x90000000 | |
31 | #endif | |
4809bb46 BS |
32 | #define XCHAL_KIO_SIZE 0x10000000 |
33 | ||
260c64bb | 34 | #if (!XCHAL_HAVE_PTP_MMU || XCHAL_HAVE_SPANNING_WAY) && defined(CONFIG_OF) |
6cb97111 | 35 | #define XCHAL_KIO_PADDR xtensa_get_kio_paddr() |
260c64bb MF |
36 | #ifndef __ASSEMBLY__ |
37 | extern unsigned long xtensa_kio_paddr; | |
38 | ||
39 | static inline unsigned long xtensa_get_kio_paddr(void) | |
40 | { | |
41 | return xtensa_kio_paddr; | |
42 | } | |
43 | #endif | |
6cb97111 BS |
44 | #else |
45 | #define XCHAL_KIO_PADDR XCHAL_KIO_DEFAULT_PADDR | |
46 | #endif | |
47 | ||
e85e335f MF |
48 | #if defined(CONFIG_MMU) |
49 | ||
a9f2fc62 | 50 | #if XCHAL_HAVE_PTP_MMU && XCHAL_HAVE_SPANNING_WAY |
e85e335f | 51 | /* Image Virtual Start Address */ |
a9f2fc62 MF |
52 | #define KERNELOFFSET (XCHAL_KSEG_CACHED_VADDR + \ |
53 | CONFIG_KERNEL_LOAD_ADDRESS - \ | |
54 | XCHAL_KSEG_PADDR) | |
e85e335f | 55 | #else |
a9f2fc62 | 56 | #define KERNELOFFSET CONFIG_KERNEL_LOAD_ADDRESS |
e85e335f MF |
57 | #endif |
58 | ||
59 | #else /* !defined(CONFIG_MMU) */ | |
60 | /* MMU Not being used - Virtual == Physical */ | |
61 | ||
a9f2fc62 MF |
62 | /* Location of the start of the kernel text, _start */ |
63 | #define KERNELOFFSET CONFIG_KERNEL_LOAD_ADDRESS | |
e85e335f | 64 | |
ab45fb14 | 65 | |
e85e335f MF |
66 | #endif /* CONFIG_MMU */ |
67 | ||
a9f2fc62 | 68 | #define RESET_VECTOR1_VADDR (XCHAL_RESET_VECTOR1_VADDR) |
b46dcfa3 | 69 | #ifdef CONFIG_VECTORS_OFFSET |
a9f2fc62 | 70 | #define VECBASE_VADDR (KERNELOFFSET - CONFIG_VECTORS_OFFSET) |
b46dcfa3 MF |
71 | #else |
72 | #define VECBASE_VADDR _vecbase | |
73 | #endif | |
e85e335f | 74 | |
f0a34615 | 75 | #if defined(XCHAL_HAVE_VECBASE) && XCHAL_HAVE_VECBASE |
e85e335f | 76 | |
a9f2fc62 | 77 | #define VECTOR_VADDR(offset) (VECBASE_VADDR + offset) |
e85e335f | 78 | |
a9f2fc62 MF |
79 | #define USER_VECTOR_VADDR VECTOR_VADDR(XCHAL_USER_VECOFS) |
80 | #define KERNEL_VECTOR_VADDR VECTOR_VADDR(XCHAL_KERNEL_VECOFS) | |
81 | #define DOUBLEEXC_VECTOR_VADDR VECTOR_VADDR(XCHAL_DOUBLEEXC_VECOFS) | |
82 | #define WINDOW_VECTORS_VADDR VECTOR_VADDR(XCHAL_WINDOW_OF4_VECOFS) | |
83 | #define INTLEVEL2_VECTOR_VADDR VECTOR_VADDR(XCHAL_INTLEVEL2_VECOFS) | |
84 | #define INTLEVEL3_VECTOR_VADDR VECTOR_VADDR(XCHAL_INTLEVEL3_VECOFS) | |
85 | #define INTLEVEL4_VECTOR_VADDR VECTOR_VADDR(XCHAL_INTLEVEL4_VECOFS) | |
86 | #define INTLEVEL5_VECTOR_VADDR VECTOR_VADDR(XCHAL_INTLEVEL5_VECOFS) | |
87 | #define INTLEVEL6_VECTOR_VADDR VECTOR_VADDR(XCHAL_INTLEVEL6_VECOFS) | |
88 | #define INTLEVEL7_VECTOR_VADDR VECTOR_VADDR(XCHAL_INTLEVEL7_VECOFS) | |
89 | #define DEBUG_VECTOR_VADDR VECTOR_VADDR(XCHAL_DEBUG_VECOFS) | |
e85e335f MF |
90 | |
91 | /* | |
92 | * These XCHAL_* #defines from varian/core.h | |
93 | * are not valid to use with V3 MMU. Non-XCHAL | |
94 | * constants are defined above and should be used. | |
95 | */ | |
96 | #undef XCHAL_VECBASE_RESET_VADDR | |
e85e335f MF |
97 | #undef XCHAL_USER_VECTOR_VADDR |
98 | #undef XCHAL_KERNEL_VECTOR_VADDR | |
99 | #undef XCHAL_DOUBLEEXC_VECTOR_VADDR | |
100 | #undef XCHAL_WINDOW_VECTORS_VADDR | |
101 | #undef XCHAL_INTLEVEL2_VECTOR_VADDR | |
102 | #undef XCHAL_INTLEVEL3_VECTOR_VADDR | |
103 | #undef XCHAL_INTLEVEL4_VECTOR_VADDR | |
104 | #undef XCHAL_INTLEVEL5_VECTOR_VADDR | |
105 | #undef XCHAL_INTLEVEL6_VECTOR_VADDR | |
e85e335f | 106 | #undef XCHAL_INTLEVEL7_VECTOR_VADDR |
a9f2fc62 | 107 | #undef XCHAL_DEBUG_VECTOR_VADDR |
e85e335f MF |
108 | |
109 | #else | |
110 | ||
111 | #define USER_VECTOR_VADDR XCHAL_USER_VECTOR_VADDR | |
112 | #define KERNEL_VECTOR_VADDR XCHAL_KERNEL_VECTOR_VADDR | |
113 | #define DOUBLEEXC_VECTOR_VADDR XCHAL_DOUBLEEXC_VECTOR_VADDR | |
114 | #define WINDOW_VECTORS_VADDR XCHAL_WINDOW_VECTORS_VADDR | |
115 | #define INTLEVEL2_VECTOR_VADDR XCHAL_INTLEVEL2_VECTOR_VADDR | |
116 | #define INTLEVEL3_VECTOR_VADDR XCHAL_INTLEVEL3_VECTOR_VADDR | |
117 | #define INTLEVEL4_VECTOR_VADDR XCHAL_INTLEVEL4_VECTOR_VADDR | |
118 | #define INTLEVEL5_VECTOR_VADDR XCHAL_INTLEVEL5_VECTOR_VADDR | |
119 | #define INTLEVEL6_VECTOR_VADDR XCHAL_INTLEVEL6_VECTOR_VADDR | |
a9f2fc62 | 120 | #define INTLEVEL7_VECTOR_VADDR XCHAL_INTLEVEL6_VECTOR_VADDR |
e85e335f MF |
121 | #define DEBUG_VECTOR_VADDR XCHAL_DEBUG_VECTOR_VADDR |
122 | ||
123 | #endif | |
124 | ||
125 | #endif /* _XTENSA_VECTORS_H */ |