Re: [PATCH v8 2/5] iio: adc: add Versal SysMon driver
From: Erim, Salih
Date: Wed Jun 17 2026 - 12:23:33 EST
Hi Andy,
On 17/06/2026 15:52, Andy Shevchenko wrote:
On Tue, Jun 16, 2026 at 02:15:56PM +0100, Salih Erim wrote:
Add the core driver and MMIO platform driver for the AMD/Xilinx Versal
System Monitor (SysMon) block.
The SysMon block resides in the platform management controller (PMC) and
provides on-chip voltage and temperature monitoring through a 10-bit,
200 kSPS ADC. It can monitor up to 160 voltage channels and 64
temperature satellites distributed across the SoC, with a consistent
sample rate of 8 kSPS per channel regardless of how many channels are
enabled.
The hardware also provides four aggregate temperature registers that
are always present regardless of the device tree configuration: the
current max and min across all active satellites, and the peak and
trough values recorded since the last hardware reset.
The driver is split into two compilation units:
- versal-sysmon-core: Channel parsing, IIO registration, read_raw
- versal-sysmon: MMIO platform driver with custom regmap accessors
Voltage results are stored in a 19-bit modified floating-point format
and converted to millivolts. Temperature results are stored in Q8.7
signed fixed-point Celsius format and converted to millicelsius.
The MMIO regmap backend uses a custom reg_write accessor that
automatically unlocks the NPI (NoC programming interface) lock
register before each write, as required by the hardware. The regmap
is configured with fast_io since the underlying MMIO accessors are
safe to call from atomic context.
Reviewed-by: Andy Shevchenko <andriy.shevchenko@xxxxxxxxx>
with a caveat of using namespaced exports (see below).
Thank you for the review!
...
+EXPORT_SYMBOL_GPL(devm_versal_sysmon_core_probe);
Please, also use symbol namespace.
Will use EXPORT_SYMBOL_NS_GPL(devm_versal_sysmon_core_probe, "VERSAL_SYSMON") and add MODULE_IMPORT_NS("VERSAL_SYSMON") to both platform and I2C drivers.
...
+static int sysmon_mmio_reg_read(void *context, unsigned int reg,
+ unsigned int *val)
Make it a single line. It will be more readable.
static int sysmon_mmio_reg_read(void *context, unsigned int reg, unsigned int *val)
Done.
...
+static int sysmon_mmio_reg_write(void *context, unsigned int reg,
+ unsigned int val)
In the similar way.
static int sysmon_mmio_reg_write(void *context, unsigned int reg, unsigned int val)
Done.
Thanks,
Salih
In both cases it's only 83 characters.
--
With Best Regards,
Andy Shevchenko