• MD Danish Anwar's avatar
    net: ti: icssg-prueth: Add multicast filtering support · a9999732
    MD Danish Anwar authored
    Add multicast filtering support for ICSSG Driver. Multicast addresses will
    be updated by __dev_mc_sync() API. icssg_prueth_add_macst () and
    icssg_prueth_del_mcast() will be sync and unsync APIs for the driver
    respectively.
    
    To add a mac_address for a port, driver needs to call icssg_fdb_add_del()
    and pass the mac_address and BIT(port_id) to the API. The ICSSG firmware
    will then configure the rules and allow filtering.
    
    If a mac_address is added to port0 and the same mac_address needs to be
    added for port1, driver needs to pass BIT(port0) | BIT(port1) to the
    icssg_fdb_add_del() API. If driver just pass BIT(port1) then the entry for
    port0 will be overwritten / lost. This is a design constraint on the
    firmware side.
    
    To overcome this in the driver, to add any mac_address for let's say portX
    driver first checks if the same mac_address is already added for any other
    port. If yes driver calls icssg_fdb_add_del() with BIT(portX) |
    BIT(other_existing_port). If not, driver calls icssg_fdb_add_del() with
    BIT(portX).
    
    The same thing is applicable for deleting mac_addresses as well. This
    logic is in icssg_prueth_add_mcast / icssg_prueth_del_mcast APIs.
    Signed-off-by: default avatarMD Danish Anwar <danishanwar@ti.com>
    Reviewed-by: default avatarWojciech Drewek <wojciech.drewek@intel.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    a9999732
icssg_prueth.c 37.8 KB