On 2023-01-31 19:56, Simon Horman wrote:
--- a/drivers/net/dsa/mv88e6xxx/chip.c
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
@@ -42,6 +42,7 @@
 #include "ptp.h"
 #include "serdes.h"
 #include "smi.h"
+#include "switchdev.h"

 static void assert_reg_lock(struct mv88e6xxx_chip *chip)
 {
@@ -2726,18 +2727,25 @@ static int mv88e6xxx_port_fdb_add(struct dsa_switch *ds, int port,
                                  const unsigned char *addr, u16 vid,
                                  u16 fdb_flags, struct dsa_db db)
 {
+       bool is_dynamic = !!(fdb_flags & DSA_FDB_FLAG_DYNAMIC);
        struct mv88e6xxx_chip *chip = ds->priv;
+       u8 state;
        int err;

-       /* Ignore entries with flags set */
-       if (fdb_flags)
-               return 0;
+       state = MV88E6XXX_G1_ATU_DATA_STATE_UC_STATIC;
+       if (is_dynamic)
+               state = MV88E6XXX_G1_ATU_DATA_STATE_UC_AGE_7_NEWEST;

What if flags other than DSA_FDB_FLAG_DYNAMIC are set (in future)?

They will have to be caught and handled here if there is support for it, e.g. something like...

else if (someflag)
        dosomething();

For now only one flag will actually be set and they are mutually exclusive, as they will not make sense together with the potential flags I know, but that can change at some time of course.


+       else
+               if (fdb_flags)

nit: else if (fdb_flags)

+                       return 0;


...

Reply via email to