diff mbox series

[edk2,1/1] ArmPkg: Add initial OpteeLib implementation

Message ID 1533034935-21530-1-git-send-email-sumit.garg@linaro.org
State Superseded
Headers show
Series [edk2,1/1] ArmPkg: Add initial OpteeLib implementation | expand

Commit Message

Sumit Garg July 31, 2018, 11:02 a.m. UTC
This is initial version of OP-TEE library that provides api's to
communicate with OP-TEE OS (Trusted OS based on ARM TrustZone) via
secure monitor calls. Currently it provides basic api to detect OP-TEE
presence via UID matching.

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Sumit Garg <sumit.garg@linaro.org>

---
 ArmPkg/ArmPkg.dec                           |  1 +
 ArmPkg/ArmPkg.dsc                           |  1 +
 ArmPkg/Include/IndustryStandard/ArmStdSmc.h |  8 +++++
 ArmPkg/Include/Library/OpteeLib.h           | 34 +++++++++++++++++++++
 ArmPkg/Library/OpteeLib/Optee.c             | 46 +++++++++++++++++++++++++++++
 ArmPkg/Library/OpteeLib/OpteeLib.inf        | 34 +++++++++++++++++++++
 6 files changed, 124 insertions(+)
 create mode 100644 ArmPkg/Include/Library/OpteeLib.h
 create mode 100644 ArmPkg/Library/OpteeLib/Optee.c
 create mode 100644 ArmPkg/Library/OpteeLib/OpteeLib.inf

-- 
2.7.4

Comments

Sumit Garg July 31, 2018, 11:07 a.m. UTC | #1
Hi Ard, Daniel,

As per our conversation over mailing list, I have tried to prepare
OP-TEE library for edk2. Please help me to review below patch.

Regards,
Sumit

On Tue, 31 Jul 2018 at 16:32, Sumit Garg <sumit.garg@linaro.org> wrote:
>

> This is initial version of OP-TEE library that provides api's to

> communicate with OP-TEE OS (Trusted OS based on ARM TrustZone) via

> secure monitor calls. Currently it provides basic api to detect OP-TEE

> presence via UID matching.

>

> Contributed-under: TianoCore Contribution Agreement 1.1

> Signed-off-by: Sumit Garg <sumit.garg@linaro.org>

> ---

>  ArmPkg/ArmPkg.dec                           |  1 +

>  ArmPkg/ArmPkg.dsc                           |  1 +

>  ArmPkg/Include/IndustryStandard/ArmStdSmc.h |  8 +++++

>  ArmPkg/Include/Library/OpteeLib.h           | 34 +++++++++++++++++++++

>  ArmPkg/Library/OpteeLib/Optee.c             | 46 +++++++++++++++++++++++++++++

>  ArmPkg/Library/OpteeLib/OpteeLib.inf        | 34 +++++++++++++++++++++

>  6 files changed, 124 insertions(+)

>  create mode 100644 ArmPkg/Include/Library/OpteeLib.h

>  create mode 100644 ArmPkg/Library/OpteeLib/Optee.c

>  create mode 100644 ArmPkg/Library/OpteeLib/OpteeLib.inf

>

> diff --git a/ArmPkg/ArmPkg.dec b/ArmPkg/ArmPkg.dec

> index 3aa229fe2ec9..84e57a0bf01c 100644

> --- a/ArmPkg/ArmPkg.dec

> +++ b/ArmPkg/ArmPkg.dec

> @@ -41,6 +41,7 @@ [LibraryClasses.common]

>    ArmGicArchLib|Include/Library/ArmGicArchLib.h

>    ArmMtlLib|ArmPlatformPkg/Include/Library/ArmMtlLib.h

>    ArmSvcLib|Include/Library/ArmSvcLib.h

> +  OpteeLib|Include/Library/OpteeLib.h

>

>  [Guids.common]

>    gArmTokenSpaceGuid       = { 0xBB11ECFE, 0x820F, 0x4968, { 0xBB, 0xA6, 0xF7, 0x6A, 0xFE, 0x30, 0x25, 0x96 } }

> diff --git a/ArmPkg/ArmPkg.dsc b/ArmPkg/ArmPkg.dsc

> index 76d768126b17..4149cef335df 100644

> --- a/ArmPkg/ArmPkg.dsc

> +++ b/ArmPkg/ArmPkg.dsc

> @@ -71,6 +71,7 @@ [LibraryClasses.common]

>    ArmGenericTimerCounterLib|ArmPkg/Library/ArmGenericTimerPhyCounterLib/ArmGenericTimerPhyCounterLib.inf

>    ArmSmcLib|ArmPkg/Library/ArmSmcLib/ArmSmcLib.inf

>    ArmDisassemblerLib|ArmPkg/Library/ArmDisassemblerLib/ArmDisassemblerLib.inf

> +  OpteeLib|ArmPkg/Library/OpteeLib/OpteeLib.inf

>

