diff options
author | Chris Metcalf <cmetcalf@tilera.com> | 2010-10-14 16:23:03 -0400 |
---|---|---|
committer | Chris Metcalf <cmetcalf@tilera.com> | 2010-10-15 15:38:09 -0400 |
commit | a78c942df64ef4cf495fd4d8715e48501bd7f8a4 (patch) | |
tree | fe44212d36e6ca23dbe9f2c633824389216a3d1d /arch/tile/include/asm/page.h | |
parent | bf65e440e8248f22b2eacf8d47961bb9d52260f7 (diff) |
arch/tile: parameterize system PLs to support KVM port
While not a port to KVM (yet), this change modifies the kernel
to be able to build either at PL1 or at PL2 with a suitable
config switch. Pushing up this change avoids handling branch
merge issues going forward with the KVM work.
Signed-off-by: Chris Metcalf <cmetcalf@tilera.com>
Diffstat (limited to 'arch/tile/include/asm/page.h')
-rw-r--r-- | arch/tile/include/asm/page.h | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/arch/tile/include/asm/page.h b/arch/tile/include/asm/page.h index 7d90641cf18d..7979a45430d3 100644 --- a/arch/tile/include/asm/page.h +++ b/arch/tile/include/asm/page.h | |||
@@ -199,17 +199,17 @@ static inline __attribute_const__ int get_order(unsigned long size) | |||
199 | * If you want more physical memory than this then see the CONFIG_HIGHMEM | 199 | * If you want more physical memory than this then see the CONFIG_HIGHMEM |
200 | * option in the kernel configuration. | 200 | * option in the kernel configuration. |
201 | * | 201 | * |
202 | * The top two 16MB chunks in the table below (VIRT and HV) are | 202 | * The top 16MB chunk in the table below is unavailable to Linux. Since |
203 | * unavailable to Linux. Since the kernel interrupt vectors must live | 203 | * the kernel interrupt vectors must live at ether 0xfe000000 or 0xfd000000 |
204 | * at 0xfd000000, we map all of the bottom of RAM at this address with | 204 | * (depending on whether the kernel is at PL2 or Pl1), we map all of the |
205 | * a huge page table entry to minimize its ITLB footprint (as well as | 205 | * bottom of RAM at this address with a huge page table entry to minimize |
206 | * at PAGE_OFFSET). The last architected requirement is that user | 206 | * its ITLB footprint (as well as at PAGE_OFFSET). The last architected |
207 | * interrupt vectors live at 0xfc000000, so we make that range of | 207 | * requirement is that user interrupt vectors live at 0xfc000000, so we |
208 | * memory available to user processes. The remaining regions are sized | 208 | * make that range of memory available to user processes. The remaining |
209 | * as shown; after the first four addresses, we show "typical" values, | 209 | * regions are sized as shown; the first four addresses use the PL 1 |
210 | * since the actual addresses depend on kernel #defines. | 210 | * values, and after that, we show "typical" values, since the actual |
211 | * addresses depend on kernel #defines. | ||
211 | * | 212 | * |
212 | * MEM_VIRT_INTRPT 0xff000000 | ||
213 | * MEM_HV_INTRPT 0xfe000000 | 213 | * MEM_HV_INTRPT 0xfe000000 |
214 | * MEM_SV_INTRPT (kernel code) 0xfd000000 | 214 | * MEM_SV_INTRPT (kernel code) 0xfd000000 |
215 | * MEM_USER_INTRPT (user vector) 0xfc000000 | 215 | * MEM_USER_INTRPT (user vector) 0xfc000000 |
@@ -221,9 +221,14 @@ static inline __attribute_const__ int get_order(unsigned long size) | |||
221 | */ | 221 | */ |
222 | 222 | ||
223 | #define MEM_USER_INTRPT _AC(0xfc000000, UL) | 223 | #define MEM_USER_INTRPT _AC(0xfc000000, UL) |
224 | #if CONFIG_KERNEL_PL == 1 | ||
224 | #define MEM_SV_INTRPT _AC(0xfd000000, UL) | 225 | #define MEM_SV_INTRPT _AC(0xfd000000, UL) |
225 | #define MEM_HV_INTRPT _AC(0xfe000000, UL) | 226 | #define MEM_HV_INTRPT _AC(0xfe000000, UL) |
226 | #define MEM_VIRT_INTRPT _AC(0xff000000, UL) | 227 | #else |
228 | #define MEM_GUEST_INTRPT _AC(0xfd000000, UL) | ||
229 | #define MEM_SV_INTRPT _AC(0xfe000000, UL) | ||
230 | #define MEM_HV_INTRPT _AC(0xff000000, UL) | ||
231 | #endif | ||
227 | 232 | ||
228 | #define INTRPT_SIZE 0x4000 | 233 | #define INTRPT_SIZE 0x4000 |
229 | 234 | ||