static const struct emac_reg_write cdr_setting[] = { {EMAC_QSERDES_RX_CDR_CONTROL, SECONDORDERENABLE | FIRSTORDER_THRESH(3) | SECONDORDERGAIN(2)}, {EMAC_QSERDES_RX_CDR_CONTROL2, SECONDORDERENABLE | FIRSTORDER_THRESH(3) | SECONDORDERGAIN(4)}, }; static const struct emac_reg_write tx_rx_setting[] = { {EMAC_QSERDES_TX_BIST_MODE_LANENO, 0}, {EMAC_QSERDES_TX_TX_DRV_LVL, TX_DRV_LVL_MUX | TX_DRV_LVL(15)}, {EMAC_QSERDES_TX_TRAN_DRVR_EMP_EN, EMP_EN_MUX | EMP_EN}, {EMAC_QSERDES_TX_TX_EMP_POST1_LVL, TX_EMP_POST1_LVL_MUX | TX_EMP_POST1_LVL(1)}, {EMAC_QSERDES_RX_RX_EQ_GAIN12, RX_EQ_GAIN2(15) | RX_EQ_GAIN1(15)}, {EMAC_QSERDES_TX_LANE_MODE, LANE_MODE(8)}, }; int emac_sgmii_init_fsm9900(struct emac_adapter *adpt) { struct emac_phy *phy = &adpt->phy; unsigned int i; emac_reg_write_all(phy->base, physical_coding_sublayer_programming, ARRAY_SIZE(physical_coding_sublayer_programming)); emac_reg_write_all(phy->base, sysclk_refclk_setting, ARRAY_SIZE(sysclk_refclk_setting)); emac_reg_write_all(phy->base, pll_setting, ARRAY_SIZE(pll_setting)); emac_reg_write_all(phy->base, cdr_setting, ARRAY_SIZE(cdr_setting)); emac_reg_write_all(phy->base, tx_rx_setting, ARRAY_SIZE(tx_rx_setting));
{EMAC_SGMII_LN_VGA_INITVAL, VGA_THRESH_DFE(31)}, {EMAC_SGMII_LN_SIGDET_ENABLES, SIGDET_LP_BYP_PS0_TO_PS2 | SIGDET_FLT_BYP}, {EMAC_SGMII_LN_SIGDET_CNTRL, SIGDET_LVL(8)}, {EMAC_SGMII_LN_SIGDET_DEGLITCH_CNTRL, SIGDET_DEGLITCH_CTRL(4)}, {EMAC_SGMII_LN_RX_MISC_CNTRL0, INVERT_PCS_RX_CLK}, {EMAC_SGMII_LN_DRVR_LOGIC_CLKDIV, DRVR_LOGIC_CLK_EN | DRVR_LOGIC_CLK_DIV(4)}, {EMAC_SGMII_LN_PARALLEL_RATE, PARALLEL_RATE_MODE0(1)}, {EMAC_SGMII_LN_TX_BAND_MODE, BAND_MODE0(1)}, {EMAC_SGMII_LN_RX_BAND, BAND_MODE0(2)}, {EMAC_SGMII_LN_DRVR_CTRL1, RESCODE_OFFSET(7)}, {EMAC_SGMII_LN_RX_RESECODE_OFFSET, RESCODE_OFFSET(9)}, {EMAC_SGMII_LN_LANE_MODE, LANE_MODE(26)}, {EMAC_SGMII_LN_RX_RCVR_PATH1_MODE0, CDR_PD_SEL_MODE0(2) | EN_DLL_MODE0 | EN_IQ_DCC_MODE0 | EN_IQCAL_MODE0}, {EMAC_SGMII_LN_RSM_CONFIG, BYPASS_RSM_SAMP_CAL | BYPASS_RSM_DLL_CAL}, }; static const struct emac_reg_write physical_coding_sublayer_programming[] = { {EMAC_SGMII_PHY_POW_DWN_CTRL0, PWRDN_B}, {EMAC_SGMII_PHY_CDR_CTRL0, CDR_MAX_CNT(15)}, {EMAC_SGMII_PHY_TX_PWR_CTRL, 0}, {EMAC_SGMII_PHY_LANE_CTRL1, L0_RX_EQUALIZE_ENABLE}, }; int emac_sgmii_init_qdf2400(struct emac_adapter *adpt) { struct emac_sgmii *phy = &adpt->phy;