[PATCH v2 00/11] Deduplicate driver initialization code

Samuel Holland samuel.holland at sifive.com
Mon Nov 11 14:02:44 PST 2024


Upstreaming support for some of SiFive's security and power management
features will require adding some new driver subsystems (e.g. caches,
WorldGuard gadgets, power management domains, etc.). To avoid copy-and-
pasting the FDT-based driver matching code to each new subsystem, this
series refactors it into some efficient and easily-reusable helper
functions.

Version 2 of this series converts everything but the irqchip subsystem
to use the new helpers. Once the irqchip subsystem is converted, the old
fdt_find_match() helper can be removed. The following series prepares
the irqchip subsystem for conversion to use the fdt_driver helpers:
http://lists.infradead.org/pipermail/opensbi/2024-November/007555.html

Changes in v2:
 - Shell script cleanup in carray.sh
 - Update carray.sh to support embedding struct fdt_driver
 - Add conversion of gpio drivers
 - Add conversion of ipi drivers
 - Add conversion of regmap drivers
 - Add conversion of timer drivers

Samuel Holland (11):
  treewide: Make carray arrays const and NULL-terminated
  lib: utils/fdt: Add helpers for generic driver initialization
  scripts/carray.sh: Avoid useless use of cat
  scripts/carray.sh: Allow referencing a struct member
  lib: utils/gpio: Use fdt_driver for initialization
  lib: utils/i2c: Use fdt_driver for initialization
  lib: utils/ipi: Use fdt_driver for initialization
  lib: utils/regmap: Use fdt_driver for initialization
  lib: utils/reset: Use fdt_driver for initialization
  lib: utils/serial: Use fdt_driver for initialization
  lib: utils/timer: Use fdt_driver for initialization

 include/sbi_utils/fdt/fdt_driver.h           | 59 +++++++++++++++
 include/sbi_utils/gpio/fdt_gpio.h            |  5 +-
 include/sbi_utils/gpio/gpio.h                |  2 +-
 include/sbi_utils/i2c/fdt_i2c.h              |  8 +-
 include/sbi_utils/ipi/fdt_ipi.h              |  6 +-
 include/sbi_utils/regmap/fdt_regmap.h        |  8 +-
 include/sbi_utils/reset/fdt_reset.h          | 15 +---
 include/sbi_utils/serial/fdt_serial.h        |  6 +-
 include/sbi_utils/timer/fdt_timer.h          |  6 +-
 lib/sbi/sbi_ecall.c                          |  5 +-
 lib/sbi/tests/sbi_unit_test.c                |  5 +-
 lib/utils/fdt/fdt_driver.c                   | 80 ++++++++++++++++++++
 lib/utils/fdt/objects.mk                     |  1 +
 lib/utils/gpio/fdt_gpio.c                    | 28 +------
 lib/utils/gpio/fdt_gpio_designware.c         | 10 ++-
 lib/utils/gpio/fdt_gpio_drivers.carray       |  4 +-
 lib/utils/gpio/fdt_gpio_sifive.c             | 10 ++-
 lib/utils/gpio/fdt_gpio_starfive.c           | 10 ++-
 lib/utils/i2c/fdt_i2c.c                      | 31 +-------
 lib/utils/i2c/fdt_i2c_adapter_drivers.carray |  2 +-
 lib/utils/i2c/fdt_i2c_dw.c                   |  2 +-
 lib/utils/i2c/fdt_i2c_sifive.c               |  2 +-
 lib/utils/ipi/fdt_ipi.c                      | 43 +----------
 lib/utils/ipi/fdt_ipi_drivers.carray         |  2 +-
 lib/utils/ipi/fdt_ipi_mswi.c                 |  4 +-
 lib/utils/ipi/fdt_ipi_plicsw.c               |  4 +-
 lib/utils/irqchip/fdt_irqchip.c              |  5 +-
 lib/utils/regmap/fdt_regmap.c                | 29 +------
 lib/utils/regmap/fdt_regmap_drivers.carray   |  2 +-
 lib/utils/regmap/fdt_regmap_syscon.c         |  2 +-
 lib/utils/reset/fdt_reset.c                  | 37 +--------
 lib/utils/reset/fdt_reset_atcwdt200.c        |  2 +-
 lib/utils/reset/fdt_reset_drivers.carray     |  2 +-
 lib/utils/reset/fdt_reset_gpio.c             |  4 +-
 lib/utils/reset/fdt_reset_htif.c             |  2 +-
 lib/utils/reset/fdt_reset_sg2042_hwmon_mcu.c |  2 +-
 lib/utils/reset/fdt_reset_sunxi_wdt.c        |  2 +-
 lib/utils/reset/fdt_reset_syscon.c           |  4 +-
 lib/utils/serial/fdt_serial.c                | 53 ++-----------
 lib/utils/serial/fdt_serial_cadence.c        |  2 +-
 lib/utils/serial/fdt_serial_drivers.carray   |  2 +-
 lib/utils/serial/fdt_serial_gaisler.c        |  2 +-
 lib/utils/serial/fdt_serial_htif.c           |  2 +-
 lib/utils/serial/fdt_serial_litex.c          |  2 +-
 lib/utils/serial/fdt_serial_renesas_scif.c   |  2 +-
 lib/utils/serial/fdt_serial_shakti.c         |  2 +-
 lib/utils/serial/fdt_serial_sifive.c         |  2 +-
 lib/utils/serial/fdt_serial_uart8250.c       |  2 +-
 lib/utils/serial/fdt_serial_xlnx_uartlite.c  |  2 +-
 lib/utils/timer/fdt_timer.c                  | 40 +---------
 lib/utils/timer/fdt_timer_drivers.carray     |  2 +-
 lib/utils/timer/fdt_timer_mtimer.c           |  4 +-
 lib/utils/timer/fdt_timer_plmt.c             |  4 +-
 platform/generic/platform.c                  |  5 +-
 platform/generic/sifive/fu740.c              |  9 ++-
 platform/generic/starfive/jh7110.c           |  9 ++-
 scripts/carray.sh                            | 22 ++++--
 57 files changed, 267 insertions(+), 352 deletions(-)
 create mode 100644 include/sbi_utils/fdt/fdt_driver.h
 create mode 100644 lib/utils/fdt/fdt_driver.c

-- 
2.45.1




More information about the opensbi mailing list