[PATCH] firmware: zynqmp: Change panic logic in zynqmp_pmufw_load_config_object()
Michal Simek
monstr at monstr.eu
Thu Jun 25 10:03:45 CEST 2020
út 12. 5. 2020 v 8:25 odesílatel Michal Simek <michal.simek at xilinx.com> napsal:
>
> There is no need to panic all the time when pmufw config object loading
> failed. The patch improves function logic to report permission deny case
> and also panic only for SPL case.
>
> Signed-off-by: Michal Simek <michal.simek at xilinx.com>
> ---
>
> drivers/firmware/firmware-zynqmp.c | 19 +++++++++++++++----
> 1 file changed, 15 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/firmware/firmware-zynqmp.c b/drivers/firmware/firmware-zynqmp.c
> index c37642569dda..bef6fc05dc69 100644
> --- a/drivers/firmware/firmware-zynqmp.c
> +++ b/drivers/firmware/firmware-zynqmp.c
> @@ -15,6 +15,8 @@
>
> #define PMUFW_PAYLOAD_ARG_CNT 8
>
> +#define XST_PM_NO_ACCESS 2002L
> +
> struct zynqmp_power {
> struct mbox_chan tx_chan;
> struct mbox_chan rx_chan;
> @@ -96,16 +98,25 @@ void zynqmp_pmufw_load_config_object(const void *cfg_obj, size_t size)
> PM_SET_CONFIGURATION,
> (u32)((u64)cfg_obj)
> };
> - u32 response;
> + u32 response = 0;
> int err;
>
> printf("Loading new PMUFW cfg obj (%ld bytes)\n", size);
>
> err = send_req(request, ARRAY_SIZE(request), &response, 1);
> + if (err == XST_PM_NO_ACCESS) {
> + printf("PMUFW no permission to change config object\n");
> + return;
> + }
> +
> if (err)
> - panic("Cannot load PMUFW configuration object (%d)\n", err);
> - if (response != 0)
> - panic("PMUFW returned 0x%08x status!\n", response);
> + printf("Cannot load PMUFW configuration object (%d)\n", err);
> +
> + if (response)
> + printf("PMUFW returned 0x%08x status!\n", response);
> +
> + if ((err || response) && IS_ENABLED(CONFIG_SPL_BUILD))
> + panic("PMUFW config object loading failed in EL3\n");
> }
>
> static int zynqmp_power_probe(struct udevice *dev)
> --
> 2.26.2
>
Applied.
M
--
Michal Simek, Ing. (M.Eng), OpenPGP -> KeyID: FE3D1F91
w: www.monstr.eu p: +42-0-721842854
Maintainer of Linux kernel - Xilinx Microblaze
Maintainer of Linux kernel - Xilinx Zynq ARM and ZynqMP ARM64 SoCs
U-Boot custodian - Xilinx Microblaze/Zynq/ZynqMP/Versal SoCs
More information about the U-Boot
mailing list