From patchwork Thu Apr 17 14:24:59 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ulf Hansson X-Patchwork-Id: 14055690 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 8FCA7C369B2 for ; Thu, 17 Apr 2025 14:30:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=kLoMIJgubi/4cvpvs3WmBPRGnJMeyrBZc1JViSgU2O8=; b=vzKfkP5d1g2n/6tNhHP5oAjWfb +8yfNI2pwWL53p08CwiOHK0ig5b35738D3RmxHeCYS1xulDSxJ3CW8wD7iz9Wn0axdyDz/TCtV8Nt yOIQAYquwyB7vcJi0YcqrmIPR1Jn6odWAauogsaKyG3+jDaJZ/p1lAI+bxlZwt1I3J1F2ir1lL4vQ 7CFA7tpJe+fWGXhKZO714xLc/G8kRe+vWcvAAmeW8+EcFyzpVSGnJ4LWjZBX9SE3NEQt0T2GYgs3N sEJevrs8OvskhHwPCs1Q+sl2Su6yj0t9bsBR6yTcMkrjGaGf5Yuqo+6LnMjhLPLiuhTgJ8TW9nq59 dSq6pPSA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1u5QFp-0000000DKBr-0FqK; Thu, 17 Apr 2025 14:30:13 +0000 Received: from mail-lf1-x133.google.com ([2a00:1450:4864:20::133]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1u5QBL-0000000DIdT-0HgE for linux-arm-kernel@lists.infradead.org; Thu, 17 Apr 2025 14:25:36 +0000 Received: by mail-lf1-x133.google.com with SMTP id 2adb3069b0e04-54d65eb26b2so758875e87.2 for ; Thu, 17 Apr 2025 07:25:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1744899933; x=1745504733; darn=lists.infradead.org; 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=kLoMIJgubi/4cvpvs3WmBPRGnJMeyrBZc1JViSgU2O8=; b=cHd1tsPQC59VZMlfJOZkLRrQHRCewdC6X2ZH/7hWhnE2Bk9M9P452oJLZPWVYAjf+s dlI6YIAEGu82o0E8N8olEH8qYR8y7Yfz35CIE9nSH9IO96bEHSNKmYPOPEslivolq7Hk 0a0cjcDA62HDgvaoDLLiJbFDj/daQ+nDX5AU8gxLx/umz+ahK6Rg5YW0TGwR1FOkkJe3 gNA1ioTDPFLJCr6BVwDRgXFkqGTm2rDE9o62OnCkhz2CR7De8zRsSOmCdMEou0oW9UCp tXu3o0tck4e05WOWViKgfODXXnvi82/WvXOqdpLIyNAfSSXILlt1c4PAeEVYqtwJFtnd Eljg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744899933; x=1745504733; 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=kLoMIJgubi/4cvpvs3WmBPRGnJMeyrBZc1JViSgU2O8=; b=aTc2S7gJwvx3cNGqFZUHkGD8XsY5EJRQ8M97w2rNboJ1WZ7ahooxQtJMlVqfwGl3R9 6sKFlwaLlySxpmocweyfoxnkWFqcsJ9nNOlhEQfx0LWcltSjiUeMpgDip0ap1o6d9xYN RxmVHfrUktLwi9TN3NPPBpboRQx2WxTIW1jKnbnVc4LUsa/iOgl1SOWLrTGIcoxCrH+M JO5yepqryfjm5WIDKUIGETe44ZZx+UHdgr/THX0YkCH3EIj0TfURmHtOgZcMQ8pnko95 IaQ+kHff31TIB79M7UeBwALs7ErS4tcQ1LlCPzxl8BbT62wU3kUM9hGIlPdVounFWMGK eeLg== X-Forwarded-Encrypted: i=1; AJvYcCWyK39nsIdjpPiTA82yNQbaoCn5KljjpZhclwRqjQMN1MoAEreAGWbFmBGjE3hjBFIXX1Qu4+eYCjXd9aUcRJPf@lists.infradead.org X-Gm-Message-State: AOJu0YycdJ1NJzbZ3fWTK67B+/k8PI2LvYDC4fO8uDVzlsy3VxqlOQkm JVwAipB6yzinJTJoxVh6LF6SUvl7DIHJ7NEEuzD3k7XiLuH1rCV2NWLYNHhhUMk= X-Gm-Gg: ASbGnctV941rSCjzIGs5fu262lFs2e/Zt7jqoXC+lERm5Mw6Msfs8dwGFUUBPwX3AX5 nAVLvrKA3C+OedcA9owqiw7qdX1qpNDQ6R45Ltxnra2KK0thKjHBSo38/N3F2bwgYxP+/AYByHc rFCZbFQP2Hi3jRxkdwx4Le9We7USvRwkNZ0KPe+/UrB/+rPiT7euXN5PsjlJVg9InAeCJjBLBv9 6EVMkwhqJZJMscp7G86QLX7woBTBblpee531mtSBEV6qhslpMxMpLMj0fqZmCI6wk9rxF5JFtSz m/UkUOTO+MA66dEMMkx2AWy8ybcQx+feqpkpvJqI8XTB6llZIspDumLs9uCjWcWN8j+H4Qt1Sfg vY+NP4EagpTd2ULg= X-Google-Smtp-Source: AGHT+IGEHywzk0Uvrr5vva6qwKhkHAMRzineGZ+Ie2tYZ9oqV2dzLL/IgZ7exOPJtd8mc3KpgoduVg== X-Received: by 2002:a05:6512:3a93:b0:549:8809:ee32 with SMTP id 2adb3069b0e04-54d64a9d570mr2067636e87.22.1744899933071; Thu, 17 Apr 2025 07:25:33 -0700 (PDT) Received: from uffe-tuxpro14.. (h-178-174-189-39.A498.priv.bahnhof.se. [178.174.189.39]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-54d65e43647sm370096e87.58.2025.04.17.07.25.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Apr 2025 07:25:32 -0700 (PDT) From: Ulf Hansson To: Saravana Kannan , Stephen Boyd , linux-pm@vger.kernel.org Cc: "Rafael J . Wysocki" , Greg Kroah-Hartman , Michael Grzeschik , Bjorn Andersson , Abel Vesa , Devarsh Thakkar , Peng Fan , Tomi Valkeinen , Johan Hovold , Maulik Shah , Ulf Hansson , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 01/11] pmdomain: core: Convert genpd_power_off() to void Date: Thu, 17 Apr 2025 16:24:59 +0200 Message-ID: <20250417142513.312939-2-ulf.hansson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250417142513.312939-1-ulf.hansson@linaro.org> References: <20250417142513.312939-1-ulf.hansson@linaro.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250417_072535_107355_958B0BD0 X-CRM114-Status: GOOD ( 17.03 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org At some point it made sense to have genpd_power_off() to return an error code. That hasn't been the case for quite some time, so let's convert it into a static void function and simplify some of the corresponding code. Signed-off-by: Ulf Hansson --- drivers/pmdomain/core.c | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/drivers/pmdomain/core.c b/drivers/pmdomain/core.c index 3523d0331cec..574a0de1696a 100644 --- a/drivers/pmdomain/core.c +++ b/drivers/pmdomain/core.c @@ -908,13 +908,12 @@ static void genpd_queue_power_off_work(struct generic_pm_domain *genpd) * If all of the @genpd's devices have been suspended and all of its subdomains * have been powered down, remove power from @genpd. */ -static int genpd_power_off(struct generic_pm_domain *genpd, bool one_dev_on, - unsigned int depth) +static void genpd_power_off(struct generic_pm_domain *genpd, bool one_dev_on, + unsigned int depth) { struct pm_domain_data *pdd; struct gpd_link *link; unsigned int not_suspended = 0; - int ret; /* * Do not try to power off the domain in the following situations: @@ -922,7 +921,7 @@ static int genpd_power_off(struct generic_pm_domain *genpd, bool one_dev_on, * (2) System suspend is in progress. */ if (!genpd_status_on(genpd) || genpd->prepared_count > 0) - return 0; + return; /* * Abort power off for the PM domain in the following situations: @@ -932,7 +931,7 @@ static int genpd_power_off(struct generic_pm_domain *genpd, bool one_dev_on, if (genpd_is_always_on(genpd) || genpd_is_rpm_always_on(genpd) || atomic_read(&genpd->sd_count) > 0) - return -EBUSY; + return; /* * The children must be in their deepest (powered-off) states to allow @@ -943,7 +942,7 @@ static int genpd_power_off(struct generic_pm_domain *genpd, bool one_dev_on, list_for_each_entry(link, &genpd->parent_links, parent_node) { struct generic_pm_domain *child = link->child; if (child->state_idx < child->state_count - 1) - return -EBUSY; + return; } list_for_each_entry(pdd, &genpd->dev_list, list_node) { @@ -957,15 +956,15 @@ static int genpd_power_off(struct generic_pm_domain *genpd, bool one_dev_on, /* The device may need its PM domain to stay powered on. */ if (to_gpd_data(pdd)->rpm_always_on) - return -EBUSY; + return; } if (not_suspended > 1 || (not_suspended == 1 && !one_dev_on)) - return -EBUSY; + return; if (genpd->gov && genpd->gov->power_down_ok) { if (!genpd->gov->power_down_ok(&genpd->domain)) - return -EAGAIN; + return; } /* Default to shallowest state. */ @@ -974,12 +973,11 @@ static int genpd_power_off(struct generic_pm_domain *genpd, bool one_dev_on, /* Don't power off, if a child domain is waiting to power on. */ if (atomic_read(&genpd->sd_count) > 0) - return -EBUSY; + return; - ret = _genpd_power_off(genpd, true); - if (ret) { + if (_genpd_power_off(genpd, true)) { genpd->states[genpd->state_idx].rejected++; - return ret; + return; } genpd->status = GENPD_STATE_OFF; @@ -992,8 +990,6 @@ static int genpd_power_off(struct generic_pm_domain *genpd, bool one_dev_on, genpd_power_off(link->parent, false, depth + 1); genpd_unlock(link->parent); } - - return 0; } /** From patchwork Thu Apr 17 14:25:00 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ulf Hansson X-Patchwork-Id: 14055691 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 4B92DC369B2 for ; Thu, 17 Apr 2025 14:32:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=VAv5QpD/3W+QIUIAEsxCNkQa5aZqJu5jR8/2XBRcQ9U=; b=NNNl8XxIIgK0boz6Y+K3uupnF1 DtHFc3Y4G3JTNPq+FLFzgf9WYdulR/pRKyn8uX0ygtd/WFbYU/ABmG2wmZvJrbfFTgeN7Gr4hY1rI K56SqT4LF369hyCYLhGntec4kgHoC+6DuVoub6dEwMaiGCqEy/4gKexwg0xHlPSBXVUI3QPTEkgYK +6rtDcxVDEpzr/yZg1i9UHEwwkTUPFhYvPpGp87yxjzDtY+Z+6NYq9cVb1BmvYcjZSqIEh+tKDxVZ hmouuCbGL+zBX4ScfsUto4J1QpSkLOdP7ZimzZd89vwrhpIcyrVabBK+i6HE0A3UnvsWKTfF0c4IG vB5gEguw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1u5QHe-0000000DKa8-3qQB; Thu, 17 Apr 2025 14:32:06 +0000 Received: from mail-lf1-x135.google.com ([2a00:1450:4864:20::135]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1u5QBM-0000000DIdp-1n9m for linux-arm-kernel@lists.infradead.org; Thu, 17 Apr 2025 14:25:37 +0000 Received: by mail-lf1-x135.google.com with SMTP id 2adb3069b0e04-5499d2134e8so1015022e87.0 for ; Thu, 17 Apr 2025 07:25:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1744899934; x=1745504734; darn=lists.infradead.org; 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=VAv5QpD/3W+QIUIAEsxCNkQa5aZqJu5jR8/2XBRcQ9U=; b=LXTb+u2ajyC37xUhWm1iksRJd2oWG1aWHTWr+II807u8O6EauU7AwEXgt+zyzJlP16 c7D+kvNXmZhJuz7p/gnroe3M4CqVyeUllfwZVakHxe/kqEeGBJXfmca34ISm0gDoeYNr heNgeGw7JFfLC+zD73V6/b0j160+0LTAWlwlNJtAWS6H8Gonjl3xJSz6s1EoT/Fh3Ccd CmqCVRsRMtAuJ2SQZXhAZWaMA8xdpNcbjEsQzIpyhltRLIHkFcYmCObkVO9Geg0MYP/E AYJceAi+2f9uQa83iyMX3aDA5vwd5vvCPx92gqrrSab7va2C+s5Of0Sa9eB55zyCA9XE 9DYg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744899934; x=1745504734; 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=VAv5QpD/3W+QIUIAEsxCNkQa5aZqJu5jR8/2XBRcQ9U=; b=M7xkuKQIEVw8pOQpoe5AXj43/IgItynm6FxIQOAZ7t8YqUYXCY8V9Hw28rgFkEibuH 8T1Ax7FZrDM1zERhVd7QhU/yfBh/xyVWZtnrImzJ6v3gqOD3XpDe0eF7HZlnansKAv2K 0fsor+Cmkdvxe8lXvSyjqly030y40Lxu1aOnHLb8hoskYKAQTgAU56K4i1y69r/XaWFA w9tFmWL1PcYjO3j2I65NgMfBzGlgkLgJtt8a7qxehmhErUVZo1vdNVHdmZ/C/tJNSoXS 0kD1jfxs517yFA1nq3J4JFQI60rkaigghzYq8jTnAkKjbstUsxjMnwLXGKlw0DeEQ8C3 h1sg== X-Forwarded-Encrypted: i=1; AJvYcCVBjGzAYXyeOhT+318fIFiypOITnHUhLvJNflEKCEjqAnIH7oydm/lYrkDDOmyMotaqscL9Png2rKy8zCA4uVUr@lists.infradead.org X-Gm-Message-State: AOJu0YzKVnoBPcrsCj+CTJzd1W515aIcosz4Hxp0pFhI7o/tkNGlArIb 4CTPFMgzJ8jeLQoNqDp40AvJES6Vz99AJjbujCZeCPc5SKAYerSftijPYeeVhc0= X-Gm-Gg: ASbGnctEXkL0/gViJqeftdGhM8gve2JIFcgFIh+mT7MlzOOFT1ab0EpHd5xGc3PuyTj Nrq0zUPOHNW+8xzE4vSw8HAoGOW1LwgKjQnfpHSMFRT6CU+8fnrOdq1cgL++QPdKRbdxSAGA4h2 h4H9AIHxKBDMHoX887VkRjomBX9pCTcHXjSB+85IASRy/djaJOCJL1zfgiZtiHUaKYpTQ+WLEj1 ssmV8miHog/4oyOgWvzzjtup58xLNEuNJCsGHL5TNAANZw14YZKQm7m1R+entkPNRBovFABLYZ0 L+JB6vLsBKXPL19dc0EDzbERdahvOAAci0q3YRUvtTx8996okNVtwPBga+JR73FJ6e62RVrICbc 7VOztuSEo6CrfsQY= X-Google-Smtp-Source: AGHT+IEdRb+byxDtsaF938ihBQexYxdm23PnPrnwFBeiHnuU4i+1SkPOaDcL0cyZpoToJUlNYAezMQ== X-Received: by 2002:a05:6512:334c:b0:54d:68b7:86da with SMTP id 2adb3069b0e04-54d68b78b62mr1388539e87.42.1744899934579; Thu, 17 Apr 2025 07:25:34 -0700 (PDT) Received: from uffe-tuxpro14.. (h-178-174-189-39.A498.priv.bahnhof.se. [178.174.189.39]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-54d65e43647sm370096e87.58.2025.04.17.07.25.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Apr 2025 07:25:33 -0700 (PDT) From: Ulf Hansson To: Saravana Kannan , Stephen Boyd , linux-pm@vger.kernel.org Cc: "Rafael J . Wysocki" , Greg Kroah-Hartman , Michael Grzeschik , Bjorn Andersson , Abel Vesa , Devarsh Thakkar , Peng Fan , Tomi Valkeinen , Johan Hovold , Maulik Shah , Ulf Hansson , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 02/11] pmdomain: core: Simplify return statement in genpd_power_off() Date: Thu, 17 Apr 2025 16:25:00 +0200 Message-ID: <20250417142513.312939-3-ulf.hansson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250417142513.312939-1-ulf.hansson@linaro.org> References: <20250417142513.312939-1-ulf.hansson@linaro.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250417_072536_462927_E633732C X-CRM114-Status: GOOD ( 13.23 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Rather than using two if-clauses immediately after each to check for similar reasons to prevent the power-off, let's combine them into one if-clause to simplify the code. Signed-off-by: Ulf Hansson --- drivers/pmdomain/core.c | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/drivers/pmdomain/core.c b/drivers/pmdomain/core.c index 574a0de1696a..34a85bf347ad 100644 --- a/drivers/pmdomain/core.c +++ b/drivers/pmdomain/core.c @@ -917,20 +917,14 @@ static void genpd_power_off(struct generic_pm_domain *genpd, bool one_dev_on, /* * Do not try to power off the domain in the following situations: - * (1) The domain is already in the "power off" state. - * (2) System suspend is in progress. + * The domain is already in the "power off" state. + * System suspend is in progress. + * The domain is configured as always on. + * The domain has a subdomain being powered on. */ - if (!genpd_status_on(genpd) || genpd->prepared_count > 0) - return; - - /* - * Abort power off for the PM domain in the following situations: - * (1) The domain is configured as always on. - * (2) When the domain has a subdomain being powered on. - */ - if (genpd_is_always_on(genpd) || - genpd_is_rpm_always_on(genpd) || - atomic_read(&genpd->sd_count) > 0) + if (!genpd_status_on(genpd) || genpd->prepared_count > 0 || + genpd_is_always_on(genpd) || genpd_is_rpm_always_on(genpd) || + atomic_read(&genpd->sd_count) > 0) return; /* From patchwork Thu Apr 17 14:25:01 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ulf Hansson X-Patchwork-Id: 14055693 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id C9B0AC369B2 for ; Thu, 17 Apr 2025 14:34:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=LWK6OGQUPtJsrWaqiRqfJ/zsH5wseFrp650Wv3Bg60w=; b=vPiP5TidvtacOPXmtpKI6FPSHR rfsisiMJL73kWgJPHrTUXIhR3QI7NTXSxVb1nSGwlMPXHAY7/FaRhzQ1osE0dCHVdBy59K2Wbanvv q+dNt+FLrqWIvDQ6jhVoU2Ws6J3Vw1Tyw2k1Luwpl93enps4LkvR5D9R92zTf4Ionlhmy2cRQXwH3 99TxAep9XtRXTfBfh8FpO2vTPHib0CO8WU8ALlpK4NkenFr0dMX4WuGdFzOQ0sOxJL6jXErLaPIhX F7MlCgnwbR+tng53TEWLRxjtIiAZ3FI7YyuFqBrL6oXDtLoP7f35d7f9vr7oXNuHMz5z8mRGpsJfA dGLvQaFA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1u5QJU-0000000DKsj-2ckR; Thu, 17 Apr 2025 14:34:00 +0000 Received: from mail-lf1-x12d.google.com ([2a00:1450:4864:20::12d]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1u5QBN-0000000DIeL-3W5q for linux-arm-kernel@lists.infradead.org; Thu, 17 Apr 2025 14:25:39 +0000 Received: by mail-lf1-x12d.google.com with SMTP id 2adb3069b0e04-5499c5d9691so1035003e87.2 for ; Thu, 17 Apr 2025 07:25:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1744899936; x=1745504736; darn=lists.infradead.org; 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=LWK6OGQUPtJsrWaqiRqfJ/zsH5wseFrp650Wv3Bg60w=; b=DiNOYqLhaXbc4RwliAQexoyur9W/GyKdeBt8/7affA5dtlZn0A0u5ySNL+EIqsGqhY JvSPrOgWZewsPuqDwPLWR2QZ7h0O9K8uacg+EfB13iQtpBGTYc4rU1jStfW1XpGJQHmI zAltg640B5WPK6lQCxWsxZRaCZy+fNXLBJi3WAvcfLZaQfcHsQaVaRNuR9JZVLMmrvpL P8QFL0PIVkECX6gTX3nn10ZC4Hd991N5phlPCuo5N5SLIlhg8qEqpmZQJmwTzBpDAkny vPCqkdGEVGYSgY8/wyUDV2BjerhDRTBACo+sIRR8V3583iJtXN1ud68IKRs5bnF+cr+n gcwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744899936; x=1745504736; 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=LWK6OGQUPtJsrWaqiRqfJ/zsH5wseFrp650Wv3Bg60w=; b=IHNOAY1cHqFeEmNju9ZjAWkoyYSWDLO275GURHyswx7XlX4welXJxLW1k63LNuBVc1 MDrbRW/mR0YSDXPfV1eWKadV2uVV/Wbl00q6NbvB2UKFOHTd9SWoncPW/8qit7cNaLl3 mws1wdyhNWJ63V91YZVPlRx0dXGUbbU5m/W8mLfjdQXz1KgacJ2dTDbxOEDyhYzKZKrW kIEXphcqfWHbMG/d7LONoYbiVsgaJCMEyOELhwUgtK78xZ/1iZYLdG9OKVkItaVt9wwl awOzZhk62OUt7zbki62ikdFYxFnSBngnZRvW6rbQrSX8M8AMVWoxsLMNA39MNjWNUQH7 qycg== X-Forwarded-Encrypted: i=1; AJvYcCWbKb/WY+MTn/v3USv7ECqmv+1Ml2fSSldH6njjw1Lgxq0zoVM6aTOPhOrSnqD+ntxVz7TZqwf92PTASUq/9Ner@lists.infradead.org X-Gm-Message-State: AOJu0YxjB2eSzdWIqaBtm4gLiB4cMwxr4KBgnWNLLzxT6+oECXd2tLWr xHYm3ToeINPsJnH0tJmZkQBKtIIDPFNSEsmhCE+5ItmgPjs5g9VREh1n/aWBTFo= X-Gm-Gg: ASbGncukWXBHOZiQ1xKYl6oyX63j/IbKc9eM7y966Zf8U4RTDgCzvTfxx7BQrEBTTke jPMyUNdcJ8MEv0g6PLy90AELqAJnCnPOdkw0UUpoGPzVGohBTL80dpLsFO2hXRb7mplu49kYodo lVhaU2DfCEbnj3lvZCP7/uOXa2qzJ6Iu9VctAGnBlwJ6U4WNASJ0DkKuyf2Vvy0kpA33RSKiS+0 OoV6A3pGQiYiaJ5ribl+H+f1k7h4mhk3OYojzn9/lTX9EMQiU6Ea1nS5maXLGMU3JuZSD1Iq/Q4 75f5bnix8EQCx0JotZsqejLjyuNgWN6QkwOqQpzSS1RX1zAqkm14qSPj+vWMOMDS5lhQG417DwG bwxnJdyID97LD3jg= X-Google-Smtp-Source: AGHT+IFMIMS9W78LDELYwj19yc/UbKsawjkHWp2lDcIWNSaSrbDAkmZeYKJckcObhsbeji26HeVx/Q== X-Received: by 2002:a05:6512:33d1:b0:549:91c6:96a8 with SMTP id 2adb3069b0e04-54d64a7b359mr1644875e87.7.1744899935896; Thu, 17 Apr 2025 07:25:35 -0700 (PDT) Received: from uffe-tuxpro14.. (h-178-174-189-39.A498.priv.bahnhof.se. [178.174.189.39]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-54d65e43647sm370096e87.58.2025.04.17.07.25.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Apr 2025 07:25:35 -0700 (PDT) From: Ulf Hansson To: Saravana Kannan , Stephen Boyd , linux-pm@vger.kernel.org Cc: "Rafael J . Wysocki" , Greg Kroah-Hartman , Michael Grzeschik , Bjorn Andersson , Abel Vesa , Devarsh Thakkar , Peng Fan , Tomi Valkeinen , Johan Hovold , Maulik Shah , Ulf Hansson , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 03/11] pmdomain: core: Use genpd->opp_table to simplify error/remove path Date: Thu, 17 Apr 2025 16:25:01 +0200 Message-ID: <20250417142513.312939-4-ulf.hansson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250417142513.312939-1-ulf.hansson@linaro.org> References: <20250417142513.312939-1-ulf.hansson@linaro.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250417_072537_876946_09077FD2 X-CRM114-Status: GOOD ( 12.45 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org While we add an OF-provider we may, based upon a specific condition, also assign genpd->opp_table. Rather using the same specific condition in the error/remove path, let's check genpd->opp_table instead as it makes the code easier. Signed-off-by: Ulf Hansson --- drivers/pmdomain/core.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/drivers/pmdomain/core.c b/drivers/pmdomain/core.c index 34a85bf347ad..035b65563947 100644 --- a/drivers/pmdomain/core.c +++ b/drivers/pmdomain/core.c @@ -2343,6 +2343,7 @@ int pm_genpd_init(struct generic_pm_domain *genpd, genpd->provider = NULL; genpd->device_id = -ENXIO; genpd->has_provider = false; + genpd->opp_table = NULL; genpd->accounting_time = ktime_get_mono_fast_ns(); genpd->domain.ops.runtime_suspend = genpd_runtime_suspend; genpd->domain.ops.runtime_resume = genpd_runtime_resume; @@ -2617,7 +2618,7 @@ int of_genpd_add_provider_simple(struct device_node *np, ret = genpd_add_provider(np, genpd_xlate_simple, genpd); if (ret) { - if (!genpd_is_opp_table_fw(genpd) && genpd->set_performance_state) { + if (genpd->opp_table) { dev_pm_opp_put_opp_table(genpd->opp_table); dev_pm_opp_of_remove_table(&genpd->dev); } @@ -2697,7 +2698,7 @@ int of_genpd_add_provider_onecell(struct device_node *np, genpd->provider = NULL; genpd->has_provider = false; - if (!genpd_is_opp_table_fw(genpd) && genpd->set_performance_state) { + if (genpd->opp_table) { dev_pm_opp_put_opp_table(genpd->opp_table); dev_pm_opp_of_remove_table(&genpd->dev); } @@ -2729,11 +2730,10 @@ void of_genpd_del_provider(struct device_node *np) if (gpd->provider == &np->fwnode) { gpd->has_provider = false; - if (genpd_is_opp_table_fw(gpd) || !gpd->set_performance_state) - continue; - - dev_pm_opp_put_opp_table(gpd->opp_table); - dev_pm_opp_of_remove_table(&gpd->dev); + if (gpd->opp_table) { + dev_pm_opp_put_opp_table(gpd->opp_table); + dev_pm_opp_of_remove_table(&gpd->dev); + } } } From patchwork Thu Apr 17 14:25:02 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ulf Hansson X-Patchwork-Id: 14055694 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 67691C369C2 for ; Thu, 17 Apr 2025 14:37:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=J79qRcZGJZJmCItGNs9XR09SxwFcm6gRBRDcexcVIfk=; b=Tnibfu8ESVefISNXPv8tJoVoEa gKhTLE6GCn4LDWBfjLop2KcpZKGUP+eHlmwOI2ge8REgGHhy4E8OuDgH1Ws+uBcgOXTR5uU8quYtA BrG6ViuxeCLEj2kAjce33GPbwaxz5V40IAzn38hQPomNQ0fkxw0H1oq/1MIc+g5a6fXiwEIchwtCX 9gJDZF0v6M7uddiN2f9pXW9UJPbrU36gARwiYZP6WPTn43kIQobp8k8+PIUViBP9TQNuEM3D7jhwI r7DPqfOI+XovqVnzQgxmmv4CXMA1t59DbnOHRTx1s2MavAf0nnSAn/DsTLdbq2nPMhNjxAx6oergM pfIlP63A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1u5QNA-0000000DLbp-04al; Thu, 17 Apr 2025 14:37:48 +0000 Received: from mail-lf1-x12e.google.com ([2a00:1450:4864:20::12e]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1u5QBP-0000000DIfB-0knF for linux-arm-kernel@lists.infradead.org; Thu, 17 Apr 2025 14:25:40 +0000 Received: by mail-lf1-x12e.google.com with SMTP id 2adb3069b0e04-5499d2134e8so1015078e87.0 for ; Thu, 17 Apr 2025 07:25:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1744899937; x=1745504737; darn=lists.infradead.org; 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=J79qRcZGJZJmCItGNs9XR09SxwFcm6gRBRDcexcVIfk=; b=Wn+L8VNOmzLeJKfa8nWyDTg19uQi7gHAcsmof73aQxRqW+2IuEkf6Slsc1lVqonCyE CyXb2PLHztnkkJLqyrXgzlKwg+wWhXk2et+sWuUFWcY1u1VVuBtuGn5Q4m6HJaI8fYvu HyDWEH9RleoEkVLDofOE+r6ABEZBU2IL5zORH2/Ls4W9ft0YoZIc5IavRE/b1oQUlos5 F3gnYe7zmaajzO21vTnHL6/OFIxgBIc+O7uq0C7iwHYy+d8jNzWiHzRadU0IWjQF7IGW e2Bs3c1Z6ccb/lmiL+vpdsj9Kn2N7UeKC0jcjnjgvBzNaM8ZzRAwQNgzdDZtryVQG6XN coqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744899937; x=1745504737; 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=J79qRcZGJZJmCItGNs9XR09SxwFcm6gRBRDcexcVIfk=; b=qDpJOkF5+jOSp/7DYMaO34c2Xutlj0Bh8+8akSK2Z3D4uOuE8ePCqgO3/5P1Ywvb4U uh36UfNCL6BkKq4N0tBV9SMpX71SmKlBgI+FGePuX1eKjAK2SErt6i2p4rjNvlRQCyW6 +pjkr48nIZ6T5zlY+eCAnC9JkBMgi+qEPQeXhnibaktqjqdqV1RNVxmxIN/TwS6k8PJF L+EbnhyESzmDF82zt6PMF9cbsoNWKD/2/e3HkgCCmRI8miqL8YJoYrh0lUvRZWtWIvI0 Pj3ZYETCgkBICFtZxDTS7N5FbdExW4sUcyZYYvlXAQXhV8F7sjOZj74MyOHcc23d5SHA dMXA== X-Forwarded-Encrypted: i=1; AJvYcCVnl8OHRyxroBJf9o+Q+FJxUfe6leC1DcElfu3N+6uj0qs/JIXszhBwU7HNtxl9vdx1Euf8RIjDVf/CDZv64MPN@lists.infradead.org X-Gm-Message-State: AOJu0Yz18P02Spqan5lOCaLSHhwHi9SA3DHzM6wMR5gvdiGWAozcLOHs chmFLF+Z+pXkS9/z4JVGQk6ReStxMqVuTTAkbDD7HonfLLQI5RO49Fy+E/qEZbo= X-Gm-Gg: ASbGncuxcwL7yfXq/cQE0XUhSg4JjxV0hIIL27dx3epZaCALL0h0TxXu6bkh8XhSA0c /vZBCyHOekJTJjqxeaWIiLV9j4bOUV/+/4I+EL5mEeKyNVzPUsa6Hw4VUKSrN9poKw3wfo7ACkK KsSfHiR98yVUqgEDEpFQ8p3B8VMswYvOzNh+Da22sjQxsRr/A2Dj2G77/TxwFWsoFGrZNe9dtA5 NlPk40cHXmVchYndXmGdYlBzaZdJA9lv8Zm48Y/JjHHJsQpZzc6V17cPyvq6XoXNKsmtwQ+JTxZ 50Gir12Y2iJX2jniFbdk+tZFQp7hc8u6QekabPURAKsHt9RCgB66pb4IVRp0jerpK595Nz/Nw4H +1TFFwywoDMJpMTaVKNMfQUWZuQ== X-Google-Smtp-Source: AGHT+IFiUhuBtQQApad2nNH4tL0zFojb+VPiB8t6cSOcnI01Uz7KMV7xXLgUmCgNPnGefcFd0iptEA== X-Received: by 2002:ac2:4e0b:0:b0:54a:cc11:b558 with SMTP id 2adb3069b0e04-54d64ab204amr1985603e87.33.1744899937335; Thu, 17 Apr 2025 07:25:37 -0700 (PDT) Received: from uffe-tuxpro14.. (h-178-174-189-39.A498.priv.bahnhof.se. [178.174.189.39]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-54d65e43647sm370096e87.58.2025.04.17.07.25.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Apr 2025 07:25:36 -0700 (PDT) From: Ulf Hansson To: Saravana Kannan , Stephen Boyd , linux-pm@vger.kernel.org Cc: "Rafael J . Wysocki" , Greg Kroah-Hartman , Michael Grzeschik , Bjorn Andersson , Abel Vesa , Devarsh Thakkar , Peng Fan , Tomi Valkeinen , Johan Hovold , Maulik Shah , Ulf Hansson , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 04/11] pmdomain: core: Add a bus and a driver for genpd providers Date: Thu, 17 Apr 2025 16:25:02 +0200 Message-ID: <20250417142513.312939-5-ulf.hansson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250417142513.312939-1-ulf.hansson@linaro.org> References: <20250417142513.312939-1-ulf.hansson@linaro.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250417_072539_216631_12403C9C X-CRM114-Status: GOOD ( 19.40 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org When we create a genpd via pm_genpd_init() we are initializing a corresponding struct device for it, but we don't add the device to any bus_type. It has not really been needed as the device is used as cookie to help us manage OPP tables. However, to prepare to make better use of the device let's add a new genpd provider bus_type and a corresponding genpd provider driver. Subsequent changes will make use of this. Signed-off-by: Ulf Hansson --- drivers/pmdomain/core.c | 89 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 88 insertions(+), 1 deletion(-) diff --git a/drivers/pmdomain/core.c b/drivers/pmdomain/core.c index 035b65563947..da51a61a974c 100644 --- a/drivers/pmdomain/core.c +++ b/drivers/pmdomain/core.c @@ -27,6 +27,11 @@ /* Provides a unique ID for each genpd device */ static DEFINE_IDA(genpd_ida); +/* The parent for genpd_provider devices. */ +static struct device genpd_provider_bus = { + .init_name = "genpd_provider", +}; + #define GENPD_RETRY_MAX_MS 250 /* Approximate */ #define GENPD_DEV_CALLBACK(genpd, type, callback, dev) \ @@ -44,6 +49,14 @@ static DEFINE_IDA(genpd_ida); static LIST_HEAD(gpd_list); static DEFINE_MUTEX(gpd_list_lock); +#define to_genpd_provider_drv(d) container_of(d, struct genpd_provider_drv, drv) + +struct genpd_provider_drv { + struct device_driver drv; + int (*probe)(struct device *dev); + void (*remove)(struct device *dev); +}; + struct genpd_lock_ops { void (*lock)(struct generic_pm_domain *genpd); void (*lock_nested)(struct generic_pm_domain *genpd, int depth); @@ -2225,6 +2238,26 @@ static int genpd_set_default_power_state(struct generic_pm_domain *genpd) return 0; } +static int genpd_provider_bus_probe(struct device *dev) +{ + struct genpd_provider_drv *drv = to_genpd_provider_drv(dev->driver); + + return drv->probe(dev); +} + +static void genpd_provider_bus_remove(struct device *dev) +{ + struct genpd_provider_drv *drv = to_genpd_provider_drv(dev->driver); + + drv->remove(dev); +} + +static const struct bus_type genpd_provider_bus_type = { + .name = "genpd_provider", + .probe = genpd_provider_bus_probe, + .remove = genpd_provider_bus_remove, +}; + static void genpd_provider_release(struct device *dev) { /* nothing to be done here */ @@ -2262,6 +2295,8 @@ static int genpd_alloc_data(struct generic_pm_domain *genpd) genpd->gd = gd; device_initialize(&genpd->dev); genpd->dev.release = genpd_provider_release; + genpd->dev.bus = &genpd_provider_bus_type; + genpd->dev.parent = &genpd_provider_bus; if (!genpd_is_dev_name_fw(genpd)) { dev_set_name(&genpd->dev, "%s", genpd->name); @@ -3355,9 +3390,61 @@ int of_genpd_parse_idle_states(struct device_node *dn, } EXPORT_SYMBOL_GPL(of_genpd_parse_idle_states); +static int genpd_provider_probe(struct device *dev) +{ + return 0; +} + +static void genpd_provider_remove(struct device *dev) +{ +} + +static void genpd_provider_sync_state(struct device *dev) +{ +} + +static struct genpd_provider_drv genpd_provider_drv = { + .drv = { + .name = "genpd_provider", + .bus = &genpd_provider_bus_type, + .sync_state = genpd_provider_sync_state, + .suppress_bind_attrs = true, + }, + .probe = genpd_provider_probe, + .remove = genpd_provider_remove, +}; + static int __init genpd_bus_init(void) { - return bus_register(&genpd_bus_type); + int ret; + + ret = device_register(&genpd_provider_bus); + if (ret) { + put_device(&genpd_provider_bus); + return ret; + } + + ret = bus_register(&genpd_provider_bus_type); + if (ret) + goto err_dev; + + ret = bus_register(&genpd_bus_type); + if (ret) + goto err_prov_bus; + + ret = driver_register(&genpd_provider_drv.drv); + if (ret) + goto err_bus; + + return 0; + +err_bus: + bus_unregister(&genpd_bus_type); +err_prov_bus: + bus_unregister(&genpd_provider_bus_type); +err_dev: + device_unregister(&genpd_provider_bus); + return ret; } core_initcall(genpd_bus_init); From patchwork Thu Apr 17 14:25:03 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ulf Hansson X-Patchwork-Id: 14055702 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id C742DC369B2 for ; Thu, 17 Apr 2025 14:39:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=BsxBU0bGS5KqHJ803b5B2Fj0PSRviE9NZjBErJhiWF0=; b=YQDhMopktKP7nxa+Mapo3WHwbC oKp2iAFV7jEACqU3/hELhoJlxQIRq0VtfMbQ9gbYNxSXPUqPDVfzhxbNF6rCrAwlUJa2lG9NusG0r FdUgJmGPQBwd3A+KpVGZN0+32+oJ4D6Enq9fvjvZre46WkT38f8nRuWQf4zOJvjwOv2wUJaBwXmuu dHV0MTPq1Pr3ytk1strh+iV1xDLDvQqr4E7UsSIqHWA9/Tpl1cE4GV4ApdbnLW2+a7w7i5dvZDzH3 VlNKqkyHNTKdBrT9FJKYT6YiSZEQ1scNJS4squPN2v7x1DAOZZtEfVG/ibf6I2x/22fZuIk7BrriS NIE2jiiA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1u5QOz-0000000DLyv-3TRr; Thu, 17 Apr 2025 14:39:41 +0000 Received: from mail-lj1-x235.google.com ([2a00:1450:4864:20::235]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1u5QBS-0000000DIgp-0OME for linux-arm-kernel@lists.infradead.org; Thu, 17 Apr 2025 14:25:43 +0000 Received: by mail-lj1-x235.google.com with SMTP id 38308e7fff4ca-30bfed67e08so8823361fa.2 for ; Thu, 17 Apr 2025 07:25:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1744899940; x=1745504740; darn=lists.infradead.org; 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=BsxBU0bGS5KqHJ803b5B2Fj0PSRviE9NZjBErJhiWF0=; b=HUfImGXvkjl+x3up6yFo5ZE3UPKCsFXICY/POdpA3hOxJ5YvpsQWR10QFqovlvGhd/ UhHLvDnqf4qnJEFL8sg+mHVgJSI/jzVDHmzUuazv/s3Uhdy6CX/DwLPOVZ/Vs/Ehu0Dh +n06o4zapaUUziEWu8O0ggiALAPhoqQo3TnUpV20ykvgx26YD3beK1rQTb+KJsNKgLeP S4DYns8q8lIM3bcQJ/kze5FQNXUvdvIk/OXlOv7323e8xi5itBiaYpwHhb8olk9F2WCT fy/F9WdzWIZ+gT4EdXlb061olQa5EqZv1TMvaAytbS3oX0dlCJ2BTW4IRFl6KKazD+Gj BDBw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744899940; x=1745504740; 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=BsxBU0bGS5KqHJ803b5B2Fj0PSRviE9NZjBErJhiWF0=; b=YwLBBRqJZ+kZ0jXtpkx5iU7xWqP18zqxtovESAgCNFnXSYnX6jjUOvVjMnfL2zpmzZ Y6hN5kxvWNHZ6R4AiFPG+YOwtiHuDDXpnoiw66g4xTjLqJ3EhSQVuPrya44jhkYltpJs CdKt57u8amrcRsuCwu22pCbOQSIqIUQ0dhxAN6CfDcoqBmin5Wffq+ou2By8fZw5AFeS AeYfzZjr2otjBbspGtVtM7m8Zq41nWQsukmyHgRVyWcdteD6nJq+nKh7yUJqAQBcfbEh k6ugYMgU/qf3rf0utH1zXbUwvwLyjlmKIu9QWqq/fxeAtrKnIS+RvjAkqPEaeRkYSnL0 j9aQ== X-Forwarded-Encrypted: i=1; AJvYcCXOTZUw/01sPHf/MInSc7gYruWBx7fMftR2bjaPCBGYN0hOgX4N2A75UnnnJh3/QRX8u96kWAzxN7cYc999nYXU@lists.infradead.org X-Gm-Message-State: AOJu0YycEbD9xxZsco8gO3+BRbwB3z+K+QUDS4VsupGzyE2P9VmpWLkM wlNmaVynrQuq5kSGGYrvEOGr23tT38ht0HvpetYg9SI5hEl5FvwIeqcULjBwkNFPlcBxe6n60ys Y X-Gm-Gg: ASbGncv1pLzGHBErqS4PSFpukMyG28vVtSrF+SXWWeZ459/XMfkSX6/pmL4U9hkRrsn EZnTKnduTpKNZAjwi7IMlCrRWiGcCVsGZqGkCAiJFQPw+197d/bjWtqFVLmQjS5DGHbZsrKMfm/ 1tSE3b7m0eRSfA6h0dvubsSMMGEArMldYKSBqFVK3eAqk/LTfH20M7ZGrHOOK2WiK8G4rUAyhdS SMrpQUad5Kr+L/QycdFZ8wiLPpOrWHOtv4L7OEugy8e7xLOpCkxaRyZwJSEpa5HhGV8ZJeL7srH LMhTKq2QIsIyq4hF/z5yQs6nxDpUod4j7Hv3BYQK9vVE8korwdY892y473jHsNA7M2ANIzRho23 ODr+802uiAIsVJ1w= X-Google-Smtp-Source: AGHT+IEWl4UhmNQk6NGrzL0Iqf0HFQV64z24gz6YKYgW7OTjKrIcQquUG8drUV+xQ2lv6sucMcxvpQ== X-Received: by 2002:a05:6512:304a:b0:549:8c86:9bf6 with SMTP id 2adb3069b0e04-54d64ae80e7mr2023094e87.39.1744899940189; Thu, 17 Apr 2025 07:25:40 -0700 (PDT) Received: from uffe-tuxpro14.. (h-178-174-189-39.A498.priv.bahnhof.se. [178.174.189.39]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-54d65e43647sm370096e87.58.2025.04.17.07.25.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Apr 2025 07:25:38 -0700 (PDT) From: Ulf Hansson To: Saravana Kannan , Stephen Boyd , linux-pm@vger.kernel.org Cc: "Rafael J . Wysocki" , Greg Kroah-Hartman , Michael Grzeschik , Bjorn Andersson , Abel Vesa , Devarsh Thakkar , Peng Fan , Tomi Valkeinen , Johan Hovold , Maulik Shah , Ulf Hansson , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 05/11] pmdomain: core: Use device_set_node() to assign the fwnode too Date: Thu, 17 Apr 2025 16:25:03 +0200 Message-ID: <20250417142513.312939-6-ulf.hansson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250417142513.312939-1-ulf.hansson@linaro.org> References: <20250417142513.312939-1-ulf.hansson@linaro.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250417_072542_130699_41DA2039 X-CRM114-Status: GOOD ( 14.38 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Rather than just assigning the dev->of_node for the genpd's device, let's use device_set_node() to make sure the fwnode gets assigned too. This is needed to allow fw_devlink to work correctly, for example. Signed-off-by: Ulf Hansson --- drivers/pmdomain/core.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/drivers/pmdomain/core.c b/drivers/pmdomain/core.c index da51a61a974c..3911d3e96626 100644 --- a/drivers/pmdomain/core.c +++ b/drivers/pmdomain/core.c @@ -2627,6 +2627,7 @@ static bool genpd_present(const struct generic_pm_domain *genpd) int of_genpd_add_provider_simple(struct device_node *np, struct generic_pm_domain *genpd) { + struct fwnode_handle *fwnode; int ret; if (!np || !genpd) @@ -2635,7 +2636,9 @@ int of_genpd_add_provider_simple(struct device_node *np, if (!genpd_present(genpd)) return -EINVAL; - genpd->dev.of_node = np; + fwnode = &np->fwnode; + + device_set_node(&genpd->dev, fwnode); /* Parse genpd OPP table */ if (!genpd_is_opp_table_fw(genpd) && genpd->set_performance_state) { @@ -2661,7 +2664,7 @@ int of_genpd_add_provider_simple(struct device_node *np, return ret; } - genpd->provider = &np->fwnode; + genpd->provider = fwnode; genpd->has_provider = true; return 0; @@ -2677,6 +2680,7 @@ int of_genpd_add_provider_onecell(struct device_node *np, struct genpd_onecell_data *data) { struct generic_pm_domain *genpd; + struct fwnode_handle *fwnode; unsigned int i; int ret = -EINVAL; @@ -2686,6 +2690,8 @@ int of_genpd_add_provider_onecell(struct device_node *np, if (!data->xlate) data->xlate = genpd_xlate_onecell; + fwnode = &np->fwnode; + for (i = 0; i < data->num_domains; i++) { genpd = data->domains[i]; @@ -2694,7 +2700,7 @@ int of_genpd_add_provider_onecell(struct device_node *np, if (!genpd_present(genpd)) goto error; - genpd->dev.of_node = np; + device_set_node(&genpd->dev, fwnode); /* Parse genpd OPP table */ if (!genpd_is_opp_table_fw(genpd) && genpd->set_performance_state) { @@ -2713,7 +2719,7 @@ int of_genpd_add_provider_onecell(struct device_node *np, WARN_ON(IS_ERR(genpd->opp_table)); } - genpd->provider = &np->fwnode; + genpd->provider = fwnode; genpd->has_provider = true; } From patchwork Thu Apr 17 14:25:04 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ulf Hansson X-Patchwork-Id: 14055703 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 8D1C6C369B2 for ; Thu, 17 Apr 2025 14:41:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=IhCzeeuIRn9U4lLFeFB39wEFdroIdbbgBLNLNN654Y4=; b=O5GSjxPN7KMtFOYBCau+Le6w48 VCngmzjuP3pkPpP5jImWWn2TXHUGMYVQ1luNoank4TW82V64RQrd+NzesLZ6PMZc94WndHatLAJy2 B915H0LVSnDhCDSdB7wTLB7qgszur7pfixDoI4M0yzaDpXSE0vzDdeou7mx9Ak35vtW64DGtHbNRZ 6NDEwJL30OBRaMZPFGgN8H0Y6GOGPMqLA95954rV3EKapWXXbmqnVhoYaSFCstk7A3VDHQfVrodnd TSDUjSnwFIO3lNNaPKopgzQ6Ri1O0lRhT0a28XZAcf28DJ44hQkOJrYKdDNcfiX41zvAKV3ghNBMR kLovkAIQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1u5QQq-0000000DMJv-2LhH; Thu, 17 Apr 2025 14:41:36 +0000 Received: from mail-lf1-x12e.google.com ([2a00:1450:4864:20::12e]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1u5QBT-0000000DIhY-31P1 for linux-arm-kernel@lists.infradead.org; Thu, 17 Apr 2025 14:25:44 +0000 Received: by mail-lf1-x12e.google.com with SMTP id 2adb3069b0e04-54954fa61c9so1118897e87.1 for ; Thu, 17 Apr 2025 07:25:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1744899942; x=1745504742; darn=lists.infradead.org; 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=IhCzeeuIRn9U4lLFeFB39wEFdroIdbbgBLNLNN654Y4=; b=t3xzIMNTx2qY+SvQQT8vRGR796k7sAUUW1/ciENOA6as0GbMBCA1ZxMF9rI2qjVAJJ mwUmkFeBln9480CbLTGI6j8TwYsnjDgmiXOVUk/n2spM8GqPc6wXybQtfwIb1ykJ1SZm nMFQORTTaHzvkcr43EDdDZEJmOcgKWqxgSjtiUlJ46JPHaCUa8MBolgXjr5g2neVLSSW vKBtakcFfzupl552rjWacpS8bbL2C847Q2yVYH9rmbEX4gHFxr1VHCVt1rVXn54tO4VQ mlkSv3Ko8RcO/l3BZVwUbLS3/7zli1/o3bpjySAj5rMfOG1SyI8YZssJRg02qvSdmK0d P8xA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744899942; x=1745504742; 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=IhCzeeuIRn9U4lLFeFB39wEFdroIdbbgBLNLNN654Y4=; b=Pr8xLeTFzl4jCwfCtY0zQi9pqfwhnMgqQ0q6jfP98eMX7mmi7+yl5rCdgw8TmVcbtc IpOTbugOwFTilDdl4p2tlxfHVPP2ibw8INg023sjEmzIhzp6Cs36atzkw33BWcbyEsy9 +FV6SUWRacYrP+x9HM6kNu7W1FMGKt1sBLnruTJpanURaJN7GrG+IVXHwPJG4xAuPy3k Ngc08xaBpr7bnbO8aoHmxkhtkF1RpXwgHvTA2B/nI9MJDcCmp/g8mVjPcwlXoAbwNmmN Bop4Of2kCuTv4Wd/uXpm/Cv/MVtv+6v4FuvxNyHKR6T73d6YQWOA+oyZGWH5WtWBlPP2 FIDQ== X-Forwarded-Encrypted: i=1; AJvYcCUAQcrwG7ehDreJtWST06t0fNKqDJmdwdNZBsy7id5xLQu8IM7DVPbWJICrsirH0MoDKIIJkpHoR+yxKxfirF3Z@lists.infradead.org X-Gm-Message-State: AOJu0YwGKSuOTFSyh+TMaEqJt2FvNOPUtQiOtJAIThFe/BF7KjivNv2L KYahx414SclT7XDjen3G4nv6qaIJjmsTR8JvoDT+HD14AkNoCZsqw2+QKbmrAUo= X-Gm-Gg: ASbGncsiLgd9MLdhHxaPoMBqXaV9rb++YBvBvel+6wPGYC/QXoMvr/aKxG9cdLeFzhz sey5vydYZNZpN9v4Vlba1Qb0cgS/qeWMyCAerV34TL7xtgMuAA3g9nW/gQ4RSmQFCX9R3kG6tgx upEKD+rnTXY0awVgIkdvW0zUAW2ylDa3UIC2JO7cDZHldvAbHA5glo7lfZ4sE3X43mVhomNFl19 71PPeImQaKC2h4A8XR2WmFC4FoLxCMv4/R62wIFK7ljEAyRUkJ4MhuFEu1BBkkufrjt1aOnuPFU 508bgXl9d5Ucly/6sG7rUzdO1KVlQQwxz87SZk484io35xfMSHaZ1DLRTCiGYJ87xjsx6a9qnAf bl/PNOTuULRrjpx4= X-Google-Smtp-Source: AGHT+IEKg2sAljzc60RG1x7zQS31Y71/y6HRPvtwzajn+isSwZjg667wjhQKlzCNX2y4YKOKam9UjA== X-Received: by 2002:a05:6512:10d5:b0:549:8675:c388 with SMTP id 2adb3069b0e04-54d64af3fbbmr2088472e87.52.1744899942203; Thu, 17 Apr 2025 07:25:42 -0700 (PDT) Received: from uffe-tuxpro14.. (h-178-174-189-39.A498.priv.bahnhof.se. [178.174.189.39]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-54d65e43647sm370096e87.58.2025.04.17.07.25.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Apr 2025 07:25:41 -0700 (PDT) From: Ulf Hansson To: Saravana Kannan , Stephen Boyd , linux-pm@vger.kernel.org Cc: "Rafael J . Wysocki" , Greg Kroah-Hartman , Michael Grzeschik , Bjorn Andersson , Abel Vesa , Devarsh Thakkar , Peng Fan , Tomi Valkeinen , Johan Hovold , Maulik Shah , Ulf Hansson , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 06/11] pmdomain: core: Add the genpd->dev to the genpd provider bus Date: Thu, 17 Apr 2025 16:25:04 +0200 Message-ID: <20250417142513.312939-7-ulf.hansson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250417142513.312939-1-ulf.hansson@linaro.org> References: <20250417142513.312939-1-ulf.hansson@linaro.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250417_072543_764680_9348B88D X-CRM114-Status: GOOD ( 14.52 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org To take the next step for a more common handling of the genpd providers, let's add the genpd->dev to the genpd provider bus when registering a genpd OF provider. Beyond this, the corresponding genpd provider driver's ->probe(), ->remove() and ->sync_state() callbacks starts to be invoked. However, let's leave those callbacks as empty functions for now. Instead, subsequent changes will implement them. Signed-off-by: Ulf Hansson --- drivers/pmdomain/core.c | 38 ++++++++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/drivers/pmdomain/core.c b/drivers/pmdomain/core.c index 3911d3e96626..5aba66ac78f1 100644 --- a/drivers/pmdomain/core.c +++ b/drivers/pmdomain/core.c @@ -2640,11 +2640,17 @@ int of_genpd_add_provider_simple(struct device_node *np, device_set_node(&genpd->dev, fwnode); + ret = device_add(&genpd->dev); + if (ret) + return ret; + /* Parse genpd OPP table */ if (!genpd_is_opp_table_fw(genpd) && genpd->set_performance_state) { ret = dev_pm_opp_of_add_table(&genpd->dev); - if (ret) - return dev_err_probe(&genpd->dev, ret, "Failed to add OPP table\n"); + if (ret) { + dev_err_probe(&genpd->dev, ret, "Failed to add OPP table\n"); + goto err_del; + } /* * Save table for faster processing while setting performance @@ -2655,19 +2661,22 @@ int of_genpd_add_provider_simple(struct device_node *np, } ret = genpd_add_provider(np, genpd_xlate_simple, genpd); - if (ret) { - if (genpd->opp_table) { - dev_pm_opp_put_opp_table(genpd->opp_table); - dev_pm_opp_of_remove_table(&genpd->dev); - } - - return ret; - } + if (ret) + goto err_opp; genpd->provider = fwnode; genpd->has_provider = true; return 0; + +err_opp: + if (genpd->opp_table) { + dev_pm_opp_put_opp_table(genpd->opp_table); + dev_pm_opp_of_remove_table(&genpd->dev); + } +err_del: + device_del(&genpd->dev); + return ret; } EXPORT_SYMBOL_GPL(of_genpd_add_provider_simple); @@ -2702,12 +2711,17 @@ int of_genpd_add_provider_onecell(struct device_node *np, device_set_node(&genpd->dev, fwnode); + ret = device_add(&genpd->dev); + if (ret) + goto error; + /* Parse genpd OPP table */ if (!genpd_is_opp_table_fw(genpd) && genpd->set_performance_state) { ret = dev_pm_opp_of_add_table_indexed(&genpd->dev, i); if (ret) { dev_err_probe(&genpd->dev, ret, "Failed to add OPP table for index %d\n", i); + device_del(&genpd->dev); goto error; } @@ -2743,6 +2757,8 @@ int of_genpd_add_provider_onecell(struct device_node *np, dev_pm_opp_put_opp_table(genpd->opp_table); dev_pm_opp_of_remove_table(&genpd->dev); } + + device_del(&genpd->dev); } return ret; @@ -2775,6 +2791,8 @@ void of_genpd_del_provider(struct device_node *np) dev_pm_opp_put_opp_table(gpd->opp_table); dev_pm_opp_of_remove_table(&gpd->dev); } + + device_del(&gpd->dev); } } From patchwork Thu Apr 17 14:25:05 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ulf Hansson X-Patchwork-Id: 14055712 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 801AAC369C2 for ; Thu, 17 Apr 2025 14:43:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=zs1DiDLKgL3lDGnxl5GpSbOlFK1Fei/oMNx+3W/PVKs=; b=tJ9ALdzeuH8Rw8MIIcjE0mRFoD 3iMhjMYcPqfvuE27qI6wzDYUysgBU37F1AaYUNXnGvlGMe1mjLTnwgFOloM/JEEt48BXEwiqQle26 5bPL3EE1GXmgMTxTiNpymVC+fRQmp+rN6Ir1qwWx1sw1P972BDjmDsW2fDzMQZ2Scnij/a8Tx0tW5 dk8ZYplgoaafW3IAJQCDJwqN8NW2EvFkV0fgJoHa9jGE6w98T55LZlQFdaAcfpFUwKUbmvXyTpbL3 DUUG6MTuLQ00pLcu9FuDB2i2YF2HyIZumZluY69PX4ftJE3Zh9tOGOyzKRgdcftpEzP38EA85I/jT s6eA7jVg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1u5QSf-0000000DMgn-1MOu; Thu, 17 Apr 2025 14:43:29 +0000 Received: from mail-lf1-x12e.google.com ([2a00:1450:4864:20::12e]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1u5QBU-0000000DIjE-43Z1 for linux-arm-kernel@lists.infradead.org; Thu, 17 Apr 2025 14:25:46 +0000 Received: by mail-lf1-x12e.google.com with SMTP id 2adb3069b0e04-54b09cb06b0so1013771e87.1 for ; Thu, 17 Apr 2025 07:25:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1744899943; x=1745504743; darn=lists.infradead.org; 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=zs1DiDLKgL3lDGnxl5GpSbOlFK1Fei/oMNx+3W/PVKs=; b=HdPNjphnUtnwYnoPngk0bY2TZdw6W0kx/kBq86QYAk8eg1xNN/p7CTy5u+qdDatW5y tVreuKTyHdwu4dftz1EPSNk/QSHFNdxbA9nOCfYOmeG6Y6dQsYTT19BS/4ObSDFkXhTu C+lyVmYYCNQVPInlfr7e61xBcSVce1+xXUGc+3cdcf3ApoSrKJ4IB0IJD92G0sCNOo7A 4xy7jKUPCHo2kXTmO2Jfrxiz38rbx06i/qDiJni99j8vw08SEPp0tTB2D3CzONWYt/8+ /UhRHVQQjbtwr4PFp00K05P4m3LF5oxerovvv+u4qstG7NZMjbREthUoYn5jW2AMVfJO 3aiQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744899943; x=1745504743; 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=zs1DiDLKgL3lDGnxl5GpSbOlFK1Fei/oMNx+3W/PVKs=; b=RFcRpaH2g9y2eV5rumK6dnypmj1GQU6PcLlnZ1xMAuRdp0Vbq2pCVjB+jpstM9z9pF Mu/ycmomJbM+yHlaHxlDvhYbEnMjDiJkFPA0OnE6ASaxq0SNyD7xU/ns+VBVMMjzo1cc 0FerwDqTK+z3luz6hLhB2SjD8snv/PlhpCy6QD0tOr8zkCHfpknBSlbvmyZeViNCb9ij KKFnY4tm8hkktjqZh/15NqP8QWVWMRL/DDMpI0DsIr8ngfuW4L0zu9iESHMEbwQvj07l vw/Jz4O//4/BiVIWKR8i4Tq+Lw14xQwc5j3LJ5fZBtNoOoHrhRzEFNErZ9NmxvqNVWJW 5ckQ== X-Forwarded-Encrypted: i=1; AJvYcCXVQCiieDv9N1khg9azOL2mrYbLxqrUjWsvlIvOIkrfjFMIcQ7aUaTGAm/Y+KMCcRZMb1d5UJf3v5tmW6irXOZb@lists.infradead.org X-Gm-Message-State: AOJu0YwWnpHVFdfqgH6GbG+41P1eScux6sPxaQhq+Ykccwl9mWP5Nupi FysDJ/7qyQlcNBUJDNhawPDjLExTmjGOipM6e1mkLtez4uxy8AQ172Sy25WWqFg415trp7tWUtX 2 X-Gm-Gg: ASbGncsC0n1A+7R1eAwWbdukVTwAO1kPtJUaw397sWyM265nmUgDf58+q0dDVA8stNn CE2wBfP1uCktoPLLf5+MI0qK0aoDIUT/SyefYx7z7K3VNbfilZTF51bsQXgxJERI1QGVuK/yqxs rpoCLQ3VfUm52TBVrVDlc9w+NDDGA8eex8CEZV0aJ/0qGfiWbuwknRW+VYVF5lAyDS0ksHQm5Vk XIuwQgxExG28DPhmRAjcQECiNOu9n5BcTcvzt9P0zLR85S+5Qj0jMZJuPeVjtdhkGBCdgxpcRZl V9IladwQqKXq06z7onXb8Asz3UbGsz5yoFcc3/UsSuDzDSmIY6yijsObGLIdqNfwzDL65yaHLJZ +WRtZcjYnGUakSlU= X-Google-Smtp-Source: AGHT+IFUfAkPBWbRU7FiTAZgfCwrsStrMYMu+aAN9vO0F45zoHnvuEwiowloBQTqx+0Po2lAcPUf0g== X-Received: by 2002:a05:6512:3d0d:b0:549:39b1:65c2 with SMTP id 2adb3069b0e04-54d64af049dmr2076429e87.48.1744899943408; Thu, 17 Apr 2025 07:25:43 -0700 (PDT) Received: from uffe-tuxpro14.. (h-178-174-189-39.A498.priv.bahnhof.se. [178.174.189.39]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-54d65e43647sm370096e87.58.2025.04.17.07.25.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Apr 2025 07:25:42 -0700 (PDT) From: Ulf Hansson To: Saravana Kannan , Stephen Boyd , linux-pm@vger.kernel.org Cc: "Rafael J . Wysocki" , Greg Kroah-Hartman , Michael Grzeschik , Bjorn Andersson , Abel Vesa , Devarsh Thakkar , Peng Fan , Tomi Valkeinen , Johan Hovold , Maulik Shah , Ulf Hansson , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 07/11] pmdomain: core: Export a common ->sync_state() helper for genpd providers Date: Thu, 17 Apr 2025 16:25:05 +0200 Message-ID: <20250417142513.312939-8-ulf.hansson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250417142513.312939-1-ulf.hansson@linaro.org> References: <20250417142513.312939-1-ulf.hansson@linaro.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250417_072545_008336_C5A303F4 X-CRM114-Status: GOOD ( 15.39 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org In some cases the typical platform driver that act as genpd provider, may need its own ->sync_state() callback to manage various things. In this regards, the provider most likely wants to allow its corresponding genpds to be powered-off. For this reason, let's introduce a new genpd helper function, of_genpd_sync_state() that helps genpd provider drivers to achieve this. Signed-off-by: Ulf Hansson --- drivers/pmdomain/core.c | 28 ++++++++++++++++++++++++++++ include/linux/pm_domain.h | 3 +++ 2 files changed, 31 insertions(+) diff --git a/drivers/pmdomain/core.c b/drivers/pmdomain/core.c index 5aba66ac78f1..512f89e6d302 100644 --- a/drivers/pmdomain/core.c +++ b/drivers/pmdomain/core.c @@ -2619,6 +2619,34 @@ static bool genpd_present(const struct generic_pm_domain *genpd) return ret; } +/** + * of_genpd_sync_state() - A common sync_state function for genpd providers + * @dev: The device the genpd provider is associated with. + * + * The @dev that corresponds to a genpd provider may provide one or multiple + * genpds. This function makes use of the device node for @dev to find the + * genpds that belongs to the provider. For each genpd we try a power-off. + */ +void of_genpd_sync_state(struct device *dev) +{ + struct device_node *np = dev->of_node; + struct generic_pm_domain *genpd; + + if (!np) + return; + + mutex_lock(&gpd_list_lock); + list_for_each_entry(genpd, &gpd_list, gpd_list_node) { + if (genpd->provider == &np->fwnode) { + genpd_lock(genpd); + genpd_power_off(genpd, false, 0); + genpd_unlock(genpd); + } + } + mutex_unlock(&gpd_list_lock); +} +EXPORT_SYMBOL_GPL(of_genpd_sync_state); + /** * of_genpd_add_provider_simple() - Register a simple PM domain provider * @np: Device node pointer associated with the PM domain provider. diff --git a/include/linux/pm_domain.h b/include/linux/pm_domain.h index 0b18160901a2..e9a1f8975c4f 100644 --- a/include/linux/pm_domain.h +++ b/include/linux/pm_domain.h @@ -418,6 +418,7 @@ struct genpd_onecell_data { }; #ifdef CONFIG_PM_GENERIC_DOMAINS_OF +void of_genpd_sync_state(struct device *dev); int of_genpd_add_provider_simple(struct device_node *np, struct generic_pm_domain *genpd); int of_genpd_add_provider_onecell(struct device_node *np, @@ -438,6 +439,8 @@ struct device *genpd_dev_pm_attach_by_id(struct device *dev, struct device *genpd_dev_pm_attach_by_name(struct device *dev, const char *name); #else /* !CONFIG_PM_GENERIC_DOMAINS_OF */ +static inline void of_genpd_sync_state(struct device *dev) {} + static inline int of_genpd_add_provider_simple(struct device_node *np, struct generic_pm_domain *genpd) { From patchwork Thu Apr 17 14:25:06 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ulf Hansson X-Patchwork-Id: 14055713 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 18735C369B2 for ; Thu, 17 Apr 2025 14:45:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=/DgFXHRgSnMuDIPCx1JNgWD3fMJlP6odjvf+kJnYpPA=; b=0CDSqlahlSjt3a3pX0CdLcQL0H B2QqhbVDbGfarzkuG89qLLJy8hf9aAn81jTDtPYyunzAYlZWJvG4Si8FuBFC0NWSECReM3viP2QKd rBM1PGalJL8x9WAwasxmzlY1W7Y9fo6UghM/V4+1MeVV9QVnjPd/o7lNj26u59rbA/cfBv9lI7U+n DNHib8xloQLOJ9W+05EiKYheo8Z9Xgnjk8Jx/vfNnry14WyNeztpfUpZHwWtYDucQv1h29z3MQ335 WojkQh2+vgtOx1MzC25CQTgY9GztR0BkwAhFLRNvQRTZWHUogDZhLWEUuMYKYXvkhDGJAsiaUyGBG k8y89eaA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1u5QUV-0000000DMx8-0wzj; Thu, 17 Apr 2025 14:45:23 +0000 Received: from mail-lf1-x133.google.com ([2a00:1450:4864:20::133]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1u5QBW-0000000DIk2-1n39 for linux-arm-kernel@lists.infradead.org; Thu, 17 Apr 2025 14:25:47 +0000 Received: by mail-lf1-x133.google.com with SMTP id 2adb3069b0e04-54c090fc7adso931553e87.2 for ; Thu, 17 Apr 2025 07:25:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1744899945; x=1745504745; darn=lists.infradead.org; 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=/DgFXHRgSnMuDIPCx1JNgWD3fMJlP6odjvf+kJnYpPA=; b=mn/icSRv4DKEFNLLknOtTDef3fBbQLi+hjf7wr1hgT5/6ALeGF3znuZiU0plvRSASU 1lXUOoXrGFSI3FOkewaPC8KAT8D+akwUUuXXenb4m6D94TC1vpuUPjLDXuvbMHQBB1u1 c1G7uklzodnHO5qwjMM9dQBN9B8kQ5rtLIYC7yDcv9ShLyPB3bq6rL3vyriRHpRw15aY D7mSyDNefTIYvDZLaCYepdqUbXFMHs28n63f22dqEy5O47CFVJVNpu74jKD72JmWuglW SJTaTH3bKaDIunTvs3h3DpKGAaaDr/NxJUbgXhcE7xlRdfd7FgK5fWyLqJDhUhTsiaAe 3Hug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744899945; x=1745504745; 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=/DgFXHRgSnMuDIPCx1JNgWD3fMJlP6odjvf+kJnYpPA=; b=SEWSaUor3Al3l4TPn+OZU6ooA+UAZGmcFJWS6i9G56i2pPa3fWlk3Toy0vIkcS5SLF hbOCEXrV1gugQk6uPUfV54ZG9Mwfq1YFjjIO2foyDHD/t5IGLc+sngoAxJ/pJGoTasNn Y9vl8zWC0RCsRO22aBuOFOiq3sW6m/t38I/z3MN0Ix7vR10uwM5RG0bMTz5E2p/ACTdV pA8FQ7K2kPCRWFvDz2jSGObpofESO3py4Wq1haosQoCi3hGoeBpyekC7oX/5oZ2ssOlJ H0A14pmMgMSlti3saePIMFhXoaww3LoRKoDOvkGosRXcXMSp7TkRzGkGwfKNP61xJL8H aFTw== X-Forwarded-Encrypted: i=1; AJvYcCXASsNlX3sS7er3x3joY8WWeNMSRW9E+/ChKbyGTNfYdMxBuEDN/ARuqFB4pWFVdaje3yWyJBdQy+LC2jPnmntt@lists.infradead.org X-Gm-Message-State: AOJu0YwXkhYHJYLOIaHqE2oPKVoBE+n9+IOKAynxBSzLqfVLMAxOJNmb zAIUb/+IwBV2P+coKNz+c+W8BX80YdbdsdXBRSk0wCrMjens4CSo3ZZS4rjZYq0= X-Gm-Gg: ASbGncstpCXWvyiqhBK1U/rzPPy1XIveXZHz7fe8ZJNIkSMBctJb3zks4LNVNoKjGBo EuMozF6gmWnWHo52j330Q/U+RxDEkiXv6qH9dfdpHaGaDW7ACOmhyfm0ascXdPj8Zs32LWj18NQ bmAfCGLqbFI7L+7xzSv/D3yNqgFoIrL15BepozrMB9pywjDvkC4R3SLsjg00avRuuHYseDGBVLl 9OegI4QuuPzMQQn1sBNfghalEXTnZSO/zq4gt574QGe+A9/siiBt5iJrM+go5MOtWAM9zw13Jc3 J3vL0wCYNG8B+8EEISDLTfV655IDYJIxBRlSvjs4GbZvxXDThJm1nAIpWDaLmxfkN2UeFYZtL4d twIuzGL5gEhoPo3o= X-Google-Smtp-Source: AGHT+IHdJaQxomsfYSS+f0K9itIKdmZijhFhwWEW6ghpA5npqy5MAC8rCQkmORhb5jt3ng77hEg7hw== X-Received: by 2002:a05:6512:3055:b0:54b:117c:a070 with SMTP id 2adb3069b0e04-54d64af157dmr2157090e87.57.1744899944885; Thu, 17 Apr 2025 07:25:44 -0700 (PDT) Received: from uffe-tuxpro14.. (h-178-174-189-39.A498.priv.bahnhof.se. [178.174.189.39]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-54d65e43647sm370096e87.58.2025.04.17.07.25.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Apr 2025 07:25:44 -0700 (PDT) From: Ulf Hansson To: Saravana Kannan , Stephen Boyd , linux-pm@vger.kernel.org Cc: "Rafael J . Wysocki" , Greg Kroah-Hartman , Michael Grzeschik , Bjorn Andersson , Abel Vesa , Devarsh Thakkar , Peng Fan , Tomi Valkeinen , Johan Hovold , Maulik Shah , Ulf Hansson , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 08/11] pmdomain: core: Add internal ->sync_state() support for genpd providers Date: Thu, 17 Apr 2025 16:25:06 +0200 Message-ID: <20250417142513.312939-9-ulf.hansson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250417142513.312939-1-ulf.hansson@linaro.org> References: <20250417142513.312939-1-ulf.hansson@linaro.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250417_072546_466737_45A8DC31 X-CRM114-Status: GOOD ( 18.37 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org If the genpd provider's fwnode doesn't have an associated struct device with it, we can make use of the generic genpd->dev and it corresponding driver internally in genpd to manage ->sync_state(). More precisely, while adding a genpd OF provider let's check if the fwnode has a device and if not, make the preparation to handle ->sync_state() internally through the genpd_provider_driver and the genpd_provider_bus. Signed-off-by: Ulf Hansson --- drivers/pmdomain/core.c | 36 ++++++++++++++++++++++++++++++++++++ include/linux/pm_domain.h | 7 +++++++ 2 files changed, 43 insertions(+) diff --git a/drivers/pmdomain/core.c b/drivers/pmdomain/core.c index 512f89e6d302..9c5a77bf59d2 100644 --- a/drivers/pmdomain/core.c +++ b/drivers/pmdomain/core.c @@ -2374,6 +2374,7 @@ int pm_genpd_init(struct generic_pm_domain *genpd, INIT_WORK(&genpd->power_off_work, genpd_power_off_work_fn); atomic_set(&genpd->sd_count, 0); genpd->status = is_off ? GENPD_STATE_OFF : GENPD_STATE_ON; + genpd->sync_state = GENPD_SYNC_STATE_OFF; genpd->device_count = 0; genpd->provider = NULL; genpd->device_id = -ENXIO; @@ -2656,6 +2657,7 @@ int of_genpd_add_provider_simple(struct device_node *np, struct generic_pm_domain *genpd) { struct fwnode_handle *fwnode; + struct device *dev; int ret; if (!np || !genpd) @@ -2665,6 +2667,10 @@ int of_genpd_add_provider_simple(struct device_node *np, return -EINVAL; fwnode = &np->fwnode; + dev = fwnode->dev; + + if (!dev) + genpd->sync_state = GENPD_SYNC_STATE_SIMPLE; device_set_node(&genpd->dev, fwnode); @@ -2718,8 +2724,10 @@ int of_genpd_add_provider_onecell(struct device_node *np, { struct generic_pm_domain *genpd; struct fwnode_handle *fwnode; + struct device *dev; unsigned int i; int ret = -EINVAL; + bool sync_state = false; if (!np || !data) return -EINVAL; @@ -2728,6 +2736,10 @@ int of_genpd_add_provider_onecell(struct device_node *np, data->xlate = genpd_xlate_onecell; fwnode = &np->fwnode; + dev = fwnode->dev; + + if (!dev) + sync_state = true; for (i = 0; i < data->num_domains; i++) { genpd = data->domains[i]; @@ -2737,6 +2749,11 @@ int of_genpd_add_provider_onecell(struct device_node *np, if (!genpd_present(genpd)) goto error; + if (sync_state) { + genpd->sync_state = GENPD_SYNC_STATE_ONECELL; + sync_state = false; + } + device_set_node(&genpd->dev, fwnode); ret = device_add(&genpd->dev); @@ -3453,6 +3470,25 @@ static void genpd_provider_remove(struct device *dev) static void genpd_provider_sync_state(struct device *dev) { + struct generic_pm_domain *genpd = container_of(dev, struct generic_pm_domain, dev); + + switch (genpd->sync_state) { + case GENPD_SYNC_STATE_OFF: + break; + + case GENPD_SYNC_STATE_ONECELL: + of_genpd_sync_state(dev); + break; + + case GENPD_SYNC_STATE_SIMPLE: + genpd_lock(genpd); + genpd_power_off(genpd, false, 0); + genpd_unlock(genpd); + break; + + default: + break; + } } static struct genpd_provider_drv genpd_provider_drv = { diff --git a/include/linux/pm_domain.h b/include/linux/pm_domain.h index e9a1f8975c4f..2185ee9e4f7c 100644 --- a/include/linux/pm_domain.h +++ b/include/linux/pm_domain.h @@ -127,6 +127,12 @@ enum genpd_notication { GENPD_NOTIFY_ON, }; +enum genpd_sync_state { + GENPD_SYNC_STATE_OFF = 0, + GENPD_SYNC_STATE_SIMPLE, + GENPD_SYNC_STATE_ONECELL, +}; + struct dev_power_governor { bool (*power_down_ok)(struct dev_pm_domain *domain); bool (*suspend_ok)(struct device *dev); @@ -187,6 +193,7 @@ struct generic_pm_domain { unsigned int performance_state; /* Aggregated max performance state */ cpumask_var_t cpus; /* A cpumask of the attached CPUs */ bool synced_poweroff; /* A consumer needs a synced poweroff */ + enum genpd_sync_state sync_state; /* How sync_state is managed. */ int (*power_off)(struct generic_pm_domain *domain); int (*power_on)(struct generic_pm_domain *domain); struct raw_notifier_head power_notifiers; /* Power on/off notifiers */ From patchwork Thu Apr 17 14:25:07 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ulf Hansson X-Patchwork-Id: 14055718 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 1A29FC369C2 for ; Thu, 17 Apr 2025 14:47:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=nBLgNziettBNC+dAZgZIrrnObr0T+wTrJghaGzbU3RM=; b=AAN8F41qFW6vXzg+hyvsxYqeOc PHO5V6ItDBxkwFTjvfISclC0MWR5MUolq/vO23/9jxTpOsXo3sm01NuwsSgCBGdiL3Ax4MdQxJUWF kXRCaoiGZE5SyoQh5Vm88zFhGwYf6zs42oiF/wnq4s75ZwH1mEt8hqpWLT5tUcb1vmCV4ZKhwdib/ bPDdQYhLIzehq67FDI0dDd3exPhDek25llVBP5lIWwtlvRe8NntR7GJWOc0EtC7uKNzbRY8cIPpPH v5+ja+7vQtQ/tkvi6j0JQkBpMOJE8bAQD51iiuGsyCsUXS5kI9V8pXFprwiKPtGZ/WBZelAQWas4d Eak6BtzA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1u5QWL-0000000DNFD-0I3x; Thu, 17 Apr 2025 14:47:17 +0000 Received: from mail-lf1-x134.google.com ([2a00:1450:4864:20::134]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1u5QBY-0000000DIko-3Tfi for linux-arm-kernel@lists.infradead.org; Thu, 17 Apr 2025 14:25:50 +0000 Received: by mail-lf1-x134.google.com with SMTP id 2adb3069b0e04-54d65cb6e8aso1055494e87.1 for ; Thu, 17 Apr 2025 07:25:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1744899947; x=1745504747; darn=lists.infradead.org; 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=nBLgNziettBNC+dAZgZIrrnObr0T+wTrJghaGzbU3RM=; b=Wj3qtqzlWdQSygDxKRrG8xHaPwjxbHyhTAbYu9XjNc84Mqna8SrbcFUBskwF0uYxCp ElrDkmynUZQA+RRccl0mc5quISl9VoXmwjOrPZ+0jZKGVmy4FIwtR/cbWFv0WmXSxZZ1 rL0Hue+htIYnQTgNuPJ31hItEnHwOSXlCfJ54HhVj+ILis9Gx/OJdUOGGZLyPzZDX4Eo BZKoE24Mj2lig2ueYWXee48FXFkVb/owGZvmxsTEQKqqaG7TWIp2zfx7aRD3kbQi1pLN cuaX7/8jYgnjOjmCqtNTLVcnroum8eFnubTlEsqbopvGoRnD5j2mtoRzR4QDCo7uvBPh Vm7g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744899947; x=1745504747; 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=nBLgNziettBNC+dAZgZIrrnObr0T+wTrJghaGzbU3RM=; b=t0ET8csudPehyEkXQDy603z4UdcbiNH4dDFc3kMHv5pWsRGa/AYAFuABfyg3COt9Li 9rXUPVQsQTGkdww/BGFF+mEVn4ZC/O0NgnITr4tA0lW5KhmOSjXyqnpiGLALHZDE/tJk 7njrBKuVk0mMEumkN+iQdUOCzDyzylukZAONw/ZyQ1KRRMa2RSFh9CLlaLURhgajAbIJ Ea9c8TScDgM3KSqMhg1TmpdWKTi37/E6jADPEJam0E9uWAQm0M6Zehy8g4my6LtDvKUZ LpvPANqhdBh6YMsG90GdXiAGGJUpnjot1lkwA7/N3kPkq/lVtGK91zLOtw2r8aX3oW8j 6HpQ== X-Forwarded-Encrypted: i=1; AJvYcCVSQmG2U5OXd6AcBfO6FsgEi0j9bToIqG0NfJnn7ZkQhHI7GjQ796M+OMfCI7pxtoGRJL63YLLHlexwYvarA+KY@lists.infradead.org X-Gm-Message-State: AOJu0YyRUeefrkX+0WfVyTYl70EeOYx6TeVkxKFId8C+AbtDz770kHlb pLizs6GL55NRgtTHcX24Y7Z3q04g7DqBp2MZwArU8f+RHR00mmDW3+GCIV/bkpo= X-Gm-Gg: ASbGncszz4UtyX3WUuDEjTCV1n5w6Fcfx7Wlcr4DqXqEKxc4fWu1gaKLvXBz6NMMGdv MPuLFJCM+rzdq5uuP/99Ol/V7ULxIX84CFzGH26jdNGdFBjIpIwApFg393jdL38dVZbfaya9EPA pWY+5s6rGfyKHXY68AKq5/3yYMyXUTNdTiq/97nGv9aY8+JcxlTFwk+36HSS6F3Mlo2UKNfcwgw WEzZVqdAt/ekzr07iMLCMjpnhmT79TDdaIlidgNUDZaoiwhoUDwjhKRk3qi70cZHH3v/kb3ix4y bjRsS2O60xkQJLPHvDKP8Vij8OJM67yyjW6jBGsJvrGZX3mLZewoebkEGXXmJvARdxUduim65ER xN2j/4bHBDGILeCU= X-Google-Smtp-Source: AGHT+IGdzxUvJDdD8yKezIscrWK2RHUkT2/k01YPoiwp/s9fHB9GDRUF1BZX1s3xswvvS2oLa5JAdg== X-Received: by 2002:a05:6512:2206:b0:549:8b24:9894 with SMTP id 2adb3069b0e04-54d64aa65bbmr1947682e87.15.1744899946966; Thu, 17 Apr 2025 07:25:46 -0700 (PDT) Received: from uffe-tuxpro14.. (h-178-174-189-39.A498.priv.bahnhof.se. [178.174.189.39]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-54d65e43647sm370096e87.58.2025.04.17.07.25.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Apr 2025 07:25:46 -0700 (PDT) From: Ulf Hansson To: Saravana Kannan , Stephen Boyd , linux-pm@vger.kernel.org Cc: "Rafael J . Wysocki" , Greg Kroah-Hartman , Michael Grzeschik , Bjorn Andersson , Abel Vesa , Devarsh Thakkar , Peng Fan , Tomi Valkeinen , Johan Hovold , Maulik Shah , Ulf Hansson , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 09/11] driver core: Add dev_set_drv_sync_state() Date: Thu, 17 Apr 2025 16:25:07 +0200 Message-ID: <20250417142513.312939-10-ulf.hansson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250417142513.312939-1-ulf.hansson@linaro.org> References: <20250417142513.312939-1-ulf.hansson@linaro.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250417_072548_866368_E8512EC0 X-CRM114-Status: GOOD ( 11.53 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org From: Saravana Kannan This can be used by frameworks to set the sync_state() helper functions for drivers that don't already have them set. Signed-off-by: Saravana Kannan Acked-by: Greg Kroah-Hartman Signed-off-by: Ulf Hansson --- Note that, I have picked this patch from another series [1] that are about to be re-freshed. [1] https://lore.kernel.org/all/YG6lhT7vuiCNvvDg@kroah.com/ --- include/linux/device.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/include/linux/device.h b/include/linux/device.h index 79e49fe494b7..544523d48cd4 100644 --- a/include/linux/device.h +++ b/include/linux/device.h @@ -955,6 +955,18 @@ static inline bool dev_has_sync_state(struct device *dev) return false; } +static inline int dev_set_drv_sync_state(struct device *dev, + void (*fn)(struct device *dev)) +{ + if (!dev || !dev->driver) + return 0; + if (dev->driver->sync_state && dev->driver->sync_state != fn) + return -EBUSY; + if (!dev->driver->sync_state) + dev->driver->sync_state = fn; + return 0; +} + static inline void dev_set_removable(struct device *dev, enum device_removable removable) { From patchwork Thu Apr 17 14:25:08 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ulf Hansson X-Patchwork-Id: 14055719 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 54514C369B2 for ; Thu, 17 Apr 2025 14:49:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=8TjEcikoo6DSPkHDkOpmkpqUSlM//3uPYTFXI+t8fY4=; b=GF/MUAZ6wf4pzXPpR0IjfHqABq 6Vn6JPRirJ9FrMX7O11KW9YXtSV/A9/eFfJofNqdKqOSwXTB9A6TzRWTsabF4mPvSD8QLIv3a74tv nl1e08c+xvD72z+Hr73LRjfB6elWCZVpYOTcCZBfK1Gnb7IzI7SVr8NQXyFZWlrDKmvnfxMVPrZ35 z5IlZol80uhhyx7h5XYqt8JBFvQ9b+DVzi5nHScwldXi7bubpyKuipbQO11Ek66WPtKtFHr1rLAH4 w0uhiuX5hBpUjvOS10gusQfmedpI8IIS7RpGman97f0LqNwDja2jO1gN5QQff8nMNdKVL0ShMBrx7 doxn8OTA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1u5QYA-0000000DNfP-3FYm; Thu, 17 Apr 2025 14:49:10 +0000 Received: from mail-lf1-x12d.google.com ([2a00:1450:4864:20::12d]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1u5QBZ-0000000DImM-3BM4 for linux-arm-kernel@lists.infradead.org; Thu, 17 Apr 2025 14:25:51 +0000 Received: by mail-lf1-x12d.google.com with SMTP id 2adb3069b0e04-54af20849adso887785e87.1 for ; Thu, 17 Apr 2025 07:25:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1744899948; x=1745504748; darn=lists.infradead.org; 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=8TjEcikoo6DSPkHDkOpmkpqUSlM//3uPYTFXI+t8fY4=; b=DoJfIv+Pr0+gw6K01WUdS9xEftK3d6ME0Jb9ySF+sIIuStOcHrHvSIPX4l78/6fJ9t YgVVe55mMXs3lzDFMV0hR6Berhf1PeOQNVfb4L7OSTOkyaBMPTcv2vea/4NYz5sYdEa2 bHAnlxI6TnubehNMnC8Jp3WyDdaiW5X2HW1gKuvZ76lEjmgIJKGx//St0AOPMx61S0Pq BtXi/6th7fWsepDQTpj6neAWTcn1R+0keNXgjOgj6SUgEuhV9wa7iFfRpj/EeoyDRseM L///1Y1yO/GzQN5BDu8+FAqImgR8S0TsHrCg0tDINvsy9zIHDYuyKOXO0wPa0FETYd5j +0IQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744899948; x=1745504748; 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=8TjEcikoo6DSPkHDkOpmkpqUSlM//3uPYTFXI+t8fY4=; b=B/r3Dr7tj7bRHsNe+Iwl/XB3llKN7SPKGMX7DjXujKLhxLt6U11dOWzrMCNxJP2MHK US36RxmJPXCqRWGDh+a9uf2fCBSRn4ngosF9ly3absD2UYeOljphGEzjgMePynbGvesh pIDQr3mOOwfm99CAWbZmR1TRKDDAxsJoE5gU8Q/EgJO/tS5m23zgdx+ztqxMsN6XAEsb EUmedPXhc2Y/yvDNCRk/iVYgS0TwGvUmBjSpcK5jI6HmJL+qYW8a8hoTFgwXI2v4kD/Z 8lprx1/DQQPkK5UeNOoywo27IQstw62F9yF+tbLpyhRO87BwFFGBaZ19t30C7jUZm9VS dT7Q== X-Forwarded-Encrypted: i=1; AJvYcCVS5yFvbkaSRSXhfZyQK0qAR0914eW1syWqEbKgh0EDPoE9VqtXg0RD4x3g6tI4D9j9lr0bg7Z1DuzfnvSwYMI6@lists.infradead.org X-Gm-Message-State: AOJu0YxX8/+AUvj9v8BrTciZnXO5Fcruecvnhg+5Cm398aRjVX1wSMxX DVXUwlhzr+tO/x/avWJpiHO/TZEDx0tyI31u3VKjJRi9MyeMgNVnQpRh3fsTJ/GUdewbTHqN3bf y X-Gm-Gg: ASbGnctkQrZg4FpIGwgzuAX4Shy2omDecShdQLhA7qAoR4ewFDJ2AXJtyUzw69TOsfD JjLyeI0du+OCylC0eX2WVZEi4vsSPon8tqAyS3GOcv/VfJjBVJe6nOxQdSiQp4WkvqChCojk96h 7NKRaVAbYuo6Z5XYq+5IVbM0DhspHicYq1DKr1GOJ59FSyHYCJ95EWtPEext2KEtPaeLpvSFR5D K05m+4PsC4zIe/hW3GDPlsXh5WhDlTdtvcRPN6td5oeUndtKUGAz9O+LIC8/cmRKn09hyppe2WM 6guXkxAodVKXBeifhIpF9XFw92vqvWDDTac4slU8K88o4CRuoFrktgi4+JarPpmbLQSe0GjGKK0 WBMU4o8ZOJbktWmc= X-Google-Smtp-Source: AGHT+IHqso8NP2mkjGd2codcc9AYXMx3rITJMfiumhfwHLFCKjgzoXmRta3CnFxIynd4smfXKHkXFg== X-Received: by 2002:a05:6512:3e01:b0:54b:117f:686f with SMTP id 2adb3069b0e04-54d6dc1df78mr5182e87.28.1744899948235; Thu, 17 Apr 2025 07:25:48 -0700 (PDT) Received: from uffe-tuxpro14.. (h-178-174-189-39.A498.priv.bahnhof.se. [178.174.189.39]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-54d65e43647sm370096e87.58.2025.04.17.07.25.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Apr 2025 07:25:47 -0700 (PDT) From: Ulf Hansson To: Saravana Kannan , Stephen Boyd , linux-pm@vger.kernel.org Cc: "Rafael J . Wysocki" , Greg Kroah-Hartman , Michael Grzeschik , Bjorn Andersson , Abel Vesa , Devarsh Thakkar , Peng Fan , Tomi Valkeinen , Johan Hovold , Maulik Shah , Ulf Hansson , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 10/11] pmdomain: core: Default to use of_genpd_sync_state() for genpd providers Date: Thu, 17 Apr 2025 16:25:08 +0200 Message-ID: <20250417142513.312939-11-ulf.hansson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250417142513.312939-1-ulf.hansson@linaro.org> References: <20250417142513.312939-1-ulf.hansson@linaro.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250417_072549_810671_0DFD5CF3 X-CRM114-Status: GOOD ( 11.25 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Unless the typical platform driver that act as genpd provider, has its own ->sync_state() callback implemented let's default to use of_genpd_sync_state(). More precisely, while adding a genpd OF provider let's assign the ->sync_state() callback, in case the fwnode has a device and its driver/bus doesn't have the ->sync_state() set already. In this way the typical platform driver doesn't need to assign ->sync_state(), unless it has some additional things to manage beyond genpds. Signed-off-by: Ulf Hansson --- drivers/pmdomain/core.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/pmdomain/core.c b/drivers/pmdomain/core.c index 9c5a77bf59d2..695d7d9e5582 100644 --- a/drivers/pmdomain/core.c +++ b/drivers/pmdomain/core.c @@ -2671,6 +2671,8 @@ int of_genpd_add_provider_simple(struct device_node *np, if (!dev) genpd->sync_state = GENPD_SYNC_STATE_SIMPLE; + else if (!dev_has_sync_state(dev)) + dev_set_drv_sync_state(dev, of_genpd_sync_state); device_set_node(&genpd->dev, fwnode); @@ -2740,6 +2742,8 @@ int of_genpd_add_provider_onecell(struct device_node *np, if (!dev) sync_state = true; + else if (!dev_has_sync_state(dev)) + dev_set_drv_sync_state(dev, of_genpd_sync_state); for (i = 0; i < data->num_domains; i++) { genpd = data->domains[i]; From patchwork Thu Apr 17 14:25:09 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ulf Hansson X-Patchwork-Id: 14055720 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id F2476C369B2 for ; Thu, 17 Apr 2025 14:51:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=Q4svnLFbJnv3zIx0N7VYQw66/h1rJWDrzgMSBi0aPAY=; b=ZKvaivMsYachEI4idYy4sVkDah UYgXSgJRvclnubfndwlnffNEugDMUpC2PjqX6jYUFOywz5DN0hpPKSmPvvY54WynFr5v/dvsh960I zGptkELt8thIAxwcWPfKcvkdKDcyl6rZmLNfgBuAaxS/1VLcFNF0INRzOmlsLEdd4u5nlau823Yhd WKaLTw05QVs+wkYrEaNfEHtXedLXR78zJWWNATYfyuqevKmvArCc8Mh1jfpw7owQBs4UQb2C/b2ew nCqS0h/SYeIgdJ1Kh0RNQi+oFl6AbX3FHttIqO2qwpg1Lp9qbzFavcRXTiTtgLiv3oFiouD2PPvuj nOnevBlQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1u5Qa0-0000000DO6W-20Z4; Thu, 17 Apr 2025 14:51:04 +0000 Received: from mail-lf1-x130.google.com ([2a00:1450:4864:20::130]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1u5QBb-0000000DIop-2wEz for linux-arm-kernel@lists.infradead.org; Thu, 17 Apr 2025 14:25:52 +0000 Received: by mail-lf1-x130.google.com with SMTP id 2adb3069b0e04-549b159c84cso1056539e87.3 for ; Thu, 17 Apr 2025 07:25:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1744899950; x=1745504750; darn=lists.infradead.org; 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=Q4svnLFbJnv3zIx0N7VYQw66/h1rJWDrzgMSBi0aPAY=; b=SvgsC2GaxJd6sGH5090fMO3xgS9EC7WKjo/XjEIaRi9Y2OR3T14jfNrfxt8OPH9x5T t59U49aAJ1MrPkyZzb9X+19hHeTqczpJXFJ4MA9VCiBjZGBJ0Pr/yrbzRqJskyv7AKJ7 QIVPAzt2rFF406RrI/TsRYYjqab0AicnL/u/5Bfw8uqqukYvP+mYTPE+G3q8GCYmEpyf SBHjR1xta6FOBINCn09qrx2RInbJqEasAbVuN85y+SR8O2VbHoOjsFx1TdpixBNPCqjv YO3RLZAHlbGk3kDnFiMHJb8uGNrTQ7EO43xPCztZUrPjwNl6xWxtGovaZjkYpHyMWg52 uX5Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744899950; x=1745504750; 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=Q4svnLFbJnv3zIx0N7VYQw66/h1rJWDrzgMSBi0aPAY=; b=XDCj9CT9q3DeWkdy6ICt4wpbntw/Cz1/cuJNvxyCvjeX2dYnBJnePqvrtvCkJsGA40 Y/py7Hf/4FrY+85KnsoSgL/IXvxPwy/R++ZB4RxNXFwVZoeiJv5VsHqea4X/5WY+Z2Iz EAVa53PHcq89a5a41GGrPDo1ifMSzduLJJSg2XzEnokQSlSoaAoEeoxsP5a/IpMSXDCc fxXLAX1kbR0lG/Rhr9EIuGCJ3ImeypkQ8O1cHjZBfasHwx8p5VQUj54CIlBk0sXP4rPe I2yZtnmbEqSpD6hV5NWKqCRvCFHFl8CzBXjCHX1JqacEBwJa5BVwKD3LFRP8zVUK1nh0 EwrA== X-Forwarded-Encrypted: i=1; AJvYcCXgvUZ2WQ6FMIIoXS2xoYr5CsgoWxQuoBMemqxF32pnz7odGfZ6sYc8HEzCeN5Tko0+cIwdGAZ178f8WVeqS8kt@lists.infradead.org X-Gm-Message-State: AOJu0YwUzqiczgJFs6AKFIWd5FM7ZZZFSdvDYqVkYMaZ5tqzTjNMVICB 1gEl6c+QE1PpycfaVhu9z6JtXxszubV1pvDBFuzRrTPiZBpEUxs17ZtilRQpCPI= X-Gm-Gg: ASbGncsQPNVJW6DmXg+64NpkmpXVn2YH7bxHWCABERQTH9wmjvL4ut2Ov+mSRJU0Gyk tObCHTYUQZbX32PY3n26iEVMzM5av0rXNQ9xibGui8xD3PiKWleXnmv1jg8aaw0mn3btHJ5Tyj+ nILtfrHbXbbRDfzrEXxq2qkQ0/caz2QJnMYF6E113WTlbg3opIFCXpUwJmFviVCUV7IZfqF8zZm GlAy67jSHRvDIiHaxabN7FybGsq95JThgOHkkvQVLQzJbQ0Pvk+rpDV3cYM2V7fnKvgZg1+KHXw yigmsKDcrmLcaeZhU/zwEfdk7DYK/Juuk+RpYMPz9she2zUGW+zJLaktXYBBgW1vpOm+z80yxH7 NEl4IFXDeeoZtkPs= X-Google-Smtp-Source: AGHT+IFLZC+7o/XwKN7xuIyMZVwhsS5rHckZLNTwrcJeTbAwEvd5hmVT1e+JUJqkIv5jp8W5a7Ps7g== X-Received: by 2002:a05:6512:2310:b0:54b:117c:1355 with SMTP id 2adb3069b0e04-54d64af41c9mr2069093e87.55.1744899949638; Thu, 17 Apr 2025 07:25:49 -0700 (PDT) Received: from uffe-tuxpro14.. (h-178-174-189-39.A498.priv.bahnhof.se. [178.174.189.39]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-54d65e43647sm370096e87.58.2025.04.17.07.25.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Apr 2025 07:25:49 -0700 (PDT) From: Ulf Hansson To: Saravana Kannan , Stephen Boyd , linux-pm@vger.kernel.org Cc: "Rafael J . Wysocki" , Greg Kroah-Hartman , Michael Grzeschik , Bjorn Andersson , Abel Vesa , Devarsh Thakkar , Peng Fan , Tomi Valkeinen , Johan Hovold , Maulik Shah , Ulf Hansson , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 11/11] pmdomain: core: Leave powered-on genpds on until ->sync_state() Date: Thu, 17 Apr 2025 16:25:09 +0200 Message-ID: <20250417142513.312939-12-ulf.hansson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250417142513.312939-1-ulf.hansson@linaro.org> References: <20250417142513.312939-1-ulf.hansson@linaro.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250417_072551_739182_11E57B48 X-CRM114-Status: GOOD ( 16.41 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Powering-off a genpd that was on during boot, before all of its consumer devices have been probed, is certainly prone to problems. Let's fix these problems by preventing these genpds from being powered-off until ->sync_state(). Note that, this only works for OF based platform as ->sync_state() are relying on fw_devlink. Signed-off-by: Ulf Hansson --- drivers/pmdomain/core.c | 12 +++++++++++- include/linux/pm_domain.h | 1 + 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/drivers/pmdomain/core.c b/drivers/pmdomain/core.c index 695d7d9e5582..a8c56f7a7ba0 100644 --- a/drivers/pmdomain/core.c +++ b/drivers/pmdomain/core.c @@ -212,6 +212,12 @@ static inline bool irq_safe_dev_in_sleep_domain(struct device *dev, return ret; } +#ifdef CONFIG_PM_GENERIC_DOMAINS_OF +static bool genpd_may_stay_on(bool on) { return on; } +#else +static bool genpd_may_stay_on(bool on) { return false; } +#endif + static int genpd_runtime_suspend(struct device *dev); /* @@ -933,11 +939,12 @@ static void genpd_power_off(struct generic_pm_domain *genpd, bool one_dev_on, * The domain is already in the "power off" state. * System suspend is in progress. * The domain is configured as always on. + * The domain was on at boot and still need to stay on. * The domain has a subdomain being powered on. */ if (!genpd_status_on(genpd) || genpd->prepared_count > 0 || genpd_is_always_on(genpd) || genpd_is_rpm_always_on(genpd) || - atomic_read(&genpd->sd_count) > 0) + genpd->stay_on || atomic_read(&genpd->sd_count) > 0) return; /* @@ -2374,6 +2381,7 @@ int pm_genpd_init(struct generic_pm_domain *genpd, INIT_WORK(&genpd->power_off_work, genpd_power_off_work_fn); atomic_set(&genpd->sd_count, 0); genpd->status = is_off ? GENPD_STATE_OFF : GENPD_STATE_ON; + genpd->stay_on = genpd_may_stay_on(!is_off); genpd->sync_state = GENPD_SYNC_STATE_OFF; genpd->device_count = 0; genpd->provider = NULL; @@ -2640,6 +2648,7 @@ void of_genpd_sync_state(struct device *dev) list_for_each_entry(genpd, &gpd_list, gpd_list_node) { if (genpd->provider == &np->fwnode) { genpd_lock(genpd); + genpd->stay_on = false; genpd_power_off(genpd, false, 0); genpd_unlock(genpd); } @@ -3486,6 +3495,7 @@ static void genpd_provider_sync_state(struct device *dev) case GENPD_SYNC_STATE_SIMPLE: genpd_lock(genpd); + genpd->stay_on = false; genpd_power_off(genpd, false, 0); genpd_unlock(genpd); break; diff --git a/include/linux/pm_domain.h b/include/linux/pm_domain.h index 2185ee9e4f7c..c5358cccacad 100644 --- a/include/linux/pm_domain.h +++ b/include/linux/pm_domain.h @@ -193,6 +193,7 @@ struct generic_pm_domain { unsigned int performance_state; /* Aggregated max performance state */ cpumask_var_t cpus; /* A cpumask of the attached CPUs */ bool synced_poweroff; /* A consumer needs a synced poweroff */ + bool stay_on; /* Stay powered-on during boot. */ enum genpd_sync_state sync_state; /* How sync_state is managed. */ int (*power_off)(struct generic_pm_domain *domain); int (*power_on)(struct generic_pm_domain *domain);