aboutsummaryrefslogtreecommitdiffstats
path: root/arch/tile/kernel/head_32.S
diff options
context:
space:
mode:
Diffstat (limited to 'arch/tile/kernel/head_32.S')
-rw-r--r--arch/tile/kernel/head_32.S20
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 }
771: 781:
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
137ENTRY(empty_zero_page) 138ENTRY(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
152ENTRY(swapper_pg_dir) 153ENTRY(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()
177ENTRY(swapper_pgprot) 180ENTRY(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)