diff mbox

[v9,1/5] ARM: add basic support for Trusted Foundations

Message ID 1382956118-12495-2-git-send-email-acourbot@nvidia.com (mailing list archive)
State New, archived
Headers show

Commit Message

Alexandre Courbot Oct. 28, 2013, 10:28 a.m. UTC
Trusted Foundations is a TrustZone-based secure monitor for ARM that
can be invoked using the same SMC-based API on all supported
platforms. This patch adds initial basic support for Trusted
Foundations using the ARM firmware API. Current features are limited
to the ability to boot secondary processors.

Note: The API followed by Trusted Foundations does *not* follow the SMC
calling conventions. It has nothing to do with PSCI neither and is only
relevant to devices that use Trusted Foundations (like most Tegra-based
retail devices).

Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
Reviewed-by: Tomasz Figa <t.figa@samsung.com>
Reviewed-by: Stephen Warren <swarren@nvidia.com>
---
 .../arm/firmware/tl,trusted-foundations.txt        | 20 ++++++
 .../devicetree/bindings/vendor-prefixes.txt        |  1 +
 arch/arm/Kconfig                                   |  2 +
 arch/arm/Makefile                                  |  1 +
 arch/arm/firmware/Kconfig                          | 28 ++++++++
 arch/arm/firmware/Makefile                         |  1 +
 arch/arm/firmware/trusted_foundations.c            | 79 ++++++++++++++++++++++
 arch/arm/include/asm/trusted_foundations.h         | 67 ++++++++++++++++++
 8 files changed, 199 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundations.txt
 create mode 100644 arch/arm/firmware/Kconfig
 create mode 100644 arch/arm/firmware/Makefile
 create mode 100644 arch/arm/firmware/trusted_foundations.c
 create mode 100644 arch/arm/include/asm/trusted_foundations.h

Comments

Kumar Gala Oct. 28, 2013, 10:57 a.m. UTC | #1
On Oct 28, 2013, at 5:28 AM, Alexandre Courbot wrote:

> Trusted Foundations is a TrustZone-based secure monitor for ARM that
> can be invoked using the same SMC-based API on all supported
> platforms. This patch adds initial basic support for Trusted
> Foundations using the ARM firmware API. Current features are limited
> to the ability to boot secondary processors.
> 
> Note: The API followed by Trusted Foundations does *not* follow the SMC
> calling conventions. It has nothing to do with PSCI neither and is only
> relevant to devices that use Trusted Foundations (like most Tegra-based
> retail devices).
> 
> Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
> Reviewed-by: Tomasz Figa <t.figa@samsung.com>
> Reviewed-by: Stephen Warren <swarren@nvidia.com>
> ---
> .../arm/firmware/tl,trusted-foundations.txt        | 20 ++++++
> .../devicetree/bindings/vendor-prefixes.txt        |  1 +
> arch/arm/Kconfig                                   |  2 +
> arch/arm/Makefile                                  |  1 +
> arch/arm/firmware/Kconfig                          | 28 ++++++++
> arch/arm/firmware/Makefile                         |  1 +
> arch/arm/firmware/trusted_foundations.c            | 79 ++++++++++++++++++++++
> arch/arm/include/asm/trusted_foundations.h         | 67 ++++++++++++++++++
> 8 files changed, 199 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundations.txt
> create mode 100644 arch/arm/firmware/Kconfig
> create mode 100644 arch/arm/firmware/Makefile
> create mode 100644 arch/arm/firmware/trusted_foundations.c
> create mode 100644 arch/arm/include/asm/trusted_foundations.h
> 
> diff --git a/Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundations.txt b/Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundations.txt
> new file mode 100644
> index 0000000..2ec75c9
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundations.txt
> @@ -0,0 +1,20 @@
> +Trusted Foundations
> +-------------------
> +
> +Boards that use the Trusted Foundations secure monitor can signal its
> +presence by declaring a node compatible with "tl,trusted-foundations"
> +under the /firmware/ node
> +
> +Required properties:
> +- compatible : "tl,trusted-foundations"
> +- version-major : major version number of Trusted Foundations firmware
> +- version-minor: minor version number of Trusted Foundations firmware

vendor prefix version.

> +
> +Example:
> +	firmware {
> +		trusted-foundations {
> +			compatible = "tl,trusted-foundations";
> +			version-major = <2>;
> +			version-minor = <8>;
> +		};
> +	};
> diff --git a/Documentation/devicetree/bindings/vendor-prefixes.txt b/Documentation/devicetree/bindings/vendor-prefixes.txt
> index 2956800..a374eaa 100644
> --- a/Documentation/devicetree/bindings/vendor-prefixes.txt
> +++ b/Documentation/devicetree/bindings/vendor-prefixes.txt
> @@ -66,6 +66,7 @@ ste	ST-Ericsson
> stericsson	ST-Ericsson
> toumaz	Toumaz
> ti	Texas Instruments
> +tl	Trusted Logic

Should this be Trusted Logic Mobility (tlm)?


