From: Leon Romanovsky <leon@kernel.org>
To: Kurt Kanzenbach <kurt@kmk-computers.de>
Cc: Andrew Lunn <andrew@lunn.ch>,
Vivien Didelot <vivien.didelot@gmail.com>,
Florian Fainelli <f.fainelli@gmail.com>,
Vladimir Oltean <olteanv@gmail.com>,
"David S. Miller" <davem@davemloft.net>,
Jakub Kicinski <kuba@kernel.org>,
netdev@vger.kernel.org
Subject: Re: [PATCH net-next] net: dsa: hellcreek: Offload bridge port flags
Date: Sun, 14 Mar 2021 15:43:28 +0200 [thread overview]
Message-ID: <YE4TAIf+rlczLYJw@unreal> (raw)
In-Reply-To: <20210314125208.17378-1-kurt@kmk-computers.de>
On Sun, Mar 14, 2021 at 01:52:08PM +0100, Kurt Kanzenbach wrote:
> The switch implements unicast and multicast filtering per port.
> Add support for it. By default filtering is disabled.
>
> Signed-off-by: Kurt Kanzenbach <kurt@kmk-computers.de>
> ---
> drivers/net/dsa/hirschmann/hellcreek.c | 129 ++++++++++++++++++++-----
> 1 file changed, 104 insertions(+), 25 deletions(-)
>
> diff --git a/drivers/net/dsa/hirschmann/hellcreek.c b/drivers/net/dsa/hirschmann/hellcreek.c
> index c1f873a4fbc4..6cba02307bda 100644
> --- a/drivers/net/dsa/hirschmann/hellcreek.c
> +++ b/drivers/net/dsa/hirschmann/hellcreek.c
> @@ -600,6 +600,83 @@ static void hellcreek_setup_vlan_membership(struct dsa_switch *ds, int port,
> hellcreek_unapply_vlan(hellcreek, upstream, vid);
> }
>
> +static void hellcreek_port_set_ucast_flood(struct hellcreek *hellcreek,
> + int port, bool enable)
> +{
> + struct hellcreek_port *hellcreek_port;
> + u16 val;
> +
> + hellcreek_port = &hellcreek->ports[port];
> +
> + dev_dbg(hellcreek->dev, "%s unicast flooding on port %d\n",
> + enable ? "Enable" : "Disable", port);
> +
> + mutex_lock(&hellcreek->reg_lock);
> +
> + hellcreek_select_port(hellcreek, port);
> + val = hellcreek_port->ptcfg;
> + if (enable)
> + val &= ~HR_PTCFG_UUC_FLT;
> + else
> + val |= HR_PTCFG_UUC_FLT;
> + hellcreek_write(hellcreek, val, HR_PTCFG);
> + hellcreek_port->ptcfg = val;
> +
> + mutex_unlock(&hellcreek->reg_lock);
> +}
> +
> +static void hellcreek_port_set_mcast_flood(struct hellcreek *hellcreek,
> + int port, bool enable)
> +{
> + struct hellcreek_port *hellcreek_port;
> + u16 val;
> +
> + hellcreek_port = &hellcreek->ports[port];
> +
> + dev_dbg(hellcreek->dev, "%s multicast flooding on port %d\n",
> + enable ? "Enable" : "Disable", port);
> +
> + mutex_lock(&hellcreek->reg_lock);
> +
> + hellcreek_select_port(hellcreek, port);
> + val = hellcreek_port->ptcfg;
> + if (enable)
> + val &= ~HR_PTCFG_UMC_FLT;
> + else
> + val |= HR_PTCFG_UMC_FLT;
> + hellcreek_write(hellcreek, val, HR_PTCFG);
> + hellcreek_port->ptcfg = val;
> +
> + mutex_unlock(&hellcreek->reg_lock);
> +}
> +
> +static int hellcreek_pre_bridge_flags(struct dsa_switch *ds, int port,
> + struct switchdev_brport_flags flags,
> + struct netlink_ext_ack *extack)
> +{
> + if (flags.mask & ~(BR_FLOOD | BR_MCAST_FLOOD))
> + return -EINVAL;
> +
> + return 0;
> +}
> +
> +static int hellcreek_bridge_flags(struct dsa_switch *ds, int port,
> + struct switchdev_brport_flags flags,
> + struct netlink_ext_ack *extack)
> +{
> + struct hellcreek *hellcreek = ds->priv;
> +
> + if (flags.mask & BR_FLOOD)
> + hellcreek_port_set_ucast_flood(hellcreek, port,
> + !!(flags.val & BR_FLOOD));
> +
> + if (flags.mask & BR_MCAST_FLOOD)
> + hellcreek_port_set_mcast_flood(hellcreek, port,
> + !!(flags.val & BR_MCAST_FLOOD));
> +
> + return 0;
> +}
> +
> static int hellcreek_port_bridge_join(struct dsa_switch *ds, int port,
> struct net_device *br)
> {
> @@ -1719,31 +1796,33 @@ static int hellcreek_port_setup_tc(struct dsa_switch *ds, int port,
> }
>
> static const struct dsa_switch_ops hellcreek_ds_ops = {
> - .get_ethtool_stats = hellcreek_get_ethtool_stats,
> - .get_sset_count = hellcreek_get_sset_count,
> - .get_strings = hellcreek_get_strings,
> - .get_tag_protocol = hellcreek_get_tag_protocol,
> - .get_ts_info = hellcreek_get_ts_info,
> - .phylink_validate = hellcreek_phylink_validate,
> - .port_bridge_join = hellcreek_port_bridge_join,
> - .port_bridge_leave = hellcreek_port_bridge_leave,
> - .port_disable = hellcreek_port_disable,
> - .port_enable = hellcreek_port_enable,
> - .port_fdb_add = hellcreek_fdb_add,
> - .port_fdb_del = hellcreek_fdb_del,
> - .port_fdb_dump = hellcreek_fdb_dump,
> - .port_hwtstamp_set = hellcreek_port_hwtstamp_set,
> - .port_hwtstamp_get = hellcreek_port_hwtstamp_get,
> - .port_prechangeupper = hellcreek_port_prechangeupper,
> - .port_rxtstamp = hellcreek_port_rxtstamp,
> - .port_setup_tc = hellcreek_port_setup_tc,
> - .port_stp_state_set = hellcreek_port_stp_state_set,
> - .port_txtstamp = hellcreek_port_txtstamp,
> - .port_vlan_add = hellcreek_vlan_add,
> - .port_vlan_del = hellcreek_vlan_del,
> - .port_vlan_filtering = hellcreek_vlan_filtering,
> - .setup = hellcreek_setup,
> - .teardown = hellcreek_teardown,
> + .get_ethtool_stats = hellcreek_get_ethtool_stats,
> + .get_sset_count = hellcreek_get_sset_count,
> + .get_strings = hellcreek_get_strings,
> + .get_tag_protocol = hellcreek_get_tag_protocol,
> + .get_ts_info = hellcreek_get_ts_info,
> + .phylink_validate = hellcreek_phylink_validate,
> + .port_bridge_flags = hellcreek_bridge_flags,
> + .port_bridge_join = hellcreek_port_bridge_join,
> + .port_bridge_leave = hellcreek_port_bridge_leave,
> + .port_disable = hellcreek_port_disable,
> + .port_enable = hellcreek_port_enable,
> + .port_fdb_add = hellcreek_fdb_add,
> + .port_fdb_del = hellcreek_fdb_del,
> + .port_fdb_dump = hellcreek_fdb_dump,
> + .port_hwtstamp_set = hellcreek_port_hwtstamp_set,
> + .port_hwtstamp_get = hellcreek_port_hwtstamp_get,
> + .port_pre_bridge_flags = hellcreek_pre_bridge_flags,
> + .port_prechangeupper = hellcreek_port_prechangeupper,
> + .port_rxtstamp = hellcreek_port_rxtstamp,
> + .port_setup_tc = hellcreek_port_setup_tc,
> + .port_stp_state_set = hellcreek_port_stp_state_set,
> + .port_txtstamp = hellcreek_port_txtstamp,
> + .port_vlan_add = hellcreek_vlan_add,
> + .port_vlan_del = hellcreek_vlan_del,
> + .port_vlan_filtering = hellcreek_vlan_filtering,
> + .setup = hellcreek_setup,
> + .teardown = hellcreek_teardown,
> };
This patch is a perfect example why vertical space alignment is a bad thing.
Addition of one function caused to so much churn at the end.
Thanks
>
> static int hellcreek_probe(struct platform_device *pdev)
> --
> 2.30.2
>
next prev parent reply other threads:[~2021-03-14 13:44 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-14 12:52 [PATCH net-next] net: dsa: hellcreek: Offload bridge port flags Kurt Kanzenbach
2021-03-14 13:43 ` Leon Romanovsky [this message]
2021-03-15 19:40 ` patchwork-bot+netdevbpf
2021-03-15 20:08 ` Vladimir Oltean
2021-03-15 20:33 ` Kurt Kanzenbach
2021-03-15 21:34 ` Vladimir Oltean
2021-03-16 8:38 ` Kurt Kanzenbach
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=YE4TAIf+rlczLYJw@unreal \
--to=leon@kernel.org \
--cc=andrew@lunn.ch \
--cc=davem@davemloft.net \
--cc=f.fainelli@gmail.com \
--cc=kuba@kernel.org \
--cc=kurt@kmk-computers.de \
--cc=netdev@vger.kernel.org \
--cc=olteanv@gmail.com \
--cc=vivien.didelot@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).