Software APIs
individualize_functest.c
1 // Copyright lowRISC contributors (OpenTitan project).
2 // Licensed under the Apache License, Version 2.0, see LICENSE for details.
3 // SPDX-License-Identifier: Apache-2.0
4 
5 #include "sw/device/lib/base/status.h"
10 #include "sw/device/lib/testing/lc_ctrl_testutils.h"
11 #include "sw/device/lib/testing/rstmgr_testutils.h"
12 #include "sw/device/lib/testing/test_framework/check.h"
14 #include "sw/device/silicon_creator/manuf/lib/individualize.h"
15 #include "sw/device/silicon_creator/manuf/lib/otp_fields.h"
16 
18 
19 OTTF_DEFINE_TEST_CONFIG();
20 
21 /**
22  * DIF Handles.
23  *
24  * Keep this list sorted in alphabetical order.
25  */
26 static dif_flash_ctrl_state_t flash_state;
27 static dif_lc_ctrl_t lc_ctrl;
28 static dif_otp_ctrl_t otp_ctrl;
29 static dif_rstmgr_t rstmgr;
30 
31 /**
32  * Initializes all DIF handles used in this module.
33  */
34 static status_t peripheral_handles_init(void) {
36  &flash_state,
38  TRY(dif_lc_ctrl_init(
40  TRY(dif_otp_ctrl_init(
43  &rstmgr));
44  return OK_STATUS();
45 }
46 
47 /**
48  * Perform software reset.
49  */
50 void sw_reset(void) {
51  rstmgr_testutils_reason_clear();
52  CHECK_DIF_OK(dif_rstmgr_software_device_reset(&rstmgr));
54 }
55 
56 bool test_main(void) {
57  CHECK_STATUS_OK(peripheral_handles_init());
58  CHECK_STATUS_OK(
59  lc_ctrl_testutils_check_lc_state(&lc_ctrl, kDifLcCtrlStateTestUnlocked1));
60 
61  if (!status_ok(manuf_individualize_device_hw_cfg_check(&otp_ctrl))) {
62  dif_flash_ctrl_region_properties_t kFlashInfoPage0Permissions = {
63  .ecc_en = kMultiBitBool4True,
64  .high_endurance_en = kMultiBitBool4False,
65  .erase_en = kMultiBitBool4True,
66  .prog_en = kMultiBitBool4True,
67  .rd_en = kMultiBitBool4True,
68  .scramble_en = kMultiBitBool4False};
69  uint32_t device_id[kHwCfgDeviceIdSizeIn32BitWords] = {
70  0xAAAAAAAA, 0xBBBBBBBB, 0xAAAAAAAA, 0xBBBBBBBB,
71  0xAAAAAAAA, 0xBBBBBBBB, 0xAAAAAAAA, 0xBBBBBBBB};
72  CHECK_STATUS_OK(manuf_individualize_device_hw_cfg(
73  &flash_state, &otp_ctrl, kFlashInfoPage0Permissions, device_id));
74  sw_reset();
75  }
76 
77  return true;
78 }