Skip to content

Commit 968704e

Browse files
sreeramIfxkartben
authored andcommitted
soc: cyw20829: add support of Secure LCS
Enable support of SECURE LCS stage. In this stage, the protection state is set to “secure”. A secured device will boot only when the authentication of its flash boot and application code succeeds Signed-off-by: Sreeram Tatapudi <sreeram.praveen@infineon.com>
1 parent 7ef83fc commit 968704e

File tree

3 files changed

+101
-5
lines changed

3 files changed

+101
-5
lines changed

soc/infineon/cat1b/cyw20829/CMakeLists.txt

Lines changed: 79 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,89 @@ zephyr_compile_definitions(COMPONENT_CM33)
1616
zephyr_compile_definitions(FLASH_BOOT)
1717
zephyr_compile_definitions(CY_PDL_FLASH_BOOT)
1818

19-
# Use custome linker script
19+
# Use custom linker script
2020
set(SOC_LINKER_SCRIPT ${ZEPHYR_BASE}/soc/infineon/cat1b/cyw20829/linker.ld CACHE INTERNAL "")
2121

2222
# Get sram_bootstrap address and size
2323
dt_nodelabel(sram_bootstrap NODELABEL "sram_bootstrap")
2424
dt_reg_addr(bootstrap_dst_addr PATH ${sram_bootstrap})
2525
dt_reg_size(bootstrap_size PATH ${sram_bootstrap})
2626

27+
set(gen_app_header_args)
28+
set(app_signed_enc_path ${ZEPHYR_BINARY_DIR}/${KERNEL_NAME})
29+
30+
if(CONFIG_INFINEON_SECURE_LCS OR (DEFINED CONFIG_MCUBOOT_ENCRYPTION_KEY_FILE) OR (DEFINED CONFIG_MCUBOOT_SIGNATURE_KEY_FILE))
31+
# Check cysecuretools
32+
find_program(CYSECURETOOLS cysecuretools REQUIRED)
33+
message("-- Found cysecuretools: ${CYSECURETOOLS}")
34+
35+
# Locate CySecureTools policy file
36+
if(IS_ABSOLUTE "${CONFIG_INFINEON_SECURE_POLICY}")
37+
cmake_path(SET cysecuretools_policy "${CONFIG_INFINEON_SECURE_POLICY}")
38+
else()
39+
find_file(
40+
cysecuretools_policy
41+
NAMES
42+
"${CONFIG_INFINEON_SECURE_POLICY}"
43+
PATHS
44+
"${APPLICATION_SOURCE_DIR}"
45+
"${WEST_TOPDIR}"
46+
"${SOC_FULL_DIR}/cyw20829"
47+
NO_DEFAULT_PATH
48+
)
49+
endif()
50+
51+
if(NOT IS_ABSOLUTE "${cysecuretools_policy}" OR NOT EXISTS "${cysecuretools_policy}")
52+
message(FATAL_ERROR "Can't find policy file \"${CONFIG_INFINEON_SECURE_POLICY}\" "
53+
"(Note: Relative paths are searched through "
54+
"APPLICATION_SOURCE_DIR=\"${APPLICATION_SOURCE_DIR}\" "
55+
"and WEST_TOPDIR=\"${WEST_TOPDIR}\")")
56+
endif()
57+
58+
message("-- Using cysecuretools policy: ${cysecuretools_policy}")
59+
set(CYSECURETOOLS_POLICY ${cysecuretools_policy} CACHE PATH "cysecuretools policy")
60+
endif()
61+
62+
if(CONFIG_INFINEON_SECURE_LCS)
63+
#
64+
# Additional postbuild action for SECURE LCS
65+
#
66+
set(gen_app_header_args ${gen_app_header_args} --secure_lcs True)
67+
set(app_signed_path ${ZEPHYR_BINARY_DIR}/${KERNEL_NAME}.signed)
68+
set(app_signed_enc_path "${app_signed_path}")
69+
70+
if(CONFIG_INFINEON_SMIF_ENCRYPTION)
71+
set(gen_app_header_args ${gen_app_header_args} --smif-config ${ZEPHYR_BINARY_DIR}/nonce-output.bin)
72+
set(enc_option --encrypt --nonce-output nonce-output.bin)
73+
# The encrypted image file path generated by cysecuretools
74+
set(app_signed_enc_path "${app_signed_path}_encrypted")
75+
endif()
76+
77+
set(bin2hex_option bin2hex --image ${app_signed_enc_path}.bin --output ${app_signed_enc_path}.hex --offset 0x60000030)
78+
79+
# Sign Zephyr L1 app in SECURE LCS
80+
set_property(GLOBAL APPEND PROPERTY extra_post_build_commands
81+
COMMAND ${CYSECURETOOLS} -q -t cyw20829
82+
-p ${cysecuretools_policy} sign-image --image-format bootrom_next_app
83+
-i ${ZEPHYR_BINARY_DIR}/${KERNEL_BIN_NAME} -k 0 -o ${app_signed_path}.bin
84+
--slot-size ${CONFIG_FLASH_LOAD_SIZE} --app-addr 0x08000030
85+
${enc_option} ${bin2hex_option}
86+
)
87+
endif()
88+
89+
# By default the MCUboot header size if set to 0x400 by the cysecuretools
90+
# https://github.com/Infineon/edgeprotecttools/blob/master/docs/README_GENERAL.md#sign-image
91+
set(mcuboot_header_offset 0)
92+
if((DEFINED CONFIG_MCUBOOT_ENCRYPTION_KEY_FILE) OR (DEFINED CONFIG_MCUBOOT_SIGNATURE_KEY_FILE))
93+
set(mcuboot_header_offset 0x400)
94+
endif()
95+
2796
# Calculate the place in flash
2897
math(EXPR flash_addr_offset
29-
"${CONFIG_CYW20829_FLASH_SAHB_ADDR} + ${CONFIG_FLASH_LOAD_OFFSET} + ${CONFIG_ROM_START_OFFSET}"
98+
"${CONFIG_CYW20829_FLASH_SAHB_ADDR} + ${CONFIG_FLASH_LOAD_OFFSET} + ${mcuboot_header_offset}"
3099
OUTPUT_FORMAT HEXADECIMAL
31100
)
32-
set(gen_app_header_args --flash_addr_offset ${flash_addr_offset})
101+
set(gen_app_header_args ${gen_app_header_args} --flash_addr_offset ${flash_addr_offset} )
33102

