1. 07 May, 2022 2 commits
    • Vladimir Oltean's avatar
      net: dsa: felix: stop migrating FDBs back and forth on tag proto change · a51c1c3f
      Vladimir Oltean authored
      I just realized we don't need to migrate the host-filtered FDB entries
      when the tagging protocol changes from "ocelot" to "ocelot-8021q".
      
      Host-filtered addresses are learned towards the PGID_CPU "multicast"
      port group, reserved by software, which contains BIT(ocelot->num_phys_ports).
      That is the "special" port entry in the analyzer block for the CPU port
      module.
      
      In "ocelot" mode, the CPU port module's packets are redirected to the
      NPI port.
      
      In "ocelot-8021q" mode, felix_8021q_cpu_port_init() does something funny
      anyway, and changes PGID_CPU to stop pointing at the CPU port module and
      start pointing at the physical port where the DSA master is attached.
      
      The fact that we can alter the destination of packets learned towards
      PGID_CPU without altering the MAC table entries themselves means that it
      is pointless to walk through the FDB entries, forget that they were
      learned towards PGID_CPU, and re-learn them towards the "unicast" PGID
      associated with the physical port connected to the DSA master. We can
      let the PGID_CPU value change simply alter the destination of the
      host-filtered unicast packets in one fell swoop.
      Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      a51c1c3f
    • Vladimir Oltean's avatar
      net: dsa: felix: use PGID_CPU for FDB entry migration on NPI port · 2c110abc
      Vladimir Oltean authored
      ocelot_fdb_add() redirects FDB entries installed on the NPI port towards
      the special reserved PGID_CPU used for host-filtered addresses. PGID_CPU
      contains BIT(ocelot->num_phys_ports) in the destination port mask, which
      is code name for the CPU port module.
      
      Whereas felix_migrate_fdbs_to_*_port() uses the ocelot->num_phys_ports
      PGID directly, and it appears that this works too. Even if this PGID is
      set to zero, apparently its number is special and packets still reach
      the CPU port module.
      
      Nonetheless, in the end, these addresses end up in the same place
      regardless of whether they go through an extra indirection layer or not.
      Use PGID_CPU across to have more uniformity.
      Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      2c110abc
  2. 06 May, 2022 26 commits
  3. 05 May, 2022 12 commits