diff options
Diffstat (limited to 'arch/powerpc/kernel/prom_init.c')
| -rw-r--r-- | arch/powerpc/kernel/prom_init.c | 30 | 
1 files changed, 19 insertions, 11 deletions
diff --git a/arch/powerpc/kernel/prom_init.c b/arch/powerpc/kernel/prom_init.c index 90c604d00b7d..ae7ec9903191 100644 --- a/arch/powerpc/kernel/prom_init.c +++ b/arch/powerpc/kernel/prom_init.c @@ -169,6 +169,7 @@ static unsigned long __prombss prom_tce_alloc_end;  #ifdef CONFIG_PPC_PSERIES  static bool __prombss prom_radix_disable; +static bool __prombss prom_radix_gtse_disable;  static bool __prombss prom_xive_disable;  #endif @@ -823,6 +824,12 @@ static void __init early_cmdline_parse(void)  	if (prom_radix_disable)  		prom_debug("Radix disabled from cmdline\n"); +	opt = prom_strstr(prom_cmd_line, "radix_hcall_invalidate=on"); +	if (opt) { +		prom_radix_gtse_disable = true; +		prom_debug("Radix GTSE disabled from cmdline\n"); +	} +  	opt = prom_strstr(prom_cmd_line, "xive=off");  	if (opt) {  		prom_xive_disable = true; @@ -1285,10 +1292,8 @@ static void __init prom_parse_platform_support(u8 index, u8 val,  		prom_parse_mmu_model(val & OV5_FEAT(OV5_MMU_SUPPORT), support);  		break;  	case OV5_INDX(OV5_RADIX_GTSE): /* Radix Extensions */ -		if (val & OV5_FEAT(OV5_RADIX_GTSE)) { -			prom_debug("Radix - GTSE supported\n"); -			support->radix_gtse = true; -		} +		if (val & OV5_FEAT(OV5_RADIX_GTSE)) +			support->radix_gtse = !prom_radix_gtse_disable;  		break;  	case OV5_INDX(OV5_XIVE_SUPPORT): /* Interrupt mode */  		prom_parse_xive_model(val & OV5_FEAT(OV5_XIVE_SUPPORT), @@ -1336,12 +1341,15 @@ static void __init prom_check_platform_support(void)  		}  	} -	if (supported.radix_mmu && supported.radix_gtse && -	    IS_ENABLED(CONFIG_PPC_RADIX_MMU)) { -		/* Radix preferred - but we require GTSE for now */ -		prom_debug("Asking for radix with GTSE\n"); +	if (supported.radix_mmu && IS_ENABLED(CONFIG_PPC_RADIX_MMU)) { +		/* Radix preferred - Check if GTSE is also supported */ +		prom_debug("Asking for radix\n");  		ibm_architecture_vec.vec5.mmu = OV5_FEAT(OV5_MMU_RADIX); -		ibm_architecture_vec.vec5.radix_ext = OV5_FEAT(OV5_RADIX_GTSE); +		if (supported.radix_gtse) +			ibm_architecture_vec.vec5.radix_ext = +					OV5_FEAT(OV5_RADIX_GTSE); +		else +			prom_debug("Radix GTSE isn't supported\n");  	} else if (supported.hash_mmu) {  		/* Default to hash mmu (if we can) */  		prom_debug("Asking for hash\n"); @@ -3262,7 +3270,7 @@ static int enter_secure_mode(unsigned long kbase, unsigned long fdt)  /*   * Call the Ultravisor to transfer us to secure memory if we have an ESM blob.   */ -static void setup_secure_guest(unsigned long kbase, unsigned long fdt) +static void __init setup_secure_guest(unsigned long kbase, unsigned long fdt)  {  	int ret; @@ -3292,7 +3300,7 @@ static void setup_secure_guest(unsigned long kbase, unsigned long fdt)  	}  }  #else -static void setup_secure_guest(unsigned long kbase, unsigned long fdt) +static void __init setup_secure_guest(unsigned long kbase, unsigned long fdt)  {  }  #endif /* CONFIG_PPC_SVM */  |