[PATCH v6 00/11] Add SiFive TMC0 and SMC0 driver

Nick Hu nick.hu at sifive.com
Thu Sep 4 19:24:33 PDT 2025


SiFive TMC0 and SMC0 are the power controllers that controls the Tile and
CoreComplex power domain. Add the drivers to support the power
management features such as HSM STOP and System Suspend.

Features such as power management may require flushing the entire
cache before entering a non-retention power state. To support this, a
simple cache flush framework is introduced to allow the external CMO
to perform a full cache flush.

---
Changes in v6:
- Rename the aplic_restore() to aplic_reinit_all()
- Remove fdt_hsm_sifive_tmc0_cold_init() from TMC0 header file
- Remove the sifive_dev_platform.c
- Add a dummy inline flavor of fdt_cmo_init() for the case where CONFIG_FDT_CACHE is disabled
- Link to v5: https://lore.kernel.org/r/20250902-cache-upstream-v5-0-af60a067f47a@sifive.com

Changes in v5:
- Put the SiFive TMC0 driver to the fdt_early_driver
- Fix the format of the comments in SiFive TMC0 driver

Changes in v4:
- Call fdt_cmo_init() directly as part of generic_early_init()
- Rename SBI_HART_EXT_XSF* to SBI_HART_EXT_XSIFIVE*
- Move the TMC0 driver to the lib/utils/hsm/
- Move the SMC0 driver to the lib/utils/suspend/

Changes in v3:
- Add the SiFive TMC and SMC driver

Changes in v2:
- Since the platform override hooks was deprecated, use the fdt_driver
for initializing the sifive_dev_platform.

---
Nick Hu (10):
  lib: utils: Add cache flush library
  lib: utils: Add FDT cache library
  lib: utils/cache: Add fdt cmo helpers
  lib: sbi: Add SiFive proprietary xsfcflushdlone
  lib: sbi: Add SiFive proprietary xsfcease
  lib: utils/ipi: Exposing the ACLINT IPI device
  lib: utils/irqchip: Add APLIC restore function
  platform: sifive: Add SiFive TMC0 driver
  lib: utils/timer: Expose timer update function
  platform: sifive: Add SiFive SMC0 driver

Vincent Chen (1):
  utils: cache: Add SiFive ccache controller

 include/sbi/sbi_hart.h                        |   4 +
 include/sbi_utils/cache/cache.h               |  69 +++
 include/sbi_utils/cache/fdt_cache.h           |  34 ++
 include/sbi_utils/cache/fdt_cmo_helper.h      |  34 ++
 include/sbi_utils/hsm/fdt_hsm_sifive_inst.h   |  20 +
 include/sbi_utils/hsm/fdt_hsm_sifive_tmc0.h   |  19 +
 include/sbi_utils/ipi/aclint_mswi.h           |   1 +
 include/sbi_utils/irqchip/aplic.h             |   3 +
 .../suspend/fdt_suspend_sifive_smc0.h         |  18 +
 include/sbi_utils/timer/aclint_mtimer.h       |   5 +
 lib/sbi/sbi_hart.c                            |   2 +
 lib/utils/Kconfig                             |   2 +
 lib/utils/cache/Kconfig                       |  23 +
 lib/utils/cache/cache.c                       |  46 ++
 lib/utils/cache/fdt_cache.c                   |  87 ++++
 lib/utils/cache/fdt_cache_drivers.carray      |   3 +
 lib/utils/cache/fdt_cmo_helper.c              | 112 +++++
 lib/utils/cache/fdt_sifive_ccache.c           | 175 +++++++
 lib/utils/cache/objects.mk                    |  14 +
 lib/utils/hsm/Kconfig                         |   5 +
 lib/utils/hsm/fdt_hsm_sifive_tmc0.c           | 468 ++++++++++++++++++
 lib/utils/hsm/objects.mk                      |   2 +
 lib/utils/ipi/aclint_mswi.c                   |   5 +
 lib/utils/irqchip/aplic.c                     | 160 +++---
 lib/utils/suspend/Kconfig                     |   4 +
 lib/utils/suspend/fdt_suspend_sifive_smc0.c   | 323 ++++++++++++
 lib/utils/suspend/objects.mk                  |   3 +
 lib/utils/timer/aclint_mtimer.c               |  28 +-
 platform/generic/Kconfig                      |   5 +
 platform/generic/configs/defconfig            |   5 +
 platform/generic/platform.c                   |   3 +-
 platform/generic/sifive/objects.mk            |   3 +
 platform/generic/sifive/sifive_dev_platform.c |  57 +++
 33 files changed, 1667 insertions(+), 75 deletions(-)
 create mode 100644 include/sbi_utils/cache/cache.h
 create mode 100644 include/sbi_utils/cache/fdt_cache.h
 create mode 100644 include/sbi_utils/cache/fdt_cmo_helper.h
 create mode 100644 include/sbi_utils/hsm/fdt_hsm_sifive_inst.h
 create mode 100644 include/sbi_utils/hsm/fdt_hsm_sifive_tmc0.h
 create mode 100644 include/sbi_utils/suspend/fdt_suspend_sifive_smc0.h
 create mode 100644 lib/utils/cache/Kconfig
 create mode 100644 lib/utils/cache/cache.c
 create mode 100644 lib/utils/cache/fdt_cache.c
 create mode 100644 lib/utils/cache/fdt_cache_drivers.carray
 create mode 100644 lib/utils/cache/fdt_cmo_helper.c
 create mode 100644 lib/utils/cache/fdt_sifive_ccache.c
 create mode 100644 lib/utils/cache/objects.mk
 create mode 100644 lib/utils/hsm/fdt_hsm_sifive_tmc0.c
 create mode 100644 lib/utils/suspend/fdt_suspend_sifive_smc0.c
 create mode 100644 platform/generic/sifive/sifive_dev_platform.c

