Lines Matching refs:eqos

361 static int eqos_mdio_wait_idle(struct eqos_priv *eqos)  in eqos_mdio_wait_idle()  argument
363 return wait_for_bit_le32(&eqos->mac_regs->mdio_address, in eqos_mdio_wait_idle()
371 struct eqos_priv *eqos = bus->priv; in eqos_mdio_read() local
375 debug("%s(dev=%p, addr=%x, reg=%d):\n", __func__, eqos->dev, mdio_addr, in eqos_mdio_read()
378 ret = eqos_mdio_wait_idle(eqos); in eqos_mdio_read()
384 val = readl(&eqos->mac_regs->mdio_address); in eqos_mdio_read()
394 writel(val, &eqos->mac_regs->mdio_address); in eqos_mdio_read()
398 ret = eqos_mdio_wait_idle(eqos); in eqos_mdio_read()
404 val = readl(&eqos->mac_regs->mdio_data); in eqos_mdio_read()
415 struct eqos_priv *eqos = bus->priv; in eqos_mdio_write() local
419 debug("%s(dev=%p, addr=%x, reg=%d, val=%x):\n", __func__, eqos->dev, in eqos_mdio_write()
422 ret = eqos_mdio_wait_idle(eqos); in eqos_mdio_write()
428 writel(mdio_val, &eqos->mac_regs->mdio_data); in eqos_mdio_write()
430 val = readl(&eqos->mac_regs->mdio_address); in eqos_mdio_write()
440 writel(val, &eqos->mac_regs->mdio_address); in eqos_mdio_write()
444 ret = eqos_mdio_wait_idle(eqos); in eqos_mdio_write()
455 struct eqos_priv *eqos = dev_get_priv(dev); in eqos_start_clks_tegra186() local
460 ret = clk_enable(&eqos->clk_slave_bus); in eqos_start_clks_tegra186()
466 ret = clk_enable(&eqos->clk_master_bus); in eqos_start_clks_tegra186()
472 ret = clk_enable(&eqos->clk_rx); in eqos_start_clks_tegra186()
478 ret = clk_enable(&eqos->clk_ptp_ref); in eqos_start_clks_tegra186()
484 ret = clk_set_rate(&eqos->clk_ptp_ref, 125 * 1000 * 1000); in eqos_start_clks_tegra186()
490 ret = clk_enable(&eqos->clk_tx); in eqos_start_clks_tegra186()
500 clk_disable(&eqos->clk_ptp_ref); in eqos_start_clks_tegra186()
502 clk_disable(&eqos->clk_rx); in eqos_start_clks_tegra186()
504 clk_disable(&eqos->clk_master_bus); in eqos_start_clks_tegra186()
506 clk_disable(&eqos->clk_slave_bus); in eqos_start_clks_tegra186()
514 struct eqos_priv *eqos = dev_get_priv(dev); in eqos_stop_clks_tegra186() local
518 clk_disable(&eqos->clk_tx); in eqos_stop_clks_tegra186()
519 clk_disable(&eqos->clk_ptp_ref); in eqos_stop_clks_tegra186()
520 clk_disable(&eqos->clk_rx); in eqos_stop_clks_tegra186()
521 clk_disable(&eqos->clk_master_bus); in eqos_stop_clks_tegra186()
522 clk_disable(&eqos->clk_slave_bus); in eqos_stop_clks_tegra186()
529 struct eqos_priv *eqos = dev_get_priv(dev); in eqos_start_resets_tegra186() local
534 ret = dm_gpio_set_value(&eqos->phy_reset_gpio, 1); in eqos_start_resets_tegra186()
542 ret = dm_gpio_set_value(&eqos->phy_reset_gpio, 0); in eqos_start_resets_tegra186()
548 ret = reset_assert(&eqos->reset_ctl); in eqos_start_resets_tegra186()
556 ret = reset_deassert(&eqos->reset_ctl); in eqos_start_resets_tegra186()
568 struct eqos_priv *eqos = dev_get_priv(dev); in eqos_stop_resets_tegra186() local
570 reset_assert(&eqos->reset_ctl); in eqos_stop_resets_tegra186()
571 dm_gpio_set_value(&eqos->phy_reset_gpio, 1); in eqos_stop_resets_tegra186()
578 struct eqos_priv *eqos = dev_get_priv(dev); in eqos_calibrate_pads_tegra186() local
583 setbits_le32(&eqos->tegra186_regs->sdmemcomppadctrl, in eqos_calibrate_pads_tegra186()
588 setbits_le32(&eqos->tegra186_regs->auto_cal_config, in eqos_calibrate_pads_tegra186()
591 ret = wait_for_bit_le32(&eqos->tegra186_regs->auto_cal_status, in eqos_calibrate_pads_tegra186()
598 ret = wait_for_bit_le32(&eqos->tegra186_regs->auto_cal_status, in eqos_calibrate_pads_tegra186()
608 clrbits_le32(&eqos->tegra186_regs->sdmemcomppadctrl, in eqos_calibrate_pads_tegra186()
618 struct eqos_priv *eqos = dev_get_priv(dev); in eqos_disable_calibration_tegra186() local
622 clrbits_le32(&eqos->tegra186_regs->auto_cal_config, in eqos_disable_calibration_tegra186()
630 struct eqos_priv *eqos = dev_get_priv(dev); in eqos_get_tick_clk_rate_tegra186() local
632 return clk_get_rate(&eqos->clk_slave_bus); in eqos_get_tick_clk_rate_tegra186()
637 struct eqos_priv *eqos = dev_get_priv(dev); in eqos_set_full_duplex() local
641 setbits_le32(&eqos->mac_regs->configuration, EQOS_MAC_CONFIGURATION_DM); in eqos_set_full_duplex()
648 struct eqos_priv *eqos = dev_get_priv(dev); in eqos_set_half_duplex() local
652 clrbits_le32(&eqos->mac_regs->configuration, EQOS_MAC_CONFIGURATION_DM); in eqos_set_half_duplex()
655 setbits_le32(&eqos->mtl_regs->txq0_operation_mode, in eqos_set_half_duplex()
663 struct eqos_priv *eqos = dev_get_priv(dev); in eqos_set_gmii_speed() local
667 clrbits_le32(&eqos->mac_regs->configuration, in eqos_set_gmii_speed()
675 struct eqos_priv *eqos = dev_get_priv(dev); in eqos_set_mii_speed_100() local
679 setbits_le32(&eqos->mac_regs->configuration, in eqos_set_mii_speed_100()
687 struct eqos_priv *eqos = dev_get_priv(dev); in eqos_set_mii_speed_10() local
691 clrsetbits_le32(&eqos->mac_regs->configuration, in eqos_set_mii_speed_10()
699 struct eqos_priv *eqos = dev_get_priv(dev); in eqos_set_tx_clk_speed_tegra186() local
705 switch (eqos->phy->speed) { in eqos_set_tx_clk_speed_tegra186()
716 pr_err("invalid speed %d", eqos->phy->speed); in eqos_set_tx_clk_speed_tegra186()
720 ret = clk_set_rate(&eqos->clk_tx, rate); in eqos_set_tx_clk_speed_tegra186()
731 struct eqos_priv *eqos = dev_get_priv(dev); in eqos_adjust_link() local
737 if (eqos->phy->duplex) in eqos_adjust_link()
746 switch (eqos->phy->speed) { in eqos_adjust_link()
760 pr_err("invalid speed %d", eqos->phy->speed); in eqos_adjust_link()
795 struct eqos_priv *eqos = dev_get_priv(dev); in eqos_write_hwaddr() local
820 if (!eqos->config->reg_access_always_ok && !eqos->reg_access_ok) in eqos_write_hwaddr()
826 writel(val, &eqos->mac_regs->address0_high); in eqos_write_hwaddr()
831 writel(val, &eqos->mac_regs->address0_low); in eqos_write_hwaddr()
838 struct eqos_priv *eqos = dev_get_priv(dev); in eqos_start() local
846 eqos->tx_desc_idx = 0; in eqos_start()
847 eqos->rx_desc_idx = 0; in eqos_start()
863 eqos->reg_access_ok = true; in eqos_start()
865 ret = wait_for_bit_le32(&eqos->dma_regs->mode, in eqos_start()
880 writel(val, &eqos->mac_regs->us_tic_counter); in eqos_start()
882 eqos->phy = phy_connect(eqos->mii, 0, dev, 0); in eqos_start()
883 if (!eqos->phy) { in eqos_start()
887 ret = phy_config(eqos->phy); in eqos_start()
892 ret = phy_startup(eqos->phy); in eqos_start()
898 if (!eqos->phy->link) { in eqos_start()
913 setbits_le32(&eqos->mtl_regs->txq0_operation_mode, in eqos_start()
919 writel(0x10, &eqos->mtl_regs->txq0_quantum_weight); in eqos_start()
922 setbits_le32(&eqos->mtl_regs->rxq0_operation_mode, in eqos_start()
926 val = readl(&eqos->mac_regs->hw_feature1); in eqos_start()
939 clrsetbits_le32(&eqos->mtl_regs->txq0_operation_mode, in eqos_start()
943 clrsetbits_le32(&eqos->mtl_regs->rxq0_operation_mode, in eqos_start()
952 setbits_le32(&eqos->mtl_regs->rxq0_operation_mode, in eqos_start()
980 clrsetbits_le32(&eqos->mtl_regs->rxq0_operation_mode, in eqos_start()
993 clrsetbits_le32(&eqos->mac_regs->rxq_ctrl0, in eqos_start()
1001 setbits_le32(&eqos->mac_regs->q0_tx_flow_ctrl, in eqos_start()
1004 clrbits_le32(&eqos->mac_regs->txq_prty_map0, in eqos_start()
1008 clrbits_le32(&eqos->mac_regs->rxq_ctrl2, in eqos_start()
1012 setbits_le32(&eqos->mac_regs->q0_tx_flow_ctrl, in eqos_start()
1014 setbits_le32(&eqos->mac_regs->rx_flow_ctrl, in eqos_start()
1017 clrsetbits_le32(&eqos->mac_regs->configuration, in eqos_start()
1030 setbits_le32(&eqos->dma_regs->ch0_tx_control, in eqos_start()
1034 clrsetbits_le32(&eqos->dma_regs->ch0_rx_control, in eqos_start()
1040 setbits_le32(&eqos->dma_regs->ch0_control, in eqos_start()
1052 clrsetbits_le32(&eqos->dma_regs->ch0_tx_control, in eqos_start()
1057 clrsetbits_le32(&eqos->dma_regs->ch0_rx_control, in eqos_start()
1066 writel(val, &eqos->dma_regs->sysbus_mode); in eqos_start()
1070 memset(eqos->descs, 0, EQOS_DESCRIPTORS_SIZE); in eqos_start()
1072 struct eqos_desc *rx_desc = &(eqos->rx_descs[i]); in eqos_start()
1073 rx_desc->des0 = (u32)(ulong)(eqos->rx_dma_buf + in eqos_start()
1077 flush_cache((unsigned long)eqos->descs, EQOS_DESCRIPTORS_SIZE); in eqos_start()
1079 writel(0, &eqos->dma_regs->ch0_txdesc_list_haddress); in eqos_start()
1080 writel((ulong)eqos->tx_descs, &eqos->dma_regs->ch0_txdesc_list_address); in eqos_start()
1082 &eqos->dma_regs->ch0_txdesc_ring_length); in eqos_start()
1084 writel(0, &eqos->dma_regs->ch0_rxdesc_list_haddress); in eqos_start()
1085 writel((ulong)eqos->rx_descs, &eqos->dma_regs->ch0_rxdesc_list_address); in eqos_start()
1087 &eqos->dma_regs->ch0_rxdesc_ring_length); in eqos_start()
1091 setbits_le32(&eqos->mac_regs->configuration, in eqos_start()
1094 setbits_le32(&eqos->dma_regs->ch0_tx_control, in eqos_start()
1096 setbits_le32(&eqos->dma_regs->ch0_rx_control, in eqos_start()
1106 last_rx_desc = (ulong)&(eqos->rx_descs[(EQOS_DESCRIPTORS_RX - 1)]); in eqos_start()
1107 writel(last_rx_desc, &eqos->dma_regs->ch0_rxdesc_tail_pointer); in eqos_start()
1109 eqos->started = true; in eqos_start()
1115 phy_shutdown(eqos->phy); in eqos_start()
1116 eqos->phy = NULL; in eqos_start()
1128 struct eqos_priv *eqos = dev_get_priv(dev); in eqos_stop() local
1133 if (!eqos->started) in eqos_stop()
1135 eqos->started = false; in eqos_stop()
1136 eqos->reg_access_ok = false; in eqos_stop()
1139 clrbits_le32(&eqos->dma_regs->ch0_tx_control, in eqos_stop()
1144 u32 val = readl(&eqos->mtl_regs->txq0_debug); in eqos_stop()
1153 clrbits_le32(&eqos->mac_regs->configuration, in eqos_stop()
1158 u32 val = readl(&eqos->mtl_regs->rxq0_debug); in eqos_stop()
1168 clrbits_le32(&eqos->dma_regs->ch0_rx_control, in eqos_stop()
1171 if (eqos->phy) { in eqos_stop()
1172 phy_shutdown(eqos->phy); in eqos_stop()
1173 eqos->phy = NULL; in eqos_stop()
1183 struct eqos_priv *eqos = dev_get_priv(dev); in eqos_send() local
1190 memcpy(eqos->tx_dma_buf, packet, length); in eqos_send()
1191 eqos_flush_buffer(eqos->tx_dma_buf, length); in eqos_send()
1193 tx_desc = &(eqos->tx_descs[eqos->tx_desc_idx]); in eqos_send()
1194 eqos->tx_desc_idx++; in eqos_send()
1195 eqos->tx_desc_idx %= EQOS_DESCRIPTORS_TX; in eqos_send()
1197 tx_desc->des0 = (ulong)eqos->tx_dma_buf; in eqos_send()
1208 writel((ulong)(tx_desc + 1), &eqos->dma_regs->ch0_txdesc_tail_pointer); in eqos_send()
1224 struct eqos_priv *eqos = dev_get_priv(dev); in eqos_recv() local
1230 rx_desc = &(eqos->rx_descs[eqos->rx_desc_idx]); in eqos_recv()
1236 *packetp = eqos->rx_dma_buf + in eqos_recv()
1237 (eqos->rx_desc_idx * EQOS_MAX_PACKET_SIZE); in eqos_recv()
1248 struct eqos_priv *eqos = dev_get_priv(dev); in eqos_free_pkt() local
1254 packet_expected = eqos->rx_dma_buf + in eqos_free_pkt()
1255 (eqos->rx_desc_idx * EQOS_MAX_PACKET_SIZE); in eqos_free_pkt()
1262 rx_desc = &(eqos->rx_descs[eqos->rx_desc_idx]); in eqos_free_pkt()
1274 writel((ulong)rx_desc, &eqos->dma_regs->ch0_rxdesc_tail_pointer); in eqos_free_pkt()
1276 eqos->rx_desc_idx++; in eqos_free_pkt()
1277 eqos->rx_desc_idx %= EQOS_DESCRIPTORS_RX; in eqos_free_pkt()
1284 struct eqos_priv *eqos = dev_get_priv(dev); in eqos_probe_resources_core() local
1289 eqos->descs = eqos_alloc_descs(EQOS_DESCRIPTORS_TX + in eqos_probe_resources_core()
1291 if (!eqos->descs) { in eqos_probe_resources_core()
1296 eqos->tx_descs = (struct eqos_desc *)eqos->descs; in eqos_probe_resources_core()
1297 eqos->rx_descs = (eqos->tx_descs + EQOS_DESCRIPTORS_TX); in eqos_probe_resources_core()
1298 debug("%s: tx_descs=%p, rx_descs=%p\n", __func__, eqos->tx_descs, in eqos_probe_resources_core()
1299 eqos->rx_descs); in eqos_probe_resources_core()
1301 eqos->tx_dma_buf = memalign(EQOS_BUFFER_ALIGN, EQOS_MAX_PACKET_SIZE); in eqos_probe_resources_core()
1302 if (!eqos->tx_dma_buf) { in eqos_probe_resources_core()
1307 debug("%s: rx_dma_buf=%p\n", __func__, eqos->rx_dma_buf); in eqos_probe_resources_core()
1309 eqos->rx_dma_buf = memalign(EQOS_BUFFER_ALIGN, EQOS_RX_BUFFER_SIZE); in eqos_probe_resources_core()
1310 if (!eqos->rx_dma_buf) { in eqos_probe_resources_core()
1315 debug("%s: tx_dma_buf=%p\n", __func__, eqos->tx_dma_buf); in eqos_probe_resources_core()
1317 eqos->rx_pkt = malloc(EQOS_MAX_PACKET_SIZE); in eqos_probe_resources_core()
1318 if (!eqos->rx_pkt) { in eqos_probe_resources_core()
1323 debug("%s: rx_pkt=%p\n", __func__, eqos->rx_pkt); in eqos_probe_resources_core()
1329 free(eqos->rx_dma_buf); in eqos_probe_resources_core()
1331 free(eqos->tx_dma_buf); in eqos_probe_resources_core()
1333 eqos_free_descs(eqos->descs); in eqos_probe_resources_core()
1342 struct eqos_priv *eqos = dev_get_priv(dev); in eqos_remove_resources_core() local
1346 free(eqos->rx_pkt); in eqos_remove_resources_core()
1347 free(eqos->rx_dma_buf); in eqos_remove_resources_core()
1348 free(eqos->tx_dma_buf); in eqos_remove_resources_core()
1349 eqos_free_descs(eqos->descs); in eqos_remove_resources_core()
1357 struct eqos_priv *eqos = dev_get_priv(dev); in eqos_probe_resources_tegra186() local
1362 ret = reset_get_by_name(dev, "eqos", &eqos->reset_ctl); in eqos_probe_resources_tegra186()
1369 &eqos->phy_reset_gpio, in eqos_probe_resources_tegra186()
1376 ret = clk_get_by_name(dev, "slave_bus", &eqos->clk_slave_bus); in eqos_probe_resources_tegra186()
1382 ret = clk_get_by_name(dev, "master_bus", &eqos->clk_master_bus); in eqos_probe_resources_tegra186()
1388 ret = clk_get_by_name(dev, "rx", &eqos->clk_rx); in eqos_probe_resources_tegra186()
1394 ret = clk_get_by_name(dev, "ptp_ref", &eqos->clk_ptp_ref); in eqos_probe_resources_tegra186()
1401 ret = clk_get_by_name(dev, "tx", &eqos->clk_tx); in eqos_probe_resources_tegra186()
1411 clk_free(&eqos->clk_ptp_ref); in eqos_probe_resources_tegra186()
1413 clk_free(&eqos->clk_rx); in eqos_probe_resources_tegra186()
1415 clk_free(&eqos->clk_master_bus); in eqos_probe_resources_tegra186()
1417 clk_free(&eqos->clk_slave_bus); in eqos_probe_resources_tegra186()
1419 dm_gpio_free(dev, &eqos->phy_reset_gpio); in eqos_probe_resources_tegra186()
1421 reset_free(&eqos->reset_ctl); in eqos_probe_resources_tegra186()
1429 struct eqos_priv *eqos = dev_get_priv(dev); in eqos_remove_resources_tegra186() local
1433 clk_free(&eqos->clk_tx); in eqos_remove_resources_tegra186()
1434 clk_free(&eqos->clk_ptp_ref); in eqos_remove_resources_tegra186()
1435 clk_free(&eqos->clk_rx); in eqos_remove_resources_tegra186()
1436 clk_free(&eqos->clk_slave_bus); in eqos_remove_resources_tegra186()
1437 clk_free(&eqos->clk_master_bus); in eqos_remove_resources_tegra186()
1438 dm_gpio_free(dev, &eqos->phy_reset_gpio); in eqos_remove_resources_tegra186()
1439 reset_free(&eqos->reset_ctl); in eqos_remove_resources_tegra186()
1447 struct eqos_priv *eqos = dev_get_priv(dev); in eqos_probe() local
1452 eqos->dev = dev; in eqos_probe()
1453 eqos->config = (void *)dev_get_driver_data(dev); in eqos_probe()
1455 eqos->regs = devfdt_get_addr(dev); in eqos_probe()
1456 if (eqos->regs == FDT_ADDR_T_NONE) { in eqos_probe()
1460 eqos->mac_regs = (void *)(eqos->regs + EQOS_MAC_REGS_BASE); in eqos_probe()
1461 eqos->mtl_regs = (void *)(eqos->regs + EQOS_MTL_REGS_BASE); in eqos_probe()
1462 eqos->dma_regs = (void *)(eqos->regs + EQOS_DMA_REGS_BASE); in eqos_probe()
1463 eqos->tegra186_regs = (void *)(eqos->regs + EQOS_TEGRA186_REGS_BASE); in eqos_probe()
1477 eqos->mii = mdio_alloc(); in eqos_probe()
1478 if (!eqos->mii) { in eqos_probe()
1482 eqos->mii->read = eqos_mdio_read; in eqos_probe()
1483 eqos->mii->write = eqos_mdio_write; in eqos_probe()
1484 eqos->mii->priv = eqos; in eqos_probe()
1485 strcpy(eqos->mii->name, dev->name); in eqos_probe()
1487 ret = mdio_register(eqos->mii); in eqos_probe()
1497 mdio_free(eqos->mii); in eqos_probe()
1509 struct eqos_priv *eqos = dev_get_priv(dev); in eqos_remove() local
1513 mdio_unregister(eqos->mii); in eqos_remove()
1514 mdio_free(eqos->mii); in eqos_remove()