Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5ed4e3eb authored by Florian Fainelli's avatar Florian Fainelli Committed by David S. Miller
Browse files

net: dsa: Pass a port to get_tag_protocol()



A number of drivers want to check whether the configured CPU port is a
possible configuration for enabling tagging, pass down the CPU port
number so they verify that.

Signed-off-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
Reviewed-by: default avatarVivien Didelot <vivien.didelot@savoirfairelinux.com>
Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent ee9d3429
Loading
Loading
Loading
Loading
+13 −19
Original line number Diff line number Diff line
@@ -541,7 +541,8 @@ EXPORT_SYMBOL(b53_disable_port);

void b53_brcm_hdr_setup(struct dsa_switch *ds, int port)
{
	bool tag_en = !!(ds->ops->get_tag_protocol(ds) == DSA_TAG_PROTO_BRCM);
	bool tag_en = !!(ds->ops->get_tag_protocol(ds, port) ==
			 DSA_TAG_PROTO_BRCM);
	struct b53_device *dev = ds->priv;
	u8 hdr_ctl, val;
	u16 reg;
@@ -1478,38 +1479,31 @@ void b53_br_fast_age(struct dsa_switch *ds, int port)
}
EXPORT_SYMBOL(b53_br_fast_age);

static bool b53_can_enable_brcm_tags(struct dsa_switch *ds)
static bool b53_can_enable_brcm_tags(struct dsa_switch *ds, int port)
{
	unsigned int brcm_tag_mask;
	unsigned int i;

	/* Broadcom switches will accept enabling Broadcom tags on the
	 * following ports: 5, 7 and 8, any other port is not supported
	 */
	brcm_tag_mask = BIT(B53_CPU_PORT_25) | BIT(7) | BIT(B53_CPU_PORT);

	for (i = 0; i < ds->num_ports; i++) {
		if (dsa_is_cpu_port(ds, i)) {
			if (!(BIT(i) & brcm_tag_mask)) {
				dev_warn(ds->dev,
					 "Port %d is not Broadcom tag capable\n",
					 i);
				return false;
			}
		}
	switch (port) {
	case B53_CPU_PORT_25:
	case 7:
	case B53_CPU_PORT:
		return true;
	}

	return true;
	dev_warn(ds->dev, "Port %d is not Broadcom tag capable\n", port);
	return false;
}

static enum dsa_tag_protocol b53_get_tag_protocol(struct dsa_switch *ds)
static enum dsa_tag_protocol b53_get_tag_protocol(struct dsa_switch *ds,
						  int port)
{
	struct b53_device *dev = ds->priv;

	/* Older models support a different tag format that we do not
	 * support in net/dsa/tag_brcm.c yet.
	 */
	if (is5325(dev) || is5365(dev) || !b53_can_enable_brcm_tags(ds))
	if (is5325(dev) || is5365(dev) || !b53_can_enable_brcm_tags(ds, port))
		return DSA_TAG_PROTO_NONE;
	else
		return DSA_TAG_PROTO_BRCM;
+2 −1
Original line number Diff line number Diff line
@@ -35,7 +35,8 @@
#include "b53/b53_priv.h"
#include "b53/b53_regs.h"

static enum dsa_tag_protocol bcm_sf2_sw_get_tag_protocol(struct dsa_switch *ds)
static enum dsa_tag_protocol bcm_sf2_sw_get_tag_protocol(struct dsa_switch *ds,
							 int port)
{
	return DSA_TAG_PROTO_BRCM;
}
+2 −1
Original line number Diff line number Diff line
@@ -64,7 +64,8 @@ struct dsa_loop_priv {

static struct phy_device *phydevs[PHY_MAX_ADDR];

static enum dsa_tag_protocol dsa_loop_get_protocol(struct dsa_switch *ds)
static enum dsa_tag_protocol dsa_loop_get_protocol(struct dsa_switch *ds,
						   int port)
{
	dev_dbg(ds->dev, "%s\n", __func__);

+2 −1
Original line number Diff line number Diff line
@@ -894,7 +894,8 @@ static int lan9303_check_device(struct lan9303 *chip)

/* ---------------------------- DSA -----------------------------------*/

static enum dsa_tag_protocol lan9303_get_tag_protocol(struct dsa_switch *ds)
static enum dsa_tag_protocol lan9303_get_tag_protocol(struct dsa_switch *ds,
						      int port)
{
	return DSA_TAG_PROTO_LAN9303;
}
+2 −1
Original line number Diff line number Diff line
@@ -394,7 +394,8 @@ static int ksz_setup(struct dsa_switch *ds)
	return 0;
}

static enum dsa_tag_protocol ksz_get_tag_protocol(struct dsa_switch *ds)
static enum dsa_tag_protocol ksz_get_tag_protocol(struct dsa_switch *ds,
						  int port)
{
	return DSA_TAG_PROTO_KSZ;
}
Loading