forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-05-10 9999e48639b3cecb08ffb37358bcba3b48161b29
kernel/drivers/net/ethernet/marvell/skge.c
....@@ -1,3 +1,4 @@
1
+// SPDX-License-Identifier: GPL-2.0-only
12 /*
23 * New driver for Marvell Yukon chipset and SysKonnect Gigabit
34 * Ethernet adapters. Based on earlier sk98lin, e100 and
....@@ -8,19 +9,6 @@
89 * those should be done at higher levels.
910 *
1011 * Copyright (C) 2004, 2005 Stephen Hemminger <shemminger@osdl.org>
11
- *
12
- * This program is free software; you can redistribute it and/or modify
13
- * it under the terms of the GNU General Public License as published by
14
- * the Free Software Foundation; either version 2 of the License.
15
- *
16
- * This program is distributed in the hope that it will be useful,
17
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
18
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19
- * GNU General Public License for more details.
20
- *
21
- * You should have received a copy of the GNU General Public License
22
- * along with this program; if not, write to the Free Software
23
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
2412 */
2513
2614 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
....@@ -888,6 +876,7 @@
888876 }
889877
890878 static const struct ethtool_ops skge_ethtool_ops = {
879
+ .supported_coalesce_params = ETHTOOL_COALESCE_USECS,
891880 .get_drvinfo = skge_get_drvinfo,
892881 .get_regs_len = skge_get_regs_len,
893882 .get_regs = skge_get_regs,
....@@ -950,10 +939,10 @@
950939 struct skge_rx_desc *rd = e->desc;
951940 dma_addr_t map;
952941
953
- map = pci_map_single(skge->hw->pdev, skb->data, bufsize,
954
- PCI_DMA_FROMDEVICE);
942
+ map = dma_map_single(&skge->hw->pdev->dev, skb->data, bufsize,
943
+ DMA_FROM_DEVICE);
955944
956
- if (pci_dma_mapping_error(skge->hw->pdev, map))
945
+ if (dma_mapping_error(&skge->hw->pdev->dev, map))
957946 return -1;
958947
959948 rd->dma_lo = lower_32_bits(map);
....@@ -1001,10 +990,10 @@
1001990 struct skge_rx_desc *rd = e->desc;
1002991 rd->control = 0;
1003992 if (e->skb) {
1004
- pci_unmap_single(hw->pdev,
993
+ dma_unmap_single(&hw->pdev->dev,
1005994 dma_unmap_addr(e, mapaddr),
1006995 dma_unmap_len(e, maplen),
1007
- PCI_DMA_FROMDEVICE);
996
+ DMA_FROM_DEVICE);
1008997 dev_kfree_skb(e->skb);
1009998 e->skb = NULL;
1010999 }
....@@ -2459,7 +2448,7 @@
24592448 case SIOCGMIIPHY:
24602449 data->phy_id = hw->phy_addr;
24612450
2462
- /* fallthru */
2451
+ fallthrough;
24632452 case SIOCGMIIREG: {
24642453 u16 val = 0;
24652454 spin_lock_bh(&hw->phy_lock);
....@@ -2558,19 +2547,18 @@
25582547 rx_size = skge->rx_ring.count * sizeof(struct skge_rx_desc);
25592548 tx_size = skge->tx_ring.count * sizeof(struct skge_tx_desc);
25602549 skge->mem_size = tx_size + rx_size;
2561
- skge->mem = pci_alloc_consistent(hw->pdev, skge->mem_size, &skge->dma);
2550
+ skge->mem = dma_alloc_coherent(&hw->pdev->dev, skge->mem_size,
2551
+ &skge->dma, GFP_KERNEL);
25622552 if (!skge->mem)
25632553 return -ENOMEM;
25642554
25652555 BUG_ON(skge->dma & 7);
25662556
25672557 if (upper_32_bits(skge->dma) != upper_32_bits(skge->dma + skge->mem_size)) {
2568
- dev_err(&hw->pdev->dev, "pci_alloc_consistent region crosses 4G boundary\n");
2558
+ dev_err(&hw->pdev->dev, "dma_alloc_coherent region crosses 4G boundary\n");
25692559 err = -EINVAL;
25702560 goto free_pci_mem;
25712561 }
2572
-
2573
- memset(skge->mem, 0, skge->mem_size);
25742562
25752563 err = skge_ring_alloc(&skge->rx_ring, skge->mem, skge->dma);
25762564 if (err)
....@@ -2638,7 +2626,8 @@
26382626 skge_rx_clean(skge);
26392627 kfree(skge->rx_ring.start);
26402628 free_pci_mem:
2641
- pci_free_consistent(hw->pdev, skge->mem_size, skge->mem, skge->dma);
2629
+ dma_free_coherent(&hw->pdev->dev, skge->mem_size, skge->mem,
2630
+ skge->dma);
26422631 skge->mem = NULL;
26432632
26442633 return err;
....@@ -2728,7 +2717,8 @@
27282717
27292718 kfree(skge->rx_ring.start);
27302719 kfree(skge->tx_ring.start);
2731
- pci_free_consistent(hw->pdev, skge->mem_size, skge->mem, skge->dma);
2720
+ dma_free_coherent(&hw->pdev->dev, skge->mem_size, skge->mem,
2721
+ skge->dma);
27322722 skge->mem = NULL;
27332723 return 0;
27342724 }
....@@ -2762,8 +2752,8 @@
27622752 BUG_ON(td->control & BMU_OWN);
27632753 e->skb = skb;
27642754 len = skb_headlen(skb);
2765
- map = pci_map_single(hw->pdev, skb->data, len, PCI_DMA_TODEVICE);
2766
- if (pci_dma_mapping_error(hw->pdev, map))
2755
+ map = dma_map_single(&hw->pdev->dev, skb->data, len, DMA_TO_DEVICE);
2756
+ if (dma_mapping_error(&hw->pdev->dev, map))
27672757 goto mapping_error;
27682758
27692759 dma_unmap_addr_set(e, mapaddr, map);
....@@ -2843,16 +2833,12 @@
28432833
28442834 mapping_unwind:
28452835 e = skge->tx_ring.to_use;
2846
- pci_unmap_single(hw->pdev,
2847
- dma_unmap_addr(e, mapaddr),
2848
- dma_unmap_len(e, maplen),
2849
- PCI_DMA_TODEVICE);
2836
+ dma_unmap_single(&hw->pdev->dev, dma_unmap_addr(e, mapaddr),
2837
+ dma_unmap_len(e, maplen), DMA_TO_DEVICE);
28502838 while (i-- > 0) {
28512839 e = e->next;
2852
- pci_unmap_page(hw->pdev,
2853
- dma_unmap_addr(e, mapaddr),
2854
- dma_unmap_len(e, maplen),
2855
- PCI_DMA_TODEVICE);
2840
+ dma_unmap_page(&hw->pdev->dev, dma_unmap_addr(e, mapaddr),
2841
+ dma_unmap_len(e, maplen), DMA_TO_DEVICE);
28562842 }
28572843
28582844 mapping_error:
....@@ -2869,13 +2855,11 @@
28692855 {
28702856 /* skb header vs. fragment */
28712857 if (control & BMU_STF)
2872
- pci_unmap_single(pdev, dma_unmap_addr(e, mapaddr),
2873
- dma_unmap_len(e, maplen),
2874
- PCI_DMA_TODEVICE);
2858
+ dma_unmap_single(&pdev->dev, dma_unmap_addr(e, mapaddr),
2859
+ dma_unmap_len(e, maplen), DMA_TO_DEVICE);
28752860 else
2876
- pci_unmap_page(pdev, dma_unmap_addr(e, mapaddr),
2877
- dma_unmap_len(e, maplen),
2878
- PCI_DMA_TODEVICE);
2861
+ dma_unmap_page(&pdev->dev, dma_unmap_addr(e, mapaddr),
2862
+ dma_unmap_len(e, maplen), DMA_TO_DEVICE);
28792863 }
28802864
28812865 /* Free all buffers in transmit ring */
....@@ -2898,7 +2882,7 @@
28982882 skge->tx_ring.to_clean = e;
28992883 }
29002884
2901
-static void skge_tx_timeout(struct net_device *dev)
2885
+static void skge_tx_timeout(struct net_device *dev, unsigned int txqueue)
29022886 {
29032887 struct skge_port *skge = netdev_priv(dev);
29042888
....@@ -3085,15 +3069,15 @@
30853069 if (!skb)
30863070 goto resubmit;
30873071
3088
- pci_dma_sync_single_for_cpu(skge->hw->pdev,
3089
- dma_unmap_addr(e, mapaddr),
3090
- dma_unmap_len(e, maplen),
3091
- PCI_DMA_FROMDEVICE);
3072
+ dma_sync_single_for_cpu(&skge->hw->pdev->dev,
3073
+ dma_unmap_addr(e, mapaddr),
3074
+ dma_unmap_len(e, maplen),
3075
+ DMA_FROM_DEVICE);
30923076 skb_copy_from_linear_data(e->skb, skb->data, len);
3093
- pci_dma_sync_single_for_device(skge->hw->pdev,
3094
- dma_unmap_addr(e, mapaddr),
3095
- dma_unmap_len(e, maplen),
3096
- PCI_DMA_FROMDEVICE);
3077
+ dma_sync_single_for_device(&skge->hw->pdev->dev,
3078
+ dma_unmap_addr(e, mapaddr),
3079
+ dma_unmap_len(e, maplen),
3080
+ DMA_FROM_DEVICE);
30973081 skge_rx_reuse(e, skge->rx_buf_size);
30983082 } else {
30993083 struct skge_element ee;
....@@ -3113,10 +3097,9 @@
31133097 goto resubmit;
31143098 }
31153099
3116
- pci_unmap_single(skge->hw->pdev,
3100
+ dma_unmap_single(&skge->hw->pdev->dev,
31173101 dma_unmap_addr(&ee, mapaddr),
3118
- dma_unmap_len(&ee, maplen),
3119
- PCI_DMA_FROMDEVICE);
3102
+ dma_unmap_len(&ee, maplen), DMA_FROM_DEVICE);
31203103 }
31213104
31223105 skb_put(skb, len);
....@@ -3355,9 +3338,9 @@
33553338 * because accessing phy registers requires spin wait which might
33563339 * cause excess interrupt latency.
33573340 */
3358
-static void skge_extirq(unsigned long arg)
3341
+static void skge_extirq(struct tasklet_struct *t)
33593342 {
3360
- struct skge_hw *hw = (struct skge_hw *) arg;
3343
+ struct skge_hw *hw = from_tasklet(hw, t, phy_task);
33613344 int port;
33623345
33633346 for (port = 0; port < hw->ports; port++) {
....@@ -3734,19 +3717,7 @@
37343717
37353718 return 0;
37363719 }
3737
-
3738
-static int skge_debug_open(struct inode *inode, struct file *file)
3739
-{
3740
- return single_open(file, skge_debug_show, inode->i_private);
3741
-}
3742
-
3743
-static const struct file_operations skge_debug_fops = {
3744
- .owner = THIS_MODULE,
3745
- .open = skge_debug_open,
3746
- .read = seq_read,
3747
- .llseek = seq_lseek,
3748
- .release = single_release,
3749
-};
3720
+DEFINE_SHOW_ATTRIBUTE(skge_debug);
37503721
37513722 /*
37523723 * Use network device events to create/remove/rename
....@@ -3757,7 +3728,6 @@
37573728 {
37583729 struct net_device *dev = netdev_notifier_info_to_dev(ptr);
37593730 struct skge_port *skge;
3760
- struct dentry *d;
37613731
37623732 if (dev->netdev_ops->ndo_open != &skge_up || !skge_debug)
37633733 goto done;
....@@ -3765,33 +3735,20 @@
37653735 skge = netdev_priv(dev);
37663736 switch (event) {
37673737 case NETDEV_CHANGENAME:
3768
- if (skge->debugfs) {
3769
- d = debugfs_rename(skge_debug, skge->debugfs,
3770
- skge_debug, dev->name);
3771
- if (d)
3772
- skge->debugfs = d;
3773
- else {
3774
- netdev_info(dev, "rename failed\n");
3775
- debugfs_remove(skge->debugfs);
3776
- }
3777
- }
3738
+ if (skge->debugfs)
3739
+ skge->debugfs = debugfs_rename(skge_debug,
3740
+ skge->debugfs,
3741
+ skge_debug, dev->name);
37783742 break;
37793743
37803744 case NETDEV_GOING_DOWN:
3781
- if (skge->debugfs) {
3782
- debugfs_remove(skge->debugfs);
3783
- skge->debugfs = NULL;
3784
- }
3745
+ debugfs_remove(skge->debugfs);
3746
+ skge->debugfs = NULL;
37853747 break;
37863748
37873749 case NETDEV_UP:
3788
- d = debugfs_create_file(dev->name, 0444,
3789
- skge_debug, dev,
3790
- &skge_debug_fops);
3791
- if (!d || IS_ERR(d))
3792
- netdev_info(dev, "debugfs create failed\n");
3793
- else
3794
- skge->debugfs = d;
3750
+ skge->debugfs = debugfs_create_file(dev->name, 0444, skge_debug,
3751
+ dev, &skge_debug_fops);
37953752 break;
37963753 }
37973754
....@@ -3806,15 +3763,8 @@
38063763
38073764 static __init void skge_debug_init(void)
38083765 {
3809
- struct dentry *ent;
3766
+ skge_debug = debugfs_create_dir("skge", NULL);
38103767
3811
- ent = debugfs_create_dir("skge", NULL);
3812
- if (!ent || IS_ERR(ent)) {
3813
- pr_info("debugfs create directory failed\n");
3814
- return;
3815
- }
3816
-
3817
- skge_debug = ent;
38183768 register_netdevice_notifier(&skge_notifier);
38193769 }
38203770
....@@ -3941,12 +3891,12 @@
39413891
39423892 pci_set_master(pdev);
39433893
3944
- if (!only_32bit_dma && !pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) {
3894
+ if (!only_32bit_dma && !dma_set_mask(&pdev->dev, DMA_BIT_MASK(64))) {
39453895 using_dac = 1;
3946
- err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64));
3947
- } else if (!(err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32)))) {
3896
+ err = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(64));
3897
+ } else if (!(err = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32)))) {
39483898 using_dac = 0;
3949
- err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
3899
+ err = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(32));
39503900 }
39513901
39523902 if (err) {
....@@ -3977,9 +3927,9 @@
39773927 hw->pdev = pdev;
39783928 spin_lock_init(&hw->hw_lock);
39793929 spin_lock_init(&hw->phy_lock);
3980
- tasklet_init(&hw->phy_task, skge_extirq, (unsigned long) hw);
3930
+ tasklet_setup(&hw->phy_task, skge_extirq);
39813931
3982
- hw->regs = ioremap_nocache(pci_resource_start(pdev, 0), 0x4000);
3932
+ hw->regs = ioremap(pci_resource_start(pdev, 0), 0x4000);
39833933 if (!hw->regs) {
39843934 dev_err(&pdev->dev, "cannot map device registers\n");
39853935 goto err_out_free_hw;
....@@ -4104,8 +4054,7 @@
41044054 #ifdef CONFIG_PM_SLEEP
41054055 static int skge_suspend(struct device *dev)
41064056 {
4107
- struct pci_dev *pdev = to_pci_dev(dev);
4108
- struct skge_hw *hw = pci_get_drvdata(pdev);
4057
+ struct skge_hw *hw = dev_get_drvdata(dev);
41094058 int i;
41104059
41114060 if (!hw)
....@@ -4129,8 +4078,7 @@
41294078
41304079 static int skge_resume(struct device *dev)
41314080 {
4132
- struct pci_dev *pdev = to_pci_dev(dev);
4133
- struct skge_hw *hw = pci_get_drvdata(pdev);
4081
+ struct skge_hw *hw = dev_get_drvdata(dev);
41344082 int i, err;
41354083
41364084 if (!hw)