hc
2023-12-09 b22da3d8526a935aa31e086e63f60ff3246cb61c
kernel/drivers/net/ethernet/sun/cassini.c
....@@ -237,12 +237,6 @@
237237 spin_lock_nested(&cp->tx_lock[i], i);
238238 }
239239
240
-static inline void cas_lock_all(struct cas *cp)
241
-{
242
- spin_lock_irq(&cp->lock);
243
- cas_lock_tx(cp);
244
-}
245
-
246240 /* WTZ: QA was finding deadlock problems with the previous
247241 * versions after long test runs with multiple cards per machine.
248242 * See if replacing cas_lock_all with safer versions helps. The
....@@ -264,12 +258,6 @@
264258
265259 for (i = N_TX_RINGS; i > 0; i--)
266260 spin_unlock(&cp->tx_lock[i - 1]);
267
-}
268
-
269
-static inline void cas_unlock_all(struct cas *cp)
270
-{
271
- cas_unlock_tx(cp);
272
- spin_unlock_irq(&cp->lock);
273261 }
274262
275263 #define cas_unlock_all_restore(cp, flags) \
....@@ -455,8 +443,8 @@
455443 /* cp->lock held. note: the last put_page will free the buffer */
456444 static int cas_page_free(struct cas *cp, cas_page_t *page)
457445 {
458
- pci_unmap_page(cp->pdev, page->dma_addr, cp->page_size,
459
- PCI_DMA_FROMDEVICE);
446
+ dma_unmap_page(&cp->pdev->dev, page->dma_addr, cp->page_size,
447
+ DMA_FROM_DEVICE);
460448 __free_pages(page->buffer, cp->page_order);
461449 kfree(page);
462450 return 0;
....@@ -466,8 +454,8 @@
466454 #define RX_USED_ADD(x, y) ((x)->used += (y))
467455 #define RX_USED_SET(x, y) ((x)->used = (y))
468456 #else
469
-#define RX_USED_ADD(x, y)
470
-#define RX_USED_SET(x, y)
457
+#define RX_USED_ADD(x, y) do { } while(0)
458
+#define RX_USED_SET(x, y) do { } while(0)
471459 #endif
472460
473461 /* local page allocation routines for the receive buffers. jumbo pages
....@@ -486,8 +474,8 @@
486474 page->buffer = alloc_pages(flags, cp->page_order);
487475 if (!page->buffer)
488476 goto page_err;
489
- page->dma_addr = pci_map_page(cp->pdev, page->buffer, 0,
490
- cp->page_size, PCI_DMA_FROMDEVICE);
477
+ page->dma_addr = dma_map_page(&cp->pdev->dev, page->buffer, 0,
478
+ cp->page_size, DMA_FROM_DEVICE);
491479 return page;
492480
493481 page_err:
....@@ -1716,34 +1704,26 @@
17161704 pr_cont("\n");
17171705
17181706 if (stat & PCI_ERR_OTHER) {
1719
- u16 cfg;
1707
+ int pci_errs;
17201708
17211709 /* Interrogate PCI config space for the
17221710 * true cause.
17231711 */
1724
- pci_read_config_word(cp->pdev, PCI_STATUS, &cfg);
1725
- netdev_err(dev, "Read PCI cfg space status [%04x]\n", cfg);
1726
- if (cfg & PCI_STATUS_PARITY)
1727
- netdev_err(dev, "PCI parity error detected\n");
1728
- if (cfg & PCI_STATUS_SIG_TARGET_ABORT)
1729
- netdev_err(dev, "PCI target abort\n");
1730
- if (cfg & PCI_STATUS_REC_TARGET_ABORT)
1731
- netdev_err(dev, "PCI master acks target abort\n");
1732
- if (cfg & PCI_STATUS_REC_MASTER_ABORT)
1733
- netdev_err(dev, "PCI master abort\n");
1734
- if (cfg & PCI_STATUS_SIG_SYSTEM_ERROR)
1735
- netdev_err(dev, "PCI system error SERR#\n");
1736
- if (cfg & PCI_STATUS_DETECTED_PARITY)
1737
- netdev_err(dev, "PCI parity error\n");
1712
+ pci_errs = pci_status_get_and_clear_errors(cp->pdev);
17381713
1739
- /* Write the error bits back to clear them. */
1740
- cfg &= (PCI_STATUS_PARITY |
1741
- PCI_STATUS_SIG_TARGET_ABORT |
1742
- PCI_STATUS_REC_TARGET_ABORT |
1743
- PCI_STATUS_REC_MASTER_ABORT |
1744
- PCI_STATUS_SIG_SYSTEM_ERROR |
1745
- PCI_STATUS_DETECTED_PARITY);
1746
- pci_write_config_word(cp->pdev, PCI_STATUS, cfg);
1714
+ netdev_err(dev, "PCI status errors[%04x]\n", pci_errs);
1715
+ if (pci_errs & PCI_STATUS_PARITY)
1716
+ netdev_err(dev, "PCI parity error detected\n");
1717
+ if (pci_errs & PCI_STATUS_SIG_TARGET_ABORT)
1718
+ netdev_err(dev, "PCI target abort\n");
1719
+ if (pci_errs & PCI_STATUS_REC_TARGET_ABORT)
1720
+ netdev_err(dev, "PCI master acks target abort\n");
1721
+ if (pci_errs & PCI_STATUS_REC_MASTER_ABORT)
1722
+ netdev_err(dev, "PCI master abort\n");
1723
+ if (pci_errs & PCI_STATUS_SIG_SYSTEM_ERROR)
1724
+ netdev_err(dev, "PCI system error SERR#\n");
1725
+ if (pci_errs & PCI_STATUS_DETECTED_PARITY)
1726
+ netdev_err(dev, "PCI parity error\n");
17471727 }
17481728
17491729 /* For all PCI errors, we should reset the chip. */
....@@ -1883,8 +1863,8 @@
18831863 daddr = le64_to_cpu(txd->buffer);
18841864 dlen = CAS_VAL(TX_DESC_BUFLEN,
18851865 le64_to_cpu(txd->control));
1886
- pci_unmap_page(cp->pdev, daddr, dlen,
1887
- PCI_DMA_TODEVICE);
1866
+ dma_unmap_page(&cp->pdev->dev, daddr, dlen,
1867
+ DMA_TO_DEVICE);
18881868 entry = TX_DESC_NEXT(ring, entry);
18891869
18901870 /* tiny buffer may follow */
....@@ -1898,7 +1878,7 @@
18981878 cp->net_stats[ring].tx_packets++;
18991879 cp->net_stats[ring].tx_bytes += skb->len;
19001880 spin_unlock(&cp->stat_lock[ring]);
1901
- dev_kfree_skb_irq(skb);
1881
+ dev_consume_skb_irq(skb);
19021882 }
19031883 cp->tx_old[ring] = entry;
19041884
....@@ -1977,12 +1957,13 @@
19771957 i = hlen;
19781958 if (!dlen) /* attach FCS */
19791959 i += cp->crc_size;
1980
- pci_dma_sync_single_for_cpu(cp->pdev, page->dma_addr + off, i,
1981
- PCI_DMA_FROMDEVICE);
1960
+ dma_sync_single_for_cpu(&cp->pdev->dev, page->dma_addr + off,
1961
+ i, DMA_FROM_DEVICE);
19821962 addr = cas_page_map(page->buffer);
19831963 memcpy(p, addr + off, i);
1984
- pci_dma_sync_single_for_device(cp->pdev, page->dma_addr + off, i,
1985
- PCI_DMA_FROMDEVICE);
1964
+ dma_sync_single_for_device(&cp->pdev->dev,
1965
+ page->dma_addr + off, i,
1966
+ DMA_FROM_DEVICE);
19861967 cas_page_unmap(addr);
19871968 RX_USED_ADD(page, 0x100);
19881969 p += hlen;
....@@ -2008,16 +1989,17 @@
20081989 i = hlen;
20091990 if (i == dlen) /* attach FCS */
20101991 i += cp->crc_size;
2011
- pci_dma_sync_single_for_cpu(cp->pdev, page->dma_addr + off, i,
2012
- PCI_DMA_FROMDEVICE);
1992
+ dma_sync_single_for_cpu(&cp->pdev->dev, page->dma_addr + off,
1993
+ i, DMA_FROM_DEVICE);
20131994
20141995 /* make sure we always copy a header */
20151996 swivel = 0;
20161997 if (p == (char *) skb->data) { /* not split */
20171998 addr = cas_page_map(page->buffer);
20181999 memcpy(p, addr + off, RX_COPY_MIN);
2019
- pci_dma_sync_single_for_device(cp->pdev, page->dma_addr + off, i,
2020
- PCI_DMA_FROMDEVICE);
2000
+ dma_sync_single_for_device(&cp->pdev->dev,
2001
+ page->dma_addr + off, i,
2002
+ DMA_FROM_DEVICE);
20212003 cas_page_unmap(addr);
20222004 off += RX_COPY_MIN;
20232005 swivel = RX_COPY_MIN;
....@@ -2034,7 +2016,7 @@
20342016
20352017 __skb_frag_set_page(frag, page->buffer);
20362018 __skb_frag_ref(frag);
2037
- frag->page_offset = off;
2019
+ skb_frag_off_set(frag, off);
20382020 skb_frag_size_set(frag, hlen - swivel);
20392021
20402022 /* any more data? */
....@@ -2044,12 +2026,14 @@
20442026
20452027 i = CAS_VAL(RX_COMP2_NEXT_INDEX, words[1]);
20462028 page = cp->rx_pages[CAS_VAL(RX_INDEX_RING, i)][CAS_VAL(RX_INDEX_NUM, i)];
2047
- pci_dma_sync_single_for_cpu(cp->pdev, page->dma_addr,
2048
- hlen + cp->crc_size,
2049
- PCI_DMA_FROMDEVICE);
2050
- pci_dma_sync_single_for_device(cp->pdev, page->dma_addr,
2051
- hlen + cp->crc_size,
2052
- PCI_DMA_FROMDEVICE);
2029
+ dma_sync_single_for_cpu(&cp->pdev->dev,
2030
+ page->dma_addr,
2031
+ hlen + cp->crc_size,
2032
+ DMA_FROM_DEVICE);
2033
+ dma_sync_single_for_device(&cp->pdev->dev,
2034
+ page->dma_addr,
2035
+ hlen + cp->crc_size,
2036
+ DMA_FROM_DEVICE);
20532037
20542038 skb_shinfo(skb)->nr_frags++;
20552039 skb->data_len += hlen;
....@@ -2058,7 +2042,7 @@
20582042
20592043 __skb_frag_set_page(frag, page->buffer);
20602044 __skb_frag_ref(frag);
2061
- frag->page_offset = 0;
2045
+ skb_frag_off_set(frag, 0);
20622046 skb_frag_size_set(frag, hlen);
20632047 RX_USED_ADD(page, hlen + cp->crc_size);
20642048 }
....@@ -2086,12 +2070,13 @@
20862070 i = hlen;
20872071 if (i == dlen) /* attach FCS */
20882072 i += cp->crc_size;
2089
- pci_dma_sync_single_for_cpu(cp->pdev, page->dma_addr + off, i,
2090
- PCI_DMA_FROMDEVICE);
2073
+ dma_sync_single_for_cpu(&cp->pdev->dev, page->dma_addr + off,
2074
+ i, DMA_FROM_DEVICE);
20912075 addr = cas_page_map(page->buffer);
20922076 memcpy(p, addr + off, i);
2093
- pci_dma_sync_single_for_device(cp->pdev, page->dma_addr + off, i,
2094
- PCI_DMA_FROMDEVICE);
2077
+ dma_sync_single_for_device(&cp->pdev->dev,
2078
+ page->dma_addr + off, i,
2079
+ DMA_FROM_DEVICE);
20952080 cas_page_unmap(addr);
20962081 if (p == (char *) skb->data) /* not split */
20972082 RX_USED_ADD(page, cp->mtu_stride);
....@@ -2103,14 +2088,16 @@
21032088 p += hlen;
21042089 i = CAS_VAL(RX_COMP2_NEXT_INDEX, words[1]);
21052090 page = cp->rx_pages[CAS_VAL(RX_INDEX_RING, i)][CAS_VAL(RX_INDEX_NUM, i)];
2106
- pci_dma_sync_single_for_cpu(cp->pdev, page->dma_addr,
2107
- dlen + cp->crc_size,
2108
- PCI_DMA_FROMDEVICE);
2091
+ dma_sync_single_for_cpu(&cp->pdev->dev,
2092
+ page->dma_addr,
2093
+ dlen + cp->crc_size,
2094
+ DMA_FROM_DEVICE);
21092095 addr = cas_page_map(page->buffer);
21102096 memcpy(p, addr, dlen + cp->crc_size);
2111
- pci_dma_sync_single_for_device(cp->pdev, page->dma_addr,
2112
- dlen + cp->crc_size,
2113
- PCI_DMA_FROMDEVICE);
2097
+ dma_sync_single_for_device(&cp->pdev->dev,
2098
+ page->dma_addr,
2099
+ dlen + cp->crc_size,
2100
+ DMA_FROM_DEVICE);
21142101 cas_page_unmap(addr);
21152102 RX_USED_ADD(page, dlen + cp->crc_size);
21162103 }
....@@ -2291,7 +2278,7 @@
22912278 drops = 0;
22922279 while (1) {
22932280 struct cas_rx_comp *rxc = rxcs + entry;
2294
- struct sk_buff *uninitialized_var(skb);
2281
+ struct sk_buff *skb;
22952282 int type, len;
22962283 u64 words[4];
22972284 int i, dring;
....@@ -2666,7 +2653,7 @@
26662653 }
26672654 #endif
26682655
2669
-static void cas_tx_timeout(struct net_device *dev)
2656
+static void cas_tx_timeout(struct net_device *dev, unsigned int txqueue)
26702657 {
26712658 struct cas *cp = netdev_priv(dev);
26722659
....@@ -2786,9 +2773,8 @@
27862773
27872774 nr_frags = skb_shinfo(skb)->nr_frags;
27882775 len = skb_headlen(skb);
2789
- mapping = pci_map_page(cp->pdev, virt_to_page(skb->data),
2790
- offset_in_page(skb->data), len,
2791
- PCI_DMA_TODEVICE);
2776
+ mapping = dma_map_page(&cp->pdev->dev, virt_to_page(skb->data),
2777
+ offset_in_page(skb->data), len, DMA_TO_DEVICE);
27922778
27932779 tentry = entry;
27942780 tabort = cas_calc_tabort(cp, (unsigned long) skb->data, len);
....@@ -2816,7 +2802,7 @@
28162802 mapping = skb_frag_dma_map(&cp->pdev->dev, fragp, 0, len,
28172803 DMA_TO_DEVICE);
28182804
2819
- tabort = cas_calc_tabort(cp, fragp->page_offset, len);
2805
+ tabort = cas_calc_tabort(cp, skb_frag_off(fragp), len);
28202806 if (unlikely(tabort)) {
28212807 void *addr;
28222808
....@@ -2827,7 +2813,7 @@
28272813
28282814 addr = cas_page_map(skb_frag_page(fragp));
28292815 memcpy(tx_tiny_buf(cp, ring, entry),
2830
- addr + fragp->page_offset + len - tabort,
2816
+ addr + skb_frag_off(fragp) + len - tabort,
28312817 tabort);
28322818 cas_page_unmap(addr);
28332819 mapping = tx_tiny_map(cp, ring, entry, tentry);
....@@ -3902,8 +3888,8 @@
39023888 daddr = le64_to_cpu(txd[ent].buffer);
39033889 dlen = CAS_VAL(TX_DESC_BUFLEN,
39043890 le64_to_cpu(txd[ent].control));
3905
- pci_unmap_page(cp->pdev, daddr, dlen,
3906
- PCI_DMA_TODEVICE);
3891
+ dma_unmap_page(&cp->pdev->dev, daddr, dlen,
3892
+ DMA_TO_DEVICE);
39073893
39083894 if (frag != skb_shinfo(skb)->nr_frags) {
39093895 i++;
....@@ -4201,9 +4187,8 @@
42014187 if (!cp->tx_tiny_bufs[i])
42024188 continue;
42034189
4204
- pci_free_consistent(pdev, TX_TINY_BUF_BLOCK,
4205
- cp->tx_tiny_bufs[i],
4206
- cp->tx_tiny_dvma[i]);
4190
+ dma_free_coherent(&pdev->dev, TX_TINY_BUF_BLOCK,
4191
+ cp->tx_tiny_bufs[i], cp->tx_tiny_dvma[i]);
42074192 cp->tx_tiny_bufs[i] = NULL;
42084193 }
42094194 }
....@@ -4215,8 +4200,8 @@
42154200
42164201 for (i = 0; i < N_TX_RINGS; i++) {
42174202 cp->tx_tiny_bufs[i] =
4218
- pci_alloc_consistent(pdev, TX_TINY_BUF_BLOCK,
4219
- &cp->tx_tiny_dvma[i]);
4203
+ dma_alloc_coherent(&pdev->dev, TX_TINY_BUF_BLOCK,
4204
+ &cp->tx_tiny_dvma[i], GFP_KERNEL);
42204205 if (!cp->tx_tiny_bufs[i]) {
42214206 cas_tx_tiny_free(cp);
42224207 return -1;
....@@ -4774,7 +4759,7 @@
47744759 switch (cmd) {
47754760 case SIOCGMIIPHY: /* Get address of MII PHY in use. */
47764761 data->phy_id = cp->phy_addr;
4777
- /* Fallthrough... */
4762
+ fallthrough;
47784763
47794764 case SIOCGMIIREG: /* Read MII PHY register. */
47804765 spin_lock_irqsave(&cp->lock, flags);
....@@ -4978,10 +4963,9 @@
49784963
49794964
49804965 /* Configure DMA attributes. */
4981
- if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) {
4966
+ if (!dma_set_mask(&pdev->dev, DMA_BIT_MASK(64))) {
49824967 pci_using_dac = 1;
4983
- err = pci_set_consistent_dma_mask(pdev,
4984
- DMA_BIT_MASK(64));
4968
+ err = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(64));
49854969 if (err < 0) {
49864970 dev_err(&pdev->dev, "Unable to obtain 64-bit DMA "
49874971 "for consistent allocations\n");
....@@ -4989,7 +4973,7 @@
49894973 }
49904974
49914975 } else {
4992
- err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
4976
+ err = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32));
49934977 if (err) {
49944978 dev_err(&pdev->dev, "No usable DMA configuration, "
49954979 "aborting\n");
....@@ -5067,9 +5051,9 @@
50675051 if (cp->cas_flags & CAS_FLAG_SATURN)
50685052 cas_saturn_firmware_init(cp);
50695053
5070
- cp->init_block = (struct cas_init_block *)
5071
- pci_alloc_consistent(pdev, sizeof(struct cas_init_block),
5072
- &cp->block_dvma);
5054
+ cp->init_block =
5055
+ dma_alloc_coherent(&pdev->dev, sizeof(struct cas_init_block),
5056
+ &cp->block_dvma, GFP_KERNEL);
50735057 if (!cp->init_block) {
50745058 dev_err(&pdev->dev, "Cannot allocate init block, aborting\n");
50755059 goto err_out_iounmap;
....@@ -5129,8 +5113,8 @@
51295113 return 0;
51305114
51315115 err_out_free_consistent:
5132
- pci_free_consistent(pdev, sizeof(struct cas_init_block),
5133
- cp->init_block, cp->block_dvma);
5116
+ dma_free_coherent(&pdev->dev, sizeof(struct cas_init_block),
5117
+ cp->init_block, cp->block_dvma);
51345118
51355119 err_out_iounmap:
51365120 mutex_lock(&cp->pm_mutex);
....@@ -5184,18 +5168,17 @@
51845168 cp->orig_cacheline_size);
51855169 }
51865170 #endif
5187
- pci_free_consistent(pdev, sizeof(struct cas_init_block),
5188
- cp->init_block, cp->block_dvma);
5171
+ dma_free_coherent(&pdev->dev, sizeof(struct cas_init_block),
5172
+ cp->init_block, cp->block_dvma);
51895173 pci_iounmap(pdev, cp->regs);
51905174 free_netdev(dev);
51915175 pci_release_regions(pdev);
51925176 pci_disable_device(pdev);
51935177 }
51945178
5195
-#ifdef CONFIG_PM
5196
-static int cas_suspend(struct pci_dev *pdev, pm_message_t state)
5179
+static int __maybe_unused cas_suspend(struct device *dev_d)
51975180 {
5198
- struct net_device *dev = pci_get_drvdata(pdev);
5181
+ struct net_device *dev = dev_get_drvdata(dev_d);
51995182 struct cas *cp = netdev_priv(dev);
52005183 unsigned long flags;
52015184
....@@ -5224,9 +5207,9 @@
52245207 return 0;
52255208 }
52265209
5227
-static int cas_resume(struct pci_dev *pdev)
5210
+static int __maybe_unused cas_resume(struct device *dev_d)
52285211 {
5229
- struct net_device *dev = pci_get_drvdata(pdev);
5212
+ struct net_device *dev = dev_get_drvdata(dev_d);
52305213 struct cas *cp = netdev_priv(dev);
52315214
52325215 netdev_info(dev, "resuming\n");
....@@ -5247,17 +5230,15 @@
52475230 mutex_unlock(&cp->pm_mutex);
52485231 return 0;
52495232 }
5250
-#endif /* CONFIG_PM */
5233
+
5234
+static SIMPLE_DEV_PM_OPS(cas_pm_ops, cas_suspend, cas_resume);
52515235
52525236 static struct pci_driver cas_driver = {
52535237 .name = DRV_MODULE_NAME,
52545238 .id_table = cas_pci_tbl,
52555239 .probe = cas_init_one,
52565240 .remove = cas_remove_one,
5257
-#ifdef CONFIG_PM
5258
- .suspend = cas_suspend,
5259
- .resume = cas_resume
5260
-#endif
5241
+ .driver.pm = &cas_pm_ops,
52615242 };
52625243
52635244 static int __init cas_init(void)