aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/ti
diff options
context:
space:
mode:
authorMugunthan V N <mugunthanvnm@ti.com>2016-10-04 09:37:29 -0400
committerDavid S. Miller <davem@davemloft.net>2016-10-06 20:45:30 -0400
commit0fb26c3063ea7095fcdd1cf1dfd39e57130bc80c (patch)
treef1b0bdc3528a8019c9a4dacec5ab3646bf4151e0 /drivers/net/ethernet/ti
parent451e856ef70907caec288d56c71b9409f29311d6 (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.c14
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