> toshiba	Toshiba Corporation
> v3	V3 Semiconductor
> via	VIA Technologies, Inc.

- k
Olof Johansson Oct. 28, 2013, 9:56 p.m. UTC | #2
On Mon, Oct 28, 2013 at 05:57:04AM -0500, Kumar Gala wrote:
> 
> On Oct 28, 2013, at 5:28 AM, Alexandre Courbot wrote:
> 
> > Trusted Foundations is a TrustZone-based secure monitor for ARM that
> > can be invoked using the same SMC-based API on all supported
> > platforms. This patch adds initial basic support for Trusted
> > Foundations using the ARM firmware API. Current features are limited
> > to the ability to boot secondary processors.
> > 
> > Note: The API followed by Trusted Foundations does *not* follow the SMC
> > calling conventions. It has nothing to do with PSCI neither and is only
> > relevant to devices that use Trusted Foundations (like most Tegra-based
> > retail devices).
> > 
> > Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
> > Reviewed-by: Tomasz Figa <t.figa@samsung.com>
> > Reviewed-by: Stephen Warren <swarren@nvidia.com>
> > ---
> > .../arm/firmware/tl,trusted-foundations.txt        | 20 ++++++
> > .../devicetree/bindings/vendor-prefixes.txt        |  1 +
> > arch/arm/Kconfig                                   |  2 +
> > arch/arm/Makefile                                  |  1 +
> > arch/arm/firmware/Kconfig                          | 28 ++++++++
> > arch/arm/firmware/Makefile                         |  1 +
> > arch/arm/firmware/trusted_foundations.c            | 79 ++++++++++++++++++++++
> > arch/arm/include/asm/trusted_foundations.h         | 67 ++++++++++++++++++
> > 8 files changed, 199 insertions(+)
> > create mode 100644 Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundations.txt
> > create mode 100644 arch/arm/firmware/Kconfig
> > create mode 100644 arch/arm/firmware/Makefile
> > create mode 100644 arch/arm/firmware/trusted_foundations.c
> > create mode 100644 arch/arm/include/asm/trusted_foundations.h
> > 
> > diff --git a/Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundations.txt b/Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundations.txt
> > new file mode 100644
> > index 0000000..2ec75c9
> > --- /dev/null
> > +++ b/Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundations.txt
> > @@ -0,0 +1,20 @@
> > +Trusted Foundations
> > +-------------------
> > +
> > +Boards that use the Trusted Foundations secure monitor can signal its
> > +presence by declaring a node compatible with "tl,trusted-foundations"
> > +under the /firmware/ node
> > +
> > +Required properties:
> > +- compatible : "tl,trusted-foundations"
> > +- version-major : major version number of Trusted Foundations firmware
> > +- version-minor: minor version number of Trusted Foundations firmware
> 
> vendor prefix version.

Are you saying he should use tl,version-major tl,version-minor? For bindings
that are already vendor-specific we haven't (on ARM) asked for vendor prefix on
properties. It doesn't mean that we should keep going down that route though,
so I'm just asking for clarification for my own edification. :)


-Olof
Tomasz Figa Oct. 28, 2013, 11:31 p.m. UTC | #3
On Monday 28 of October 2013 14:56:49 Olof Johansson wrote:
> On Mon, Oct 28, 2013 at 05:57:04AM -0500, Kumar Gala wrote:
> > On Oct 28, 2013, at 5:28 AM, Alexandre Courbot wrote:
> > > Trusted Foundations is a TrustZone-based secure monitor for ARM that
> > > can be invoked using the same SMC-based API on all supported
> > > platforms. This patch adds initial basic support for Trusted
> > > Foundations using the ARM firmware API. Current features are limited
> > > to the ability to boot secondary processors.
> > > 
> > > Note: The API followed by Trusted Foundations does *not* follow the
> > > SMC
> > > calling conventions. It has nothing to do with PSCI neither and is
> > > only
> > > relevant to devices that use Trusted Foundations (like most
> > > Tegra-based
> > > retail devices).
> > > 
> > > Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
> > > Reviewed-by: Tomasz Figa <t.figa@samsung.com>
> > > Reviewed-by: Stephen Warren <swarren@nvidia.com>
> > > ---
> > > .../arm/firmware/tl,trusted-foundations.txt        | 20 ++++++
> > > .../devicetree/bindings/vendor-prefixes.txt        |  1 +
> > > arch/arm/Kconfig                                   |  2 +
> > > arch/arm/Makefile                                  |  1 +
> > > arch/arm/firmware/Kconfig                          | 28 ++++++++
> > > arch/arm/firmware/Makefile                         |  1 +
> > > arch/arm/firmware/trusted_foundations.c            | 79
> > > ++++++++++++++++++++++ arch/arm/include/asm/trusted_foundations.h  
> > >       | 67 ++++++++++++++++++ 8 files changed, 199 insertions(+)
> > > create mode 100644
> > > Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundatio
> > > ns.txt create mode 100644 arch/arm/firmware/Kconfig
> > > create mode 100644 arch/arm/firmware/Makefile
> > > create mode 100644 arch/arm/firmware/trusted_foundations.c
> > > create mode 100644 arch/arm/include/asm/trusted_foundations.h
> > > 
> > > diff --git
> > > a/Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundat
> > > ions.txt
> > > b/Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundat
> > > ions.txt new file mode 100644
> > > index 0000000..2ec75c9
> > > --- /dev/null
> > > +++
> > > b/Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundat
> > > ions.txt @@ -0,0 +1,20 @@
> > > +Trusted Foundations
> > > +-------------------
> > > +
> > > +Boards that use the Trusted Foundations secure monitor can signal
> > > its
> > > +presence by declaring a node compatible with
> > > "tl,trusted-foundations"
> > > +under the /firmware/ node
> > > +
> > > +Required properties:
> > > +- compatible : "tl,trusted-foundations"
> > > +- version-major : major version number of Trusted Foundations
> > > firmware
> > > +- version-minor: minor version number of Trusted Foundations
> > > firmware
> > 
> > vendor prefix version.
> 
> Are you saying he should use tl,version-major tl,version-minor? For
> bindings that are already vendor-specific we haven't (on ARM) asked for
> vendor prefix on properties. It doesn't mean that we should keep going
> down that route though, so I'm just asking for clarification for my own
> edification. :)

