9 #include "sw/device/lib/testing/otp_ctrl_testutils.h"
13 #include "otp_ctrl_regs.h"
15 OTTF_DEFINE_TEST_CONFIG();
26 (OTP_CTRL_PARAM_SECRET0_SIZE - OTP_CTRL_PARAM_SECRET0_DIGEST_SIZE) /
32 (OTP_CTRL_PARAM_SECRET1_SIZE - OTP_CTRL_PARAM_SECRET1_DIGEST_SIZE) /
38 (OTP_CTRL_PARAM_SECRET2_SIZE - OTP_CTRL_PARAM_SECRET2_DIGEST_SIZE) /
43 static inline uint32_t lower(uint64_t dword) {
return (uint32_t)dword; }
45 static inline uint32_t upper(uint64_t dword) {
return (uint32_t)(dword >> 32); }
47 size_t compare_dword(
const uint64_t *actual_arr, uint32_t part_idx,
48 uint32_t dword_idx, uint64_t expected) {
49 const uint64_t actual = actual_arr[dword_idx];
50 if (actual == expected) {
53 LOG_WARNING(
"SECRET%0d, dword %0d: 0x%08x%08x != 0x%08x%08x", part_idx,
54 dword_idx, upper(actual), lower(actual), upper(expected),
61 dif_otp_ctrl_t otp_ctrl;
63 CHECK_DIF_OK(dif_otp_ctrl_init(
68 size_t dwords_diff = 0;
73 for (uint32_t i = 0; i <
ARRAYSIZE(kPartitions); ++i) {
75 uint64_t readout[partition->size];
77 LOG_INFO(
"Checking partition SECRET%0d.", i);
78 CHECK_STATUS_OK(otp_ctrl_testutils_dai_read64_array(
79 &otp_ctrl, partition->partition, 0, readout,
ARRAYSIZE(readout)));
84 dwords_diff += compare_dword(readout, 0, 0, 0x749f1cb4a7daf4f5);
85 dwords_diff += compare_dword(readout, 0, 1, 0x117dbd7aca3f7de6);
86 dwords_diff += compare_dword(readout, 0, 2, 0xd6313735da1740e4);
87 dwords_diff += compare_dword(readout, 0, 3, 0x1dc4b32c25ef2c31);
88 CHECK(partition->size == 4,
"Unexpected size of SECRET0 partition!");
92 dwords_diff += compare_dword(readout, 1, 0, 0x8ed040844dde2dca);
93 dwords_diff += compare_dword(readout, 1, 1, 0x8251c8921ed1a7fc);
94 dwords_diff += compare_dword(readout, 1, 2, 0x038c1b4e7bd7394c);
95 dwords_diff += compare_dword(readout, 1, 3, 0x434677540fdc9956);
96 dwords_diff += compare_dword(readout, 1, 4, 0x5cc32c34646c9a9f);
97 dwords_diff += compare_dword(readout, 1, 5, 0x871b3d2726a67336);
98 dwords_diff += compare_dword(readout, 1, 6, 0xdcc70e44beeff5f4);
99 dwords_diff += compare_dword(readout, 1, 7, 0x7cdb1a9d39c20016);
100 dwords_diff += compare_dword(readout, 1, 8, 0x0e83fabc03c68203);
101 dwords_diff += compare_dword(readout, 1, 9, 0x57f20b5b2e200c01);
102 CHECK(partition->size == 10,
"Unexpected size of SECRET1 partition!");
106 dwords_diff += compare_dword(readout, 2, 0, 0xbed4fd235f6b24d4);
107 dwords_diff += compare_dword(readout, 2, 1, 0x6ef5b95acb3ded39);
108 dwords_diff += compare_dword(readout, 2, 2, 0xa9398fab0bba1e23);
109 dwords_diff += compare_dword(readout, 2, 3, 0x196906bfe0051fa8);
110 dwords_diff += compare_dword(readout, 2, 4, 0xea9f54f370a2fdf8);
111 dwords_diff += compare_dword(readout, 2, 5, 0xf915734729d70391);
112 dwords_diff += compare_dword(readout, 2, 6, 0xd3bd2ecfc0fc7581);
113 dwords_diff += compare_dword(readout, 2, 7, 0xbaa7bc074a97c885);
114 dwords_diff += compare_dword(readout, 2, 8, 0xdda3ceb51b6cbc3b);
115 dwords_diff += compare_dword(readout, 2, 9, 0xe889c1ccf0f57d6d);
116 CHECK(partition->size == 10,
"Unexpected size of SECRET2 partition!");
126 return dwords_diff == 0;