README.MDkernel/drivers/misc/eeprom/at24.c
.. .. @@ -6,6 +6,7 @@ 6 6 * Copyright (C) 2008 Wolfram Sang, Pengutronix 7 7 */ 8 8 9 +#define DEBUG9 10 #include <linux/kernel.h> 10 11 #include <linux/init.h> 11 12 #include <linux/module.h> .. .. @@ -106,6 +107,8 @@ 106 107 module_param_named(write_timeout, at24_write_timeout, uint, 0); 107 108 MODULE_PARM_DESC(at24_write_timeout, "Time (in ms) to try writes (default 25)"); 108 109 110 +//Ben111 +struct at24_data *at24_private=NULL;109 112 struct at24_chip_data { 110 113 /* 111 114 * these fields mirror their equivalents in .. .. @@ -421,6 +424,146 @@ 421 424 return 0; 422 425 } 423 426 427 +//add ben428 +static ssize_t at24_read_private(struct at24_data *at24,429 + char *buf, loff_t off, size_t count)430 +{431 + ssize_t retval = 0;432 +433 + if (unlikely(!count))434 + return count;435 +436 + if (off + count > at24->byte_len)437 + return -EINVAL;438 +439 + /*440 + * Read data from chip, protecting against concurrent updates441 + * from this host, but not from other I2C masters.442 + */443 + mutex_lock(&at24->lock);444 +445 + while (count) {446 + ssize_t status;447 +448 + //status = at24_eeprom_read_i2c(at24, buf, off, count);449 + status = at24_regmap_read(at24, buf, off, count);450 + if (status <= 0) {451 + if (retval == 0)452 + retval = status;453 + break;454 + }455 + buf += status;456 + off += status;457 + count -= status;458 + retval += status;459 + }460 +461 + mutex_unlock(&at24->lock);462 +463 + return retval;464 +}465 +466 +#if 0467 +static unsigned char AscToHex(unsigned char aChar)468 +{469 + if((aChar>=0x30)&&(aChar<=0x39))470 + aChar -= 0x30;471 + else if((aChar>=0x41)&&(aChar<=0x46))472 + aChar -= 0x37;473 + else if((aChar>=0x61)&&(aChar<=0x66))474 + aChar -= 0x57;475 + else aChar = 0xff;476 +477 + return aChar;478 +}479 +#endif480 +481 +#if 0482 +ssize_t at24_mac_read(unsigned char* addr)483 +{484 + char buf[20];485 + char buf_tmp[12];486 + int i;487 + ssize_t ret;488 + if (at24_private == NULL)489 + {490 + printk("ben %s: at24_private==null error\n", __func__);491 + return 0;492 + }493 + memset(buf, 0x00, 20);494 + memset(buf_tmp, 0x00, 12);495 + ret = at24_read(at24_private, 0, buf, 12);496 + if (ret > 0)497 + {498 + for(i=0; i<12; i++)499 + {500 + buf_tmp[i] = AscToHex(buf[i]);501 + }502 + addr[0] = (buf_tmp[0] << 4) | buf_tmp[1];503 + addr[1] = (buf_tmp[2] << 4) | buf_tmp[3];504 + addr[2] = (buf_tmp[4] << 4) | buf_tmp[5];505 + addr[3] = (buf_tmp[6] << 4) | buf_tmp[7];506 + addr[4] = (buf_tmp[8] << 4) | buf_tmp[9];507 + addr[5] = (buf_tmp[10] << 4) | buf_tmp[11];508 + }509 + return ret;510 +}511 +#endif512 +513 +ssize_t at24_mac_read(unsigned char* addr)514 +{515 + char buf[20];516 + char buf_tmp[12];517 + ssize_t ret;518 + if (at24_private == NULL)519 + {520 + printk("ben: at24_mac_read at24_private==null error");521 + return 0;522 + }523 + memset(buf, 0x00, 20);524 + memset(buf_tmp, 0x00, 12);525 + ret = at24_read_private(at24_private, buf, 0, 6);526 + if (ret > 0)527 + {528 + addr[0] = buf[0];529 + addr[1] = buf[1];530 + addr[2] = buf[2];531 + addr[3] = buf[3];532 + addr[4] = buf[4];533 + addr[5] = buf[5];534 + }535 + printk("at24_mac_read ...............\n");536 + return ret;537 +}538 +EXPORT_SYMBOL(at24_mac_read);539 +540 +ssize_t at24_mac1_read(unsigned char* mac)541 +{542 + char buf[20];543 + char buf_tmp[12];544 + ssize_t ret;545 + if (at24_private == NULL)546 + {547 + printk("zcl: at24_mac_read at24_private==null error");548 + return 0;549 + }550 + memset(buf, 0x00, 20);551 + memset(buf_tmp, 0x00, 12);552 + ret = at24_read_private(at24_private, buf, 0x10, 6);553 + if (ret > 0)554 + {555 + *mac = buf[0];556 + *(mac + 1) = buf[1];557 + *(mac + 2) = buf[2];558 + *(mac + 3) = buf[3];559 + *(mac + 4) = buf[4];560 + *(mac + 5) = buf[5];561 + }562 + printk("at24_mac1_read ...............\n");563 + return ret;564 +}565 +EXPORT_SYMBOL(at24_mac1_read);566 +424 567 static int at24_write(void *priv, unsigned int off, void *val, size_t count) 425 568 { 426 569 struct at24_data *at24; .. .. @@ -630,6 +773,7 @@ 630 773 u8 test_byte; 631 774 int err; 632 775 776 + printk("ben %s ...\n", __func__);633 777 i2c_fn_i2c = i2c_check_functionality(client->adapter, I2C_FUNC_I2C); 634 778 i2c_fn_block = i2c_check_functionality(client->adapter, 635 779 I2C_FUNC_SMBUS_WRITE_I2C_BLOCK); .. .. @@ -674,6 +818,7 @@ 674 818 if (!at24) 675 819 return -ENOMEM; 676 820 821 + at24_private = at24;677 822 mutex_init(&at24->lock); 678 823 at24->byte_len = pdata.byte_len; 679 824 at24->page_size = pdata.page_size; .. .. @@ -792,7 +937,8 @@ 792 937 at24_io_limit = rounddown_pow_of_two(at24_io_limit); 793 938 return i2c_add_driver(&at24_driver); 794 939 } 795 -module_init(at24_init);940 +//module_init(at24_init);941 +postcore_initcall_sync(at24_init);796 942 797 943 static void __exit at24_exit(void) 798 944 { kernel/drivers/net/ethernet/stmicro/stmmac/Kconfig
.. .. @@ -12,25 +12,6 @@ 12 12 13 13 if STMMAC_ETH 14 14 15 -config STMMAC_ETHTOOL16 - bool "Ethtool feature for STMMAC"17 - default STMMAC_ETH18 - help19 - This selects the ethtool function, default is Y.20 -21 -config STMMAC_FULL22 - bool "Support full driver for STMMAC"23 - default STMMAC_ETH24 - help25 - This selects the full function, default is Y, full-featured version26 - includes 4.10 and other versions, if it is N, only 4.10 core working.27 -28 -config STMMAC_PTP29 - bool "PTP feature for STMMAC"30 - default STMMAC_ETH31 - help32 - This selects the ptp timestamp function, default is Y.33 -34 15 config STMMAC_PLATFORM 35 16 tristate "STMMAC Platform bus support" 36 17 depends on STMMAC_ETH .. .. @@ -126,16 +107,6 @@ 126 107 127 108 This selects the Rockchip RK3288 SoC glue layer support for 128 109 the stmmac device driver. 129 -130 -config DWMAC_ROCKCHIP_TOOL131 - bool "Rockchip dwmac tool support"132 - depends on DWMAC_ROCKCHIP133 - default DWMAC_ROCKCHIP134 - help135 - Support for Ethernet functions on Rockchip SoCs.136 -137 - This selects the features for Rockchip's Ethernet, include PHY loopback,138 - MAC loopback, and delayline scanning of RGMII mode.139 110 140 111 config DWMAC_SOCFPGA 141 112 tristate "SOCFPGA dwmac support" kernel/drivers/net/ethernet/stmicro/stmmac/Makefile
.. .. @@ -1,19 +1,12 @@ 1 1 # SPDX-License-Identifier: GPL-2.0 2 2 obj-$(CONFIG_STMMAC_ETH) += stmmac.o 3 -4 -stmmac-objs:= stmmac_main.o stmmac_mdio.o dwmac_lib.o \5 - mmc_core.o dwmac4_descs.o dwmac4_dma.o \6 - dwmac4_lib.o dwmac4_core.o hwif.o \3 +stmmac-objs:= stmmac_main.o stmmac_ethtool.o stmmac_mdio.o ring_mode.o \4 + chain_mode.o dwmac_lib.o dwmac1000_core.o dwmac1000_dma.o \5 + dwmac100_core.o dwmac100_dma.o enh_desc.o norm_desc.o \6 + mmc_core.o stmmac_hwtstamp.o stmmac_ptp.o dwmac4_descs.o \7 + dwmac4_dma.o dwmac4_lib.o dwmac4_core.o dwmac5.o hwif.o \8 + stmmac_tc.o dwxgmac2_core.o dwxgmac2_dma.o dwxgmac2_descs.o \7 9 $(stmmac-y) 8 -9 -stmmac-$(CONFIG_STMMAC_FULL) += ring_mode.o chain_mode.o dwmac1000_core.o \10 - dwmac1000_dma.o dwmac100_core.o dwmac100_dma.o \11 - enh_desc.o norm_desc.o dwmac5.o stmmac_tc.o \12 - dwxgmac2_core.o dwxgmac2_dma.o dwxgmac2_descs.o13 -14 -stmmac-$(CONFIG_STMMAC_ETHTOOL) += stmmac_ethtool.o15 -16 -stmmac-$(CONFIG_STMMAC_PTP) += stmmac_hwtstamp.o stmmac_ptp.o17 10 18 11 # Ordering matters. Generic driver must be last. 19 12 obj-$(CONFIG_STMMAC_PLATFORM) += stmmac-platform.o .. .. @@ -23,8 +16,7 @@ 23 16 obj-$(CONFIG_DWMAC_MESON) += dwmac-meson.o dwmac-meson8b.o 24 17 obj-$(CONFIG_DWMAC_OXNAS) += dwmac-oxnas.o 25 18 obj-$(CONFIG_DWMAC_ROCKCHIP) += dwmac-rockchip.o 26 -dwmac-rockchip-objs := dwmac-rk.o27 -dwmac-rockchip-$(CONFIG_DWMAC_ROCKCHIP_TOOL) += dwmac-rk-tool.o19 +dwmac-rockchip-objs := dwmac-rk.o dwmac-rk-tool.o28 20 obj-$(CONFIG_DWMAC_SOCFPGA) += dwmac-altr-socfpga.o 29 21 obj-$(CONFIG_DWMAC_STI) += dwmac-sti.o 30 22 obj-$(CONFIG_DWMAC_STM32) += dwmac-stm32.o kernel/drivers/net/ethernet/stmicro/stmmac/common.h
.. .. @@ -261,7 +261,7 @@ 261 261 #define STMMAC_COAL_TX_TIMER 1000 262 262 #define STMMAC_MAX_COAL_TX_TICK 100000 263 263 #define STMMAC_TX_MAX_FRAMES 256 264 -#define STMMAC_TX_FRAMES 25264 +#define STMMAC_TX_FRAMES 1265 265 266 266 /* Packets types */ 267 267 enum packets_types { kernel/drivers/net/ethernet/stmicro/stmmac/dwmac-generic.c
.. .. @@ -71,7 +71,6 @@ 71 71 72 72 static const struct of_device_id dwmac_generic_match[] = { 73 73 { .compatible = "st,spear600-gmac"}, 74 - { .compatible = "snps,dwmac-3.40a"},75 74 { .compatible = "snps,dwmac-3.50a"}, 76 75 { .compatible = "snps,dwmac-3.610"}, 77 76 { .compatible = "snps,dwmac-3.70a"}, kernel/drivers/net/ethernet/stmicro/stmmac/dwmac-ipq806x.c
.. .. @@ -288,7 +288,10 @@ 288 288 val &= ~NSS_COMMON_GMAC_CTL_PHY_IFACE_SEL; 289 289 break; 290 290 default: 291 - goto err_unsupported_phy;291 + dev_err(&pdev->dev, "Unsupported PHY mode: \"%s\"\n",292 + phy_modes(gmac->phy_mode));293 + err = -EINVAL;294 + goto err_remove_config_dt;292 295 } 293 296 regmap_write(gmac->nss_common, NSS_COMMON_GMAC_CTL(gmac->id), val); 294 297 .. .. @@ -305,7 +308,10 @@ 305 308 NSS_COMMON_CLK_SRC_CTRL_OFFSET(gmac->id); 306 309 break; 307 310 default: 308 - goto err_unsupported_phy;311 + dev_err(&pdev->dev, "Unsupported PHY mode: \"%s\"\n",312 + phy_modes(gmac->phy_mode));313 + err = -EINVAL;314 + goto err_remove_config_dt;309 315 } 310 316 regmap_write(gmac->nss_common, NSS_COMMON_CLK_SRC_CTRL, val); 311 317 .. .. @@ -322,7 +328,8 @@ 322 328 NSS_COMMON_CLK_GATE_GMII_TX_EN(gmac->id); 323 329 break; 324 330 default: 325 - goto err_unsupported_phy;331 + /* We don't get here; the switch above will have errored out */332 + unreachable();326 333 } 327 334 regmap_write(gmac->nss_common, NSS_COMMON_CLK_GATE, val); 328 335 .. .. @@ -344,19 +351,12 @@ 344 351 plat_dat->bsp_priv = gmac; 345 352 plat_dat->fix_mac_speed = ipq806x_gmac_fix_mac_speed; 346 353 plat_dat->multicast_filter_bins = 0; 347 - plat_dat->tx_fifo_size = 8192;348 - plat_dat->rx_fifo_size = 8192;349 354 350 355 err = stmmac_dvr_probe(&pdev->dev, plat_dat, &stmmac_res); 351 356 if (err) 352 357 goto err_remove_config_dt; 353 358 354 359 return 0; 355 -356 -err_unsupported_phy:357 - dev_err(&pdev->dev, "Unsupported PHY mode: \"%s\"\n",358 - phy_modes(gmac->phy_mode));359 - err = -EINVAL;360 360 361 361 err_remove_config_dt: 362 362 stmmac_remove_config_dt(pdev, plat_dat); kernel/drivers/net/ethernet/stmicro/stmmac/dwmac-rk-tool.c
.. .. @@ -545,15 +545,15 @@ 545 545 static void dwmac_rk_rx_clean(struct stmmac_priv *priv, 546 546 struct dwmac_rk_lb_priv *lb_priv) 547 547 { 548 - if (likely(lb_priv->rx_skbuff_dma)) {548 + struct sk_buff *skb;549 +550 + skb = lb_priv->rx_skbuff;551 +552 + if (likely(lb_priv->rx_skbuff)) {549 553 dma_unmap_single(priv->device, 550 554 lb_priv->rx_skbuff_dma, 551 555 lb_priv->dma_buf_sz, DMA_FROM_DEVICE); 552 - lb_priv->rx_skbuff_dma = 0;553 - }554 -555 - if (likely(lb_priv->rx_skbuff)) {556 - dev_consume_skb_any(lb_priv->rx_skbuff);556 + dev_kfree_skb(skb);557 557 lb_priv->rx_skbuff = NULL; 558 558 } 559 559 } .. .. @@ -582,12 +582,7 @@ 582 582 } 583 583 584 584 frame_len -= ETH_FCS_LEN; 585 - prefetch(skb->data - NET_IP_ALIGN);586 585 skb_put(skb, frame_len); 587 - dma_unmap_single(priv->device,588 - lb_priv->rx_skbuff_dma,589 - lb_priv->dma_buf_sz,590 - DMA_FROM_DEVICE);591 586 592 587 return dwmac_rk_loopback_validate(priv, lb_priv, skb); 593 588 } .. .. @@ -621,9 +616,10 @@ 621 616 static void dwmac_rk_tx_clean(struct stmmac_priv *priv, 622 617 struct dwmac_rk_lb_priv *lb_priv) 623 618 { 624 - struct sk_buff *skb = lb_priv->tx_skbuff;619 + struct sk_buff *skb;625 620 struct dma_desc *p; 626 621 622 + skb = lb_priv->tx_skbuff;627 623 p = lb_priv->dma_tx; 628 624 629 625 if (likely(lb_priv->tx_skbuff_dma)) { .. .. @@ -635,7 +631,7 @@ 635 631 } 636 632 637 633 if (likely(skb)) { 638 - dev_consume_skb_any(skb);634 + dev_kfree_skb(skb);639 635 lb_priv->tx_skbuff = NULL; 640 636 } 641 637 .. .. @@ -659,10 +655,9 @@ 659 655 lb_priv->tx_skbuff = skb; 660 656 661 657 des = dma_map_single(priv->device, skb->data, 662 - nopaged_len, DMA_TO_DEVICE);658 + nopaged_len, DMA_TO_DEVICE);663 659 if (dma_mapping_error(priv->device, des)) 664 660 goto dma_map_err; 665 - lb_priv->tx_skbuff_dma = des;666 661 667 662 stmmac_set_desc_addr(priv, desc, des); 668 663 lb_priv->tx_skbuff_dma_len = nopaged_len; kernel/drivers/net/ethernet/stmicro/stmmac/dwmac-rk-tool.h
.. .. @@ -13,20 +13,8 @@ 13 13 void dwmac_rk_get_rgmii_delayline(struct stmmac_priv *priv, int *tx_delay, int *rx_delay); 14 14 int dwmac_rk_get_phy_interface(struct stmmac_priv *priv); 15 15 16 -#ifdef CONFIG_DWMAC_ROCKCHIP_TOOL17 16 int dwmac_rk_create_loopback_sysfs(struct device *dev); 18 17 int dwmac_rk_remove_loopback_sysfs(struct device *device); 19 -#else20 -static inline int dwmac_rk_create_loopback_sysfs(struct device *dev)21 -{22 - return 0;23 -}24 -25 -static inline int dwmac_rk_remove_loopback_sysfs(struct device *device)26 -{27 - return 0;28 -}29 -#endif30 18 31 19 #ifdef CONFIG_DWMAC_RK_AUTO_DELAYLINE 32 20 int dwmac_rk_get_rgmii_delayline_from_vendor(struct stmmac_priv *priv); .. .. @@ -34,3 +22,4 @@ 34 22 #endif 35 23 36 24 #endif /* __DWMAC_RK_TOOL_H__ */ 25 +kernel/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
.. .. @@ -47,10 +47,7 @@ 47 47 void (*set_to_qsgmii)(struct rk_priv_data *bsp_priv); 48 48 void (*set_rgmii_speed)(struct rk_priv_data *bsp_priv, int speed); 49 49 void (*set_rmii_speed)(struct rk_priv_data *bsp_priv, int speed); 50 - void (*set_sgmii_speed)(struct rk_priv_data *bsp_priv, int speed);51 - void (*set_clock_selection)(struct rk_priv_data *bsp_priv, bool input,52 - bool enable);53 - void (*integrated_phy_power)(struct rk_priv_data *bsp_priv, bool up);50 + void (*integrated_phy_powerup)(struct rk_priv_data *bsp_priv);54 51 }; 55 52 56 53 struct rk_priv_data { .. .. @@ -64,7 +61,6 @@ 64 61 bool clk_enabled; 65 62 bool clock_input; 66 63 bool integrated_phy; 67 - struct phy *comphy;68 64 69 65 struct clk *clk_mac; 70 66 struct clk *gmac_clkin; .. .. @@ -169,10 +165,10 @@ 169 165 int ret, i, id = bsp_priv->bus_id; 170 166 u32 val; 171 167 172 - if (mode == PHY_INTERFACE_MODE_QSGMII && !id)168 + if (mode == PHY_INTERFACE_MODE_QSGMII && id > 0)173 169 return 0; 174 170 175 - ret = xpcs_soft_reset(bsp_priv, 0);171 + ret = xpcs_soft_reset(bsp_priv, id);176 172 if (ret) { 177 173 dev_err(&bsp_priv->pdev->dev, "xpcs_soft_reset fail %d\n", ret); 178 174 return ret; .. .. @@ -199,10 +195,10 @@ 199 195 SR_MII_CTRL_AN_ENABLE); 200 196 } 201 197 } else { 202 - val = xpcs_read(bsp_priv, SR_MII_OFFSET(0) + VR_MII_DIG_CTRL1);203 - xpcs_write(bsp_priv, SR_MII_OFFSET(0) + VR_MII_DIG_CTRL1,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,204 200 val | MII_MAC_AUTO_SW); 205 - xpcs_write(bsp_priv, SR_MII_OFFSET(0) + MII_BMCR,201 + xpcs_write(bsp_priv, SR_MII_OFFSET(id) + MII_BMCR,206 202 SR_MII_CTRL_AN_ENABLE); 207 203 } 208 204 .. .. @@ -216,55 +212,8 @@ 216 212 #define GRF_CLR_BIT(nr) (BIT(nr+16)) 217 213 218 214 #define DELAY_ENABLE(soc, tx, rx) \ 219 - ((((tx) >= 0) ? soc##_GMAC_TXCLK_DLY_ENABLE : soc##_GMAC_TXCLK_DLY_DISABLE) | \220 - (((rx) >= 0) ? soc##_GMAC_RXCLK_DLY_ENABLE : soc##_GMAC_RXCLK_DLY_DISABLE))221 -222 -#define DELAY_VALUE(soc, tx, rx) \223 - ((((tx) >= 0) ? soc##_GMAC_CLK_TX_DL_CFG(tx) : 0) | \224 - (((rx) >= 0) ? soc##_GMAC_CLK_RX_DL_CFG(rx) : 0))225 -226 -/* Integrated EPHY */227 -228 -#define RK_GRF_MACPHY_CON0 0xb00229 -#define RK_GRF_MACPHY_CON1 0xb04230 -#define RK_GRF_MACPHY_CON2 0xb08231 -#define RK_GRF_MACPHY_CON3 0xb0c232 -233 -#define RK_MACPHY_ENABLE GRF_BIT(0)234 -#define RK_MACPHY_DISABLE GRF_CLR_BIT(0)235 -#define RK_MACPHY_CFG_CLK_50M GRF_BIT(14)236 -#define RK_GMAC2PHY_RMII_MODE (GRF_BIT(6) | GRF_CLR_BIT(7))237 -#define RK_GRF_CON2_MACPHY_ID HIWORD_UPDATE(0x1234, 0xffff, 0)238 -#define RK_GRF_CON3_MACPHY_ID HIWORD_UPDATE(0x35, 0x3f, 0)239 -240 -static void rk_gmac_integrated_ephy_powerup(struct rk_priv_data *priv)241 -{242 - regmap_write(priv->grf, RK_GRF_MACPHY_CON0, RK_MACPHY_CFG_CLK_50M);243 - regmap_write(priv->grf, RK_GRF_MACPHY_CON0, RK_GMAC2PHY_RMII_MODE);244 -245 - regmap_write(priv->grf, RK_GRF_MACPHY_CON2, RK_GRF_CON2_MACPHY_ID);246 - regmap_write(priv->grf, RK_GRF_MACPHY_CON3, RK_GRF_CON3_MACPHY_ID);247 -248 - if (priv->phy_reset) {249 - /* PHY needs to be disabled before trying to reset it */250 - regmap_write(priv->grf, RK_GRF_MACPHY_CON0, RK_MACPHY_DISABLE);251 - if (priv->phy_reset)252 - reset_control_assert(priv->phy_reset);253 - usleep_range(10, 20);254 - if (priv->phy_reset)255 - reset_control_deassert(priv->phy_reset);256 - usleep_range(10, 20);257 - regmap_write(priv->grf, RK_GRF_MACPHY_CON0, RK_MACPHY_ENABLE);258 - msleep(30);259 - }260 -}261 -262 -static void rk_gmac_integrated_ephy_powerdown(struct rk_priv_data *priv)263 -{264 - regmap_write(priv->grf, RK_GRF_MACPHY_CON0, RK_MACPHY_DISABLE);265 - if (priv->phy_reset)266 - reset_control_assert(priv->phy_reset);267 -}215 + (((tx) ? soc##_GMAC_TXCLK_DLY_ENABLE : soc##_GMAC_TXCLK_DLY_DISABLE) | \216 + ((rx) ? soc##_GMAC_RXCLK_DLY_ENABLE : soc##_GMAC_RXCLK_DLY_DISABLE))268 217 269 218 #define PX30_GRF_GMAC_CON1 0x0904 270 219 .. .. @@ -357,10 +306,12 @@ 357 306 358 307 regmap_write(bsp_priv->grf, RK1808_GRF_GMAC_CON1, 359 308 RK1808_GMAC_PHY_INTF_SEL_RGMII | 360 - DELAY_ENABLE(RK1808, tx_delay, rx_delay));309 + RK1808_GMAC_RXCLK_DLY_ENABLE |310 + RK1808_GMAC_TXCLK_DLY_ENABLE);361 311 362 312 regmap_write(bsp_priv->grf, RK1808_GRF_GMAC_CON0, 363 - DELAY_VALUE(RK1808, tx_delay, rx_delay));313 + RK1808_GMAC_CLK_RX_DL_CFG(rx_delay) |314 + RK1808_GMAC_CLK_TX_DL_CFG(tx_delay));364 315 } 365 316 366 317 static void rk1808_set_to_rmii(struct rk_priv_data *bsp_priv) .. .. @@ -488,7 +439,8 @@ 488 439 RK3128_GMAC_RMII_MODE_CLR); 489 440 regmap_write(bsp_priv->grf, RK3128_GRF_MAC_CON0, 490 441 DELAY_ENABLE(RK3128, tx_delay, rx_delay) | 491 - DELAY_VALUE(RK3128, tx_delay, rx_delay));442 + RK3128_GMAC_CLK_RX_DL_CFG(rx_delay) |443 + RK3128_GMAC_CLK_TX_DL_CFG(tx_delay));492 444 } 493 445 494 446 static void rk3128_set_to_rmii(struct rk_priv_data *bsp_priv) .. .. @@ -604,7 +556,8 @@ 604 556 DELAY_ENABLE(RK3228, tx_delay, rx_delay)); 605 557 606 558 regmap_write(bsp_priv->grf, RK3228_GRF_MAC_CON0, 607 - DELAY_VALUE(RK3128, tx_delay, rx_delay));559 + RK3228_GMAC_CLK_RX_DL_CFG(rx_delay) |560 + RK3228_GMAC_CLK_TX_DL_CFG(tx_delay));608 561 } 609 562 610 563 static void rk3228_set_to_rmii(struct rk_priv_data *bsp_priv) .. .. @@ -667,16 +620,10 @@ 667 620 dev_err(dev, "unknown speed value for RMII! speed=%d", speed); 668 621 } 669 622 670 -static void rk3228_integrated_phy_power(struct rk_priv_data *priv, bool up)623 +static void rk3228_integrated_phy_powerup(struct rk_priv_data *priv)671 624 { 672 - if (up) {673 - regmap_write(priv->grf, RK3228_GRF_CON_MUX,674 - RK3228_GRF_CON_MUX_GMAC_INTEGRATED_PHY);675 -676 - rk_gmac_integrated_ephy_powerup(priv);677 - } else {678 - rk_gmac_integrated_ephy_powerdown(priv);679 - }625 + regmap_write(priv->grf, RK3228_GRF_CON_MUX,626 + RK3228_GRF_CON_MUX_GMAC_INTEGRATED_PHY);680 627 } 681 628 682 629 static const struct rk_gmac_ops rk3228_ops = { .. .. @@ -684,7 +631,7 @@ 684 631 .set_to_rmii = rk3228_set_to_rmii, 685 632 .set_rgmii_speed = rk3228_set_rgmii_speed, 686 633 .set_rmii_speed = rk3228_set_rmii_speed, 687 - .integrated_phy_power = rk3228_integrated_phy_power,634 + .integrated_phy_powerup = rk3228_integrated_phy_powerup,688 635 }; 689 636 690 637 #define RK3288_GRF_SOC_CON1 0x0248 .. .. @@ -730,7 +677,8 @@ 730 677 RK3288_GMAC_RMII_MODE_CLR); 731 678 regmap_write(bsp_priv->grf, RK3288_GRF_SOC_CON3, 732 679 DELAY_ENABLE(RK3288, tx_delay, rx_delay) | 733 - DELAY_VALUE(RK3288, tx_delay, rx_delay));680 + RK3288_GMAC_CLK_RX_DL_CFG(rx_delay) |681 + RK3288_GMAC_CLK_TX_DL_CFG(tx_delay));734 682 } 735 683 736 684 static void rk3288_set_to_rmii(struct rk_priv_data *bsp_priv) .. .. @@ -901,10 +849,12 @@ 901 849 regmap_write(bsp_priv->grf, RK3328_GRF_MAC_CON1, 902 850 RK3328_GMAC_PHY_INTF_SEL_RGMII | 903 851 RK3328_GMAC_RMII_MODE_CLR | 904 - DELAY_ENABLE(RK3328, tx_delay, rx_delay));852 + RK3328_GMAC_RXCLK_DLY_ENABLE |853 + RK3328_GMAC_TXCLK_DLY_ENABLE);905 854 906 855 regmap_write(bsp_priv->grf, RK3328_GRF_MAC_CON0, 907 - DELAY_VALUE(RK3328, tx_delay, rx_delay));856 + RK3328_GMAC_CLK_RX_DL_CFG(rx_delay) |857 + RK3328_GMAC_CLK_TX_DL_CFG(tx_delay));908 858 } 909 859 910 860 static void rk3328_set_to_rmii(struct rk_priv_data *bsp_priv) .. .. @@ -972,16 +922,10 @@ 972 922 dev_err(dev, "unknown speed value for RMII! speed=%d", speed); 973 923 } 974 924 975 -static void rk3328_integrated_phy_power(struct rk_priv_data *priv, bool up)925 +static void rk3328_integrated_phy_powerup(struct rk_priv_data *priv)976 926 { 977 - if (up) {978 - regmap_write(priv->grf, RK3328_GRF_MACPHY_CON1,979 - RK3328_MACPHY_RMII_MODE);980 -981 - rk_gmac_integrated_ephy_powerup(priv);982 - } else {983 - rk_gmac_integrated_ephy_powerdown(priv);984 - }927 + regmap_write(priv->grf, RK3328_GRF_MACPHY_CON1,928 + RK3328_MACPHY_RMII_MODE);985 929 } 986 930 987 931 static const struct rk_gmac_ops rk3328_ops = { .. .. @@ -989,7 +933,7 @@ 989 933 .set_to_rmii = rk3328_set_to_rmii, 990 934 .set_rgmii_speed = rk3328_set_rgmii_speed, 991 935 .set_rmii_speed = rk3328_set_rmii_speed, 992 - .integrated_phy_power = rk3328_integrated_phy_power,936 + .integrated_phy_powerup = rk3328_integrated_phy_powerup,993 937 }; 994 938 995 939 #define RK3366_GRF_SOC_CON6 0x0418 .. .. @@ -1035,7 +979,8 @@ 1035 979 RK3366_GMAC_RMII_MODE_CLR); 1036 980 regmap_write(bsp_priv->grf, RK3366_GRF_SOC_CON7, 1037 981 DELAY_ENABLE(RK3366, tx_delay, rx_delay) | 1038 - DELAY_VALUE(RK3366, tx_delay, rx_delay));982 + RK3366_GMAC_CLK_RX_DL_CFG(rx_delay) |983 + RK3366_GMAC_CLK_TX_DL_CFG(tx_delay));1039 984 } 1040 985 1041 986 static void rk3366_set_to_rmii(struct rk_priv_data *bsp_priv) .. .. @@ -1145,7 +1090,8 @@ 1145 1090 RK3368_GMAC_RMII_MODE_CLR); 1146 1091 regmap_write(bsp_priv->grf, RK3368_GRF_SOC_CON16, 1147 1092 DELAY_ENABLE(RK3368, tx_delay, rx_delay) | 1148 - DELAY_VALUE(RK3368, tx_delay, rx_delay));1093 + RK3368_GMAC_CLK_RX_DL_CFG(rx_delay) |1094 + RK3368_GMAC_CLK_TX_DL_CFG(tx_delay));1149 1095 } 1150 1096 1151 1097 static void rk3368_set_to_rmii(struct rk_priv_data *bsp_priv) .. .. @@ -1255,7 +1201,8 @@ 1255 1201 RK3399_GMAC_RMII_MODE_CLR); 1256 1202 regmap_write(bsp_priv->grf, RK3399_GRF_SOC_CON6, 1257 1203 DELAY_ENABLE(RK3399, tx_delay, rx_delay) | 1258 - DELAY_VALUE(RK3399, tx_delay, rx_delay));1204 + RK3399_GMAC_CLK_RX_DL_CFG(rx_delay) |1205 + RK3399_GMAC_CLK_TX_DL_CFG(tx_delay));1259 1206 } 1260 1207 1261 1208 static void rk3399_set_to_rmii(struct rk_priv_data *bsp_priv) .. .. @@ -1402,10 +1349,12 @@ 1402 1349 1403 1350 regmap_write(bsp_priv->grf, offset_con1, 1404 1351 RK3568_GMAC_PHY_INTF_SEL_RGMII | 1405 - DELAY_ENABLE(RK3568, tx_delay, rx_delay));1352 + RK3568_GMAC_RXCLK_DLY_ENABLE |1353 + RK3568_GMAC_TXCLK_DLY_ENABLE);1406 1354 1407 1355 regmap_write(bsp_priv->grf, offset_con0, 1408 - DELAY_VALUE(RK3568, tx_delay, rx_delay));1356 + RK3568_GMAC_CLK_RX_DL_CFG(rx_delay) |1357 + RK3568_GMAC_CLK_TX_DL_CFG(tx_delay));1409 1358 } 1410 1359 1411 1360 static void rk3568_set_to_rmii(struct rk_priv_data *bsp_priv) .. .. @@ -1451,34 +1400,6 @@ 1451 1400 __func__, rate, ret); 1452 1401 } 1453 1402 1454 -static void rk3568_set_gmac_sgmii_speed(struct rk_priv_data *bsp_priv, int speed)1455 -{1456 - struct device *dev = &bsp_priv->pdev->dev;1457 - unsigned int ctrl;1458 -1459 - /* Only gmac1 set the speed for port1 */1460 - if (!bsp_priv->bus_id)1461 - return;1462 -1463 - switch (speed) {1464 - case 10:1465 - ctrl = BMCR_SPEED10;1466 - break;1467 - case 100:1468 - ctrl = BMCR_SPEED100;1469 - break;1470 - case 1000:1471 - ctrl = BMCR_SPEED1000;1472 - break;1473 - default:1474 - dev_err(dev, "unknown speed value for GMAC speed=%d", speed);1475 - return;1476 - }1477 -1478 - xpcs_write(bsp_priv, SR_MII_OFFSET(bsp_priv->bus_id) + MII_BMCR,1479 - ctrl | BMCR_FULLDPLX);1480 -}1481 -1482 1403 static const struct rk_gmac_ops rk3568_ops = { 1483 1404 .set_to_rgmii = rk3568_set_to_rgmii, 1484 1405 .set_to_rmii = rk3568_set_to_rmii, .. .. @@ -1486,7 +1407,6 @@ 1486 1407 .set_to_qsgmii = rk3568_set_to_qsgmii, 1487 1408 .set_rgmii_speed = rk3568_set_gmac_speed, 1488 1409 .set_rmii_speed = rk3568_set_gmac_speed, 1489 - .set_sgmii_speed = rk3568_set_gmac_sgmii_speed,1490 1410 }; 1491 1411 1492 1412 #define RV1108_GRF_GMAC_CON0 0X0900 .. .. @@ -1552,18 +1472,21 @@ 1552 1472 (GRF_CLR_BIT(4) | GRF_CLR_BIT(5) | GRF_BIT(6)) 1553 1473 #define RV1126_GMAC_FLOW_CTRL GRF_BIT(7) 1554 1474 #define RV1126_GMAC_FLOW_CTRL_CLR GRF_CLR_BIT(7) 1555 -#define RV1126_M0_GMAC_RXCLK_DLY_ENABLE GRF_BIT(1)1556 -#define RV1126_M0_GMAC_RXCLK_DLY_DISABLE GRF_CLR_BIT(1)1557 -#define RV1126_M0_GMAC_TXCLK_DLY_ENABLE GRF_BIT(0)1558 -#define RV1126_M0_GMAC_TXCLK_DLY_DISABLE GRF_CLR_BIT(0)1559 -#define RV1126_M1_GMAC_RXCLK_DLY_ENABLE GRF_BIT(3)1560 -#define RV1126_M1_GMAC_RXCLK_DLY_DISABLE GRF_CLR_BIT(3)1561 -#define RV1126_M1_GMAC_TXCLK_DLY_ENABLE GRF_BIT(2)1562 -#define RV1126_M1_GMAC_TXCLK_DLY_DISABLE GRF_CLR_BIT(2)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)1563 1483 1564 -/* RV1126_GRF_GMAC_CON1 && RV1126_GRF_GMAC_CON2 */1565 -#define RV1126_GMAC_CLK_RX_DL_CFG(val) HIWORD_UPDATE(val, 0x7F, 8)1566 -#define RV1126_GMAC_CLK_TX_DL_CFG(val) HIWORD_UPDATE(val, 0x7F, 0)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)1567 1490 1568 1491 static void rv1126_set_to_rgmii(struct rk_priv_data *bsp_priv, 1569 1492 int tx_delay, int rx_delay) .. .. @@ -1577,14 +1500,18 @@ 1577 1500 1578 1501 regmap_write(bsp_priv->grf, RV1126_GRF_GMAC_CON0, 1579 1502 RV1126_GMAC_PHY_INTF_SEL_RGMII | 1580 - DELAY_ENABLE(RV1126_M0, tx_delay, rx_delay) |1581 - DELAY_ENABLE(RV1126_M1, tx_delay, rx_delay));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);1582 1507 1583 1508 regmap_write(bsp_priv->grf, RV1126_GRF_GMAC_CON1, 1584 - DELAY_VALUE(RV1126, tx_delay, rx_delay));1509 + RV1126_GMAC_M0_CLK_RX_DL_CFG(rx_delay) |1510 + RV1126_GMAC_M0_CLK_TX_DL_CFG(tx_delay));1585 1511 1586 1512 regmap_write(bsp_priv->grf, RV1126_GRF_GMAC_CON2, 1587 - DELAY_VALUE(RV1126, tx_delay, rx_delay));1513 + RV1126_GMAC_M1_CLK_RX_DL_CFG(rx_delay) |1514 + RV1126_GMAC_M1_CLK_TX_DL_CFG(tx_delay));1588 1515 } 1589 1516 1590 1517 static void rv1126_set_to_rmii(struct rk_priv_data *bsp_priv) .. .. @@ -1657,6 +1584,50 @@ 1657 1584 .set_rgmii_speed = rv1126_set_rgmii_speed, 1658 1585 .set_rmii_speed = rv1126_set_rmii_speed, 1659 1586 }; 1587 +1588 +#define RK_GRF_MACPHY_CON0 0xb001589 +#define RK_GRF_MACPHY_CON1 0xb041590 +#define RK_GRF_MACPHY_CON2 0xb081591 +#define RK_GRF_MACPHY_CON3 0xb0c1592 +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 +}1660 1631 1661 1632 static int rk_gmac_clk_init(struct plat_stmmacenet_data *plat) 1662 1633 { .. .. @@ -1777,23 +1748,15 @@ 1777 1748 if (!IS_ERR(bsp_priv->pclk_xpcs)) 1778 1749 clk_prepare_enable(bsp_priv->pclk_xpcs); 1779 1750 1780 - if (bsp_priv->ops && bsp_priv->ops->set_clock_selection)1781 - bsp_priv->ops->set_clock_selection(bsp_priv, bsp_priv->clock_input,1782 - true);1783 -1784 1751 /** 1785 1752 * if (!IS_ERR(bsp_priv->clk_mac)) 1786 1753 * clk_prepare_enable(bsp_priv->clk_mac); 1787 1754 */ 1788 - usleep_range(100, 200);1755 + mdelay(5);1789 1756 bsp_priv->clk_enabled = true; 1790 1757 } 1791 1758 } else { 1792 1759 if (bsp_priv->clk_enabled) { 1793 - if (bsp_priv->ops && bsp_priv->ops->set_clock_selection)1794 - bsp_priv->ops->set_clock_selection(bsp_priv, bsp_priv->clock_input,1795 - false);1796 -1797 1760 if (phy_iface == PHY_INTERFACE_MODE_RMII) { 1798 1761 clk_disable_unprepare(bsp_priv->mac_clk_rx); 1799 1762 .. .. @@ -1890,7 +1853,7 @@ 1890 1853 1891 1854 ret = of_property_read_u32(dev->of_node, "tx_delay", &value); 1892 1855 if (ret) { 1893 - bsp_priv->tx_delay = -1;1856 + bsp_priv->tx_delay = 0x30;1894 1857 dev_err(dev, "Can not read property: tx_delay."); 1895 1858 dev_err(dev, "set tx_delay to 0x%x\n", 1896 1859 bsp_priv->tx_delay); .. .. @@ -1901,7 +1864,7 @@ 1901 1864 1902 1865 ret = of_property_read_u32(dev->of_node, "rx_delay", &value); 1903 1866 if (ret) { 1904 - bsp_priv->rx_delay = -1;1867 + bsp_priv->rx_delay = 0x10;1905 1868 dev_err(dev, "Can not read property: rx_delay."); 1906 1869 dev_err(dev, "set rx_delay to 0x%x\n", 1907 1870 bsp_priv->rx_delay); .. .. @@ -1915,11 +1878,14 @@ 1915 1878 bsp_priv->xpcs = syscon_regmap_lookup_by_phandle(dev->of_node, 1916 1879 "rockchip,xpcs"); 1917 1880 if (!IS_ERR(bsp_priv->xpcs)) { 1918 - bsp_priv->comphy = devm_of_phy_get(&pdev->dev, dev->of_node, NULL);1919 - if (IS_ERR(bsp_priv->comphy)) {1920 - bsp_priv->comphy = NULL;1881 + struct phy *comphy;1882 +1883 + comphy = devm_of_phy_get(&pdev->dev, dev->of_node, NULL);1884 + if (IS_ERR(comphy))1921 1885 dev_err(dev, "devm_of_phy_get error\n"); 1922 - }1886 + ret = phy_init(comphy);1887 + if (ret)1888 + dev_err(dev, "phy_init error\n");1923 1889 } 1924 1890 1925 1891 if (plat->phy_node) { .. .. @@ -1961,17 +1927,17 @@ 1961 1927 case PHY_INTERFACE_MODE_RGMII_ID: 1962 1928 dev_info(dev, "init for RGMII_ID\n"); 1963 1929 if (bsp_priv->ops && bsp_priv->ops->set_to_rgmii) 1964 - bsp_priv->ops->set_to_rgmii(bsp_priv, -1, -1);1930 + bsp_priv->ops->set_to_rgmii(bsp_priv, 0, 0);1965 1931 break; 1966 1932 case PHY_INTERFACE_MODE_RGMII_RXID: 1967 1933 dev_info(dev, "init for RGMII_RXID\n"); 1968 1934 if (bsp_priv->ops && bsp_priv->ops->set_to_rgmii) 1969 - bsp_priv->ops->set_to_rgmii(bsp_priv, bsp_priv->tx_delay, -1);1935 + bsp_priv->ops->set_to_rgmii(bsp_priv, bsp_priv->tx_delay, 0);1970 1936 break; 1971 1937 case PHY_INTERFACE_MODE_RGMII_TXID: 1972 1938 dev_info(dev, "init for RGMII_TXID\n"); 1973 1939 if (bsp_priv->ops && bsp_priv->ops->set_to_rgmii) 1974 - bsp_priv->ops->set_to_rgmii(bsp_priv, -1, bsp_priv->rx_delay);1940 + bsp_priv->ops->set_to_rgmii(bsp_priv, 0, bsp_priv->rx_delay);1975 1941 break; 1976 1942 case PHY_INTERFACE_MODE_RMII: 1977 1943 dev_info(dev, "init for RMII\n"); .. .. @@ -1980,23 +1946,11 @@ 1980 1946 break; 1981 1947 case PHY_INTERFACE_MODE_SGMII: 1982 1948 dev_info(dev, "init for SGMII\n"); 1983 - ret = phy_init(bsp_priv->comphy);1984 - if (ret) {1985 - dev_err(dev, "phy_init error: %d\n", ret);1986 - return ret;1987 - }1988 -1989 1949 if (bsp_priv->ops && bsp_priv->ops->set_to_sgmii) 1990 1950 bsp_priv->ops->set_to_sgmii(bsp_priv); 1991 1951 break; 1992 1952 case PHY_INTERFACE_MODE_QSGMII: 1993 1953 dev_info(dev, "init for QSGMII\n"); 1994 - ret = phy_init(bsp_priv->comphy);1995 - if (ret) {1996 - dev_err(dev, "phy_init error: %d\n", ret);1997 - return ret;1998 - }1999 -2000 1954 if (bsp_priv->ops && bsp_priv->ops->set_to_qsgmii) 2001 1955 bsp_priv->ops->set_to_qsgmii(bsp_priv); 2002 1956 break; .. .. @@ -2013,6 +1967,9 @@ 2013 1967 pm_runtime_enable(dev); 2014 1968 pm_runtime_get_sync(dev); 2015 1969 1970 + if (bsp_priv->integrated_phy)1971 + rk_gmac_integrated_phy_powerup(bsp_priv);1972 +2016 1973 return 0; 2017 1974 } 2018 1975 .. .. @@ -2020,9 +1977,8 @@ 2020 1977 { 2021 1978 struct device *dev = &gmac->pdev->dev; 2022 1979 2023 - if (gmac->phy_iface == PHY_INTERFACE_MODE_SGMII ||2024 - gmac->phy_iface == PHY_INTERFACE_MODE_QSGMII)2025 - phy_exit(gmac->comphy);1980 + if (gmac->integrated_phy)1981 + rk_gmac_integrated_phy_powerdown(gmac);2026 1982 2027 1983 pm_runtime_put_sync(dev); 2028 1984 pm_runtime_disable(dev); .. .. @@ -2049,26 +2005,11 @@ 2049 2005 bsp_priv->ops->set_rmii_speed(bsp_priv, speed); 2050 2006 break; 2051 2007 case PHY_INTERFACE_MODE_SGMII: 2052 - if (bsp_priv->ops && bsp_priv->ops->set_sgmii_speed)2053 - bsp_priv->ops->set_sgmii_speed(bsp_priv, speed);2054 2008 case PHY_INTERFACE_MODE_QSGMII: 2055 2009 break; 2056 2010 default: 2057 2011 dev_err(dev, "unsupported interface %d", bsp_priv->phy_iface); 2058 2012 } 2059 -}2060 -2061 -static int rk_integrated_phy_power(void *priv, bool up)2062 -{2063 - struct rk_priv_data *bsp_priv = priv;2064 -2065 - if (!bsp_priv->integrated_phy || !bsp_priv->ops ||2066 - !bsp_priv->ops->integrated_phy_power)2067 - return 0;2068 -2069 - bsp_priv->ops->integrated_phy_power(bsp_priv, up);2070 -2071 - return 0;2072 2013 } 2073 2014 2074 2015 void dwmac_rk_set_rgmii_delayline(struct stmmac_priv *priv, .. .. @@ -2109,17 +2050,24 @@ 2109 2050 { 2110 2051 } 2111 2052 2053 +static unsigned char macaddr[6];2054 +extern ssize_t at24_mac_read(unsigned char* addr);2112 2055 void rk_get_eth_addr(void *priv, unsigned char *addr) 2113 2056 { 2114 2057 struct rk_priv_data *bsp_priv = priv; 2115 2058 struct device *dev = &bsp_priv->pdev->dev; 2116 - unsigned char ethaddr[ETH_ALEN * MAX_ETH] = {0};2117 - int ret, id = bsp_priv->bus_id;2059 + int i;2060 + //unsigned char ethaddr[ETH_ALEN * MAX_ETH] = {0};2061 + //int ret, id = bsp_priv->bus_id;2118 2062 2063 + //ben2064 + printk("nk-debug:enter rk_get_eth_addr.. \n");2065 +2066 + #if 02119 2067 rk_devinfo_get_eth_mac(addr); 2120 2068 if (is_valid_ether_addr(addr)) 2121 2069 goto out; 2122 -2070 +2123 2071 if (id < 0 || id >= MAX_ETH) { 2124 2072 dev_err(dev, "%s: Invalid ethernet bus id %d\n", __func__, id); 2125 2073 return; .. .. @@ -2146,7 +2094,35 @@ 2146 2094 } else { 2147 2095 memcpy(addr, ðaddr[id * ETH_ALEN], ETH_ALEN); 2148 2096 } 2097 + #endif2098 +2099 + #if 02100 + 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 + #endif2109 +2110 + #if 12111 + if (at24_mac_read(macaddr) > 0) {2112 + printk("ben %s: at24_mac_read Success!! \n", __func__);2113 + memcpy(addr, macaddr, 6);2149 2114 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 + #endif2125 +2150 2126 out: 2151 2127 dev_err(dev, "%s: mac address: %pM\n", __func__, addr); 2152 2128 } .. .. @@ -2158,6 +2134,7 @@ 2158 2134 const struct rk_gmac_ops *data; 2159 2135 int ret; 2160 2136 2137 + printk("nk-debug:enter rk_gmac_probe 1.. \n");2161 2138 data = of_device_get_match_data(&pdev->dev); 2162 2139 if (!data) { 2163 2140 dev_err(&pdev->dev, "no of match data provided\n"); .. .. @@ -2177,7 +2154,6 @@ 2177 2154 2178 2155 plat_dat->fix_mac_speed = rk_fix_speed; 2179 2156 plat_dat->get_eth_addr = rk_get_eth_addr; 2180 - plat_dat->integrated_phy_power = rk_integrated_phy_power;2181 2157 2182 2158 plat_dat->bsp_priv = rk_gmac_setup(pdev, plat_dat, data); 2183 2159 if (IS_ERR(plat_dat->bsp_priv)) { .. .. @@ -2185,6 +2161,7 @@ 2185 2161 goto err_remove_config_dt; 2186 2162 } 2187 2163 2164 + printk("nk-debug:enter rk_gmac_probe 2.. \n");2188 2165 ret = rk_gmac_clk_init(plat_dat); 2189 2166 if (ret) 2190 2167 goto err_remove_config_dt; .. .. @@ -2254,45 +2231,19 @@ 2254 2231 static SIMPLE_DEV_PM_OPS(rk_gmac_pm_ops, rk_gmac_suspend, rk_gmac_resume); 2255 2232 2256 2233 static const struct of_device_id rk_gmac_dwmac_match[] = { 2257 -#ifdef CONFIG_CPU_PX302258 2234 { .compatible = "rockchip,px30-gmac", .data = &px30_ops }, 2259 -#endif2260 -#ifdef CONFIG_CPU_RK18082261 2235 { .compatible = "rockchip,rk1808-gmac", .data = &rk1808_ops }, 2262 -#endif2263 -#ifdef CONFIG_CPU_RK312X2264 2236 { .compatible = "rockchip,rk3128-gmac", .data = &rk3128_ops }, 2265 -#endif2266 -#ifdef CONFIG_CPU_RK322X2267 2237 { .compatible = "rockchip,rk3228-gmac", .data = &rk3228_ops }, 2268 -#endif2269 -#ifdef CONFIG_CPU_RK32882270 2238 { .compatible = "rockchip,rk3288-gmac", .data = &rk3288_ops }, 2271 -#endif2272 -#ifdef CONFIG_CPU_RK33082273 2239 { .compatible = "rockchip,rk3308-mac", .data = &rk3308_ops }, 2274 -#endif2275 -#ifdef CONFIG_CPU_RK33282276 2240 { .compatible = "rockchip,rk3328-gmac", .data = &rk3328_ops }, 2277 -#endif2278 -#ifdef CONFIG_CPU_RK33662279 2241 { .compatible = "rockchip,rk3366-gmac", .data = &rk3366_ops }, 2280 -#endif2281 -#ifdef CONFIG_CPU_RK33682282 2242 { .compatible = "rockchip,rk3368-gmac", .data = &rk3368_ops }, 2283 -#endif2284 -#ifdef CONFIG_CPU_RK33992285 2243 { .compatible = "rockchip,rk3399-gmac", .data = &rk3399_ops }, 2286 -#endif2287 -#ifdef CONFIG_CPU_RK35682288 2244 { .compatible = "rockchip,rk3568-gmac", .data = &rk3568_ops }, 2289 -#endif2290 -#ifdef CONFIG_CPU_RV110X2291 2245 { .compatible = "rockchip,rv1108-gmac", .data = &rv1108_ops }, 2292 -#endif2293 -#ifdef CONFIG_CPU_RV11262294 2246 { .compatible = "rockchip,rv1126-gmac", .data = &rv1126_ops }, 2295 -#endif2296 2247 { } 2297 2248 }; 2298 2249 MODULE_DEVICE_TABLE(of, rk_gmac_dwmac_match); .. .. @@ -2306,7 +2257,8 @@ 2306 2257 .of_match_table = rk_gmac_dwmac_match, 2307 2258 }, 2308 2259 }; 2309 -module_platform_driver(rk_gmac_dwmac_driver);2260 +//module_platform_driver(rk_gmac_dwmac_driver);2261 + module_platform_driver1(rk_gmac_dwmac_driver);2310 2262 2311 2263 MODULE_AUTHOR("Chen-Zhi (Roger Chen) <roger.chen@rock-chips.com>"); 2312 2264 MODULE_DESCRIPTION("Rockchip RK3288 DWMAC specific glue layer"); kernel/drivers/net/ethernet/stmicro/stmmac/dwmac1000.h
.. .. @@ -86,10 +86,10 @@ 86 86 #define LPI_CTRL_STATUS_TLPIEN 0x00000001 /* Transmit LPI Entry */ 87 87 88 88 /* GMAC HW ADDR regs */ 89 -#define GMAC_ADDR_HIGH(reg) ((reg > 15) ? 0x00000800 + (reg - 16) * 8 : \90 - 0x00000040 + (reg * 8))91 -#define GMAC_ADDR_LOW(reg) ((reg > 15) ? 0x00000804 + (reg - 16) * 8 : \92 - 0x00000044 + (reg * 8))89 +#define GMAC_ADDR_HIGH(reg) (((reg > 15) ? 0x00000800 : 0x00000040) + \90 + (reg * 8))91 +#define GMAC_ADDR_LOW(reg) (((reg > 15) ? 0x00000804 : 0x00000044) + \92 + (reg * 8))93 93 #define GMAC_MAX_PERFECT_ADDRESSES 1 94 94 95 95 #define GMAC_PCS_BASE 0x000000c0 /* PCS register base */ kernel/drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c
.. .. @@ -715,7 +715,6 @@ 715 715 x->mac_gmii_rx_proto_engine++; 716 716 } 717 717 718 -#ifdef CONFIG_STMMAC_FULL719 718 const struct stmmac_ops dwmac4_ops = { 720 719 .core_init = dwmac4_core_init, 721 720 .set_mac = stmmac_set_mac, .. .. @@ -746,7 +745,6 @@ 746 745 .debug = dwmac4_debug, 747 746 .set_filter = dwmac4_set_filter, 748 747 }; 749 -#endif750 748 751 749 const struct stmmac_ops dwmac410_ops = { 752 750 .core_init = dwmac4_core_init, .. .. @@ -779,7 +777,6 @@ 779 777 .set_filter = dwmac4_set_filter, 780 778 }; 781 779 782 -#ifdef CONFIG_STMMAC_FULL783 780 const struct stmmac_ops dwmac510_ops = { 784 781 .core_init = dwmac4_core_init, 785 782 .set_mac = stmmac_dwmac4_set_mac, .. .. @@ -815,7 +812,6 @@ 815 812 .rxp_config = dwmac5_rxp_config, 816 813 .flex_pps_config = dwmac5_flex_pps_config, 817 814 }; 818 -#endif819 815 820 816 int dwmac4_setup(struct stmmac_priv *priv) 821 817 { kernel/drivers/net/ethernet/stmicro/stmmac/dwmac4_dma.c
.. .. @@ -119,23 +119,6 @@ 119 119 ioaddr + DMA_CHAN_INTR_ENA(chan)); 120 120 } 121 121 122 -static void dwmac410_dma_init_channel(void __iomem *ioaddr,123 - struct stmmac_dma_cfg *dma_cfg, u32 chan)124 -{125 - u32 value;126 -127 - /* common channel control register config */128 - value = readl(ioaddr + DMA_CHAN_CONTROL(chan));129 - if (dma_cfg->pblx8)130 - value = value | DMA_BUS_MODE_PBL;131 -132 - writel(value, ioaddr + DMA_CHAN_CONTROL(chan));133 -134 - /* Mask interrupts by writing to CSR7 */135 - writel(DMA_CHAN_INTR_DEFAULT_MASK_4_10,136 - ioaddr + DMA_CHAN_INTR_ENA(chan));137 -}138 -139 122 static void dwmac4_dma_init(void __iomem *ioaddr, 140 123 struct stmmac_dma_cfg *dma_cfg, int atds) 141 124 { .. .. @@ -214,7 +197,7 @@ 214 197 u32 channel, int fifosz, u8 qmode) 215 198 { 216 199 unsigned int rqs = fifosz / 256 - 1; 217 - u32 mtl_rx_op;200 + u32 mtl_rx_op, mtl_rx_int;218 201 219 202 mtl_rx_op = readl(ioaddr + MTL_CHAN_RX_OP_MODE(channel)); 220 203 .. .. @@ -285,6 +268,11 @@ 285 268 } 286 269 287 270 writel(mtl_rx_op, ioaddr + MTL_CHAN_RX_OP_MODE(channel)); 271 +272 + /* Enable MTL RX overflow */273 + mtl_rx_int = readl(ioaddr + MTL_CHAN_INT_CTRL(channel));274 + writel(mtl_rx_int | MTL_RX_OVERFLOW_INT_EN,275 + ioaddr + MTL_CHAN_INT_CTRL(channel));288 276 } 289 277 290 278 static void dwmac4_dma_tx_chan_op_mode(void __iomem *ioaddr, int mode, .. .. @@ -473,7 +461,7 @@ 473 461 const struct stmmac_dma_ops dwmac410_dma_ops = { 474 462 .reset = dwmac4_dma_reset, 475 463 .init = dwmac4_dma_init, 476 - .init_chan = dwmac410_dma_init_channel,464 + .init_chan = dwmac4_dma_init_channel,477 465 .init_rx_chan = dwmac4_dma_init_rx_chan, 478 466 .init_tx_chan = dwmac4_dma_init_tx_chan, 479 467 .axi = dwmac4_dma_axi, kernel/drivers/net/ethernet/stmicro/stmmac/dwmac4_lib.c
.. .. @@ -63,6 +63,10 @@ 63 63 64 64 value &= ~DMA_CONTROL_ST; 65 65 writel(value, ioaddr + DMA_CHAN_TX_CONTROL(chan)); 66 +67 + value = readl(ioaddr + GMAC_CONFIG);68 + value &= ~GMAC_CONFIG_TE;69 + writel(value, ioaddr + GMAC_CONFIG);66 70 } 67 71 68 72 void dwmac4_dma_start_rx(void __iomem *ioaddr, u32 chan) kernel/drivers/net/ethernet/stmicro/stmmac/hwif.c
.. .. @@ -23,7 +23,6 @@ 23 23 return reg & GENMASK(7, 0); 24 24 } 25 25 26 -#ifdef CONFIG_STMMAC_FULL27 26 static void stmmac_dwmac_mode_quirk(struct stmmac_priv *priv) 28 27 { 29 28 struct mac_device_info *mac = priv->hw; .. .. @@ -69,7 +68,6 @@ 69 68 stmmac_dwmac_mode_quirk(priv); 70 69 return 0; 71 70 } 72 -#endif73 71 74 72 static const struct stmmac_hwif_entry { 75 73 bool gmac; .. .. @@ -80,16 +78,13 @@ 80 78 const void *desc; 81 79 const void *dma; 82 80 const void *mac; 83 -#ifdef CONFIG_STMMAC_PTP84 81 const void *hwtimestamp; 85 -#endif86 82 const void *mode; 87 83 const void *tc; 88 84 int (*setup)(struct stmmac_priv *priv); 89 85 int (*quirks)(struct stmmac_priv *priv); 90 86 } stmmac_hw[] = { 91 87 /* NOTE: New HW versions shall go to the end of this table */ 92 -#ifdef CONFIG_STMMAC_FULL93 88 { 94 89 .gmac = false, 95 90 .gmac4 = false, .. .. @@ -102,9 +97,7 @@ 102 97 .desc = NULL, 103 98 .dma = &dwmac100_dma_ops, 104 99 .mac = &dwmac100_ops, 105 -#ifdef CONFIG_STMMAC_PTP106 100 .hwtimestamp = &stmmac_ptp, 107 -#endif108 101 .mode = NULL, 109 102 .tc = NULL, 110 103 .setup = dwmac100_setup, .. .. @@ -121,9 +114,7 @@ 121 114 .desc = NULL, 122 115 .dma = &dwmac1000_dma_ops, 123 116 .mac = &dwmac1000_ops, 124 -#ifdef CONFIG_STMMAC_PTP125 117 .hwtimestamp = &stmmac_ptp, 126 -#endif127 118 .mode = NULL, 128 119 .tc = NULL, 129 120 .setup = dwmac1000_setup, .. .. @@ -140,9 +131,7 @@ 140 131 .desc = &dwmac4_desc_ops, 141 132 .dma = &dwmac4_dma_ops, 142 133 .mac = &dwmac4_ops, 143 -#ifdef CONFIG_STMMAC_PTP144 134 .hwtimestamp = &stmmac_ptp, 145 -#endif146 135 .mode = NULL, 147 136 .tc = NULL, 148 137 .setup = dwmac4_setup, .. .. @@ -159,16 +148,12 @@ 159 148 .desc = &dwmac4_desc_ops, 160 149 .dma = &dwmac4_dma_ops, 161 150 .mac = &dwmac410_ops, 162 -#ifdef CONFIG_STMMAC_PTP163 151 .hwtimestamp = &stmmac_ptp, 164 -#endif165 152 .mode = &dwmac4_ring_mode_ops, 166 153 .tc = NULL, 167 154 .setup = dwmac4_setup, 168 155 .quirks = NULL, 169 - },170 -#endif /* CONFIG_STMMAC_FULL */171 - {156 + }, {172 157 .gmac = false, 173 158 .gmac4 = true, 174 159 .xgmac = false, .. .. @@ -180,16 +165,12 @@ 180 165 .desc = &dwmac4_desc_ops, 181 166 .dma = &dwmac410_dma_ops, 182 167 .mac = &dwmac410_ops, 183 -#ifdef CONFIG_STMMAC_PTP184 168 .hwtimestamp = &stmmac_ptp, 185 -#endif186 169 .mode = &dwmac4_ring_mode_ops, 187 170 .tc = NULL, 188 171 .setup = dwmac4_setup, 189 172 .quirks = NULL, 190 - },191 -#ifdef CONFIG_STMMAC_FULL192 - {173 + }, {193 174 .gmac = false, 194 175 .gmac4 = true, 195 176 .xgmac = false, .. .. @@ -201,9 +182,7 @@ 201 182 .desc = &dwmac4_desc_ops, 202 183 .dma = &dwmac410_dma_ops, 203 184 .mac = &dwmac510_ops, 204 -#ifdef CONFIG_STMMAC_PTP205 185 .hwtimestamp = &stmmac_ptp, 206 -#endif207 186 .mode = &dwmac4_ring_mode_ops, 208 187 .tc = &dwmac510_tc_ops, 209 188 .setup = dwmac4_setup, .. .. @@ -220,15 +199,12 @@ 220 199 .desc = &dwxgmac210_desc_ops, 221 200 .dma = &dwxgmac210_dma_ops, 222 201 .mac = &dwxgmac210_ops, 223 -#ifdef CONFIG_STMMAC_PTP224 202 .hwtimestamp = &stmmac_ptp, 225 -#endif226 203 .mode = NULL, 227 204 .tc = NULL, 228 205 .setup = dwxgmac2_setup, 229 206 .quirks = NULL, 230 207 }, 231 -#endif232 208 }; 233 209 234 210 int stmmac_hwif_init(struct stmmac_priv *priv) .. .. @@ -288,9 +264,7 @@ 288 264 mac->desc = mac->desc ? : entry->desc; 289 265 mac->dma = mac->dma ? : entry->dma; 290 266 mac->mac = mac->mac ? : entry->mac; 291 -#ifdef CONFIG_STMMAC_PTP292 267 mac->ptp = mac->ptp ? : entry->hwtimestamp; 293 -#endif294 268 mac->mode = mac->mode ? : entry->mode; 295 269 mac->tc = mac->tc ? : entry->tc; 296 270 kernel/drivers/net/ethernet/stmicro/stmmac/stmmac.h
.. .. @@ -217,27 +217,10 @@ 217 217 int stmmac_mdio_unregister(struct net_device *ndev); 218 218 int stmmac_mdio_register(struct net_device *ndev); 219 219 int stmmac_mdio_reset(struct mii_bus *mii); 220 -221 -#ifdef CONFIG_STMMAC_ETHTOOL222 220 void stmmac_set_ethtool_ops(struct net_device *netdev); 223 -#else224 -static inline void stmmac_set_ethtool_ops(struct net_device *netdev)225 -{226 -}227 -#endif228 221 229 -#ifdef CONFIG_STMMAC_PTP230 222 void stmmac_ptp_register(struct stmmac_priv *priv); 231 223 void stmmac_ptp_unregister(struct stmmac_priv *priv); 232 -#else233 -static inline void stmmac_ptp_register(struct stmmac_priv *priv)234 -{235 -}236 -237 -static inline void stmmac_ptp_unregister(struct stmmac_priv *priv)238 -{239 -}240 -#endif241 224 int stmmac_resume(struct device *dev); 242 225 int stmmac_suspend(struct device *dev); 243 226 int stmmac_dvr_remove(struct device *dev); kernel/drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c
.. .. @@ -159,20 +159,15 @@ 159 159 160 160 static void get_systime(void __iomem *ioaddr, u64 *systime) 161 161 { 162 - u64 ns, sec0, sec1;162 + u64 ns;163 163 164 - /* Get the TSS value */165 - sec1 = readl_relaxed(ioaddr + PTP_STSR);166 - do {167 - sec0 = sec1;168 - /* Get the TSSS value */169 - ns = readl_relaxed(ioaddr + PTP_STNSR);170 - /* Get the TSS value */171 - sec1 = readl_relaxed(ioaddr + PTP_STSR);172 - } while (sec0 != sec1);164 + /* Get the TSSS value */165 + ns = readl(ioaddr + PTP_STNSR);166 + /* Get the TSS and convert sec time value to nanosecond */167 + ns += readl(ioaddr + PTP_STSR) * 1000000000ULL;173 168 174 169 if (systime) 175 - *systime = ns + (sec1 * 1000000000ULL);170 + *systime = ns;176 171 } 177 172 178 173 const struct stmmac_hwtimestamp stmmac_ptp = { kernel/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
.. .. @@ -228,7 +228,7 @@ 228 228 priv->clk_csr = STMMAC_CSR_100_150M; 229 229 else if ((clk_rate >= CSR_F_150M) && (clk_rate < CSR_F_250M)) 230 230 priv->clk_csr = STMMAC_CSR_150_250M; 231 - else if ((clk_rate >= CSR_F_250M) && (clk_rate <= CSR_F_300M))231 + else if ((clk_rate >= CSR_F_250M) && (clk_rate < CSR_F_300M))232 232 priv->clk_csr = STMMAC_CSR_250_300M; 233 233 } 234 234 .. .. @@ -508,7 +508,6 @@ 508 508 } 509 509 } 510 510 511 -#ifdef CONFIG_STMMAC_PTP512 511 /** 513 512 * stmmac_hwtstamp_set - control hardware timestamping. 514 513 * @dev: device pointer. .. .. @@ -761,7 +760,6 @@ 761 760 return copy_to_user(ifr->ifr_data, config, 762 761 sizeof(*config)) ? -EFAULT : 0; 763 762 } 764 -#endif /* CONFIG_STMMAC_PTP */765 763 766 764 /** 767 765 * stmmac_init_ptp - init PTP .. .. @@ -802,7 +800,7 @@ 802 800 803 801 static void stmmac_release_ptp(struct stmmac_priv *priv) 804 802 { 805 - if (priv->plat->clk_ptp_ref && IS_ENABLED(CONFIG_STMMAC_PTP))803 + if (priv->plat->clk_ptp_ref)806 804 clk_disable_unprepare(priv->plat->clk_ptp_ref); 807 805 stmmac_ptp_unregister(priv); 808 806 } .. .. @@ -936,6 +934,23 @@ 936 934 } 937 935 } 938 936 937 +static void rtl8211F_led_control(struct phy_device *phydev)938 +{939 + printk("ben debug:rtl8211F_led_control...1 \n");940 +941 + if(!phydev) return;942 + if(phydev->phy_id!=0x001cc916) return; /* only for 8211E*/943 +944 + /*switch to extension page44*/945 + phy_write(phydev, 31, 0x0d04);946 +//add hc 1000M --> orange947 +// 100M --> green948 + phy_write(phydev, 16, 0x6D02);949 +//add hc 1000M&100M --> green950 +// phy_write(phydev, 16, 0x6C0A);951 + printk("ben debug:rtl8211F_led_control...2 \n");952 +}953 +939 954 /** 940 955 * stmmac_init_phy - PHY initialization 941 956 * @dev: net device structure .. .. @@ -956,9 +971,6 @@ 956 971 priv->oldlink = false; 957 972 priv->speed = SPEED_UNKNOWN; 958 973 priv->oldduplex = DUPLEX_UNKNOWN; 959 -960 - if (priv->plat->integrated_phy_power)961 - priv->plat->integrated_phy_power(priv->plat->bsp_priv, true);962 974 963 975 if (priv->plat->phy_node) { 964 976 phydev = of_phy_connect(dev, priv->plat->phy_node, .. .. @@ -1020,6 +1032,9 @@ 1020 1032 phydev->irq = PHY_POLL; 1021 1033 1022 1034 phy_attached_info(phydev); 1035 +1036 + //add ben1037 + rtl8211F_led_control(phydev);1023 1038 return 0; 1024 1039 } 1025 1040 .. .. @@ -2159,7 +2174,8 @@ 2159 2174 */ 2160 2175 static void stmmac_check_ether_addr(struct stmmac_priv *priv) 2161 2176 { 2162 - if (!is_valid_ether_addr(priv->dev->dev_addr)) {2177 + //if (!is_valid_ether_addr(priv->dev->dev_addr)) {2178 + if (1) {2163 2179 stmmac_get_umac_addr(priv, priv->hw, priv->dev->dev_addr, 0); 2164 2180 if (likely(priv->plat->get_eth_addr)) 2165 2181 priv->plat->get_eth_addr(priv->plat->bsp_priv, .. .. @@ -2552,7 +2568,7 @@ 2552 2568 2553 2569 stmmac_mmc_setup(priv); 2554 2570 2555 - if (IS_ENABLED(CONFIG_STMMAC_PTP) && init_ptp) {2571 + if (init_ptp) {2556 2572 ret = clk_prepare_enable(priv->plat->clk_ptp_ref); 2557 2573 if (ret < 0) 2558 2574 netdev_warn(priv->dev, "failed to enable PTP reference clock: %d\n", ret); .. .. @@ -2594,8 +2610,7 @@ 2594 2610 { 2595 2611 struct stmmac_priv *priv = netdev_priv(dev); 2596 2612 2597 - if (IS_ENABLED(CONFIG_STMMAC_PTP))2598 - clk_disable_unprepare(priv->plat->clk_ptp_ref);2613 + clk_disable_unprepare(priv->plat->clk_ptp_ref);2599 2614 } 2600 2615 2601 2616 /** .. .. @@ -2733,9 +2748,6 @@ 2733 2748 if (dev->phydev) { 2734 2749 phy_stop(dev->phydev); 2735 2750 phy_disconnect(dev->phydev); 2736 - if (priv->plat->integrated_phy_power)2737 - priv->plat->integrated_phy_power(priv->plat->bsp_priv,2738 - false);2739 2751 } 2740 2752 2741 2753 stmmac_disable_all_queues(priv); .. .. @@ -2766,8 +2778,7 @@ 2766 2778 2767 2779 netif_carrier_off(dev); 2768 2780 2769 - if (IS_ENABLED(CONFIG_STMMAC_PTP))2770 - stmmac_release_ptp(priv);2781 + stmmac_release_ptp(priv);2771 2782 2772 2783 return 0; 2773 2784 } .. .. @@ -3746,6 +3757,7 @@ 3746 3757 /* To handle GMAC own interrupts */ 3747 3758 if ((priv->plat->has_gmac) || xmac) { 3748 3759 int status = stmmac_host_irq_status(priv, priv->hw, &priv->xstats); 3760 + int mtl_status;3749 3761 3750 3762 if (unlikely(status)) { 3751 3763 /* For LPI we need to save the tx status */ .. .. @@ -3756,8 +3768,17 @@ 3756 3768 } 3757 3769 3758 3770 for (queue = 0; queue < queues_count; queue++) { 3759 - status = stmmac_host_mtl_irq_status(priv, priv->hw,3760 - queue);3771 + struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];3772 +3773 + mtl_status = stmmac_host_mtl_irq_status(priv, priv->hw,3774 + queue);3775 + if (mtl_status != -EINVAL)3776 + status |= mtl_status;3777 +3778 + if (status & CORE_IRQ_MTL_RX_OVERFLOW)3779 + stmmac_set_rx_tail_ptr(priv, priv->ioaddr,3780 + rx_q->rx_tail_addr,3781 + queue);3761 3782 } 3762 3783 3763 3784 /* PCS link status */ .. .. @@ -3811,14 +3832,12 @@ 3811 3832 return -EINVAL; 3812 3833 ret = phy_mii_ioctl(dev->phydev, rq, cmd); 3813 3834 break; 3814 -#ifdef CONFIG_STMMAC_PTP3815 3835 case SIOCSHWTSTAMP: 3816 3836 ret = stmmac_hwtstamp_set(dev, rq); 3817 3837 break; 3818 3838 case SIOCGHWTSTAMP: 3819 3839 ret = stmmac_hwtstamp_get(dev, rq); 3820 3840 break; 3821 -#endif3822 3841 default: 3823 3842 break; 3824 3843 } .. .. @@ -4565,13 +4584,10 @@ 4565 4584 stmmac_pmt(priv, priv->hw, priv->wolopts); 4566 4585 priv->irq_wake = 1; 4567 4586 } else { 4568 - if (priv->plat->integrated_phy_power)4569 - priv->plat->integrated_phy_power(priv->plat->bsp_priv,4570 - false);4571 4587 stmmac_mac_set(priv, priv->ioaddr, false); 4572 4588 pinctrl_pm_select_sleep_state(priv->device); 4573 4589 /* Disable clock in case of PWM is off */ 4574 - if (priv->plat->clk_ptp_ref && IS_ENABLED(CONFIG_STMMAC_PTP))4590 + if (priv->plat->clk_ptp_ref)4575 4591 clk_disable_unprepare(priv->plat->clk_ptp_ref); 4576 4592 clk_disable_unprepare(priv->plat->pclk); 4577 4593 clk_disable_unprepare(priv->plat->stmmac_clk); .. .. @@ -4608,8 +4624,6 @@ 4608 4624 tx_q->cur_tx = 0; 4609 4625 tx_q->dirty_tx = 0; 4610 4626 tx_q->mss = 0; 4611 -4612 - netdev_tx_reset_queue(netdev_get_tx_queue(priv->dev, queue));4613 4627 } 4614 4628 } 4615 4629 .. .. @@ -4627,6 +4641,7 @@ 4627 4641 if (!netif_running(ndev)) 4628 4642 return 0; 4629 4643 4644 + printk("troy test %s start .... \n",__func__);4630 4645 /* Power Down bit, into the PM register, is cleared 4631 4646 * automatically as soon as a magic packet or a Wake-up frame 4632 4647 * is received. Anyway, it's better to manually clear .. .. @@ -4643,14 +4658,11 @@ 4643 4658 /* enable the clk previously disabled */ 4644 4659 clk_prepare_enable(priv->plat->stmmac_clk); 4645 4660 clk_prepare_enable(priv->plat->pclk); 4646 - if (priv->plat->clk_ptp_ref && IS_ENABLED(CONFIG_STMMAC_PTP))4661 + if (priv->plat->clk_ptp_ref)4647 4662 clk_prepare_enable(priv->plat->clk_ptp_ref); 4648 4663 /* reset the phy so that it's ready */ 4649 4664 if (priv->mii) 4650 4665 stmmac_mdio_reset(priv->mii); 4651 - if (priv->plat->integrated_phy_power)4652 - priv->plat->integrated_phy_power(priv->plat->bsp_priv,4653 - true);4654 4666 } 4655 4667 4656 4668 mutex_lock(&priv->lock); .. .. @@ -4672,6 +4684,8 @@ 4672 4684 4673 4685 if (ndev->phydev) 4674 4686 phy_start(ndev->phydev); 4687 + printk("troy test %s end .... \n",__func__);4688 + rtl8211F_led_control(ndev->phydev);4675 4689 4676 4690 return 0; 4677 4691 } kernel/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c
.. .. @@ -469,14 +469,6 @@ 469 469 plat->pmt = 1; 470 470 } 471 471 472 - if (of_device_is_compatible(np, "snps,dwmac-3.40a")) {473 - plat->has_gmac = 1;474 - plat->enh_desc = 1;475 - plat->tx_coe = 1;476 - plat->bugged_jumbo = 1;477 - plat->pmt = 1;478 - }479 -480 472 if (of_device_is_compatible(np, "snps,dwmac-4.00") || 481 473 of_device_is_compatible(np, "snps,dwmac-4.10a") || 482 474 of_device_is_compatible(np, "snps,dwmac-4.20a")) { kernel/drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c
.. .. @@ -314,12 +314,7 @@ 314 314 315 315 priv->plat->tx_queues_cfg[queue].mode_to_use = MTL_QUEUE_AVB; 316 316 } else if (!qopt->enable) { 317 - ret = stmmac_dma_qmode(priv, priv->ioaddr, queue,318 - MTL_QUEUE_DCB);319 - if (ret)320 - return ret;321 -322 - priv->plat->tx_queues_cfg[queue].mode_to_use = MTL_QUEUE_DCB;317 + return stmmac_dma_qmode(priv, priv->ioaddr, queue, MTL_QUEUE_DCB);323 318 } 324 319 325 320 /* Port Transmit Rate and Speed Divider */ kernel/include/linux/device.h
.. .. @@ -1711,6 +1711,17 @@ 1711 1711 } \ 1712 1712 module_exit(__driver##_exit); 1713 1713 1714 +#define module_driver1(__driver, __register, __unregister, ...) \1715 +static int __init __driver##_init(void) \1716 +{ \1717 + return __register(&(__driver) , ##__VA_ARGS__); \1718 +} \1719 +arch_initcall(__driver##_init); \1720 +static void __exit __driver##_exit(void) \1721 +{ \1722 + __unregister(&(__driver) , ##__VA_ARGS__); \1723 +} \1724 +module_exit(__driver##_exit);1714 1725 /** 1715 1726 * builtin_driver() - Helper macro for drivers that don't do anything 1716 1727 * special in init and have no exit. This eliminates some boilerplate. kernel/include/linux/platform_device.h
.. .. @@ -234,6 +234,10 @@ 234 234 module_driver(__platform_driver, platform_driver_register, \ 235 235 platform_driver_unregister) 236 236 237 +#define module_platform_driver1(__platform_driver) \238 + module_driver1(__platform_driver, platform_driver_register, \239 + platform_driver_unregister)240 +237 241 /* builtin_platform_driver() - Helper macro for builtin drivers that 238 242 * don't do anything special in driver init. This eliminates some 239 243 * boilerplate. Each driver may only use this macro once, and rockdev/parameter.txt
.. .. @@ -0,0 +1 @@ 1 +../device/rockchip/rk356x/parameter-buildroot-fit.txt