hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/net/ethernet/natsemi/ns83820.c
....@@ -1,3 +1,4 @@
1
+// SPDX-License-Identifier: GPL-2.0-or-later
12 #define VERSION "0.23"
23 /* ns83820.c by Benjamin LaHaise with contributions.
34 *
....@@ -9,21 +10,6 @@
910 * Copyright 2001, 2002 Red Hat.
1011 *
1112 * Mmmm, chocolate vanilla mocha...
12
- *
13
- *
14
- * This program is free software; you can redistribute it and/or modify
15
- * it under the terms of the GNU General Public License as published by
16
- * the Free Software Foundation; either version 2 of the License, or
17
- * (at your option) any later version.
18
- *
19
- * This program is distributed in the hope that it will be useful,
20
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
21
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22
- * GNU General Public License for more details.
23
- *
24
- * You should have received a copy of the GNU General Public License
25
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
26
- *
2713 *
2814 * ChangeLog
2915 * =========
....@@ -540,8 +526,8 @@
540526
541527 dev->rx_info.next_empty = (next_empty + 1) % NR_RX_DESC;
542528 cmdsts = REAL_RX_BUF_SIZE | CMDSTS_INTR;
543
- buf = pci_map_single(dev->pci_dev, skb->data,
544
- REAL_RX_BUF_SIZE, PCI_DMA_FROMDEVICE);
529
+ buf = dma_map_single(&dev->pci_dev->dev, skb->data, REAL_RX_BUF_SIZE,
530
+ DMA_FROM_DEVICE);
545531 build_rx_desc(dev, sg, 0, buf, cmdsts, 0);
546532 /* update link of previous rx */
547533 if (likely(next_empty != dev->rx_info.next_rx))
....@@ -614,12 +600,14 @@
614600 struct ns83820 *dev = PRIV(ndev);
615601 static const char *speeds[] = { "10", "100", "1000", "1000(?)", "1000F" };
616602 u32 cfg, new_cfg;
617
- u32 tbisr, tanar, tanlpar;
603
+ u32 tanar, tanlpar;
618604 int speed, fullduplex, newlinkstate;
619605
620606 cfg = readl(dev->base + CFG) ^ SPDSTS_POLARITY;
621607
622608 if (dev->CFG_cache & CFG_TBI_EN) {
609
+ u32 __maybe_unused tbisr;
610
+
623611 /* we have an optical transceiver */
624612 tbisr = readl(dev->base + TBISR);
625613 tanar = readl(dev->base + TANAR);
....@@ -872,8 +860,8 @@
872860 mb();
873861 clear_rx_desc(dev, next_rx);
874862
875
- pci_unmap_single(dev->pci_dev, bufptr,
876
- RX_BUF_SIZE, PCI_DMA_FROMDEVICE);
863
+ dma_unmap_single(&dev->pci_dev->dev, bufptr, RX_BUF_SIZE,
864
+ DMA_FROM_DEVICE);
877865 len = cmdsts & CMDSTS_LEN_MASK;
878866 #ifdef NS83820_VLAN_ACCEL_SUPPORT
879867 /* NH: As was mentioned below, this chip is kinda
....@@ -937,10 +925,10 @@
937925 spin_unlock_irqrestore(&info->lock, flags);
938926 }
939927
940
-static void rx_action(unsigned long _dev)
928
+static void rx_action(struct tasklet_struct *t)
941929 {
942
- struct net_device *ndev = (void *)_dev;
943
- struct ns83820 *dev = PRIV(ndev);
930
+ struct ns83820 *dev = from_tasklet(dev, t, rx_tasklet);
931
+ struct net_device *ndev = dev->ndev;
944932 rx_irq(ndev);
945933 writel(ihr, dev->base + IHR);
946934
....@@ -999,17 +987,13 @@
999987 len = cmdsts & CMDSTS_LEN_MASK;
1000988 addr = desc_addr_get(desc + DESC_BUFPTR);
1001989 if (skb) {
1002
- pci_unmap_single(dev->pci_dev,
1003
- addr,
1004
- len,
1005
- PCI_DMA_TODEVICE);
1006
- dev_kfree_skb_irq(skb);
990
+ dma_unmap_single(&dev->pci_dev->dev, addr, len,
991
+ DMA_TO_DEVICE);
992
+ dev_consume_skb_irq(skb);
1007993 atomic_dec(&dev->nr_tx_skbs);
1008994 } else
1009
- pci_unmap_page(dev->pci_dev,
1010
- addr,
1011
- len,
1012
- PCI_DMA_TODEVICE);
995
+ dma_unmap_page(&dev->pci_dev->dev, addr, len,
996
+ DMA_TO_DEVICE);
1013997
1014998 tx_done_idx = (tx_done_idx + 1) % NR_TX_DESC;
1015999 dev->tx_done_idx = tx_done_idx;
....@@ -1037,10 +1021,10 @@
10371021 dev->tx_skbs[i] = NULL;
10381022 if (skb) {
10391023 __le32 *desc = dev->tx_descs + (i * DESC_SIZE);
1040
- pci_unmap_single(dev->pci_dev,
1041
- desc_addr_get(desc + DESC_BUFPTR),
1042
- le32_to_cpu(desc[DESC_CMDSTS]) & CMDSTS_LEN_MASK,
1043
- PCI_DMA_TODEVICE);
1024
+ dma_unmap_single(&dev->pci_dev->dev,
1025
+ desc_addr_get(desc + DESC_BUFPTR),
1026
+ le32_to_cpu(desc[DESC_CMDSTS]) & CMDSTS_LEN_MASK,
1027
+ DMA_TO_DEVICE);
10441028 dev_kfree_skb_irq(skb);
10451029 atomic_dec(&dev->nr_tx_skbs);
10461030 }
....@@ -1135,7 +1119,8 @@
11351119 len = skb->len;
11361120 if (nr_frags)
11371121 len -= skb->data_len;
1138
- buf = pci_map_single(dev->pci_dev, skb->data, len, PCI_DMA_TODEVICE);
1122
+ buf = dma_map_single(&dev->pci_dev->dev, skb->data, len,
1123
+ DMA_TO_DEVICE);
11391124
11401125 first_desc = dev->tx_descs + (free_idx * DESC_SIZE);
11411126
....@@ -1221,7 +1206,7 @@
12211206 struct ethtool_link_ksettings *cmd)
12221207 {
12231208 struct ns83820 *dev = PRIV(ndev);
1224
- u32 cfg, tanar, tbicr;
1209
+ u32 cfg, tbicr;
12251210 int fullduplex = 0;
12261211 u32 supported;
12271212
....@@ -1240,7 +1225,7 @@
12401225
12411226 /* read current configuration */
12421227 cfg = readl(dev->base + CFG) ^ SPDSTS_POLARITY;
1243
- tanar = readl(dev->base + TANAR);
1228
+ readl(dev->base + TANAR);
12441229 tbicr = readl(dev->base + TBICR);
12451230
12461231 fullduplex = (cfg & CFG_DUPSTS) ? 1 : 0;
....@@ -1563,7 +1548,7 @@
15631548 return 0;
15641549 }
15651550
1566
-static void ns83820_tx_timeout(struct net_device *ndev)
1551
+static void ns83820_tx_timeout(struct net_device *ndev, unsigned int txqueue)
15671552 {
15681553 struct ns83820 *dev = PRIV(ndev);
15691554 u32 tx_done_idx;
....@@ -1617,7 +1602,7 @@
16171602 ndev->name,
16181603 dev->tx_done_idx, dev->tx_free_idx,
16191604 atomic_read(&dev->nr_tx_skbs));
1620
- ns83820_tx_timeout(ndev);
1605
+ ns83820_tx_timeout(ndev, UINT_MAX);
16211606 }
16221607
16231608 mod_timer(&dev->tx_watchdog, jiffies + 2*HZ);
....@@ -1869,56 +1854,28 @@
18691854 static void ns83820_probe_phy(struct net_device *ndev)
18701855 {
18711856 struct ns83820 *dev = PRIV(ndev);
1872
- static int first;
1873
- int i;
1874
-#define MII_PHYIDR1 0x02
1875
-#define MII_PHYIDR2 0x03
1857
+ int j;
1858
+ unsigned a, b;
18761859
1877
-#if 0
1878
- if (!first) {
1879
- unsigned tmp;
1880
- ns83820_mii_read_reg(dev, 1, 0x09);
1881
- ns83820_mii_write_reg(dev, 1, 0x10, 0x0d3e);
1882
-
1883
- tmp = ns83820_mii_read_reg(dev, 1, 0x00);
1884
- ns83820_mii_write_reg(dev, 1, 0x00, tmp | 0x8000);
1885
- udelay(1300);
1886
- ns83820_mii_read_reg(dev, 1, 0x09);
1860
+ for (j = 0; j < 0x16; j += 4) {
1861
+ dprintk("%s: [0x%02x] %04x %04x %04x %04x\n",
1862
+ ndev->name, j,
1863
+ ns83820_mii_read_reg(dev, 1, 0 + j),
1864
+ ns83820_mii_read_reg(dev, 1, 1 + j),
1865
+ ns83820_mii_read_reg(dev, 1, 2 + j),
1866
+ ns83820_mii_read_reg(dev, 1, 3 + j)
1867
+ );
18871868 }
1888
-#endif
1889
- first = 1;
18901869
1891
- for (i=1; i<2; i++) {
1892
- int j;
1893
- unsigned a, b;
1894
- a = ns83820_mii_read_reg(dev, i, MII_PHYIDR1);
1895
- b = ns83820_mii_read_reg(dev, i, MII_PHYIDR2);
1870
+ /* read firmware version: memory addr is 0x8402 and 0x8403 */
1871
+ ns83820_mii_write_reg(dev, 1, 0x16, 0x000d);
1872
+ ns83820_mii_write_reg(dev, 1, 0x1e, 0x810e);
1873
+ a = ns83820_mii_read_reg(dev, 1, 0x1d);
18961874
1897
- //printk("%s: phy %d: 0x%04x 0x%04x\n",
1898
- // ndev->name, i, a, b);
1899
-
1900
- for (j=0; j<0x16; j+=4) {
1901
- dprintk("%s: [0x%02x] %04x %04x %04x %04x\n",
1902
- ndev->name, j,
1903
- ns83820_mii_read_reg(dev, i, 0 + j),
1904
- ns83820_mii_read_reg(dev, i, 1 + j),
1905
- ns83820_mii_read_reg(dev, i, 2 + j),
1906
- ns83820_mii_read_reg(dev, i, 3 + j)
1907
- );
1908
- }
1909
- }
1910
- {
1911
- unsigned a, b;
1912
- /* read firmware version: memory addr is 0x8402 and 0x8403 */
1913
- ns83820_mii_write_reg(dev, 1, 0x16, 0x000d);
1914
- ns83820_mii_write_reg(dev, 1, 0x1e, 0x810e);
1915
- a = ns83820_mii_read_reg(dev, 1, 0x1d);
1916
-
1917
- ns83820_mii_write_reg(dev, 1, 0x16, 0x000d);
1918
- ns83820_mii_write_reg(dev, 1, 0x1e, 0x810e);
1919
- b = ns83820_mii_read_reg(dev, 1, 0x1d);
1920
- dprintk("version: 0x%04x 0x%04x\n", a, b);
1921
- }
1875
+ ns83820_mii_write_reg(dev, 1, 0x16, 0x000d);
1876
+ ns83820_mii_write_reg(dev, 1, 0x1e, 0x810e);
1877
+ b = ns83820_mii_read_reg(dev, 1, 0x1d);
1878
+ dprintk("version: 0x%04x 0x%04x\n", a, b);
19221879 }
19231880 #endif
19241881
....@@ -1944,12 +1901,12 @@
19441901
19451902 /* See if we can set the dma mask early on; failure is fatal. */
19461903 if (sizeof(dma_addr_t) == 8 &&
1947
- !pci_set_dma_mask(pci_dev, DMA_BIT_MASK(64))) {
1904
+ !dma_set_mask(&pci_dev->dev, DMA_BIT_MASK(64))) {
19481905 using_dac = 1;
1949
- } else if (!pci_set_dma_mask(pci_dev, DMA_BIT_MASK(32))) {
1906
+ } else if (!dma_set_mask(&pci_dev->dev, DMA_BIT_MASK(32))) {
19501907 using_dac = 0;
19511908 } else {
1952
- dev_warn(&pci_dev->dev, "pci_set_dma_mask failed!\n");
1909
+ dev_warn(&pci_dev->dev, "dma_set_mask failed!\n");
19531910 return -ENODEV;
19541911 }
19551912
....@@ -1969,7 +1926,7 @@
19691926 SET_NETDEV_DEV(ndev, &pci_dev->dev);
19701927
19711928 INIT_WORK(&dev->tq_refill, queue_refill);
1972
- tasklet_init(&dev->rx_tasklet, rx_action, (unsigned long)ndev);
1929
+ tasklet_setup(&dev->rx_tasklet, rx_action);
19731930
19741931 err = pci_enable_device(pci_dev);
19751932 if (err) {
....@@ -1979,11 +1936,13 @@
19791936
19801937 pci_set_master(pci_dev);
19811938 addr = pci_resource_start(pci_dev, 1);
1982
- dev->base = ioremap_nocache(addr, PAGE_SIZE);
1983
- dev->tx_descs = pci_alloc_consistent(pci_dev,
1984
- 4 * DESC_SIZE * NR_TX_DESC, &dev->tx_phy_descs);
1985
- dev->rx_info.descs = pci_alloc_consistent(pci_dev,
1986
- 4 * DESC_SIZE * NR_RX_DESC, &dev->rx_info.phy_descs);
1939
+ dev->base = ioremap(addr, PAGE_SIZE);
1940
+ dev->tx_descs = dma_alloc_coherent(&pci_dev->dev,
1941
+ 4 * DESC_SIZE * NR_TX_DESC,
1942
+ &dev->tx_phy_descs, GFP_KERNEL);
1943
+ dev->rx_info.descs = dma_alloc_coherent(&pci_dev->dev,
1944
+ 4 * DESC_SIZE * NR_RX_DESC,
1945
+ &dev->rx_info.phy_descs, GFP_KERNEL);
19871946 err = -ENOMEM;
19881947 if (!dev->base || !dev->tx_descs || !dev->rx_info.descs)
19891948 goto out_disable;
....@@ -2225,8 +2184,10 @@
22252184 out_disable:
22262185 if (dev->base)
22272186 iounmap(dev->base);
2228
- pci_free_consistent(pci_dev, 4 * DESC_SIZE * NR_TX_DESC, dev->tx_descs, dev->tx_phy_descs);
2229
- pci_free_consistent(pci_dev, 4 * DESC_SIZE * NR_RX_DESC, dev->rx_info.descs, dev->rx_info.phy_descs);
2187
+ dma_free_coherent(&pci_dev->dev, 4 * DESC_SIZE * NR_TX_DESC,
2188
+ dev->tx_descs, dev->tx_phy_descs);
2189
+ dma_free_coherent(&pci_dev->dev, 4 * DESC_SIZE * NR_RX_DESC,
2190
+ dev->rx_info.descs, dev->rx_info.phy_descs);
22302191 pci_disable_device(pci_dev);
22312192 out_free:
22322193 free_netdev(ndev);
....@@ -2247,10 +2208,10 @@
22472208 unregister_netdev(ndev);
22482209 free_irq(dev->pci_dev->irq, ndev);
22492210 iounmap(dev->base);
2250
- pci_free_consistent(dev->pci_dev, 4 * DESC_SIZE * NR_TX_DESC,
2251
- dev->tx_descs, dev->tx_phy_descs);
2252
- pci_free_consistent(dev->pci_dev, 4 * DESC_SIZE * NR_RX_DESC,
2253
- dev->rx_info.descs, dev->rx_info.phy_descs);
2211
+ dma_free_coherent(&dev->pci_dev->dev, 4 * DESC_SIZE * NR_TX_DESC,
2212
+ dev->tx_descs, dev->tx_phy_descs);
2213
+ dma_free_coherent(&dev->pci_dev->dev, 4 * DESC_SIZE * NR_RX_DESC,
2214
+ dev->rx_info.descs, dev->rx_info.phy_descs);
22542215 pci_disable_device(dev->pci_dev);
22552216 free_netdev(ndev);
22562217 }