* [PATCH net-next 0/2] drivers: xgene: Add support RGMII TX/RX delay configuration @ 2015-10-16 20:35 Iyappan Subramanian 2015-10-16 20:35 ` [PATCH net-next 1/2] drivers: net: " Iyappan Subramanian 2015-10-16 20:35 ` [PATCH net-next 2/2] Documentation: dts: xgene: Add TX/RX delay field Iyappan Subramanian 0 siblings, 2 replies; 5+ messages in thread From: Iyappan Subramanian @ 2015-10-16 20:35 UTC (permalink / raw) To: davem, netdev; +Cc: devicetree, linux-arm-kernel, patches, Iyappan Subramanian This patch adds support RGMII TX/RX delay configuration. Signed-off-by: Iyappan Subramanian <isubramanian@apm.com> --- Iyappan Subramanian (2): drivers: net: xgene: Add support RGMII TX/RX delay configuration Documentation: dts: xgene: Add TX/RX delay field .../devicetree/bindings/net/apm-xgene-enet.txt | 10 +++++ drivers/net/ethernet/apm/xgene/xgene_enet_hw.c | 8 +++- drivers/net/ethernet/apm/xgene/xgene_enet_hw.h | 1 + drivers/net/ethernet/apm/xgene/xgene_enet_main.c | 49 ++++++++++++++++++++++ drivers/net/ethernet/apm/xgene/xgene_enet_main.h | 2 + 5 files changed, 69 insertions(+), 1 deletion(-) -- 1.9.1 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH net-next 1/2] drivers: net: xgene: Add support RGMII TX/RX delay configuration 2015-10-16 20:35 [PATCH net-next 0/2] drivers: xgene: Add support RGMII TX/RX delay configuration Iyappan Subramanian @ 2015-10-16 20:35 ` Iyappan Subramanian 2015-10-16 21:36 ` Florian Fainelli 2015-10-16 20:35 ` [PATCH net-next 2/2] Documentation: dts: xgene: Add TX/RX delay field Iyappan Subramanian 1 sibling, 1 reply; 5+ messages in thread From: Iyappan Subramanian @ 2015-10-16 20:35 UTC (permalink / raw) To: davem, netdev; +Cc: devicetree, linux-arm-kernel, patches, Iyappan Subramanian Add RGMII TX/RX delay configuration support. RGMII standard requires 2ns delay to help the RGMII bridge receiver to sample data correctly. If the default value does not provide proper centering of the data sample, the TX/RX delay parameters can be used to adjust accordingly. Signed-off-by: Iyappan Subramanian <isubramanian@apm.com> --- drivers/net/ethernet/apm/xgene/xgene_enet_hw.c | 8 +++- drivers/net/ethernet/apm/xgene/xgene_enet_hw.h | 1 + drivers/net/ethernet/apm/xgene/xgene_enet_main.c | 49 ++++++++++++++++++++++++ drivers/net/ethernet/apm/xgene/xgene_enet_main.h | 2 + 4 files changed, 59 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/apm/xgene/xgene_enet_hw.c b/drivers/net/ethernet/apm/xgene/xgene_enet_hw.c index 652f218..33850a0 100644 --- a/drivers/net/ethernet/apm/xgene/xgene_enet_hw.c +++ b/drivers/net/ethernet/apm/xgene/xgene_enet_hw.c @@ -461,6 +461,7 @@ static void xgene_gmac_reset(struct xgene_enet_pdata *pdata) static void xgene_gmac_init(struct xgene_enet_pdata *pdata) { + struct device *dev = &pdata->pdev->dev; u32 value, mc2; u32 intf_ctl, rgmii; u32 icm0, icm2; @@ -490,7 +491,12 @@ static void xgene_gmac_init(struct xgene_enet_pdata *pdata) default: ENET_INTERFACE_MODE2_SET(&mc2, 2); intf_ctl |= ENET_GHD_MODE; - CFG_TXCLK_MUXSEL0_SET(&rgmii, 4); + + if (dev->of_node) { + CFG_TXCLK_MUXSEL0_SET(&rgmii, pdata->tx_delay); + CFG_RXCLK_MUXSEL0_SET(&rgmii, pdata->rx_delay); + } + xgene_enet_rd_csr(pdata, DEBUG_REG_ADDR, &value); value |= CFG_BYPASS_UNISEC_TX | CFG_BYPASS_UNISEC_RX; xgene_enet_wr_csr(pdata, DEBUG_REG_ADDR, value); diff --git a/drivers/net/ethernet/apm/xgene/xgene_enet_hw.h b/drivers/net/ethernet/apm/xgene/xgene_enet_hw.h index ff05bbc..6dee73c 100644 --- a/drivers/net/ethernet/apm/xgene/xgene_enet_hw.h +++ b/drivers/net/ethernet/apm/xgene/xgene_enet_hw.h @@ -144,6 +144,7 @@ enum xgene_enet_rm { #define CFG_BYPASS_UNISEC_RX BIT(1) #define CFG_CLE_BYPASS_EN0 BIT(31) #define CFG_TXCLK_MUXSEL0_SET(dst, val) xgene_set_bits(dst, val, 29, 3) +#define CFG_RXCLK_MUXSEL0_SET(dst, val) xgene_set_bits(dst, val, 26, 3) #define CFG_CLE_IP_PROTOCOL0_SET(dst, val) xgene_set_bits(dst, val, 16, 2) #define CFG_CLE_DSTQID0_SET(dst, val) xgene_set_bits(dst, val, 0, 12) diff --git a/drivers/net/ethernet/apm/xgene/xgene_enet_main.c b/drivers/net/ethernet/apm/xgene/xgene_enet_main.c index 6b1846d..ce10687 100644 --- a/drivers/net/ethernet/apm/xgene/xgene_enet_main.c +++ b/drivers/net/ethernet/apm/xgene/xgene_enet_main.c @@ -1118,6 +1118,47 @@ static int xgene_get_port_id_dt(struct device *dev, struct xgene_enet_pdata *pda return ret; } +static int xgene_get_tx_delay(struct xgene_enet_pdata *pdata) +{ + struct device *dev = &pdata->pdev->dev; + int delay, ret; + + ret = of_property_read_u32(dev->of_node, "tx-delay", &delay); + if (ret) { + pdata->tx_delay = 4; + return 0; + } + + if (delay < 0 || delay > 7) { + dev_err(dev, "Invalid tx-delay specified\n"); + return -EINVAL; + } + + pdata->tx_delay = delay; + + return 0; +} + +static int xgene_get_rx_delay(struct xgene_enet_pdata *pdata) +{ + struct device *dev = &pdata->pdev->dev; + int delay, ret; + + ret = of_property_read_u32(dev->of_node, "rx-delay", &delay); + if (ret) { + pdata->rx_delay = 2; + return 0; + } + + if (delay < 0 || delay > 7) { + dev_err(dev, "Invalid rx-delay specified\n"); + return -EINVAL; + } + + pdata->rx_delay = delay; + + return 0; +} static int xgene_enet_get_resources(struct xgene_enet_pdata *pdata) { @@ -1194,6 +1235,14 @@ static int xgene_enet_get_resources(struct xgene_enet_pdata *pdata) return -ENODEV; } + ret = xgene_get_tx_delay(pdata); + if (ret) + return ret; + + ret = xgene_get_rx_delay(pdata); + if (ret) + return ret; + ret = platform_get_irq(pdev, 0); if (ret <= 0) { dev_err(dev, "Unable to get ENET Rx IRQ\n"); diff --git a/drivers/net/ethernet/apm/xgene/xgene_enet_main.h b/drivers/net/ethernet/apm/xgene/xgene_enet_main.h index ff89a5d..a6e56b8 100644 --- a/drivers/net/ethernet/apm/xgene/xgene_enet_main.h +++ b/drivers/net/ethernet/apm/xgene/xgene_enet_main.h @@ -184,6 +184,8 @@ struct xgene_enet_pdata { u8 bp_bufnum; u16 ring_num; u32 mss; + u8 tx_delay; + u8 rx_delay; }; struct xgene_indirect_ctl { -- 1.9.1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH net-next 1/2] drivers: net: xgene: Add support RGMII TX/RX delay configuration 2015-10-16 20:35 ` [PATCH net-next 1/2] drivers: net: " Iyappan Subramanian @ 2015-10-16 21:36 ` Florian Fainelli 2015-10-23 18:02 ` Iyappan Subramanian 0 siblings, 1 reply; 5+ messages in thread From: Florian Fainelli @ 2015-10-16 21:36 UTC (permalink / raw) To: Iyappan Subramanian, davem, netdev; +Cc: devicetree, linux-arm-kernel, patches On 16/10/15 13:35, Iyappan Subramanian wrote: > Add RGMII TX/RX delay configuration support. RGMII standard requires 2ns > delay to help the RGMII bridge receiver to sample data correctly. If the > default value does not provide proper centering of the data sample, the > TX/RX delay parameters can be used to adjust accordingly. There is a standard 'phy-mode' property which can take multiple values for RGMII: "rgmii" (no delay), "rgmii-txid" (transmit delay), "rgmii-rxid" (receive delay) and "rgmii-id" (symetric delay). There does not seem to be any verification of whether the rx or tx delay parameters you introduce are going to be either sensible, or not conflicting with the 'phy-mode' that should be configured. > > Signed-off-by: Iyappan Subramanian <isubramanian@apm.com> > --- > drivers/net/ethernet/apm/xgene/xgene_enet_hw.c | 8 +++- > drivers/net/ethernet/apm/xgene/xgene_enet_hw.h | 1 + > drivers/net/ethernet/apm/xgene/xgene_enet_main.c | 49 ++++++++++++++++++++++++ > drivers/net/ethernet/apm/xgene/xgene_enet_main.h | 2 + > 4 files changed, 59 insertions(+), 1 deletion(-) > > diff --git a/drivers/net/ethernet/apm/xgene/xgene_enet_hw.c b/drivers/net/ethernet/apm/xgene/xgene_enet_hw.c > index 652f218..33850a0 100644 > --- a/drivers/net/ethernet/apm/xgene/xgene_enet_hw.c > +++ b/drivers/net/ethernet/apm/xgene/xgene_enet_hw.c > @@ -461,6 +461,7 @@ static void xgene_gmac_reset(struct xgene_enet_pdata *pdata) > > static void xgene_gmac_init(struct xgene_enet_pdata *pdata) > { > + struct device *dev = &pdata->pdev->dev; > u32 value, mc2; > u32 intf_ctl, rgmii; > u32 icm0, icm2; > @@ -490,7 +491,12 @@ static void xgene_gmac_init(struct xgene_enet_pdata *pdata) > default: > ENET_INTERFACE_MODE2_SET(&mc2, 2); > intf_ctl |= ENET_GHD_MODE; > - CFG_TXCLK_MUXSEL0_SET(&rgmii, 4); > + > + if (dev->of_node) { > + CFG_TXCLK_MUXSEL0_SET(&rgmii, pdata->tx_delay); > + CFG_RXCLK_MUXSEL0_SET(&rgmii, pdata->rx_delay); > + } > + > xgene_enet_rd_csr(pdata, DEBUG_REG_ADDR, &value); > value |= CFG_BYPASS_UNISEC_TX | CFG_BYPASS_UNISEC_RX; > xgene_enet_wr_csr(pdata, DEBUG_REG_ADDR, value); > diff --git a/drivers/net/ethernet/apm/xgene/xgene_enet_hw.h b/drivers/net/ethernet/apm/xgene/xgene_enet_hw.h > index ff05bbc..6dee73c 100644 > --- a/drivers/net/ethernet/apm/xgene/xgene_enet_hw.h > +++ b/drivers/net/ethernet/apm/xgene/xgene_enet_hw.h > @@ -144,6 +144,7 @@ enum xgene_enet_rm { > #define CFG_BYPASS_UNISEC_RX BIT(1) > #define CFG_CLE_BYPASS_EN0 BIT(31) > #define CFG_TXCLK_MUXSEL0_SET(dst, val) xgene_set_bits(dst, val, 29, 3) > +#define CFG_RXCLK_MUXSEL0_SET(dst, val) xgene_set_bits(dst, val, 26, 3) > > #define CFG_CLE_IP_PROTOCOL0_SET(dst, val) xgene_set_bits(dst, val, 16, 2) > #define CFG_CLE_DSTQID0_SET(dst, val) xgene_set_bits(dst, val, 0, 12) > diff --git a/drivers/net/ethernet/apm/xgene/xgene_enet_main.c b/drivers/net/ethernet/apm/xgene/xgene_enet_main.c > index 6b1846d..ce10687 100644 > --- a/drivers/net/ethernet/apm/xgene/xgene_enet_main.c > +++ b/drivers/net/ethernet/apm/xgene/xgene_enet_main.c > @@ -1118,6 +1118,47 @@ static int xgene_get_port_id_dt(struct device *dev, struct xgene_enet_pdata *pda > return ret; > } > > +static int xgene_get_tx_delay(struct xgene_enet_pdata *pdata) > +{ > + struct device *dev = &pdata->pdev->dev; > + int delay, ret; > + > + ret = of_property_read_u32(dev->of_node, "tx-delay", &delay); > + if (ret) { > + pdata->tx_delay = 4; > + return 0; > + } > + > + if (delay < 0 || delay > 7) { > + dev_err(dev, "Invalid tx-delay specified\n"); > + return -EINVAL; > + } > + > + pdata->tx_delay = delay; > + > + return 0; > +} > + > +static int xgene_get_rx_delay(struct xgene_enet_pdata *pdata) > +{ > + struct device *dev = &pdata->pdev->dev; > + int delay, ret; > + > + ret = of_property_read_u32(dev->of_node, "rx-delay", &delay); > + if (ret) { > + pdata->rx_delay = 2; > + return 0; > + } > + > + if (delay < 0 || delay > 7) { > + dev_err(dev, "Invalid rx-delay specified\n"); > + return -EINVAL; > + } > + > + pdata->rx_delay = delay; > + > + return 0; > +} > > static int xgene_enet_get_resources(struct xgene_enet_pdata *pdata) > { > @@ -1194,6 +1235,14 @@ static int xgene_enet_get_resources(struct xgene_enet_pdata *pdata) > return -ENODEV; > } > > + ret = xgene_get_tx_delay(pdata); > + if (ret) > + return ret; > + > + ret = xgene_get_rx_delay(pdata); > + if (ret) > + return ret; > + > ret = platform_get_irq(pdev, 0); > if (ret <= 0) { > dev_err(dev, "Unable to get ENET Rx IRQ\n"); > diff --git a/drivers/net/ethernet/apm/xgene/xgene_enet_main.h b/drivers/net/ethernet/apm/xgene/xgene_enet_main.h > index ff89a5d..a6e56b8 100644 > --- a/drivers/net/ethernet/apm/xgene/xgene_enet_main.h > +++ b/drivers/net/ethernet/apm/xgene/xgene_enet_main.h > @@ -184,6 +184,8 @@ struct xgene_enet_pdata { > u8 bp_bufnum; > u16 ring_num; > u32 mss; > + u8 tx_delay; > + u8 rx_delay; > }; > > struct xgene_indirect_ctl { > -- Florian ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH net-next 1/2] drivers: net: xgene: Add support RGMII TX/RX delay configuration 2015-10-16 21:36 ` Florian Fainelli @ 2015-10-23 18:02 ` Iyappan Subramanian 0 siblings, 0 replies; 5+ messages in thread From: Iyappan Subramanian @ 2015-10-23 18:02 UTC (permalink / raw) To: Florian Fainelli Cc: David Miller, netdev, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, patches On Fri, Oct 16, 2015 at 2:36 PM, Florian Fainelli <f.fainelli@gmail.com> wrote: > On 16/10/15 13:35, Iyappan Subramanian wrote: >> Add RGMII TX/RX delay configuration support. RGMII standard requires 2ns >> delay to help the RGMII bridge receiver to sample data correctly. If the >> default value does not provide proper centering of the data sample, the >> TX/RX delay parameters can be used to adjust accordingly. > > There is a standard 'phy-mode' property which can take multiple values > for RGMII: "rgmii" (no delay), "rgmii-txid" (transmit delay), > "rgmii-rxid" (receive delay) and "rgmii-id" (symetric delay). There does > not seem to be any verification of whether the rx or tx delay parameters > you introduce are going to be either sensible, or not conflicting with > the 'phy-mode' that should be configured. X-Gene RGMII ethernet controller has a RGMII bridge that performs the task of converting the RGMII signal {RX_CLK,RX_CTL, RX_DATA[3:0]} from PHY to GMII signal {RX_DV,RX_ER,RX_DATA[7:0]} and vice versa. This RGMII bridge has a provision to internally delay the input RX_CLK and the output TX_CLK using configuration registers. This will help in maintain the CLK-CTL delay relationship in various operating conditions. This is similar to the following patch that got accepted. https://lkml.org/lkml/2014/12/29/77 I will submit v2 with updated documentation. > >> >> Signed-off-by: Iyappan Subramanian <isubramanian@apm.com> >> --- >> drivers/net/ethernet/apm/xgene/xgene_enet_hw.c | 8 +++- >> drivers/net/ethernet/apm/xgene/xgene_enet_hw.h | 1 + >> drivers/net/ethernet/apm/xgene/xgene_enet_main.c | 49 ++++++++++++++++++++++++ >> drivers/net/ethernet/apm/xgene/xgene_enet_main.h | 2 + >> 4 files changed, 59 insertions(+), 1 deletion(-) >> >> diff --git a/drivers/net/ethernet/apm/xgene/xgene_enet_hw.c b/drivers/net/ethernet/apm/xgene/xgene_enet_hw.c >> index 652f218..33850a0 100644 >> --- a/drivers/net/ethernet/apm/xgene/xgene_enet_hw.c >> +++ b/drivers/net/ethernet/apm/xgene/xgene_enet_hw.c >> @@ -461,6 +461,7 @@ static void xgene_gmac_reset(struct xgene_enet_pdata *pdata) >> >> static void xgene_gmac_init(struct xgene_enet_pdata *pdata) >> { >> + struct device *dev = &pdata->pdev->dev; >> u32 value, mc2; >> u32 intf_ctl, rgmii; >> u32 icm0, icm2; >> @@ -490,7 +491,12 @@ static void xgene_gmac_init(struct xgene_enet_pdata *pdata) >> default: >> ENET_INTERFACE_MODE2_SET(&mc2, 2); >> intf_ctl |= ENET_GHD_MODE; >> - CFG_TXCLK_MUXSEL0_SET(&rgmii, 4); >> + >> + if (dev->of_node) { >> + CFG_TXCLK_MUXSEL0_SET(&rgmii, pdata->tx_delay); >> + CFG_RXCLK_MUXSEL0_SET(&rgmii, pdata->rx_delay); >> + } >> + >> xgene_enet_rd_csr(pdata, DEBUG_REG_ADDR, &value); >> value |= CFG_BYPASS_UNISEC_TX | CFG_BYPASS_UNISEC_RX; >> xgene_enet_wr_csr(pdata, DEBUG_REG_ADDR, value); >> diff --git a/drivers/net/ethernet/apm/xgene/xgene_enet_hw.h b/drivers/net/ethernet/apm/xgene/xgene_enet_hw.h >> index ff05bbc..6dee73c 100644 >> --- a/drivers/net/ethernet/apm/xgene/xgene_enet_hw.h >> +++ b/drivers/net/ethernet/apm/xgene/xgene_enet_hw.h >> @@ -144,6 +144,7 @@ enum xgene_enet_rm { >> #define CFG_BYPASS_UNISEC_RX BIT(1) >> #define CFG_CLE_BYPASS_EN0 BIT(31) >> #define CFG_TXCLK_MUXSEL0_SET(dst, val) xgene_set_bits(dst, val, 29, 3) >> +#define CFG_RXCLK_MUXSEL0_SET(dst, val) xgene_set_bits(dst, val, 26, 3) >> >> #define CFG_CLE_IP_PROTOCOL0_SET(dst, val) xgene_set_bits(dst, val, 16, 2) >> #define CFG_CLE_DSTQID0_SET(dst, val) xgene_set_bits(dst, val, 0, 12) >> diff --git a/drivers/net/ethernet/apm/xgene/xgene_enet_main.c b/drivers/net/ethernet/apm/xgene/xgene_enet_main.c >> index 6b1846d..ce10687 100644 >> --- a/drivers/net/ethernet/apm/xgene/xgene_enet_main.c >> +++ b/drivers/net/ethernet/apm/xgene/xgene_enet_main.c >> @@ -1118,6 +1118,47 @@ static int xgene_get_port_id_dt(struct device *dev, struct xgene_enet_pdata *pda >> return ret; >> } >> >> +static int xgene_get_tx_delay(struct xgene_enet_pdata *pdata) >> +{ >> + struct device *dev = &pdata->pdev->dev; >> + int delay, ret; >> + >> + ret = of_property_read_u32(dev->of_node, "tx-delay", &delay); >> + if (ret) { >> + pdata->tx_delay = 4; >> + return 0; >> + } >> + >> + if (delay < 0 || delay > 7) { >> + dev_err(dev, "Invalid tx-delay specified\n"); >> + return -EINVAL; >> + } >> + >> + pdata->tx_delay = delay; >> + >> + return 0; >> +} >> + >> +static int xgene_get_rx_delay(struct xgene_enet_pdata *pdata) >> +{ >> + struct device *dev = &pdata->pdev->dev; >> + int delay, ret; >> + >> + ret = of_property_read_u32(dev->of_node, "rx-delay", &delay); >> + if (ret) { >> + pdata->rx_delay = 2; >> + return 0; >> + } >> + >> + if (delay < 0 || delay > 7) { >> + dev_err(dev, "Invalid rx-delay specified\n"); >> + return -EINVAL; >> + } >> + >> + pdata->rx_delay = delay; >> + >> + return 0; >> +} >> >> static int xgene_enet_get_resources(struct xgene_enet_pdata *pdata) >> { >> @@ -1194,6 +1235,14 @@ static int xgene_enet_get_resources(struct xgene_enet_pdata *pdata) >> return -ENODEV; >> } >> >> + ret = xgene_get_tx_delay(pdata); >> + if (ret) >> + return ret; >> + >> + ret = xgene_get_rx_delay(pdata); >> + if (ret) >> + return ret; >> + >> ret = platform_get_irq(pdev, 0); >> if (ret <= 0) { >> dev_err(dev, "Unable to get ENET Rx IRQ\n"); >> diff --git a/drivers/net/ethernet/apm/xgene/xgene_enet_main.h b/drivers/net/ethernet/apm/xgene/xgene_enet_main.h >> index ff89a5d..a6e56b8 100644 >> --- a/drivers/net/ethernet/apm/xgene/xgene_enet_main.h >> +++ b/drivers/net/ethernet/apm/xgene/xgene_enet_main.h >> @@ -184,6 +184,8 @@ struct xgene_enet_pdata { >> u8 bp_bufnum; >> u16 ring_num; >> u32 mss; >> + u8 tx_delay; >> + u8 rx_delay; >> }; >> >> struct xgene_indirect_ctl { >> > > > -- > Florian ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH net-next 2/2] Documentation: dts: xgene: Add TX/RX delay field 2015-10-16 20:35 [PATCH net-next 0/2] drivers: xgene: Add support RGMII TX/RX delay configuration Iyappan Subramanian 2015-10-16 20:35 ` [PATCH net-next 1/2] drivers: net: " Iyappan Subramanian @ 2015-10-16 20:35 ` Iyappan Subramanian 1 sibling, 0 replies; 5+ messages in thread From: Iyappan Subramanian @ 2015-10-16 20:35 UTC (permalink / raw) To: davem, netdev; +Cc: devicetree, linux-arm-kernel, patches, Iyappan Subramanian Signed-off-by: Iyappan Subramanian <isubramanian@apm.com> --- Documentation/devicetree/bindings/net/apm-xgene-enet.txt | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Documentation/devicetree/bindings/net/apm-xgene-enet.txt b/Documentation/devicetree/bindings/net/apm-xgene-enet.txt index f55aa28..5b17c13 100644 --- a/Documentation/devicetree/bindings/net/apm-xgene-enet.txt +++ b/Documentation/devicetree/bindings/net/apm-xgene-enet.txt @@ -37,6 +37,14 @@ Required properties for ethernet interfaces that have external PHY: Optional properties: - status: Should be "ok" or "disabled" for enabled/disabled. Default is "ok". +- tx-delay: Delay value for RGMII TXD timming. + Valid values are between 0 to 7, that maps to + 417, 717, 1020, 1321, 1611, 1913, 2215, 2514 ps + Default value is 4, which corresponds to 1611 ps +- rx-delay: Delay value for RGMII RXD timming in ps. + Valid values are between 0 to 7, that maps to + 273, 589, 899, 1222, 1480, 1806, 2147, 2464 ps + Default value is 2, which corresponds to 899 ps Example: menetclk: menetclk { @@ -72,5 +80,7 @@ Example: /* Board-specific peripheral configurations */ &menet { + tx-delay = <4>; + rx-delay = <2>; status = "ok"; }; -- 1.9.1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2015-10-23 18:02 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2015-10-16 20:35 [PATCH net-next 0/2] drivers: xgene: Add support RGMII TX/RX delay configuration Iyappan Subramanian 2015-10-16 20:35 ` [PATCH net-next 1/2] drivers: net: " Iyappan Subramanian 2015-10-16 21:36 ` Florian Fainelli 2015-10-23 18:02 ` Iyappan Subramanian 2015-10-16 20:35 ` [PATCH net-next 2/2] Documentation: dts: xgene: Add TX/RX delay field Iyappan Subramanian
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).