>    UefiApplicationEntryPoint|MdePkg/Library/UefiApplicationEntryPoint/UefiApplicationEntryPoint.inf

>    PerformanceLib|MdePkg/Library/BasePerformanceLibNull/BasePerformanceLibNull.inf

> diff --git a/ArmPkg/Include/IndustryStandard/ArmStdSmc.h b/ArmPkg/Include/IndustryStandard/ArmStdSmc.h

> index 37d079664986..a3df8e5e51de 100644

> --- a/ArmPkg/Include/IndustryStandard/ArmStdSmc.h

> +++ b/ArmPkg/Include/IndustryStandard/ArmStdSmc.h

> @@ -111,4 +111,12 @@

>  #define ARM_SMC_ID_PSCI_AFFINITY_INFO_OFF         1

>  #define ARM_SMC_ID_PSCI_AFFINITY_INFO_ON_PENDING  2

>

> +/*

> + * SMC function IDs for Trusted OS Service queries

> + */

> +#define ARM_SMC_ID_TOS_CALL_COUNT     0xbf00ff00

> +#define ARM_SMC_ID_TOS_UID            0xbf00ff01

> +/*                                    0xbf00ff02 is reserved */

> +#define ARM_SMC_ID_TOS_REVISION       0xbf00ff03

> +

>  #endif

> diff --git a/ArmPkg/Include/Library/OpteeLib.h b/ArmPkg/Include/Library/OpteeLib.h

> new file mode 100644

> index 000000000000..0806d9837968

> --- /dev/null

> +++ b/ArmPkg/Include/Library/OpteeLib.h

> @@ -0,0 +1,34 @@

> +/** @file

> +  OP-TEE specific header file.

> +

> +  Copyright (c) 2018, Linaro Ltd. All rights reserved.<BR>

> +

> +  This program and the accompanying materials

> +  are licensed and made available under the terms and conditions of the BSD License

> +  which accompanies this distribution.  The full text of the license may be found at

> +  http://opensource.org/licenses/bsd-license.php

> +

> +  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,

> +  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.

> +

> +**/

> +

> +#ifndef _OPTEE_H_

> +#define _OPTEE_H_

> +

> +/*

> + * The 'Trusted OS Call UID' is supposed to return the following UUID for

> + * OP-TEE OS. This is a 128-bit value.

> + */

> +#define OPTEE_OS_UID0          0x384fb3e0

> +#define OPTEE_OS_UID1          0xe7f811e3

> +#define OPTEE_OS_UID2          0xaf630002

> +#define OPTEE_OS_UID3          0xa5d5c51b

> +

> +UINT32

> +EFIAPI

> +IsOpteePresent (

> +  VOID

> +  );

> +

> +#endif

> diff --git a/ArmPkg/Library/OpteeLib/Optee.c b/ArmPkg/Library/OpteeLib/Optee.c

> new file mode 100644

> index 000000000000..92d17df2409c

> --- /dev/null

> +++ b/ArmPkg/Library/OpteeLib/Optee.c

> @@ -0,0 +1,46 @@

> +/** @file

> +  Api's to communicate with OP-TEE OS (Trusted OS based on ARM TrustZone) via

> +  secure monitor calls.

> +

> +  Copyright (c) 2018, Linaro Ltd. All rights reserved.<BR>

> +

> +  This program and the accompanying materials

> +  are licensed and made available under the terms and conditions of the BSD License

> +  which accompanies this distribution.  The full text of the license may be found at

> +  http://opensource.org/licenses/bsd-license.php

> +

> +  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,

> +  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.

> +

> +**/

> +

> +#include <Library/BaseLib.h>

> +#include <Library/DebugLib.h>

> +#include <Library/ArmSmcLib.h>

> +#include <Library/OpteeLib.h>

> +

> +#include <IndustryStandard/ArmStdSmc.h>

> +

> +/**

> +  Check for OP-TEE presence.

> +**/

> +UINT32

> +EFIAPI

> +IsOpteePresent (

> +  VOID

> +  )

> +{

> +  ARM_SMC_ARGS ArmSmcArgs;

> +

> +  // Send a Trusted OS Calls UID command

> +  ArmSmcArgs.Arg0 = ARM_SMC_ID_TOS_UID;

> +  ArmCallSmc (&ArmSmcArgs);

> +

> +  if ((ArmSmcArgs.Arg0 == OPTEE_OS_UID0) &&

> +      (ArmSmcArgs.Arg1 == OPTEE_OS_UID1) &&

> +      (ArmSmcArgs.Arg2 == OPTEE_OS_UID2) &&

> +      (ArmSmcArgs.Arg3 == OPTEE_OS_UID3))

> +      return 1;

> +  else

> +      return 0;

> +}

> diff --git a/ArmPkg/Library/OpteeLib/OpteeLib.inf b/ArmPkg/Library/OpteeLib/OpteeLib.inf

> new file mode 100644

> index 000000000000..602716030738

> --- /dev/null

