Message ID | 1533103661-23806-1-git-send-email-sumit.garg@linaro.org |
---|---|
State | New |
Headers | show |
Series | [edk2,v2,1/1] ArmPkg: Add initial OpteeLib implementation | expand |
On 1 August 2018 at 08:07, 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 | 2 ++ > ArmPkg/Include/IndustryStandard/ArmStdSmc.h | 8 +++++ > ArmPkg/Include/Library/OpteeLib.h | 34 +++++++++++++++++++++ > ArmPkg/Library/OpteeLib/Optee.c | 47 +++++++++++++++++++++++++++++ > ArmPkg/Library/OpteeLib/OpteeLib.inf | 34 +++++++++++++++++++++ > 6 files changed, 126 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..2550c4ee8a57 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 > @@ -131,6 +132,7 @@ [Components.common] > ArmPkg/Library/ArmSmcLibNull/ArmSmcLibNull.inf > ArmPkg/Library/ArmHvcLib/ArmHvcLib.inf > ArmPkg/Library/ArmSvcLib/ArmSvcLib.inf > + OpteeLib|ArmPkg/Library/OpteeLib/OpteeLib.inf > This needs the leading OpteeLib| removed > ArmPkg/Filesystem/SemihostFs/SemihostFs.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..f65d8674d9b8 > --- /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 > + > +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..905e0aaa5026 > --- /dev/null > +++ b/ArmPkg/Library/OpteeLib/Optee.c > @@ -0,0 +1,47 @@ > +/** @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. > +**/ > +BOOLEAN > +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 TRUE; > + } else { > + return FALSE; These should have 2 spaces of indentation only. With that updated: Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> I have made the modifications myself, and pushed the patch as d65b78f101b3 Thanks! > + } > +} > diff --git a/ArmPkg/Library/OpteeLib/OpteeLib.inf b/ArmPkg/Library/OpteeLib/OpteeLib.inf > new file mode 100644 > index 000000000000..449e28287f3f > --- /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 = 0x0001001A > + 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] > + ArmSmcLib > + BaseLib > + DebugLib > -- > 2.7.4 >
On Wed, 1 Aug 2018 at 14:37, Ard Biesheuvel <ard.biesheuvel@linaro.org> wrote: > > On 1 August 2018 at 08:07, 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 | 2 ++ > > ArmPkg/Include/IndustryStandard/ArmStdSmc.h | 8 +++++ > > ArmPkg/Include/Library/OpteeLib.h | 34 +++++++++++++++++++++ > > ArmPkg/Library/OpteeLib/Optee.c | 47 +++++++++++++++++++++++++++++ > > ArmPkg/Library/OpteeLib/OpteeLib.inf | 34 +++++++++++++++++++++ > > 6 files changed, 126 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..2550c4ee8a57 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 > > @@ -131,6 +132,7 @@ [Components.common] > > ArmPkg/Library/ArmSmcLibNull/ArmSmcLibNull.inf > > ArmPkg/Library/ArmHvcLib/ArmHvcLib.inf > > ArmPkg/Library/ArmSvcLib/ArmSvcLib.inf > > + OpteeLib|ArmPkg/Library/OpteeLib/OpteeLib.inf > > > > This needs the leading OpteeLib| removed > > > ArmPkg/Filesystem/SemihostFs/SemihostFs.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..f65d8674d9b8 > > --- /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 > > + > > +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..905e0aaa5026 > > --- /dev/null > > +++ b/ArmPkg/Library/OpteeLib/Optee.c > > @@ -0,0 +1,47 @@ > > +/** @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. > > +**/ > > +BOOLEAN > > +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 TRUE; > > + } else { > > + return FALSE; > > These should have 2 spaces of indentation only. > > With that updated: > > Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> > > I have made the modifications myself, and pushed the patch as d65b78f101b3 > Thanks Ard for your review and merge. -Sumit > Thanks! > > > + } > > +} > > diff --git a/ArmPkg/Library/OpteeLib/OpteeLib.inf b/ArmPkg/Library/OpteeLib/OpteeLib.inf > > new file mode 100644 > > index 000000000000..449e28287f3f > > --- /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 = 0x0001001A > > + 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] > > + ArmSmcLib > > + BaseLib > > + DebugLib > > -- > > 2.7.4 > >
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..2550c4ee8a57 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 @@ -131,6 +132,7 @@ [Components.common] ArmPkg/Library/ArmSmcLibNull/ArmSmcLibNull.inf ArmPkg/Library/ArmHvcLib/ArmHvcLib.inf ArmPkg/Library/ArmSvcLib/ArmSvcLib.inf + OpteeLib|ArmPkg/Library/OpteeLib/OpteeLib.inf ArmPkg/Filesystem/SemihostFs/SemihostFs.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..f65d8674d9b8 --- /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 + +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..905e0aaa5026 --- /dev/null +++ b/ArmPkg/Library/OpteeLib/Optee.c @@ -0,0 +1,47 @@ +/** @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. +**/ +BOOLEAN +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 TRUE; + } else { + return FALSE; + } +} diff --git a/ArmPkg/Library/OpteeLib/OpteeLib.inf b/ArmPkg/Library/OpteeLib/OpteeLib.inf new file mode 100644 index 000000000000..449e28287f3f --- /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 = 0x0001001A + 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] + ArmSmcLib + BaseLib + DebugLib
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 | 2 ++ ArmPkg/Include/IndustryStandard/ArmStdSmc.h | 8 +++++ ArmPkg/Include/Library/OpteeLib.h | 34 +++++++++++++++++++++ ArmPkg/Library/OpteeLib/Optee.c | 47 +++++++++++++++++++++++++++++ ArmPkg/Library/OpteeLib/OpteeLib.inf | 34 +++++++++++++++++++++ 6 files changed, 126 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