All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC PATCH net-next 0/4] RGMII Internal delay common property
@ 2020-05-21 17:48 Dan Murphy
  2020-05-21 17:48 ` [RFC PATCH net-next 1/4] dt-bindings: net: Add tx and rx internal delays Dan Murphy
                   ` (3 more replies)
  0 siblings, 4 replies; 10+ messages in thread
From: Dan Murphy @ 2020-05-21 17:48 UTC (permalink / raw)
  To: andrew, f.fainelli, hkallweit1, davem, robh
  Cc: netdev, linux-kernel, devicetree, Dan Murphy

Hello

The RGMII internal delay is a common setting found in most RGMII capable PHY
devices.  It was found that many vendor specific device tree properties exist
to do the same function. This creates a common property to be used for PHY's
that have tunable internal delays for the Rx and Tx paths.

Dan Murphy (4):
  dt-bindings: net: Add tx and rx internal delays
  net: phy: Add a helper to return the index for of the internal delay
  dt-bindings: net: Add RGMII internal delay for DP83869
  net: dp83869: Add RGMII internal delay configuration

 .../bindings/net/ethernet-controller.yaml     |  14 +++
 .../devicetree/bindings/net/ti,dp83869.yaml   |  16 +++
 drivers/net/phy/dp83869.c                     | 101 ++++++++++++++++++
 drivers/net/phy/phy_device.c                  |  45 ++++++++
 include/linux/phy.h                           |   2 +
 5 files changed, 178 insertions(+)

-- 
2.26.2


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [RFC PATCH net-next 1/4] dt-bindings: net: Add tx and rx internal delays
  2020-05-21 17:48 [RFC PATCH net-next 0/4] RGMII Internal delay common property Dan Murphy
@ 2020-05-21 17:48 ` Dan Murphy
  2020-05-21 18:06   ` Florian Fainelli
  2020-05-21 17:48 ` [RFC PATCH net-next 2/4] net: phy: Add a helper to return the index for of the internal delay Dan Murphy
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 10+ messages in thread
From: Dan Murphy @ 2020-05-21 17:48 UTC (permalink / raw)
  To: andrew, f.fainelli, hkallweit1, davem, robh
  Cc: netdev, linux-kernel, devicetree, Dan Murphy

tx-internal-delays and rx-internal-delays are a common setting for RGMII
capable devices.

These properties are used when the phy-mode or phy-controller is set to
rgmii-id, rgmii-rxid or rgmii-txid.  These modes indicate to the
controller that the PHY will add the internal delay for the connection.

Signed-off-by: Dan Murphy <dmurphy@ti.com>
---
 .../bindings/net/ethernet-controller.yaml          | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/Documentation/devicetree/bindings/net/ethernet-controller.yaml b/Documentation/devicetree/bindings/net/ethernet-controller.yaml
index ac471b60ed6a..3f25066c339c 100644
--- a/Documentation/devicetree/bindings/net/ethernet-controller.yaml
+++ b/Documentation/devicetree/bindings/net/ethernet-controller.yaml
@@ -143,6 +143,20 @@ properties:
       Specifies the PHY management type. If auto is set and fixed-link
       is not specified, it uses MDIO for management.
 
+  rx-internal-delay:
+    $ref: /schemas/types.yaml#definitions/uint32
+    description: |
+      RGMII Receive PHY Clock Delay defined in pico seconds.  This is used for
+      PHY's that have configurable RX internal delays.  This property is only
+      used when the phy-mode or phy-connection-type is rgmii-id or rgmii-rxid.
+
+  tx-internal-delay:
+    $ref: /schemas/types.yaml#definitions/uint32
+    description: |
+      RGMII Transmit PHY Clock Delay defined in pico seconds.  This is used for
+      PHY's that have configurable TX internal delays.  This property is only
+      used when the phy-mode or phy-connection-type is rgmii-id or rgmii-txid.
+
   fixed-link:
     allOf:
       - if:
-- 
2.26.2


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [RFC PATCH net-next 2/4] net: phy: Add a helper to return the index for of the internal delay
  2020-05-21 17:48 [RFC PATCH net-next 0/4] RGMII Internal delay common property Dan Murphy
  2020-05-21 17:48 ` [RFC PATCH net-next 1/4] dt-bindings: net: Add tx and rx internal delays Dan Murphy
