From patchwork Sun Feb 17 14:25:12 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Russell King (Oracle)" X-Patchwork-Id: 1043671 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=armlinux.org.uk Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=armlinux.org.uk header.i=@armlinux.org.uk header.b="f78XS++L"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 442Tpj6TcFz9s7h for ; Mon, 18 Feb 2019 01:27:09 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726985AbfBQOZT (ORCPT ); Sun, 17 Feb 2019 09:25:19 -0500 Received: from pandora.armlinux.org.uk ([78.32.30.218]:38242 "EHLO pandora.armlinux.org.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725795AbfBQOZT (ORCPT ); Sun, 17 Feb 2019 09:25:19 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=armlinux.org.uk; s=pandora-2019; h=Date:Sender:Message-Id:Content-Type: Content-Transfer-Encoding:MIME-Version:Subject:Cc:To:From:References: In-Reply-To:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help: List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=KQVpUCZ6gIrwP4aNaa9JCsneRM1KxYUgG98dD30g77k=; b=f78XS++LJCdIZgg7oHyEYrBDgK H4vefFhniiS9FI81YTcj/rj2F00xcsPwYAR5AF+LcraORO24bzNXmwZ7Uv6+JTs+L/F8h35jG2Qdf GSrGlS0fYp+UcVIrB8D6bLCeMfSW1M4iW3XrJn7fqt7FmnOgrDuKhUk5H8bEfqTVacf3AklJShNm/ 8y+UaKqHuamPkzOPVCzQ9OKEHZDMFI2kppopAkc0azkH8jnYu8fGYpglDhzYzhBXKycsp26Fw4FhA SVwtmeCN78BRRP2TmONoSrJaLsPrjNCtlFk8nDKD1YkFQcAL+bf1cZDYJ3t/t+pAaByDQT2QVtZqq /1VbvbZA==; Received: from e0022681537dd.dyn.armlinux.org.uk ([fd8f:7570:feb6:1:222:68ff:fe15:37dd]:46874 helo=rmk-PC.armlinux.org.uk) by pandora.armlinux.org.uk with esmtpsa (TLSv1.2:ECDHE-RSA-AES128-GCM-SHA256:128) (Exim 4.90_1) (envelope-from ) id 1gvNNZ-0000eb-Gs; Sun, 17 Feb 2019 14:25:13 +0000 Received: from rmk by rmk-PC.armlinux.org.uk with local (Exim 4.82_1-5b7a7c0-XX) (envelope-from ) id 1gvNNY-0006Y7-NF; Sun, 17 Feb 2019 14:25:12 +0000 In-Reply-To: <20190217142414.cjtmpi5y2l5rtdlb@shell.armlinux.org.uk> References: <20190217142414.cjtmpi5y2l5rtdlb@shell.armlinux.org.uk> From: Russell King To: Andrew Lunn , Florian Fainelli , Vivien Didelot Cc: "David S. Miller" , netdev@vger.kernel.org Subject: [PATCH net-next 2/3] net: dsa: mv88e6xxx: add support for bridge flags MIME-Version: 1.0 Content-Disposition: inline Message-Id: Date: Sun, 17 Feb 2019 14:25:12 +0000 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Add support for the bridge flags to Marvell 88e6xxx bridges, allowing the multicast and unicast flood properties to be controlled. These can be controlled on a per-port basis via commands such as: bridge link set dev lan1 flood on|off bridge link set dev lan1 mcast_flood on|off Signed-off-by: Russell King Reviewed-by: Florian Fainelli --- drivers/net/dsa/mv88e6xxx/chip.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c index 32e7af5caa69..b75a865a293d 100644 --- a/drivers/net/dsa/mv88e6xxx/chip.c +++ b/drivers/net/dsa/mv88e6xxx/chip.c @@ -4692,6 +4692,37 @@ static int mv88e6xxx_port_mdb_del(struct dsa_switch *ds, int port, return err; } +static int mv88e6xxx_port_bridge_flags(struct dsa_switch *ds, int port, + unsigned long flags) +{ + struct mv88e6xxx_chip *chip = ds->priv; + bool unicast, multicast; + int ret = -EOPNOTSUPP; + + unicast = dsa_is_cpu_port(ds, port) || dsa_is_dsa_port(ds, port) || + flags & BR_FLOOD; + multicast = flags & BR_MCAST_FLOOD; + + mutex_lock(&chip->reg_lock); + if (chip->info->ops->port_set_egress_floods) + ret = chip->info->ops->port_set_egress_floods(chip, port, + unicast, + multicast); + mutex_unlock(&chip->reg_lock); + + return ret; +} + +static unsigned long mv88e6xxx_bridge_flags_support(struct dsa_switch *ds) +{ + unsigned long support = 0; + + if (chip->info->ops->port_set_egress_floods) + support |= BR_FLOOD | BR_MCAST_FLOOD; + + return support; +} + static const struct dsa_switch_ops mv88e6xxx_switch_ops = { #if IS_ENABLED(CONFIG_NET_DSA_LEGACY) .probe = mv88e6xxx_drv_probe, @@ -4719,6 +4750,8 @@ static const struct dsa_switch_ops mv88e6xxx_switch_ops = { .set_ageing_time = mv88e6xxx_set_ageing_time, .port_bridge_join = mv88e6xxx_port_bridge_join, .port_bridge_leave = mv88e6xxx_port_bridge_leave, + .port_bridge_flags = mv88e6xxx_port_bridge_flags, + .bridge_flags_support = mv88e6xxx_bridge_flags_support, .port_stp_state_set = mv88e6xxx_port_stp_state_set, .port_fast_age = mv88e6xxx_port_fast_age, .port_vlan_filtering = mv88e6xxx_port_vlan_filtering,