* [PATCH] phy: broadcom: use devm_clk_get() in brcm_usb_phy_dvr_init()
@ 2026-11-03 10:42 Wentao Liang
2026-11-03 11:10 ` Krzysztof Kozlowski
2026-11-05 15:45 ` sashiko-bot
0 siblings, 2 replies; 3+ messages in thread
From: Wentao Liang @ 2026-11-03 10:42 UTC (permalink / raw)
To: Justin Chen, Al Cooper, Broadcom internal kernel review list,
Vinod Koul, Neil Armstrong, Manivannan Sadhasivam
Cc: linux-kernel, linux-phy, Wentao Liang, stable
brcm_usb_phy_dvr_init() obtains the USB 2.0, USB 3.0 and suspend
clocks with of_clk_get_by_name() and clk_get(). Both take a reference
on the clock that the driver never releases: the error paths after the
lookups return without clk_put(), and brcm_usb_phy_remove() only
unregisters the sysfs group and the PM notifier. clk_prepare_enable()
and clk_disable_unprepare() only change the prepare/enable counts and
do not drop the reference.
Use devm_clk_get() so that the references are dropped automatically on
probe failure and driver detach, and drop the now unused device node
argument.
Fixes: 49859e55e364 ("phy: usb: phy-brcm-usb: Add Broadcom STB USB phy driver")
Cc: stable@vger.kernel.org
Assisted-by: DeepSeek-V4.1-Flash and OpenAI Codex
Signed-off-by: Wentao Liang <vulab@iscas.ac.cn>
---
drivers/phy/broadcom/phy-brcm-usb.c | 11 +++++------
1 file changed, 5 insertions(+), 6 deletions(-)
diff --git a/drivers/phy/broadcom/phy-brcm-usb.c b/drivers/phy/broadcom/phy-brcm-usb.c
index e606db489698..c0cb701e419a 100644
--- a/drivers/phy/broadcom/phy-brcm-usb.c
+++ b/drivers/phy/broadcom/phy-brcm-usb.c
@@ -401,14 +401,13 @@ static int brcm_usb_get_regs(struct platform_device *pdev,
}
static int brcm_usb_phy_dvr_init(struct platform_device *pdev,
- struct brcm_usb_phy_data *priv,
- struct device_node *dn)
+ struct brcm_usb_phy_data *priv)
{
struct device *dev = &pdev->dev;
struct phy *gphy = NULL;
int err;
- priv->usb_20_clk = of_clk_get_by_name(dn, "sw_usb");
+ priv->usb_20_clk = devm_clk_get(dev, "sw_usb");
if (IS_ERR(priv->usb_20_clk)) {
if (PTR_ERR(priv->usb_20_clk) == -EPROBE_DEFER)
return -EPROBE_DEFER;
@@ -440,7 +439,7 @@ static int brcm_usb_phy_dvr_init(struct platform_device *pdev,
priv->phys[BRCM_USB_PHY_3_0].id = BRCM_USB_PHY_3_0;
phy_set_drvdata(gphy, &priv->phys[BRCM_USB_PHY_3_0]);
- priv->usb_30_clk = of_clk_get_by_name(dn, "sw_usb3");
+ priv->usb_30_clk = devm_clk_get(dev, "sw_usb3");
if (IS_ERR(priv->usb_30_clk)) {
if (PTR_ERR(priv->usb_30_clk) == -EPROBE_DEFER)
return -EPROBE_DEFER;
@@ -453,7 +452,7 @@ static int brcm_usb_phy_dvr_init(struct platform_device *pdev,
return err;
}
- priv->suspend_clk = clk_get(dev, "usb0_freerun");
+ priv->suspend_clk = devm_clk_get(dev, "usb0_freerun");
if (IS_ERR(priv->suspend_clk)) {
if (PTR_ERR(priv->suspend_clk) == -EPROBE_DEFER)
return -EPROBE_DEFER;
@@ -542,7 +541,7 @@ static int brcm_usb_phy_probe(struct platform_device *pdev)
return -EINVAL;
}
- err = brcm_usb_phy_dvr_init(pdev, priv, dn);
+ err = brcm_usb_phy_dvr_init(pdev, priv);
if (err)
return err;
--
2.34.1
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] phy: broadcom: use devm_clk_get() in brcm_usb_phy_dvr_init()
2026-11-03 10:42 [PATCH] phy: broadcom: use devm_clk_get() in brcm_usb_phy_dvr_init() Wentao Liang
@ 2026-11-03 11:10 ` Krzysztof Kozlowski
2026-11-05 15:45 ` sashiko-bot
1 sibling, 0 replies; 3+ messages in thread
From: Krzysztof Kozlowski @ 2026-11-03 11:10 UTC (permalink / raw)
To: Wentao Liang
Cc: Broadcom internal kernel review list, Vinod Koul,
Manivannan Sadhasivam, stable, Al Cooper, linux-kernel, linux-phy,
Neil Armstrong, Justin Chen
On Tue, 03 Nov 2026 10:42:40 +0000, Wentao Liang wrote:
> brcm_usb_phy_dvr_init() obtains the USB 2.0, USB 3.0 and suspend
> clocks with of_clk_get_by_name() and clk_get(). Both take a reference
> on the clock that the driver never releases: the error paths after the
> lookups return without clk_put(), and brcm_usb_phy_remove() only
> unregisters the sysfs group and the PM notifier. clk_prepare_enable()
> and clk_disable_unprepare() only change the prepare/enable counts and
> do not drop the reference.
>
> Use devm_clk_get() so that the references are dropped automatically on
> probe failure and driver detach, and drop the now unused device node
> argument.
>
> Fixes: 49859e55e364 ("phy: usb: phy-brcm-usb: Add Broadcom STB USB phy driver")
> Cc: stable@vger.kernel.org
> Assisted-by: DeepSeek-V4.1-Flash and OpenAI Codex
> Signed-off-by: Wentao Liang <vulab@iscas.ac.cn>
> ---
> drivers/phy/broadcom/phy-brcm-usb.c | 11 +++++------
> 1 file changed, 5 insertions(+), 6 deletions(-)
>
Multiple things here:
1. Your team ignored completely previous feedback. Multiple times.
2. You use multiple identities with this email address, thus I doubt that we
speak with an actual person.
3. Your bot does not even bother running checkpatch, right?
4. Nothing of this was reproduced nor tested.
5. Finally, the same feedback:
You sent multiple independent patches, to multiple independent
subsystems. The amount of these patches clearly suggest this was
AI generated and most likely not tested.
More importantly, you sent all this work without properly organizing
relevant patches into patchsets. This makes reviewing difficult
and might cause multiple reviewers to address the same issue.
Replying to the entire set is impossible and requires handling each
patch independently, instead of applying or discarding the set.
Maintainers also won't see the bigger picture of your work. Quite
worrying.
This is on the verge of hostile patch: bomb us with so many
contributions, we won't be able to handle them in efficient manner,
like responding ONCE to ask you to slow down. Considering all this
is untested and LLM generated, I have even more doubts whether this
should be considered for review.
Please read kernel documentation BEFORE posting more work. It will
explain you how to identify subsystems, how to organize your work per
subsystem (so a patchset grouping multiple patches with a short cover
letter), how to document the issue discovery method and what was
or was not tested.
Best regards,
Krzysztof
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] phy: broadcom: use devm_clk_get() in brcm_usb_phy_dvr_init()
2026-11-03 10:42 [PATCH] phy: broadcom: use devm_clk_get() in brcm_usb_phy_dvr_init() Wentao Liang
2026-11-03 11:10 ` Krzysztof Kozlowski
@ 2026-11-05 15:45 ` sashiko-bot
1 sibling, 0 replies; 3+ messages in thread
From: sashiko-bot @ 2026-11-05 15:45 UTC (permalink / raw)
To: Wentao Liang; +Cc: linux-phy, vkoul, neil.armstrong, olteanv
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] phy: broadcom: unbalanced clk_prepare_enable() in brcm_usb_phy_dvr_init()
--
commit 34ff50179a8d79006737000f5a65391972e3147b
Author: Wentao Liang <vulab@iscas.ac.cn>
phy: broadcom: use devm_clk_get() in brcm_usb_phy_dvr_init()
This commit replaces of_clk_get_by_name() and clk_get() with devm_clk_get()
in brcm_usb_phy_dvr_init() so clock references are automatically released on
probe failure and driver removal, and drops the unused device_node parameter.
> diff --git a/drivers/phy/broadcom/phy-brcm-usb.c b/drivers/phy/broadcom/phy-brcm-usb.c
> index e606db489698a..c0cb701e419ac 100644
> --- a/drivers/phy/broadcom/phy-brcm-usb.c
> +++ b/drivers/phy/broadcom/phy-brcm-usb.c
> @@ -401,14 +401,13 @@ static int brcm_usb_get_regs(struct platform_device *pdev,
> }
>
> static int brcm_usb_phy_dvr_init(struct platform_device *pdev,
> - struct brcm_usb_phy_data *priv,
> - struct device_node *dn)
> + struct brcm_usb_phy_data *priv)
> {
> struct device *dev = &pdev->dev;
> struct phy *gphy = NULL;
> int err;
>
> - priv->usb_20_clk = of_clk_get_by_name(dn, "sw_usb");
> + priv->usb_20_clk = devm_clk_get(dev, "sw_usb");
> if (IS_ERR(priv->usb_20_clk)) {
> if (PTR_ERR(priv->usb_20_clk) == -EPROBE_DEFER)
> return -EPROBE_DEFER;
> @@ -440,7 +439,7 @@ static int brcm_usb_phy_dvr_init(struct platform_device *pdev,
> priv->phys[BRCM_USB_PHY_3_0].id = BRCM_USB_PHY_3_0;
> phy_set_drvdata(gphy, &priv->phys[BRCM_USB_PHY_3_0]);
>
> - priv->usb_30_clk = of_clk_get_by_name(dn, "sw_usb3");
> + priv->usb_30_clk = devm_clk_get(dev, "sw_usb3");
> if (IS_ERR(priv->usb_30_clk)) {
> if (PTR_ERR(priv->usb_30_clk) == -EPROBE_DEFER)
> return -EPROBE_DEFER;
> @@ -453,7 +452,7 @@ static int brcm_usb_phy_dvr_init(struct platform_device *pdev,
> return err;
> }
>
> - priv->suspend_clk = clk_get(dev, "usb0_freerun");
> + priv->suspend_clk = devm_clk_get(dev, "usb0_freerun");
> if (IS_ERR(priv->suspend_clk)) {
> if (PTR_ERR(priv->suspend_clk) == -EPROBE_DEFER)
> return -EPROBE_DEFER;
[Severity: Medium]
Does switching to devm_clk_get() in brcm_usb_phy_dvr_init() cause devres to
call clk_put() on priv->usb_20_clk and priv->usb_30_clk while they are still
prepared and enabled if a later step in brcm_usb_phy_dvr_init() fails?
In brcm_usb_phy_dvr_init(), priv->usb_20_clk and priv->usb_30_clk are enabled
with clk_prepare_enable():
priv->usb_20_clk = devm_clk_get(dev, "sw_usb");
...
err = clk_prepare_enable(priv->usb_20_clk);
if (err)
return err;
and for XHCI:
priv->usb_30_clk = devm_clk_get(dev, "sw_usb3");
...
err = clk_prepare_enable(priv->usb_30_clk);
if (err)
return err;
In the normal probe flow, those clocks are only disabled and unprepared near
the end of brcm_usb_phy_probe():
clk_disable_unprepare(priv->usb_20_clk);
clk_disable_unprepare(priv->usb_30_clk);
If a subsequent step in brcm_usb_phy_dvr_init() fails (such as
devm_phy_create(), devm_clk_get() returning -EPROBE_DEFER for sw_usb3 or
usb0_freerun, clk_prepare_enable(priv->usb_30_clk), or devm_request_irq()),
brcm_usb_phy_dvr_init() returns the error directly without calling
clk_disable_unprepare() on the already-enabled clocks.
Because devm_clk_get() only registers clk_put() on devres release, unwinding
probe failure will call clk_put() on clocks whose prepare and enable counts
were never balanced.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261103104240.1373792-1-vulab@iscas.ac.cn?part=1
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-11-05 15:45 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-11-03 10:42 [PATCH] phy: broadcom: use devm_clk_get() in brcm_usb_phy_dvr_init() Wentao Liang
2026-11-03 11:10 ` Krzysztof Kozlowski
2026-11-05 15:45 ` sashiko-bot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox