On 27/01/2011 11:06, Daniel Hellstrom wrote:
Signed-off-by: Daniel Hellstrom<daniel@xxxxxxxxxxx> --- arch/sparc/include/asm/psr.h | 51 ++++++++++++++++++++++++++++++++++++++++++ arch/sparc/kernel/cpu.c | 11 +++++--- 2 files changed, 58 insertions(+), 4 deletions(-)
...
diff --git a/arch/sparc/kernel/cpu.c b/arch/sparc/kernel/cpu.c index 7925c54..bc8d5ef 100644 --- a/arch/sparc/kernel/cpu.c +++ b/arch/sparc/kernel/cpu.c @@ -318,15 +318,18 @@ void __cpuinit cpu_probe(void) int psr_impl, psr_vers, fpu_vers; int psr; - psr_impl = ((get_psr()>> 28)& 0xf); - psr_vers = ((get_psr()>> 24)& 0xf); + psr_impl = ((get_psr()& PSR_IMPL)>> PSR_IMPL_SHIFT);
This is going to break. If the top bit of psr_impl is set it will get sign extended when the left shift is done.
+ psr_vers = ((get_psr()& PSR_VERS)>> PSR_VERS_SHIFT); psr = get_psr(); put_psr(psr | PSR_EF); #ifdef CONFIG_SPARC_LEON - fpu_vers = get_psr()& PSR_EF ? ((get_fsr()>> 17)& 0x7) : 7; + if (get_psr()& PSR_EF) + fpu_vers = (get_fsr()& FSR_VER)>> FSR_VER_SHIFT; + else + fpu_vers = FSR_VER_NOFPU; #else - fpu_vers = ((get_fsr()>> 17)& 0x7); + fpu_vers = ((get_fsr()& FSR_VER)>> FSR_VER_SHIFT); #endif put_psr(psr);
-- To unsubscribe from this list: send the line "unsubscribe sparclinux" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html