Skip to content

Add driver support for ESWIN EIC7700 PVT controller

[email protected] linux-devicetree linux-hwmon lkml sashiko-reviews 8 versions – In review

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v8 Latest2 patches 4 repliesIn review
  2. v72 patches 2 repliesSuperseded
  3. v62 patches 3 repliesSuperseded
Earlier versions · 5
VersionPostedPatchesRepliesStatus
v52 patches4 repliesSuperseded
v42 patches9 repliesSuperseded
v32 patches4 repliesSuperseded
v22 patches12 repliesSuperseded
v12 patches6 repliesSuperseded

Changes in v8 from the cover letter

- 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

Patches in v8 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/2dt-bindings: hwmon: Add Eswin EIC7700 PVT sensorDocumentation/devicetree/bindings/hwmon/eswin,eic7700-pvt.yaml+72 -01 reply
2/2hwmon: Add Eswin EIC7700 PVT sensor driverdrivers/hwmon/Kconfig drivers/hwmon/Makefile drivers/hwmon/eic7700-pvt.c +1 more+619 -03 replies

Reviews trailers per patch

1 of 2 patches has a Reviewed-by or Acked-by.

PatchConor Dooley
1/2R-b
2/2

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes.

Read the v8 thread

Cover letter [PATCH v8 0/2] Add driver support for ESWIN EIC7700 PVT controller

From: Huan He <[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 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

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

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

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)

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()

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

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                         |  12 +
 drivers/hwmon/Makefile                        |   1 +
 drivers/hwmon/eic7700-pvt.c                   | 507 ++++++++++++++++++
 drivers/hwmon/eic7700-pvt.h                   |  99 ++++
 5 files changed, 691 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
Signature · 1 line
2.34.1