This is a good question. We should decide what the right thing (TM) is and 
write it down. I, on the contrary, was convinced that it's the way Kumar 
says.

Best regards,
Tomasz
Mark Rutland Oct. 29, 2013, 12:25 a.m. UTC | #4
On Mon, Oct 28, 2013 at 11:31:36PM +0000, Tomasz Figa wrote:
> On Monday 28 of October 2013 14:56:49 Olof Johansson wrote:
> > On Mon, Oct 28, 2013 at 05:57:04AM -0500, Kumar Gala wrote:
> > > On Oct 28, 2013, at 5:28 AM, Alexandre Courbot wrote:
> > > > Trusted Foundations is a TrustZone-based secure monitor for ARM that
> > > > can be invoked using the same SMC-based API on all supported
> > > > platforms. This patch adds initial basic support for Trusted
> > > > Foundations using the ARM firmware API. Current features are limited
> > > > to the ability to boot secondary processors.
> > > > 
> > > > Note: The API followed by Trusted Foundations does *not* follow the
> > > > SMC
> > > > calling conventions. It has nothing to do with PSCI neither and is
> > > > only
> > > > relevant to devices that use Trusted Foundations (like most
> > > > Tegra-based
> > > > retail devices).
> > > > 
> > > > Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
> > > > Reviewed-by: Tomasz Figa <t.figa@samsung.com>
> > > > Reviewed-by: Stephen Warren <swarren@nvidia.com>
> > > > ---
> > > > .../arm/firmware/tl,trusted-foundations.txt        | 20 ++++++
> > > > .../devicetree/bindings/vendor-prefixes.txt        |  1 +
> > > > arch/arm/Kconfig                                   |  2 +
> > > > arch/arm/Makefile                                  |  1 +
> > > > arch/arm/firmware/Kconfig                          | 28 ++++++++
> > > > arch/arm/firmware/Makefile                         |  1 +
> > > > arch/arm/firmware/trusted_foundations.c            | 79
> > > > ++++++++++++++++++++++ arch/arm/include/asm/trusted_foundations.h  
> > > >       | 67 ++++++++++++++++++ 8 files changed, 199 insertions(+)
> > > > create mode 100644
> > > > Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundatio
> > > > ns.txt create mode 100644 arch/arm/firmware/Kconfig
> > > > create mode 100644 arch/arm/firmware/Makefile
> > > > create mode 100644 arch/arm/firmware/trusted_foundations.c
> > > > create mode 100644 arch/arm/include/asm/trusted_foundations.h
> > > > 
> > > > diff --git
> > > > a/Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundat
> > > > ions.txt
> > > > b/Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundat
> > > > ions.txt new file mode 100644
> > > > index 0000000..2ec75c9
> > > > --- /dev/null
> > > > +++
> > > > b/Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundat
> > > > ions.txt @@ -0,0 +1,20 @@
> > > > +Trusted Foundations
> > > > +-------------------
> > > > +
> > > > +Boards that use the Trusted Foundations secure monitor can signal
> > > > its
> > > > +presence by declaring a node compatible with
> > > > "tl,trusted-foundations"
> > > > +under the /firmware/ node
> > > > +
> > > > +Required properties:
> > > > +- compatible : "tl,trusted-foundations"
> > > > +- version-major : major version number of Trusted Foundations
> > > > firmware
> > > > +- version-minor: minor version number of Trusted Foundations
> > > > firmware
> > > 
> > > vendor prefix version.
> > 
> > Are you saying he should use tl,version-major tl,version-minor? For
> > bindings that are already vendor-specific we haven't (on ARM) asked for
> > vendor prefix on properties. It doesn't mean that we should keep going
> > down that route though, so I'm just asking for clarification for my own
> > edification. :)
> 
> This is a good question. We should decide what the right thing (TM) is and 
> write it down. I, on the contrary, was convinced that it's the way Kumar 
> says.

