Segregating L2 forwarding domains with ocelot
From: Vladimir Oltean <olteanv@gmail.com>
Date: 2019-09-19 15:36:28
From: Vladimir Oltean <olteanv@gmail.com>
Date: 2019-09-19 15:36:28
Hi Alex, Joergen, Allan,
Currently the ocelot driver rejects enslaving switch ports to more
than one bridge:
static int ocelot_port_bridge_join(struct ocelot_port *ocelot_port,
struct net_device *bridge)
{
struct ocelot *ocelot = ocelot_port->ocelot;
if (!ocelot->bridge_mask) {
ocelot->hw_bridge_dev = bridge;
} else {
if (ocelot->hw_bridge_dev != bridge)
/* This is adding the port to a second bridge, this is
* unsupported */
return -ENODEV;
}
ocelot->bridge_mask |= BIT(ocelot_port->chip_port);
return 0;
}
I am wondering why the ocelot driver is writing the same
bridge_fwd_mask to all PGID_SRC[port] registers? Judging from the
reference manual description of PGID_SRC, the hardware should be able
of managing a forwarding matrix and not just a forwarding array?
Regards,
-Vladimir