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 | ||
21 | #include <variant/core.h> | |
72bb305f | 22 | #include <platform/hardware.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 | ||
50 | /* Will Become VECBASE */ | |
51 | #define VIRTUAL_MEMORY_ADDRESS 0xD0000000 | |
52 | ||
53 | /* Image Virtual Start Address */ | |
54 | #define KERNELOFFSET 0xD0003000 | |
55 | ||
56 | #if defined(XCHAL_HAVE_PTP_MMU) && XCHAL_HAVE_PTP_MMU && XCHAL_HAVE_SPANNING_WAY | |
57 | /* MMU v3 - XCHAL_HAVE_PTP_MMU == 1 */ | |
e85e335f MF |
58 | #define LOAD_MEMORY_ADDRESS 0x00003000 |
59 | #else | |
60 | /* MMU V2 - XCHAL_HAVE_PTP_MMU == 0 */ | |
e85e335f MF |
61 | #define LOAD_MEMORY_ADDRESS 0xD0003000 |
62 | #endif | |
63 | ||
ab45fb14 MF |
64 | #define RESET_VECTOR1_VADDR (VIRTUAL_MEMORY_ADDRESS + \ |
65 | XCHAL_RESET_VECTOR1_PADDR) | |
66 | ||
e85e335f MF |
67 | #else /* !defined(CONFIG_MMU) */ |
68 | /* MMU Not being used - Virtual == Physical */ | |
69 | ||
70 | /* VECBASE */ | |
72bb305f | 71 | #define VIRTUAL_MEMORY_ADDRESS (PLATFORM_DEFAULT_MEM_START + 0x2000) |
e85e335f MF |
72 | |
73 | /* Location of the start of the kernel text, _start */ | |
72bb305f | 74 | #define KERNELOFFSET (PLATFORM_DEFAULT_MEM_START + 0x3000) |
e85e335f MF |
75 | |
76 | /* Loaded just above possibly live vectors */ | |
72bb305f | 77 | #define LOAD_MEMORY_ADDRESS (PLATFORM_DEFAULT_MEM_START + 0x3000) |
e85e335f | 78 | |
ab45fb14 MF |
79 | #define RESET_VECTOR1_VADDR (XCHAL_RESET_VECTOR1_VADDR) |
80 | ||
e85e335f MF |
81 | #endif /* CONFIG_MMU */ |
82 | ||
83 | #define XC_VADDR(offset) (VIRTUAL_MEMORY_ADDRESS + offset) | |
e85e335f MF |
84 | |
85 | /* Used to set VECBASE register */ | |
86 | #define VECBASE_RESET_VADDR VIRTUAL_MEMORY_ADDRESS | |
87 | ||
f0a34615 | 88 | #if defined(XCHAL_HAVE_VECBASE) && XCHAL_HAVE_VECBASE |
e85e335f MF |
89 | |
90 | #define USER_VECTOR_VADDR XC_VADDR(XCHAL_USER_VECOFS) | |
91 | #define KERNEL_VECTOR_VADDR XC_VADDR(XCHAL_KERNEL_VECOFS) | |
92 | #define DOUBLEEXC_VECTOR_VADDR XC_VADDR(XCHAL_DOUBLEEXC_VECOFS) | |
93 | #define WINDOW_VECTORS_VADDR XC_VADDR(XCHAL_WINDOW_OF4_VECOFS) | |
94 | #define INTLEVEL2_VECTOR_VADDR XC_VADDR(XCHAL_INTLEVEL2_VECOFS) | |
95 | #define INTLEVEL3_VECTOR_VADDR XC_VADDR(XCHAL_INTLEVEL3_VECOFS) | |
96 | #define INTLEVEL4_VECTOR_VADDR XC_VADDR(XCHAL_INTLEVEL4_VECOFS) | |
97 | #define INTLEVEL5_VECTOR_VADDR XC_VADDR(XCHAL_INTLEVEL5_VECOFS) | |
98 | #define INTLEVEL6_VECTOR_VADDR XC_VADDR(XCHAL_INTLEVEL6_VECOFS) | |
99 | ||
100 | #define DEBUG_VECTOR_VADDR XC_VADDR(XCHAL_DEBUG_VECOFS) | |
101 | ||
f0a34615 | 102 | #define NMI_VECTOR_VADDR XC_VADDR(XCHAL_NMI_VECOFS) |
e85e335f | 103 | |
f0a34615 | 104 | #define INTLEVEL7_VECTOR_VADDR XC_VADDR(XCHAL_INTLEVEL7_VECOFS) |
e85e335f MF |
105 | |
106 | /* | |
107 | * These XCHAL_* #defines from varian/core.h | |
108 | * are not valid to use with V3 MMU. Non-XCHAL | |
109 | * constants are defined above and should be used. | |
110 | */ | |
111 | #undef XCHAL_VECBASE_RESET_VADDR | |
112 | #undef XCHAL_RESET_VECTOR0_VADDR | |
113 | #undef XCHAL_USER_VECTOR_VADDR | |
114 | #undef XCHAL_KERNEL_VECTOR_VADDR | |
115 | #undef XCHAL_DOUBLEEXC_VECTOR_VADDR | |
116 | #undef XCHAL_WINDOW_VECTORS_VADDR | |
117 | #undef XCHAL_INTLEVEL2_VECTOR_VADDR | |
118 | #undef XCHAL_INTLEVEL3_VECTOR_VADDR | |
119 | #undef XCHAL_INTLEVEL4_VECTOR_VADDR | |
120 | #undef XCHAL_INTLEVEL5_VECTOR_VADDR | |
121 | #undef XCHAL_INTLEVEL6_VECTOR_VADDR | |
122 | #undef XCHAL_DEBUG_VECTOR_VADDR | |
123 | #undef XCHAL_NMI_VECTOR_VADDR | |
124 | #undef XCHAL_INTLEVEL7_VECTOR_VADDR | |
125 | ||
126 | #else | |
127 | ||
128 | #define USER_VECTOR_VADDR XCHAL_USER_VECTOR_VADDR | |
129 | #define KERNEL_VECTOR_VADDR XCHAL_KERNEL_VECTOR_VADDR | |
130 | #define DOUBLEEXC_VECTOR_VADDR XCHAL_DOUBLEEXC_VECTOR_VADDR | |
131 | #define WINDOW_VECTORS_VADDR XCHAL_WINDOW_VECTORS_VADDR | |
132 | #define INTLEVEL2_VECTOR_VADDR XCHAL_INTLEVEL2_VECTOR_VADDR | |
133 | #define INTLEVEL3_VECTOR_VADDR XCHAL_INTLEVEL3_VECTOR_VADDR | |
134 | #define INTLEVEL4_VECTOR_VADDR XCHAL_INTLEVEL4_VECTOR_VADDR | |
135 | #define INTLEVEL5_VECTOR_VADDR XCHAL_INTLEVEL5_VECTOR_VADDR | |
136 | #define INTLEVEL6_VECTOR_VADDR XCHAL_INTLEVEL6_VECTOR_VADDR | |
137 | #define DEBUG_VECTOR_VADDR XCHAL_DEBUG_VECTOR_VADDR | |
138 | ||
139 | #endif | |
140 | ||
141 | #endif /* _XTENSA_VECTORS_H */ |