hellcreek.c (ddd56dfe52c987d82964595902db0600970ef406) | hellcreek.c (f0d4ba9eff75a79fccb7793f4d9f12303d458603) |
---|---|
1// SPDX-License-Identifier: (GPL-2.0 or MIT) 2/* 3 * DSA driver for: 4 * Hirschmann Hellcreek TSN switch. 5 * 6 * Copyright (C) 2019,2020 Linutronix GmbH 7 * Author Kurt Kanzenbach <kurt@linutronix.de> 8 */ --- 12 unchanged lines hidden (view full) --- 21#include <linux/random.h> 22#include <linux/iopoll.h> 23#include <linux/mutex.h> 24#include <linux/delay.h> 25#include <net/dsa.h> 26 27#include "hellcreek.h" 28#include "hellcreek_ptp.h" | 1// SPDX-License-Identifier: (GPL-2.0 or MIT) 2/* 3 * DSA driver for: 4 * Hirschmann Hellcreek TSN switch. 5 * 6 * Copyright (C) 2019,2020 Linutronix GmbH 7 * Author Kurt Kanzenbach <kurt@linutronix.de> 8 */ --- 12 unchanged lines hidden (view full) --- 21#include <linux/random.h> 22#include <linux/iopoll.h> 23#include <linux/mutex.h> 24#include <linux/delay.h> 25#include <net/dsa.h> 26 27#include "hellcreek.h" 28#include "hellcreek_ptp.h" |
29#include "hellcreek_hwtstamp.h" |
|
29 30static const struct hellcreek_counter hellcreek_counter[] = { 31 { 0x00, "RxFiltered", }, 32 { 0x01, "RxOctets1k", }, 33 { 0x02, "RxVTAG", }, 34 { 0x03, "RxL2BAD", }, 35 { 0x04, "RxOverloadDrop", }, 36 { 0x05, "RxUC", }, --- 1097 unchanged lines hidden (view full) --- 1134 return ret; 1135} 1136 1137static const struct dsa_switch_ops hellcreek_ds_ops = { 1138 .get_ethtool_stats = hellcreek_get_ethtool_stats, 1139 .get_sset_count = hellcreek_get_sset_count, 1140 .get_strings = hellcreek_get_strings, 1141 .get_tag_protocol = hellcreek_get_tag_protocol, | 30 31static const struct hellcreek_counter hellcreek_counter[] = { 32 { 0x00, "RxFiltered", }, 33 { 0x01, "RxOctets1k", }, 34 { 0x02, "RxVTAG", }, 35 { 0x03, "RxL2BAD", }, 36 { 0x04, "RxOverloadDrop", }, 37 { 0x05, "RxUC", }, --- 1097 unchanged lines hidden (view full) --- 1135 return ret; 1136} 1137 1138static const struct dsa_switch_ops hellcreek_ds_ops = { 1139 .get_ethtool_stats = hellcreek_get_ethtool_stats, 1140 .get_sset_count = hellcreek_get_sset_count, 1141 .get_strings = hellcreek_get_strings, 1142 .get_tag_protocol = hellcreek_get_tag_protocol, |
1143 .get_ts_info = hellcreek_get_ts_info, |
|
1142 .phylink_validate = hellcreek_phylink_validate, 1143 .port_bridge_join = hellcreek_port_bridge_join, 1144 .port_bridge_leave = hellcreek_port_bridge_leave, 1145 .port_disable = hellcreek_port_disable, 1146 .port_enable = hellcreek_port_enable, 1147 .port_fdb_add = hellcreek_fdb_add, 1148 .port_fdb_del = hellcreek_fdb_del, 1149 .port_fdb_dump = hellcreek_fdb_dump, | 1144 .phylink_validate = hellcreek_phylink_validate, 1145 .port_bridge_join = hellcreek_port_bridge_join, 1146 .port_bridge_leave = hellcreek_port_bridge_leave, 1147 .port_disable = hellcreek_port_disable, 1148 .port_enable = hellcreek_port_enable, 1149 .port_fdb_add = hellcreek_fdb_add, 1150 .port_fdb_del = hellcreek_fdb_del, 1151 .port_fdb_dump = hellcreek_fdb_dump, |
1152 .port_hwtstamp_set = hellcreek_port_hwtstamp_set, 1153 .port_hwtstamp_get = hellcreek_port_hwtstamp_get, |
|
1150 .port_prechangeupper = hellcreek_port_prechangeupper, | 1154 .port_prechangeupper = hellcreek_port_prechangeupper, |
1155 .port_rxtstamp = hellcreek_port_rxtstamp, |
|
1151 .port_stp_state_set = hellcreek_port_stp_state_set, | 1156 .port_stp_state_set = hellcreek_port_stp_state_set, |
1157 .port_txtstamp = hellcreek_port_txtstamp, |
|
1152 .port_vlan_add = hellcreek_vlan_add, 1153 .port_vlan_del = hellcreek_vlan_del, 1154 .port_vlan_filtering = hellcreek_vlan_filtering, 1155 .port_vlan_prepare = hellcreek_vlan_prepare, 1156 .setup = hellcreek_setup, 1157}; 1158 1159static int hellcreek_probe(struct platform_device *pdev) --- 105 unchanged lines hidden (view full) --- 1265 } 1266 1267 ret = hellcreek_ptp_setup(hellcreek); 1268 if (ret) { 1269 dev_err(dev, "Failed to setup PTP!\n"); 1270 goto err_ptp_setup; 1271 } 1272 | 1158 .port_vlan_add = hellcreek_vlan_add, 1159 .port_vlan_del = hellcreek_vlan_del, 1160 .port_vlan_filtering = hellcreek_vlan_filtering, 1161 .port_vlan_prepare = hellcreek_vlan_prepare, 1162 .setup = hellcreek_setup, 1163}; 1164 1165static int hellcreek_probe(struct platform_device *pdev) --- 105 unchanged lines hidden (view full) --- 1271 } 1272 1273 ret = hellcreek_ptp_setup(hellcreek); 1274 if (ret) { 1275 dev_err(dev, "Failed to setup PTP!\n"); 1276 goto err_ptp_setup; 1277 } 1278 |
1279 ret = hellcreek_hwtstamp_setup(hellcreek); 1280 if (ret) { 1281 dev_err(dev, "Failed to setup hardware timestamping!\n"); 1282 goto err_tstamp_setup; 1283 } 1284 |
|
1273 platform_set_drvdata(pdev, hellcreek); 1274 1275 return 0; 1276 | 1285 platform_set_drvdata(pdev, hellcreek); 1286 1287 return 0; 1288 |
1289err_tstamp_setup: 1290 hellcreek_ptp_free(hellcreek); |
|
1277err_ptp_setup: 1278 dsa_unregister_switch(hellcreek->ds); 1279 1280 return ret; 1281} 1282 1283static int hellcreek_remove(struct platform_device *pdev) 1284{ 1285 struct hellcreek *hellcreek = platform_get_drvdata(pdev); 1286 | 1291err_ptp_setup: 1292 dsa_unregister_switch(hellcreek->ds); 1293 1294 return ret; 1295} 1296 1297static int hellcreek_remove(struct platform_device *pdev) 1298{ 1299 struct hellcreek *hellcreek = platform_get_drvdata(pdev); 1300 |
1301 hellcreek_hwtstamp_free(hellcreek); |
|
1287 hellcreek_ptp_free(hellcreek); 1288 dsa_unregister_switch(hellcreek->ds); 1289 platform_set_drvdata(pdev, NULL); 1290 1291 return 0; 1292} 1293 1294static const struct hellcreek_platform_data de1soc_r1_pdata = { --- 30 unchanged lines hidden --- | 1302 hellcreek_ptp_free(hellcreek); 1303 dsa_unregister_switch(hellcreek->ds); 1304 platform_set_drvdata(pdev, NULL); 1305 1306 return 0; 1307} 1308 1309static const struct hellcreek_platform_data de1soc_r1_pdata = { --- 30 unchanged lines hidden --- |