aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/dsa/mv88e6xxx/global1_vtu.c7
-rw-r--r--drivers/net/dsa/mv88e6xxx/mv88e6xxx.h1
2 files changed, 8 insertions, 0 deletions
diff --git a/drivers/net/dsa/mv88e6xxx/global1_vtu.c b/drivers/net/dsa/mv88e6xxx/global1_vtu.c
index 469056d0b421..8e77974fb2f8 100644
--- a/drivers/net/dsa/mv88e6xxx/global1_vtu.c
+++ b/drivers/net/dsa/mv88e6xxx/global1_vtu.c
@@ -95,6 +95,10 @@ static int mv88e6xxx_g1_vtu_vid_read(struct mv88e6xxx_chip *chip,
95 return err; 95 return err;
96 96
97 entry->vid = val & 0xfff; 97 entry->vid = val & 0xfff;
98
99 if (val & GLOBAL_VTU_VID_PAGE)
100 entry->vid |= 0x1000;
101
98 entry->valid = !!(val & GLOBAL_VTU_VID_VALID); 102 entry->valid = !!(val & GLOBAL_VTU_VID_VALID);
99 103
100 return 0; 104 return 0;
@@ -105,6 +109,9 @@ static int mv88e6xxx_g1_vtu_vid_write(struct mv88e6xxx_chip *chip,
105{ 109{
106 u16 val = entry->vid & 0xfff; 110 u16 val = entry->vid & 0xfff;
107 111
112 if (entry->vid & 0x1000)
113 val |= GLOBAL_VTU_VID_PAGE;
114
108 if (entry->valid) 115 if (entry->valid)
109 val |= GLOBAL_VTU_VID_VALID; 116 val |= GLOBAL_VTU_VID_VALID;
110 117
diff --git a/drivers/net/dsa/mv88e6xxx/mv88e6xxx.h b/drivers/net/dsa/mv88e6xxx/mv88e6xxx.h
index a0d57b10acfe..77236cd72df2 100644
--- a/drivers/net/dsa/mv88e6xxx/mv88e6xxx.h
+++ b/drivers/net/dsa/mv88e6xxx/mv88e6xxx.h
@@ -249,6 +249,7 @@
249#define GLOBAL_VTU_OP_STU_GET_NEXT ((0x06 << 12) | GLOBAL_VTU_OP_BUSY) 249#define GLOBAL_VTU_OP_STU_GET_NEXT ((0x06 << 12) | GLOBAL_VTU_OP_BUSY)
250#define GLOBAL_VTU_VID 0x06 250#define GLOBAL_VTU_VID 0x06
251#define GLOBAL_VTU_VID_MASK 0xfff 251#define GLOBAL_VTU_VID_MASK 0xfff
252#define GLOBAL_VTU_VID_PAGE BIT(13)
252#define GLOBAL_VTU_VID_VALID BIT(12) 253#define GLOBAL_VTU_VID_VALID BIT(12)
253#define GLOBAL_VTU_DATA_0_3 0x07 254#define GLOBAL_VTU_DATA_0_3 0x07
254#define GLOBAL_VTU_DATA_4_7 0x08 255#define GLOBAL_VTU_DATA_4_7 0x08