From: sashiko-bot@kernel.org
To: "Joey Lu" <a0987203069@gmail.com>
Cc: linux-phy@lists.infradead.org, devicetree@vger.kernel.org,
robh@kernel.org, conor+dt@kernel.org, vkoul@kernel.org,
neil.armstrong@linaro.org, olteanv@gmail.com
Subject: Re: [PATCH v8 4/4] phy: nuvoton: phy-ma35d1-usb2: extend to dual-port with OTG support
Date: Mon, 09 Nov 2026 07:14:17 +0000 [thread overview]
Message-ID: <sashiko-outbox-204535@kernel.org> (raw)
In-Reply-To: <20261109065606.62641-5-a0987203069@gmail.com>
Thank you for your contribution! Sashiko AI review found 1 potential
issue to consider:
- [Medium] phy: nuvoton: missing MFD_SYSCON select and unchecked
regmap_read()
--
commit ce87e45e509dca5386021bb0dd4e3bb91e3935d8
Author: Joey Lu <a0987203069@gmail.com>
phy: nuvoton: phy-ma35d1-usb2: extend to dual-port with OTG support
This commit extends the Nuvoton MA35D1 USB 2.0 PHY driver to support both
PHY0 and PHY1, updates clock-stability polling in phy_init(), registers a
read-only USB role switch for PHY0, and adds resistor calibration and
over-current polarity device-tree properties.
> diff --git a/drivers/phy/nuvoton/Kconfig b/drivers/phy/nuvoton/Kconfig
> index d02cae2db315a..1f37e860de507 100644
> --- a/drivers/phy/nuvoton/Kconfig
> +++ b/drivers/phy/nuvoton/Kconfig
> @@ -6,6 +6,7 @@ config PHY_MA35_USB
> tristate "Nuvoton MA35 USB2.0 PHY driver"
> depends on ARCH_MA35 || COMPILE_TEST
> depends on OF
> + depends on USB_ROLE_SWITCH || !USB_ROLE_SWITCH
> select GENERIC_PHY
> help
> Enable this to support the USB2.0 PHY on the Nuvoton MA35
> diff --git a/drivers/phy/nuvoton/phy-ma35d1-usb2.c b/drivers/phy/nuvoton/phy-ma35d1-usb2.c
> index 0b9976fb15c17..bc706356c4341 100644
> --- a/drivers/phy/nuvoton/phy-ma35d1-usb2.c
> +++ b/drivers/phy/nuvoton/phy-ma35d1-usb2.c
[ ... ]
> +static int ma35_usb_phy_init(struct phy *phy)
> +{
> + struct ma35_phy_port *port = phy_get_drvdata(phy);
> + struct ma35_usb_phy *p = container_of(port - port->idx,
> + struct ma35_usb_phy, port[0]);
> + unsigned int n = port->idx;
> unsigned int val;
> int ret;
>
> - ret = clk_prepare_enable(p_phy->clk);
> - if (ret < 0) {
> - dev_err(p_phy->dev, "Failed to enable PHY clock: %d\n", ret);
> - return ret;
> - }
> + ret = clk_prepare_enable(p->clk);
> + if (ret)
> + return dev_err_probe(p->dev, ret, "failed to enable clock\n");
>
> - regmap_read(p_phy->sysreg, MA35_SYS_REG_USBPMISCR, &val);
> - if (val & PHY0SUSPEND) {
> - /*
> - * USB PHY0 is in operation mode already
> - * make sure USB PHY 60 MHz UTMI Interface Clock ready
> - */
> - ret = regmap_read_poll_timeout(p_phy->sysreg, MA35_SYS_REG_USBPMISCR, val,
> - val & PHY0DEVCKSTB, 10, 1000);
> - if (ret == 0)
> - return 0;
> - }
> + regmap_read(p->sysreg, MA35_SYS_USBPMISCR, &val);
>
> - /*
> - * reset USB PHY0.
> - * wait until USB PHY0 60 MHz UTMI Interface Clock ready
> - */
> - regmap_update_bits(p_phy->sysreg, MA35_SYS_REG_USBPMISCR, 0x7, (PHY0POR | PHY0SUSPEND));
> + if ((val & USBPMISCR_PHY_SUSPEND(n)) &&
> + !ma35_usb_phy_wait_ready(p, n, &val))
> + goto out;
[ ... ]
> +static enum usb_role ma35_role_sw_get(struct usb_role_switch *sw)
> +{
> + struct ma35_usb_phy *p = usb_role_switch_get_drvdata(sw);
> + u32 val;
> +
> + regmap_read(p->sysreg, MA35_SYS_PWRONOTP, &val);
> +
> + return (val & PWRONOTP_USBP0ID) ? USB_ROLE_HOST : USB_ROLE_DEVICE;
> +}
[Severity: Medium]
Can val be used uninitialized in ma35_usb_phy_init() and
ma35_role_sw_get() when regmap_read() fails or is stubbed out?
Neither PHY_MA35_USB nor ARCH_MA35 selects MFD_SYSCON, so PHY_MA35_USB can
be built with CONFIG_MFD_SYSCON=n and CONFIG_REGMAP=n. In that
configuration, syscon_regmap_lookup_by_phandle() always fails with
-ENOTSUPP, and the regmap_read() stub returns -EINVAL without writing val,
causing the compiler to flag val as uninitialized in ma35_usb_phy_init()
and ma35_role_sw_get().
Selecting MFD_SYSCON in PHY_MA35_USB and checking the regmap_read() return
value (or initializing val) would avoid both issues.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261109065606.62641-1-a0987203069@gmail.com?part=4
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
WARNING: multiple messages have this Message-ID (diff)
From: sashiko-bot@kernel.org
To: "Joey Lu" <a0987203069@gmail.com>
Cc: linux-phy@lists.infradead.org, devicetree@vger.kernel.org,
robh@kernel.org, conor+dt@kernel.org, vkoul@kernel.org,
neil.armstrong@linaro.org, olteanv@gmail.com
Subject: Re: [PATCH v8 4/4] phy: nuvoton: phy-ma35d1-usb2: extend to dual-port with OTG support
Date: Mon, 09 Nov 2026 07:14:17 +0000 [thread overview]
Message-ID: <sashiko-outbox-204535@kernel.org> (raw)
In-Reply-To: <20261109065606.62641-5-a0987203069@gmail.com>
Thank you for your contribution! Sashiko AI review found 1 potential
issue to consider:
- [Medium] phy: nuvoton: missing MFD_SYSCON select and unchecked
regmap_read()
--
commit ce87e45e509dca5386021bb0dd4e3bb91e3935d8
Author: Joey Lu <a0987203069@gmail.com>
phy: nuvoton: phy-ma35d1-usb2: extend to dual-port with OTG support
This commit extends the Nuvoton MA35D1 USB 2.0 PHY driver to support both
PHY0 and PHY1, updates clock-stability polling in phy_init(), registers a
read-only USB role switch for PHY0, and adds resistor calibration and
over-current polarity device-tree properties.
> diff --git a/drivers/phy/nuvoton/Kconfig b/drivers/phy/nuvoton/Kconfig
> index d02cae2db315a..1f37e860de507 100644
> --- a/drivers/phy/nuvoton/Kconfig
> +++ b/drivers/phy/nuvoton/Kconfig
> @@ -6,6 +6,7 @@ config PHY_MA35_USB
> tristate "Nuvoton MA35 USB2.0 PHY driver"
> depends on ARCH_MA35 || COMPILE_TEST
> depends on OF
> + depends on USB_ROLE_SWITCH || !USB_ROLE_SWITCH
> select GENERIC_PHY
> help
> Enable this to support the USB2.0 PHY on the Nuvoton MA35
> diff --git a/drivers/phy/nuvoton/phy-ma35d1-usb2.c b/drivers/phy/nuvoton/phy-ma35d1-usb2.c
> index 0b9976fb15c17..bc706356c4341 100644
> --- a/drivers/phy/nuvoton/phy-ma35d1-usb2.c
> +++ b/drivers/phy/nuvoton/phy-ma35d1-usb2.c
[ ... ]
> +static int ma35_usb_phy_init(struct phy *phy)
> +{
> + struct ma35_phy_port *port = phy_get_drvdata(phy);
> + struct ma35_usb_phy *p = container_of(port - port->idx,
> + struct ma35_usb_phy, port[0]);
> + unsigned int n = port->idx;
> unsigned int val;
> int ret;
>
> - ret = clk_prepare_enable(p_phy->clk);
> - if (ret < 0) {
> - dev_err(p_phy->dev, "Failed to enable PHY clock: %d\n", ret);
> - return ret;
> - }
> + ret = clk_prepare_enable(p->clk);
> + if (ret)
> + return dev_err_probe(p->dev, ret, "failed to enable clock\n");
>
> - regmap_read(p_phy->sysreg, MA35_SYS_REG_USBPMISCR, &val);
> - if (val & PHY0SUSPEND) {
> - /*
> - * USB PHY0 is in operation mode already
> - * make sure USB PHY 60 MHz UTMI Interface Clock ready
> - */
> - ret = regmap_read_poll_timeout(p_phy->sysreg, MA35_SYS_REG_USBPMISCR, val,
> - val & PHY0DEVCKSTB, 10, 1000);
> - if (ret == 0)
> - return 0;
> - }
> + regmap_read(p->sysreg, MA35_SYS_USBPMISCR, &val);
>
> - /*
> - * reset USB PHY0.
> - * wait until USB PHY0 60 MHz UTMI Interface Clock ready
> - */
> - regmap_update_bits(p_phy->sysreg, MA35_SYS_REG_USBPMISCR, 0x7, (PHY0POR | PHY0SUSPEND));
> + if ((val & USBPMISCR_PHY_SUSPEND(n)) &&
> + !ma35_usb_phy_wait_ready(p, n, &val))
> + goto out;
[ ... ]
> +static enum usb_role ma35_role_sw_get(struct usb_role_switch *sw)
> +{
> + struct ma35_usb_phy *p = usb_role_switch_get_drvdata(sw);
> + u32 val;
> +
> + regmap_read(p->sysreg, MA35_SYS_PWRONOTP, &val);
> +
> + return (val & PWRONOTP_USBP0ID) ? USB_ROLE_HOST : USB_ROLE_DEVICE;
> +}
[Severity: Medium]
Can val be used uninitialized in ma35_usb_phy_init() and
ma35_role_sw_get() when regmap_read() fails or is stubbed out?
Neither PHY_MA35_USB nor ARCH_MA35 selects MFD_SYSCON, so PHY_MA35_USB can
be built with CONFIG_MFD_SYSCON=n and CONFIG_REGMAP=n. In that
configuration, syscon_regmap_lookup_by_phandle() always fails with
-ENOTSUPP, and the regmap_read() stub returns -EINVAL without writing val,
causing the compiler to flag val as uninitialized in ma35_usb_phy_init()
and ma35_role_sw_get().
Selecting MFD_SYSCON in PHY_MA35_USB and checking the regmap_read() return
value (or initializing val) would avoid both issues.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261109065606.62641-1-a0987203069@gmail.com?part=4
next prev parent reply other threads:[~2026-11-09 7:14 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-09 6:56 [PATCH v8 0/4] phy: nuvoton: extend MA35D1 USB2 PHY driver for dual-port OTG support Joey Lu
2026-11-09 6:56 ` Joey Lu
2026-11-09 6:56 ` [PATCH v8 1/4] dt-bindings: phy: nuvoton,ma35d1-usb2-phy: extend for dual-port and OTG Joey Lu
2026-11-09 6:56 ` Joey Lu
2026-11-09 6:56 ` [PATCH v8 2/4] arm64: dts: nuvoton: ma35d1: add USB controllers and dual-port PHY node Joey Lu
2026-11-09 6:56 ` Joey Lu
2026-11-09 7:16 ` sashiko-bot
2026-11-09 7:16 ` sashiko-bot
2026-11-10 1:36 ` Joey Lu
2026-11-10 1:36 ` Joey Lu
2026-11-09 6:56 ` [PATCH v8 3/4] phy: nuvoton: phy-ma35d1-usb2: remove unused linux/io.h include Joey Lu
2026-11-09 6:56 ` Joey Lu
2026-11-09 6:56 ` [PATCH v8 4/4] phy: nuvoton: phy-ma35d1-usb2: extend to dual-port with OTG support Joey Lu
2026-11-09 6:56 ` Joey Lu
2026-11-09 7:14 ` sashiko-bot [this message]
2026-11-09 7:14 ` sashiko-bot
2026-11-10 1:37 ` Joey Lu
2026-11-10 1:37 ` Joey Lu
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=sashiko-outbox-204535@kernel.org \
--to=sashiko-bot@kernel.org \
--cc=a0987203069@gmail.com \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=linux-phy@lists.infradead.org \
--cc=neil.armstrong@linaro.org \
--cc=olteanv@gmail.com \
--cc=robh@kernel.org \
--cc=sashiko-reviews@lists.linux.dev \
--cc=vkoul@kernel.org \
/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.