[PATCH v3 3/5] phy: cix: Add CIX Sky1 USB3 PHY driver

sashiko-bot at kernel.org sashiko-bot at kernel.org
Wed Sep 2 19:48:51 PDT 2026


Thank you for your contribution! Sashiko AI review found 4 potential issue(s) to consider:
- [Low] Incorrect format specifier for printing `device_node` pointer.
- [Low] Missing `devm_mutex_init()` for devm-allocated mutex.
- [Low] Missing explicit inclusion of `<linux/property.h>`.
- [Low] Unused data structures and enumerations in the header file.
--

commit 5cad48211eb5758f9a40687789544cb07846cb4a
Author: Hongliang Yang <hongliang.yang at cixtech.com>

phy: cix: Add CIX Sky1 USB3 PHY driver

Add PHY driver for the USB3 PHY found on CIX Sky1 SoCs. The driver
handles initialization, reset, and clock management for the
multi-port USB3 PHY.

> diff --git a/drivers/phy/cix/phy-cix-usb3.c b/drivers/phy/cix/phy-cix-usb3.c
> new file mode 100644
> index 0000000000000..0f074af84e909
> --- /dev/null
> +++ b/drivers/phy/cix/phy-cix-usb3.c
> @@ -0,0 +1,410 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/*
> + * phy driver for cdn_sd0803_t7g_typea
> + *
> + * Author: Hongliang Yang <hongliang.yang at cixtech.com>
> + */
> +
> +#include <linux/clk.h>
> +#include <linux/io.h>
> +#include <linux/kernel.h>
> +#include <linux/module.h>
> +#include <linux/mutex.h>
> +#include <linux/of.h>
> +#include <linux/phy/phy.h>
> +#include <linux/platform_device.h>
> +#include <linux/regmap.h>
> +#include <linux/reset.h>
> +#include "phy-cix-usbdp.h"

[Severity: Low]
Since the driver uses device_for_each_child_node_scoped(), should
<linux/property.h> be explicitly included here to avoid relying on implicit
dependencies from other headers?

[ ... ]

> +static int cix_u3phy_probe(struct platform_device *pdev)
> +{
> +	struct cix_u3phy *u3phy;
> +	struct device *dev = &pdev->dev;
> +	struct phy_provider *phy_provider;
> +	struct device_node *np = dev->of_node;
> +	struct device_node *child_np;
> +	struct phy *phy;
> +	int ret;
> +
> +	u3phy = devm_kzalloc(dev, sizeof(*u3phy), GFP_KERNEL);
> +	if (!u3phy)
> +		return -ENOMEM;
> +	dev_set_drvdata(dev, u3phy);
> +	u3phy->dev = dev;
> +	u3phy->cfg = device_get_match_data(dev);
> +	if (!u3phy->cfg) {
> +		dev_err(dev, "no OF data can be matched with %p node\n", np);

[Severity: Low]
Will this print the raw pointer address instead of the device node name?
Since np is a device_node pointer, should the %pOF format specifier be
used instead?

> +		return -EINVAL;
> +	}
> +	u3phy->reset = devm_reset_control_get_exclusive(dev, "core");

[ ... ]

> +	u3phy->base = devm_platform_ioremap_resource(pdev, 0);
> +	if (IS_ERR(u3phy->base))
> +		return PTR_ERR(u3phy->base);
> +	u3phy->phy_regmap = devm_regmap_init(dev, NULL, u3phy, &cix_u3phy_regmap_cfg);
> +	if (IS_ERR(u3phy->phy_regmap)) {
> +		dev_err(dev, "failed to remap phy register\n");
> +		return PTR_ERR(u3phy->phy_regmap);
> +	}
> +	mutex_init(&u3phy->mutex);

[Severity: Low]
Since u3phy is allocated using devm_kzalloc(), the memory will be
automatically freed on driver unbind. When initialized with mutex_init(),
mutex_destroy() won't be called automatically, which skips cleanup steps
expected by the resource management API for devm-allocated mutexes. Should
devm_mutex_init() be used here instead?

> +	device_for_each_child_node_scoped(dev, child_fn) {
> +		const char *name = fwnode_get_name(child_fn);

[ ... ]

> diff --git a/drivers/phy/cix/phy-cix-usbdp.h b/drivers/phy/cix/phy-cix-usbdp.h
> new file mode 100644
> index 0000000000000..6ec7eb5c81aa9
> --- /dev/null
> +++ b/drivers/phy/cix/phy-cix-usbdp.h
> @@ -0,0 +1,310 @@

[ ... ]

> +/* gop status address */
> +#define GOP_STATUS_ADDRESS 0x83E05000
> +#define GOP_STATUS_SIZE 0x04
> +
> +struct gop_status {
> +	unsigned char phy_status[4];
> +};
> +
> +/*
> + * 0: usb
> + * 1: 2 lane usb+ 2 lane dp
> + * 2: usb device
> + * 3: usb2.0 + 4 lane dp
> + */
> +enum phy_role {
> +	USB_ROLE_NONE,
> +	USB_ROLE_HOST,
> +	USB_ROLE_DEVICE,
> +	USB_ROLE_HOST_20,
> +};

[Severity: Low]
Are this struct and enum needed? Neither gop_status nor phy_role appear to
be used anywhere in the provided code.

> +
> +#endif

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260903023521.2064986-1-hongliang.yang@cixtech.com?part=3



More information about the linux-phy mailing list