> +++ b/ArmPkg/Library/OpteeLib/OpteeLib.inf

> @@ -0,0 +1,34 @@

> +#/** @file

> +# OP-TEE lib using secure monitor calls

> +#

> +# Copyright (c) 2018, Linaro Ltd. All rights reserved.<BR>

> +#

> +#  This program and the accompanying materials

> +#  are licensed and made available under the terms and conditions of the BSD License

> +#  which accompanies this distribution. The full text of the license may be found at

> +#  http://opensource.org/licenses/bsd-license.php

> +#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,

> +#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.

> +#

> +#

> +#**/

> +

> +[Defines]

> +  INF_VERSION                    = 0x00010005

> +  BASE_NAME                      = OpteeLib

> +  FILE_GUID                      = BCD50D08-9568-45B2-84DF-30AE0279AD46

> +  MODULE_TYPE                    = BASE

> +  VERSION_STRING                 = 1.0

> +  LIBRARY_CLASS                  = OpteeLib

> +

> +[Sources]

> +  Optee.c

> +

> +[Packages]

> +  ArmPkg/ArmPkg.dec

> +  MdePkg/MdePkg.dec

> +

> +[LibraryClasses]

> +  DebugLib

> +  BaseLib

> +  ArmSmcLib

> --

> 2.7.4

>
Ard Biesheuvel July 31, 2018, 12:56 p.m. UTC | #2
Hello Sumit,

Thanks a lot for this contribution.

On 31 July 2018 at 13:02, Sumit Garg <sumit.garg@linaro.org> wrote:
> This is initial version of OP-TEE library that provides api's to

> communicate with OP-TEE OS (Trusted OS based on ARM TrustZone) via

> secure monitor calls. Currently it provides basic api to detect OP-TEE

> presence via UID matching.

>

> Contributed-under: TianoCore Contribution Agreement 1.1

> Signed-off-by: Sumit Garg <sumit.garg@linaro.org>

> ---

>  ArmPkg/ArmPkg.dec                           |  1 +

>  ArmPkg/ArmPkg.dsc                           |  1 +

>  ArmPkg/Include/IndustryStandard/ArmStdSmc.h |  8 +++++

>  ArmPkg/Include/Library/OpteeLib.h           | 34 +++++++++++++++++++++

>  ArmPkg/Library/OpteeLib/Optee.c             | 46 +++++++++++++++++++++++++++++

>  ArmPkg/Library/OpteeLib/OpteeLib.inf        | 34 +++++++++++++++++++++

>  6 files changed, 124 insertions(+)

>  create mode 100644 ArmPkg/Include/Library/OpteeLib.h

>  create mode 100644 ArmPkg/Library/OpteeLib/Optee.c

>  create mode 100644 ArmPkg/Library/OpteeLib/OpteeLib.inf

>

> diff --git a/ArmPkg/ArmPkg.dec b/ArmPkg/ArmPkg.dec

> index 3aa229fe2ec9..84e57a0bf01c 100644

> --- a/ArmPkg/ArmPkg.dec

> +++ b/ArmPkg/ArmPkg.dec

> @@ -41,6 +41,7 @@ [LibraryClasses.common]

>    ArmGicArchLib|Include/Library/ArmGicArchLib.h

>    ArmMtlLib|ArmPlatformPkg/Include/Library/ArmMtlLib.h

>    ArmSvcLib|Include/Library/ArmSvcLib.h

> +  OpteeLib|Include/Library/OpteeLib.h

>

>  [Guids.common]

>    gArmTokenSpaceGuid       = { 0xBB11ECFE, 0x820F, 0x4968, { 0xBB, 0xA6, 0xF7, 0x6A, 0xFE, 0x30, 0x25, 0x96 } }

> diff --git a/ArmPkg/ArmPkg.dsc b/ArmPkg/ArmPkg.dsc

> index 76d768126b17..4149cef335df 100644

> --- a/ArmPkg/ArmPkg.dsc

> +++ b/ArmPkg/ArmPkg.dsc

> @@ -71,6 +71,7 @@ [LibraryClasses.common]

>    ArmGenericTimerCounterLib|ArmPkg/Library/ArmGenericTimerPhyCounterLib/ArmGenericTimerPhyCounterLib.inf

>    ArmSmcLib|ArmPkg/Library/ArmSmcLib/ArmSmcLib.inf

>    ArmDisassemblerLib|ArmPkg/Library/ArmDisassemblerLib/ArmDisassemblerLib.inf

> +  OpteeLib|ArmPkg/Library/OpteeLib/OpteeLib.inf

>


Please add your library to the [Components] section as well so it gets
build when we build ArmPkg.dsc
(currently, you have only added it as a resolution, which means other
components' dependencies on OpteeLib will resolve to that particular
implementation)

>    UefiApplicationEntryPoint|MdePkg/Library/UefiApplicationEntryPoint/UefiApplicationEntryPoint.inf

