Commit ae3dcd04880ba5b21ffd62e91713c14b4fd92ec5

Authored by Shaohui Xie
Committed by York Sun
1 parent 7d0d355fee

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;