Lines Matching defs:prueth

43 	struct prueth *prueth = emac->prueth;
47 addr = icssg_queue_pop(prueth, slice == 0 ?
52 memcpy_fromio(rsp, prueth->shram.va + addr, sizeof(*rsp));
54 icssg_queue_push(prueth, slice == 0 ?
89 hi_sw = readl(emac->prueth->shram.va +
117 .pru = "ti-pruss/am65x-sr2-pru0-prueth-fw.elf",
118 .rtu = "ti-pruss/am65x-sr2-rtu0-prueth-fw.elf",
119 .txpru = "ti-pruss/am65x-sr2-txpru0-prueth-fw.elf",
122 .pru = "ti-pruss/am65x-sr2-pru1-prueth-fw.elf",
123 .rtu = "ti-pruss/am65x-sr2-rtu1-prueth-fw.elf",
124 .txpru = "ti-pruss/am65x-sr2-txpru1-prueth-fw.elf",
128 static int prueth_emac_start(struct prueth *prueth, struct prueth_emac *emac)
131 struct device *dev = prueth->dev;
142 ret = icssg_config(prueth, emac, slice);
146 ret = rproc_set_firmware(prueth->pru[slice], firmwares[slice].pru);
147 ret = rproc_boot(prueth->pru[slice]);
153 ret = rproc_set_firmware(prueth->rtu[slice], firmwares[slice].rtu);
154 ret = rproc_boot(prueth->rtu[slice]);
160 ret = rproc_set_firmware(prueth->txpru[slice], firmwares[slice].txpru);
161 ret = rproc_boot(prueth->txpru[slice]);
171 rproc_shutdown(prueth->rtu[slice]);
174 rproc_shutdown(prueth->pru[slice]);
184 struct prueth *prueth = emac->prueth;
223 icssg_update_rgmii_cfg(prueth->miig_rt, emac);
258 struct prueth *prueth = emac->prueth;
265 dev_err(prueth->dev, "couldn't connect to phy %s\n",
271 dev_dbg(prueth->dev, "half duplex mode is not supported\n");
291 struct prueth *prueth = emac->prueth;
299 fw_count_hi_addr = prueth->shram.va + TIMESYNC_FW_WC_COUNT_HI_SW_OFFSET_OFFSET;
300 fw_hi_r_count_addr = prueth->shram.va + TIMESYNC_FW_WC_HI_ROLLOVER_COUNT_OFFSET;
336 sc_descp = emac->prueth->shram.va + TIMESYNC_FW_WC_SETCLOCK_DESC_OFFSET;
360 dev_err(emac->prueth->dev, "settime timeout\n");
405 writel(reduction_factor, emac->prueth->shram.va +
408 writel(0, emac->prueth->shram.va +
432 struct prueth *prueth = emac->prueth;
434 struct device *dev = prueth->dev;
439 if (!prueth->emacs_initialized) {
440 memset_io(prueth->msmcram.va, 0, prueth->msmcram.size);
441 memset_io(prueth->shram.va, 0, ICSSG_CONFIG_OFFSET_SLICE1 * PRUETH_NUM_MACS);
447 icssg_class_set_mac_addr(prueth->miig_rt, slice, emac->mac_addr);
448 icssg_ft1_set_mac_addr(prueth->miig_rt, slice, emac->mac_addr);
450 icssg_class_default(prueth->miig_rt, slice, 0, false);
488 ret = prueth_emac_start(prueth, emac);
492 icssg_mii_update_mtu(prueth->mii_rt, slice, ndev->max_mtu);
494 if (!prueth->emacs_initialized) {
527 prueth->emacs_initialized++;
567 struct prueth *prueth = emac->prueth;
579 icssg_class_disable(prueth->miig_rt, prueth_emac_slice(emac));
613 if (prueth->emacs_initialized == 1)
627 prueth->emacs_initialized--;
690 static int prueth_netdev_init(struct prueth *prueth,
713 emac->prueth = prueth;
725 ret = pruss_request_mem_region(prueth->pruss,
730 dev_err(prueth->dev, "unable to get DRAM: %d\n", ret);
740 emac->tx_ts_irq = platform_get_irq_byname_optional(prueth->pdev, irq_name);
742 ret = dev_err_probe(prueth->dev, emac->tx_ts_irq, "could not get tx_ts_irq\n");
746 SET_NETDEV_DEV(ndev, prueth->dev);
752 dev_err(prueth->dev, "couldn't find phy-handle\n");
758 ret = dev_err_probe(prueth->dev, ret,
768 dev_err(prueth->dev, "could not get phy-mode property\n");
774 dev_err(prueth->dev, "PHY mode unsupported %s\n", phy_modes(emac->phy_if));
793 dev_err(prueth->dev, "RGMII mode without TX delay is not supported");
804 dev_warn(prueth->dev, "port %d: using random MAC addr: %pM\n",
820 prueth->emac[mac] = emac;
825 pruss_release_mem_region(prueth->pruss, &emac->dram);
830 prueth->emac[mac] = NULL;
846 struct prueth *prueth;
853 prueth = devm_kzalloc(dev, sizeof(*prueth), GFP_KERNEL);
854 if (!prueth)
857 dev_set_drvdata(dev, prueth);
858 prueth->pdev = pdev;
859 prueth->pdata = *(const struct prueth_pdata *)device_get_match_data(dev);
861 prueth->dev = dev;
910 prueth->eth_node[PRUETH_MAC0] = eth0_node;
911 prueth->eth_node[PRUETH_MAC1] = eth1_node;
913 prueth->miig_rt = syscon_regmap_lookup_by_phandle(np, "ti,mii-g-rt");
914 if (IS_ERR(prueth->miig_rt)) {
919 prueth->mii_rt = syscon_regmap_lookup_by_phandle(np, "ti,mii-rt");
920 if (IS_ERR(prueth->mii_rt)) {
926 ret = prueth_get_cores(prueth, ICSS_SLICE0, false);
932 ret = prueth_get_cores(prueth, ICSS_SLICE1, false);
938 prueth->pru[ICSS_SLICE0] : prueth->pru[ICSS_SLICE1]);
945 prueth->pruss = pruss;
948 &prueth->shram);
954 prueth->sram_pool = of_gen_pool_get(np, "sram", 0);
955 if (!prueth->sram_pool) {
965 prueth->msmcram.va =
966 (void __iomem *)gen_pool_alloc_algo(prueth->sram_pool,
971 if (!prueth->msmcram.va) {
976 prueth->msmcram.pa = gen_pool_virt_to_phys(prueth->sram_pool,
977 (unsigned long)prueth->msmcram.va);
978 prueth->msmcram.size = msmc_ram_size;
979 memset_io(prueth->msmcram.va, 0, msmc_ram_size);
980 dev_dbg(dev, "sram: pa %llx va %p size %zx\n", prueth->msmcram.pa,
981 prueth->msmcram.va, prueth->msmcram.size);
983 prueth->iep0 = icss_iep_get_idx(np, 0);
984 if (IS_ERR(prueth->iep0)) {
985 ret = dev_err_probe(dev, PTR_ERR(prueth->iep0), "iep0 get failed\n");
986 prueth->iep0 = NULL;
990 prueth->iep1 = icss_iep_get_idx(np, 1);
991 if (IS_ERR(prueth->iep1)) {
992 ret = dev_err_probe(dev, PTR_ERR(prueth->iep1), "iep1 get failed\n");
996 if (prueth->pdata.quirk_10m_link_issue) {
1000 icss_iep_init_fw(prueth->iep1);
1005 ret = prueth_netdev_init(prueth, eth0_node);
1013 prueth->emac[PRUETH_MAC0]->half_duplex = 1;
1015 prueth->emac[PRUETH_MAC0]->iep = prueth->iep0;
1019 ret = prueth_netdev_init(prueth, eth1_node);
1027 prueth->emac[PRUETH_MAC1]->half_duplex = 1;
1029 prueth->emac[PRUETH_MAC1]->iep = prueth->iep0;
1034 ret = register_netdev(prueth->emac[PRUETH_MAC0]->ndev);
1040 prueth->registered_netdevs[PRUETH_MAC0] = prueth->emac[PRUETH_MAC0]->ndev;
1042 ret = emac_phy_connect(prueth->emac[PRUETH_MAC0]);
1048 phy_attached_info(prueth->emac[PRUETH_MAC0]->ndev->phydev);
1052 ret = register_netdev(prueth->emac[PRUETH_MAC1]->ndev);
1058 prueth->registered_netdevs[PRUETH_MAC1] = prueth->emac[PRUETH_MAC1]->ndev;
1059 ret = emac_phy_connect(prueth->emac[PRUETH_MAC1]);
1065 phy_attached_info(prueth->emac[PRUETH_MAC1]->ndev->phydev);
1079 if (!prueth->registered_netdevs[i])
1081 if (prueth->emac[i]->ndev->phydev) {
1082 phy_disconnect(prueth->emac[i]->ndev->phydev);
1083 prueth->emac[i]->ndev->phydev = NULL;
1085 unregister_netdev(prueth->registered_netdevs[i]);
1090 eth_node = prueth->eth_node[i];
1094 prueth_netdev_exit(prueth, eth_node);
1098 if (prueth->pdata.quirk_10m_link_issue)
1099 icss_iep_exit_fw(prueth->iep1);
1100 icss_iep_put(prueth->iep1);
1103 icss_iep_put(prueth->iep0);
1104 prueth->iep0 = NULL;
1105 prueth->iep1 = NULL;
1108 gen_pool_free(prueth->sram_pool,
1109 (unsigned long)prueth->msmcram.va, msmc_ram_size);
1112 pruss_release_mem_region(prueth->pruss, &prueth->shram);
1115 pruss_put(prueth->pruss);
1119 prueth_put_cores(prueth, ICSS_SLICE1);
1124 prueth_put_cores(prueth, ICSS_SLICE0);
1133 struct prueth *prueth = platform_get_drvdata(pdev);
1138 if (!prueth->registered_netdevs[i])
1140 phy_stop(prueth->emac[i]->ndev->phydev);
1141 phy_disconnect(prueth->emac[i]->ndev->phydev);
1142 prueth->emac[i]->ndev->phydev = NULL;
1143 unregister_netdev(prueth->registered_netdevs[i]);
1147 eth_node = prueth->eth_node[i];
1151 prueth_netdev_exit(prueth, eth_node);
1154 if (prueth->pdata.quirk_10m_link_issue)
1155 icss_iep_exit_fw(prueth->iep1);
1157 icss_iep_put(prueth->iep1);
1158 icss_iep_put(prueth->iep0);
1160 gen_pool_free(prueth->sram_pool,
1161 (unsigned long)prueth->msmcram.va,
1164 pruss_release_mem_region(prueth->pruss, &prueth->shram);
1166 pruss_put(prueth->pruss);
1168 if (prueth->eth_node[PRUETH_MAC1])
1169 prueth_put_cores(prueth, ICSS_SLICE1);
1171 if (prueth->eth_node[PRUETH_MAC0])
1172 prueth_put_cores(prueth, ICSS_SLICE0);
1185 { .compatible = "ti,am654-icssg-prueth", .data = &am654_icssg_pdata },
1186 { .compatible = "ti,am642-icssg-prueth", .data = &am64x_icssg_pdata },
1195 .name = "icssg-prueth",