Lines Matching refs:priv
67 static void tsec_configure_serdes(struct tsec_private *priv) in tsec_configure_serdes() argument
73 tsec_local_mdio_write(priv->phyregs_sgmii, in_be32(&priv->regs->tbipa), in tsec_configure_serdes()
75 tsec_local_mdio_write(priv->phyregs_sgmii, in_be32(&priv->regs->tbipa), in tsec_configure_serdes()
77 tsec_local_mdio_write(priv->phyregs_sgmii, in_be32(&priv->regs->tbipa), in tsec_configure_serdes()
107 struct tsec_private *priv = (struct tsec_private *)dev->priv; in tsec_mcast_addr() local
108 struct tsec __iomem *regs = priv->regs; in tsec_mcast_addr()
177 static void adjust_link(struct tsec_private *priv, struct phy_device *phydev) in adjust_link() argument
179 struct tsec __iomem *regs = priv->regs; in adjust_link()
237 struct tsec_private *priv = (struct tsec_private *)dev->priv; in tsec_send() local
238 struct tsec __iomem *regs = priv->regs; in tsec_send()
245 in_be16(&priv->txbd[priv->tx_idx].status) & TXBD_READY; in tsec_send()
253 out_be32(&priv->txbd[priv->tx_idx].bufptr, (u32)packet); in tsec_send()
254 out_be16(&priv->txbd[priv->tx_idx].length, length); in tsec_send()
255 status = in_be16(&priv->txbd[priv->tx_idx].status); in tsec_send()
256 out_be16(&priv->txbd[priv->tx_idx].status, status | in tsec_send()
264 in_be16(&priv->txbd[priv->tx_idx].status) & TXBD_READY; in tsec_send()
272 priv->tx_idx = (priv->tx_idx + 1) % TX_BUF_CNT; in tsec_send()
273 result = in_be16(&priv->txbd[priv->tx_idx].status) & TXBD_STATS; in tsec_send()
281 struct tsec_private *priv = (struct tsec_private *)dev->priv; in tsec_recv() local
282 struct tsec __iomem *regs = priv->regs; in tsec_recv()
284 while (!(in_be16(&priv->rxbd[priv->rx_idx].status) & RXBD_EMPTY)) { in tsec_recv()
285 int length = in_be16(&priv->rxbd[priv->rx_idx].length); in tsec_recv()
286 u16 status = in_be16(&priv->rxbd[priv->rx_idx].status); in tsec_recv()
287 uchar *packet = net_rx_packets[priv->rx_idx]; in tsec_recv()
295 out_be16(&priv->rxbd[priv->rx_idx].length, 0); in tsec_recv()
299 if ((priv->rx_idx + 1) == PKTBUFSRX) in tsec_recv()
301 out_be16(&priv->rxbd[priv->rx_idx].status, status); in tsec_recv()
303 priv->rx_idx = (priv->rx_idx + 1) % PKTBUFSRX; in tsec_recv()
316 struct tsec_private *priv = (struct tsec_private *)dev->priv; in tsec_recv() local
317 struct tsec __iomem *regs = priv->regs; in tsec_recv()
320 if (!(in_be16(&priv->rxbd[priv->rx_idx].status) & RXBD_EMPTY)) { in tsec_recv()
321 int length = in_be16(&priv->rxbd[priv->rx_idx].length); in tsec_recv()
322 u16 status = in_be16(&priv->rxbd[priv->rx_idx].status); in tsec_recv()
327 buf = in_be32(&priv->rxbd[priv->rx_idx].bufptr); in tsec_recv()
345 struct tsec_private *priv = (struct tsec_private *)dev->priv; in tsec_free_pkt() local
348 out_be16(&priv->rxbd[priv->rx_idx].length, 0); in tsec_free_pkt()
352 if ((priv->rx_idx + 1) == PKTBUFSRX) in tsec_free_pkt()
354 out_be16(&priv->rxbd[priv->rx_idx].status, status); in tsec_free_pkt()
356 priv->rx_idx = (priv->rx_idx + 1) % PKTBUFSRX; in tsec_free_pkt()
369 struct tsec_private *priv = (struct tsec_private *)dev->priv; in tsec_halt() local
370 struct tsec __iomem *regs = priv->regs; in tsec_halt()
382 phy_shutdown(priv->phydev); in tsec_halt()
391 void redundant_init(struct tsec_private *priv) in redundant_init() argument
393 struct tsec __iomem *regs = priv->regs; in redundant_init()
428 tsec_send(priv->dev, (void *)pkt, sizeof(pkt)); in redundant_init()
432 in_be16(&priv->rxbd[priv->rx_idx].status) & RXBD_EMPTY; in redundant_init()
435 printf("%s: tsec: rx error\n", priv->dev->name); in redundant_init()
440 if (!memcmp(pkt, net_rx_packets[priv->rx_idx], sizeof(pkt))) in redundant_init()
443 out_be16(&priv->rxbd[priv->rx_idx].length, 0); in redundant_init()
445 if ((priv->rx_idx + 1) == PKTBUFSRX) in redundant_init()
447 out_be16(&priv->rxbd[priv->rx_idx].status, status); in redundant_init()
448 priv->rx_idx = (priv->rx_idx + 1) % PKTBUFSRX; in redundant_init()
475 static void startup_tsec(struct tsec_private *priv) in startup_tsec() argument
477 struct tsec __iomem *regs = priv->regs; in startup_tsec()
482 priv->rx_idx = 0; in startup_tsec()
483 priv->tx_idx = 0; in startup_tsec()
489 out_be32(®s->tbase, (u32)&priv->txbd[0]); in startup_tsec()
490 out_be32(®s->rbase, (u32)&priv->rxbd[0]); in startup_tsec()
494 out_be16(&priv->rxbd[i].status, RXBD_EMPTY); in startup_tsec()
495 out_be16(&priv->rxbd[i].length, 0); in startup_tsec()
496 out_be32(&priv->rxbd[i].bufptr, (u32)net_rx_packets[i]); in startup_tsec()
498 status = in_be16(&priv->rxbd[PKTBUFSRX - 1].status); in startup_tsec()
499 out_be16(&priv->rxbd[PKTBUFSRX - 1].status, status | RXBD_WRAP); in startup_tsec()
503 out_be16(&priv->txbd[i].status, 0); in startup_tsec()
504 out_be16(&priv->txbd[i].length, 0); in startup_tsec()
505 out_be32(&priv->txbd[i].bufptr, 0); in startup_tsec()
507 status = in_be16(&priv->txbd[TX_BUF_CNT - 1].status); in startup_tsec()
508 out_be16(&priv->txbd[TX_BUF_CNT - 1].status, status | TXBD_WRAP); in startup_tsec()
513 redundant_init(priv); in startup_tsec()
537 struct tsec_private *priv = (struct tsec_private *)dev->priv; in tsec_init() local
541 struct tsec __iomem *regs = priv->regs; in tsec_init()
582 startup_tsec(priv); in tsec_init()
585 ret = phy_startup(priv->phydev); in tsec_init()
588 priv->phydev->dev->name); in tsec_init()
592 adjust_link(priv, priv->phydev); in tsec_init()
595 return priv->phydev->link ? 0 : -1; in tsec_init()
598 static phy_interface_t tsec_get_interface(struct tsec_private *priv) in tsec_get_interface() argument
600 struct tsec __iomem *regs = priv->regs; in tsec_get_interface()
621 interface = priv->interface; in tsec_get_interface()
635 if (priv->flags & TSEC_GIGABIT) in tsec_get_interface()
646 static int init_phy(struct tsec_private *priv) in init_phy() argument
649 struct tsec __iomem *regs = priv->regs; in init_phy()
655 if (priv->flags & TSEC_GIGABIT) in init_phy()
659 out_be32(®s->tbipa, priv->tbiaddr); in init_phy()
661 priv->interface = tsec_get_interface(priv); in init_phy()
663 if (priv->interface == PHY_INTERFACE_MODE_SGMII) in init_phy()
664 tsec_configure_serdes(priv); in init_phy()
666 phydev = phy_connect(priv->bus, priv->phyaddr, priv->dev, in init_phy()
667 priv->interface); in init_phy()
674 priv->phydev = phydev; in init_phy()
690 struct tsec_private *priv; in tsec_initialize() local
699 priv = (struct tsec_private *)malloc(sizeof(*priv)); in tsec_initialize()
701 if (!priv) { in tsec_initialize()
706 priv->regs = tsec_info->regs; in tsec_initialize()
707 priv->phyregs_sgmii = tsec_info->miiregs_sgmii; in tsec_initialize()
709 priv->phyaddr = tsec_info->phyaddr; in tsec_initialize()
710 priv->tbiaddr = CONFIG_SYS_TBIPA_VALUE; in tsec_initialize()
711 priv->flags = tsec_info->flags; in tsec_initialize()
714 priv->interface = tsec_info->interface; in tsec_initialize()
715 priv->bus = miiphy_get_dev_by_name(tsec_info->mii_devname); in tsec_initialize()
716 priv->dev = dev; in tsec_initialize()
718 dev->priv = priv; in tsec_initialize()
734 setbits_be32(&priv->regs->maccfg1, MACCFG1_SOFT_RESET); in tsec_initialize()
736 clrbits_be32(&priv->regs->maccfg1, MACCFG1_SOFT_RESET); in tsec_initialize()
739 return init_phy(priv); in tsec_initialize()
776 struct tsec_private *priv = dev_get_priv(dev); in tsec_probe() local
785 priv->regs = (struct tsec *)pdata->iobase; in tsec_probe()
794 priv->phyaddr = reg; in tsec_probe()
801 priv->phyregs_sgmii = (struct tsec_mii_mng *)reg; in tsec_probe()
809 priv->tbiaddr = CONFIG_SYS_TBIPA_VALUE; in tsec_probe()
813 priv->tbiaddr = reg; in tsec_probe()
823 priv->interface = pdata->phy_interface; in tsec_probe()
826 priv->flags = TSEC_GIGABIT; in tsec_probe()
827 if (priv->interface == PHY_INTERFACE_MODE_SGMII) in tsec_probe()
828 priv->flags |= TSEC_SGMII; in tsec_probe()
830 mdio_info.regs = priv->phyregs_sgmii; in tsec_probe()
837 setbits_be32(&priv->regs->maccfg1, MACCFG1_SOFT_RESET); in tsec_probe()
839 clrbits_be32(&priv->regs->maccfg1, MACCFG1_SOFT_RESET); in tsec_probe()
841 priv->dev = dev; in tsec_probe()
842 priv->bus = miiphy_get_dev_by_name(dev->name); in tsec_probe()
845 return !init_phy(priv); in tsec_probe()
850 struct tsec_private *priv = dev->priv; in tsec_remove() local
852 free(priv->phydev); in tsec_remove()
853 mdio_unregister(priv->bus); in tsec_remove()
854 mdio_free(priv->bus); in tsec_remove()