hc
2023-11-06 e3e12f52b214121840b44c91de5b3e5af5d3eb84
kernel/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
....@@ -24,6 +24,7 @@
2424 #include <linux/of_net.h>
2525 #include <linux/gpio.h>
2626 #include <linux/module.h>
27
+#include <linux/nvmem-consumer.h>
2728 #include <linux/of_gpio.h>
2829 #include <linux/of_device.h>
2930 #include <linux/platform_device.h>
....@@ -47,7 +48,10 @@
4748 void (*set_to_qsgmii)(struct rk_priv_data *bsp_priv);
4849 void (*set_rgmii_speed)(struct rk_priv_data *bsp_priv, int speed);
4950 void (*set_rmii_speed)(struct rk_priv_data *bsp_priv, int speed);
50
- void (*integrated_phy_powerup)(struct rk_priv_data *bsp_priv);
51
+ void (*set_sgmii_speed)(struct rk_priv_data *bsp_priv, int speed);
52
+ void (*set_clock_selection)(struct rk_priv_data *bsp_priv, bool input,
53
+ bool enable);
54
+ void (*integrated_phy_power)(struct rk_priv_data *bsp_priv, bool up);
5155 };
5256
5357 struct rk_priv_data {
....@@ -61,6 +65,7 @@
6165 bool clk_enabled;
6266 bool clock_input;
6367 bool integrated_phy;
68
+ struct phy *comphy;
6469
6570 struct clk *clk_mac;
6671 struct clk *gmac_clkin;
....@@ -73,6 +78,7 @@
7378 struct clk *pclk_mac;
7479 struct clk *clk_phy;
7580 struct clk *pclk_xpcs;
81
+ struct clk *clk_xpcs_eee;
7682
7783 struct reset_control *phy_reset;
7884
....@@ -81,6 +87,8 @@
8187
8288 struct regmap *grf;
8389 struct regmap *xpcs;
90
+
91
+ unsigned char otp_data;
8492 };
8593
8694 /* XPCS */
....@@ -165,10 +173,10 @@
165173 int ret, i, id = bsp_priv->bus_id;
166174 u32 val;
167175
168
- if (mode == PHY_INTERFACE_MODE_QSGMII && id > 0)
176
+ if (mode == PHY_INTERFACE_MODE_QSGMII && !id)
169177 return 0;
170178
171
- ret = xpcs_soft_reset(bsp_priv, id);
179
+ ret = xpcs_soft_reset(bsp_priv, 0);
172180 if (ret) {
173181 dev_err(&bsp_priv->pdev->dev, "xpcs_soft_reset fail %d\n", ret);
174182 return ret;
....@@ -195,10 +203,10 @@
195203 SR_MII_CTRL_AN_ENABLE);
196204 }
197205 } else {
198
- val = xpcs_read(bsp_priv, SR_MII_OFFSET(id) + VR_MII_DIG_CTRL1);
199
- xpcs_write(bsp_priv, SR_MII_OFFSET(id) + VR_MII_DIG_CTRL1,
206
+ val = xpcs_read(bsp_priv, SR_MII_OFFSET(0) + VR_MII_DIG_CTRL1);
207
+ xpcs_write(bsp_priv, SR_MII_OFFSET(0) + VR_MII_DIG_CTRL1,
200208 val | MII_MAC_AUTO_SW);
201
- xpcs_write(bsp_priv, SR_MII_OFFSET(id) + MII_BMCR,
209
+ xpcs_write(bsp_priv, SR_MII_OFFSET(0) + MII_BMCR,
202210 SR_MII_CTRL_AN_ENABLE);
203211 }
204212
....@@ -212,8 +220,55 @@
212220 #define GRF_CLR_BIT(nr) (BIT(nr+16))
213221
214222 #define DELAY_ENABLE(soc, tx, rx) \
215
- (((tx) ? soc##_GMAC_TXCLK_DLY_ENABLE : soc##_GMAC_TXCLK_DLY_DISABLE) | \
216
- ((rx) ? soc##_GMAC_RXCLK_DLY_ENABLE : soc##_GMAC_RXCLK_DLY_DISABLE))
223
+ ((((tx) >= 0) ? soc##_GMAC_TXCLK_DLY_ENABLE : soc##_GMAC_TXCLK_DLY_DISABLE) | \
224
+ (((rx) >= 0) ? soc##_GMAC_RXCLK_DLY_ENABLE : soc##_GMAC_RXCLK_DLY_DISABLE))
225
+
226
+#define DELAY_VALUE(soc, tx, rx) \
227
+ ((((tx) >= 0) ? soc##_GMAC_CLK_TX_DL_CFG(tx) : 0) | \
228
+ (((rx) >= 0) ? soc##_GMAC_CLK_RX_DL_CFG(rx) : 0))
229
+
230
+/* Integrated EPHY */
231
+
232
+#define RK_GRF_MACPHY_CON0 0xb00
233
+#define RK_GRF_MACPHY_CON1 0xb04
234
+#define RK_GRF_MACPHY_CON2 0xb08
235
+#define RK_GRF_MACPHY_CON3 0xb0c
236
+
237
+#define RK_MACPHY_ENABLE GRF_BIT(0)
238
+#define RK_MACPHY_DISABLE GRF_CLR_BIT(0)
239
+#define RK_MACPHY_CFG_CLK_50M GRF_BIT(14)
240
+#define RK_GMAC2PHY_RMII_MODE (GRF_BIT(6) | GRF_CLR_BIT(7))
241
+#define RK_GRF_CON2_MACPHY_ID HIWORD_UPDATE(0x1234, 0xffff, 0)
242
+#define RK_GRF_CON3_MACPHY_ID HIWORD_UPDATE(0x35, 0x3f, 0)
243
+
244
+static void rk_gmac_integrated_ephy_powerup(struct rk_priv_data *priv)
245
+{
246
+ regmap_write(priv->grf, RK_GRF_MACPHY_CON0, RK_MACPHY_CFG_CLK_50M);
247
+ regmap_write(priv->grf, RK_GRF_MACPHY_CON0, RK_GMAC2PHY_RMII_MODE);
248
+
249
+ regmap_write(priv->grf, RK_GRF_MACPHY_CON2, RK_GRF_CON2_MACPHY_ID);
250
+ regmap_write(priv->grf, RK_GRF_MACPHY_CON3, RK_GRF_CON3_MACPHY_ID);
251
+
252
+ if (priv->phy_reset) {
253
+ /* PHY needs to be disabled before trying to reset it */
254
+ regmap_write(priv->grf, RK_GRF_MACPHY_CON0, RK_MACPHY_DISABLE);
255
+ if (priv->phy_reset)
256
+ reset_control_assert(priv->phy_reset);
257
+ usleep_range(10, 20);
258
+ if (priv->phy_reset)
259
+ reset_control_deassert(priv->phy_reset);
260
+ usleep_range(10, 20);
261
+ regmap_write(priv->grf, RK_GRF_MACPHY_CON0, RK_MACPHY_ENABLE);
262
+ msleep(30);
263
+ }
264
+}
265
+
266
+static void rk_gmac_integrated_ephy_powerdown(struct rk_priv_data *priv)
267
+{
268
+ regmap_write(priv->grf, RK_GRF_MACPHY_CON0, RK_MACPHY_DISABLE);
269
+ if (priv->phy_reset)
270
+ reset_control_assert(priv->phy_reset);
271
+}
217272
218273 #define PX30_GRF_GMAC_CON1 0x0904
219274
....@@ -306,12 +361,10 @@
306361
307362 regmap_write(bsp_priv->grf, RK1808_GRF_GMAC_CON1,
308363 RK1808_GMAC_PHY_INTF_SEL_RGMII |
309
- RK1808_GMAC_RXCLK_DLY_ENABLE |
310
- RK1808_GMAC_TXCLK_DLY_ENABLE);
364
+ DELAY_ENABLE(RK1808, tx_delay, rx_delay));
311365
312366 regmap_write(bsp_priv->grf, RK1808_GRF_GMAC_CON0,
313
- RK1808_GMAC_CLK_RX_DL_CFG(rx_delay) |
314
- RK1808_GMAC_CLK_TX_DL_CFG(tx_delay));
367
+ DELAY_VALUE(RK1808, tx_delay, rx_delay));
315368 }
316369
317370 static void rk1808_set_to_rmii(struct rk_priv_data *bsp_priv)
....@@ -439,8 +492,7 @@
439492 RK3128_GMAC_RMII_MODE_CLR);
440493 regmap_write(bsp_priv->grf, RK3128_GRF_MAC_CON0,
441494 DELAY_ENABLE(RK3128, tx_delay, rx_delay) |
442
- RK3128_GMAC_CLK_RX_DL_CFG(rx_delay) |
443
- RK3128_GMAC_CLK_TX_DL_CFG(tx_delay));
495
+ DELAY_VALUE(RK3128, tx_delay, rx_delay));
444496 }
445497
446498 static void rk3128_set_to_rmii(struct rk_priv_data *bsp_priv)
....@@ -556,8 +608,7 @@
556608 DELAY_ENABLE(RK3228, tx_delay, rx_delay));
557609
558610 regmap_write(bsp_priv->grf, RK3228_GRF_MAC_CON0,
559
- RK3228_GMAC_CLK_RX_DL_CFG(rx_delay) |
560
- RK3228_GMAC_CLK_TX_DL_CFG(tx_delay));
611
+ DELAY_VALUE(RK3128, tx_delay, rx_delay));
561612 }
562613
563614 static void rk3228_set_to_rmii(struct rk_priv_data *bsp_priv)
....@@ -620,10 +671,16 @@
620671 dev_err(dev, "unknown speed value for RMII! speed=%d", speed);
621672 }
622673
623
-static void rk3228_integrated_phy_powerup(struct rk_priv_data *priv)
674
+static void rk3228_integrated_phy_power(struct rk_priv_data *priv, bool up)
624675 {
625
- regmap_write(priv->grf, RK3228_GRF_CON_MUX,
626
- RK3228_GRF_CON_MUX_GMAC_INTEGRATED_PHY);
676
+ if (up) {
677
+ regmap_write(priv->grf, RK3228_GRF_CON_MUX,
678
+ RK3228_GRF_CON_MUX_GMAC_INTEGRATED_PHY);
679
+
680
+ rk_gmac_integrated_ephy_powerup(priv);
681
+ } else {
682
+ rk_gmac_integrated_ephy_powerdown(priv);
683
+ }
627684 }
628685
629686 static const struct rk_gmac_ops rk3228_ops = {
....@@ -631,7 +688,7 @@
631688 .set_to_rmii = rk3228_set_to_rmii,
632689 .set_rgmii_speed = rk3228_set_rgmii_speed,
633690 .set_rmii_speed = rk3228_set_rmii_speed,
634
- .integrated_phy_powerup = rk3228_integrated_phy_powerup,
691
+ .integrated_phy_power = rk3228_integrated_phy_power,
635692 };
636693
637694 #define RK3288_GRF_SOC_CON1 0x0248
....@@ -677,8 +734,7 @@
677734 RK3288_GMAC_RMII_MODE_CLR);
678735 regmap_write(bsp_priv->grf, RK3288_GRF_SOC_CON3,
679736 DELAY_ENABLE(RK3288, tx_delay, rx_delay) |
680
- RK3288_GMAC_CLK_RX_DL_CFG(rx_delay) |
681
- RK3288_GMAC_CLK_TX_DL_CFG(tx_delay));
737
+ DELAY_VALUE(RK3288, tx_delay, rx_delay));
682738 }
683739
684740 static void rk3288_set_to_rmii(struct rk_priv_data *bsp_priv)
....@@ -849,12 +905,10 @@
849905 regmap_write(bsp_priv->grf, RK3328_GRF_MAC_CON1,
850906 RK3328_GMAC_PHY_INTF_SEL_RGMII |
851907 RK3328_GMAC_RMII_MODE_CLR |
852
- RK3328_GMAC_RXCLK_DLY_ENABLE |
853
- RK3328_GMAC_TXCLK_DLY_ENABLE);
908
+ DELAY_ENABLE(RK3328, tx_delay, rx_delay));
854909
855910 regmap_write(bsp_priv->grf, RK3328_GRF_MAC_CON0,
856
- RK3328_GMAC_CLK_RX_DL_CFG(rx_delay) |
857
- RK3328_GMAC_CLK_TX_DL_CFG(tx_delay));
911
+ DELAY_VALUE(RK3328, tx_delay, rx_delay));
858912 }
859913
860914 static void rk3328_set_to_rmii(struct rk_priv_data *bsp_priv)
....@@ -922,10 +976,16 @@
922976 dev_err(dev, "unknown speed value for RMII! speed=%d", speed);
923977 }
924978
925
-static void rk3328_integrated_phy_powerup(struct rk_priv_data *priv)
979
+static void rk3328_integrated_phy_power(struct rk_priv_data *priv, bool up)
926980 {
927
- regmap_write(priv->grf, RK3328_GRF_MACPHY_CON1,
928
- RK3328_MACPHY_RMII_MODE);
981
+ if (up) {
982
+ regmap_write(priv->grf, RK3328_GRF_MACPHY_CON1,
983
+ RK3328_MACPHY_RMII_MODE);
984
+
985
+ rk_gmac_integrated_ephy_powerup(priv);
986
+ } else {
987
+ rk_gmac_integrated_ephy_powerdown(priv);
988
+ }
929989 }
930990
931991 static const struct rk_gmac_ops rk3328_ops = {
....@@ -933,7 +993,7 @@
933993 .set_to_rmii = rk3328_set_to_rmii,
934994 .set_rgmii_speed = rk3328_set_rgmii_speed,
935995 .set_rmii_speed = rk3328_set_rmii_speed,
936
- .integrated_phy_powerup = rk3328_integrated_phy_powerup,
996
+ .integrated_phy_power = rk3328_integrated_phy_power,
937997 };
938998
939999 #define RK3366_GRF_SOC_CON6 0x0418
....@@ -979,8 +1039,7 @@
9791039 RK3366_GMAC_RMII_MODE_CLR);
9801040 regmap_write(bsp_priv->grf, RK3366_GRF_SOC_CON7,
9811041 DELAY_ENABLE(RK3366, tx_delay, rx_delay) |
982
- RK3366_GMAC_CLK_RX_DL_CFG(rx_delay) |
983
- RK3366_GMAC_CLK_TX_DL_CFG(tx_delay));
1042
+ DELAY_VALUE(RK3366, tx_delay, rx_delay));
9841043 }
9851044
9861045 static void rk3366_set_to_rmii(struct rk_priv_data *bsp_priv)
....@@ -1090,8 +1149,7 @@
10901149 RK3368_GMAC_RMII_MODE_CLR);
10911150 regmap_write(bsp_priv->grf, RK3368_GRF_SOC_CON16,
10921151 DELAY_ENABLE(RK3368, tx_delay, rx_delay) |
1093
- RK3368_GMAC_CLK_RX_DL_CFG(rx_delay) |
1094
- RK3368_GMAC_CLK_TX_DL_CFG(tx_delay));
1152
+ DELAY_VALUE(RK3368, tx_delay, rx_delay));
10951153 }
10961154
10971155 static void rk3368_set_to_rmii(struct rk_priv_data *bsp_priv)
....@@ -1201,8 +1259,7 @@
12011259 RK3399_GMAC_RMII_MODE_CLR);
12021260 regmap_write(bsp_priv->grf, RK3399_GRF_SOC_CON6,
12031261 DELAY_ENABLE(RK3399, tx_delay, rx_delay) |
1204
- RK3399_GMAC_CLK_RX_DL_CFG(rx_delay) |
1205
- RK3399_GMAC_CLK_TX_DL_CFG(tx_delay));
1262
+ DELAY_VALUE(RK3399, tx_delay, rx_delay));
12061263 }
12071264
12081265 static void rk3399_set_to_rmii(struct rk_priv_data *bsp_priv)
....@@ -1267,6 +1324,208 @@
12671324 .set_to_rmii = rk3399_set_to_rmii,
12681325 .set_rgmii_speed = rk3399_set_rgmii_speed,
12691326 .set_rmii_speed = rk3399_set_rmii_speed,
1327
+};
1328
+
1329
+#define RK3528_VO_GRF_GMAC_CON 0X60018
1330
+#define RK3528_VPU_GRF_GMAC_CON5 0X40018
1331
+#define RK3528_VPU_GRF_GMAC_CON6 0X4001c
1332
+
1333
+#define RK3528_GMAC_RXCLK_DLY_ENABLE GRF_BIT(15)
1334
+#define RK3528_GMAC_RXCLK_DLY_DISABLE GRF_CLR_BIT(15)
1335
+#define RK3528_GMAC_TXCLK_DLY_ENABLE GRF_BIT(14)
1336
+#define RK3528_GMAC_TXCLK_DLY_DISABLE GRF_CLR_BIT(14)
1337
+
1338
+#define RK3528_GMAC_CLK_RX_DL_CFG(val) HIWORD_UPDATE(val, 0xFF, 8)
1339
+#define RK3528_GMAC_CLK_TX_DL_CFG(val) HIWORD_UPDATE(val, 0xFF, 0)
1340
+
1341
+#define RK3528_GMAC0_PHY_INTF_SEL_RMII GRF_BIT(1)
1342
+#define RK3528_GMAC1_PHY_INTF_SEL_RGMII GRF_CLR_BIT(8)
1343
+#define RK3528_GMAC1_PHY_INTF_SEL_RMII GRF_BIT(8)
1344
+
1345
+#define RK3528_GMAC1_CLK_SELET_CRU GRF_CLR_BIT(12)
1346
+#define RK3528_GMAC1_CLK_SELET_IO GRF_BIT(12)
1347
+
1348
+#define RK3528_GMAC0_CLK_RMII_DIV2 GRF_BIT(3)
1349
+#define RK3528_GMAC0_CLK_RMII_DIV20 GRF_CLR_BIT(3)
1350
+#define RK3528_GMAC1_CLK_RMII_DIV2 GRF_BIT(10)
1351
+#define RK3528_GMAC1_CLK_RMII_DIV20 GRF_CLR_BIT(10)
1352
+
1353
+#define RK3528_GMAC1_CLK_RGMII_DIV1 \
1354
+ (GRF_CLR_BIT(11) | GRF_CLR_BIT(10))
1355
+#define RK3528_GMAC1_CLK_RGMII_DIV5 \
1356
+ (GRF_BIT(11) | GRF_BIT(10))
1357
+#define RK3528_GMAC1_CLK_RGMII_DIV50 \
1358
+ (GRF_BIT(11) | GRF_CLR_BIT(10))
1359
+
1360
+#define RK3528_GMAC0_CLK_RMII_GATE GRF_BIT(2)
1361
+#define RK3528_GMAC0_CLK_RMII_NOGATE GRF_CLR_BIT(2)
1362
+#define RK3528_GMAC1_CLK_RMII_GATE GRF_BIT(9)
1363
+#define RK3528_GMAC1_CLK_RMII_NOGATE GRF_CLR_BIT(9)
1364
+
1365
+#define RK3528_VO_GRF_MACPHY_CON0 0X6001c
1366
+#define RK3528_VO_GRF_MACPHY_CON1 0X60020
1367
+
1368
+#define RK3528_VO_GRF_MACPHY_SHUTDOWN GRF_BIT(1)
1369
+#define RK3528_VO_GRF_MACPHY_POWERUP GRF_CLR_BIT(1)
1370
+#define RK3528_VO_GRF_MACPHY_INTERNAL_RMII_SEL GRF_BIT(6)
1371
+#define RK3528_VO_GRF_MACPHY_24M_CLK_SEL (GRF_BIT(8) | GRF_BIT(9))
1372
+#define RK3528_VO_GRF_MACPHY_PHY_ID GRF_BIT(11)
1373
+
1374
+#define RK3528_VO_GRF_MACPHY_BGS HIWORD_UPDATE(0x0, 0xf, 0)
1375
+
1376
+static void rk3528_set_to_rgmii(struct rk_priv_data *bsp_priv,
1377
+ int tx_delay, int rx_delay)
1378
+{
1379
+ struct device *dev = &bsp_priv->pdev->dev;
1380
+
1381
+ if (IS_ERR(bsp_priv->grf)) {
1382
+ dev_err(dev, "Missing rockchip,grf property\n");
1383
+ return;
1384
+ }
1385
+
1386
+ regmap_write(bsp_priv->grf, RK3528_VPU_GRF_GMAC_CON5,
1387
+ RK3528_GMAC1_PHY_INTF_SEL_RGMII);
1388
+
1389
+ regmap_write(bsp_priv->grf, RK3528_VPU_GRF_GMAC_CON5,
1390
+ DELAY_ENABLE(RK3528, tx_delay, rx_delay));
1391
+
1392
+ regmap_write(bsp_priv->grf, RK3528_VPU_GRF_GMAC_CON6,
1393
+ DELAY_VALUE(RK3528, tx_delay, rx_delay));
1394
+}
1395
+
1396
+static void rk3528_set_to_rmii(struct rk_priv_data *bsp_priv)
1397
+{
1398
+ struct device *dev = &bsp_priv->pdev->dev;
1399
+ unsigned int id = bsp_priv->bus_id;
1400
+
1401
+ if (IS_ERR(bsp_priv->grf)) {
1402
+ dev_err(dev, "%s: Missing rockchip,grf property\n", __func__);
1403
+ return;
1404
+ }
1405
+
1406
+ if (id == 1)
1407
+ regmap_write(bsp_priv->grf, RK3528_VPU_GRF_GMAC_CON5,
1408
+ RK3528_GMAC1_PHY_INTF_SEL_RMII);
1409
+ else
1410
+ regmap_write(bsp_priv->grf, RK3528_VO_GRF_GMAC_CON,
1411
+ RK3528_GMAC0_PHY_INTF_SEL_RMII);
1412
+}
1413
+
1414
+static void rk3528_set_rgmii_speed(struct rk_priv_data *bsp_priv, int speed)
1415
+{
1416
+ struct device *dev = &bsp_priv->pdev->dev;
1417
+ unsigned int val = 0;
1418
+
1419
+ switch (speed) {
1420
+ case 10:
1421
+ val = RK3528_GMAC1_CLK_RGMII_DIV50;
1422
+ break;
1423
+ case 100:
1424
+ val = RK3528_GMAC1_CLK_RGMII_DIV5;
1425
+ break;
1426
+ case 1000:
1427
+ val = RK3528_GMAC1_CLK_RGMII_DIV1;
1428
+ break;
1429
+ default:
1430
+ goto err;
1431
+ }
1432
+
1433
+ regmap_write(bsp_priv->grf, RK3528_VPU_GRF_GMAC_CON5, val);
1434
+ return;
1435
+err:
1436
+ dev_err(dev, "unknown RGMII speed value for GMAC speed=%d", speed);
1437
+}
1438
+
1439
+static void rk3528_set_rmii_speed(struct rk_priv_data *bsp_priv, int speed)
1440
+{
1441
+ struct device *dev = &bsp_priv->pdev->dev;
1442
+ unsigned int val, offset, id = bsp_priv->bus_id;
1443
+
1444
+ switch (speed) {
1445
+ case 10:
1446
+ val = (id == 1) ? RK3528_GMAC1_CLK_RMII_DIV20 :
1447
+ RK3528_GMAC0_CLK_RMII_DIV20;
1448
+ break;
1449
+ case 100:
1450
+ val = (id == 1) ? RK3528_GMAC1_CLK_RMII_DIV2 :
1451
+ RK3528_GMAC0_CLK_RMII_DIV2;
1452
+ break;
1453
+ default:
1454
+ goto err;
1455
+ }
1456
+
1457
+ offset = (id == 1) ? RK3528_VPU_GRF_GMAC_CON5 : RK3528_VO_GRF_GMAC_CON;
1458
+ regmap_write(bsp_priv->grf, offset, val);
1459
+
1460
+ return;
1461
+err:
1462
+ dev_err(dev, "unknown RMII speed value for GMAC speed=%d", speed);
1463
+}
1464
+
1465
+static void rk3528_set_clock_selection(struct rk_priv_data *bsp_priv,
1466
+ bool input, bool enable)
1467
+{
1468
+ unsigned int value, id = bsp_priv->bus_id;
1469
+
1470
+ if (id == 1) {
1471
+ value = input ? RK3528_GMAC1_CLK_SELET_IO :
1472
+ RK3528_GMAC1_CLK_SELET_CRU;
1473
+ value |= enable ? RK3528_GMAC1_CLK_RMII_NOGATE :
1474
+ RK3528_GMAC1_CLK_RMII_GATE;
1475
+ regmap_write(bsp_priv->grf, RK3528_VPU_GRF_GMAC_CON5, value);
1476
+ } else {
1477
+ value = enable ? RK3528_GMAC0_CLK_RMII_NOGATE :
1478
+ RK3528_GMAC0_CLK_RMII_GATE;
1479
+ regmap_write(bsp_priv->grf, RK3528_VO_GRF_GMAC_CON, value);
1480
+ }
1481
+}
1482
+
1483
+static void rk3528_integrated_sphy_power(struct rk_priv_data *priv, bool up)
1484
+{
1485
+ struct device *dev = &priv->pdev->dev;
1486
+ unsigned int id = priv->bus_id;
1487
+
1488
+ /* Only GMAC0 support integrated phy */
1489
+ if (id > 0)
1490
+ return;
1491
+
1492
+ if (IS_ERR(priv->grf) || !priv->phy_reset) {
1493
+ dev_err(dev, "%s: Missing rockchip,grf or phy_reset property\n",
1494
+ __func__);
1495
+ return;
1496
+ }
1497
+
1498
+ if (up) {
1499
+ unsigned int bgs = RK3528_VO_GRF_MACPHY_BGS;
1500
+
1501
+ reset_control_assert(priv->phy_reset);
1502
+ udelay(20);
1503
+ regmap_write(priv->grf, RK3528_VO_GRF_MACPHY_CON0,
1504
+ RK3528_VO_GRF_MACPHY_POWERUP |
1505
+ RK3528_VO_GRF_MACPHY_INTERNAL_RMII_SEL |
1506
+ RK3528_VO_GRF_MACPHY_24M_CLK_SEL |
1507
+ RK3528_VO_GRF_MACPHY_PHY_ID);
1508
+
1509
+ if (priv->otp_data > 0)
1510
+ bgs = HIWORD_UPDATE(priv->otp_data, 0xf, 0);
1511
+
1512
+ regmap_write(priv->grf, RK3528_VO_GRF_MACPHY_CON1, bgs);
1513
+ usleep_range(10 * 1000, 12 * 1000);
1514
+ reset_control_deassert(priv->phy_reset);
1515
+ usleep_range(50 * 1000, 60 * 1000);
1516
+ } else {
1517
+ regmap_write(priv->grf, RK3528_VO_GRF_MACPHY_CON0,
1518
+ RK3528_VO_GRF_MACPHY_SHUTDOWN);
1519
+ }
1520
+}
1521
+
1522
+static const struct rk_gmac_ops rk3528_ops = {
1523
+ .set_to_rgmii = rk3528_set_to_rgmii,
1524
+ .set_to_rmii = rk3528_set_to_rmii,
1525
+ .set_rgmii_speed = rk3528_set_rgmii_speed,
1526
+ .set_rmii_speed = rk3528_set_rmii_speed,
1527
+ .set_clock_selection = rk3528_set_clock_selection,
1528
+ .integrated_phy_power = rk3528_integrated_sphy_power,
12701529 };
12711530
12721531 #define RK3568_GRF_GMAC0_CON0 0X0380
....@@ -1349,12 +1608,10 @@
13491608
13501609 regmap_write(bsp_priv->grf, offset_con1,
13511610 RK3568_GMAC_PHY_INTF_SEL_RGMII |
1352
- RK3568_GMAC_RXCLK_DLY_ENABLE |
1353
- RK3568_GMAC_TXCLK_DLY_ENABLE);
1611
+ DELAY_ENABLE(RK3568, tx_delay, rx_delay));
13541612
13551613 regmap_write(bsp_priv->grf, offset_con0,
1356
- RK3568_GMAC_CLK_RX_DL_CFG(rx_delay) |
1357
- RK3568_GMAC_CLK_TX_DL_CFG(tx_delay));
1614
+ DELAY_VALUE(RK3568, tx_delay, rx_delay));
13581615 }
13591616
13601617 static void rk3568_set_to_rmii(struct rk_priv_data *bsp_priv)
....@@ -1400,6 +1657,34 @@
14001657 __func__, rate, ret);
14011658 }
14021659
1660
+static void rk3568_set_gmac_sgmii_speed(struct rk_priv_data *bsp_priv, int speed)
1661
+{
1662
+ struct device *dev = &bsp_priv->pdev->dev;
1663
+ unsigned int ctrl;
1664
+
1665
+ /* Only gmac1 set the speed for port1 */
1666
+ if (!bsp_priv->bus_id)
1667
+ return;
1668
+
1669
+ switch (speed) {
1670
+ case 10:
1671
+ ctrl = BMCR_SPEED10;
1672
+ break;
1673
+ case 100:
1674
+ ctrl = BMCR_SPEED100;
1675
+ break;
1676
+ case 1000:
1677
+ ctrl = BMCR_SPEED1000;
1678
+ break;
1679
+ default:
1680
+ dev_err(dev, "unknown speed value for GMAC speed=%d", speed);
1681
+ return;
1682
+ }
1683
+
1684
+ xpcs_write(bsp_priv, SR_MII_OFFSET(bsp_priv->bus_id) + MII_BMCR,
1685
+ ctrl | BMCR_FULLDPLX);
1686
+}
1687
+
14031688 static const struct rk_gmac_ops rk3568_ops = {
14041689 .set_to_rgmii = rk3568_set_to_rgmii,
14051690 .set_to_rmii = rk3568_set_to_rmii,
....@@ -1407,6 +1692,7 @@
14071692 .set_to_qsgmii = rk3568_set_to_qsgmii,
14081693 .set_rgmii_speed = rk3568_set_gmac_speed,
14091694 .set_rmii_speed = rk3568_set_gmac_speed,
1695
+ .set_sgmii_speed = rk3568_set_gmac_sgmii_speed,
14101696 };
14111697
14121698 #define RV1108_GRF_GMAC_CON0 0X0900
....@@ -1472,21 +1758,18 @@
14721758 (GRF_CLR_BIT(4) | GRF_CLR_BIT(5) | GRF_BIT(6))
14731759 #define RV1126_GMAC_FLOW_CTRL GRF_BIT(7)
14741760 #define RV1126_GMAC_FLOW_CTRL_CLR GRF_CLR_BIT(7)
1475
-#define RV1126_GMAC_M0_RXCLK_DLY_ENABLE GRF_BIT(1)
1476
-#define RV1126_GMAC_M0_RXCLK_DLY_DISABLE GRF_CLR_BIT(1)
1477
-#define RV1126_GMAC_M0_TXCLK_DLY_ENABLE GRF_BIT(0)
1478
-#define RV1126_GMAC_M0_TXCLK_DLY_DISABLE GRF_CLR_BIT(0)
1479
-#define RV1126_GMAC_M1_RXCLK_DLY_ENABLE GRF_BIT(3)
1480
-#define RV1126_GMAC_M1_RXCLK_DLY_DISABLE GRF_CLR_BIT(3)
1481
-#define RV1126_GMAC_M1_TXCLK_DLY_ENABLE GRF_BIT(2)
1482
-#define RV1126_GMAC_M1_TXCLK_DLY_DISABLE GRF_CLR_BIT(2)
1761
+#define RV1126_M0_GMAC_RXCLK_DLY_ENABLE GRF_BIT(1)
1762
+#define RV1126_M0_GMAC_RXCLK_DLY_DISABLE GRF_CLR_BIT(1)
1763
+#define RV1126_M0_GMAC_TXCLK_DLY_ENABLE GRF_BIT(0)
1764
+#define RV1126_M0_GMAC_TXCLK_DLY_DISABLE GRF_CLR_BIT(0)
1765
+#define RV1126_M1_GMAC_RXCLK_DLY_ENABLE GRF_BIT(3)
1766
+#define RV1126_M1_GMAC_RXCLK_DLY_DISABLE GRF_CLR_BIT(3)
1767
+#define RV1126_M1_GMAC_TXCLK_DLY_ENABLE GRF_BIT(2)
1768
+#define RV1126_M1_GMAC_TXCLK_DLY_DISABLE GRF_CLR_BIT(2)
14831769
1484
-/* RV1126_GRF_GMAC_CON1 */
1485
-#define RV1126_GMAC_M0_CLK_RX_DL_CFG(val) HIWORD_UPDATE(val, 0x7F, 8)
1486
-#define RV1126_GMAC_M0_CLK_TX_DL_CFG(val) HIWORD_UPDATE(val, 0x7F, 0)
1487
-/* RV1126_GRF_GMAC_CON2 */
1488
-#define RV1126_GMAC_M1_CLK_RX_DL_CFG(val) HIWORD_UPDATE(val, 0x7F, 8)
1489
-#define RV1126_GMAC_M1_CLK_TX_DL_CFG(val) HIWORD_UPDATE(val, 0x7F, 0)
1770
+/* RV1126_GRF_GMAC_CON1 && RV1126_GRF_GMAC_CON2 */
1771
+#define RV1126_GMAC_CLK_RX_DL_CFG(val) HIWORD_UPDATE(val, 0x7F, 8)
1772
+#define RV1126_GMAC_CLK_TX_DL_CFG(val) HIWORD_UPDATE(val, 0x7F, 0)
14901773
14911774 static void rv1126_set_to_rgmii(struct rk_priv_data *bsp_priv,
14921775 int tx_delay, int rx_delay)
....@@ -1500,18 +1783,14 @@
15001783
15011784 regmap_write(bsp_priv->grf, RV1126_GRF_GMAC_CON0,
15021785 RV1126_GMAC_PHY_INTF_SEL_RGMII |
1503
- RV1126_GMAC_M0_RXCLK_DLY_ENABLE |
1504
- RV1126_GMAC_M0_TXCLK_DLY_ENABLE |
1505
- RV1126_GMAC_M1_RXCLK_DLY_ENABLE |
1506
- RV1126_GMAC_M1_TXCLK_DLY_ENABLE);
1786
+ DELAY_ENABLE(RV1126_M0, tx_delay, rx_delay) |
1787
+ DELAY_ENABLE(RV1126_M1, tx_delay, rx_delay));
15071788
15081789 regmap_write(bsp_priv->grf, RV1126_GRF_GMAC_CON1,
1509
- RV1126_GMAC_M0_CLK_RX_DL_CFG(rx_delay) |
1510
- RV1126_GMAC_M0_CLK_TX_DL_CFG(tx_delay));
1790
+ DELAY_VALUE(RV1126, tx_delay, rx_delay));
15111791
15121792 regmap_write(bsp_priv->grf, RV1126_GRF_GMAC_CON2,
1513
- RV1126_GMAC_M1_CLK_RX_DL_CFG(rx_delay) |
1514
- RV1126_GMAC_M1_CLK_TX_DL_CFG(tx_delay));
1793
+ DELAY_VALUE(RV1126, tx_delay, rx_delay));
15151794 }
15161795
15171796 static void rv1126_set_to_rmii(struct rk_priv_data *bsp_priv)
....@@ -1585,50 +1864,6 @@
15851864 .set_rmii_speed = rv1126_set_rmii_speed,
15861865 };
15871866
1588
-#define RK_GRF_MACPHY_CON0 0xb00
1589
-#define RK_GRF_MACPHY_CON1 0xb04
1590
-#define RK_GRF_MACPHY_CON2 0xb08
1591
-#define RK_GRF_MACPHY_CON3 0xb0c
1592
-
1593
-#define RK_MACPHY_ENABLE GRF_BIT(0)
1594
-#define RK_MACPHY_DISABLE GRF_CLR_BIT(0)
1595
-#define RK_MACPHY_CFG_CLK_50M GRF_BIT(14)
1596
-#define RK_GMAC2PHY_RMII_MODE (GRF_BIT(6) | GRF_CLR_BIT(7))
1597
-#define RK_GRF_CON2_MACPHY_ID HIWORD_UPDATE(0x1234, 0xffff, 0)
1598
-#define RK_GRF_CON3_MACPHY_ID HIWORD_UPDATE(0x35, 0x3f, 0)
1599
-
1600
-static void rk_gmac_integrated_phy_powerup(struct rk_priv_data *priv)
1601
-{
1602
- if (priv->ops->integrated_phy_powerup)
1603
- priv->ops->integrated_phy_powerup(priv);
1604
-
1605
- regmap_write(priv->grf, RK_GRF_MACPHY_CON0, RK_MACPHY_CFG_CLK_50M);
1606
- regmap_write(priv->grf, RK_GRF_MACPHY_CON0, RK_GMAC2PHY_RMII_MODE);
1607
-
1608
- regmap_write(priv->grf, RK_GRF_MACPHY_CON2, RK_GRF_CON2_MACPHY_ID);
1609
- regmap_write(priv->grf, RK_GRF_MACPHY_CON3, RK_GRF_CON3_MACPHY_ID);
1610
-
1611
- if (priv->phy_reset) {
1612
- /* PHY needs to be disabled before trying to reset it */
1613
- regmap_write(priv->grf, RK_GRF_MACPHY_CON0, RK_MACPHY_DISABLE);
1614
- if (priv->phy_reset)
1615
- reset_control_assert(priv->phy_reset);
1616
- usleep_range(10, 20);
1617
- if (priv->phy_reset)
1618
- reset_control_deassert(priv->phy_reset);
1619
- usleep_range(10, 20);
1620
- regmap_write(priv->grf, RK_GRF_MACPHY_CON0, RK_MACPHY_ENABLE);
1621
- msleep(30);
1622
- }
1623
-}
1624
-
1625
-static void rk_gmac_integrated_phy_powerdown(struct rk_priv_data *priv)
1626
-{
1627
- regmap_write(priv->grf, RK_GRF_MACPHY_CON0, RK_MACPHY_DISABLE);
1628
- if (priv->phy_reset)
1629
- reset_control_assert(priv->phy_reset);
1630
-}
1631
-
16321867 static int rk_gmac_clk_init(struct plat_stmmacenet_data *plat)
16331868 {
16341869 struct rk_priv_data *bsp_priv = plat->bsp_priv;
....@@ -1679,8 +1914,10 @@
16791914 bsp_priv->phy_iface == PHY_INTERFACE_MODE_QSGMII) {
16801915 bsp_priv->pclk_xpcs = devm_clk_get(dev, "pclk_xpcs");
16811916 if (IS_ERR(bsp_priv->pclk_xpcs))
1682
- dev_err(dev, "cannot get clock %s\n",
1683
- "pclk_xpcs");
1917
+ dev_err(dev, "cannot get clock %s\n", "pclk_xpcs");
1918
+ bsp_priv->clk_xpcs_eee = devm_clk_get(dev, "clk_xpcs_eee");
1919
+ if (IS_ERR(bsp_priv->clk_xpcs_eee))
1920
+ dev_err(dev, "cannot get clock %s\n", "clk_xpcs_eee");
16841921 }
16851922
16861923 bsp_priv->clk_mac_speed = devm_clk_get(dev, "clk_mac_speed");
....@@ -1748,15 +1985,26 @@
17481985 if (!IS_ERR(bsp_priv->pclk_xpcs))
17491986 clk_prepare_enable(bsp_priv->pclk_xpcs);
17501987
1988
+ if (!IS_ERR(bsp_priv->clk_xpcs_eee))
1989
+ clk_prepare_enable(bsp_priv->clk_xpcs_eee);
1990
+
1991
+ if (bsp_priv->ops && bsp_priv->ops->set_clock_selection)
1992
+ bsp_priv->ops->set_clock_selection(bsp_priv, bsp_priv->clock_input,
1993
+ true);
1994
+
17511995 /**
17521996 * if (!IS_ERR(bsp_priv->clk_mac))
17531997 * clk_prepare_enable(bsp_priv->clk_mac);
17541998 */
1755
- mdelay(5);
1999
+ usleep_range(100, 200);
17562000 bsp_priv->clk_enabled = true;
17572001 }
17582002 } else {
17592003 if (bsp_priv->clk_enabled) {
2004
+ if (bsp_priv->ops && bsp_priv->ops->set_clock_selection)
2005
+ bsp_priv->ops->set_clock_selection(bsp_priv, bsp_priv->clock_input,
2006
+ false);
2007
+
17602008 if (phy_iface == PHY_INTERFACE_MODE_RMII) {
17612009 clk_disable_unprepare(bsp_priv->mac_clk_rx);
17622010
....@@ -1776,6 +2024,8 @@
17762024 clk_disable_unprepare(bsp_priv->clk_mac_speed);
17772025
17782026 clk_disable_unprepare(bsp_priv->pclk_xpcs);
2027
+
2028
+ clk_disable_unprepare(bsp_priv->clk_xpcs_eee);
17792029
17802030 /**
17812031 * if (!IS_ERR(bsp_priv->clk_mac))
....@@ -1853,7 +2103,7 @@
18532103
18542104 ret = of_property_read_u32(dev->of_node, "tx_delay", &value);
18552105 if (ret) {
1856
- bsp_priv->tx_delay = 0x30;
2106
+ bsp_priv->tx_delay = -1;
18572107 dev_err(dev, "Can not read property: tx_delay.");
18582108 dev_err(dev, "set tx_delay to 0x%x\n",
18592109 bsp_priv->tx_delay);
....@@ -1864,7 +2114,7 @@
18642114
18652115 ret = of_property_read_u32(dev->of_node, "rx_delay", &value);
18662116 if (ret) {
1867
- bsp_priv->rx_delay = 0x10;
2117
+ bsp_priv->rx_delay = -1;
18682118 dev_err(dev, "Can not read property: rx_delay.");
18692119 dev_err(dev, "set rx_delay to 0x%x\n",
18702120 bsp_priv->rx_delay);
....@@ -1878,24 +2128,45 @@
18782128 bsp_priv->xpcs = syscon_regmap_lookup_by_phandle(dev->of_node,
18792129 "rockchip,xpcs");
18802130 if (!IS_ERR(bsp_priv->xpcs)) {
1881
- struct phy *comphy;
1882
-
1883
- comphy = devm_of_phy_get(&pdev->dev, dev->of_node, NULL);
1884
- if (IS_ERR(comphy))
2131
+ bsp_priv->comphy = devm_of_phy_get(&pdev->dev, dev->of_node, NULL);
2132
+ if (IS_ERR(bsp_priv->comphy)) {
2133
+ bsp_priv->comphy = NULL;
18852134 dev_err(dev, "devm_of_phy_get error\n");
1886
- ret = phy_init(comphy);
1887
- if (ret)
1888
- dev_err(dev, "phy_init error\n");
2135
+ }
18892136 }
18902137
18912138 if (plat->phy_node) {
18922139 bsp_priv->integrated_phy = of_property_read_bool(plat->phy_node,
18932140 "phy-is-integrated");
18942141 if (bsp_priv->integrated_phy) {
2142
+ unsigned char *efuse_buf;
2143
+ struct nvmem_cell *cell;
2144
+ size_t len;
2145
+
18952146 bsp_priv->phy_reset = of_reset_control_get(plat->phy_node, NULL);
18962147 if (IS_ERR(bsp_priv->phy_reset)) {
18972148 dev_err(&pdev->dev, "No PHY reset control found.\n");
18982149 bsp_priv->phy_reset = NULL;
2150
+ }
2151
+
2152
+ /* Read bgs from OTP if it exists */
2153
+ cell = nvmem_cell_get(dev, "bgs");
2154
+ if (IS_ERR(cell)) {
2155
+ if (PTR_ERR(cell) != -EPROBE_DEFER)
2156
+ dev_info(dev, "failed to get bgs cell: %ld, use default\n",
2157
+ PTR_ERR(cell));
2158
+ else
2159
+ return ERR_CAST(cell);
2160
+ } else {
2161
+ efuse_buf = nvmem_cell_read(cell, &len);
2162
+ nvmem_cell_put(cell);
2163
+ if (!IS_ERR(efuse_buf)) {
2164
+ if (len == 1)
2165
+ bsp_priv->otp_data = efuse_buf[0];
2166
+ kfree(efuse_buf);
2167
+ } else {
2168
+ dev_err(dev, "failed to get efuse buf, use default\n");
2169
+ }
18992170 }
19002171 }
19012172 }
....@@ -1927,17 +2198,17 @@
19272198 case PHY_INTERFACE_MODE_RGMII_ID:
19282199 dev_info(dev, "init for RGMII_ID\n");
19292200 if (bsp_priv->ops && bsp_priv->ops->set_to_rgmii)
1930
- bsp_priv->ops->set_to_rgmii(bsp_priv, 0, 0);
2201
+ bsp_priv->ops->set_to_rgmii(bsp_priv, -1, -1);
19312202 break;
19322203 case PHY_INTERFACE_MODE_RGMII_RXID:
19332204 dev_info(dev, "init for RGMII_RXID\n");
19342205 if (bsp_priv->ops && bsp_priv->ops->set_to_rgmii)
1935
- bsp_priv->ops->set_to_rgmii(bsp_priv, bsp_priv->tx_delay, 0);
2206
+ bsp_priv->ops->set_to_rgmii(bsp_priv, bsp_priv->tx_delay, -1);
19362207 break;
19372208 case PHY_INTERFACE_MODE_RGMII_TXID:
19382209 dev_info(dev, "init for RGMII_TXID\n");
19392210 if (bsp_priv->ops && bsp_priv->ops->set_to_rgmii)
1940
- bsp_priv->ops->set_to_rgmii(bsp_priv, 0, bsp_priv->rx_delay);
2211
+ bsp_priv->ops->set_to_rgmii(bsp_priv, -1, bsp_priv->rx_delay);
19412212 break;
19422213 case PHY_INTERFACE_MODE_RMII:
19432214 dev_info(dev, "init for RMII\n");
....@@ -1946,11 +2217,23 @@
19462217 break;
19472218 case PHY_INTERFACE_MODE_SGMII:
19482219 dev_info(dev, "init for SGMII\n");
2220
+ ret = phy_init(bsp_priv->comphy);
2221
+ if (ret) {
2222
+ dev_err(dev, "phy_init error: %d\n", ret);
2223
+ return ret;
2224
+ }
2225
+
19492226 if (bsp_priv->ops && bsp_priv->ops->set_to_sgmii)
19502227 bsp_priv->ops->set_to_sgmii(bsp_priv);
19512228 break;
19522229 case PHY_INTERFACE_MODE_QSGMII:
19532230 dev_info(dev, "init for QSGMII\n");
2231
+ ret = phy_init(bsp_priv->comphy);
2232
+ if (ret) {
2233
+ dev_err(dev, "phy_init error: %d\n", ret);
2234
+ return ret;
2235
+ }
2236
+
19542237 if (bsp_priv->ops && bsp_priv->ops->set_to_qsgmii)
19552238 bsp_priv->ops->set_to_qsgmii(bsp_priv);
19562239 break;
....@@ -1967,9 +2250,6 @@
19672250 pm_runtime_enable(dev);
19682251 pm_runtime_get_sync(dev);
19692252
1970
- if (bsp_priv->integrated_phy)
1971
- rk_gmac_integrated_phy_powerup(bsp_priv);
1972
-
19732253 return 0;
19742254 }
19752255
....@@ -1977,8 +2257,9 @@
19772257 {
19782258 struct device *dev = &gmac->pdev->dev;
19792259
1980
- if (gmac->integrated_phy)
1981
- rk_gmac_integrated_phy_powerdown(gmac);
2260
+ if (gmac->phy_iface == PHY_INTERFACE_MODE_SGMII ||
2261
+ gmac->phy_iface == PHY_INTERFACE_MODE_QSGMII)
2262
+ phy_exit(gmac->comphy);
19822263
19832264 pm_runtime_put_sync(dev);
19842265 pm_runtime_disable(dev);
....@@ -2005,11 +2286,26 @@
20052286 bsp_priv->ops->set_rmii_speed(bsp_priv, speed);
20062287 break;
20072288 case PHY_INTERFACE_MODE_SGMII:
2289
+ if (bsp_priv->ops && bsp_priv->ops->set_sgmii_speed)
2290
+ bsp_priv->ops->set_sgmii_speed(bsp_priv, speed);
20082291 case PHY_INTERFACE_MODE_QSGMII:
20092292 break;
20102293 default:
20112294 dev_err(dev, "unsupported interface %d", bsp_priv->phy_iface);
20122295 }
2296
+}
2297
+
2298
+static int rk_integrated_phy_power(void *priv, bool up)
2299
+{
2300
+ struct rk_priv_data *bsp_priv = priv;
2301
+
2302
+ if (!bsp_priv->integrated_phy || !bsp_priv->ops ||
2303
+ !bsp_priv->ops->integrated_phy_power)
2304
+ return 0;
2305
+
2306
+ bsp_priv->ops->integrated_phy_power(bsp_priv, up);
2307
+
2308
+ return 0;
20132309 }
20142310
20152311 void dwmac_rk_set_rgmii_delayline(struct stmmac_priv *priv,
....@@ -2050,24 +2346,17 @@
20502346 {
20512347 }
20522348
2053
-static unsigned char macaddr[6];
2054
-extern ssize_t at24_mac_read(unsigned char* addr);
20552349 void rk_get_eth_addr(void *priv, unsigned char *addr)
20562350 {
20572351 struct rk_priv_data *bsp_priv = priv;
20582352 struct device *dev = &bsp_priv->pdev->dev;
2059
- int i;
2060
- //unsigned char ethaddr[ETH_ALEN * MAX_ETH] = {0};
2061
- //int ret, id = bsp_priv->bus_id;
2353
+ unsigned char ethaddr[ETH_ALEN * MAX_ETH] = {0};
2354
+ int ret, id = bsp_priv->bus_id;
20622355
2063
- //ben
2064
- printk("nk-debug:enter rk_get_eth_addr.. \n");
2065
-
2066
- #if 0
20672356 rk_devinfo_get_eth_mac(addr);
20682357 if (is_valid_ether_addr(addr))
20692358 goto out;
2070
-
2359
+
20712360 if (id < 0 || id >= MAX_ETH) {
20722361 dev_err(dev, "%s: Invalid ethernet bus id %d\n", __func__, id);
20732362 return;
....@@ -2094,35 +2383,7 @@
20942383 } else {
20952384 memcpy(addr, &ethaddr[id * ETH_ALEN], ETH_ALEN);
20962385 }
2097
- #endif
2098
-
2099
- #if 0
2100
- macaddr[0] = 0xee;
2101
- macaddr[1] = 0x31;
2102
- macaddr[2] = 0x32;
2103
- macaddr[3] = 0x33;
2104
- macaddr[4] = 0x34;
2105
- macaddr[5] = 0x35;
2106
-
2107
- memcpy(addr, macaddr, 6);
2108
- #endif
2109
-
2110
- #if 1
2111
- if (at24_mac_read(macaddr) > 0) {
2112
- printk("ben %s: at24_mac_read Success!! \n", __func__);
2113
- memcpy(addr, macaddr, 6);
21142386
2115
- printk("Read the Ethernet MAC address from :");
2116
- for (i = 0; i < 5; i++)
2117
- printk("%2.2x:", addr[i]);
2118
-
2119
- printk("%2.2x\n", addr[i]);
2120
- } else {
2121
- printk("ben %s: at24_mac_read Failed!! \n", __func__);
2122
- goto out;
2123
- }
2124
- #endif
2125
-
21262387 out:
21272388 dev_err(dev, "%s: mac address: %pM\n", __func__, addr);
21282389 }
....@@ -2134,7 +2395,6 @@
21342395 const struct rk_gmac_ops *data;
21352396 int ret;
21362397
2137
- printk("nk-debug:enter rk_gmac_probe 1.. \n");
21382398 data = of_device_get_match_data(&pdev->dev);
21392399 if (!data) {
21402400 dev_err(&pdev->dev, "no of match data provided\n");
....@@ -2154,6 +2414,7 @@
21542414
21552415 plat_dat->fix_mac_speed = rk_fix_speed;
21562416 plat_dat->get_eth_addr = rk_get_eth_addr;
2417
+ plat_dat->integrated_phy_power = rk_integrated_phy_power;
21572418
21582419 plat_dat->bsp_priv = rk_gmac_setup(pdev, plat_dat, data);
21592420 if (IS_ERR(plat_dat->bsp_priv)) {
....@@ -2161,7 +2422,6 @@
21612422 goto err_remove_config_dt;
21622423 }
21632424
2164
- printk("nk-debug:enter rk_gmac_probe 2.. \n");
21652425 ret = rk_gmac_clk_init(plat_dat);
21662426 if (ret)
21672427 goto err_remove_config_dt;
....@@ -2231,19 +2491,48 @@
22312491 static SIMPLE_DEV_PM_OPS(rk_gmac_pm_ops, rk_gmac_suspend, rk_gmac_resume);
22322492
22332493 static const struct of_device_id rk_gmac_dwmac_match[] = {
2494
+#ifdef CONFIG_CPU_PX30
22342495 { .compatible = "rockchip,px30-gmac", .data = &px30_ops },
2496
+#endif
2497
+#ifdef CONFIG_CPU_RK1808
22352498 { .compatible = "rockchip,rk1808-gmac", .data = &rk1808_ops },
2499
+#endif
2500
+#ifdef CONFIG_CPU_RK312X
22362501 { .compatible = "rockchip,rk3128-gmac", .data = &rk3128_ops },
2502
+#endif
2503
+#ifdef CONFIG_CPU_RK322X
22372504 { .compatible = "rockchip,rk3228-gmac", .data = &rk3228_ops },
2505
+#endif
2506
+#ifdef CONFIG_CPU_RK3288
22382507 { .compatible = "rockchip,rk3288-gmac", .data = &rk3288_ops },
2508
+#endif
2509
+#ifdef CONFIG_CPU_RK3308
22392510 { .compatible = "rockchip,rk3308-mac", .data = &rk3308_ops },
2511
+#endif
2512
+#ifdef CONFIG_CPU_RK3328
22402513 { .compatible = "rockchip,rk3328-gmac", .data = &rk3328_ops },
2514
+#endif
2515
+#ifdef CONFIG_CPU_RK3366
22412516 { .compatible = "rockchip,rk3366-gmac", .data = &rk3366_ops },
2517
+#endif
2518
+#ifdef CONFIG_CPU_RK3368
22422519 { .compatible = "rockchip,rk3368-gmac", .data = &rk3368_ops },
2520
+#endif
2521
+#ifdef CONFIG_CPU_RK3399
22432522 { .compatible = "rockchip,rk3399-gmac", .data = &rk3399_ops },
2523
+#endif
2524
+#ifdef CONFIG_CPU_RK3528
2525
+ { .compatible = "rockchip,rk3528-gmac", .data = &rk3528_ops },
2526
+#endif
2527
+#ifdef CONFIG_CPU_RK3568
22442528 { .compatible = "rockchip,rk3568-gmac", .data = &rk3568_ops },
2529
+#endif
2530
+#ifdef CONFIG_CPU_RV110X
22452531 { .compatible = "rockchip,rv1108-gmac", .data = &rv1108_ops },
2532
+#endif
2533
+#ifdef CONFIG_CPU_RV1126
22462534 { .compatible = "rockchip,rv1126-gmac", .data = &rv1126_ops },
2535
+#endif
22472536 { }
22482537 };
22492538 MODULE_DEVICE_TABLE(of, rk_gmac_dwmac_match);
....@@ -2257,8 +2546,7 @@
22572546 .of_match_table = rk_gmac_dwmac_match,
22582547 },
22592548 };
2260
-//module_platform_driver(rk_gmac_dwmac_driver);
2261
- module_platform_driver1(rk_gmac_dwmac_driver);
2549
+module_platform_driver(rk_gmac_dwmac_driver);
22622550
22632551 MODULE_AUTHOR("Chen-Zhi (Roger Chen) <roger.chen@rock-chips.com>");
22642552 MODULE_DESCRIPTION("Rockchip RK3288 DWMAC specific glue layer");