Parcourir la source

qcacmn: Link descriptor IDs to assist debug

We need only 3 bits of cookie field in link descriptor buff_addr_info
to store bank ID. The remaining bytes will be used set a unique ID,
which will be useful in debugging. Also fixed an issue in scatter idle
list setup.

Change-Id: Id3cc9a8a316fe942e749611c2f57e9324419dd40
Karunakar Dasineni il y a 7 ans
Parent
commit
dbaf4bed59
3 fichiers modifiés avec 26 ajouts et 8 suppressions
  1. 7 6
      dp/wifi3.0/dp_main.c
  2. 4 2
      dp/wifi3.0/dp_rx.h
  3. 15 0
      dp/wifi3.0/dp_types.h

+ 7 - 6
dp/wifi3.0/dp_main.c

@@ -1065,6 +1065,7 @@ static int dp_hw_link_desc_pool_setup(struct dp_soc *soc)
 	uint32_t last_bank_size = 0;
 	uint32_t entry_size, num_entries;
 	int i;
+	uint32_t desc_id = 0;
 
 	/* Only Tx queue descriptors are allocated from common link descriptor
 	 * pool Rx queue descriptors are not included in this because (REO queue
@@ -1195,8 +1196,10 @@ static int dp_hw_link_desc_pool_setup(struct dp_soc *soc)
 			while (num_entries && (desc = hal_srng_src_get_next(
 				soc->hal_soc,
 				soc->wbm_idle_link_ring.hal_srng))) {
-				hal_set_link_desc_addr(desc, i, paddr);
+				hal_set_link_desc_addr(desc,
+					LINK_DESC_COOKIE(desc_id, i), paddr);
 				num_entries--;
+				desc_id++;
 				paddr += link_desc_size;
 			}
 		}
@@ -1249,14 +1252,12 @@ static int dp_hw_link_desc_pool_setup(struct dp_soc *soc)
 				/ link_desc_size;
 			unsigned long paddr = (unsigned long)(
 				soc->link_desc_banks[i].base_paddr);
-			void *desc = NULL;
 
-			while (num_link_descs && (desc =
-				hal_srng_src_get_next(soc->hal_soc,
-				soc->wbm_idle_link_ring.hal_srng))) {
+			while (num_link_descs) {
 				hal_set_link_desc_addr((void *)scatter_buf_ptr,
-					i, paddr);
+					LINK_DESC_COOKIE(desc_id, i), paddr);
 				num_link_descs--;
+				desc_id++;
 				paddr += link_desc_size;
 				if (rem_entries) {
 					rem_entries--;

+ 4 - 2
dp/wifi3.0/dp_rx.h

@@ -505,13 +505,15 @@ void *dp_rx_cookie_2_link_desc_va(struct dp_soc *soc,
 				  struct hal_buf_info *buf_info)
 {
 	void *link_desc_va;
+	uint32_t bank_id = LINK_DESC_COOKIE_BANK_ID(buf_info->sw_cookie);
+
 
 	/* TODO */
 	/* Add sanity for  cookie */
 
-	link_desc_va = soc->link_desc_banks[buf_info->sw_cookie].base_vaddr +
+	link_desc_va = soc->link_desc_banks[bank_id].base_vaddr +
 		(buf_info->paddr -
-			soc->link_desc_banks[buf_info->sw_cookie].base_paddr);
+			soc->link_desc_banks[bank_id].base_paddr);
 
 	return link_desc_va;
 }

+ 15 - 0
dp/wifi3.0/dp_types.h

@@ -834,6 +834,21 @@ struct dp_ipa_resources {
 /* Same as NAC_MAX_CLENT */
 #define DP_NAC_MAX_CLIENT  24
 
+/*
+ * Macros to setup link descriptor cookies - for link descriptors, we just
+ * need first 3 bits to store bank ID. The remaining bytes will be used set a
+ * unique ID, which will be useful in debugging
+ */
+#define LINK_DESC_BANK_ID_MASK 0x7
+#define LINK_DESC_ID_SHIFT 3
+#define LINK_DESC_ID_START 0x8000
+
+#define LINK_DESC_COOKIE(_desc_id, _bank_id) \
+	((((_desc_id) + LINK_DESC_ID_START) << LINK_DESC_ID_SHIFT) | (_bank_id))
+
+#define LINK_DESC_COOKIE_BANK_ID(_cookie) \
+	((_cookie) & LINK_DESC_BANK_ID_MASK)
+
 /* same as ieee80211_nac_param */
 enum dp_nac_param_cmd {
 	/* IEEE80211_NAC_PARAM_ADD */