163
163
static inline void
164
jme_mac_rxclk_off(struct jme_adapter *jme)
166
jme->reg_gpreg1 |= GPREG1_RXCLKOFF;
167
jwrite32f(jme, JME_GPREG1, jme->reg_gpreg1);
171
jme_mac_rxclk_on(struct jme_adapter *jme)
173
jme->reg_gpreg1 &= ~GPREG1_RXCLKOFF;
174
jwrite32f(jme, JME_GPREG1, jme->reg_gpreg1);
178
jme_mac_txclk_off(struct jme_adapter *jme)
180
jme->reg_ghc &= ~(GHC_TO_CLK_SRC | GHC_TXMAC_CLK_SRC);
181
jwrite32f(jme, JME_GHC, jme->reg_ghc);
185
jme_mac_txclk_on(struct jme_adapter *jme)
187
u32 speed = jme->reg_ghc & GHC_SPEED;
188
if (speed == GHC_SPEED_1000M)
189
jme->reg_ghc |= GHC_TO_CLK_GPHY | GHC_TXMAC_CLK_GPHY;
191
jme->reg_ghc |= GHC_TO_CLK_PCIE | GHC_TXMAC_CLK_PCIE;
192
jwrite32f(jme, JME_GHC, jme->reg_ghc);
196
jme_reset_ghc_speed(struct jme_adapter *jme)
198
jme->reg_ghc &= ~(GHC_SPEED | GHC_DPX);
199
jwrite32f(jme, JME_GHC, jme->reg_ghc);
203
jme_reset_250A2_workaround(struct jme_adapter *jme)
205
jme->reg_gpreg1 &= ~(GPREG1_HALFMODEPATCH |
207
jwrite32(jme, JME_GPREG1, jme->reg_gpreg1);
211
jme_assert_ghc_reset(struct jme_adapter *jme)
213
jme->reg_ghc |= GHC_SWRST;
214
jwrite32f(jme, JME_GHC, jme->reg_ghc);
218
jme_clear_ghc_reset(struct jme_adapter *jme)
220
jme->reg_ghc &= ~GHC_SWRST;
221
jwrite32f(jme, JME_GHC, jme->reg_ghc);
164
225
jme_reset_mac_processor(struct jme_adapter *jme)
166
227
static const u32 mask[WAKEUP_FRAME_MASK_DWNR] = {0, 0, 0, 0};
171
jwrite32(jme, JME_GHC, jme->reg_ghc | GHC_SWRST);
173
jwrite32(jme, JME_GHC, jme->reg_ghc);
232
jme_reset_ghc_speed(jme);
233
jme_reset_250A2_workaround(jme);
235
jme_mac_rxclk_on(jme);
236
jme_mac_txclk_on(jme);
238
jme_assert_ghc_reset(jme);
240
jme_mac_rxclk_off(jme);
241
jme_mac_txclk_off(jme);
243
jme_clear_ghc_reset(jme);
245
jme_mac_rxclk_on(jme);
246
jme_mac_txclk_on(jme);
248
jme_mac_rxclk_off(jme);
249
jme_mac_txclk_off(jme);
175
251
jwrite32(jme, JME_RXDBA_LO, 0x00000000);
176
252
jwrite32(jme, JME_RXDBA_HI, 0x00000000);
191
267
gpreg0 = GPREG0_DEFAULT;
192
268
jwrite32(jme, JME_GPREG0, gpreg0);
193
jwrite32(jme, JME_GPREG1, GPREG1_DEFAULT);
197
jme_reset_ghc_speed(struct jme_adapter *jme)
199
jme->reg_ghc &= ~(GHC_SPEED_1000M | GHC_DPX);
200
jwrite32(jme, JME_GHC, jme->reg_ghc);
203
271
static inline void
206
274
jwrite32(jme, JME_PMCS, 0xFFFF0000 | jme->reg_pmcs);
207
275
pci_set_power_state(jme->pdev, PCI_D0);
208
pci_enable_wake(jme->pdev, PCI_D0, false);
276
device_set_wakeup_enable(&jme->pdev->dev, false);
338
406
static inline void
339
jme_set_phyfifoa(struct jme_adapter *jme)
407
jme_set_phyfifo_5level(struct jme_adapter *jme)
341
409
jme_mdio_write(jme->dev, jme->mii_if.phy_id, 27, 0x0004);
344
412
static inline void
345
jme_set_phyfifob(struct jme_adapter *jme)
413
jme_set_phyfifo_8level(struct jme_adapter *jme)
347
415
jme_mdio_write(jme->dev, jme->mii_if.phy_id, 27, 0x0000);
351
419
jme_check_link(struct net_device *netdev, int testonly)
353
421
struct jme_adapter *jme = netdev_priv(netdev);
354
u32 phylink, ghc, cnt = JME_SPDRSV_TIMEOUT, bmcr, gpreg1;
422
u32 phylink, cnt = JME_SPDRSV_TIMEOUT, bmcr;
355
423
char linkmsg[64];
415
483
jme->phylink = phylink;
417
ghc = jme->reg_ghc & ~(GHC_SPEED | GHC_DPX |
418
GHC_TO_CLK_PCIE | GHC_TXMAC_CLK_PCIE |
419
GHC_TO_CLK_GPHY | GHC_TXMAC_CLK_GPHY);
486
* The speed/duplex setting of jme->reg_ghc already cleared
487
* by jme_reset_mac_processor()
420
489
switch (phylink & PHY_LINK_SPEED_MASK) {
421
490
case PHY_LINK_SPEED_10M:
422
ghc |= GHC_SPEED_10M |
423
GHC_TO_CLK_PCIE | GHC_TXMAC_CLK_PCIE;
491
jme->reg_ghc |= GHC_SPEED_10M;
424
492
strcat(linkmsg, "10 Mbps, ");
426
494
case PHY_LINK_SPEED_100M:
427
ghc |= GHC_SPEED_100M |
428
GHC_TO_CLK_PCIE | GHC_TXMAC_CLK_PCIE;
495
jme->reg_ghc |= GHC_SPEED_100M;
429
496
strcat(linkmsg, "100 Mbps, ");
431
498
case PHY_LINK_SPEED_1000M:
432
ghc |= GHC_SPEED_1000M |
433
GHC_TO_CLK_GPHY | GHC_TXMAC_CLK_GPHY;
499
jme->reg_ghc |= GHC_SPEED_1000M;
434
500
strcat(linkmsg, "1000 Mbps, ");
440
506
if (phylink & PHY_LINK_DUPLEX) {
441
507
jwrite32(jme, JME_TXMCS, TXMCS_DEFAULT);
508
jwrite32(jme, JME_TXTRHD, TXTRHD_FULLDUPLEX);
509
jme->reg_ghc |= GHC_DPX;
444
511
jwrite32(jme, JME_TXMCS, TXMCS_DEFAULT |
446
513
TXMCS_CARRIERSENSE |
447
514
TXMCS_COLLISION);
448
jwrite32(jme, JME_TXTRHD, TXTRHD_TXPEN |
449
((0x2000 << TXTRHD_TXP_SHIFT) & TXTRHD_TXP) |
451
((8 << TXTRHD_TXRL_SHIFT) & TXTRHD_TXRL));
515
jwrite32(jme, JME_TXTRHD, TXTRHD_HALFDUPLEX);
454
gpreg1 = GPREG1_DEFAULT;
518
jwrite32(jme, JME_GHC, jme->reg_ghc);
455
520
if (is_buggy250(jme->pdev->device, jme->chiprev)) {
521
jme->reg_gpreg1 &= ~(GPREG1_HALFMODEPATCH |
456
523
if (!(phylink & PHY_LINK_DUPLEX))
457
gpreg1 |= GPREG1_HALFMODEPATCH;
524
jme->reg_gpreg1 |= GPREG1_HALFMODEPATCH;
458
525
switch (phylink & PHY_LINK_SPEED_MASK) {
459
526
case PHY_LINK_SPEED_10M:
460
jme_set_phyfifoa(jme);
461
gpreg1 |= GPREG1_RSSPATCH;
527
jme_set_phyfifo_8level(jme);
528
jme->reg_gpreg1 |= GPREG1_RSSPATCH;
463
530
case PHY_LINK_SPEED_100M:
464
jme_set_phyfifob(jme);
465
gpreg1 |= GPREG1_RSSPATCH;
531
jme_set_phyfifo_5level(jme);
532
jme->reg_gpreg1 |= GPREG1_RSSPATCH;
467
534
case PHY_LINK_SPEED_1000M:
468
jme_set_phyfifoa(jme);
535
jme_set_phyfifo_8level(jme);
475
jwrite32(jme, JME_GPREG1, gpreg1);
476
jwrite32(jme, JME_GHC, ghc);
541
jwrite32(jme, JME_GPREG1, jme->reg_gpreg1);
479
543
strcat(linkmsg, (phylink & PHY_LINK_DUPLEX) ?
480
544
"Full-Duplex, " :
613
677
* Enable TX Engine
616
jwrite32(jme, JME_TXCS, jme->reg_txcs |
680
jwrite32f(jme, JME_TXCS, jme->reg_txcs |
617
681
TXCS_SELECT_QUEUE0 |
685
* Start clock for TX MAC Processor
687
jme_mac_txclk_on(jme);
622
690
static inline void
826
899
* Setup Unicast Filter
901
jme_set_unicastaddr(jme->dev);
828
902
jme_set_multi(jme->dev);
831
905
* Enable RX Engine
834
jwrite32(jme, JME_RXCS, jme->reg_rxcs |
908
jwrite32f(jme, JME_RXCS, jme->reg_rxcs |
835
909
RXCS_QUEUESEL_Q0 |
914
* Start clock for RX MAC Processor
916
jme_mac_rxclk_on(jme);
840
919
static inline void
872
951
pr_err("Disable RX engine timeout\n");
954
* Stop clock for RX MAC Processor
956
jme_mac_rxclk_off(jme);
960
jme_udpsum(struct sk_buff *skb)
964
if (skb->len < (ETH_HLEN + sizeof(struct iphdr)))
966
if (skb->protocol != htons(ETH_P_IP))
968
skb_set_network_header(skb, ETH_HLEN);
969
if ((ip_hdr(skb)->protocol != IPPROTO_UDP) ||
970
(skb->len < (ETH_HLEN +
971
(ip_hdr(skb)->ihl << 2) +
972
sizeof(struct udphdr)))) {
973
skb_reset_network_header(skb);
976
skb_set_transport_header(skb,
977
ETH_HLEN + (ip_hdr(skb)->ihl << 2));
978
csum = udp_hdr(skb)->check;
979
skb_reset_transport_header(skb);
980
skb_reset_network_header(skb);
877
jme_rxsum_ok(struct jme_adapter *jme, u16 flags)
986
jme_rxsum_ok(struct jme_adapter *jme, u16 flags, struct sk_buff *skb)
879
988
if (!(flags & (RXWBFLAG_TCPON | RXWBFLAG_UDPON | RXWBFLAG_IPV4)))
889
998
if (unlikely((flags & (RXWBFLAG_MF | RXWBFLAG_UDPON | RXWBFLAG_UDPCS))
890
== RXWBFLAG_UDPON)) {
999
== RXWBFLAG_UDPON) && jme_udpsum(skb)) {
891
1000
if (flags & RXWBFLAG_IPV4)
892
1001
netif_err(jme, rx_err, jme->dev, "UDP Checksum error\n");
935
1044
skb_put(skb, framesize);
936
1045
skb->protocol = eth_type_trans(skb, jme->dev);
938
if (jme_rxsum_ok(jme, le16_to_cpu(rxdesc->descwb.flags)))
1047
if (jme_rxsum_ok(jme, le16_to_cpu(rxdesc->descwb.flags), skb))
939
1048
skb->ip_summed = CHECKSUM_UNNECESSARY;
941
1050
skb_checksum_none_assert(skb);
1207
1316
tasklet_disable(&jme->rxempty_task);
1209
1318
if (netif_carrier_ok(netdev)) {
1210
jme_reset_ghc_speed(jme);
1211
1319
jme_disable_rx_engine(jme);
1212
1320
jme_disable_tx_engine(jme);
1213
1321
jme_reset_mac_processor(jme);
1579
1687
static inline void
1688
jme_new_phy_on(struct jme_adapter *jme)
1692
reg = jread32(jme, JME_PHY_PWR);
1693
reg &= ~(PHY_PWR_DWN1SEL | PHY_PWR_DWN1SW |
1694
PHY_PWR_DWN2 | PHY_PWR_CLKSEL);
1695
jwrite32(jme, JME_PHY_PWR, reg);
1697
pci_read_config_dword(jme->pdev, PCI_PRIV_PE1, ®);
1698
reg &= ~PE1_GPREG0_PBG;
1699
reg |= PE1_GPREG0_ENBG;
1700
pci_write_config_dword(jme->pdev, PCI_PRIV_PE1, reg);
1704
jme_new_phy_off(struct jme_adapter *jme)
1708
reg = jread32(jme, JME_PHY_PWR);
1709
reg |= PHY_PWR_DWN1SEL | PHY_PWR_DWN1SW |
1710
PHY_PWR_DWN2 | PHY_PWR_CLKSEL;
1711
jwrite32(jme, JME_PHY_PWR, reg);
1713
pci_read_config_dword(jme->pdev, PCI_PRIV_PE1, ®);
1714
reg &= ~PE1_GPREG0_PBG;
1715
reg |= PE1_GPREG0_PDD3COLD;
1716
pci_write_config_dword(jme->pdev, PCI_PRIV_PE1, reg);
1580
1720
jme_phy_on(struct jme_adapter *jme)
1584
1724
bmcr = jme_mdio_read(jme->dev, jme->mii_if.phy_id, MII_BMCR);
1585
1725
bmcr &= ~BMCR_PDOWN;
1586
1726
jme_mdio_write(jme->dev, jme->mii_if.phy_id, MII_BMCR, bmcr);
1728
if (new_phy_power_ctrl(jme->chip_main_rev))
1729
jme_new_phy_on(jme);
1733
jme_phy_off(struct jme_adapter *jme)
1737
bmcr = jme_mdio_read(jme->dev, jme->mii_if.phy_id, MII_BMCR);
1739
jme_mdio_write(jme->dev, jme->mii_if.phy_id, MII_BMCR, bmcr);
1741
if (new_phy_power_ctrl(jme->chip_main_rev))
1742
jme_new_phy_off(jme);
1607
1763
jme_start_irq(jme);
1609
if (test_bit(JME_FLAG_SSET, &jme->flags)) {
1766
if (test_bit(JME_FLAG_SSET, &jme->flags))
1611
1767
jme_set_settings(netdev, &jme->old_ecmd);
1613
1769
jme_reset_phy_processor(jme);
1616
1771
jme_reset_link(jme);
1661
jme_phy_off(struct jme_adapter *jme)
1663
jme_mdio_write(jme->dev, jme->mii_if.phy_id, MII_BMCR, BMCR_PDOWN);
1667
1816
jme_powersave_phy(struct jme_adapter *jme)
1696
1845
tasklet_disable(&jme->rxclean_task);
1697
1846
tasklet_disable(&jme->rxempty_task);
1699
jme_reset_ghc_speed(jme);
1700
1848
jme_disable_rx_engine(jme);
1701
1849
jme_disable_tx_engine(jme);
1702
1850
jme_reset_mac_processor(jme);
1993
2141
return NETDEV_TX_OK;
2145
jme_set_unicastaddr(struct net_device *netdev)
2147
struct jme_adapter *jme = netdev_priv(netdev);
2150
val = (netdev->dev_addr[3] & 0xff) << 24 |
2151
(netdev->dev_addr[2] & 0xff) << 16 |
2152
(netdev->dev_addr[1] & 0xff) << 8 |
2153
(netdev->dev_addr[0] & 0xff);
2154
jwrite32(jme, JME_RXUMA_LO, val);
2155
val = (netdev->dev_addr[5] & 0xff) << 8 |
2156
(netdev->dev_addr[4] & 0xff);
2157
jwrite32(jme, JME_RXUMA_HI, val);
1997
2161
jme_set_macaddr(struct net_device *netdev, void *p)
1999
2163
struct jme_adapter *jme = netdev_priv(netdev);
2000
2164
struct sockaddr *addr = p;
2003
2166
if (netif_running(netdev))
2006
2169
spin_lock_bh(&jme->macaddr_lock);
2007
2170
memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len);
2009
val = (addr->sa_data[3] & 0xff) << 24 |
2010
(addr->sa_data[2] & 0xff) << 16 |
2011
(addr->sa_data[1] & 0xff) << 8 |
2012
(addr->sa_data[0] & 0xff);
2013
jwrite32(jme, JME_RXUMA_LO, val);
2014
val = (addr->sa_data[5] & 0xff) << 8 |
2015
(addr->sa_data[4] & 0xff);
2016
jwrite32(jme, JME_RXUMA_HI, val);
2171
jme_set_unicastaddr(netdev);
2017
2172
spin_unlock_bh(&jme->macaddr_lock);
2732
2889
jme->fpgaver = (chipmode & CM_FPGAVER_MASK) >> CM_FPGAVER_SHIFT;
2733
2890
jme->chiprev = (chipmode & CM_CHIPREV_MASK) >> CM_CHIPREV_SHIFT;
2891
jme->chip_main_rev = jme->chiprev & 0xF;
2892
jme->chip_sub_rev = (jme->chiprev >> 4) & 0xF;
2736
2895
static const struct net_device_ops jme_netdev_ops = {
2880
3039
jme->reg_rxmcs = RXMCS_DEFAULT;
2881
3040
jme->reg_txpfc = 0;
2882
3041
jme->reg_pmcs = PMCS_MFEN;
3042
jme->reg_gpreg1 = GPREG1_DEFAULT;
2883
3043
set_bit(JME_FLAG_TXCSUM, &jme->flags);
2884
3044
set_bit(JME_FLAG_TSO, &jme->flags);
2936
3096
jme->mii_if.mdio_write = jme_mdio_write;
2938
3098
jme_clear_pm(jme);
2939
jme_set_phyfifoa(jme);
2940
pci_read_config_byte(pdev, PCI_REVISION_ID, &jme->rev);
3099
jme_set_phyfifo_5level(jme);
3100
jme->pcirev = pdev->revision;
2941
3101
if (!jme->fpgaver)
2942
3102
jme_phy_init(jme);
2943
3103
jme_phy_off(jme);
2964
3124
goto err_out_unmap;
2967
netif_info(jme, probe, jme->dev, "%s%s ver:%x rev:%x macaddr:%pM\n",
3127
netif_info(jme, probe, jme->dev, "%s%s chiprev:%x pcirev:%x macaddr:%pM\n",
2968
3128
(jme->pdev->device == PCI_DEVICE_ID_JMICRON_JMC250) ?
2969
3129
"JMC250 Gigabit Ethernet" :
2970
3130
(jme->pdev->device == PCI_DEVICE_ID_JMICRON_JMC260) ?
2971
3131
"JMC260 Fast Ethernet" : "Unknown",
2972
3132
(jme->fpgaver != 0) ? " (FPGA)" : "",
2973
3133
(jme->fpgaver != 0) ? jme->fpgaver : jme->chiprev,
2974
jme->rev, netdev->dev_addr);
3134
jme->pcirev, netdev->dev_addr);
3016
3176
#ifdef CONFIG_PM
3018
jme_suspend(struct pci_dev *pdev, pm_message_t state)
3177
static int jme_suspend(struct device *dev)
3179
struct pci_dev *pdev = to_pci_dev(dev);
3020
3180
struct net_device *netdev = pci_get_drvdata(pdev);
3021
3181
struct jme_adapter *jme = netdev_priv(netdev);
3049
3208
tasklet_hi_enable(&jme->rxclean_task);
3050
3209
tasklet_hi_enable(&jme->rxempty_task);
3052
pci_save_state(pdev);
3053
3211
jme_powersave_phy(jme);
3054
pci_enable_wake(jme->pdev, PCI_D3hot, true);
3055
pci_set_power_state(pdev, PCI_D3hot);
3061
jme_resume(struct pci_dev *pdev)
3216
static int jme_resume(struct device *dev)
3218
struct pci_dev *pdev = to_pci_dev(dev);
3063
3219
struct net_device *netdev = pci_get_drvdata(pdev);
3064
3220
struct jme_adapter *jme = netdev_priv(netdev);
3067
pci_restore_state(pdev);
3222
jwrite32(jme, JME_PMCS, 0xFFFF0000 | jme->reg_pmcs);
3069
if (test_bit(JME_FLAG_SSET, &jme->flags)) {
3225
if (test_bit(JME_FLAG_SSET, &jme->flags))
3071
3226
jme_set_settings(netdev, &jme->old_ecmd);
3073
3228
jme_reset_phy_processor(jme);
3076
3230
jme_start_irq(jme);
3077
3231
netif_device_attach(netdev);