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 X-Spam-Level: X-Spam-Status: No, score=-4.5 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,PDS_HP_HELO_NORDNS,RDNS_NONE,SIGNED_OFF_BY,SPF_HELO_NONE, SPF_NONE autolearn=no autolearn_force=no version=3.4.0 Received: from mail-pl1-f193.google.com ([209.85.214.193]:46867 "EHLO mail-pl1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730114AbgCKQ03 (ORCPT ); Wed, 11 Mar 2020 12:26:29 -0400 Received: by mail-pl1-f193.google.com with SMTP id w12so1317234pll.13 for ; Wed, 11 Mar 2020 09:26:28 -0700 (PDT) Date: Wed, 11 Mar 2020 10:26:24 -0600 From: Mathieu Poirier To: Ben Levinsky Cc: ohad@wizery.com, bjorn.andersson@linaro.org, michal.simek@xilinx.com, jollys@xilinx.com, rajan.vaja@xilinx.com, robh+dt@kernel.org, mark.rutland@arm.com, linux-remoteproc@vger.kernel.org, linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH 3/5] firmware: xilinx: Add zynqmp_get_node_status API Message-ID: <20200311162624.GA32395@xps15> References: <1582566751-13118-1-git-send-email-ben.levinsky@xilinx.com> <1582566751-13118-4-git-send-email-ben.levinsky@xilinx.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1582566751-13118-4-git-send-email-ben.levinsky@xilinx.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: Hi Ben, On Mon, Feb 24, 2020 at 09:52:29AM -0800, Ben Levinsky wrote: > This patch adds a new API to provide access to the > current power state of a sub-system on Zynqmp sub-system. > > Signed-off-by: Ben Levinsky Patches 1 to 3 look good to me but they will need an R-b from Michal Simek before it is possible to move foward with them. Thanks, Mathieu > --- > drivers/firmware/xilinx/zynqmp.c | 42 ++++++++++++++++++++++++++++++++++++ > include/linux/firmware/xlnx-zynqmp.h | 3 +++ > 2 files changed, 45 insertions(+) > > diff --git a/drivers/firmware/xilinx/zynqmp.c b/drivers/firmware/xilinx/zynqmp.c > index 486dcb1..98e35d4 100644 > --- a/drivers/firmware/xilinx/zynqmp.c > +++ b/drivers/firmware/xilinx/zynqmp.c > @@ -725,6 +725,47 @@ static int zynqmp_pm_request_wakeup(const u32 node, > } > > /** > + * zynqmp_pm_get_node_status - PM call to request a node's current power state > + * @node: ID of the component or sub-system in question > + * @status: Current operating state of the requested node > + * @requirements: Current requirements asserted on the node, > + * used for slave nodes only. > + * @usage: Usage information, used for slave nodes only: > + * PM_USAGE_NO_MASTER - No master is currently using > + * the node > + * PM_USAGE_CURRENT_MASTER - Only requesting master is > + * currently using the node > + * PM_USAGE_OTHER_MASTER - Only other masters are > + * currently using the node > + * PM_USAGE_BOTH_MASTERS - Both the current and at least > + * one other master is currently > + * using the node > + * > + * Return: Returns status, either success or error+reason > + */ > +static int zynqmp_pm_get_node_status(const u32 node, u32 *const status, > + u32 *const requirements, u32 *const usage) > +{ > + u32 ret_payload[PAYLOAD_ARG_CNT]; > + int ret; > + > + if (!status) > + return -EINVAL; > + > + ret = zynqmp_pm_invoke_fn(PM_GET_NODE_STATUS, node, 0, 0, > + 0, ret_payload); > + if (ret_payload[0] == XST_PM_SUCCESS) { > + *status = ret_payload[1]; > + if (requirements) > + *requirements = ret_payload[2]; > + if (usage) > + *usage = ret_payload[3]; > + } > + > + return ret; > +} > + > +/** > * zynqmp_pm_set_requirement() - PM call to set requirement for PM slaves > * @node: Node ID of the slave > * @capabilities: Requested capabilities of the slave > @@ -769,6 +810,7 @@ static const struct zynqmp_eemi_ops eemi_ops = { > .set_requirement = zynqmp_pm_set_requirement, > .fpga_load = zynqmp_pm_fpga_load, > .fpga_get_status = zynqmp_pm_fpga_get_status, > + .get_node_status = zynqmp_pm_get_node_status, > }; > > /** > diff --git a/include/linux/firmware/xlnx-zynqmp.h b/include/linux/firmware/xlnx-zynqmp.h > index 0a68849..fb4efc9 100644 > --- a/include/linux/firmware/xlnx-zynqmp.h > +++ b/include/linux/firmware/xlnx-zynqmp.h > @@ -62,6 +62,7 @@ > > enum pm_api_id { > PM_GET_API_VERSION = 1, > + PM_GET_NODE_STATUS = 3, > PM_REQUEST_NODE = 13, > PM_RELEASE_NODE, > PM_SET_REQUIREMENT, > @@ -309,6 +310,8 @@ struct zynqmp_pm_query_data { > struct zynqmp_eemi_ops { > int (*get_api_version)(u32 *version); > int (*get_chipid)(u32 *idcode, u32 *version); > + int (*get_node_status)(const u32 node, u32 *const status, > + u32 *const requirements, u32 *const usage); > int (*fpga_load)(const u64 address, const u32 size, const u32 flags); > int (*fpga_get_status)(u32 *value); > int (*query_data)(struct zynqmp_pm_query_data qdata, u32 *out); > -- > 2.7.4 >