From mboxrd@z Thu Jan 1 00:00:00 1970 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 A278BC4345F for ; Mon, 15 Apr 2024 20:45:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=35GZS/ogem877XqOh+eXdwOxn6DJwfCtpwuX1NnmJ24=; b=xyD/1slBiH29D0 WNMyykVbKisOyBSrG/O6Grpofgu3aolBLG39dbHR6/MiHq6zT0YDhxqxQUTLX8uGuubXX87tcjJaT XUpAwdzTlRDg8ldBT6Ad4qci/EFi8qkJKS1/FYSon0BhJL6d+wj5dJu/LrQj70Z7H2Lleezb5Fs02 j/TtirmWQj88XOo7D2/IfqYMNA7pMcCHfncbu0RHSeRXRvS5+jLzjpAMAD6sHCGwhK7sM2HYuQMRH MZp94w8Ng6ptdMHEQ1dwvX5IWD3ZS054TpR5AMfFri6cxD0mH7b64Vh3OA4dy8TFAW3gRFC4Ru6Jj J2AlCFt8SG52UJvHNBmg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rwTCo-00000009ruO-00IB; Mon, 15 Apr 2024 20:45:34 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rwTCk-00000009rs8-3Out for linux-arm-kernel@lists.infradead.org; Mon, 15 Apr 2024 20:45:32 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 69FFF2F4; Mon, 15 Apr 2024 13:45:52 -0700 (PDT) Received: from pluto (usa-sjc-mx-foss1.foss.arm.com [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id D0B583F738; Mon, 15 Apr 2024 13:45:22 -0700 (PDT) Date: Mon, 15 Apr 2024 21:45:20 +0100 From: Cristian Marussi To: "Peng Fan (OSS)" Cc: sudeep.holla@arm.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Peng Fan Subject: Re: [PATCH] firmware: arm_scmi: power_control: support suspend command Message-ID: References: <20240415101141.1591112-1-peng.fan@oss.nxp.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20240415101141.1591112-1-peng.fan@oss.nxp.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240415_134530_999656_42B651B0 X-CRM114-Status: GOOD ( 22.07 ) 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: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org On Mon, Apr 15, 2024 at 06:11:41PM +0800, Peng Fan (OSS) wrote: > From: Peng Fan > > Support System suspend notification. Using a work struct to call > pm_suspend. There is no way to pass suspend level to pm_suspend, > so use MEM as of now. > Hi Peng, > Signed-off-by: Peng Fan > --- > .../firmware/arm_scmi/scmi_power_control.c | 20 ++++++++++++++++++- > 1 file changed, 19 insertions(+), 1 deletion(-) > This LGTM in general, the only obsservation here is that while on shutdown by issuing a orderly_reboot() we in fact ask PID_1 to start a shutdown from userspace, when triggering a system suspend with pm_suspend() we do not involve userspace in the process, but I dont think there is another way indeed. Thanks, Cristian > diff --git a/drivers/firmware/arm_scmi/scmi_power_control.c b/drivers/firmware/arm_scmi/scmi_power_control.c > index 6eb7d2a4b6b1..beafca9957c7 100644 > --- a/drivers/firmware/arm_scmi/scmi_power_control.c > +++ b/drivers/firmware/arm_scmi/scmi_power_control.c > @@ -50,6 +50,7 @@ > #include > #include > #include > +#include > #include > #include > #include > @@ -90,6 +91,7 @@ struct scmi_syspower_conf { > struct notifier_block reboot_nb; > > struct delayed_work forceful_work; > + struct work_struct suspend_work; > }; > > #define userspace_nb_to_sconf(x) \ > @@ -249,6 +251,9 @@ static void scmi_request_graceful_transition(struct scmi_syspower_conf *sc, > case SCMI_SYSTEM_WARMRESET: > orderly_reboot(); > break; > + case SCMI_SYSTEM_SUSPEND: > + schedule_work(&sc->suspend_work); > + break; > default: > break; > } > @@ -277,7 +282,8 @@ static int scmi_userspace_notifier(struct notifier_block *nb, > struct scmi_system_power_state_notifier_report *er = data; > struct scmi_syspower_conf *sc = userspace_nb_to_sconf(nb); > > - if (er->system_state >= SCMI_SYSTEM_POWERUP) { > + if (er->system_state >= SCMI_SYSTEM_MAX || > + er->system_state == SCMI_SYSTEM_POWERUP) { > dev_err(sc->dev, "Ignoring unsupported system_state: 0x%X\n", > er->system_state); > return NOTIFY_DONE; > @@ -315,6 +321,16 @@ static int scmi_userspace_notifier(struct notifier_block *nb, > return NOTIFY_OK; > } > > +static void scmi_suspend_work_func(struct work_struct *work) > +{ > + struct scmi_syspower_conf *sc = > + container_of(work, struct scmi_syspower_conf, suspend_work); > + > + pm_suspend(PM_SUSPEND_MEM); > + > + sc->state = SCMI_SYSPOWER_IDLE; > +} > + > static int scmi_syspower_probe(struct scmi_device *sdev) > { > int ret; > @@ -338,6 +354,8 @@ static int scmi_syspower_probe(struct scmi_device *sdev) > sc->userspace_nb.notifier_call = &scmi_userspace_notifier; > sc->dev = &sdev->dev; > > + INIT_WORK(&sc->suspend_work, scmi_suspend_work_func); > + > return handle->notify_ops->devm_event_notifier_register(sdev, > SCMI_PROTOCOL_SYSTEM, > SCMI_EVENT_SYSTEM_POWER_STATE_NOTIFIER, > -- > 2.37.1 > _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel