Skip to content

Commit 6f874ef

Browse files
robertszczepanskikgugala
authored andcommitted
Set reset value for Indirect FIFO Max Xfer size in RDL
1 parent 2e8e415 commit 6f874ef

File tree

9 files changed

+12
-61
lines changed

9 files changed

+12
-61
lines changed

src/csr/I3CCSR.sv

Lines changed: 2 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -986,12 +986,6 @@ module I3CCSR (
986986
logic load_next;
987987
} FIFO_SIZE;
988988
} INDIRECT_FIFO_STATUS_3;
989-
struct packed{
990-
struct packed{
991-
logic [31:0] next;
992-
logic load_next;
993-
} MAX_TRANSFER_SIZE;
994-
} INDIRECT_FIFO_STATUS_4;
995989
struct packed{
996990
struct packed{
997991
logic [31:0] next;
@@ -2238,11 +2232,6 @@ module I3CCSR (
22382232
logic [31:0] value;
22392233
} FIFO_SIZE;
22402234
} INDIRECT_FIFO_STATUS_3;
2241-
struct packed{
2242-
struct packed{
2243-
logic [31:0] value;
2244-
} MAX_TRANSFER_SIZE;
2245-
} INDIRECT_FIFO_STATUS_4;
22462235
struct packed{
22472236
struct packed{
22482237
logic [31:0] value;
@@ -5996,29 +5985,7 @@ module I3CCSR (
59965985
end
59975986
end
59985987
assign hwif_out.I3C_EC.SecFwRecoveryIf.INDIRECT_FIFO_STATUS_3.FIFO_SIZE.value = field_storage.I3C_EC.SecFwRecoveryIf.INDIRECT_FIFO_STATUS_3.FIFO_SIZE.value;
5999-
// Field: I3CCSR.I3C_EC.SecFwRecoveryIf.INDIRECT_FIFO_STATUS_4.MAX_TRANSFER_SIZE
6000-
always_comb begin
6001-
automatic logic [31:0] next_c;
6002-
automatic logic load_next_c;
6003-
next_c = field_storage.I3C_EC.SecFwRecoveryIf.INDIRECT_FIFO_STATUS_4.MAX_TRANSFER_SIZE.value;
6004-
load_next_c = '0;
6005-
if(hwif_in.I3C_EC.SecFwRecoveryIf.INDIRECT_FIFO_STATUS_4.MAX_TRANSFER_SIZE.we) begin // HW Write - we
6006-
next_c = hwif_in.I3C_EC.SecFwRecoveryIf.INDIRECT_FIFO_STATUS_4.MAX_TRANSFER_SIZE.next;
6007-
load_next_c = '1;
6008-
end
6009-
field_combo.I3C_EC.SecFwRecoveryIf.INDIRECT_FIFO_STATUS_4.MAX_TRANSFER_SIZE.next = next_c;
6010-
field_combo.I3C_EC.SecFwRecoveryIf.INDIRECT_FIFO_STATUS_4.MAX_TRANSFER_SIZE.load_next = load_next_c;
6011-
end
6012-
always_ff @(posedge clk or negedge hwif_in.rst_ni) begin
6013-
if(~hwif_in.rst_ni) begin
6014-
field_storage.I3C_EC.SecFwRecoveryIf.INDIRECT_FIFO_STATUS_4.MAX_TRANSFER_SIZE.value <= 32'h0;
6015-
end else begin
6016-
if(field_combo.I3C_EC.SecFwRecoveryIf.INDIRECT_FIFO_STATUS_4.MAX_TRANSFER_SIZE.load_next) begin
6017-
field_storage.I3C_EC.SecFwRecoveryIf.INDIRECT_FIFO_STATUS_4.MAX_TRANSFER_SIZE.value <= field_combo.I3C_EC.SecFwRecoveryIf.INDIRECT_FIFO_STATUS_4.MAX_TRANSFER_SIZE.next;
6018-
end
6019-
end
6020-
end
6021-
assign hwif_out.I3C_EC.SecFwRecoveryIf.INDIRECT_FIFO_STATUS_4.MAX_TRANSFER_SIZE.value = field_storage.I3C_EC.SecFwRecoveryIf.INDIRECT_FIFO_STATUS_4.MAX_TRANSFER_SIZE.value;
5988+
assign hwif_out.I3C_EC.SecFwRecoveryIf.INDIRECT_FIFO_STATUS_4.MAX_TRANSFER_SIZE.value = 32'h40;
60225989
// Field: I3CCSR.I3C_EC.SecFwRecoveryIf.INDIRECT_FIFO_RESERVED.DATA
60235990
always_comb begin
60245991
automatic logic [31:0] next_c;
@@ -10312,7 +10279,7 @@ module I3CCSR (
1031210279
assign readback_array[52][31:0] = (decoded_reg_strb.I3C_EC.SecFwRecoveryIf.INDIRECT_FIFO_STATUS_1 && !decoded_req_is_wr) ? field_storage.I3C_EC.SecFwRecoveryIf.INDIRECT_FIFO_STATUS_1.WRITE_INDEX.value : '0;
1031310280
assign readback_array[53][31:0] = (decoded_reg_strb.I3C_EC.SecFwRecoveryIf.INDIRECT_FIFO_STATUS_2 && !decoded_req_is_wr) ? field_storage.I3C_EC.SecFwRecoveryIf.INDIRECT_FIFO_STATUS_2.READ_INDEX.value : '0;
1031410281
assign readback_array[54][31:0] = (decoded_reg_strb.I3C_EC.SecFwRecoveryIf.INDIRECT_FIFO_STATUS_3 && !decoded_req_is_wr) ? field_storage.I3C_EC.SecFwRecoveryIf.INDIRECT_FIFO_STATUS_3.FIFO_SIZE.value : '0;
10315-
assign readback_array[55][31:0] = (decoded_reg_strb.I3C_EC.SecFwRecoveryIf.INDIRECT_FIFO_STATUS_4 && !decoded_req_is_wr) ? field_storage.I3C_EC.SecFwRecoveryIf.INDIRECT_FIFO_STATUS_4.MAX_TRANSFER_SIZE.value : '0;
10282+
assign readback_array[55][31:0] = (decoded_reg_strb.I3C_EC.SecFwRecoveryIf.INDIRECT_FIFO_STATUS_4 && !decoded_req_is_wr) ? 32'h40 : '0;
1031610283
assign readback_array[56][31:0] = (decoded_reg_strb.I3C_EC.SecFwRecoveryIf.INDIRECT_FIFO_RESERVED && !decoded_req_is_wr) ? field_storage.I3C_EC.SecFwRecoveryIf.INDIRECT_FIFO_RESERVED.DATA.value : '0;
1031710284
assign readback_array[57] = hwif_in.I3C_EC.SecFwRecoveryIf.INDIRECT_FIFO_DATA.rd_ack ? hwif_in.I3C_EC.SecFwRecoveryIf.INDIRECT_FIFO_DATA.rd_data : '0;
1031810285
assign readback_array[58][7:0] = (decoded_reg_strb.I3C_EC.StdbyCtrlMode.EXTCAP_HEADER && !decoded_req_is_wr) ? 8'h12 : '0;

src/csr/I3CCSR_pkg.sv

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -562,15 +562,6 @@ package I3CCSR_pkg;
562562
I3CCSR__I3C_EC__SecFwRecoveryIf__INDIRECT_FIFO_STATUS_3__FIFO_SIZE__in_t FIFO_SIZE;
563563
} I3CCSR__I3C_EC__SecFwRecoveryIf__INDIRECT_FIFO_STATUS_3__in_t;
564564

565-
typedef struct packed{
566-
logic [31:0] next;
567-
logic we;
568-
} I3CCSR__I3C_EC__SecFwRecoveryIf__INDIRECT_FIFO_STATUS_4__MAX_TRANSFER_SIZE__in_t;
569-
570-
typedef struct packed{
571-
I3CCSR__I3C_EC__SecFwRecoveryIf__INDIRECT_FIFO_STATUS_4__MAX_TRANSFER_SIZE__in_t MAX_TRANSFER_SIZE;
572-
} I3CCSR__I3C_EC__SecFwRecoveryIf__INDIRECT_FIFO_STATUS_4__in_t;
573-
574565
typedef struct packed{
575566
logic [31:0] next;
576567
logic we;
@@ -610,7 +601,6 @@ package I3CCSR_pkg;
610601
I3CCSR__I3C_EC__SecFwRecoveryIf__INDIRECT_FIFO_STATUS_1__in_t INDIRECT_FIFO_STATUS_1;
611602
I3CCSR__I3C_EC__SecFwRecoveryIf__INDIRECT_FIFO_STATUS_2__in_t INDIRECT_FIFO_STATUS_2;
612603
I3CCSR__I3C_EC__SecFwRecoveryIf__INDIRECT_FIFO_STATUS_3__in_t INDIRECT_FIFO_STATUS_3;
613-
I3CCSR__I3C_EC__SecFwRecoveryIf__INDIRECT_FIFO_STATUS_4__in_t INDIRECT_FIFO_STATUS_4;
614604
I3CCSR__I3C_EC__SecFwRecoveryIf__INDIRECT_FIFO_RESERVED__in_t INDIRECT_FIFO_RESERVED;
615605
I3CCSR__I3C_EC__SecFwRecoveryIf__INDIRECT_FIFO_DATA__in_t INDIRECT_FIFO_DATA;
616606
} I3CCSR__I3C_EC__SecFwRecoveryIf__in_t;

src/csr/I3CCSR_uvm.sv

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2614,7 +2614,7 @@ package I3CCSR_uvm;
26142614

26152615
virtual function void build();
26162616
this.MAX_TRANSFER_SIZE = new("MAX_TRANSFER_SIZE");
2617-
this.MAX_TRANSFER_SIZE.configure(this, 32, 0, "RO", 1, 'h0, 1, 1, 0);
2617+
this.MAX_TRANSFER_SIZE.configure(this, 32, 0, "RO", 0, 'h40, 1, 1, 0);
26182618
if (has_coverage(UVM_CVR_REG_BITS)) begin
26192619
foreach(MAX_TRANSFER_SIZE_bit_cg[bt]) MAX_TRANSFER_SIZE_bit_cg[bt] = new();
26202620
end

src/rdl/docs/README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1906,11 +1906,12 @@ Component Memory Space (CMS):</p>
19061906

19071907
|Bits| Identifier |Access|Reset| Name |
19081908
|----|-----------------|------|-----|-----------------|
1909-
|31:0|MAX_TRANSFER_SIZE| r | 0x0 |Max transfer size|
1909+
|31:0|MAX_TRANSFER_SIZE| r | 0x40|Max transfer size|
19101910

19111911
#### MAX_TRANSFER_SIZE field
19121912

19131913
<p>Max size of the data payload in each read/write to INDIRECT_FIFO_DATA in 4B units</p>
1914+
<p>Enforced to 256 bytes (64 DWORDs) by Caliptra Subsystem Recovery Sequence</p>
19141915

19151916
### INDIRECT_FIFO_RESERVED register
19161917

src/rdl/secure_firmware_recovery_interface.rdl

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -659,11 +659,12 @@ regfile SecureFirmwareRecoveryInterfaceRegisters{
659659
name = "Indirect FIFO Status 4";
660660
field {
661661
name = "Max transfer size";
662-
desc = "Max size of the data payload in each read/write to INDIRECT_FIFO_DATA in 4B units";
662+
desc = "Max size of the data payload in each read/write to INDIRECT_FIFO_DATA in 4B units
663+
664+
Enforced to 256 bytes (64 DWORDs) by Caliptra Subsystem Recovery Sequence";
663665
sw = r;
664-
hw = rw;
665-
we = true;
666-
reset = 32'h0;
666+
hw = r;
667+
reset = 32'd64;
667668
} MAX_TRANSFER_SIZE[31:0];
668669
} INDIRECT_FIFO_STATUS_4;
669670
reg {

src/recovery/recovery_executor.sv

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -681,7 +681,6 @@ module recovery_executor
681681
hwif_rec_o.INDIRECT_FIFO_CTRL_0.CMS.we = indirect_fifo_ctrl_0_we;
682682
hwif_rec_o.INDIRECT_FIFO_CTRL_1.IMAGE_SIZE.we = tti_rx_rack_i & (csr_sel == CSR_INDIRECT_FIFO_CTRL_1);
683683
hwif_rec_o.INDIRECT_FIFO_STATUS_0.REGION_TYPE.we = '0;
684-
hwif_rec_o.INDIRECT_FIFO_STATUS_4.MAX_TRANSFER_SIZE.we = 1'b1;
685684
hwif_rec_o.INDIRECT_FIFO_RESERVED.DATA.we = '0;
686685
end
687686

@@ -739,7 +738,6 @@ module recovery_executor
739738
hwif_rec_o.PROT_CAP_3.NUM_OF_CMS_REGIONS.next = '0;
740739
hwif_rec_o.PROT_CAP_3.MAX_RESP_TIME.next = '0;
741740
hwif_rec_o.PROT_CAP_3.HEARTBEAT_PERIOD.next = '0;
742-
hwif_rec_o.INDIRECT_FIFO_STATUS_4.MAX_TRANSFER_SIZE.next = 32'd64; // Caliptra Subsystem Recovery Sequence specifies this to 256 bytes (64 DWORDs)
743741
hwif_rec_o.PROT_CAP_2.REC_PROT_VERSION.next = '0;
744742
hwif_rec_o.PROT_CAP_2.AGENT_CAPS.next = '0;
745743
hwif_rec_o.HW_STATUS.TEMP_CRITICAL.next = '0;

verification/cocotb/common/reg_map.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2009,9 +2009,9 @@
20092009
"MAX_TRANSFER_SIZE": {
20102010
"low": 0,
20112011
"mask": 4294967295,
2012-
"reset": 0,
2012+
"reset": 64,
20132013
"sw": "r",
2014-
"hw": "rw",
2014+
"hw": "r",
20152015
"woclr": 0,
20162016
"rclr": 0,
20172017
"hwclr": 0

verification/cocotb/top/lib_i3c_top/test_bypass.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -793,8 +793,6 @@ def csr_access_test_data(tb, rd_acc=Access.Priv, wr_acc=Access.Priv):
793793
# by 'recovery_executor' to 'IndirectFifoDepth' parameter
794794
if reg_name == "INDIRECT_FIFO_STATUS_3" and f_name == "FIFO_SIZE":
795795
data = 0x40
796-
if reg_name == "INDIRECT_FIFO_STATUS_4" and f_name == "MAX_TRANSFER_SIZE":
797-
data = 0x40
798796

799797
if rd_acc == Access.Unpriv:
800798
data = 0x0

verification/cocotb/top/lib_i3c_top/test_recovery.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1446,10 +1446,6 @@ def csr_access_test_data(tb):
14461446
# by 'recovery_executor' to 'IndirectFifoDepth' parameter
14471447
if reg_name == "INDIRECT_FIFO_STATUS_3" and f_name == "FIFO_SIZE":
14481448
data = 0x40
1449-
# The reset value of 'INDIRECT_FIFO_STATUS_4' is currently unused
1450-
# and tied to 0
1451-
if reg_name == "INDIRECT_FIFO_STATUS_4" and f_name == "MAX_TRANSFER_SIZE":
1452-
data = 0x0
14531449

14541450
exp_rd |= data
14551451
test_data.append([reg_name, addr, wdata, exp_rd])

0 commit comments

Comments
 (0)