| From 088aab9478116f19e05ea44676e2340f9e67bd5a Mon Sep 17 00:00:00 2001 |
| From: =?UTF-8?q?Michal=20Vok=C3=A1=C4=8D?= <michal.vokac@ysoft.com> |
| Date: Thu, 26 Sep 2019 10:59:17 +0200 |
| Subject: [PATCH] net: dsa: qca8k: Use up to 7 ports for all operations |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| commit 7ae6d93c8f052b7a77ba56ed0f654e22a2876739 upstream. |
| |
| The QCA8K family supports up to 7 ports. So use the existing |
| QCA8K_NUM_PORTS define to allocate the switch structure and limit all |
| operations with the switch ports. |
| |
| This was not an issue until commit 0394a63acfe2 ("net: dsa: enable and |
| disable all ports") disabled all unused ports. Since the unused ports 7-11 |
| are outside of the correct register range on this switch some registers |
| were rewritten with invalid content. |
| |
| Fixes: 6b93fb46480a ("net-next: dsa: add new driver for qca8xxx family") |
| Fixes: a0c02161ecfc ("net: dsa: variable number of ports") |
| Fixes: 0394a63acfe2 ("net: dsa: enable and disable all ports") |
| Signed-off-by: Michal Vokáč <michal.vokac@ysoft.com> |
| Reviewed-by: Andrew Lunn <andrew@lunn.ch> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/net/dsa/qca8k.c b/drivers/net/dsa/qca8k.c |
| index c4fa400efdcc..da9c806d781c 100644 |
| --- a/drivers/net/dsa/qca8k.c |
| +++ b/drivers/net/dsa/qca8k.c |
| @@ -700,7 +700,7 @@ qca8k_setup(struct dsa_switch *ds) |
| BIT(0) << QCA8K_GLOBAL_FW_CTRL1_UC_DP_S); |
| |
| /* Setup connection between CPU port & user ports */ |
| - for (i = 0; i < DSA_MAX_PORTS; i++) { |
| + for (i = 0; i < QCA8K_NUM_PORTS; i++) { |
| /* CPU port gets connected to all user ports of the switch */ |
| if (dsa_is_cpu_port(ds, i)) { |
| qca8k_rmw(priv, QCA8K_PORT_LOOKUP_CTRL(QCA8K_CPU_PORT), |
| @@ -1053,7 +1053,7 @@ qca8k_sw_probe(struct mdio_device *mdiodev) |
| if (id != QCA8K_ID_QCA8337) |
| return -ENODEV; |
| |
| - priv->ds = dsa_switch_alloc(&mdiodev->dev, DSA_MAX_PORTS); |
| + priv->ds = dsa_switch_alloc(&mdiodev->dev, QCA8K_NUM_PORTS); |
| if (!priv->ds) |
| return -ENOMEM; |
| |
| -- |
| 2.7.4 |
| |