Skip to content

Commit 53bb20d

Browse files
tkiskydavem330
authored andcommitted
net: fec: add variable reg_desc_active to speed things up
There is no need for complex macros every time we need to activate a queue. Also, no need to call skb_get_queue_mapping when we already know which queue it is using. Signed-off-by: Troy Kisky <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 7355f27 commit 53bb20d

File tree

2 files changed

+25
-26
lines changed

2 files changed

+25
-26
lines changed

drivers/net/ethernet/freescale/fec.h

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -310,12 +310,6 @@ struct bufdesc_ex {
310310
#define FEC_R_BUFF_SIZE(X) (((X) == 1) ? FEC_R_BUFF_SIZE_1 : \
311311
(((X) == 2) ? \
312312
FEC_R_BUFF_SIZE_2 : FEC_R_BUFF_SIZE_0))
313-
#define FEC_R_DES_ACTIVE(X) (((X) == 1) ? FEC_R_DES_ACTIVE_1 : \
314-
(((X) == 2) ? \
315-
FEC_R_DES_ACTIVE_2 : FEC_R_DES_ACTIVE_0))
316-
#define FEC_X_DES_ACTIVE(X) (((X) == 1) ? FEC_X_DES_ACTIVE_1 : \
317-
(((X) == 2) ? \
318-
FEC_X_DES_ACTIVE_2 : FEC_X_DES_ACTIVE_0))
319313

320314
#define FEC_DMA_CFG(X) (((X) == 2) ? FEC_DMA_CFG_2 : FEC_DMA_CFG_1)
321315

