[U-Boot] [PATCH v2 3/3] net: phy: ar803x: Use common functions for RGMII internal delays
Joe Hershberger
joe.hershberger at ni.com
Thu Jan 24 06:20:13 UTC 2019
On Wed, Jan 23, 2019 at 5:47 PM Vladimir Oltean <vladimir.oltean at nxp.com> wrote:
>
> Signed-off-by: Vladimir Oltean <vladimir.oltean at nxp.com>
> ---
> Changes in v2:
> * Patch added in this version.
>
> drivers/net/phy/atheros.c | 76 ++++++++++++++++++++++++++++-------------------
> 1 file changed, 45 insertions(+), 31 deletions(-)
>
> diff --git a/drivers/net/phy/atheros.c b/drivers/net/phy/atheros.c
> index 750c11b..9eb40f7 100644
> --- a/drivers/net/phy/atheros.c
> +++ b/drivers/net/phy/atheros.c
> @@ -13,10 +13,10 @@
> #define AR803x_PHY_DEBUG_DATA_REG 0x1e
>
> #define AR803x_DEBUG_REG_5 0x5
> -#define AR803x_RGMII_TX_CLK_DLY 0x100
> +#define AR803x_RGMII_TX_CLK_DLY BIT(8)
>
> #define AR803x_DEBUG_REG_0 0x0
> -#define AR803x_RGMII_RX_CLK_DLY 0x8000
> +#define AR803x_RGMII_RX_CLK_DLY BIT(15)
>
> #define AR803X_LPI_EN BIT(8)
>
> @@ -33,11 +33,40 @@ static void ar803x_enable_smart_eee(struct phy_device *phydev, bool on)
> phy_write_mmd(phydev, MDIO_MMD_PCS, 0x805D, regval);
> }
>
> +static void ar803x_enable_rx_delay(struct phy_device *phydev, bool on)
> +{
> + int regval;
> +
> + phy_write(phydev, MDIO_DEVAD_NONE, AR803x_PHY_DEBUG_ADDR_REG,
> + AR803x_DEBUG_REG_0);
> + regval = phy_read(phydev, MDIO_DEVAD_NONE, AR803x_PHY_DEBUG_DATA_REG);
> + if (on)
> + regval |= AR803x_RGMII_RX_CLK_DLY;
> + else
> + regval &= ~AR803x_RGMII_RX_CLK_DLY;
> + phy_write(phydev, MDIO_DEVAD_NONE, AR803x_PHY_DEBUG_DATA_REG, regval);
> +}
> +
> +static void ar803x_enable_tx_delay(struct phy_device *phydev, bool on)
> +{
> + int regval;
> +
> + phy_write(phydev, MDIO_DEVAD_NONE, AR803x_PHY_DEBUG_ADDR_REG,
> + AR803x_DEBUG_REG_5);
> + regval = phy_read(phydev, MDIO_DEVAD_NONE, AR803x_PHY_DEBUG_DATA_REG);
> + if (on)
> + regval |= AR803x_RGMII_TX_CLK_DLY;
> + else
> + regval &= ~AR803x_RGMII_TX_CLK_DLY;
> + phy_write(phydev, MDIO_DEVAD_NONE, AR803x_PHY_DEBUG_DATA_REG, regval);
> +}
> +
> static int ar8021_config(struct phy_device *phydev)
> {
> phy_write(phydev, MDIO_DEVAD_NONE, 0x00, 0x1200);
> - phy_write(phydev, MDIO_DEVAD_NONE, 0x1d, 0x05);
> - phy_write(phydev, MDIO_DEVAD_NONE, 0x1e, 0x3D47);
> + phy_write(phydev, MDIO_DEVAD_NONE, AR803x_PHY_DEBUG_ADDR_REG,
> + AR803x_DEBUG_REG_5);
> + phy_write(phydev, MDIO_DEVAD_NONE, AR803x_PHY_DEBUG_DATA_REG, 0x3D47);
While this patch is an improvement on the former state, can we add a
comment on the magic number or define a constant?
>
> phydev->supported = phydev->drv->features;
> return 0;
> @@ -51,20 +80,12 @@ static int ar8031_config(struct phy_device *phydev)
> ar803x_enable_smart_eee(phydev, false);
> #endif
> if (phydev->interface == PHY_INTERFACE_MODE_RGMII_TXID ||
> - phydev->interface == PHY_INTERFACE_MODE_RGMII_ID) {
> - phy_write(phydev, MDIO_DEVAD_NONE, AR803x_PHY_DEBUG_ADDR_REG,
> - AR803x_DEBUG_REG_5);
> - phy_write(phydev, MDIO_DEVAD_NONE, AR803x_PHY_DEBUG_DATA_REG,
> - AR803x_RGMII_TX_CLK_DLY);
> - }
> + phydev->interface == PHY_INTERFACE_MODE_RGMII_ID)
> + ar803x_enable_tx_delay(phydev, true);
>
> if (phydev->interface == PHY_INTERFACE_MODE_RGMII_RXID ||
> - phydev->interface == PHY_INTERFACE_MODE_RGMII_ID) {
> - phy_write(phydev, MDIO_DEVAD_NONE, AR803x_PHY_DEBUG_ADDR_REG,
> - AR803x_DEBUG_REG_0);
> - phy_write(phydev, MDIO_DEVAD_NONE, AR803x_PHY_DEBUG_DATA_REG,
> - AR803x_RGMII_RX_CLK_DLY);
> - }
> + phydev->interface == PHY_INTERFACE_MODE_RGMII_ID)
> + ar803x_enable_rx_delay(phydev, true);
>
> phydev->supported = phydev->drv->features;
>
> @@ -87,25 +108,18 @@ static int ar8035_config(struct phy_device *phydev)
> regval = phy_read_mmd(phydev, MDIO_MMD_AN, 0x8016);
> phy_write_mmd(phydev, MDIO_MMD_AN, 0x8016, regval | 0x0018);
>
> - phy_write(phydev, MDIO_DEVAD_NONE, 0x1d, 0x05);
> - regval = phy_read(phydev, MDIO_DEVAD_NONE, 0x1e);
> - phy_write(phydev, MDIO_DEVAD_NONE, 0x1e, (regval|0x0100));
> + phy_write(phydev, MDIO_DEVAD_NONE, AR803x_PHY_DEBUG_ADDR_REG, 0x05);
What is 0x5?
> + regval = phy_read(phydev, MDIO_DEVAD_NONE, AR803x_PHY_DEBUG_DATA_REG);
> + phy_write(phydev, MDIO_DEVAD_NONE, AR803x_PHY_DEBUG_DATA_REG,
> + regval | 0x0100);
What is 0x100?
>
> if ((phydev->interface == PHY_INTERFACE_MODE_RGMII_ID) ||
> - (phydev->interface == PHY_INTERFACE_MODE_RGMII_TXID)) {
> - /* select debug reg 5 */
> - phy_write(phydev, MDIO_DEVAD_NONE, 0x1D, 0x5);
> - /* enable tx delay */
> - phy_write(phydev, MDIO_DEVAD_NONE, 0x1E, 0x0100);
> - }
> + (phydev->interface == PHY_INTERFACE_MODE_RGMII_TXID))
> + ar803x_enable_tx_delay(phydev, true);
>
> if ((phydev->interface == PHY_INTERFACE_MODE_RGMII_ID) ||
> - (phydev->interface == PHY_INTERFACE_MODE_RGMII_RXID)) {
> - /* select debug reg 0 */
> - phy_write(phydev, MDIO_DEVAD_NONE, 0x1D, 0x0);
> - /* enable rx delay */
> - phy_write(phydev, MDIO_DEVAD_NONE, 0x1E, 0x8000);
> - }
> + (phydev->interface == PHY_INTERFACE_MODE_RGMII_RXID))
> + ar803x_enable_rx_delay(phydev, true);
>
> phydev->supported = phydev->drv->features;
>
> --
> 2.7.4
>
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> https://lists.denx.de/listinfo/u-boot
More information about the U-Boot
mailing list