port.c (448cc2fb3a7b327823a9afd374808c37b8e6194f) port.c (21bd64bd717dedac96f53b668144cbe37d3c12d4)
1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * Handling of a single switch port
4 *
5 * Copyright (c) 2017 Savoir-faire Linux Inc.
6 * Vivien Didelot <vivien.didelot@savoirfairelinux.com>
7 */
8

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

1067 ds->ops->adjust_link(ds, dp->index, phydev);
1068 return;
1069 }
1070
1071 ds->ops->phylink_mac_link_up(ds, dp->index, mode, interface, phydev,
1072 speed, duplex, tx_pause, rx_pause);
1073}
1074
1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * Handling of a single switch port
4 *
5 * Copyright (c) 2017 Savoir-faire Linux Inc.
6 * Vivien Didelot <vivien.didelot@savoirfairelinux.com>
7 */
8

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

1067 ds->ops->adjust_link(ds, dp->index, phydev);
1068 return;
1069 }
1070
1071 ds->ops->phylink_mac_link_up(ds, dp->index, mode, interface, phydev,
1072 speed, duplex, tx_pause, rx_pause);
1073}
1074
1075const struct phylink_mac_ops dsa_port_phylink_mac_ops = {
1075static const struct phylink_mac_ops dsa_port_phylink_mac_ops = {
1076 .validate = dsa_port_phylink_validate,
1077 .mac_pcs_get_state = dsa_port_phylink_mac_pcs_get_state,
1078 .mac_config = dsa_port_phylink_mac_config,
1079 .mac_an_restart = dsa_port_phylink_mac_an_restart,
1080 .mac_link_down = dsa_port_phylink_mac_link_down,
1081 .mac_link_up = dsa_port_phylink_mac_link_up,
1082};
1083
1076 .validate = dsa_port_phylink_validate,
1077 .mac_pcs_get_state = dsa_port_phylink_mac_pcs_get_state,
1078 .mac_config = dsa_port_phylink_mac_config,
1079 .mac_an_restart = dsa_port_phylink_mac_an_restart,
1080 .mac_link_down = dsa_port_phylink_mac_link_down,
1081 .mac_link_up = dsa_port_phylink_mac_link_up,
1082};
1083
1084int dsa_port_phylink_create(struct dsa_port *dp)
1085{
1086 struct dsa_switch *ds = dp->ds;
1087 phy_interface_t mode;
1088 int err;
1089
1090 err = of_get_phy_mode(dp->dn, &mode);
1091 if (err)
1092 mode = PHY_INTERFACE_MODE_NA;
1093
1094 if (ds->ops->phylink_get_interfaces)
1095 ds->ops->phylink_get_interfaces(ds, dp->index,
1096 dp->pl_config.supported_interfaces);
1097
1098 dp->pl = phylink_create(&dp->pl_config, of_fwnode_handle(dp->dn),
1099 mode, &dsa_port_phylink_mac_ops);
1100 if (IS_ERR(dp->pl)) {
1101 pr_err("error creating PHYLINK: %ld\n", PTR_ERR(dp->pl));
1102 return PTR_ERR(dp->pl);
1103 }
1104
1105 return 0;
1106}
1107
1084static int dsa_port_setup_phy_of(struct dsa_port *dp, bool enable)
1085{
1086 struct dsa_switch *ds = dp->ds;
1087 struct phy_device *phydev;
1088 int port = dp->index;
1089 int err = 0;
1090
1091 phydev = dsa_port_get_phy_device(dp);

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

1152
1153 return 0;
1154}
1155
1156static int dsa_port_phylink_register(struct dsa_port *dp)
1157{
1158 struct dsa_switch *ds = dp->ds;
1159 struct device_node *port_dn = dp->dn;
1108static int dsa_port_setup_phy_of(struct dsa_port *dp, bool enable)
1109{
1110 struct dsa_switch *ds = dp->ds;
1111 struct phy_device *phydev;
1112 int port = dp->index;
1113 int err = 0;
1114
1115 phydev = dsa_port_get_phy_device(dp);

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

1176
1177 return 0;
1178}
1179
1180static int dsa_port_phylink_register(struct dsa_port *dp)
1181{
1182 struct dsa_switch *ds = dp->ds;
1183 struct device_node *port_dn = dp->dn;
1160 phy_interface_t mode;
1161 int err;
1162
1184 int err;
1185
1163 err = of_get_phy_mode(port_dn, &mode);
1164 if (err)
1165 mode = PHY_INTERFACE_MODE_NA;
1166
1167 dp->pl_config.dev = ds->dev;
1168 dp->pl_config.type = PHYLINK_DEV;
1169 dp->pl_config.pcs_poll = ds->pcs_poll;
1170
1186 dp->pl_config.dev = ds->dev;
1187 dp->pl_config.type = PHYLINK_DEV;
1188 dp->pl_config.pcs_poll = ds->pcs_poll;
1189
1171 if (ds->ops->phylink_get_interfaces)
1172 ds->ops->phylink_get_interfaces(ds, dp->index,
1173 dp->pl_config.supported_interfaces);
1190 err = dsa_port_phylink_create(dp);
1191 if (err)
1192 return err;
1174
1193
1175 dp->pl = phylink_create(&dp->pl_config, of_fwnode_handle(port_dn),
1176 mode, &dsa_port_phylink_mac_ops);
1177 if (IS_ERR(dp->pl)) {
1178 pr_err("error creating PHYLINK: %ld\n", PTR_ERR(dp->pl));
1179 return PTR_ERR(dp->pl);
1180 }
1181
1182 err = phylink_of_phy_connect(dp->pl, port_dn, 0);
1183 if (err && err != -ENODEV) {
1184 pr_err("could not attach to PHY: %d\n", err);
1185 goto err_phy_connect;
1186 }
1187
1188 return 0;
1189

--- 177 unchanged lines hidden ---
1194 err = phylink_of_phy_connect(dp->pl, port_dn, 0);
1195 if (err && err != -ENODEV) {
1196 pr_err("could not attach to PHY: %d\n", err);
1197 goto err_phy_connect;
1198 }
1199
1200 return 0;
1201

--- 177 unchanged lines hidden ---