Re: [PATCH v7 00/23] Introduce SCMI Telemetry support
Subrahmanya Lingappa <[email protected]> Wed, 5 Aug 2026 10:51:51 +0530
| Newsgroups | gmane.linux.kernel,gmane.linux.ports.arm.kernel,gmane.linux.documentation |
|---|---|
| Message-ID | <CAPxK-6eoSguQXkQyhoKkxos89BL4Y5f43ntv8MAY7xoiNmMeYQ@mail.gmail.com> |
Cristian and David, On Sun, Aug 2, 2026 at 8:27 PM Cristian Marussi <[email protected]> wrote: > > Hi all, > > [TLDR Summary] > [V7 highlights] > - V7 focus was on making the ABI complete feature-wise by adding: > + UUID enumerations > + BATCHED DE_CFG > + BATCH ops with per-DE status > + Generic EVENT Subscription with GENERATION_COUNTER support > + Better UAPI Doxygen docs > + Reserved space to grow scattered all-over > - V7 cleans up all the residual known sparse issues > - While aiming for ABI-completeness, V7 addressed also a few reported > general driver/protocol issues BUT the bulk of remanining Sashiko-V6 > complains are still to be tackled > > [V8 TODO (getting merge-able)] > - Tackle outstanding Sashiko issues > - [ABI]: more DOCS and examples > > The upcoming SCMI v4.0 specification [0] introduces a new SCMI protocol > dedicated to System Telemetry. > > In a nutshell, the SCMI Telemetry protocol allows an agent to discover at > runtime the set of Telemetry Data Events (DEs) available on a specific > platform and provides the means to configure the set of DEs that a user is > interested into, while reading them back using the collection method that > is deeemed more suitable for the usecase at hand. (...amongst the various > possible collection methods allowed by SCMI specification) > > Without delving into the gory details of the whole SCMI Telemetry protocol > let's just say that the SCMI platform/server firmware advertises a number > of Telemetry Data Events, each one identified by a 32bit unique ID, and an > SCMI agent/client, like Linux, can discover them and read back at will the > associated data value in a number of ways. > > Data collection is mainly intended to happen on demand via shared memory > areas exposed by the platform firmware, discovered dynamically via SCMI > Telemetry and accessed by Linux on-demand, but some DE can also be reported > via SCMI Notifications asynchronous messages or via direct dedicated > FastChannels (another kind of SCMI memory based access): all of this > underlying mechanism is anyway hidden to the user since it is mediated by > the kernel driver which will return the proper data value when queried. > > Anyway, the set of well-known architected DE IDs defined by the spec is > limited to a dozen IDs, which means that the vast majority of DE IDs are > customizable per-platform: as a consequence, though, the same ID, say > '0x1234', could represent completely different things on different systems. > > Precise definitions and semantic of such custom Data Event IDs are out of > the scope of the SCMI Telemetry specification and of this implementation: > they are supposed to be provided using some kind of JSON-like description > file that will have to be consumed by a userspace tool which would be > finally in charge of making sense of the set of available DEs. > > IOW, in turn, this means that even though the DEs enumerated via SCMI come > with some sort of topological and qualitative description provided by the > protocol (like unit of measurements, name, topology info etc), kernel-wise > we CANNOT be completely sure of "what is what" without being fed-back some > sort of information about the DEs by the afore mentioned userspace tool. > > For these reasons, currently this series does NOT attempt to register any > of these DEs with any of the usual in-kernel subsystems (like HWMON, IIO, > PERF etc), simply because we cannot be sure which DE is suitable, or even > desirable, for a given subsystem. This also means there are NO in-kernel > users of these Telemetry data events as of now. > > So, while we do not exclude, for the future, to feed/register some of the > discovered DEs to/with some of the above mentioned Kernel subsystems, as > of now we have ONLY modeled a custom userspace API to make SCMI Telemetry > available to userspace tools. > > With V5 we adopted a pure chardev/IOCTL ABI approach, refining the IOCTL > based interface already present with the previous FS-based ABI. > > INTERFACES > > For each discovered SCMI Instance a character device named tlm_<N> is > created under /dev/scmi/ subtree. > > The IOCTL interface described at 'include/uapi/linux/scmi.h' is made > available to enumerate and configure Telemetry resources: Telemetry data > can be collected using a few different IOCTls, depending on the required > granularity. > > Alternatively it is possible to obtain a list of the file descriptors > referencing directly the underlying SCMI Telemetry SHMTI memory areas and > implement in user space an SCMI Telemetry parser accessing directly the > SHMTI, while staying in compliance with the SCMI TDCF format. > > NOTE THAT from v3 onwards the firmware interface level NOW supports ONLY > the latest SCMI v4.0 specification [0]. > > Based on V7.2-rc4, tested on an emulated setup. > > This series is available also at [1]. > > If you still reading...any feedback welcome :P > > Thanks, > Cristian > > --- > v6 --> v7 > - [ABI] IOCTL EVENTS support: GENERATION COUNTER (stlm monitor) > - [ABI] expose DE tracking: UUID/SHMTI/OFFS > - [ABI] IOCTL BATCHED DE_CFG > - [ABI] added per-DE IOCTL BATCH status > - [ABI] new ABI feats flags > - [ABI] improved description in Doxygen docs > - [ABI] added reserved space to grow > - [STLM] added new ABI feats support (generation, UUIDs, location...) > - [SYS/TLM] fixed module_init error path > - [SYS/TLM] fixed interval DISCRETE flags reporting > - [SYS/TLM] check open FMODE before executing a config change > - [SYS/TLM] fixing DEs data cleanup on RESET > - [SYS/TLM] added _RAW helpers to handle non-MMIO TDCF-like accesses > (like Notification payload) > - [SYS/TLM] added UUID rescan logic at DE enable, when DE/UUID association > - [TLM] reworked UUID internal handling (endianity) and use uuid_t type > - [TLM] added generic Telemetry protocol support for events subscription > unknown > - residual sparse fixes > v5 --> v6 > - rebased on v7.2-rc4 > - fixed a lot of Sashiko complains > - fixed ABI issues reported by review (Fayssal) > - added IOCTL TLM_RESET > - added ABI versioning > - added compat_ioctl support > - use a new IOCTL magic name > - better handling of UUID endianity > - reworked all bounds checks in UAPI implementation > - reject oversized SHMTI mmap request > - refined 'stlm' testing tool to be more interactive and to > exercise the full spectrum of IOCTLs ('stlm -h' is your manual > for now :P) > - fully reworked per-protocol notification handling > - dropped the last bit of human readable data attached to the > chardev .read > v4 --> v5 > - rebased on v7.2-rc1 > - dropped FileSystem based driver > - introduced a new simple chardev SCMI driver using Telemetry > - reworked/reviewed the v4 IOCTLs based UAPI > - UAPI: better struct alignment and comments > - UAI: Removed flexible array members > - UAPI: make SCMI Telemetry protocol stack completely independent from > uapi defs > - UAPI: new ioctls support to enable RAW mmap direct access to SCMI SHMTI > areas from userspace > - added new ABI Documentation > - added new SCMI core facility to lookup the current SCMI instance ID > v3 --> v4 > - rebased on v7.1-rc7 > - updatded doc to detail Concurrency model > - bail out on FW_BUG errors > - make all_des_enable/all_des_tstamp_enable entry readable > - refactored access to TDE values > - refactored common accessors for tlm_priv (FIX WARN on kfree) > - make all files by default world readable and user writable (if needed) > - added uid/god/umask mount options (and docs) > - added generation counter to aid spotting config changes (and docs) > - added DebugFS configurable support to debug/dump SHMTI areas (and docs) > - hide FS entries when NOT supported (like des_simple_sample_read) > - fixed output format of des/<NNN>/value to -> <TS> <VALUE> > - renamed top-dir by_components to by-components > - add a .remove method to SCMI System Telemetry Driver > - use kzalloc_obj > V2 --> V3 > - rebased on v7.0-rc5 > - ported the firmware interface to SCMI v4.0 BETA > - split the SCMI protocol layer in a lot of small patches > - completd filesystem and ABI documentation > - renamed components subtree to by_components > - fixed uninitialized var in scmi_telemetry_de_subdir_symlink > - renamd tstamp_exp to tstamp_rate > - swap logic in scmi_telemetry_initial_state_lookup > - use memcpy_from_le32 where required > - changed a dfew dev_err into Telemetry traces > - define and use new helper scmi_telemetry_de_unlink > - simplify a few assignments with ternary ops > - added a missing __mmust_check on the internal SCMI API > - reworked and clarified de_data_read returned errno: > ENODATA vs EINVAL vs ENODEV/ENOENT > - removed some risky/unneeded devres allocations > - various checkpatch fixes > - reworked and clarified usage of traces in Telemetry > - added the missing DT binding for protocol 0x1B > - split out unrelated change around notification from patch > adding support for protocol internal notifier > - more comments > > V1 --> V2 > - rebased on v6.19-rc3 > - harden TDCF shared memory areas accesses by using proper accessors > - reworked protocol resources lifecycle to allow lazy enumeration > - using NEW FS mount API > - reworked FS inode allocation to use a std kmem_cache > - fixed a few IOCTLs support routine to support lazy enumeration > - added (RFC) a new FS lazy mount option to support lazily population of > some subtrees of the FS (des/ groups/ components/) > - reworked implementation of components/ alternative FS view to use > symlinks instead of hardlinks > - added a basic simple (RFC) testing tool to exercise UAPI ioctls interface > - hardened Telmetry protocol and driver to support partial out-of-spec FW > lacking some cmds (best effort) > - reworked probing races handling > - reviewed behaviour on unmount/unload > - added support for Boot_ON Telemetry by supporting SCMI Telemetry cmds: > + DE_ENABLED_LIST > + CONFIG_GET > - added FS and ABI docs > > RFC --> V1 > --- > - moved from SysFS/chardev to a full fledged FS > - added support for SCMI Telemetry BLK timestamps > > [0]: https://developer.arm.com/documentation/den0056/f/?lang=en > [1]: https://git.kernel.org/pub/scm/linux/kernel/git/cris/linux.git/log/?h=scmi_telemetry_ng_V7 > > Cristian Marussi (23): > firmware: arm_scmi: Add new SCMIv4.0 error codes definitions > firmware: arm_scmi: Allow registration of unknown-size events/reports > firmware: arm_scmi: Introduce protocol instance notifiers > dt-bindings: firmware: arm,scmi: Add support for telemetry protocol > include: trace: Add Telemetry trace events > firmware: arm_scmi: Add basic Telemetry support > firmware: arm_scmi: Add support to parse SHMTIs areas > firmware: arm_scmi: Add Telemetry configuration operations > firmware: arm_scmi: Add Telemetry DataEvent read capabilities > firmware: arm_scmi: Add support for Telemetry reset > firmware: arm_scmi: Add Telemetry notification support > firmware: arm_scmi: Add support for boot-on Telemetry > firmware: arm-scmi: Add telemetry generic event support > firmware: arm_scmi: Add Telemetry generation counter event > firmware: arm_scmi: Add common per-protocol debugfs support > firmware: arm_scmi: Add Telemetry debugfs SHMTI dump support > firmware: arm_scmi: Add Telemetry debugfs ABI documentation > firmware: arm_scmi: Expose per-instance identifier > uapi: Add ARM SCMI Telemetry definitions > firmware: arm_scmi: Add System Telemetry driver > docs: ioctl-number: Add SCMI Ioctls > [RFC] Documentation: Add SCMI System Telemetry documentation > [RFC] tools/scmi: Add SCMI Telemetry testing tool > > Documentation/ABI/testing/debugfs-scmi | 22 + > .../bindings/firmware/arm,scmi.yaml | 8 + > Documentation/userspace-api/index.rst | 1 + > .../userspace-api/ioctl/ioctl-number.rst | 1 + > Documentation/userspace-api/stlm.rst | 148 + > MAINTAINERS | 1 + > drivers/firmware/arm_scmi/Kconfig | 24 + > drivers/firmware/arm_scmi/Makefile | 3 +- > drivers/firmware/arm_scmi/common.h | 18 + > drivers/firmware/arm_scmi/driver.c | 119 +- > drivers/firmware/arm_scmi/notify.c | 38 +- > drivers/firmware/arm_scmi/notify.h | 8 +- > drivers/firmware/arm_scmi/protocols.h | 17 + > .../firmware/arm_scmi/scmi_system_telemetry.c | 1515 +++++++ > drivers/firmware/arm_scmi/telemetry.c | 3762 +++++++++++++++++ > include/linux/scmi_protocol.h | 261 +- > include/trace/events/scmi.h | 48 +- > include/uapi/linux/scmi.h | 517 +++ > tools/testing/scmi/Makefile | 25 + > tools/testing/scmi/stlm.c | 1371 ++++++ > 20 files changed, 7877 insertions(+), 30 deletions(-) > create mode 100644 Documentation/userspace-api/stlm.rst > create mode 100644 drivers/firmware/arm_scmi/scmi_system_telemetry.c > create mode 100644 drivers/firmware/arm_scmi/telemetry.c > create mode 100644 include/uapi/linux/scmi.h > create mode 100644 tools/testing/scmi/Makefile > create mode 100644 tools/testing/scmi/stlm.c > > -- > 2.54.0 > > Just to close the loop on my earlier comment: the second telemetry provider I had in mind is now public, RISC-V RPMI Specifications Telemetry service group: https://github.com/riscv-non-isa/riscv-rpmi/pull/162 V7 has already moved the SCMI ABI in a better direction: explicit ABI features, reserved growth space, UUID tracking, batched operations, per-item status and a generation event make the interface less brittle than the version I first commented on. So I am not asking to block SCMI Telemetry on a generic telemetry UAPI. That would still be premature. My remaining ask is smaller: please keep the chardev-facing descriptor/group/config/sample/mmap handling cleanly separated from SCMI-private storage and TDCF parsing. The RPMI proposal has a similar kernel-side shape: telemetry elements, groups, sampling rates, metadata, shared memory, timestamps and sequence/freshness handling. The protocol details differ, but the Linux plumbing need not be entirely duplicated if a second provider appears later. With that boundary in place, SCMI can proceed with an SCMI-specific ABI now, while leaving a practical path to share internal telemetry plumbing later if RPMI grows into a Linux provider. Thanks, Subrahmanya