From dbaf4bed59b4bf9537154dea0af6f7f5e5915b4f Mon Sep 17 00:00:00 2001 From: Karunakar Dasineni Date: Wed, 19 Jul 2017 18:12:43 -0700 Subject: [PATCH] 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 --- dp/wifi3.0/dp_main.c | 13 +++++++------ dp/wifi3.0/dp_rx.h | 6 ++++-- dp/wifi3.0/dp_types.h | 15 +++++++++++++++ 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index 07d78df8126d..fbe14d959f63 100644 --- a/dp/wifi3.0/dp_main.c +++ b/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--; diff --git a/dp/wifi3.0/dp_rx.h b/dp/wifi3.0/dp_rx.h index 18fdc8722c7b..2193762996a7 100644 --- a/dp/wifi3.0/dp_rx.h +++ b/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; } diff --git a/dp/wifi3.0/dp_types.h b/dp/wifi3.0/dp_types.h index df83bfcb639f..86f05c6dbb9d 100644 --- a/dp/wifi3.0/dp_types.h +++ b/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 */