From: Alice Guo <[email protected]>

Extract steps 1.6-1.13 of PMA MMD initialization from
xpcs_phy_usxgmii_pma_config() into xpcs_phy_common_init_seq_1_pma() to
improve code reusability.

No functional changes.

Signed-off-by: Alice Guo <[email protected]>
---
 drivers/net/fsl_enetc_xpcs_phy.c | 181 +++++++++++++++++++++------------------
 1 file changed, 99 insertions(+), 82 deletions(-)

diff --git a/drivers/net/fsl_enetc_xpcs_phy.c b/drivers/net/fsl_enetc_xpcs_phy.c
index 4039690223d..9c1ee752a66 100644
--- a/drivers/net/fsl_enetc_xpcs_phy.c
+++ b/drivers/net/fsl_enetc_xpcs_phy.c
@@ -261,6 +261,100 @@ int xpcs_phy_write_pma(struct udevice *dev, int reg, u16 
val)
        return xpcs_write(dev, MDIO_MMD_PMAPMD, XPCS_PHY_REG(reg), val);
 }
 
+static int xpcs_phy_common_init_seq_1_pma(struct udevice *dev)
+{
+       ulong begin;
+       u16 val;
+
+       /* 1.6 Turn off C37 auto-negotiation */
+       val = xpcs_read(dev, MDIO_MMD_VEND2, XPCS_PHY_REG(MII_CTRL));
+       val &= ~MII_CTRL_AN_ENABLE;
+       xpcs_write(dev, MDIO_MMD_VEND2, XPCS_PHY_REG(MII_CTRL), val);
+
+       /* 1.7 Assert tx_reset and rx_reset */
+       val = xpcs_phy_read_pma(dev, PMA_MP_12G_16G_25G_TX_GENCTRL0);
+       val |= PMA_TX_GENCTRL0_TX_RST_0;
+       xpcs_phy_write_pma(dev, PMA_MP_12G_16G_25G_TX_GENCTRL0, val);
+
+       val = xpcs_phy_read_pma(dev, PMA_MP_12G_16G_25G_RX_GENCTRL1);
+       val |= PMA_RX_GENCTRL1_RX_RST_0;
+       xpcs_phy_write_pma(dev, PMA_MP_12G_16G_25G_RX_GENCTRL1, val);
+
+       /* 1.8 Wait for more than 1us */
+       udelay(5);
+
+       /* 1.9 Deassert tx_reset and rx_reset */
+       val = xpcs_phy_read_pma(dev, PMA_MP_12G_16G_25G_TX_GENCTRL0);
+       val &= ~PMA_TX_GENCTRL0_TX_RST_0;
+       xpcs_phy_write_pma(dev, PMA_MP_12G_16G_25G_TX_GENCTRL0, val);
+
+       val = xpcs_phy_read_pma(dev, PMA_MP_12G_16G_25G_RX_GENCTRL1);
+       val &= ~PMA_RX_GENCTRL1_RX_RST_0;
+       xpcs_phy_write_pma(dev, PMA_MP_12G_16G_25G_RX_GENCTRL1, val);
+
+       /* 1.10 Power down MPLL */
+       val = xpcs_phy_read_pma(dev, PMA_MP_12G_16G_25G_TX_POWER_STATE_CTRL);
+       val = u16_replace_bits(val, 3, PMA_POWER_STATE_CTRL_TX0_PSTATE_MASK);
+       xpcs_phy_write_pma(dev, PMA_MP_12G_16G_25G_TX_POWER_STATE_CTRL, val);
+
+       val = xpcs_phy_read_pma(dev, PMA_MP_12G_16G_25G_MPLL_CMN_CTRL);
+       val &= ~PMA_MPLL_CMN_CTRL_MPLL_EN_0;
+       xpcs_phy_write_pma(dev, PMA_MP_12G_16G_25G_MPLL_CMN_CTRL, val);
+
+       val = xpcs_phy_read_pma(dev, PMA_MP_12G_16G_25G_TX_GENCTRL0);
+       val &= ~PMA_TX_GENCTRL0_TX_DT_EN_0;
+       xpcs_phy_write_pma(dev, PMA_MP_12G_16G_25G_TX_GENCTRL0, val);
+
+       /* 1.11 Change RX0 power state to P2 */
+       val = xpcs_phy_read_pma(dev, PMA_MP_12G_16G_25G_RX_GENCTRL0);
+       val &= ~PMA_RX_GENCTRL0_RX_DT_EN_0;
+       xpcs_phy_write_pma(dev, PMA_MP_12G_16G_25G_RX_GENCTRL0, val);
+
+       /* TODO: check if it is needed */
+       val = xpcs_phy_read_pma(dev, PMA_MP_12G_16G_25G_RX_POWER_STATE_CTRL);
+       val = u16_replace_bits(val, 1, PMA_RX_POWER_STATE_CTRL_RX0_PSTATE_MASK);
+       xpcs_phy_write_pma(dev, PMA_MP_12G_16G_25G_RX_POWER_STATE_CTRL, val);
+
+       val = xpcs_phy_read_pma(dev, PMA_MP_12G_16G_25G_RX_POWER_STATE_CTRL);
+       val = u16_replace_bits(val, 3, PMA_RX_POWER_STATE_CTRL_RX0_PSTATE_MASK);
+       xpcs_phy_write_pma(dev, PMA_MP_12G_16G_25G_RX_POWER_STATE_CTRL, val);
+
+       /* 1.12 Assert request of transmit and receive */
+       val = xpcs_phy_read_pma(dev, PMA_MP_12G_16G_TX_GENCTRL2);
+       val |= PMA_TX_GENCTRL2_TX_REQ_0;
+       xpcs_phy_write_pma(dev, PMA_MP_12G_16G_TX_GENCTRL2, val);
+
+       val = xpcs_phy_read_pma(dev, PMA_MP_12G_16G_RX_GENCTRL2);
+       val |= PMA_RX_GENCTRL2_RX_REQ_0;
+       xpcs_phy_write_pma(dev, PMA_MP_12G_16G_RX_GENCTRL2, val);
+
+       /* 1.13 Poll for acknlowledge */
+       begin = get_timer(0);
+       do {
+               val = xpcs_phy_read_pma(dev, PMA_MP_12G_16G_TX_GENCTRL2);
+               if (get_timer(begin) > 500) {
+                       dev_err(dev, "Polling timeout, line: %d\n", __LINE__);
+                       goto timeout;
+               }
+               mdelay(10);
+       } while (val & PMA_TX_GENCTRL2_TX_REQ_0);
+
+       begin = get_timer(0);
+       do {
+               val = xpcs_phy_read_pma(dev, PMA_MP_12G_16G_RX_GENCTRL2);
+               if (get_timer(begin) > 500) {
+                       dev_err(dev, "Polling timeout, line: %d\n", __LINE__);
+                       goto timeout;
+               }
+               mdelay(10);
+       } while (val & PMA_RX_GENCTRL2_RX_REQ_0);
+
+       return 0;
+
+timeout:
+       return -ETIMEDOUT;
+}
+
 int xpcs_phy_usxgmii_init_seq_2(struct udevice *dev)
 {
        ulong begin;
@@ -436,93 +530,16 @@ timeout:
 
 int xpcs_phy_usxgmii_pma_config(struct udevice *dev)
 {
+       int ret;
        ulong begin;
        u16 val;
 
        xpcs_phy_reg_lock(dev);
 
-       /* 1.6 Turn off C37 auto-negotiation */
-       val = xpcs_read(dev, MDIO_MMD_VEND2, XPCS_PHY_REG(MII_CTRL));
-       val &= ~MII_CTRL_AN_ENABLE;
-       xpcs_write(dev, MDIO_MMD_VEND2, XPCS_PHY_REG(MII_CTRL), val);
-
-       /* 1.7 Assert tx_reset and rx_reset*/
-       val = xpcs_phy_read_pma(dev, PMA_MP_12G_16G_25G_TX_GENCTRL0);
-       val |= PMA_TX_GENCTRL0_TX_RST_0;
-       xpcs_phy_write_pma(dev, PMA_MP_12G_16G_25G_TX_GENCTRL0, val);
-
-       val = xpcs_phy_read_pma(dev, PMA_MP_12G_16G_25G_RX_GENCTRL1);
-       val |= PMA_RX_GENCTRL1_RX_RST_0;
-       xpcs_phy_write_pma(dev, PMA_MP_12G_16G_25G_RX_GENCTRL1, val);
-
-       /* 1.8 Wait for more than 1us */
-       udelay(5);
-
-       /* 1.9 Deassert tx_reset and rx_reset*/
-       val = xpcs_phy_read_pma(dev, PMA_MP_12G_16G_25G_TX_GENCTRL0);
-       val &= ~PMA_TX_GENCTRL0_TX_RST_0;
-       xpcs_phy_write_pma(dev, PMA_MP_12G_16G_25G_TX_GENCTRL0, val);
-
-       val = xpcs_phy_read_pma(dev, PMA_MP_12G_16G_25G_RX_GENCTRL1);
-       val &= ~PMA_RX_GENCTRL1_RX_RST_0;
-       xpcs_phy_write_pma(dev, PMA_MP_12G_16G_25G_RX_GENCTRL1, val);
-
-       /* 1.10 Power down MPLLA */
-       val = xpcs_phy_read_pma(dev, PMA_MP_12G_16G_25G_TX_POWER_STATE_CTRL);
-       val = u16_replace_bits(val, 3, PMA_POWER_STATE_CTRL_TX0_PSTATE_MASK);
-       xpcs_phy_write_pma(dev, PMA_MP_12G_16G_25G_TX_POWER_STATE_CTRL, val);
-
-       val = xpcs_phy_read_pma(dev, PMA_MP_12G_16G_25G_MPLL_CMN_CTRL);
-       val &= ~PMA_MPLL_CMN_CTRL_MPLL_EN_0;
-       xpcs_phy_write_pma(dev, PMA_MP_12G_16G_25G_MPLL_CMN_CTRL, val);
-
-       val = xpcs_phy_read_pma(dev, PMA_MP_12G_16G_25G_TX_GENCTRL0);
-       val &= ~PMA_TX_GENCTRL0_TX_DT_EN_0;
-       xpcs_phy_write_pma(dev, PMA_MP_12G_16G_25G_TX_GENCTRL0, val);
-
-       /* 1.11 Change RX0 power state to P2 */
-       val = xpcs_phy_read_pma(dev, PMA_MP_12G_16G_25G_RX_GENCTRL0);
-       val &= ~PMA_RX_GENCTRL0_RX_DT_EN_0;
-       xpcs_phy_write_pma(dev, PMA_MP_12G_16G_25G_RX_GENCTRL0, val);
-
-       /* TODO: check if it is needed */
-       val = xpcs_phy_read_pma(dev, PMA_MP_12G_16G_25G_RX_POWER_STATE_CTRL);
-       val = u16_replace_bits(val, 1, PMA_RX_POWER_STATE_CTRL_RX0_PSTATE_MASK);
-       xpcs_phy_write_pma(dev, PMA_MP_12G_16G_25G_RX_POWER_STATE_CTRL, val);
-
-       val = xpcs_phy_read_pma(dev, PMA_MP_12G_16G_25G_RX_POWER_STATE_CTRL);
-       val = u16_replace_bits(val, 3, PMA_RX_POWER_STATE_CTRL_RX0_PSTATE_MASK);
-       xpcs_phy_write_pma(dev, PMA_MP_12G_16G_25G_RX_POWER_STATE_CTRL, val);
-
-       /* 1.12 Assert request of transmit and receive */
-       val = xpcs_phy_read_pma(dev, PMA_MP_12G_16G_TX_GENCTRL2);
-       val |= PMA_TX_GENCTRL2_TX_REQ_0;
-       xpcs_phy_write_pma(dev, PMA_MP_12G_16G_TX_GENCTRL2, val);
-
-       val = xpcs_phy_read_pma(dev, PMA_MP_12G_16G_RX_GENCTRL2);
-       val |= PMA_RX_GENCTRL2_RX_REQ_0;
-       xpcs_phy_write_pma(dev, PMA_MP_12G_16G_RX_GENCTRL2, val);
-
-       /* 1.13 Poll for acknlowledge */
-       begin = get_timer(0);
-       do {
-               val = xpcs_phy_read_pma(dev, PMA_MP_12G_16G_TX_GENCTRL2);
-               if (get_timer(begin) > 500) {
-                       dev_err(dev, "Polling timeout, line: %d\n", __LINE__);
-                       goto timeout;
-               }
-               mdelay(10);
-       } while (val & PMA_TX_GENCTRL2_TX_REQ_0);
-
-       begin = get_timer(0);
-       do {
-               val = xpcs_phy_read_pma(dev, PMA_MP_12G_16G_RX_GENCTRL2);
-               if (get_timer(begin) > 500) {
-                       dev_err(dev, "Polling timeout, line: %d\n", __LINE__);
-                       goto timeout;
-               }
-               mdelay(10);
-       } while (val & PMA_RX_GENCTRL2_RX_REQ_0);
+       /* seq 1: reset, power down MPLL, assert REQ (USXGMII: AN disabled) */
+       ret = xpcs_phy_common_init_seq_1_pma(dev);
+       if (ret)
+               goto timeout;
 
        /* 2 Config MPLL for 10G XGMII */
        val = xpcs_phy_read_pma(dev, PMA_MP_12G_16G_25G_REF_CLK_CTRL);

-- 
2.34.1

Reply via email to