From eccde89aa4764fd16b490e96e5dbbdb51cb0051b Mon Sep 17 00:00:00 2001 From: Mathias Kresin Date: Mon, 2 Jul 2018 22:09:04 +0200 Subject: [PATCH] kernel: fix AT8032 PHY phy id mask Don't mask bit 4 of the AT8022 phy id. If bit 4 of the AT8022 phy id (0x004dd023) is masked, it will match the phy id of the AR8327 switch (0x004dd033) as well. It results in applied at803x driver settings/callbacks, which will at least limit the AR8327 phys to 100MBit operation instead of the possible 1000MBit. Signed-off-by: Mathias Kresin --- ...-net-phy-at803x-add-support-for-AT8032.patch | 17 ++++++++++------- ...hy-at803x-allow-to-configure-via-pdata.patch | 10 +++++----- ...5-net-phy-at803x-fix-at8033-sgmii-mode.patch | 2 +- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/target/linux/generic/pending-4.14/180-net-phy-at803x-add-support-for-AT8032.patch b/target/linux/generic/pending-4.14/180-net-phy-at803x-add-support-for-AT8032.patch index 86a03f2256..828b160be9 100644 --- a/target/linux/generic/pending-4.14/180-net-phy-at803x-add-support-for-AT8032.patch +++ b/target/linux/generic/pending-4.14/180-net-phy-at803x-add-support-for-AT8032.patch @@ -8,15 +8,18 @@ Signed-off-by: Felix Fietkau --- a/drivers/net/phy/at803x.c +++ b/drivers/net/phy/at803x.c -@@ -62,6 +62,7 @@ +@@ -62,8 +62,10 @@ #define ATH8030_PHY_ID 0x004dd076 #define ATH8031_PHY_ID 0x004dd074 +#define ATH8032_PHY_ID 0x004dd023 #define ATH8035_PHY_ID 0x004dd072 #define AT803X_PHY_ID_MASK 0xffffffef ++#define AT8032_PHY_ID_MASK 0xffffffff -@@ -256,7 +257,8 @@ static int at803x_probe(struct phy_devic + MODULE_DESCRIPTION("Atheros 803x PHY driver"); + MODULE_AUTHOR("Matus Ujhelyi"); +@@ -256,7 +258,8 @@ static int at803x_probe(struct phy_devic if (!priv) return -ENOMEM; @@ -26,7 +29,7 @@ Signed-off-by: Felix Fietkau goto does_not_require_reset_workaround; gpiod_reset = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_LOW); -@@ -332,7 +334,7 @@ static void at803x_link_change_notify(st +@@ -332,7 +335,7 @@ static void at803x_link_change_notify(st struct at803x_priv *priv = phydev->priv; /* @@ -35,7 +38,7 @@ Signed-off-by: Felix Fietkau * signalled. This is necessary to circumvent a hardware bug that * occurs when the cable is unplugged while TX packets are pending * in the FIFO. In such cases, the FIFO enters an error mode it -@@ -444,6 +446,24 @@ static struct phy_driver at803x_driver[] +@@ -444,6 +447,24 @@ static struct phy_driver at803x_driver[] .aneg_done = at803x_aneg_done, .ack_interrupt = &at803x_ack_interrupt, .config_intr = &at803x_config_intr, @@ -43,7 +46,7 @@ Signed-off-by: Felix Fietkau + /* ATHEROS 8032 */ + .phy_id = ATH8032_PHY_ID, + .name = "Atheros 8032 ethernet", -+ .phy_id_mask = 0xffffffef, ++ .phy_id_mask = AT8032_PHY_ID_MASK, + .probe = at803x_probe, + .config_init = at803x_config_init, + .link_change_notify = at803x_link_change_notify, @@ -60,11 +63,11 @@ Signed-off-by: Felix Fietkau } }; module_phy_driver(at803x_driver); -@@ -451,6 +471,7 @@ module_phy_driver(at803x_driver); +@@ -451,6 +472,7 @@ 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 }, -+ { ATH8032_PHY_ID, AT803X_PHY_ID_MASK }, ++ { ATH8032_PHY_ID, AT8032_PHY_ID_MASK }, { ATH8035_PHY_ID, AT803X_PHY_ID_MASK }, { } }; diff --git a/target/linux/generic/pending-4.14/734-net-phy-at803x-allow-to-configure-via-pdata.patch b/target/linux/generic/pending-4.14/734-net-phy-at803x-allow-to-configure-via-pdata.patch index a217f750bc..27bbf572e9 100644 --- a/target/linux/generic/pending-4.14/734-net-phy-at803x-allow-to-configure-via-pdata.patch +++ b/target/linux/generic/pending-4.14/734-net-phy-at803x-allow-to-configure-via-pdata.patch @@ -40,7 +40,7 @@ Signed-off-by: Gabor Juhos #define AT803X_DEBUG_ADDR 0x1D #define AT803X_DEBUG_DATA 0x1E -@@ -73,6 +80,7 @@ MODULE_LICENSE("GPL"); +@@ -74,6 +81,7 @@ MODULE_LICENSE("GPL"); struct at803x_priv { bool phy_reset:1; struct gpio_desc *gpiod_reset; @@ -48,7 +48,7 @@ Signed-off-by: Gabor Juhos }; struct at803x_context { -@@ -273,8 +281,16 @@ does_not_require_reset_workaround: +@@ -274,8 +282,16 @@ does_not_require_reset_workaround: return 0; } @@ -65,7 +65,7 @@ Signed-off-by: Gabor Juhos int ret; ret = genphy_config_init(phydev); -@@ -295,6 +311,26 @@ static int at803x_config_init(struct phy +@@ -296,6 +312,26 @@ static int at803x_config_init(struct phy return ret; } @@ -92,7 +92,7 @@ Signed-off-by: Gabor Juhos return 0; } -@@ -332,6 +368,8 @@ static int at803x_config_intr(struct phy +@@ -333,6 +369,8 @@ static int at803x_config_intr(struct phy static void at803x_link_change_notify(struct phy_device *phydev) { struct at803x_priv *priv = phydev->priv; @@ -101,7 +101,7 @@ Signed-off-by: Gabor Juhos /* * Conduct a hardware reset for AT8030/2 every time a link loss is -@@ -360,6 +398,24 @@ static void at803x_link_change_notify(st +@@ -361,6 +399,24 @@ static void at803x_link_change_notify(st } else { priv->phy_reset = false; } diff --git a/target/linux/generic/pending-4.14/735-net-phy-at803x-fix-at8033-sgmii-mode.patch b/target/linux/generic/pending-4.14/735-net-phy-at803x-fix-at8033-sgmii-mode.patch index 9a2f93a6f2..1f689850bd 100644 --- a/target/linux/generic/pending-4.14/735-net-phy-at803x-fix-at8033-sgmii-mode.patch +++ b/target/linux/generic/pending-4.14/735-net-phy-at803x-fix-at8033-sgmii-mode.patch @@ -24,7 +24,7 @@ Signed-off-by: Roman Yeryomin #define AT803X_MODE_CFG_MASK 0x0F #define AT803X_MODE_CFG_SGMII 0x01 -@@ -292,6 +296,27 @@ static int at803x_config_init(struct phy +@@ -293,6 +297,27 @@ static int at803x_config_init(struct phy { struct at803x_platform_data *pdata; int ret;