drivers/net/ethernet/ti/icssg/icssg_common.c
1107
if (emac->prueth->is_switch_mode)
drivers/net/ethernet/ti/icssg/icssg_common.c
1185
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssg/icssg_common.c
1243
if (prueth->is_hsr_offload_mode &&
drivers/net/ethernet/ti/icssg/icssg_common.c
1247
if (prueth->is_hsr_offload_mode &&
drivers/net/ethernet/ti/icssg/icssg_common.c
1708
void prueth_netdev_exit(struct prueth *prueth,
drivers/net/ethernet/ti/icssg/icssg_common.c
1718
emac = prueth->emac[mac];
drivers/net/ethernet/ti/icssg/icssg_common.c
1727
pruss_release_mem_region(prueth->pruss, &emac->dram);
drivers/net/ethernet/ti/icssg/icssg_common.c
1729
prueth->emac[mac] = NULL;
drivers/net/ethernet/ti/icssg/icssg_common.c
1733
int prueth_get_cores(struct prueth *prueth, int slice, bool is_sr1)
drivers/net/ethernet/ti/icssg/icssg_common.c
1735
struct device *dev = prueth->dev;
drivers/net/ethernet/ti/icssg/icssg_common.c
1753
prueth->pru[slice] = pru_rproc_get(np, idx, &pruss_id);
drivers/net/ethernet/ti/icssg/icssg_common.c
1754
if (IS_ERR(prueth->pru[slice])) {
drivers/net/ethernet/ti/icssg/icssg_common.c
1755
ret = PTR_ERR(prueth->pru[slice]);
drivers/net/ethernet/ti/icssg/icssg_common.c
1756
prueth->pru[slice] = NULL;
drivers/net/ethernet/ti/icssg/icssg_common.c
1759
prueth->pru_id[slice] = pruss_id;
drivers/net/ethernet/ti/icssg/icssg_common.c
1762
prueth->rtu[slice] = pru_rproc_get(np, idx, NULL);
drivers/net/ethernet/ti/icssg/icssg_common.c
1763
if (IS_ERR(prueth->rtu[slice])) {
drivers/net/ethernet/ti/icssg/icssg_common.c
1764
ret = PTR_ERR(prueth->rtu[slice]);
drivers/net/ethernet/ti/icssg/icssg_common.c
1765
prueth->rtu[slice] = NULL;
drivers/net/ethernet/ti/icssg/icssg_common.c
1773
prueth->txpru[slice] = pru_rproc_get(np, idx, NULL);
drivers/net/ethernet/ti/icssg/icssg_common.c
1774
if (IS_ERR(prueth->txpru[slice])) {
drivers/net/ethernet/ti/icssg/icssg_common.c
1775
ret = PTR_ERR(prueth->txpru[slice]);
drivers/net/ethernet/ti/icssg/icssg_common.c
1776
prueth->txpru[slice] = NULL;
drivers/net/ethernet/ti/icssg/icssg_common.c
1784
void prueth_put_cores(struct prueth *prueth, int slice)
drivers/net/ethernet/ti/icssg/icssg_common.c
1786
if (prueth->txpru[slice])
drivers/net/ethernet/ti/icssg/icssg_common.c
1787
pru_rproc_put(prueth->txpru[slice]);
drivers/net/ethernet/ti/icssg/icssg_common.c
1789
if (prueth->rtu[slice])
drivers/net/ethernet/ti/icssg/icssg_common.c
1790
pru_rproc_put(prueth->rtu[slice]);
drivers/net/ethernet/ti/icssg/icssg_common.c
1792
if (prueth->pru[slice])
drivers/net/ethernet/ti/icssg/icssg_common.c
1793
pru_rproc_put(prueth->pru[slice]);
drivers/net/ethernet/ti/icssg/icssg_common.c
1800
struct prueth *prueth = dev_get_drvdata(dev);
drivers/net/ethernet/ti/icssg/icssg_common.c
1805
ndev = prueth->registered_netdevs[i];
drivers/net/ethernet/ti/icssg/icssg_common.c
1825
struct prueth *prueth = dev_get_drvdata(dev);
drivers/net/ethernet/ti/icssg/icssg_common.c
1830
ndev = prueth->registered_netdevs[i];
drivers/net/ethernet/ti/icssg/icssg_common.c
360
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssg/icssg_common.c
374
dev_err(prueth->dev, "unable to request TX IRQ %d\n",
drivers/net/ethernet/ti/icssg/icssg_common.c
396
struct device *dev = emac->prueth->dev;
drivers/net/ethernet/ti/icssg/icssg_common.c
478
pp_params.nid = dev_to_node(emac->prueth->dev);
drivers/net/ethernet/ti/icssg/icssg_common.c
497
struct device *dev = emac->prueth->dev;
drivers/net/ethernet/ti/icssg/icssg_common.c
582
rx_flow_cfg.rxfdq_cfg.mode = emac->prueth->pdata.fdqring_mode;
drivers/net/ethernet/ti/icssg/icssg_common.c
667
u32 hi_sw = readl(emac->prueth->shram.va +
drivers/net/ethernet/ti/icssg/icssg_common.c
912
if (emac->prueth->is_switch_mode)
drivers/net/ethernet/ti/icssg/icssg_config.c
115
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssg/icssg_config.c
120
mii_rt = prueth->mii_rt;
drivers/net/ethernet/ti/icssg/icssg_config.c
142
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssg/icssg_config.c
147
mii_rt = prueth->mii_rt;
drivers/net/ethernet/ti/icssg/icssg_config.c
168
static void icssg_miig_queues_init(struct prueth *prueth, int slice)
drivers/net/ethernet/ti/icssg/icssg_config.c
170
struct regmap *miig_rt = prueth->miig_rt;
drivers/net/ethernet/ti/icssg/icssg_config.c
171
void __iomem *smem = prueth->shram.va;
drivers/net/ethernet/ti/icssg/icssg_config.c
228
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssg/icssg_config.c
252
icssg_mii_update_ipg(prueth->mii_rt, slice, ipg);
drivers/net/ethernet/ti/icssg/icssg_config.c
288
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssg/icssg_config.c
293
addr = lower_32_bits(prueth->msmcram.pa);
drivers/net/ethernet/ti/icssg/icssg_config.c
295
if (prueth->pdata.banked_ms_ram)
drivers/net/ethernet/ti/icssg/icssg_config.c
302
dev_warn(prueth->dev, "buffer pool needs to be 64KB aligned\n");
drivers/net/ethernet/ti/icssg/icssg_config.c
375
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssg/icssg_config.c
380
addr = lower_32_bits(prueth->msmcram.pa);
drivers/net/ethernet/ti/icssg/icssg_config.c
382
if (prueth->pdata.banked_ms_ram)
drivers/net/ethernet/ti/icssg/icssg_config.c
389
dev_warn(prueth->dev, "buffer pool needs to be 64KB aligned\n");
drivers/net/ethernet/ti/icssg/icssg_config.c
457
void icssg_init_emac_mode(struct prueth *prueth)
drivers/net/ethernet/ti/icssg/icssg_config.c
462
u32 addr = prueth->shram.pa + EMAC_ICSSG_SWITCH_DEFAULT_VLAN_TABLE_OFFSET;
drivers/net/ethernet/ti/icssg/icssg_config.c
467
regmap_update_bits(prueth->miig_rt, FDB_GEN_CFG1, SMEM_VLAN_OFFSET_MASK,
drivers/net/ethernet/ti/icssg/icssg_config.c
469
regmap_update_bits(prueth->miig_rt, FDB_GEN_CFG1, FDB_HASH_SIZE_MASK,
drivers/net/ethernet/ti/icssg/icssg_config.c
472
regmap_write(prueth->miig_rt, FDB_GEN_CFG2, (FDB_PRU0_EN | FDB_PRU1_EN | FDB_HOST_EN));
drivers/net/ethernet/ti/icssg/icssg_config.c
473
prueth->vlan_tbl = (struct prueth_vlan_tbl __force *)(prueth->shram.va +
drivers/net/ethernet/ti/icssg/icssg_config.c
476
prueth->vlan_tbl[i].fid = i;
drivers/net/ethernet/ti/icssg/icssg_config.c
477
prueth->vlan_tbl[i].fid_c1 = 0;
drivers/net/ethernet/ti/icssg/icssg_config.c
480
icssg_class_set_host_mac_addr(prueth->miig_rt, mac);
drivers/net/ethernet/ti/icssg/icssg_config.c
484
void icssg_init_fw_offload_mode(struct prueth *prueth)
drivers/net/ethernet/ti/icssg/icssg_config.c
486
u32 addr = prueth->shram.pa + EMAC_ICSSG_SWITCH_DEFAULT_VLAN_TABLE_OFFSET;
drivers/net/ethernet/ti/icssg/icssg_config.c
490
regmap_update_bits(prueth->miig_rt, FDB_GEN_CFG1, SMEM_VLAN_OFFSET_MASK,
drivers/net/ethernet/ti/icssg/icssg_config.c
492
regmap_update_bits(prueth->miig_rt, FDB_GEN_CFG1, FDB_HASH_SIZE_MASK,
drivers/net/ethernet/ti/icssg/icssg_config.c
495
regmap_write(prueth->miig_rt, FDB_GEN_CFG2, FDB_EN_ALL);
drivers/net/ethernet/ti/icssg/icssg_config.c
496
prueth->vlan_tbl = (struct prueth_vlan_tbl __force *)(prueth->shram.va +
drivers/net/ethernet/ti/icssg/icssg_config.c
499
prueth->vlan_tbl[i].fid = i;
drivers/net/ethernet/ti/icssg/icssg_config.c
500
prueth->vlan_tbl[i].fid_c1 = 0;
drivers/net/ethernet/ti/icssg/icssg_config.c
503
if (prueth->hw_bridge_dev)
drivers/net/ethernet/ti/icssg/icssg_config.c
504
icssg_class_set_host_mac_addr(prueth->miig_rt, prueth->hw_bridge_dev->dev_addr);
drivers/net/ethernet/ti/icssg/icssg_config.c
505
icssg_set_pvid(prueth, prueth->default_vlan, PRUETH_PORT_HOST);
drivers/net/ethernet/ti/icssg/icssg_config.c
509
int icssg_config(struct prueth *prueth, struct prueth_emac *emac, int slice)
drivers/net/ethernet/ti/icssg/icssg_config.c
516
icssg_miig_queues_init(prueth, slice);
drivers/net/ethernet/ti/icssg/icssg_config.c
524
regmap_update_bits(prueth->miig_rt, ICSSG_CFG_OFFSET,
drivers/net/ethernet/ti/icssg/icssg_config.c
526
icssg_miig_set_interface_mode(prueth->miig_rt, slice, emac->phy_if);
drivers/net/ethernet/ti/icssg/icssg_config.c
527
if (prueth->is_switch_mode || prueth->is_hsr_offload_mode)
drivers/net/ethernet/ti/icssg/icssg_config.c
532
icssg_update_rgmii_cfg(prueth->miig_rt, emac);
drivers/net/ethernet/ti/icssg/icssg_config.c
535
pruss_cfg_gpimode(prueth->pruss, prueth->pru_id[slice],
drivers/net/ethernet/ti/icssg/icssg_config.c
539
pruss_cfg_xfr_enable(prueth->pruss, PRU_TYPE_PRU, true);
drivers/net/ethernet/ti/icssg/icssg_config.c
540
pruss_cfg_xfr_enable(prueth->pruss, PRU_TYPE_RTU, true);
drivers/net/ethernet/ti/icssg/icssg_config.c
543
pru_rproc_set_ctable(prueth->pru[slice], PRU_C28, 0x100 << 8);
drivers/net/ethernet/ti/icssg/icssg_config.c
544
pru_rproc_set_ctable(prueth->rtu[slice], PRU_C28, 0x100 << 8);
drivers/net/ethernet/ti/icssg/icssg_config.c
545
pru_rproc_set_ctable(prueth->txpru[slice], PRU_C28, 0x100 << 8);
drivers/net/ethernet/ti/icssg/icssg_config.c
553
if (prueth->is_switch_mode || prueth->is_hsr_offload_mode)
drivers/net/ethernet/ti/icssg/icssg_config.c
667
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssg/icssg_config.c
671
addr = icssg_queue_pop(prueth, slice == 0 ?
drivers/net/ethernet/ti/icssg/icssg_config.c
679
memcpy_toio(prueth->shram.va + addr + 4, cmd, sizeof(*cmd));
drivers/net/ethernet/ti/icssg/icssg_config.c
680
icssg_queue_push(prueth, slice == 0 ?
drivers/net/ethernet/ti/icssg/icssg_config.c
683
2000, 20000000, false, prueth, slice == 0 ?
drivers/net/ethernet/ti/icssg/icssg_config.c
690
memcpy_fromio(rsp, prueth->shram.va + addr, sizeof(*rsp));
drivers/net/ethernet/ti/icssg/icssg_config.c
692
icssg_queue_push(prueth, slice == 0 ?
drivers/net/ethernet/ti/icssg/icssg_config.c
716
fdb_cmd->seqnum = ++(emac->prueth->icssg_hwcmdseq);
drivers/net/ethernet/ti/icssg/icssg_config.c
785
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssg/icssg_config.c
789
tbl = prueth->vlan_tbl;
drivers/net/ethernet/ti/icssg/icssg_config.c
790
spin_lock(&prueth->vtbl_lock);
drivers/net/ethernet/ti/icssg/icssg_config.c
806
spin_unlock(&prueth->vtbl_lock);
drivers/net/ethernet/ti/icssg/icssg_config.c
812
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssg/icssg_config.c
816
pvid = readl(prueth->shram.va + EMAC_ICSSG_SWITCH_PORT1_DEFAULT_VLAN_OFFSET);
drivers/net/ethernet/ti/icssg/icssg_config.c
818
pvid = readl(prueth->shram.va + EMAC_ICSSG_SWITCH_PORT2_DEFAULT_VLAN_OFFSET);
drivers/net/ethernet/ti/icssg/icssg_config.c
826
void icssg_set_pvid(struct prueth *prueth, u8 vid, u8 port)
drivers/net/ethernet/ti/icssg/icssg_config.c
834
writel(pvid, prueth->shram.va + EMAC_ICSSG_SWITCH_PORT1_DEFAULT_VLAN_OFFSET);
drivers/net/ethernet/ti/icssg/icssg_config.c
836
writel(pvid, prueth->shram.va + EMAC_ICSSG_SWITCH_PORT2_DEFAULT_VLAN_OFFSET);
drivers/net/ethernet/ti/icssg/icssg_config.c
838
writel(pvid, prueth->shram.va + EMAC_ICSSG_SWITCH_PORT0_DEFAULT_VLAN_OFFSET);
drivers/net/ethernet/ti/icssg/icssg_config.c
851
fdb_cmd.seqnum = ++(emac->prueth->icssg_hwcmdseq);
drivers/net/ethernet/ti/icssg/icssg_ethtool.c
115
if (emac->prueth->pa_stats)
drivers/net/ethernet/ti/icssg/icssg_ethtool.c
15
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssg/icssg_ethtool.c
17
strscpy(info->driver, dev_driver_string(prueth->dev),
drivers/net/ethernet/ti/icssg/icssg_ethtool.c
19
strscpy(info->bus_info, dev_name(prueth->dev), sizeof(info->bus_info));
drivers/net/ethernet/ti/icssg/icssg_ethtool.c
248
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssg/icssg_ethtool.c
255
dev_info(prueth->dev, "defaulting to min value of %dus for rx-usecs\n",
drivers/net/ethernet/ti/icssg/icssg_ethtool.c
262
dev_info(prueth->dev, "defaulting to min value of %dus for tx-usecs\n",
drivers/net/ethernet/ti/icssg/icssg_ethtool.c
277
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssg/icssg_ethtool.c
287
dev_info(prueth->dev, "defaulting to min value of %dus for tx-usecs for tx-%u\n",
drivers/net/ethernet/ti/icssg/icssg_ethtool.c
74
if (emac->prueth->pa_stats)
drivers/net/ethernet/ti/icssg/icssg_ethtool.c
94
if (emac->prueth->pa_stats)
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1017
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1026
if (emac->prueth->is_hsr_offload_mode)
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1040
if (prueth->emacs_initialized == 1)
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1041
prueth_emac_common_stop(prueth);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1051
prueth->emacs_initialized--;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
107
hi_sw = readl(emac->prueth->shram.va +
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1081
if (emac->prueth->is_hsr_offload_mode) {
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1085
vlan_for_each(emac->prueth->hsr_dev,
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1140
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1144
if (prueth->is_hsr_offload_mode)
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1152
icssg_set_pvid(emac->prueth, vid, emac->port_id);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1161
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1165
if (prueth->is_hsr_offload_mode)
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1434
static int prueth_netdev_init(struct prueth *prueth,
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1457
emac->prueth = prueth;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1466
ret = pruss_request_mem_region(prueth->pruss,
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1471
dev_err(prueth->dev, "unable to get DRAM: %d\n", ret);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
148
static int prueth_emac_start(struct prueth *prueth)
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1481
emac->tx_ts_irq = platform_get_irq_byname_optional(prueth->pdev, irq_name);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1483
ret = dev_err_probe(prueth->dev, emac->tx_ts_irq, "could not get tx_ts_irq\n");
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1487
SET_NETDEV_DEV(ndev, prueth->dev);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1493
dev_err(prueth->dev, "couldn't find phy-handle\n");
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1499
dev_err_probe(prueth->dev, ret, "failed to register fixed-link phy\n");
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1508
dev_err(prueth->dev, "could not get phy-mode property\n");
drivers/net/ethernet/ti/icssg/icssg_prueth.c
151
struct device *dev = prueth->dev;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1514
dev_err(prueth->dev, "PHY mode unsupported %s\n", phy_modes(emac->phy_if));
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1533
dev_err(prueth->dev, "RGMII mode without TX delay is not supported");
drivers/net/ethernet/ti/icssg/icssg_prueth.c
154
if (prueth->is_switch_mode)
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1544
dev_warn(prueth->dev, "port %d: using random MAC addr: %pM\n",
drivers/net/ethernet/ti/icssg/icssg_prueth.c
155
firmwares = prueth->icssg_switch_firmwares;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
156
else if (prueth->is_hsr_offload_mode && HSR_V1 == prueth->hsr_prp_version)
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1566
prueth->emac[mac] = emac;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
157
firmwares = prueth->icssg_hsr_firmwares;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1571
pruss_release_mem_region(prueth->pruss, &emac->dram);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1574
prueth->emac[mac] = NULL;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
158
else if (prueth->is_hsr_offload_mode && PRP_V1 == prueth->hsr_prp_version)
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1585
return emac->prueth->is_switch_mode;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
159
firmwares = prueth->icssg_prp_firmwares;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1591
static void prueth_offload_fwd_mark_update(struct prueth *prueth)
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1596
if (prueth->br_members == (BIT(PRUETH_PORT_MII0) | BIT(PRUETH_PORT_MII1)))
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1599
dev_dbg(prueth->dev, "set offload_fwd_mark %d\n", set_val);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1602
struct prueth_emac *emac = prueth->emac[i];
drivers/net/ethernet/ti/icssg/icssg_prueth.c
161
firmwares = prueth->icssg_emac_firmwares;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1611
static int prueth_emac_restart(struct prueth *prueth)
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1613
struct prueth_emac *emac0 = prueth->emac[PRUETH_MAC0];
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1614
struct prueth_emac *emac1 = prueth->emac[PRUETH_MAC1];
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1630
ret = prueth_emac_common_stop(prueth);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1632
dev_err(prueth->dev, "Failed to stop the firmwares");
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1637
ret = prueth_emac_common_start(prueth);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1639
dev_err(prueth->dev, "Failed to start the firmwares");
drivers/net/ethernet/ti/icssg/icssg_prueth.c
164
ret = prueth_start(prueth->pru[slice], firmwares[slice].pru);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1654
static void icssg_change_mode(struct prueth *prueth)
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1658
ret = prueth_emac_restart(prueth);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1660
dev_err(prueth->dev, "Failed to restart the firmwares, aborting the process");
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1664
icssg_enable_fw_offload(prueth);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1672
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1675
if (!prueth->br_members) {
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1676
prueth->hw_bridge_dev = br_ndev;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1681
if (prueth->hw_bridge_dev != br_ndev)
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1686
&prueth->prueth_switchdev_nb,
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1687
&prueth->prueth_switchdev_bl_nb,
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1692
prueth->br_members |= BIT(emac->port_id);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1694
if (!prueth->is_switch_mode) {
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1695
if (prueth->br_members & BIT(PRUETH_PORT_MII0) &&
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1696
prueth->br_members & BIT(PRUETH_PORT_MII1)) {
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1697
prueth->is_switch_mode = true;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1698
prueth->default_vlan = PRUETH_DFLT_VLAN_SW;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1699
emac->port_vlan = prueth->default_vlan;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
170
ret = prueth_start(prueth->rtu[slice], firmwares[slice].rtu);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1700
icssg_change_mode(prueth);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1704
prueth_offload_fwd_mark_update(prueth);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1712
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1715
prueth->br_members &= ~BIT(emac->port_id);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1717
if (prueth->is_switch_mode) {
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1718
prueth->is_switch_mode = false;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1720
ret = prueth_emac_restart(prueth);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1722
dev_err(prueth->dev, "Failed to restart the firmwares, aborting the process");
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1727
prueth_offload_fwd_mark_update(prueth);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1729
if (!prueth->br_members)
drivers/net/ethernet/ti/icssg/icssg_prueth.c
173
rproc_shutdown(prueth->pru[slice]);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1730
prueth->hw_bridge_dev = NULL;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1736
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1740
emac0 = prueth->emac[PRUETH_MAC0];
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1741
emac1 = prueth->emac[PRUETH_MAC1];
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1743
if (prueth->is_switch_mode)
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1746
prueth->hsr_members |= BIT(emac->port_id);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1747
if (!prueth->is_hsr_offload_mode) {
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1748
if (prueth->hsr_members & BIT(PRUETH_PORT_MII0) &&
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1749
prueth->hsr_members & BIT(PRUETH_PORT_MII1)) {
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1755
prueth->is_hsr_offload_mode = true;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1756
prueth->default_vlan = PRUETH_DFLT_VLAN_HSR;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1757
emac0->port_vlan = prueth->default_vlan;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1758
emac1->port_vlan = prueth->default_vlan;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1759
icssg_change_mode(prueth);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
177
ret = prueth_start(prueth->txpru[slice], firmwares[slice].txpru);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1770
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1775
emac0 = prueth->emac[PRUETH_MAC0];
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1776
emac1 = prueth->emac[PRUETH_MAC1];
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1778
prueth->hsr_members &= ~BIT(emac->port_id);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1779
if (prueth->is_hsr_offload_mode) {
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1780
prueth->is_hsr_offload_mode = false;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1783
prueth->hsr_dev = NULL;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1784
ret = prueth_emac_restart(prueth);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1786
dev_err(prueth->dev, "Failed to restart the firmwares, aborting the process");
drivers/net/ethernet/ti/icssg/icssg_prueth.c
180
rproc_shutdown(prueth->rtu[slice]);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1801
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
181
rproc_shutdown(prueth->pru[slice]);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1817
prueth->hsr_prp_version = hsr_ndev_version;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1820
if (!prueth->hsr_dev) {
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1821
prueth->hsr_dev = info->upper_dev;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1822
icssg_class_set_host_mac_addr(prueth->miig_rt,
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1823
prueth->hsr_dev->dev_addr);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1825
if (prueth->hsr_dev != info->upper_dev) {
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1850
static int prueth_register_notifiers(struct prueth *prueth)
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1854
prueth->prueth_netdevice_nb.notifier_call = &prueth_netdevice_event;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1855
ret = register_netdevice_notifier(&prueth->prueth_netdevice_nb);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1857
dev_err(prueth->dev, "can't register netdevice notifier\n");
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1861
ret = prueth_switchdev_register_notifiers(prueth);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1863
unregister_netdevice_notifier(&prueth->prueth_netdevice_nb);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1868
static void prueth_unregister_notifiers(struct prueth *prueth)
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1870
prueth_switchdev_unregister_notifiers(prueth);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1871
unregister_netdevice_notifier(&prueth->prueth_netdevice_nb);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
190
prueth_shutdown(prueth->txpru[slice]);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
191
prueth_shutdown(prueth->rtu[slice]);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
192
prueth_shutdown(prueth->pru[slice]);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1965
struct prueth *prueth;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1975
prueth = devm_kzalloc(dev, sizeof(*prueth), GFP_KERNEL);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1976
if (!prueth)
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1979
dev_set_drvdata(dev, prueth);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
198
static void prueth_emac_stop(struct prueth *prueth)
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1980
prueth->pdev = pdev;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1981
prueth->pdata = *(const struct prueth_pdata *)device_get_match_data(dev);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
1983
prueth->dev = dev;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
203
prueth_shutdown(prueth->txpru[slice]);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2032
prueth->eth_node[PRUETH_MAC0] = eth0_node;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2033
prueth->eth_node[PRUETH_MAC1] = eth1_node;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2035
prueth->miig_rt = syscon_regmap_lookup_by_phandle(np, "ti,mii-g-rt");
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2036
if (IS_ERR(prueth->miig_rt)) {
drivers/net/ethernet/ti/icssg/icssg_prueth.c
204
prueth_shutdown(prueth->rtu[slice]);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2041
prueth->mii_rt = syscon_regmap_lookup_by_phandle(np, "ti,mii-rt");
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2042
if (IS_ERR(prueth->mii_rt)) {
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2047
prueth->pa_stats = syscon_regmap_lookup_by_phandle(np, "ti,pa-stats");
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2048
if (IS_ERR(prueth->pa_stats)) {
drivers/net/ethernet/ti/icssg/icssg_prueth.c
205
prueth_shutdown(prueth->pru[slice]);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2050
prueth->pa_stats = NULL;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2054
ret = prueth_get_cores(prueth, ICSS_SLICE0, false);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2057
ret = prueth_get_cores(prueth, ICSS_SLICE1, false);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2063
prueth->pru[ICSS_SLICE0] : prueth->pru[ICSS_SLICE1]);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2070
prueth->pruss = pruss;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2073
&prueth->shram);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2079
prueth->sram_pool = of_gen_pool_get(np, "sram", 0);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2080
if (!prueth->sram_pool) {
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2087
prueth->is_switchmode_supported = prueth->pdata.switch_mode;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2088
if (prueth->pdata.banked_ms_ram) {
drivers/net/ethernet/ti/icssg/icssg_prueth.c
209
static void icssg_enable_fw_offload(struct prueth *prueth)
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2093
if (prueth->is_switchmode_supported)
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2098
prueth->msmcram.va =
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2099
(void __iomem *)gen_pool_alloc_algo(prueth->sram_pool,
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2104
if (!prueth->msmcram.va) {
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2109
prueth->msmcram.pa = gen_pool_virt_to_phys(prueth->sram_pool,
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2110
(unsigned long)prueth->msmcram.va);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2111
prueth->msmcram.size = msmc_ram_size;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2112
memset_io(prueth->msmcram.va, 0, msmc_ram_size);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2113
dev_dbg(dev, "sram: pa %llx va %p size %zx\n", prueth->msmcram.pa,
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2114
prueth->msmcram.va, prueth->msmcram.size);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2116
prueth->iep0 = icss_iep_get_idx(np, 0);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2117
if (IS_ERR(prueth->iep0)) {
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2118
ret = dev_err_probe(dev, PTR_ERR(prueth->iep0), "iep0 get failed\n");
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2119
prueth->iep0 = NULL;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2123
prueth->iep1 = icss_iep_get_idx(np, 1);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2124
if (IS_ERR(prueth->iep1)) {
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2125
ret = dev_err_probe(dev, PTR_ERR(prueth->iep1), "iep1 get failed\n");
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2129
if (prueth->pdata.quirk_10m_link_issue) {
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2133
icss_iep_init_fw(prueth->iep1);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2137
icssg_read_firmware_names(np, prueth->icssg_emac_firmwares);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2140
icssg_mode_firmware_names(dev, prueth->icssg_emac_firmwares,
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2141
prueth->icssg_switch_firmwares, "eth", "sw");
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2142
icssg_mode_firmware_names(dev, prueth->icssg_emac_firmwares,
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2143
prueth->icssg_hsr_firmwares, "eth", "hsr");
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2144
icssg_mode_firmware_names(dev, prueth->icssg_emac_firmwares,
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2145
prueth->icssg_prp_firmwares, "eth", "prp");
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2147
spin_lock_init(&prueth->vtbl_lock);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2148
spin_lock_init(&prueth->stats_lock);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
215
emac = prueth->emac[mac];
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2151
ret = prueth_netdev_init(prueth, eth0_node);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2158
prueth->emac[PRUETH_MAC0]->half_duplex =
drivers/net/ethernet/ti/icssg/icssg_prueth.c
216
if (prueth->is_hsr_offload_mode) {
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2161
prueth->emac[PRUETH_MAC0]->iep = prueth->iep0;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2165
ret = prueth_netdev_init(prueth, eth1_node);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2172
prueth->emac[PRUETH_MAC1]->half_duplex =
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2175
prueth->emac[PRUETH_MAC1]->iep = prueth->iep0;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2180
ret = register_netdev(prueth->emac[PRUETH_MAC0]->ndev);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2186
prueth->registered_netdevs[PRUETH_MAC0] = prueth->emac[PRUETH_MAC0]->ndev;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2188
ret = emac_phy_connect(prueth->emac[PRUETH_MAC0]);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2194
phy_attached_info(prueth->emac[PRUETH_MAC0]->ndev->phydev);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2198
ret = register_netdev(prueth->emac[PRUETH_MAC1]->ndev);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2204
prueth->registered_netdevs[PRUETH_MAC1] = prueth->emac[PRUETH_MAC1]->ndev;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2205
ret = emac_phy_connect(prueth->emac[PRUETH_MAC1]);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2211
phy_attached_info(prueth->emac[PRUETH_MAC1]->ndev->phydev);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2214
if (prueth->is_switchmode_supported) {
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2215
ret = prueth_register_notifiers(prueth);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2219
sprintf(prueth->switch_id, "%s", dev_name(dev));
drivers/net/ethernet/ti/icssg/icssg_prueth.c
223
if (prueth->is_switch_mode || prueth->is_hsr_offload_mode) {
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2233
if (!prueth->registered_netdevs[i])
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2235
if (prueth->emac[i]->ndev->phydev) {
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2236
phy_disconnect(prueth->emac[i]->ndev->phydev);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2237
prueth->emac[i]->ndev->phydev = NULL;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2239
unregister_netdev(prueth->registered_netdevs[i]);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2240
disable_work_sync(&prueth->emac[i]->rx_mode_work);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2245
eth_node = prueth->eth_node[i];
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2249
prueth_netdev_exit(prueth, eth_node);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
225
icssg_fdb_add_del(emac, eth_stp_addr, prueth->default_vlan,
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2253
if (prueth->pdata.quirk_10m_link_issue)
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2254
icss_iep_exit_fw(prueth->iep1);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2255
icss_iep_put(prueth->iep1);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2258
icss_iep_put(prueth->iep0);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2259
prueth->iep0 = NULL;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2260
prueth->iep1 = NULL;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2263
gen_pool_free(prueth->sram_pool,
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2264
(unsigned long)prueth->msmcram.va,
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2265
prueth->msmcram.size);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2268
pruss_release_mem_region(prueth->pruss, &prueth->shram);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2271
pruss_put(prueth->pruss);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2275
prueth_put_cores(prueth, ICSS_SLICE0);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2278
prueth_put_cores(prueth, ICSS_SLICE1);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2287
struct prueth *prueth = platform_get_drvdata(pdev);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2291
prueth_unregister_notifiers(prueth);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2294
if (!prueth->registered_netdevs[i])
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2296
phy_stop(prueth->emac[i]->ndev->phydev);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2297
phy_disconnect(prueth->emac[i]->ndev->phydev);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2298
prueth->emac[i]->ndev->phydev = NULL;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2299
unregister_netdev(prueth->registered_netdevs[i]);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2300
disable_work_sync(&prueth->emac[i]->rx_mode_work);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2304
eth_node = prueth->eth_node[i];
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2308
prueth_netdev_exit(prueth, eth_node);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2311
if (prueth->pdata.quirk_10m_link_issue)
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2312
icss_iep_exit_fw(prueth->iep1);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2314
icss_iep_put(prueth->iep1);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2315
icss_iep_put(prueth->iep0);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2317
gen_pool_free(prueth->sram_pool,
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2318
(unsigned long)prueth->msmcram.va,
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2319
prueth->msmcram.size);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2321
pruss_release_mem_region(prueth->pruss, &prueth->shram);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2323
pruss_put(prueth->pruss);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2325
if (prueth->eth_node[PRUETH_MAC1])
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2326
prueth_put_cores(prueth, ICSS_SLICE1);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2328
if (prueth->eth_node[PRUETH_MAC0])
drivers/net/ethernet/ti/icssg/icssg_prueth.c
2329
prueth_put_cores(prueth, ICSS_SLICE0);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
235
if (prueth->is_hsr_offload_mode)
drivers/net/ethernet/ti/icssg/icssg_prueth.c
239
icssg_set_pvid(prueth, emac->port_vlan, emac->port_id);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
240
if (prueth->is_switch_mode)
drivers/net/ethernet/ti/icssg/icssg_prueth.c
247
static int prueth_emac_common_start(struct prueth *prueth)
drivers/net/ethernet/ti/icssg/icssg_prueth.c
253
if (!prueth->emac[ICSS_SLICE0] && !prueth->emac[ICSS_SLICE1])
drivers/net/ethernet/ti/icssg/icssg_prueth.c
257
memset_io(prueth->msmcram.va, 0, prueth->msmcram.size);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
258
memset_io(prueth->shram.va, 0, ICSSG_CONFIG_OFFSET_SLICE1 * PRUETH_NUM_MACS);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
260
icssg_class_default(prueth->miig_rt, ICSS_SLICE0, 0, false);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
261
icssg_class_default(prueth->miig_rt, ICSS_SLICE1, 0, false);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
263
if (prueth->is_switch_mode || prueth->is_hsr_offload_mode)
drivers/net/ethernet/ti/icssg/icssg_prueth.c
264
icssg_init_fw_offload_mode(prueth);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
266
icssg_init_emac_mode(prueth);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
269
emac = prueth->emac[slice];
drivers/net/ethernet/ti/icssg/icssg_prueth.c
272
ret = icssg_config(prueth, emac, slice);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
289
ret = prueth_emac_start(prueth);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
293
emac = prueth->emac[ICSS_SLICE0] ? prueth->emac[ICSS_SLICE0] :
drivers/net/ethernet/ti/icssg/icssg_prueth.c
294
prueth->emac[ICSS_SLICE1];
drivers/net/ethernet/ti/icssg/icssg_prueth.c
298
dev_err(prueth->dev, "Failed to initialize IEP module\n");
drivers/net/ethernet/ti/icssg/icssg_prueth.c
305
prueth_emac_stop(prueth);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
308
icssg_class_disable(prueth->miig_rt, ICSS_SLICE0);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
309
icssg_class_disable(prueth->miig_rt, ICSS_SLICE1);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
314
static int prueth_emac_common_stop(struct prueth *prueth)
drivers/net/ethernet/ti/icssg/icssg_prueth.c
318
if (!prueth->emac[ICSS_SLICE0] && !prueth->emac[ICSS_SLICE1])
drivers/net/ethernet/ti/icssg/icssg_prueth.c
321
icssg_class_disable(prueth->miig_rt, ICSS_SLICE0);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
322
icssg_class_disable(prueth->miig_rt, ICSS_SLICE1);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
324
prueth_emac_stop(prueth);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
326
emac = prueth->emac[ICSS_SLICE0] ? prueth->emac[ICSS_SLICE0] :
drivers/net/ethernet/ti/icssg/icssg_prueth.c
327
prueth->emac[ICSS_SLICE1];
drivers/net/ethernet/ti/icssg/icssg_prueth.c
338
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
377
icssg_update_rgmii_cfg(prueth->miig_rt, emac);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
416
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
423
dev_err(prueth->dev, "couldn't connect to phy %s\n",
drivers/net/ethernet/ti/icssg/icssg_prueth.c
429
dev_dbg(prueth->dev, "half duplex mode is not supported\n");
drivers/net/ethernet/ti/icssg/icssg_prueth.c
449
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
457
fw_count_hi_addr = prueth->shram.va + TIMESYNC_FW_WC_COUNT_HI_SW_OFFSET_OFFSET;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
458
fw_hi_r_count_addr = prueth->shram.va + TIMESYNC_FW_WC_HI_ROLLOVER_COUNT_OFFSET;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
491
sc_descp = emac->prueth->shram.va + TIMESYNC_FW_WC_SETCLOCK_DESC_OFFSET;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
516
dev_err(emac->prueth->dev, "settime timeout\n");
drivers/net/ethernet/ti/icssg/icssg_prueth.c
563
writel(reduction_factor, emac->prueth->shram.va +
drivers/net/ethernet/ti/icssg/icssg_prueth.c
566
current_cycle = icssg_read_time(emac->prueth->shram.va +
drivers/net/ethernet/ti/icssg/icssg_prueth.c
572
hi_lo_writeq(start_offset, emac->prueth->shram.va +
drivers/net/ethernet/ti/icssg/icssg_prueth.c
61
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
65
addr = icssg_queue_pop(prueth, slice == 0 ?
drivers/net/ethernet/ti/icssg/icssg_prueth.c
70
memcpy_fromio(rsp, prueth->shram.va + addr, sizeof(*rsp));
drivers/net/ethernet/ti/icssg/icssg_prueth.c
72
icssg_queue_push(prueth, slice == 0 ?
drivers/net/ethernet/ti/icssg/icssg_prueth.c
751
if (emac->prueth->is_hsr_offload_mode)
drivers/net/ethernet/ti/icssg/icssg_prueth.c
898
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
900
struct device *dev = prueth->dev;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
907
icssg_class_set_mac_addr(prueth->miig_rt, slice, emac->mac_addr);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
908
icssg_ft1_set_mac_addr(prueth->miig_rt, slice, emac->mac_addr);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
946
if (!prueth->emacs_initialized) {
drivers/net/ethernet/ti/icssg/icssg_prueth.c
947
ret = prueth_emac_common_start(prueth);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
950
icssg_enable_fw_offload(prueth);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
962
icssg_mii_update_mtu(prueth->mii_rt, slice, ndev->max_mtu);
drivers/net/ethernet/ti/icssg/icssg_prueth.c
981
prueth->emacs_initialized++;
drivers/net/ethernet/ti/icssg/icssg_prueth.c
992
if (!prueth->emacs_initialized)
drivers/net/ethernet/ti/icssg/icssg_prueth.c
993
prueth_emac_common_stop(prueth);
drivers/net/ethernet/ti/icssg/icssg_prueth.h
193
struct prueth *prueth;
drivers/net/ethernet/ti/icssg/icssg_prueth.h
429
int icssg_config(struct prueth *prueth, struct prueth_emac *emac,
drivers/net/ethernet/ti/icssg/icssg_prueth.h
435
void icssg_init_emac_mode(struct prueth *prueth);
drivers/net/ethernet/ti/icssg/icssg_prueth.h
436
void icssg_init_fw_offload_mode(struct prueth *prueth);
drivers/net/ethernet/ti/icssg/icssg_prueth.h
439
int icssg_queue_pop(struct prueth *prueth, u8 queue);
drivers/net/ethernet/ti/icssg/icssg_prueth.h
440
void icssg_queue_push(struct prueth *prueth, int queue, u16 addr);
drivers/net/ethernet/ti/icssg/icssg_prueth.h
441
u32 icssg_queue_level(struct prueth *prueth, int queue);
drivers/net/ethernet/ti/icssg/icssg_prueth.h
452
void icssg_set_pvid(struct prueth *prueth, u8 vid, u8 port);
drivers/net/ethernet/ti/icssg/icssg_prueth.h
506
void prueth_netdev_exit(struct prueth *prueth,
drivers/net/ethernet/ti/icssg/icssg_prueth.h
508
int prueth_get_cores(struct prueth *prueth, int slice, bool is_sr1);
drivers/net/ethernet/ti/icssg/icssg_prueth.h
509
void prueth_put_cores(struct prueth *prueth, int slice);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1004
prueth->sram_pool = of_gen_pool_get(np, "sram", 0);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1005
if (!prueth->sram_pool) {
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1014
prueth->msmcram.va = (void __iomem *)gen_pool_alloc(prueth->sram_pool,
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1017
if (!prueth->msmcram.va) {
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1022
prueth->msmcram.pa = gen_pool_virt_to_phys(prueth->sram_pool,
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1023
(unsigned long)prueth->msmcram.va);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1024
prueth->msmcram.size = msmc_ram_size;
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1025
memset_io(prueth->msmcram.va, 0, msmc_ram_size);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1027
prueth->iep0 = icss_iep_get_idx(np, 0);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1028
if (IS_ERR(prueth->iep0)) {
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1029
ret = dev_err_probe(dev, PTR_ERR(prueth->iep0),
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1034
prueth->iep1 = icss_iep_get_idx(np, 1);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1035
if (IS_ERR(prueth->iep1)) {
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1036
ret = dev_err_probe(dev, PTR_ERR(prueth->iep1),
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1041
ret = icss_iep_init(prueth->iep0, NULL, NULL, 0);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1047
ret = icss_iep_init(prueth->iep1, NULL, NULL, 0);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1054
ret = prueth_netdev_init(prueth, eth0_node);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1061
prueth->emac[PRUETH_MAC0]->half_duplex =
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1064
prueth->emac[PRUETH_MAC0]->iep = prueth->iep0;
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1068
ret = prueth_netdev_init(prueth, eth1_node);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1075
prueth->emac[PRUETH_MAC1]->half_duplex =
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1078
prueth->emac[PRUETH_MAC1]->iep = prueth->iep1;
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1083
ret = register_netdev(prueth->emac[PRUETH_MAC0]->ndev);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1089
prueth->registered_netdevs[PRUETH_MAC0] = prueth->emac[PRUETH_MAC0]->ndev;
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1090
emac_phy_connect(prueth->emac[PRUETH_MAC0]);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1091
phy_attached_info(prueth->emac[PRUETH_MAC0]->ndev->phydev);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1095
ret = register_netdev(prueth->emac[PRUETH_MAC1]->ndev);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1101
prueth->registered_netdevs[PRUETH_MAC1] = prueth->emac[PRUETH_MAC1]->ndev;
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1102
emac_phy_connect(prueth->emac[PRUETH_MAC1]);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1103
phy_attached_info(prueth->emac[PRUETH_MAC1]->ndev->phydev);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1118
if (!prueth->registered_netdevs[i])
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1121
if (prueth->emac[i]->ndev->phydev) {
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1122
phy_disconnect(prueth->emac[i]->ndev->phydev);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1123
prueth->emac[i]->ndev->phydev = NULL;
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1125
unregister_netdev(prueth->registered_netdevs[i]);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1130
eth_node = prueth->eth_node[i];
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1134
prueth_netdev_exit(prueth, eth_node);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1138
icss_iep_exit(prueth->iep1);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1140
icss_iep_exit(prueth->iep0);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1143
icss_iep_put(prueth->iep1);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1146
icss_iep_put(prueth->iep0);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1147
prueth->iep0 = NULL;
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1148
prueth->iep1 = NULL;
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1151
gen_pool_free(prueth->sram_pool,
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1152
(unsigned long)prueth->msmcram.va, msmc_ram_size);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1155
pruss_release_mem_region(prueth->pruss, &prueth->shram);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1158
pruss_put(prueth->pruss);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1162
prueth_put_cores(prueth, ICSS_SLICE1);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1167
prueth_put_cores(prueth, ICSS_SLICE0);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1176
struct prueth *prueth = platform_get_drvdata(pdev);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1181
if (!prueth->registered_netdevs[i])
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1183
phy_stop(prueth->emac[i]->ndev->phydev);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1184
phy_disconnect(prueth->emac[i]->ndev->phydev);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1185
prueth->emac[i]->ndev->phydev = NULL;
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1186
unregister_netdev(prueth->registered_netdevs[i]);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1190
eth_node = prueth->eth_node[i];
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1194
prueth_netdev_exit(prueth, eth_node);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1197
icss_iep_exit(prueth->iep1);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1198
icss_iep_exit(prueth->iep0);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1200
icss_iep_put(prueth->iep1);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1201
icss_iep_put(prueth->iep0);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1203
gen_pool_free(prueth->sram_pool,
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1204
(unsigned long)prueth->msmcram.va,
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1207
pruss_release_mem_region(prueth->pruss, &prueth->shram);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1209
pruss_put(prueth->pruss);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1211
if (prueth->eth_node[PRUETH_MAC1])
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1212
prueth_put_cores(prueth, ICSS_SLICE1);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1214
if (prueth->eth_node[PRUETH_MAC0])
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
1215
prueth_put_cores(prueth, ICSS_SLICE0);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
156
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
159
val = icssg_rgmii_get_speed(prueth->miig_rt, slice);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
164
val = icssg_rgmii_get_fullduplex(prueth->miig_rt, slice);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
177
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
214
icssg_update_rgmii_cfg(prueth->miig_rt, emac);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
235
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
242
dev_err(prueth->dev, "couldn't connect to phy %s\n",
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
248
dev_dbg(prueth->dev, "half duplex mode is not supported\n");
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
411
static int prueth_emac_start(struct prueth *prueth, struct prueth_emac *emac)
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
414
struct device *dev = prueth->dev;
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
425
icssg_config_sr1(prueth, emac, slice);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
427
ret = rproc_set_firmware(prueth->pru[slice], firmwares[slice].pru);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
428
ret = rproc_boot(prueth->pru[slice]);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
434
ret = rproc_set_firmware(prueth->rtu[slice], firmwares[slice].rtu);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
435
ret = rproc_boot(prueth->rtu[slice]);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
444
rproc_shutdown(prueth->pru[slice]);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
451
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
467
rproc_shutdown(prueth->txpru[slice]);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
468
rproc_shutdown(prueth->rtu[slice]);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
469
rproc_shutdown(prueth->pru[slice]);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
484
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
486
struct device *dev = prueth->dev;
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
491
if (!prueth->emacs_initialized) {
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
492
memset_io(prueth->msmcram.va, 0, prueth->msmcram.size);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
493
memset_io(prueth->shram.va, 0, ICSSG_CONFIG_OFFSET_SLICE1 * PRUETH_NUM_MACS);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
499
icssg_class_set_mac_addr(prueth->miig_rt, slice, emac->mac_addr);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
501
icssg_class_default(prueth->miig_rt, slice, 0, true);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
54
static void icssg_config_sr1(struct prueth *prueth, struct prueth_emac *emac,
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
566
ret = prueth_emac_start(prueth, emac);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
570
icssg_mii_update_mtu(prueth->mii_rt, slice, ndev->max_mtu);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
603
prueth->emacs_initialized++;
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
62
config.addr_lo = cpu_to_le32(lower_32_bits(prueth->msmcram.pa));
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
63
config.addr_hi = cpu_to_le32(upper_32_bits(prueth->msmcram.pa));
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
654
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
665
icssg_class_disable(prueth->miig_rt, prueth_emac_slice(emac));
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
712
prueth->emacs_initialized--;
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
722
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
726
icssg_class_promiscuous_sr1(prueth->miig_rt, slice);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
73
va = prueth->shram.va + slice * ICSSG_CONFIG_OFFSET_SLICE1;
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
731
icssg_class_default(prueth->miig_rt, slice, 1, true);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
735
icssg_class_default(prueth->miig_rt, slice, 0, true);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
738
icssg_class_add_mcast_sr1(prueth->miig_rt, slice, ndev);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
757
static int prueth_netdev_init(struct prueth *prueth,
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
783
emac->prueth = prueth;
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
789
ret = pruss_request_mem_region(prueth->pruss,
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
794
dev_err(prueth->dev, "unable to get DRAM: %d\n", ret);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
804
SET_NETDEV_DEV(ndev, prueth->dev);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
810
dev_err(prueth->dev, "couldn't find phy-handle\n");
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
816
dev_err_probe(prueth->dev, ret, "failed to register fixed-link phy\n");
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
825
dev_err(prueth->dev, "could not get phy-mode property\n");
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
831
dev_err(prueth->dev, "PHY mode unsupported %s\n", phy_modes(emac->phy_if));
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
850
dev_err(prueth->dev, "RGMII mode without TX delay is not supported");
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
861
dev_warn(prueth->dev, "port %d: using random MAC addr: %pM\n",
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
875
prueth->emac[mac] = emac;
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
880
pruss_release_mem_region(prueth->pruss, &emac->dram);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
883
prueth->emac[mac] = NULL;
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
896
struct prueth *prueth;
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
903
prueth = devm_kzalloc(dev, sizeof(*prueth), GFP_KERNEL);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
904
if (!prueth)
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
907
dev_set_drvdata(dev, prueth);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
908
prueth->pdev = pdev;
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
909
prueth->pdata = *(const struct prueth_pdata *)device_get_match_data(dev);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
911
prueth->dev = dev;
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
960
prueth->eth_node[PRUETH_MAC0] = eth0_node;
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
961
prueth->eth_node[PRUETH_MAC1] = eth1_node;
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
963
prueth->miig_rt = syscon_regmap_lookup_by_phandle(np, "ti,mii-g-rt");
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
964
if (IS_ERR(prueth->miig_rt)) {
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
969
prueth->mii_rt = syscon_regmap_lookup_by_phandle(np, "ti,mii-rt");
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
970
if (IS_ERR(prueth->mii_rt)) {
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
976
ret = prueth_get_cores(prueth, ICSS_SLICE0, true);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
982
ret = prueth_get_cores(prueth, ICSS_SLICE1, true);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
988
prueth->pru[ICSS_SLICE0] : prueth->pru[ICSS_SLICE1]);
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
995
prueth->pruss = pruss;
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
998
&prueth->shram);
drivers/net/ethernet/ti/icssg/icssg_queues.c
16
int icssg_queue_pop(struct prueth *prueth, u8 queue)
drivers/net/ethernet/ti/icssg/icssg_queues.c
23
regmap_read(prueth->miig_rt, ICSSG_QUEUE_CNT_OFFSET + 4 * queue, &cnt);
drivers/net/ethernet/ti/icssg/icssg_queues.c
27
regmap_read(prueth->miig_rt, ICSSG_QUEUE_OFFSET + 4 * queue, &val);
drivers/net/ethernet/ti/icssg/icssg_queues.c
33
void icssg_queue_push(struct prueth *prueth, int queue, u16 addr)
drivers/net/ethernet/ti/icssg/icssg_queues.c
38
regmap_write(prueth->miig_rt, ICSSG_QUEUE_OFFSET + 4 * queue, addr);
drivers/net/ethernet/ti/icssg/icssg_queues.c
42
u32 icssg_queue_level(struct prueth *prueth, int queue)
drivers/net/ethernet/ti/icssg/icssg_queues.c
49
regmap_read(prueth->miig_rt, ICSSG_QUEUE_CNT_OFFSET + 4 * queue, ®);
drivers/net/ethernet/ti/icssg/icssg_stats.c
21
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssg/icssg_stats.c
28
spin_lock(&prueth->stats_lock);
drivers/net/ethernet/ti/icssg/icssg_stats.c
39
regmap_read(prueth->miig_rt,
drivers/net/ethernet/ti/icssg/icssg_stats.c
42
regmap_write(prueth->miig_rt,
drivers/net/ethernet/ti/icssg/icssg_stats.c
54
if (prueth->pa_stats) {
drivers/net/ethernet/ti/icssg/icssg_stats.c
58
regmap_read(prueth->pa_stats, reg, &val);
drivers/net/ethernet/ti/icssg/icssg_stats.c
63
spin_unlock(&prueth->stats_lock);
drivers/net/ethernet/ti/icssg/icssg_stats.c
86
if (emac->prueth->pa_stats) {
drivers/net/ethernet/ti/icssg/icssg_switchdev.c
254
icssg_set_pvid(emac->prueth, vid, emac->port_id);
drivers/net/ethernet/ti/icssg/icssg_switchdev.c
278
icssg_set_pvid(emac->prueth, 0, emac->port_id);
drivers/net/ethernet/ti/icssg/icssg_switchdev.c
450
int prueth_switchdev_register_notifiers(struct prueth *prueth)
drivers/net/ethernet/ti/icssg/icssg_switchdev.c
454
prueth->prueth_switchdev_nb.notifier_call = &prueth_switchdev_event;
drivers/net/ethernet/ti/icssg/icssg_switchdev.c
455
ret = register_switchdev_notifier(&prueth->prueth_switchdev_nb);
drivers/net/ethernet/ti/icssg/icssg_switchdev.c
457
dev_err(prueth->dev, "register switchdev notifier fail ret:%d\n",
drivers/net/ethernet/ti/icssg/icssg_switchdev.c
462
prueth->prueth_switchdev_bl_nb.notifier_call = &prueth_switchdev_blocking_event;
drivers/net/ethernet/ti/icssg/icssg_switchdev.c
463
ret = register_switchdev_blocking_notifier(&prueth->prueth_switchdev_bl_nb);
drivers/net/ethernet/ti/icssg/icssg_switchdev.c
465
dev_err(prueth->dev, "register switchdev blocking notifier ret:%d\n",
drivers/net/ethernet/ti/icssg/icssg_switchdev.c
467
unregister_switchdev_notifier(&prueth->prueth_switchdev_nb);
drivers/net/ethernet/ti/icssg/icssg_switchdev.c
473
void prueth_switchdev_unregister_notifiers(struct prueth *prueth)
drivers/net/ethernet/ti/icssg/icssg_switchdev.c
475
unregister_switchdev_blocking_notifier(&prueth->prueth_switchdev_bl_nb);
drivers/net/ethernet/ti/icssg/icssg_switchdev.c
476
unregister_switchdev_notifier(&prueth->prueth_switchdev_nb);
drivers/net/ethernet/ti/icssg/icssg_switchdev.h
10
void prueth_switchdev_unregister_notifiers(struct prueth *prueth);
drivers/net/ethernet/ti/icssg/icssg_switchdev.h
9
int prueth_switchdev_register_notifiers(struct prueth *prueth);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1006
if (!PRUETH_IS_EMAC(prueth)) {
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1007
ret = icssm_prueth_sw_boot_prus(prueth, ndev);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1029
prueth->emac_configured |= BIT(emac->port_id);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1030
if (PRUETH_IS_SWITCH(prueth))
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1031
icssm_prueth_sw_set_stp_state(prueth, emac->port_id,
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1039
if (!PRUETH_IS_EMAC(prueth))
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1045
if (!prueth->emac_configured)
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1046
icss_iep_exit(prueth->iep);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1048
icssm_prueth_free_memory(emac->prueth);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1063
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1065
prueth->emac_configured &= ~BIT(emac->port_id);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1077
if (!PRUETH_IS_EMAC(prueth))
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1086
icssm_prueth_free_memory(emac->prueth);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1088
if (!prueth->emac_configured)
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1089
icss_iep_exit(prueth->iep);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1097
static int icssm_prueth_change_mode(struct prueth *prueth,
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1106
if (!prueth->emac[i]) {
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1107
dev_err(prueth->dev, "Unknown MAC port\n");
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1111
emac = prueth->emac[i];
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1126
prueth->eth_type = mode;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1128
dev_err(prueth->dev, "unknown mode\n");
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1133
if (!prueth->emac[i]) {
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1134
dev_err(prueth->dev, "Unknown MAC port\n");
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1138
emac = prueth->emac[i];
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1170
static u16 icssm_prueth_get_tx_queue_id(struct prueth *prueth,
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1211
qid = icssm_prueth_get_tx_queue_id(emac->prueth, skb);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1267
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1272
ram = prueth->mem[emac->dram].va;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1286
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1291
ram = prueth->mem[emac->dram].va;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1303
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1307
ram = prueth->mem[emac->dram].va;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1317
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1321
ram = prueth->mem[emac->dram].va;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1364
struct prueth *prueth;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1370
prueth = emac->prueth;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1371
sram = prueth->mem[PRUETH_MEM_SHARED_RAM].va;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1382
if (PRUETH_IS_EMAC(prueth)) {
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1409
if (ndev->flags & IFF_ALLMULTI && !PRUETH_IS_SWITCH(prueth))
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1423
if (prueth->hw_bridge_dev) {
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1424
netdev_for_each_mc_addr(ha, prueth->hw_bridge_dev) {
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1490
static int icssm_prueth_netdev_init(struct prueth *prueth,
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1493
const struct prueth_private_data *fw_data = prueth->fw_data;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1508
ndev = devm_alloc_etherdev(prueth->dev, sizeof(*emac));
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1512
SET_NETDEV_DEV(ndev, prueth->dev);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1514
prueth->emac[mac] = emac;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1515
emac->prueth = prueth;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1530
emac->pru = prueth->pru0;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1540
emac->pru = prueth->pru1;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1550
dev_err(prueth->dev, "could not get rx irq\n");
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1561
dev_warn(prueth->dev, "port %d: using random MAC addr: %pM\n",
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1570
dev_dbg(prueth->dev, "PHY connection failed\n");
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1603
prueth->emac[mac] = NULL;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1608
static void icssm_prueth_netdev_exit(struct prueth *prueth,
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1618
emac = prueth->emac[mac];
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1625
prueth->emac[mac] = NULL;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1639
static int icssm_prueth_port_offload_fwd_mark_update(struct prueth *prueth)
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1647
if (prueth->br_members == all_slaves)
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1650
dev_dbg(prueth->dev, "set offload_fwd_mark %d, mbrs=0x%x\n",
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1651
set_val, prueth->br_members);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1654
if (prueth->emac[i])
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1655
WRITE_ONCE(prueth->emac[i]->offload_fwd_mark, set_val);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1661
if (set_val && !PRUETH_IS_SWITCH(prueth)) {
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1662
ret = icssm_prueth_change_mode(prueth, PRUSS_ETHTYPE_SWITCH);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1664
dev_err(prueth->dev, "Failed to enable Switch mode\n");
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1666
dev_info(prueth->dev,
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1671
if (!prueth->br_members && !PRUETH_IS_EMAC(prueth)) {
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1672
ret = icssm_prueth_change_mode(prueth, PRUSS_ETHTYPE_EMAC);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1674
dev_err(prueth->dev, "Failed to enable Dual EMAC mode\n");
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1676
dev_info(prueth->dev,
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1687
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1691
dev_dbg(prueth->dev, "%s: br_mbrs=0x%x %s\n",
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1692
__func__, prueth->br_members, ndev->name);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1696
if (!prueth->br_members) {
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1697
prueth->hw_bridge_dev = br_ndev;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1702
if (prueth->hw_bridge_dev != br_ndev) {
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1708
prueth->br_members |= BIT(emac->port_id);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
171
static void icssm_prueth_hostconfig(struct prueth *prueth)
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1712
ret = icssm_prueth_port_offload_fwd_mark_update(prueth);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1720
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1724
dev_dbg(prueth->dev, "emac_sw_ndev_port_unlink\n");
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1728
prueth->br_members &= ~BIT(emac->port_id);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
173
void __iomem *sram_base = prueth->mem[PRUETH_MEM_SHARED_RAM].va;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1732
ret = icssm_prueth_port_offload_fwd_mark_update(prueth);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1736
if (!prueth->br_members)
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1737
prueth->hw_bridge_dev = NULL;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1772
static int icssm_prueth_register_notifiers(struct prueth *prueth)
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1776
prueth->prueth_netdevice_nb.notifier_call = icssm_prueth_ndev_event;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1777
ret = register_netdevice_notifier(&prueth->prueth_netdevice_nb);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1779
dev_err(prueth->dev,
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1784
ret = icssm_prueth_sw_register_notifiers(prueth);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1786
unregister_netdevice_notifier(&prueth->prueth_netdevice_nb);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1798
struct prueth *prueth;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1806
prueth = devm_kzalloc(dev, sizeof(*prueth), GFP_KERNEL);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1807
if (!prueth)
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1810
platform_set_drvdata(pdev, prueth);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1811
prueth->dev = dev;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1812
prueth->fw_data = device_get_match_data(dev);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1865
prueth->eth_node[PRUETH_MAC0] = eth0_node;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1866
prueth->eth_node[PRUETH_MAC1] = eth1_node;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1868
prueth->mii_rt = syscon_regmap_lookup_by_phandle(np, "ti,mii-rt");
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1869
if (IS_ERR(prueth->mii_rt)) {
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1871
ret = PTR_ERR(prueth->mii_rt);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1876
prueth->pru0 = pru_rproc_get(np, 0, &pruss_id0);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1877
if (IS_ERR(prueth->pru0)) {
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1878
ret = PTR_ERR(prueth->pru0);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1885
prueth->pru1 = pru_rproc_get(np, 1, &pruss_id1);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1886
if (IS_ERR(prueth->pru1)) {
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1887
ret = PTR_ERR(prueth->pru1);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1893
pruss = pruss_get(prueth->pru0 ? prueth->pru0 : prueth->pru1);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1899
prueth->pruss = pruss;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1920
&prueth->mem[i]);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1928
prueth->sram_pool = of_gen_pool_get(np, "sram", 0);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1929
if (!prueth->sram_pool) {
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1935
prueth->ocmc_ram_size = OCMC_RAM_SIZE;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1937
if (prueth->fw_data->driver_data == PRUSS_AM33XX)
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1938
prueth->ocmc_ram_size = (SZ_64K - SZ_8K);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1940
prueth->mem[PRUETH_MEM_OCMC].va =
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1941
(void __iomem *)gen_pool_alloc(prueth->sram_pool,
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1942
prueth->ocmc_ram_size);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1943
if (!prueth->mem[PRUETH_MEM_OCMC].va) {
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1948
prueth->mem[PRUETH_MEM_OCMC].pa = gen_pool_virt_to_phys
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1949
(prueth->sram_pool, (unsigned long)
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1950
prueth->mem[PRUETH_MEM_OCMC].va);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1951
prueth->mem[PRUETH_MEM_OCMC].size = prueth->ocmc_ram_size;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1953
&prueth->mem[PRUETH_MEM_OCMC].pa,
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1954
prueth->mem[PRUETH_MEM_OCMC].va,
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1955
prueth->mem[PRUETH_MEM_OCMC].size);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1959
ret = icssm_prueth_netdev_init(prueth, eth0_node);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1970
ret = icssm_prueth_netdev_init(prueth, eth1_node);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1980
prueth->iep = icss_iep_get(np);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1981
if (IS_ERR(prueth->iep)) {
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1982
ret = PTR_ERR(prueth->iep);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1989
ret = register_netdev(prueth->emac[PRUETH_MAC0]->ndev);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1995
prueth->registered_netdevs[PRUETH_MAC0] =
drivers/net/ethernet/ti/icssm/icssm_prueth.c
1996
prueth->emac[PRUETH_MAC0]->ndev;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
2000
ret = register_netdev(prueth->emac[PRUETH_MAC1]->ndev);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
2006
prueth->registered_netdevs[PRUETH_MAC1] =
drivers/net/ethernet/ti/icssm/icssm_prueth.c
2007
prueth->emac[PRUETH_MAC1]->ndev;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
2010
ret = icssm_prueth_register_notifiers(prueth);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
2027
if (!prueth->registered_netdevs[i])
drivers/net/ethernet/ti/icssm/icssm_prueth.c
2029
unregister_netdev(prueth->registered_netdevs[i]);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
2033
icss_iep_put(prueth->iep);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
2034
prueth->iep = NULL;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
2038
eth_node = prueth->eth_node[i];
drivers/net/ethernet/ti/icssm/icssm_prueth.c
2042
icssm_prueth_netdev_exit(prueth, eth_node);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
2046
gen_pool_free(prueth->sram_pool,
drivers/net/ethernet/ti/icssm/icssm_prueth.c
2047
(unsigned long)prueth->mem[PRUETH_MEM_OCMC].va,
drivers/net/ethernet/ti/icssm/icssm_prueth.c
2048
prueth->ocmc_ram_size);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
2052
if (prueth->mem[i].va)
drivers/net/ethernet/ti/icssm/icssm_prueth.c
2053
pruss_release_mem_region(pruss, &prueth->mem[i]);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
2055
pruss_put(prueth->pruss);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
2059
pru_rproc_put(prueth->pru1);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
2062
pru_rproc_put(prueth->pru0);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
2072
struct prueth *prueth = platform_get_drvdata(pdev);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
2076
unregister_netdevice_notifier(&prueth->prueth_netdevice_nb);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
2077
icssm_prueth_sw_unregister_notifiers(prueth);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
208
static void icssm_prueth_mii_init(struct prueth *prueth)
drivers/net/ethernet/ti/icssm/icssm_prueth.c
2080
if (!prueth->registered_netdevs[i])
drivers/net/ethernet/ti/icssm/icssm_prueth.c
2082
unregister_netdev(prueth->registered_netdevs[i]);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
2086
eth_node = prueth->eth_node[i];
drivers/net/ethernet/ti/icssm/icssm_prueth.c
2090
icssm_prueth_netdev_exit(prueth, eth_node);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
2094
gen_pool_free(prueth->sram_pool,
drivers/net/ethernet/ti/icssm/icssm_prueth.c
2095
(unsigned long)prueth->mem[PRUETH_MEM_OCMC].va,
drivers/net/ethernet/ti/icssm/icssm_prueth.c
2096
prueth->ocmc_ram_size);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
2099
if (prueth->mem[i].va)
drivers/net/ethernet/ti/icssm/icssm_prueth.c
2100
pruss_release_mem_region(prueth->pruss,
drivers/net/ethernet/ti/icssm/icssm_prueth.c
2101
&prueth->mem[i]);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
2104
icss_iep_put(prueth->iep);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
2105
prueth->iep = NULL;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
2107
pruss_put(prueth->pruss);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
2109
if (prueth->eth_node[PRUETH_MAC0])
drivers/net/ethernet/ti/icssm/icssm_prueth.c
2110
pru_rproc_put(prueth->pru0);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
2111
if (prueth->eth_node[PRUETH_MAC1])
drivers/net/ethernet/ti/icssm/icssm_prueth.c
2112
pru_rproc_put(prueth->pru1);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
2118
struct prueth *prueth = dev_get_drvdata(dev);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
2123
ndev = prueth->registered_netdevs[i];
drivers/net/ethernet/ti/icssm/icssm_prueth.c
214
mii_rt = prueth->mii_rt;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
2143
struct prueth *prueth = dev_get_drvdata(dev);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
2148
ndev = prueth->registered_netdevs[i];
drivers/net/ethernet/ti/icssm/icssm_prueth.c
241
if (!PRUETH_IS_EMAC(prueth))
drivers/net/ethernet/ti/icssm/icssm_prueth.c
250
if (PRUETH_IS_EMAC(prueth))
drivers/net/ethernet/ti/icssm/icssm_prueth.c
283
static void icssm_prueth_clearmem(struct prueth *prueth, enum prueth_mem region)
drivers/net/ethernet/ti/icssm/icssm_prueth.c
285
memset_io(prueth->mem[region].va, 0, prueth->mem[region].size);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
288
static void icssm_prueth_hostinit(struct prueth *prueth)
drivers/net/ethernet/ti/icssm/icssm_prueth.c
291
icssm_prueth_clearmem(prueth, PRUETH_MEM_SHARED_RAM);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
294
icssm_prueth_clearmem(prueth, PRUETH_MEM_OCMC);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
297
if (prueth->eth_node[PRUETH_MAC0])
drivers/net/ethernet/ti/icssm/icssm_prueth.c
298
icssm_prueth_clearmem(prueth, PRUETH_MEM_DRAM0);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
299
if (prueth->eth_node[PRUETH_MAC1])
drivers/net/ethernet/ti/icssm/icssm_prueth.c
300
icssm_prueth_clearmem(prueth, PRUETH_MEM_DRAM1);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
303
if (!PRUETH_IS_EMAC(prueth))
drivers/net/ethernet/ti/icssm/icssm_prueth.c
304
icssm_prueth_sw_hostconfig(prueth);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
306
icssm_prueth_hostconfig(prueth);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
309
icssm_prueth_mii_init(prueth);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
315
static void icssm_prueth_init_ethernet_mode(struct prueth *prueth)
drivers/net/ethernet/ti/icssm/icssm_prueth.c
317
icssm_prueth_hostinit(prueth);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
322
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
326
ram = prueth->mem[emac->dram].va;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
333
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
343
ocmcaddr = (u32)prueth->mem[PRUETH_MEM_OCMC].pa;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
344
sram = prueth->mem[PRUETH_MEM_SHARED_RAM].va;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
347
icssm_prueth_clearmem(prueth, emac->dram);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
349
dram_base = prueth->mem[emac->dram].va;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
382
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
419
icssm_prueth_write_reg(prueth, region, PHY_SPEED_OFFSET,
drivers/net/ethernet/ti/icssm/icssm_prueth.c
43
static void icssm_prueth_write_reg(struct prueth *prueth,
drivers/net/ethernet/ti/icssm/icssm_prueth.c
431
regmap_update_bits(prueth->mii_rt, txcfg, mask, delay);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
434
writeb(port_status, prueth->mem[region].va +
drivers/net/ethernet/ti/icssm/icssm_prueth.c
47
writel_relaxed(val, prueth->mem[region].va + reg);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
513
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
527
if (!PRUETH_IS_EMAC(prueth))
drivers/net/ethernet/ti/icssm/icssm_prueth.c
528
dram = prueth->mem[PRUETH_MEM_DRAM1].va;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
530
dram = emac->prueth->mem[emac->dram].va;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
543
if (!PRUETH_IS_EMAC(prueth))
drivers/net/ethernet/ti/icssm/icssm_prueth.c
580
ocmc_ram = (__force void *)emac->prueth->mem[PRUETH_MEM_OCMC].va;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
612
sram = prueth->mem[PRUETH_MEM_SHARED_RAM].va;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
613
if (!PRUETH_IS_EMAC(prueth))
drivers/net/ethernet/ti/icssm/icssm_prueth.c
627
void icssm_parse_packet_info(struct prueth *prueth, u32 buffer_descriptor,
drivers/net/ethernet/ti/icssm/icssm_prueth.c
703
ocmc_ram = (__force void *)emac->prueth->mem[PRUETH_MEM_OCMC].va;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
738
if (PRUETH_IS_SWITCH(emac->prueth)) {
drivers/net/ethernet/ti/icssm/icssm_prueth.c
763
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
774
shared_ram = emac->prueth->mem[PRUETH_MEM_SHARED_RAM].va;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
787
if (PRUETH_IS_SWITCH(emac->prueth))
drivers/net/ethernet/ti/icssm/icssm_prueth.c
805
icssm_parse_packet_info(prueth, rd_buf_desc, &pkt_info);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
871
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
875
pru_firmwares = &prueth->fw_data->fw_pru[emac->port_id - 1];
drivers/net/ethernet/ti/icssm/icssm_prueth.c
876
fw_name = pru_firmwares->fw_name[prueth->eth_type];
drivers/net/ethernet/ti/icssm/icssm_prueth.c
879
prueth->eth_type);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
916
static void icssm_prueth_free_memory(struct prueth *prueth)
drivers/net/ethernet/ti/icssm/icssm_prueth.c
918
if (PRUETH_IS_SWITCH(prueth))
drivers/net/ethernet/ti/icssm/icssm_prueth.c
919
icssm_prueth_sw_free_fdb_table(prueth);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
924
void __iomem *sram = emac->prueth->mem[PRUETH_MEM_SHARED_RAM].va;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
975
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssm/icssm_prueth.c
981
if (!prueth->emac_configured)
drivers/net/ethernet/ti/icssm/icssm_prueth.c
982
icssm_prueth_init_ethernet_mode(prueth);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
985
if (PRUETH_IS_SWITCH(prueth)) {
drivers/net/ethernet/ti/icssm/icssm_prueth.c
990
ret = icssm_prueth_sw_init_fdb_table(prueth);
drivers/net/ethernet/ti/icssm/icssm_prueth.c
997
if (!prueth->emac_configured) {
drivers/net/ethernet/ti/icssm/icssm_prueth.c
999
ret = icss_iep_init(prueth->iep, NULL, NULL, 0);
drivers/net/ethernet/ti/icssm/icssm_prueth.h
205
struct prueth *prueth;
drivers/net/ethernet/ti/icssm/icssm_prueth.h
272
void icssm_parse_packet_info(struct prueth *prueth, u32 buffer_descriptor,
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
1002
pru_rproc_set_ctable(prueth->pru0, PRU_C30, ocmcaddr);
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
1003
pru_rproc_set_ctable(prueth->pru1, PRU_C30, ocmcaddr);
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
1008
int icssm_prueth_sw_boot_prus(struct prueth *prueth, struct net_device *ndev)
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
1014
if (prueth->emac_configured)
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
1017
pru_firmwares = &prueth->fw_data->fw_pru[PRUSS_PRU0];
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
1018
fw_name = pru_firmwares->fw_name[prueth->eth_type];
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
1019
pru_firmwares = &prueth->fw_data->fw_pru[PRUSS_PRU1];
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
1020
fw_name1 = pru_firmwares->fw_name[prueth->eth_type];
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
1022
ret = rproc_set_firmware(prueth->pru0, fw_name);
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
1028
ret = rproc_boot(prueth->pru0);
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
1034
ret = rproc_set_firmware(prueth->pru1, fw_name1);
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
1040
ret = rproc_boot(prueth->pru1);
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
1049
rproc_shutdown(prueth->pru0);
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
1056
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
1058
if (prueth->emac_configured)
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
1061
rproc_shutdown(prueth->pru0);
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
1062
rproc_shutdown(prueth->pru1);
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
14
#define FDB_IDX_TBL_ENTRY(n) (&prueth->fdb_tbl->index_a->index_tbl_entry[n])
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
16
#define FDB_MAC_TBL_ENTRY(n) (&prueth->fdb_tbl->mac_tbl_a->mac_tbl_entry[n])
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
202
void icssm_prueth_sw_free_fdb_table(struct prueth *prueth)
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
204
if (prueth->emac_configured)
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
207
kfree(prueth->fdb_tbl);
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
208
prueth->fdb_tbl = NULL;
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
211
void icssm_prueth_sw_fdb_tbl_init(struct prueth *prueth)
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
213
struct fdb_tbl *t = prueth->fdb_tbl;
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
217
sram_base = prueth->mem[PRUETH_MEM_SHARED_RAM].va;
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
307
icssm_prueth_sw_find_fdb_insert(struct fdb_tbl *fdb, struct prueth *prueth,
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
378
static void icssm_prueth_sw_fdb_move_range_left(struct prueth *prueth,
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
392
static void icssm_prueth_sw_fdb_move_range_right(struct prueth *prueth,
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
406
static void icssm_prueth_sw_fdb_update_index_tbl(struct prueth *prueth,
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
438
icssm_prueth_sw_find_free_mac(struct prueth *prueth, struct fdb_index_tbl_entry
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
448
fdb = prueth->fdb_tbl;
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
473
icssm_prueth_sw_fdb_move_range_right(prueth, left, right);
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
485
icssm_prueth_sw_fdb_update_index_tbl(prueth, left, right);
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
509
icssm_prueth_sw_fdb_move_range_left(prueth, left, right);
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
521
icssm_prueth_sw_fdb_update_index_tbl(prueth, left, right);
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
531
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
542
fdb = prueth->fdb_tbl;
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
546
other_emac = prueth->emac[other_port_id - 1];
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
552
dev_err(prueth->dev, "PRU lock timeout %d\n", err);
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
577
ret = icssm_prueth_sw_find_fdb_insert(fdb, prueth, bucket_info, mac,
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
587
mac_info = icssm_prueth_sw_find_free_mac(prueth, bucket_info,
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
592
dev_warn(prueth->dev, "OUT of FDB MEM\n");
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
621
dev_dbg(prueth->dev, "added fdb: %pM port=%d total_entries=%u\n",
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
635
struct prueth *prueth;
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
643
prueth = emac->prueth;
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
644
fdb = prueth->fdb_tbl;
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
649
dev_err(prueth->dev, "PRU lock timeout %d\n", err);
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
678
icssm_prueth_sw_fdb_move_range_left(prueth, left, right);
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
695
dev_dbg(prueth->dev, "del fdb: %pM total_entries=%u\n",
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
704
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
711
fdb = prueth->fdb_tbl;
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
715
dev_err(prueth->dev, "PRU lock timeout %d\n", ret);
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
746
int icssm_prueth_sw_init_fdb_table(struct prueth *prueth)
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
748
if (prueth->emac_configured)
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
751
prueth->fdb_tbl = kmalloc_obj(*prueth->fdb_tbl);
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
752
if (!prueth->fdb_tbl)
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
755
icssm_prueth_sw_fdb_tbl_init(prueth);
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
795
if (!emac->prueth->fdb_tbl)
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
852
void icssm_prueth_sw_hostconfig(struct prueth *prueth)
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
854
void __iomem *dram1_base = prueth->mem[PRUETH_MEM_DRAM1].va;
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
889
static int icssm_prueth_sw_port_config(struct prueth *prueth,
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
897
dram1_base = prueth->mem[PRUETH_MEM_DRAM1].va;
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
898
emac = prueth->emac[port_id - 1];
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
906
dram_mac = prueth->mem[PRUETH_MEM_DRAM0].va;
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
914
dram_mac = prueth->mem[PRUETH_MEM_DRAM1].va;
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
925
dram_base = prueth->mem[PRUETH_MEM_DRAM1].va;
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
980
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
987
ocmcaddr = (u32)prueth->mem[PRUETH_MEM_OCMC].pa;
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
989
if (prueth->emac_configured & BIT(emac->port_id))
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
992
ret = icssm_prueth_sw_port_config(prueth, emac->port_id);
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
996
if (!prueth->emac_configured) {
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
998
pru_rproc_set_ctable(prueth->pru0, PRU_C28, sharedramaddr);
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.c
999
pru_rproc_set_ctable(prueth->pru1, PRU_C28, sharedramaddr);
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.h
14
void icssm_prueth_sw_set_stp_state(struct prueth *prueth,
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.h
16
u8 icssm_prueth_sw_get_stp_state(struct prueth *prueth,
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.h
21
void icssm_prueth_sw_fdb_tbl_init(struct prueth *prueth);
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.h
22
int icssm_prueth_sw_init_fdb_table(struct prueth *prueth);
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.h
23
void icssm_prueth_sw_free_fdb_table(struct prueth *prueth);
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.h
31
void icssm_prueth_sw_hostconfig(struct prueth *prueth);
drivers/net/ethernet/ti/icssm/icssm_prueth_switch.h
33
int icssm_prueth_sw_boot_prus(struct prueth *prueth, struct net_device *ndev);
drivers/net/ethernet/ti/icssm/icssm_switchdev.c
102
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssm/icssm_switchdev.c
108
if (!emac->prueth->fdb_tbl)
drivers/net/ethernet/ti/icssm/icssm_switchdev.c
114
dev_dbg(prueth->dev,
drivers/net/ethernet/ti/icssm/icssm_switchdev.c
129
dev_dbg(prueth->dev,
drivers/net/ethernet/ti/icssm/icssm_switchdev.c
211
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssm/icssm_switchdev.c
217
dev_dbg(prueth->dev, "MDB add: %s: vid %u:%pM port: %x\n",
drivers/net/ethernet/ti/icssm/icssm_switchdev.c
236
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssm/icssm_switchdev.c
244
dev_dbg(prueth->dev, "MDB del: %s: vid %u:%pM port: %x\n",
drivers/net/ethernet/ti/icssm/icssm_switchdev.c
246
if (prueth->hw_bridge_dev) {
drivers/net/ethernet/ti/icssm/icssm_switchdev.c
249
netdev_for_each_mc_addr(ha, prueth->hw_bridge_dev) {
drivers/net/ethernet/ti/icssm/icssm_switchdev.c
27
void icssm_prueth_sw_set_stp_state(struct prueth *prueth,
drivers/net/ethernet/ti/icssm/icssm_switchdev.c
30
struct fdb_tbl *t = prueth->fdb_tbl;
drivers/net/ethernet/ti/icssm/icssm_switchdev.c
302
int icssm_prueth_sw_register_notifiers(struct prueth *prueth)
drivers/net/ethernet/ti/icssm/icssm_switchdev.c
306
prueth->prueth_switchdev_nb.notifier_call =
drivers/net/ethernet/ti/icssm/icssm_switchdev.c
308
ret = register_switchdev_notifier(&prueth->prueth_switchdev_nb);
drivers/net/ethernet/ti/icssm/icssm_switchdev.c
310
dev_err(prueth->dev,
drivers/net/ethernet/ti/icssm/icssm_switchdev.c
315
prueth->prueth_switchdev_bl_nb.notifier_call =
drivers/net/ethernet/ti/icssm/icssm_switchdev.c
318
(&prueth->prueth_switchdev_bl_nb);
drivers/net/ethernet/ti/icssm/icssm_switchdev.c
320
dev_err(prueth->dev,
drivers/net/ethernet/ti/icssm/icssm_switchdev.c
323
unregister_switchdev_notifier(&prueth->prueth_switchdev_nb);
drivers/net/ethernet/ti/icssm/icssm_switchdev.c
329
void icssm_prueth_sw_unregister_notifiers(struct prueth *prueth)
drivers/net/ethernet/ti/icssm/icssm_switchdev.c
331
unregister_switchdev_blocking_notifier(&prueth->prueth_switchdev_bl_nb);
drivers/net/ethernet/ti/icssm/icssm_switchdev.c
332
unregister_switchdev_notifier(&prueth->prueth_switchdev_nb);
drivers/net/ethernet/ti/icssm/icssm_switchdev.c
36
u8 icssm_prueth_sw_get_stp_state(struct prueth *prueth, enum prueth_port port)
drivers/net/ethernet/ti/icssm/icssm_switchdev.c
38
struct fdb_tbl *t = prueth->fdb_tbl;
drivers/net/ethernet/ti/icssm/icssm_switchdev.c
51
struct prueth *prueth = emac->prueth;
drivers/net/ethernet/ti/icssm/icssm_switchdev.c
56
if (!prueth->fdb_tbl)
drivers/net/ethernet/ti/icssm/icssm_switchdev.c
61
o_state = icssm_prueth_sw_get_stp_state(prueth, emac->port_id);
drivers/net/ethernet/ti/icssm/icssm_switchdev.c
62
icssm_prueth_sw_set_stp_state(prueth, emac->port_id,
drivers/net/ethernet/ti/icssm/icssm_switchdev.c
68
dev_dbg(prueth->dev, "attr set: stp state:%u port:%u\n",
drivers/net/ethernet/ti/icssm/icssm_switchdev.h
10
int icssm_prueth_sw_register_notifiers(struct prueth *prueth);
drivers/net/ethernet/ti/icssm/icssm_switchdev.h
11
void icssm_prueth_sw_unregister_notifiers(struct prueth *prueth);