13 #include "sw/device/lib/testing/flash_ctrl_testutils.h"
14 #include "sw/device/lib/testing/json/provisioning_data.h"
15 #include "sw/device/lib/testing/lc_ctrl_testutils.h"
16 #include "sw/device/lib/testing/otp_ctrl_testutils.h"
17 #include "sw/device/lib/testing/pinmux_testutils.h"
18 #include "sw/device/lib/testing/test_framework/check.h"
19 #include "sw/device/lib/testing/test_framework/ottf_console.h"
20 #include "sw/device/lib/testing/test_framework/ottf_test_config.h"
21 #include "sw/device/lib/testing/test_framework/ujson_ottf.h"
22 #include "sw/device/silicon_creator/manuf/base/flash_info_permissions.h"
23 #include "sw/device/silicon_creator/manuf/lib/flash_info_fields.h"
24 #include "sw/device/silicon_creator/manuf/lib/individualize.h"
25 #include "sw/device/silicon_creator/manuf/lib/otp_fields.h"
28 #include "otp_ctrl_regs.h"
30 OTTF_DEFINE_TEST_CONFIG(.console.type = kOttfConsoleSpiDevice,
32 .console.test_may_clobber =
false, );
34 static dif_otp_ctrl_t otp_ctrl;
35 static dif_pinmux_t pinmux;
37 static dif_lc_ctrl_t lc_ctrl;
42 static status_t peripheral_handles_init(
void) {
48 TRY(dif_otp_ctrl_init(
55 static status_t check_device_id_and_manuf_state(
56 manuf_cp_provisioning_data_t *expected_data) {
57 LOG_INFO(
"Checking expected DeviceId and ManufState data ...");
59 uint32_t byte_address = 0;
60 uint32_t actual_device_id[kHwCfgDeviceIdSizeIn32BitWords] = {0};
61 uint32_t actual_manuf_state[kHwCfgManufStateSizeIn32BitWords] = {0};
62 TRY(flash_ctrl_testutils_info_region_setup_properties(
63 &flash_ctrl_state, kFlashInfoFieldDeviceId.page,
64 kFlashInfoFieldDeviceId.bank, kFlashInfoFieldDeviceId.partition,
65 kFlashInfoPage0Permissions, &byte_address));
68 TRY(flash_ctrl_testutils_read(
69 &flash_ctrl_state, byte_address, kFlashInfoFieldDeviceId.partition,
70 actual_device_id, kDifFlashCtrlPartitionTypeInfo,
71 kHwCfgDeviceIdSizeIn32BitWords,
73 CHECK_ARRAYS_EQ(actual_device_id, expected_data->device_id,
74 kHwCfgDeviceIdSizeIn32BitWords);
77 TRY(flash_ctrl_testutils_read(
78 &flash_ctrl_state, byte_address + kFlashInfoFieldManufState.byte_offset,
79 kFlashInfoFieldManufState.partition, actual_manuf_state,
80 kDifFlashCtrlPartitionTypeInfo, kHwCfgManufStateSizeIn32BitWords,
82 CHECK_ARRAYS_EQ(actual_manuf_state, expected_data->manuf_state,
83 kHwCfgManufStateSizeIn32BitWords);
89 CHECK_STATUS_OK(peripheral_handles_init());
90 pinmux_testutils_init(&pinmux);
92 ujson_t uj = ujson_ottf_console();
98 LOG_INFO(
"Waiting for expected CP provisioning data ...");
101 manuf_cp_provisioning_data_t expected_data;
103 ujson_deserialize_manuf_cp_provisioning_data_t(&uj, &expected_data));
106 CHECK_STATUS_OK(check_device_id_and_manuf_state(&expected_data));
112 CHECK_STATUS_OK(manuf_individualize_device_secret0_check(&otp_ctrl));
114 LOG_INFO(
"Checks complete. Success");