Lines Matching defs:common
148 static void am65_cpsw_nuss_get_ver(struct am65_cpsw_common *common)
150 common->nuss_ver = readl(common->ss_base);
151 common->cpsw_ver = readl(common->cpsw_base);
152 dev_info(common->dev,
154 common->nuss_ver,
155 common->cpsw_ver,
156 common->port_num + 1,
157 common->pdata.quirks);
162 struct am65_cpsw_common *common = am65_ndev_to_common(ndev);
195 cpsw_ale_control_set(common->ale, port->port_id,
204 cpsw_ale_control_set(common->ale, port->port_id,
210 dev_dbg(common->dev, "donw msc_sl %08x tmo %d\n",
226 struct am65_cpsw_common *common = am65_ndev_to_common(ndev);
234 ret = pm_runtime_get_sync(common->dev);
236 pm_runtime_put_noidle(common->dev);
243 dev_info(common->dev, "Adding vlan %d to vlan filter\n", vid);
244 ret = cpsw_ale_add_vlan(common->ale, vid, port_mask,
247 pm_runtime_put(common->dev);
254 struct am65_cpsw_common *common = am65_ndev_to_common(ndev);
260 ret = pm_runtime_get_sync(common->dev);
262 pm_runtime_put_noidle(common->dev);
266 dev_info(common->dev, "Removing vlan %d from vlan filter\n", vid);
267 ret = cpsw_ale_del_vlan(common->ale, vid, 0);
269 pm_runtime_put(common->dev);
276 struct am65_cpsw_common *common = port->common;
280 cpsw_ale_control_set(common->ale, port->port_id,
282 dev_dbg(common->dev, "promisc enabled\n");
285 cpsw_ale_control_set(common->ale, port->port_id,
287 dev_dbg(common->dev, "promisc disabled\n");
293 struct am65_cpsw_common *common = am65_ndev_to_common(ndev);
305 cpsw_ale_set_allmulti(common->ale,
310 cpsw_ale_flush_multicast(common->ale, port_mask, -1);
317 cpsw_ale_add_mcast(common->ale, ha->addr,
326 struct am65_cpsw_common *common = am65_ndev_to_common(ndev);
332 tx_chn = &common->tx_chns[txqueue];
349 static int am65_cpsw_nuss_rx_push(struct am65_cpsw_common *common,
352 struct am65_cpsw_rx_chn *rx_chn = &common->rx_chns;
354 struct device *dev = common->dev;
383 void am65_cpsw_nuss_set_p0_ptype(struct am65_cpsw_common *common)
385 struct am65_cpsw_host *host_p = am65_common_get_host(common);
391 if (common->pf_p0_rx_ptype_rrobin) {
407 static int am65_cpsw_nuss_common_open(struct am65_cpsw_common *common,
410 struct am65_cpsw_host *host_p = am65_common_get_host(common);
415 if (common->usage_count)
421 common->cpsw_base + AM65_CPSW_REG_CTL);
426 writel(common->rx_flow_id_base,
431 am65_cpsw_nuss_set_p0_ptype(common);
435 for (port_idx = 0; port_idx < common->port_num; port_idx++) {
436 struct am65_cpsw_port *port = &common->ports[port_idx];
441 writel(val, common->cpsw_base + AM65_CPSW_REG_STAT_PORT_EN);
444 writel(0, common->cpsw_base + AM65_CPSW_REG_PTYPE);
446 cpsw_ale_start(common->ale);
449 cpsw_ale_control_set(common->ale, HOST_PORT_NUM,
451 cpsw_ale_control_set(common->ale, HOST_PORT_NUM,
453 if (AM65_CPSW_IS_CPSW2G(common))
454 cpsw_ale_control_set(common->ale, HOST_PORT_NUM,
457 cpsw_ale_control_set(common->ale, HOST_PORT_NUM, ALE_VLAN_AWARE, 1);
458 cpsw_ale_control_set(common->ale, HOST_PORT_NUM,
462 port_mask = GENMASK(common->port_num, 0) &
463 ~common->disabled_ports_mask;
465 cpsw_ale_add_vlan(common->ale, 0, port_mask,
469 for (i = 0; i < common->rx_chns.descs_num; i++) {
474 dev_err(common->dev, "cannot allocate skb\n");
478 ret = am65_cpsw_nuss_rx_push(common, skb);
480 dev_err(common->dev,
488 k3_udma_glue_enable_rx_chn(common->rx_chns.rx_chn);
490 for (i = 0; i < common->tx_ch_num; i++) {
491 ret = k3_udma_glue_enable_tx_chn(common->tx_chns[i].tx_chn);
494 napi_enable(&common->tx_chns[i].napi_tx);
497 napi_enable(&common->napi_rx);
499 dev_dbg(common->dev, "cpsw_nuss started\n");
506 static int am65_cpsw_nuss_common_stop(struct am65_cpsw_common *common)
510 if (common->usage_count != 1)
513 cpsw_ale_control_set(common->ale, HOST_PORT_NUM,
517 atomic_set(&common->tdown_cnt, common->tx_ch_num);
520 reinit_completion(&common->tdown_complete);
522 for (i = 0; i < common->tx_ch_num; i++)
523 k3_udma_glue_tdown_tx_chn(common->tx_chns[i].tx_chn, false);
525 i = wait_for_completion_timeout(&common->tdown_complete,
528 dev_err(common->dev, "tx timeout\n");
529 for (i = 0; i < common->tx_ch_num; i++)
530 napi_disable(&common->tx_chns[i].napi_tx);
532 for (i = 0; i < common->tx_ch_num; i++) {
533 k3_udma_glue_reset_tx_chn(common->tx_chns[i].tx_chn,
534 &common->tx_chns[i],
536 k3_udma_glue_disable_tx_chn(common->tx_chns[i].tx_chn);
539 k3_udma_glue_tdown_rx_chn(common->rx_chns.rx_chn, true);
540 napi_disable(&common->napi_rx);
543 k3_udma_glue_reset_rx_chn(common->rx_chns.rx_chn, i,
544 &common->rx_chns,
547 k3_udma_glue_disable_rx_chn(common->rx_chns.rx_chn);
549 cpsw_ale_stop(common->ale);
551 writel(0, common->cpsw_base + AM65_CPSW_REG_CTL);
552 writel(0, common->cpsw_base + AM65_CPSW_REG_STAT_PORT_EN);
554 dev_dbg(common->dev, "cpsw_nuss stopped\n");
560 struct am65_cpsw_common *common = am65_ndev_to_common(ndev);
574 ret = am65_cpsw_nuss_common_stop(common);
578 common->usage_count--;
579 pm_runtime_put(common->dev);
595 struct am65_cpsw_common *common = am65_ndev_to_common(ndev);
600 ret = pm_runtime_get_sync(common->dev);
602 pm_runtime_put_noidle(common->dev);
607 ret = netif_set_real_num_tx_queues(ndev, common->tx_ch_num);
609 dev_err(common->dev, "cannot set real number of tx queues\n");
615 dev_err(common->dev, "cannot set real number of rx queues\n");
619 for (i = 0; i < common->tx_ch_num; i++)
622 ret = am65_cpsw_nuss_common_open(common, ndev->features);
626 common->usage_count++;
632 cpsw_ale_control_set(common->ale, port->port_id,
634 if (AM65_CPSW_IS_CPSW2G(common))
635 cpsw_ale_control_set(common->ale, port->port_id,
639 cpsw_ale_add_ucast(common->ale, ndev->dev_addr,
641 cpsw_ale_add_mcast(common->ale, ndev->broadcast,
658 dev_err(common->dev, "phy %pOF not found on slave %d\n",
744 static int am65_cpsw_nuss_rx_packets(struct am65_cpsw_common *common,
747 struct am65_cpsw_rx_chn *rx_chn = &common->rx_chns;
752 struct device *dev = common->dev;
783 port = am65_common_get_port(common, port_id);
803 napi_gro_receive(&common->napi_rx, skb);
824 ret = am65_cpsw_nuss_rx_push(common, new_skb);
836 struct am65_cpsw_common *common = am65_cpsw_napi_to_common(napi_rx);
846 ret = am65_cpsw_nuss_rx_packets(common, flow);
856 dev_dbg(common->dev, "%s num_rx:%d %d\n", __func__, num_rx, budget);
859 enable_irq(common->rx_chns.irq);
907 am65_cpsw_nuss_xmit_free(tx_chn, tx_chn->common->dev, desc_tx);
912 static int am65_cpsw_nuss_tx_compl_packets(struct am65_cpsw_common *common,
916 struct device *dev = common->dev;
926 tx_chn = &common->tx_chns[chn];
937 if (atomic_dec_and_test(&common->tdown_cnt))
938 complete(&common->tdown_complete);
950 am65_cpts_tx_timestamp(common->cpts, skb);
994 num_tx = am65_cpsw_nuss_tx_compl_packets(tx_chn->common, tx_chn->id,
1007 struct am65_cpsw_common *common = dev_id;
1010 napi_schedule(&common->napi_rx);
1028 struct am65_cpsw_common *common = am65_ndev_to_common(ndev);
1031 struct device *dev = common->dev;
1045 am65_cpts_prep_tx_timestamp(common->cpts, skb);
1050 tx_chn = &common->tx_chns[q_idx];
1182 struct am65_cpsw_common *common = am65_ndev_to_common(ndev);
1191 ret = pm_runtime_get_sync(common->dev);
1193 pm_runtime_put_noidle(common->dev);
1197 cpsw_ale_del_ucast(common->ale, ndev->dev_addr,
1199 cpsw_ale_add_ucast(common->ale, sockaddr->sa_data,
1205 pm_runtime_put(common->dev);
1213 struct am65_cpsw_common *common = am65_ndev_to_common(ndev);
1292 am65_cpts_rx_enable(common->cpts, port->rx_ts_enabled);
1387 struct am65_cpsw_common *common = port->common;
1392 common->disabled_ports_mask |= BIT(port->port_id);
1393 cpsw_ale_control_set(common->ale, port->port_id,
1402 struct am65_cpsw_common *common = data;
1405 for (i = 0; i < common->tx_ch_num; i++) {
1406 struct am65_cpsw_tx_chn *tx_chn = &common->tx_chns[i];
1418 void am65_cpsw_nuss_remove_tx_chns(struct am65_cpsw_common *common)
1420 struct device *dev = common->dev;
1423 devm_remove_action(dev, am65_cpsw_nuss_free_tx_chns, common);
1425 for (i = 0; i < common->tx_ch_num; i++) {
1426 struct am65_cpsw_tx_chn *tx_chn = &common->tx_chns[i];
1443 static int am65_cpsw_nuss_init_tx_chns(struct am65_cpsw_common *common)
1447 struct device *dev = common->dev;
1465 for (i = 0; i < common->tx_ch_num; i++) {
1466 struct am65_cpsw_tx_chn *tx_chn = &common->tx_chns[i];
1471 tx_chn->common = common;
1509 i = devm_add_action(dev, am65_cpsw_nuss_free_tx_chns, common);
1520 struct am65_cpsw_common *common = data;
1523 rx_chn = &common->rx_chns;
1532 static int am65_cpsw_nuss_init_rx_chns(struct am65_cpsw_common *common)
1534 struct am65_cpsw_rx_chn *rx_chn = &common->rx_chns;
1537 struct device *dev = common->dev;
1547 rx_cfg.flow_id_base = common->rx_flow_id_base;
1568 common->rx_flow_id_base =
1570 dev_info(dev, "set new flow-id-base %u\n", common->rx_flow_id_base);
1618 i = devm_add_action(dev, am65_cpsw_nuss_free_rx_chns, common);
1627 static int am65_cpsw_nuss_init_host_p(struct am65_cpsw_common *common)
1629 struct am65_cpsw_host *host_p = am65_common_get_host(common);
1631 host_p->common = common;
1632 host_p->port_base = common->cpsw_base + AM65_CPSW_NU_PORTS_BASE;
1633 host_p->stat_base = common->cpsw_base + AM65_CPSW_NU_STATS_BASE;
1670 static int am65_cpsw_init_cpts(struct am65_cpsw_common *common)
1672 struct device *dev = common->dev;
1686 reg_base = common->cpsw_base + AM65_CPSW_NU_CPTS_BASE;
1700 common->cpts = cpts;
1705 static int am65_cpsw_nuss_init_slave_ports(struct am65_cpsw_common *common)
1708 struct device *dev = common->dev;
1731 if (!port_id || port_id > common->port_num) {
1738 port = am65_common_get_port(common, port_id);
1740 port->common = common;
1741 port->port_base = common->cpsw_base + AM65_CPSW_NU_PORTS_BASE +
1743 port->stat_base = common->cpsw_base + AM65_CPSW_NU_STATS_BASE +
1747 common->cpsw_base + AM65_CPSW_NU_FRAM_BASE +
1828 static int am65_cpsw_nuss_init_ndev_2g(struct am65_cpsw_common *common)
1831 struct device *dev = common->dev;
1835 port = am65_common_get_port(common, 1);
1838 port->ndev = devm_alloc_etherdev_mqs(common->dev,
1869 if (common->pdata.quirks & AM65_CPSW_QUIRK_I2027_NO_TX_CSUM)
1883 netif_napi_add(port->ndev, &common->napi_rx,
1889 static int am65_cpsw_nuss_ndev_add_napi_2g(struct am65_cpsw_common *common)
1891 struct device *dev = common->dev;
1895 port = am65_common_get_port(common, 1);
1897 for (i = 0; i < common->tx_ch_num; i++) {
1898 struct am65_cpsw_tx_chn *tx_chn = &common->tx_chns[i];
1918 static int am65_cpsw_nuss_ndev_reg_2g(struct am65_cpsw_common *common)
1920 struct device *dev = common->dev;
1924 port = am65_common_get_port(common, 1);
1925 ret = am65_cpsw_nuss_ndev_add_napi_2g(common);
1929 ret = devm_request_irq(dev, common->rx_chns.irq,
1931 IRQF_TRIGGER_HIGH, dev_name(dev), common);
1934 common->rx_chns.irq, ret);
1949 int am65_cpsw_nuss_update_tx_chns(struct am65_cpsw_common *common, int num_tx)
1953 common->tx_ch_num = num_tx;
1954 ret = am65_cpsw_nuss_init_tx_chns(common);
1958 return am65_cpsw_nuss_ndev_add_napi_2g(common);
1961 static void am65_cpsw_nuss_cleanup_ndev(struct am65_cpsw_common *common)
1966 for (i = 0; i < common->port_num; i++) {
1967 port = &common->ports[i];
2004 static void am65_cpsw_nuss_apply_socinfo(struct am65_cpsw_common *common)
2013 common->pdata.quirks &= ~socdata->quirks_dis;
2022 struct am65_cpsw_common *common;
2028 common = devm_kzalloc(dev, sizeof(struct am65_cpsw_common), GFP_KERNEL);
2029 if (!common)
2031 common->dev = dev;
2036 common->pdata = *(const struct am65_cpsw_pdata *)of_id->data;
2038 am65_cpsw_nuss_apply_socinfo(common);
2041 common->ss_base = devm_ioremap_resource(&pdev->dev, res);
2042 if (IS_ERR(common->ss_base))
2043 return PTR_ERR(common->ss_base);
2044 common->cpsw_base = common->ss_base + AM65_CPSW_CPSW_NU_BASE;
2049 common->port_num = of_get_child_count(node);
2051 if (common->port_num < 1 || common->port_num > AM65_CPSW_MAX_PORTS)
2054 if (common->port_num != 1)
2057 common->rx_flow_id_base = -1;
2058 init_completion(&common->tdown_complete);
2059 common->tx_ch_num = 1;
2060 common->pf_p0_rx_ptype_rrobin = false;
2068 common->ports = devm_kcalloc(dev, common->port_num,
2069 sizeof(*common->ports),
2071 if (!common->ports)
2077 common->bus_freq = clk_get_rate(clk);
2099 common->mdio_dev = &mdio_pdev->dev;
2103 am65_cpsw_nuss_get_ver(common);
2106 ret = am65_cpsw_nuss_init_tx_chns(common);
2109 ret = am65_cpsw_nuss_init_rx_chns(common);
2113 ret = am65_cpsw_nuss_init_host_p(common);
2117 ret = am65_cpsw_nuss_init_slave_ports(common);
2121 /* init common data */
2124 ale_params.ale_ports = common->port_num + 1;
2125 ale_params.ale_regs = common->cpsw_base + AM65_CPSW_NU_ALE_BASE;
2127 ale_params.bus_freq = common->bus_freq;
2129 common->ale = cpsw_ale_create(&ale_params);
2130 if (IS_ERR(common->ale)) {
2132 ret = PTR_ERR(common->ale);
2136 ret = am65_cpsw_init_cpts(common);
2141 for (i = 0; i < common->port_num; i++)
2142 am65_cpsw_nuss_slave_disable_unused(&common->ports[i]);
2144 dev_set_drvdata(dev, common);
2146 ret = am65_cpsw_nuss_init_ndev_2g(common);
2150 ret = am65_cpsw_nuss_ndev_reg_2g(common);
2158 if (common->mdio_dev)
2159 of_platform_device_destroy(common->mdio_dev, NULL);
2169 struct am65_cpsw_common *common;
2172 common = dev_get_drvdata(dev);
2183 am65_cpsw_nuss_cleanup_ndev(common);
2185 if (common->mdio_dev)
2186 of_platform_device_destroy(common->mdio_dev, NULL);