Received: by 2002:a05:7412:f690:b0:e2:908c:2ebd with SMTP id ej16csp380555rdb; Thu, 19 Oct 2023 07:13:42 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHXvl7sZETNnX0uVaMrh9jE5ffGihZlA3nPnNu0Mf8dIWIdxJE3HdQz+12TKpK8YKbDdXx3 X-Received: by 2002:a17:90a:c098:b0:27d:2cff:65a1 with SMTP id o24-20020a17090ac09800b0027d2cff65a1mr2187912pjs.29.1697724821953; Thu, 19 Oct 2023 07:13:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1697724821; cv=none; d=google.com; s=arc-20160816; b=pEBaqsq++R6rA+4RbhM908WmGHndv0Bwln01RHwnSoMF6gCB8S4AbmJuUnu1qPuSLJ i2CPIp/vA1vQ79aSTln2Mxgpy8leWVj8ERF82Ruits+ap/tfjoTmA0WJeMpp5UR/+3z/ ErhSrtYukui0O+hRQIt0CCC0QiXQ4B5bukkL/JkwLCivTt87bDtcjkXx/z/BhFsdbC5H VH8TFyX0mkjzB3sQ2RIWK5xlFzSFFgsXEW+R076kXFGYDHTaWY2rpgTjxd7OkInCtlk6 L3v6abEeDeXbD2MRTjliBMCJc1mtgCHRZgx9s23oMaWtsNrZkhDGVWfgUqbIZwAb+HYw hpzg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=CZ1gUWflsYcH8PP7UpBaAv9qlHVSJ/Dr4WGMpYeMC38=; fh=nZJSwUHoZdzAYmX6xtxEnz9HM7cA0QGUBLAyl0AHDA4=; b=hRgTau4Zr+wXkbInhreq9y3uir/4JcsWeElpx8lFAyBxVnexo7pennkzKV+bEz8sD7 C/OG6i4n9JpXWQljaPxsEuld7inXA3RB1fACpxpG9ahimnjRaAIKBX86JmywjqC7T3oC VDZNwf17o/24O+3p1+yujtwNwJJPGBULFgniflmr1/Tx/TQOmJUnDXfXY+kq9RqCpj4R E1Xur+HvOEhvdvGcaCsIdbK1lSZVhxYglBXZK/zTXf3EBFKkuV8+Jwt9tflcSrjkuFAc CkadO4dpko9ONk18RnkjzeRQBtPjCMb2O4forF6CzcbRFCi6bzXiojlKvQwV8SZRbYzb VOXg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=aLkmPGz9; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 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 snail.vger.email (snail.vger.email. [2620:137:e000::3:7]) by mx.google.com with ESMTPS id mi12-20020a17090b4b4c00b0027d18475bd3si2288945pjb.168.2023.10.19.07.13.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 19 Oct 2023 07:13:41 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) client-ip=2620:137:e000::3:7; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=aLkmPGz9; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id A9645822D16E; Thu, 19 Oct 2023 07:13:40 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1345569AbjJSONg (ORCPT + 99 others); Thu, 19 Oct 2023 10:13:36 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45508 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1345616AbjJSONf (ORCPT ); Thu, 19 Oct 2023 10:13:35 -0400 Received: from mail-yb1-xb33.google.com (mail-yb1-xb33.google.com [IPv6:2607:f8b0:4864:20::b33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2F244130 for ; Thu, 19 Oct 2023 07:13:33 -0700 (PDT) Received: by mail-yb1-xb33.google.com with SMTP id 3f1490d57ef6-d9ac31cb051so8745456276.3 for ; Thu, 19 Oct 2023 07:13:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1697724812; x=1698329612; darn=vger.kernel.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=CZ1gUWflsYcH8PP7UpBaAv9qlHVSJ/Dr4WGMpYeMC38=; b=aLkmPGz9sgBNn8lqUAvy1cZXgicYCPPiOzkvpvUraNZxE/kG8kWFT3NpqHCKTuTdKj sq+96OOQbNp6bNtr8+r9H0lG8wU65fX251xfa5ZzHsP46oIr4U7v9us4WzSJPGqBGmNu RE9U1VpuUt6iRUNIyXNmBbulq4hWfMryDeYBZBwW5Ipg116tRB9TiPuXC2EL+ecDZSg4 T3xIrAHAtmrZW0fOj/p04fJpV3WzMZWaMm68NsBHdgwL2WSyZhaspI3/hxcc9NeCoS38 Eqs+sh7dymslX9i9PSCuvJ9+mWS/S78/DunckO/cH5X1CcLdD+QqWancpx1/Q45o29lm wObg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1697724812; x=1698329612; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=CZ1gUWflsYcH8PP7UpBaAv9qlHVSJ/Dr4WGMpYeMC38=; b=hmO3yMdptRawgoPJJTwa8WcZrGJcOWQMJhnL2M7dWfLSZvmgKKwvtz5jgWyk6ghEyh 0vBa4FREe2+eIU6/0R3+jQNsA84t3V4jvA1CAk8Ha6QwrL+zdVmleIV+vzGHGsbG23m1 uGQHvccj3Idu8rB52M6ZlOBGNcywxFEn8aW3zmSeNnJFRuZ8I59AIOtcOo+Q39xv9MMS UQS886gPwzDLR27oVnySTUOBi3svlFTDVrzd7ZFH1jPcoMEu23O9FP2mVK69+Kk1q3bG 5SQs5ddjCLzf9MoL5t0Bl20A2L3MvrpUtarV0Yhk1SzYUlmfUBvgROszpiElfWkVeni7 caSw== X-Gm-Message-State: AOJu0YwVaZ1bZWUsTS3HpxFRMDXnHPjn8R5cCo3jcQ5KQcHe5o/lIdJ/ oRxSwubsUsTPEneE7I3eHFyz5SSMPdKKWwThzHv0CQ== X-Received: by 2002:a5b:404:0:b0:d9c:7d7d:1ac9 with SMTP id m4-20020a5b0404000000b00d9c7d7d1ac9mr2623857ybp.14.1697724812298; Thu, 19 Oct 2023 07:13:32 -0700 (PDT) MIME-Version: 1.0 References: <20231018-msm8909-cpufreq-v2-0-0962df95f654@kernkonzept.com> <20231018-msm8909-cpufreq-v2-2-0962df95f654@kernkonzept.com> In-Reply-To: From: Ulf Hansson Date: Thu, 19 Oct 2023 16:12:56 +0200 Message-ID: Subject: Re: [PATCH v2 2/3] cpufreq: qcom-nvmem: Enable virtual power domain devices To: Stephan Gerhold Cc: Stephan Gerhold , Viresh Kumar , 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, stable@vger.kernel.org Content-Type: text/plain; charset="UTF-8" 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=unavailable 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 X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Thu, 19 Oct 2023 07:13:40 -0700 (PDT) On Thu, 19 Oct 2023 at 15:05, Stephan Gerhold wrote: > > On Thu, Oct 19, 2023 at 01:26:19PM +0200, Ulf Hansson wrote: > > On Thu, 19 Oct 2023 at 12:24, Ulf Hansson wrote: > > > On Wed, 18 Oct 2023 at 10:06, Stephan Gerhold > > > wrote: > > > > > > > > The genpd core caches performance state votes from devices that are > > > > runtime suspended as of commit 3c5a272202c2 ("PM: domains: Improve > > > > runtime PM performance state handling"). They get applied once the > > > > device becomes active again. > > > > > > > > To attach the power domains needed by qcom-cpufreq-nvmem the OPP core > > > > calls genpd_dev_pm_attach_by_id(). This results in "virtual" dummy > > > > devices that use runtime PM only to control the enable and performance > > > > state for the attached power domain. > > > > > > > > However, at the moment nothing ever resumes the virtual devices created > > > > for qcom-cpufreq-nvmem. They remain permanently runtime suspended. This > > > > means that performance state votes made during cpufreq scaling get > > > > always cached and never applied to the hardware. > > > > > > > > Fix this by enabling the devices after attaching them and use > > > > dev_pm_syscore_device() to ensure the power domains also stay 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 (RPMPD) or the cpuidle path (CPR genpd). > > > > > > I believe we discussed using dev_pm_syscore_device() for the previous > > > version. It's not intended to be used for things like the above. > > > > > Sorry, looks like we still had a misunderstanding in the conclusion of > the previous discussion. :') > > > > Moreover, I was under the impression that it wasn't really needed. In > > > fact, I would think that this actually breaks things for system > > > suspend/resume, as in this case the cpr driver's genpd > > > ->power_on|off() callbacks are no longer getting called due this, > > > which means that the cpr state machine isn't going to be restored > > > properly. Or did I get this wrong? > > > > We strictly need the RPMPDs to be always-on, also across system suspend > [1]. The RPM firmware will drop the votes internally as soon as the > CPU(s) have entered deep cpuidle. We can't do this from Linux, because > we need the CPU to continue running until it was shut down cleanly. > > For CPR, we strictly need the backing regulator to be always-on, also > across system suspend. Typically the hardware will turn off the > regulator as soon as the CPU(s) enter deep cpuidle. Similarly, we can't > do this from Linux, because we need the CPU to continue running until it > was shut down cleanly. > > My understanding was that we're going to pause the CPR state machine > using the system suspend/resume callbacks on the driver, instead of > using the genpd->power_on|off() callbacks [2]. I can submit a separate > patch for this. If we are going to do 1) as described below, this looks to me that it's going to be needed. How will otherwise the cpr state machine be saved/restored during system suspend/resume? Note that, beyond 1), the genpd's ->power_on|off() callbacks are no longer going to be called during system suspend/resume. In a way this also means that the cpr genpd provider might as well also have GENPD_FLAG_ALWAYS_ON set for it. > > I didn't prioritize this because QCS404 (as the only current user of > CPR) doesn't have proper deep cpuidle/power management set up yet. It's > not entirely clear to me if there is any advantage (or perhaps even > disadvantage) if we pause the CPR state machine while the shared L2 > cache is still being actively powered by the CPR power rail during > system suspend. I suspect this is a configuration that was never > considered in the hardware design. I see. > > Given the strict requirement for the RPMPDs, I only see two options: > > 1. Have an always-on consumer that prevents the power domains to be > powered off during system suspend. This is what this patch tries to > achieve. > > Or: > > 2. Come up with a way to register the RPMPDs used by the CPU with > GENPD_FLAG_ALWAYS_ON. This would also be doable, but isn't as > straightfoward as "regulator-always-on" in the DT because the rpmpd > DT node represents multiple genpds in a single DT node [3]. Yes, it sounds like it may be easier to do 1). > > What do you think? Do you see some other solution perhaps? I hope we can > clear up the misunderstanding. :-) Yes, thanks! > > [1]: https://lore.kernel.org/linux-arm-msm/ZQGqfMigCFZP_HLA@gerhold.net/ > [2]: https://lore.kernel.org/linux-arm-msm/CAPDyKFoiup8KNv=1LFGKDdDLA1pHsdJUgTTWMdgxnikEmReXzg@mail.gmail.com/ > [3]: https://lore.kernel.org/linux-arm-msm/ZSg-XtwMxg3_fWxc@gerhold.net/ > > > BTW, if you really need something like the above, the proper way to do > > it would instead be to call device_set_awake_path() for the device. > > > > This informs genpd that the device needs to stay powered-on during > > system suspend (assuming that GENPD_FLAG_ACTIVE_WAKEUP has been set > > for it), hence it will keep the corresponding PM domain powered-on > > too. > > > > Thanks, I can try if this works as alternative to the > dev_pm_syscore_device()! Yes, please. We don't want to abuse the dev_pm_syscore_device() thingy. > > I will wait for your thoughts on the above before accidentally going > into the wrong direction again. :-) No worries, we are moving forward. :-) Kind regards Uffe