Re: [PATCH v6 09/12] i3c: dw-i3c-master: Add ACPI ID for Tegra410
Akhil R <[email protected]> Mon, 27 Jul 2026 14:42:19 +0000
| Newsgroups | org.infradead.lists.linux-i3c,dev.linux.lists.sashiko-reviews,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-hwmon |
|---|---|
| Message-ID | <[email protected]> |
On Tue, 21 Jul 2026 04:22:59 +0000, Sashiko AI review <[email protected]> wrote: > commit bf82e9c156c66763c855e5549bd1a91bafc5fdf3 > Author: Akhil R <[email protected]> > > i3c: dw-i3c-master: Add ACPI ID for Tegra410 > > Update variable names to generic names and add Tegra410 ACPI ID to > support the I3C controller in Tegra410, which is a DesignWare I3C host > controller. > > > diff --git a/drivers/i3c/master/dw-i3c-master.c b/drivers/i3c/master/dw-i3c-master.c > > index 3ec3ab1c13b4c..efe37f5224c71 100644 > > --- a/drivers/i3c/master/dw-i3c-master.c > > +++ b/drivers/i3c/master/dw-i3c-master.c > > @@ -1860,11 +1860,12 @@ static const struct of_device_id dw_i3c_master_of_match[] = { > > }; > > MODULE_DEVICE_TABLE(of, dw_i3c_master_of_match); > > > > -static const struct acpi_device_id amd_i3c_device_match[] = { > > +static const struct acpi_device_id dw_i3c_master_acpi_match[] = { > > { "AMDI0015", AMD_I3C_OD_PP_TIMING }, > > + { "NVDA2018", DW_I3C_ACPI_SKIP_CLK_RST }, > > [Severity: High] > This isn't a bug introduced by this patch, but adding a new ACPI ID brings > attention to a pre-existing issue when handling ACPI bindings. > > Does this driver safely handle ACPI PRP0001 bindings? > > In dw_i3c_common_probe(), if an ACPI companion is present, the match data is > cast to an integer bitmask: > > if (has_acpi_companion(&pdev->dev)) { > quirks = (unsigned long)device_get_match_data(&pdev->dev); > } else if (pdev->dev.of_node) { > > When an ACPI device binds using the PRP0001 mechanism, it utilizes the OF > compatible strings and the OF match table. In this scenario, > device_get_match_data() returns the .data pointer from the of_device_id > table (e.g. &altr_agilex5_drvdata), rather than an integer quirk bitmask > from the acpi_device_id table. > > Because of the unconditional cast, won't this store a kernel memory address > into master->quirks instead of a valid bitmask, thereby activating random > driver quirks? > > [Severity: High] > This is also a pre-existing issue, but does dw_i3c_common_remove() correctly > handle devres clock cleanup when the device is in runtime suspend? > > The probe function acquires and enables the core and pclk clocks using > devm_clk_get_optional_enabled(). These clocks are explicitly disabled in > dw_i3c_master_runtime_suspend(). > > If dw_i3c_common_remove() is invoked while the device is in runtime suspend, > the clocks are already disabled. Since dw_i3c_common_remove() does not wake > the device (e.g., via pm_runtime_get_sync()), won't the devres cleanup > routine run clk_disable_unprepare() again on already disabled clocks, > leading to a negative clock enable count? Both are pre-existing behaviours not introduced by adding the Tegra410 ACPI ID; they are better handled separately. > > { } > > }; > > -MODULE_DEVICE_TABLE(acpi, amd_i3c_device_match); > > +MODULE_DEVICE_TABLE(acpi, dw_i3c_master_acpi_match); Best Regards, Akhil -- linux-i3c mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-i3c