diff options
author | Richard Kuo <rkuo@codeaurora.org> | 2013-03-22 17:05:40 -0400 |
---|---|---|
committer | Richard Kuo <rkuo@codeaurora.org> | 2013-04-30 20:40:22 -0400 |
commit | 8f5a0b9dffeb3cb94f2b0622b6fe0717512ef54b (patch) | |
tree | d85d4b7531645b4b189fb88dd8d6b4b62072284b /arch/hexagon/include | |
parent | e0025a72c37ca404fbf31d569439c20bfb04295e (diff) |
Hexagon: add support for ARCH_PFN_OFFSET
Add support for loading the kernel at a physical offset. The
offset should still be 4M aligned.
Signed-off-by: Richard Kuo <rkuo@codeaurora.org>
Diffstat (limited to 'arch/hexagon/include')
-rw-r--r-- | arch/hexagon/include/asm/hexagon_vm.h | 47 | ||||
-rw-r--r-- | arch/hexagon/include/asm/mem-layout.h | 21 | ||||
-rw-r--r-- | arch/hexagon/include/asm/page.h | 5 |
3 files changed, 42 insertions, 31 deletions
diff --git a/arch/hexagon/include/asm/hexagon_vm.h b/arch/hexagon/include/asm/hexagon_vm.h index c144bee6cabe..6b81e4d5ecb1 100644 --- a/arch/hexagon/include/asm/hexagon_vm.h +++ b/arch/hexagon/include/asm/hexagon_vm.h | |||
@@ -31,10 +31,26 @@ | |||
31 | * for tracing/debugging. | 31 | * for tracing/debugging. |
32 | */ | 32 | */ |
33 | 33 | ||
34 | /* | 34 | #define HVM_TRAP1_VMVERSION 0 |
35 | * Lets make this stuff visible only if configured, | 35 | #define HVM_TRAP1_VMRTE 1 |
36 | * so we can unconditionally include the file. | 36 | #define HVM_TRAP1_VMSETVEC 2 |
37 | */ | 37 | #define HVM_TRAP1_VMSETIE 3 |
38 | #define HVM_TRAP1_VMGETIE 4 | ||
39 | #define HVM_TRAP1_VMINTOP 5 | ||
40 | #define HVM_TRAP1_VMCLRMAP 10 | ||
41 | #define HVM_TRAP1_VMNEWMAP 11 | ||
42 | #define HVM_TRAP1_FORMERLY_VMWIRE 12 | ||
43 | #define HVM_TRAP1_VMCACHE 13 | ||
44 | #define HVM_TRAP1_VMGETTIME 14 | ||
45 | #define HVM_TRAP1_VMSETTIME 15 | ||
46 | #define HVM_TRAP1_VMWAIT 16 | ||
47 | #define HVM_TRAP1_VMYIELD 17 | ||
48 | #define HVM_TRAP1_VMSTART 18 | ||
49 | #define HVM_TRAP1_VMSTOP 19 | ||
50 | #define HVM_TRAP1_VMVPID 20 | ||
51 | #define HVM_TRAP1_VMSETREGS 21 | ||
52 | #define HVM_TRAP1_VMGETREGS 22 | ||
53 | #define HVM_TRAP1_VMTIMEROP 24 | ||
38 | 54 | ||
39 | #ifndef __ASSEMBLY__ | 55 | #ifndef __ASSEMBLY__ |
40 | 56 | ||
@@ -175,25 +191,6 @@ static inline long __vmintop_clear(long i) | |||
175 | 191 | ||
176 | #else /* Only assembly code should reference these */ | 192 | #else /* Only assembly code should reference these */ |
177 | 193 | ||
178 | #define HVM_TRAP1_VMRTE 1 | ||
179 | #define HVM_TRAP1_VMSETVEC 2 | ||
180 | #define HVM_TRAP1_VMSETIE 3 | ||
181 | #define HVM_TRAP1_VMGETIE 4 | ||
182 | #define HVM_TRAP1_VMINTOP 5 | ||
183 | #define HVM_TRAP1_VMCLRMAP 10 | ||
184 | #define HVM_TRAP1_VMNEWMAP 11 | ||
185 | #define HVM_TRAP1_FORMERLY_VMWIRE 12 | ||
186 | #define HVM_TRAP1_VMCACHE 13 | ||
187 | #define HVM_TRAP1_VMGETTIME 14 | ||
188 | #define HVM_TRAP1_VMSETTIME 15 | ||
189 | #define HVM_TRAP1_VMWAIT 16 | ||
190 | #define HVM_TRAP1_VMYIELD 17 | ||
191 | #define HVM_TRAP1_VMSTART 18 | ||
192 | #define HVM_TRAP1_VMSTOP 19 | ||
193 | #define HVM_TRAP1_VMVPID 20 | ||
194 | #define HVM_TRAP1_VMSETREGS 21 | ||
195 | #define HVM_TRAP1_VMGETREGS 22 | ||
196 | |||
197 | #endif /* __ASSEMBLY__ */ | 194 | #endif /* __ASSEMBLY__ */ |
198 | 195 | ||
199 | /* | 196 | /* |
@@ -224,6 +221,8 @@ static inline long __vmintop_clear(long i) | |||
224 | #define HVM_VMEST_UM_MSK 1 | 221 | #define HVM_VMEST_UM_MSK 1 |
225 | #define HVM_VMEST_IE_SFT 30 | 222 | #define HVM_VMEST_IE_SFT 30 |
226 | #define HVM_VMEST_IE_MSK 1 | 223 | #define HVM_VMEST_IE_MSK 1 |
224 | #define HVM_VMEST_SS_SFT 29 | ||
225 | #define HVM_VMEST_SS_MSK 1 | ||
227 | #define HVM_VMEST_EVENTNUM_SFT 16 | 226 | #define HVM_VMEST_EVENTNUM_SFT 16 |
228 | #define HVM_VMEST_EVENTNUM_MSK 0xff | 227 | #define HVM_VMEST_EVENTNUM_MSK 0xff |
229 | #define HVM_VMEST_CAUSE_SFT 0 | 228 | #define HVM_VMEST_CAUSE_SFT 0 |
@@ -260,6 +259,8 @@ static inline long __vmintop_clear(long i) | |||
260 | #define HVM_GE_C_INVI 0x15 | 259 | #define HVM_GE_C_INVI 0x15 |
261 | #define HVM_GE_C_PRIVI 0x1B | 260 | #define HVM_GE_C_PRIVI 0x1B |
262 | #define HVM_GE_C_XMAL 0x1C | 261 | #define HVM_GE_C_XMAL 0x1C |
262 | #define HVM_GE_C_WREG 0x1D | ||
263 | #define HVM_GE_C_PCAL 0x1E | ||
263 | #define HVM_GE_C_RMAL 0x20 | 264 | #define HVM_GE_C_RMAL 0x20 |
264 | #define HVM_GE_C_WMAL 0x21 | 265 | #define HVM_GE_C_WMAL 0x21 |
265 | #define HVM_GE_C_RPROT 0x22 | 266 | #define HVM_GE_C_RPROT 0x22 |
diff --git a/arch/hexagon/include/asm/mem-layout.h b/arch/hexagon/include/asm/mem-layout.h index af16e977c55e..1426cd71a1d3 100644 --- a/arch/hexagon/include/asm/mem-layout.h +++ b/arch/hexagon/include/asm/mem-layout.h | |||
@@ -32,16 +32,25 @@ | |||
32 | #define PAGE_OFFSET _AC(0xc0000000, UL) | 32 | #define PAGE_OFFSET _AC(0xc0000000, UL) |
33 | 33 | ||
34 | /* | 34 | /* |
35 | * LOAD_ADDRESS is the physical/linear address of where in memory | 35 | * Compiling for a platform that needs a crazy physical offset |
36 | * the kernel gets loaded. The 12 least significant bits must be zero (0) | 36 | * (like if the memory starts at 1GB and up) means we need |
37 | * due to limitations on setting the EVB | 37 | * an actual PHYS_OFFSET. Should be set up in head.S. |
38 | * | ||
39 | */ | 38 | */ |
40 | 39 | ||
41 | #ifndef LOAD_ADDRESS | 40 | #ifdef CONFIG_HEXAGON_PHYS_OFFSET |
42 | #define LOAD_ADDRESS 0x00000000 | 41 | #ifndef __ASSEMBLY__ |
42 | extern unsigned long __phys_offset; | ||
43 | #endif | ||
44 | #define PHYS_OFFSET __phys_offset | ||
45 | #endif | ||
46 | |||
47 | #ifndef PHYS_OFFSET | ||
48 | #define PHYS_OFFSET 0 | ||
43 | #endif | 49 | #endif |
44 | 50 | ||
51 | #define PHYS_PFN_OFFSET (PHYS_OFFSET >> PAGE_SHIFT) | ||
52 | #define ARCH_PFN_OFFSET PHYS_PFN_OFFSET | ||
53 | |||
45 | #define TASK_SIZE (PAGE_OFFSET) | 54 | #define TASK_SIZE (PAGE_OFFSET) |
46 | 55 | ||
47 | /* not sure how these are used yet */ | 56 | /* not sure how these are used yet */ |
diff --git a/arch/hexagon/include/asm/page.h b/arch/hexagon/include/asm/page.h index 692adc213429..de1b2871d09c 100644 --- a/arch/hexagon/include/asm/page.h +++ b/arch/hexagon/include/asm/page.h | |||
@@ -96,8 +96,8 @@ typedef struct page *pgtable_t; | |||
96 | * MIPS says they're only used during mem_init. | 96 | * MIPS says they're only used during mem_init. |
97 | * also, check if we need a PHYS_OFFSET. | 97 | * also, check if we need a PHYS_OFFSET. |
98 | */ | 98 | */ |
99 | #define __pa(x) ((unsigned long)(x) - PAGE_OFFSET) | 99 | #define __pa(x) ((unsigned long)(x) - PAGE_OFFSET + PHYS_OFFSET) |
100 | #define __va(x) ((void *)((unsigned long)(x) + PAGE_OFFSET)) | 100 | #define __va(x) ((void *)((unsigned long)(x) - PHYS_OFFSET + PAGE_OFFSET)) |
101 | 101 | ||
102 | /* The "page frame" descriptor is defined in linux/mm.h */ | 102 | /* The "page frame" descriptor is defined in linux/mm.h */ |
103 | struct page; | 103 | struct page; |
@@ -147,6 +147,7 @@ static inline void clear_page(void *page) | |||
147 | */ | 147 | */ |
148 | #define kern_addr_valid(addr) (1) | 148 | #define kern_addr_valid(addr) (1) |
149 | 149 | ||
150 | #include <asm/mem-layout.h> | ||
150 | #include <asm-generic/memory_model.h> | 151 | #include <asm-generic/memory_model.h> |
151 | /* XXX Todo: implement assembly-optimized version of getorder. */ | 152 | /* XXX Todo: implement assembly-optimized version of getorder. */ |
152 | #include <asm-generic/getorder.h> | 153 | #include <asm-generic/getorder.h> |