@@ -454,6 +448,7 @@ struct bufdesc_prop {
454448
struct bufdesc *base;
455449
struct bufdesc *last;
456450
struct bufdesc *cur;
451+
void __iomem *reg_desc_active;
457452
dma_addr_t dma;
458453
unsigned short ring_size;
459454
unsigned char dsize;

drivers/net/ethernet/freescale/fec_main.c

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -328,7 +328,6 @@ fec_enet_txq_submit_frag_skb(struct fec_enet_priv_tx_q *txq,
328328
struct bufdesc *bdp = txq->bd.cur;
329329
struct bufdesc_ex *ebdp;
330330
int nr_frags = skb_shinfo(skb)->nr_frags;
331-
unsigned short queue = skb_get_queue_mapping(skb);
332331
int frag, frag_len;
333332
unsigned short status;
334333
unsigned int estatus = 0;
@@ -361,7 +360,7 @@ fec_enet_txq_submit_frag_skb(struct fec_enet_priv_tx_q *txq,
361360

362361
if (fep->bufdesc_ex) {
363362
if (fep->quirks & FEC_QUIRK_HAS_AVB)
364-
estatus |= FEC_TX_BD_FTYPE(queue);
363+
estatus |= FEC_TX_BD_FTYPE(txq->bd.qid);
365364
if (skb->ip_summed == CHECKSUM_PARTIAL)
366365
estatus |= BD_ENET_TX_PINS | BD_ENET_TX_IINS;
367366
ebdp->cbd_bdu = 0;
@@ -415,7 +414,6 @@ static int fec_enet_txq_submit_skb(struct fec_enet_priv_tx_q *txq,
415414
dma_addr_t addr;
416415
unsigned short status;
417416
unsigned short buflen;
418-
unsigned short queue;
419417
unsigned int estatus = 0;
420418
unsigned int index;
421419
int entries_free;
@@ -444,7 +442,6 @@ static int fec_enet_txq_submit_skb(struct fec_enet_priv_tx_q *txq,
444442
bufaddr = skb->data;
445443
buflen = skb_headlen(skb);
446444

447-
queue = skb_get_queue_mapping(skb);
448445
index = fec_enet_get_bd_index(bdp, &txq->bd);
449446
if (((unsigned long) bufaddr) & fep->tx_align ||
450447
fep->quirks & FEC_QUIRK_SWAP_FRAME) {
@@ -487,7 +484,7 @@ static int fec_enet_txq_submit_skb(struct fec_enet_priv_tx_q *txq,
487484
skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
488485

489486
if (fep->quirks & FEC_QUIRK_HAS_AVB)
490-
estatus |= FEC_TX_BD_FTYPE(queue);
487+
estatus |= FEC_TX_BD_FTYPE(txq->bd.qid);
491488

492489
if (skb->ip_summed == CHECKSUM_PARTIAL)
493490
estatus |= BD_ENET_TX_PINS | BD_ENET_TX_IINS;
@@ -521,7 +518,7 @@ static int fec_enet_txq_submit_skb(struct fec_enet_priv_tx_q *txq,
521518
txq->bd.cur = bdp;
522519

523520
/* Trigger transmission start */
524-
writel(0, fep->hwp + FEC_X_DES_ACTIVE(queue));
521+
writel(0, txq->bd.reg_desc_active);
525522

526523
return 0;
527524
}
@@ -534,7 +531,6 @@ fec_enet_txq_put_data_tso(struct fec_enet_priv_tx_q *txq, struct sk_buff *skb,
534531
{
535532
struct fec_enet_private *fep = netdev_priv(ndev);
536533
struct bufdesc_ex *ebdp = container_of(bdp, struct bufdesc_ex, desc);
537-
unsigned short queue = skb_get_queue_mapping(skb);
538534
unsigned short status;
539535
unsigned int estatus = 0;
540536
dma_addr_t addr;
@@ -566,7 +562,7 @@ fec_enet_txq_put_data_tso(struct fec_enet_priv_tx_q *txq, struct sk_buff *skb,
566562

567563
if (fep->bufdesc_ex) {
568564
if (fep->quirks & FEC_QUIRK_HAS_AVB)
569-
estatus |= FEC_TX_BD_FTYPE(queue);
565+
estatus |= FEC_TX_BD_FTYPE(txq->bd.qid);
570566
if (skb->ip_summed == CHECKSUM_PARTIAL)
571567
estatus |= BD_ENET_TX_PINS | BD_ENET_TX_IINS;
572568
ebdp->cbd_bdu = 0;
@@ -595,7 +591,6 @@ fec_enet_txq_put_hdr_tso(struct fec_enet_priv_tx_q *txq,
595591
struct fec_enet_private *fep = netdev_priv(ndev);
596592
int hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb);
597593
struct bufdesc_ex *ebdp = container_of(bdp, struct bufdesc_ex, desc);
598-
unsigned short queue = skb_get_queue_mapping(skb);
599594
void *bufaddr;
600595
unsigned long dmabuf;
601596
unsigned short status;
@@ -630,7 +625,7 @@ fec_enet_txq_put_hdr_tso(struct fec_enet_priv_tx_q *txq,
630625

631626
if (fep->bufdesc_ex) {
632627
if (fep->quirks & FEC_QUIRK_HAS_AVB)
633-
estatus |= FEC_TX_BD_FTYPE(queue);
628+
estatus |= FEC_TX_BD_FTYPE(txq->bd.qid);
634629
if (skb->ip_summed == CHECKSUM_PARTIAL)
635630
estatus |= BD_ENET_TX_PINS | BD_ENET_TX_IINS;
636631
ebdp->cbd_bdu = 0;
@@ -650,7 +645,6 @@ static int fec_enet_txq_submit_tso(struct fec_enet_priv_tx_q *txq,
650645
int hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb);
651646
int total_len, data_left;
652647
struct bufdesc *bdp = txq->bd.cur;
653-
unsigned short queue = skb_get_queue_mapping(skb);
654648
struct tso_t tso;
655649
unsigned int index = 0;
656650
int ret;
@@ -715,11 +709,11 @@ static int fec_enet_txq_submit_tso(struct fec_enet_priv_tx_q *txq,
715709

716710
/* Trigger transmission start */
717711
if (!(fep->quirks & FEC_QUIRK_ERR007885) ||
718-
!readl(fep->hwp + FEC_X_DES_ACTIVE(queue)) ||
719-
!readl(fep->hwp + FEC_X_DES_ACTIVE(queue)) ||
720-
!readl(fep->hwp + FEC_X_DES_ACTIVE(queue)) ||
721-
!readl(fep->hwp + FEC_X_DES_ACTIVE(queue)))
722-
writel(0, fep->hwp + FEC_X_DES_ACTIVE(queue));
712+
!readl(txq->bd.reg_desc_active) ||
713+
!readl(txq->bd.reg_desc_active) ||
714+
!readl(txq->bd.reg_desc_active) ||
715+
!readl(txq->bd.reg_desc_active))
716+
writel(0, txq->bd.reg_desc_active);
723717

724718
return 0;
725719

@@ -819,7 +813,7 @@ static void fec_enet_active_rxring(struct net_device *ndev)
819813
int i;
820814

821815
for (i = 0; i < fep->num_rx_queues; i++)
822-
writel(0, fep->hwp + FEC_R_DES_ACTIVE(i));
816+
writel(0, fep->rx_queue[i]->bd.reg_desc_active);
823817
}
824818

825819
static void fec_enet_enable_ring(struct net_device *ndev)
@@ -1255,8 +1249,8 @@ fec_enet_tx_queue(struct net_device *ndev, u16 queue_id)
12551249

12561250
/* ERR006538: Keep the transmitter going */
12571251
if (bdp != txq->bd.cur &&
1258-
readl(fep->hwp + FEC_X_DES_ACTIVE(queue_id)) == 0)
1259-
writel(0, fep->hwp + FEC_X_DES_ACTIVE(queue_id));
1252+
readl(txq->bd.reg_desc_active) == 0)
1253+
writel(0, txq->bd.reg_desc_active);
12601254
}
12611255

12621256
static void
@@ -1498,7 +1492,7 @@ fec_enet_rx_queue(struct net_device *ndev, int budget, u16 queue_id)
14981492
* incoming frames. On a heavily loaded network, we should be
14991493
* able to keep up at the expense of system resources.
15001494
*/
1501-
writel(0, fep->hwp + FEC_R_DES_ACTIVE(queue_id));
1495+
writel(0, rxq->bd.reg_desc_active);
15021496
}
15031497
rxq->bd.cur = bdp;
15041498
return pkt_received;
@@ -3061,6 +3055,14 @@ static const struct net_device_ops fec_netdev_ops = {
30613055
.ndo_set_features = fec_set_features,
30623056
};
30633057

3058+
static const unsigned short offset_des_active_rxq[] = {
3059+
FEC_R_DES_ACTIVE_0, FEC_R_DES_ACTIVE_1, FEC_R_DES_ACTIVE_2
3060+
};
3061+
3062+
static const unsigned short offset_des_active_txq[] = {
3063+
FEC_X_DES_ACTIVE_0, FEC_X_DES_ACTIVE_1, FEC_X_DES_ACTIVE_2
3064+
};
3065+
30643066
/*
30653067
* XXX: We need to clean up on failure exits here.
30663068
*
@@ -3114,6 +3116,7 @@ static int fec_enet_init(struct net_device *ndev)
31143116
rxq->bd.dma = bd_dma;
31153117
rxq->bd.dsize = dsize;
31163118
rxq->bd.dsize_log2 = dsize_log2;
3119+
rxq->bd.reg_desc_active = fep->hwp + offset_des_active_rxq[i];
31173120
bd_dma += size;
31183121
cbd_base = (struct bufdesc *)(((void *)cbd_base) + size);
31193122
rxq->bd.last = (struct bufdesc *)(((void *)cbd_base) - dsize);
@@ -3129,6 +3132,7 @@ static int fec_enet_init(struct net_device *ndev)
31293132
txq->bd.dma = bd_dma;
31303133
txq->bd.dsize = dsize;
31313134
txq->bd.dsize_log2 = dsize_log2;
3135+
txq->bd.reg_desc_active = fep->hwp + offset_des_active_txq[i];
31323136
bd_dma += size;
31333137
cbd_base = (struct bufdesc *)(((void *)cbd_base) + size);
31343138
txq->bd.last = (struct bufdesc *)(((void *)cbd_base) - dsize);

0 commit comments

Comments
 (0)