All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH net-next 0/4] mlxsw: Adapt driver to upcoming firmware versions
@ 2018-03-19  7:50 Ido Schimmel
  2018-03-19  7:51 ` [PATCH net-next 1/4] mlxsw: pci: Set mbox dma addresses to zero when not used Ido Schimmel
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: Ido Schimmel @ 2018-03-19  7:50 UTC (permalink / raw)
  To: netdev; +Cc: davem, jiri, mlxsw, Ido Schimmel

Hi,

The first two patches make sure that reserved fields are set to zero, as
required by the device's programmer's reference manual (PRM).

Last two patches prevent the driver from performing an invalid operation
that is going to be denied by upcoming firmware versions.

Ido Schimmel (2):
  mlxsw: spectrum_acl: Adapt ACL configuration to new firmware versions
  mlxsw: spectrum_acl: Do not invalidate already invalid ACL groups

Shalom Toledo (1):
  mlxsw: pci: Set mbox dma addresses to zero when not used

Tal Bar (1):
  mlxsw: spectrum: Reserved field in mbox profile shouldn't be set

 drivers/net/ethernet/mellanox/mlxsw/pci.c          |  9 +++--
 drivers/net/ethernet/mellanox/mlxsw/spectrum.c     |  4 --
 drivers/net/ethernet/mellanox/mlxsw/spectrum_acl.c | 43 +++++++++++++---------
 .../ethernet/mellanox/mlxsw/spectrum_acl_tcam.c    |  5 ---
 4 files changed, 32 insertions(+), 29 deletions(-)

-- 
2.14.3

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH net-next 1/4] mlxsw: pci: Set mbox dma addresses to zero when not used
  2018-03-19  7:50 [PATCH net-next 0/4] mlxsw: Adapt driver to upcoming firmware versions Ido Schimmel
@ 2018-03-19  7:51 ` Ido Schimmel
  2018-03-19  7:51 ` [PATCH net-next 2/4] mlxsw: spectrum: Reserved field in mbox profile shouldn't be set Ido Schimmel
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Ido Schimmel @ 2018-03-19  7:51 UTC (permalink / raw)
  To: netdev; +Cc: davem, jiri, mlxsw, Shalom Toledo, Ido Schimmel

From: Shalom Toledo <shalomt@mellanox.com>

Some of the opcodes don't use in, out or both mboxes. In such cases, the
mbox address is a reserved field and FW expects it to be zero.

Signed-off-by: Shalom Toledo <shalomt@mellanox.com>
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: Ido Schimmel <idosch@mellanox.com>
---
 drivers/net/ethernet/mellanox/mlxsw/pci.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlxsw/pci.c b/drivers/net/ethernet/mellanox/mlxsw/pci.c
index 85faa87bf42d..e30c6ce3dcb4 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/pci.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/pci.c
@@ -1519,8 +1519,7 @@ static int mlxsw_pci_cmd_exec(void *bus_priv, u16 opcode, u8 opcode_mod,
 			      u8 *p_status)
 {
 	struct mlxsw_pci *mlxsw_pci = bus_priv;
-	dma_addr_t in_mapaddr = mlxsw_pci->cmd.in_mbox.mapaddr;
-	dma_addr_t out_mapaddr = mlxsw_pci->cmd.out_mbox.mapaddr;
+	dma_addr_t in_mapaddr = 0, out_mapaddr = 0;
 	bool evreq = mlxsw_pci->cmd.nopoll;
 	unsigned long timeout = msecs_to_jiffies(MLXSW_PCI_CIR_TIMEOUT_MSECS);
 	bool *p_wait_done = &mlxsw_pci->cmd.wait_done;
@@ -1532,11 +1531,15 @@ static int mlxsw_pci_cmd_exec(void *bus_priv, u16 opcode, u8 opcode_mod,
 	if (err)
 		return err;
 
-	if (in_mbox)
+	if (in_mbox) {
 		memcpy(mlxsw_pci->cmd.in_mbox.buf, in_mbox, in_mbox_size);
+		in_mapaddr = mlxsw_pci->cmd.in_mbox.mapaddr;
+	}
 	mlxsw_pci_write32(mlxsw_pci, CIR_IN_PARAM_HI, upper_32_bits(in_mapaddr));
 	mlxsw_pci_write32(mlxsw_pci, CIR_IN_PARAM_LO, lower_32_bits(in_mapaddr));
 
+	if (out_mbox)
+		out_mapaddr = mlxsw_pci->cmd.out_mbox.mapaddr;
 	mlxsw_pci_write32(mlxsw_pci, CIR_OUT_PARAM_HI, upper_32_bits(out_mapaddr));
 	mlxsw_pci_write32(mlxsw_pci, CIR_OUT_PARAM_LO, lower_32_bits(out_mapaddr));
 
-- 
2.14.3

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH net-next 2/4] mlxsw: spectrum: Reserved field in mbox profile shouldn't be set
  2018-03-19  7:50 [PATCH net-next 0/4] mlxsw: Adapt driver to upcoming firmware versions Ido Schimmel
  2018-03-19  7:51 ` [PATCH net-next 1/4] mlxsw: pci: Set mbox dma addresses to zero when not used Ido Schimmel
