diff options
Diffstat (limited to 'arch/sparc/kernel/setup_64.c')
| -rw-r--r-- | arch/sparc/kernel/setup_64.c | 28 | 
1 files changed, 21 insertions, 7 deletions
diff --git a/arch/sparc/kernel/setup_64.c b/arch/sparc/kernel/setup_64.c index 3e9daea1653..c965595aa7e 100644 --- a/arch/sparc/kernel/setup_64.c +++ b/arch/sparc/kernel/setup_64.c @@ -106,7 +106,7 @@ static void __init process_switch(char c)  		prom_halt();  		break;  	case 'p': -		/* Just ignore, this behavior is now the default.  */ +		prom_early_console.flags &= ~CON_BOOT;  		break;  	case 'P':  		/* Force UltraSPARC-III P-Cache on. */ @@ -425,10 +425,14 @@ static void __init init_sparc64_elf_hwcap(void)  	else if (tlb_type == hypervisor) {  		if (sun4v_chip_type == SUN4V_CHIP_NIAGARA1 ||  		    sun4v_chip_type == SUN4V_CHIP_NIAGARA2 || -		    sun4v_chip_type == SUN4V_CHIP_NIAGARA3) +		    sun4v_chip_type == SUN4V_CHIP_NIAGARA3 || +		    sun4v_chip_type == SUN4V_CHIP_NIAGARA4 || +		    sun4v_chip_type == SUN4V_CHIP_NIAGARA5)  			cap |= HWCAP_SPARC_BLKINIT;  		if (sun4v_chip_type == SUN4V_CHIP_NIAGARA2 || -		    sun4v_chip_type == SUN4V_CHIP_NIAGARA3) +		    sun4v_chip_type == SUN4V_CHIP_NIAGARA3 || +		    sun4v_chip_type == SUN4V_CHIP_NIAGARA4 || +		    sun4v_chip_type == SUN4V_CHIP_NIAGARA5)  			cap |= HWCAP_SPARC_N2;  	} @@ -440,17 +444,27 @@ 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;  			if (sun4v_chip_type == SUN4V_CHIP_NIAGARA2 || -			    sun4v_chip_type == SUN4V_CHIP_NIAGARA3) +			    sun4v_chip_type == SUN4V_CHIP_NIAGARA3 || +			    sun4v_chip_type == SUN4V_CHIP_NIAGARA4 || +			    sun4v_chip_type == SUN4V_CHIP_NIAGARA5)  				cap |= (AV_SPARC_VIS | AV_SPARC_VIS2 |  					AV_SPARC_ASI_BLK_INIT |  					AV_SPARC_POPC); -			if (sun4v_chip_type == SUN4V_CHIP_NIAGARA3) +			if (sun4v_chip_type == SUN4V_CHIP_NIAGARA3 || +			    sun4v_chip_type == SUN4V_CHIP_NIAGARA4 || +			    sun4v_chip_type == SUN4V_CHIP_NIAGARA5)  				cap |= (AV_SPARC_VIS3 | AV_SPARC_HPC |  					AV_SPARC_FMAF);  		}  |