>    PerformanceLib|MdePkg/Library/BasePerformanceLibNull/BasePerformanceLibNull.inf

> diff --git a/ArmPkg/Include/IndustryStandard/ArmStdSmc.h b/ArmPkg/Include/IndustryStandard/ArmStdSmc.h

> index 37d079664986..a3df8e5e51de 100644

> --- a/ArmPkg/Include/IndustryStandard/ArmStdSmc.h

> +++ b/ArmPkg/Include/IndustryStandard/ArmStdSmc.h

> @@ -111,4 +111,12 @@

>  #define ARM_SMC_ID_PSCI_AFFINITY_INFO_OFF         1

>  #define ARM_SMC_ID_PSCI_AFFINITY_INFO_ON_PENDING  2

>

> +/*

> + * SMC function IDs for Trusted OS Service queries

> + */

> +#define ARM_SMC_ID_TOS_CALL_COUNT     0xbf00ff00

> +#define ARM_SMC_ID_TOS_UID            0xbf00ff01

> +/*                                    0xbf00ff02 is reserved */

> +#define ARM_SMC_ID_TOS_REVISION       0xbf00ff03

> +

>  #endif

> diff --git a/ArmPkg/Include/Library/OpteeLib.h b/ArmPkg/Include/Library/OpteeLib.h

> new file mode 100644

> index 000000000000..0806d9837968

> --- /dev/null

> +++ b/ArmPkg/Include/Library/OpteeLib.h

> @@ -0,0 +1,34 @@

> +/** @file

> +  OP-TEE specific header file.

> +

> +  Copyright (c) 2018, Linaro Ltd. All rights reserved.<BR>

> +

> +  This program and the accompanying materials

> +  are licensed and made available under the terms and conditions of the BSD License

> +  which accompanies this distribution.  The full text of the license may be found at

> +  http://opensource.org/licenses/bsd-license.php

> +

> +  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,

> +  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.

> +

> +**/

> +

> +#ifndef _OPTEE_H_

> +#define _OPTEE_H_

> +

> +/*

> + * The 'Trusted OS Call UID' is supposed to return the following UUID for

> + * OP-TEE OS. This is a 128-bit value.

> + */

> +#define OPTEE_OS_UID0          0x384fb3e0

> +#define OPTEE_OS_UID1          0xe7f811e3

> +#define OPTEE_OS_UID2          0xaf630002

> +#define OPTEE_OS_UID3          0xa5d5c51b

> +

> +UINT32


lLease make this a BOOLEAN

> +EFIAPI

> +IsOpteePresent (

> +  VOID

> +  );

> +

> +#endif

> diff --git a/ArmPkg/Library/OpteeLib/Optee.c b/ArmPkg/Library/OpteeLib/Optee.c

> new file mode 100644

> index 000000000000..92d17df2409c

> --- /dev/null

> +++ b/ArmPkg/Library/OpteeLib/Optee.c

> @@ -0,0 +1,46 @@

> +/** @file

> +  Api's to communicate with OP-TEE OS (Trusted OS based on ARM TrustZone) via

> +  secure monitor calls.

> +

> +  Copyright (c) 2018, Linaro Ltd. All rights reserved.<BR>

> +

> +  This program and the accompanying materials

> +  are licensed and made available under the terms and conditions of the BSD License

> +  which accompanies this distribution.  The full text of the license may be found at

> +  http://opensource.org/licenses/bsd-license.php

> +

> +  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,

> +  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.

> +

> +**/

> +

> +#include <Library/BaseLib.h>

> +#include <Library/DebugLib.h>

> +#include <Library/ArmSmcLib.h>

> +#include <Library/OpteeLib.h>

> +

> +#include <IndustryStandard/ArmStdSmc.h>

> +

> +/**

> +  Check for OP-TEE presence.

> +**/

> +UINT32

> +EFIAPI

> +IsOpteePresent (

> +  VOID

> +  )

> +{

> +  ARM_SMC_ARGS ArmSmcArgs;

> +

> +  // Send a Trusted OS Calls UID command

> +  ArmSmcArgs.Arg0 = ARM_SMC_ID_TOS_UID;

> +  ArmCallSmc (&ArmSmcArgs);

> +

> +  if ((ArmSmcArgs.Arg0 == OPTEE_OS_UID0) &&

> +      (ArmSmcArgs.Arg1 == OPTEE_OS_UID1) &&

> +      (ArmSmcArgs.Arg2 == OPTEE_OS_UID2) &&

> +      (ArmSmcArgs.Arg3 == OPTEE_OS_UID3))

> +      return 1;

> +  else

> +      return 0;


Please use curly braces on both branches of the if(), and return TRUE/FALSE

> +}

> diff --git a/ArmPkg/Library/OpteeLib/OpteeLib.inf b/ArmPkg/Library/OpteeLib/OpteeLib.inf

> new file mode 100644

> index 000000000000..602716030738

> --- /dev/null

