[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