Platform: Add device ID support
Add a getter function to platform code, to retrieve
the Universal Entity ID (UEID) of the device.
Change-Id: Id1f9abc5e96409da463098e92230099c1983c0c9
Signed-off-by: Tamas Ban <tamas.ban@arm.com>
diff --git a/CommonConfig.cmake b/CommonConfig.cmake
index 8418922..d5f4ab1 100644
--- a/CommonConfig.cmake
+++ b/CommonConfig.cmake
@@ -33,6 +33,7 @@
set(BUILD_UART_STDOUT Off)
set(BUILD_FLASH Off)
set(BUILD_BOOT_SEED Off)
+set(BUILD_DEVICE_ID Off)
if(NOT DEFINED PLATFORM_CMAKE_FILE)
message (FATAL_ERROR "Platform specific CMake is not defined. Please set PLATFORM_CMAKE_FILE.")
elseif(NOT EXISTS ${PLATFORM_CMAKE_FILE})
diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt
index a4e390b..ca71227 100755
--- a/app/CMakeLists.txt
+++ b/app/CMakeLists.txt
@@ -71,6 +71,7 @@
set(BUILD_UART_STDOUT Off)
set(BUILD_FLASH Off)
set(BUILD_BOOT_SEED Off)
+set(BUILD_DEVICE_ID Off)
if(NOT DEFINED PLATFORM_CMAKE_FILE)
message (FATAL_ERROR "Platform specific CMake is not defined. Please set PLATFORM_CMAKE_FILE.")
elseif(NOT EXISTS ${PLATFORM_CMAKE_FILE})
diff --git a/platform/ext/Mps2AN519.cmake b/platform/ext/Mps2AN519.cmake
index af4a560..a515199 100644
--- a/platform/ext/Mps2AN519.cmake
+++ b/platform/ext/Mps2AN519.cmake
@@ -173,3 +173,9 @@
elseif(BUILD_BOOT_SEED)
list(APPEND ALL_SRC_C "${PLATFORM_DIR}/target/mps2/an519/dummy_boot_seed.c")
endif()
+
+if (NOT DEFINED BUILD_DEVICE_ID)
+ message(FATAL_ERROR "Configuration variable BUILD_DEVICE_ID (true|false) is undefined!")
+elseif(BUILD_DEVICE_ID)
+ list(APPEND ALL_SRC_C "${PLATFORM_DIR}/target/mps2/an519/dummy_device_id.c")
+endif()
diff --git a/platform/ext/Mps2AN521.cmake b/platform/ext/Mps2AN521.cmake
index 7459547..3e7902a 100644
--- a/platform/ext/Mps2AN521.cmake
+++ b/platform/ext/Mps2AN521.cmake
@@ -174,3 +174,9 @@
elseif(BUILD_BOOT_SEED)
list(APPEND ALL_SRC_C "${PLATFORM_DIR}/target/mps2/an521/dummy_boot_seed.c")
endif()
+
+if (NOT DEFINED BUILD_DEVICE_ID)
+ message(FATAL_ERROR "Configuration variable BUILD_DEVICE_ID (true|false) is undefined!")
+elseif(BUILD_DEVICE_ID)
+ list(APPEND ALL_SRC_C "${PLATFORM_DIR}/target/mps2/an521/dummy_device_id.c")
+endif()
diff --git a/platform/ext/musca_a.cmake b/platform/ext/musca_a.cmake
index 985d8b9..5f0e88a 100755
--- a/platform/ext/musca_a.cmake
+++ b/platform/ext/musca_a.cmake
@@ -184,3 +184,9 @@
elseif(BUILD_BOOT_SEED)
list(APPEND ALL_SRC_C "${PLATFORM_DIR}/target/musca_a/dummy_boot_seed.c")
endif()
+
+if (NOT DEFINED BUILD_DEVICE_ID)
+ message(FATAL_ERROR "Configuration variable BUILD_DEVICE_ID (true|false) is undefined!")
+elseif(BUILD_DEVICE_ID)
+ list(APPEND ALL_SRC_C "${PLATFORM_DIR}/target/musca_a/dummy_device_id.c")
+endif()
diff --git a/platform/ext/musca_b1.cmake b/platform/ext/musca_b1.cmake
index db584af..510e90f 100755
--- a/platform/ext/musca_b1.cmake
+++ b/platform/ext/musca_b1.cmake
@@ -171,3 +171,9 @@
elseif(BUILD_BOOT_SEED)
list(APPEND ALL_SRC_C "${PLATFORM_DIR}/target/musca_b1/dummy_boot_seed.c")
endif()
+
+if (NOT DEFINED BUILD_DEVICE_ID)
+ message(FATAL_ERROR "Configuration variable BUILD_DEVICE_ID (true|false) is undefined!")
+elseif(BUILD_DEVICE_ID)
+ list(APPEND ALL_SRC_C "${PLATFORM_DIR}/target/musca_b1/dummy_device_id.c")
+endif()
diff --git a/platform/ext/target/mps2/an519/armclang/mps2_an519_s.sct b/platform/ext/target/mps2/an519/armclang/mps2_an519_s.sct
index 5eef45a..3820076 100644
--- a/platform/ext/target/mps2/an519/armclang/mps2_an519_s.sct
+++ b/platform/ext/target/mps2/an519/armclang/mps2_an519_s.sct
@@ -61,6 +61,7 @@
dummy_crypto_keys.o (+RO)
dummy_nv_counters.o (+RO)
dummy_boot_seed.o (+RO)
+ dummy_device_id.o (+RO)
platform_retarget_dev.o (+RO)
*(SFN)
*armlib*
@@ -141,6 +142,7 @@
dummy_crypto_keys.o (+RW +ZI)
dummy_nv_counters.o (+RW +ZI)
dummy_boot_seed.o (+RW +ZI)
+ dummy_device_id.o (+RW +ZI)
platform_retarget_dev.o (+RW +ZI)
}
diff --git a/platform/ext/target/mps2/an519/dummy_device_id.c b/platform/ext/target/mps2/an519/dummy_device_id.c
new file mode 100644
index 0000000..f7bbfe0
--- /dev/null
+++ b/platform/ext/target/mps2/an519/dummy_device_id.c
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2018 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "platform/include/tfm_plat_device_id.h"
+
+/*!
+ * \def DEVICE_ID_SIZE
+ *
+ * \brief Size of device ID in bytes
+ */
+#define DEVICE_ID_SIZE (16)
+
+/*!
+ * \def DEVICE_ID
+ *
+ * \brief Fixed value for device ID.
+ */
+#define DEVICE_ID 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, \
+ 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF
+
+static const uint8_t device_id[DEVICE_ID_SIZE] = {DEVICE_ID};
+
+int32_t tfm_plat_get_device_id(uint32_t size, uint8_t *buf)
+{
+ /* FixMe: This getter function must be ported per target platform. */
+
+ uint32_t i;
+ uint8_t *p_dst = buf;
+ const uint8_t *p_src = device_id;
+
+ if (size < DEVICE_ID_SIZE) {
+ return -1;
+ }
+
+ for (i = DEVICE_ID_SIZE; i > 0; i--) {
+ *p_dst = *p_src;
+ p_src++;
+ p_dst++;
+ }
+
+ return DEVICE_ID_SIZE;
+}
diff --git a/platform/ext/target/mps2/an519/gcc/mps2_an519_s.ld b/platform/ext/target/mps2/an519/gcc/mps2_an519_s.ld
index 951db0d..8eb0502 100644
--- a/platform/ext/target/mps2/an519/gcc/mps2_an519_s.ld
+++ b/platform/ext/target/mps2/an519/gcc/mps2_an519_s.ld
@@ -190,6 +190,8 @@
*dummy_nv_counters.o(.rodata*)
*dummy_boot_seed.o(.text*)
*dummy_boot_seed.o(.rodata*)
+ *dummy_device_id.o(.text*)
+ *dummy_device_id.o(.rodata*)
*platform_retarget_dev.o(.text*)
*platform_retarget_dev.o(.rodata*)
*(SFN)
@@ -412,6 +414,7 @@
*/dummy_crypto_keys.o(.data*)
*/dummy_nv_counters.o(.data*)
*/dummy_boot_seed.o(.data*)
+ */dummy_device_id.o(.data*)
*/platform_retarget_dev.o(.data*)
. = ALIGN(32);
} > RAM AT> FLASH
@@ -425,11 +428,13 @@
*/dummy_crypto_keys.o(.bss*)
*/dummy_nv_counters.o(.bss*)
*/dummy_boot_seed.o(.bss*)
+ */dummy_device_id.o(.bss*)
*/tfm_spm_services.o(COMMON)
*/platform_retarget_dev.o(COMMON)
*/dummy_crypto_keys.o(COMMON)
*/dummy_nv_counters.o(COMMON)
*/dummy_boot_seed.o(COMMON)
+ */dummy_device_id.o(COMMON)
. = ALIGN(32);
} > RAM AT> FLASH
Image$$TFM_UNPRIV_RO_DATA$$ZI$$Base = ADDR(.TFM_UNPRIV_RO_BSS);
diff --git a/platform/ext/target/mps2/an519/gcc/mps2_an519_s.ld.template b/platform/ext/target/mps2/an519/gcc/mps2_an519_s.ld.template
index 2d185b8..9a971a2 100644
--- a/platform/ext/target/mps2/an519/gcc/mps2_an519_s.ld.template
+++ b/platform/ext/target/mps2/an519/gcc/mps2_an519_s.ld.template
@@ -141,6 +141,8 @@
*dummy_nv_counters.o(.rodata*)
*dummy_boot_seed.o(.text*)
*dummy_boot_seed.o(.rodata*)
+ *dummy_device_id.o(.text*)
+ *dummy_device_id.o(.rodata*)
*platform_retarget_dev.o(.text*)
*platform_retarget_dev.o(.rodata*)
*(SFN)
@@ -273,6 +275,7 @@
*/dummy_crypto_keys.o(.data*)
*/dummy_nv_counters.o(.data*)
*/dummy_boot_seed.o(.data*)
+ */dummy_device_id.o(.data*)
*/platform_retarget_dev.o(.data*)
. = ALIGN(32);
} > RAM AT> FLASH
@@ -286,11 +289,13 @@
*/dummy_crypto_keys.o(.bss*)
*/dummy_nv_counters.o(.bss*)
*/dummy_boot_seed.o(.bss*)
+ */dummy_device_id.o(.bss*)
*/tfm_spm_services.o(COMMON)
*/platform_retarget_dev.o(COMMON)
*/dummy_crypto_keys.o(COMMON)
*/dummy_nv_counters.o(COMMON)
*/dummy_boot_seed.o(COMMON)
+ */dummy_device_id.o(COMMON)
. = ALIGN(32);
} > RAM AT> FLASH
Image$$TFM_UNPRIV_RO_DATA$$ZI$$Base = ADDR(.TFM_UNPRIV_RO_BSS);
diff --git a/platform/ext/target/mps2/an521/armclang/mps2_an521_s.sct b/platform/ext/target/mps2/an521/armclang/mps2_an521_s.sct
index 5eef45a..3820076 100644
--- a/platform/ext/target/mps2/an521/armclang/mps2_an521_s.sct
+++ b/platform/ext/target/mps2/an521/armclang/mps2_an521_s.sct
@@ -61,6 +61,7 @@
dummy_crypto_keys.o (+RO)
dummy_nv_counters.o (+RO)
dummy_boot_seed.o (+RO)
+ dummy_device_id.o (+RO)
platform_retarget_dev.o (+RO)
*(SFN)
*armlib*
@@ -141,6 +142,7 @@
dummy_crypto_keys.o (+RW +ZI)
dummy_nv_counters.o (+RW +ZI)
dummy_boot_seed.o (+RW +ZI)
+ dummy_device_id.o (+RW +ZI)
platform_retarget_dev.o (+RW +ZI)
}
diff --git a/platform/ext/target/mps2/an521/dummy_device_id.c b/platform/ext/target/mps2/an521/dummy_device_id.c
new file mode 100644
index 0000000..f7bbfe0
--- /dev/null
+++ b/platform/ext/target/mps2/an521/dummy_device_id.c
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2018 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "platform/include/tfm_plat_device_id.h"
+
+/*!
+ * \def DEVICE_ID_SIZE
+ *
+ * \brief Size of device ID in bytes
+ */
+#define DEVICE_ID_SIZE (16)
+
+/*!
+ * \def DEVICE_ID
+ *
+ * \brief Fixed value for device ID.
+ */
+#define DEVICE_ID 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, \
+ 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF
+
+static const uint8_t device_id[DEVICE_ID_SIZE] = {DEVICE_ID};
+
+int32_t tfm_plat_get_device_id(uint32_t size, uint8_t *buf)
+{
+ /* FixMe: This getter function must be ported per target platform. */
+
+ uint32_t i;
+ uint8_t *p_dst = buf;
+ const uint8_t *p_src = device_id;
+
+ if (size < DEVICE_ID_SIZE) {
+ return -1;
+ }
+
+ for (i = DEVICE_ID_SIZE; i > 0; i--) {
+ *p_dst = *p_src;
+ p_src++;
+ p_dst++;
+ }
+
+ return DEVICE_ID_SIZE;
+}
diff --git a/platform/ext/target/mps2/an521/gcc/mps2_an521_s.ld b/platform/ext/target/mps2/an521/gcc/mps2_an521_s.ld
index b9e6080..880dace 100644
--- a/platform/ext/target/mps2/an521/gcc/mps2_an521_s.ld
+++ b/platform/ext/target/mps2/an521/gcc/mps2_an521_s.ld
@@ -190,6 +190,8 @@
*dummy_nv_counters.o(.rodata*)
*dummy_boot_seed.o(.text*)
*dummy_boot_seed.o(.rodata*)
+ *dummy_device_id.o(.text*)
+ *dummy_device_id.o(.rodata*)
*platform_retarget_dev.o(.text*)
*platform_retarget_dev.o(.rodata*)
*(SFN)
@@ -412,6 +414,7 @@
*/dummy_crypto_keys.o(.data*)
*/dummy_nv_counters.o(.data*)
*/dummy_boot_seed.o(.data*)
+ */dummy_device_id.o(.data*)
*/platform_retarget_dev.o(.data*)
. = ALIGN(32);
} > RAM AT> FLASH
@@ -425,11 +428,13 @@
*/dummy_crypto_keys.o(.bss*)
*/dummy_nv_counters.o(.bss*)
*/dummy_boot_seed.o(.bss*)
+ */dummy_device_id.o(.bss*)
*/tfm_spm_services.o(COMMON)
*/platform_retarget_dev.o(COMMON)
*/dummy_crypto_keys.o(COMMON)
*/dummy_nv_counters.o(COMMON)
*/dummy_boot_seed.o(COMMON)
+ */dummy_device_id.o(COMMON)
. = ALIGN(32);
} > RAM AT> FLASH
Image$$TFM_UNPRIV_RO_DATA$$ZI$$Base = ADDR(.TFM_UNPRIV_RO_BSS);
diff --git a/platform/ext/target/mps2/an521/gcc/mps2_an521_s.ld.template b/platform/ext/target/mps2/an521/gcc/mps2_an521_s.ld.template
index 876a47a..c749aa3 100644
--- a/platform/ext/target/mps2/an521/gcc/mps2_an521_s.ld.template
+++ b/platform/ext/target/mps2/an521/gcc/mps2_an521_s.ld.template
@@ -141,6 +141,8 @@
*dummy_nv_counters.o(.rodata*)
*dummy_boot_seed.o(.text*)
*dummy_boot_seed.o(.rodata*)
+ *dummy_device_id.o(.text*)
+ *dummy_device_id.o(.rodata*)
*platform_retarget_dev.o(.text*)
*platform_retarget_dev.o(.rodata*)
*(SFN)
@@ -273,6 +275,7 @@
*/dummy_crypto_keys.o(.data*)
*/dummy_nv_counters.o(.data*)
*/dummy_boot_seed.o(.data*)
+ */dummy_device_id.o(.data*)
*/platform_retarget_dev.o(.data*)
. = ALIGN(32);
} > RAM AT> FLASH
@@ -286,11 +289,13 @@
*/dummy_crypto_keys.o(.bss*)
*/dummy_nv_counters.o(.bss*)
*/dummy_boot_seed.o(.bss*)
+ */dummy_device_id.o(.bss*)
*/tfm_spm_services.o(COMMON)
*/platform_retarget_dev.o(COMMON)
*/dummy_crypto_keys.o(COMMON)
*/dummy_nv_counters.o(COMMON)
*/dummy_boot_seed.o(COMMON)
+ */dummy_device_id.o(COMMON)
. = ALIGN(32);
} > RAM AT> FLASH
Image$$TFM_UNPRIV_RO_DATA$$ZI$$Base = ADDR(.TFM_UNPRIV_RO_BSS);
diff --git a/platform/ext/target/musca_a/Device/Source/armclang/musca_s.sct b/platform/ext/target/musca_a/Device/Source/armclang/musca_s.sct
index bc40a2f..694b050 100755
--- a/platform/ext/target/musca_a/Device/Source/armclang/musca_s.sct
+++ b/platform/ext/target/musca_a/Device/Source/armclang/musca_s.sct
@@ -61,6 +61,7 @@
dummy_crypto_keys.o (+RO)
dummy_nv_counters.o (+RO)
dummy_boot_seed.o (+RO)
+ dummy_device_id.o (+RO)
platform_retarget_dev.o (+RO)
*(SFN)
*armlib*
@@ -141,6 +142,7 @@
dummy_crypto_keys.o (+RW +ZI)
dummy_nv_counters.o (+RW +ZI)
dummy_boot_seed.o (+RW +ZI)
+ dummy_device_id.o (+RW +ZI)
platform_retarget_dev.o (+RW +ZI)
}
diff --git a/platform/ext/target/musca_a/Device/Source/gcc/musca_s.ld b/platform/ext/target/musca_a/Device/Source/gcc/musca_s.ld
index 951db0d..8eb0502 100644
--- a/platform/ext/target/musca_a/Device/Source/gcc/musca_s.ld
+++ b/platform/ext/target/musca_a/Device/Source/gcc/musca_s.ld
@@ -190,6 +190,8 @@
*dummy_nv_counters.o(.rodata*)
*dummy_boot_seed.o(.text*)
*dummy_boot_seed.o(.rodata*)
+ *dummy_device_id.o(.text*)
+ *dummy_device_id.o(.rodata*)
*platform_retarget_dev.o(.text*)
*platform_retarget_dev.o(.rodata*)
*(SFN)
@@ -412,6 +414,7 @@
*/dummy_crypto_keys.o(.data*)
*/dummy_nv_counters.o(.data*)
*/dummy_boot_seed.o(.data*)
+ */dummy_device_id.o(.data*)
*/platform_retarget_dev.o(.data*)
. = ALIGN(32);
} > RAM AT> FLASH
@@ -425,11 +428,13 @@
*/dummy_crypto_keys.o(.bss*)
*/dummy_nv_counters.o(.bss*)
*/dummy_boot_seed.o(.bss*)
+ */dummy_device_id.o(.bss*)
*/tfm_spm_services.o(COMMON)
*/platform_retarget_dev.o(COMMON)
*/dummy_crypto_keys.o(COMMON)
*/dummy_nv_counters.o(COMMON)
*/dummy_boot_seed.o(COMMON)
+ */dummy_device_id.o(COMMON)
. = ALIGN(32);
} > RAM AT> FLASH
Image$$TFM_UNPRIV_RO_DATA$$ZI$$Base = ADDR(.TFM_UNPRIV_RO_BSS);
diff --git a/platform/ext/target/musca_a/Device/Source/gcc/musca_s.ld.template b/platform/ext/target/musca_a/Device/Source/gcc/musca_s.ld.template
index 2d185b8..9a971a2 100644
--- a/platform/ext/target/musca_a/Device/Source/gcc/musca_s.ld.template
+++ b/platform/ext/target/musca_a/Device/Source/gcc/musca_s.ld.template
@@ -141,6 +141,8 @@
*dummy_nv_counters.o(.rodata*)
*dummy_boot_seed.o(.text*)
*dummy_boot_seed.o(.rodata*)
+ *dummy_device_id.o(.text*)
+ *dummy_device_id.o(.rodata*)
*platform_retarget_dev.o(.text*)
*platform_retarget_dev.o(.rodata*)
*(SFN)
@@ -273,6 +275,7 @@
*/dummy_crypto_keys.o(.data*)
*/dummy_nv_counters.o(.data*)
*/dummy_boot_seed.o(.data*)
+ */dummy_device_id.o(.data*)
*/platform_retarget_dev.o(.data*)
. = ALIGN(32);
} > RAM AT> FLASH
@@ -286,11 +289,13 @@
*/dummy_crypto_keys.o(.bss*)
*/dummy_nv_counters.o(.bss*)
*/dummy_boot_seed.o(.bss*)
+ */dummy_device_id.o(.bss*)
*/tfm_spm_services.o(COMMON)
*/platform_retarget_dev.o(COMMON)
*/dummy_crypto_keys.o(COMMON)
*/dummy_nv_counters.o(COMMON)
*/dummy_boot_seed.o(COMMON)
+ */dummy_device_id.o(COMMON)
. = ALIGN(32);
} > RAM AT> FLASH
Image$$TFM_UNPRIV_RO_DATA$$ZI$$Base = ADDR(.TFM_UNPRIV_RO_BSS);
diff --git a/platform/ext/target/musca_a/dummy_device_id.c b/platform/ext/target/musca_a/dummy_device_id.c
new file mode 100644
index 0000000..f7bbfe0
--- /dev/null
+++ b/platform/ext/target/musca_a/dummy_device_id.c
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2018 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "platform/include/tfm_plat_device_id.h"
+
+/*!
+ * \def DEVICE_ID_SIZE
+ *
+ * \brief Size of device ID in bytes
+ */
+#define DEVICE_ID_SIZE (16)
+
+/*!
+ * \def DEVICE_ID
+ *
+ * \brief Fixed value for device ID.
+ */
+#define DEVICE_ID 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, \
+ 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF
+
+static const uint8_t device_id[DEVICE_ID_SIZE] = {DEVICE_ID};
+
+int32_t tfm_plat_get_device_id(uint32_t size, uint8_t *buf)
+{
+ /* FixMe: This getter function must be ported per target platform. */
+
+ uint32_t i;
+ uint8_t *p_dst = buf;
+ const uint8_t *p_src = device_id;
+
+ if (size < DEVICE_ID_SIZE) {
+ return -1;
+ }
+
+ for (i = DEVICE_ID_SIZE; i > 0; i--) {
+ *p_dst = *p_src;
+ p_src++;
+ p_dst++;
+ }
+
+ return DEVICE_ID_SIZE;
+}
diff --git a/platform/ext/target/musca_b1/Device/Source/armclang/musca_s.sct b/platform/ext/target/musca_b1/Device/Source/armclang/musca_s.sct
index 80d901c..966a796 100644
--- a/platform/ext/target/musca_b1/Device/Source/armclang/musca_s.sct
+++ b/platform/ext/target/musca_b1/Device/Source/armclang/musca_s.sct
@@ -61,6 +61,7 @@
dummy_crypto_keys.o (+RO)
dummy_nv_counters.o (+RO)
dummy_boot_seed.o (+RO)
+ dummy_device_id.o (+RO)
platform_retarget_dev.o (+RO)
*(SFN)
*armlib*
@@ -141,6 +142,7 @@
dummy_crypto_keys.o (+RW +ZI)
dummy_nv_counters.o (+RW +ZI)
dummy_boot_seed.o (+RW +ZI)
+ dummy_device_id.o (+RW +ZI)
platform_retarget_dev.o (+RW +ZI)
}
diff --git a/platform/ext/target/musca_b1/Device/Source/gcc/musca_s.ld b/platform/ext/target/musca_b1/Device/Source/gcc/musca_s.ld
index 9d046b4..bf5796c 100644
--- a/platform/ext/target/musca_b1/Device/Source/gcc/musca_s.ld
+++ b/platform/ext/target/musca_b1/Device/Source/gcc/musca_s.ld
@@ -190,6 +190,8 @@
*dummy_nv_counters.o(.rodata*)
*dummy_boot_seed.o(.text*)
*dummy_boot_seed.o(.rodata*)
+ *dummy_device_id.o(.text*)
+ *dummy_device_id.o(.rodata*)
*platform_retarget_dev.o(.text*)
*platform_retarget_dev.o(.rodata*)
*(SFN)
@@ -412,6 +414,7 @@
*/dummy_crypto_keys.o(.data*)
*/dummy_nv_counters.o(.data*)
*/dummy_boot_seed.o(.data*)
+ */dummy_device_id.o(.data*)
*/platform_retarget_dev.o(.data*)
. = ALIGN(32);
} > RAM AT> FLASH
@@ -425,11 +428,13 @@
*/dummy_crypto_keys.o(.bss*)
*/dummy_nv_counters.o(.bss*)
*/dummy_boot_seed.o(.bss*)
+ */dummy_device_id.o(.bss*)
*/tfm_spm_services.o(COMMON)
*/platform_retarget_dev.o(COMMON)
*/dummy_crypto_keys.o(COMMON)
*/dummy_nv_counters.o(COMMON)
*/dummy_boot_seed.o(COMMON)
+ */dummy_device_id.o(COMMON)
. = ALIGN(32);
} > RAM AT> FLASH
Image$$TFM_UNPRIV_RO_DATA$$ZI$$Base = ADDR(.TFM_UNPRIV_RO_BSS);
diff --git a/platform/ext/target/musca_b1/Device/Source/gcc/musca_s.ld.template b/platform/ext/target/musca_b1/Device/Source/gcc/musca_s.ld.template
index 7ec8696..ccf5556 100644
--- a/platform/ext/target/musca_b1/Device/Source/gcc/musca_s.ld.template
+++ b/platform/ext/target/musca_b1/Device/Source/gcc/musca_s.ld.template
@@ -141,6 +141,8 @@
*dummy_nv_counters.o(.rodata*)
*dummy_boot_seed.o(.text*)
*dummy_boot_seed.o(.rodata*)
+ *dummy_device_id.o(.text*)
+ *dummy_device_id.o(.rodata*)
*platform_retarget_dev.o(.text*)
*platform_retarget_dev.o(.rodata*)
*(SFN)
@@ -273,6 +275,7 @@
*/dummy_crypto_keys.o(.data*)
*/dummy_nv_counters.o(.data*)
*/dummy_boot_seed.o(.data*)
+ */dummy_device_id.o(.data*)
*/platform_retarget_dev.o(.data*)
. = ALIGN(32);
} > RAM AT> FLASH
@@ -286,11 +289,13 @@
*/dummy_crypto_keys.o(.bss*)
*/dummy_nv_counters.o(.bss*)
*/dummy_boot_seed.o(.bss*)
+ */dummy_device_id.o(.bss*)
*/tfm_spm_services.o(COMMON)
*/platform_retarget_dev.o(COMMON)
*/dummy_crypto_keys.o(COMMON)
*/dummy_nv_counters.o(COMMON)
*/dummy_boot_seed.o(COMMON)
+ */dummy_device_id.o(COMMON)
. = ALIGN(32);
} > RAM AT> FLASH
Image$$TFM_UNPRIV_RO_DATA$$ZI$$Base = ADDR(.TFM_UNPRIV_RO_BSS);
diff --git a/platform/ext/target/musca_b1/dummy_device_id.c b/platform/ext/target/musca_b1/dummy_device_id.c
new file mode 100644
index 0000000..f7bbfe0
--- /dev/null
+++ b/platform/ext/target/musca_b1/dummy_device_id.c
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2018 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "platform/include/tfm_plat_device_id.h"
+
+/*!
+ * \def DEVICE_ID_SIZE
+ *
+ * \brief Size of device ID in bytes
+ */
+#define DEVICE_ID_SIZE (16)
+
+/*!
+ * \def DEVICE_ID
+ *
+ * \brief Fixed value for device ID.
+ */
+#define DEVICE_ID 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, \
+ 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF
+
+static const uint8_t device_id[DEVICE_ID_SIZE] = {DEVICE_ID};
+
+int32_t tfm_plat_get_device_id(uint32_t size, uint8_t *buf)
+{
+ /* FixMe: This getter function must be ported per target platform. */
+
+ uint32_t i;
+ uint8_t *p_dst = buf;
+ const uint8_t *p_src = device_id;
+
+ if (size < DEVICE_ID_SIZE) {
+ return -1;
+ }
+
+ for (i = DEVICE_ID_SIZE; i > 0; i--) {
+ *p_dst = *p_src;
+ p_src++;
+ p_dst++;
+ }
+
+ return DEVICE_ID_SIZE;
+}
diff --git a/platform/include/tfm_plat_device_id.h b/platform/include/tfm_plat_device_id.h
new file mode 100644
index 0000000..eb7d1ba
--- /dev/null
+++ b/platform/include/tfm_plat_device_id.h
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2018, Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ *
+ */
+
+#ifndef __TFM_PLAT_DEVICE_ID_H__
+#define __TFM_PLAT_DEVICE_ID_H__
+/**
+ * \file tfm_plat_device_id.h
+ * Provide the Universal Entity ID (UEID) of the device.
+ * It identifies the entire device or a submodule or subsystem. Must be
+ * universally and globally unique and immutable. Variable length with a
+ * maximum size of 33 bytes: 1 type byte and 256 bits.
+ */
+
+/**
+ * \note The interfaces defined in this file must be implemented for each
+ * SoC.
+ */
+
+#include <stdint.h>
+#include "tfm_plat_defs.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * \def DEVICE_ID_MAX_SIZE
+ *
+ * \brief Maximum size of device ID in bytes
+ */
+#define DEVICE_ID_MAX_SIZE (33u)
+
+/**
+ * \brief Get the UEID of the device.
+ *
+ * \param[in] size The size of the buffer in bytes to store the UEID
+ * \param[out] buf Pointer to the buffer to store the UEID
+ *
+ * \return The size of device ID in bytes, if buffer big enough to store the
+ * ID, otherwise -1.
+ */
+int32_t tfm_plat_get_device_id(uint32_t size, uint8_t *buf);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __TFM_PLAT_DEVICE_ID_H__ */
diff --git a/secure_fw/CMakeLists.txt b/secure_fw/CMakeLists.txt
index ec583c3..9008f07 100644
--- a/secure_fw/CMakeLists.txt
+++ b/secure_fw/CMakeLists.txt
@@ -47,6 +47,7 @@
set(BUILD_UART_STDOUT On)
set(BUILD_FLASH On)
set(BUILD_BOOT_SEED On)
+set(BUILD_DEVICE_ID On)
if(NOT DEFINED PLATFORM_CMAKE_FILE)
message (FATAL_ERROR "Platform specific CMake is not defined. Please set PLATFORM_CMAKE_FILE.")
elseif(NOT EXISTS ${PLATFORM_CMAKE_FILE})
diff --git a/secure_fw/core/CMakeLists.inc b/secure_fw/core/CMakeLists.inc
index 249bdc9..c7e4392 100644
--- a/secure_fw/core/CMakeLists.inc
+++ b/secure_fw/core/CMakeLists.inc
@@ -61,6 +61,7 @@
set(BUILD_UART_STDOUT Off)
set(BUILD_FLASH Off)
set(BUILD_BOOT_SEED Off)
+set(BUILD_DEVICE_ID Off)
if(NOT DEFINED PLATFORM_CMAKE_FILE)
message (FATAL_ERROR "Platform specific CMake is not defined. Please set PLATFORM_CMAKE_FILE.")
elseif(NOT EXISTS ${PLATFORM_CMAKE_FILE})
diff --git a/secure_fw/services/secure_storage/CMakeLists.inc b/secure_fw/services/secure_storage/CMakeLists.inc
index bd270e4..a822e08 100644
--- a/secure_fw/services/secure_storage/CMakeLists.inc
+++ b/secure_fw/services/secure_storage/CMakeLists.inc
@@ -144,6 +144,7 @@
set(BUILD_UART_STDOUT Off)
set(BUILD_FLASH Off)
set(BUILD_BOOT_SEED Off)
+ set(BUILD_DEVICE_ID Off)
if(NOT DEFINED PLATFORM_CMAKE_FILE)
message (FATAL_ERROR "Platform specific CMake is not defined. Please set PLATFORM_CMAKE_FILE.")
elseif(NOT EXISTS ${PLATFORM_CMAKE_FILE})
diff --git a/secure_fw/spm/CMakeLists.inc b/secure_fw/spm/CMakeLists.inc
index 640234c..d1e57d8 100644
--- a/secure_fw/spm/CMakeLists.inc
+++ b/secure_fw/spm/CMakeLists.inc
@@ -50,6 +50,7 @@
set(BUILD_UART_STDOUT Off)
set(BUILD_FLASH Off)
set(BUILD_BOOT_SEED Off)
+set(BUILD_DEVICE_ID Off)
if(NOT DEFINED PLATFORM_CMAKE_FILE)
message (FATAL_ERROR "Platform specific CMake is not defined. Please set PLATFORM_CMAKE_FILE.")
elseif(NOT EXISTS ${PLATFORM_CMAKE_FILE})
diff --git a/test/test_services/CMakeLists.inc b/test/test_services/CMakeLists.inc
index 521534a..7f25834 100644
--- a/test/test_services/CMakeLists.inc
+++ b/test/test_services/CMakeLists.inc
@@ -77,6 +77,7 @@
set(BUILD_UART_STDOUT Off)
set(BUILD_FLASH Off)
set(BUILD_BOOT_SEED Off)
+set(BUILD_DEVICE_ID Off)
if(NOT DEFINED PLATFORM_CMAKE_FILE)
message (FATAL_ERROR "Platform specific CMake is not defined. Please set PLATFORM_CMAKE_FILE.")
elseif(NOT EXISTS ${PLATFORM_CMAKE_FILE})