Эх сурвалжийг харах

qcacmn: Disable IRQ line for vlan RX ring

Target is sending interrupt even interrupt handler is not
registered for the vlan RX DST ring, and causing kernel crash.

Fix is to disable the IRQ line if host is not supposed to handle
the interrupt for vlan RX DST ring.

Change-Id: I91b8a5784969e1022d283793905c33340492706b
CRs-Fixed: 3348574
Devender Kumar 2 жил өмнө
parent
commit
d5b2560201
1 өөрчлөгдсөн 24 нэмэгдсэн , 0 устгасан
  1. 24 0
      dp/wifi3.0/dp_main.c

+ 24 - 0
dp/wifi3.0/dp_main.c

@@ -1642,6 +1642,28 @@ static int dp_get_num_msi_available(struct dp_soc *soc, int interrupt_mode)
 }
 #endif
 
+#if defined(IPA_OFFLOAD) && defined(IPA_WDI3_VLAN_SUPPORT)
+static void
+dp_ipa_vlan_srng_msi_setup(struct hal_srng_params *ring_params, int ring_type,
+			   int ring_num)
+{
+	if (wlan_ipa_is_vlan_enabled()) {
+		if ((ring_type == REO_DST) &&
+				(ring_num == IPA_ALT_REO_DEST_RING_IDX)) {
+			ring_params->msi_addr = 0;
+			ring_params->msi_data = 0;
+			ring_params->flags &= ~HAL_SRNG_MSI_INTR;
+		}
+	}
+}
+#else
+static inline void
+dp_ipa_vlan_srng_msi_setup(struct hal_srng_params *ring_params, int ring_type,
+			   int ring_num)
+{
+}
+#endif
+
 static void dp_srng_msi_setup(struct dp_soc *soc, struct dp_srng *srng,
 			      struct hal_srng_params *ring_params,
 			      int ring_type, int ring_num)
@@ -1704,6 +1726,8 @@ static void dp_srng_msi_setup(struct dp_soc *soc, struct dp_srng *srng,
 		+ msi_data_start;
 	ring_params->flags |= HAL_SRNG_MSI_INTR;
 
+	dp_ipa_vlan_srng_msi_setup(ring_params, ring_type, ring_num);
+
 	dp_debug("ring type %u ring_num %u msi->data %u msi_addr %llx",
 		 ring_type, ring_num, ring_params->msi_data,
 		 (uint64_t)ring_params->msi_addr);