From: "Nuno Sá" <noname.nuno@gmail.com>
To: Guenter Roeck <linux@roeck-us.net>
Cc: "Nuno Sá via B4 Relay" <devnull+nuno.sa.analog.com@kernel.org>,
linux-hwmon@vger.kernel.org
Subject: Re: [PATCH v13 2/3] hwmon: ltc4283: Add support for the LTC4283 Swap Controller
Date: Tue, 9 Jun 2026 15:12:58 +0100 [thread overview]
Message-ID: <aige5END74wK3ENh@nsa> (raw)
In-Reply-To: <85185e61-f9fa-4183-927d-8d7f4e8d4a2e@roeck-us.net>
On Tue, Jun 09, 2026 at 06:07:38AM -0700, Guenter Roeck wrote:
> On 6/9/26 05:50, Nuno Sá wrote:
> > On Mon, May 04, 2026 at 10:51:12AM +0100, Nuno Sá wrote:
> > > On Sat, May 02, 2026 at 09:21:15AM -0700, Guenter Roeck wrote:
> > > > On 5/2/26 03:43, sashiko-bot@kernel.org wrote:
> > > > > Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
> > > > > - [Medium] Read-modify-write operations on hardware alarm and fault log registers will cause concurrent events to be lost.
> > > > > --
> > > > >
> > > > > commit 768d24f774b79f50e1444b93b756d7bda5873159
> > > > > Author: Nuno Sá <nuno.sa@analog.com>
> > > > >
> > > > > hwmon: ltc4283: Add support for the LTC4283 Swap Controller
> > > > >
> > > > > This commit introduces driver support for the Analog Devices LTC4283
> > > > > Negative Voltage Hot Swap Controller. It adds functionality to monitor
> > > > > voltage, current, power, and various hardware faults via an I2C interface.
> > > > >
> > > > > > diff --git a/drivers/hwmon/ltc4283.c b/drivers/hwmon/ltc4283.c
> > > > > > new file mode 100644
> > > > > > index 000000000000..d8931c9a4685
> > > > > > --- /dev/null
> > > > > > +++ b/drivers/hwmon/ltc4283.c
> > > > >
> > > > > [ ... ]
> > > > >
> > > > > > +static int ltc4283_read_alarm(struct ltc4283_hwmon *st, u32 reg,
> > > > > > + u32 mask, long *val)
> > > > > > +{
> > > > > > + u32 alarm;
> > > > > > + int ret;
> > > > > > +
> > > > > > + ret = regmap_read(st->map, reg, &alarm);
> > > > > > + if (ret)
> > > > > > + return ret;
> > > > > > +
> > > > > > + *val = !!(alarm & mask);
> > > > > > +
> > > > > > + /* If not status/fault logs, clear the alarm after reading it. */
> > > > > > + if (reg != LTC4283_FAULT_STATUS && reg != LTC4283_FAULT_LOG)
> > > > > > + return regmap_write(st->map, reg, alarm & ~mask);
> > > > >
> > > > > Could this read-modify-write sequence cause concurrent hardware events to be
> > > > > lost?
> > > > >
> > > > > If these alarm registers use write-0-to-clear semantics, writing back
> > > > > alarm & ~mask will inadvertently write a 0 to any new alarm bits that were
> > > > > asserted by the hardware between the regmap_read() and regmap_write() calls.
> > > > > Usually, a direct atomic write of ~mask without reading first is preferred
> > > > > to avoid clearing unrelated active alarms.
> > > > >
> > > >
> > > > Sashiko comes back to this one. Looking this up in the datasheet, it says
> > > > that alarm bits are reset by writing 0 into the alarm bit. That isn't
> > > > what is done here, though. It will write 0 into any alarm bits which were
> > > > not set when the register was read.
> > > >
> > > > Should this be something like the following instead ?
> > > >
> > > > alarm &= mask;
> > > > *val = !!alarm;
> > > >
> > > > if (reg != LTC4283_FAULT_STATUS && reg != LTC4283_FAULT_LOG && alarm)
> > > > return regmap_write(st->map, reg, ~alarm & 0xff);
> > > >
> > > > That would ensure that only the checked bit is cleared, and that it is only
> > > > cleared if the bit was set when it was read.
> > >
> > > I'll have to check the above. I gave it a bit more thought and as it is, it
> > > should not be a problem. Because even if we (in the edge case) end up
> > > clearing an alarm that came after that regmap_read(), if the condition
> > > persists in the next conversion, we'll have it set again. Yes, we still
> > > loose one historical alarm but not something will be forever lost at
> > > least.
> > >
> > > Having said the above I do agree with your proposed change, but I need
> > > to see how the HW "behaves". I'm afraid that if we just write 1's into all
> > > of the alarms we're not checking we create a window where reading the
> > > register again will, falsely, indicate the alarm is present. If the
> > > read happens before a new conversion was done (note that if all the
> > > channels are enabled we actually have seconds for a new conversion to
> > > go though all channels).
> >
> > Hi Guenter,
> >
> > I got time for this again and apparently my concerns were valid. As it
> > turns out the chip is not "smart" enough:
> >
> > root@analog:/sys/class/hwmon/hwmon1# cat in5_max_alarm
> > 0
> > root@analog:/sys/class/hwmon/hwmon1# cat in5_max_alarm
> > 1
> >
> > And you can imagine the outcome of running `sensors` :)
> >
> > So I guess we have to leave this as-is.
> >
>
> Outch :-(.
>
> Oh well, that can't be helped. Should I apply the series as-is (v13) ?
>
If there's no more concerns from you, I would say so. If I eventually
have the time, I should apply some of the outcome from this series to
the ltc4282 driver.
- Nuno Sá
> Thanks,
> Guenter
>
next prev parent reply other threads:[~2026-06-09 14:12 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-02 9:56 [PATCH v13 0/3] hwmon: Add support for the LTC4283 Hot Swap Controller Nuno Sá via B4 Relay
2026-05-02 9:56 ` [PATCH v13 1/3] dt-bindings: hwmon: Document the LTC4283 " Nuno Sá via B4 Relay
2026-05-02 10:05 ` sashiko-bot
2026-06-09 15:24 ` Guenter Roeck
2026-05-02 9:56 ` [PATCH v13 2/3] hwmon: ltc4283: Add support for " Nuno Sá via B4 Relay
2026-05-02 10:43 ` sashiko-bot
2026-05-02 16:21 ` Guenter Roeck
2026-05-04 9:51 ` Nuno Sá
2026-06-09 12:50 ` Nuno Sá
2026-06-09 13:07 ` Guenter Roeck
2026-06-09 14:12 ` Nuno Sá [this message]
2026-06-09 15:20 ` Guenter Roeck
2026-06-09 15:29 ` Guenter Roeck
2026-05-02 9:56 ` [PATCH v13 3/3] gpio: gpio-ltc4283: " Nuno Sá via B4 Relay
2026-05-02 11:02 ` sashiko-bot
2026-06-09 15:30 ` Guenter Roeck
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=aige5END74wK3ENh@nsa \
--to=noname.nuno@gmail.com \
--cc=devnull+nuno.sa.analog.com@kernel.org \
--cc=linux-hwmon@vger.kernel.org \
--cc=linux@roeck-us.net \
/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