.. | .. |
---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-only |
---|
1 | 2 | /* |
---|
2 | 3 | * New driver for Marvell Yukon 2 chipset. |
---|
3 | 4 | * Based on earlier sk98lin, and skge driver. |
---|
.. | .. |
---|
7 | 8 | * those should be done at higher levels. |
---|
8 | 9 | * |
---|
9 | 10 | * Copyright (C) 2005 Stephen Hemminger <shemminger@osdl.org> |
---|
10 | | - * |
---|
11 | | - * This program is free software; you can redistribute it and/or modify |
---|
12 | | - * it under the terms of the GNU General Public License as published by |
---|
13 | | - * the Free Software Foundation; either version 2 of the License. |
---|
14 | | - * |
---|
15 | | - * This program is distributed in the hope that it will be useful, |
---|
16 | | - * but WITHOUT ANY WARRANTY; without even the implied warranty of |
---|
17 | | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
---|
18 | | - * GNU General Public License for more details. |
---|
19 | | - * |
---|
20 | | - * You should have received a copy of the GNU General Public License |
---|
21 | | - * along with this program; if not, write to the Free Software |
---|
22 | | - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
---|
23 | 11 | */ |
---|
24 | 12 | |
---|
25 | 13 | #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt |
---|
.. | .. |
---|
1139 | 1127 | /* Make sure write' to descriptors are complete before we tell hardware */ |
---|
1140 | 1128 | wmb(); |
---|
1141 | 1129 | sky2_write16(hw, Y2_QADDR(q, PREF_UNIT_PUT_IDX), idx); |
---|
1142 | | - |
---|
1143 | | - /* Synchronize I/O on since next processor may write to tail */ |
---|
1144 | | - mmiowb(); |
---|
1145 | 1130 | } |
---|
1146 | 1131 | |
---|
1147 | 1132 | |
---|
.. | .. |
---|
1224 | 1209 | struct sk_buff *skb = re->skb; |
---|
1225 | 1210 | int i; |
---|
1226 | 1211 | |
---|
1227 | | - re->data_addr = pci_map_single(pdev, skb->data, size, PCI_DMA_FROMDEVICE); |
---|
1228 | | - if (pci_dma_mapping_error(pdev, re->data_addr)) |
---|
| 1212 | + re->data_addr = dma_map_single(&pdev->dev, skb->data, size, |
---|
| 1213 | + DMA_FROM_DEVICE); |
---|
| 1214 | + if (dma_mapping_error(&pdev->dev, re->data_addr)) |
---|
1229 | 1215 | goto mapping_error; |
---|
1230 | 1216 | |
---|
1231 | 1217 | dma_unmap_len_set(re, data_size, size); |
---|
.. | .. |
---|
1244 | 1230 | |
---|
1245 | 1231 | map_page_error: |
---|
1246 | 1232 | while (--i >= 0) { |
---|
1247 | | - pci_unmap_page(pdev, re->frag_addr[i], |
---|
| 1233 | + dma_unmap_page(&pdev->dev, re->frag_addr[i], |
---|
1248 | 1234 | skb_frag_size(&skb_shinfo(skb)->frags[i]), |
---|
1249 | | - PCI_DMA_FROMDEVICE); |
---|
| 1235 | + DMA_FROM_DEVICE); |
---|
1250 | 1236 | } |
---|
1251 | 1237 | |
---|
1252 | | - pci_unmap_single(pdev, re->data_addr, dma_unmap_len(re, data_size), |
---|
1253 | | - PCI_DMA_FROMDEVICE); |
---|
| 1238 | + dma_unmap_single(&pdev->dev, re->data_addr, |
---|
| 1239 | + dma_unmap_len(re, data_size), DMA_FROM_DEVICE); |
---|
1254 | 1240 | |
---|
1255 | 1241 | mapping_error: |
---|
1256 | 1242 | if (net_ratelimit()) |
---|
.. | .. |
---|
1264 | 1250 | struct sk_buff *skb = re->skb; |
---|
1265 | 1251 | int i; |
---|
1266 | 1252 | |
---|
1267 | | - pci_unmap_single(pdev, re->data_addr, dma_unmap_len(re, data_size), |
---|
1268 | | - PCI_DMA_FROMDEVICE); |
---|
| 1253 | + dma_unmap_single(&pdev->dev, re->data_addr, |
---|
| 1254 | + dma_unmap_len(re, data_size), DMA_FROM_DEVICE); |
---|
1269 | 1255 | |
---|
1270 | 1256 | for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) |
---|
1271 | | - pci_unmap_page(pdev, re->frag_addr[i], |
---|
| 1257 | + dma_unmap_page(&pdev->dev, re->frag_addr[i], |
---|
1272 | 1258 | skb_frag_size(&skb_shinfo(skb)->frags[i]), |
---|
1273 | | - PCI_DMA_FROMDEVICE); |
---|
| 1259 | + DMA_FROM_DEVICE); |
---|
1274 | 1260 | } |
---|
1275 | 1261 | |
---|
1276 | 1262 | /* Tell chip where to start receive checksum. |
---|
.. | .. |
---|
1354 | 1340 | |
---|
1355 | 1341 | /* reset the Rx prefetch unit */ |
---|
1356 | 1342 | sky2_write32(hw, Y2_QADDR(rxq, PREF_UNIT_CTRL), PREF_UNIT_RST_SET); |
---|
1357 | | - mmiowb(); |
---|
1358 | 1343 | } |
---|
1359 | 1344 | |
---|
1360 | 1345 | /* Clean out receive buffer area, assumes receiver hardware stopped */ |
---|
.. | .. |
---|
1391 | 1376 | case SIOCGMIIPHY: |
---|
1392 | 1377 | data->phy_id = PHY_ADDR_MARV; |
---|
1393 | 1378 | |
---|
1394 | | - /* fallthru */ |
---|
| 1379 | + fallthrough; |
---|
1395 | 1380 | case SIOCGMIIREG: { |
---|
1396 | 1381 | u16 val = 0; |
---|
1397 | 1382 | |
---|
.. | .. |
---|
1608 | 1593 | struct sky2_hw *hw = sky2->hw; |
---|
1609 | 1594 | |
---|
1610 | 1595 | /* must be power of 2 */ |
---|
1611 | | - sky2->tx_le = pci_alloc_consistent(hw->pdev, |
---|
1612 | | - sky2->tx_ring_size * |
---|
1613 | | - sizeof(struct sky2_tx_le), |
---|
1614 | | - &sky2->tx_le_map); |
---|
| 1596 | + sky2->tx_le = dma_alloc_coherent(&hw->pdev->dev, |
---|
| 1597 | + sky2->tx_ring_size * sizeof(struct sky2_tx_le), |
---|
| 1598 | + &sky2->tx_le_map, GFP_KERNEL); |
---|
1615 | 1599 | if (!sky2->tx_le) |
---|
1616 | 1600 | goto nomem; |
---|
1617 | 1601 | |
---|
.. | .. |
---|
1620 | 1604 | if (!sky2->tx_ring) |
---|
1621 | 1605 | goto nomem; |
---|
1622 | 1606 | |
---|
1623 | | - sky2->rx_le = pci_zalloc_consistent(hw->pdev, RX_LE_BYTES, |
---|
1624 | | - &sky2->rx_le_map); |
---|
| 1607 | + sky2->rx_le = dma_alloc_coherent(&hw->pdev->dev, RX_LE_BYTES, |
---|
| 1608 | + &sky2->rx_le_map, GFP_KERNEL); |
---|
1625 | 1609 | if (!sky2->rx_le) |
---|
1626 | 1610 | goto nomem; |
---|
1627 | 1611 | |
---|
.. | .. |
---|
1642 | 1626 | sky2_rx_clean(sky2); |
---|
1643 | 1627 | |
---|
1644 | 1628 | if (sky2->rx_le) { |
---|
1645 | | - pci_free_consistent(hw->pdev, RX_LE_BYTES, |
---|
1646 | | - sky2->rx_le, sky2->rx_le_map); |
---|
| 1629 | + dma_free_coherent(&hw->pdev->dev, RX_LE_BYTES, sky2->rx_le, |
---|
| 1630 | + sky2->rx_le_map); |
---|
1647 | 1631 | sky2->rx_le = NULL; |
---|
1648 | 1632 | } |
---|
1649 | 1633 | if (sky2->tx_le) { |
---|
1650 | | - pci_free_consistent(hw->pdev, |
---|
1651 | | - sky2->tx_ring_size * sizeof(struct sky2_tx_le), |
---|
1652 | | - sky2->tx_le, sky2->tx_le_map); |
---|
| 1634 | + dma_free_coherent(&hw->pdev->dev, |
---|
| 1635 | + sky2->tx_ring_size * sizeof(struct sky2_tx_le), |
---|
| 1636 | + sky2->tx_le, sky2->tx_le_map); |
---|
1653 | 1637 | sky2->tx_le = NULL; |
---|
1654 | 1638 | } |
---|
1655 | 1639 | kfree(sky2->tx_ring); |
---|
.. | .. |
---|
1822 | 1806 | static void sky2_tx_unmap(struct pci_dev *pdev, struct tx_ring_info *re) |
---|
1823 | 1807 | { |
---|
1824 | 1808 | if (re->flags & TX_MAP_SINGLE) |
---|
1825 | | - pci_unmap_single(pdev, dma_unmap_addr(re, mapaddr), |
---|
1826 | | - dma_unmap_len(re, maplen), |
---|
1827 | | - PCI_DMA_TODEVICE); |
---|
| 1809 | + dma_unmap_single(&pdev->dev, dma_unmap_addr(re, mapaddr), |
---|
| 1810 | + dma_unmap_len(re, maplen), DMA_TO_DEVICE); |
---|
1828 | 1811 | else if (re->flags & TX_MAP_PAGE) |
---|
1829 | | - pci_unmap_page(pdev, dma_unmap_addr(re, mapaddr), |
---|
1830 | | - dma_unmap_len(re, maplen), |
---|
1831 | | - PCI_DMA_TODEVICE); |
---|
| 1812 | + dma_unmap_page(&pdev->dev, dma_unmap_addr(re, mapaddr), |
---|
| 1813 | + dma_unmap_len(re, maplen), DMA_TO_DEVICE); |
---|
1832 | 1814 | re->flags = 0; |
---|
1833 | 1815 | } |
---|
1834 | 1816 | |
---|
.. | .. |
---|
1856 | 1838 | return NETDEV_TX_BUSY; |
---|
1857 | 1839 | |
---|
1858 | 1840 | len = skb_headlen(skb); |
---|
1859 | | - mapping = pci_map_single(hw->pdev, skb->data, len, PCI_DMA_TODEVICE); |
---|
| 1841 | + mapping = dma_map_single(&hw->pdev->dev, skb->data, len, |
---|
| 1842 | + DMA_TO_DEVICE); |
---|
1860 | 1843 | |
---|
1861 | | - if (pci_dma_mapping_error(hw->pdev, mapping)) |
---|
| 1844 | + if (dma_mapping_error(&hw->pdev->dev, mapping)) |
---|
1862 | 1845 | goto mapping_error; |
---|
1863 | 1846 | |
---|
1864 | 1847 | slot = sky2->tx_prod; |
---|
.. | .. |
---|
2374 | 2357 | /* Transmit timeout is only called if we are running, carrier is up |
---|
2375 | 2358 | * and tx queue is full (stopped). |
---|
2376 | 2359 | */ |
---|
2377 | | -static void sky2_tx_timeout(struct net_device *dev) |
---|
| 2360 | +static void sky2_tx_timeout(struct net_device *dev, unsigned int txqueue) |
---|
2378 | 2361 | { |
---|
2379 | 2362 | struct sky2_port *sky2 = netdev_priv(dev); |
---|
2380 | 2363 | struct sky2_hw *hw = sky2->hw; |
---|
.. | .. |
---|
2480 | 2463 | |
---|
2481 | 2464 | skb = netdev_alloc_skb_ip_align(sky2->netdev, length); |
---|
2482 | 2465 | if (likely(skb)) { |
---|
2483 | | - pci_dma_sync_single_for_cpu(sky2->hw->pdev, re->data_addr, |
---|
2484 | | - length, PCI_DMA_FROMDEVICE); |
---|
| 2466 | + dma_sync_single_for_cpu(&sky2->hw->pdev->dev, re->data_addr, |
---|
| 2467 | + length, DMA_FROM_DEVICE); |
---|
2485 | 2468 | skb_copy_from_linear_data(re->skb, skb->data, length); |
---|
2486 | 2469 | skb->ip_summed = re->skb->ip_summed; |
---|
2487 | 2470 | skb->csum = re->skb->csum; |
---|
2488 | 2471 | skb_copy_hash(skb, re->skb); |
---|
2489 | | - skb->vlan_proto = re->skb->vlan_proto; |
---|
2490 | | - skb->vlan_tci = re->skb->vlan_tci; |
---|
| 2472 | + __vlan_hwaccel_copy_tag(skb, re->skb); |
---|
2491 | 2473 | |
---|
2492 | | - pci_dma_sync_single_for_device(sky2->hw->pdev, re->data_addr, |
---|
2493 | | - length, PCI_DMA_FROMDEVICE); |
---|
2494 | | - re->skb->vlan_proto = 0; |
---|
2495 | | - re->skb->vlan_tci = 0; |
---|
| 2474 | + dma_sync_single_for_device(&sky2->hw->pdev->dev, |
---|
| 2475 | + re->data_addr, length, |
---|
| 2476 | + DMA_FROM_DEVICE); |
---|
| 2477 | + __vlan_hwaccel_clear_tag(re->skb); |
---|
2496 | 2478 | skb_clear_hash(re->skb); |
---|
2497 | 2479 | re->skb->ip_summed = CHECKSUM_NONE; |
---|
2498 | 2480 | skb_put(skb, length); |
---|
.. | .. |
---|
2782 | 2764 | |
---|
2783 | 2765 | case OP_RXCHKSVLAN: |
---|
2784 | 2766 | sky2_rx_tag(sky2, length); |
---|
2785 | | - /* fall through */ |
---|
| 2767 | + fallthrough; |
---|
2786 | 2768 | case OP_RXCHKS: |
---|
2787 | 2769 | if (likely(dev->features & NETIF_F_RXCSUM)) |
---|
2788 | 2770 | sky2_rx_checksum(sky2, status); |
---|
.. | .. |
---|
4418 | 4400 | } |
---|
4419 | 4401 | |
---|
4420 | 4402 | static const struct ethtool_ops sky2_ethtool_ops = { |
---|
| 4403 | + .supported_coalesce_params = ETHTOOL_COALESCE_USECS | |
---|
| 4404 | + ETHTOOL_COALESCE_MAX_FRAMES | |
---|
| 4405 | + ETHTOOL_COALESCE_RX_USECS_IRQ | |
---|
| 4406 | + ETHTOOL_COALESCE_RX_MAX_FRAMES_IRQ, |
---|
4421 | 4407 | .get_drvinfo = sky2_get_drvinfo, |
---|
4422 | 4408 | .get_wol = sky2_get_wol, |
---|
4423 | 4409 | .set_wol = sky2_set_wol, |
---|
.. | .. |
---|
4624 | 4610 | napi_enable(&hw->napi); |
---|
4625 | 4611 | return 0; |
---|
4626 | 4612 | } |
---|
4627 | | - |
---|
4628 | | -static int sky2_debug_open(struct inode *inode, struct file *file) |
---|
4629 | | -{ |
---|
4630 | | - return single_open(file, sky2_debug_show, inode->i_private); |
---|
4631 | | -} |
---|
4632 | | - |
---|
4633 | | -static const struct file_operations sky2_debug_fops = { |
---|
4634 | | - .owner = THIS_MODULE, |
---|
4635 | | - .open = sky2_debug_open, |
---|
4636 | | - .read = seq_read, |
---|
4637 | | - .llseek = seq_lseek, |
---|
4638 | | - .release = single_release, |
---|
4639 | | -}; |
---|
| 4613 | +DEFINE_SHOW_ATTRIBUTE(sky2_debug); |
---|
4640 | 4614 | |
---|
4641 | 4615 | /* |
---|
4642 | 4616 | * Use network device events to create/remove/rename |
---|
.. | .. |
---|
4822 | 4796 | * 2) from internal registers set by bootloader |
---|
4823 | 4797 | */ |
---|
4824 | 4798 | iap = of_get_mac_address(hw->pdev->dev.of_node); |
---|
4825 | | - if (iap) |
---|
4826 | | - memcpy(dev->dev_addr, iap, ETH_ALEN); |
---|
| 4799 | + if (!IS_ERR(iap)) |
---|
| 4800 | + ether_addr_copy(dev->dev_addr, iap); |
---|
4827 | 4801 | else |
---|
4828 | 4802 | memcpy_fromio(dev->dev_addr, hw->regs + B2_MAC_1 + port * 8, |
---|
4829 | 4803 | ETH_ALEN); |
---|
.. | .. |
---|
4948 | 4922 | }, |
---|
4949 | 4923 | }, |
---|
4950 | 4924 | { |
---|
| 4925 | + .ident = "ASUS P5W DH Deluxe", |
---|
| 4926 | + .matches = { |
---|
| 4927 | + DMI_MATCH(DMI_SYS_VENDOR, "ASUSTEK COMPUTER INC"), |
---|
| 4928 | + DMI_MATCH(DMI_PRODUCT_NAME, "P5W DH Deluxe"), |
---|
| 4929 | + }, |
---|
| 4930 | + }, |
---|
| 4931 | + { |
---|
4951 | 4932 | .ident = "ASUS P6T", |
---|
4952 | 4933 | .matches = { |
---|
4953 | 4934 | DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."), |
---|
.. | .. |
---|
5004 | 4985 | pci_set_master(pdev); |
---|
5005 | 4986 | |
---|
5006 | 4987 | if (sizeof(dma_addr_t) > sizeof(u32) && |
---|
5007 | | - !(err = pci_set_dma_mask(pdev, DMA_BIT_MASK(64)))) { |
---|
| 4988 | + !(err = dma_set_mask(&pdev->dev, DMA_BIT_MASK(64)))) { |
---|
5008 | 4989 | using_dac = 1; |
---|
5009 | | - err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64)); |
---|
| 4990 | + err = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(64)); |
---|
5010 | 4991 | if (err < 0) { |
---|
5011 | 4992 | dev_err(&pdev->dev, "unable to obtain 64 bit DMA " |
---|
5012 | 4993 | "for consistent allocations\n"); |
---|
5013 | 4994 | goto err_out_free_regions; |
---|
5014 | 4995 | } |
---|
5015 | 4996 | } else { |
---|
5016 | | - err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32)); |
---|
| 4997 | + err = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32)); |
---|
5017 | 4998 | if (err) { |
---|
5018 | 4999 | dev_err(&pdev->dev, "no usable DMA configuration\n"); |
---|
5019 | 5000 | goto err_out_free_regions; |
---|
.. | .. |
---|
5045 | 5026 | hw->pdev = pdev; |
---|
5046 | 5027 | sprintf(hw->irq_name, DRV_NAME "@pci:%s", pci_name(pdev)); |
---|
5047 | 5028 | |
---|
5048 | | - hw->regs = ioremap_nocache(pci_resource_start(pdev, 0), 0x4000); |
---|
| 5029 | + hw->regs = ioremap(pci_resource_start(pdev, 0), 0x4000); |
---|
5049 | 5030 | if (!hw->regs) { |
---|
5050 | 5031 | dev_err(&pdev->dev, "cannot map device registers\n"); |
---|
5051 | 5032 | goto err_out_free_hw; |
---|
.. | .. |
---|
5057 | 5038 | |
---|
5058 | 5039 | /* ring for status responses */ |
---|
5059 | 5040 | hw->st_size = hw->ports * roundup_pow_of_two(3*RX_MAX_PENDING + TX_MAX_PENDING); |
---|
5060 | | - hw->st_le = pci_alloc_consistent(pdev, hw->st_size * sizeof(struct sky2_status_le), |
---|
5061 | | - &hw->st_dma); |
---|
| 5041 | + hw->st_le = dma_alloc_coherent(&pdev->dev, |
---|
| 5042 | + hw->st_size * sizeof(struct sky2_status_le), |
---|
| 5043 | + &hw->st_dma, GFP_KERNEL); |
---|
5062 | 5044 | if (!hw->st_le) { |
---|
5063 | 5045 | err = -ENOMEM; |
---|
5064 | 5046 | goto err_out_reset; |
---|
.. | .. |
---|
5123 | 5105 | INIT_WORK(&hw->restart_work, sky2_restart); |
---|
5124 | 5106 | |
---|
5125 | 5107 | pci_set_drvdata(pdev, hw); |
---|
5126 | | - pdev->d3_delay = 300; |
---|
| 5108 | + pdev->d3hot_delay = 300; |
---|
5127 | 5109 | |
---|
5128 | 5110 | return 0; |
---|
5129 | 5111 | |
---|
.. | .. |
---|
5138 | 5120 | pci_disable_msi(pdev); |
---|
5139 | 5121 | free_netdev(dev); |
---|
5140 | 5122 | err_out_free_pci: |
---|
5141 | | - pci_free_consistent(pdev, hw->st_size * sizeof(struct sky2_status_le), |
---|
5142 | | - hw->st_le, hw->st_dma); |
---|
| 5123 | + dma_free_coherent(&pdev->dev, |
---|
| 5124 | + hw->st_size * sizeof(struct sky2_status_le), |
---|
| 5125 | + hw->st_le, hw->st_dma); |
---|
5143 | 5126 | err_out_reset: |
---|
5144 | 5127 | sky2_write8(hw, B0_CTST, CS_RST_SET); |
---|
5145 | 5128 | err_out_iounmap: |
---|
.. | .. |
---|
5183 | 5166 | |
---|
5184 | 5167 | if (hw->flags & SKY2_HW_USE_MSI) |
---|
5185 | 5168 | pci_disable_msi(pdev); |
---|
5186 | | - pci_free_consistent(pdev, hw->st_size * sizeof(struct sky2_status_le), |
---|
5187 | | - hw->st_le, hw->st_dma); |
---|
| 5169 | + dma_free_coherent(&pdev->dev, |
---|
| 5170 | + hw->st_size * sizeof(struct sky2_status_le), |
---|
| 5171 | + hw->st_le, hw->st_dma); |
---|
5188 | 5172 | pci_release_regions(pdev); |
---|
5189 | 5173 | pci_disable_device(pdev); |
---|
5190 | 5174 | |
---|
.. | .. |
---|
5197 | 5181 | |
---|
5198 | 5182 | static int sky2_suspend(struct device *dev) |
---|
5199 | 5183 | { |
---|
5200 | | - struct pci_dev *pdev = to_pci_dev(dev); |
---|
5201 | | - struct sky2_hw *hw = pci_get_drvdata(pdev); |
---|
| 5184 | + struct sky2_hw *hw = dev_get_drvdata(dev); |
---|
5202 | 5185 | int i; |
---|
5203 | 5186 | |
---|
5204 | 5187 | if (!hw) |
---|