The impression I got was that properties should be prefixed when they're
extremely vendor-specific and could clash with a more generic property. I'm not
sure that firmware will ever have a generic binding given the variation even in
the set of implemented functionality.

I would imagine that there are many ways different firmwares might be
versioned, and I can't see version-major or version-minor clashing with a
generic property we might add later. However prefixing would not be harmful, so
I'm not opposed to it if others want that.

Another option would be to support a fallback compatible list (e.g.
"tl,trusted-foundations-${MAJOR}-${MINOR}", "tl,trusted-foundations"), and get
versioning information from there. Given that could be painful to handle I
don't want to force it if not required.

Thanks,
Mark.
Kumar Gala Oct. 29, 2013, 8:12 a.m. UTC | #5
On Oct 28, 2013, at 7:25 PM, Mark Rutland wrote:

> On Mon, Oct 28, 2013 at 11:31:36PM +0000, Tomasz Figa wrote:
>> On Monday 28 of October 2013 14:56:49 Olof Johansson wrote:
>>> On Mon, Oct 28, 2013 at 05:57:04AM -0500, Kumar Gala wrote:
>>>> On Oct 28, 2013, at 5:28 AM, Alexandre Courbot wrote:
>>>>> Trusted Foundations is a TrustZone-based secure monitor for ARM that
>>>>> can be invoked using the same SMC-based API on all supported
>>>>> platforms. This patch adds initial basic support for Trusted
>>>>> Foundations using the ARM firmware API. Current features are limited
>>>>> to the ability to boot secondary processors.
>>>>> 
>>>>> Note: The API followed by Trusted Foundations does *not* follow the
>>>>> SMC
>>>>> calling conventions. It has nothing to do with PSCI neither and is
>>>>> only
>>>>> relevant to devices that use Trusted Foundations (like most
>>>>> Tegra-based
>>>>> retail devices).
>>>>> 
>>>>> Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
>>>>> Reviewed-by: Tomasz Figa <t.figa@samsung.com>
>>>>> Reviewed-by: Stephen Warren <swarren@nvidia.com>
>>>>> ---
>>>>> .../arm/firmware/tl,trusted-foundations.txt        | 20 ++++++
>>>>> .../devicetree/bindings/vendor-prefixes.txt        |  1 +
>>>>> arch/arm/Kconfig                                   |  2 +
>>>>> arch/arm/Makefile                                  |  1 +
>>>>> arch/arm/firmware/Kconfig                          | 28 ++++++++
>>>>> arch/arm/firmware/Makefile                         |  1 +
>>>>> arch/arm/firmware/trusted_foundations.c            | 79
>>>>> ++++++++++++++++++++++ arch/arm/include/asm/trusted_foundations.h  
>>>>>      | 67 ++++++++++++++++++ 8 files changed, 199 insertions(+)
>>>>> create mode 100644
>>>>> Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundatio
>>>>> ns.txt create mode 100644 arch/arm/firmware/Kconfig
>>>>> create mode 100644 arch/arm/firmware/Makefile
>>>>> create mode 100644 arch/arm/firmware/trusted_foundations.c
>>>>> create mode 100644 arch/arm/include/asm/trusted_foundations.h
>>>>> 
>>>>> diff --git
>>>>> a/Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundat
>>>>> ions.txt
>>>>> b/Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundat
>>>>> ions.txt new file mode 100644
>>>>> index 0000000..2ec75c9
>>>>> --- /dev/null
>>>>> +++
>>>>> b/Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundat
>>>>> ions.txt @@ -0,0 +1,20 @@
>>>>> +Trusted Foundations
>>>>> +-------------------
>>>>> +
>>>>> +Boards that use the Trusted Foundations secure monitor can signal
>>>>> its
>>>>> +presence by declaring a node compatible with
>>>>> "tl,trusted-foundations"
>>>>> +under the /firmware/ node
>>>>> +
>>>>> +Required properties:
>>>>> +- compatible : "tl,trusted-foundations"
>>>>> +- version-major : major version number of Trusted Foundations
>>>>> firmware
>>>>> +- version-minor: minor version number of Trusted Foundations
>>>>> firmware
>>>> 
>>>> vendor prefix version.
>>> 
>>> Are you saying he should use tl,version-major tl,version-minor? For
>>> bindings that are already vendor-specific we haven't (on ARM) asked for
>>> vendor prefix on properties. It doesn't mean that we should keep going
>>> down that route though, so I'm just asking for clarification for my own
>>> edification. :)
>> 
>> This is a good question. We should decide what the right thing (TM) is and 
>> write it down. I, on the contrary, was convinced that it's the way Kumar 
>> says.
> 
> The impression I got was that properties should be prefixed when they're
> extremely vendor-specific and could clash with a more generic property. I'm not
> sure that firmware will ever have a generic binding given the variation even in
> the set of implemented functionality.
> 
> I would imagine that there are many ways different firmwares might be
> versioned, and I can't see version-major or version-minor clashing with a
> generic property we might add later. However prefixing would not be harmful, so
> I'm not opposed to it if others want that.
> 
> Another option would be to support a fallback compatible list (e.g.
> "tl,trusted-foundations-${MAJOR}-${MINOR}", "tl,trusted-foundations"), and get
> versioning information from there. Given that could be painful to handle I
> don't want to force it if not required.
> 
> Thanks,
> Mark.

