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 |
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 >
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 >
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 --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
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