Rev 2787 | Rev 3425 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 2787 | Rev 3424 | ||
|---|---|---|---|
| Line 96... | Line 96... | ||
| 96 | 96 | ||
| 97 | jmp %o7 + 8 ! exit point |
97 | jmp %o7 + 8 ! exit point |
| 98 | mov %o1, %o0 |
98 | mov %o1, %o0 |
| 99 | 99 | ||
| 100 | jump_to_kernel: |
100 | jump_to_kernel: |
| - | 101 | /* |
|
| - | 102 | * We have copied code and now we need to guarantee cache coherence. |
|
| - | 103 | * 1. Make sure that the code we have moved has drained to main memory. |
|
| - | 104 | * 2. Invalidate I-cache. |
|
| - | 105 | * 3. Flush instruction pipeline. |
|
| - | 106 | */ |
|
| - | 107 | call icache_flush |
|
| - | 108 | membar #StoreStore |
|
| - | 109 | flush %i7 |
|
| - | 110 | ||
| 101 | mov %o0, %l1 |
111 | mov %o0, %l1 |
| 102 | mov %o1, %o0 |
112 | mov %o1, %o0 |
| 103 | mov %o2, %o1 |
113 | mov %o2, %o1 |
| 104 | mov %o3, %o2 |
114 | mov %o3, %o2 |
| 105 | jmp %l1 ! jump to kernel |
115 | jmp %l1 ! jump to kernel |
| 106 | nop |
116 | nop |
| 107 | 117 | ||
| - | 118 | #define ICACHE_SIZE 8192 |
|
| - | 119 | #define ICACHE_LINE_SIZE 32 |
|
| - | 120 | #define ICACHE_SET_BIT (1 << 13) |
|
| - | 121 | #define ASI_ICACHE_TAG 0x67 |
|
| - | 122 | ||
| - | 123 | # Flush I-cache |
|
| - | 124 | icache_flush: |
|
| - | 125 | set ((ICACHE_SIZE - ICACHE_LINE_SIZE) | ICACHE_SET_BIT), %g1 |
|
| - | 126 | stxa %g0, [%g1] ASI_ICACHE_TAG |
|
| - | 127 | 0: membar #Sync |
|
| - | 128 | subcc %g1, ICACHE_LINE_SIZE, %g1 |
|
| - | 129 | bnz,pt %xcc, 0b |
|
| - | 130 | stxa %g0, [%g1] ASI_ICACHE_TAG |
|
| - | 131 | membar #Sync |
|
| - | 132 | retl |
|
| - | 133 | ! SF Erratum #51 |
|
| - | 134 | nop |
|
| - | 135 | ||
| 108 | .global ofw |
136 | .global ofw |
| 109 | ofw: |
137 | ofw: |
| 110 | save %sp, -STACK_WINDOW_SAVE_AREA_SIZE, %sp |
138 | save %sp, -STACK_WINDOW_SAVE_AREA_SIZE, %sp |
| 111 | set ofw_cif, %l0 |
139 | set ofw_cif, %l0 |
| 112 | ldx [%l0], %l0 |
140 | ldx [%l0], %l0 |