linux: update b53 upstream driver
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
This commit is contained in:
		| @@ -13,7 +13,7 @@ Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com> | |||||||
|  |  | ||||||
| --- a/drivers/net/dsa/b53/b53_common.c | --- a/drivers/net/dsa/b53/b53_common.c | ||||||
| +++ b/drivers/net/dsa/b53/b53_common.c | +++ b/drivers/net/dsa/b53/b53_common.c | ||||||
| @@ -1148,6 +1148,36 @@ static void b53_force_port_config(struct | @@ -1174,6 +1174,36 @@ static void b53_force_port_config(struct | ||||||
|  	b53_write8(dev, B53_CTRL_PAGE, off, reg); |  	b53_write8(dev, B53_CTRL_PAGE, off, reg); | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -50,7 +50,7 @@ Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com> | |||||||
|  static void b53_adjust_link(struct dsa_switch *ds, int port, |  static void b53_adjust_link(struct dsa_switch *ds, int port, | ||||||
|  			    struct phy_device *phydev) |  			    struct phy_device *phydev) | ||||||
|  { |  { | ||||||
| @@ -1174,6 +1204,9 @@ static void b53_adjust_link(struct dsa_s | @@ -1200,6 +1230,9 @@ static void b53_adjust_link(struct dsa_s | ||||||
|  			      tx_pause, rx_pause); |  			      tx_pause, rx_pause); | ||||||
|  	b53_force_link(dev, port, phydev->link); |  	b53_force_link(dev, port, phydev->link); | ||||||
|   |   | ||||||
| @@ -58,9 +58,9 @@ Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com> | |||||||
| +		b53_adjust_63xx_rgmii(ds, port, phydev->interface); | +		b53_adjust_63xx_rgmii(ds, port, phydev->interface); | ||||||
| + | + | ||||||
|  	if (is531x5(dev) && phy_interface_is_rgmii(phydev)) { |  	if (is531x5(dev) && phy_interface_is_rgmii(phydev)) { | ||||||
|  		if (port == 8) |  		if (port == dev->imp_port) | ||||||
|  			off = B53_RGMII_CTRL_IMP; |  			off = B53_RGMII_CTRL_IMP; | ||||||
| @@ -1366,6 +1399,9 @@ void b53_phylink_mac_link_up(struct dsa_ | @@ -1386,6 +1419,9 @@ void b53_phylink_mac_link_up(struct dsa_ | ||||||
|  { |  { | ||||||
|  	struct b53_device *dev = ds->priv; |  	struct b53_device *dev = ds->priv; | ||||||
|   |   | ||||||
|   | |||||||
| @@ -0,0 +1,65 @@ | |||||||
|  | From ee47ed08d75e8f16b3cf882061ee19c2ea19dd6c Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Florian Fainelli <f.fainelli@gmail.com> | ||||||
|  | Date: Wed, 10 Mar 2021 10:52:26 -0800 | ||||||
|  | Subject: [PATCH] net: dsa: b53: Add debug prints in b53_vlan_enable() | ||||||
|  |  | ||||||
|  | Having dynamic debug prints in b53_vlan_enable() has been helpful to | ||||||
|  | uncover a recent but update the function to indicate the port being | ||||||
|  | configured (or -1 for initial setup) and include the global VLAN enabled | ||||||
|  | and VLAN filtering enable status. | ||||||
|  |  | ||||||
|  | Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> | ||||||
|  | Reviewed-by: Andrew Lunn <andrew@lunn.ch> | ||||||
|  | Signed-off-by: David S. Miller <davem@davemloft.net> | ||||||
|  | --- | ||||||
|  |  drivers/net/dsa/b53/b53_common.c | 11 +++++++---- | ||||||
|  |  1 file changed, 7 insertions(+), 4 deletions(-) | ||||||
|  |  | ||||||
|  | --- a/drivers/net/dsa/b53/b53_common.c | ||||||
|  | +++ b/drivers/net/dsa/b53/b53_common.c | ||||||
|  | @@ -349,7 +349,7 @@ static void b53_set_forwarding(struct b5 | ||||||
|  |  	b53_write8(dev, B53_CTRL_PAGE, B53_IP_MULTICAST_CTRL, mgmt); | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | -static void b53_enable_vlan(struct b53_device *dev, bool enable, | ||||||
|  | +static void b53_enable_vlan(struct b53_device *dev, int port, bool enable, | ||||||
|  |  			    bool enable_filtering) | ||||||
|  |  { | ||||||
|  |  	u8 mgmt, vc0, vc1, vc4 = 0, vc5; | ||||||
|  | @@ -431,6 +431,9 @@ static void b53_enable_vlan(struct b53_d | ||||||
|  |  	b53_write8(dev, B53_CTRL_PAGE, B53_SWITCH_MODE, mgmt); | ||||||
|  |   | ||||||
|  |  	dev->vlan_enabled = enable; | ||||||
|  | + | ||||||
|  | +	dev_dbg(dev->dev, "Port %d VLAN enabled: %d, filtering: %d\n", | ||||||
|  | +		port, enable, enable_filtering); | ||||||
|  |  } | ||||||
|  |   | ||||||
|  |  static int b53_set_jumbo(struct b53_device *dev, bool enable, bool allow_10_100) | ||||||
|  | @@ -708,7 +711,7 @@ int b53_configure_vlan(struct dsa_switch | ||||||
|  |  		b53_do_vlan_op(dev, VTA_CMD_CLEAR); | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  | -	b53_enable_vlan(dev, dev->vlan_enabled, ds->vlan_filtering); | ||||||
|  | +	b53_enable_vlan(dev, -1, dev->vlan_enabled, ds->vlan_filtering); | ||||||
|  |   | ||||||
|  |  	b53_for_each_port(dev, i) | ||||||
|  |  		b53_write16(dev, B53_VLAN_PAGE, | ||||||
|  | @@ -1390,7 +1393,7 @@ int b53_vlan_filtering(struct dsa_switch | ||||||
|  |  	if (switchdev_trans_ph_prepare(trans)) | ||||||
|  |  		return 0; | ||||||
|  |   | ||||||
|  | -	b53_enable_vlan(dev, dev->vlan_enabled, vlan_filtering); | ||||||
|  | +	b53_enable_vlan(dev, port, dev->vlan_enabled, vlan_filtering); | ||||||
|  |   | ||||||
|  |  	return 0; | ||||||
|  |  } | ||||||
|  | @@ -1415,7 +1418,7 @@ int b53_vlan_prepare(struct dsa_switch * | ||||||
|  |  	if (vlan->vid_end >= dev->num_vlans) | ||||||
|  |  		return -ERANGE; | ||||||
|  |   | ||||||
|  | -	b53_enable_vlan(dev, true, ds->vlan_filtering); | ||||||
|  | +	b53_enable_vlan(dev, port, true, ds->vlan_filtering); | ||||||
|  |   | ||||||
|  |  	return 0; | ||||||
|  |  } | ||||||
| @@ -1,7 +1,7 @@ | |||||||
| From 964dbf186eaa84d409c359ddf09c827a3fbe8228 Mon Sep 17 00:00:00 2001 | From 964dbf186eaa84d409c359ddf09c827a3fbe8228 Mon Sep 17 00:00:00 2001 | ||||||
| From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= <noltari@gmail.com> | From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= <noltari@gmail.com> | ||||||
| Date: Wed, 17 Mar 2021 11:29:26 +0100 | Date: Wed, 17 Mar 2021 11:29:26 +0100 | ||||||
| Subject: [PATCH 1/2] net: dsa: tag_brcm: add support for legacy tags | Subject: [PATCH] net: dsa: tag_brcm: add support for legacy tags | ||||||
| MIME-Version: 1.0 | MIME-Version: 1.0 | ||||||
| Content-Type: text/plain; charset=UTF-8 | Content-Type: text/plain; charset=UTF-8 | ||||||
| Content-Transfer-Encoding: 8bit | Content-Transfer-Encoding: 8bit | ||||||
| @@ -1,7 +1,7 @@ | |||||||
| From 46c5176c586c81306bf9e7024c13b95da775490f Mon Sep 17 00:00:00 2001 | From 46c5176c586c81306bf9e7024c13b95da775490f Mon Sep 17 00:00:00 2001 | ||||||
| From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= <noltari@gmail.com> | From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= <noltari@gmail.com> | ||||||
| Date: Wed, 17 Mar 2021 11:29:27 +0100 | Date: Wed, 17 Mar 2021 11:29:27 +0100 | ||||||
| Subject: [PATCH 2/2] net: dsa: b53: support legacy tags | Subject: [PATCH] net: dsa: b53: support legacy tags | ||||||
| MIME-Version: 1.0 | MIME-Version: 1.0 | ||||||
| Content-Type: text/plain; charset=UTF-8 | Content-Type: text/plain; charset=UTF-8 | ||||||
| Content-Transfer-Encoding: 8bit | Content-Transfer-Encoding: 8bit | ||||||
| @@ -28,7 +28,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net> | |||||||
|  	  This driver adds support for Broadcom managed switch chips. It supports |  	  This driver adds support for Broadcom managed switch chips. It supports | ||||||
| --- a/drivers/net/dsa/b53/b53_common.c
 | --- a/drivers/net/dsa/b53/b53_common.c
 | ||||||
| +++ b/drivers/net/dsa/b53/b53_common.c
 | +++ b/drivers/net/dsa/b53/b53_common.c
 | ||||||
| @@ -2021,15 +2021,17 @@ enum dsa_tag_protocol b53_get_tag_protoc
 | @@ -2024,15 +2024,17 @@ enum dsa_tag_protocol b53_get_tag_protoc
 | ||||||
|  { |  { | ||||||
|  	struct b53_device *dev = ds->priv; |  	struct b53_device *dev = ds->priv; | ||||||
|   |   | ||||||
| @@ -0,0 +1,27 @@ | |||||||
|  | From 866f1577ba69bde2b9f36c300f603596c7d84a62 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Qinglang Miao <miaoqinglang@huawei.com> | ||||||
|  | Date: Thu, 25 Mar 2021 17:19:54 +0800 | ||||||
|  | Subject: [PATCH] net: dsa: b53: spi: add missing MODULE_DEVICE_TABLE | ||||||
|  |  | ||||||
|  | This patch adds missing MODULE_DEVICE_TABLE definition which generates | ||||||
|  | correct modalias for automatic loading of this driver when it is built | ||||||
|  | as an external module. | ||||||
|  |  | ||||||
|  | Reported-by: Hulk Robot <hulkci@huawei.com> | ||||||
|  | Signed-off-by: Qinglang Miao <miaoqinglang@huawei.com> | ||||||
|  | Acked-by: Florian Fainelli <f.fainelli@gmail.com> | ||||||
|  | Signed-off-by: David S. Miller <davem@davemloft.net> | ||||||
|  | --- | ||||||
|  |  drivers/net/dsa/b53/b53_spi.c | 1 + | ||||||
|  |  1 file changed, 1 insertion(+) | ||||||
|  |  | ||||||
|  | --- a/drivers/net/dsa/b53/b53_spi.c | ||||||
|  | +++ b/drivers/net/dsa/b53/b53_spi.c | ||||||
|  | @@ -335,6 +335,7 @@ static const struct of_device_id b53_spi | ||||||
|  |  	{ .compatible = "brcm,bcm53128" }, | ||||||
|  |  	{ /* sentinel */ } | ||||||
|  |  }; | ||||||
|  | +MODULE_DEVICE_TABLE(of, b53_spi_of_match); | ||||||
|  |   | ||||||
|  |  static struct spi_driver b53_spi_driver = { | ||||||
|  |  	.driver = { | ||||||
| @@ -0,0 +1,86 @@ | |||||||
|  | From 2c32a3d3c233b855943677609fe388f82b1f0975 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Florian Fainelli <f.fainelli@gmail.com> | ||||||
|  | Date: Tue, 8 Jun 2021 14:22:04 -0700 | ||||||
|  | Subject: [PATCH] net: dsa: b53: Do not force CPU to be always tagged | ||||||
|  |  | ||||||
|  | Commit ca8931948344 ("net: dsa: b53: Keep CPU port as tagged in all | ||||||
|  | VLANs") forced the CPU port to be always tagged in any VLAN membership. | ||||||
|  | This was necessary back then because we did not support Broadcom tags | ||||||
|  | for all configurations so the only way to differentiate tagged and | ||||||
|  | untagged traffic while DSA_TAG_PROTO_NONE was used was to force the CPU | ||||||
|  | port into being always tagged. | ||||||
|  |  | ||||||
|  | With most configurations enabling Broadcom tags, especially after | ||||||
|  | 8fab459e69ab ("net: dsa: b53: Enable Broadcom tags for 531x5/539x | ||||||
|  | families") we do not need to apply this unconditional force tagging of | ||||||
|  | the CPU port in all VLANs. | ||||||
|  |  | ||||||
|  | A helper function is introduced to faciliate the encapsulation of the | ||||||
|  | specific condition requiring the CPU port to be tagged in all VLANs and | ||||||
|  | the dsa_switch_ops::untag_bridge_pvid boolean is moved to when | ||||||
|  | dsa_switch_ops::setup is called when we have already determined the | ||||||
|  | tagging protocol we will be using. | ||||||
|  |  | ||||||
|  | Reported-by: Matthew Hagan <mnhagan88@gmail.com> | ||||||
|  | Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> | ||||||
|  | Reviewed-by: Vladimir Oltean <olteanv@gmail.com> | ||||||
|  | Tested-by: Matthew Hagan <mnhagan88@gmail.com> | ||||||
|  | Signed-off-by: David S. Miller <davem@davemloft.net> | ||||||
|  | --- | ||||||
|  |  drivers/net/dsa/b53/b53_common.c | 17 ++++++++++++++--- | ||||||
|  |  1 file changed, 14 insertions(+), 3 deletions(-) | ||||||
|  |  | ||||||
|  | --- a/drivers/net/dsa/b53/b53_common.c | ||||||
|  | +++ b/drivers/net/dsa/b53/b53_common.c | ||||||
|  | @@ -1049,6 +1049,11 @@ static int b53_setup(struct dsa_switch * | ||||||
|  |  	unsigned int port; | ||||||
|  |  	int ret; | ||||||
|  |   | ||||||
|  | +	/* Request bridge PVID untagged when DSA_TAG_PROTO_NONE is set | ||||||
|  | +	 * which forces the CPU port to be tagged in all VLANs. | ||||||
|  | +	 */ | ||||||
|  | +	ds->untag_bridge_pvid = dev->tag_protocol == DSA_TAG_PROTO_NONE; | ||||||
|  | + | ||||||
|  |  	ret = b53_reset_switch(dev); | ||||||
|  |  	if (ret) { | ||||||
|  |  		dev_err(ds->dev, "failed to reset switch\n"); | ||||||
|  | @@ -1423,6 +1428,13 @@ int b53_vlan_prepare(struct dsa_switch * | ||||||
|  |  	return 0; | ||||||
|  |  } | ||||||
|  |  EXPORT_SYMBOL(b53_vlan_prepare); | ||||||
|  | +  | ||||||
|  | +static bool b53_vlan_port_needs_forced_tagged(struct dsa_switch *ds, int port) | ||||||
|  | +{ | ||||||
|  | +	struct b53_device *dev = ds->priv; | ||||||
|  | + | ||||||
|  | +	return dev->tag_protocol == DSA_TAG_PROTO_NONE && dsa_is_cpu_port(ds, port); | ||||||
|  | +} | ||||||
|  |   | ||||||
|  |  void b53_vlan_add(struct dsa_switch *ds, int port, | ||||||
|  |  		  const struct switchdev_obj_port_vlan *vlan) | ||||||
|  | @@ -1442,7 +1454,7 @@ void b53_vlan_add(struct dsa_switch *ds, | ||||||
|  |  			untagged = true; | ||||||
|  |   | ||||||
|  |  		vl->members |= BIT(port); | ||||||
|  | -		if (untagged && !dsa_is_cpu_port(ds, port)) | ||||||
|  | +		if (untagged && !b53_vlan_port_needs_forced_tagged(ds, port)) | ||||||
|  |  			vl->untag |= BIT(port); | ||||||
|  |  		else | ||||||
|  |  			vl->untag &= ~BIT(port); | ||||||
|  | @@ -1480,7 +1492,7 @@ int b53_vlan_del(struct dsa_switch *ds, | ||||||
|  |  		if (pvid == vid) | ||||||
|  |  			pvid = b53_default_pvid(dev); | ||||||
|  |   | ||||||
|  | -		if (untagged && !dsa_is_cpu_port(ds, port)) | ||||||
|  | +		if (untagged && !b53_vlan_port_needs_forced_tagged(ds, port)) | ||||||
|  |  			vl->untag &= ~(BIT(port)); | ||||||
|  |   | ||||||
|  |  		b53_set_vlan_entry(dev, vid, vl); | ||||||
|  | @@ -2623,7 +2635,6 @@ struct b53_device *b53_switch_alloc(stru | ||||||
|  |  	dev->ops = ops; | ||||||
|  |  	ds->ops = &b53_switch_ops; | ||||||
|  |  	ds->configure_vlan_while_not_filtering = true; | ||||||
|  | -	ds->untag_bridge_pvid = true; | ||||||
|  |  	dev->vlan_enabled = ds->configure_vlan_while_not_filtering; | ||||||
|  |  	/* Let DSA handle the case were multiple bridges span the same switch | ||||||
|  |  	 * device and different VLAN awareness settings are requested, which | ||||||
| @@ -0,0 +1,30 @@ | |||||||
|  | From 11b57faf951cd3a570e3d9e463fc7c41023bc8c6 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Colin Ian King <colin.king@canonical.com> | ||||||
|  | Date: Tue, 15 Jun 2021 10:05:16 +0100 | ||||||
|  | Subject: [PATCH] net: dsa: b53: remove redundant null check on dev | ||||||
|  |  | ||||||
|  | The pointer dev can never be null, the null check is redundant | ||||||
|  | and can be removed. Cleans up a static analysis warning that | ||||||
|  | pointer priv is dereferencing dev before dev is being null | ||||||
|  | checked. | ||||||
|  |  | ||||||
|  | Addresses-Coverity: ("Dereference before null check") | ||||||
|  | Signed-off-by: Colin Ian King <colin.king@canonical.com> | ||||||
|  | Acked-by: Florian Fainelli <f.fainelli@gmail.com> | ||||||
|  | Signed-off-by: David S. Miller <davem@davemloft.net> | ||||||
|  | --- | ||||||
|  |  drivers/net/dsa/b53/b53_srab.c | 3 +-- | ||||||
|  |  1 file changed, 1 insertion(+), 2 deletions(-) | ||||||
|  |  | ||||||
|  | --- a/drivers/net/dsa/b53/b53_srab.c | ||||||
|  | +++ b/drivers/net/dsa/b53/b53_srab.c | ||||||
|  | @@ -632,8 +632,7 @@ static int b53_srab_remove(struct platfo | ||||||
|  |  	struct b53_srab_priv *priv = dev->priv; | ||||||
|  |   | ||||||
|  |  	b53_srab_intr_set(priv, false); | ||||||
|  | -	if (dev) | ||||||
|  | -		b53_switch_remove(dev); | ||||||
|  | +	b53_switch_remove(dev); | ||||||
|  |   | ||||||
|  |  	return 0; | ||||||
|  |  } | ||||||
| @@ -0,0 +1,71 @@ | |||||||
|  | From 64a81b24487f0d2fba0f033029eec2abc7d82cee Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Florian Fainelli <f.fainelli@gmail.com> | ||||||
|  | Date: Mon, 21 Jun 2021 15:10:55 -0700 | ||||||
|  | Subject: [PATCH] net: dsa: b53: Create default VLAN entry explicitly | ||||||
|  |  | ||||||
|  | In case CONFIG_VLAN_8021Q is not set, there will be no call down to the | ||||||
|  | b53 driver to ensure that the default PVID VLAN entry will be configured | ||||||
|  | with the appropriate untagged attribute towards the CPU port. We were | ||||||
|  | implicitly relying on dsa_slave_vlan_rx_add_vid() to do that for us, | ||||||
|  | instead make it explicit. | ||||||
|  |  | ||||||
|  | Reported-by: Vladimir Oltean <olteanv@gmail.com> | ||||||
|  | Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> | ||||||
|  | Reviewed-by: Vladimir Oltean <olteanv@gmail.com> | ||||||
|  | Signed-off-by: David S. Miller <davem@davemloft.net> | ||||||
|  | --- | ||||||
|  |  drivers/net/dsa/b53/b53_common.c | 27 +++++++++++++++++++-------- | ||||||
|  |  1 file changed, 19 insertions(+), 8 deletions(-) | ||||||
|  |  | ||||||
|  | --- a/drivers/net/dsa/b53/b53_common.c | ||||||
|  | +++ b/drivers/net/dsa/b53/b53_common.c | ||||||
|  | @@ -693,6 +693,13 @@ static u16 b53_default_pvid(struct b53_d | ||||||
|  |  		return 0; | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | +static bool b53_vlan_port_needs_forced_tagged(struct dsa_switch *ds, int port) | ||||||
|  | +{ | ||||||
|  | +	struct b53_device *dev = ds->priv; | ||||||
|  | + | ||||||
|  | +	return dev->tag_protocol == DSA_TAG_PROTO_NONE && dsa_is_cpu_port(ds, port); | ||||||
|  | +} | ||||||
|  | + | ||||||
|  |  int b53_configure_vlan(struct dsa_switch *ds) | ||||||
|  |  { | ||||||
|  |  	struct b53_device *dev = ds->priv; | ||||||
|  | @@ -713,9 +720,20 @@ int b53_configure_vlan(struct dsa_switch | ||||||
|  |   | ||||||
|  |  	b53_enable_vlan(dev, -1, dev->vlan_enabled, ds->vlan_filtering); | ||||||
|  |   | ||||||
|  | -	b53_for_each_port(dev, i) | ||||||
|  | +	/* Create an untagged VLAN entry for the default PVID in case | ||||||
|  | +	 * CONFIG_VLAN_8021Q is disabled and there are no calls to | ||||||
|  | +	 * dsa_slave_vlan_rx_add_vid() to create the default VLAN | ||||||
|  | +	 * entry. Do this only when the tagging protocol is not | ||||||
|  | +	 * DSA_TAG_PROTO_NONE | ||||||
|  | +	 */ | ||||||
|  | +	b53_for_each_port(dev, i) { | ||||||
|  | +		v = &dev->vlans[def_vid]; | ||||||
|  | +		v->members |= BIT(i); | ||||||
|  | +		if (!b53_vlan_port_needs_forced_tagged(ds, i)) | ||||||
|  | +			v->untag = v->members; | ||||||
|  |  		b53_write16(dev, B53_VLAN_PAGE, | ||||||
|  |  			    B53_VLAN_PORT_DEF_TAG(i), def_vid); | ||||||
|  | +	} | ||||||
|  |   | ||||||
|  |  	/* Upon initial call we have not set-up any VLANs, but upon | ||||||
|  |  	 * system resume, we need to restore all VLAN entries. | ||||||
|  | @@ -1429,13 +1447,6 @@ int b53_vlan_prepare(struct dsa_switch * | ||||||
|  |  } | ||||||
|  |  EXPORT_SYMBOL(b53_vlan_prepare); | ||||||
|  |    | ||||||
|  | -static bool b53_vlan_port_needs_forced_tagged(struct dsa_switch *ds, int port) | ||||||
|  | -{ | ||||||
|  | -	struct b53_device *dev = ds->priv; | ||||||
|  | - | ||||||
|  | -	return dev->tag_protocol == DSA_TAG_PROTO_NONE && dsa_is_cpu_port(ds, port); | ||||||
|  | -} | ||||||
|  | - | ||||||
|  |  void b53_vlan_add(struct dsa_switch *ds, int port, | ||||||
|  |  		  const struct switchdev_obj_port_vlan *vlan) | ||||||
|  |  { | ||||||
| @@ -26,7 +26,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net> | |||||||
| 
 | 
 | ||||||
| --- a/drivers/net/dsa/b53/b53_common.c
 | --- a/drivers/net/dsa/b53/b53_common.c
 | ||||||
| +++ b/drivers/net/dsa/b53/b53_common.c
 | +++ b/drivers/net/dsa/b53/b53_common.c
 | ||||||
| @@ -2556,9 +2556,8 @@ static int b53_switch_init(struct b53_de
 | @@ -2584,9 +2584,8 @@ static int b53_switch_init(struct b53_de
 | ||||||
|  			dev->cpu_port = 5; |  			dev->cpu_port = 5; | ||||||
|  	} |  	} | ||||||
|   |   | ||||||
| @@ -24,7 +24,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net> | |||||||
| 
 | 
 | ||||||
| --- a/drivers/net/dsa/b53/b53_common.c
 | --- a/drivers/net/dsa/b53/b53_common.c
 | ||||||
| +++ b/drivers/net/dsa/b53/b53_common.c
 | +++ b/drivers/net/dsa/b53/b53_common.c
 | ||||||
| @@ -2559,6 +2559,8 @@ static int b53_switch_init(struct b53_de
 | @@ -2587,6 +2587,8 @@ static int b53_switch_init(struct b53_de
 | ||||||
|  	dev->enabled_ports |= BIT(dev->cpu_port); |  	dev->enabled_ports |= BIT(dev->cpu_port); | ||||||
|  	dev->num_ports = fls(dev->enabled_ports); |  	dev->num_ports = fls(dev->enabled_ports); | ||||||
|   |   | ||||||
| @@ -33,7 +33,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net> | |||||||
|  	/* Include non standard CPU port built-in PHYs to be probed */ |  	/* Include non standard CPU port built-in PHYs to be probed */ | ||||||
|  	if (is539x(dev) || is531x5(dev)) { |  	if (is539x(dev) || is531x5(dev)) { | ||||||
|  		for (i = 0; i < dev->num_ports; i++) { |  		for (i = 0; i < dev->num_ports; i++) { | ||||||
| @@ -2603,7 +2605,6 @@ struct b53_device *b53_switch_alloc(stru
 | @@ -2631,7 +2633,6 @@ struct b53_device *b53_switch_alloc(stru
 | ||||||
|  		return NULL; |  		return NULL; | ||||||
|   |   | ||||||
|  	ds->dev = base; |  	ds->dev = base; | ||||||
| @@ -0,0 +1,237 @@ | |||||||
|  | From 63f8428b4077de3664eb0b252393c839b0b293ec Mon Sep 17 00:00:00 2001 | ||||||
|  | From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl> | ||||||
|  | Date: Sun, 5 Sep 2021 19:23:28 +0200 | ||||||
|  | Subject: [PATCH] net: dsa: b53: Fix IMP port setup on BCM5301x | ||||||
|  | MIME-Version: 1.0 | ||||||
|  | Content-Type: text/plain; charset=UTF-8 | ||||||
|  | Content-Transfer-Encoding: 8bit | ||||||
|  |  | ||||||
|  | Broadcom's b53 switches have one IMP (Inband Management Port) that needs | ||||||
|  | to be programmed using its own designed register. IMP port may be | ||||||
|  | different than CPU port - especially on devices with multiple CPU ports. | ||||||
|  |  | ||||||
|  | For that reason it's required to explicitly note IMP port index and | ||||||
|  | check for it when choosing a register to use. | ||||||
|  |  | ||||||
|  | This commit fixes BCM5301x support. Those switches use CPU port 5 while | ||||||
|  | their IMP port is 8. Before this patch b53 was trying to program port 5 | ||||||
|  | with B53_PORT_OVERRIDE_CTRL instead of B53_GMII_PORT_OVERRIDE_CTRL(5). | ||||||
|  |  | ||||||
|  | It may be possible to also replace "cpu_port" usages with | ||||||
|  | dsa_is_cpu_port() but that is out of the scope of thix BCM5301x fix. | ||||||
|  |  | ||||||
|  | Fixes: 967dd82ffc52 ("net: dsa: b53: Add support for Broadcom RoboSwitch") | ||||||
|  | Signed-off-by: Rafał Miłecki <rafal@milecki.pl> | ||||||
|  | Signed-off-by: David S. Miller <davem@davemloft.net> | ||||||
|  | --- | ||||||
|  |  drivers/net/dsa/b53/b53_common.c | 28 +++++++++++++++++++++++++--- | ||||||
|  |  drivers/net/dsa/b53/b53_priv.h   |  1 + | ||||||
|  |  2 files changed, 26 insertions(+), 3 deletions(-) | ||||||
|  |  | ||||||
|  | --- a/drivers/net/dsa/b53/b53_common.c | ||||||
|  | +++ b/drivers/net/dsa/b53/b53_common.c | ||||||
|  | @@ -1109,7 +1109,7 @@ static void b53_force_link(struct b53_de | ||||||
|  |  	u8 reg, val, off; | ||||||
|  |   | ||||||
|  |  	/* Override the port settings */ | ||||||
|  | -	if (port == dev->cpu_port) { | ||||||
|  | +	if (port == dev->imp_port) { | ||||||
|  |  		off = B53_PORT_OVERRIDE_CTRL; | ||||||
|  |  		val = PORT_OVERRIDE_EN; | ||||||
|  |  	} else { | ||||||
|  | @@ -1133,7 +1133,7 @@ static void b53_force_port_config(struct | ||||||
|  |  	u8 reg, val, off; | ||||||
|  |   | ||||||
|  |  	/* Override the port settings */ | ||||||
|  | -	if (port == dev->cpu_port) { | ||||||
|  | +	if (port == dev->imp_port) { | ||||||
|  |  		off = B53_PORT_OVERRIDE_CTRL; | ||||||
|  |  		val = PORT_OVERRIDE_EN; | ||||||
|  |  	} else { | ||||||
|  | @@ -1201,7 +1201,7 @@ static void b53_adjust_link(struct dsa_s | ||||||
|  |  	b53_force_link(dev, port, phydev->link); | ||||||
|  |   | ||||||
|  |  	if (is531x5(dev) && phy_interface_is_rgmii(phydev)) { | ||||||
|  | -		if (port == 8) | ||||||
|  | +		if (port == dev->imp_port) | ||||||
|  |  			off = B53_RGMII_CTRL_IMP; | ||||||
|  |  		else | ||||||
|  |  			off = B53_RGMII_CTRL_P(port); | ||||||
|  | @@ -2266,6 +2266,7 @@ struct b53_chip_data { | ||||||
|  |  	const char *dev_name; | ||||||
|  |  	u16 vlans; | ||||||
|  |  	u16 enabled_ports; | ||||||
|  | +	u8 imp_port; | ||||||
|  |  	u8 cpu_port; | ||||||
|  |  	u8 vta_regs[3]; | ||||||
|  |  	u8 arl_bins; | ||||||
|  | @@ -2290,6 +2291,7 @@ static const struct b53_chip_data b53_sw | ||||||
|  |  		.enabled_ports = 0x1f, | ||||||
|  |  		.arl_bins = 2, | ||||||
|  |  		.arl_buckets = 1024, | ||||||
|  | +		.imp_port = 5, | ||||||
|  |  		.cpu_port = B53_CPU_PORT_25, | ||||||
|  |  		.duplex_reg = B53_DUPLEX_STAT_FE, | ||||||
|  |  	}, | ||||||
|  | @@ -2300,6 +2302,7 @@ static const struct b53_chip_data b53_sw | ||||||
|  |  		.enabled_ports = 0x1f, | ||||||
|  |  		.arl_bins = 2, | ||||||
|  |  		.arl_buckets = 1024, | ||||||
|  | +		.imp_port = 5, | ||||||
|  |  		.cpu_port = B53_CPU_PORT_25, | ||||||
|  |  		.duplex_reg = B53_DUPLEX_STAT_FE, | ||||||
|  |  	}, | ||||||
|  | @@ -2310,6 +2313,7 @@ static const struct b53_chip_data b53_sw | ||||||
|  |  		.enabled_ports = 0x1f, | ||||||
|  |  		.arl_bins = 4, | ||||||
|  |  		.arl_buckets = 1024, | ||||||
|  | +		.imp_port = 8, | ||||||
|  |  		.cpu_port = B53_CPU_PORT, | ||||||
|  |  		.vta_regs = B53_VTA_REGS, | ||||||
|  |  		.duplex_reg = B53_DUPLEX_STAT_GE, | ||||||
|  | @@ -2323,6 +2327,7 @@ static const struct b53_chip_data b53_sw | ||||||
|  |  		.enabled_ports = 0x1f, | ||||||
|  |  		.arl_bins = 4, | ||||||
|  |  		.arl_buckets = 1024, | ||||||
|  | +		.imp_port = 8, | ||||||
|  |  		.cpu_port = B53_CPU_PORT, | ||||||
|  |  		.vta_regs = B53_VTA_REGS, | ||||||
|  |  		.duplex_reg = B53_DUPLEX_STAT_GE, | ||||||
|  | @@ -2336,6 +2341,7 @@ static const struct b53_chip_data b53_sw | ||||||
|  |  		.enabled_ports = 0x1f, | ||||||
|  |  		.arl_bins = 4, | ||||||
|  |  		.arl_buckets = 1024, | ||||||
|  | +		.imp_port = 8, | ||||||
|  |  		.cpu_port = B53_CPU_PORT, | ||||||
|  |  		.vta_regs = B53_VTA_REGS_9798, | ||||||
|  |  		.duplex_reg = B53_DUPLEX_STAT_GE, | ||||||
|  | @@ -2349,6 +2355,7 @@ static const struct b53_chip_data b53_sw | ||||||
|  |  		.enabled_ports = 0x7f, | ||||||
|  |  		.arl_bins = 4, | ||||||
|  |  		.arl_buckets = 1024, | ||||||
|  | +		.imp_port = 8, | ||||||
|  |  		.cpu_port = B53_CPU_PORT, | ||||||
|  |  		.vta_regs = B53_VTA_REGS_9798, | ||||||
|  |  		.duplex_reg = B53_DUPLEX_STAT_GE, | ||||||
|  | @@ -2363,6 +2370,7 @@ static const struct b53_chip_data b53_sw | ||||||
|  |  		.arl_bins = 4, | ||||||
|  |  		.arl_buckets = 1024, | ||||||
|  |  		.vta_regs = B53_VTA_REGS, | ||||||
|  | +		.imp_port = 8, | ||||||
|  |  		.cpu_port = B53_CPU_PORT, | ||||||
|  |  		.duplex_reg = B53_DUPLEX_STAT_GE, | ||||||
|  |  		.jumbo_pm_reg = B53_JUMBO_PORT_MASK, | ||||||
|  | @@ -2375,6 +2383,7 @@ static const struct b53_chip_data b53_sw | ||||||
|  |  		.enabled_ports = 0xff, | ||||||
|  |  		.arl_bins = 4, | ||||||
|  |  		.arl_buckets = 1024, | ||||||
|  | +		.imp_port = 8, | ||||||
|  |  		.cpu_port = B53_CPU_PORT, | ||||||
|  |  		.vta_regs = B53_VTA_REGS, | ||||||
|  |  		.duplex_reg = B53_DUPLEX_STAT_GE, | ||||||
|  | @@ -2388,6 +2397,7 @@ static const struct b53_chip_data b53_sw | ||||||
|  |  		.enabled_ports = 0x1ff, | ||||||
|  |  		.arl_bins = 4, | ||||||
|  |  		.arl_buckets = 1024, | ||||||
|  | +		.imp_port = 8, | ||||||
|  |  		.cpu_port = B53_CPU_PORT, | ||||||
|  |  		.vta_regs = B53_VTA_REGS, | ||||||
|  |  		.duplex_reg = B53_DUPLEX_STAT_GE, | ||||||
|  | @@ -2401,6 +2411,7 @@ static const struct b53_chip_data b53_sw | ||||||
|  |  		.enabled_ports = 0, /* pdata must provide them */ | ||||||
|  |  		.arl_bins = 4, | ||||||
|  |  		.arl_buckets = 1024, | ||||||
|  | +		.imp_port = 8, | ||||||
|  |  		.cpu_port = B53_CPU_PORT, | ||||||
|  |  		.vta_regs = B53_VTA_REGS_63XX, | ||||||
|  |  		.duplex_reg = B53_DUPLEX_STAT_63XX, | ||||||
|  | @@ -2414,6 +2425,7 @@ static const struct b53_chip_data b53_sw | ||||||
|  |  		.enabled_ports = 0x1f, | ||||||
|  |  		.arl_bins = 4, | ||||||
|  |  		.arl_buckets = 1024, | ||||||
|  | +		.imp_port = 8, | ||||||
|  |  		.cpu_port = B53_CPU_PORT_25, /* TODO: auto detect */ | ||||||
|  |  		.vta_regs = B53_VTA_REGS, | ||||||
|  |  		.duplex_reg = B53_DUPLEX_STAT_GE, | ||||||
|  | @@ -2427,6 +2439,7 @@ static const struct b53_chip_data b53_sw | ||||||
|  |  		.enabled_ports = 0x1bf, | ||||||
|  |  		.arl_bins = 4, | ||||||
|  |  		.arl_buckets = 1024, | ||||||
|  | +		.imp_port = 8, | ||||||
|  |  		.cpu_port = B53_CPU_PORT_25, /* TODO: auto detect */ | ||||||
|  |  		.vta_regs = B53_VTA_REGS, | ||||||
|  |  		.duplex_reg = B53_DUPLEX_STAT_GE, | ||||||
|  | @@ -2440,6 +2453,7 @@ static const struct b53_chip_data b53_sw | ||||||
|  |  		.enabled_ports = 0x1bf, | ||||||
|  |  		.arl_bins = 4, | ||||||
|  |  		.arl_buckets = 1024, | ||||||
|  | +		.imp_port = 8, | ||||||
|  |  		.cpu_port = B53_CPU_PORT_25, /* TODO: auto detect */ | ||||||
|  |  		.vta_regs = B53_VTA_REGS, | ||||||
|  |  		.duplex_reg = B53_DUPLEX_STAT_GE, | ||||||
|  | @@ -2453,6 +2467,7 @@ static const struct b53_chip_data b53_sw | ||||||
|  |  		.enabled_ports = 0x1f, | ||||||
|  |  		.arl_bins = 4, | ||||||
|  |  		.arl_buckets = 1024, | ||||||
|  | +		.imp_port = 8, | ||||||
|  |  		.cpu_port = B53_CPU_PORT_25, /* TODO: auto detect */ | ||||||
|  |  		.vta_regs = B53_VTA_REGS, | ||||||
|  |  		.duplex_reg = B53_DUPLEX_STAT_GE, | ||||||
|  | @@ -2466,6 +2481,7 @@ static const struct b53_chip_data b53_sw | ||||||
|  |  		.enabled_ports = 0x1f, | ||||||
|  |  		.arl_bins = 4, | ||||||
|  |  		.arl_buckets = 1024, | ||||||
|  | +		.imp_port = 8, | ||||||
|  |  		.cpu_port = B53_CPU_PORT_25, /* TODO: auto detect */ | ||||||
|  |  		.vta_regs = B53_VTA_REGS, | ||||||
|  |  		.duplex_reg = B53_DUPLEX_STAT_GE, | ||||||
|  | @@ -2479,6 +2495,7 @@ static const struct b53_chip_data b53_sw | ||||||
|  |  		.enabled_ports = 0x1ff, | ||||||
|  |  		.arl_bins = 4, | ||||||
|  |  		.arl_buckets = 1024, | ||||||
|  | +		.imp_port = 8, | ||||||
|  |  		.cpu_port = B53_CPU_PORT, | ||||||
|  |  		.vta_regs = B53_VTA_REGS, | ||||||
|  |  		.duplex_reg = B53_DUPLEX_STAT_GE, | ||||||
|  | @@ -2492,6 +2509,7 @@ static const struct b53_chip_data b53_sw | ||||||
|  |  		.enabled_ports = 0x103, | ||||||
|  |  		.arl_bins = 4, | ||||||
|  |  		.arl_buckets = 1024, | ||||||
|  | +		.imp_port = 8, | ||||||
|  |  		.cpu_port = B53_CPU_PORT, | ||||||
|  |  		.vta_regs = B53_VTA_REGS, | ||||||
|  |  		.duplex_reg = B53_DUPLEX_STAT_GE, | ||||||
|  | @@ -2505,6 +2523,7 @@ static const struct b53_chip_data b53_sw | ||||||
|  |  		.enabled_ports = 0x1ff, | ||||||
|  |  		.arl_bins = 4, | ||||||
|  |  		.arl_buckets = 1024, | ||||||
|  | +		.imp_port = 8, | ||||||
|  |  		.cpu_port = B53_CPU_PORT, | ||||||
|  |  		.vta_regs = B53_VTA_REGS, | ||||||
|  |  		.duplex_reg = B53_DUPLEX_STAT_GE, | ||||||
|  | @@ -2518,6 +2537,7 @@ static const struct b53_chip_data b53_sw | ||||||
|  |  		.enabled_ports = 0x1ff, | ||||||
|  |  		.arl_bins = 4, | ||||||
|  |  		.arl_buckets = 256, | ||||||
|  | +		.imp_port = 8, | ||||||
|  |  		.cpu_port = B53_CPU_PORT, | ||||||
|  |  		.vta_regs = B53_VTA_REGS, | ||||||
|  |  		.duplex_reg = B53_DUPLEX_STAT_GE, | ||||||
|  | @@ -2543,6 +2563,7 @@ static int b53_switch_init(struct b53_de | ||||||
|  |  			dev->vta_regs[1] = chip->vta_regs[1]; | ||||||
|  |  			dev->vta_regs[2] = chip->vta_regs[2]; | ||||||
|  |  			dev->jumbo_pm_reg = chip->jumbo_pm_reg; | ||||||
|  | +			dev->imp_port = chip->imp_port; | ||||||
|  |  			dev->cpu_port = chip->cpu_port; | ||||||
|  |  			dev->num_vlans = chip->vlans; | ||||||
|  |  			dev->num_arl_bins = chip->arl_bins; | ||||||
|  | --- a/drivers/net/dsa/b53/b53_priv.h | ||||||
|  | +++ b/drivers/net/dsa/b53/b53_priv.h | ||||||
|  | @@ -122,6 +122,7 @@ struct b53_device { | ||||||
|  |   | ||||||
|  |  	/* used ports mask */ | ||||||
|  |  	u16 enabled_ports; | ||||||
|  | +	unsigned int imp_port; | ||||||
|  |  	unsigned int cpu_port; | ||||||
|  |   | ||||||
|  |  	/* connect specific data */ | ||||||
| @@ -0,0 +1,131 @@ | |||||||
|  | From 983d96a9116a328668601555d96736261d33170c Mon Sep 17 00:00:00 2001 | ||||||
|  | From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl> | ||||||
|  | Date: Thu, 16 Sep 2021 14:03:51 +0200 | ||||||
|  | Subject: [PATCH] net: dsa: b53: Include all ports in "enabled_ports" | ||||||
|  | MIME-Version: 1.0 | ||||||
|  | Content-Type: text/plain; charset=UTF-8 | ||||||
|  | Content-Transfer-Encoding: 8bit | ||||||
|  |  | ||||||
|  | Make "enabled_ports" bitfield contain all available switch ports | ||||||
|  | including a CPU port. This way there is no need for fixup during | ||||||
|  | initialization. | ||||||
|  |  | ||||||
|  | For BCM53010, BCM53018 and BCM53019 include also other available ports. | ||||||
|  |  | ||||||
|  | Signed-off-by: Rafał Miłecki <rafal@milecki.pl> | ||||||
|  | Reviewed-by: Florian Fainelli <f.fainelli@gmail.com> | ||||||
|  | Tested-by: Florian Fainelli <f.fainelli@gmail.com> | ||||||
|  | Signed-off-by: Jakub Kicinski <kuba@kernel.org> | ||||||
|  | --- | ||||||
|  |  drivers/net/dsa/b53/b53_common.c | 23 +++++++++++------------ | ||||||
|  |  1 file changed, 11 insertions(+), 12 deletions(-) | ||||||
|  |  | ||||||
|  | --- a/drivers/net/dsa/b53/b53_common.c | ||||||
|  | +++ b/drivers/net/dsa/b53/b53_common.c | ||||||
|  | @@ -2288,7 +2288,7 @@ static const struct b53_chip_data b53_sw | ||||||
|  |  		.chip_id = BCM5325_DEVICE_ID, | ||||||
|  |  		.dev_name = "BCM5325", | ||||||
|  |  		.vlans = 16, | ||||||
|  | -		.enabled_ports = 0x1f, | ||||||
|  | +		.enabled_ports = 0x3f, | ||||||
|  |  		.arl_bins = 2, | ||||||
|  |  		.arl_buckets = 1024, | ||||||
|  |  		.imp_port = 5, | ||||||
|  | @@ -2299,7 +2299,7 @@ static const struct b53_chip_data b53_sw | ||||||
|  |  		.chip_id = BCM5365_DEVICE_ID, | ||||||
|  |  		.dev_name = "BCM5365", | ||||||
|  |  		.vlans = 256, | ||||||
|  | -		.enabled_ports = 0x1f, | ||||||
|  | +		.enabled_ports = 0x3f, | ||||||
|  |  		.arl_bins = 2, | ||||||
|  |  		.arl_buckets = 1024, | ||||||
|  |  		.imp_port = 5, | ||||||
|  | @@ -2310,7 +2310,7 @@ static const struct b53_chip_data b53_sw | ||||||
|  |  		.chip_id = BCM5389_DEVICE_ID, | ||||||
|  |  		.dev_name = "BCM5389", | ||||||
|  |  		.vlans = 4096, | ||||||
|  | -		.enabled_ports = 0x1f, | ||||||
|  | +		.enabled_ports = 0x11f, | ||||||
|  |  		.arl_bins = 4, | ||||||
|  |  		.arl_buckets = 1024, | ||||||
|  |  		.imp_port = 8, | ||||||
|  | @@ -2324,7 +2324,7 @@ static const struct b53_chip_data b53_sw | ||||||
|  |  		.chip_id = BCM5395_DEVICE_ID, | ||||||
|  |  		.dev_name = "BCM5395", | ||||||
|  |  		.vlans = 4096, | ||||||
|  | -		.enabled_ports = 0x1f, | ||||||
|  | +		.enabled_ports = 0x11f, | ||||||
|  |  		.arl_bins = 4, | ||||||
|  |  		.arl_buckets = 1024, | ||||||
|  |  		.imp_port = 8, | ||||||
|  | @@ -2338,7 +2338,7 @@ static const struct b53_chip_data b53_sw | ||||||
|  |  		.chip_id = BCM5397_DEVICE_ID, | ||||||
|  |  		.dev_name = "BCM5397", | ||||||
|  |  		.vlans = 4096, | ||||||
|  | -		.enabled_ports = 0x1f, | ||||||
|  | +		.enabled_ports = 0x11f, | ||||||
|  |  		.arl_bins = 4, | ||||||
|  |  		.arl_buckets = 1024, | ||||||
|  |  		.imp_port = 8, | ||||||
|  | @@ -2352,7 +2352,7 @@ static const struct b53_chip_data b53_sw | ||||||
|  |  		.chip_id = BCM5398_DEVICE_ID, | ||||||
|  |  		.dev_name = "BCM5398", | ||||||
|  |  		.vlans = 4096, | ||||||
|  | -		.enabled_ports = 0x7f, | ||||||
|  | +		.enabled_ports = 0x17f, | ||||||
|  |  		.arl_bins = 4, | ||||||
|  |  		.arl_buckets = 1024, | ||||||
|  |  		.imp_port = 8, | ||||||
|  | @@ -2366,7 +2366,7 @@ static const struct b53_chip_data b53_sw | ||||||
|  |  		.chip_id = BCM53115_DEVICE_ID, | ||||||
|  |  		.dev_name = "BCM53115", | ||||||
|  |  		.vlans = 4096, | ||||||
|  | -		.enabled_ports = 0x1f, | ||||||
|  | +		.enabled_ports = 0x11f, | ||||||
|  |  		.arl_bins = 4, | ||||||
|  |  		.arl_buckets = 1024, | ||||||
|  |  		.vta_regs = B53_VTA_REGS, | ||||||
|  | @@ -2380,7 +2380,7 @@ static const struct b53_chip_data b53_sw | ||||||
|  |  		.chip_id = BCM53125_DEVICE_ID, | ||||||
|  |  		.dev_name = "BCM53125", | ||||||
|  |  		.vlans = 4096, | ||||||
|  | -		.enabled_ports = 0xff, | ||||||
|  | +		.enabled_ports = 0x1ff, | ||||||
|  |  		.arl_bins = 4, | ||||||
|  |  		.arl_buckets = 1024, | ||||||
|  |  		.imp_port = 8, | ||||||
|  | @@ -2422,7 +2422,7 @@ static const struct b53_chip_data b53_sw | ||||||
|  |  		.chip_id = BCM53010_DEVICE_ID, | ||||||
|  |  		.dev_name = "BCM53010", | ||||||
|  |  		.vlans = 4096, | ||||||
|  | -		.enabled_ports = 0x1f, | ||||||
|  | +		.enabled_ports = 0x1bf, | ||||||
|  |  		.arl_bins = 4, | ||||||
|  |  		.arl_buckets = 1024, | ||||||
|  |  		.imp_port = 8, | ||||||
|  | @@ -2464,7 +2464,7 @@ static const struct b53_chip_data b53_sw | ||||||
|  |  		.chip_id = BCM53018_DEVICE_ID, | ||||||
|  |  		.dev_name = "BCM53018", | ||||||
|  |  		.vlans = 4096, | ||||||
|  | -		.enabled_ports = 0x1f, | ||||||
|  | +		.enabled_ports = 0x1bf, | ||||||
|  |  		.arl_bins = 4, | ||||||
|  |  		.arl_buckets = 1024, | ||||||
|  |  		.imp_port = 8, | ||||||
|  | @@ -2478,7 +2478,7 @@ static const struct b53_chip_data b53_sw | ||||||
|  |  		.chip_id = BCM53019_DEVICE_ID, | ||||||
|  |  		.dev_name = "BCM53019", | ||||||
|  |  		.vlans = 4096, | ||||||
|  | -		.enabled_ports = 0x1f, | ||||||
|  | +		.enabled_ports = 0x1bf, | ||||||
|  |  		.arl_bins = 4, | ||||||
|  |  		.arl_buckets = 1024, | ||||||
|  |  		.imp_port = 8, | ||||||
|  | @@ -2605,7 +2605,6 @@ static int b53_switch_init(struct b53_de | ||||||
|  |  			dev->cpu_port = 5; | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  | -	dev->enabled_ports |= BIT(dev->cpu_port); | ||||||
|  |  	dev->num_ports = fls(dev->enabled_ports); | ||||||
|  |   | ||||||
|  |  	dev->ds->num_ports = min_t(unsigned int, dev->num_ports, DSA_MAX_PORTS); | ||||||
| @@ -0,0 +1,42 @@ | |||||||
|  | From b290c6384afabbca5ae6e2af72fb1b2bc37922be Mon Sep 17 00:00:00 2001 | ||||||
|  | From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl> | ||||||
|  | Date: Thu, 16 Sep 2021 14:03:52 +0200 | ||||||
|  | Subject: [PATCH] net: dsa: b53: Drop BCM5301x workaround for a wrong CPU/IMP | ||||||
|  |  port | ||||||
|  | MIME-Version: 1.0 | ||||||
|  | Content-Type: text/plain; charset=UTF-8 | ||||||
|  | Content-Transfer-Encoding: 8bit | ||||||
|  |  | ||||||
|  | On BCM5301x port 8 requires a fixed link when used. | ||||||
|  |  | ||||||
|  | Years ago when b53 was an OpenWrt downstream driver (with configuration | ||||||
|  | based on sometimes bugged NVRAM) there was a need for a fixup. In case | ||||||
|  | of forcing fixed link for (incorrectly specified) port 5 the code had to | ||||||
|  | actually setup port 8 link. | ||||||
|  |  | ||||||
|  | For upstream b53 driver with setup based on DT there is no need for that | ||||||
|  | workaround. In DT we have and require correct ports setup. | ||||||
|  |  | ||||||
|  | Signed-off-by: Rafał Miłecki <rafal@milecki.pl> | ||||||
|  | Reviewed-by: Florian Fainelli <f.fainelli@gmail.com> | ||||||
|  | Tested-by: Florian Fainelli <f.fainelli@gmail.com> | ||||||
|  | Signed-off-by: Jakub Kicinski <kuba@kernel.org> | ||||||
|  | --- | ||||||
|  |  drivers/net/dsa/b53/b53_common.c | 6 ------ | ||||||
|  |  1 file changed, 6 deletions(-) | ||||||
|  |  | ||||||
|  | --- a/drivers/net/dsa/b53/b53_common.c | ||||||
|  | +++ b/drivers/net/dsa/b53/b53_common.c | ||||||
|  | @@ -1256,12 +1256,6 @@ static void b53_adjust_link(struct dsa_s | ||||||
|  |  				return; | ||||||
|  |  			} | ||||||
|  |  		} | ||||||
|  | -	} else if (is5301x(dev)) { | ||||||
|  | -		if (port != dev->cpu_port) { | ||||||
|  | -			b53_force_port_config(dev, dev->cpu_port, 2000, | ||||||
|  | -					      DUPLEX_FULL, true, true); | ||||||
|  | -			b53_force_link(dev, dev->cpu_port, 1); | ||||||
|  | -		} | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  |  	/* Re-negotiate EEE if it was enabled already */ | ||||||
| @@ -0,0 +1,32 @@ | |||||||
|  | From 3ff26b29230c54fea2353b63124c589b61953e14 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl> | ||||||
|  | Date: Thu, 16 Sep 2021 14:03:53 +0200 | ||||||
|  | Subject: [PATCH] net: dsa: b53: Improve flow control setup on BCM5301x | ||||||
|  | MIME-Version: 1.0 | ||||||
|  | Content-Type: text/plain; charset=UTF-8 | ||||||
|  | Content-Transfer-Encoding: 8bit | ||||||
|  |  | ||||||
|  | According to the Broadcom's reference driver flow control needs to be | ||||||
|  | enabled for any CPU switch port (5, 7 or 8 - depending on which one is | ||||||
|  | used). Current code makes it work only for the port 5. Use | ||||||
|  | dsa_is_cpu_port() which solved that problem. | ||||||
|  |  | ||||||
|  | Signed-off-by: Rafał Miłecki <rafal@milecki.pl> | ||||||
|  | Reviewed-by: Florian Fainelli <f.fainelli@gmail.com> | ||||||
|  | Tested-by: Florian Fainelli <f.fainelli@gmail.com> | ||||||
|  | Signed-off-by: Jakub Kicinski <kuba@kernel.org> | ||||||
|  | --- | ||||||
|  |  drivers/net/dsa/b53/b53_common.c | 2 +- | ||||||
|  |  1 file changed, 1 insertion(+), 1 deletion(-) | ||||||
|  |  | ||||||
|  | --- a/drivers/net/dsa/b53/b53_common.c | ||||||
|  | +++ b/drivers/net/dsa/b53/b53_common.c | ||||||
|  | @@ -1187,7 +1187,7 @@ static void b53_adjust_link(struct dsa_s | ||||||
|  |  		return; | ||||||
|  |   | ||||||
|  |  	/* Enable flow control on BCM5301x's CPU port */ | ||||||
|  | -	if (is5301x(dev) && port == dev->cpu_port) | ||||||
|  | +	if (is5301x(dev) && dsa_is_cpu_port(ds, port)) | ||||||
|  |  		tx_pause = rx_pause = true; | ||||||
|  |   | ||||||
|  |  	if (phydev->pause) { | ||||||
| @@ -0,0 +1,205 @@ | |||||||
|  | From 7d5af56418d7d01e43247a33b6fe6492ea871923 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl> | ||||||
|  | Date: Thu, 16 Sep 2021 14:03:54 +0200 | ||||||
|  | Subject: [PATCH] net: dsa: b53: Drop unused "cpu_port" field | ||||||
|  | MIME-Version: 1.0 | ||||||
|  | Content-Type: text/plain; charset=UTF-8 | ||||||
|  | Content-Transfer-Encoding: 8bit | ||||||
|  |  | ||||||
|  | It's set but never used anymore. | ||||||
|  |  | ||||||
|  | Signed-off-by: Rafał Miłecki <rafal@milecki.pl> | ||||||
|  | Reviewed-by: Florian Fainelli <f.fainelli@gmail.com> | ||||||
|  | Tested-by: Florian Fainelli <f.fainelli@gmail.com> | ||||||
|  | Signed-off-by: Jakub Kicinski <kuba@kernel.org> | ||||||
|  | --- | ||||||
|  |  drivers/net/dsa/b53/b53_common.c | 28 ---------------------------- | ||||||
|  |  drivers/net/dsa/b53/b53_priv.h   |  1 - | ||||||
|  |  2 files changed, 29 deletions(-) | ||||||
|  |  | ||||||
|  | --- a/drivers/net/dsa/b53/b53_common.c | ||||||
|  | +++ b/drivers/net/dsa/b53/b53_common.c | ||||||
|  | @@ -2286,7 +2286,6 @@ static const struct b53_chip_data b53_sw | ||||||
|  |  		.arl_bins = 2, | ||||||
|  |  		.arl_buckets = 1024, | ||||||
|  |  		.imp_port = 5, | ||||||
|  | -		.cpu_port = B53_CPU_PORT_25, | ||||||
|  |  		.duplex_reg = B53_DUPLEX_STAT_FE, | ||||||
|  |  	}, | ||||||
|  |  	{ | ||||||
|  | @@ -2297,7 +2296,6 @@ static const struct b53_chip_data b53_sw | ||||||
|  |  		.arl_bins = 2, | ||||||
|  |  		.arl_buckets = 1024, | ||||||
|  |  		.imp_port = 5, | ||||||
|  | -		.cpu_port = B53_CPU_PORT_25, | ||||||
|  |  		.duplex_reg = B53_DUPLEX_STAT_FE, | ||||||
|  |  	}, | ||||||
|  |  	{ | ||||||
|  | @@ -2308,7 +2306,6 @@ static const struct b53_chip_data b53_sw | ||||||
|  |  		.arl_bins = 4, | ||||||
|  |  		.arl_buckets = 1024, | ||||||
|  |  		.imp_port = 8, | ||||||
|  | -		.cpu_port = B53_CPU_PORT, | ||||||
|  |  		.vta_regs = B53_VTA_REGS, | ||||||
|  |  		.duplex_reg = B53_DUPLEX_STAT_GE, | ||||||
|  |  		.jumbo_pm_reg = B53_JUMBO_PORT_MASK, | ||||||
|  | @@ -2322,7 +2319,6 @@ static const struct b53_chip_data b53_sw | ||||||
|  |  		.arl_bins = 4, | ||||||
|  |  		.arl_buckets = 1024, | ||||||
|  |  		.imp_port = 8, | ||||||
|  | -		.cpu_port = B53_CPU_PORT, | ||||||
|  |  		.vta_regs = B53_VTA_REGS, | ||||||
|  |  		.duplex_reg = B53_DUPLEX_STAT_GE, | ||||||
|  |  		.jumbo_pm_reg = B53_JUMBO_PORT_MASK, | ||||||
|  | @@ -2336,7 +2332,6 @@ static const struct b53_chip_data b53_sw | ||||||
|  |  		.arl_bins = 4, | ||||||
|  |  		.arl_buckets = 1024, | ||||||
|  |  		.imp_port = 8, | ||||||
|  | -		.cpu_port = B53_CPU_PORT, | ||||||
|  |  		.vta_regs = B53_VTA_REGS_9798, | ||||||
|  |  		.duplex_reg = B53_DUPLEX_STAT_GE, | ||||||
|  |  		.jumbo_pm_reg = B53_JUMBO_PORT_MASK, | ||||||
|  | @@ -2350,7 +2345,6 @@ static const struct b53_chip_data b53_sw | ||||||
|  |  		.arl_bins = 4, | ||||||
|  |  		.arl_buckets = 1024, | ||||||
|  |  		.imp_port = 8, | ||||||
|  | -		.cpu_port = B53_CPU_PORT, | ||||||
|  |  		.vta_regs = B53_VTA_REGS_9798, | ||||||
|  |  		.duplex_reg = B53_DUPLEX_STAT_GE, | ||||||
|  |  		.jumbo_pm_reg = B53_JUMBO_PORT_MASK, | ||||||
|  | @@ -2365,7 +2359,6 @@ static const struct b53_chip_data b53_sw | ||||||
|  |  		.arl_buckets = 1024, | ||||||
|  |  		.vta_regs = B53_VTA_REGS, | ||||||
|  |  		.imp_port = 8, | ||||||
|  | -		.cpu_port = B53_CPU_PORT, | ||||||
|  |  		.duplex_reg = B53_DUPLEX_STAT_GE, | ||||||
|  |  		.jumbo_pm_reg = B53_JUMBO_PORT_MASK, | ||||||
|  |  		.jumbo_size_reg = B53_JUMBO_MAX_SIZE, | ||||||
|  | @@ -2378,7 +2371,6 @@ static const struct b53_chip_data b53_sw | ||||||
|  |  		.arl_bins = 4, | ||||||
|  |  		.arl_buckets = 1024, | ||||||
|  |  		.imp_port = 8, | ||||||
|  | -		.cpu_port = B53_CPU_PORT, | ||||||
|  |  		.vta_regs = B53_VTA_REGS, | ||||||
|  |  		.duplex_reg = B53_DUPLEX_STAT_GE, | ||||||
|  |  		.jumbo_pm_reg = B53_JUMBO_PORT_MASK, | ||||||
|  | @@ -2392,7 +2384,6 @@ static const struct b53_chip_data b53_sw | ||||||
|  |  		.arl_bins = 4, | ||||||
|  |  		.arl_buckets = 1024, | ||||||
|  |  		.imp_port = 8, | ||||||
|  | -		.cpu_port = B53_CPU_PORT, | ||||||
|  |  		.vta_regs = B53_VTA_REGS, | ||||||
|  |  		.duplex_reg = B53_DUPLEX_STAT_GE, | ||||||
|  |  		.jumbo_pm_reg = B53_JUMBO_PORT_MASK, | ||||||
|  | @@ -2406,7 +2397,6 @@ static const struct b53_chip_data b53_sw | ||||||
|  |  		.arl_bins = 4, | ||||||
|  |  		.arl_buckets = 1024, | ||||||
|  |  		.imp_port = 8, | ||||||
|  | -		.cpu_port = B53_CPU_PORT, | ||||||
|  |  		.vta_regs = B53_VTA_REGS_63XX, | ||||||
|  |  		.duplex_reg = B53_DUPLEX_STAT_63XX, | ||||||
|  |  		.jumbo_pm_reg = B53_JUMBO_PORT_MASK_63XX, | ||||||
|  | @@ -2420,7 +2410,6 @@ static const struct b53_chip_data b53_sw | ||||||
|  |  		.arl_bins = 4, | ||||||
|  |  		.arl_buckets = 1024, | ||||||
|  |  		.imp_port = 8, | ||||||
|  | -		.cpu_port = B53_CPU_PORT_25, /* TODO: auto detect */ | ||||||
|  |  		.vta_regs = B53_VTA_REGS, | ||||||
|  |  		.duplex_reg = B53_DUPLEX_STAT_GE, | ||||||
|  |  		.jumbo_pm_reg = B53_JUMBO_PORT_MASK, | ||||||
|  | @@ -2434,7 +2423,6 @@ static const struct b53_chip_data b53_sw | ||||||
|  |  		.arl_bins = 4, | ||||||
|  |  		.arl_buckets = 1024, | ||||||
|  |  		.imp_port = 8, | ||||||
|  | -		.cpu_port = B53_CPU_PORT_25, /* TODO: auto detect */ | ||||||
|  |  		.vta_regs = B53_VTA_REGS, | ||||||
|  |  		.duplex_reg = B53_DUPLEX_STAT_GE, | ||||||
|  |  		.jumbo_pm_reg = B53_JUMBO_PORT_MASK, | ||||||
|  | @@ -2448,7 +2436,6 @@ static const struct b53_chip_data b53_sw | ||||||
|  |  		.arl_bins = 4, | ||||||
|  |  		.arl_buckets = 1024, | ||||||
|  |  		.imp_port = 8, | ||||||
|  | -		.cpu_port = B53_CPU_PORT_25, /* TODO: auto detect */ | ||||||
|  |  		.vta_regs = B53_VTA_REGS, | ||||||
|  |  		.duplex_reg = B53_DUPLEX_STAT_GE, | ||||||
|  |  		.jumbo_pm_reg = B53_JUMBO_PORT_MASK, | ||||||
|  | @@ -2462,7 +2449,6 @@ static const struct b53_chip_data b53_sw | ||||||
|  |  		.arl_bins = 4, | ||||||
|  |  		.arl_buckets = 1024, | ||||||
|  |  		.imp_port = 8, | ||||||
|  | -		.cpu_port = B53_CPU_PORT_25, /* TODO: auto detect */ | ||||||
|  |  		.vta_regs = B53_VTA_REGS, | ||||||
|  |  		.duplex_reg = B53_DUPLEX_STAT_GE, | ||||||
|  |  		.jumbo_pm_reg = B53_JUMBO_PORT_MASK, | ||||||
|  | @@ -2476,7 +2462,6 @@ static const struct b53_chip_data b53_sw | ||||||
|  |  		.arl_bins = 4, | ||||||
|  |  		.arl_buckets = 1024, | ||||||
|  |  		.imp_port = 8, | ||||||
|  | -		.cpu_port = B53_CPU_PORT_25, /* TODO: auto detect */ | ||||||
|  |  		.vta_regs = B53_VTA_REGS, | ||||||
|  |  		.duplex_reg = B53_DUPLEX_STAT_GE, | ||||||
|  |  		.jumbo_pm_reg = B53_JUMBO_PORT_MASK, | ||||||
|  | @@ -2490,7 +2475,6 @@ static const struct b53_chip_data b53_sw | ||||||
|  |  		.arl_bins = 4, | ||||||
|  |  		.arl_buckets = 1024, | ||||||
|  |  		.imp_port = 8, | ||||||
|  | -		.cpu_port = B53_CPU_PORT, | ||||||
|  |  		.vta_regs = B53_VTA_REGS, | ||||||
|  |  		.duplex_reg = B53_DUPLEX_STAT_GE, | ||||||
|  |  		.jumbo_pm_reg = B53_JUMBO_PORT_MASK, | ||||||
|  | @@ -2504,7 +2488,6 @@ static const struct b53_chip_data b53_sw | ||||||
|  |  		.arl_bins = 4, | ||||||
|  |  		.arl_buckets = 1024, | ||||||
|  |  		.imp_port = 8, | ||||||
|  | -		.cpu_port = B53_CPU_PORT, | ||||||
|  |  		.vta_regs = B53_VTA_REGS, | ||||||
|  |  		.duplex_reg = B53_DUPLEX_STAT_GE, | ||||||
|  |  		.jumbo_pm_reg = B53_JUMBO_PORT_MASK, | ||||||
|  | @@ -2518,7 +2501,6 @@ static const struct b53_chip_data b53_sw | ||||||
|  |  		.arl_bins = 4, | ||||||
|  |  		.arl_buckets = 1024, | ||||||
|  |  		.imp_port = 8, | ||||||
|  | -		.cpu_port = B53_CPU_PORT, | ||||||
|  |  		.vta_regs = B53_VTA_REGS, | ||||||
|  |  		.duplex_reg = B53_DUPLEX_STAT_GE, | ||||||
|  |  		.jumbo_pm_reg = B53_JUMBO_PORT_MASK, | ||||||
|  | @@ -2532,7 +2514,6 @@ static const struct b53_chip_data b53_sw | ||||||
|  |  		.arl_bins = 4, | ||||||
|  |  		.arl_buckets = 256, | ||||||
|  |  		.imp_port = 8, | ||||||
|  | -		.cpu_port = B53_CPU_PORT, | ||||||
|  |  		.vta_regs = B53_VTA_REGS, | ||||||
|  |  		.duplex_reg = B53_DUPLEX_STAT_GE, | ||||||
|  |  		.jumbo_pm_reg = B53_JUMBO_PORT_MASK, | ||||||
|  | @@ -2558,7 +2539,6 @@ static int b53_switch_init(struct b53_de | ||||||
|  |  			dev->vta_regs[2] = chip->vta_regs[2]; | ||||||
|  |  			dev->jumbo_pm_reg = chip->jumbo_pm_reg; | ||||||
|  |  			dev->imp_port = chip->imp_port; | ||||||
|  | -			dev->cpu_port = chip->cpu_port; | ||||||
|  |  			dev->num_vlans = chip->vlans; | ||||||
|  |  			dev->num_arl_bins = chip->arl_bins; | ||||||
|  |  			dev->num_arl_buckets = chip->arl_buckets; | ||||||
|  | @@ -2590,13 +2570,6 @@ static int b53_switch_init(struct b53_de | ||||||
|  |  			break; | ||||||
|  |  #endif | ||||||
|  |  		} | ||||||
|  | -	} else if (dev->chip_id == BCM53115_DEVICE_ID) { | ||||||
|  | -		u64 strap_value; | ||||||
|  | - | ||||||
|  | -		b53_read48(dev, B53_STAT_PAGE, B53_STRAP_VALUE, &strap_value); | ||||||
|  | -		/* use second IMP port if GMII is enabled */ | ||||||
|  | -		if (strap_value & SV_GMII_CTRL_115) | ||||||
|  | -			dev->cpu_port = 5; | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  |  	dev->num_ports = fls(dev->enabled_ports); | ||||||
|  | --- a/drivers/net/dsa/b53/b53_priv.h | ||||||
|  | +++ b/drivers/net/dsa/b53/b53_priv.h | ||||||
|  | @@ -123,7 +123,6 @@ struct b53_device { | ||||||
|  |  	/* used ports mask */ | ||||||
|  |  	u16 enabled_ports; | ||||||
|  |  	unsigned int imp_port; | ||||||
|  | -	unsigned int cpu_port; | ||||||
|  |   | ||||||
|  |  	/* connect specific data */ | ||||||
|  |  	u8 current_page; | ||||||
		Reference in New Issue
	
	Block a user
	 Rafał Miłecki
					Rafał Miłecki