From 73cf51191403be2ebdf9f9a1d17812d1550316ff Mon Sep 17 00:00:00 2001 From: Anup Patel Date: Fri, 13 May 2022 09:26:06 +0530 Subject: [PATCH] lib: utils/reset: Generate FDT reset driver list at compile-time Instead of having FDT reset driver list hard-coded in the C source, we generate it using carray.sh at compile-time. Signed-off-by: Anup Patel Reviewed-by: Atish Patra --- lib/utils/reset/fdt_reset.c | 22 +++++----------------- lib/utils/reset/fdt_reset_drivers.carray | 3 +++ lib/utils/reset/objects.mk | 12 ++++++++++++ 3 files changed, 20 insertions(+), 17 deletions(-) create mode 100644 lib/utils/reset/fdt_reset_drivers.carray diff --git a/lib/utils/reset/fdt_reset.c b/lib/utils/reset/fdt_reset.c index 66281cbf..4334586d 100644 --- a/lib/utils/reset/fdt_reset.c +++ b/lib/utils/reset/fdt_reset.c @@ -13,21 +13,9 @@ #include #include -extern struct fdt_reset fdt_poweroff_gpio; -extern struct fdt_reset fdt_reset_gpio; -extern struct fdt_reset fdt_reset_htif; -extern struct fdt_reset fdt_reset_sifive_test; -extern struct fdt_reset fdt_reset_sunxi_wdt; -extern struct fdt_reset fdt_reset_thead; - -static struct fdt_reset *reset_drivers[] = { - &fdt_poweroff_gpio, - &fdt_reset_gpio, - &fdt_reset_htif, - &fdt_reset_sifive_test, - &fdt_reset_sunxi_wdt, - &fdt_reset_thead, -}; +/* List of FDT reset drivers generated at compile time */ +extern struct fdt_reset *fdt_reset_drivers[]; +extern unsigned long fdt_reset_drivers_size; int fdt_reset_driver_init(void *fdt, struct fdt_reset *drv) { @@ -54,6 +42,6 @@ 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]); + for (pos = 0; pos < fdt_reset_drivers_size; pos++) + fdt_reset_driver_init(fdt, fdt_reset_drivers[pos]); } diff --git a/lib/utils/reset/fdt_reset_drivers.carray b/lib/utils/reset/fdt_reset_drivers.carray new file mode 100644 index 00000000..6ff799cc --- /dev/null +++ b/lib/utils/reset/fdt_reset_drivers.carray @@ -0,0 +1,3 @@ +HEADER: sbi_utils/reset/fdt_reset.h +TYPE: struct fdt_reset +NAME: fdt_reset_drivers diff --git a/lib/utils/reset/objects.mk b/lib/utils/reset/objects.mk index 6c95db39..8cddcdfb 100644 --- a/lib/utils/reset/objects.mk +++ b/lib/utils/reset/objects.mk @@ -8,9 +8,21 @@ # libsbiutils-objs-y += reset/fdt_reset.o +libsbiutils-objs-y += reset/fdt_reset_drivers.o + +carray-fdt_reset_drivers-y += fdt_poweroff_gpio +carray-fdt_reset_drivers-y += fdt_reset_gpio libsbiutils-objs-y += reset/fdt_reset_gpio.o + +carray-fdt_reset_drivers-y += fdt_reset_htif libsbiutils-objs-y += reset/fdt_reset_htif.o + +carray-fdt_reset_drivers-y += fdt_reset_sifive_test libsbiutils-objs-y += reset/fdt_reset_sifive_test.o + +carray-fdt_reset_drivers-y += fdt_reset_sunxi_wdt libsbiutils-objs-y += reset/fdt_reset_sunxi_wdt.o + +carray-fdt_reset_drivers-y += fdt_reset_thead libsbiutils-objs-y += reset/fdt_reset_thead.o libsbiutils-objs-y += reset/fdt_reset_thead_asm.o