Commit dcc8fa88 authored by Dani Liberman's avatar Dani Liberman Committed by Oded Gabbay
Browse files

accel/habanalabs: use binning info when handling razwi



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: default avatarDani Liberman <dliberman@habana.ai>
Reviewed-by: default avatarOded Gabbay <ogabbay@kernel.org>
Signed-off-by: default avatarOded Gabbay <ogabbay@kernel.org>
parent 583f12a8
Loading
Loading
Loading
Loading
+14 −3
Original line number Diff line number Diff line
@@ -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];