chip.c (61065fc3e32002ba48aa6bc3816c1f6f9f8daf55) chip.c (f8b8b1cd5aadd221742b45eb0ee3c8a80abf036a)
1/*
2 * Marvell 88e6xxx Ethernet switch single-chip support
3 *
4 * Copyright (c) 2008 Marvell Semiconductor
5 *
6 * Copyright (c) 2016 Andrew Lunn <andrew@lunn.ch>
7 *
8 * Copyright (c) 2016-2017 Savoir-faire Linux Inc.

--- 918 unchanged lines hidden (view full) ---

927 err = chip->info->ops->irl_init_all(chip, port);
928 if (err)
929 return err;
930 }
931
932 return 0;
933}
934
1/*
2 * Marvell 88e6xxx Ethernet switch single-chip support
3 *
4 * Copyright (c) 2008 Marvell Semiconductor
5 *
6 * Copyright (c) 2016 Andrew Lunn <andrew@lunn.ch>
7 *
8 * Copyright (c) 2016-2017 Savoir-faire Linux Inc.

--- 918 unchanged lines hidden (view full) ---

927 err = chip->info->ops->irl_init_all(chip, port);
928 if (err)
929 return err;
930 }
931
932 return 0;
933}
934
935static int mv88e6xxx_mac_setup(struct mv88e6xxx_chip *chip)
936{
937 if (chip->info->ops->set_switch_mac) {
938 u8 addr[ETH_ALEN];
939
940 eth_random_addr(addr);
941
942 return chip->info->ops->set_switch_mac(chip, addr);
943 }
944
945 return 0;
946}
947
935static int mv88e6xxx_pvt_map(struct mv88e6xxx_chip *chip, int dev, int port)
936{
937 u16 pvlan = 0;
938
939 if (!mv88e6xxx_has_pvt(chip))
940 return -EOPNOTSUPP;
941
942 /* Skip the local source device, which uses in-chip port VLAN */

--- 176 unchanged lines hidden (view full) ---

1119
1120 if (vlan.vid > vid_end)
1121 break;
1122
1123 for (i = 0; i < mv88e6xxx_num_ports(chip); ++i) {
1124 if (dsa_is_dsa_port(ds, i) || dsa_is_cpu_port(ds, i))
1125 continue;
1126
948static int mv88e6xxx_pvt_map(struct mv88e6xxx_chip *chip, int dev, int port)
949{
950 u16 pvlan = 0;
951
952 if (!mv88e6xxx_has_pvt(chip))
953 return -EOPNOTSUPP;
954
955 /* Skip the local source device, which uses in-chip port VLAN */

--- 176 unchanged lines hidden (view full) ---

1132
1133 if (vlan.vid > vid_end)
1134 break;
1135
1136 for (i = 0; i < mv88e6xxx_num_ports(chip); ++i) {
1137 if (dsa_is_dsa_port(ds, i) || dsa_is_cpu_port(ds, i))
1138 continue;
1139
1127 if (!ds->ports[port].netdev)
1140 if (!ds->ports[port].slave)
1128 continue;
1129
1130 if (vlan.member[i] ==
1131 MV88E6XXX_G1_VTU_DATA_MEMBER_TAG_NON_MEMBER)
1132 continue;
1133
1134 if (ds->ports[i].bridge_dev ==
1135 ds->ports[port].bridge_dev)

--- 872 unchanged lines hidden (view full) ---

2008 if (err)
2009 goto unlock;
2010 }
2011
2012 err = mv88e6xxx_irl_setup(chip);
2013 if (err)
2014 goto unlock;
2015
1141 continue;
1142
1143 if (vlan.member[i] ==
1144 MV88E6XXX_G1_VTU_DATA_MEMBER_TAG_NON_MEMBER)
1145 continue;
1146
1147 if (ds->ports[i].bridge_dev ==
1148 ds->ports[port].bridge_dev)

--- 872 unchanged lines hidden (view full) ---

2021 if (err)
2022 goto unlock;
2023 }
2024
2025 err = mv88e6xxx_irl_setup(chip);
2026 if (err)
2027 goto unlock;
2028
2029 err = mv88e6xxx_mac_setup(chip);
2030 if (err)
2031 goto unlock;
2032
2016 err = mv88e6xxx_phy_setup(chip);
2017 if (err)
2018 goto unlock;
2019
2020 err = mv88e6xxx_vtu_setup(chip);
2021 if (err)
2022 goto unlock;
2023

--- 14 unchanged lines hidden (view full) ---

2038 goto unlock;
2039
2040unlock:
2041 mutex_unlock(&chip->reg_lock);
2042
2043 return err;
2044}
2045
2033 err = mv88e6xxx_phy_setup(chip);
2034 if (err)
2035 goto unlock;
2036
2037 err = mv88e6xxx_vtu_setup(chip);
2038 if (err)
2039 goto unlock;
2040

