From patchwork Sun Sep 17 19:40:06 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Erik Stromdahl X-Patchwork-Id: 9955009 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 C56566028A for ; Sun, 17 Sep 2017 19:40:33 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B96F528A6E for ; Sun, 17 Sep 2017 19:40:33 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id AE2E528A8D; Sun, 17 Sep 2017 19:40:33 +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 3818228A6E for ; Sun, 17 Sep 2017 19:40:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751497AbdIQTka (ORCPT ); Sun, 17 Sep 2017 15:40:30 -0400 Received: from mail-lf0-f66.google.com ([209.85.215.66]:33935 "EHLO mail-lf0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751352AbdIQTk2 (ORCPT ); Sun, 17 Sep 2017 15:40:28 -0400 Received: by mail-lf0-f66.google.com with SMTP id h80so3540650lfe.1 for ; Sun, 17 Sep 2017 12:40:27 -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=mYmdPueprqflJaYI1S4TQDZPVnwjrqcItCkFnyHV99E=; b=BbJ1HdZbb1hdXicmgMJsc2ST5kEdKjDZtcEY/sWwhm+sIUHX6+AV4qpZ3sqcrlp9L/ HyX0yPcDhcXLYAa/zUg3/WouIAMoooLJIMLN0FKFI8KRs0zo+S+1RZuTxopYJ4ddkOMV UW9PrAf/AT0EjUtQW80kOzwpvKLlxCMPivDK7gvGiD5MDZF+ppqxqd61N5cnSi7jeIQ2 0WSvUVjdPPmQEjaayOXADor2/8csFO24TzzklCHdxMMu1l2BEjQuaD7vR8rbfLiPPjTF 5wBmBl3L0ShXVw8EDIm9ouK3YIKbsnuN8nAA2IAlRdRayo4Ni+tjrRn7ov/+VviUtCp0 nyWw== 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=mYmdPueprqflJaYI1S4TQDZPVnwjrqcItCkFnyHV99E=; b=ZQcNNIH3i4CbTC7xgW39mOwOF9OIWeNBKYKw0kas7vj70R1dNtneN7Np3SkYUi6YMd y4ZqHQ0VQhUmKiJCPPQgFMAx+qRz4baV/yYfv9Vdiwcs4eNnS/rQJTznYPFL+eViTd5Z fg2ARJBFnZW4CZBSVkMCfqGQc1u+v3yFg3VUS9zmDakIe0Qds0pl1wEFGYJ/PpUeVGmg B82+bOW7PqLjTtQ3tVl+hxRDXSzQ8gyUOou7yj/KjVrE8MQUUnvKihs+qZZ/voUERgj3 X2Cn0rgy0AtKqe9QzO9rP0IqQu1MJLNQ9G3P/Rek4uMisoQt6ACWfe6+chXHoB3NRxQX pOnQ== X-Gm-Message-State: AHPjjUg1bIRKLXOGeSfnSBudK/V2RrQDE+RQkBEdjmuYT9+h/1bXucsB K5Tr+IA5funYxQ== X-Google-Smtp-Source: AOwi7QA38wLEnRMYEEbHOYeatQT2r+4hQgBExWwcnmfXFuMrioWm2azzGLb2keJKtHUZgFq9H/S6VQ== X-Received: by 10.46.23.220 with SMTP id 89mr7089557ljx.162.1505677227003; Sun, 17 Sep 2017 12:40:27 -0700 (PDT) Received: from erik-arch-i5-6600.lan (90-227-62-61-no75.tbcn.telia.com. [90.227.62.61]) by smtp.gmail.com with ESMTPSA id 1sm1452879ljo.13.2017.09.17.12.40.26 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 17 Sep 2017 12:40:26 -0700 (PDT) From: Erik Stromdahl To: kvalo@qca.qualcomm.com, linux-wireless@vger.kernel.org, ath10k@lists.infradead.org Cc: Erik Stromdahl Subject: [RFC v3 04/11] ath10k: add start_once support Date: Sun, 17 Sep 2017 21:40:06 +0200 Message-Id: <20170917194013.8658-5-erik.stromdahl@gmail.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20170917194013.8658-1-erik.stromdahl@gmail.com> References: <20170917194013.8658-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 a4a326c89e0d..c21227a74996 100644 --- a/drivers/net/wireless/ath/ath10k/core.c +++ b/drivers/net/wireless/ath/ath10k/core.c @@ -1999,6 +1999,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); @@ -2226,6 +2229,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: @@ -2278,6 +2282,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); @@ -2380,12 +2385,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 64dadcd6e531..0b5b1dd00e16 100644 --- a/drivers/net/wireless/ath/ath10k/core.h +++ b/drivers/net/wireless/ath/ath10k/core.h @@ -784,6 +784,8 @@ struct ath10k { bool is_high_latency; + 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 8cf7b963f3d4..fd0536077404 100644 --- a/drivers/net/wireless/ath/ath10k/hw.h +++ b/drivers/net/wireless/ath/ath10k/hw.h @@ -569,6 +569,12 @@ struct ath10k_hw_params { bool is_high_latency; enum ath10k_bus bus; + + /* 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;