From patchwork Tue Sep 12 09:40:15 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephan Gerhold X-Patchwork-Id: 138377 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:9ecd:0:b0:3f2:4152:657d with SMTP id t13csp611629vqx; Tue, 12 Sep 2023 11:49:22 -0700 (PDT) X-Google-Smtp-Source: AGHT+IF1c/8rLjoHceC5Fsj//fZIKTw9o94XDul49JWntwoZ+EcdAsEY84SCUyYMwRyhLv8/e75a X-Received: by 2002:a05:6a00:1492:b0:68f:caf8:cb83 with SMTP id v18-20020a056a00149200b0068fcaf8cb83mr677713pfu.17.1694544562264; Tue, 12 Sep 2023 11:49:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1694544562; cv=none; d=google.com; s=arc-20160816; b=Hv/QSu1cpE0U6sXKRuVr0yUs882fYJA6lUi6MLDxAEaYr7Gq043kdBJlx2YITMWyJw e+7iz31nW4XiUmMJKlrwmqcPAGSSPO9vY+G1ZF6bNj8ZCQYXPiUkp1ffR44h0CwWXBUQ ZcNdNpYcKq0n9iJFAOYcxIyXxXjXfort3+M0HC9rUP/56CMFZ9oyFKxtTjMuX+LHEq2h /sO8yB3Pn73LBPkQFZMg9jJE0M9NEPeylRj+tDgY+p8hSg/i5VoVHhzy/5RczazzYScS 7NRcxDYYrVrLrbJErn94P6gcf7EI8Yp48L6BS+k6uY6a883emUvRMPYrnYvPpaV30NLK 0Z+A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:in-reply-to:references:message-id :content-transfer-encoding:mime-version:subject:date:from :dkim-signature; bh=atVlEBB4YMZABXH4SWOY4OFQPXFW6vNTHPIocXGctJs=; fh=6dWPOgLc94d6Vbu+0sy5egZNGUkJgOuUvx9BC4aRyvI=; b=Ml+XuFaN5JhQVMDiTlxcsJw9DJD2/t4ag7BLqMDb/eftPM0qmKYqUKqa1mF9Ouo5hm xAmlQbAb9q55pwHwwbKpWRqFm7lRxSNOaUBtT06Ucq04TA2YKJTAhOzCW/e0LtqFH5K7 9Y38CvT/oc9LnWq6BCkegHUbNyO2PdKcjMc7cF9dTE77XfEguEx7krXrnaQkwSiq9Iae hNT/P6N+glqRrN5yJJdozqj6F/VFIUnof85kT2bX2cmcEklfSf1+zE4U36wjAiLtpLTy LROBQ3MXWgk5jRws0CdT0FV1Pfd5OUFbB2ciOzsjEPSGAGCA4+QuSjY5un6mrzYiALyt Rqdw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernkonzept.com header.s=mx1 header.b=GBXLRQKs; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernkonzept.com Received: from agentk.vger.email (agentk.vger.email. [2620:137:e000::3:2]) by mx.google.com with ESMTPS id ay42-20020a056a00302a00b0068a3a2984ccsi3849087pfb.236.2023.09.12.11.49.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Sep 2023 11:49:22 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 as permitted sender) client-ip=2620:137:e000::3:2; Authentication-Results: mx.google.com; dkim=pass header.i=@kernkonzept.com header.s=mx1 header.b=GBXLRQKs; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernkonzept.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by agentk.vger.email (Postfix) with ESMTP id 6AFBA8033DC9; Tue, 12 Sep 2023 03:00:49 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at agentk.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233665AbjILKAb (ORCPT + 37 others); Tue, 12 Sep 2023 06:00:31 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35920 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233538AbjILKAT (ORCPT ); Tue, 12 Sep 2023 06:00:19 -0400 Received: from mx.kernkonzept.com (serv1.kernkonzept.com [IPv6:2a01:4f8:1c1c:b490::2]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 544F61BB; Tue, 12 Sep 2023 03:00:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=kernkonzept.com; s=mx1; h=Cc:To:In-Reply-To:References:Message-Id: Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date:From: Reply-To:Content-ID:Content-Description; bh=atVlEBB4YMZABXH4SWOY4OFQPXFW6vNTHPIocXGctJs=; b=GBXLRQKsy0kqC1hGKFV9w8TpKE KuakT0tdPMcVGhJZO4zcgucH7f9F3mwE6+kWPFGeux2al94LSQ8zCGjY0INTR0UdY6d0ZupJ+cLLD v1l/3Tje+cC8fP5UExUvTERFP26gAbJT5eJ0qeA9ofEVQqU3dSnzGOQsgXp99xU4Q1fuESB/rvOgw DXBvvmdyEmqbTSJ/vl7BDGvQYigxU6JUfMbI0d5/046342b5ataMVmj6AvspYt52mNjK7WTJjCYNZ cGHWD8pz6u44i1uLfqGrlsj6QMBXBnxFRZcF8BfVnxxT1GSfIHcAOJ1wlfNgMIAf11Bmw9btKwm3V ke/pPqcg==; Received: from [10.22.3.24] (helo=serv1.dd1.int.kernkonzept.com) by mx.kernkonzept.com with esmtpsa (TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim 4.96) id 1qfzsl-0030Ws-0N; Tue, 12 Sep 2023 11:40:31 +0200 From: Stephan Gerhold Date: Tue, 12 Sep 2023 11:40:15 +0200 Subject: [PATCH 1/4] cpufreq: qcom-nvmem: Enable virtual power domain devices MIME-Version: 1.0 Message-Id: <20230912-msm8909-cpufreq-v1-1-767ce66b544b@kernkonzept.com> References: <20230912-msm8909-cpufreq-v1-0-767ce66b544b@kernkonzept.com> In-Reply-To: <20230912-msm8909-cpufreq-v1-0-767ce66b544b@kernkonzept.com> To: Viresh Kumar Cc: Andy Gross , Bjorn Andersson , Konrad Dybcio , Ilia Lin , "Rafael J. Wysocki" , Rob Herring , Krzysztof Kozlowski , Conor Dooley , linux-pm@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Ulf Hansson , Stephan Gerhold , stable@vger.kernel.org X-Mailer: b4 0.12.3 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (agentk.vger.email [0.0.0.0]); Tue, 12 Sep 2023 03:00:49 -0700 (PDT) X-Spam-Status: No, score=-0.9 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on agentk.vger.email X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1776858759262337760 X-GMAIL-MSGID: 1776858759262337760 The genpd core ignores performance state votes from devices that are runtime suspended as of commit 5937c3ce2122 ("PM: domains: Drop/restore performance state votes for devices at runtime PM"). However, at the moment nothing ever enables the virtual devices created in qcom-cpufreq-nvmem for the cpufreq power domain scaling, so they are permanently runtime-suspended. Fix this by enabling the devices after attaching them and use dev_pm_syscore_device() to ensure the power domain also stays on when going to suspend. Since it supplies the CPU we can never turn it off from Linux. There are other mechanisms to turn it off when needed, usually in the RPM firmware or the cpuidle path. Without this fix performance states votes are silently ignored, and the CPU/CPR voltage is never adjusted. This has been broken since 5.14 but for some reason no one noticed this on QCS404 so far. Cc: stable@vger.kernel.org Fixes: 1cb8339ca225 ("cpufreq: qcom: Add support for qcs404 on nvmem driver") Signed-off-by: Stephan Gerhold --- drivers/cpufreq/qcom-cpufreq-nvmem.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/drivers/cpufreq/qcom-cpufreq-nvmem.c b/drivers/cpufreq/qcom-cpufreq-nvmem.c index 84d7033e5efe..17d6ab14c909 100644 --- a/drivers/cpufreq/qcom-cpufreq-nvmem.c +++ b/drivers/cpufreq/qcom-cpufreq-nvmem.c @@ -25,6 +25,7 @@ #include #include #include +#include #include #include @@ -280,6 +281,7 @@ static int qcom_cpufreq_probe(struct platform_device *pdev) } for_each_possible_cpu(cpu) { + struct device **virt_devs = NULL; struct dev_pm_opp_config config = { .supported_hw = NULL, }; @@ -300,7 +302,7 @@ static int qcom_cpufreq_probe(struct platform_device *pdev) if (drv->data->genpd_names) { config.genpd_names = drv->data->genpd_names; - config.virt_devs = NULL; + config.virt_devs = &virt_devs; } if (config.supported_hw || config.genpd_names) { @@ -311,6 +313,23 @@ static int qcom_cpufreq_probe(struct platform_device *pdev) goto free_opp; } } + + if (virt_devs) { + const char * const *name = config.genpd_names; + int i; + + for (i = 0; *name; i++, name++) { + ret = pm_runtime_resume_and_get(virt_devs[i]); + if (ret) { + dev_err(cpu_dev, "failed to resume %s: %d\n", + *name, ret); + goto free_opp; + } + + /* Keep CPU power domain always-on */ + dev_pm_syscore_device(virt_devs[i], true); + } + } } cpufreq_dt_pdev = platform_device_register_simple("cpufreq-dt", -1,