> +++ b/ArmPkg/Library/OpteeLib/OpteeLib.inf

> @@ -0,0 +1,34 @@

> +#/** @file

> +# OP-TEE lib using secure monitor calls

> +#

> +# Copyright (c) 2018, Linaro Ltd. All rights reserved.<BR>

> +#

> +#  This program and the accompanying materials

> +#  are licensed and made available under the terms and conditions of the BSD License

> +#  which accompanies this distribution. The full text of the license may be found at

> +#  http://opensource.org/licenses/bsd-license.php

> +#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,

> +#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.

> +#

> +#

> +#**/

> +

> +[Defines]

> +  INF_VERSION                    = 0x00010005


0x0001001A is the latest version so please use that.

> +  BASE_NAME                      = OpteeLib

> +  FILE_GUID                      = -9568-45B2-84DF-30AE0279BCD50D08AD46

> +  MODULE_TYPE                    = BASE

> +  VERSION_STRING                 = 1.0

> +  LIBRARY_CLASS                  = OpteeLib

> +

> +[Sources]

> +  Optee.c

> +

> +[Packages]

> +  ArmPkg/ArmPkg.dec

> +  MdePkg/MdePkg.dec

> +

> +[LibraryClasses]

> +  DebugLib

> +  BaseLib

> +  ArmSmcLib


Please put in alphabetical order.

> --

> 2.7.4

>
Sumit Garg July 31, 2018, 1:16 p.m. UTC | #3
On Tue, 31 Jul 2018 at 18:26, Ard Biesheuvel <ard.biesheuvel@linaro.org> wrote:
>

> Hello Sumit,

>

> Thanks a lot for this contribution.

>


You are welcome. Although it would my first such contribution in edk2.
BTW, thanks for your guidance.

> On 31 July 2018 at 13:02, Sumit Garg <sumit.garg@linaro.org> wrote:

> > This is initial version of OP-TEE library that provides api's to

> > communicate with OP-TEE OS (Trusted OS based on ARM TrustZone) via

> > secure monitor calls. Currently it provides basic api to detect OP-TEE

> > presence via UID matching.

> >

> > Contributed-under: TianoCore Contribution Agreement 1.1

> > Signed-off-by: Sumit Garg <sumit.garg@linaro.org>

> > ---

> >  ArmPkg/ArmPkg.dec                           |  1 +

> >  ArmPkg/ArmPkg.dsc                           |  1 +

> >  ArmPkg/Include/IndustryStandard/ArmStdSmc.h |  8 +++++

> >  ArmPkg/Include/Library/OpteeLib.h           | 34 +++++++++++++++++++++

> >  ArmPkg/Library/OpteeLib/Optee.c             | 46 +++++++++++++++++++++++++++++

> >  ArmPkg/Library/OpteeLib/OpteeLib.inf        | 34 +++++++++++++++++++++

> >  6 files changed, 124 insertions(+)

> >  create mode 100644 ArmPkg/Include/Library/OpteeLib.h

> >  create mode 100644 ArmPkg/Library/OpteeLib/Optee.c

> >  create mode 100644 ArmPkg/Library/OpteeLib/OpteeLib.inf

> >

> > diff --git a/ArmPkg/ArmPkg.dec b/ArmPkg/ArmPkg.dec

> > index 3aa229fe2ec9..84e57a0bf01c 100644

> > --- a/ArmPkg/ArmPkg.dec

> > +++ b/ArmPkg/ArmPkg.dec

> > @@ -41,6 +41,7 @@ [LibraryClasses.common]

> >    ArmGicArchLib|Include/Library/ArmGicArchLib.h

> >    ArmMtlLib|ArmPlatformPkg/Include/Library/ArmMtlLib.h

> >    ArmSvcLib|Include/Library/ArmSvcLib.h

> > +  OpteeLib|Include/Library/OpteeLib.h

> >

> >  [Guids.common]

> >    gArmTokenSpaceGuid       = { 0xBB11ECFE, 0x820F, 0x4968, { 0xBB, 0xA6, 0xF7, 0x6A, 0xFE, 0x30, 0x25, 0x96 } }

> > diff --git a/ArmPkg/ArmPkg.dsc b/ArmPkg/ArmPkg.dsc

> > index 76d768126b17..4149cef335df 100644

> > --- a/ArmPkg/ArmPkg.dsc

> > +++ b/ArmPkg/ArmPkg.dsc

> > @@ -71,6 +71,7 @@ [LibraryClasses.common]

> >    ArmGenericTimerCounterLib|ArmPkg/Library/ArmGenericTimerPhyCounterLib/ArmGenericTimerPhyCounterLib.inf

> >    ArmSmcLib|ArmPkg/Library/ArmSmcLib/ArmSmcLib.inf

> >    ArmDisassemblerLib|ArmPkg/Library/ArmDisassemblerLib/ArmDisassemblerLib.inf

> > +  OpteeLib|ArmPkg/Library/OpteeLib/OpteeLib.inf

