Skip to content

Commit

Permalink
Mask out TTI interrupts when recovery mode is enabled
Browse files Browse the repository at this point in the history
Internal-tag: [#71469]
Signed-off-by: Maciej Kurc <[email protected]>
  • Loading branch information
mkurc-ant committed Jan 17, 2025
1 parent 800c613 commit 075525c
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 4 deletions.
9 changes: 5 additions & 4 deletions src/hci/tti.sv
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,8 @@ module tti
// IBI status
input logic [1:0] ibi_status_i,
input logic ibi_status_we_i,

// Recovery status
input logic recovery_mode_enabled_i,
// Private read status
input logic tx_pr_end_i,

Expand Down Expand Up @@ -224,8 +225,8 @@ module tti
rx_desc_queue_write_r <= '0;
rx_data_queue_write_r <= '0;
end else begin
rx_desc_queue_write_r <= rx_desc_queue_write_i;
rx_data_queue_write_r <= rx_data_queue_write_i;
rx_desc_queue_write_r <= rx_desc_queue_write_i & ~recovery_mode_enabled_i;
rx_data_queue_write_r <= rx_data_queue_write_i & ~recovery_mode_enabled_i;
end
end

Expand Down Expand Up @@ -303,7 +304,7 @@ module tti
interrupt xintr4 (
.clk_i (clk_i),
.rst_ni (rst_ni),
.irq_i (tx_pr_end_i),
.irq_i (~recovery_mode_enabled_i & tx_pr_end_i),
.clr_i ('0),
.irq_force_i (hwif_tti_i.INTERRUPT_FORCE.TX_DESC_STAT_FORCE.value),
.sts_o (hwif_tti_o.INTERRUPT_STATUS.TX_DESC_STAT.next),
Expand Down
3 changes: 3 additions & 0 deletions src/i3c.sv
Original file line number Diff line number Diff line change
Expand Up @@ -505,6 +505,7 @@ module i3c
logic controller_error;

logic recovery_mode_enter;
logic recovery_mode_enabled;
logic virtual_device_tx;
logic virtual_device_tx_done;

Expand Down Expand Up @@ -948,6 +949,7 @@ module i3c
.ibi_queue_reg_rst_we_i (csr_tti_ibi_reg_rst_we),
.ibi_queue_reg_rst_data_i(csr_tti_ibi_reg_rst_data),

.recovery_mode_enabled_i(recovery_mode_enabled),
.ibi_status_i(ibi_status),
.ibi_status_we_i(ibi_status_we),
.tx_pr_end_i(tti_tx_pr_end),
Expand Down Expand Up @@ -1101,6 +1103,7 @@ module i3c
.ctl_bus_addr_i(rx_bus_addr),
.ctl_bus_addr_valid_i(rx_bus_addr_valid),
.recovery_mode_enter_o(recovery_mode_enter),
.recovery_mode_enabled_o(recovery_mode_enabled),
.virtual_device_tx_i(virtual_device_tx),
.virtual_device_tx_done_o(virtual_device_tx_done)
);
Expand Down
4 changes: 4 additions & 0 deletions src/recovery/recovery_handler.sv
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,7 @@ module recovery_handler
output logic payload_available_o,
output logic image_activated_o,
output logic recovery_mode_enter_o,
output logic recovery_mode_enabled_o,
input logic virtual_device_tx_i,
output logic virtual_device_tx_done_o
);
Expand All @@ -192,6 +193,9 @@ module recovery_handler
assign recovery_enable = (hwif_rec_i.DEVICE_STATUS_0.PLACEHOLDER.value[7:0] == RecoveryMode) | virtual_device_tx_i;
assign recovery_mode_enabled = (hwif_rec_i.DEVICE_STATUS_0.PLACEHOLDER.value[7:0] == RecoveryMode);

// Output recovery mode enable state. Either via DEVICE_STATUS or via access through virtual target address
assign recovery_mode_enabled_o = recovery_enable;

// poke cec module to inlude addr data when we trigger recovery logic from virtual device interface
logic [1:0] virtual_device_cec_shreg;
always @(posedge clk_i or negedge rst_ni)
Expand Down

0 comments on commit 075525c

Please sign in to comment.