|
@@ -103,37 +103,24 @@
|
|
|
st %scratch, [%cur_reg + TI_W_SAVED];
|
|
|
|
|
|
#ifdef CONFIG_SMP
|
|
|
-/* Results of LOAD_CURRENT() after BTFIXUP for SUN4M, SUN4D & LEON (comments) */
|
|
|
-#define LOAD_CURRENT4M(dest_reg, idreg) \
|
|
|
- rd %tbr, %idreg; \
|
|
|
- sethi %hi(current_set), %dest_reg; \
|
|
|
- srl %idreg, 10, %idreg; \
|
|
|
- or %dest_reg, %lo(current_set), %dest_reg; \
|
|
|
- and %idreg, 0xc, %idreg; \
|
|
|
- ld [%idreg + %dest_reg], %dest_reg;
|
|
|
-
|
|
|
-#define LOAD_CURRENT4D(dest_reg, idreg) \
|
|
|
- lda [%g0] ASI_M_VIKING_TMP1, %idreg; \
|
|
|
- sethi %hi(C_LABEL(current_set)), %dest_reg; \
|
|
|
- sll %idreg, 2, %idreg; \
|
|
|
- or %dest_reg, %lo(C_LABEL(current_set)), %dest_reg; \
|
|
|
- ld [%idreg + %dest_reg], %dest_reg;
|
|
|
-
|
|
|
-#define LOAD_CURRENT_LEON(dest_reg, idreg) \
|
|
|
- rd %asr17, %idreg; \
|
|
|
- sethi %hi(current_set), %dest_reg; \
|
|
|
- srl %idreg, 0x1c, %idreg; \
|
|
|
- or %dest_reg, %lo(current_set), %dest_reg; \
|
|
|
- sll %idreg, 0x2, %idreg; \
|
|
|
- ld [%idreg + %dest_reg], %dest_reg;
|
|
|
-
|
|
|
-/* Blackbox - take care with this... - check smp4m and smp4d before changing this. */
|
|
|
-#define LOAD_CURRENT(dest_reg, idreg) \
|
|
|
- sethi %hi(___b_load_current), %idreg; \
|
|
|
- sethi %hi(current_set), %dest_reg; \
|
|
|
- sethi %hi(boot_cpu_id4), %idreg; \
|
|
|
- or %dest_reg, %lo(current_set), %dest_reg; \
|
|
|
- ldub [%idreg + %lo(boot_cpu_id4)], %idreg; \
|
|
|
+#define LOAD_CURRENT(dest_reg, idreg) \
|
|
|
+661: rd %tbr, %idreg; \
|
|
|
+ srl %idreg, 10, %idreg; \
|
|
|
+ and %idreg, 0xc, %idreg; \
|
|
|
+ .section .cpuid_patch, "ax"; \
|
|
|
+ /* Instruction location. */ \
|
|
|
+ .word 661b; \
|
|
|
+ /* SUN4D implementation. */ \
|
|
|
+ lda [%g0] ASI_M_VIKING_TMP1, %idreg; \
|
|
|
+ sll %idreg, 2, %idreg; \
|
|
|
+ nop; \
|
|
|
+ /* LEON implementation. */ \
|
|
|
+ rd %asr17, %idreg; \
|
|
|
+ srl %idreg, 0x1c, %idreg; \
|
|
|
+ sll %idreg, 0x02, %idreg; \
|
|
|
+ .previous; \
|
|
|
+ sethi %hi(current_set), %dest_reg; \
|
|
|
+ or %dest_reg, %lo(current_set), %dest_reg;\
|
|
|
ld [%idreg + %dest_reg], %dest_reg;
|
|
|
#else
|
|
|
#define LOAD_CURRENT(dest_reg, idreg) \
|