Re: [PATCH v2 1/3] net: phy: at803x: use PHY_ID_MATCH_EXACT for IDs

Heiner Kallweit
2019-10-01T18:41:02Z

On 01.10.2019 08:08, Oleksij Rempel wrote:
> Use exact match for all IDs. We have no sanity checks, so we can peek
> a device with no exact ID and different register layout.
>

I think it would be better to use PHY_ID_MATCH_EXACT for the newly
added AR9331 only. The mask 0xffffffef for the other Atheros PHY's
may be there for a reason. In this case other PHY's matching the
mask would be silently switched to the genphy driver and may
misbehave.

> Suggested-by: Heiner Kallweit <hkallweit1@gmail.com>
> Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
> ---
> drivers/net/phy/at803x.c | 13 ++++---------
> 1 file changed, 4 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/net/phy/at803x.c b/drivers/net/phy/at803x.c
> index 6ad8b1c63c34..7895dbe600ac 100644
> --- a/drivers/net/phy/at803x.c
> +++ b/drivers/net/phy/at803x.c
> @@ -364,9 +364,8 @@ static int at803x_aneg_done(struct phy_device *phydev)
> static struct phy_driver at803x_driver[] = {
> {
> /* ATHEROS 8035 */
> - .phy_id = ATH8035_PHY_ID,
> + PHY_ID_MATCH_EXACT(ATH8035_PHY_ID),
> .name = "Atheros 8035 ethernet",
> - .phy_id_mask = AT803X_PHY_ID_MASK,
> .probe = at803x_probe,
> .config_init = at803x_config_init,
> .set_wol = at803x_set_wol,
> @@ -378,9 +377,8 @@ static struct phy_driver at803x_driver[] = {
> .config_intr = at803x_config_intr,
> }, {
> /* ATHEROS 8030 */
> - .phy_id = ATH8030_PHY_ID,
> + PHY_ID_MATCH_EXACT(ATH8030_PHY_ID),
> .name = "Atheros 8030 ethernet",
> - .phy_id_mask = AT803X_PHY_ID_MASK,
> .probe = at803x_probe,
> .config_init = at803x_config_init,
> .link_change_notify = at803x_link_change_notify,
> @@ -393,9 +391,8 @@ static struct phy_driver at803x_driver[] = {
> .config_intr = at803x_config_intr,
> }, {
> /* ATHEROS 8031 */
> - .phy_id = ATH8031_PHY_ID,
> + PHY_ID_MATCH_EXACT(ATH8031_PHY_ID),
> .name = "Atheros 8031 ethernet",
> - .phy_id_mask = AT803X_PHY_ID_MASK,
> .probe = at803x_probe,
> .config_init = at803x_config_init,
> .set_wol = at803x_set_wol,
> @@ -411,9 +408,7 @@ static struct phy_driver at803x_driver[] = {
> module_phy_driver(at803x_driver);
>
> static struct mdio_device_id __maybe_unused atheros_tbl[] = {
> - { ATH8030_PHY_ID, AT803X_PHY_ID_MASK },
> - { ATH8031_PHY_ID, AT803X_PHY_ID_MASK },
> - { ATH8035_PHY_ID, AT803X_PHY_ID_MASK },
> + { PHY_ID_MATCH_VENDOR(ATH8030_PHY_ID) },
> { }
> };
>
>