public inbox for linux-hwmon@vger.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Akhil R" <akhilrajeev@nvidia.com>
Cc: linux-hwmon@vger.kernel.org
Subject: Re: [PATCH v2 09/13] i3c: dw-i3c-master: Add a quirk to skip clock and reset
Date: Thu, 09 Apr 2026 11:51:54 +0000	[thread overview]
Message-ID: <20260409115155.7C306C4CEF7@smtp.kernel.org> (raw)
In-Reply-To: <20260409105747.48158-10-akhilrajeev@nvidia.com>

Sashiko AI review found 3 potential issue(s):
- [High] Missing reset control assertion on pclk acquisition failure.
- [High] Type confusion when parsing match data for ACPI devices using PRP0001.
- [Medium] Semantic misuse of the `clock-frequency` device property.
--

commit e97fa5a2aa57bfea8bd1aabcc2dc629a2e47c19c
Author: Akhil R <akhilrajeev@nvidia.com>

    i3c: dw-i3c-master: Add a quirk to skip clock and reset

This commit adds a quirk to skip clock and reset acquisition for
ACPI-enumerated devices like Tegra410. It moves match data parsing
earlier in the probe sequence and falls back to reading the
"clock-frequency" property if the quirk is present.

[ ... ]

> diff --git a/drivers/i3c/master/dw-i3c-master.c b/drivers/i3c/master/dw-i3c-master.c
> index 05ccdf177b6dd..a62eec6d2ac0a 100644
> --- a/drivers/i3c/master/dw-i3c-master.c
> +++ b/drivers/i3c/master/dw-i3c-master.c

[ ... ]

