[MIPS] Enable support for the userlocal hardware register
Which will cut down the cost of RDHWR $29 which is used to obtain the TLS pointer and so far being emulated in software down to a single cycle operation. Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:
@@ -588,6 +588,8 @@ static inline unsigned int decode_config3(struct cpuinfo_mips *c)
|
||||
c->options |= MIPS_CPU_VEIC;
|
||||
if (config3 & MIPS_CONF3_MT)
|
||||
c->ases |= MIPS_ASE_MIPSMT;
|
||||
if (config3 & MIPS_CONF3_ULRI)
|
||||
c->options |= MIPS_CPU_ULRI;
|
||||
|
||||
return config3 & MIPS_CONF_M;
|
||||
}
|
||||
|
@@ -272,9 +272,8 @@ asmlinkage int sys_set_thread_area(unsigned long addr)
|
||||
struct thread_info *ti = task_thread_info(current);
|
||||
|
||||
ti->tp_value = addr;
|
||||
|
||||
/* If some future MIPS implementation has this register in hardware,
|
||||
* we will need to update it here (and in context switches). */
|
||||
if (cpu_has_userlocal)
|
||||
write_c0_userlocal(addr);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@@ -1341,7 +1341,14 @@ void __init per_cpu_trap_init(void)
|
||||
set_c0_status(ST0_MX);
|
||||
|
||||
#ifdef CONFIG_CPU_MIPSR2
|
||||
write_c0_hwrena (0x0000000f); /* Allow rdhwr to all registers */
|
||||
if (cpu_has_mips_r2) {
|
||||
unsigned int enable = 0x0000000f;
|
||||
|
||||
if (cpu_has_userlocal)
|
||||
enable |= (1 << 29);
|
||||
|
||||
write_c0_hwrena(enable);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_MIPS_MT_SMTC
|
||||
|
Reference in New Issue
Block a user