accel/habanalabs: use binning info when handling razwi
authorDani Liberman <dliberman@habana.ai>
Mon, 8 May 2023 14:24:38 +0000 (17:24 +0300)
committerOded Gabbay <ogabbay@kernel.org>
Thu, 8 Jun 2023 09:35:55 +0000 (12:35 +0300)
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 <dliberman@habana.ai>
Reviewed-by: Oded Gabbay <ogabbay@kernel.org>
Signed-off-by: Oded Gabbay <ogabbay@kernel.org>
drivers/accel/habanalabs/gaudi2/gaudi2.c

index b8644d8..a6aa17d 100644 (file)
@@ -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];