Received: by 2002:a05:6359:6284:b0:131:369:b2a3 with SMTP id se4csp5298524rwb; Wed, 9 Aug 2023 01:41:46 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFtvhDnlC9yN0VaRJDZZgfMnAZf99/kZbVuTOYNbXlynFwcdF1XwOguFW1LnN5HEDANpSjR X-Received: by 2002:a17:90a:4213:b0:263:f9c8:9d9e with SMTP id o19-20020a17090a421300b00263f9c89d9emr1362098pjg.46.1691570506341; Wed, 09 Aug 2023 01:41:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1691570506; cv=none; d=google.com; s=arc-20160816; b=jGhkw/6jgEIqJfMtoQZCe4xs4XWR6xxxJEKF6YcUQ+IzIAl8lXtM0sI8SYTbJ0yy7Z ualUekY5EyrjkfyUinogeJCFfed69YNB4UGv4oQTkQbY0T6BM9msEmgRpRWRCTO7u8su y3gd+ldDdqZyBwQNI1O38qFTPc0iXbmeo+WNSHImpvQz9M7SPBbHr1cBojPsfa0QnZsl kBVo11TgEcnQ2e1q2SOFNSuWwIJqEt87yXwK3pdow/W5XanoQwZepLSo/a5DWqr26JKT FE+4YaR+XIqLSaX0uTthZ6vuCRONojgh7gcGBaie/KOX20xxNo/uYX7QRjbPLzxPbqGJ ysXw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=+Okzh3I3dzCaHx/bUTlDK1L8F0UIhPrJOUlojekDh3o=; fh=qTnrfkbJPCl8rBBHes/m/kANHtY5CZibib0OI04fKQY=; b=LakNdd0zGB51twPK1w46G52TknJCTyq4UqUPt6hc6mFmEUBeqfLpjlf8V8xDWzamY6 r2jfVQXSWUE47vK5s3FOep6R8kASfa4gZ0M946zq9HQ8MTh11M1nY18D2/QqF25Pv79D zNaMcOmjQqQMGI/8PvFa6z3p7pmxvMslOK53cYIUQrHKUJz8ih5/bfPFyBJk6b+8Xg5Q uzgYGPW25vEDNMB/hdYzd19Yy5lBd/jsXgVqY9eS6Ahz6wT9o6PPu+aSRsJ3PHUApxn+ dg3FNgD0RS2U//l8RpRzbrEIV3hM63peJcQsvK2RJnCvHylLupPpf4DrERIGyRrfGHRc UiYg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=w2eFjDPW; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id lx13-20020a17090b4b0d00b0026801e7a613si1047136pjb.146.2023.08.09.01.41.33; Wed, 09 Aug 2023 01:41:46 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=w2eFjDPW; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231394AbjHIITV (ORCPT + 99 others); Wed, 9 Aug 2023 04:19:21 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40326 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229702AbjHIITU (ORCPT ); Wed, 9 Aug 2023 04:19:20 -0400 Received: from mail-oa1-x29.google.com (mail-oa1-x29.google.com [IPv6:2001:4860:4864:20::29]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 88CC010FF for ; Wed, 9 Aug 2023 01:19:19 -0700 (PDT) Received: by mail-oa1-x29.google.com with SMTP id 586e51a60fabf-1bbaa549c82so5176792fac.0 for ; Wed, 09 Aug 2023 01:19:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1691569159; x=1692173959; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=+Okzh3I3dzCaHx/bUTlDK1L8F0UIhPrJOUlojekDh3o=; b=w2eFjDPWzAORfg5gZl6b/D1O0q/g5sM0KeZ+LXfzb3SM+XbwJxbmWCbWx3rRzDCu7c 1JvwydZmEXJtvccfgbMkxkGswri3FZ+fGJX33NDK1Zh9kQNNRv1fQVC/tE685qq2XAQW gV2wmTEIDwGATUzoDSViYRrEkmmh9JiaCd0ReuFeiCOxRaf62//2DQ3mrAu4b1sHmRET ehY+a0EF3Fo7cIU4XXfORfkvwncFgxW2yUZuHXT+h05cfPbHMSp4yB9Y4y69xtJE/SSr RameDHrn1aH7WrVf6pIEoanaKU+oUPdIl6Nj12hW8Y8lujHiO01d5GKMSuHpbBU5MTdy BbOQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691569159; x=1692173959; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=+Okzh3I3dzCaHx/bUTlDK1L8F0UIhPrJOUlojekDh3o=; b=U9LYjETiomC37LUxIayWS7EdfDqO7SDQ+bQ1EGU9ydSVM8FrfOk3+amCrplYJY7rDl nFiG4cvI0Pzpboa28rYe2aQQ77X7XkFwYxlvegbvotZaq33BecL7j0SB1QX5VdCm375U oaLlem2fB0gGxXAFqD99XN5iUTY/Mmha8mhck7fu8+Oep9f3mREh7SCQgsigmoj5aBC+ rzNH15DIeade8YNwWJTPHYslWoYIl00d+KhF8CxOiZOOzrj9LmLzOvdI26zE/GGdSwYC D3Pi/qkEuHyeIvNsE/T/cXgkCtQxFGE/8y3P66Dl32Kr3SagYOY2m9V4nrxJ3uzj0IY7 3wNA== X-Gm-Message-State: AOJu0YyCGZcZnLT789/k4m6b4kPWbb7+84KI3V6yH2tF0n3iSPn8lhou sQCc4CQ00CSphBB6qDpv1tN5 X-Received: by 2002:a05:6870:418c:b0:1bf:b863:b64 with SMTP id y12-20020a056870418c00b001bfb8630b64mr1897438oac.19.1691569158866; Wed, 09 Aug 2023 01:19:18 -0700 (PDT) Received: from localhost.localdomain ([117.207.25.122]) by smtp.gmail.com with ESMTPSA id v13-20020a62a50d000000b00686ee7ba3easm9331881pfm.216.2023.08.09.01.19.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Aug 2023 01:19:18 -0700 (PDT) From: Manivannan Sadhasivam To: lpieralisi@kernel.org, kw@linux.com, bhelgaas@google.com Cc: robh@kernel.org, gustavo.pimentel@synopsys.com, jingoohan1@gmail.com, andersson@kernel.org, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, Manivannan Sadhasivam Subject: [PATCH 2/2] PCI: qcom: Enable ASPM for platforms supporting 1.9.0 ops Date: Wed, 9 Aug 2023 13:48:40 +0530 Message-Id: <20230809081840.16034-3-manivannan.sadhasivam@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230809081840.16034-1-manivannan.sadhasivam@linaro.org> References: <20230809081840.16034-1-manivannan.sadhasivam@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org ASPM is supported by Qcom host controllers/bridges on most of the recent platforms and so the devices tested so far. But for enabling ASPM by default (without Kconfig/cmdline/sysfs), BIOS has to enable ASPM on both host bridge and downstream devices during boot. Unfortunately, none of the BIOS available on Qcom platforms enables ASPM. Due to this, the platforms making use of Qcom SoCs draw high power during runtime. To fix this power issue, users/distros have to enable ASPM using configs such as (Kconfig/cmdline/sysfs) or the BIOS has to start enabling ASPM. The latter may happen in the future, but that won't address the issue on current platforms. Also, asking users/distros to enable a feature to get the power management right would provide an unpleasant out-of-the-box experience. So the apt solution is to enable ASPM in the controller driver itself. And this is being accomplished by calling pci_enable_link_state() in the newly introduced host_post_init() callback for all the devices connected to the bus. This function enables all supported link low power states for both host bridge and the downstream devices. Due to limited testing, ASPM is only enabled for platforms making use of ops_1_9_0 callbacks. Signed-off-by: Manivannan Sadhasivam --- drivers/pci/controller/dwc/pcie-qcom.c | 28 ++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/drivers/pci/controller/dwc/pcie-qcom.c b/drivers/pci/controller/dwc/pcie-qcom.c index cee4e400a695..ef843328a9a0 100644 --- a/drivers/pci/controller/dwc/pcie-qcom.c +++ b/drivers/pci/controller/dwc/pcie-qcom.c @@ -219,6 +219,7 @@ struct qcom_pcie_ops { int (*get_resources)(struct qcom_pcie *pcie); int (*init)(struct qcom_pcie *pcie); int (*post_init)(struct qcom_pcie *pcie); + void (*host_post_init)(struct qcom_pcie *pcie); void (*deinit)(struct qcom_pcie *pcie); void (*ltssm_enable)(struct qcom_pcie *pcie); int (*config_sid)(struct qcom_pcie *pcie); @@ -964,6 +965,22 @@ static int qcom_pcie_post_init_2_7_0(struct qcom_pcie *pcie) return 0; } +static int qcom_pcie_enable_aspm(struct pci_dev *pdev, void *userdata) +{ + /* Downstream devices need to be in D0 state before enabling PCI PM substates */ + pci_set_power_state(pdev, PCI_D0); + pci_enable_link_state(pdev, PCIE_LINK_STATE_ALL); + + return 0; +} + +static void qcom_pcie_host_post_init_2_7_0(struct qcom_pcie *pcie) +{ + struct dw_pcie_rp *pp = &pcie->pci->pp; + + pci_walk_bus(pp->bridge->bus, qcom_pcie_enable_aspm, NULL); +} + static void qcom_pcie_deinit_2_7_0(struct qcom_pcie *pcie) { struct qcom_pcie_resources_2_7_0 *res = &pcie->res.v2_7_0; @@ -1216,9 +1233,19 @@ static void qcom_pcie_host_deinit(struct dw_pcie_rp *pp) pcie->cfg->ops->deinit(pcie); } +static void qcom_pcie_host_post_init(struct dw_pcie_rp *pp) +{ + struct dw_pcie *pci = to_dw_pcie_from_pp(pp); + struct qcom_pcie *pcie = to_qcom_pcie(pci); + + if (pcie->cfg->ops->host_post_init) + pcie->cfg->ops->host_post_init(pcie); +} + static const struct dw_pcie_host_ops qcom_pcie_dw_ops = { .host_init = qcom_pcie_host_init, .host_deinit = qcom_pcie_host_deinit, + .host_post_init = qcom_pcie_host_post_init, }; /* Qcom IP rev.: 2.1.0 Synopsys IP rev.: 4.01a */ @@ -1280,6 +1307,7 @@ static const struct qcom_pcie_ops ops_1_9_0 = { .get_resources = qcom_pcie_get_resources_2_7_0, .init = qcom_pcie_init_2_7_0, .post_init = qcom_pcie_post_init_2_7_0, + .host_post_init = qcom_pcie_host_post_init_2_7_0, .deinit = qcom_pcie_deinit_2_7_0, .ltssm_enable = qcom_pcie_2_3_2_ltssm_enable, .config_sid = qcom_pcie_config_sid_1_9_0, -- 2.25.1