diff mbox series

[2/2] firmware: psci: support SMCCC v1.2 for SMCCC conduit

Message ID 20200514082109.27573-2-etienne.carriere@linaro.org (mailing list archive)
State New, archived
Headers show
Series [1/2] firmware: arm-smccc: define identifier for Arm SMCCC v1.2 | expand

Commit Message

Etienne Carriere May 14, 2020, 8:21 a.m. UTC
Update PSCI driver to support SMCCC v1.2 reported by secure firmware
and indirectly make SMCCC conduit properly set when so. TF-A release
v2.3 implements and reports SMCCC v1.2 since commit [1].

Link: [1] https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git/commit/?id=e34cc0cedca6e229847c232fe58d37fad2610ce9
Signed-off-by: Etienne Carriere <etienne.carriere@linaro.org>
---
 drivers/firmware/psci/psci.c | 14 ++++++++++----
 include/linux/psci.h         |  1 +
 2 files changed, 11 insertions(+), 4 deletions(-)

Comments

Sudeep Holla May 14, 2020, 2:24 p.m. UTC | #1
On Thu, May 14, 2020 at 10:21:09AM +0200, Etienne Carriere wrote:
> Update PSCI driver to support SMCCC v1.2 reported by secure firmware
> and indirectly make SMCCC conduit properly set when so. TF-A release
> v2.3 implements and reports SMCCC v1.2 since commit [1].
> 
> Link: [1] https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git/commit/?id=e34cc0cedca6e229847c232fe58d37fad2610ce9
> Signed-off-by: Etienne Carriere <etienne.carriere@linaro.org>
> ---
>  drivers/firmware/psci/psci.c | 14 ++++++++++----
>  include/linux/psci.h         |  1 +
>  2 files changed, 11 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/firmware/psci/psci.c b/drivers/firmware/psci/psci.c
> index 2937d44b5df4..80cf73bea4b0 100644
> --- a/drivers/firmware/psci/psci.c
> +++ b/drivers/firmware/psci/psci.c
> @@ -409,11 +409,17 @@ static void __init psci_init_smccc(void)
>  	feature = psci_features(ARM_SMCCC_VERSION_FUNC_ID);
>  
>  	if (feature != PSCI_RET_NOT_SUPPORTED) {
> -		u32 ret;
> -		ret = invoke_psci_fn(ARM_SMCCC_VERSION_FUNC_ID, 0, 0, 0);
> -		if (ret == ARM_SMCCC_VERSION_1_1) {
> +		ver = invoke_psci_fn(ARM_SMCCC_VERSION_FUNC_ID, 0, 0, 0);
> +
> +		switch (ver) {
> +		case ARM_SMCCC_VERSION_1_1:
>  			psci_ops.smccc_version = SMCCC_VERSION_1_1;
> -			ver = ret;
> +			break;
> +		case ARM_SMCCC_VERSION_1_2:
> +			psci_ops.smccc_version = SMCCC_VERSION_1_2;
> +			break;
> +		default:
> +			break;
>  		}
>  	}
>  
> diff --git a/include/linux/psci.h b/include/linux/psci.h
> index a67712b73b6c..c7d99b7f34ed 100644
> --- a/include/linux/psci.h
> +++ b/include/linux/psci.h
> @@ -24,6 +24,7 @@ bool psci_has_osi_support(void);
>  enum smccc_version {
>  	SMCCC_VERSION_1_0,
>  	SMCCC_VERSION_1_1,
> +	SMCCC_VERSION_1_2,

I took approach to kill this completely [1] instead of having to keep
expanding it for ever.
Etienne Carriere May 14, 2020, 2:56 p.m. UTC | #2
On Thu, 14 May 2020 at 16:24, Sudeep Holla <sudeep.holla@arm.com> wrote:
>
> On Thu, May 14, 2020 at 10:21:09AM +0200, Etienne Carriere wrote:
> > Update PSCI driver to support SMCCC v1.2 reported by secure firmware
> > and indirectly make SMCCC conduit properly set when so. TF-A release
> > v2.3 implements and reports SMCCC v1.2 since commit [1].
> >
> > Link: [1] https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git/commit/?id=e34cc0cedca6e229847c232fe58d37fad2610ce9
> > Signed-off-by: Etienne Carriere <etienne.carriere@linaro.org>
> > ---
> >  drivers/firmware/psci/psci.c | 14 ++++++++++----
> >  include/linux/psci.h         |  1 +
> >  2 files changed, 11 insertions(+), 4 deletions(-)
> >
> > diff --git a/drivers/firmware/psci/psci.c b/drivers/firmware/psci/psci.c
> > index 2937d44b5df4..80cf73bea4b0 100644
> > --- a/drivers/firmware/psci/psci.c
> > +++ b/drivers/firmware/psci/psci.c
> > @@ -409,11 +409,17 @@ static void __init psci_init_smccc(void)
> >       feature = psci_features(ARM_SMCCC_VERSION_FUNC_ID);
> >
> >       if (feature != PSCI_RET_NOT_SUPPORTED) {
> > -             u32 ret;
> > -             ret = invoke_psci_fn(ARM_SMCCC_VERSION_FUNC_ID, 0, 0, 0);
> > -             if (ret == ARM_SMCCC_VERSION_1_1) {
> > +             ver = invoke_psci_fn(ARM_SMCCC_VERSION_FUNC_ID, 0, 0, 0);
> > +
> > +             switch (ver) {
> > +             case ARM_SMCCC_VERSION_1_1:
> >                       psci_ops.smccc_version = SMCCC_VERSION_1_1;
> > -                     ver = ret;
> > +                     break;
> > +             case ARM_SMCCC_VERSION_1_2:
> > +                     psci_ops.smccc_version = SMCCC_VERSION_1_2;
> > +                     break;
> > +             default:
> > +                     break;
> >               }
> >       }
> >
> > diff --git a/include/linux/psci.h b/include/linux/psci.h
> > index a67712b73b6c..c7d99b7f34ed 100644
> > --- a/include/linux/psci.h
> > +++ b/include/linux/psci.h
> > @@ -24,6 +24,7 @@ bool psci_has_osi_support(void);
> >  enum smccc_version {
> >       SMCCC_VERSION_1_0,
> >       SMCCC_VERSION_1_1,
> > +     SMCCC_VERSION_1_2,
>
> I took approach to kill this completely [1] instead of having to keep
> expanding it for ever.

Yes, I've been pointed to [1]. Discard this change. Sorry for the
(little) noise.

Etienne

> --
> Regards,
> Sudeep
>
> [1] https://lore.kernel.org/linux-arm-kernel/20200506164411.3284-5-sudeep.holla@arm.com/
Sudeep Holla May 15, 2020, 9:24 a.m. UTC | #3
On Thu, May 14, 2020 at 04:56:53PM +0200, Etienne Carriere wrote:
> On Thu, 14 May 2020 at 16:24, Sudeep Holla <sudeep.holla@arm.com> wrote:
> >
> > On Thu, May 14, 2020 at 10:21:09AM +0200, Etienne Carriere wrote:
> > > Update PSCI driver to support SMCCC v1.2 reported by secure firmware
> > > and indirectly make SMCCC conduit properly set when so. TF-A release
> > > v2.3 implements and reports SMCCC v1.2 since commit [1].
> > >
> > > Link: [1] https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git/commit/?id=e34cc0cedca6e229847c232fe58d37fad2610ce9
> > > Signed-off-by: Etienne Carriere <etienne.carriere@linaro.org>
> > > ---
> > >  drivers/firmware/psci/psci.c | 14 ++++++++++----
> > >  include/linux/psci.h         |  1 +
> > >  2 files changed, 11 insertions(+), 4 deletions(-)
> > >
> > > diff --git a/drivers/firmware/psci/psci.c b/drivers/firmware/psci/psci.c
> > > index 2937d44b5df4..80cf73bea4b0 100644
> > > --- a/drivers/firmware/psci/psci.c
> > > +++ b/drivers/firmware/psci/psci.c
> > > @@ -409,11 +409,17 @@ static void __init psci_init_smccc(void)
> > >       feature = psci_features(ARM_SMCCC_VERSION_FUNC_ID);
> > >
> > >       if (feature != PSCI_RET_NOT_SUPPORTED) {
> > > -             u32 ret;
> > > -             ret = invoke_psci_fn(ARM_SMCCC_VERSION_FUNC_ID, 0, 0, 0);
> > > -             if (ret == ARM_SMCCC_VERSION_1_1) {
> > > +             ver = invoke_psci_fn(ARM_SMCCC_VERSION_FUNC_ID, 0, 0, 0);
> > > +
> > > +             switch (ver) {
> > > +             case ARM_SMCCC_VERSION_1_1:
> > >                       psci_ops.smccc_version = SMCCC_VERSION_1_1;
> > > -                     ver = ret;
> > > +                     break;
> > > +             case ARM_SMCCC_VERSION_1_2:
> > > +                     psci_ops.smccc_version = SMCCC_VERSION_1_2;
> > > +                     break;
> > > +             default:
> > > +                     break;
> > >               }
> > >       }
> > >
> > > diff --git a/include/linux/psci.h b/include/linux/psci.h
> > > index a67712b73b6c..c7d99b7f34ed 100644
> > > --- a/include/linux/psci.h
> > > +++ b/include/linux/psci.h
> > > @@ -24,6 +24,7 @@ bool psci_has_osi_support(void);
> > >  enum smccc_version {
> > >       SMCCC_VERSION_1_0,
> > >       SMCCC_VERSION_1_1,
> > > +     SMCCC_VERSION_1_2,
> >
> > I took approach to kill this completely [1] instead of having to keep
> > expanding it for ever.
>
> Yes, I've been pointed to [1]. Discard this change. Sorry for the
> (little) noise.
>

No worries, it's not a noise, just different approach.

--
Regards,
Sudeep
diff mbox series

Patch

diff --git a/drivers/firmware/psci/psci.c b/drivers/firmware/psci/psci.c
index 2937d44b5df4..80cf73bea4b0 100644
--- a/drivers/firmware/psci/psci.c
+++ b/drivers/firmware/psci/psci.c
@@ -409,11 +409,17 @@  static void __init psci_init_smccc(void)
 	feature = psci_features(ARM_SMCCC_VERSION_FUNC_ID);
 
 	if (feature != PSCI_RET_NOT_SUPPORTED) {
-		u32 ret;
-		ret = invoke_psci_fn(ARM_SMCCC_VERSION_FUNC_ID, 0, 0, 0);
-		if (ret == ARM_SMCCC_VERSION_1_1) {
+		ver = invoke_psci_fn(ARM_SMCCC_VERSION_FUNC_ID, 0, 0, 0);
+
+		switch (ver) {
+		case ARM_SMCCC_VERSION_1_1:
 			psci_ops.smccc_version = SMCCC_VERSION_1_1;
-			ver = ret;
+			break;
+		case ARM_SMCCC_VERSION_1_2:
+			psci_ops.smccc_version = SMCCC_VERSION_1_2;
+			break;
+		default:
+			break;
 		}
 	}
 
diff --git a/include/linux/psci.h b/include/linux/psci.h
index a67712b73b6c..c7d99b7f34ed 100644
--- a/include/linux/psci.h
+++ b/include/linux/psci.h
@@ -24,6 +24,7 @@  bool psci_has_osi_support(void);
 enum smccc_version {
 	SMCCC_VERSION_1_0,
 	SMCCC_VERSION_1_1,
+	SMCCC_VERSION_1_2,
 };
 
 struct psci_operations {