Commit ae3dcd04880ba5b21ffd62e91713c14b4fd92ec5
Committed by
York Sun
1 parent
7d0d355fee
Exists in
master
and in
53 other branches
powerpc/t4240: fix lanes routing for QSGMII protocols
When using QSGMII protocols, the first lane and third lane on each slot need to be swapped. Signed-off-by: Shaohui Xie <Shaohui.Xie@freescale.com> Acked-by: York Sun <yorksun@freescale.com>
Showing 1 changed file with 37 additions and 2 deletions Side-by-side Diff
board/freescale/t4qds/t4240qds.c
... | ... | @@ -353,25 +353,60 @@ |
353 | 353 | srds_prtcl_s1 = in_be32(&gur->rcwsr[4]) & |
354 | 354 | FSL_CORENET2_RCWSR4_SRDS1_PRTCL; |
355 | 355 | srds_prtcl_s1 >>= FSL_CORENET2_RCWSR4_SRDS1_PRTCL_SHIFT; |
356 | - if (srds_prtcl_s1) { | |
356 | + switch (srds_prtcl_s1) { | |
357 | + case 38: | |
358 | + /* swap first lane and third lane on slot1 */ | |
359 | + vsc3316_fsm1_tx[0][1] = 14; | |
360 | + vsc3316_fsm1_tx[6][1] = 0; | |
361 | + vsc3316_fsm1_rx[1][1] = 2; | |
362 | + vsc3316_fsm1_rx[6][1] = 13; | |
363 | + case 40: | |
364 | + case 46: | |
365 | + case 48: | |
366 | + /* swap first lane and third lane on slot2 */ | |
367 | + vsc3316_fsm1_tx[2][1] = 8; | |
368 | + vsc3316_fsm1_tx[4][1] = 6; | |
369 | + vsc3316_fsm1_rx[2][1] = 10; | |
370 | + vsc3316_fsm1_rx[5][1] = 5; | |
371 | + default: | |
357 | 372 | ret = vsc3316_config(VSC3316_FSM_TX_ADDR, vsc3316_fsm1_tx, 8); |
358 | 373 | if (ret) |
359 | 374 | return ret; |
360 | 375 | ret = vsc3316_config(VSC3316_FSM_RX_ADDR, vsc3316_fsm1_rx, 8); |
361 | 376 | if (ret) |
362 | 377 | return ret; |
378 | + break; | |
363 | 379 | } |
364 | 380 | |
365 | 381 | srds_prtcl_s2 = in_be32(&gur->rcwsr[4]) & |
366 | 382 | FSL_CORENET2_RCWSR4_SRDS2_PRTCL; |
367 | 383 | srds_prtcl_s2 >>= FSL_CORENET2_RCWSR4_SRDS2_PRTCL_SHIFT; |
368 | - if (srds_prtcl_s2) { | |
384 | + switch (srds_prtcl_s2) { | |
385 | + case 38: | |
386 | + /* swap first lane and third lane on slot3 */ | |
387 | + vsc3316_fsm2_tx[2][1] = 11; | |
388 | + vsc3316_fsm2_tx[5][1] = 4; | |
389 | + vsc3316_fsm2_rx[2][1] = 9; | |
390 | + vsc3316_fsm2_rx[4][1] = 7; | |
391 | + case 40: | |
392 | + case 46: | |
393 | + case 48: | |
394 | + case 50: | |
395 | + case 52: | |
396 | + case 54: | |
397 | + /* swap first lane and third lane on slot4 */ | |
398 | + vsc3316_fsm2_tx[6][1] = 3; | |
399 | + vsc3316_fsm2_tx[1][1] = 12; | |
400 | + vsc3316_fsm2_rx[0][1] = 1; | |
401 | + vsc3316_fsm2_rx[6][1] = 15; | |
402 | + default: | |
369 | 403 | ret = vsc3316_config(VSC3316_FSM_TX_ADDR, vsc3316_fsm2_tx, 8); |
370 | 404 | if (ret) |
371 | 405 | return ret; |
372 | 406 | ret = vsc3316_config(VSC3316_FSM_RX_ADDR, vsc3316_fsm2_rx, 8); |
373 | 407 | if (ret) |
374 | 408 | return ret; |
409 | + break; | |
375 | 410 | } |
376 | 411 | |
377 | 412 | return 0; |