From mboxrd@z Thu Jan 1 00:00:00 1970 From: Richard Mortimer Date: Thu, 27 Jan 2011 11:14:16 +0000 Subject: Re: [PATCH] sparc: cleaned up FPU version probing Message-Id: <4D415388.7090009@oldelvet.org.uk> List-Id: References: <1296126392-7536-1-git-send-email-daniel@gaisler.com> In-Reply-To: <1296126392-7536-1-git-send-email-daniel@gaisler.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: sparclinux@vger.kernel.org On 27/01/2011 11:06, Daniel Hellstrom wrote: > Signed-off-by: Daniel Hellstrom > --- > 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);