1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
|
From cdebdc900ae5cb29dc1cce1c26865001534ab77d Mon Sep 17 00:00:00 2001
From: Calvin Johnson <calvin.johnson@nxp.com>
Date: Thu, 4 Oct 2018 09:38:34 +0530
Subject: [PATCH] staging: fsl_ppfe/eth: replace magic numbers
Replace magic numbers and some cosmetic changes.
Signed-off-by: Calvin Johnson <calvin.johnson@nxp.com>
---
drivers/staging/fsl_ppfe/pfe_eth.c | 83 ++++++++++++++++++++++++++++----------
1 file changed, 61 insertions(+), 22 deletions(-)
--- a/drivers/staging/fsl_ppfe/pfe_eth.c
+++ b/drivers/staging/fsl_ppfe/pfe_eth.c
@@ -66,6 +66,36 @@ static void pfe_eth_flush_tx(struct pfe_
static void pfe_eth_flush_txQ(struct pfe_eth_priv_s *priv, int tx_q_num, int
from_tx, int n_desc);
+/* MDIO registers */
+#define MDIO_SGMII_CR 0x00
+#define MDIO_SGMII_SR 0x01
+#define MDIO_SGMII_DEV_ABIL_SGMII 0x04
+#define MDIO_SGMII_LINK_TMR_L 0x12
+#define MDIO_SGMII_LINK_TMR_H 0x13
+#define MDIO_SGMII_IF_MODE 0x14
+
+/* SGMII Control defines */
+#define SGMII_CR_RST 0x8000
+#define SGMII_CR_AN_EN 0x1000
+#define SGMII_CR_RESTART_AN 0x0200
+#define SGMII_CR_FD 0x0100
+#define SGMII_CR_SPEED_SEL1_1G 0x0040
+#define SGMII_CR_DEF_VAL (SGMII_CR_AN_EN | SGMII_CR_FD | \
+ SGMII_CR_SPEED_SEL1_1G)
+
+/* SGMII IF Mode */
+#define SGMII_DUPLEX_HALF 0x10
+#define SGMII_SPEED_10MBPS 0x00
+#define SGMII_SPEED_100MBPS 0x04
+#define SGMII_SPEED_1GBPS 0x08
+#define SGMII_USE_SGMII_AN 0x02
+#define SGMII_EN 0x01
+
+/* SGMII Device Ability for SGMII */
+#define SGMII_DEV_ABIL_ACK 0x4000
+#define SGMII_DEV_ABIL_EEE_CLK_STP_EN 0x0100
+#define SGMII_DEV_ABIL_SGMII 0x0001
+
unsigned int gemac_regs[] = {
0x0004, /* Interrupt event */
0x0008, /* Interrupt mask */
@@ -1042,6 +1072,10 @@ static int pfe_get_phydev_speed(struct p
#define SCFG_RGMIIPCR_SETSP_10M (0x00000002)
#define SCFG_RGMIIPCR_SETFD (0x00000001)
+#define MDIOSELCR 0x484
+#define MDIOSEL_SERDES 0x0
+#define MDIOSEL_EXTPHY 0x80000000
+
static void pfe_set_rgmii_speed(struct phy_device *phydev)
{
u32 rgmii_pcr;
@@ -1187,25 +1221,34 @@ static void ls1012a_configure_serdes(str
netif_info(priv, drv, ndev, "%s\n", __func__);
/* PCS configuration done with corresponding GEMAC */
- pfe_eth_mdio_read(bus, 0, 0);
- pfe_eth_mdio_read(bus, 0, 1);
+ pfe_eth_mdio_read(bus, 0, MDIO_SGMII_CR);
+ pfe_eth_mdio_read(bus, 0, MDIO_SGMII_SR);
+
+ pfe_eth_mdio_write(bus, 0, MDIO_SGMII_CR, SGMII_CR_RST);
- /*These settings taken from validtion team */
- pfe_eth_mdio_write(bus, 0, 0x0, 0x8000);
if (sgmii_2500) {
- pfe_eth_mdio_write(bus, 0, 0x14, 0x9);
- pfe_eth_mdio_write(bus, 0, 0x4, 0x4001);
- pfe_eth_mdio_write(bus, 0, 0x12, 0xa120);
- pfe_eth_mdio_write(bus, 0, 0x13, 0x7);
+ pfe_eth_mdio_write(bus, 0, MDIO_SGMII_IF_MODE, SGMII_SPEED_1GBPS
+ | SGMII_EN);
+ pfe_eth_mdio_write(bus, 0, MDIO_SGMII_DEV_ABIL_SGMII,
+ SGMII_DEV_ABIL_ACK | SGMII_DEV_ABIL_SGMII);
+ pfe_eth_mdio_write(bus, 0, MDIO_SGMII_LINK_TMR_L, 0xa120);
+ pfe_eth_mdio_write(bus, 0, MDIO_SGMII_LINK_TMR_H, 0x7);
/* Autonegotiation need to be disabled for 2.5G SGMII mode*/
- value = 0x0140;
- pfe_eth_mdio_write(bus, 0, 0x0, value);
+ value = SGMII_CR_FD | SGMII_CR_SPEED_SEL1_1G;
+ pfe_eth_mdio_write(bus, 0, MDIO_SGMII_CR, value);
} else {
- pfe_eth_mdio_write(bus, 0, 0x14, 0xb);
- pfe_eth_mdio_write(bus, 0, 0x4, 0x1a1);
- pfe_eth_mdio_write(bus, 0, 0x12, 0x400);
- pfe_eth_mdio_write(bus, 0, 0x13, 0x0);
- pfe_eth_mdio_write(bus, 0, 0x0, 0x1140);
+ pfe_eth_mdio_write(bus, 0, MDIO_SGMII_IF_MODE,
+ SGMII_SPEED_1GBPS
+ | SGMII_USE_SGMII_AN
+ | SGMII_EN);
+ pfe_eth_mdio_write(bus, 0, MDIO_SGMII_DEV_ABIL_SGMII,
+ SGMII_DEV_ABIL_EEE_CLK_STP_EN
+ | 0xa0
+ | SGMII_DEV_ABIL_SGMII);
+ pfe_eth_mdio_write(bus, 0, MDIO_SGMII_LINK_TMR_L, 0x400);
+ pfe_eth_mdio_write(bus, 0, MDIO_SGMII_LINK_TMR_H, 0x0);
+ value = SGMII_CR_AN_EN | SGMII_CR_FD | SGMII_CR_SPEED_SEL1_1G;
+ pfe_eth_mdio_write(bus, 0, MDIO_SGMII_CR, value);
}
}
@@ -1235,15 +1278,15 @@ static int pfe_phy_init(struct net_devic
(interface == PHY_INTERFACE_MODE_2500SGMII)) {
/*Configure SGMII PCS */
if (pfe->scfg) {
- /*Config MDIO from serdes */
- regmap_write(pfe->scfg, 0x484, 0x00000000);
+ /* Config MDIO from serdes */
+ regmap_write(pfe->scfg, MDIOSELCR, MDIOSEL_SERDES);
}
ls1012a_configure_serdes(ndev);
}
if (pfe->scfg) {
/*Config MDIO from PAD */
- regmap_write(pfe->scfg, 0x484, 0x80000000);
+ regmap_write(pfe->scfg, MDIOSELCR, MDIOSEL_EXTPHY);
}
priv->oldlink = 0;
@@ -2339,10 +2382,6 @@ static int pfe_eth_init_one(struct pfe *
priv->PHY_baseaddr = cbus_emac_base[0];
priv->GPI_baseaddr = cbus_gpi_base[id];
-#define HIF_GEMAC_TMUQ_BASE 6
- priv->low_tmu_q = HIF_GEMAC_TMUQ_BASE + (id * 2);
- priv->high_tmu_q = priv->low_tmu_q + 1;
-
spin_lock_init(&priv->lock);
pfe_eth_fast_tx_timeout_init(priv);
|