--- 14 unchanged lines hidden (view full) ---

2055 goto unlock;
2056
2057unlock:
2058 mutex_unlock(&chip->reg_lock);
2059
2060 return err;
2061}
2062
2046static int mv88e6xxx_set_addr(struct dsa_switch *ds, u8 *addr)
2047{
2048 struct mv88e6xxx_chip *chip = ds->priv;
2049 int err;
2050
2051 if (!chip->info->ops->set_switch_mac)
2052 return -EOPNOTSUPP;
2053
2054 mutex_lock(&chip->reg_lock);
2055 err = chip->info->ops->set_switch_mac(chip, addr);
2056 mutex_unlock(&chip->reg_lock);
2057
2058 return err;
2059}
2060
2061static int mv88e6xxx_mdio_read(struct mii_bus *bus, int phy, int reg)
2062{
2063 struct mv88e6xxx_mdio_bus *mdio_bus = bus->priv;
2064 struct mv88e6xxx_chip *chip = mdio_bus->chip;
2065 u16 val;
2066 int err;
2067
2068 if (!chip->info->ops->phy_read)

--- 1711 unchanged lines hidden (view full) ---

3780
3781 return err;
3782}
3783
3784static const struct dsa_switch_ops mv88e6xxx_switch_ops = {
3785 .probe = mv88e6xxx_drv_probe,
3786 .get_tag_protocol = mv88e6xxx_get_tag_protocol,
3787 .setup = mv88e6xxx_setup,
2063static int mv88e6xxx_mdio_read(struct mii_bus *bus, int phy, int reg)
2064{
2065 struct mv88e6xxx_mdio_bus *mdio_bus = bus->priv;
2066 struct mv88e6xxx_chip *chip = mdio_bus->chip;
2067 u16 val;
2068 int err;
2069
2070 if (!chip->info->ops->phy_read)

--- 1711 unchanged lines hidden (view full) ---

3782
3783 return err;
3784}
3785
3786static const struct dsa_switch_ops mv88e6xxx_switch_ops = {
3787 .probe = mv88e6xxx_drv_probe,
3788 .get_tag_protocol = mv88e6xxx_get_tag_protocol,
3789 .setup = mv88e6xxx_setup,
3788 .set_addr = mv88e6xxx_set_addr,
3789 .adjust_link = mv88e6xxx_adjust_link,
3790 .get_strings = mv88e6xxx_get_strings,
3791 .get_ethtool_stats = mv88e6xxx_get_ethtool_stats,
3792 .get_sset_count = mv88e6xxx_get_sset_count,
3793 .port_enable = mv88e6xxx_port_enable,
3794 .port_disable = mv88e6xxx_port_disable,
3795 .get_mac_eee = mv88e6xxx_get_mac_eee,
3796 .set_mac_eee = mv88e6xxx_set_mac_eee,

--- 203 unchanged lines hidden ---
3790 .adjust_link = mv88e6xxx_adjust_link,
3791 .get_strings = mv88e6xxx_get_strings,
3792 .get_ethtool_stats = mv88e6xxx_get_ethtool_stats,
3793 .get_sset_count = mv88e6xxx_get_sset_count,
3794 .port_enable = mv88e6xxx_port_enable,
3795 .port_disable = mv88e6xxx_port_disable,
3796 .get_mac_eee = mv88e6xxx_get_mac_eee,
3797 .set_mac_eee = mv88e6xxx_set_mac_eee,

--- 203 unchanged lines hidden ---