[PATCH v4 2/6] lib: utils/reset: separate driver init func
Anup Patel
anup at brainfault.org
Thu Nov 11 21:03:04 PST 2021
On Wed, Nov 10, 2021 at 3:12 PM Nikita Shubin <nikita.shubin at maquefel.me> wrote:
>
> From: Nikita Shubin <n.shubin at yadro.com>
>
> Move driver init code to separate function, so it can be reused
> elsewhere.
>
> Tested-by: Heinrich Schuchardt <heinrich.schuchardt at canonical.com>
> Reviewed-by: Alexandre Ghiti <alexandre.ghiti at canonical.com>
> Tested-by: Alexandre Ghiti <alexandre.ghiti at canonical.com>
> Signed-off-by: Nikita Shubin <n.shubin at yadro.com>
Applied this patch to the riscv/opensbi repo.
Thanks,
Anup
> ---
> include/sbi_utils/reset/fdt_reset.h | 5 ++++
> lib/utils/reset/fdt_reset.c | 37 ++++++++++++++++-------------
> 2 files changed, 26 insertions(+), 16 deletions(-)
>
> diff --git a/include/sbi_utils/reset/fdt_reset.h b/include/sbi_utils/reset/fdt_reset.h
> index 46167b9..e7f7350 100644
> --- a/include/sbi_utils/reset/fdt_reset.h
> +++ b/include/sbi_utils/reset/fdt_reset.h
> @@ -17,6 +17,11 @@ struct fdt_reset {
> int (*init)(void *fdt, int nodeoff, const struct fdt_match *match);
> };
>
> +/**
> + * fdt_reset_driver_init() - initialize reset driver based on the device-tree
> + */
> +int fdt_reset_driver_init(void *fdt, struct fdt_reset *drv);
> +
> /**
> * fdt_reset_init() - initialize reset drivers based on the device-tree
> *
> diff --git a/lib/utils/reset/fdt_reset.c b/lib/utils/reset/fdt_reset.c
> index f4befa2..66281cb 100644
> --- a/lib/utils/reset/fdt_reset.c
> +++ b/lib/utils/reset/fdt_reset.c
> @@ -29,26 +29,31 @@ static struct fdt_reset *reset_drivers[] = {
> &fdt_reset_thead,
> };
>
> -void fdt_reset_init(void)
> +int fdt_reset_driver_init(void *fdt, struct fdt_reset *drv)
> {
> - int pos, noff, rc;
> - struct fdt_reset *drv;
> + int noff, rc = SBI_ENODEV;
> const struct fdt_match *match;
> - void *fdt = fdt_get_address();
> -
> - for (pos = 0; pos < array_size(reset_drivers); pos++) {
> - drv = reset_drivers[pos];
>
> - noff = fdt_find_match(fdt, -1, drv->match_table, &match);
> - if (noff < 0)
> - continue;
> + noff = fdt_find_match(fdt, -1, drv->match_table, &match);
> + if (noff < 0)
> + return SBI_ENODEV;
>
> - if (drv->init) {
> - rc = drv->init(fdt, noff, match);
> - if (rc && rc != SBI_ENODEV) {
> - sbi_printf("%s: %s init failed, %d\n",
> - __func__, match->compatible, rc);
> - }
> + if (drv->init) {
> + rc = drv->init(fdt, noff, match);
> + if (rc && rc != SBI_ENODEV) {
> + sbi_printf("%s: %s init failed, %d\n",
> + __func__, match->compatible, rc);
> }
> }
> +
> + return rc;
> +}
> +
> +void fdt_reset_init(void)
> +{
> + int pos;
> + void *fdt = fdt_get_address();
> +
> + for (pos = 0; pos < array_size(reset_drivers); pos++)
> + fdt_reset_driver_init(fdt, reset_drivers[pos]);
> }
> --
> 2.31.1
>
>
> --
> opensbi mailing list
> opensbi at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/opensbi
More information about the opensbi
mailing list