From: Vinod Koul <vkoul@kernel.org>
To: Josua Mayer <josua@solid-run.com>
Cc: Kishon Vijay Abraham I <kishon@kernel.org>,
linux-phy@lists.infradead.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] phy: mvebu-cp110-utmi: support swapping d+/d- lanes by dts property
Date: Sun, 4 Aug 2024 23:18:45 +0530 [thread overview]
Message-ID: <Zq--_WIgaPXPiYRQ@matsya> (raw)
In-Reply-To: <20240704-mvebu-utmi-phy-v1-1-9d3c8eea46e5@solid-run.com>
On 04-07-24, 16:57, Josua Mayer wrote:
> CP11x UTMI PHY supports swapping D+/D- signals via digital control
> register 1.
>
> Add support for the "swap-dx-lanes" device-tree property, which lists
> the port-ids that should swap D+ and D-.
> The property is evaluated in probe and applied before power-on
> during mvebu_cp110_utmi_port_setup.
It fails my build tests
drivers/phy/marvell/phy-mvebu-cp110-utmi.c:
In function ‘mvebu_cp110_utmi_phy_probe’:
drivers/phy/marvell/phy-mvebu-cp110-utmi.c:361:89:
error: macro "of_property_for_each_u32" passed 5 arguments, but takes
just 3
361 | of_property_for_each_u32(dev->of_node,
"swap-dx-lanes", prop, p, swap_dx)
|
^
In file included from
drivers/phy/marvell/phy-mvebu-cp110-utmi.c:15:
include/linux/of.h:1432: note:
macro "of_property_for_each_u32" defined here
1432 | #define of_property_for_each_u32(np, propname, u)
\
|
drivers/phy/marvell/phy-mvebu-cp110-utmi.c:361:17:
error: ‘of_property_for_each_u32’ undeclared (first use in this
function); did you mean ‘of_property_read_u32’?
361 | of_property_for_each_u32(dev->of_node,
"swap-dx-lanes", prop, p, swap_dx)
| ^~~~~~~~~~~~~~~~~~~~~~~~
| of_property_read_u32
drivers/phy/marvell/phy-mvebu-cp110-utmi.c:361:17:
note: each undeclared identifier is reported only once for each function
it appears in
drivers/phy/marvell/phy-mvebu-cp110-utmi.c:361:41:
error: expected ‘;’ before ‘if’
361 | of_property_for_each_u32(dev->of_node,
"swap-dx-lanes", prop, p, swap_dx)
| ^
| ;
362 | if (swap_dx == port_id)
| ~~
drivers/phy/marvell/phy-mvebu-cp110-utmi.c:301:13:
error: unused variable ‘swap_dx’ [-Werror=unused-variable]
301 | u32 swap_dx = 0;
| ^~~~~~~
drivers/phy/marvell/phy-mvebu-cp110-utmi.c:299:23:
error: unused variable ‘p’ [-Werror=unused-variable]
299 | const __be32 *p;
| ^
drivers/phy/marvell/phy-mvebu-cp110-utmi.c:298:26:
error: unused variable ‘prop’ [-Werror=unused-variable]
298 | struct property *prop;
| ^~~~
cc1: all warnings being treated as errors
>
> Signed-off-by: Josua Mayer <josua@solid-run.com>
> ---
> drivers/phy/marvell/phy-mvebu-cp110-utmi.c | 17 +++++++++++++++++
> 1 file changed, 17 insertions(+)
>
> diff --git a/drivers/phy/marvell/phy-mvebu-cp110-utmi.c b/drivers/phy/marvell/phy-mvebu-cp110-utmi.c
> index 4922a5f3327d..5e403f842e9a 100644
> --- a/drivers/phy/marvell/phy-mvebu-cp110-utmi.c
> +++ b/drivers/phy/marvell/phy-mvebu-cp110-utmi.c
> @@ -62,6 +62,8 @@
> #define SQ_AMP_CAL_MASK GENMASK(2, 0)
> #define SQ_AMP_CAL_VAL 1
> #define SQ_AMP_CAL_EN BIT(3)
> +#define UTMI_DIG_CTRL1_REG 0x20
> +#define SWAP_DPDM BIT(15)
> #define UTMI_CTRL_STATUS0_REG 0x24
> #define SUSPENDM BIT(22)
> #define TEST_SEL BIT(25)
> @@ -104,6 +106,7 @@ struct mvebu_cp110_utmi_port {
> struct mvebu_cp110_utmi *priv;
> u32 id;
> enum usb_dr_mode dr_mode;
> + bool swap_dx;
> };
>
> static void mvebu_cp110_utmi_port_setup(struct mvebu_cp110_utmi_port *port)
> @@ -159,6 +162,13 @@ static void mvebu_cp110_utmi_port_setup(struct mvebu_cp110_utmi_port *port)
> reg &= ~(VDAT_MASK | VSRC_MASK);
> reg |= (VDAT_VAL << VDAT_OFFSET) | (VSRC_VAL << VSRC_OFFSET);
> writel(reg, PORT_REGS(port) + UTMI_CHGDTC_CTRL_REG);
> +
> + /* Swap D+/D- */
> + reg = readl(PORT_REGS(port) + UTMI_DIG_CTRL1_REG);
> + reg &= ~(SWAP_DPDM);
> + if (port->swap_dx)
> + reg |= SWAP_DPDM;
> + writel(reg, PORT_REGS(port) + UTMI_DIG_CTRL1_REG);
> }
>
> static int mvebu_cp110_utmi_phy_power_off(struct phy *phy)
> @@ -285,7 +295,10 @@ static int mvebu_cp110_utmi_phy_probe(struct platform_device *pdev)
> struct mvebu_cp110_utmi *utmi;
> struct phy_provider *provider;
> struct device_node *child;
> + struct property *prop;
> + const __be32 *p;
> u32 usb_devices = 0;
> + u32 swap_dx = 0;
>
> utmi = devm_kzalloc(dev, sizeof(*utmi), GFP_KERNEL);
> if (!utmi)
> @@ -345,6 +358,10 @@ static int mvebu_cp110_utmi_phy_probe(struct platform_device *pdev)
> }
> }
>
> + of_property_for_each_u32(dev->of_node, "swap-dx-lanes", prop, p, swap_dx)
> + if (swap_dx == port_id)
> + port->swap_dx = 1;
> +
> /* Retrieve PHY capabilities */
> utmi->ops = &mvebu_cp110_utmi_phy_ops;
>
>
> ---
> base-commit: 4de480264948cbf2b08a72c39ee122a9f9761e03
> change-id: 20240704-mvebu-utmi-phy-84aa3bf3957d
>
> Sincerely,
> --
> Josua Mayer <josua@solid-run.com>
--
~Vinod
--
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: Vinod Koul <vkoul@kernel.org>
To: Josua Mayer <josua@solid-run.com>
Cc: Kishon Vijay Abraham I <kishon@kernel.org>,
linux-phy@lists.infradead.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] phy: mvebu-cp110-utmi: support swapping d+/d- lanes by dts property
Date: Sun, 4 Aug 2024 23:18:45 +0530 [thread overview]
Message-ID: <Zq--_WIgaPXPiYRQ@matsya> (raw)
In-Reply-To: <20240704-mvebu-utmi-phy-v1-1-9d3c8eea46e5@solid-run.com>
On 04-07-24, 16:57, Josua Mayer wrote:
> CP11x UTMI PHY supports swapping D+/D- signals via digital control
> register 1.
>
> Add support for the "swap-dx-lanes" device-tree property, which lists
> the port-ids that should swap D+ and D-.
> The property is evaluated in probe and applied before power-on
> during mvebu_cp110_utmi_port_setup.
It fails my build tests
drivers/phy/marvell/phy-mvebu-cp110-utmi.c:
In function ‘mvebu_cp110_utmi_phy_probe’:
drivers/phy/marvell/phy-mvebu-cp110-utmi.c:361:89:
error: macro "of_property_for_each_u32" passed 5 arguments, but takes
just 3
361 | of_property_for_each_u32(dev->of_node,
"swap-dx-lanes", prop, p, swap_dx)
|
^
In file included from
drivers/phy/marvell/phy-mvebu-cp110-utmi.c:15:
include/linux/of.h:1432: note:
macro "of_property_for_each_u32" defined here
1432 | #define of_property_for_each_u32(np, propname, u)
\
|
drivers/phy/marvell/phy-mvebu-cp110-utmi.c:361:17:
error: ‘of_property_for_each_u32’ undeclared (first use in this
function); did you mean ‘of_property_read_u32’?
361 | of_property_for_each_u32(dev->of_node,
"swap-dx-lanes", prop, p, swap_dx)
| ^~~~~~~~~~~~~~~~~~~~~~~~
| of_property_read_u32
drivers/phy/marvell/phy-mvebu-cp110-utmi.c:361:17:
note: each undeclared identifier is reported only once for each function
it appears in
drivers/phy/marvell/phy-mvebu-cp110-utmi.c:361:41:
error: expected ‘;’ before ‘if’
361 | of_property_for_each_u32(dev->of_node,
"swap-dx-lanes", prop, p, swap_dx)
| ^
| ;
362 | if (swap_dx == port_id)
| ~~
drivers/phy/marvell/phy-mvebu-cp110-utmi.c:301:13:
error: unused variable ‘swap_dx’ [-Werror=unused-variable]
301 | u32 swap_dx = 0;
| ^~~~~~~
drivers/phy/marvell/phy-mvebu-cp110-utmi.c:299:23:
error: unused variable ‘p’ [-Werror=unused-variable]
299 | const __be32 *p;
| ^
drivers/phy/marvell/phy-mvebu-cp110-utmi.c:298:26:
error: unused variable ‘prop’ [-Werror=unused-variable]
298 | struct property *prop;
| ^~~~
cc1: all warnings being treated as errors
>
> Signed-off-by: Josua Mayer <josua@solid-run.com>
> ---
> drivers/phy/marvell/phy-mvebu-cp110-utmi.c | 17 +++++++++++++++++
> 1 file changed, 17 insertions(+)
>
> diff --git a/drivers/phy/marvell/phy-mvebu-cp110-utmi.c b/drivers/phy/marvell/phy-mvebu-cp110-utmi.c
> index 4922a5f3327d..5e403f842e9a 100644
> --- a/drivers/phy/marvell/phy-mvebu-cp110-utmi.c
> +++ b/drivers/phy/marvell/phy-mvebu-cp110-utmi.c
> @@ -62,6 +62,8 @@
> #define SQ_AMP_CAL_MASK GENMASK(2, 0)
> #define SQ_AMP_CAL_VAL 1
> #define SQ_AMP_CAL_EN BIT(3)
> +#define UTMI_DIG_CTRL1_REG 0x20
> +#define SWAP_DPDM BIT(15)
> #define UTMI_CTRL_STATUS0_REG 0x24
> #define SUSPENDM BIT(22)
> #define TEST_SEL BIT(25)
> @@ -104,6 +106,7 @@ struct mvebu_cp110_utmi_port {
> struct mvebu_cp110_utmi *priv;
> u32 id;
> enum usb_dr_mode dr_mode;
> + bool swap_dx;
> };
>
> static void mvebu_cp110_utmi_port_setup(struct mvebu_cp110_utmi_port *port)
> @@ -159,6 +162,13 @@ static void mvebu_cp110_utmi_port_setup(struct mvebu_cp110_utmi_port *port)
> reg &= ~(VDAT_MASK | VSRC_MASK);
> reg |= (VDAT_VAL << VDAT_OFFSET) | (VSRC_VAL << VSRC_OFFSET);
> writel(reg, PORT_REGS(port) + UTMI_CHGDTC_CTRL_REG);
> +
> + /* Swap D+/D- */
> + reg = readl(PORT_REGS(port) + UTMI_DIG_CTRL1_REG);
> + reg &= ~(SWAP_DPDM);
> + if (port->swap_dx)
> + reg |= SWAP_DPDM;
> + writel(reg, PORT_REGS(port) + UTMI_DIG_CTRL1_REG);
> }
>
> static int mvebu_cp110_utmi_phy_power_off(struct phy *phy)
> @@ -285,7 +295,10 @@ static int mvebu_cp110_utmi_phy_probe(struct platform_device *pdev)
> struct mvebu_cp110_utmi *utmi;
> struct phy_provider *provider;
> struct device_node *child;
> + struct property *prop;
> + const __be32 *p;
> u32 usb_devices = 0;
> + u32 swap_dx = 0;
>
> utmi = devm_kzalloc(dev, sizeof(*utmi), GFP_KERNEL);
> if (!utmi)
> @@ -345,6 +358,10 @@ static int mvebu_cp110_utmi_phy_probe(struct platform_device *pdev)
> }
> }
>
> + of_property_for_each_u32(dev->of_node, "swap-dx-lanes", prop, p, swap_dx)
> + if (swap_dx == port_id)
> + port->swap_dx = 1;
> +
> /* Retrieve PHY capabilities */
> utmi->ops = &mvebu_cp110_utmi_phy_ops;
>
>
> ---
> base-commit: 4de480264948cbf2b08a72c39ee122a9f9761e03
> change-id: 20240704-mvebu-utmi-phy-84aa3bf3957d
>
> Sincerely,
> --
> Josua Mayer <josua@solid-run.com>
--
~Vinod
next prev parent reply other threads:[~2024-08-04 17:48 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-04 14:57 [PATCH] phy: mvebu-cp110-utmi: support swapping d+/d- lanes by dts property Josua Mayer
2024-07-04 14:57 ` Josua Mayer
2024-08-04 17:48 ` Vinod Koul [this message]
2024-08-04 17:48 ` Vinod Koul
2024-09-03 8:04 ` Josua Mayer
2024-09-03 8:04 ` Josua Mayer
2024-10-07 15:48 ` Vinod Koul
2024-10-07 15:48 ` Vinod Koul
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=Zq--_WIgaPXPiYRQ@matsya \
--to=vkoul@kernel.org \
--cc=josua@solid-run.com \
--cc=kishon@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-phy@lists.infradead.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.