From patchwork Sun Dec 31 17:29:16 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Erik Stromdahl X-Patchwork-Id: 10138237 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 C84D160362 for ; Sun, 31 Dec 2017 17:31:47 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B03722886B for ; Sun, 31 Dec 2017 17:31:47 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id A4F562887A; Sun, 31 Dec 2017 17:31:47 +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=-7.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM, RCVD_IN_DNSWL_HI 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 46F552886B for ; Sun, 31 Dec 2017 17:31:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751131AbdLaRbp (ORCPT ); Sun, 31 Dec 2017 12:31:45 -0500 Received: from mail-lf0-f65.google.com ([209.85.215.65]:40962 "EHLO mail-lf0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751091AbdLaRbn (ORCPT ); Sun, 31 Dec 2017 12:31:43 -0500 Received: by mail-lf0-f65.google.com with SMTP id h137so8087327lfe.8 for ; Sun, 31 Dec 2017 09:31:42 -0800 (PST) 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=hvhfAiZXpSLtBR3/wUiKk6tMqOOzknnhITm6+MJ7SCM=; b=GCgpuiqZ/KJv8KSX/FL9q4OsJWU8bH2U2N+pqoqmOQiE6dDRjF1LGA4kLXOTHBwWwX KYEHmlzd1FGqglByFvKoFQhVk12Rig1VTD3KeIoJRnU7LI2E3x1aZhuZ3TWLDiY8hdC2 Z6bYrCmLYSzm47+/N5PLpv8cTBEffebipiGZaa1bwZLVOkee+MJ5h+A1mRepffTOrghD iDJ7I/pEEdyV5QUcahUajnNMLHpClGp0CPbsYTEc0vyreQYn03dk5w2RtPcMcS8Wh90S i38qGUdzyINPxIGjiwk4XbG6uh5nuUcKgTx6QWHCS0YuNihf7p1gu6HjSm0u3agZxl48 jipA== 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=hvhfAiZXpSLtBR3/wUiKk6tMqOOzknnhITm6+MJ7SCM=; b=YiH6YRIMmAsmqhJzdMxVzeyn5t3/4bScNDKCsRuQALF/n1L+oxwyb/uV6YQspfGNZc xwQWFEhUbosq9sPmRbfOStNvu8FNtNS2nbemMj3nZIO/kDGy8/AbbNKcFfMcdYaUgvSC 1H49SP50e57iP5LmolzCLZfFGkwhTWduEy92Xu0i/EPCSixk+6de4AVJpiY6OV6ylQlC d+PqE0KObsP1+sJiQ18QWblsSAtqyIYtWT3QJzpVCFwm7TjOZPTnPnFTV6nhn6rBA9Rw JrWwdL91ECOBKRtm3T4nEtrU7fqpWpLamTGcfGMjLrLfAB4StiWRi4YEY6M+/dhfYdOW LpUw== X-Gm-Message-State: AKGB3mJ0QYNyvBbrOGj2pvH9pMJgzCgUwDwyGwDD63h+PERkNgPhgxx+ SvQd/BYlLboIJNup3llr4Af7xw== X-Google-Smtp-Source: ACJfBotvPuFDYXLaLyxm4aNqqWSqX6+m//YZIcJbqWcPSk61ktRo5zMXa8ulDOA7YFABj+iLJA06ag== X-Received: by 10.25.219.145 with SMTP id t17mr22720562lfi.73.1514741501802; Sun, 31 Dec 2017 09:31:41 -0800 (PST) Received: from localhost.localdomain (90-227-62-61-no75.tbcn.telia.com. [90.227.62.61]) by smtp.gmail.com with ESMTPSA id o64sm5048449lfo.53.2017.12.31.09.31.40 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 31 Dec 2017 09:31:41 -0800 (PST) From: Erik Stromdahl To: kvalo@qca.qualcomm.com, linux-wireless@vger.kernel.org, ath10k@lists.infradead.org Cc: Erik Stromdahl Subject: [RFC v4 09/18] ath10k: add start_once support Date: Sun, 31 Dec 2017 18:29:16 +0100 Message-Id: <20171231172925.24014-10-erik.stromdahl@gmail.com> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20171231172925.24014-1-erik.stromdahl@gmail.com> References: <20171231172925.24014-1-erik.stromdahl@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 Add possibility to configure the driver to only start target once. This can reduce startup time of SDIO devices significantly since loading the firmware can take a substantial amount of time. The patch is also necessary for high latency devices in general since it does not seem to be possible to rerun the BMI phase (fw upload) without power-cycling the device. Signed-off-by: Erik Stromdahl --- drivers/net/wireless/ath/ath10k/core.c | 19 +++++++++++++++---- drivers/net/wireless/ath/ath10k/core.h | 2 ++ drivers/net/wireless/ath/ath10k/hw.h | 6 ++++++ 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/drivers/net/wireless/ath/ath10k/core.c b/drivers/net/wireless/ath/ath10k/core.c index 4e849ec924c6..d42f6a1e5bfc 100644 --- a/drivers/net/wireless/ath/ath10k/core.c +++ b/drivers/net/wireless/ath/ath10k/core.c @@ -2130,6 +2130,9 @@ int ath10k_core_start(struct ath10k *ar, enum ath10k_firmware_mode mode, int status; u32 val; + if (ar->is_started && ar->hw_params.start_once) + return 0; + lockdep_assert_held(&ar->conf_mutex); clear_bit(ATH10K_FLAG_CRASH_FLUSH, &ar->dev_flags); @@ -2364,6 +2367,7 @@ int ath10k_core_start(struct ath10k *ar, enum ath10k_firmware_mode mode, if (status) goto err_hif_stop; + ar->is_started = true; return 0; err_hif_stop: @@ -2416,6 +2420,7 @@ void ath10k_core_stop(struct ath10k *ar) ath10k_htt_tx_stop(&ar->htt); ath10k_htt_rx_free(&ar->htt); ath10k_wmi_detach(ar); + ar->is_started = false; } EXPORT_SYMBOL(ath10k_core_stop); @@ -2545,12 +2550,18 @@ static int ath10k_core_probe_fw(struct ath10k *ar) goto err_unlock; } - ath10k_debug_print_boot_info(ar); - ath10k_core_stop(ar); + /* Leave target running if hw_params.start_once is set */ + if (ar->hw_params.start_once) { + mutex_unlock(&ar->conf_mutex); + } else { + ath10k_debug_print_boot_info(ar); + ath10k_core_stop(ar); - mutex_unlock(&ar->conf_mutex); + mutex_unlock(&ar->conf_mutex); + + ath10k_hif_power_down(ar); + } - ath10k_hif_power_down(ar); return 0; err_unlock: diff --git a/drivers/net/wireless/ath/ath10k/core.h b/drivers/net/wireless/ath/ath10k/core.h index 32cfa14d3053..ed96f9ef5209 100644 --- a/drivers/net/wireless/ath/ath10k/core.h +++ b/drivers/net/wireless/ath/ath10k/core.h @@ -798,6 +798,8 @@ struct ath10k { bool p2p; + bool is_started; + struct { enum ath10k_bus bus; const struct ath10k_hif_ops *ops; diff --git a/drivers/net/wireless/ath/ath10k/hw.h b/drivers/net/wireless/ath/ath10k/hw.h index 53276950c95c..98f9f3ccbf96 100644 --- a/drivers/net/wireless/ath/ath10k/hw.h +++ b/drivers/net/wireless/ath/ath10k/hw.h @@ -576,6 +576,12 @@ struct ath10k_hw_params { /* Target rx ring fill level */ u32 rx_ring_fill_level; + + /* Specifies whether or not the device should be started once. + * If set, the device will be started once by the early fw probe + * and it will not be terminated afterwards. + */ + bool start_once; }; struct htt_rx_desc;