|
@@ -340,10 +340,6 @@ static struct work_registers build_get_work_registers(u32 **p)
|
|
|
{
|
|
|
struct work_registers r;
|
|
|
|
|
|
- int smp_processor_id_reg;
|
|
|
- int smp_processor_id_sel;
|
|
|
- int smp_processor_id_shift;
|
|
|
-
|
|
|
if (scratch_reg >= 0) {
|
|
|
/* Save in CPU local C0_KScratch? */
|
|
|
UASM_i_MTC0(p, 1, c0_kscratch(), scratch_reg);
|
|
@@ -354,25 +350,9 @@ static struct work_registers build_get_work_registers(u32 **p)
|
|
|
}
|
|
|
|
|
|
if (num_possible_cpus() > 1) {
|
|
|
-#ifdef CONFIG_MIPS_PGD_C0_CONTEXT
|
|
|
- smp_processor_id_shift = 51;
|
|
|
- smp_processor_id_reg = 20; /* XContext */
|
|
|
- smp_processor_id_sel = 0;
|
|
|
-#else
|
|
|
-# ifdef CONFIG_32BIT
|
|
|
- smp_processor_id_shift = 25;
|
|
|
- smp_processor_id_reg = 4; /* Context */
|
|
|
- smp_processor_id_sel = 0;
|
|
|
-# endif
|
|
|
-# ifdef CONFIG_64BIT
|
|
|
- smp_processor_id_shift = 26;
|
|
|
- smp_processor_id_reg = 4; /* Context */
|
|
|
- smp_processor_id_sel = 0;
|
|
|
-# endif
|
|
|
-#endif
|
|
|
/* Get smp_processor_id */
|
|
|
- UASM_i_MFC0(p, K0, smp_processor_id_reg, smp_processor_id_sel);
|
|
|
- UASM_i_SRL_SAFE(p, K0, K0, smp_processor_id_shift);
|
|
|
+ UASM_i_CPUID_MFC0(p, K0, SMP_CPUID_REG);
|
|
|
+ UASM_i_SRL_SAFE(p, K0, K0, SMP_CPUID_REGSHIFT);
|
|
|
|
|
|
/* handler_reg_save index in K0 */
|
|
|
UASM_i_SLL(p, K0, K0, ilog2(sizeof(struct tlb_reg_save)));
|
|
@@ -837,20 +817,8 @@ build_get_pmde64(u32 **p, struct uasm_label **l, struct uasm_reloc **r,
|
|
|
uasm_i_drotr(p, ptr, ptr, 11);
|
|
|
}
|
|
|
#elif defined(CONFIG_SMP)
|
|
|
-# ifdef CONFIG_MIPS_MT_SMTC
|
|
|
- /*
|
|
|
- * SMTC uses TCBind value as "CPU" index
|
|
|
- */
|
|
|
- uasm_i_mfc0(p, ptr, C0_TCBIND);
|
|
|
- uasm_i_dsrl_safe(p, ptr, ptr, 19);
|
|
|
-# else
|
|
|
- /*
|
|
|
- * 64 bit SMP running in XKPHYS has smp_processor_id() << 3
|
|
|
- * stored in CONTEXT.
|
|
|
- */
|
|
|
- uasm_i_dmfc0(p, ptr, C0_CONTEXT);
|
|
|
- uasm_i_dsrl_safe(p, ptr, ptr, 23);
|
|
|
-# endif
|
|
|
+ UASM_i_CPUID_MFC0(p, ptr, SMP_CPUID_REG);
|
|
|
+ uasm_i_dsrl_safe(p, ptr, ptr, SMP_CPUID_PTRSHIFT);
|
|
|
UASM_i_LA_mostly(p, tmp, pgdc);
|
|
|
uasm_i_daddu(p, ptr, ptr, tmp);
|
|
|
uasm_i_dmfc0(p, tmp, C0_BADVADDR);
|
|
@@ -957,21 +925,9 @@ build_get_pgde32(u32 **p, unsigned int tmp, unsigned int ptr)
|
|
|
|
|
|
/* 32 bit SMP has smp_processor_id() stored in CONTEXT. */
|
|
|
#ifdef CONFIG_SMP
|
|
|
-#ifdef CONFIG_MIPS_MT_SMTC
|
|
|
- /*
|
|
|
- * SMTC uses TCBind value as "CPU" index
|
|
|
- */
|
|
|
- uasm_i_mfc0(p, ptr, C0_TCBIND);
|
|
|
+ uasm_i_mfc0(p, ptr, SMP_CPUID_REG);
|
|
|
UASM_i_LA_mostly(p, tmp, pgdc);
|
|
|
- uasm_i_srl(p, ptr, ptr, 19);
|
|
|
-#else
|
|
|
- /*
|
|
|
- * smp_processor_id() << 2 is stored in CONTEXT.
|
|
|
- */
|
|
|
- uasm_i_mfc0(p, ptr, C0_CONTEXT);
|
|
|
- UASM_i_LA_mostly(p, tmp, pgdc);
|
|
|
- uasm_i_srl(p, ptr, ptr, 23);
|
|
|
-#endif
|
|
|
+ uasm_i_srl(p, ptr, ptr, SMP_CPUID_PTRSHIFT);
|
|
|
uasm_i_addu(p, ptr, tmp, ptr);
|
|
|
#else
|
|
|
UASM_i_LA_mostly(p, ptr, pgdc);
|