From: Dani Liberman <dliber...@habana.ai>

When receiving sei interrupt from tpc or decoder, we need to check
the binning mask because if the engine is binned, the razwi info
won't be in the router of the binned engine, instead will be in the
router of the substitute engine.

Signed-off-by: Dani Liberman <dliber...@habana.ai>
Reviewed-by: Oded Gabbay <ogab...@kernel.org>
Signed-off-by: Oded Gabbay <ogab...@kernel.org>
---
 drivers/accel/habanalabs/gaudi2/gaudi2.c | 17 ++++++++++++++---
 1 file changed, 14 insertions(+), 3 deletions(-)

diff --git a/drivers/accel/habanalabs/gaudi2/gaudi2.c 
b/drivers/accel/habanalabs/gaudi2/gaudi2.c
index b8644d87f817..a6aa17d86820 100644
--- a/drivers/accel/habanalabs/gaudi2/gaudi2.c
+++ b/drivers/accel/habanalabs/gaudi2/gaudi2.c
@@ -8040,7 +8040,7 @@ static void gaudi2_ack_module_razwi_event_handler(struct 
hl_device *hdev,
                                u8 module_sub_idx, u64 *event_mask)
 {
        bool via_sft = false;
-       u32 hbw_rtr_id, lbw_rtr_id, dcore_id, dcore_rtr_id, eng_id;
+       u32 hbw_rtr_id, lbw_rtr_id, dcore_id, dcore_rtr_id, eng_id, binned_idx;
        u64 hbw_rtr_mstr_if_base_addr, lbw_rtr_mstr_if_base_addr;
        u32 hbw_shrd_aw = 0, hbw_shrd_ar = 0;
        u32 lbw_shrd_aw = 0, lbw_shrd_ar = 0;
@@ -8048,6 +8048,13 @@ static void gaudi2_ack_module_razwi_event_handler(struct 
hl_device *hdev,
 
        switch (module) {
        case RAZWI_TPC:
+               sprintf(initiator_name, "TPC_%u", module_idx);
+               if (hdev->tpc_binning) {
+                       binned_idx = __ffs(hdev->tpc_binning);
+                       if (binned_idx == module_idx)
+                               module_idx = TPC_ID_DCORE0_TPC6;
+               }
+
                hbw_rtr_id = gaudi2_tpc_initiator_hbw_rtr_id[module_idx];
 
                if (hl_is_fw_sw_ver_below(hdev, 1, 9) &&
@@ -8056,7 +8063,6 @@ static void gaudi2_ack_module_razwi_event_handler(struct 
hl_device *hdev,
                        lbw_rtr_id = DCORE0_RTR0;
                else
                        lbw_rtr_id = 
gaudi2_tpc_initiator_lbw_rtr_id[module_idx];
-               sprintf(initiator_name, "TPC_%u", module_idx);
                break;
        case RAZWI_MME:
                sprintf(initiator_name, "MME_%u", module_idx);
@@ -8115,9 +8121,14 @@ static void gaudi2_ack_module_razwi_event_handler(struct 
hl_device *hdev,
                sprintf(initiator_name, "NIC_%u", module_idx);
                break;
        case RAZWI_DEC:
+               sprintf(initiator_name, "DEC_%u", module_idx);
+               if (hdev->decoder_binning) {
+                       binned_idx = __ffs(hdev->decoder_binning);
+                       if (binned_idx == module_idx)
+                               module_idx = DEC_ID_PCIE_VDEC1;
+               }
                hbw_rtr_id = gaudi2_dec_initiator_hbw_rtr_id[module_idx];
                lbw_rtr_id = gaudi2_dec_initiator_lbw_rtr_id[module_idx];
-               sprintf(initiator_name, "DEC_%u", module_idx);
                break;
        case RAZWI_ROT:
                hbw_rtr_id = gaudi2_rot_initiator_hbw_rtr_id[module_idx];
-- 
2.40.1

Reply via email to