> @@ -560,13 +561,26 @@ static void dw_i3c_master_set_intr_regs(struct dw_i3c_master *master)
>  	writel(IBI_REQ_REJECT_ALL, master->regs + IBI_MR_REQ_REJECT);
>  }
>  
> +static unsigned long dw_i3c_master_get_core_rate(struct dw_i3c_master *master)
> +{
> +	unsigned int core_rate_prop;
> +
> +	if (!(master->quirks & DW_I3C_ACPI_SKIP_CLK_RST))
> +		return clk_get_rate(master->core_clk);
> +
> +	if (device_property_read_u32(master->dev, "clock-frequency", &core_rate_prop))
> +		return 0;
> +
> +	return core_rate_prop;

Does this usage conflict with standard device tree bindings? The
"clock-frequency" property in the I2C and I3C subsystems typically represents
the external bus frequency (e.g., 400kHz or 12.5MHz), not the internal IP core
clock rate.

Reusing this standard property for the internal core clock rate might cause
integer underflows and timing misconfigurations if standard bus frequencies are
provided in the device tree or ACPI tables.

[ ... ]

> @@ -1600,21 +1614,34 @@ int dw_i3c_common_probe(struct dw_i3c_master *master,
>  	if (IS_ERR(master->regs))
>  		return PTR_ERR(master->regs);
>  
> -	master->core_clk = devm_clk_get_enabled(&pdev->dev, NULL);
> -	if (IS_ERR(master->core_clk))
> -		return PTR_ERR(master->core_clk);
> +	if (has_acpi_companion(&pdev->dev)) {
> +		quirks = (unsigned long)device_get_match_data(&pdev->dev);
> +	} else if (pdev->dev.of_node) {

Will this cause type confusion if an ACPI device uses the PRP0001 mechanism?

If PRP0001 delegates matching to the OF table, device_get_match_data()
returns a pointer to a struct dw_i3c_drvdata rather than an integer bitmask.
Casting this memory pointer directly to an unsigned long would assign
arbitrary bits based on the kernel's memory layout, potentially triggering
random quirks like DW_I3C_ACPI_SKIP_CLK_RST.

> +		drvdata = device_get_match_data(&pdev->dev);
> +		if (drvdata)
> +			quirks = drvdata->flags;
> +	}
> +	master->quirks = quirks;
> +
> +	if (master->quirks & DW_I3C_ACPI_SKIP_CLK_RST) {
> +		master->core_clk = NULL;
> +		master->core_rst = NULL;
> +	} else {
> +		master->core_clk = devm_clk_get_enabled(&pdev->dev, NULL);
> +		if (IS_ERR(master->core_clk))
> +			return PTR_ERR(master->core_clk);
> +
> +		master->core_rst = devm_reset_control_get_optional_exclusive(&pdev->dev,
> +									     "core_rst");
> +		if (IS_ERR(master->core_rst))
> +			return PTR_ERR(master->core_rst);
> +		reset_control_deassert(master->core_rst);
> +	}
>  
>  	master->pclk = devm_clk_get_optional_enabled(&pdev->dev, "pclk");
>  	if (IS_ERR(master->pclk))
>  		return PTR_ERR(master->pclk);

If devm_clk_get_optional_enabled() fails here (e.g., returning -EPROBE_DEFER),
will this leave the hardware out of reset?

The code returns directly, but master->core_rst was already deasserted.
While devres frees the reset control reference, it won't automatically
re-assert the reset line. Should this path use the err_assert_rst label
to ensure proper cleanup?

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260409105747.48158-1-akhilrajeev@nvidia.com?part=9

  reply	other threads:[~2026-04-09 11:51 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-04-09 10:57 [PATCH v2 00/13] Support ACPI and SETAASA device discovery Akhil R
2026-04-09 10:57 ` [PATCH v2 01/13] dt-bindings: i3c: Add mipi-i3c-static-method to support SETAASA Akhil R
2026-04-09 11:14   ` sashiko-bot
2026-04-10  2:00   ` Frank Li
2026-04-10  4:30     ` Akhil R
2026-04-09 10:57 ` [PATCH v2 02/13] ACPICA: Read LVR from the I2C resource descriptor Akhil R
2026-04-09 11:07   ` Rafael J. Wysocki
2026-04-09 11:20   ` sashiko-bot
2026-04-10  2:04   ` Frank Li
2026-04-10  4:45     ` Akhil R
2026-04-10 10:59       ` Rafael J. Wysocki
2026-04-10 10:57     ` Rafael J. Wysocki
2026-04-09 10:57 ` [PATCH v2 03/13] i3c: master: Use unified device property interface Akhil R
2026-04-09 11:53   ` sashiko-bot
2026-04-09 10:57 ` [PATCH v2 04/13] i3c: master: Support ACPI enumeration of child devices Akhil R
2026-04-09 11:43   ` sashiko-bot
2026-04-10  2:17   ` Frank Li
2026-04-10  5:31     ` Akhil R
2026-04-09 10:57 ` [PATCH v2 05/13] i3c: master: Add support for devices using SETAASA Akhil R
2026-04-09 11:45   ` sashiko-bot
2026-04-10  2:25   ` Frank Li
2026-04-09 10:57 ` [PATCH v2 06/13] i3c: master: Add support for devices without PID Akhil R
2026-04-09 12:08   ` sashiko-bot
2026-04-10  2:37   ` Frank Li
2026-04-09 10:57 ` [PATCH v2 07/13] i3c: master: match I3C device through DT and ACPI Akhil R
2026-04-10  2:40   ` Frank Li
2026-04-09 10:57 ` [PATCH v2 08/13] i3c: dw-i3c-master: Add SETAASA as supported CCC Akhil R
2026-04-10  2:41   ` Frank Li
2026-04-09 10:57 ` [PATCH v2 09/13] i3c: dw-i3c-master: Add a quirk to skip clock and reset Akhil R
2026-04-09 11:51   ` sashiko-bot [this message]
2026-04-10  2:45   ` Frank Li
2026-04-10  6:07     ` Akhil R
2026-04-09 10:57 ` [PATCH v2 10/13] i3c: dw-i3c-master: Add ACPI ID for Tegra410 Akhil R
2026-04-10  2:47   ` Frank Li
2026-04-09 10:57 ` [PATCH v2 11/13] hwmon: spd5118: Remove 16-bit addressing Akhil R
2026-04-09 14:11   ` Guenter Roeck
2026-04-09 10:57 ` [PATCH v2 12/13] hwmon: spd5118: Add I3C support Akhil R
2026-04-09 12:36   ` sashiko-bot
2026-04-09 14:15     ` Guenter Roeck
2026-04-09 14:19   ` Guenter Roeck
2026-04-09 10:57 ` [PATCH v2 13/13] arm64: defconfig: Enable I3C and SPD5118 hwmon Akhil R
2026-04-10  6:39   ` Krzysztof Kozlowski
2026-04-10  6:57     ` Guenter Roeck
2026-04-10  7:18       ` Krzysztof Kozlowski
2026-04-10  8:37         ` Akhil R
2026-04-10  9:57           ` Krzysztof Kozlowski
2026-04-10  7:04     ` Akhil R

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=20260409115155.7C306C4CEF7@smtp.kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=akhilrajeev@nvidia.com \
    --cc=linux-hwmon@vger.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox