diff options
Diffstat (limited to 'arch/tile/kernel/head_32.S')
-rw-r--r-- | arch/tile/kernel/head_32.S | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/arch/tile/kernel/head_32.S b/arch/tile/kernel/head_32.S index 2b4f6c091701..1a39b7c1c87e 100644 --- a/arch/tile/kernel/head_32.S +++ b/arch/tile/kernel/head_32.S | |||
@@ -23,6 +23,7 @@ | |||
23 | #include <asm/asm-offsets.h> | 23 | #include <asm/asm-offsets.h> |
24 | #include <hv/hypervisor.h> | 24 | #include <hv/hypervisor.h> |
25 | #include <arch/chip.h> | 25 | #include <arch/chip.h> |
26 | #include <arch/spr_def.h> | ||
26 | 27 | ||
27 | /* | 28 | /* |
28 | * This module contains the entry code for kernel images. It performs the | 29 | * This module contains the entry code for kernel images. It performs the |
@@ -76,7 +77,7 @@ ENTRY(_start) | |||
76 | } | 77 | } |
77 | 1: | 78 | 1: |
78 | 79 | ||
79 | /* Get our processor number and save it away in SAVE_1_0. */ | 80 | /* Get our processor number and save it away in SAVE_K_0. */ |
80 | jal hv_inquire_topology | 81 | jal hv_inquire_topology |
81 | mulll_uu r4, r1, r2 /* r1 == y, r2 == width */ | 82 | mulll_uu r4, r1, r2 /* r1 == y, r2 == width */ |
82 | add r4, r4, r0 /* r0 == x, so r4 == cpu == y*width + x */ | 83 | add r4, r4, r0 /* r0 == x, so r4 == cpu == y*width + x */ |
@@ -124,7 +125,7 @@ ENTRY(_start) | |||
124 | lw r0, r0 | 125 | lw r0, r0 |
125 | lw sp, r1 | 126 | lw sp, r1 |
126 | or r4, sp, r4 | 127 | or r4, sp, r4 |
127 | mtspr SYSTEM_SAVE_1_0, r4 /* save ksp0 + cpu */ | 128 | mtspr SPR_SYSTEM_SAVE_K_0, r4 /* save ksp0 + cpu */ |
128 | addi sp, sp, -STACK_TOP_DELTA | 129 | addi sp, sp, -STACK_TOP_DELTA |
129 | { | 130 | { |
130 | move lr, zero /* stop backtraces in the called function */ | 131 | move lr, zero /* stop backtraces in the called function */ |
@@ -132,7 +133,7 @@ ENTRY(_start) | |||
132 | } | 133 | } |
133 | ENDPROC(_start) | 134 | ENDPROC(_start) |
134 | 135 | ||
135 | .section ".bss.page_aligned","w" | 136 | __PAGE_ALIGNED_BSS |
136 | .align PAGE_SIZE | 137 | .align PAGE_SIZE |
137 | ENTRY(empty_zero_page) | 138 | ENTRY(empty_zero_page) |
138 | .fill PAGE_SIZE,1,0 | 139 | .fill PAGE_SIZE,1,0 |
@@ -144,10 +145,10 @@ ENTRY(empty_zero_page) | |||
144 | .endif | 145 | .endif |
145 | .word HV_PTE_PAGE | HV_PTE_DIRTY | HV_PTE_PRESENT | HV_PTE_ACCESSED | \ | 146 | .word HV_PTE_PAGE | HV_PTE_DIRTY | HV_PTE_PRESENT | HV_PTE_ACCESSED | \ |
146 | (HV_PTE_MODE_CACHE_NO_L3 << HV_PTE_INDEX_MODE) | 147 | (HV_PTE_MODE_CACHE_NO_L3 << HV_PTE_INDEX_MODE) |
147 | .word (\bits1) | (HV_CPA_TO_PFN(\cpa) << HV_PTE_INDEX_PFN) | 148 | .word (\bits1) | (HV_CPA_TO_PFN(\cpa) << (HV_PTE_INDEX_PFN - 32)) |
148 | .endm | 149 | .endm |
149 | 150 | ||
150 | .section ".data.page_aligned","wa" | 151 | __PAGE_ALIGNED_DATA |
151 | .align PAGE_SIZE | 152 | .align PAGE_SIZE |
152 | ENTRY(swapper_pg_dir) | 153 | ENTRY(swapper_pg_dir) |
153 | /* | 154 | /* |
@@ -157,12 +158,14 @@ ENTRY(swapper_pg_dir) | |||
157 | */ | 158 | */ |
158 | .set addr, 0 | 159 | .set addr, 0 |
159 | .rept (MEM_USER_INTRPT - PAGE_OFFSET) >> PGDIR_SHIFT | 160 | .rept (MEM_USER_INTRPT - PAGE_OFFSET) >> PGDIR_SHIFT |
160 | PTE addr + PAGE_OFFSET, addr, HV_PTE_READABLE | HV_PTE_WRITABLE | 161 | PTE addr + PAGE_OFFSET, addr, (1 << (HV_PTE_INDEX_READABLE - 32)) | \ |
162 | (1 << (HV_PTE_INDEX_WRITABLE - 32)) | ||
161 | .set addr, addr + PGDIR_SIZE | 163 | .set addr, addr + PGDIR_SIZE |
162 | .endr | 164 | .endr |
163 | 165 | ||
164 | /* The true text VAs are mapped as VA = PA + MEM_SV_INTRPT */ | 166 | /* The true text VAs are mapped as VA = PA + MEM_SV_INTRPT */ |
165 | PTE MEM_SV_INTRPT, 0, HV_PTE_READABLE | HV_PTE_EXECUTABLE | 167 | PTE MEM_SV_INTRPT, 0, (1 << (HV_PTE_INDEX_READABLE - 32)) | \ |
168 | (1 << (HV_PTE_INDEX_EXECUTABLE - 32)) | ||
166 | .org swapper_pg_dir + HV_L1_SIZE | 169 | .org swapper_pg_dir + HV_L1_SIZE |
167 | END(swapper_pg_dir) | 170 | END(swapper_pg_dir) |
168 | 171 | ||
@@ -175,6 +178,7 @@ ENTRY(swapper_pg_dir) | |||
175 | __INITDATA | 178 | __INITDATA |
176 | .align CHIP_L2_LINE_SIZE() | 179 | .align CHIP_L2_LINE_SIZE() |
177 | ENTRY(swapper_pgprot) | 180 | ENTRY(swapper_pgprot) |
178 | PTE 0, 0, HV_PTE_READABLE | HV_PTE_WRITABLE, 1 | 181 | PTE 0, 0, (1 << (HV_PTE_INDEX_READABLE - 32)) | \ |
182 | (1 << (HV_PTE_INDEX_WRITABLE - 32)), 1 | ||
179 | .align CHIP_L2_LINE_SIZE() | 183 | .align CHIP_L2_LINE_SIZE() |
180 | END(swapper_pgprot) | 184 | END(swapper_pgprot) |