• Vladimir Oltean's avatar
    net: dsa: fix missing adjustment of host broadcast flooding · 129b7532
    Vladimir Oltean authored
    PGID_BC is configured statically by ocelot_init() to flood towards the
    CPU port module, and dynamically by ocelot_port_set_bcast_flood()
    towards all user ports.
    
    When the tagging protocol changes, the intention is to turn off flooding
    towards the old pipe towards the host, and to turn it on towards the new
    pipe.
    
    Due to a recent change which removed the adjustment of PGID_BC from
    felix_set_host_flood(), 3 things happen.
    
    - when we change from NPI to tag_8021q mode: in this mode, the CPU port
      module is accessed via registers, and used to read PTP packets with
      timestamps. We fail to disable broadcast flooding towards the CPU port
      module, and to enable broadcast flooding towards the physical port
      that serves as a DSA tag_8021q CPU port.
    
    - from tag_8021q to NPI mode: in this mode, the CPU port module is
      redirected to a physical port. We fail to disable broadcast flooding
      towards the physical tag_8021q CPU port, and to enable it towards the
      CPU port module at ocelot->num_phys_ports.
    
    - when the ports are put in promiscuous mode, we also fail to update
      PGID_BC towards the host pipe of the current protocol.
    
    First issue means that felix_check_xtr_pkt() has to do extra work,
    because it will not see only PTP packets, but also broadcasts. It needs
    to dequeue these packets just to drop them.
    
    Third issue is inconsequential, since PGID_BC is allocated from the
    nonreserved multicast PGID space, and these PGIDs are conveniently
    initialized to 0x7f (i.e. flood towards all ports except the CPU port
    module). Broadcasts reach the NPI port via ocelot_init(), and reach the
    tag_8021q CPU port via the hardware defaults.
    
    Second issue is also inconsequential, because we fail both at disabling
    and at enabling broadcast flooding on a port, so the defaults mentioned
    above are preserved, and they are fine except for the performance impact.
    
    Fixes: 7a29d220 ("net: dsa: felix: reimplement tagging protocol change with function pointers")
    Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    129b7532
felix.c 51.7 KB