--
2.17.1

--
opensbi mailing list
opensbi at lists.infradead.org
http://lists.infradead.org/mailman/listinfo/opensbi

To: opensbi at lists.infradead.org

---
Nick Hu (10):
      lib: utils: Add cache flush library
      lib: utils: Add FDT cache library
      lib: utils/cache: Add fdt cmo helpers
      lib: sbi: Add SiFive proprietary xsfcflushdlone
      lib: sbi: Add SiFive proprietary xsfcease
      lib: utils/ipi: Exposing the ACLINT IPI device
      lib: utils/irqchip: Add APLIC restore function
      platform: sifive: Add SiFive TMC0 driver
      lib: utils/timer: Expose timer update function
      platform: sifive: Add SiFive SMC0 driver

Vincent Chen (1):
      utils: cache: Add SiFive ccache controller

 include/sbi/sbi_hart.h                             |   4 +
 include/sbi_utils/cache/cache.h                    |  69 ++++
 include/sbi_utils/cache/fdt_cache.h                |  34 ++
 include/sbi_utils/cache/fdt_cmo_helper.h           |  40 ++
 include/sbi_utils/hsm/fdt_hsm_sifive_inst.h        |  20 +
 include/sbi_utils/hsm/fdt_hsm_sifive_tmc0.h        |  14 +
 include/sbi_utils/ipi/aclint_mswi.h                |   1 +
 include/sbi_utils/irqchip/aplic.h                  |   3 +
 .../sbi_utils/suspend/fdt_suspend_sifive_smc0.h    |  18 +
 include/sbi_utils/timer/aclint_mtimer.h            |   5 +
 lib/sbi/sbi_hart.c                                 |   2 +
 lib/utils/Kconfig                                  |   2 +
 lib/utils/cache/Kconfig                            |  23 ++
 lib/utils/cache/cache.c                            |  46 +++
 lib/utils/cache/fdt_cache.c                        |  87 +++++
 lib/utils/cache/fdt_cache_drivers.carray           |   3 +
 lib/utils/cache/fdt_cmo_helper.c                   | 112 ++++++
 lib/utils/cache/fdt_sifive_ccache.c                | 175 +++++++++
 lib/utils/cache/objects.mk                         |  14 +
 lib/utils/hsm/Kconfig                              |   5 +
 lib/utils/hsm/fdt_hsm_sifive_tmc0.c                | 405 +++++++++++++++++++++
 lib/utils/hsm/objects.mk                           |   3 +
 lib/utils/ipi/aclint_mswi.c                        |   5 +
 lib/utils/irqchip/aplic.c                          | 160 ++++----
 lib/utils/suspend/Kconfig                          |   4 +
 lib/utils/suspend/fdt_suspend_sifive_smc0.c        | 323 ++++++++++++++++
 lib/utils/suspend/objects.mk                       |   3 +
 lib/utils/timer/aclint_mtimer.c                    |  28 +-
 platform/generic/configs/defconfig                 |   4 +
 platform/generic/platform.c                        |   3 +-
 30 files changed, 1540 insertions(+), 75 deletions(-)
---
base-commit: 1ffbd063c4da252f59cc570e537a3c8821ed6967
change-id: 20250829-cache-upstream-93730838a1a6
prerequisite-message-id: <20250904052410.546818-1-apatel at ventanamicro.com>
prerequisite-patch-id: 32105a5311c0318d3142ef94171e3eebc97e46bf
prerequisite-patch-id: 977e729132da2347796423fbb01ffe8ac016c192
prerequisite-patch-id: aad5e5f724eb0873af11780a85607285adec7eb9

Best regards,
-- 
Nick Hu <nick.hu at sifive.com>




More information about the opensbi mailing list