I'm of the opinion that making all vendor specific properties vendor prefixed is the easiest rule of thumb and leaves no gray area to have to argue about.

- k
Matt Porter Oct. 29, 2013, 6:39 p.m. UTC | #6
On Tue, Oct 29, 2013 at 03:12:05AM -0500, Kumar Gala wrote:
> 
> On Oct 28, 2013, at 7:25 PM, Mark Rutland wrote:
> 
> > On Mon, Oct 28, 2013 at 11:31:36PM +0000, Tomasz Figa wrote:
> >> On Monday 28 of October 2013 14:56:49 Olof Johansson wrote:
> >>> On Mon, Oct 28, 2013 at 05:57:04AM -0500, Kumar Gala wrote:
> >>>> On Oct 28, 2013, at 5:28 AM, Alexandre Courbot wrote:
> >>>>> Trusted Foundations is a TrustZone-based secure monitor for ARM that
> >>>>> can be invoked using the same SMC-based API on all supported
> >>>>> platforms. This patch adds initial basic support for Trusted
> >>>>> Foundations using the ARM firmware API. Current features are limited
> >>>>> to the ability to boot secondary processors.
> >>>>> 
> >>>>> Note: The API followed by Trusted Foundations does *not* follow the
> >>>>> SMC
> >>>>> calling conventions. It has nothing to do with PSCI neither and is
> >>>>> only
> >>>>> relevant to devices that use Trusted Foundations (like most
> >>>>> Tegra-based
> >>>>> retail devices).
> >>>>> 
> >>>>> Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
> >>>>> Reviewed-by: Tomasz Figa <t.figa@samsung.com>
> >>>>> Reviewed-by: Stephen Warren <swarren@nvidia.com>
> >>>>> ---
> >>>>> .../arm/firmware/tl,trusted-foundations.txt        | 20 ++++++
> >>>>> .../devicetree/bindings/vendor-prefixes.txt        |  1 +
> >>>>> arch/arm/Kconfig                                   |  2 +
> >>>>> arch/arm/Makefile                                  |  1 +
> >>>>> arch/arm/firmware/Kconfig                          | 28 ++++++++
> >>>>> arch/arm/firmware/Makefile                         |  1 +
> >>>>> arch/arm/firmware/trusted_foundations.c            | 79
> >>>>> ++++++++++++++++++++++ arch/arm/include/asm/trusted_foundations.h  
> >>>>>      | 67 ++++++++++++++++++ 8 files changed, 199 insertions(+)
> >>>>> create mode 100644
> >>>>> Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundatio
> >>>>> ns.txt create mode 100644 arch/arm/firmware/Kconfig
> >>>>> create mode 100644 arch/arm/firmware/Makefile
> >>>>> create mode 100644 arch/arm/firmware/trusted_foundations.c
> >>>>> create mode 100644 arch/arm/include/asm/trusted_foundations.h
> >>>>> 
> >>>>> diff --git
> >>>>> a/Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundat
> >>>>> ions.txt
> >>>>> b/Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundat
> >>>>> ions.txt new file mode 100644
> >>>>> index 0000000..2ec75c9
> >>>>> --- /dev/null
> >>>>> +++
> >>>>> b/Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundat
> >>>>> ions.txt @@ -0,0 +1,20 @@
> >>>>> +Trusted Foundations
> >>>>> +-------------------
> >>>>> +
> >>>>> +Boards that use the Trusted Foundations secure monitor can signal
> >>>>> its
> >>>>> +presence by declaring a node compatible with
> >>>>> "tl,trusted-foundations"
> >>>>> +under the /firmware/ node
> >>>>> +
> >>>>> +Required properties:
> >>>>> +- compatible : "tl,trusted-foundations"
> >>>>> +- version-major : major version number of Trusted Foundations
> >>>>> firmware
> >>>>> +- version-minor: minor version number of Trusted Foundations
> >>>>> firmware
> >>>> 
> >>>> vendor prefix version.
> >>> 
> >>> Are you saying he should use tl,version-major tl,version-minor? For
> >>> bindings that are already vendor-specific we haven't (on ARM) asked for
> >>> vendor prefix on properties. It doesn't mean that we should keep going
> >>> down that route though, so I'm just asking for clarification for my own
> >>> edification. :)
> >> 
> >> This is a good question. We should decide what the right thing (TM) is and 
> >> write it down. I, on the contrary, was convinced that it's the way Kumar 
> >> says.
> > 
> > The impression I got was that properties should be prefixed when they're
> > extremely vendor-specific and could clash with a more generic property. I'm not
> > sure that firmware will ever have a generic binding given the variation even in
> > the set of implemented functionality.
> > 
> > I would imagine that there are many ways different firmwares might be
> > versioned, and I can't see version-major or version-minor clashing with a
> > generic property we might add later. However prefixing would not be harmful, so
> > I'm not opposed to it if others want that.
> > 
> > Another option would be to support a fallback compatible list (e.g.
> > "tl,trusted-foundations-${MAJOR}-${MINOR}", "tl,trusted-foundations"), and get
> > versioning information from there. Given that could be painful to handle I
> > don't want to force it if not required.
> > 
> > Thanks,
> > Mark.
> 
> I'm of the opinion that making all vendor specific properties vendor prefixed is the easiest rule of thumb and leaves no gray area to have to argue about.

