Add driver support for ESWIN EIC7700 PVT controller
Subsystems (2)
v9 cover Add driver support for ESWIN EIC7700 PVT controller
From: Xuyang Dong <[email protected]>
Add support for the ESWIN EIC7700 PVT (Voltage, Temperature) sensor
Features:
The driver supports monitoring of voltage and temperature parameters through the hardware monitoring subsystem. It provides an access to the sampled Temperature and Voltage.
Test:
Tested this patch on the SiFive HiFive Premier P550 (which uses the ESWIN EIC7700 SoC).
Updates:
Changes in v9:
- Taking over from Huan He <[email protected]>, who has left the company and whose email is no longer reachable.
Huan He's Signed-off-by tag is retained to acknowledge the original contribution.
- Update eswin,eic7700-pvt.yaml
- Add 'Reviewed-by: Conor Dooley <[email protected]>' tag.
- Update eic7700-pvt.c and eic7700-pvt.h
- Remove config HWMON.
- Add eic7700_pvt_set_trim(pvt, PVT_TRIM_DEF) in eic7700_pvt_runtime_resume(). Re-apply the trim values to prevent incorrect sensor readings upon wake (Sashiko review of v8).
- Link to v8: https://lore.kernel.org/all/[email protected]/
Changes in v8:
- Update eswin,eic7700-pvt.yaml
- Delete reviewed-by tag of Krzysztof Kozlowski due to functional changes. Add the APB clock because when the kernel is booted with CMDLINE option "clk_ignore_unused", the APB clock remains enabled by default; without this option, the APB clock may be gated and the PVT driver will not operate correctly
- Update eic7700-pvt.c and eic7700-pvt.h
- Add APB clock support and retrieve clocks using devm_clk_bulk_get()
- Update eic7700_pvt_hard_isr() to verify PVT_INT_STAT before clearing the interrupt and completing a conversion, preventing spurious interrupts from returning stale data or completing a conversion early
- Update eic7700_pvt_probe() to register the PM runtime cleanup action before requesting the IRQ, so the IRQ is torn down before clocks are disabled during driver removal, preventing a possible use-after-disable of the hardware clock in the ISR
- Link to v7: https://lore.kernel.org/all/[email protected]/
Changes in v7:
- Remove the unused reset control pointer from struct pvt_hwmon and keep the reset control handle local to eic7700_pvt_probe()
- Update eic7700_pvt_init_iface() to disable PVT_ENA_EN before clearing the interrupt status, preventing a possible level-triggered interrupt storm if the bootloader leaves the conversion engine running
- Update eic7700_pvt_disable_pm_runtime() to explicitly disable runtime PM and avoid an unbalanced disable_depth
- Link to v6: https://lore.kernel.org/all/[email protected]/
Changes in v6:
- Fix the !CONFIG_PM probe error path by disabling the clock if IRQ request fails before the PM cleanup action is registered
- Replace pm_runtime_put_noidle() with pm_runtime_put() in the IRQ handler to avoid a runtime PM reference-count race with the read path
- Remove the unused pvt_clear_data() devres action and its associated devm_add_action() registration
- Link to v5: https://lore.kernel.org/all/[email protected]/
Changes in v5:
- Update eswin,eic7700-pvt.yaml
- Drop the label enum constraint and remove label from the required list
- Add '#thermal-sensor-cells' to the required list
- Rename the example node to the generic sensor@... form
- Update the binding description to describe one temperature sensor and one voltage sensor
- Update eic7700-pvt.c
- Register the hwmon device with the fixed name "pvt"
- Remove label-based instance identification from the driver
- Fix CONFIG_PM=n support by keeping the clock enabled when runtime PM is unavailable
- Add pm_runtime_force_suspend() in the cleanup path to avoid leaving the device active during unbind
- Switch system sleep callbacks to pm_runtime_force_suspend() and pm_runtime_force_resume()
- Guard ISR register accesses with pm_runtime_get_if_active()
- Add synchronize_irq() on the timeout path to avoid stale completion races
- Remove temp_offset support because the raw trim register does not match the hwmon ABI
- Align the commit message with the implementation (one temperature sensor, one voltage sensor)
- Link to v4: https://lore.kernel.org/all/[email protected]/
Changes in v4:
- Update eswin,eic7700-pvt.yaml
- Delete reviewed-by tag of Conor Dooley, because the label enum constraint is introduced
- Update eic7700-pvt.c and eic7700-pvt.h
- Remove the unused LVT/ULVT/SVT process-monitoring channels
- Remove the probe-time power check since the PVT block is always powered on EIC7700 and the extra verification is unnecessary
- Stop requesting the interrupt as shared and use the dedicated PVT IRQ only
- Reorder probe initialization so the interface is initialized before the clock is disabled, avoiding register accesses with the clock gated
- Fix runtime PM reference handling on error paths by balancing pm_runtime_get_noresume() with pm_runtime_put_noidle()
- Add pm_runtime_put_noidle() handling for failed pm_runtime_get_sync() calls in hwmon read/write paths
- Switch the PM callback registration from pm_sleep_ptr() to pm_ptr()
- Link to v3: https://lore.kernel.org/all/[email protected]/
Changes in v3:
- Update eswin,eic7700-pvt.yaml
- Remove redundant label property description and use 'label: true' to reference the definition in hwmon-common.yaml
- Replace 'additionalProperties: false' with 'unevaluatedProperties: false'
- Remove the description for '#thermal-sensor-cells'
- Update eic7700-pvt.c and eic7700-pvt.h
- Fix clock reference count imbalance with Runtime PM:
Replace devm_clk_get_enabled() with devm_clk_get() and manually manage clock enable/disable to avoid double-disable in remove() when Runtime PM is active. Clock is now enabled only during probe for eic7700_pvt_check_pwr(), then disabled before enabling Runtime PM, which takes full control of the clock thereafter
- Add detailed comment explaining the spurious interrupt risk in eic7700_pvt_check_pwr()
- Replace wait_for_completion_interruptible() with wait_for_completion_timeout() to prevent infinite wait
- Link to v2: https://lore.kernel.org/all/[email protected]/
Changes in v2:
- Update eswin,eic7700-pvt.yaml
- Reference the hwmon-common.yaml file
- Remove the clock-names and reset-names properties
- Move additionalProperties: false after the required block
- Remove one example node to avoid redundancy
- Update eic7700-pvt.c and eic7700-pvt.h
- Remove unused sensor macros (PVT_SENSOR_FIRST, PVT_SENSOR_LAST, PVT_SENSORS_NUM)
- Drop the unnecessary hwmon-sysfs.h header
- Replace dynamic sensor info allocation with a static array and unify sensor labels
- Remove unused hwmon_temp_type attribute
- Eliminate redundant validation checks
- Remove mutex and related locking, relying on hwmon core serialization
- Replace per-sensor caches and completions with a single data cache and completion object
- Remove pvt->sensor tracking. ISR no longer depends on the currently selected sensor
- Move devm_add_action() registration after init_completion() for safer cleanup, and update cleanup function (pvt_clear_data)
- Replace devm_reset_control_get_optional_exclusive() with devm_reset_control_get_exclusive_deasserted()
- Replace eic7700_pvt_remove() with eic7700_pvt_disable_pm_runtime() and move it after PM runtime enable to avoid resource leaks on probe failure and remove clock disable and reset assert from eic7700_pvt_disable_pm_runtime() as it is already handled by devm_* framework
- Remove redundant clock presence check in runtime_resume
- Link to v1: https://lore.kernel.org/all/[email protected]/
Huan He (2):
dt-bindings: hwmon: Add Eswin EIC7700 PVT sensor
hwmon: Add Eswin EIC7700 PVT sensor driver
.../bindings/hwmon/eswin,eic7700-pvt.yaml | 72 +++ drivers/hwmon/Kconfig | 11 + drivers/hwmon/Makefile | 1 + drivers/hwmon/eic7700-pvt.c | 509 ++++++++++++++++++ drivers/hwmon/eic7700-pvt.h | 99 ++++ 5 files changed, 692 insertions(+) create mode 100644 Documentation/devicetree/bindings/hwmon/eswin,eic7700-pvt.yaml create mode 100644 drivers/hwmon/eic7700-pvt.c create mode 100644 drivers/hwmon/eic7700-pvt.h
--
2.34.1
PATCH v9 1/2 dt-bindings: hwmon: Add Eswin EIC7700 PVT sensor
From: Huan He <[email protected]>
Add device tree binding documentation for ESWIN EIC7700 Voltage and Temperature sensor.
The EIC7700 SoC integrates two PVT instances for monitoring SoC and DDR power domains respectively.
--- .../bindings/hwmon/eswin,eic7700-pvt.yaml | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 Documentation/devicetree/bindings/hwmon/eswin,eic7700-pvt.yaml
Documentation/devicetree/bindings/hwmon/eswin,eic7700-pvt.yaml new file +72 -0
@@ -0,0 +1,72 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/hwmon/eswin,eic7700-pvt.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: ESWIN EIC7700 PVT Sensor + +maintainers: + - Yulin Lu <[email protected]> + - Huan He <[email protected]> + +description: + ESWIN EIC7700 SoC integrates embedded voltage and temperature sensors to + monitor the internal SoC environment. The system includes two PVT sensor + instances. The PVT0 monitors the main SoC power domain. The PVT1 sensor + monitors the DDR core power domain. + +allOf: + - $ref: /schemas/hwmon/hwmon-common.yaml# + +properties: + compatible: + const: eswin,eic7700-pvt + + reg: + maxItems: 1 + + clocks: + items: + - description: PVT enable clock + - description: APB bus clock + + clock-names: + items: + - const: enable + - const: apb + + interrupts: + maxItems: 1 + + resets: + maxItems: 1 + + '#thermal-sensor-cells': + const: 0 + +required: + - compatible + - reg + - clocks + - clock-names + - interrupts + - resets + - '#thermal-sensor-cells' + +unevaluatedProperties: false + +examples: + - | + sensor@50b00000 { + compatible = "eswin,eic7700-pvt"; + reg = <0x50b00000 0x10000>; + clocks = <&clocks 244>, <&clocks 234>; + clock-names = "enable", "apb"; + interrupts = <349>; + interrupt-parent = <&plic>; + label = "pvt0"; + resets = <&reset 111>; + #thermal-sensor-cells = <0>; + }; +...
Signature · 1 line
2.34.1
[email protected]
AI reviewRe: [PATCH v9 1/2] dt-bindings: hwmon: Add Eswin EIC7700 PVT sensor
Sashiko has reviewed this patch and found no issues. It looks great!
Quoted 5 lines
From: Huan He <[email protected]>
Add device tree binding documentation for ESWIN EIC7700 Voltage and Temperature sensor.
Quoted 7 lines
The EIC7700 SoC integrates two PVT instances for monitoring SoC and DDR power domains respectively.
Signed-off-by Yulin Lu <[email protected]>Signed-off-by Huan He <[email protected]>Reviewed-by Conor Dooley <[email protected]>Signed-off-by Xuyang Dong <[email protected]>
Sashiko has reviewed this patch and found no issues. It looks great!
Signature · 1 line
Sashiko AI review · https://sashiko.dev/#/patchset/[email protected]?part=1
Re: [PATCH v9 1/2] dt-bindings: hwmon: Add Eswin EIC7700 PVT sensor
In reply to [email protected]Quoted 5 lines · On Tue, Jun 30, 2026 at 05:11:22PM +0800, [email protected] wrote:
From: Huan He <[email protected]>
Add device tree binding documentation for ESWIN EIC7700 Voltage and Temperature sensor.
Quoted 7 lines
The EIC7700 SoC integrates two PVT instances for monitoring SoC and DDR power domains respectively.
Signed-off-by Yulin Lu <[email protected]>Signed-off-by Huan He <[email protected]>Reviewed-by Conor Dooley <[email protected]>Signed-off-by Xuyang Dong <[email protected]>
Applied.
Thanks,
Guenter
PATCH v9 2/2 hwmon: Add Eswin EIC7700 PVT sensor driver
In reply to [email protected]From: Huan He <[email protected]>
Add support for ESWIN EIC7700 Voltage and Temperature sensor. The driver supports temperature and voltage monitoring with polynomial conversion, and provides sysfs interface for sensor data access.
The PVT IP contains one temperature sensor and one voltage sensor.
--- drivers/hwmon/Kconfig | 11 + drivers/hwmon/Makefile | 1 + drivers/hwmon/eic7700-pvt.c | 509 ++++++++++++++++++++++++++++++++++++ drivers/hwmon/eic7700-pvt.h | 99 +++++++ 4 files changed, 620 insertions(+) create mode 100644 drivers/hwmon/eic7700-pvt.c create mode 100644 drivers/hwmon/eic7700-pvt.h
drivers/hwmon/Kconfig +11 -0
@@ -2067,6 +2067,17 @@ config SENSORS_DME1737 This driver can also be built as a module. If so, the module will be called dme1737. +config SENSORS_EIC7700_PVT + tristate "Eswin EIC7700 Voltage, Temperature sensor driver" + depends on ARCH_ESWIN || COMPILE_TEST + select POLYNOMIAL + help + If you say yes here you get support for Eswin EIC7700 PVT sensor + embedded into the SoC. + + This driver can also be built as a module. If so, the module will be + called eic7700-pvt. + config SENSORS_EMC1403 tristate "SMSC EMC1403/23 thermal sensor" depends on I2C
drivers/hwmon/Makefile +1 -0
@@ -72,6 +72,7 @@ obj-$(CONFIG_SENSORS_DME1737) += dme1737.o obj-$(CONFIG_SENSORS_DRIVETEMP) += drivetemp.o obj-$(CONFIG_SENSORS_DS620) += ds620.o obj-$(CONFIG_SENSORS_DS1621) += ds1621.o +obj-$(CONFIG_SENSORS_EIC7700_PVT) += eic7700-pvt.o obj-$(CONFIG_SENSORS_EMC1403) += emc1403.o obj-$(CONFIG_SENSORS_EMC1812) += emc1812.o obj-$(CONFIG_SENSORS_EMC2103) += emc2103.o
drivers/hwmon/eic7700-pvt.c new file +509 -0
509 lines not on this page · raw message
drivers/hwmon/eic7700-pvt.h new file +99 -0
99 lines not on this page · raw message
Signature · 1 line
2.34.1
[email protected]
AI reviewRe: [PATCH v9 2/2] hwmon: Add Eswin EIC7700 PVT sensor driver
Sashiko has reviewed this patch and found no issues. It looks great!
Quoted 11 lines
From: Huan He <[email protected]>
Add support for ESWIN EIC7700 Voltage and Temperature sensor. The driver supports temperature and voltage monitoring with polynomial conversion, and provides sysfs interface for sensor data access.
The PVT IP contains one temperature sensor and one voltage sensor.
Signed-off-by Yulin Lu <[email protected]>Signed-off-by Huan He <[email protected]>Signed-off-by Xuyang Dong <[email protected]>
Sashiko has reviewed this patch and found no issues. It looks great!
Signature · 1 line
Sashiko AI review · https://sashiko.dev/#/patchset/[email protected]?part=2
Re: [PATCH v9 2/2] hwmon: Add Eswin EIC7700 PVT sensor driver
In reply to [email protected]Quoted 11 lines · On Tue, Jun 30, 2026 at 05:12:20PM +0800, [email protected] wrote:
From: Huan He <[email protected]>
Add support for ESWIN EIC7700 Voltage and Temperature sensor. The driver supports temperature and voltage monitoring with polynomial conversion, and provides sysfs interface for sensor data access.
The PVT IP contains one temperature sensor and one voltage sensor.
Signed-off-by Yulin Lu <[email protected]>Signed-off-by Huan He <[email protected]>Signed-off-by Xuyang Dong <[email protected]>
Applied.
Thanks,
Guenter