diff options
author | Vivien Didelot <vivien.didelot@savoirfairelinux.com> | 2017-12-05 15:34:10 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-12-05 18:01:33 -0500 |
commit | fa371c803c4fafbf088381aa1235ccde7dfa09dd (patch) | |
tree | 8a06a0dbbc49618409a4e491b8ba08593347c922 | |
parent | 3ee50cbf3a8e0846a12b3fdf8aa9397668981c16 (diff) |
net: dsa: mv88e6xxx: helper to setup upstream port
Add a helper function to setup the upstream port of a given port.
This is the port used to reach the dedicated CPU port. This function
will be extended later to setup the global upstream port as well.
Signed-off-by: Vivien Didelot <vivien.didelot@savoirfairelinux.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/dsa/mv88e6xxx/chip.c | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c index 4b9ac962fd49..77488b40cceb 100644 --- a/drivers/net/dsa/mv88e6xxx/chip.c +++ b/drivers/net/dsa/mv88e6xxx/chip.c | |||
@@ -1744,6 +1744,23 @@ static int mv88e6xxx_serdes_power(struct mv88e6xxx_chip *chip, int port, | |||
1744 | return 0; | 1744 | return 0; |
1745 | } | 1745 | } |
1746 | 1746 | ||
1747 | static int mv88e6xxx_setup_upstream_port(struct mv88e6xxx_chip *chip, int port) | ||
1748 | { | ||
1749 | struct dsa_switch *ds = chip->ds; | ||
1750 | int upstream_port; | ||
1751 | int err; | ||
1752 | |||
1753 | upstream_port = dsa_upstream_port(ds); | ||
1754 | if (chip->info->ops->port_set_upstream_port) { | ||
1755 | err = chip->info->ops->port_set_upstream_port(chip, port, | ||
1756 | upstream_port); | ||
1757 | if (err) | ||
1758 | return err; | ||
1759 | } | ||
1760 | |||
1761 | return 0; | ||
1762 | } | ||
1763 | |||
1747 | static int mv88e6xxx_setup_port(struct mv88e6xxx_chip *chip, int port) | 1764 | static int mv88e6xxx_setup_port(struct mv88e6xxx_chip *chip, int port) |
1748 | { | 1765 | { |
1749 | struct dsa_switch *ds = chip->ds; | 1766 | struct dsa_switch *ds = chip->ds; |
@@ -1814,13 +1831,9 @@ static int mv88e6xxx_setup_port(struct mv88e6xxx_chip *chip, int port) | |||
1814 | if (err) | 1831 | if (err) |
1815 | return err; | 1832 | return err; |
1816 | 1833 | ||
1817 | reg = 0; | 1834 | err = mv88e6xxx_setup_upstream_port(chip, port); |
1818 | if (chip->info->ops->port_set_upstream_port) { | 1835 | if (err) |
1819 | err = chip->info->ops->port_set_upstream_port( | 1836 | return err; |
1820 | chip, port, dsa_upstream_port(ds)); | ||
1821 | if (err) | ||
1822 | return err; | ||
1823 | } | ||
1824 | 1837 | ||
1825 | err = mv88e6xxx_port_set_8021q_mode(chip, port, | 1838 | err = mv88e6xxx_port_set_8021q_mode(chip, port, |
1826 | MV88E6XXX_PORT_CTL2_8021Q_MODE_DISABLED); | 1839 | MV88E6XXX_PORT_CTL2_8021Q_MODE_DISABLED); |