> >

>

> Please add your library to the [Components] section as well so it gets

> build when we build ArmPkg.dsc

> (currently, you have only added it as a resolution, which means other

> components' dependencies on OpteeLib will resolve to that particular

> implementation)

>


Sure will add it to [Components] section as well.

> >    UefiApplicationEntryPoint|MdePkg/Library/UefiApplicationEntryPoint/UefiApplicationEntryPoint.inf

> >    PerformanceLib|MdePkg/Library/BasePerformanceLibNull/BasePerformanceLibNull.inf

> > diff --git a/ArmPkg/Include/IndustryStandard/ArmStdSmc.h b/ArmPkg/Include/IndustryStandard/ArmStdSmc.h

> > index 37d079664986..a3df8e5e51de 100644

> > --- a/ArmPkg/Include/IndustryStandard/ArmStdSmc.h

> > +++ b/ArmPkg/Include/IndustryStandard/ArmStdSmc.h

> > @@ -111,4 +111,12 @@

> >  #define ARM_SMC_ID_PSCI_AFFINITY_INFO_OFF         1

> >  #define ARM_SMC_ID_PSCI_AFFINITY_INFO_ON_PENDING  2

> >

> > +/*

> > + * SMC function IDs for Trusted OS Service queries

> > + */

> > +#define ARM_SMC_ID_TOS_CALL_COUNT     0xbf00ff00

> > +#define ARM_SMC_ID_TOS_UID            0xbf00ff01

> > +/*                                    0xbf00ff02 is reserved */

> > +#define ARM_SMC_ID_TOS_REVISION       0xbf00ff03

> > +

> >  #endif

> > diff --git a/ArmPkg/Include/Library/OpteeLib.h b/ArmPkg/Include/Library/OpteeLib.h

> > new file mode 100644

> > index 000000000000..0806d9837968

> > --- /dev/null

> > +++ b/ArmPkg/Include/Library/OpteeLib.h

> > @@ -0,0 +1,34 @@

> > +/** @file

> > +  OP-TEE specific header file.

> > +

> > +  Copyright (c) 2018, Linaro Ltd. All rights reserved.<BR>

> > +

> > +  This program and the accompanying materials

> > +  are licensed and made available under the terms and conditions of the BSD License

> > +  which accompanies this distribution.  The full text of the license may be found at

> > +  http://opensource.org/licenses/bsd-license.php

> > +

> > +  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,

> > +  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.

> > +

> > +**/

> > +

> > +#ifndef _OPTEE_H_

> > +#define _OPTEE_H_

> > +

> > +/*

> > + * The 'Trusted OS Call UID' is supposed to return the following UUID for

> > + * OP-TEE OS. This is a 128-bit value.

> > + */

> > +#define OPTEE_OS_UID0          0x384fb3e0

> > +#define OPTEE_OS_UID1          0xe7f811e3

> > +#define OPTEE_OS_UID2          0xaf630002

> > +#define OPTEE_OS_UID3          0xa5d5c51b

> > +

> > +UINT32

>

> lLease make this a BOOLEAN

>


Ok will make it a BOOLEAN.

> > +EFIAPI

> > +IsOpteePresent (

> > +  VOID

> > +  );

> > +

> > +#endif

> > diff --git a/ArmPkg/Library/OpteeLib/Optee.c b/ArmPkg/Library/OpteeLib/Optee.c

> > new file mode 100644

> > index 000000000000..92d17df2409c

> > --- /dev/null

> > +++ b/ArmPkg/Library/OpteeLib/Optee.c

> > @@ -0,0 +1,46 @@

> > +/** @file

> > +  Api's to communicate with OP-TEE OS (Trusted OS based on ARM TrustZone) via

> > +  secure monitor calls.

> > +

> > +  Copyright (c) 2018, Linaro Ltd. All rights reserved.<BR>

> > +

> > +  This program and the accompanying materials

> > +  are licensed and made available under the terms and conditions of the BSD License

> > +  which accompanies this distribution.  The full text of the license may be found at

> > +  http://opensource.org/licenses/bsd-license.php

> > +

> > +  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,

> > +  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.

> > +

> > +**/

> > +

> > +#include <Library/BaseLib.h>

> > +#include <Library/DebugLib.h>

> > +#include <Library/ArmSmcLib.h>

> > +#include <Library/OpteeLib.h>

> > +

> > +#include <IndustryStandard/ArmStdSmc.h>

> > +

> > +/**

> > +  Check for OP-TEE presence.

> > +**/

> > +UINT32

> > +EFIAPI

> > +IsOpteePresent (

> > +  VOID

> > +  )

