On Fri, Apr 09, 2021 at 09:41:06PM +0300, Radu Pirea (NXP OSS) wrote:
> +#define B100T1_PMAPMD_CTL            0x0834
> +#define B100T1_PMAPMD_CONFIG_EN              BIT(15)
> +#define B100T1_PMAPMD_MASTER         BIT(14)
> +#define MASTER_MODE                  (B100T1_PMAPMD_CONFIG_EN | 
> B100T1_PMAPMD_MASTER)
> +#define SLAVE_MODE                   (B100T1_PMAPMD_CONFIG_EN)
> +
> +#define DEVICE_CONTROL                       0x0040
> +#define DEVICE_CONTROL_RESET         BIT(15)
> +#define DEVICE_CONTROL_CONFIG_GLOBAL_EN      BIT(14)
> +#define DEVICE_CONTROL_CONFIG_ALL_EN BIT(13)
> +#define RESET_POLL_NS                        (250 * NSEC_PER_MSEC)
> +
> +#define PHY_CONTROL                  0x8100
> +#define PHY_CONFIG_EN                        BIT(14)
> +#define PHY_START_OP                 BIT(0)
> +
> +#define PHY_CONFIG                   0x8108
> +#define PHY_CONFIG_AUTO                      BIT(0)
> +
> +#define SIGNAL_QUALITY                       0x8320
> +#define SQI_VALID                    BIT(14)
> +#define SQI_MASK                     GENMASK(2, 0)
> +#define MAX_SQI                              SQI_MASK
> +
> +#define CABLE_TEST                   0x8330
> +#define CABLE_TEST_ENABLE            BIT(15)
> +#define CABLE_TEST_START             BIT(14)
> +#define CABLE_TEST_VALID             BIT(13)
> +#define CABLE_TEST_OK                        0x00
> +#define CABLE_TEST_SHORTED           0x01
> +#define CABLE_TEST_OPEN                      0x02
> +#define CABLE_TEST_UNKNOWN           0x07
> +
> +#define PORT_CONTROL                 0x8040
> +#define PORT_CONTROL_EN                      BIT(14)
> +
> +#define PORT_INFRA_CONTROL           0xAC00
> +#define PORT_INFRA_CONTROL_EN                BIT(14)
> +
> +#define VND1_RXID                    0xAFCC
> +#define VND1_TXID                    0xAFCD
> +#define ID_ENABLE                    BIT(15)
> +
> +#define ABILITIES                    0xAFC4
> +#define RGMII_ID_ABILITY             BIT(15)
> +#define RGMII_ABILITY                        BIT(14)
> +#define RMII_ABILITY                 BIT(10)
> +#define REVMII_ABILITY                       BIT(9)
> +#define MII_ABILITY                  BIT(8)
> +#define SGMII_ABILITY                        BIT(0)
> +
> +#define MII_BASIC_CONFIG             0xAFC6
> +#define MII_BASIC_CONFIG_REV         BIT(8)
> +#define MII_BASIC_CONFIG_SGMII               0x9
> +#define MII_BASIC_CONFIG_RGMII               0x7
> +#define MII_BASIC_CONFIG_RMII                0x5
> +#define MII_BASIC_CONFIG_MII         0x4
> +
> +#define SYMBOL_ERROR_COUNTER         0x8350
> +#define LINK_DROP_COUNTER            0x8352
> +#define LINK_LOSSES_AND_FAILURES     0x8353
> +#define R_GOOD_FRAME_CNT             0xA950
> +#define R_BAD_FRAME_CNT                      0xA952
> +#define R_RXER_FRAME_CNT             0xA954
> +#define RX_PREAMBLE_COUNT            0xAFCE
> +#define TX_PREAMBLE_COUNT            0xAFCF
> +#define RX_IPG_LENGTH                        0xAFD0
> +#define TX_IPG_LENGTH                        0xAFD1
> +#define COUNTERS_EN                  BIT(15)
> +
> +#define CLK_25MHZ_PS_PERIOD          40000UL
> +#define PS_PER_DEGREE                        (CLK_25MHZ_PS_PERIOD / 360)
> +#define MIN_ID_PS                    8222U
> +#define MAX_ID_PS                    11300U

Maybe include some prefix as to which MMD each of these registers is
located?

> +static bool nxp_c45_can_sleep(struct phy_device *phydev)
> +{
> +     int reg;
> +
> +     reg = phy_read_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_STAT1);
> +     if (reg < 0)
> +             return false;
> +
> +     return !!(reg & MDIO_STAT1_LPOWERABLE);
> +}

This looks like it could be useful as a generic helper function -
nothing in this function is specific to this PHY.

> +static int nxp_c45_resume(struct phy_device *phydev)
> +{
> +     int reg;
> +
> +     if (!nxp_c45_can_sleep(phydev))
> +             return -EOPNOTSUPP;
> +
> +     reg = phy_read_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_CTRL1);
> +     reg &= ~MDIO_CTRL1_LPOWER;
> +     phy_write_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_CTRL1, reg);
> +
> +     return 0;
> +}
> +
> +static int nxp_c45_suspend(struct phy_device *phydev)
> +{
> +     int reg;
> +
> +     if (!nxp_c45_can_sleep(phydev))
> +             return -EOPNOTSUPP;
> +
> +     reg = phy_read_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_CTRL1);
> +     reg |= MDIO_CTRL1_LPOWER;
> +     phy_write_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_CTRL1, reg);
> +
> +     return 0;
> +}

These too look like potential generic helper functions.

-- 
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 40Mbps down 10Mbps up. Decent connectivity at last!

Reply via email to