Received: by 2002:a25:8b12:0:0:0:0:0 with SMTP id i18csp5391190ybl; Tue, 27 Aug 2019 04:04:19 -0700 (PDT) X-Google-Smtp-Source: APXvYqzLKTXJXmwq+jJOhZ/Of0Zs+iMeSMoEab/QAPAasKY5p8qyFBctB+hlo9l2AW8s5EfjuXap X-Received: by 2002:a63:724b:: with SMTP id c11mr21165360pgn.30.1566903858974; Tue, 27 Aug 2019 04:04:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1566903858; cv=none; d=google.com; s=arc-20160816; b=nQ2WCb2otYUs2TooHO0fd9zX08oeFhUX8q+zdgj8yNA55fvCJPusHuQqO/qGcJQZzG 7O75QHbPItc86WffqCG1VHxdy5M4MCYvzsf8uPd3Zj+zi/zgEo8fffGg9alNhoOc71zh nO2NQleIrq66ylbCmXB+dYoCrWiF55h1lhWJguXIvqVGDVJ09V4nLbSCa6w02khs3ND2 epydOLf0UOq7ixbWSJP+Q4aIENA1/blHGuu033c6bi1Dg1C3DLCsV+gplzboA9mAoxRU dvuqWu9+7lFVj8NrUv0YPKX1G28DStLL86n+xugqA9AKg5BgH7H9nTWtEEm5QMCtilc1 L6cw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dmarc-filter:dkim-signature:dkim-signature; bh=ubrUoY6ugGRcl/R1IsHa5oNHnTbaLmdIyUbDAPzKzqo=; b=qlyDEii9F2YIrbKc4+Qrl+Aotoxxu6PCXGS6yBTp2SNzpL48SxNcw1yI83Yr26+Ak/ 6gaml68Wno+vQb24VtE7hJ7ESCFKc2DSofPE4WQ8dwAnzUIBlwtk3U885q0b+2hsDAlL kMLHQEEXaH+c8g+j4OOvQStGKglODRPeVo0huGHme+p3itbI1iHHLWerdx8HUNrUYQ7A gPymdFMzR7E/1xnCDlSKQTTShsl2A6PXcWLQKQFraIRqBuebLoP2vFwwMw8wH0lMhqmF RL8VLQh91uJ0Ef6CvVRtUdinzsbHMw9uPbznj0XLbfPZ1UDquJOT0s/VBYiZKUnYoo/t LK/g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@codeaurora.org header.s=default header.b=C+G2RZNo; dkim=pass header.i=@codeaurora.org header.s=default header.b=cAgQ2Ul2; spf=pass (google.com: best guess record for domain of linux-wireless-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id a11si11226634pgt.124.2019.08.27.04.04.04; Tue, 27 Aug 2019 04:04:18 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-wireless-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@codeaurora.org header.s=default header.b=C+G2RZNo; dkim=pass header.i=@codeaurora.org header.s=default header.b=cAgQ2Ul2; spf=pass (google.com: best guess record for domain of linux-wireless-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729484AbfH0LCq (ORCPT + 99 others); Tue, 27 Aug 2019 07:02:46 -0400 Received: from smtp.codeaurora.org ([198.145.29.96]:50160 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729470AbfH0LCp (ORCPT ); Tue, 27 Aug 2019 07:02:45 -0400 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id 61F9961847; Tue, 27 Aug 2019 11:02:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1566903764; bh=NbCCwyT1TMgL5e+Laamk3/o5vb1zXr2GV1B8OIc8M5o=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=C+G2RZNogKYqHfkwLmZ/ML04difqNDYdtWGcXeweMzc/3xY4u9192vQ1QdG9fTL94 YoJWv7s7VlQYwL1OJ3gkOPRZZObEveKjM4nMUN0O7qSBaCh/WZ7N//BdS122S1ULVY ZOua4Dl5N9wEU3WHZ0uUz4YDYv9hxN0mf++K+qTU= X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on pdx-caf-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.7 required=2.0 tests=ALL_TRUSTED,BAYES_00, DKIM_INVALID,DKIM_SIGNED,SPF_NONE autolearn=no autolearn_force=no version=3.4.0 Received: from wgong-HP-Z240-SFF-Workstation.qca.qualcomm.com (unknown [180.166.53.21]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: wgong@smtp.codeaurora.org) by smtp.codeaurora.org (Postfix) with ESMTPSA id 207FA61C73; Tue, 27 Aug 2019 11:02:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1566903745; bh=NbCCwyT1TMgL5e+Laamk3/o5vb1zXr2GV1B8OIc8M5o=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=cAgQ2Ul2TSU6VnPYoehXjkq4L+fyUfYqLPuESgDxAsN5VgXFL0oUrv+/BivoAcLaz wyRE/rZN4ppeUqPX4xuvH03JxPKna3Gda7BfR20UD7ktGb8SL3Qd6hYNvWoLbHLYGy bGhb+mQlVXFCqSGRWxKj0gRqQpCwylVLIechd6o8= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 207FA61C73 Authentication-Results: pdx-caf-mail.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: pdx-caf-mail.web.codeaurora.org; spf=none smtp.mailfrom=wgong@codeaurora.org From: Wen Gong To: ath10k@lists.infradead.org Cc: linux-wireless@vger.kernel.org Subject: [PATCH v2 6/7] ath10k: enable alt data of TX path for sdio Date: Tue, 27 Aug 2019 19:01:46 +0800 Message-Id: <1566903707-27536-7-git-send-email-wgong@codeaurora.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1566903707-27536-1-git-send-email-wgong@codeaurora.org> References: <1566903707-27536-1-git-send-email-wgong@codeaurora.org> Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org The default credit size is 1792 bytes, but the IP mtu is 1500 bytes, then it has about 290 bytes's waste for each data packet on sdio transfer path for TX bundle, it will reduce the transmission utilization ratio for data packet. This patch enable the small credit size in firmware, firmware will use the new credit size 1556 bytes, it will increase the transmission utilization ratio for data packet on TX patch. It results in significant performance improvement on TX path. This patch only effect sdio chip, it will not effect PCI, SNOC etc. Tested with QCA6174 SDIO with firmware WLAN.RMH.4.4.1-00017-QCARMSWP-1. Signed-off-by: Wen Gong --- drivers/net/wireless/ath/ath10k/core.c | 16 ++++++++++++++++ drivers/net/wireless/ath/ath10k/htc.c | 11 +++++++++-- drivers/net/wireless/ath/ath10k/htc.h | 11 +++++++++-- 3 files changed, 34 insertions(+), 4 deletions(-) diff --git a/drivers/net/wireless/ath/ath10k/core.c b/drivers/net/wireless/ath/ath10k/core.c index 351f4ed..7593d19 100644 --- a/drivers/net/wireless/ath/ath10k/core.c +++ b/drivers/net/wireless/ath/ath10k/core.c @@ -31,6 +31,7 @@ static unsigned int ath10k_cryptmode_param; static bool uart_print; static bool disable_tx_comp = true; +static bool alt_data = true; static bool skip_otp; static bool rawmode; static bool fw_diag_log; @@ -45,6 +46,15 @@ /* If upper layer need the TX complete status, it can enable tx complete */ module_param(disable_tx_comp, bool, 0644); + +/* alt_data is only used for sdio chip, for previous version of firmware, its + * alt data size is 1544 which is not enough for native wifi, so it need to + * alt_data for the firmware. + * If the firmware has changed alt data size to 1556, then it can enable + * alt_data for the firmware. + * alt_data will not effect PCI, SNOC etc. + */ +module_param(alt_data, bool, 0644); module_param(skip_otp, bool, 0644); module_param(rawmode, bool, 0644); module_param(fw_diag_log, bool, 0644); @@ -701,6 +711,12 @@ static void ath10k_init_sdio(struct ath10k *ar, enum ath10k_firmware_mode mode) */ param &= ~HI_ACS_FLAGS_ALT_DATA_CREDIT_SIZE; + /* If alternate credit size of 1556 as used by SDIO firmware is + * big enough for mac80211 / native wifi frames. enable it + */ + if (alt_data && mode == ATH10K_FIRMWARE_MODE_NORMAL) + param |= HI_ACS_FLAGS_ALT_DATA_CREDIT_SIZE; + if (mode == ATH10K_FIRMWARE_MODE_UTF) param &= ~HI_ACS_FLAGS_SDIO_SWAP_MAILBOX_SET; else diff --git a/drivers/net/wireless/ath/ath10k/htc.c b/drivers/net/wireless/ath/ath10k/htc.c index e0eb5f0..5cacab6 100644 --- a/drivers/net/wireless/ath/ath10k/htc.c +++ b/drivers/net/wireless/ath/ath10k/htc.c @@ -938,12 +938,15 @@ int ath10k_htc_wait_target(struct ath10k_htc *htc) */ if (htc->control_resp_len >= sizeof(msg->hdr) + sizeof(msg->ready_ext)) { + htc->alt_data_credit_size = + __le16_to_cpu(msg->ready_ext.reserved) & 0x0fff; htc->max_msgs_per_htc_bundle = min_t(u8, msg->ready_ext.max_msgs_per_htc_bundle, HTC_HOST_MAX_MSG_PER_RX_BUNDLE); ath10k_dbg(ar, ATH10K_DBG_HTC, - "Extended ready message. RX bundle size: %d\n", - htc->max_msgs_per_htc_bundle); + "Extended ready message. RX bundle size: %d, alt size:%d\n", + htc->max_msgs_per_htc_bundle, + htc->alt_data_credit_size); } INIT_WORK(&ar->bundle_tx_work, ath10k_htc_bundle_tx_work); @@ -1095,6 +1098,10 @@ int ath10k_htc_connect_service(struct ath10k_htc *htc, ep->tx_credits = tx_alloc; ep->tx_credit_size = htc->target_credit_size; + if (conn_req->service_id == ATH10K_HTC_SVC_ID_HTT_DATA_MSG && + htc->alt_data_credit_size != 0) + ep->tx_credit_size = htc->alt_data_credit_size; + /* copy all the callbacks */ ep->ep_ops = conn_req->ep_ops; diff --git a/drivers/net/wireless/ath/ath10k/htc.h b/drivers/net/wireless/ath/ath10k/htc.h index d805ea5..f0a9e60af 100644 --- a/drivers/net/wireless/ath/ath10k/htc.h +++ b/drivers/net/wireless/ath/ath10k/htc.h @@ -139,8 +139,14 @@ struct ath10k_htc_ready_extended { struct ath10k_htc_ready base; u8 htc_version; /* @enum ath10k_htc_version */ u8 max_msgs_per_htc_bundle; - u8 pad0; - u8 pad1; + union { + __le16 reserved; + struct { + u8 pad0; + u8 pad1; + } __packed; + } __packed; + } __packed; struct ath10k_htc_conn_svc { @@ -377,6 +383,7 @@ struct ath10k_htc { int total_transmit_credits; int target_credit_size; u8 max_msgs_per_htc_bundle; + int alt_data_credit_size; }; int ath10k_htc_init(struct ath10k *ar); -- 1.9.1