@ 2020-05-21 17:48 ` Dan Murphy
  2020-05-21 17:48 ` [RFC PATCH net-next 3/4] dt-bindings: net: Add RGMII internal delay for DP83869 Dan Murphy
  2020-05-21 17:48 ` [RFC PATCH net-next 4/4] net: dp83869: Add RGMII internal delay configuration Dan Murphy
  3 siblings, 0 replies; 10+ messages in thread
From: Dan Murphy @ 2020-05-21 17:48 UTC (permalink / raw)
  To: andrew, f.fainelli, hkallweit1, davem, robh
  Cc: netdev, linux-kernel, devicetree, Dan Murphy

Add a helper function that will return the index in the array for the
passed in internal delay value.  The helper requires the array, size and
delay value.

The helper will then return the index for the exact match or return the
index for the index to the closest smaller value.

Signed-off-by: Dan Murphy <dmurphy@ti.com>
---
 drivers/net/phy/phy_device.c | 45 ++++++++++++++++++++++++++++++++++++
 include/linux/phy.h          |  2 ++
 2 files changed, 47 insertions(+)

diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c
index 7481135d27ab..40f53b379d2b 100644
--- a/drivers/net/phy/phy_device.c
+++ b/drivers/net/phy/phy_device.c
@@ -2661,6 +2661,51 @@ void phy_get_pause(struct phy_device *phydev, bool *tx_pause, bool *rx_pause)
 }
 EXPORT_SYMBOL(phy_get_pause);
 
+/**
+ * phy_get_delay_index - returns the index of the internal delay
+ * @phydev: phy_device struct
+ * @delay_values: array of delays the PHY supports
+ * @size: the size of the delay array
+ * @delay: the delay to be looked up
+ *
+ * Returns the index within the array of internal delay passed in.
+ */
+int phy_get_delay_index(struct phy_device *phydev, int *delay_values, int size,
+			int delay)
+{
+	int i;
+
+	if (size <= 0)
+		return -EINVAL;
+
+	if (delay <= delay_values[0])
+		return 0;
+
+	if (delay > delay_values[size - 1])
+		return size - 1;
+
+	for (i = 0; i < size; i++) {
+		if (delay == delay_values[i])
+			return i;
+
+		/* Find an approximate index by looking up the table */
+		if (delay > delay_values[i - 1] &&
+		    delay < delay_values[i]) {
+			if (delay - delay_values[i - 1] < delay_values[i] - delay)
+				return i - 1;
+			else
+				return i;
+		}
+
+	}
+
+	phydev_err(phydev, "error finding internal delay index for %d\n",
+		   delay);
+
+	return -EINVAL;
+}
+EXPORT_SYMBOL(phy_get_delay_index);
+
 static bool phy_drv_supports_irq(struct phy_driver *phydrv)
 {
 	return phydrv->config_intr && phydrv->ack_interrupt;
diff --git a/include/linux/phy.h b/include/linux/phy.h
index 467aa8bf9f64..78b7b77f9a67 100644
--- a/include/linux/phy.h
+++ b/include/linux/phy.h
@@ -1406,6 +1406,8 @@ void phy_set_asym_pause(struct phy_device *phydev, bool rx, bool tx);
 bool phy_validate_pause(struct phy_device *phydev,
 			struct ethtool_pauseparam *pp);
 void phy_get_pause(struct phy_device *phydev, bool *tx_pause, bool *rx_pause);
+int phy_get_delay_index(struct phy_device *phydev, int *delay_values,
+			int size, int delay);
 void phy_resolve_pause(unsigned long *local_adv, unsigned long *partner_adv,
 		       bool *tx_pause, bool *rx_pause);
 
-- 
2.26.2


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [RFC PATCH net-next 3/4] dt-bindings: net: Add RGMII internal delay for DP83869
  2020-05-21 17:48 [RFC PATCH net-next 0/4] RGMII Internal delay common property Dan Murphy
  2020-05-21 17:48 ` [RFC PATCH net-next 1/4] dt-bindings: net: Add tx and rx internal delays Dan Murphy
  2020-05-21 17:48 ` [RFC PATCH net-next 2/4] net: phy: Add a helper to return the index for of the internal delay Dan Murphy
@ 2020-05-21 17:48 ` Dan Murphy
  2020-05-21 17:48 ` [RFC PATCH net-next 4/4] net: dp83869: Add RGMII internal delay configuration Dan Murphy
  3 siblings, 0 replies; 10+ messages in thread
From: Dan Murphy @ 2020-05-21 17:48 UTC (permalink / raw)
  To: andrew, f.fainelli, hkallweit1, davem, robh
  Cc: netdev, linux-kernel, devicetree, Dan Murphy

Add the internal delay values into the header and update the binding
with the internal delay properties.

Signed-off-by: Dan Murphy <dmurphy@ti.com>
---
 .../devicetree/bindings/net/ti,dp83869.yaml      | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/Documentation/devicetree/bindings/net/ti,dp83869.yaml b/Documentation/devicetree/bindings/net/ti,dp83869.yaml
index 5b69ef03bbf7..b2547b43e103 100644
--- a/Documentation/devicetree/bindings/net/ti,dp83869.yaml
+++ b/Documentation/devicetree/bindings/net/ti,dp83869.yaml
@@ -64,6 +64,20 @@ properties:
        Operational mode for the PHY.  If this is not set then the operational
        mode is set by the straps. see dt-bindings/net/ti-dp83869.h for values
 
+  rx-internal-delay:
+    $ref: "#/properties/rx-internal-delay"
+    description: Delay is in pico seconds
+    enum: [ 250, 500, 750, 1000, 1250, 1500, 1750, 2000, 2250, 2500, 2750, 3000,
+            3250, 3500, 3750, 4000 ]
+    default: 2000
+
+  tx-internal-delay:
+    $ref: "#/properties/tx-internal-delay"
+    description: Delay is in pico seconds
+    enum: [ 250, 500, 750, 1000, 1250, 1500, 1750, 2000, 2250, 2500, 2750, 3000,
+            3250, 3500, 3750, 4000 ]
+    default: 2000
+
 required:
   - reg
 
@@ -80,5 +94,7 @@ examples:
         ti,op-mode = <DP83869_RGMII_COPPER_ETHERNET>;
         ti,max-output-impedance = "true";
         ti,clk-output-sel = <DP83869_CLK_O_SEL_CHN_A_RCLK>;
+        rx-internal-delay = <2000>;
+        tx-internal-delay = <2000>;
       };
     };
-- 
2.26.2


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [RFC PATCH net-next 4/4] net: dp83869: Add RGMII internal delay configuration
  2020-05-21 17:48 [RFC PATCH net-next 0/4] RGMII Internal delay common property Dan Murphy
                   ` (2 preceding siblings ...)
  2020-05-21 17:48 ` [RFC PATCH net-next 3/4] dt-bindings: net: Add RGMII internal delay for DP83869 Dan Murphy
@ 2020-05-21 17:48 ` Dan Murphy
  2020-05-23 14:58   ` Andrew Lunn
  2020-05-26 13:31     ` Dan Carpenter
  3 siblings, 2 replies; 10+ messages in thread
From: Dan Murphy @ 2020-05-21 17:48 UTC (permalink / raw)
  To: andrew, f.fainelli, hkallweit1, davem, robh
  Cc: netdev, linux-kernel, devicetree, Dan Murphy

Add RGMII internal delay configuration for Rx and Tx.

Signed-off-by: Dan Murphy <dmurphy@ti.com>
---
 drivers/net/phy/dp83869.c | 101 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 101 insertions(+)

diff --git a/drivers/net/phy/dp83869.c b/drivers/net/phy/dp83869.c
index cfb22a21a2e6..40c34fefffe4 100644
--- a/drivers/net/phy/dp83869.c
+++ b/drivers/net/phy/dp83869.c
@@ -99,6 +99,14 @@
 #define DP83869_OP_MODE_MII			BIT(5)
 #define DP83869_SGMII_RGMII_BRIDGE		BIT(6)
 
+/* RGMIIDCTL bits */
+#define DP83869_RGMII_TX_CLK_DELAY_SHIFT	4
+#define DP83869_RGMII_CLK_DELAY_INV		0
+
+static int dp83869_internal_delay[] = {250, 500, 750, 1000, 1250, 1500, 1750,
+				       2000, 2250, 2500, 2750, 3000, 3250,
+				       3500, 3750, 4000};
+
 enum {
 	DP83869_PORT_MIRRORING_KEEP,
 	DP83869_PORT_MIRRORING_EN,
@@ -108,6 +116,8 @@ enum {
 struct dp83869_private {
 	int tx_fifo_depth;
 	int rx_fifo_depth;
+	u32 rx_id_delay;
+	u32 tx_id_delay;
 	int io_impedance;
 	int port_mirroring;
 	bool rxctrl_strap_quirk;
@@ -182,6 +192,7 @@ static int dp83869_of_init(struct phy_device *phydev)
 	struct dp83869_private *dp83869 = phydev->priv;
 	struct device *dev = &phydev->mdio.dev;
 	struct device_node *of_node = dev->of_node;
+	int delay_size = ARRAY_SIZE(dp83869_internal_delay);
 	int ret;
 
 	if (!of_node)
@@ -232,6 +243,26 @@ static int dp83869_of_init(struct phy_device *phydev)
 				 &dp83869->tx_fifo_depth))
 		dp83869->tx_fifo_depth = DP83869_PHYCR_FIFO_DEPTH_4_B_NIB;
 
+	dp83869->rx_id_delay = DP83869_RGMII_CLK_DELAY_INV;
+	ret = of_property_read_u32(of_node, "rx-internal-delay",
+				   &dp83869->rx_id_delay);
+	if (!ret && dp83869->rx_id_delay > dp83869_internal_delay[delay_size]) {
+		phydev_err(phydev,
+			   "rx-internal-delay value of %u out of range\n",
+			   dp83869->rx_id_delay);
+		return -EINVAL;
+	}
+
+	dp83869->tx_id_delay = DP83869_RGMII_CLK_DELAY_INV;
+	ret = of_property_read_u32(of_node, "tx-internal-delay",
+				   &dp83869->tx_id_delay);
+	if (!ret && dp83869->tx_id_delay > dp83869_internal_delay[delay_size]) {
+		phydev_err(phydev,
+			   "tx-internal-delay value of %u out of range\n",
+			   dp83869->tx_id_delay);
+		return -EINVAL;
+	}
+
 	return ret;
 }
 #else
