From: rmani <rmani@qti.qualcomm.com>
To: Peter Oh <poh@codeaurora.org>
Cc: <ath10k@lists.infradead.org>, <linux-wireless@vger.kernel.org>
Subject: Re: [PATCH v2 8/8] ath10k: configure frag desc memory to target for qca99X0
Date: Tue, 23 Jun 2015 11:18:09 +0530 [thread overview]
Message-ID: <5588F319.2060509@qti.qualcomm.com> (raw)
In-Reply-To: <55889D27.9030100@codeaurora.org>
On 06/23/2015 05:11 AM, Peter Oh wrote:
> Hi Raja,
>
> On 06/22/2015 07:52 AM, Raja Mani wrote:
>> Pre qca99X0 chipsets follows the model where dynamically allocate
>> memory for frag desc on getting new skb for TX. But, this is not
>> going to be the case in qca99X0. It expects frag desc memory to be
>> allocated at boot time and let the driver to reuse allocated memory
>> after every TX completion. So there won't be any dynamic frag memory
>> memory allocation in qca99X0 during data transmission.
>>
>> qca99X0 hardware doesn't need fragment desc address to be programmed
>> in msdu descriptor for every data transaction. It needs to know only
>> starting address of fragment descriptor at the time of the boot.
>> During data transmission, qca99X0 hardware can retrieve corresponding
>> frag addr by adding programmed frag desc base addr + msdu id.
>>
>> Allocate continuous fragment descriptor memory (same size as number of
>> descriptor) at the time of target initialization and configure allocated
>> dma address to the target via HTT_H2T_MSG_TYPE_FRAG_DESC_BANK_CFG.
>>
>> How this is allocated continuous memory is going to be used is not
>> covered in this patch. It just allocates memory and hand over to
>> firmware.
>> If we don't do it at init time, qca99X0 will stall when firmware tries
>> to do TX.
>>
>> Signed-off-by: Raja Mani <rmani@qti.qualcomm.com>
>> ---
>> drivers/net/wireless/ath/ath10k/core.c | 1 +
>> drivers/net/wireless/ath/ath10k/core.h | 6 +++
>> drivers/net/wireless/ath/ath10k/htt.c | 4 ++
>> drivers/net/wireless/ath/ath10k/htt.h | 11 +++++
>> drivers/net/wireless/ath/ath10k/htt_tx.c | 76
>> +++++++++++++++++++++++++++++++-
>> 5 files changed, 96 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/net/wireless/ath/ath10k/core.c
>> b/drivers/net/wireless/ath/ath10k/core.c
>> index 3c8d5c5..be5f01c 100644
>> --- a/drivers/net/wireless/ath/ath10k/core.c
>> +++ b/drivers/net/wireless/ath/ath10k/core.c
>> @@ -111,6 +111,7 @@ static const struct ath10k_hw_params
>> ath10k_hw_params_list[] = {
>> .patch_load_addr = QCA99X0_HW_2_0_PATCH_LOAD_ADDR,
>> .uart_pin = 7,
>> .otp_exe_param = 0x00000700,
>> + .continuous_frag_desc = true,
>> .fw = {
>> .dir = QCA99X0_HW_2_0_FW_DIR,
>> .fw = QCA99X0_HW_2_0_FW_FILE,
>> diff --git a/drivers/net/wireless/ath/ath10k/core.h
>> b/drivers/net/wireless/ath/ath10k/core.h
>> index f0811d0..2e5c935 100644
>> --- a/drivers/net/wireless/ath/ath10k/core.h
>> +++ b/drivers/net/wireless/ath/ath10k/core.h
>> @@ -582,6 +582,12 @@ struct ath10k {
>> */
>> bool has_shifted_cc_wraparound;
>> + /* Some of chip expects fragment descriptor to be
>> continuous
>> + * memory for any TX operation. Set continuous_frag_desc
>> flag
>> + * for the hardware which have such requirement.
>> + */
>> + bool continuous_frag_desc;
>> +
>> struct ath10k_hw_params_fw {
>> const char *dir;
>> const char *fw;
>> diff --git a/drivers/net/wireless/ath/ath10k/htt.c
>> b/drivers/net/wireless/ath/ath10k/htt.c
>> index 6f71f94..4474c3e 100644
>> --- a/drivers/net/wireless/ath/ath10k/htt.c
>> +++ b/drivers/net/wireless/ath/ath10k/htt.c
>> @@ -249,5 +249,9 @@ int ath10k_htt_setup(struct ath10k_htt *htt)
>> if (status)
>> return status;
>> + status = ath10k_htt_send_frag_desc_bank_cfg(htt);
>> + if (status)
>> + return status;
>> +
>> return ath10k_htt_send_rx_ring_cfg_ll(htt);
>> }
>> diff --git a/drivers/net/wireless/ath/ath10k/htt.h
>> b/drivers/net/wireless/ath/ath10k/htt.h
>> index 8e64ace..8bdf1e7 100644
>> --- a/drivers/net/wireless/ath/ath10k/htt.h
>> +++ b/drivers/net/wireless/ath/ath10k/htt.h
>> @@ -87,6 +87,11 @@ struct htt_data_tx_desc_frag {
>> __le32 len;
>> } __packed;
>> +struct htt_msdu_ext_desc {
>> + __le32 tso_flag[4];
>> + struct htt_data_tx_desc_frag frags[6];
>> +};
>> +
>> enum htt_data_tx_desc_flags0 {
>> HTT_DATA_TX_DESC_FLAGS0_MAC_HDR_PRESENT = 1 << 0,
>> HTT_DATA_TX_DESC_FLAGS0_NO_AGGR = 1 << 1,
>> @@ -1466,6 +1471,11 @@ struct ath10k_htt {
>> /* rx_status template */
>> struct ieee80211_rx_status rx_status;
>> +
>> + struct {
>> + dma_addr_t paddr;
>> + struct htt_msdu_ext_desc *vaddr;
> Defining structure htt_msdu_ext_desc for vaddr instead of void * which
> will be used as base address to get offset address of msdu data could
> lead unexpected address assignment when we manipulate msdu address
> pointer based on vaddr variable.
> For example vaddr variable will be used at ath10k_htt_tx like below to
> have msdu external link descriptor.
> struct htt_msdu_ext_desc *frags_ext;
> frags_ext = htt->frag_desc.vaddr + (sizeof(struct htt_msdu_ext_desc) *
> msdu_id);
> If we assume vaddr is 0xde810000 and msdu_id is 1, we expect frags_ext
> has 0xde810040, but linux memory management system could assign
> 0xde811000 to frags_ext to use continuous memory block for structure
> htt_msdu_ext_desc and it will cause data traffic failure.
> To avoid this scenario, we have to use void * for vaddr.
Here we know the type of memory what for we are allocating, thats why
i kept it as struct htt_msdu_ext_desc *. We can type cast base addr
to u8 * in future and use it in the place where frag_ext is calculated
More over, this patch doesn't cover on how each frag desc memory is
manipulated. For now, let it be type struct htt_msdu_ext_desc *.
--
Raja
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
next prev parent reply other threads:[~2015-06-23 5:48 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-22 14:52 [PATCH v2 0/8] add beacon and htt msg support for 10.4 firmware Raja Mani
2015-06-22 14:52 ` [PATCH v2 1/8] ath10k: enhance swba event handler to adapt different size tim bitmap Raja Mani
2015-07-01 10:16 ` Kalle Valo
2015-07-01 10:21 ` rmani
2015-07-01 10:28 ` Kalle Valo
2015-07-01 11:18 ` Kalle Valo
2015-06-22 14:52 ` [PATCH v2 2/8] ath10k: handle 10.4 firmware wmi swba event Raja Mani
2015-06-22 14:52 ` [PATCH v2 3/8] ath10k: enable vdev and peer related operations for 10.4 fw Raja Mani
2015-06-22 14:52 ` [PATCH v2 4/8] ath10k: add scan support " Raja Mani
2015-06-22 14:52 ` [PATCH v2 5/8] ath10k: add 10.4 fw specific htt msg definitions Raja Mani
2015-07-01 10:38 ` Kalle Valo
2015-07-01 11:46 ` rmani
2015-06-22 14:52 ` [PATCH v2 6/8] ath10k: advertise 10.4 fw ap and sta iface combination to mac80211 Raja Mani
2015-06-22 14:52 ` [PATCH v2 7/8] ath10k: set max spatial stream to 4 for 10.4 fw Raja Mani
2015-06-22 14:52 ` [PATCH v2 8/8] ath10k: configure frag desc memory to target for qca99X0 Raja Mani
2015-06-22 23:41 ` Peter Oh
2015-06-23 5:48 ` rmani [this message]
2015-07-02 5:50 ` [PATCH v2 0/8] add beacon and htt msg support for 10.4 firmware Kalle Valo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5588F319.2060509@qti.qualcomm.com \
--to=rmani@qti.qualcomm.com \
--cc=ath10k@lists.infradead.org \
--cc=linux-wireless@vger.kernel.org \
--cc=poh@codeaurora.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).