Symbol: hellcreek
drivers/net/dsa/hirschmann/hellcreek.c
100
static u16 hellcreek_read_ctrl(struct hellcreek *hellcreek)
drivers/net/dsa/hirschmann/hellcreek.c
1001
mutex_unlock(&hellcreek->reg_lock);
drivers/net/dsa/hirschmann/hellcreek.c
1006
static void hellcreek_setup_cpu_and_tunnel_port(struct hellcreek *hellcreek)
drivers/net/dsa/hirschmann/hellcreek.c
1008
struct hellcreek_port *tunnel_port = &hellcreek->ports[TUNNEL_PORT];
drivers/net/dsa/hirschmann/hellcreek.c
1009
struct hellcreek_port *cpu_port = &hellcreek->ports[CPU_PORT];
drivers/net/dsa/hirschmann/hellcreek.c
1014
mutex_lock(&hellcreek->reg_lock);
drivers/net/dsa/hirschmann/hellcreek.c
1016
hellcreek_select_port(hellcreek, CPU_PORT);
drivers/net/dsa/hirschmann/hellcreek.c
1017
hellcreek_write(hellcreek, ptcfg, HR_PTCFG);
drivers/net/dsa/hirschmann/hellcreek.c
1019
hellcreek_select_port(hellcreek, TUNNEL_PORT);
drivers/net/dsa/hirschmann/hellcreek.c
102
return readw(hellcreek->base + HR_CTRL_C);
drivers/net/dsa/hirschmann/hellcreek.c
1020
hellcreek_write(hellcreek, ptcfg, HR_PTCFG);
drivers/net/dsa/hirschmann/hellcreek.c
1025
mutex_unlock(&hellcreek->reg_lock);
drivers/net/dsa/hirschmann/hellcreek.c
1028
static void hellcreek_setup_tc_identity_mapping(struct hellcreek *hellcreek)
drivers/net/dsa/hirschmann/hellcreek.c
105
static u16 hellcreek_read_stat(struct hellcreek *hellcreek)
drivers/net/dsa/hirschmann/hellcreek.c
1051
mutex_lock(&hellcreek->reg_lock);
drivers/net/dsa/hirschmann/hellcreek.c
1053
hellcreek_select_prio(hellcreek, i);
drivers/net/dsa/hirschmann/hellcreek.c
1054
hellcreek_write(hellcreek,
drivers/net/dsa/hirschmann/hellcreek.c
1058
mutex_unlock(&hellcreek->reg_lock);
drivers/net/dsa/hirschmann/hellcreek.c
1062
static int hellcreek_setup_fdb(struct hellcreek *hellcreek)
drivers/net/dsa/hirschmann/hellcreek.c
107
return readw(hellcreek->base + HR_SWSTAT);
drivers/net/dsa/hirschmann/hellcreek.c
110
static void hellcreek_write(struct hellcreek *hellcreek, u16 data,
drivers/net/dsa/hirschmann/hellcreek.c
113
writew(data, hellcreek->base + offset);
drivers/net/dsa/hirschmann/hellcreek.c
1143
mutex_lock(&hellcreek->reg_lock);
drivers/net/dsa/hirschmann/hellcreek.c
1144
ret = __hellcreek_fdb_add(hellcreek, &l2_ptp);
drivers/net/dsa/hirschmann/hellcreek.c
1147
ret = __hellcreek_fdb_add(hellcreek, &udp4_ptp);
drivers/net/dsa/hirschmann/hellcreek.c
1150
ret = __hellcreek_fdb_add(hellcreek, &udp6_ptp);
drivers/net/dsa/hirschmann/hellcreek.c
1153
ret = __hellcreek_fdb_add(hellcreek, &l2_p2p);
drivers/net/dsa/hirschmann/hellcreek.c
1156
ret = __hellcreek_fdb_add(hellcreek, &udp4_p2p);
drivers/net/dsa/hirschmann/hellcreek.c
1159
ret = __hellcreek_fdb_add(hellcreek, &udp6_p2p);
drivers/net/dsa/hirschmann/hellcreek.c
116
static void hellcreek_select_port(struct hellcreek *hellcreek, int port)
drivers/net/dsa/hirschmann/hellcreek.c
1162
ret = __hellcreek_fdb_add(hellcreek, &stp);
drivers/net/dsa/hirschmann/hellcreek.c
1164
mutex_unlock(&hellcreek->reg_lock);
drivers/net/dsa/hirschmann/hellcreek.c
1173
struct hellcreek *hellcreek = ds->priv;
drivers/net/dsa/hirschmann/hellcreek.c
1177
hellcreek->pdata->name);
drivers/net/dsa/hirschmann/hellcreek.c
1182
struct hellcreek *hellcreek = priv;
drivers/net/dsa/hirschmann/hellcreek.c
1186
mutex_lock(&hellcreek->reg_lock);
drivers/net/dsa/hirschmann/hellcreek.c
1188
if (hellcreek->vidmbrcfg[i])
drivers/net/dsa/hirschmann/hellcreek.c
1190
mutex_unlock(&hellcreek->reg_lock);
drivers/net/dsa/hirschmann/hellcreek.c
1197
struct hellcreek *hellcreek = priv;
drivers/net/dsa/hirschmann/hellcreek.c
120
hellcreek_write(hellcreek, val, HR_PSEL);
drivers/net/dsa/hirschmann/hellcreek.c
1203
mutex_lock(&hellcreek->reg_lock);
drivers/net/dsa/hirschmann/hellcreek.c
1204
count = hellcreek_read(hellcreek, HR_FDBMAX);
drivers/net/dsa/hirschmann/hellcreek.c
1205
mutex_unlock(&hellcreek->reg_lock);
drivers/net/dsa/hirschmann/hellcreek.c
1214
struct hellcreek *hellcreek = ds->priv;
drivers/net/dsa/hirschmann/hellcreek.c
1222
hellcreek->fdb_entries,
drivers/net/dsa/hirschmann/hellcreek.c
1223
hellcreek->fdb_entries,
drivers/net/dsa/hirschmann/hellcreek.c
123
static void hellcreek_select_prio(struct hellcreek *hellcreek, int prio)
drivers/net/dsa/hirschmann/hellcreek.c
1233
err = dsa_devlink_resource_register(ds, "FDB", hellcreek->fdb_entries,
drivers/net/dsa/hirschmann/hellcreek.c
1243
hellcreek);
drivers/net/dsa/hirschmann/hellcreek.c
1248
hellcreek);
drivers/net/dsa/hirschmann/hellcreek.c
1265
struct hellcreek *hellcreek = ds->priv;
drivers/net/dsa/hirschmann/hellcreek.c
127
hellcreek_write(hellcreek, val, HR_PSEL);
drivers/net/dsa/hirschmann/hellcreek.c
1274
mutex_lock(&hellcreek->reg_lock);
drivers/net/dsa/hirschmann/hellcreek.c
1276
entry->member = hellcreek->vidmbrcfg[i];
drivers/net/dsa/hirschmann/hellcreek.c
1279
mutex_unlock(&hellcreek->reg_lock);
drivers/net/dsa/hirschmann/hellcreek.c
1293
struct hellcreek *hellcreek = ds->priv;
drivers/net/dsa/hirschmann/hellcreek.c
1296
table = kzalloc_objs(*entry, hellcreek->fdb_entries);
drivers/net/dsa/hirschmann/hellcreek.c
130
static void hellcreek_select_port_prio(struct hellcreek *hellcreek, int port,
drivers/net/dsa/hirschmann/hellcreek.c
1302
mutex_lock(&hellcreek->reg_lock);
drivers/net/dsa/hirschmann/hellcreek.c
1305
hellcreek_read(hellcreek, HR_FDBMAX);
drivers/net/dsa/hirschmann/hellcreek.c
1306
hellcreek_write(hellcreek, 0x00, HR_FDBMAX);
drivers/net/dsa/hirschmann/hellcreek.c
1308
for (i = 0; i < hellcreek->fdb_entries; ++i, ++entry) {
drivers/net/dsa/hirschmann/hellcreek.c
1310
hellcreek_populate_fdb_entry(hellcreek, entry, i);
drivers/net/dsa/hirschmann/hellcreek.c
1313
hellcreek_write(hellcreek, 0x00, HR_FDBRDH);
drivers/net/dsa/hirschmann/hellcreek.c
1316
mutex_unlock(&hellcreek->reg_lock);
drivers/net/dsa/hirschmann/hellcreek.c
1337
struct hellcreek *hellcreek = ds->priv;
drivers/net/dsa/hirschmann/hellcreek.c
1351
hellcreek->vlan_region = region;
drivers/net/dsa/hirschmann/hellcreek.c
1354
size = hellcreek->fdb_entries * sizeof(struct hellcreek_fdb_entry);
drivers/net/dsa/hirschmann/hellcreek.c
1363
hellcreek->fdb_region = region;
drivers/net/dsa/hirschmann/hellcreek.c
1368
dsa_devlink_region_destroy(hellcreek->vlan_region);
drivers/net/dsa/hirschmann/hellcreek.c
137
hellcreek_write(hellcreek, val, HR_PSEL);
drivers/net/dsa/hirschmann/hellcreek.c
1375
struct hellcreek *hellcreek = ds->priv;
drivers/net/dsa/hirschmann/hellcreek.c
1377
dsa_devlink_region_destroy(hellcreek->fdb_region);
drivers/net/dsa/hirschmann/hellcreek.c
1378
dsa_devlink_region_destroy(hellcreek->vlan_region);
drivers/net/dsa/hirschmann/hellcreek.c
1383
struct hellcreek *hellcreek = ds->priv;
drivers/net/dsa/hirschmann/hellcreek.c
1387
dev_dbg(hellcreek->dev, "Set up the switch\n");
drivers/net/dsa/hirschmann/hellcreek.c
1390
ret = hellcreek_enable_ip_core(hellcreek);
drivers/net/dsa/hirschmann/hellcreek.c
1392
dev_err(hellcreek->dev, "Failed to enable IP core!\n");
drivers/net/dsa/hirschmann/hellcreek.c
1397
hellcreek_setup_cpu_and_tunnel_port(hellcreek);
drivers/net/dsa/hirschmann/hellcreek.c
140
static void hellcreek_select_counter(struct hellcreek *hellcreek, int counter)
drivers/net/dsa/hirschmann/hellcreek.c
1407
hellcreek->swcfg = swcfg;
drivers/net/dsa/hirschmann/hellcreek.c
1408
hellcreek_write(hellcreek, swcfg, HR_SWCFG);
drivers/net/dsa/hirschmann/hellcreek.c
1419
hellcreek_setup_tc_identity_mapping(hellcreek);
drivers/net/dsa/hirschmann/hellcreek.c
1428
ret = hellcreek_setup_fdb(hellcreek);
drivers/net/dsa/hirschmann/hellcreek.c
1430
dev_err(hellcreek->dev,
drivers/net/dsa/hirschmann/hellcreek.c
1438
dev_err(hellcreek->dev,
drivers/net/dsa/hirschmann/hellcreek.c
144
hellcreek_write(hellcreek, val, HR_CSEL);
drivers/net/dsa/hirschmann/hellcreek.c
1445
dev_err(hellcreek->dev,
drivers/net/dsa/hirschmann/hellcreek.c
1467
struct hellcreek *hellcreek = ds->priv;
drivers/net/dsa/hirschmann/hellcreek.c
1483
if (hellcreek->pdata->is_100_mbits)
drivers/net/dsa/hirschmann/hellcreek.c
1493
struct hellcreek *hellcreek = ds->priv;
drivers/net/dsa/hirschmann/hellcreek.c
1499
dev_dbg(hellcreek->dev, "Pre change upper for port %d\n", port);
drivers/net/dsa/hirschmann/hellcreek.c
150
static void hellcreek_select_vlan(struct hellcreek *hellcreek, int vid,
drivers/net/dsa/hirschmann/hellcreek.c
1515
mutex_lock(&hellcreek->vlan_lock);
drivers/net/dsa/hirschmann/hellcreek.c
1516
for (i = 0; i < hellcreek->pdata->num_ports; ++i) {
drivers/net/dsa/hirschmann/hellcreek.c
1523
used = used && test_bit(vid, hellcreek->ports[i].vlan_dev_bitmap);
drivers/net/dsa/hirschmann/hellcreek.c
1530
set_bit(vid, hellcreek->ports[port].vlan_dev_bitmap);
drivers/net/dsa/hirschmann/hellcreek.c
1535
mutex_unlock(&hellcreek->vlan_lock);
drivers/net/dsa/hirschmann/hellcreek.c
1540
static void hellcreek_setup_maxsdu(struct hellcreek *hellcreek, int port,
drivers/net/dsa/hirschmann/hellcreek.c
1552
dev_dbg(hellcreek->dev, "Configure max-sdu %u for tc %d on port %d\n",
drivers/net/dsa/hirschmann/hellcreek.c
1555
hellcreek_select_port_prio(hellcreek, port, tc);
drivers/net/dsa/hirschmann/hellcreek.c
1559
hellcreek_write(hellcreek, val, HR_PTPRTCCFG);
drivers/net/dsa/hirschmann/hellcreek.c
1563
static void hellcreek_reset_maxsdu(struct hellcreek *hellcreek, int port)
drivers/net/dsa/hirschmann/hellcreek.c
1570
hellcreek_select_port_prio(hellcreek, port, tc);
drivers/net/dsa/hirschmann/hellcreek.c
1575
hellcreek_write(hellcreek, val, HR_PTPRTCCFG);
drivers/net/dsa/hirschmann/hellcreek.c
1579
static void hellcreek_setup_gcl(struct hellcreek *hellcreek, int port,
drivers/net/dsa/hirschmann/hellcreek.c
158
hellcreek_write(hellcreek, val, HR_VIDCFG);
drivers/net/dsa/hirschmann/hellcreek.c
1605
hellcreek_write(hellcreek, data, TR_GCLDAT);
drivers/net/dsa/hirschmann/hellcreek.c
1608
hellcreek_write(hellcreek,
drivers/net/dsa/hirschmann/hellcreek.c
1611
hellcreek_write(hellcreek,
drivers/net/dsa/hirschmann/hellcreek.c
1619
hellcreek_write(hellcreek, data, TR_GCLCMD);
drivers/net/dsa/hirschmann/hellcreek.c
162
hellcreek_write(hellcreek, val, HR_VIDCFG);
drivers/net/dsa/hirschmann/hellcreek.c
1626
static void hellcreek_set_cycle_time(struct hellcreek *hellcreek,
drivers/net/dsa/hirschmann/hellcreek.c
1631
hellcreek_write(hellcreek, cycle_time & 0x0000ffff, TR_CTWRL);
drivers/net/dsa/hirschmann/hellcreek.c
1632
hellcreek_write(hellcreek, (cycle_time & 0xffff0000) >> 16, TR_CTWRH);
drivers/net/dsa/hirschmann/hellcreek.c
1635
static void hellcreek_switch_schedule(struct hellcreek *hellcreek,
drivers/net/dsa/hirschmann/hellcreek.c
1641
hellcreek_write(hellcreek, ts.tv_nsec & 0x0000ffff, TR_ESTWRL);
drivers/net/dsa/hirschmann/hellcreek.c
1642
hellcreek_write(hellcreek, (ts.tv_nsec & 0xffff0000) >> 16, TR_ESTWRH);
drivers/net/dsa/hirschmann/hellcreek.c
1645
hellcreek_write(hellcreek, TR_ESTCMD_ESTARM | TR_ESTCMD_ESTSWCFG |
drivers/net/dsa/hirschmann/hellcreek.c
165
static void hellcreek_select_tgd(struct hellcreek *hellcreek, int port)
drivers/net/dsa/hirschmann/hellcreek.c
1650
static bool hellcreek_schedule_startable(struct hellcreek *hellcreek, int port)
drivers/net/dsa/hirschmann/hellcreek.c
1652
struct hellcreek_port *hellcreek_port = &hellcreek->ports[port];
drivers/net/dsa/hirschmann/hellcreek.c
1663
mutex_lock(&hellcreek->ptp_lock);
drivers/net/dsa/hirschmann/hellcreek.c
1664
current_ns = hellcreek->seconds * NSEC_PER_SEC + hellcreek->last_ts;
drivers/net/dsa/hirschmann/hellcreek.c
1665
mutex_unlock(&hellcreek->ptp_lock);
drivers/net/dsa/hirschmann/hellcreek.c
1673
static void hellcreek_start_schedule(struct hellcreek *hellcreek, int port)
drivers/net/dsa/hirschmann/hellcreek.c
1675
struct hellcreek_port *hellcreek_port = &hellcreek->ports[port];
drivers/net/dsa/hirschmann/hellcreek.c
1681
hellcreek_select_tgd(hellcreek, port);
drivers/net/dsa/hirschmann/hellcreek.c
1684
mutex_lock(&hellcreek->ptp_lock);
drivers/net/dsa/hirschmann/hellcreek.c
1685
current_ns = hellcreek->seconds * NSEC_PER_SEC + hellcreek->last_ts;
drivers/net/dsa/hirschmann/hellcreek.c
1686
mutex_unlock(&hellcreek->ptp_lock);
drivers/net/dsa/hirschmann/hellcreek.c
169
hellcreek_write(hellcreek, val, TR_TGDSEL);
drivers/net/dsa/hirschmann/hellcreek.c
1701
hellcreek_switch_schedule(hellcreek, base_time);
drivers/net/dsa/hirschmann/hellcreek.c
1706
dev_dbg(hellcreek->dev, "Armed EST timer for port %d\n",
drivers/net/dsa/hirschmann/hellcreek.c
1714
struct hellcreek *hellcreek;
drivers/net/dsa/hirschmann/hellcreek.c
1718
hellcreek = hellcreek_port->hellcreek;
drivers/net/dsa/hirschmann/hellcreek.c
172
static int hellcreek_wait_until_ready(struct hellcreek *hellcreek)
drivers/net/dsa/hirschmann/hellcreek.c
1720
mutex_lock(&hellcreek->reg_lock);
drivers/net/dsa/hirschmann/hellcreek.c
1723
startable = hellcreek_schedule_startable(hellcreek,
drivers/net/dsa/hirschmann/hellcreek.c
1726
hellcreek_start_schedule(hellcreek, hellcreek_port->port);
drivers/net/dsa/hirschmann/hellcreek.c
1727
mutex_unlock(&hellcreek->reg_lock);
drivers/net/dsa/hirschmann/hellcreek.c
1731
mutex_unlock(&hellcreek->reg_lock);
drivers/net/dsa/hirschmann/hellcreek.c
1741
struct hellcreek *hellcreek = ds->priv;
drivers/net/dsa/hirschmann/hellcreek.c
1746
hellcreek_port = &hellcreek->ports[port];
drivers/net/dsa/hirschmann/hellcreek.c
1748
dev_dbg(hellcreek->dev, "Configure traffic schedule on port %d\n",
drivers/net/dsa/hirschmann/hellcreek.c
1754
mutex_lock(&hellcreek->reg_lock);
drivers/net/dsa/hirschmann/hellcreek.c
1763
hellcreek_setup_maxsdu(hellcreek, port, hellcreek_port->current_schedule);
drivers/net/dsa/hirschmann/hellcreek.c
1766
hellcreek_select_tgd(hellcreek, port);
drivers/net/dsa/hirschmann/hellcreek.c
177
return readx_poll_timeout(hellcreek_read_ctrl, hellcreek,
drivers/net/dsa/hirschmann/hellcreek.c
1770
hellcreek_write(hellcreek, ctrl, TR_TGDCTRL);
drivers/net/dsa/hirschmann/hellcreek.c
1773
hellcreek_write(hellcreek, 0x00, TR_ESTCMD);
drivers/net/dsa/hirschmann/hellcreek.c
1776
hellcreek_setup_gcl(hellcreek, port, hellcreek_port->current_schedule);
drivers/net/dsa/hirschmann/hellcreek.c
1779
hellcreek_set_cycle_time(hellcreek, hellcreek_port->current_schedule);
drivers/net/dsa/hirschmann/hellcreek.c
1782
startable = hellcreek_schedule_startable(hellcreek, port);
drivers/net/dsa/hirschmann/hellcreek.c
1784
hellcreek_start_schedule(hellcreek, port);
drivers/net/dsa/hirschmann/hellcreek.c
1785
mutex_unlock(&hellcreek->reg_lock);
drivers/net/dsa/hirschmann/hellcreek.c
1789
mutex_unlock(&hellcreek->reg_lock);
drivers/net/dsa/hirschmann/hellcreek.c
1800
struct hellcreek *hellcreek = ds->priv;
drivers/net/dsa/hirschmann/hellcreek.c
1803
hellcreek_port = &hellcreek->ports[port];
drivers/net/dsa/hirschmann/hellcreek.c
1805
dev_dbg(hellcreek->dev, "Remove traffic schedule on port %d\n", port);
drivers/net/dsa/hirschmann/hellcreek.c
1810
mutex_lock(&hellcreek->reg_lock);
drivers/net/dsa/hirschmann/hellcreek.c
1818
hellcreek_reset_maxsdu(hellcreek, port);
drivers/net/dsa/hirschmann/hellcreek.c
182
static int hellcreek_wait_until_transitioned(struct hellcreek *hellcreek)
drivers/net/dsa/hirschmann/hellcreek.c
1821
hellcreek_select_tgd(hellcreek, port);
drivers/net/dsa/hirschmann/hellcreek.c
1824
hellcreek_write(hellcreek, 0xff << TR_TGDCTRL_ADMINGATESTATES_SHIFT,
drivers/net/dsa/hirschmann/hellcreek.c
1827
mutex_unlock(&hellcreek->reg_lock);
drivers/net/dsa/hirschmann/hellcreek.c
1832
static bool hellcreek_validate_schedule(struct hellcreek *hellcreek,
drivers/net/dsa/hirschmann/hellcreek.c
1838
if (!hellcreek->pdata->qbv_support)
drivers/net/dsa/hirschmann/hellcreek.c
186
return readx_poll_timeout_atomic(hellcreek_read_ctrl, hellcreek,
drivers/net/dsa/hirschmann/hellcreek.c
1875
struct hellcreek *hellcreek = ds->priv;
drivers/net/dsa/hirschmann/hellcreek.c
1885
if (!hellcreek_validate_schedule(hellcreek, taprio))
drivers/net/dsa/hirschmann/hellcreek.c
191
static int hellcreek_wait_fdb_ready(struct hellcreek *hellcreek)
drivers/net/dsa/hirschmann/hellcreek.c
1936
struct hellcreek *hellcreek;
drivers/net/dsa/hirschmann/hellcreek.c
1940
hellcreek = devm_kzalloc(dev, sizeof(*hellcreek), GFP_KERNEL);
drivers/net/dsa/hirschmann/hellcreek.c
1941
if (!hellcreek)
drivers/net/dsa/hirschmann/hellcreek.c
1944
hellcreek->vidmbrcfg = devm_kcalloc(dev, VLAN_N_VID,
drivers/net/dsa/hirschmann/hellcreek.c
1945
sizeof(*hellcreek->vidmbrcfg),
drivers/net/dsa/hirschmann/hellcreek.c
1947
if (!hellcreek->vidmbrcfg)
drivers/net/dsa/hirschmann/hellcreek.c
195
return readx_poll_timeout_atomic(hellcreek_read_stat, hellcreek,
drivers/net/dsa/hirschmann/hellcreek.c
1950
hellcreek->pdata = of_device_get_match_data(dev);
drivers/net/dsa/hirschmann/hellcreek.c
1952
hellcreek->ports = devm_kcalloc(dev, hellcreek->pdata->num_ports,
drivers/net/dsa/hirschmann/hellcreek.c
1953
sizeof(*hellcreek->ports),
drivers/net/dsa/hirschmann/hellcreek.c
1955
if (!hellcreek->ports)
drivers/net/dsa/hirschmann/hellcreek.c
1958
for (i = 0; i < hellcreek->pdata->num_ports; ++i) {
drivers/net/dsa/hirschmann/hellcreek.c
1959
struct hellcreek_port *port = &hellcreek->ports[i];
drivers/net/dsa/hirschmann/hellcreek.c
1974
port->hellcreek = hellcreek;
drivers/net/dsa/hirschmann/hellcreek.c
1981
mutex_init(&hellcreek->reg_lock);
drivers/net/dsa/hirschmann/hellcreek.c
1982
mutex_init(&hellcreek->vlan_lock);
drivers/net/dsa/hirschmann/hellcreek.c
1983
mutex_init(&hellcreek->ptp_lock);
drivers/net/dsa/hirschmann/hellcreek.c
1985
hellcreek->dev = dev;
drivers/net/dsa/hirschmann/hellcreek.c
1993
hellcreek->base = devm_ioremap_resource(dev, res);
drivers/net/dsa/hirschmann/hellcreek.c
1994
if (IS_ERR(hellcreek->base))
drivers/net/dsa/hirschmann/hellcreek.c
1995
return PTR_ERR(hellcreek->base);
drivers/net/dsa/hirschmann/hellcreek.c
200
static int hellcreek_detect(struct hellcreek *hellcreek)
drivers/net/dsa/hirschmann/hellcreek.c
2003
hellcreek->ptp_base = devm_ioremap_resource(dev, res);
drivers/net/dsa/hirschmann/hellcreek.c
2004
if (IS_ERR(hellcreek->ptp_base))
drivers/net/dsa/hirschmann/hellcreek.c
2005
return PTR_ERR(hellcreek->ptp_base);
drivers/net/dsa/hirschmann/hellcreek.c
2007
ret = hellcreek_detect(hellcreek);
drivers/net/dsa/hirschmann/hellcreek.c
2013
ret = hellcreek_wait_until_ready(hellcreek);
drivers/net/dsa/hirschmann/hellcreek.c
2019
hellcreek_feature_detect(hellcreek);
drivers/net/dsa/hirschmann/hellcreek.c
2021
hellcreek->ds = devm_kzalloc(dev, sizeof(*hellcreek->ds), GFP_KERNEL);
drivers/net/dsa/hirschmann/hellcreek.c
2022
if (!hellcreek->ds)
drivers/net/dsa/hirschmann/hellcreek.c
2025
hellcreek->ds->dev = dev;
drivers/net/dsa/hirschmann/hellcreek.c
2026
hellcreek->ds->priv = hellcreek;
drivers/net/dsa/hirschmann/hellcreek.c
2027
hellcreek->ds->ops = &hellcreek_ds_ops;
drivers/net/dsa/hirschmann/hellcreek.c
2028
hellcreek->ds->num_ports = hellcreek->pdata->num_ports;
drivers/net/dsa/hirschmann/hellcreek.c
2029
hellcreek->ds->num_tx_queues = HELLCREEK_NUM_EGRESS_QUEUES;
drivers/net/dsa/hirschmann/hellcreek.c
2031
ret = dsa_register_switch(hellcreek->ds);
drivers/net/dsa/hirschmann/hellcreek.c
2037
ret = hellcreek_ptp_setup(hellcreek);
drivers/net/dsa/hirschmann/hellcreek.c
2043
ret = hellcreek_hwtstamp_setup(hellcreek);
drivers/net/dsa/hirschmann/hellcreek.c
2049
platform_set_drvdata(pdev, hellcreek);
drivers/net/dsa/hirschmann/hellcreek.c
2054
hellcreek_ptp_free(hellcreek);
drivers/net/dsa/hirschmann/hellcreek.c
2056
dsa_unregister_switch(hellcreek->ds);
drivers/net/dsa/hirschmann/hellcreek.c
206
id = hellcreek_read(hellcreek, HR_MODID_C);
drivers/net/dsa/hirschmann/hellcreek.c
2063
struct hellcreek *hellcreek = platform_get_drvdata(pdev);
drivers/net/dsa/hirschmann/hellcreek.c
2065
if (!hellcreek)
drivers/net/dsa/hirschmann/hellcreek.c
2068
hellcreek_hwtstamp_free(hellcreek);
drivers/net/dsa/hirschmann/hellcreek.c
2069
hellcreek_ptp_free(hellcreek);
drivers/net/dsa/hirschmann/hellcreek.c
207
rel_low = hellcreek_read(hellcreek, HR_REL_L_C);
drivers/net/dsa/hirschmann/hellcreek.c
2070
dsa_unregister_switch(hellcreek->ds);
drivers/net/dsa/hirschmann/hellcreek.c
2075
struct hellcreek *hellcreek = platform_get_drvdata(pdev);
drivers/net/dsa/hirschmann/hellcreek.c
2077
if (!hellcreek)
drivers/net/dsa/hirschmann/hellcreek.c
208
rel_high = hellcreek_read(hellcreek, HR_REL_H_C);
drivers/net/dsa/hirschmann/hellcreek.c
2080
dsa_switch_shutdown(hellcreek->ds);
drivers/net/dsa/hirschmann/hellcreek.c
209
date_low = hellcreek_read(hellcreek, HR_BLD_L_C);
drivers/net/dsa/hirschmann/hellcreek.c
210
date_high = hellcreek_read(hellcreek, HR_BLD_H_C);
drivers/net/dsa/hirschmann/hellcreek.c
211
tgd_ver = hellcreek_read(hellcreek, TR_TGDVER);
drivers/net/dsa/hirschmann/hellcreek.c
213
if (id != hellcreek->pdata->module_id)
drivers/net/dsa/hirschmann/hellcreek.c
221
dev_info(hellcreek->dev, "Module ID=%02x Release=%04x Date=%04x TGD Version=%02x.%02x\n",
drivers/net/dsa/hirschmann/hellcreek.c
227
static void hellcreek_feature_detect(struct hellcreek *hellcreek)
drivers/net/dsa/hirschmann/hellcreek.c
231
features = hellcreek_read(hellcreek, HR_FEABITS0);
drivers/net/dsa/hirschmann/hellcreek.c
236
hellcreek->fdb_entries = ((features & HR_FEABITS0_FDBBINS_MASK) >>
drivers/net/dsa/hirschmann/hellcreek.c
250
struct hellcreek *hellcreek = ds->priv;
drivers/net/dsa/hirschmann/hellcreek.c
254
hellcreek_port = &hellcreek->ports[port];
drivers/net/dsa/hirschmann/hellcreek.c
256
dev_dbg(hellcreek->dev, "Enable port %d\n", port);
drivers/net/dsa/hirschmann/hellcreek.c
258
mutex_lock(&hellcreek->reg_lock);
drivers/net/dsa/hirschmann/hellcreek.c
260
hellcreek_select_port(hellcreek, port);
drivers/net/dsa/hirschmann/hellcreek.c
263
hellcreek_write(hellcreek, val, HR_PTCFG);
drivers/net/dsa/hirschmann/hellcreek.c
266
mutex_unlock(&hellcreek->reg_lock);
drivers/net/dsa/hirschmann/hellcreek.c
273
struct hellcreek *hellcreek = ds->priv;
drivers/net/dsa/hirschmann/hellcreek.c
277
hellcreek_port = &hellcreek->ports[port];
drivers/net/dsa/hirschmann/hellcreek.c
279
dev_dbg(hellcreek->dev, "Disable port %d\n", port);
drivers/net/dsa/hirschmann/hellcreek.c
281
mutex_lock(&hellcreek->reg_lock);
drivers/net/dsa/hirschmann/hellcreek.c
283
hellcreek_select_port(hellcreek, port);
drivers/net/dsa/hirschmann/hellcreek.c
286
hellcreek_write(hellcreek, val, HR_PTCFG);
drivers/net/dsa/hirschmann/hellcreek.c
289
mutex_unlock(&hellcreek->reg_lock);
drivers/net/dsa/hirschmann/hellcreek.c
312
struct hellcreek *hellcreek = ds->priv;
drivers/net/dsa/hirschmann/hellcreek.c
316
hellcreek_port = &hellcreek->ports[port];
drivers/net/dsa/hirschmann/hellcreek.c
324
mutex_lock(&hellcreek->reg_lock);
drivers/net/dsa/hirschmann/hellcreek.c
326
hellcreek_select_counter(hellcreek, offset);
drivers/net/dsa/hirschmann/hellcreek.c
332
high = hellcreek_read(hellcreek, HR_CRDH);
drivers/net/dsa/hirschmann/hellcreek.c
333
low = hellcreek_read(hellcreek, HR_CRDL);
drivers/net/dsa/hirschmann/hellcreek.c
339
mutex_unlock(&hellcreek->reg_lock);
drivers/net/dsa/hirschmann/hellcreek.c
352
struct hellcreek *hellcreek = ds->priv;
drivers/net/dsa/hirschmann/hellcreek.c
355
dev_dbg(hellcreek->dev, "VLAN prepare for port %d\n", port);
drivers/net/dsa/hirschmann/hellcreek.c
361
for (i = 0; i < hellcreek->pdata->num_ports; ++i) {
drivers/net/dsa/hirschmann/hellcreek.c
376
static void hellcreek_select_vlan_params(struct hellcreek *hellcreek, int port,
drivers/net/dsa/hirschmann/hellcreek.c
398
dev_err(hellcreek->dev, "Unknown port %d selected!\n", port);
drivers/net/dsa/hirschmann/hellcreek.c
402
static void hellcreek_apply_vlan(struct hellcreek *hellcreek, int port, u16 vid,
drivers/net/dsa/hirschmann/hellcreek.c
408
dev_dbg(hellcreek->dev, "Apply VLAN: port=%d vid=%u pvid=%d untagged=%d",
drivers/net/dsa/hirschmann/hellcreek.c
411
mutex_lock(&hellcreek->reg_lock);
drivers/net/dsa/hirschmann/hellcreek.c
413
hellcreek_select_port(hellcreek, port);
drivers/net/dsa/hirschmann/hellcreek.c
414
hellcreek_select_vlan(hellcreek, vid, pvid);
drivers/net/dsa/hirschmann/hellcreek.c
417
hellcreek_select_vlan_params(hellcreek, port, &shift, &mask);
drivers/net/dsa/hirschmann/hellcreek.c
418
val = hellcreek->vidmbrcfg[vid];
drivers/net/dsa/hirschmann/hellcreek.c
425
hellcreek_write(hellcreek, val, HR_VIDMBRCFG);
drivers/net/dsa/hirschmann/hellcreek.c
426
hellcreek->vidmbrcfg[vid] = val;
drivers/net/dsa/hirschmann/hellcreek.c
428
mutex_unlock(&hellcreek->reg_lock);
drivers/net/dsa/hirschmann/hellcreek.c
431
static void hellcreek_unapply_vlan(struct hellcreek *hellcreek, int port,
drivers/net/dsa/hirschmann/hellcreek.c
437
dev_dbg(hellcreek->dev, "Unapply VLAN: port=%d vid=%u\n", port, vid);
drivers/net/dsa/hirschmann/hellcreek.c
439
mutex_lock(&hellcreek->reg_lock);
drivers/net/dsa/hirschmann/hellcreek.c
441
hellcreek_select_vlan(hellcreek, vid, false);
drivers/net/dsa/hirschmann/hellcreek.c
444
hellcreek_select_vlan_params(hellcreek, port, &shift, &mask);
drivers/net/dsa/hirschmann/hellcreek.c
445
val = hellcreek->vidmbrcfg[vid];
drivers/net/dsa/hirschmann/hellcreek.c
449
hellcreek_write(hellcreek, val, HR_VIDMBRCFG);
drivers/net/dsa/hirschmann/hellcreek.c
450
hellcreek->vidmbrcfg[vid] = val;
drivers/net/dsa/hirschmann/hellcreek.c
452
mutex_unlock(&hellcreek->reg_lock);
drivers/net/dsa/hirschmann/hellcreek.c
461
struct hellcreek *hellcreek = ds->priv;
drivers/net/dsa/hirschmann/hellcreek.c
468
dev_dbg(hellcreek->dev, "Add VLAN %d on port %d, %s, %s\n",
drivers/net/dsa/hirschmann/hellcreek.c
472
hellcreek_apply_vlan(hellcreek, port, vlan->vid, pvid, untagged);
drivers/net/dsa/hirschmann/hellcreek.c
480
struct hellcreek *hellcreek = ds->priv;
drivers/net/dsa/hirschmann/hellcreek.c
482
dev_dbg(hellcreek->dev, "Remove VLAN %d on port %d\n", vlan->vid, port);
drivers/net/dsa/hirschmann/hellcreek.c
484
hellcreek_unapply_vlan(hellcreek, port, vlan->vid);
drivers/net/dsa/hirschmann/hellcreek.c
492
struct hellcreek *hellcreek = ds->priv;
drivers/net/dsa/hirschmann/hellcreek.c
497
mutex_lock(&hellcreek->reg_lock);
drivers/net/dsa/hirschmann/hellcreek.c
499
hellcreek_port = &hellcreek->ports[port];
drivers/net/dsa/hirschmann/hellcreek.c
532
hellcreek_select_port(hellcreek, port);
drivers/net/dsa/hirschmann/hellcreek.c
533
hellcreek_write(hellcreek, val, HR_PTCFG);
drivers/net/dsa/hirschmann/hellcreek.c
536
mutex_unlock(&hellcreek->reg_lock);
drivers/net/dsa/hirschmann/hellcreek.c
538
dev_dbg(hellcreek->dev, "Configured STP state for port %d: %s\n",
drivers/net/dsa/hirschmann/hellcreek.c
542
static void hellcreek_setup_ingressflt(struct hellcreek *hellcreek, int port,
drivers/net/dsa/hirschmann/hellcreek.c
545
struct hellcreek_port *hellcreek_port = &hellcreek->ports[port];
drivers/net/dsa/hirschmann/hellcreek.c
548
mutex_lock(&hellcreek->reg_lock);
drivers/net/dsa/hirschmann/hellcreek.c
557
hellcreek_select_port(hellcreek, port);
drivers/net/dsa/hirschmann/hellcreek.c
558
hellcreek_write(hellcreek, ptcfg, HR_PTCFG);
drivers/net/dsa/hirschmann/hellcreek.c
561
mutex_unlock(&hellcreek->reg_lock);
drivers/net/dsa/hirschmann/hellcreek.c
564
static void hellcreek_setup_vlan_awareness(struct hellcreek *hellcreek,
drivers/net/dsa/hirschmann/hellcreek.c
569
mutex_lock(&hellcreek->reg_lock);
drivers/net/dsa/hirschmann/hellcreek.c
571
swcfg = hellcreek->swcfg;
drivers/net/dsa/hirschmann/hellcreek.c
578
hellcreek_write(hellcreek, swcfg, HR_SWCFG);
drivers/net/dsa/hirschmann/hellcreek.c
580
mutex_unlock(&hellcreek->reg_lock);
drivers/net/dsa/hirschmann/hellcreek.c
589
struct hellcreek *hellcreek = ds->priv;
drivers/net/dsa/hirschmann/hellcreek.c
593
hellcreek_apply_vlan(hellcreek, port, vid, true, true);
drivers/net/dsa/hirschmann/hellcreek.c
595
hellcreek_unapply_vlan(hellcreek, port, vid);
drivers/net/dsa/hirschmann/hellcreek.c
599
hellcreek_apply_vlan(hellcreek, upstream, vid, false, true);
drivers/net/dsa/hirschmann/hellcreek.c
601
hellcreek_unapply_vlan(hellcreek, upstream, vid);
drivers/net/dsa/hirschmann/hellcreek.c
604
static void hellcreek_port_set_ucast_flood(struct hellcreek *hellcreek,
drivers/net/dsa/hirschmann/hellcreek.c
610
hellcreek_port = &hellcreek->ports[port];
drivers/net/dsa/hirschmann/hellcreek.c
612
dev_dbg(hellcreek->dev, "%s unicast flooding on port %d\n",
drivers/net/dsa/hirschmann/hellcreek.c
615
mutex_lock(&hellcreek->reg_lock);
drivers/net/dsa/hirschmann/hellcreek.c
617
hellcreek_select_port(hellcreek, port);
drivers/net/dsa/hirschmann/hellcreek.c
623
hellcreek_write(hellcreek, val, HR_PTCFG);
drivers/net/dsa/hirschmann/hellcreek.c
626
mutex_unlock(&hellcreek->reg_lock);
drivers/net/dsa/hirschmann/hellcreek.c
629
static void hellcreek_port_set_mcast_flood(struct hellcreek *hellcreek,
drivers/net/dsa/hirschmann/hellcreek.c
635
hellcreek_port = &hellcreek->ports[port];
drivers/net/dsa/hirschmann/hellcreek.c
637
dev_dbg(hellcreek->dev, "%s multicast flooding on port %d\n",
drivers/net/dsa/hirschmann/hellcreek.c
640
mutex_lock(&hellcreek->reg_lock);
drivers/net/dsa/hirschmann/hellcreek.c
642
hellcreek_select_port(hellcreek, port);
drivers/net/dsa/hirschmann/hellcreek.c
648
hellcreek_write(hellcreek, val, HR_PTCFG);
drivers/net/dsa/hirschmann/hellcreek.c
651
mutex_unlock(&hellcreek->reg_lock);
drivers/net/dsa/hirschmann/hellcreek.c
668
struct hellcreek *hellcreek = ds->priv;
drivers/net/dsa/hirschmann/hellcreek.c
671
hellcreek_port_set_ucast_flood(hellcreek, port,
drivers/net/dsa/hirschmann/hellcreek.c
675
hellcreek_port_set_mcast_flood(hellcreek, port,
drivers/net/dsa/hirschmann/hellcreek.c
686
struct hellcreek *hellcreek = ds->priv;
drivers/net/dsa/hirschmann/hellcreek.c
688
dev_dbg(hellcreek->dev, "Port %d joins a bridge\n", port);
drivers/net/dsa/hirschmann/hellcreek.c
692
hellcreek_setup_vlan_awareness(hellcreek, false);
drivers/net/dsa/hirschmann/hellcreek.c
703
struct hellcreek *hellcreek = ds->priv;
drivers/net/dsa/hirschmann/hellcreek.c
705
dev_dbg(hellcreek->dev, "Port %d leaves a bridge\n", port);
drivers/net/dsa/hirschmann/hellcreek.c
708
hellcreek_setup_vlan_awareness(hellcreek, true);
drivers/net/dsa/hirschmann/hellcreek.c
714
static int __hellcreek_fdb_add(struct hellcreek *hellcreek,
drivers/net/dsa/hirschmann/hellcreek.c
719
dev_dbg(hellcreek->dev, "Add static FDB entry: MAC=%pM, MASK=0x%02x, "
drivers/net/dsa/hirschmann/hellcreek.c
725
hellcreek_write(hellcreek, entry->mac[1] | (entry->mac[0] << 8), HR_FDBWDH);
drivers/net/dsa/hirschmann/hellcreek.c
726
hellcreek_write(hellcreek, entry->mac[3] | (entry->mac[2] << 8), HR_FDBWDM);
drivers/net/dsa/hirschmann/hellcreek.c
727
hellcreek_write(hellcreek, entry->mac[5] | (entry->mac[4] << 8), HR_FDBWDL);
drivers/net/dsa/hirschmann/hellcreek.c
739
hellcreek_write(hellcreek, meta, HR_FDBWRM0);
drivers/net/dsa/hirschmann/hellcreek.c
742
hellcreek_write(hellcreek, 0x00, HR_FDBWRCMD);
drivers/net/dsa/hirschmann/hellcreek.c
745
return hellcreek_wait_fdb_ready(hellcreek);
drivers/net/dsa/hirschmann/hellcreek.c
748
static int __hellcreek_fdb_del(struct hellcreek *hellcreek,
drivers/net/dsa/hirschmann/hellcreek.c
751
dev_dbg(hellcreek->dev, "Delete FDB entry: MAC=%pM!\n", entry->mac);
drivers/net/dsa/hirschmann/hellcreek.c
754
hellcreek_write(hellcreek, entry->idx | HR_FDBWRCMD_FDBDEL, HR_FDBWRCMD);
drivers/net/dsa/hirschmann/hellcreek.c
757
return hellcreek_wait_fdb_ready(hellcreek);
drivers/net/dsa/hirschmann/hellcreek.c
760
static void hellcreek_populate_fdb_entry(struct hellcreek *hellcreek,
drivers/net/dsa/hirschmann/hellcreek.c
768
meta = hellcreek_read(hellcreek, HR_FDBMDRD);
drivers/net/dsa/hirschmann/hellcreek.c
769
mac = hellcreek_read(hellcreek, HR_FDBRDL);
drivers/net/dsa/hirschmann/hellcreek.c
772
mac = hellcreek_read(hellcreek, HR_FDBRDM);
drivers/net/dsa/hirschmann/hellcreek.c
775
mac = hellcreek_read(hellcreek, HR_FDBRDH);
drivers/net/dsa/hirschmann/hellcreek.c
798
static int hellcreek_fdb_get(struct hellcreek *hellcreek,
drivers/net/dsa/hirschmann/hellcreek.c
808
hellcreek_read(hellcreek, HR_FDBMAX);
drivers/net/dsa/hirschmann/hellcreek.c
809
hellcreek_write(hellcreek, 0x00, HR_FDBMAX);
drivers/net/dsa/hirschmann/hellcreek.c
814
for (i = 0; i < hellcreek->fdb_entries; ++i) {
drivers/net/dsa/hirschmann/hellcreek.c
818
hellcreek_populate_fdb_entry(hellcreek, &tmp, i);
drivers/net/dsa/hirschmann/hellcreek.c
821
hellcreek_write(hellcreek, 0x00, HR_FDBRDH);
drivers/net/dsa/hirschmann/hellcreek.c
840
struct hellcreek *hellcreek = ds->priv;
drivers/net/dsa/hirschmann/hellcreek.c
843
dev_dbg(hellcreek->dev, "Add FDB entry for MAC=%pM\n", addr);
drivers/net/dsa/hirschmann/hellcreek.c
845
mutex_lock(&hellcreek->reg_lock);
drivers/net/dsa/hirschmann/hellcreek.c
847
ret = hellcreek_fdb_get(hellcreek, addr, &entry);
drivers/net/dsa/hirschmann/hellcreek.c
853
ret = __hellcreek_fdb_add(hellcreek, &entry);
drivers/net/dsa/hirschmann/hellcreek.c
855
dev_err(hellcreek->dev, "Failed to add FDB entry!\n");
drivers/net/dsa/hirschmann/hellcreek.c
860
ret = __hellcreek_fdb_del(hellcreek, &entry);
drivers/net/dsa/hirschmann/hellcreek.c
862
dev_err(hellcreek->dev, "Failed to delete FDB entry!\n");
drivers/net/dsa/hirschmann/hellcreek.c
868
ret = __hellcreek_fdb_add(hellcreek, &entry);
drivers/net/dsa/hirschmann/hellcreek.c
870
dev_err(hellcreek->dev, "Failed to add FDB entry!\n");
drivers/net/dsa/hirschmann/hellcreek.c
876
mutex_unlock(&hellcreek->reg_lock);
drivers/net/dsa/hirschmann/hellcreek.c
886
struct hellcreek *hellcreek = ds->priv;
drivers/net/dsa/hirschmann/hellcreek.c
889
dev_dbg(hellcreek->dev, "Delete FDB entry for MAC=%pM\n", addr);
drivers/net/dsa/hirschmann/hellcreek.c
891
mutex_lock(&hellcreek->reg_lock);
drivers/net/dsa/hirschmann/hellcreek.c
893
ret = hellcreek_fdb_get(hellcreek, addr, &entry);
drivers/net/dsa/hirschmann/hellcreek.c
896
dev_err(hellcreek->dev, "FDB entry for deletion not found!\n");
drivers/net/dsa/hirschmann/hellcreek.c
899
ret = __hellcreek_fdb_del(hellcreek, &entry);
drivers/net/dsa/hirschmann/hellcreek.c
901
dev_err(hellcreek->dev, "Failed to delete FDB entry!\n");
drivers/net/dsa/hirschmann/hellcreek.c
908
ret = __hellcreek_fdb_add(hellcreek, &entry);
drivers/net/dsa/hirschmann/hellcreek.c
910
dev_err(hellcreek->dev, "Failed to add FDB entry!\n");
drivers/net/dsa/hirschmann/hellcreek.c
917
mutex_unlock(&hellcreek->reg_lock);
drivers/net/dsa/hirschmann/hellcreek.c
925
struct hellcreek *hellcreek = ds->priv;
drivers/net/dsa/hirschmann/hellcreek.c
930
mutex_lock(&hellcreek->reg_lock);
drivers/net/dsa/hirschmann/hellcreek.c
936
entries = hellcreek_read(hellcreek, HR_FDBMAX);
drivers/net/dsa/hirschmann/hellcreek.c
937
hellcreek_write(hellcreek, 0x00, HR_FDBMAX);
drivers/net/dsa/hirschmann/hellcreek.c
939
dev_dbg(hellcreek->dev, "FDB dump for port %d, entries=%d!\n", port, entries);
drivers/net/dsa/hirschmann/hellcreek.c
942
for (i = 0; i < hellcreek->fdb_entries; ++i) {
drivers/net/dsa/hirschmann/hellcreek.c
946
hellcreek_populate_fdb_entry(hellcreek, &entry, i);
drivers/net/dsa/hirschmann/hellcreek.c
949
hellcreek_write(hellcreek, 0x00, HR_FDBRDH);
drivers/net/dsa/hirschmann/hellcreek.c
95
static u16 hellcreek_read(struct hellcreek *hellcreek, unsigned int offset)
drivers/net/dsa/hirschmann/hellcreek.c
964
mutex_unlock(&hellcreek->reg_lock);
drivers/net/dsa/hirschmann/hellcreek.c
97
return readw(hellcreek->base + offset);
drivers/net/dsa/hirschmann/hellcreek.c
973
struct hellcreek *hellcreek = ds->priv;
drivers/net/dsa/hirschmann/hellcreek.c
975
dev_dbg(hellcreek->dev, "%s VLAN filtering on port %d\n",
drivers/net/dsa/hirschmann/hellcreek.c
979
hellcreek_setup_ingressflt(hellcreek, port, vlan_filtering);
drivers/net/dsa/hirschmann/hellcreek.c
984
hellcreek_setup_vlan_awareness(hellcreek, vlan_filtering);
drivers/net/dsa/hirschmann/hellcreek.c
989
static int hellcreek_enable_ip_core(struct hellcreek *hellcreek)
drivers/net/dsa/hirschmann/hellcreek.c
994
mutex_lock(&hellcreek->reg_lock);
drivers/net/dsa/hirschmann/hellcreek.c
996
val = hellcreek_read(hellcreek, HR_CTRL_C);
drivers/net/dsa/hirschmann/hellcreek.c
998
hellcreek_write(hellcreek, val, HR_CTRL_C);
drivers/net/dsa/hirschmann/hellcreek.c
999
ret = hellcreek_wait_until_transitioned(hellcreek);
drivers/net/dsa/hirschmann/hellcreek.h
226
struct hellcreek;
drivers/net/dsa/hirschmann/hellcreek.h
251
struct hellcreek *hellcreek;
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
116
struct hellcreek *hellcreek = ds->priv;
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
120
ps = &hellcreek->ports[port].port_hwtstamp;
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
122
err = hellcreek_set_hwtstamp_config(hellcreek, port, config);
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
135
struct hellcreek *hellcreek = ds->priv;
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
138
ps = &hellcreek->ports[port].port_hwtstamp;
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
147
static struct ptp_header *hellcreek_should_tstamp(struct hellcreek *hellcreek,
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
152
&hellcreek->ports[port].port_hwtstamp;
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
175
static int hellcreek_ptp_hwtstamp_available(struct hellcreek *hellcreek,
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
180
status = hellcreek_ptp_read(hellcreek, ts_reg);
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
183
dev_err(hellcreek->dev,
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
193
static u64 hellcreek_ptp_hwtstamp_read(struct hellcreek *hellcreek,
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
198
nsh = hellcreek_ptp_read(hellcreek, ts_reg);
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
199
nsh = hellcreek_ptp_read(hellcreek, ts_reg);
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
200
nsh = hellcreek_ptp_read(hellcreek, ts_reg);
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
201
nsh = hellcreek_ptp_read(hellcreek, ts_reg);
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
202
nsl = hellcreek_ptp_read(hellcreek, ts_reg);
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
207
static int hellcreek_txtstamp_work(struct hellcreek *hellcreek,
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
21
struct hellcreek *hellcreek = ds->priv;
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
229
dev_err(hellcreek->dev, "Wrong port for timestamping!\n");
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
23
info->phc_index = hellcreek->ptp_clock ?
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
233
ts_status = hellcreek_ptp_hwtstamp_available(hellcreek, status_reg);
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
24
ptp_clock_index(hellcreek->ptp_clock) : -1;
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
242
dev_err(hellcreek->dev,
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
253
mutex_lock(&hellcreek->ptp_lock);
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
254
ns = hellcreek_ptp_hwtstamp_read(hellcreek, data_reg);
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
255
ns += hellcreek_ptp_gettime_seconds(hellcreek, ns);
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
256
mutex_unlock(&hellcreek->ptp_lock);
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
286
static void hellcreek_get_rxts(struct hellcreek *hellcreek,
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
313
mutex_lock(&hellcreek->ptp_lock);
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
314
ns += hellcreek_ptp_gettime_seconds(hellcreek, ns);
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
315
mutex_unlock(&hellcreek->ptp_lock);
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
325
static void hellcreek_rxtstamp_work(struct hellcreek *hellcreek,
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
333
hellcreek_get_rxts(hellcreek, ps, skb, &ps->rx_queue, port);
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
338
struct hellcreek *hellcreek = ptp_to_hellcreek(ptp);
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
339
struct dsa_switch *ds = hellcreek->ds;
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
348
ps = &hellcreek->ports[i].port_hwtstamp;
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
351
restart |= hellcreek_txtstamp_work(hellcreek, ps, i);
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
353
hellcreek_rxtstamp_work(hellcreek, ps, i);
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
362
struct hellcreek *hellcreek = ds->priv;
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
368
ps = &hellcreek->ports[port].port_hwtstamp;
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
378
hdr = hellcreek_should_tstamp(hellcreek, port, skb, type);
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
399
ptp_schedule_worker(hellcreek->ptp_clock, 0);
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
405
struct hellcreek *hellcreek = ds->priv;
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
409
ps = &hellcreek->ports[port].port_hwtstamp;
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
42
static int hellcreek_set_hwtstamp_config(struct hellcreek *hellcreek, int port,
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
421
hdr = hellcreek_should_tstamp(hellcreek, port, skb, type);
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
429
ptp_schedule_worker(hellcreek->ptp_clock, 0);
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
434
static void hellcreek_hwtstamp_port_setup(struct hellcreek *hellcreek, int port)
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
437
&hellcreek->ports[port].port_hwtstamp;
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
442
int hellcreek_hwtstamp_setup(struct hellcreek *hellcreek)
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
444
struct dsa_switch *ds = hellcreek->ds;
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
452
hellcreek_hwtstamp_port_setup(hellcreek, i);
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
458
hellcreek_ptp_write(hellcreek, PR_SETTINGS_C_TS_SRC_TK_MASK |
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
46
&hellcreek->ports[port].port_hwtstamp;
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.c
465
void hellcreek_hwtstamp_free(struct hellcreek *hellcreek)
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.h
56
int hellcreek_hwtstamp_setup(struct hellcreek *chip);
drivers/net/dsa/hirschmann/hellcreek_hwtstamp.h
57
void hellcreek_hwtstamp_free(struct hellcreek *chip);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
107
struct hellcreek *hellcreek = ptp_to_hellcreek(ptp);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
114
mutex_lock(&hellcreek->ptp_lock);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
117
hellcreek->seconds = ts->tv_sec;
drivers/net/dsa/hirschmann/hellcreek_ptp.c
118
hellcreek->last_ts = ts->tv_nsec;
drivers/net/dsa/hirschmann/hellcreek_ptp.c
121
hellcreek_ptp_write(hellcreek, 0x00, PR_CLOCK_WRITE_C);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
122
hellcreek_ptp_write(hellcreek, 0x00, PR_CLOCK_WRITE_C);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
123
hellcreek_ptp_write(hellcreek, secl, PR_CLOCK_WRITE_C);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
124
hellcreek_ptp_write(hellcreek, nsh, PR_CLOCK_WRITE_C);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
125
hellcreek_ptp_write(hellcreek, nsl, PR_CLOCK_WRITE_C);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
127
mutex_unlock(&hellcreek->ptp_lock);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
134
struct hellcreek *hellcreek = ptp_to_hellcreek(ptp);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
165
mutex_lock(&hellcreek->ptp_lock);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
168
hellcreek_ptp_write(hellcreek, negative, PR_CLOCK_DRIFT_C);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
169
hellcreek_ptp_write(hellcreek, 0x00, PR_CLOCK_DRIFT_C);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
170
hellcreek_ptp_write(hellcreek, 0x00, PR_CLOCK_DRIFT_C);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
171
hellcreek_ptp_write(hellcreek, addendh, PR_CLOCK_DRIFT_C);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
172
hellcreek_ptp_write(hellcreek, addendl, PR_CLOCK_DRIFT_C);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
174
mutex_unlock(&hellcreek->ptp_lock);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
18
u16 hellcreek_ptp_read(struct hellcreek *hellcreek, unsigned int offset)
drivers/net/dsa/hirschmann/hellcreek_ptp.c
181
struct hellcreek *hellcreek = ptp_to_hellcreek(ptp);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
20
return readw(hellcreek->ptp_base + offset);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
212
mutex_lock(&hellcreek->ptp_lock);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
215
hellcreek_ptp_write(hellcreek, negative, PR_CLOCK_OFFSET_C);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
216
hellcreek_ptp_write(hellcreek, MAX_NS_PER_STEP, PR_CLOCK_OFFSET_C);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
217
hellcreek_ptp_write(hellcreek, MIN_CLK_CYCLES_BETWEEN_STEPS,
drivers/net/dsa/hirschmann/hellcreek_ptp.c
219
hellcreek_ptp_write(hellcreek, countl, PR_CLOCK_OFFSET_C);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
220
hellcreek_ptp_write(hellcreek, counth, PR_CLOCK_OFFSET_C);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
222
mutex_unlock(&hellcreek->ptp_lock);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
23
void hellcreek_ptp_write(struct hellcreek *hellcreek, u16 data,
drivers/net/dsa/hirschmann/hellcreek_ptp.c
236
struct hellcreek *hellcreek;
drivers/net/dsa/hirschmann/hellcreek_ptp.c
238
hellcreek = dw_overflow_to_hellcreek(dw);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
240
mutex_lock(&hellcreek->ptp_lock);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
241
__hellcreek_ptp_gettime(hellcreek, NULL);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
242
mutex_unlock(&hellcreek->ptp_lock);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
244
schedule_delayed_work(&hellcreek->overflow_work,
drivers/net/dsa/hirschmann/hellcreek_ptp.c
248
static enum led_brightness hellcreek_get_brightness(struct hellcreek *hellcreek,
drivers/net/dsa/hirschmann/hellcreek_ptp.c
251
return (hellcreek->status_out & led) ? 1 : 0;
drivers/net/dsa/hirschmann/hellcreek_ptp.c
254
static void hellcreek_set_brightness(struct hellcreek *hellcreek, int led,
drivers/net/dsa/hirschmann/hellcreek_ptp.c
257
mutex_lock(&hellcreek->ptp_lock);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
26
writew(data, hellcreek->ptp_base + offset);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
260
hellcreek->status_out |= led;
drivers/net/dsa/hirschmann/hellcreek_ptp.c
262
hellcreek->status_out &= ~led;
drivers/net/dsa/hirschmann/hellcreek_ptp.c
264
hellcreek_ptp_write(hellcreek, hellcreek->status_out, STATUS_OUT);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
266
mutex_unlock(&hellcreek->ptp_lock);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
272
struct hellcreek *hellcreek = led_to_hellcreek(ldev, led_sync_good);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
274
hellcreek_set_brightness(hellcreek, STATUS_OUT_SYNC_GOOD, b);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
279
struct hellcreek *hellcreek = led_to_hellcreek(ldev, led_sync_good);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
281
return hellcreek_get_brightness(hellcreek, STATUS_OUT_SYNC_GOOD);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
287
struct hellcreek *hellcreek = led_to_hellcreek(ldev, led_is_gm);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
289
hellcreek_set_brightness(hellcreek, STATUS_OUT_IS_GM, b);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
294
struct hellcreek *hellcreek = led_to_hellcreek(ldev, led_is_gm);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
296
return hellcreek_get_brightness(hellcreek, STATUS_OUT_IS_GM);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
30
static u64 hellcreek_ptp_clock_read(struct hellcreek *hellcreek,
drivers/net/dsa/hirschmann/hellcreek_ptp.c
303
static int hellcreek_led_setup(struct hellcreek *hellcreek)
drivers/net/dsa/hirschmann/hellcreek_ptp.c
310
of_node_get(hellcreek->dev->of_node);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
311
leds = of_find_node_by_name(hellcreek->dev->of_node, "leds");
drivers/net/dsa/hirschmann/hellcreek_ptp.c
313
dev_err(hellcreek->dev, "No LEDs specified in device tree!\n");
drivers/net/dsa/hirschmann/hellcreek_ptp.c
317
hellcreek->status_out = 0;
drivers/net/dsa/hirschmann/hellcreek_ptp.c
321
dev_err(hellcreek->dev, "First LED not specified!\n");
drivers/net/dsa/hirschmann/hellcreek_ptp.c
326
hellcreek->led_sync_good.name = ret ? "sync_good" : label;
drivers/net/dsa/hirschmann/hellcreek_ptp.c
331
hellcreek->led_sync_good.brightness = 1;
drivers/net/dsa/hirschmann/hellcreek_ptp.c
334
hellcreek->led_sync_good.brightness =
drivers/net/dsa/hirschmann/hellcreek_ptp.c
335
hellcreek_get_brightness(hellcreek, STATUS_OUT_SYNC_GOOD);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
338
hellcreek->led_sync_good.brightness = 0;
drivers/net/dsa/hirschmann/hellcreek_ptp.c
341
hellcreek->led_sync_good.max_brightness = 1;
drivers/net/dsa/hirschmann/hellcreek_ptp.c
342
hellcreek->led_sync_good.brightness_set = hellcreek_led_sync_good_set;
drivers/net/dsa/hirschmann/hellcreek_ptp.c
343
hellcreek->led_sync_good.brightness_get = hellcreek_led_sync_good_get;
drivers/net/dsa/hirschmann/hellcreek_ptp.c
347
dev_err(hellcreek->dev, "Second LED not specified!\n");
drivers/net/dsa/hirschmann/hellcreek_ptp.c
353
hellcreek->led_is_gm.name = ret ? "is_gm" : label;
drivers/net/dsa/hirschmann/hellcreek_ptp.c
358
hellcreek->led_is_gm.brightness = 1;
drivers/net/dsa/hirschmann/hellcreek_ptp.c
36
hellcreek_ptp_write(hellcreek, PR_COMMAND_C_SS, PR_COMMAND_C);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
361
hellcreek->led_is_gm.brightness =
drivers/net/dsa/hirschmann/hellcreek_ptp.c
362
hellcreek_get_brightness(hellcreek, STATUS_OUT_IS_GM);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
365
hellcreek->led_is_gm.brightness = 0;
drivers/net/dsa/hirschmann/hellcreek_ptp.c
368
hellcreek->led_is_gm.max_brightness = 1;
drivers/net/dsa/hirschmann/hellcreek_ptp.c
369
hellcreek->led_is_gm.brightness_set = hellcreek_led_is_gm_set;
drivers/net/dsa/hirschmann/hellcreek_ptp.c
370
hellcreek->led_is_gm.brightness_get = hellcreek_led_is_gm_get;
drivers/net/dsa/hirschmann/hellcreek_ptp.c
373
if (hellcreek->led_sync_good.brightness == 1)
drivers/net/dsa/hirschmann/hellcreek_ptp.c
374
hellcreek_set_brightness(hellcreek, STATUS_OUT_SYNC_GOOD, 1);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
375
if (hellcreek->led_is_gm.brightness == 1)
drivers/net/dsa/hirschmann/hellcreek_ptp.c
376
hellcreek_set_brightness(hellcreek, STATUS_OUT_IS_GM, 1);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
379
ret = led_classdev_register(hellcreek->dev, &hellcreek->led_sync_good);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
381
dev_err(hellcreek->dev, "Failed to register sync_good LED\n");
drivers/net/dsa/hirschmann/hellcreek_ptp.c
385
ret = led_classdev_register(hellcreek->dev, &hellcreek->led_is_gm);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
387
dev_err(hellcreek->dev, "Failed to register is_gm LED\n");
drivers/net/dsa/hirschmann/hellcreek_ptp.c
388
led_classdev_unregister(&hellcreek->led_sync_good);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
400
int hellcreek_ptp_setup(struct hellcreek *hellcreek)
drivers/net/dsa/hirschmann/hellcreek_ptp.c
406
INIT_DELAYED_WORK(&hellcreek->overflow_work,
drivers/net/dsa/hirschmann/hellcreek_ptp.c
410
hellcreek->ptp_clock_info.owner = THIS_MODULE;
drivers/net/dsa/hirschmann/hellcreek_ptp.c
411
snprintf(hellcreek->ptp_clock_info.name,
drivers/net/dsa/hirschmann/hellcreek_ptp.c
412
sizeof(hellcreek->ptp_clock_info.name),
drivers/net/dsa/hirschmann/hellcreek_ptp.c
413
dev_name(hellcreek->dev));
drivers/net/dsa/hirschmann/hellcreek_ptp.c
419
hellcreek->ptp_clock_info.max_adj = 62500000;
drivers/net/dsa/hirschmann/hellcreek_ptp.c
420
hellcreek->ptp_clock_info.n_alarm = 0;
drivers/net/dsa/hirschmann/hellcreek_ptp.c
421
hellcreek->ptp_clock_info.n_pins = 0;
drivers/net/dsa/hirschmann/hellcreek_ptp.c
422
hellcreek->ptp_clock_info.n_ext_ts = 0;
drivers/net/dsa/hirschmann/hellcreek_ptp.c
423
hellcreek->ptp_clock_info.n_per_out = 0;
drivers/net/dsa/hirschmann/hellcreek_ptp.c
424
hellcreek->ptp_clock_info.pps = 0;
drivers/net/dsa/hirschmann/hellcreek_ptp.c
425
hellcreek->ptp_clock_info.adjfine = hellcreek_ptp_adjfine;
drivers/net/dsa/hirschmann/hellcreek_ptp.c
426
hellcreek->ptp_clock_info.adjtime = hellcreek_ptp_adjtime;
drivers/net/dsa/hirschmann/hellcreek_ptp.c
427
hellcreek->ptp_clock_info.gettimex64 = hellcreek_ptp_gettimex;
drivers/net/dsa/hirschmann/hellcreek_ptp.c
428
hellcreek->ptp_clock_info.settime64 = hellcreek_ptp_settime;
drivers/net/dsa/hirschmann/hellcreek_ptp.c
429
hellcreek->ptp_clock_info.enable = hellcreek_ptp_enable;
drivers/net/dsa/hirschmann/hellcreek_ptp.c
430
hellcreek->ptp_clock_info.do_aux_work = hellcreek_hwtstamp_work;
drivers/net/dsa/hirschmann/hellcreek_ptp.c
432
hellcreek->ptp_clock = ptp_clock_register(&hellcreek->ptp_clock_info,
drivers/net/dsa/hirschmann/hellcreek_ptp.c
433
hellcreek->dev);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
434
if (IS_ERR(hellcreek->ptp_clock))
drivers/net/dsa/hirschmann/hellcreek_ptp.c
435
return PTR_ERR(hellcreek->ptp_clock);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
440
status = hellcreek_ptp_read(hellcreek, PR_CLOCK_STATUS_C);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
442
hellcreek_ptp_write(hellcreek,
drivers/net/dsa/hirschmann/hellcreek_ptp.c
447
hellcreek_ptp_write(hellcreek, status | PR_CLOCK_STATUS_C_ENA_DRIFT,
drivers/net/dsa/hirschmann/hellcreek_ptp.c
45
nsh = hellcreek_ptp_read(hellcreek, PR_SS_SYNC_DATA_C);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
451
ret = hellcreek_led_setup(hellcreek);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
453
if (hellcreek->ptp_clock)
drivers/net/dsa/hirschmann/hellcreek_ptp.c
454
ptp_clock_unregister(hellcreek->ptp_clock);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
458
schedule_delayed_work(&hellcreek->overflow_work,
drivers/net/dsa/hirschmann/hellcreek_ptp.c
46
nsh = hellcreek_ptp_read(hellcreek, PR_SS_SYNC_DATA_C);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
464
void hellcreek_ptp_free(struct hellcreek *hellcreek)
drivers/net/dsa/hirschmann/hellcreek_ptp.c
466
led_classdev_unregister(&hellcreek->led_is_gm);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
467
led_classdev_unregister(&hellcreek->led_sync_good);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
468
cancel_delayed_work_sync(&hellcreek->overflow_work);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
469
if (hellcreek->ptp_clock)
drivers/net/dsa/hirschmann/hellcreek_ptp.c
47
nsh = hellcreek_ptp_read(hellcreek, PR_SS_SYNC_DATA_C);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
470
ptp_clock_unregister(hellcreek->ptp_clock);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
471
hellcreek->ptp_clock = NULL;
drivers/net/dsa/hirschmann/hellcreek_ptp.c
48
nsh = hellcreek_ptp_read(hellcreek, PR_SS_SYNC_DATA_C);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
50
nsl = hellcreek_ptp_read(hellcreek, PR_SS_SYNC_DATA_C);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
56
static u64 __hellcreek_ptp_gettime(struct hellcreek *hellcreek,
drivers/net/dsa/hirschmann/hellcreek_ptp.c
61
ns = hellcreek_ptp_clock_read(hellcreek, sts);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
62
if (ns < hellcreek->last_ts)
drivers/net/dsa/hirschmann/hellcreek_ptp.c
63
hellcreek->seconds++;
drivers/net/dsa/hirschmann/hellcreek_ptp.c
64
hellcreek->last_ts = ns;
drivers/net/dsa/hirschmann/hellcreek_ptp.c
65
ns += hellcreek->seconds * NSEC_PER_SEC;
drivers/net/dsa/hirschmann/hellcreek_ptp.c
75
u64 hellcreek_ptp_gettime_seconds(struct hellcreek *hellcreek, u64 ns)
drivers/net/dsa/hirschmann/hellcreek_ptp.c
79
__hellcreek_ptp_gettime(hellcreek, NULL);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
80
if (hellcreek->last_ts > ns)
drivers/net/dsa/hirschmann/hellcreek_ptp.c
81
s = hellcreek->seconds * NSEC_PER_SEC;
drivers/net/dsa/hirschmann/hellcreek_ptp.c
83
s = (hellcreek->seconds - 1) * NSEC_PER_SEC;
drivers/net/dsa/hirschmann/hellcreek_ptp.c
92
struct hellcreek *hellcreek = ptp_to_hellcreek(ptp);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
95
mutex_lock(&hellcreek->ptp_lock);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
96
ns = __hellcreek_ptp_gettime(hellcreek, sts);
drivers/net/dsa/hirschmann/hellcreek_ptp.c
97
mutex_unlock(&hellcreek->ptp_lock);
drivers/net/dsa/hirschmann/hellcreek_ptp.h
60
int hellcreek_ptp_setup(struct hellcreek *hellcreek);
drivers/net/dsa/hirschmann/hellcreek_ptp.h
61
void hellcreek_ptp_free(struct hellcreek *hellcreek);
drivers/net/dsa/hirschmann/hellcreek_ptp.h
62
u16 hellcreek_ptp_read(struct hellcreek *hellcreek, unsigned int offset);
drivers/net/dsa/hirschmann/hellcreek_ptp.h
63
void hellcreek_ptp_write(struct hellcreek *hellcreek, u16 data,
drivers/net/dsa/hirschmann/hellcreek_ptp.h
65
u64 hellcreek_ptp_gettime_seconds(struct hellcreek *hellcreek, u64 ns);
drivers/net/dsa/hirschmann/hellcreek_ptp.h
68
container_of(ptp, struct hellcreek, ptp_clock_info)
drivers/net/dsa/hirschmann/hellcreek_ptp.h
71
container_of(dw, struct hellcreek, overflow_work)
drivers/net/dsa/hirschmann/hellcreek_ptp.h
74
container_of(ldev, struct hellcreek, led)