Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Mugunthan V N and committed by
David S. Miller
0fb26c30 451e856e

+14
+14
drivers/net/ethernet/ti/cpsw-phy-sel.c
··· 30 30 31 31 #define AM33XX_GMII_SEL_RMII2_IO_CLK_EN BIT(7) 32 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 36 #define GMII_SEL_MODE_MASK 0x3 35 37 ··· 50 48 u32 reg; 51 49 u32 mask; 52 50 u32 mode = 0; 51 + bool rgmii_id = false; 53 52 54 53 reg = readl(priv->gmii_sel); 55 54 ··· 60 57 break; 61 58 62 59 case PHY_INTERFACE_MODE_RGMII: 60 + mode = AM33XX_GMII_SEL_MODE_RGMII; 61 + break; 62 + 63 63 case PHY_INTERFACE_MODE_RGMII_ID: 64 64 case PHY_INTERFACE_MODE_RGMII_RXID: 65 65 case PHY_INTERFACE_MODE_RGMII_TXID: 66 66 mode = AM33XX_GMII_SEL_MODE_RGMII; 67 + rgmii_id = true; 67 68 break; 68 69 69 70 default: ··· 88 81 mode |= AM33XX_GMII_SEL_RMII1_IO_CLK_EN; 89 82 else 90 83 mode |= AM33XX_GMII_SEL_RMII2_IO_CLK_EN; 84 + } 85 + 86 + if (rgmii_id) { 87 + if (slave == 0) 88 + mode |= AM33XX_GMII_SEL_RGMII1_IDMODE; 89 + else 90 + mode |= AM33XX_GMII_SEL_RGMII2_IDMODE; 91 91 } 92 92 93 93 reg &= ~mask;