34103
# Generate platform specific header (TOC2, l1_desc, etc)
35104
set_property(GLOBAL APPEND PROPERTY extra_post_build_commands COMMAND
@@ -45,7 +114,13 @@ set(MERGED_FILE ${CMAKE_BINARY_DIR}/zephyr/zephyr_merged.hex CACHE PATH "merged
45114
set_property(GLOBAL APPEND PROPERTY extra_post_build_commands
46115
COMMAND ${PYTHON_EXECUTABLE} ${ZEPHYR_BASE}/scripts/build/mergehex.py
47116
-o ${MERGED_FILE}
48-
${ZEPHYR_BINARY_DIR}/${KERNEL_NAME}.hex ${ZEPHYR_BINARY_DIR}/app_header.hex
117+
${app_signed_enc_path}.hex ${ZEPHYR_BINARY_DIR}/app_header.hex
49118
)
50119

51120
set_property(GLOBAL APPEND PROPERTY extra_post_build_byproducts ${MERGED_FILE})
121+
122+
# Use custom mcuboot cmake for sign/encrypt by using cysecuretools
123+
if(CONFIG_BOOTLOADER_MCUBOOT)
124+
set_target_properties(zephyr_property_target PROPERTIES SIGNING_SCRIPT
125+
${CMAKE_CURRENT_LIST_DIR}/mcuboot.cmake)
126+
endif()

soc/infineon/cat1b/cyw20829/Kconfig

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,27 @@ config SOC_SERIES_CYW20829
1717
select BUILD_OUTPUT_BIN
1818
select SOC_EARLY_INIT_HOOK
1919

20+
config INFINEON_SECURE_LCS
21+
bool "Secure LCS stage support"
22+
help
23+
Enable support of SECURE LCS stage. In this stage, the protection
24+
state is set to “secure”. A secured device will boot only when the
25+
authentication of its flash boot and application code succeeds.
26+
27+
config INFINEON_SECURE_POLICY
28+
string "Path to policy JSON file"
29+
default "default_policy.json"
30+
help
31+
Policy is a text file in JSON format that contains a set of properties
32+
for the device configuration (e.g., enabling/disabling debug access ports,
33+
SMIF configuration, keys information, etc).
34+
35+
config INFINEON_SMIF_ENCRYPTION
36+
bool "SMIF encryption support"
37+
depends on INFINEON_SECURE_LCS
38+
help
39+
Enables SMIF encryption.
40+
2041
config CYW20829_FLASH_SAHB_ADDR
2142
hex
2243
default $(dt_nodelabel_reg_addr_hex,flash_sahb)

tests/application_development/vector_table_relocation/src/main.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727

2828
#if (defined(CONFIG_ARM_MPU) && !defined(CONFIG_CPU_HAS_NXP_SYSMPU))
2929
#include <cmsis_core.h>
30-
void disable_mpu_rasr_xn(void)
30+
static void disable_mpu_rasr_xn(void)
3131
{
3232
uint32_t index;
3333
/* Kept the max index as 8(irrespective of soc) because the sram

0 commit comments

Comments
 (0)