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 ---