Segregating L2 forwarding domains with ocelot

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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help