That would really help all of us to self-police our submissions and
reduce the burden on the DT maintainer team.

-Matt
Alexandre Courbot Oct. 30, 2013, 3:07 a.m. UTC | #7
On 10/29/2013 05:12 PM, Kumar Gala wrote:
>
> On Oct 28, 2013, at 7:25 PM, Mark Rutland wrote:
>
>> On Mon, Oct 28, 2013 at 11:31:36PM +0000, Tomasz Figa wrote:
>>> On Monday 28 of October 2013 14:56:49 Olof Johansson wrote:
>>>> On Mon, Oct 28, 2013 at 05:57:04AM -0500, Kumar Gala wrote:
>>>>> On Oct 28, 2013, at 5:28 AM, Alexandre Courbot wrote:
>>>>>> Trusted Foundations is a TrustZone-based secure monitor for ARM that
>>>>>> can be invoked using the same SMC-based API on all supported
>>>>>> platforms. This patch adds initial basic support for Trusted
>>>>>> Foundations using the ARM firmware API. Current features are limited
>>>>>> to the ability to boot secondary processors.
>>>>>>
>>>>>> Note: The API followed by Trusted Foundations does *not* follow the
>>>>>> SMC
>>>>>> calling conventions. It has nothing to do with PSCI neither and is
>>>>>> only
>>>>>> relevant to devices that use Trusted Foundations (like most
>>>>>> Tegra-based
>>>>>> retail devices).
>>>>>>
>>>>>> Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
>>>>>> Reviewed-by: Tomasz Figa <t.figa@samsung.com>
>>>>>> Reviewed-by: Stephen Warren <swarren@nvidia.com>
>>>>>> ---
>>>>>> .../arm/firmware/tl,trusted-foundations.txt        | 20 ++++++
>>>>>> .../devicetree/bindings/vendor-prefixes.txt        |  1 +
>>>>>> arch/arm/Kconfig                                   |  2 +
>>>>>> arch/arm/Makefile                                  |  1 +
>>>>>> arch/arm/firmware/Kconfig                          | 28 ++++++++
>>>>>> arch/arm/firmware/Makefile                         |  1 +
>>>>>> arch/arm/firmware/trusted_foundations.c            | 79
>>>>>> ++++++++++++++++++++++ arch/arm/include/asm/trusted_foundations.h
>>>>>>       | 67 ++++++++++++++++++ 8 files changed, 199 insertions(+)
>>>>>> create mode 100644
>>>>>> Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundatio
>>>>>> ns.txt create mode 100644 arch/arm/firmware/Kconfig
>>>>>> create mode 100644 arch/arm/firmware/Makefile
>>>>>> create mode 100644 arch/arm/firmware/trusted_foundations.c
>>>>>> create mode 100644 arch/arm/include/asm/trusted_foundations.h
>>>>>>
>>>>>> diff --git
>>>>>> a/Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundat
>>>>>> ions.txt
>>>>>> b/Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundat
>>>>>> ions.txt new file mode 100644
>>>>>> index 0000000..2ec75c9
>>>>>> --- /dev/null
>>>>>> +++
>>>>>> b/Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundat
>>>>>> ions.txt @@ -0,0 +1,20 @@
>>>>>> +Trusted Foundations
>>>>>> +-------------------
>>>>>> +
>>>>>> +Boards that use the Trusted Foundations secure monitor can signal
>>>>>> its
>>>>>> +presence by declaring a node compatible with
>>>>>> "tl,trusted-foundations"
>>>>>> +under the /firmware/ node
>>>>>> +
>>>>>> +Required properties:
>>>>>> +- compatible : "tl,trusted-foundations"
>>>>>> +- version-major : major version number of Trusted Foundations
>>>>>> firmware
>>>>>> +- version-minor: minor version number of Trusted Foundations
>>>>>> firmware
>>>>>
>>>>> vendor prefix version.
>>>>
>>>> Are you saying he should use tl,version-major tl,version-minor? For
>>>> bindings that are already vendor-specific we haven't (on ARM) asked for
>>>> vendor prefix on properties. It doesn't mean that we should keep going
>>>> down that route though, so I'm just asking for clarification for my own
>>>> edification. :)
>>>
>>> This is a good question. We should decide what the right thing (TM) is and
>>> write it down. I, on the contrary, was convinced that it's the way Kumar
>>> says.
>>
>> The impression I got was that properties should be prefixed when they're
>> extremely vendor-specific and could clash with a more generic property. I'm not
>> sure that firmware will ever have a generic binding given the variation even in
>> the set of implemented functionality.
>>
>> I would imagine that there are many ways different firmwares might be
>> versioned, and I can't see version-major or version-minor clashing with a
>> generic property we might add later. However prefixing would not be harmful, so
>> I'm not opposed to it if others want that.
>>
>> Another option would be to support a fallback compatible list (e.g.
>> "tl,trusted-foundations-${MAJOR}-${MINOR}", "tl,trusted-foundations"), and get
>> versioning information from there. Given that could be painful to handle I
>> don't want to force it if not required.
>>
>> Thanks,
>> Mark.
>
> I'm of the opinion that making all vendor specific properties vendor prefixed is the easiest rule of thumb and leaves no gray area to have to argue about.

