On 2019-07-16 17:03:23 Tue, Hari Bathini wrote:
> Make OPAL calls to register and un-register with firmware for MPIPL.
> 
> Signed-off-by: Hari Bathini <hbath...@linux.ibm.com>
> ---
>  arch/powerpc/platforms/powernv/opal-fadump.c |   71 
> +++++++++++++++++++++++++-
>  1 file changed, 69 insertions(+), 2 deletions(-)
> 
[...]
> @@ -88,12 +104,63 @@ static int opal_fadump_setup_kernel_metadata(struct 
> fw_dump *fadump_conf)
>  
>  static int opal_fadump_register_fadump(struct fw_dump *fadump_conf)
>  {
> -     return -EIO;
> +     int i, err = -EIO;
> +     s64 rc;
> +
> +     for (i = 0; i < opal_fdm->region_cnt; i++) {
> +             rc = opal_mpipl_update(OPAL_MPIPL_ADD_RANGE,
> +                                    opal_fdm->rgn[i].src,
> +                                    opal_fdm->rgn[i].dest,
> +                                    opal_fdm->rgn[i].size);
> +             if (rc != OPAL_SUCCESS)

You may want to remove ranges which has been added so far on error and reset
opal_fdm->registered_regions.

> +                     break;
> +
> +             opal_fdm->registered_regions++;
> +     }
> +
> +     switch (rc) {
> +     case OPAL_SUCCESS:
> +             pr_info("Registration is successful!\n");
> +             fadump_conf->dump_registered = 1;
> +             err = 0;
> +             break;
> +     case OPAL_UNSUPPORTED:
> +             pr_err("Support not available.\n");
> +             fadump_conf->fadump_supported = 0;
> +             fadump_conf->fadump_enabled = 0;
> +             break;
> +     case OPAL_INTERNAL_ERROR:
> +             pr_err("Failed to register. Hardware Error(%lld).\n", rc);
> +             break;
> +     case OPAL_PARAMETER:
> +             pr_err("Failed to register. Parameter Error(%lld).\n", rc);
> +             break;
> +     case OPAL_PERMISSION:

You may want to remove this check. With latest opal mpipl patches
opal_mpipl_update() no more returns OPAL_PERMISSION.

Even if opal does, we can not say fadump already registered just by
looking at return status of single entry addition.

Thanks,
-Mahesh.

> +             pr_err("Already registered!\n");
> +             fadump_conf->dump_registered = 1;
> +             err = -EEXIST;
> +             break;
> +     default:
> +             pr_err("Failed to register. Unknown Error(%lld).\n", rc);
> +             break;
> +     }
> +
> +     return err;
>  }

Reply via email to