diff options
author | Vivien Didelot <vivien.didelot@savoirfairelinux.com> | 2017-05-01 14:05:15 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-05-01 15:03:10 -0400 |
commit | d2ca1ea18db6a90475b983e65e8435632fe3d57e (patch) | |
tree | 8092737dadf5678bc369a263cd6c7299b407a6c7 | |
parent | 8ee51f6b4f0819fd3d6a4143222be796779cf501 (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.c | 21 | ||||
-rw-r--r-- | drivers/net/dsa/mv88e6xxx/global1.h | 4 | ||||
-rw-r--r-- | drivers/net/dsa/mv88e6xxx/global1_vtu.c | 25 |
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: | |||
1513 | static int _mv88e6xxx_stu_getnext(struct mv88e6xxx_chip *chip, u8 sid, | 1510 | static 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); |
55 | int mv88e6xxx_g1_vtu_fid_write(struct mv88e6xxx_chip *chip, | 55 | int mv88e6xxx_g1_vtu_fid_write(struct mv88e6xxx_chip *chip, |
56 | struct mv88e6xxx_vtu_entry *entry); | 56 | struct mv88e6xxx_vtu_entry *entry); |
57 | int mv88e6xxx_g1_vtu_sid_read(struct mv88e6xxx_chip *chip, | ||
58 | struct mv88e6xxx_vtu_entry *entry); | ||
59 | int mv88e6xxx_g1_vtu_sid_write(struct mv88e6xxx_chip *chip, | ||
60 | struct mv88e6xxx_vtu_entry *entry); | ||
57 | int mv88e6xxx_g1_vtu_op_wait(struct mv88e6xxx_chip *chip); | 61 | int mv88e6xxx_g1_vtu_op_wait(struct mv88e6xxx_chip *chip); |
58 | int mv88e6xxx_g1_vtu_op(struct mv88e6xxx_chip *chip, u16 op); | 62 | int mv88e6xxx_g1_vtu_op(struct mv88e6xxx_chip *chip, u16 op); |
59 | int mv88e6xxx_g1_vtu_flush(struct mv88e6xxx_chip *chip); | 63 | int 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 | |||
44 | int 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 | |||
59 | int 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 | ||
44 | int mv88e6xxx_g1_vtu_op_wait(struct mv88e6xxx_chip *chip) | 69 | int mv88e6xxx_g1_vtu_op_wait(struct mv88e6xxx_chip *chip) |