realtek: cleanup rtl83{8x,9x}_enable_learning/flood
authorINAGAKI Hiroshi <musashino.open@gmail.com>
Sat, 17 Sep 2022 04:30:05 +0000 (13:30 +0900)
committerSander Vanheule <sander@svanheule.net>
Sat, 8 Oct 2022 09:05:03 +0000 (11:05 +0200)
In *_enable_learning() only address learning should be configured, so
remove enabling forwarding. Forwarding is configured by the respective
*_enable_flood() functions.

Clean up both functions for RTL838x and RTL839x, and fix the comment on
the number of entries.

Signed-off-by: INAGAKI Hiroshi <musashino.open@gmail.com>
[squash RTL838x, RTL839x changes]
Signed-off-by: Sander Vanheule <sander@svanheule.net>
target/linux/realtek/files-5.10/drivers/net/dsa/rtl83xx/rtl838x.c
target/linux/realtek/files-5.10/drivers/net/dsa/rtl83xx/rtl839x.c

index 76b6cde7be8c0eaa3e4851f201568ed4b3438b6c..93fab7e6e30f74bc2823a8e41ef0fd1bea0b488d 100644 (file)
@@ -515,32 +515,22 @@ static void rtl838x_l2_learning_setup(void)
 
 static void rtl838x_enable_learning(int port, bool enable)
 {
-       // Limit learning to maximum: 32k entries, after that just flood (bits 0-1)
+       // Limit learning to maximum: 16k entries
 
-       if (enable)  {
-               // flood after 32k entries
-               sw_w32((0x3fff << 2) | 0, RTL838X_L2_PORT_LRN_CONSTRT + (port << 2));
-       } else {
-               // just forward
-               sw_w32(0, RTL838X_L2_PORT_LRN_CONSTRT + (port << 2));
-       }
+       sw_w32_mask(0x3fff << 2, enable ? (0x3fff << 2) : 0,
+                   RTL838X_L2_PORT_LRN_CONSTRT + (port << 2));
 }
 
 static void rtl838x_enable_flood(int port, bool enable)
 {
-       u32 flood_mask = sw_r32(RTL838X_L2_PORT_LRN_CONSTRT + (port << 2));
-
-       if (enable)  {
-               // flood
-               flood_mask &= ~3;
-               flood_mask |= 0;
-               sw_w32(flood_mask, RTL838X_L2_PORT_LRN_CONSTRT + (port << 2));
-       } else {
-               // drop (bit 1)
-               flood_mask &= ~3;
-               flood_mask |= 1;
-               sw_w32(flood_mask, RTL838X_L2_PORT_LRN_CONSTRT + (port << 2));
-       }
+       /*
+        * 0: Forward
+        * 1: Disable
+        * 2: to CPU
+        * 3: Copy to CPU
+        */
+       sw_w32_mask(0x3, enable ? 0 : 1,
+                   RTL838X_L2_PORT_LRN_CONSTRT + (port << 2));
 }
 
 static void rtl838x_enable_mcast_flood(int port, bool enable)
index 7b838cb76b02ac1da5e9bc00242a985a68ca92a8..199ba347da38026f1220c59e697a440fd1f45d06 100644 (file)
@@ -560,34 +560,22 @@ static void rtl839x_l2_learning_setup(void)
 
 static void rtl839x_enable_learning(int port, bool enable)
 {
-       // Limit learning to maximum: 32k entries, after that just flood (bits 0-1)
-
-       if (enable) {
-               // flood after 32k entries
-               sw_w32((0x7fff << 2) | 0, RTL839X_L2_PORT_LRN_CONSTRT + (port << 2));
-       } else {
-               // just forward
-               sw_w32(0, RTL839X_L2_PORT_LRN_CONSTRT + (port << 2));
-       }
+       // Limit learning to maximum: 32k entries
 
+       sw_w32_mask(0x7fff << 2, enable ? (0x7fff << 2) : 0,
+                   RTL839X_L2_PORT_LRN_CONSTRT + (port << 2));
 }
 
 static void rtl839x_enable_flood(int port, bool enable)
 {
-       u32 flood_mask = sw_r32(RTL839X_L2_PORT_LRN_CONSTRT + (port << 2));
-
-       if (enable)  {
-               // flood
-               flood_mask &= ~3;
-               flood_mask |= 0;
-               sw_w32(flood_mask, RTL839X_L2_PORT_LRN_CONSTRT + (port << 2));
-       } else {
-               // drop (bit 1)
-               flood_mask &= ~3;
-               flood_mask |= 1;
-               sw_w32(flood_mask, RTL839X_L2_PORT_LRN_CONSTRT + (port << 2));
-       }
-
+       /*
+        * 0: Forward
+        * 1: Disable
+        * 2: to CPU
+        * 3: Copy to CPU
+        */
+       sw_w32_mask(0x3, enable ? 0 : 1,
+                   RTL839X_L2_PORT_LRN_CONSTRT + (port << 2));
 }
 
 static void rtl839x_enable_mcast_flood(int port, bool enable)