hc
2023-12-06 08f87f769b595151be1afeff53e144f543faa614
kernel/drivers/net/ethernet/broadcom/bgmac.c
....@@ -172,7 +172,7 @@
172172 flags = 0;
173173
174174 for (i = 0; i < nr_frags; i++) {
175
- struct skb_frag_struct *frag = &skb_shinfo(skb)->frags[i];
175
+ skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
176176 int len = skb_frag_size(frag);
177177
178178 index = (index + 1) % BGMAC_TX_RING_SLOTS;
....@@ -189,8 +189,8 @@
189189 }
190190
191191 slot->skb = skb;
192
- ring->end += nr_frags + 1;
193192 netdev_sent_queue(net_dev, skb->len);
193
+ ring->end += nr_frags + 1;
194194
195195 wmb();
196196
....@@ -616,7 +616,6 @@
616616 static const u16 ring_base[] = { BGMAC_DMA_BASE0, BGMAC_DMA_BASE1,
617617 BGMAC_DMA_BASE2, BGMAC_DMA_BASE3, };
618618 int size; /* ring size: different for Tx and Rx */
619
- int err;
620619 int i;
621620
622621 BUILD_BUG_ON(BGMAC_MAX_TX_RINGS > ARRAY_SIZE(ring_base));
....@@ -635,9 +634,9 @@
635634
636635 /* Alloc ring of descriptors */
637636 size = BGMAC_TX_RING_SLOTS * sizeof(struct bgmac_dma_desc);
638
- ring->cpu_base = dma_zalloc_coherent(dma_dev, size,
639
- &ring->dma_base,
640
- GFP_KERNEL);
637
+ ring->cpu_base = dma_alloc_coherent(dma_dev, size,
638
+ &ring->dma_base,
639
+ GFP_KERNEL);
641640 if (!ring->cpu_base) {
642641 dev_err(bgmac->dev, "Allocation of TX ring 0x%X failed\n",
643642 ring->mmio_base);
....@@ -660,13 +659,12 @@
660659
661660 /* Alloc ring of descriptors */
662661 size = BGMAC_RX_RING_SLOTS * sizeof(struct bgmac_dma_desc);
663
- ring->cpu_base = dma_zalloc_coherent(dma_dev, size,
664
- &ring->dma_base,
665
- GFP_KERNEL);
662
+ ring->cpu_base = dma_alloc_coherent(dma_dev, size,
663
+ &ring->dma_base,
664
+ GFP_KERNEL);
666665 if (!ring->cpu_base) {
667666 dev_err(bgmac->dev, "Allocation of RX ring 0x%X failed\n",
668667 ring->mmio_base);
669
- err = -ENOMEM;
670668 goto err_dma_free;
671669 }
672670
....@@ -1250,12 +1248,12 @@
12501248 return 0;
12511249 }
12521250
1253
-static int bgmac_ioctl(struct net_device *net_dev, struct ifreq *ifr, int cmd)
1251
+static int bgmac_change_mtu(struct net_device *net_dev, int mtu)
12541252 {
1255
- if (!netif_running(net_dev))
1256
- return -EINVAL;
1253
+ struct bgmac *bgmac = netdev_priv(net_dev);
12571254
1258
- return phy_mii_ioctl(net_dev->phydev, ifr, cmd);
1255
+ bgmac_write(bgmac, BGMAC_RXMAX_LENGTH, 32 + mtu);
1256
+ return 0;
12591257 }
12601258
12611259 static const struct net_device_ops bgmac_netdev_ops = {
....@@ -1265,7 +1263,8 @@
12651263 .ndo_set_rx_mode = bgmac_set_rx_mode,
12661264 .ndo_set_mac_address = bgmac_set_mac_address,
12671265 .ndo_validate_addr = eth_validate_addr,
1268
- .ndo_do_ioctl = bgmac_ioctl,
1266
+ .ndo_do_ioctl = phy_do_ioctl_running,
1267
+ .ndo_change_mtu = bgmac_change_mtu,
12691268 };
12701269
12711270 /**************************************************
....@@ -1448,7 +1447,7 @@
14481447 struct phy_device *phy_dev;
14491448 int err;
14501449
1451
- phy_dev = fixed_phy_register(PHY_POLL, &fphy_status, -1, NULL);
1450
+ phy_dev = fixed_phy_register(PHY_POLL, &fphy_status, NULL);
14521451 if (!phy_dev || IS_ERR(phy_dev)) {
14531452 dev_err(bgmac->dev, "Failed to register fixed PHY device\n");
14541453 return -ENODEV;
....@@ -1540,6 +1539,9 @@
15401539 net_dev->hw_features = net_dev->features;
15411540 net_dev->vlan_features = net_dev->features;
15421541
1542
+ /* Omit FCS from max MTU size */
1543
+ net_dev->max_mtu = BGMAC_RX_MAX_FRAME_SIZE - ETH_FCS_LEN;
1544
+
15431545 err = register_netdev(bgmac->net_dev);
15441546 if (err) {
15451547 dev_err(bgmac->dev, "Cannot register net device\n");
....@@ -1566,7 +1568,6 @@
15661568 phy_disconnect(bgmac->net_dev->phydev);
15671569 netif_napi_del(&bgmac->napi);
15681570 bgmac_dma_free(bgmac);
1569
- free_netdev(bgmac->net_dev);
15701571 }
15711572 EXPORT_SYMBOL_GPL(bgmac_enet_remove);
15721573