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

Reply via email to