blob: d8850eaf4f1ba5871c85f3b902a97f238e4c73bc [file]
// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
//
// Register Package auto-generated by `reggen` containing data structure
package lc_ctrl_reg_pkg;
// Param list
parameter int HwRevFieldWidth = 16;
parameter int NumTokenWords = 4;
parameter int CsrLcStateWidth = 30;
parameter int CsrLcCountWidth = 5;
parameter int CsrLcIdStateWidth = 32;
parameter int CsrOtpTestCtrlWidth = 32;
parameter int CsrOtpTestStatusWidth = 32;
parameter int NumDeviceIdWords = 8;
parameter int NumManufStateWords = 8;
parameter int NumAlerts = 3;
// Address widths within the block
parameter int BlockAw = 8;
////////////////////////////
// Typedefs for registers //
////////////////////////////
typedef struct packed {
struct packed {
logic q;
logic qe;
} fatal_prog_error;
struct packed {
logic q;
logic qe;
} fatal_state_error;
struct packed {
logic q;
logic qe;
} fatal_bus_integ_error;
} lc_ctrl_reg2hw_alert_test_reg_t;
typedef struct packed {
logic [7:0] q;
logic qe;
} lc_ctrl_reg2hw_claim_transition_if_reg_t;
typedef struct packed {
logic q;
logic qe;
} lc_ctrl_reg2hw_transition_cmd_reg_t;
typedef struct packed {
logic q;
logic qe;
} lc_ctrl_reg2hw_transition_ctrl_reg_t;
typedef struct packed {
logic [31:0] q;
logic qe;
} lc_ctrl_reg2hw_transition_token_mreg_t;
typedef struct packed {
logic [29:0] q;
logic qe;
} lc_ctrl_reg2hw_transition_target_reg_t;
typedef struct packed {
logic [31:0] q;
logic qe;
} lc_ctrl_reg2hw_otp_vendor_test_ctrl_reg_t;
typedef struct packed {
struct packed {
logic d;
} initialized;
struct packed {
logic d;
} ready;
struct packed {
logic d;
} transition_successful;
struct packed {
logic d;
} transition_count_error;
struct packed {
logic d;
} transition_error;
struct packed {
logic d;
} token_error;
struct packed {
logic d;
} flash_rma_error;
struct packed {
logic d;
} otp_error;
struct packed {
logic d;
} state_error;
struct packed {
logic d;
} bus_integ_error;
struct packed {
logic d;
} otp_partition_error;
} lc_ctrl_hw2reg_status_reg_t;
typedef struct packed {
logic [7:0] d;
} lc_ctrl_hw2reg_claim_transition_if_reg_t;
typedef struct packed {
logic d;
} lc_ctrl_hw2reg_transition_regwen_reg_t;
typedef struct packed {
logic d;
} lc_ctrl_hw2reg_transition_ctrl_reg_t;
typedef struct packed {
logic [31:0] d;
} lc_ctrl_hw2reg_transition_token_mreg_t;
typedef struct packed {
logic [29:0] d;
} lc_ctrl_hw2reg_transition_target_reg_t;
typedef struct packed {
logic [31:0] d;
} lc_ctrl_hw2reg_otp_vendor_test_ctrl_reg_t;
typedef struct packed {
logic [31:0] d;
} lc_ctrl_hw2reg_otp_vendor_test_status_reg_t;
typedef struct packed {
logic [29:0] d;
} lc_ctrl_hw2reg_lc_state_reg_t;
typedef struct packed {
logic [4:0] d;
} lc_ctrl_hw2reg_lc_transition_cnt_reg_t;
typedef struct packed {
logic [31:0] d;
} lc_ctrl_hw2reg_lc_id_state_reg_t;
typedef struct packed {
struct packed {
logic [15:0] d;
} chip_rev;
struct packed {
logic [15:0] d;
} chip_gen;
} lc_ctrl_hw2reg_hw_rev_reg_t;
typedef struct packed {
logic [31:0] d;
} lc_ctrl_hw2reg_device_id_mreg_t;
typedef struct packed {
logic [31:0] d;
} lc_ctrl_hw2reg_manuf_state_mreg_t;
// Register -> HW type
typedef struct packed {
lc_ctrl_reg2hw_alert_test_reg_t alert_test; // [214:209]
lc_ctrl_reg2hw_claim_transition_if_reg_t claim_transition_if; // [208:200]
lc_ctrl_reg2hw_transition_cmd_reg_t transition_cmd; // [199:198]
lc_ctrl_reg2hw_transition_ctrl_reg_t transition_ctrl; // [197:196]
lc_ctrl_reg2hw_transition_token_mreg_t [3:0] transition_token; // [195:64]
lc_ctrl_reg2hw_transition_target_reg_t transition_target; // [63:33]
lc_ctrl_reg2hw_otp_vendor_test_ctrl_reg_t otp_vendor_test_ctrl; // [32:0]
} lc_ctrl_reg2hw_t;
// HW -> register type
typedef struct packed {
lc_ctrl_hw2reg_status_reg_t status; // [853:843]
lc_ctrl_hw2reg_claim_transition_if_reg_t claim_transition_if; // [842:835]
lc_ctrl_hw2reg_transition_regwen_reg_t transition_regwen; // [834:834]
lc_ctrl_hw2reg_transition_ctrl_reg_t transition_ctrl; // [833:833]
lc_ctrl_hw2reg_transition_token_mreg_t [3:0] transition_token; // [832:705]
lc_ctrl_hw2reg_transition_target_reg_t transition_target; // [704:675]
lc_ctrl_hw2reg_otp_vendor_test_ctrl_reg_t otp_vendor_test_ctrl; // [674:643]
lc_ctrl_hw2reg_otp_vendor_test_status_reg_t otp_vendor_test_status; // [642:611]
lc_ctrl_hw2reg_lc_state_reg_t lc_state; // [610:581]
lc_ctrl_hw2reg_lc_transition_cnt_reg_t lc_transition_cnt; // [580:576]
lc_ctrl_hw2reg_lc_id_state_reg_t lc_id_state; // [575:544]
lc_ctrl_hw2reg_hw_rev_reg_t hw_rev; // [543:512]
lc_ctrl_hw2reg_device_id_mreg_t [7:0] device_id; // [511:256]
lc_ctrl_hw2reg_manuf_state_mreg_t [7:0] manuf_state; // [255:0]
} lc_ctrl_hw2reg_t;
// Register offsets
parameter logic [BlockAw-1:0] LC_CTRL_ALERT_TEST_OFFSET = 8'h 0;
parameter logic [BlockAw-1:0] LC_CTRL_STATUS_OFFSET = 8'h 4;
parameter logic [BlockAw-1:0] LC_CTRL_CLAIM_TRANSITION_IF_OFFSET = 8'h 8;
parameter logic [BlockAw-1:0] LC_CTRL_TRANSITION_REGWEN_OFFSET = 8'h c;
parameter logic [BlockAw-1:0] LC_CTRL_TRANSITION_CMD_OFFSET = 8'h 10;
parameter logic [BlockAw-1:0] LC_CTRL_TRANSITION_CTRL_OFFSET = 8'h 14;
parameter logic [BlockAw-1:0] LC_CTRL_TRANSITION_TOKEN_0_OFFSET = 8'h 18;
parameter logic [BlockAw-1:0] LC_CTRL_TRANSITION_TOKEN_1_OFFSET = 8'h 1c;
parameter logic [BlockAw-1:0] LC_CTRL_TRANSITION_TOKEN_2_OFFSET = 8'h 20;
parameter logic [BlockAw-1:0] LC_CTRL_TRANSITION_TOKEN_3_OFFSET = 8'h 24;
parameter logic [BlockAw-1:0] LC_CTRL_TRANSITION_TARGET_OFFSET = 8'h 28;
parameter logic [BlockAw-1:0] LC_CTRL_OTP_VENDOR_TEST_CTRL_OFFSET = 8'h 2c;
parameter logic [BlockAw-1:0] LC_CTRL_OTP_VENDOR_TEST_STATUS_OFFSET = 8'h 30;
parameter logic [BlockAw-1:0] LC_CTRL_LC_STATE_OFFSET = 8'h 34;
parameter logic [BlockAw-1:0] LC_CTRL_LC_TRANSITION_CNT_OFFSET = 8'h 38;
parameter logic [BlockAw-1:0] LC_CTRL_LC_ID_STATE_OFFSET = 8'h 3c;
parameter logic [BlockAw-1:0] LC_CTRL_HW_REV_OFFSET = 8'h 40;
parameter logic [BlockAw-1:0] LC_CTRL_DEVICE_ID_0_OFFSET = 8'h 44;
parameter logic [BlockAw-1:0] LC_CTRL_DEVICE_ID_1_OFFSET = 8'h 48;
parameter logic [BlockAw-1:0] LC_CTRL_DEVICE_ID_2_OFFSET = 8'h 4c;
parameter logic [BlockAw-1:0] LC_CTRL_DEVICE_ID_3_OFFSET = 8'h 50;
parameter logic [BlockAw-1:0] LC_CTRL_DEVICE_ID_4_OFFSET = 8'h 54;
parameter logic [BlockAw-1:0] LC_CTRL_DEVICE_ID_5_OFFSET = 8'h 58;
parameter logic [BlockAw-1:0] LC_CTRL_DEVICE_ID_6_OFFSET = 8'h 5c;
parameter logic [BlockAw-1:0] LC_CTRL_DEVICE_ID_7_OFFSET = 8'h 60;
parameter logic [BlockAw-1:0] LC_CTRL_MANUF_STATE_0_OFFSET = 8'h 64;
parameter logic [BlockAw-1:0] LC_CTRL_MANUF_STATE_1_OFFSET = 8'h 68;
parameter logic [BlockAw-1:0] LC_CTRL_MANUF_STATE_2_OFFSET = 8'h 6c;
parameter logic [BlockAw-1:0] LC_CTRL_MANUF_STATE_3_OFFSET = 8'h 70;
parameter logic [BlockAw-1:0] LC_CTRL_MANUF_STATE_4_OFFSET = 8'h 74;
parameter logic [BlockAw-1:0] LC_CTRL_MANUF_STATE_5_OFFSET = 8'h 78;
parameter logic [BlockAw-1:0] LC_CTRL_MANUF_STATE_6_OFFSET = 8'h 7c;
parameter logic [BlockAw-1:0] LC_CTRL_MANUF_STATE_7_OFFSET = 8'h 80;
// Reset values for hwext registers and their fields
parameter logic [2:0] LC_CTRL_ALERT_TEST_RESVAL = 3'h 0;
parameter logic [0:0] LC_CTRL_ALERT_TEST_FATAL_PROG_ERROR_RESVAL = 1'h 0;
parameter logic [0:0] LC_CTRL_ALERT_TEST_FATAL_STATE_ERROR_RESVAL = 1'h 0;
parameter logic [0:0] LC_CTRL_ALERT_TEST_FATAL_BUS_INTEG_ERROR_RESVAL = 1'h 0;
parameter logic [10:0] LC_CTRL_STATUS_RESVAL = 11'h 0;
parameter logic [7:0] LC_CTRL_CLAIM_TRANSITION_IF_RESVAL = 8'h 69;
parameter logic [7:0] LC_CTRL_CLAIM_TRANSITION_IF_MUTEX_RESVAL = 8'h 69;
parameter logic [0:0] LC_CTRL_TRANSITION_REGWEN_RESVAL = 1'h 0;
parameter logic [0:0] LC_CTRL_TRANSITION_REGWEN_TRANSITION_REGWEN_RESVAL = 1'h 0;
parameter logic [0:0] LC_CTRL_TRANSITION_CMD_RESVAL = 1'h 0;
parameter logic [0:0] LC_CTRL_TRANSITION_CTRL_RESVAL = 1'h 0;
parameter logic [31:0] LC_CTRL_TRANSITION_TOKEN_0_RESVAL = 32'h 0;
parameter logic [31:0] LC_CTRL_TRANSITION_TOKEN_1_RESVAL = 32'h 0;
parameter logic [31:0] LC_CTRL_TRANSITION_TOKEN_2_RESVAL = 32'h 0;
parameter logic [31:0] LC_CTRL_TRANSITION_TOKEN_3_RESVAL = 32'h 0;
parameter logic [29:0] LC_CTRL_TRANSITION_TARGET_RESVAL = 30'h 0;
parameter logic [31:0] LC_CTRL_OTP_VENDOR_TEST_CTRL_RESVAL = 32'h 0;
parameter logic [31:0] LC_CTRL_OTP_VENDOR_TEST_STATUS_RESVAL = 32'h 0;
parameter logic [29:0] LC_CTRL_LC_STATE_RESVAL = 30'h 0;
parameter logic [4:0] LC_CTRL_LC_TRANSITION_CNT_RESVAL = 5'h 0;
parameter logic [31:0] LC_CTRL_LC_ID_STATE_RESVAL = 32'h 0;
parameter logic [31:0] LC_CTRL_HW_REV_RESVAL = 32'h 0;
parameter logic [31:0] LC_CTRL_DEVICE_ID_0_RESVAL = 32'h 0;
parameter logic [31:0] LC_CTRL_DEVICE_ID_1_RESVAL = 32'h 0;
parameter logic [31:0] LC_CTRL_DEVICE_ID_2_RESVAL = 32'h 0;
parameter logic [31:0] LC_CTRL_DEVICE_ID_3_RESVAL = 32'h 0;
parameter logic [31:0] LC_CTRL_DEVICE_ID_4_RESVAL = 32'h 0;
parameter logic [31:0] LC_CTRL_DEVICE_ID_5_RESVAL = 32'h 0;
parameter logic [31:0] LC_CTRL_DEVICE_ID_6_RESVAL = 32'h 0;
parameter logic [31:0] LC_CTRL_DEVICE_ID_7_RESVAL = 32'h 0;
parameter logic [31:0] LC_CTRL_MANUF_STATE_0_RESVAL = 32'h 0;
parameter logic [31:0] LC_CTRL_MANUF_STATE_1_RESVAL = 32'h 0;
parameter logic [31:0] LC_CTRL_MANUF_STATE_2_RESVAL = 32'h 0;
parameter logic [31:0] LC_CTRL_MANUF_STATE_3_RESVAL = 32'h 0;
parameter logic [31:0] LC_CTRL_MANUF_STATE_4_RESVAL = 32'h 0;
parameter logic [31:0] LC_CTRL_MANUF_STATE_5_RESVAL = 32'h 0;
parameter logic [31:0] LC_CTRL_MANUF_STATE_6_RESVAL = 32'h 0;
parameter logic [31:0] LC_CTRL_MANUF_STATE_7_RESVAL = 32'h 0;
// Register index
typedef enum int {
LC_CTRL_ALERT_TEST,
LC_CTRL_STATUS,
LC_CTRL_CLAIM_TRANSITION_IF,
LC_CTRL_TRANSITION_REGWEN,
LC_CTRL_TRANSITION_CMD,
LC_CTRL_TRANSITION_CTRL,
LC_CTRL_TRANSITION_TOKEN_0,
LC_CTRL_TRANSITION_TOKEN_1,
LC_CTRL_TRANSITION_TOKEN_2,
LC_CTRL_TRANSITION_TOKEN_3,
LC_CTRL_TRANSITION_TARGET,
LC_CTRL_OTP_VENDOR_TEST_CTRL,
LC_CTRL_OTP_VENDOR_TEST_STATUS,
LC_CTRL_LC_STATE,
LC_CTRL_LC_TRANSITION_CNT,
LC_CTRL_LC_ID_STATE,
LC_CTRL_HW_REV,
LC_CTRL_DEVICE_ID_0,
LC_CTRL_DEVICE_ID_1,
LC_CTRL_DEVICE_ID_2,
LC_CTRL_DEVICE_ID_3,
LC_CTRL_DEVICE_ID_4,
LC_CTRL_DEVICE_ID_5,
LC_CTRL_DEVICE_ID_6,
LC_CTRL_DEVICE_ID_7,
LC_CTRL_MANUF_STATE_0,
LC_CTRL_MANUF_STATE_1,
LC_CTRL_MANUF_STATE_2,
LC_CTRL_MANUF_STATE_3,
LC_CTRL_MANUF_STATE_4,
LC_CTRL_MANUF_STATE_5,
LC_CTRL_MANUF_STATE_6,
LC_CTRL_MANUF_STATE_7
} lc_ctrl_id_e;
// Register width information to check illegal writes
parameter logic [3:0] LC_CTRL_PERMIT [33] = '{
4'b 0001, // index[ 0] LC_CTRL_ALERT_TEST
4'b 0011, // index[ 1] LC_CTRL_STATUS
4'b 0001, // index[ 2] LC_CTRL_CLAIM_TRANSITION_IF
4'b 0001, // index[ 3] LC_CTRL_TRANSITION_REGWEN
4'b 0001, // index[ 4] LC_CTRL_TRANSITION_CMD
4'b 0001, // index[ 5] LC_CTRL_TRANSITION_CTRL
4'b 1111, // index[ 6] LC_CTRL_TRANSITION_TOKEN_0
4'b 1111, // index[ 7] LC_CTRL_TRANSITION_TOKEN_1
4'b 1111, // index[ 8] LC_CTRL_TRANSITION_TOKEN_2
4'b 1111, // index[ 9] LC_CTRL_TRANSITION_TOKEN_3
4'b 1111, // index[10] LC_CTRL_TRANSITION_TARGET
4'b 1111, // index[11] LC_CTRL_OTP_VENDOR_TEST_CTRL
4'b 1111, // index[12] LC_CTRL_OTP_VENDOR_TEST_STATUS
4'b 1111, // index[13] LC_CTRL_LC_STATE
4'b 0001, // index[14] LC_CTRL_LC_TRANSITION_CNT
4'b 1111, // index[15] LC_CTRL_LC_ID_STATE
4'b 1111, // index[16] LC_CTRL_HW_REV
4'b 1111, // index[17] LC_CTRL_DEVICE_ID_0
4'b 1111, // index[18] LC_CTRL_DEVICE_ID_1
4'b 1111, // index[19] LC_CTRL_DEVICE_ID_2
4'b 1111, // index[20] LC_CTRL_DEVICE_ID_3
4'b 1111, // index[21] LC_CTRL_DEVICE_ID_4
4'b 1111, // index[22] LC_CTRL_DEVICE_ID_5
4'b 1111, // index[23] LC_CTRL_DEVICE_ID_6
4'b 1111, // index[24] LC_CTRL_DEVICE_ID_7
4'b 1111, // index[25] LC_CTRL_MANUF_STATE_0
4'b 1111, // index[26] LC_CTRL_MANUF_STATE_1
4'b 1111, // index[27] LC_CTRL_MANUF_STATE_2
4'b 1111, // index[28] LC_CTRL_MANUF_STATE_3
4'b 1111, // index[29] LC_CTRL_MANUF_STATE_4
4'b 1111, // index[30] LC_CTRL_MANUF_STATE_5
4'b 1111, // index[31] LC_CTRL_MANUF_STATE_6
4'b 1111 // index[32] LC_CTRL_MANUF_STATE_7
};
endpackage