aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/nxp/lpc_eth.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/ethernet/nxp/lpc_eth.c')
-rw-r--r--drivers/net/ethernet/nxp/lpc_eth.c17
1 files changed, 6 insertions, 11 deletions
diff --git a/drivers/net/ethernet/nxp/lpc_eth.c b/drivers/net/ethernet/nxp/lpc_eth.c
index 083d6715335..e7d2496a473 100644
--- a/drivers/net/ethernet/nxp/lpc_eth.c
+++ b/drivers/net/ethernet/nxp/lpc_eth.c
@@ -52,7 +52,6 @@
52 52
53#define MODNAME "lpc-eth" 53#define MODNAME "lpc-eth"
54#define DRV_VERSION "1.00" 54#define DRV_VERSION "1.00"
55#define PHYDEF_ADDR 0x00
56 55
57#define ENET_MAXF_SIZE 1536 56#define ENET_MAXF_SIZE 1536
58#define ENET_RX_DESC 48 57#define ENET_RX_DESC 48
@@ -416,9 +415,6 @@ static bool use_iram_for_net(struct device *dev)
416#define TXDESC_CONTROL_LAST (1 << 30) 415#define TXDESC_CONTROL_LAST (1 << 30)
417#define TXDESC_CONTROL_INT (1 << 31) 416#define TXDESC_CONTROL_INT (1 << 31)
418 417
419static int lpc_eth_hard_start_xmit(struct sk_buff *skb,
420 struct net_device *ndev);
421
422/* 418/*
423 * Structure of a TX/RX descriptors and RX status 419 * Structure of a TX/RX descriptors and RX status
424 */ 420 */
@@ -440,7 +436,7 @@ struct netdata_local {
440 spinlock_t lock; 436 spinlock_t lock;
441 void __iomem *net_base; 437 void __iomem *net_base;
442 u32 msg_enable; 438 u32 msg_enable;
443 struct sk_buff *skb[ENET_TX_DESC]; 439 unsigned int skblen[ENET_TX_DESC];
444 unsigned int last_tx_idx; 440 unsigned int last_tx_idx;
445 unsigned int num_used_tx_buffs; 441 unsigned int num_used_tx_buffs;
446 struct mii_bus *mii_bus; 442 struct mii_bus *mii_bus;
@@ -903,12 +899,11 @@ err_out:
903static void __lpc_handle_xmit(struct net_device *ndev) 899static void __lpc_handle_xmit(struct net_device *ndev)
904{ 900{
905 struct netdata_local *pldat = netdev_priv(ndev); 901 struct netdata_local *pldat = netdev_priv(ndev);
906 struct sk_buff *skb;
907 u32 txcidx, *ptxstat, txstat; 902 u32 txcidx, *ptxstat, txstat;
908 903
909 txcidx = readl(LPC_ENET_TXCONSUMEINDEX(pldat->net_base)); 904 txcidx = readl(LPC_ENET_TXCONSUMEINDEX(pldat->net_base));
910 while (pldat->last_tx_idx != txcidx) { 905 while (pldat->last_tx_idx != txcidx) {
911 skb = pldat->skb[pldat->last_tx_idx]; 906 unsigned int skblen = pldat->skblen[pldat->last_tx_idx];
912 907
913 /* A buffer is available, get buffer status */ 908 /* A buffer is available, get buffer status */
914 ptxstat = &pldat->tx_stat_v[pldat->last_tx_idx]; 909 ptxstat = &pldat->tx_stat_v[pldat->last_tx_idx];
@@ -945,9 +940,8 @@ static void __lpc_handle_xmit(struct net_device *ndev)
945 } else { 940 } else {
946 /* Update stats */ 941 /* Update stats */
947 ndev->stats.tx_packets++; 942 ndev->stats.tx_packets++;
948 ndev->stats.tx_bytes += skb->len; 943 ndev->stats.tx_bytes += skblen;
949 } 944 }
950 dev_kfree_skb_irq(skb);
951 945
952 txcidx = readl(LPC_ENET_TXCONSUMEINDEX(pldat->net_base)); 946 txcidx = readl(LPC_ENET_TXCONSUMEINDEX(pldat->net_base));
953 } 947 }
@@ -1132,7 +1126,7 @@ static int lpc_eth_hard_start_xmit(struct sk_buff *skb, struct net_device *ndev)
1132 memcpy(pldat->tx_buff_v + txidx * ENET_MAXF_SIZE, skb->data, len); 1126 memcpy(pldat->tx_buff_v + txidx * ENET_MAXF_SIZE, skb->data, len);
1133 1127
1134 /* Save the buffer and increment the buffer counter */ 1128 /* Save the buffer and increment the buffer counter */
1135 pldat->skb[txidx] = skb; 1129 pldat->skblen[txidx] = len;
1136 pldat->num_used_tx_buffs++; 1130 pldat->num_used_tx_buffs++;
1137 1131
1138 /* Start transmit */ 1132 /* Start transmit */
@@ -1147,6 +1141,7 @@ static int lpc_eth_hard_start_xmit(struct sk_buff *skb, struct net_device *ndev)
1147 1141
1148 spin_unlock_irq(&pldat->lock); 1142 spin_unlock_irq(&pldat->lock);
1149 1143
1144 dev_kfree_skb(skb);
1150 return NETDEV_TX_OK; 1145 return NETDEV_TX_OK;
1151} 1146}
1152 1147
@@ -1442,7 +1437,7 @@ static int lpc_eth_drv_probe(struct platform_device *pdev)
1442 res->start); 1437 res->start);
1443 netdev_dbg(ndev, "IO address size :%d\n", 1438 netdev_dbg(ndev, "IO address size :%d\n",
1444 res->end - res->start + 1); 1439 res->end - res->start + 1);
1445 netdev_err(ndev, "IO address (mapped) :0x%p\n", 1440 netdev_dbg(ndev, "IO address (mapped) :0x%p\n",
1446 pldat->net_base); 1441 pldat->net_base);
1447 netdev_dbg(ndev, "IRQ number :%d\n", ndev->irq); 1442 netdev_dbg(ndev, "IRQ number :%d\n", ndev->irq);
1448 netdev_dbg(ndev, "DMA buffer size :%d\n", pldat->dma_buff_size); 1443 netdev_dbg(ndev, "DMA buffer size :%d\n", pldat->dma_buff_size);