@@ -270,6 +301,29 @@ static int dp83869_configure_rgmii(struct phy_device *phydev,
 	return ret;
 }
 
+static int dp83869_verify_rgmii_cfg(struct phy_device *phydev)
+{
+	struct dp83869_private *dp83869 = phydev->priv;
+
+	/* RX delay *must* be specified if internal delay of RX is used. */
+	if ((phydev->interface == PHY_INTERFACE_MODE_RGMII_ID ||
+	     phydev->interface == PHY_INTERFACE_MODE_RGMII_RXID) &&
+	     dp83869->rx_id_delay == DP83869_RGMII_CLK_DELAY_INV) {
+		phydev_err(phydev, "ti,rx-internal-delay must be specified\n");
+		return -EINVAL;
+	}
+
+	/* TX delay *must* be specified if internal delay of TX is used. */
+	if ((phydev->interface == PHY_INTERFACE_MODE_RGMII_ID ||
+	     phydev->interface == PHY_INTERFACE_MODE_RGMII_TXID) &&
+	     dp83869->tx_id_delay == DP83869_RGMII_CLK_DELAY_INV) {
+		phydev_err(phydev, "ti,tx-internal-delay must be specified\n");
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
 static int dp83869_configure_mode(struct phy_device *phydev,
 				  struct dp83869_private *dp83869)
 {
@@ -371,6 +425,12 @@ static int dp83869_config_init(struct phy_device *phydev)
 {
 	struct dp83869_private *dp83869 = phydev->priv;
 	int ret, val;
+	int delay_size = ARRAY_SIZE(dp83869_internal_delay);
+	int delay = 0;
+
+	ret = dp83869_verify_rgmii_cfg(phydev);
+	if (ret)
+		return ret;
 
 	ret = dp83869_configure_mode(phydev, dp83869);
 	if (ret)
@@ -394,6 +454,47 @@ static int dp83869_config_init(struct phy_device *phydev)
 				     dp83869->clk_output_sel <<
 				     DP83869_IO_MUX_CFG_CLK_O_SEL_SHIFT);
 
+	if (phy_interface_is_rgmii(phydev)) {
+		val = phy_read_mmd(phydev, DP83869_DEVADDR, DP83869_RGMIICTL);
+
+		val &= ~(DP83869_RGMII_TX_CLK_DELAY_EN | DP83869_RGMII_RX_CLK_DELAY_EN);
+		if (phydev->interface == PHY_INTERFACE_MODE_RGMII_ID)
+			val |= (DP83869_RGMII_TX_CLK_DELAY_EN | DP83869_RGMII_RX_CLK_DELAY_EN);
+
+		if (phydev->interface == PHY_INTERFACE_MODE_RGMII_TXID)
+			val |= DP83869_RGMII_TX_CLK_DELAY_EN;
+
+		if (phydev->interface == PHY_INTERFACE_MODE_RGMII_RXID)
+			val |= DP83869_RGMII_RX_CLK_DELAY_EN;
+
+		phy_write_mmd(phydev, DP83869_DEVADDR, DP83869_RGMIICTL, val);
+
+		if (dp83869->rx_id_delay) {
+			val = phy_get_delay_index(phydev,
+						  &dp83869_internal_delay[0],
+						  delay_size,
+						  dp83869->rx_id_delay);
+			if (val < 0)
+				return val;
+
+			delay |= val;
+		}
+
+		if (dp83869->tx_id_delay) {
+			val = phy_get_delay_index(phydev,
+						  &dp83869_internal_delay[0],
+						  delay_size,
+						  dp83869->tx_id_delay);
+			if (val < 0)
+				return val;
+
+			delay |= val << DP83869_RGMII_TX_CLK_DELAY_SHIFT;
+		}
+
+		phy_write_mmd(phydev, DP83869_DEVADDR, DP83869_RGMIIDCTL,
+			      delay);
+	}
+
 	return ret;
 }
 
-- 
2.26.2


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [RFC PATCH net-next 1/4] dt-bindings: net: Add tx and rx internal delays
  2020-05-21 17:48 ` [RFC PATCH net-next 1/4] dt-bindings: net: Add tx and rx internal delays Dan Murphy
@ 2020-05-21 18:06   ` Florian Fainelli
  0 siblings, 0 replies; 10+ messages in thread
From: Florian Fainelli @ 2020-05-21 18:06 UTC (permalink / raw)
  To: Dan Murphy, andrew, hkallweit1, davem, robh
  Cc: netdev, linux-kernel, devicetree



On 5/21/2020 10:48 AM, Dan Murphy wrote:
> tx-internal-delays and rx-internal-delays are a common setting for RGMII
> capable devices.
> 
> These properties are used when the phy-mode or phy-controller is set to
> rgmii-id, rgmii-rxid or rgmii-txid.  These modes indicate to the
> controller that the PHY will add the internal delay for the connection.
> 
> Signed-off-by: Dan Murphy <dmurphy@ti.com>
> ---
>  .../bindings/net/ethernet-controller.yaml          | 14 ++++++++++++++
>  1 file changed, 14 insertions(+)
> 
> diff --git a/Documentation/devicetree/bindings/net/ethernet-controller.yaml b/Documentation/devicetree/bindings/net/ethernet-controller.yaml
> index ac471b60ed6a..3f25066c339c 100644
> --- a/Documentation/devicetree/bindings/net/ethernet-controller.yaml
> +++ b/Documentation/devicetree/bindings/net/ethernet-controller.yaml
> @@ -143,6 +143,20 @@ properties:
>        Specifies the PHY management type. If auto is set and fixed-link
>        is not specified, it uses MDIO for management.
>  
> +  rx-internal-delay:

Please name this 'rx-internal-delay-ps'

> +    $ref: /schemas/types.yaml#definitions/uint32
> +    description: |
> +      RGMII Receive PHY Clock Delay defined in pico seconds.  This is used for
> +      PHY's that have configurable RX internal delays.  This property is only
> +      used when the phy-mode or phy-connection-type is rgmii-id or rgmii-rxid.
> +
> +  tx-internal-delay:

Likewise

> +    $ref: /schemas/types.yaml#definitions/uint32
> +    description: |
> +      RGMII Transmit PHY Clock Delay defined in pico seconds.  This is used for
> +      PHY's that have configurable TX internal delays.  This property is only
> +      used when the phy-mode or phy-connection-type is rgmii-id or rgmii-txid.
> +
>    fixed-link:
>      allOf:
>        - if:
> 

-- 
Florian

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [RFC PATCH net-next 4/4] net: dp83869: Add RGMII internal delay configuration
  2020-05-21 17:48 ` [RFC PATCH net-next 4/4] net: dp83869: Add RGMII internal delay configuration Dan Murphy
@ 2020-05-23 14:58   ` Andrew Lunn
  2020-05-26 13:31     ` Dan Carpenter
  1 sibling, 0 replies; 10+ messages in thread
From: Andrew Lunn @ 2020-05-23 14:58 UTC (permalink / raw)
  To: Dan Murphy
  Cc: f.fainelli, hkallweit1, davem, robh, netdev, linux-kernel, devicetree

On Thu, May 21, 2020 at 12:48:34PM -0500, Dan Murphy wrote:
> Add RGMII internal delay configuration for Rx and Tx.
> 
> Signed-off-by: Dan Murphy <dmurphy@ti.com>
> ---
>  drivers/net/phy/dp83869.c | 101 ++++++++++++++++++++++++++++++++++++++
>  1 file changed, 101 insertions(+)
> 
> diff --git a/drivers/net/phy/dp83869.c b/drivers/net/phy/dp83869.c
> index cfb22a21a2e6..40c34fefffe4 100644
> --- a/drivers/net/phy/dp83869.c
> +++ b/drivers/net/phy/dp83869.c
> @@ -99,6 +99,14 @@
>  #define DP83869_OP_MODE_MII			BIT(5)
>  #define DP83869_SGMII_RGMII_BRIDGE		BIT(6)
>  
> +/* RGMIIDCTL bits */
> +#define DP83869_RGMII_TX_CLK_DELAY_SHIFT	4
> +#define DP83869_RGMII_CLK_DELAY_INV		0
> +
> +static int dp83869_internal_delay[] = {250, 500, 750, 1000, 1250, 1500, 1750,
> +				       2000, 2250, 2500, 2750, 3000, 3250,
> +				       3500, 3750, 4000};
> +
>  enum {
>  	DP83869_PORT_MIRRORING_KEEP,
>  	DP83869_PORT_MIRRORING_EN,
> @@ -108,6 +116,8 @@ enum {
>  struct dp83869_private {
>  	int tx_fifo_depth;
>  	int rx_fifo_depth;
> +	u32 rx_id_delay;
> +	u32 tx_id_delay;
>  	int io_impedance;
>  	int port_mirroring;
>  	bool rxctrl_strap_quirk;
> @@ -182,6 +192,7 @@ static int dp83869_of_init(struct phy_device *phydev)
>  	struct dp83869_private *dp83869 = phydev->priv;
>  	struct device *dev = &phydev->mdio.dev;
>  	struct device_node *of_node = dev->of_node;
> +	int delay_size = ARRAY_SIZE(dp83869_internal_delay);
>  	int ret;
>  
>  	if (!of_node)
> @@ -232,6 +243,26 @@ static int dp83869_of_init(struct phy_device *phydev)
>  				 &dp83869->tx_fifo_depth))
>  		dp83869->tx_fifo_depth = DP83869_PHYCR_FIFO_DEPTH_4_B_NIB;
>  
> +	dp83869->rx_id_delay = DP83869_RGMII_CLK_DELAY_INV;
> +	ret = of_property_read_u32(of_node, "rx-internal-delay",
> +				   &dp83869->rx_id_delay);
> +	if (!ret && dp83869->rx_id_delay > dp83869_internal_delay[delay_size]) {
> +		phydev_err(phydev,
> +			   "rx-internal-delay value of %u out of range\n",
> +			   dp83869->rx_id_delay);
> +		return -EINVAL;
> +	}

Hi Dan

Seems like the helper should be doing the range check, and printing
the message. It should be common to all PHY drivers using delays
looked up in a list.

I also wonder about putting the of_property_read_u32 inside a
helper. Something like

of_get_phy_rgmii_delays(struct device_node *np, phy_interface_t interface,
			u32 *rx_delay, u32 *tx_delay)

And maybe a third helper which combines phy_get_delay_index() and
of_get_phy_rgmii_delays().

> +static int dp83869_verify_rgmii_cfg(struct phy_device *phydev)
> +{
> +	struct dp83869_private *dp83869 = phydev->priv;
> +
> +	/* RX delay *must* be specified if internal delay of RX is used. */

No. As i said last time, default to 2ns, if there is no specific delay
value in DT.

    Andrew

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [RFC PATCH net-next 4/4] net: dp83869: Add RGMII internal delay configuration
  2020-05-21 17:48 ` [RFC PATCH net-next 4/4] net: dp83869: Add RGMII internal delay configuration Dan Murphy
@ 2020-05-26 13:31     ` Dan Carpenter
  2020-05-26 13:31     ` Dan Carpenter
  1 sibling, 0 replies; 10+ messages in thread
From: Dan Carpenter @ 2020-05-26 13:31 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 6729 bytes --]

Hi Dan,

url:    https://github.com/0day-ci/linux/commits/Dan-Murphy/RGMII-Internal-delay-common-property/20200522-015509
base:   https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git de1b99ef2aa1e982c86b15853e013c6e3dbc1e7a

config: i386-allyesconfig (attached as .config)
compiler: gcc-7 (Ubuntu 7.5.0-6ubuntu2) 7.5.0
reproduce (this is a W=1 build):
        # save the attached .config to linux build tree
        make ARCH=i386

If you fix the issue, kindly add following tag as appropriate
Reported-by: kbuild test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>

New smatch warnings:
drivers/net/phy/dp83869.c:221 dp83869_of_init() error: buffer overflow 'dp83869_internal_delay' 16 <= 16

Old smatch warnings:
drivers/net/phy/dp83869.c:231 dp83869_of_init() error: buffer overflow 'dp83869_internal_delay' 16 <= 16

# https://github.com/0day-ci/linux/commit/c27cb3ace00f1b89679d6542f9ee2eb8faa76112
git remote add linux-review https://github.com/0day-ci/linux
git remote update linux-review
git checkout c27cb3ace00f1b89679d6542f9ee2eb8faa76112
vim +/dp83869_internal_delay +221 drivers/net/phy/dp83869.c

01db923e83779b Dan Murphy 2019-11-13  174  static int dp83869_of_init(struct phy_device *phydev)
01db923e83779b Dan Murphy 2019-11-13  175  {
01db923e83779b Dan Murphy 2019-11-13  176  	struct dp83869_private *dp83869 = phydev->priv;
01db923e83779b Dan Murphy 2019-11-13  177  	struct device *dev = &phydev->mdio.dev;
01db923e83779b Dan Murphy 2019-11-13  178  	struct device_node *of_node = dev->of_node;
c27cb3ace00f1b Dan Murphy 2020-05-21  179  	int delay_size = ARRAY_SIZE(dp83869_internal_delay);
01db923e83779b Dan Murphy 2019-11-13  180  	int ret;
01db923e83779b Dan Murphy 2019-11-13  181  
01db923e83779b Dan Murphy 2019-11-13  182  	if (!of_node)
01db923e83779b Dan Murphy 2019-11-13  183  		return -ENODEV;
01db923e83779b Dan Murphy 2019-11-13  184  
01db923e83779b Dan Murphy 2019-11-13  185  	dp83869->io_impedance = -EINVAL;
01db923e83779b Dan Murphy 2019-11-13  186  
01db923e83779b Dan Murphy 2019-11-13  187  	/* Optional configuration */
01db923e83779b Dan Murphy 2019-11-13  188  	ret = of_property_read_u32(of_node, "ti,clk-output-sel",
01db923e83779b Dan Murphy 2019-11-13  189  				   &dp83869->clk_output_sel);
01db923e83779b Dan Murphy 2019-11-13  190  	if (ret || dp83869->clk_output_sel > DP83869_CLK_O_SEL_REF_CLK)
01db923e83779b Dan Murphy 2019-11-13  191  		dp83869->clk_output_sel = DP83869_CLK_O_SEL_REF_CLK;
01db923e83779b Dan Murphy 2019-11-13  192  
01db923e83779b Dan Murphy 2019-11-13  193  	ret = of_property_read_u32(of_node, "ti,op-mode", &dp83869->mode);
01db923e83779b Dan Murphy 2019-11-13  194  	if (ret == 0) {
01db923e83779b Dan Murphy 2019-11-13  195  		if (dp83869->mode < DP83869_RGMII_COPPER_ETHERNET ||
01db923e83779b Dan Murphy 2019-11-13  196  		    dp83869->mode > DP83869_SGMII_COPPER_ETHERNET)
01db923e83779b Dan Murphy 2019-11-13  197  			return -EINVAL;
01db923e83779b Dan Murphy 2019-11-13  198  	}
01db923e83779b Dan Murphy 2019-11-13  199  
01db923e83779b Dan Murphy 2019-11-13  200  	if (of_property_read_bool(of_node, "ti,max-output-impedance"))
01db923e83779b Dan Murphy 2019-11-13  201  		dp83869->io_impedance = DP83869_IO_MUX_CFG_IO_IMPEDANCE_MAX;
01db923e83779b Dan Murphy 2019-11-13  202  	else if (of_property_read_bool(of_node, "ti,min-output-impedance"))
01db923e83779b Dan Murphy 2019-11-13  203  		dp83869->io_impedance = DP83869_IO_MUX_CFG_IO_IMPEDANCE_MIN;
01db923e83779b Dan Murphy 2019-11-13  204  
01db923e83779b Dan Murphy 2019-11-13  205  	if (of_property_read_bool(of_node, "enet-phy-lane-swap"))
01db923e83779b Dan Murphy 2019-11-13  206  		dp83869->port_mirroring = DP83869_PORT_MIRRORING_EN;
01db923e83779b Dan Murphy 2019-11-13  207  	else
01db923e83779b Dan Murphy 2019-11-13  208  		dp83869->port_mirroring = DP83869_PORT_MIRRORING_DIS;
01db923e83779b Dan Murphy 2019-11-13  209  
01db923e83779b Dan Murphy 2019-11-13  210  	if (of_property_read_u32(of_node, "rx-fifo-depth",
01db923e83779b Dan Murphy 2019-11-13  211  				 &dp83869->rx_fifo_depth))
01db923e83779b Dan Murphy 2019-11-13  212  		dp83869->rx_fifo_depth = DP83869_PHYCR_FIFO_DEPTH_4_B_NIB;
01db923e83779b Dan Murphy 2019-11-13  213  
01db923e83779b Dan Murphy 2019-11-13  214  	if (of_property_read_u32(of_node, "tx-fifo-depth",
01db923e83779b Dan Murphy 2019-11-13  215  				 &dp83869->tx_fifo_depth))
01db923e83779b Dan Murphy 2019-11-13  216  		dp83869->tx_fifo_depth = DP83869_PHYCR_FIFO_DEPTH_4_B_NIB;
01db923e83779b Dan Murphy 2019-11-13  217  
c27cb3ace00f1b Dan Murphy 2020-05-21  218  	dp83869->rx_id_delay = DP83869_RGMII_CLK_DELAY_INV;
c27cb3ace00f1b Dan Murphy 2020-05-21  219  	ret = of_property_read_u32(of_node, "rx-internal-delay",
c27cb3ace00f1b Dan Murphy 2020-05-21  220  				   &dp83869->rx_id_delay);
c27cb3ace00f1b Dan Murphy 2020-05-21 @221  	if (!ret && dp83869->rx_id_delay > dp83869_internal_delay[delay_size]) {
                                                                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Out of bounds.  Not clear what was intended here.

c27cb3ace00f1b Dan Murphy 2020-05-21  222  		phydev_err(phydev,
c27cb3ace00f1b Dan Murphy 2020-05-21  223  			   "rx-internal-delay value of %u out of range\n",
c27cb3ace00f1b Dan Murphy 2020-05-21  224  			   dp83869->rx_id_delay);
c27cb3ace00f1b Dan Murphy 2020-05-21  225  		return -EINVAL;
c27cb3ace00f1b Dan Murphy 2020-05-21  226  	}
c27cb3ace00f1b Dan Murphy 2020-05-21  227  
c27cb3ace00f1b Dan Murphy 2020-05-21  228  	dp83869->tx_id_delay = DP83869_RGMII_CLK_DELAY_INV;
c27cb3ace00f1b Dan Murphy 2020-05-21  229  	ret = of_property_read_u32(of_node, "tx-internal-delay",
c27cb3ace00f1b Dan Murphy 2020-05-21  230  				   &dp83869->tx_id_delay);
c27cb3ace00f1b Dan Murphy 2020-05-21  231  	if (!ret && dp83869->tx_id_delay > dp83869_internal_delay[delay_size]) {
                                                                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Also out of bounds.

c27cb3ace00f1b Dan Murphy 2020-05-21  232  		phydev_err(phydev,
c27cb3ace00f1b Dan Murphy 2020-05-21  233  			   "tx-internal-delay value of %u out of range\n",
c27cb3ace00f1b Dan Murphy 2020-05-21  234  			   dp83869->tx_id_delay);
c27cb3ace00f1b Dan Murphy 2020-05-21  235  		return -EINVAL;
c27cb3ace00f1b Dan Murphy 2020-05-21  236  	}
c27cb3ace00f1b Dan Murphy 2020-05-21  237  
786c4a5372e119 Dan Murphy 2019-11-26  238  	return ret;
01db923e83779b Dan Murphy 2019-11-13  239  }

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 72497 bytes --]

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [RFC PATCH net-next 4/4] net: dp83869: Add RGMII internal delay configuration
@ 2020-05-26 13:31     ` Dan Carpenter
  0 siblings, 0 replies; 10+ messages in thread
From: Dan Carpenter @ 2020-05-26 13:31 UTC (permalink / raw)
  To: kbuild-all

[-- Attachment #1: Type: text/plain, Size: 6729 bytes --]

Hi Dan,

url:    https://github.com/0day-ci/linux/commits/Dan-Murphy/RGMII-Internal-delay-common-property/20200522-015509
base:   https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git de1b99ef2aa1e982c86b15853e013c6e3dbc1e7a

config: i386-allyesconfig (attached as .config)
compiler: gcc-7 (Ubuntu 7.5.0-6ubuntu2) 7.5.0
reproduce (this is a W=1 build):
        # save the attached .config to linux build tree
        make ARCH=i386

If you fix the issue, kindly add following tag as appropriate
Reported-by: kbuild test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>

New smatch warnings:
drivers/net/phy/dp83869.c:221 dp83869_of_init() error: buffer overflow 'dp83869_internal_delay' 16 <= 16

Old smatch warnings:
drivers/net/phy/dp83869.c:231 dp83869_of_init() error: buffer overflow 'dp83869_internal_delay' 16 <= 16

# https://github.com/0day-ci/linux/commit/c27cb3ace00f1b89679d6542f9ee2eb8faa76112
git remote add linux-review https://github.com/0day-ci/linux
git remote update linux-review
git checkout c27cb3ace00f1b89679d6542f9ee2eb8faa76112
vim +/dp83869_internal_delay +221 drivers/net/phy/dp83869.c

01db923e83779b Dan Murphy 2019-11-13  174  static int dp83869_of_init(struct phy_device *phydev)
01db923e83779b Dan Murphy 2019-11-13  175  {
01db923e83779b Dan Murphy 2019-11-13  176  	struct dp83869_private *dp83869 = phydev->priv;
01db923e83779b Dan Murphy 2019-11-13  177  	struct device *dev = &phydev->mdio.dev;
01db923e83779b Dan Murphy 2019-11-13  178  	struct device_node *of_node = dev->of_node;
c27cb3ace00f1b Dan Murphy 2020-05-21  179  	int delay_size = ARRAY_SIZE(dp83869_internal_delay);
01db923e83779b Dan Murphy 2019-11-13  180  	int ret;
01db923e83779b Dan Murphy 2019-11-13  181  
01db923e83779b Dan Murphy 2019-11-13  182  	if (!of_node)
01db923e83779b Dan Murphy 2019-11-13  183  		return -ENODEV;
01db923e83779b Dan Murphy 2019-11-13  184  
01db923e83779b Dan Murphy 2019-11-13  185  	dp83869->io_impedance = -EINVAL;
01db923e83779b Dan Murphy 2019-11-13  186  
01db923e83779b Dan Murphy 2019-11-13  187  	/* Optional configuration */
01db923e83779b Dan Murphy 2019-11-13  188  	ret = of_property_read_u32(of_node, "ti,clk-output-sel",
01db923e83779b Dan Murphy 2019-11-13  189  				   &dp83869->clk_output_sel);
01db923e83779b Dan Murphy 2019-11-13  190  	if (ret || dp83869->clk_output_sel > DP83869_CLK_O_SEL_REF_CLK)
01db923e83779b Dan Murphy 2019-11-13  191  		dp83869->clk_output_sel = DP83869_CLK_O_SEL_REF_CLK;
01db923e83779b Dan Murphy 2019-11-13  192  
01db923e83779b Dan Murphy 2019-11-13  193  	ret = of_property_read_u32(of_node, "ti,op-mode", &dp83869->mode);
01db923e83779b Dan Murphy 2019-11-13  194  	if (ret == 0) {
01db923e83779b Dan Murphy 2019-11-13  195  		if (dp83869->mode < DP83869_RGMII_COPPER_ETHERNET ||
01db923e83779b Dan Murphy 2019-11-13  196  		    dp83869->mode > DP83869_SGMII_COPPER_ETHERNET)
01db923e83779b Dan Murphy 2019-11-13  197  			return -EINVAL;
01db923e83779b Dan Murphy 2019-11-13  198  	}
01db923e83779b Dan Murphy 2019-11-13  199  
01db923e83779b Dan Murphy 2019-11-13  200  	if (of_property_read_bool(of_node, "ti,max-output-impedance"))
01db923e83779b Dan Murphy 2019-11-13  201  		dp83869->io_impedance = DP83869_IO_MUX_CFG_IO_IMPEDANCE_MAX;
01db923e83779b Dan Murphy 2019-11-13  202  	else if (of_property_read_bool(of_node, "ti,min-output-impedance"))
01db923e83779b Dan Murphy 2019-11-13  203  		dp83869->io_impedance = DP83869_IO_MUX_CFG_IO_IMPEDANCE_MIN;
01db923e83779b Dan Murphy 2019-11-13  204  
01db923e83779b Dan Murphy 2019-11-13  205  	if (of_property_read_bool(of_node, "enet-phy-lane-swap"))
01db923e83779b Dan Murphy 2019-11-13  206  		dp83869->port_mirroring = DP83869_PORT_MIRRORING_EN;
01db923e83779b Dan Murphy 2019-11-13  207  	else
01db923e83779b Dan Murphy 2019-11-13  208  		dp83869->port_mirroring = DP83869_PORT_MIRRORING_DIS;
01db923e83779b Dan Murphy 2019-11-13  209  
01db923e83779b Dan Murphy 2019-11-13  210  	if (of_property_read_u32(of_node, "rx-fifo-depth",
01db923e83779b Dan Murphy 2019-11-13  211  				 &dp83869->rx_fifo_depth))
01db923e83779b Dan Murphy 2019-11-13  212  		dp83869->rx_fifo_depth = DP83869_PHYCR_FIFO_DEPTH_4_B_NIB;
01db923e83779b Dan Murphy 2019-11-13  213  
01db923e83779b Dan Murphy 2019-11-13  214  	if (of_property_read_u32(of_node, "tx-fifo-depth",
01db923e83779b Dan Murphy 2019-11-13  215  				 &dp83869->tx_fifo_depth))
01db923e83779b Dan Murphy 2019-11-13  216  		dp83869->tx_fifo_depth = DP83869_PHYCR_FIFO_DEPTH_4_B_NIB;
01db923e83779b Dan Murphy 2019-11-13  217  
c27cb3ace00f1b Dan Murphy 2020-05-21  218  	dp83869->rx_id_delay = DP83869_RGMII_CLK_DELAY_INV;
c27cb3ace00f1b Dan Murphy 2020-05-21  219  	ret = of_property_read_u32(of_node, "rx-internal-delay",
c27cb3ace00f1b Dan Murphy 2020-05-21  220  				   &dp83869->rx_id_delay);
c27cb3ace00f1b Dan Murphy 2020-05-21 @221  	if (!ret && dp83869->rx_id_delay > dp83869_internal_delay[delay_size]) {
                                                                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Out of bounds.  Not clear what was intended here.

c27cb3ace00f1b Dan Murphy 2020-05-21  222  		phydev_err(phydev,
c27cb3ace00f1b Dan Murphy 2020-05-21  223  			   "rx-internal-delay value of %u out of range\n",
c27cb3ace00f1b Dan Murphy 2020-05-21  224  			   dp83869->rx_id_delay);
c27cb3ace00f1b Dan Murphy 2020-05-21  225  		return -EINVAL;
c27cb3ace00f1b Dan Murphy 2020-05-21  226  	}
c27cb3ace00f1b Dan Murphy 2020-05-21  227  
c27cb3ace00f1b Dan Murphy 2020-05-21  228  	dp83869->tx_id_delay = DP83869_RGMII_CLK_DELAY_INV;
c27cb3ace00f1b Dan Murphy 2020-05-21  229  	ret = of_property_read_u32(of_node, "tx-internal-delay",
c27cb3ace00f1b Dan Murphy 2020-05-21  230  				   &dp83869->tx_id_delay);
c27cb3ace00f1b Dan Murphy 2020-05-21  231  	if (!ret && dp83869->tx_id_delay > dp83869_internal_delay[delay_size]) {
                                                                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Also out of bounds.

c27cb3ace00f1b Dan Murphy 2020-05-21  232  		phydev_err(phydev,
c27cb3ace00f1b Dan Murphy 2020-05-21  233  			   "tx-internal-delay value of %u out of range\n",
c27cb3ace00f1b Dan Murphy 2020-05-21  234  			   dp83869->tx_id_delay);
c27cb3ace00f1b Dan Murphy 2020-05-21  235  		return -EINVAL;
c27cb3ace00f1b Dan Murphy 2020-05-21  236  	}
c27cb3ace00f1b Dan Murphy 2020-05-21  237  
786c4a5372e119 Dan Murphy 2019-11-26  238  	return ret;
01db923e83779b Dan Murphy 2019-11-13  239  }

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 72497 bytes --]

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [RFC PATCH net-next 4/4] net: dp83869: Add RGMII internal delay configuration
@ 2020-05-23 12:49 kbuild test robot
  0 siblings, 0 replies; 10+ messages in thread
From: kbuild test robot @ 2020-05-23 12:49 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 7625 bytes --]

CC: kbuild-all(a)lists.01.org
In-Reply-To: <20200521174834.3234-5-dmurphy@ti.com>
References: <20200521174834.3234-5-dmurphy@ti.com>
TO: Dan Murphy <dmurphy@ti.com>

Hi Dan,

[FYI, it's a private test report for your RFC patch.]
[auto build test WARNING on net-next/master]
[also build test WARNING on robh/for-next sparc-next/master net/master linus/master v5.7-rc6 next-20200521]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]

url:    https://github.com/0day-ci/linux/commits/Dan-Murphy/RGMII-Internal-delay-common-property/20200522-015509
base:   https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git de1b99ef2aa1e982c86b15853e013c6e3dbc1e7a
:::::: branch date: 2 days ago
:::::: commit date: 2 days ago
config: i386-allyesconfig (attached as .config)
compiler: gcc-7 (Ubuntu 7.5.0-6ubuntu2) 7.5.0
reproduce (this is a W=1 build):
        # save the attached .config to linux build tree
        make ARCH=i386 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kbuild test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>

New smatch warnings:
drivers/net/phy/dp83869.c:221 dp83869_of_init() error: buffer overflow 'dp83869_internal_delay' 16 <= 16

Old smatch warnings:
drivers/net/phy/dp83869.c:231 dp83869_of_init() error: buffer overflow 'dp83869_internal_delay' 16 <= 16

# https://github.com/0day-ci/linux/commit/c27cb3ace00f1b89679d6542f9ee2eb8faa76112
git remote add linux-review https://github.com/0day-ci/linux
git remote update linux-review
git checkout c27cb3ace00f1b89679d6542f9ee2eb8faa76112
vim +/dp83869_internal_delay +221 drivers/net/phy/dp83869.c

01db923e83779b Dan Murphy 2019-11-13  172  
01db923e83779b Dan Murphy 2019-11-13  173  #ifdef CONFIG_OF_MDIO
01db923e83779b Dan Murphy 2019-11-13  174  static int dp83869_of_init(struct phy_device *phydev)
01db923e83779b Dan Murphy 2019-11-13  175  {
01db923e83779b Dan Murphy 2019-11-13  176  	struct dp83869_private *dp83869 = phydev->priv;
01db923e83779b Dan Murphy 2019-11-13  177  	struct device *dev = &phydev->mdio.dev;
01db923e83779b Dan Murphy 2019-11-13  178  	struct device_node *of_node = dev->of_node;
c27cb3ace00f1b Dan Murphy 2020-05-21  179  	int delay_size = ARRAY_SIZE(dp83869_internal_delay);
01db923e83779b Dan Murphy 2019-11-13  180  	int ret;
01db923e83779b Dan Murphy 2019-11-13  181  
01db923e83779b Dan Murphy 2019-11-13  182  	if (!of_node)
01db923e83779b Dan Murphy 2019-11-13  183  		return -ENODEV;
01db923e83779b Dan Murphy 2019-11-13  184  
01db923e83779b Dan Murphy 2019-11-13  185  	dp83869->io_impedance = -EINVAL;
01db923e83779b Dan Murphy 2019-11-13  186  
01db923e83779b Dan Murphy 2019-11-13  187  	/* Optional configuration */
01db923e83779b Dan Murphy 2019-11-13  188  	ret = of_property_read_u32(of_node, "ti,clk-output-sel",
01db923e83779b Dan Murphy 2019-11-13  189  				   &dp83869->clk_output_sel);
01db923e83779b Dan Murphy 2019-11-13  190  	if (ret || dp83869->clk_output_sel > DP83869_CLK_O_SEL_REF_CLK)
01db923e83779b Dan Murphy 2019-11-13  191  		dp83869->clk_output_sel = DP83869_CLK_O_SEL_REF_CLK;
01db923e83779b Dan Murphy 2019-11-13  192  
01db923e83779b Dan Murphy 2019-11-13  193  	ret = of_property_read_u32(of_node, "ti,op-mode", &dp83869->mode);
01db923e83779b Dan Murphy 2019-11-13  194  	if (ret == 0) {
01db923e83779b Dan Murphy 2019-11-13  195  		if (dp83869->mode < DP83869_RGMII_COPPER_ETHERNET ||
01db923e83779b Dan Murphy 2019-11-13  196  		    dp83869->mode > DP83869_SGMII_COPPER_ETHERNET)
01db923e83779b Dan Murphy 2019-11-13  197  			return -EINVAL;
01db923e83779b Dan Murphy 2019-11-13  198  	}
01db923e83779b Dan Murphy 2019-11-13  199  
01db923e83779b Dan Murphy 2019-11-13  200  	if (of_property_read_bool(of_node, "ti,max-output-impedance"))
01db923e83779b Dan Murphy 2019-11-13  201  		dp83869->io_impedance = DP83869_IO_MUX_CFG_IO_IMPEDANCE_MAX;
01db923e83779b Dan Murphy 2019-11-13  202  	else if (of_property_read_bool(of_node, "ti,min-output-impedance"))
01db923e83779b Dan Murphy 2019-11-13  203  		dp83869->io_impedance = DP83869_IO_MUX_CFG_IO_IMPEDANCE_MIN;
01db923e83779b Dan Murphy 2019-11-13  204  
01db923e83779b Dan Murphy 2019-11-13  205  	if (of_property_read_bool(of_node, "enet-phy-lane-swap"))
01db923e83779b Dan Murphy 2019-11-13  206  		dp83869->port_mirroring = DP83869_PORT_MIRRORING_EN;
01db923e83779b Dan Murphy 2019-11-13  207  	else
01db923e83779b Dan Murphy 2019-11-13  208  		dp83869->port_mirroring = DP83869_PORT_MIRRORING_DIS;
01db923e83779b Dan Murphy 2019-11-13  209  
01db923e83779b Dan Murphy 2019-11-13  210  	if (of_property_read_u32(of_node, "rx-fifo-depth",
01db923e83779b Dan Murphy 2019-11-13  211  				 &dp83869->rx_fifo_depth))
01db923e83779b Dan Murphy 2019-11-13  212  		dp83869->rx_fifo_depth = DP83869_PHYCR_FIFO_DEPTH_4_B_NIB;
01db923e83779b Dan Murphy 2019-11-13  213  
01db923e83779b Dan Murphy 2019-11-13  214  	if (of_property_read_u32(of_node, "tx-fifo-depth",
01db923e83779b Dan Murphy 2019-11-13  215  				 &dp83869->tx_fifo_depth))
01db923e83779b Dan Murphy 2019-11-13  216  		dp83869->tx_fifo_depth = DP83869_PHYCR_FIFO_DEPTH_4_B_NIB;
01db923e83779b Dan Murphy 2019-11-13  217  
c27cb3ace00f1b Dan Murphy 2020-05-21  218  	dp83869->rx_id_delay = DP83869_RGMII_CLK_DELAY_INV;
c27cb3ace00f1b Dan Murphy 2020-05-21  219  	ret = of_property_read_u32(of_node, "rx-internal-delay",
c27cb3ace00f1b Dan Murphy 2020-05-21  220  				   &dp83869->rx_id_delay);
c27cb3ace00f1b Dan Murphy 2020-05-21 @221  	if (!ret && dp83869->rx_id_delay > dp83869_internal_delay[delay_size]) {
c27cb3ace00f1b Dan Murphy 2020-05-21  222  		phydev_err(phydev,
c27cb3ace00f1b Dan Murphy 2020-05-21  223  			   "rx-internal-delay value of %u out of range\n",
c27cb3ace00f1b Dan Murphy 2020-05-21  224  			   dp83869->rx_id_delay);
c27cb3ace00f1b Dan Murphy 2020-05-21  225  		return -EINVAL;
c27cb3ace00f1b Dan Murphy 2020-05-21  226  	}
c27cb3ace00f1b Dan Murphy 2020-05-21  227  
c27cb3ace00f1b Dan Murphy 2020-05-21  228  	dp83869->tx_id_delay = DP83869_RGMII_CLK_DELAY_INV;
c27cb3ace00f1b Dan Murphy 2020-05-21  229  	ret = of_property_read_u32(of_node, "tx-internal-delay",
c27cb3ace00f1b Dan Murphy 2020-05-21  230  				   &dp83869->tx_id_delay);
c27cb3ace00f1b Dan Murphy 2020-05-21  231  	if (!ret && dp83869->tx_id_delay > dp83869_internal_delay[delay_size]) {
c27cb3ace00f1b Dan Murphy 2020-05-21  232  		phydev_err(phydev,
c27cb3ace00f1b Dan Murphy 2020-05-21  233  			   "tx-internal-delay value of %u out of range\n",
c27cb3ace00f1b Dan Murphy 2020-05-21  234  			   dp83869->tx_id_delay);
c27cb3ace00f1b Dan Murphy 2020-05-21  235  		return -EINVAL;
c27cb3ace00f1b Dan Murphy 2020-05-21  236  	}
c27cb3ace00f1b Dan Murphy 2020-05-21  237  
786c4a5372e119 Dan Murphy 2019-11-26  238  	return ret;
01db923e83779b Dan Murphy 2019-11-13  239  }
01db923e83779b Dan Murphy 2019-11-13  240  #else
01db923e83779b Dan Murphy 2019-11-13  241  static int dp83869_of_init(struct phy_device *phydev)
01db923e83779b Dan Murphy 2019-11-13  242  {
01db923e83779b Dan Murphy 2019-11-13  243  	return 0;
01db923e83779b Dan Murphy 2019-11-13  244  }
01db923e83779b Dan Murphy 2019-11-13  245  #endif /* CONFIG_OF_MDIO */
01db923e83779b Dan Murphy 2019-11-13  246  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 72497 bytes --]

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2020-05-26 13:31 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-05-21 17:48 [RFC PATCH net-next 0/4] RGMII Internal delay common property Dan Murphy
2020-05-21 17:48 ` [RFC PATCH net-next 1/4] dt-bindings: net: Add tx and rx internal delays Dan Murphy
2020-05-21 18:06   ` Florian Fainelli
2020-05-21 17:48 ` [RFC PATCH net-next 2/4] net: phy: Add a helper to return the index for of the internal delay Dan Murphy
2020-05-21 17:48 ` [RFC PATCH net-next 3/4] dt-bindings: net: Add RGMII internal delay for DP83869 Dan Murphy
2020-05-21 17:48 ` [RFC PATCH net-next 4/4] net: dp83869: Add RGMII internal delay configuration Dan Murphy
2020-05-23 14:58   ` Andrew Lunn
2020-05-26 13:31   ` Dan Carpenter
2020-05-26 13:31     ` Dan Carpenter
2020-05-23 12:49 kbuild test robot

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.