All good points, I will vendor-prefix these properties.

Thanks,
Alex.
diff mbox

Patch

diff --git a/Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundations.txt b/Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundations.txt
new file mode 100644
index 0000000..2ec75c9
--- /dev/null
+++ b/Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundations.txt
@@ -0,0 +1,20 @@ 
+Trusted Foundations
+-------------------
+
+Boards that use the Trusted Foundations secure monitor can signal its
+presence by declaring a node compatible with "tl,trusted-foundations"
+under the /firmware/ node
+
+Required properties:
+- compatible : "tl,trusted-foundations"
+- version-major : major version number of Trusted Foundations firmware
+- version-minor: minor version number of Trusted Foundations firmware
+
+Example:
+	firmware {
+		trusted-foundations {
+			compatible = "tl,trusted-foundations";
+			version-major = <2>;
+			version-minor = <8>;
+		};
+	};
diff --git a/Documentation/devicetree/bindings/vendor-prefixes.txt b/Documentation/devicetree/bindings/vendor-prefixes.txt
index 2956800..a374eaa 100644
--- a/Documentation/devicetree/bindings/vendor-prefixes.txt
+++ b/Documentation/devicetree/bindings/vendor-prefixes.txt
@@ -66,6 +66,7 @@  ste	ST-Ericsson
 stericsson	ST-Ericsson
 toumaz	Toumaz
 ti	Texas Instruments
+tl	Trusted Logic
 toshiba	Toshiba Corporation
 v3	V3 Semiconductor
 via	VIA Technologies, Inc.
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 1ad6fb6..bf14cec 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -1076,6 +1076,8 @@  config ARM_TIMER_SP804
 	select CLKSRC_MMIO
 	select CLKSRC_OF if OF
 
+source "arch/arm/firmware/Kconfig"
+
 source arch/arm/mm/Kconfig
 
 config ARM_NR_BANKS
diff --git a/arch/arm/Makefile b/arch/arm/Makefile
index db50b62..f9a8e93 100644
--- a/arch/arm/Makefile
+++ b/arch/arm/Makefile
@@ -268,6 +268,7 @@  core-$(CONFIG_KVM_ARM_HOST) 	+= arch/arm/kvm/
 core-y				+= arch/arm/kernel/ arch/arm/mm/ arch/arm/common/
 core-y				+= arch/arm/net/
 core-y				+= arch/arm/crypto/
+core-y				+= arch/arm/firmware/
 core-y				+= $(machdirs) $(platdirs)
 
 drivers-$(CONFIG_OPROFILE)      += arch/arm/oprofile/
