From 35788f6e6457ba1739dbd0635637ab3ee0f75585 Mon Sep 17 00:00:00 2001 From: Dhaval Khandla Date: Fri, 22 Sep 2023 16:24:52 +0530 Subject: [PATCH] am64x/am243x: hdsl: Fix the reset value of PRST bit in status/event - Set the bit during initialization for status and event registers - Unset the bit in status registers after link_check state Fixes: PINDSW-6628 Signed-off-by: Dhaval Khandla --- .../position_sense/hdsl/firmware/datalink.asm | 36 +-- .../hdsl/firmware/datalink_init.asm | 56 +++-- .../position_sense/hdsl/firmware/defines.inc | 2 +- .../hdsl_master_icssg_multichannel_ch0_bin.h | 211 ++++++------------ 4 files changed, 111 insertions(+), 194 deletions(-) diff --git a/source/position_sense/hdsl/firmware/datalink.asm b/source/position_sense/hdsl/firmware/datalink.asm index 789d0a3..bace865 100644 --- a/source/position_sense/hdsl/firmware/datalink.asm +++ b/source/position_sense/hdsl/firmware/datalink.asm @@ -1470,23 +1470,23 @@ is_val_FC: qba adjustment_done is_val_F8: qbne is_val_F0, EXTRA_EDGE_SELF, 0xF8 - sub REG_TMP0, REG_TMP0, 12 + sub REG_TMP0, REG_TMP0, 12 qba adjustment_done is_val_F0: qbne is_val_E0, EXTRA_EDGE_SELF, 0xF0 - sub REG_TMP0, REG_TMP0, 16 + sub REG_TMP0, REG_TMP0, 16 qba adjustment_done is_val_E0: qbne is_val_C0, EXTRA_EDGE_SELF, 0xE0 - sub REG_TMP0, REG_TMP0, 20 + sub REG_TMP0, REG_TMP0, 20 qba adjustment_done is_val_C0: qbne is_val_80, EXTRA_EDGE_SELF, 0xC0 - sub REG_TMP0, REG_TMP0, 24 + sub REG_TMP0, REG_TMP0, 24 qba adjustment_done is_val_80: qbne adjustment_done,EXTRA_EDGE_SELF, 0x80 - sub REG_TMP0, REG_TMP0, 28 + sub REG_TMP0, REG_TMP0, 28 qba adjustment_done adjustment_done: sbco ®_TMP0, MASTER_REGS_CONST, EXTRA_EDGE_TIMESTAMP, 4 @@ -1570,7 +1570,6 @@ log_done1: ;HINT: we have processing time here (~168 cycles) ;check if we reset protocol lbco &FIFO_L, MASTER_REGS_CONST, SYS_CTRL, 1 -;ERROR: qbbc datalink_abort2 is not working, though no compiler error qbbc SYS_CTRL_PRST_cleared,FIFO_L, SYS_CTRL_PRST jmp No_long_short_msg SYS_CTRL_PRST_cleared: @@ -1879,31 +1878,6 @@ datalink_abort_no_wait: lbco ®_TMP0.b0, MASTER_REGS_CONST, NUM_RESETS, 1 add REG_TMP0.b0, REG_TMP0.b0, 1 sbco ®_TMP0.b0, MASTER_REGS_CONST, NUM_RESETS, 1 -; Set EVENT_PRST in EVENT register - lbco ®_TMP0, MASTER_REGS_CONST, EVENT_H, 4 - set REG_TMP0.w0, REG_TMP0.w0, EVENT_PRST -;save events - sbco ®_TMP0.w0, MASTER_REGS_CONST, EVENT_H, 2 - qbbc update_events_no_int2, REG_TMP0.w2, EVENT_PRST -; generate interrupt - ldi r31.w0, PRU0_ARM_IRQ -update_events_no_int2: -; Set EVENT_S_PRST in EVENT_S register - lbco ®_TMP0, MASTER_REGS_CONST, EVENT_S, 2 - set REG_TMP0.b0, REG_TMP0.b0, EVENT_S_PRST -;save events - sbco ®_TMP0.w0, MASTER_REGS_CONST, EVENT_S, 1 - qbbc update_events_no_int18, REG_TMP0.b1, EVENT_S_PRST -; generate interrupt - ldi r31.w0, PRU0_ARM_IRQ4 -update_events_no_int18: - -; Set PRST bits in ONLINE_STATUS registers - lbco ®_TMP0, MASTER_REGS_CONST, ONLINE_STATUS_D_H, 6 - set REG_TMP0.w0, REG_TMP0.w0, ONLINE_STATUS_D_PRST - set REG_TMP0.w2, REG_TMP0.w2, ONLINE_STATUS_1_PRST - set REG_TMP1.w0, REG_TMP1.w0, ONLINE_STATUS_2_PRST - sbco ®_TMP0, MASTER_REGS_CONST, ONLINE_STATUS_D_H, 6 jmp datalink_reset ;-------------------------------------------------------------------------------------------------- ;Function: switch_clk (RET_ADDR1) diff --git a/source/position_sense/hdsl/firmware/datalink_init.asm b/source/position_sense/hdsl/firmware/datalink_init.asm index 4e4f30d..76f26d9 100644 --- a/source/position_sense/hdsl/firmware/datalink_init.asm +++ b/source/position_sense/hdsl/firmware/datalink_init.asm @@ -101,30 +101,48 @@ datalink_reset: ;reset SAFE_CTRL register zero ®_TMP0.b0, 1 sbco ®_TMP0.b0, MASTER_REGS_CONST, SAFE_CTRL, 1 +; Set EVENT_PRST in EVENT_H register + lbco ®_TMP0, MASTER_REGS_CONST, EVENT_H, 4 + set REG_TMP0.w0, REG_TMP0.w0, EVENT_PRST +;save events + sbco ®_TMP0.w0, MASTER_REGS_CONST, EVENT_H, 2 + qbbc update_events_no_int15, REG_TMP0.w2, EVENT_PRST +; generate interrupt + ldi r31.w0, PRU0_ARM_IRQ +update_events_no_int15: +; Set EVENT_S_PRST in EVENT_S register + lbco ®_TMP0, MASTER_REGS_CONST, EVENT_S, 2 + set REG_TMP0.b0, REG_TMP0.b0, EVENT_S_PRST +;save events + sbco ®_TMP0.w0, MASTER_REGS_CONST, EVENT_S, 1 + qbbc update_events_no_int22, REG_TMP0.b1, EVENT_S_PRST +; generate interrupt + ldi r31.w0, PRU0_ARM_IRQ4 +update_events_no_int22: ; Initialize ONLINE_STATUS_D, ONLINE_STATUS_1 and ONLINE_STATUS_2 ; In ONLINE_STATUS_D high, bit 2 is FIX0, bit 4 is FIX1 and bit 5 is FIX0 ; In ONLINE_STATUS_D low, bit 0 is FIX0 and bit 3 is FIX0 lbco ®_TMP0.w0, MASTER_REGS_CONST, ONLINE_STATUS_D_H, 2 ; clearing bits ldi REG_TMP0.w0, 0 - ; setting bits with fix1 - or REG_TMP0.w0, REG_TMP0.w0, (1<