@ 2018-03-19  7:51 ` Ido Schimmel
  2018-03-19  7:51 ` [PATCH net-next 3/4] mlxsw: spectrum_acl: Adapt ACL configuration to new firmware versions Ido Schimmel
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Ido Schimmel @ 2018-03-19  7:51 UTC (permalink / raw)
  To: netdev; +Cc: davem, jiri, mlxsw, Tal Bar, Ido Schimmel

From: Tal Bar <talb@mellanox.com>

There is no need to set some of the fields within 'mbox_config_profile',
since they are reserved and capability mask should be set to zero.

Signed-off-by: Tal Bar <talb@mellanox.com>
Acked-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: Ido Schimmel <idosch@mellanox.com>
---
 drivers/net/ethernet/mellanox/mlxsw/spectrum.c | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
index 7884e8a2de35..a120602bca26 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
@@ -3779,12 +3779,8 @@ static void mlxsw_sp_fini(struct mlxsw_core *mlxsw_core)
 }
 
 static const struct mlxsw_config_profile mlxsw_sp_config_profile = {
-	.used_max_vepa_channels		= 1,
-	.max_vepa_channels		= 0,
 	.used_max_mid			= 1,
 	.max_mid			= MLXSW_SP_MID_MAX,
-	.used_max_pgt			= 1,
-	.max_pgt			= 0,
 	.used_flood_tables		= 1,
 	.used_flood_mode		= 1,
 	.flood_mode			= 3,
-- 
2.14.3

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH net-next 3/4] mlxsw: spectrum_acl: Adapt ACL configuration to new firmware versions
  2018-03-19  7:50 [PATCH net-next 0/4] mlxsw: Adapt driver to upcoming firmware versions Ido Schimmel
  2018-03-19  7:51 ` [PATCH net-next 1/4] mlxsw: pci: Set mbox dma addresses to zero when not used Ido Schimmel
  2018-03-19  7:51 ` [PATCH net-next 2/4] mlxsw: spectrum: Reserved field in mbox profile shouldn't be set Ido Schimmel