diff --git a/arch/arm/firmware/Kconfig b/arch/arm/firmware/Kconfig
new file mode 100644
index 0000000..bb00ccf
--- /dev/null
+++ b/arch/arm/firmware/Kconfig
@@ -0,0 +1,28 @@ 
+config ARCH_SUPPORTS_FIRMWARE
+	bool
+
+config ARCH_SUPPORTS_TRUSTED_FOUNDATIONS
+	bool
+	select ARCH_SUPPORTS_FIRMWARE
+
+menu "Firmware options"
+	depends on ARCH_SUPPORTS_FIRMWARE
+
+config TRUSTED_FOUNDATIONS
+	bool "Trusted Foundations secure monitor support"
+	depends on ARCH_SUPPORTS_TRUSTED_FOUNDATIONS
+	help
+	  Some devices (including most Tegra-based consumer devices on the
+	  market) are booted with the Trusted Foundations secure monitor
+	  active, requiring some core operations to be performed by the secure
+	  monitor instead of the kernel.
+
+	  This option allows the kernel to invoke the secure monitor whenever
+	  required on devices using Trusted Foundations. See
+	  arch/arm/include/asm/trusted_foundations.h or the
+	  tl,trusted-foundations device tree binding documentation for details
+	  on how to use it.
+
+	  Say n if you don't know what this is about.
+
+endmenu
diff --git a/arch/arm/firmware/Makefile b/arch/arm/firmware/Makefile
new file mode 100644
index 0000000..a71f165
--- /dev/null
+++ b/arch/arm/firmware/Makefile
@@ -0,0 +1 @@ 
+obj-$(CONFIG_TRUSTED_FOUNDATIONS)	+= trusted_foundations.o
diff --git a/arch/arm/firmware/trusted_foundations.c b/arch/arm/firmware/trusted_foundations.c
new file mode 100644
index 0000000..fe063d5
--- /dev/null
+++ b/arch/arm/firmware/trusted_foundations.c
@@ -0,0 +1,79 @@ 
+/*
+ * Trusted Foundations support for ARM CPUs
+ *
+ * Copyright (c) 2013, NVIDIA Corporation.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ */
+
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/of.h>
+#include <asm/firmware.h>
+#include <asm/trusted_foundations.h>
+
+#define TF_SET_CPU_BOOT_ADDR_SMC 0xfffff200
+
+static void __naked tf_generic_smc(u32 type, u32 arg1, u32 arg2)
+{
+	asm volatile(
+		".arch_extension	sec\n\t"
+		"stmfd	sp!, {r4 - r11, lr}\n\t"
+		__asmeq("%0", "r0")
+		__asmeq("%1", "r1")
+		__asmeq("%2", "r2")
+		"mov	r3, #0\n\t"
+		"mov	r4, #0\n\t"
+		"smc	#0\n\t"
+		"ldmfd	sp!, {r4 - r11, pc}"
+		:
+		: "r" (type), "r" (arg1), "r" (arg2)
+		: "memory");
+}
+
+static int tf_set_cpu_boot_addr(int cpu, unsigned long boot_addr)
+{
+	tf_generic_smc(TF_SET_CPU_BOOT_ADDR_SMC, boot_addr, 0);
+
+	return 0;
+}
+
+static const struct firmware_ops trusted_foundations_ops = {
+	.set_cpu_boot_addr = tf_set_cpu_boot_addr,
+};
+
+void register_trusted_foundations(struct trusted_foundations_platform_data *pd)
+{
+	/*
+	 * we are not using version information for now since currently
+	 * supported SMCs are compatible with all TF releases
+	 */
+	register_firmware_ops(&trusted_foundations_ops);
+}
+
+void of_register_trusted_foundations(void)
+{
+	struct device_node *node;
+	struct trusted_foundations_platform_data pdata;
+	int err;
+
+	node = of_find_compatible_node(NULL, NULL, "tl,trusted-foundations");
+	if (!node)
+		return;
+
+	err = of_property_read_u32(node, "version-major", &pdata.version_major);
+	if (err != 0)
+		panic("Trusted Foundation: missing version-major property\n");
+	err = of_property_read_u32(node, "version-minor", &pdata.version_minor);
+	if (err != 0)
+		panic("Trusted Foundation: missing version-minor property\n");
+	register_trusted_foundations(&pdata);
+}
diff --git a/arch/arm/include/asm/trusted_foundations.h b/arch/arm/include/asm/trusted_foundations.h
new file mode 100644
index 0000000..3bd36e2
--- /dev/null
+++ b/arch/arm/include/asm/trusted_foundations.h
@@ -0,0 +1,67 @@ 
+/*
+ * Copyright (c) 2013, NVIDIA Corporation.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ */
+
+/*
+ * Support for the Trusted Foundations secure monitor.
+ *
+ * Trusted Foundation comes active on some ARM consumer devices (most
+ * Tegra-based devices sold on the market are concerned). Such devices can only
+ * perform some basic operations, like setting the CPU reset vector, through
+ * SMC calls to the secure monitor. The calls are completely specific to
+ * Trusted Foundations, and do *not* follow the SMC calling convention or the
+ * PSCI standard.
+ */
+
+#ifndef __ASM_ARM_TRUSTED_FOUNDATIONS_H
+#define __ASM_ARM_TRUSTED_FOUNDATIONS_H
+
+#include <linux/kconfig.h>
+#include <linux/printk.h>
+#include <linux/bug.h>
+#include <linux/of.h>
+
+struct trusted_foundations_platform_data {
+	unsigned int version_major;
+	unsigned int version_minor;
+};
+
+#if IS_ENABLED(CONFIG_TRUSTED_FOUNDATIONS)
+
+void register_trusted_foundations(struct trusted_foundations_platform_data *pd);
+void of_register_trusted_foundations(void);
+
+#else /* CONFIG_TRUSTED_FOUNDATIONS */
+
+static inline void register_trusted_foundations(
+				   struct trusted_foundations_platform_data *pd)
+{
+	/*
+	 * If we try to register TF, this means the system needs it to continue.
+	 * Its absence if thus a fatal error.
+	 */
+	panic("No support for Trusted Foundations, stopping...\n");
+}
+
+static inline void of_register_trusted_foundations(void)
+{
+	/*
+	 * If we find the target should enable TF but does not support it,
+	 * fail as the system won't be able to do much anyway
+	 */
+	if (of_find_compatible_node(NULL, NULL, "tl,trusted-foundations"))
+		register_trusted_foundations(NULL);
+}
+#endif /* CONFIG_TRUSTED_FOUNDATIONS */
+
+#endif