| From: |
| Daniel Lezcano <daniel.lezcano-AT-linaro.org> |
| To: |
| wbg-AT-kernel.org |
| Subject: |
| [PATCH v5 0/3] Add the System Timer Module counter |
| Date: |
| Tue, 13 Jan 2026 17:52:17 +0100 |
| Message-ID: |
| <20260113165220.1599038-1-daniel.lezcano@linaro.org> |
| Cc: |
| Frank.li-AT-nxp.com, robh-AT-kernel.org, conor+dt-AT-kernel.org, krzk+dt-AT-kernel.org, s32-AT-nxp.com, devicetree-AT-vger.kernel.org, linux-kernel-AT-vger.kernel.org, linux-iio-AT-vger.kernel.org |
| Archive-link: |
| Article |
The NXP S32 family provides a System Timer Module (STM), a 32-bit
free-running counter clocked from a peripheral clock. The STM includes
a prescaler and one or more compare channels generating optional
interrupts. When used as a generic hardware counter, only the main
free-running counter is required, while the compare channels are
typically unused.
On S32G2 devices, the STM is exposed as a simple counter block that
can operate continuously and be shared across subsystems such as the
Linux kernel, firmware components running on Cortex-M7 cores, or other
co-processors. The counter can be read atomically and provides a
stable timestamp source to correlate events occurring in different
execution contexts.
The Linux kernel controls the STM through a memory-mapped interface,
configuring the prescaler, enabling or disabling the counter, and
accounting for wrap-arounds. Other subsystems access the counter in
read-only mode, making it a shared timestamp reference across the
platform.
This driver adds support for the STM when used as a counter on S32G2
platforms. The device is described in the device tree using the
following compatible:
compatible = "nxp,s32g2-stm-cnt";
The driver exposes basic counter functionality: start, stop, reset,
prescaler configuration, and overflow handling.
Changelog:
* v5
- Use a lockless version to implement accumulated time (Frank Li)
* v4
- Split context structure to suspend/resume
- Converted counter to a u64 to accumulate the time
- Replaced 'reset' to a count write to reset (William Breathitt Gray)
- Added events for userspace (William Breathitt Gray)
- Added action COUNTER_SYNAPSE_ACTION_RISING_EDGE for signal (William Breathitt Gray)
- Renamed counter name to "System Timer Module Counter" (William Breathitt Gray)
* v3
- Fixed compatible typo "nxp,s32g2-stm" to "nxp,s32g2-stm-cnt"
* v2
- Added Rob's tag
** kbuild
- Reordered alphabetically the headers
- Added bitfield.h header
- Use DEFINE_SIMPLE_DEV_PM_OPS() and pm_sleep_ptr()
Daniel Lezcano (3):
counters: Reorder the Makefile
dt-bindings: counter: Add NXP System Timer Module Counter
counter: Add STM based counter
.../bindings/counter/nxp,s32g2-stm-cnt.yaml | 64 +++
arch/arm64/boot/dts/freescale/s32g2.dtsi | 6 +-
.../boot/dts/freescale/s32g274a-rdb2.dts | 10 +-
drivers/counter/Kconfig | 10 +
drivers/counter/Makefile | 21 +-
drivers/counter/nxp-stm-cnt.c | 432 ++++++++++++++++++
6 files changed, 524 insertions(+), 19 deletions(-)
create mode 100644 Documentation/devicetree/bindings/counter/nxp,s32g2-stm-cnt.yaml
create mode 100644 drivers/counter/nxp-stm-cnt.c
--
2.43.0