diff options
Diffstat (limited to 'drivers/firmware/psci/psci.c')
| -rw-r--r-- | drivers/firmware/psci/psci.c | 24 | 
1 files changed, 16 insertions, 8 deletions
diff --git a/drivers/firmware/psci/psci.c b/drivers/firmware/psci/psci.c index 84f4ff351c62..b3b6c15e7b36 100644 --- a/drivers/firmware/psci/psci.c +++ b/drivers/firmware/psci/psci.c @@ -53,10 +53,18 @@ bool psci_tos_resident_on(int cpu)  }  struct psci_operations psci_ops = { -	.conduit = PSCI_CONDUIT_NONE, +	.conduit = SMCCC_CONDUIT_NONE,  	.smccc_version = SMCCC_VERSION_1_0,  }; +enum arm_smccc_conduit arm_smccc_1_1_get_conduit(void) +{ +	if (psci_ops.smccc_version < SMCCC_VERSION_1_1) +		return SMCCC_CONDUIT_NONE; + +	return psci_ops.conduit; +} +  typedef unsigned long (psci_fn)(unsigned long, unsigned long,  				unsigned long, unsigned long);  static psci_fn *invoke_psci_fn; @@ -212,13 +220,13 @@ static unsigned long psci_migrate_info_up_cpu(void)  			      0, 0, 0);  } -static void set_conduit(enum psci_conduit conduit) +static void set_conduit(enum arm_smccc_conduit conduit)  {  	switch (conduit) { -	case PSCI_CONDUIT_HVC: +	case SMCCC_CONDUIT_HVC:  		invoke_psci_fn = __invoke_psci_fn_hvc;  		break; -	case PSCI_CONDUIT_SMC: +	case SMCCC_CONDUIT_SMC:  		invoke_psci_fn = __invoke_psci_fn_smc;  		break;  	default: @@ -240,9 +248,9 @@ static int get_set_conduit_method(struct device_node *np)  	}  	if (!strcmp("hvc", method)) { -		set_conduit(PSCI_CONDUIT_HVC); +		set_conduit(SMCCC_CONDUIT_HVC);  	} else if (!strcmp("smc", method)) { -		set_conduit(PSCI_CONDUIT_SMC); +		set_conduit(SMCCC_CONDUIT_SMC);  	} else {  		pr_warn("invalid \"method\" property: %s\n", method);  		return -EINVAL; @@ -583,9 +591,9 @@ int __init psci_acpi_init(void)  	pr_info("probing for conduit method from ACPI.\n");  	if (acpi_psci_use_hvc()) -		set_conduit(PSCI_CONDUIT_HVC); +		set_conduit(SMCCC_CONDUIT_HVC);  	else -		set_conduit(PSCI_CONDUIT_SMC); +		set_conduit(SMCCC_CONDUIT_SMC);  	return psci_probe();  }  | 
