Patchwork 3.0.3 on V120 Panic

login
register
mail settings
Submitter David Miller
Date Aug. 30, 2011, 2:34 a.m.
Message ID <20110829.223404.328606541669023992.davem@davemloft.net>
Download mbox | patch
Permalink /patch/112171/
State Accepted
Delegated to: David Miller
Headers show

Comments

David Miller - Aug. 30, 2011, 2:34 a.m.
From: Ryan <admin@nayr.net>
Date: Mon, 29 Aug 2011 16:58:21 -0600

> Built latest stable kernel and it works perfectly fine on a SunFire
> T1000, tried to install the same kernel on a V120 and this is the
> result from boot:

I know, I hit this myself earlier today, this should fix it:

--
To unsubscribe from this list: send the line "unsubscribe sparclinux" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Ryan - Aug. 30, 2011, 7:29 a.m.
That fixed it, thanks a bunch.. Was a hard day finding out none of the 3.x kernels would boot on this machine.

Cheers,
-R

On Aug 29, 2011, at 8:34 PM, David Miller wrote:

> From: Ryan <admin@nayr.net>
> Date: Mon, 29 Aug 2011 16:58:21 -0600
> 
>> Built latest stable kernel and it works perfectly fine on a SunFire
>> T1000, tried to install the same kernel on a V120 and this is the
>> result from boot:
> 
> I know, I hit this myself earlier today, this should fix it:
> 
> diff --git a/arch/sparc/kernel/setup_64.c b/arch/sparc/kernel/setup_64.c
> index 3e9daea..3c5bb78 100644
> --- a/arch/sparc/kernel/setup_64.c
> +++ b/arch/sparc/kernel/setup_64.c
> @@ -440,8 +440,14 @@ static void __init init_sparc64_elf_hwcap(void)
> 			cap |= AV_SPARC_VIS;
> 		if (tlb_type == cheetah || tlb_type == cheetah_plus)
> 			cap |= AV_SPARC_VIS | AV_SPARC_VIS2;
> -		if (tlb_type == cheetah_plus)
> -			cap |= AV_SPARC_POPC;
> +		if (tlb_type == cheetah_plus) {
> +			unsigned long impl, ver;
> +
> +			__asm__ __volatile__("rdpr %%ver, %0" : "=r" (ver));
> +			impl = ((ver >> 32) & 0xffff);
> +			if (impl == PANTHER_IMPL)
> +				cap |= AV_SPARC_POPC;
> +		}
> 		if (tlb_type == hypervisor) {
> 			if (sun4v_chip_type == SUN4V_CHIP_NIAGARA1)
> 				cap |= AV_SPARC_ASI_BLK_INIT;

Patch

diff --git a/arch/sparc/kernel/setup_64.c b/arch/sparc/kernel/setup_64.c
index 3e9daea..3c5bb78 100644
--- a/arch/sparc/kernel/setup_64.c
+++ b/arch/sparc/kernel/setup_64.c
@@ -440,8 +440,14 @@  static void __init init_sparc64_elf_hwcap(void)
 			cap |= AV_SPARC_VIS;
 		if (tlb_type == cheetah || tlb_type == cheetah_plus)
 			cap |= AV_SPARC_VIS | AV_SPARC_VIS2;
-		if (tlb_type == cheetah_plus)
-			cap |= AV_SPARC_POPC;
+		if (tlb_type == cheetah_plus) {
+			unsigned long impl, ver;
+
+			__asm__ __volatile__("rdpr %%ver, %0" : "=r" (ver));
+			impl = ((ver >> 32) & 0xffff);
+			if (impl == PANTHER_IMPL)
+				cap |= AV_SPARC_POPC;
+		}
 		if (tlb_type == hypervisor) {
 			if (sun4v_chip_type == SUN4V_CHIP_NIAGARA1)
 				cap |= AV_SPARC_ASI_BLK_INIT;