5 #include "sw/device/tests/penetrationtests/firmware/fi/rom_fi.h"
9 #include "sw/device/lib/base/status.h"
11 #include "sw/device/lib/dif/dif_rv_core_ibex.h"
13 #include "sw/device/lib/testing/test_framework/ottf_test_config.h"
14 #include "sw/device/lib/testing/test_framework/ujson_ottf.h"
15 #include "sw/device/lib/ujson/ujson.h"
16 #include "sw/device/tests/penetrationtests/firmware/lib/pentest_lib.h"
17 #include "sw/device/tests/penetrationtests/json/rom_fi_commands.h"
20 #include "rom_ctrl_regs.h"
23 static dif_rv_core_ibex_t rv_core_ibex;
25 static dif_rom_ctrl_t rom_ctrl;
34 pentest_set_trigger_high();
45 pentest_set_trigger_low();
48 reg_alerts = pentest_get_triggered_alerts();
53 dif_rv_core_ibex_error_status_t codes;
54 TRY(dif_rv_core_ibex_get_error_status(&rv_core_ibex, &codes));
56 rom_fi_digest_t uj_output;
57 memset(uj_output.digest, 0,
sizeof(uj_output.digest));
58 for (
size_t i = 0; i < 8; i++) {
59 if (
memcmp(&expected_digest, &fi_digest[i],
60 ROM_CTRL_DIGEST_MULTIREG_COUNT)) {
68 uj_output.err_status = codes;
69 memcpy(uj_output.alerts, reg_alerts.alerts,
sizeof(reg_alerts.alerts));
70 memcpy(uj_output.ast_alerts, sensor_alerts.alerts,
71 sizeof(sensor_alerts.alerts));
72 RESP_OK(ujson_serialize_rom_fi_digest_t, uj, &uj_output);
77 penetrationtest_cpuctrl_t uj_data;
78 TRY(ujson_deserialize_penetrationtest_cpuctrl_t(uj, &uj_data));
80 pentest_select_trigger_type(kPentestTriggerTypeSw);
81 pentest_init(kPentestTriggerSourceAes,
82 kPentestPeripheralIoDiv4 | kPentestPeripheralEdn |
83 kPentestPeripheralCsrng | kPentestPeripheralEntropy |
84 kPentestPeripheralKmac);
88 pentest_configure_alert_handler();
91 penetrationtest_device_info_t uj_output;
92 TRY(pentest_configure_cpu(
93 uj_data.icache_disable, uj_data.dummy_instr_disable,
94 uj_data.enable_jittery_clock, uj_data.enable_sram_readback,
95 &uj_output.clock_jitter_locked, &uj_output.clock_jitter_en,
96 &uj_output.sram_main_readback_locked, &uj_output.sram_ret_readback_locked,
97 &uj_output.sram_main_readback_en, &uj_output.sram_ret_readback_en));
102 TRY(dif_rom_ctrl_init(rom_ctrl_reg, &rom_ctrl));
105 TRY(dif_rv_core_ibex_init(
110 TRY(pentest_read_device_id(uj_output.device_id));
111 RESP_OK(ujson_serialize_penetrationtest_device_info_t, uj, &uj_output);
117 rom_fi_subcommand_t cmd;
118 TRY(ujson_deserialize_rom_fi_subcommand_t(uj, &cmd));
120 case kRomFiSubcommandInit:
121 return handle_rom_fi_init(uj);
122 case kRomFiSubcommandRead:
123 return handle_rom_read(uj);
125 LOG_ERROR(
"Unrecognized Rom FI subcommand: %d", cmd);
126 return INVALID_ARGUMENT();