public inbox for devicetree@vger.kernel.org
 help / color / mirror / Atom feed
From: Oleksij Rempel <o.rempel@pengutronix.de>
To: Guenter Roeck <linux@roeck-us.net>, Rob Herring <robh@kernel.org>,
	Krzysztof Kozlowski <krzk+dt@kernel.org>,
	Conor Dooley <conor+dt@kernel.org>, Lee Jones <lee@kernel.org>,
	Peter Rosin <peda@axentia.se>, Linus Walleij <linusw@kernel.org>
Cc: kernel@pengutronix.de, linux-kernel@vger.kernel.org,
	devicetree@vger.kernel.org, linux-hwmon@vger.kernel.org,
	linux-gpio@vger.kernel.org, David Jander <david@protonic.nl>
Subject: Re: [PATCH v10 0/6] mfd: Add support for NXP MC33978/MC34978 MSDI
Date: Thu, 2 Apr 2026 22:09:57 +0200	[thread overview]
Message-ID: <ac7NFT818QvR9EWK@pengutronix.de> (raw)
In-Reply-To: <20260402174349.3220518-1-o.rempel@pengutronix.de>

https://sashiko.dev/#/patchset/20260402174349.3220518-1-o.rempel%40pengutronix.de

TL;DR: Sashiko's analysis of the phantom transient fault interrupt is
correct, but the behavior is an acceptable compromise given the hardware
limitations. I would be glad if this driver could be accepted without
additional modifications, as it has already passed human review and
addressed 99% of bot comments.

---

The MC33978/MC34978 hardware's interrupt architecture is problematic:
1. INT_B is clear-on-read for *any* SPI transaction.
2. For persistent faults, INT_B immediately re-asserts if the fault remains.
3. Fault flags are latched and only cleared when the hwmon child reads
   the FAULT register.

If the core driver passed the raw hardware state, the system would hang
in an interrupt storm (INT_B low -> SPI read clears it -> hardware
re-asserts -> repeat).

To prevent this storm, the core implements a software edge-detection
cache. When the hwmon child finally clears the fault latch, the core's
cache gets out of sync. Re-syncing it requires the synthetic wake bit
mentioned in the report, which causes the spurious interrupt edge.

The result is just one extra hwmon wakeup/SPI read when a fault clears.
Working around this would require more complexity. Trading one spurious
interrupt to prevent a hardware interrupt storm is an acceptable cost
for this silicon.

On Thu, Apr 02, 2026 at 07:43:43PM +0200, Oleksij Rempel wrote:
> changes v7:
> - drop gpiolib irq fix and make pinctrl more robust against NULL point
>   dereference.
> 
> This series adds support for the NXP MC33978/MC34978 Multiple Switch Detection
> Interface (MSDI) via the MFD framework.
> 
> Architecture overview:
> * mfd: Core driver handling 2-frame pipelined SPI, regulator sequencing, and
>   linear irq_domain. Harvests status bits from SPI MISO MSB.
> * pinctrl: Exposes 22 physical switch inputs as standard GPIOs. Proxies IRQs to
>   the MFD domain.
> * hwmon: Exposes thermal limits, VBATP/VDDQ voltage boundaries, and dynamic
>   fault alarms.
> * mux: Controls the 24-to-1 AMUX routing analog signals (switch voltages,
>   temperature, VBATP) to an external ADC.
> 
> Initial pinctrl implementation by David Jander, reworked into this MFD
> architecture.
> 
> Best regards,
> Oleksij
> 
> David Jander (1):
>   pinctrl: add NXP MC33978/MC34978 pinctrl driver
> 
> Oleksij Rempel (5):
>   dt-bindings: pinctrl: add NXP MC33978/MC34978 MSDI
>   mfd: add NXP MC33978/MC34978 core driver
>   pinctrl: core: Make pin group callbacks optional for pin-only drivers
>   hwmon: add NXP MC33978/MC34978 driver
>   mux: add NXP MC33978/MC34978 AMUX driver
> 
>  .../bindings/pinctrl/nxp,mc33978.yaml         |  158 +++
>  drivers/hwmon/Kconfig                         |   10 +
>  drivers/hwmon/Makefile                        |    1 +
>  drivers/hwmon/mc33978-hwmon.c                 |  549 +++++++++
>  drivers/mfd/Kconfig                           |   15 +
>  drivers/mfd/Makefile                          |    2 +
>  drivers/mfd/mc33978.c                         | 1088 +++++++++++++++++
>  drivers/mux/Kconfig                           |   14 +
>  drivers/mux/Makefile                          |    2 +
>  drivers/mux/mc33978-mux.c                     |  141 +++
>  drivers/pinctrl/Kconfig                       |   16 +
>  drivers/pinctrl/Makefile                      |    1 +
>  drivers/pinctrl/core.c                        |   41 +-
>  drivers/pinctrl/pinconf.c                     |    9 +-
>  drivers/pinctrl/pinctrl-mc33978.c             | 1008 +++++++++++++++
>  include/linux/mfd/mc33978.h                   |   95 ++
>  16 files changed, 3143 insertions(+), 7 deletions(-)
>  create mode 100644 Documentation/devicetree/bindings/pinctrl/nxp,mc33978.yaml
>  create mode 100644 drivers/hwmon/mc33978-hwmon.c
>  create mode 100644 drivers/mfd/mc33978.c
>  create mode 100644 drivers/mux/mc33978-mux.c
>  create mode 100644 drivers/pinctrl/pinctrl-mc33978.c
>  create mode 100644 include/linux/mfd/mc33978.h
> 
> --
> 2.47.3
> 
> 

-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

  parent reply	other threads:[~2026-04-02 20:10 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-04-02 17:43 [PATCH v10 0/6] mfd: Add support for NXP MC33978/MC34978 MSDI Oleksij Rempel
2026-04-02 17:43 ` [PATCH v11 1/6] dt-bindings: pinctrl: add " Oleksij Rempel
2026-04-02 18:33   ` Rob Herring (Arm)
2026-04-02 17:43 ` [PATCH v11 2/6] mfd: add NXP MC33978/MC34978 core driver Oleksij Rempel
2026-04-02 17:43 ` [PATCH v11 3/6] pinctrl: core: Make pin group callbacks optional for pin-only drivers Oleksij Rempel
2026-04-02 17:43 ` [PATCH v11 4/6] pinctrl: add NXP MC33978/MC34978 pinctrl driver Oleksij Rempel
2026-04-02 17:43 ` [PATCH v11 5/6] hwmon: add NXP MC33978/MC34978 driver Oleksij Rempel
2026-04-02 17:43 ` [PATCH v11 6/6] mux: add NXP MC33978/MC34978 AMUX driver Oleksij Rempel
2026-04-02 20:09 ` Oleksij Rempel [this message]
  -- strict thread matches above, loose matches on Subject: below --
2026-04-01 16:25 [PATCH v10 0/6] mfd: Add support for NXP MC33978/MC34978 MSDI Oleksij Rempel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ac7NFT818QvR9EWK@pengutronix.de \
    --to=o.rempel@pengutronix.de \
    --cc=conor+dt@kernel.org \
    --cc=david@protonic.nl \
    --cc=devicetree@vger.kernel.org \
    --cc=kernel@pengutronix.de \
    --cc=krzk+dt@kernel.org \
    --cc=lee@kernel.org \
    --cc=linusw@kernel.org \
    --cc=linux-gpio@vger.kernel.org \
    --cc=linux-hwmon@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@roeck-us.net \
    --cc=peda@axentia.se \
    --cc=robh@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox