From 1d462e039782e49d2a96a776e50b7478d87b228d Mon Sep 17 00:00:00 2001 From: Nikita Shubin Date: Wed, 10 Nov 2021 12:42:26 +0300 Subject: lib: utils/reset: separate driver init func Move driver init code to separate function, so it can be reused elsewhere. Tested-by: Heinrich Schuchardt Reviewed-by: Alexandre Ghiti Tested-by: Alexandre Ghiti Signed-off-by: Nikita Shubin --- lib/utils/reset/fdt_reset.c | 37 +++++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 16 deletions(-) (limited to 'lib/utils') 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]); } -- cgit v1.2.3