*/
#define RTPCS_930X_SDS_MODE_SGMII 0x02
#define RTPCS_930X_SDS_MODE_1000BASEX 0x04
+#define RTPCS_930X_SDS_MODE_QSGMII 0x06
#define RTPCS_930X_SDS_MODE_USXGMII 0x0d
#define RTPCS_930X_SDS_MODE_XSGMII 0x10
#define RTPCS_930X_SDS_MODE_2500BASEX 0x16
return RTPCS_930X_SDS_MODE_2500BASEX;
case RTPCS_SDS_MODE_10GBASER:
return RTPCS_930X_SDS_MODE_10GBASER;
+ case RTPCS_SDS_MODE_QSGMII:
+ return RTPCS_930X_SDS_MODE_QSGMII;
case RTPCS_SDS_MODE_XSGMII:
return RTPCS_930X_SDS_MODE_XSGMII;
case RTPCS_SDS_MODE_USXGMII_10GSXGMII:
post_en = 0;
page = 0x2f;
break;
+ case RTPCS_SDS_MODE_QSGMII:
+ return;
default:
pr_err("%s: unsupported SerDes hw mode\n", __func__);
return;
u32 v = 0;
switch (hw_mode) {
+ case RTPCS_SDS_MODE_QSGMII:
case RTPCS_SDS_MODE_XSGMII:
v = rtpcs_sds_read_bits(sds, 0x1, 0x1, 15, 8) << 16;
v |= rtpcs_sds_read_bits(sds, 0x1, 0x0, 15, 0);
{0x06, 0x03, 0xc45c},
};
+static const struct rtpcs_sds_config rtpcs_930x_sds_cfg_5g_qsgmii[] =
+{
+ {0x00, 0x0E, 0x3053},
+ {0x21, 0x00, 0x3C91},{0x21, 0x02, 0xB602},{0x21, 0x07, 0xFA66},{0x21, 0x0A, 0xDF40},
+ {0x2A, 0x02, 0x35A1},{0x2A, 0x03, 0x6960},
+};
+
static void rtpcs_930x_sds_usxgmii_config(struct rtpcs_serdes *sds, int nway_en,
u32 opcode, u32 am_period,
u32 all_am_markers, u32 an_table,
}
break;
+ case RTPCS_SDS_MODE_QSGMII:
+ /* only QSGMII on 5G SerDes (0 + 1) for now */
+ config = rtpcs_930x_sds_cfg_5g_qsgmii;
+ count = ARRAY_SIZE(rtpcs_930x_sds_cfg_5g_qsgmii);
+ break;
+
case RTPCS_SDS_MODE_XSGMII:
if (is_even_sds) {
config = rtpcs_930x_sds_cfg_xsgmii_even;
case RTPCS_SDS_MODE_10GBASER:
case RTPCS_SDS_MODE_USXGMII_10GSXGMII:
case RTPCS_SDS_MODE_USXGMII_10GQXGMII:
+ case RTPCS_SDS_MODE_QSGMII:
case RTPCS_SDS_MODE_XSGMII:
break;
default:
/* Enable Fiber RX */
rtpcs_sds_write_bits(sds, 0x20, 2, 12, 12, 0);
+ if (hw_mode == RTPCS_SDS_MODE_QSGMII)
+ goto skip_cali;
+
/* Calibrate SerDes receiver in loopback mode */
rtpcs_930x_sds_10g_idle(sds);
do {
if (calib_tries >= 3)
pr_warn("%s: SerDes RX calibration failed\n", __func__);
+skip_cali:
/* Leave loopback mode */
rtpcs_930x_sds_tx_config(sds, hw_mode);