@@ -950,20 +950,56 @@ static void mt7530_setup_port5(struct dsa_switch *ds, phy_interface_t interface)
950
950
mutex_unlock (& priv -> reg_mutex );
951
951
}
952
952
953
+ /* On page 205, section "8.6.3 Frame filtering" of the active standard, IEEE Std
954
+ * 802.1Q™-2022, it is stated that frames with 01:80:C2:00:00:00-0F as MAC DA
955
+ * must only be propagated to C-VLAN and MAC Bridge components. That means
956
+ * VLAN-aware and VLAN-unaware bridges. On the switch designs with CPU ports,
957
+ * these frames are supposed to be processed by the CPU (software). So we make
958
+ * the switch only forward them to the CPU port. And if received from a CPU
959
+ * port, forward to a single port. The software is responsible of making the
960
+ * switch conform to the latter by setting a single port as destination port on
961
+ * the special tag.
962
+ *
963
+ * This switch intellectual property cannot conform to this part of the standard
964
+ * fully. Whilst the REV_UN frame tag covers the remaining :04-0D and :0F MAC
965
+ * DAs, it also includes :22-FF which the scope of propagation is not supposed
966
+ * to be restricted for these MAC DAs.
967
+ */
953
968
static void
954
969
mt753x_trap_frames (struct mt7530_priv * priv )
955
970
{
956
- /* Trap BPDUs to the CPU port(s) */
957
- mt7530_rmw (priv , MT753X_BPC , MT753X_BPDU_PORT_FW_MASK ,
971
+ /* Trap 802.1X PAE frames and BPDUs to the CPU port(s) and egress them
972
+ * VLAN-untagged.
973
+ */
974
+ mt7530_rmw (priv , MT753X_BPC , MT753X_PAE_EG_TAG_MASK |
975
+ MT753X_PAE_PORT_FW_MASK | MT753X_BPDU_EG_TAG_MASK |
976
+ MT753X_BPDU_PORT_FW_MASK ,
977
+ MT753X_PAE_EG_TAG (MT7530_VLAN_EG_UNTAGGED ) |
978
+ MT753X_PAE_PORT_FW (MT753X_BPDU_CPU_ONLY ) |
979
+ MT753X_BPDU_EG_TAG (MT7530_VLAN_EG_UNTAGGED ) |
958
980
MT753X_BPDU_CPU_ONLY );
959
981
960
- /* Trap 802.1X PAE frames to the CPU port(s) */
961
- mt7530_rmw (priv , MT753X_BPC , MT753X_PAE_PORT_FW_MASK ,
962
- MT753X_PAE_PORT_FW (MT753X_BPDU_CPU_ONLY ));
982
+ /* Trap frames with :01 and :02 MAC DAs to the CPU port(s) and egress
983
+ * them VLAN-untagged.
984
+ */
985
+ mt7530_rmw (priv , MT753X_RGAC1 , MT753X_R02_EG_TAG_MASK |
986
+ MT753X_R02_PORT_FW_MASK | MT753X_R01_EG_TAG_MASK |
987
+ MT753X_R01_PORT_FW_MASK ,
988
+ MT753X_R02_EG_TAG (MT7530_VLAN_EG_UNTAGGED ) |
989
+ MT753X_R02_PORT_FW (MT753X_BPDU_CPU_ONLY ) |
990
+ MT753X_R01_EG_TAG (MT7530_VLAN_EG_UNTAGGED ) |
991
+ MT753X_BPDU_CPU_ONLY );
963
992
964
- /* Trap LLDP frames with :0E MAC DA to the CPU port(s) */
965
- mt7530_rmw (priv , MT753X_RGAC2 , MT753X_R0E_PORT_FW_MASK ,
966
- MT753X_R0E_PORT_FW (MT753X_BPDU_CPU_ONLY ));
993
+ /* Trap frames with :03 and :0E MAC DAs to the CPU port(s) and egress
994
+ * them VLAN-untagged.
995
+ */
996
+ mt7530_rmw (priv , MT753X_RGAC2 , MT753X_R0E_EG_TAG_MASK |
997
+ MT753X_R0E_PORT_FW_MASK | MT753X_R03_EG_TAG_MASK |
998
+ MT753X_R03_PORT_FW_MASK ,
999
+ MT753X_R0E_EG_TAG (MT7530_VLAN_EG_UNTAGGED ) |
1000
+ MT753X_R0E_PORT_FW (MT753X_BPDU_CPU_ONLY ) |
1001
+ MT753X_R03_EG_TAG (MT7530_VLAN_EG_UNTAGGED ) |
1002
+ MT753X_BPDU_CPU_ONLY );
967
1003
}
968
1004
969
1005
static void
0 commit comments