kernel: b53: fix untagged shift for BCM5365
authorHauke Mehrtens <hauke@hauke-m.de>
Wed, 13 Nov 2013 18:04:39 +0000 (18:04 +0000)
committerHauke Mehrtens <hauke@hauke-m.de>
Wed, 13 Nov 2013 18:04:39 +0000 (18:04 +0000)
The BCM5365 needs a shift of 7 bits and not 6 bits like the BCM5325 for
the untagged ports.

Thank you Russell for reporting this and testing the patch.

Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
SVN-Revision: 38793

target/linux/generic/files/drivers/net/phy/b53/b53_common.c
target/linux/generic/files/drivers/net/phy/b53/b53_regs.h

index 39027c1771066e6eb9cdba0f088e84de7eec9885..f5dd068a1b03b72ca8249e3b46b6744690ee79d5 100644 (file)
@@ -189,7 +189,8 @@ static void b53_set_vlan_entry(struct b53_device *dev, u16 vid, u16 members,
                u32 entry = 0;
 
                if (members) {
-                       entry = (untag << VA_UNTAG_S) | members;
+                       entry = ((untag & VA_UNTAG_MASK_25) << VA_UNTAG_S_25) |
+                               members;
                        if (dev->core_rev >= 3)
                                entry |= VA_VALID_25_R4 | vid << VA_VID_HIGH_S;
                        else
@@ -203,7 +204,8 @@ static void b53_set_vlan_entry(struct b53_device *dev, u16 vid, u16 members,
                u16 entry = 0;
 
                if (members)
-                       entry = (untag << VA_UNTAG_S) | members | VA_VALID_65;
+                       entry = ((untag & VA_UNTAG_MASK_65) << VA_UNTAG_S_65) |
+                               members | VA_VALID_65;
 
                b53_write16(dev, B53_VLAN_PAGE, B53_VLAN_WRITE_65, entry);
                b53_write16(dev, B53_VLAN_PAGE, B53_VLAN_TABLE_ACCESS_65, vid |
index 7018ff4ebbcda962cbccb29dd24484676970111e..ba509154f61a483f76790c55397518f91fe3dded 100644 (file)
 #define B53_VLAN_WRITE_65              0x0a
 #define B53_VLAN_READ                  0x0c
 #define   VA_MEMBER_MASK               0x3f
-#define   VA_UNTAG_S                   6
-#define   VA_UNTAG_MASK                        (0x3f << VA_UNTAG_S)
+#define   VA_UNTAG_S_25                        6
+#define   VA_UNTAG_MASK_25             0x3f
+#define   VA_UNTAG_S_65                        7
+#define   VA_UNTAG_MASK_65             0x1f
 #define   VA_VID_HIGH_S                        12
 #define   VA_VID_HIGH_MASK             (0xffff << VA_VID_HIGH_S)
 #define   VA_VALID_25                  BIT(20)