From patchwork Fri Dec 4 15:20:03 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: You-Sheng Yang X-Patchwork-Id: 1411086 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.ubuntu.com (client-ip=91.189.94.19; helo=huckleberry.canonical.com; envelope-from=kernel-team-bounces@lists.ubuntu.com; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=canonical.com Received: from huckleberry.canonical.com (huckleberry.canonical.com [91.189.94.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4CnbyS75Qvz9sWR; Sat, 5 Dec 2020 02:21:20 +1100 (AEDT) Received: from localhost ([127.0.0.1] helo=huckleberry.canonical.com) by huckleberry.canonical.com with esmtp (Exim 4.86_2) (envelope-from ) id 1klCtZ-0006NG-6u; Fri, 04 Dec 2020 15:21:17 +0000 Received: from mail-pl1-f194.google.com ([209.85.214.194]) by huckleberry.canonical.com with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1klCtU-0006Fl-UO for kernel-team@lists.ubuntu.com; Fri, 04 Dec 2020 15:21:13 +0000 Received: by mail-pl1-f194.google.com with SMTP id l11so3278278plt.1 for ; Fri, 04 Dec 2020 07:21:10 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=4XbUqXUMMbTCW3PO7nrkUk/yIWawwMErVYDlxV5JXnI=; b=DliuvjczUynCxfTV/epa0LmU9We7jr9WXcmKzsX3UXb2cDd64ua7Aa/QHflYwdgZlN bjzfpM0y7BlPlmsyOA135ShhMVUCaj+JdUq2WOeCycw7LcQTPmy6crGUt4S2YVqxRDzQ i4xMD0kLzcQf67cFE07pmKazaoFNvSBhrMxT3H6LPNqYrxqWw+9/SHnXBM70E2nAESVk DBDtOZPmXTfG0ipurnEttUqAjnn/xtw/LDOItiLYvUucqc8m+7s+On+6W+s7kgGv14N+ 8u/kobIUD+y1spKL09cdHCZUjddOuYE7ajOdT1xcrm0D9XkvXQOT6rnTTRJVL+2V8lKR k4hw== X-Gm-Message-State: AOAM531btOXzcaZuInODHzuOvS73R/wcD1rf981e4g5aOIQndrggcHGB TaHAEkIZTZEEDJajU0aU8EcU2CCF7zTV8A== X-Google-Smtp-Source: ABdhPJwoeNmlVqG+E9h2wIAp7WGXLB9vyGG8Yg8oyFVc+sT+VtSvZZBq+82S1ZO1ES2ne0gATIPitw== X-Received: by 2002:a17:90a:578f:: with SMTP id g15mr4595338pji.3.1607095267910; Fri, 04 Dec 2020 07:21:07 -0800 (PST) Received: from localhost (61-220-137-37.HINET-IP.hinet.net. [61.220.137.37]) by smtp.gmail.com with ESMTPSA id s189sm4965297pfb.60.2020.12.04.07.21.06 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Dec 2020 07:21:07 -0800 (PST) From: You-Sheng Yang To: kernel-team@lists.ubuntu.com Subject: [PATCH 17/26][SRU][U/OEM-5.10] UBUNTU: SAUCE: ath11k: disable ASPM L0sLs before downloading firmware Date: Fri, 4 Dec 2020 23:20:03 +0800 Message-Id: <20201204152013.195139-18-vicamo.yang@canonical.com> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201204152013.195139-1-vicamo.yang@canonical.com> References: <20201204152013.195139-1-vicamo.yang@canonical.com> MIME-Version: 1.0 Received-SPF: pass client-ip=209.85.214.194; envelope-from=vicamo@gmail.com; helo=mail-pl1-f194.google.com X-BeenThere: kernel-team@lists.ubuntu.com X-Mailman-Version: 2.1.20 Precedence: list List-Id: Kernel team discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: kernel-team-bounces@lists.ubuntu.com Sender: "kernel-team" From: Carl Huang BugLink: https://bugs.launchpad.net/bugs/1879633 Sometimes target doesn't switch to amss state as device enters L1ss state, so disable L0sL1s during firmware downloading. Driver recovers the ASPM to default value in start callback or powerdown callback. Tested-on: QCA6390 hw2.0 PCI WLAN.HST.1.0.1-01740-QCAHSTSWPLZ_V2_TO_X86-1 Signed-off-by: Carl Huang Signed-off-by: Kalle Valo (cherry picked from commit 8bd374e3305359ca0be9fe88e8a1edc1abd537eb https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git) Signed-off-by: You-Sheng Yang --- drivers/net/wireless/ath/ath11k/pci.c | 17 +++++++++++++++++ drivers/net/wireless/ath/ath11k/pci.h | 2 ++ 2 files changed, 19 insertions(+) diff --git a/drivers/net/wireless/ath/ath11k/pci.c b/drivers/net/wireless/ath/ath11k/pci.c index c058c6e9db43..7e39fe157df3 100644 --- a/drivers/net/wireless/ath/ath11k/pci.c +++ b/drivers/net/wireless/ath/ath11k/pci.c @@ -998,6 +998,11 @@ static int ath11k_pci_power_up(struct ath11k_base *ab) clear_bit(ATH11K_PCI_FLAG_INIT_DONE, &ab_pci->flags); ath11k_pci_sw_reset(ab_pci->ab, true); + /* disable L0sL1, write 0x40 to link_ctrl */ + pci_read_config_byte(ab_pci->pdev, 0x80, &ab_pci->aspm); + pci_write_config_byte(ab_pci->pdev, 0x80, ab_pci->aspm & 0xfc); + ab_pci->restore_aspm = true; + ret = ath11k_mhi_start(ab_pci); if (ret) { ath11k_err(ab, "failed to start mhi: %d\n", ret); @@ -1011,6 +1016,12 @@ static void ath11k_pci_power_down(struct ath11k_base *ab) { struct ath11k_pci *ab_pci = ath11k_pci_priv(ab); + /* recover aspm */ + if (ab_pci->restore_aspm) { + pci_write_config_byte(ab_pci->pdev, 0x80, ab_pci->aspm); + ab_pci->restore_aspm = false; + } + ath11k_pci_force_wake(ab_pci->ab); ath11k_mhi_stop(ab_pci); clear_bit(ATH11K_PCI_FLAG_INIT_DONE, &ab_pci->flags); @@ -1073,6 +1084,12 @@ static int ath11k_pci_start(struct ath11k_base *ab) set_bit(ATH11K_PCI_FLAG_INIT_DONE, &ab_pci->flags); + /* recover aspm */ + if (ab_pci->restore_aspm) { + pci_write_config_byte(ab_pci->pdev, 0x80, ab_pci->aspm); + ab_pci->restore_aspm = false; + } + ath11k_pci_ce_irqs_enable(ab); ath11k_ce_rx_post_buf(ab); diff --git a/drivers/net/wireless/ath/ath11k/pci.h b/drivers/net/wireless/ath/ath11k/pci.h index 2125cdfaa334..edf6d2e6f088 100644 --- a/drivers/net/wireless/ath/ath11k/pci.h +++ b/drivers/net/wireless/ath/ath11k/pci.h @@ -82,6 +82,8 @@ struct ath11k_pci { /* enum ath11k_pci_flags */ unsigned long flags; + u8 aspm; + bool restore_aspm; }; static inline struct ath11k_pci *ath11k_pci_priv(struct ath11k_base *ab)