From: sashiko-bot@kernel.org
To: "Rodrigo Alencar via B4 Relay"
<devnull+rodrigo.alencar.analog.com@kernel.org>
Cc: conor+dt@kernel.org, robh@kernel.org, krzk+dt@kernel.org,
devicetree@vger.kernel.org
Subject: Re: [PATCH v12 08/11] iio: frequency: adf41513: handle LE synchronization feature
Date: Mon, 11 May 2026 23:11:59 +0000 [thread overview]
Message-ID: <20260511231159.ED783C2BCB0@smtp.kernel.org> (raw)
In-Reply-To: <20260510-adf41513-iio-driver-v12-8-34af2ed2779f@analog.com>
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] The driver modifies the cached register state (`st->regs`) before performing SPI transactions, but fails to revert these changes if the SPI transaction fails. This leaves the shadow register state corrupted and violates hardware sequencing constraints on subsequent retries.
--
commit a7ad01199feb60254a514f4aa41d379243946b28
Author: Rodrigo Alencar <rodrigo.alencar@analog.com>
iio: frequency: adf41513: handle LE synchronization feature
This commit introduces support for the LE synchronization feature on the
ADF41513. It enables the feature during device setup and handles
enabling/disabling it during resume and suspend.
> diff --git a/drivers/iio/frequency/adf41513.c b/drivers/iio/frequency/adf41513.c
> index b8a8b9fb81d9d..397e859170cc0 100644
> --- a/drivers/iio/frequency/adf41513.c
> +++ b/drivers/iio/frequency/adf41513.c
[ ... ]
> @@ -634,13 +635,27 @@ static int adf41513_set_frequency(struct adf41513_state *st, u64 freq_uhz, u16 s
> static int adf41513_suspend(struct adf41513_state *st)
> {
> st->regs[ADF41513_REG6] |= FIELD_PREP(ADF41513_REG6_POWER_DOWN_MSK, 1);
> + st->regs[ADF41513_REG12] &= ~ADF41513_REG12_LE_SELECT_MSK;
> return adf41513_sync_config(st, ADF41513_SYNC_DIFF);
If adf41513_sync_config() fails, is it possible for st->regs[] to be left with
these updated values?
If the SPI transaction fails when writing ADF41513_REG12 (which happens before
ADF41513_REG6), the state in st->regs is not reverted. A subsequent frequency
change might then inadvertently power down the device because the dirty
st->regs state is pushed to the hardware during adf41513_sync_config().
> }
>
> static int adf41513_resume(struct adf41513_state *st)
> {
> + int ret;
> +
> st->regs[ADF41513_REG6] &= ~ADF41513_REG6_POWER_DOWN_MSK;
> - return adf41513_sync_config(st, ADF41513_SYNC_ALL);
> + ret = adf41513_sync_config(st, ADF41513_SYNC_ALL);
> + if (ret)
> + return ret;
> +
> + if (st->data.le_sync_en) {
> + st->regs[ADF41513_REG12] |= ADF41513_REG12_LE_SELECT_MSK;
> + ret = adf41513_sync_config(st, ADF41513_SYNC_DIFF);
> + if (ret)
> + return ret;
Could this cause a regression on a subsequent retry of adf41513_resume() if
the SPI write fails here?
If adf41513_sync_config(st, ADF41513_SYNC_DIFF) fails, the function returns
an error, but st->regs[ADF41513_REG12] retains the
ADF41513_REG12_LE_SELECT_MSK bit.
On a subsequent retry of adf41513_resume(), the first call to
adf41513_sync_config(st, ADF41513_SYNC_ALL) writes all registers in reverse
order (ADF41513_REG13 down to ADF41513_REG0). Since st->regs[ADF41513_REG12]
already has the ADF41513_REG12_LE_SELECT_MSK bit set from the previous failed
attempt, it will write ADF41513_REG12 with this bit set before writing
ADF41513_REG6 to power up the device.
Does this violate the hardware constraint mentioned in the commit message that
LE sync must be set after powering up?
> + }
> +
> + return 0;
> }
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260510-adf41513-iio-driver-v12-0-34af2ed2779f@analog.com?part=8
next prev parent reply other threads:[~2026-05-11 23:12 UTC|newest]
Thread overview: 67+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-10 12:42 [PATCH v12 00/11] ADF41513/ADF41510 PLL frequency synthesizers Rodrigo Alencar
2026-05-10 12:42 ` Rodrigo Alencar via B4 Relay
2026-05-10 12:42 ` [PATCH v12 01/11] dt-bindings: iio: frequency: add adf41513 Rodrigo Alencar
2026-05-10 12:42 ` Rodrigo Alencar via B4 Relay
2026-05-10 12:42 ` [PATCH v12 02/11] lib: kstrtox: add kstrtoudec64() and kstrtodec64() Rodrigo Alencar
2026-05-10 12:42 ` Rodrigo Alencar via B4 Relay
2026-05-11 21:14 ` sashiko-bot
2026-05-12 11:39 ` Jonathan Cameron
2026-05-12 11:52 ` Rodrigo Alencar
2026-05-12 13:12 ` Andy Shevchenko
2026-05-12 13:21 ` Rodrigo Alencar
2026-05-12 13:48 ` Andy Shevchenko
2026-05-12 14:12 ` Rodrigo Alencar
2026-05-12 14:43 ` Andy Shevchenko
2026-05-12 15:11 ` Rodrigo Alencar
2026-05-12 15:21 ` Andy Shevchenko
2026-05-12 16:18 ` David Laight
2026-05-12 17:08 ` Andy Shevchenko
2026-05-12 16:35 ` Rodrigo Alencar
2026-05-12 17:13 ` Andy Shevchenko
2026-05-12 17:26 ` Rodrigo Alencar
2026-05-12 17:46 ` Andy Shevchenko
2026-05-12 18:15 ` Rodrigo Alencar
2026-05-12 19:08 ` Andy Shevchenko
2026-05-12 19:39 ` Rodrigo Alencar
2026-05-12 20:16 ` Andy Shevchenko
2026-05-13 7:14 ` Rodrigo Alencar
2026-05-13 10:09 ` David Laight
2026-05-13 9:41 ` Rodrigo Alencar
2026-05-15 16:05 ` Rodrigo Alencar
2026-05-15 19:21 ` David Laight
2026-05-10 12:42 ` [PATCH v12 03/11] lib: test-kstrtox: tests for kstrtodec64() and kstrtoudec64() Rodrigo Alencar
2026-05-10 12:42 ` Rodrigo Alencar via B4 Relay
2026-05-12 13:51 ` Andy Shevchenko
2026-05-10 12:42 ` [PATCH v12 04/11] lib: math: div64: add div64_s64_rem() Rodrigo Alencar
2026-05-10 12:42 ` Rodrigo Alencar via B4 Relay
2026-05-12 13:50 ` Andy Shevchenko
2026-05-10 12:42 ` [PATCH v12 05/11] iio: core: add decimal value formatting into 64-bit value Rodrigo Alencar
2026-05-10 12:42 ` Rodrigo Alencar via B4 Relay
2026-05-11 21:59 ` sashiko-bot
2026-05-12 14:35 ` Andy Shevchenko
2026-05-12 16:09 ` Rodrigo Alencar
2026-05-12 17:49 ` Andy Shevchenko
2026-05-12 19:01 ` Rodrigo Alencar
2026-05-10 12:42 ` [PATCH v12 06/11] iio: test: iio-test-format: add test case for decimal format Rodrigo Alencar
2026-05-10 12:42 ` Rodrigo Alencar via B4 Relay
2026-05-12 14:36 ` Andy Shevchenko
2026-05-12 17:02 ` Rodrigo Alencar
2026-05-12 17:51 ` Andy Shevchenko
2026-05-10 12:42 ` [PATCH v12 07/11] iio: frequency: adf41513: driver implementation Rodrigo Alencar
2026-05-10 12:42 ` Rodrigo Alencar via B4 Relay
2026-05-11 22:43 ` sashiko-bot
2026-05-12 10:15 ` Rodrigo Alencar
2026-05-12 11:31 ` Jonathan Cameron
2026-05-10 12:42 ` [PATCH v12 08/11] iio: frequency: adf41513: handle LE synchronization feature Rodrigo Alencar
2026-05-10 12:42 ` Rodrigo Alencar via B4 Relay
2026-05-11 23:11 ` sashiko-bot [this message]
2026-05-10 12:42 ` [PATCH v12 09/11] iio: frequency: adf41513: features on frequency change Rodrigo Alencar
2026-05-10 12:42 ` Rodrigo Alencar via B4 Relay
2026-05-10 12:42 ` [PATCH v12 10/11] docs: iio: add documentation for adf41513 driver Rodrigo Alencar
2026-05-10 12:42 ` Rodrigo Alencar via B4 Relay
2026-05-11 23:44 ` sashiko-bot
2026-05-10 12:42 ` [PATCH v12 11/11] Documentation: ABI: testing: add common ABI file for iio/frequency Rodrigo Alencar
2026-05-10 12:42 ` Rodrigo Alencar via B4 Relay
2026-05-11 23:31 ` sashiko-bot
2026-05-12 11:36 ` Jonathan Cameron
2026-05-12 11:48 ` [PATCH v12 00/11] ADF41513/ADF41510 PLL frequency synthesizers Jonathan Cameron
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=20260511231159.ED783C2BCB0@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=devnull+rodrigo.alencar.analog.com@kernel.org \
--cc=krzk+dt@kernel.org \
--cc=robh@kernel.org \
--cc=sashiko@lists.linux.dev \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.