Rev 1978 | Rev 1996 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 1978 | Rev 1982 | ||
|---|---|---|---|
| Line 65... | Line 65... | ||
| 65 | kernel_image_start: |
65 | kernel_image_start: |
| 66 | mov BSP_FLAG, %l0 |
66 | mov BSP_FLAG, %l0 |
| 67 | and %o0, %l0, %l7 ! l7 <= bootstrap processor? |
67 | and %o0, %l0, %l7 ! l7 <= bootstrap processor? |
| 68 | andn %o0, %l0, %l6 ! l6 <= start of physical memory |
68 | andn %o0, %l0, %l6 ! l6 <= start of physical memory |
| 69 | 69 | ||
| 70 | sethi %hi(physmem_base), %l5 |
- | |
| 71 | stx %l6, [%l5 + %lo(physmem_base)] |
- | |
| 72 | - | ||
| 73 | /* |
- | |
| 74 | * Get bits 40:13 of physmem_base. |
70 | ! Get bits 40:13 of physmem_base. |
| 75 | */ |
- | |
| 76 | sethi %hi(mask_40_13), %l4 |
71 | srlx %l6, 13, %l5 |
| 77 | sethi %hi(physmem_base_40_13), %l3 |
- | |
| 78 | ldx [%l4 + %lo(mask_40_13)], %l4 |
72 | sllx %l5, 13 + (63 - 40), %l5 |
| 79 | and %l6, %l4, %l5 ! l5 <= physmem_base[40:13] |
73 | srlx %l5, 63 - 40, %l5 ! l5 <= physmem_base[40:13] |
| 80 | stx %l5, [%l3 + %lo(physmem_base_40_13)] |
- | |
| 81 | - | ||
| 82 | /* |
- | |
| 83 | * Prepare kernel 8K TLB data template. |
- | |
| 84 | */ |
- | |
| 85 | sethi %hi(kernel_8k_tlb_data_template), %l4 |
- | |
| 86 | ldx [%l4 + %lo(kernel_8k_tlb_data_template)], %l3 |
- | |
| 87 | or %l3, %l5, %l3 |
- | |
| 88 | stx %l3, [%l4 + %lo(kernel_8k_tlb_data_template)] |
- | |
| 89 | 74 | ||
| 90 | /* |
75 | /* |
| 91 | * Setup basic runtime environment. |
76 | * Setup basic runtime environment. |
| 92 | */ |
77 | */ |
| 93 | 78 | ||
| Line 242... | Line 227... | ||
| 242 | 227 | ||
| 243 | brz %l7, 1f ! skip if you are not the bootstrap CPU |
228 | brz %l7, 1f ! skip if you are not the bootstrap CPU |
| 244 | nop |
229 | nop |
| 245 | 230 | ||
| 246 | /* |
231 | /* |
| - | 232 | * Save physmem_base for use by the mm subsystem. |
|
| - | 233 | * %l6 contains starting physical address |
|
| - | 234 | */ |
|
| - | 235 | sethi %hi(physmem_base), %l4 |
|
| - | 236 | stx %l6, [%l4 + %lo(physmem_base)] |
|
| - | 237 | ||
| - | 238 | /* |
|
| - | 239 | * Precompute kernel 8K TLB data template. |
|
| - | 240 | * %l5 contains starting physical address bits [40:13] |
|
| - | 241 | */ |
|
| - | 242 | sethi %hi(kernel_8k_tlb_data_template), %l4 |
|
| - | 243 | ldx [%l4 + %lo(kernel_8k_tlb_data_template)], %l3 |
|
| - | 244 | or %l3, %l5, %l3 |
|
| - | 245 | stx %l3, [%l4 + %lo(kernel_8k_tlb_data_template)] |
|
| - | 246 | ||
| - | 247 | /* |
|
| 247 | * So far, we have not touched the stack. |
248 | * So far, we have not touched the stack. |
| 248 | * It is a good idea to set the kernel stack to a known state now. |
249 | * It is a good idea to set the kernel stack to a known state now. |
| 249 | */ |
250 | */ |
| 250 | sethi %hi(temporary_boot_stack), %sp |
251 | sethi %hi(temporary_boot_stack), %sp |
| 251 | or %sp, %lo(temporary_boot_stack), %sp |
252 | or %sp, %lo(temporary_boot_stack), %sp |
| Line 338... | Line 339... | ||
| 338 | .align 8 |
339 | .align 8 |
| 339 | .global physmem_base ! copy of the physical memory base address |
340 | .global physmem_base ! copy of the physical memory base address |
| 340 | physmem_base: |
341 | physmem_base: |
| 341 | .quad 0 |
342 | .quad 0 |
| 342 | 343 | ||
| 343 | .global physmem_base_40_13 |
- | |
| 344 | physmem_base_40_13: ! physmem_base & mask_40_13 |
- | |
| 345 | .quad 0 |
- | |
| 346 | - | ||
| 347 | .global mask_40_13 |
- | |
| 348 | mask_40_13: ! constant with bits 40:13 set |
- | |
| 349 | .quad (((1 << 41) - 1) & ~((1 << 13) - 1)) |
- | |
| 350 | - | ||
| 351 | /* |
344 | /* |
| 352 | * This variable is used by the fast_data_MMU_miss trap handler. |
345 | * This variable is used by the fast_data_MMU_miss trap handler. |
| 353 | * It is initialized to reflect the starting address of physical |
346 | * In runtime, it is further modified to reflect the starting address of |
| 354 | * memory. |
347 | * physical memory. |
| 355 | */ |
348 | */ |
| 356 | .global kernel_8k_tlb_data_template |
349 | .global kernel_8k_tlb_data_template |
| 357 | kernel_8k_tlb_data_template: |
350 | kernel_8k_tlb_data_template: |
| 358 | .quad ((1 << TTE_V_SHIFT) | TTE_CV | TTE_CP | TTE_P | TTE_W) |
351 | .quad ((1 << TTE_V_SHIFT) | TTE_CV | TTE_CP | TTE_P | TTE_W) |
| 359 | - | ||