@ 2018-03-19  7:51 ` Ido Schimmel
  2018-03-19  7:51 ` [PATCH net-next 4/4] mlxsw: spectrum_acl: Do not invalidate already invalid ACL groups Ido Schimmel
  2018-03-20 16:11 ` [PATCH net-next 0/4] mlxsw: Adapt driver to upcoming firmware versions David Miller
  4 siblings, 0 replies; 6+ messages in thread
From: Ido Schimmel @ 2018-03-19  7:51 UTC (permalink / raw)
  To: netdev; +Cc: davem, jiri, mlxsw, Ido Schimmel

The driver currently creates empty ACL groups, binds them to the
requested port and then fills them with actual ACLs that point to TCAM
regions.

However, empty ACL groups are considered invalid and upcoming firmware
versions are going to forbid their binding.

Work around this limitation by only performing the binding after the
first ACL was added to the group.

Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: Ido Schimmel <idosch@mellanox.com>
---
 drivers/net/ethernet/mellanox/mlxsw/spectrum_acl.c | 43 +++++++++++++---------
 1 file changed, 26 insertions(+), 17 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl.c
index 21ed27ae51e3..1c1601a43978 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl.c
@@ -160,6 +160,13 @@ bool mlxsw_sp_acl_block_disabled(struct mlxsw_sp_acl_block *block)
 	return block->disable_count;
 }
 
+static bool
+mlxsw_sp_acl_ruleset_is_singular(const struct mlxsw_sp_acl_ruleset *ruleset)
+{
+	/* We hold a reference on ruleset ourselves */
+	return ruleset->ref_count == 2;
+}
+
 static int
 mlxsw_sp_acl_ruleset_bind(struct mlxsw_sp *mlxsw_sp,
 			  struct mlxsw_sp_acl_block *block,
@@ -341,21 +348,8 @@ mlxsw_sp_acl_ruleset_create(struct mlxsw_sp *mlxsw_sp,
 	if (err)
 		goto err_ht_insert;
 
-	if (!chain_index) {
-		/* We only need ruleset with chain index 0, the implicit one,
-		 * to be directly bound to device. The rest of the rulesets
-		 * are bound by "Goto action set".
-		 */
-		err = mlxsw_sp_acl_ruleset_block_bind(mlxsw_sp, ruleset, block);
-		if (err)
-			goto err_ruleset_bind;
-	}
-
 	return ruleset;
 
-err_ruleset_bind:
-	rhashtable_remove_fast(&acl->ruleset_ht, &ruleset->ht_node,
-			       mlxsw_sp_acl_ruleset_ht_params);
 err_ht_insert:
 	ops->ruleset_del(mlxsw_sp, ruleset->priv);
 err_ops_ruleset_add:
@@ -369,12 +363,8 @@ static void mlxsw_sp_acl_ruleset_destroy(struct mlxsw_sp *mlxsw_sp,
 					 struct mlxsw_sp_acl_ruleset *ruleset)
 {
 	const struct mlxsw_sp_acl_profile_ops *ops = ruleset->ht_key.ops;
-	struct mlxsw_sp_acl_block *block = ruleset->ht_key.block;
-	u32 chain_index = ruleset->ht_key.chain_index;
 	struct mlxsw_sp_acl *acl = mlxsw_sp->acl;
 
-	if (!chain_index)
-		mlxsw_sp_acl_ruleset_block_unbind(mlxsw_sp, ruleset, block);
 	rhashtable_remove_fast(&acl->ruleset_ht, &ruleset->ht_node,
 			       mlxsw_sp_acl_ruleset_ht_params);
 	ops->ruleset_del(mlxsw_sp, ruleset->priv);
@@ -688,10 +678,25 @@ int mlxsw_sp_acl_rule_add(struct mlxsw_sp *mlxsw_sp,
 	if (err)
 		goto err_rhashtable_insert;
 
+	if (!ruleset->ht_key.chain_index &&
+	    mlxsw_sp_acl_ruleset_is_singular(ruleset)) {
+		/* We only need ruleset with chain index 0, the implicit
+		 * one, to be directly bound to device. The rest of the
+		 * rulesets are bound by "Goto action set".
+		 */
+		err = mlxsw_sp_acl_ruleset_block_bind(mlxsw_sp, ruleset,
+						      ruleset->ht_key.block);
+		if (err)
+			goto err_ruleset_block_bind;
+	}
+
 	list_add_tail(&rule->list, &mlxsw_sp->acl->rules);
 	ruleset->ht_key.block->rule_count++;
 	return 0;
 
+err_ruleset_block_bind:
+	rhashtable_remove_fast(&ruleset->rule_ht, &rule->ht_node,
+			       mlxsw_sp_acl_rule_ht_params);
 err_rhashtable_insert:
 	ops->rule_del(mlxsw_sp, rule->priv);
 	return err;
@@ -705,6 +710,10 @@ void mlxsw_sp_acl_rule_del(struct mlxsw_sp *mlxsw_sp,
 
 	ruleset->ht_key.block->rule_count--;
 	list_del(&rule->list);
+	if (!ruleset->ht_key.chain_index &&
+	    mlxsw_sp_acl_ruleset_is_singular(ruleset))
+		mlxsw_sp_acl_ruleset_block_unbind(mlxsw_sp, ruleset,
+						  ruleset->ht_key.block);
 	rhashtable_remove_fast(&ruleset->rule_ht, &rule->ht_node,
 			       mlxsw_sp_acl_rule_ht_params);
 	ops->rule_del(mlxsw_sp, rule->priv);
-- 
2.14.3

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH net-next 4/4] mlxsw: spectrum_acl: Do not invalidate already invalid ACL groups
  2018-03-19  7:50 [PATCH net-next 0/4] mlxsw: Adapt driver to upcoming firmware versions Ido Schimmel
                   ` (2 preceding siblings ...)
  2018-03-19  7:51 ` [PATCH net-next 3/4] mlxsw: spectrum_acl: Adapt ACL configuration to new firmware versions Ido Schimmel
@ 2018-03-19  7:51 ` Ido Schimmel
  2018-03-20 16:11 ` [PATCH net-next 0/4] mlxsw: Adapt driver to upcoming firmware versions David Miller
  4 siblings, 0 replies; 6+ messages in thread
From: Ido Schimmel @ 2018-03-19  7:51 UTC (permalink / raw)
  To: netdev; +Cc: davem, jiri, mlxsw, Ido Schimmel

When a new ACL group is created its region (ACL) list is initially
empty. Thus, the call to mlxsw_sp_acl_tcam_group_update() would
basically invalidate an already invalid (non-existent) group.

Remove the unnecessary call and make the function symmetric to its del()
counterpart.

Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: Ido Schimmel <idosch@mellanox.com>
---
 drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c | 5 -----
 1 file changed, 5 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c
index c6e180c2be1e..ad1b548e3cac 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c
@@ -228,10 +228,6 @@ mlxsw_sp_acl_tcam_group_add(struct mlxsw_sp *mlxsw_sp,
 	if (err)
 		return err;
 
-	err = mlxsw_sp_acl_tcam_group_update(mlxsw_sp, group);
-	if (err)
-		goto err_group_update;
-
 	err = rhashtable_init(&group->chunk_ht,
 			      &mlxsw_sp_acl_tcam_chunk_ht_params);
 	if (err)
@@ -240,7 +236,6 @@ mlxsw_sp_acl_tcam_group_add(struct mlxsw_sp *mlxsw_sp,
 	return 0;
 
 err_rhashtable_init:
-err_group_update:
 	mlxsw_sp_acl_tcam_group_id_put(tcam, group->id);
 	return err;
 }
-- 
2.14.3

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH net-next 0/4] mlxsw: Adapt driver to upcoming firmware versions
  2018-03-19  7:50 [PATCH net-next 0/4] mlxsw: Adapt driver to upcoming firmware versions Ido Schimmel
                   ` (3 preceding siblings ...)
  2018-03-19  7:51 ` [PATCH net-next 4/4] mlxsw: spectrum_acl: Do not invalidate already invalid ACL groups Ido Schimmel
@ 2018-03-20 16:11 ` David Miller
  4 siblings, 0 replies; 6+ messages in thread
