From patchwork Thu Aug 3 14:29:02 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amitkumar Karwar X-Patchwork-Id: 9879261 X-Patchwork-Delegate: kvalo@adurom.com Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 2154560360 for ; Thu, 3 Aug 2017 14:33:44 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1417928733 for ; Thu, 3 Aug 2017 14:33:44 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 08EC928920; Thu, 3 Aug 2017 14:33:44 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.5 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, RCVD_IN_SORBS_SPAM autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id AAC3B2891D for ; Thu, 3 Aug 2017 14:33:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751933AbdHCOdm (ORCPT ); Thu, 3 Aug 2017 10:33:42 -0400 Received: from mail-pg0-f65.google.com ([74.125.83.65]:36096 "EHLO mail-pg0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751878AbdHCOdl (ORCPT ); Thu, 3 Aug 2017 10:33:41 -0400 Received: by mail-pg0-f65.google.com with SMTP id y129so1665134pgy.3 for ; Thu, 03 Aug 2017 07:33:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=bpnuWmzsVvoMVALb3AL+I+bA1lkqvNg4UB5oSTY7Szg=; b=Oj3Nngc6yLPUsVqaueP1Z5qpfQgC+8QOJVtgbME/8RBIPzpckuHIRDI2ftgT0p+cCB 8tOW1Edjl+BgtBiIh3sI7MrTsooq8jKzNBFipemou0QPM+3h6qQvIaKrj+YNYYeLP4ur DPQ4fy3fI1NFyfoZA+I0XcFF1bnJfA9lwTpz1BMqTCrJFD6wTbCRU71PUthCXRETaOb+ cdNJv9s1SrhYRBoouGTBBjoMk6AW82s/r1Mbj059ePK5NTzQziE4Sgoc2nhzyR2yqNh6 EXwnJyZO+Mz2jp9wRG9DnbK1HcaGPg5RlqrvMJpkiiPk2gB+af78BWnHy0yApkCSB8IQ aT2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=bpnuWmzsVvoMVALb3AL+I+bA1lkqvNg4UB5oSTY7Szg=; b=fIHKGZXD+CzCrHeamU/pxS3BklOIIXl3fIxiyDEB+/upNWIng7ITvl+FNzlUxOJVP2 L2MAIv/HLZEO6bqDwadsj8L92LXAJ6IxQOwHXVkKXhxlNxpR796xwBB4CMV2cZQObsbg usg528g07G8WXm8MQ0zzENFZWl77I1ZWkM3bnxZ1FeqrpQ3zN0cLvMBwyX1Jnimk6pCi KF4hOok5JUDd3bTZ/NraLwFwD1yc6XY2IrLsjll9HI4eviBPMCb3qdTEH6aH/cgSrvf/ sM/RepestNpNAoh2bJRDcUAlPKPz55SY7JnbP7DbJTdajyY5S5zS4tx4Z5lFESDtpsMM EHBQ== X-Gm-Message-State: AIVw110iWwtdoKgmjQtcZUhbnOFf6HUfPgtMn5vIWTscQW54nsAHMTYV pafMFoEJWoHzxA== X-Received: by 10.99.126.3 with SMTP id z3mr1795059pgc.149.1501770820857; Thu, 03 Aug 2017 07:33:40 -0700 (PDT) Received: from cpu185.redpinesignals.com ([203.196.161.90]) by smtp.gmail.com with ESMTPSA id f87sm64021625pfe.108.2017.08.03.07.33.37 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 03 Aug 2017 07:33:40 -0700 (PDT) From: Amitkumar Karwar To: Kalle Valo Cc: linux-wireless@vger.kernel.org, Amitkumar Karwar , Prameela Rani Garnepudi , Karun Eagalapati Subject: [v2 6/8] rsi: buffer full check optimization Date: Thu, 3 Aug 2017 19:59:02 +0530 Message-Id: <1501770544-6746-7-git-send-email-amitkarwar@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1501770544-6746-1-git-send-email-amitkarwar@gmail.com> References: <1501770544-6746-1-git-send-email-amitkarwar@gmail.com> Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Karun Eagalapati We get buffer full event from firmware whenever Tx queue is full Host should stop writing packets after this and resume after buffer free event. Buffer status checking is optimized for once in 4 times if BUFF_FULL condition is not set, otherwise once for every packet. Signed-off-by: Karun Eagalapati Signed-off-by: Amitkumar Karwar --- drivers/net/wireless/rsi/rsi_91x_sdio_ops.c | 16 +++++++++++++++- drivers/net/wireless/rsi/rsi_sdio.h | 1 + 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/drivers/net/wireless/rsi/rsi_91x_sdio_ops.c b/drivers/net/wireless/rsi/rsi_91x_sdio_ops.c index 9b94ba7..94a9fcd 100644 --- a/drivers/net/wireless/rsi/rsi_91x_sdio_ops.c +++ b/drivers/net/wireless/rsi/rsi_91x_sdio_ops.c @@ -271,6 +271,7 @@ void rsi_interrupt_handler(struct rsi_hw *adapter) "%s: ==> BUFFER_AVAILABLE <==\n", __func__); dev->rx_info.buf_available_counter++; + dev->buff_status_updated = true; break; case FIRMWARE_ASSERT_IND: @@ -333,7 +334,14 @@ int rsi_sdio_check_buffer_status(struct rsi_hw *adapter, u8 q_num) (struct rsi_91x_sdiodev *)adapter->rsi_dev; u8 buf_status = 0; int status = 0; + static int counter = 4; + if (!dev->buff_status_updated && counter) { + counter--; + goto out; + } + + dev->buff_status_updated = false; status = rsi_sdio_read_register(common->priv, RSI_DEVICE_BUFFER_STATUS_REGISTER, &buf_status); @@ -368,10 +376,16 @@ int rsi_sdio_check_buffer_status(struct rsi_hw *adapter, u8 q_num) dev->rx_info.semi_buffer_full = false; } + if (dev->rx_info.mgmt_buffer_full || dev->rx_info.buf_full_counter) + counter = 1; + else + counter = 4; + +out: if ((q_num == MGMT_SOFT_Q) && (dev->rx_info.mgmt_buffer_full)) return QUEUE_FULL; - if (dev->rx_info.buffer_full) + if ((q_num < MGMT_SOFT_Q) && (dev->rx_info.buffer_full)) return QUEUE_FULL; return QUEUE_NOT_FULL; diff --git a/drivers/net/wireless/rsi/rsi_sdio.h b/drivers/net/wireless/rsi/rsi_sdio.h index 9239fbe..95e4bed 100644 --- a/drivers/net/wireless/rsi/rsi_sdio.h +++ b/drivers/net/wireless/rsi/rsi_sdio.h @@ -114,6 +114,7 @@ struct rsi_91x_sdiodev { u8 prev_desc[16]; u16 tx_blk_size; u8 write_fail; + bool buff_status_updated; }; void rsi_interrupt_handler(struct rsi_hw *adapter);