Software APIs
usage_constraints.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/silicon_creator/lib/sigverify/usage_constraints.h"
6 
9 #include "sw/device/silicon_creator/lib/drivers/otp.h"
10 
11 #include "otp_ctrl_regs.h"
12 
13 void sigverify_usage_constraints_get(
14  uint32_t selector_bits, manifest_usage_constraints_t *usage_constraints) {
15  usage_constraints->selector_bits = selector_bits;
16  lifecycle_device_id_get(&usage_constraints->device_id);
17 
18  usage_constraints->manuf_state_creator =
19  otp_read32(OTP_CTRL_PARAM_CREATOR_SW_CFG_MANUF_STATE_OFFSET);
20  usage_constraints->manuf_state_owner =
21  otp_read32(OTP_CTRL_PARAM_OWNER_SW_CFG_MANUF_STATE_OFFSET);
22  usage_constraints->life_cycle_state = lifecycle_state_get();
23 
24  static_assert(
25  kManifestSelectorBitDeviceIdFirst == 0 &&
26  kManifestSelectorBitDeviceIdLast == kLifecycleDeviceIdNumWords - 1,
27  "mapping from selector_bits to device_id changed, loop must be updated");
28  for (size_t i = 0; i < kLifecycleDeviceIdNumWords; ++i) {
29  if (!bitfield_bit32_read(selector_bits, i)) {
30  usage_constraints->device_id.device_id[i] =
31  MANIFEST_USAGE_CONSTRAINT_UNSELECTED_WORD_VAL;
32  }
33  }
34  if (!bitfield_bit32_read(selector_bits,
35  kManifestSelectorBitManufStateCreator)) {
36  usage_constraints->manuf_state_creator =
37  MANIFEST_USAGE_CONSTRAINT_UNSELECTED_WORD_VAL;
38  }
39  if (!bitfield_bit32_read(selector_bits,
40  kManifestSelectorBitManufStateOwner)) {
41  usage_constraints->manuf_state_owner =
42  MANIFEST_USAGE_CONSTRAINT_UNSELECTED_WORD_VAL;
43  }
44  if (!bitfield_bit32_read(selector_bits, kManifestSelectorBitLifeCycleState)) {
45  usage_constraints->life_cycle_state =
46  MANIFEST_USAGE_CONSTRAINT_UNSELECTED_WORD_VAL;
47  }
48 }