From: David Miller @ 2018-03-20 16:11 UTC (permalink / raw)
  To: idosch; +Cc: netdev, jiri, mlxsw

From: Ido Schimmel <idosch@mellanox.com>
Date: Mon, 19 Mar 2018 09:50:59 +0200

> The first two patches make sure that reserved fields are set to zero, as
> required by the device's programmer's reference manual (PRM).
> 
> Last two patches prevent the driver from performing an invalid operation
> that is going to be denied by upcoming firmware versions.

Series applied, thank you.

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2018-03-20 16:11 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-03-19  7:50 [PATCH net-next 0/4] mlxsw: Adapt driver to upcoming firmware versions Ido Schimmel
2018-03-19  7:51 ` [PATCH net-next 1/4] mlxsw: pci: Set mbox dma addresses to zero when not used Ido Schimmel
2018-03-19  7:51 ` [PATCH net-next 2/4] mlxsw: spectrum: Reserved field in mbox profile shouldn't be set Ido Schimmel
2018-03-19  7:51 ` [PATCH net-next 3/4] mlxsw: spectrum_acl: Adapt ACL configuration to new firmware versions Ido Schimmel
2018-03-19  7:51 ` [PATCH net-next 4/4] mlxsw: spectrum_acl: Do not invalidate already invalid ACL groups Ido Schimmel
2018-03-20 16:11 ` [PATCH net-next 0/4] mlxsw: Adapt driver to upcoming firmware versions David Miller

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.