Skip to content

Commit d543a76

Browse files
Nimrod Andydavem330
Nimrod Andy
authored andcommitted
net: fec: init maximum receive buffer size for ring1 and ring2
i.MX6SX fec support three rx ring1, the current driver lost to init ring1 and ring2 maximum receive buffer size, that cause receving frame date length error. The driver reports "rcv is not +last" error log in user case. Signed-off-by: Fugang Duan <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent c33d23c commit d543a76

File tree

2 files changed

+10
-5
lines changed

2 files changed

+10
-5
lines changed

drivers/net/ethernet/freescale/fec.h

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,13 @@
5353
#define FEC_R_FSTART 0x150 /* FIFO receive start reg */
5454
#define FEC_R_DES_START_1 0x160 /* Receive descriptor ring 1 */
5555
#define FEC_X_DES_START_1 0x164 /* Transmit descriptor ring 1 */
56+
#define FEC_R_BUFF_SIZE_1 0x168 /* Maximum receive buff ring1 size */
5657
#define FEC_R_DES_START_2 0x16c /* Receive descriptor ring 2 */
5758
#define FEC_X_DES_START_2 0x170 /* Transmit descriptor ring 2 */
59+
#define FEC_R_BUFF_SIZE_2 0x174 /* Maximum receive buff ring2 size */
5860
#define FEC_R_DES_START_0 0x180 /* Receive descriptor ring */
5961
#define FEC_X_DES_START_0 0x184 /* Transmit descriptor ring */
60-
#define FEC_R_BUFF_SIZE 0x188 /* Maximum receive buff size */
62+
#define FEC_R_BUFF_SIZE_0 0x188 /* Maximum receive buff size */
6163
#define FEC_R_FIFO_RSFL 0x190 /* Receive FIFO section full threshold */
6264
#define FEC_R_FIFO_RSEM 0x194 /* Receive FIFO section empty threshold */
6365
#define FEC_R_FIFO_RAEM 0x198 /* Receive FIFO almost empty threshold */
@@ -165,7 +167,9 @@
165167
#define FEC_X_DES_START_0 0x3d4 /* Transmit descriptor ring */
166168
#define FEC_X_DES_START_1 FEC_X_DES_START_0
167169
#define FEC_X_DES_START_2 FEC_X_DES_START_0
168-
#define FEC_R_BUFF_SIZE 0x3d8 /* Maximum receive buff size */
170+
#define FEC_R_BUFF_SIZE_0 0x3d8 /* Maximum receive buff size */
171+
#define FEC_R_BUFF_SIZE_1 FEC_R_BUFF_SIZE_0
172+
#define FEC_R_BUFF_SIZE_2 FEC_R_BUFF_SIZE_0
169173
#define FEC_FIFO_RAM 0x400 /* FIFO RAM buffer */
170174
/* Not existed in real chip
171175
* Just for pass build.
@@ -285,6 +289,9 @@ struct bufdesc_ex {
285289
#define FEC_X_DES_START(X) (((X) == 1) ? FEC_X_DES_START_1 : \
286290
(((X) == 2) ? \
287291
FEC_X_DES_START_2 : FEC_X_DES_START_0))
292+
#define FEC_R_BUFF_SIZE(X) (((X) == 1) ? FEC_R_BUFF_SIZE_1 : \
293+
(((X) == 2) ? \
294+
FEC_R_BUFF_SIZE_2 : FEC_R_BUFF_SIZE_0))
288295
#define FEC_R_DES_ACTIVE(X) (((X) == 1) ? FEC_R_DES_ACTIVE_1 : \
289296
(((X) == 2) ? \
290297
FEC_R_DES_ACTIVE_2 : FEC_R_DES_ACTIVE_0))

drivers/net/ethernet/freescale/fec_main.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -867,6 +867,7 @@ static void fec_enet_enable_ring(struct net_device *ndev)
867867
for (i = 0; i < fep->num_rx_queues; i++) {
868868
rxq = fep->rx_queue[i];
869869
writel(rxq->bd_dma, fep->hwp + FEC_R_DES_START(i));
870+
writel(PKT_MAXBLR_SIZE, fep->hwp + FEC_R_BUFF_SIZE(i));
870871

871872
/* enable DMA1/2 */
872873
if (i)
@@ -941,9 +942,6 @@ fec_restart(struct net_device *ndev)
941942
/* Clear any outstanding interrupt. */
942943
writel(0xffc00000, fep->hwp + FEC_IEVENT);
943944

944-
/* Set maximum receive buffer size. */
945-
writel(PKT_MAXBLR_SIZE, fep->hwp + FEC_R_BUFF_SIZE);
946-
947945
fec_enet_bd_init(ndev);
948946

949947
fec_enet_enable_ring(ndev);

0 commit comments

Comments
 (0)