aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVivien Didelot <vivien.didelot@savoirfairelinux.com>2017-05-01 14:05:15 -0400
committerDavid S. Miller <davem@davemloft.net>2017-05-01 15:03:10 -0400
commitd2ca1ea18db6a90475b983e65e8435632fe3d57e (patch)
tree8092737dadf5678bc369a263cd6c7299b407a6c7
parent8ee51f6b4f0819fd3d6a4143222be796779cf501 (diff)
net: dsa: mv88e6xxx: move VTU SID accessors
Add helpers to access the VTU SID register in the global1_vtu.c file. Signed-off-by: Vivien Didelot <vivien.didelot@savoirfairelinux.com> Reviewed-by: Andrew Lunn <andrew@lunn.ch> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/dsa/mv88e6xxx/chip.c21
-rw-r--r--drivers/net/dsa/mv88e6xxx/global1.h4
-rw-r--r--drivers/net/dsa/mv88e6xxx/global1_vtu.c25
3 files changed, 37 insertions, 13 deletions
diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
index 0452543a2463..ec621879439d 100644
--- a/drivers/net/dsa/mv88e6xxx/chip.c
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
@@ -1387,11 +1387,9 @@ static int _mv88e6xxx_vtu_getnext(struct mv88e6xxx_chip *chip,
1387 } 1387 }
1388 1388
1389 if (mv88e6xxx_has(chip, MV88E6XXX_FLAG_STU)) { 1389 if (mv88e6xxx_has(chip, MV88E6XXX_FLAG_STU)) {
1390 err = mv88e6xxx_g1_read(chip, GLOBAL_VTU_SID, &val); 1390 err = mv88e6xxx_g1_vtu_sid_read(chip, &next);
1391 if (err) 1391 if (err)
1392 return err; 1392 return err;
1393
1394 next.sid = val & GLOBAL_VTU_SID_MASK;
1395 } 1393 }
1396 } 1394 }
1397 1395
@@ -1482,8 +1480,7 @@ static int _mv88e6xxx_vtu_loadpurge(struct mv88e6xxx_chip *chip,
1482 return err; 1480 return err;
1483 1481
1484 if (mv88e6xxx_has(chip, MV88E6XXX_FLAG_STU)) { 1482 if (mv88e6xxx_has(chip, MV88E6XXX_FLAG_STU)) {
1485 reg = entry->sid & GLOBAL_VTU_SID_MASK; 1483 err = mv88e6xxx_g1_vtu_sid_write(chip, entry);
1486 err = mv88e6xxx_g1_write(chip, GLOBAL_VTU_SID, reg);
1487 if (err) 1484 if (err)
1488 return err; 1485 return err;
1489 } 1486 }
@@ -1513,7 +1510,9 @@ loadpurge:
1513static int _mv88e6xxx_stu_getnext(struct mv88e6xxx_chip *chip, u8 sid, 1510static int _mv88e6xxx_stu_getnext(struct mv88e6xxx_chip *chip, u8 sid,
1514 struct mv88e6xxx_vtu_entry *entry) 1511 struct mv88e6xxx_vtu_entry *entry)
1515{ 1512{
1516 struct mv88e6xxx_vtu_entry next = { 0 }; 1513 struct mv88e6xxx_vtu_entry next = {
1514 .sid = sid,
1515 };
1517 u16 val; 1516 u16 val;
1518 int err; 1517 int err;
1519 1518
@@ -1521,8 +1520,7 @@ static int _mv88e6xxx_stu_getnext(struct mv88e6xxx_chip *chip, u8 sid,
1521 if (err) 1520 if (err)
1522 return err; 1521 return err;
1523 1522
1524 err = mv88e6xxx_g1_write(chip, GLOBAL_VTU_SID, 1523 err = mv88e6xxx_g1_vtu_sid_write(chip, &next);
1525 sid & GLOBAL_VTU_SID_MASK);
1526 if (err) 1524 if (err)
1527 return err; 1525 return err;
1528 1526
@@ -1530,12 +1528,10 @@ static int _mv88e6xxx_stu_getnext(struct mv88e6xxx_chip *chip, u8 sid,
1530 if (err) 1528 if (err)
1531 return err; 1529 return err;
1532 1530
1533 err = mv88e6xxx_g1_read(chip, GLOBAL_VTU_SID, &val); 1531 err = mv88e6xxx_g1_vtu_sid_read(chip, &next);
1534 if (err) 1532 if (err)
1535 return err; 1533 return err;
1536 1534
1537 next.sid = val & GLOBAL_VTU_SID_MASK;
1538
1539 err = mv88e6xxx_g1_read(chip, GLOBAL_VTU_VID, &val); 1535 err = mv88e6xxx_g1_read(chip, GLOBAL_VTU_VID, &val);
1540 if (err) 1536 if (err)
1541 return err; 1537 return err;
@@ -1576,8 +1572,7 @@ loadpurge:
1576 if (err) 1572 if (err)
1577 return err; 1573 return err;
1578 1574
1579 reg = entry->sid & GLOBAL_VTU_SID_MASK; 1575 err = mv88e6xxx_g1_vtu_sid_write(chip, entry);
1580 err = mv88e6xxx_g1_write(chip, GLOBAL_VTU_SID, reg);
1581 if (err) 1576 if (err)
1582 return err; 1577 return err;
1583 1578
diff --git a/drivers/net/dsa/mv88e6xxx/global1.h b/drivers/net/dsa/mv88e6xxx/global1.h
index 353de283362f..1bf235085215 100644
--- a/drivers/net/dsa/mv88e6xxx/global1.h
+++ b/drivers/net/dsa/mv88e6xxx/global1.h
@@ -54,6 +54,10 @@ int mv88e6xxx_g1_vtu_fid_read(struct mv88e6xxx_chip *chip,
54 struct mv88e6xxx_vtu_entry *entry); 54 struct mv88e6xxx_vtu_entry *entry);
55int mv88e6xxx_g1_vtu_fid_write(struct mv88e6xxx_chip *chip, 55int mv88e6xxx_g1_vtu_fid_write(struct mv88e6xxx_chip *chip,
56 struct mv88e6xxx_vtu_entry *entry); 56 struct mv88e6xxx_vtu_entry *entry);
57int mv88e6xxx_g1_vtu_sid_read(struct mv88e6xxx_chip *chip,
58 struct mv88e6xxx_vtu_entry *entry);
59int mv88e6xxx_g1_vtu_sid_write(struct mv88e6xxx_chip *chip,
60 struct mv88e6xxx_vtu_entry *entry);
57int mv88e6xxx_g1_vtu_op_wait(struct mv88e6xxx_chip *chip); 61int mv88e6xxx_g1_vtu_op_wait(struct mv88e6xxx_chip *chip);
58int mv88e6xxx_g1_vtu_op(struct mv88e6xxx_chip *chip, u16 op); 62int mv88e6xxx_g1_vtu_op(struct mv88e6xxx_chip *chip, u16 op);
59int mv88e6xxx_g1_vtu_flush(struct mv88e6xxx_chip *chip); 63int mv88e6xxx_g1_vtu_flush(struct mv88e6xxx_chip *chip);
diff --git a/drivers/net/dsa/mv88e6xxx/global1_vtu.c b/drivers/net/dsa/mv88e6xxx/global1_vtu.c
index 81d6f9f3c84a..201c063d15f2 100644
--- a/drivers/net/dsa/mv88e6xxx/global1_vtu.c
+++ b/drivers/net/dsa/mv88e6xxx/global1_vtu.c
@@ -39,6 +39,31 @@ int mv88e6xxx_g1_vtu_fid_write(struct mv88e6xxx_chip *chip,
39 return mv88e6xxx_g1_write(chip, GLOBAL_VTU_FID, val); 39 return mv88e6xxx_g1_write(chip, GLOBAL_VTU_FID, val);
40} 40}
41 41
42/* Offset 0x03: VTU SID Register */
43
44int mv88e6xxx_g1_vtu_sid_read(struct mv88e6xxx_chip *chip,
45 struct mv88e6xxx_vtu_entry *entry)
46{
47 u16 val;
48 int err;
49
50 err = mv88e6xxx_g1_read(chip, GLOBAL_VTU_SID, &val);
51 if (err)
52 return err;
53
54 entry->sid = val & GLOBAL_VTU_SID_MASK;
55
56 return 0;
57}
58
59int mv88e6xxx_g1_vtu_sid_write(struct mv88e6xxx_chip *chip,
60 struct mv88e6xxx_vtu_entry *entry)
61{
62 u16 val = entry->sid & GLOBAL_VTU_SID_MASK;
63
64 return mv88e6xxx_g1_write(chip, GLOBAL_VTU_SID, val);
65}
66
42/* Offset 0x05: VTU Operation Register */ 67/* Offset 0x05: VTU Operation Register */
43 68
44int mv88e6xxx_g1_vtu_op_wait(struct mv88e6xxx_chip *chip) 69int mv88e6xxx_g1_vtu_op_wait(struct mv88e6xxx_chip *chip)