aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/arm/mach-at91/board-dt-sama5.c17
-rw-r--r--arch/arm/mach-imx/mach-imx6q.c13
-rw-r--r--include/linux/micrel_phy.h6
3 files changed, 20 insertions, 16 deletions
diff --git a/arch/arm/mach-at91/board-dt-sama5.c b/arch/arm/mach-at91/board-dt-sama5.c
index ad95f6a23a28..bf00d15d954d 100644
--- a/arch/arm/mach-at91/board-dt-sama5.c
+++ b/arch/arm/mach-at91/board-dt-sama5.c
@@ -42,20 +42,15 @@ static int ksz9021rn_phy_fixup(struct phy_device *phy)
42{ 42{
43 int value; 43 int value;
44 44
45#define GMII_RCCPSR 260
46#define GMII_RRDPSR 261
47#define GMII_ERCR 11
48#define GMII_ERDWR 12
49
50 /* Set delay values */ 45 /* Set delay values */
51 value = GMII_RCCPSR | 0x8000; 46 value = MICREL_KSZ9021_RGMII_CLK_CTRL_PAD_SCEW | 0x8000;
52 phy_write(phy, GMII_ERCR, value); 47 phy_write(phy, MICREL_KSZ9021_EXTREG_CTRL, value);
53 value = 0xF2F4; 48 value = 0xF2F4;
54 phy_write(phy, GMII_ERDWR, value); 49 phy_write(phy, MICREL_KSZ9021_EXTREG_DATA_WRITE, value);
55 value = GMII_RRDPSR | 0x8000; 50 value = MICREL_KSZ9021_RGMII_RX_DATA_PAD_SCEW | 0x8000;
56 phy_write(phy, GMII_ERCR, value); 51 phy_write(phy, MICREL_KSZ9021_EXTREG_CTRL, value);
57 value = 0x2222; 52 value = 0x2222;
58 phy_write(phy, GMII_ERDWR, value); 53 phy_write(phy, MICREL_KSZ9021_EXTREG_DATA_WRITE, value);
59 54
60 return 0; 55 return 0;
61} 56}
diff --git a/arch/arm/mach-imx/mach-imx6q.c b/arch/arm/mach-imx/mach-imx6q.c
index c730af673085..1e093abe7b95 100644
--- a/arch/arm/mach-imx/mach-imx6q.c
+++ b/arch/arm/mach-imx/mach-imx6q.c
@@ -103,13 +103,16 @@ static int ksz9021rn_phy_fixup(struct phy_device *phydev)
103{ 103{
104 if (IS_BUILTIN(CONFIG_PHYLIB)) { 104 if (IS_BUILTIN(CONFIG_PHYLIB)) {
105 /* min rx data delay */ 105 /* min rx data delay */
106 phy_write(phydev, 0x0b, 0x8105); 106 phy_write(phydev, MICREL_KSZ9021_EXTREG_CTRL,
107 phy_write(phydev, 0x0c, 0x0000); 107 0x8000 | MICREL_KSZ9021_RGMII_RX_DATA_PAD_SCEW);
108 phy_write(phydev, MICREL_KSZ9021_EXTREG_DATA_WRITE, 0x0000);
108 109
109 /* max rx/tx clock delay, min rx/tx control delay */ 110 /* max rx/tx clock delay, min rx/tx control delay */
110 phy_write(phydev, 0x0b, 0x8104); 111 phy_write(phydev, MICREL_KSZ9021_EXTREG_CTRL,
111 phy_write(phydev, 0x0c, 0xf0f0); 112 0x8000 | MICREL_KSZ9021_RGMII_CLK_CTRL_PAD_SCEW);
112 phy_write(phydev, 0x0b, 0x104); 113 phy_write(phydev, MICREL_KSZ9021_EXTREG_DATA_WRITE, 0xf0f0);
114 phy_write(phydev, MICREL_KSZ9021_EXTREG_CTRL,
115 MICREL_KSZ9021_RGMII_CLK_CTRL_PAD_SCEW);
113 } 116 }
114 117
115 return 0; 118 return 0;
diff --git a/include/linux/micrel_phy.h b/include/linux/micrel_phy.h
index 8752dbbc6135..ad05ce60c1c9 100644
--- a/include/linux/micrel_phy.h
+++ b/include/linux/micrel_phy.h
@@ -17,6 +17,7 @@
17 17
18#define PHY_ID_KSZ8873MLL 0x000e7237 18#define PHY_ID_KSZ8873MLL 0x000e7237
19#define PHY_ID_KSZ9021 0x00221610 19#define PHY_ID_KSZ9021 0x00221610
20#define PHY_ID_KSZ9021RLRN 0x00221611
20#define PHY_ID_KS8737 0x00221720 21#define PHY_ID_KS8737 0x00221720
21#define PHY_ID_KSZ8021 0x00221555 22#define PHY_ID_KSZ8021 0x00221555
22#define PHY_ID_KSZ8031 0x00221556 23#define PHY_ID_KSZ8031 0x00221556
@@ -35,4 +36,9 @@
35/* struct phy_device dev_flags definitions */ 36/* struct phy_device dev_flags definitions */
36#define MICREL_PHY_50MHZ_CLK 0x00000001 37#define MICREL_PHY_50MHZ_CLK 0x00000001
37 38
39#define MICREL_KSZ9021_EXTREG_CTRL 0xB
40#define MICREL_KSZ9021_EXTREG_DATA_WRITE 0xC
41#define MICREL_KSZ9021_RGMII_CLK_CTRL_PAD_SCEW 0x104
42#define MICREL_KSZ9021_RGMII_RX_DATA_PAD_SCEW 0x105
43
38#endif /* _MICREL_PHY_H */ 44#endif /* _MICREL_PHY_H */