Lines Matching refs:priv

148 	struct udevice *dev = bus->priv;  in sun8i_mdio_read()
149 struct emac_eth_dev *priv = dev_get_priv(dev); in sun8i_mdio_read() local
166 writel(miiaddr, priv->mac_reg + EMAC_MII_CMD); in sun8i_mdio_read()
170 if (!(readl(priv->mac_reg + EMAC_MII_CMD) & MDIO_CMD_MII_BUSY)) in sun8i_mdio_read()
171 return readl(priv->mac_reg + EMAC_MII_DATA); in sun8i_mdio_read()
181 struct udevice *dev = bus->priv; in sun8i_mdio_write()
182 struct emac_eth_dev *priv = dev_get_priv(dev); in sun8i_mdio_write() local
198 writel(val, priv->mac_reg + EMAC_MII_DATA); in sun8i_mdio_write()
199 writel(miiaddr, priv->mac_reg + EMAC_MII_CMD); in sun8i_mdio_write()
203 if (!(readl(priv->mac_reg + EMAC_MII_CMD) & in sun8i_mdio_write()
214 static int _sun8i_write_hwaddr(struct emac_eth_dev *priv, u8 *mac_id) in _sun8i_write_hwaddr() argument
222 writel(macid_hi, priv->mac_reg + EMAC_ADDR0_HIGH); in _sun8i_write_hwaddr()
223 writel(macid_lo, priv->mac_reg + EMAC_ADDR0_LOW); in _sun8i_write_hwaddr()
228 static void sun8i_adjust_link(struct emac_eth_dev *priv, in sun8i_adjust_link() argument
233 v = readl(priv->mac_reg + EMAC_CTL0); in sun8i_adjust_link()
253 writel(v, priv->mac_reg + EMAC_CTL0); in sun8i_adjust_link()
256 static int sun8i_emac_set_syscon_ephy(struct emac_eth_dev *priv, u32 *reg) in sun8i_emac_set_syscon_ephy() argument
258 if (priv->use_internal_phy) { in sun8i_emac_set_syscon_ephy()
264 *reg |= priv->phyaddr << H3_EPHY_ADDR_SHIFT; in sun8i_emac_set_syscon_ephy()
276 static int sun8i_emac_set_syscon(struct emac_eth_dev *priv) in sun8i_emac_set_syscon() argument
281 reg = readl(priv->sysctl_reg); in sun8i_emac_set_syscon()
283 if (priv->variant == H3_EMAC) { in sun8i_emac_set_syscon()
284 ret = sun8i_emac_set_syscon_ephy(priv, &reg); in sun8i_emac_set_syscon()
290 if (priv->variant == H3_EMAC || priv->variant == A64_EMAC) in sun8i_emac_set_syscon()
293 switch (priv->interface) { in sun8i_emac_set_syscon()
301 if (priv->variant == H3_EMAC || in sun8i_emac_set_syscon()
302 priv->variant == A64_EMAC) { in sun8i_emac_set_syscon()
312 writel(reg, priv->sysctl_reg); in sun8i_emac_set_syscon()
317 static int sun8i_phy_init(struct emac_eth_dev *priv, void *dev) in sun8i_phy_init() argument
321 phydev = phy_connect(priv->bus, priv->phyaddr, dev, priv->interface); in sun8i_phy_init()
327 priv->phydev = phydev; in sun8i_phy_init()
328 phy_config(priv->phydev); in sun8i_phy_init()
333 static void rx_descs_init(struct emac_eth_dev *priv) in rx_descs_init() argument
335 struct emac_dma_desc *desc_table_p = &priv->rx_chain[0]; in rx_descs_init()
336 char *rxbuffs = &priv->rxbuffer[0]; in rx_descs_init()
356 flush_dcache_range((uintptr_t)priv->rx_chain, in rx_descs_init()
357 (uintptr_t)priv->rx_chain + in rx_descs_init()
358 sizeof(priv->rx_chain)); in rx_descs_init()
360 writel((uintptr_t)&desc_table_p[0], (priv->mac_reg + EMAC_RX_DMA_DESC)); in rx_descs_init()
361 priv->rx_currdescnum = 0; in rx_descs_init()
364 static void tx_descs_init(struct emac_eth_dev *priv) in tx_descs_init() argument
366 struct emac_dma_desc *desc_table_p = &priv->tx_chain[0]; in tx_descs_init()
367 char *txbuffs = &priv->txbuffer[0]; in tx_descs_init()
384 flush_dcache_range((uintptr_t)priv->tx_chain, in tx_descs_init()
385 (uintptr_t)priv->tx_chain + in tx_descs_init()
386 sizeof(priv->tx_chain)); in tx_descs_init()
388 writel((uintptr_t)&desc_table_p[0], priv->mac_reg + EMAC_TX_DMA_DESC); in tx_descs_init()
389 priv->tx_currdescnum = 0; in tx_descs_init()
392 static int _sun8i_emac_eth_init(struct emac_eth_dev *priv, u8 *enetaddr) in _sun8i_emac_eth_init() argument
397 reg = readl((priv->mac_reg + EMAC_CTL1)); in _sun8i_emac_eth_init()
401 setbits_le32((priv->mac_reg + EMAC_CTL1), 0x1); in _sun8i_emac_eth_init()
403 reg = readl(priv->mac_reg + EMAC_CTL1); in _sun8i_emac_eth_init()
412 _sun8i_write_hwaddr(priv, enetaddr); in _sun8i_emac_eth_init()
414 v = readl(priv->mac_reg + EMAC_TX_CTL1); in _sun8i_emac_eth_init()
417 writel(v, priv->mac_reg + EMAC_TX_CTL1); in _sun8i_emac_eth_init()
419 v = readl(priv->mac_reg + EMAC_RX_CTL1); in _sun8i_emac_eth_init()
424 writel(v, priv->mac_reg + EMAC_RX_CTL1); in _sun8i_emac_eth_init()
427 writel(8 << 24, priv->mac_reg + EMAC_CTL1); in _sun8i_emac_eth_init()
430 rx_descs_init(priv); in _sun8i_emac_eth_init()
431 tx_descs_init(priv); in _sun8i_emac_eth_init()
434 genphy_parse_link(priv->phydev); in _sun8i_emac_eth_init()
436 sun8i_adjust_link(priv, priv->phydev); in _sun8i_emac_eth_init()
439 v = readl(priv->mac_reg + EMAC_RX_CTL1); in _sun8i_emac_eth_init()
441 writel(v, priv->mac_reg + EMAC_RX_CTL1); in _sun8i_emac_eth_init()
443 v = readl(priv->mac_reg + EMAC_TX_CTL1); in _sun8i_emac_eth_init()
445 writel(v, priv->mac_reg + EMAC_TX_CTL1); in _sun8i_emac_eth_init()
448 setbits_le32(priv->mac_reg + EMAC_RX_CTL0, BIT(31)); in _sun8i_emac_eth_init()
449 setbits_le32(priv->mac_reg + EMAC_TX_CTL0, BIT(31)); in _sun8i_emac_eth_init()
498 static int _sun8i_eth_recv(struct emac_eth_dev *priv, uchar **packetp) in _sun8i_eth_recv() argument
500 u32 status, desc_num = priv->rx_currdescnum; in _sun8i_eth_recv()
501 struct emac_dma_desc *desc_p = &priv->rx_chain[desc_num]; in _sun8i_eth_recv()
545 static int _sun8i_emac_eth_send(struct emac_eth_dev *priv, void *packet, in _sun8i_emac_eth_send() argument
548 u32 v, desc_num = priv->tx_currdescnum; in _sun8i_emac_eth_send()
549 struct emac_dma_desc *desc_p = &priv->tx_chain[desc_num]; in _sun8i_emac_eth_send()
584 priv->tx_currdescnum = desc_num; in _sun8i_emac_eth_send()
587 v = readl(priv->mac_reg + EMAC_TX_CTL1); in _sun8i_emac_eth_send()
590 writel(v, priv->mac_reg + EMAC_TX_CTL1); in _sun8i_emac_eth_send()
598 struct emac_eth_dev *priv = dev_get_priv(dev); in sun8i_eth_write_hwaddr() local
600 return _sun8i_write_hwaddr(priv, pdata->enetaddr); in sun8i_eth_write_hwaddr()
603 static void sun8i_emac_board_setup(struct emac_eth_dev *priv) in sun8i_emac_board_setup() argument
607 if (priv->use_internal_phy) { in sun8i_emac_board_setup()
625 struct udevice *dev = bus->priv; in sun8i_mdio_reset()
626 struct emac_eth_dev *priv = dev_get_priv(dev); in sun8i_mdio_reset() local
630 if (!dm_gpio_is_valid(&priv->reset_gpio)) in sun8i_mdio_reset()
634 ret = dm_gpio_set_value(&priv->reset_gpio, 0); in sun8i_mdio_reset()
640 ret = dm_gpio_set_value(&priv->reset_gpio, 1); in sun8i_mdio_reset()
646 ret = dm_gpio_set_value(&priv->reset_gpio, 0); in sun8i_mdio_reset()
656 static int sun8i_mdio_init(const char *name, struct udevice *priv) in sun8i_mdio_init() argument
668 bus->priv = (void *)priv; in sun8i_mdio_init()
680 return _sun8i_emac_eth_init(dev->priv, pdata->enetaddr); in sun8i_emac_eth_start()
685 struct emac_eth_dev *priv = dev_get_priv(dev); in sun8i_emac_eth_send() local
687 return _sun8i_emac_eth_send(priv, packet, length); in sun8i_emac_eth_send()
692 struct emac_eth_dev *priv = dev_get_priv(dev); in sun8i_emac_eth_recv() local
694 return _sun8i_eth_recv(priv, packetp); in sun8i_emac_eth_recv()
697 static int _sun8i_free_pkt(struct emac_eth_dev *priv) in _sun8i_free_pkt() argument
699 u32 desc_num = priv->rx_currdescnum; in _sun8i_free_pkt()
700 struct emac_dma_desc *desc_p = &priv->rx_chain[desc_num]; in _sun8i_free_pkt()
714 priv->rx_currdescnum = desc_num; in _sun8i_free_pkt()
722 struct emac_eth_dev *priv = dev_get_priv(dev); in sun8i_eth_free_pkt() local
724 return _sun8i_free_pkt(priv); in sun8i_eth_free_pkt()
729 struct emac_eth_dev *priv = dev_get_priv(dev); in sun8i_emac_eth_stop() local
732 clrbits_le32(priv->mac_reg + EMAC_RX_CTL0, BIT(31)); in sun8i_emac_eth_stop()
733 clrbits_le32(priv->mac_reg + EMAC_TX_CTL0, BIT(31)); in sun8i_emac_eth_stop()
736 clrbits_le32(priv->mac_reg + EMAC_TX_CTL1, BIT(30)); in sun8i_emac_eth_stop()
738 phy_shutdown(priv->phydev); in sun8i_emac_eth_stop()
744 struct emac_eth_dev *priv = dev_get_priv(dev); in sun8i_emac_eth_probe() local
746 priv->mac_reg = (void *)pdata->iobase; in sun8i_emac_eth_probe()
748 sun8i_emac_board_setup(priv); in sun8i_emac_eth_probe()
749 sun8i_emac_set_syscon(priv); in sun8i_emac_eth_probe()
752 priv->bus = miiphy_get_dev_by_name(dev->name); in sun8i_emac_eth_probe()
754 return sun8i_phy_init(priv, dev); in sun8i_emac_eth_probe()
770 struct emac_eth_dev *priv = dev_get_priv(dev); in sun8i_emac_eth_ofdata_to_platdata() local
780 priv->sysctl_reg = devfdt_get_addr_name(dev, "syscon"); in sun8i_emac_eth_ofdata_to_platdata()
783 priv->phyaddr = -1; in sun8i_emac_eth_ofdata_to_platdata()
784 priv->use_internal_phy = false; in sun8i_emac_eth_ofdata_to_platdata()
789 priv->phyaddr = fdtdec_get_int(gd->fdt_blob, offset, "reg", in sun8i_emac_eth_ofdata_to_platdata()
803 priv->variant = dev_get_driver_data(dev); in sun8i_emac_eth_ofdata_to_platdata()
805 if (!priv->variant) { in sun8i_emac_eth_ofdata_to_platdata()
807 (char *)priv->variant); in sun8i_emac_eth_ofdata_to_platdata()
811 if (priv->variant == H3_EMAC) { in sun8i_emac_eth_ofdata_to_platdata()
814 priv->use_internal_phy = true; in sun8i_emac_eth_ofdata_to_platdata()
817 priv->interface = pdata->phy_interface; in sun8i_emac_eth_ofdata_to_platdata()
819 if (!priv->use_internal_phy) in sun8i_emac_eth_ofdata_to_platdata()
828 &priv->reset_gpio, reset_flags); in sun8i_emac_eth_ofdata_to_platdata()