diff options
author | Mugunthan V N <mugunthanvnm@ti.com> | 2016-10-04 09:37:29 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2016-10-06 20:45:30 -0400 |
commit | 0fb26c3063ea7095fcdd1cf1dfd39e57130bc80c (patch) | |
tree | f1b0bdc3528a8019c9a4dacec5ab3646bf4151e0 /drivers/net/ethernet/ti | |
parent | 451e856ef70907caec288d56c71b9409f29311d6 (diff) |
drivers: net: cpsw-phy-sel: add support to configure rgmii internal delay
Add support to enable CPSW RGMII internal delay (id mode) bits
when rgmii internal delay is configured in phy.
Signed-off-by: Mugunthan V N <mugunthanvnm@ti.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/ti')
-rw-r--r-- | drivers/net/ethernet/ti/cpsw-phy-sel.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/net/ethernet/ti/cpsw-phy-sel.c b/drivers/net/ethernet/ti/cpsw-phy-sel.c index c3e85acfdc70..054a8dd23dae 100644 --- a/drivers/net/ethernet/ti/cpsw-phy-sel.c +++ b/drivers/net/ethernet/ti/cpsw-phy-sel.c | |||
@@ -30,6 +30,8 @@ | |||
30 | 30 | ||
31 | #define AM33XX_GMII_SEL_RMII2_IO_CLK_EN BIT(7) | 31 | #define AM33XX_GMII_SEL_RMII2_IO_CLK_EN BIT(7) |
32 | #define AM33XX_GMII_SEL_RMII1_IO_CLK_EN BIT(6) | 32 | #define AM33XX_GMII_SEL_RMII1_IO_CLK_EN BIT(6) |
33 | #define AM33XX_GMII_SEL_RGMII2_IDMODE BIT(5) | ||
34 | #define AM33XX_GMII_SEL_RGMII1_IDMODE BIT(4) | ||
33 | 35 | ||
34 | #define GMII_SEL_MODE_MASK 0x3 | 36 | #define GMII_SEL_MODE_MASK 0x3 |
35 | 37 | ||
@@ -48,6 +50,7 @@ static void cpsw_gmii_sel_am3352(struct cpsw_phy_sel_priv *priv, | |||
48 | u32 reg; | 50 | u32 reg; |
49 | u32 mask; | 51 | u32 mask; |
50 | u32 mode = 0; | 52 | u32 mode = 0; |
53 | bool rgmii_id = false; | ||
51 | 54 | ||
52 | reg = readl(priv->gmii_sel); | 55 | reg = readl(priv->gmii_sel); |
53 | 56 | ||
@@ -57,10 +60,14 @@ static void cpsw_gmii_sel_am3352(struct cpsw_phy_sel_priv *priv, | |||
57 | break; | 60 | break; |
58 | 61 | ||
59 | case PHY_INTERFACE_MODE_RGMII: | 62 | case PHY_INTERFACE_MODE_RGMII: |
63 | mode = AM33XX_GMII_SEL_MODE_RGMII; | ||
64 | break; | ||
65 | |||
60 | case PHY_INTERFACE_MODE_RGMII_ID: | 66 | case PHY_INTERFACE_MODE_RGMII_ID: |
61 | case PHY_INTERFACE_MODE_RGMII_RXID: | 67 | case PHY_INTERFACE_MODE_RGMII_RXID: |
62 | case PHY_INTERFACE_MODE_RGMII_TXID: | 68 | case PHY_INTERFACE_MODE_RGMII_TXID: |
63 | mode = AM33XX_GMII_SEL_MODE_RGMII; | 69 | mode = AM33XX_GMII_SEL_MODE_RGMII; |
70 | rgmii_id = true; | ||
64 | break; | 71 | break; |
65 | 72 | ||
66 | default: | 73 | default: |
@@ -83,6 +90,13 @@ static void cpsw_gmii_sel_am3352(struct cpsw_phy_sel_priv *priv, | |||
83 | mode |= AM33XX_GMII_SEL_RMII2_IO_CLK_EN; | 90 | mode |= AM33XX_GMII_SEL_RMII2_IO_CLK_EN; |
84 | } | 91 | } |
85 | 92 | ||
93 | if (rgmii_id) { | ||
94 | if (slave == 0) | ||
95 | mode |= AM33XX_GMII_SEL_RGMII1_IDMODE; | ||
96 | else | ||
97 | mode |= AM33XX_GMII_SEL_RGMII2_IDMODE; | ||
98 | } | ||
99 | |||
86 | reg &= ~mask; | 100 | reg &= ~mask; |
87 | reg |= mode; | 101 | reg |= mode; |
88 | 102 | ||