Lines Matching refs:lane
267 /* PHY lane CSR accessing from SDS indirectly */
519 u32 speed[MAX_LANE]; /* Index for override parameter per lane */
657 static void serdes_wr(struct xgene_phy_ctx *ctx, int lane, u32 reg, u32 data)
663 reg += lane * SERDES_LANE_STRIDE;
672 static void serdes_rd(struct xgene_phy_ctx *ctx, int lane, u32 reg, u32 *data)
677 reg += lane * SERDES_LANE_STRIDE;
683 static void serdes_clrbits(struct xgene_phy_ctx *ctx, int lane, u32 reg,
688 serdes_rd(ctx, lane, reg, &val);
690 serdes_wr(ctx, lane, reg, val);
693 static void serdes_setbits(struct xgene_phy_ctx *ctx, int lane, u32 reg,
698 serdes_rd(ctx, lane, reg, &val);
700 serdes_wr(ctx, lane, reg, val);
855 /* Configure lane for 20-bits */
943 int lane;
945 for (lane = 0; lane < MAX_LANE; lane++) {
946 serdes_wr(ctx, lane, RXTX_REG147, 0x6);
949 serdes_rd(ctx, lane, RXTX_REG0, &val);
953 serdes_wr(ctx, lane, RXTX_REG0, val);
956 serdes_rd(ctx, lane, RXTX_REG1, &val);
959 ctx->sata_param.txboostgain[lane * 3 +
960 ctx->sata_param.speed[lane]]);
961 serdes_wr(ctx, lane, RXTX_REG1, val);
965 serdes_rd(ctx, lane, RXTX_REG2, &val);
969 serdes_wr(ctx, lane, RXTX_REG2, val);
972 serdes_rd(ctx, lane, RXTX_REG4, &val);
974 serdes_wr(ctx, lane, RXTX_REG4, val);
977 serdes_rd(ctx, lane, RXTX_REG1, &val);
980 serdes_wr(ctx, lane, RXTX_REG1, val);
984 serdes_rd(ctx, lane, RXTX_REG5, &val);
986 ctx->sata_param.txprecursor_cn1[lane * 3 +
987 ctx->sata_param.speed[lane]]);
989 ctx->sata_param.txpostcursor_cp1[lane * 3 +
990 ctx->sata_param.speed[lane]]);
992 ctx->sata_param.txprecursor_cn2[lane * 3 +
993 ctx->sata_param.speed[lane]]);
994 serdes_wr(ctx, lane, RXTX_REG5, val);
997 serdes_rd(ctx, lane, RXTX_REG6, &val);
999 ctx->sata_param.txamplitude[lane * 3 +
1000 ctx->sata_param.speed[lane]]);
1005 serdes_wr(ctx, lane, RXTX_REG6, val);
1008 serdes_rd(ctx, lane, RXTX_REG7, &val);
1011 serdes_wr(ctx, lane, RXTX_REG7, val);
1014 serdes_rd(ctx, lane, RXTX_REG8, &val);
1020 serdes_wr(ctx, lane, RXTX_REG8, val);
1023 serdes_rd(ctx, lane, RXTX_REG11, &val);
1025 serdes_wr(ctx, lane, RXTX_REG11, val);
1028 serdes_rd(ctx, lane, RXTX_REG12, &val);
1032 serdes_wr(ctx, lane, RXTX_REG12, val);
1035 serdes_rd(ctx, lane, RXTX_REG26, &val);
1038 serdes_wr(ctx, lane, RXTX_REG26, val);
1040 serdes_wr(ctx, lane, RXTX_REG28, 0x0);
1043 serdes_wr(ctx, lane, RXTX_REG31, 0x0);
1046 serdes_rd(ctx, lane, RXTX_REG61, &val);
1050 serdes_wr(ctx, lane, RXTX_REG61, val);
1052 serdes_rd(ctx, lane, RXTX_REG62, &val);
1054 serdes_wr(ctx, lane, RXTX_REG62, val);
1059 serdes_rd(ctx, lane, reg, &val);
1063 serdes_wr(ctx, lane, reg, val);
1069 serdes_rd(ctx, lane, reg, &val);
1073 serdes_wr(ctx, lane, reg, val);
1079 serdes_rd(ctx, lane, reg, &val);
1083 serdes_wr(ctx, lane, reg, val);
1086 serdes_rd(ctx, lane, RXTX_REG102, &val);
1088 serdes_wr(ctx, lane, RXTX_REG102, val);
1090 serdes_wr(ctx, lane, RXTX_REG114, 0xffe0);
1092 serdes_rd(ctx, lane, RXTX_REG125, &val);
1094 ctx->sata_param.txeyedirection[lane * 3 +
1095 ctx->sata_param.speed[lane]]);
1097 ctx->sata_param.txeyetuning[lane * 3 +
1098 ctx->sata_param.speed[lane]]);
1100 serdes_wr(ctx, lane, RXTX_REG125, val);
1102 serdes_rd(ctx, lane, RXTX_REG127, &val);
1104 serdes_wr(ctx, lane, RXTX_REG127, val);
1106 serdes_rd(ctx, lane, RXTX_REG128, &val);
1108 serdes_wr(ctx, lane, RXTX_REG128, val);
1110 serdes_rd(ctx, lane, RXTX_REG145, &val);
1120 serdes_wr(ctx, lane, RXTX_REG145, val);
1128 serdes_wr(ctx, lane, reg, 0xFFFF);
1263 /* Release PHY lane from reset (active high) */
1342 static void xgene_phy_force_lat_summer_cal(struct xgene_phy_ctx *ctx, int lane)
1370 serdes_setbits(ctx, lane, RXTX_REG127,
1377 serdes_clrbits(ctx, lane, RXTX_REG127,
1386 serdes_setbits(ctx, lane, RXTX_REG127,
1393 serdes_clrbits(ctx, lane, RXTX_REG127,
1396 /* Configure the PHY lane for calibration */
1397 serdes_wr(ctx, lane, RXTX_REG28, 0x7);
1398 serdes_wr(ctx, lane, RXTX_REG31, 0x7e00);
1399 serdes_clrbits(ctx, lane, RXTX_REG4,
1401 serdes_clrbits(ctx, lane, RXTX_REG7,
1404 serdes_wr(ctx, lane, serdes_reg[i].reg,
1408 static void xgene_phy_reset_rxd(struct xgene_phy_ctx *ctx, int lane)
1411 serdes_clrbits(ctx, lane, RXTX_REG7, RXTX_REG7_RESETB_RXD_MASK);
1414 serdes_setbits(ctx, lane, RXTX_REG7, RXTX_REG7_RESETB_RXD_MASK);
1422 static void xgene_phy_gen_avg_val(struct xgene_phy_ctx *ctx, int lane)
1436 dev_dbg(ctx->dev, "Generating avg calibration value for lane %d\n",
1437 lane);
1440 serdes_setbits(ctx, lane, RXTX_REG12,
1443 serdes_wr(ctx, lane, RXTX_REG28, 0x0000);
1445 serdes_wr(ctx, lane, RXTX_REG31, 0x0000);
1456 xgene_phy_force_lat_summer_cal(ctx, lane);
1458 serdes_rd(ctx, lane, RXTX_REG21, &val);
1463 serdes_rd(ctx, lane, RXTX_REG22, &val);
1468 serdes_rd(ctx, lane, RXTX_REG23, &val);
1472 serdes_rd(ctx, lane, RXTX_REG24, &val);
1476 serdes_rd(ctx, lane, RXTX_REG121, &val);
1506 xgene_phy_reset_rxd(ctx, lane);
1510 serdes_rd(ctx, lane, RXTX_REG127, &val);
1515 serdes_wr(ctx, lane, RXTX_REG127, val);
1517 serdes_rd(ctx, lane, RXTX_REG128, &val);
1522 serdes_wr(ctx, lane, RXTX_REG128, val);
1524 serdes_rd(ctx, lane, RXTX_REG129, &val);
1529 serdes_wr(ctx, lane, RXTX_REG129, val);
1531 serdes_rd(ctx, lane, RXTX_REG130, &val);
1536 serdes_wr(ctx, lane, RXTX_REG130, val);
1539 serdes_rd(ctx, lane, RXTX_REG14, &val);
1542 serdes_wr(ctx, lane, RXTX_REG14, val);
1558 serdes_rd(ctx, lane, RXTX_REG14, &val);
1560 serdes_wr(ctx, lane, RXTX_REG14, val);
1563 serdes_rd(ctx, lane, RXTX_REG127, &val);
1566 serdes_wr(ctx, lane, RXTX_REG127, val);
1569 serdes_rd(ctx, lane, RXTX_REG12, &val);
1571 serdes_wr(ctx, lane, RXTX_REG12, val);
1573 serdes_wr(ctx, lane, RXTX_REG28, 0x0007);
1575 serdes_wr(ctx, lane, RXTX_REG31, 0x7e00);