RE: [PATCH 1/6] firmware: xilinx: add register notifier in zynqmp firmware

From: Abhyuday Godhasara
Date: Fri Jun 25 2021 - 09:37:24 EST


Hi,

> -----Original Message-----
> From: Michal Simek <michal.simek@xxxxxxxxxx>
> Sent: Monday, June 21, 2021 5:16 PM
> To: Abhyuday Godhasara <agodhasa@xxxxxxxxxx>; Michal Simek
> <michals@xxxxxxxxxx>
> Cc: Rajan Vaja <RAJANV@xxxxxxxxxx>; Manish Narani <MNARANI@xxxxxxxxxx>;
> zou_wei@xxxxxxxxxx; Amit Sunil Dhamne <amitsuni@xxxxxxxxxxxxxxx>; Sai
> Krishna Potthuri <lakshmis@xxxxxxxxxx>; Jiaying Liang <jliang@xxxxxxxxxx>;
> linux-kernel@xxxxxxxxxxxxxxx; linux-arm-kernel@xxxxxxxxxxxxxxxxxxx; Tejas Patel
> <tejasp@xxxxxxxxxxxxxxx>
> Subject: Re: [PATCH 1/6] firmware: xilinx: add register notifier in zynqmp
> firmware
>
>
>
> On 5/28/21 5:59 PM, Abhyuday Godhasara wrote:
> > In zynqmp-firmware, register notifier is not supported, add support of
> > register notifier in zynqmp-firmware.
> >
> > Signed-off-by: Tejas Patel <tejas.patel@xxxxxxxxxx>
> > Signed-off-by: Abhyuday Godhasara <abhyuday.godhasara@xxxxxxxxxx>
> > ---
> > drivers/firmware/xilinx/zynqmp-debug.c | 2 +-
> > drivers/firmware/xilinx/zynqmp.c | 23 +++++++++++++++++++++++
> > include/linux/firmware/xlnx-zynqmp.h | 11 ++++++++++-
> > 3 files changed, 34 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/firmware/xilinx/zynqmp-debug.c
> > b/drivers/firmware/xilinx/zynqmp-debug.c
> > index 99606b3..7841cb7 100644
> > --- a/drivers/firmware/xilinx/zynqmp-debug.c
> > +++ b/drivers/firmware/xilinx/zynqmp-debug.c
> > @@ -2,7 +2,7 @@
> > /*
> > * Xilinx Zynq MPSoC Firmware layer for debugfs APIs
> > *
> > - * Copyright (C) 2014-2018 Xilinx, Inc.
> > + * Copyright (C) 2014-2021 Xilinx, Inc.
>
> no reason for this change when you don't change this file.
[Abhyuday] I will remove this in next patch series.

>
> > *
> > * Michal Simek <michal.simek@xxxxxxxxxx>
> > * Davorin Mista <davorin.mista@xxxxxxxxxx> diff --git
> > a/drivers/firmware/xilinx/zynqmp.c b/drivers/firmware/xilinx/zynqmp.c
> > index 15b13832..33f190e 100644
> > --- a/drivers/firmware/xilinx/zynqmp.c
> > +++ b/drivers/firmware/xilinx/zynqmp.c
> > @@ -1037,6 +1037,29 @@ int zynqmp_pm_aes_engine(const u64 address,
> u32
> > *out) EXPORT_SYMBOL_GPL(zynqmp_pm_aes_engine);
> >
> > /**
> > + * zynqmp_pm_register_notifier() - PM API for register a subsystem
> > + * to be notified about specific
> > + * event/error.
> > + * @node: Node ID to which the event is related.
> > + * @event: Event Mask of Error events for which wants to get notified.
> > + * @wake: Wake subsystem upon capturing the event if value 1
> > + * @enable: Enable the registration for value 1, disable for value 0
> > + *
> > + * This function is used to register/un-register for particular
> > + node-event
> > + * combination in firmware.
> > + *
> > + * Return: Returns status, either success or error+reason */
> > +
> > +int zynqmp_pm_register_notifier(const u32 node, const u32 event,
> > + const u32 wake, const u32 enable) {
> > + return zynqmp_pm_invoke_fn(PM_REGISTER_NOTIFIER, node, event,
> > + wake, enable, NULL);
> > +}
> > +EXPORT_SYMBOL_GPL(zynqmp_pm_register_notifier);
> > +
> > +/**
> > * zynqmp_pm_system_shutdown - PM call to request a system shutdown or
> restart
> > * @type: Shutdown or restart? 0 for shutdown, 1 for restart
> > * @subtype: Specifies which system should be restarted or shut down
> > diff --git a/include/linux/firmware/xlnx-zynqmp.h
> > b/include/linux/firmware/xlnx-zynqmp.h
> > index 9d1a5c1..6557832 100644
> > --- a/include/linux/firmware/xlnx-zynqmp.h
> > +++ b/include/linux/firmware/xlnx-zynqmp.h
> > @@ -2,7 +2,7 @@
> > /*
> > * Xilinx Zynq MPSoC Firmware layer
> > *
> > - * Copyright (C) 2014-2019 Xilinx
> > + * Copyright (C) 2014-2021 Xilinx
> > *
> > * Michal Simek <michal.simek@xxxxxxxxxx>
> > * Davorin Mista <davorin.mista@xxxxxxxxxx> @@ -62,6 +62,7 @@
> >
> > enum pm_api_id {
> > PM_GET_API_VERSION = 1,
> > + PM_REGISTER_NOTIFIER = 5,
> > PM_SYSTEM_SHUTDOWN = 12,
> > PM_REQUEST_NODE = 13,
> > PM_RELEASE_NODE = 14,
> > @@ -411,6 +412,8 @@ int zynqmp_pm_pinctrl_get_config(const u32 pin,
> const u32 param,
> > u32 *value);
> > int zynqmp_pm_pinctrl_set_config(const u32 pin, const u32 param,
> > u32 value);
> > +int zynqmp_pm_register_notifier(const u32 node, const u32 event,
> > + const u32 wake, const u32 enable);
> > #else
> > static inline int zynqmp_pm_get_api_version(u32 *version) { @@
> > -622,6 +625,12 @@ static inline int zynqmp_pm_pinctrl_set_config(const
> > u32 pin, const u32 param, {
> > return -ENODEV;
> > }
> > +
> > +static inline int zynqmp_pm_register_notifier(const u32 node, const u32
> event,
> > + const u32 wake, const u32 enable)
> {
> > + return -ENODEV;
> > +}
> > #endif
> >
> > #endif /* __FIRMWARE_ZYNQMP_H__ */
> >
>
> M
Thanks,
Abhyuday