Skip to content

Commit

Permalink
recovery: clear tx_desc on recovery mode enter
Browse files Browse the repository at this point in the history
  • Loading branch information
kgugala committed Jan 10, 2025
1 parent bdfe7da commit 6d77d9d
Show file tree
Hide file tree
Showing 6 changed files with 42 additions and 11 deletions.
6 changes: 4 additions & 2 deletions src/ctrl/controller.sv
Original file line number Diff line number Diff line change
Expand Up @@ -234,7 +234,8 @@ module controller
input logic peripheral_reset_done_i,
output logic escalated_reset_o,

output logic err_o
output logic err_o,
input recovery_mode_enter_i
);

logic phy_en;
Expand Down Expand Up @@ -515,7 +516,8 @@ module controller
.mrl_o(mrl),
.peripheral_reset_o,
.peripheral_reset_done_i,
.escalated_reset_o
.escalated_reset_o,
.recovery_mode_enter_i(recovery_mode_enter_i)
);

endmodule
6 changes: 4 additions & 2 deletions src/ctrl/controller_standby.sv
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,8 @@ module controller_standby
input logic peripheral_reset_done_i,
output logic escalated_reset_o,

output logic err_o
output logic err_o,
input recovery_mode_enter_i
);

logic sel_i2c_i3c; // i2c = 0; i3c = 1;
Expand Down Expand Up @@ -408,7 +409,8 @@ module controller_standby
.parity_err_o(parity_err),
.peripheral_reset_o,
.peripheral_reset_done_i,
.escalated_reset_o
.escalated_reset_o,
.recovery_mode_enter_i(recovery_mode_enter_i)
);

endmodule
8 changes: 6 additions & 2 deletions src/ctrl/controller_standby_i3c.sv
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,10 @@ module controller_standby_i3c

output logic peripheral_reset_o,
input logic peripheral_reset_done_i,
output logic escalated_reset_o
output logic escalated_reset_o,

// recovery mode
input recovery_mode_enter_i
);
logic i3c_standby_en;
assign i3c_standby_en = i3c_standby_en_i;
Expand Down Expand Up @@ -674,7 +677,8 @@ module controller_standby_i3c
.tx_byte_last_o (tx_last_byte),
.tx_byte_valid_o (tx_fifo_rvalid),
.tx_byte_ready_i (tx_fifo_rready),
.tx_byte_err_i (tx_host_nack)
.tx_byte_err_i (tx_host_nack),
.recovery_mode_enter_i (recovery_mode_enter_i)
);

descriptor_ibi #(
Expand Down
11 changes: 9 additions & 2 deletions src/ctrl/descriptor_tx.sv
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,10 @@ module descriptor_tx #(
output logic tx_byte_last_o,
output logic tx_byte_valid_o,
input logic tx_byte_ready_i,
input logic tx_byte_err_i
input logic tx_byte_err_i,

// recovery mode
input recovery_mode_enter_i
);

logic [31:0] tx_descriptor;
Expand All @@ -56,10 +59,14 @@ module descriptor_tx #(
tx_descriptor <= '0;
end else begin
if (tx_end) descriptor_valid <= '0;
else if (tti_tx_desc_queue_rready_o) begin
else if (tti_tx_desc_queue_rready_o && !recovery_mode_enter_i) begin
tx_descriptor <= tti_tx_desc_queue_rdata_i;
descriptor_valid <= '1;
end
else if (recovery_mode_enter_i) begin
descriptor_valid <= '0;
tx_descriptor <= '0;
end
end
end

Expand Down
8 changes: 6 additions & 2 deletions src/i3c.sv
Original file line number Diff line number Diff line change
Expand Up @@ -496,6 +496,8 @@ module i3c

logic controller_error;

logic recovery_mode_enter;

controller #(
.DatAw(DatAw),
.DctAw(DctAw)
Expand Down Expand Up @@ -672,7 +674,8 @@ module i3c
.peripheral_reset_done_i,
.escalated_reset_o,

.err_o(controller_error)
.err_o(controller_error),
.recovery_mode_enter_i(recovery_mode_enter)
);

// HCI
Expand Down Expand Up @@ -1062,7 +1065,8 @@ module i3c

// Received I2C/I3C address along with RnW# bit
.ctl_bus_addr_i(rx_bus_addr),
.ctl_bus_addr_valid_i(rx_bus_addr_valid)
.ctl_bus_addr_valid_i(rx_bus_addr_valid),
.recovery_mode_enter_o(recovery_mode_enter)
);

// I3C PHY
Expand Down
14 changes: 13 additions & 1 deletion src/recovery/recovery_handler.sv
Original file line number Diff line number Diff line change
Expand Up @@ -171,17 +171,29 @@ module recovery_handler

// Recovery status
output logic payload_available_o,
output logic image_activated_o
output logic image_activated_o,
output logic recovery_mode_enter_o
);
assign irq_o = '0;

// ....................................................

logic recovery_enable;
logic [1:0] recovery_mode_enter_shreg;
localparam int unsigned RecoveryMode = 'h3;

assign recovery_enable = hwif_rec_i.DEVICE_STATUS_0.PLACEHOLDER.value[7:0] == RecoveryMode;

// generate recovery enter pulse
assign recovery_mode_enter_o = recovery_mode_enter_shreg[0];
always @(posedge clk_i or negedge rst_ni)
if (~rst_ni) begin
recovery_mode_enter_shreg <= 2'b10;
end else if (recovery_enable) begin
recovery_mode_enter_shreg <= {1'b0, recovery_mode_enter_shreg[1]};
end else begin
recovery_mode_enter_shreg <= 2'b10;
end
// ....................................................
// TTI Queues

Expand Down

0 comments on commit 6d77d9d

Please sign in to comment.