> > +{

> > +  ARM_SMC_ARGS ArmSmcArgs;

> > +

> > +  // Send a Trusted OS Calls UID command

> > +  ArmSmcArgs.Arg0 = ARM_SMC_ID_TOS_UID;

> > +  ArmCallSmc (&ArmSmcArgs);

> > +

> > +  if ((ArmSmcArgs.Arg0 == OPTEE_OS_UID0) &&

> > +      (ArmSmcArgs.Arg1 == OPTEE_OS_UID1) &&

> > +      (ArmSmcArgs.Arg2 == OPTEE_OS_UID2) &&

> > +      (ArmSmcArgs.Arg3 == OPTEE_OS_UID3))

> > +      return 1;

> > +  else

> > +      return 0;

>

> Please use curly braces on both branches of the if(), and return TRUE/FALSE

>


Sure.

> > +}

> > diff --git a/ArmPkg/Library/OpteeLib/OpteeLib.inf b/ArmPkg/Library/OpteeLib/OpteeLib.inf

> > new file mode 100644

> > index 000000000000..602716030738

> > --- /dev/null

> > +++ b/ArmPkg/Library/OpteeLib/OpteeLib.inf

> > @@ -0,0 +1,34 @@

> > +#/** @file

> > +# OP-TEE lib using secure monitor calls

> > +#

> > +# Copyright (c) 2018, Linaro Ltd. All rights reserved.<BR>

> > +#

> > +#  This program and the accompanying materials

> > +#  are licensed and made available under the terms and conditions of the BSD License

> > +#  which accompanies this distribution. The full text of the license may be found at

> > +#  http://opensource.org/licenses/bsd-license.php

> > +#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,

> > +#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.

> > +#

> > +#

> > +#**/

> > +

> > +[Defines]

> > +  INF_VERSION                    = 0x00010005

>

> 0x0001001A is the latest version so please use that.

>


Ok.

> > +  BASE_NAME                      = OpteeLib

> > +  FILE_GUID                      = -9568-45B2-84DF-30AE0279BCD50D08AD46

> > +  MODULE_TYPE                    = BASE

> > +  VERSION_STRING                 = 1.0

> > +  LIBRARY_CLASS                  = OpteeLib

> > +

> > +[Sources]

> > +  Optee.c

> > +

> > +[Packages]

> > +  ArmPkg/ArmPkg.dec

> > +  MdePkg/MdePkg.dec

> > +

> > +[LibraryClasses]

> > +  DebugLib

> > +  BaseLib

> > +  ArmSmcLib

>

> Please put in alphabetical order.

>


Ok.

> > --

> > 2.7.4

> >
diff mbox series

Patch

diff --git a/ArmPkg/ArmPkg.dec b/ArmPkg/ArmPkg.dec
index 3aa229fe2ec9..84e57a0bf01c 100644
--- a/ArmPkg/ArmPkg.dec
+++ b/ArmPkg/ArmPkg.dec
@@ -41,6 +41,7 @@  [LibraryClasses.common]
   ArmGicArchLib|Include/Library/ArmGicArchLib.h
   ArmMtlLib|ArmPlatformPkg/Include/Library/ArmMtlLib.h
   ArmSvcLib|Include/Library/ArmSvcLib.h
+  OpteeLib|Include/Library/OpteeLib.h
 
 [Guids.common]
   gArmTokenSpaceGuid       = { 0xBB11ECFE, 0x820F, 0x4968, { 0xBB, 0xA6, 0xF7, 0x6A, 0xFE, 0x30, 0x25, 0x96 } }
diff --git a/ArmPkg/ArmPkg.dsc b/ArmPkg/ArmPkg.dsc
index 76d768126b17..4149cef335df 100644
--- a/ArmPkg/ArmPkg.dsc
+++ b/ArmPkg/ArmPkg.dsc
@@ -71,6 +71,7 @@  [LibraryClasses.common]
   ArmGenericTimerCounterLib|ArmPkg/Library/ArmGenericTimerPhyCounterLib/ArmGenericTimerPhyCounterLib.inf
   ArmSmcLib|ArmPkg/Library/ArmSmcLib/ArmSmcLib.inf
   ArmDisassemblerLib|ArmPkg/Library/ArmDisassemblerLib/ArmDisassemblerLib.inf
+  OpteeLib|ArmPkg/Library/OpteeLib/OpteeLib.inf
 
   UefiApplicationEntryPoint|MdePkg/Library/UefiApplicationEntryPoint/UefiApplicationEntryPoint.inf
   PerformanceLib|MdePkg/Library/BasePerformanceLibNull/BasePerformanceLibNull.inf
diff --git a/ArmPkg/Include/IndustryStandard/ArmStdSmc.h b/ArmPkg/Include/IndustryStandard/ArmStdSmc.h
index 37d079664986..a3df8e5e51de 100644
--- a/ArmPkg/Include/IndustryStandard/ArmStdSmc.h
+++ b/ArmPkg/Include/IndustryStandard/ArmStdSmc.h
@@ -111,4 +111,12 @@ 
 #define ARM_SMC_ID_PSCI_AFFINITY_INFO_OFF         1
 #define ARM_SMC_ID_PSCI_AFFINITY_INFO_ON_PENDING  2
 
