Explorar el Código

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 <[email protected]>
Mathias Kresin hace 7 años
padre
commit
eccde89aa4

+ 10 - 7
target/linux/generic/pending-4.14/180-net-phy-at803x-add-support-for-AT8032.patch

@@ -8,15 +8,18 @@ Signed-off-by: Felix Fietkau <[email protected]>
 
 --- 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 <[email protected]>
  		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 <[email protected]>
  	 * 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 <[email protected]>
 +	/* 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 <[email protected]>
  } };
  
  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 },
  	{ }
  };

+ 5 - 5
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 <[email protected]>
  #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 <[email protected]>
  };
  
  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 <[email protected]>
  	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 <[email protected]>
  	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 <[email protected]>
  
  	/*
  	 * 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;
  	}

+ 1 - 1
target/linux/generic/pending-4.14/735-net-phy-at803x-fix-at8033-sgmii-mode.patch

@@ -24,7 +24,7 @@ Signed-off-by: Roman Yeryomin <[email protected]>
  #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;