All of lore.kernel.org
 help / color / mirror / Atom feed
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

  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.