Просмотр исходного кода

qcacmn: init last_desc_cleared and it should always behind tp

Initialize the last_desc_cleared pointer to -1 not 0, and
also fix the check it should always behind tp.

Change-Id: I281e066d45a99ac99d4f3c4e0bcc3f65f14bb589
CRs-Fixed: 2987029
Vevek Venkatesan 4 лет назад
Родитель
Сommit
1a98ac54d7
2 измененных файлов с 24 добавлено и 2 удалено
  1. 1 2
      hal/wifi3.0/hal_api.h
  2. 23 0
      hal/wifi3.0/hal_srng.c

+ 1 - 2
hal/wifi3.0/hal_api.h

@@ -1935,8 +1935,7 @@ void *hal_srng_src_get_next_consumed(void *hal_soc,
 	uint32_t next_entry = (srng->last_desc_cleared + srng->entry_size) %
 			      srng->ring_size;
 
-	if (next_entry != (srng->u.src_ring.cached_tp + srng->entry_size) %
-			  srng->ring_size) {
+	if (next_entry != srng->u.src_ring.cached_tp) {
 		desc = &srng->ring_base_vaddr[next_entry];
 		srng->last_desc_cleared = next_entry;
 	}

+ 23 - 0
hal/wifi3.0/hal_srng.c

@@ -1853,6 +1853,27 @@ hal_srng_set_nf_thresholds(struct hal_srng *srng,
 }
 #endif
 
+#if defined(CLEAR_SW2TCL_CONSUMED_DESC)
+/**
+ * hal_srng_last_desc_cleared_init - Initialize SRNG last_desc_cleared ptr
+ *
+ * @srng: Source ring pointer
+ *
+ * Return: None
+ */
+static inline
+void hal_srng_last_desc_cleared_init(struct hal_srng *srng)
+{
+	srng->last_desc_cleared = srng->ring_size - srng->entry_size;
+}
+
+#else
+static inline
+void hal_srng_last_desc_cleared_init(struct hal_srng *srng)
+{
+}
+#endif /* CLEAR_SW2TCL_CONSUMED_DESC */
+
 /**
  * hal_srng_setup - Initialize HW SRNG ring.
  * @hal_soc: Opaque HAL SOC handle
@@ -1932,6 +1953,8 @@ void *hal_srng_setup(void *hal_soc, int ring_type, int ring_num,
 	srng->flags |= HAL_SRNG_RING_PTR_SWAP;
 #endif
 
+	hal_srng_last_desc_cleared_init(srng);
+
 	if (srng->ring_dir == HAL_SRNG_SRC_RING) {
 		srng->u.src_ring.hp = 0;
 		srng->u.src_ring.reap_hp = srng->ring_size -