+/*
+ * SMC function IDs for Trusted OS Service queries
+ */
+#define ARM_SMC_ID_TOS_CALL_COUNT     0xbf00ff00
+#define ARM_SMC_ID_TOS_UID            0xbf00ff01
+/*                                    0xbf00ff02 is reserved */
+#define ARM_SMC_ID_TOS_REVISION       0xbf00ff03
+
 #endif
diff --git a/ArmPkg/Include/Library/OpteeLib.h b/ArmPkg/Include/Library/OpteeLib.h
new file mode 100644
index 000000000000..0806d9837968
--- /dev/null
+++ b/ArmPkg/Include/Library/OpteeLib.h
@@ -0,0 +1,34 @@ 
+/** @file
+  OP-TEE specific header file.
+
+  Copyright (c) 2018, Linaro Ltd. All rights reserved.<BR>
+
+  This program and the accompanying materials
+  are licensed and made available under the terms and conditions of the BSD License
+  which accompanies this distribution.  The full text of the license may be found at
+  http://opensource.org/licenses/bsd-license.php
+
+  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+**/
+
+#ifndef _OPTEE_H_
+#define _OPTEE_H_
+
+/*
+ * The 'Trusted OS Call UID' is supposed to return the following UUID for
+ * OP-TEE OS. This is a 128-bit value.
+ */
+#define OPTEE_OS_UID0          0x384fb3e0
+#define OPTEE_OS_UID1          0xe7f811e3
+#define OPTEE_OS_UID2          0xaf630002
+#define OPTEE_OS_UID3          0xa5d5c51b
+
+UINT32
+EFIAPI
+IsOpteePresent (
+  VOID
+  );
+
+#endif
diff --git a/ArmPkg/Library/OpteeLib/Optee.c b/ArmPkg/Library/OpteeLib/Optee.c
new file mode 100644
index 000000000000..92d17df2409c
--- /dev/null
+++ b/ArmPkg/Library/OpteeLib/Optee.c
@@ -0,0 +1,46 @@ 
+/** @file
+  Api's to communicate with OP-TEE OS (Trusted OS based on ARM TrustZone) via
+  secure monitor calls.
+
+  Copyright (c) 2018, Linaro Ltd. All rights reserved.<BR>
+
+  This program and the accompanying materials
+  are licensed and made available under the terms and conditions of the BSD License
+  which accompanies this distribution.  The full text of the license may be found at
+  http://opensource.org/licenses/bsd-license.php
+
+  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+**/
+
+#include <Library/BaseLib.h>
+#include <Library/DebugLib.h>
+#include <Library/ArmSmcLib.h>
+#include <Library/OpteeLib.h>
+
+#include <IndustryStandard/ArmStdSmc.h>
+
+/**
+  Check for OP-TEE presence.
+**/
+UINT32
+EFIAPI
+IsOpteePresent (
+  VOID
+  )
+{
+  ARM_SMC_ARGS ArmSmcArgs;
+
+  // Send a Trusted OS Calls UID command
+  ArmSmcArgs.Arg0 = ARM_SMC_ID_TOS_UID;
+  ArmCallSmc (&ArmSmcArgs);
+
+  if ((ArmSmcArgs.Arg0 == OPTEE_OS_UID0) &&
+      (ArmSmcArgs.Arg1 == OPTEE_OS_UID1) &&
+      (ArmSmcArgs.Arg2 == OPTEE_OS_UID2) &&
+      (ArmSmcArgs.Arg3 == OPTEE_OS_UID3))
+      return 1;
+  else
+      return 0;
+}
diff --git a/ArmPkg/Library/OpteeLib/OpteeLib.inf b/ArmPkg/Library/OpteeLib/OpteeLib.inf
new file mode 100644
index 000000000000..602716030738
--- /dev/null
+++ b/ArmPkg/Library/OpteeLib/OpteeLib.inf
@@ -0,0 +1,34 @@ 
+#/** @file
+# OP-TEE lib using secure monitor calls
+#
+# Copyright (c) 2018, Linaro Ltd. All rights reserved.<BR>
+#
+#  This program and the accompanying materials
+#  are licensed and made available under the terms and conditions of the BSD License
+#  which accompanies this distribution. The full text of the license may be found at
+#  http://opensource.org/licenses/bsd-license.php
+#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+#
+#
+#**/
+
+[Defines]
+  INF_VERSION                    = 0x00010005
+  BASE_NAME                      = OpteeLib
+  FILE_GUID                      = BCD50D08-9568-45B2-84DF-30AE0279AD46
+  MODULE_TYPE                    = BASE
+  VERSION_STRING                 = 1.0
+  LIBRARY_CLASS                  = OpteeLib
+
+[Sources]
+  Optee.c
+
+[Packages]
+  ArmPkg/ArmPkg.dec
+  MdePkg/MdePkg.dec
+
+[LibraryClasses]
+  DebugLib
+  BaseLib
+  ArmSmcLib