Lines Matching refs:priv

70 static void tsec_configure_serdes(struct tsec_private *priv)  in tsec_configure_serdes()  argument
76 tsec_local_mdio_write(priv->phyregs_sgmii, in_be32(&priv->regs->tbipa), in tsec_configure_serdes()
78 tsec_local_mdio_write(priv->phyregs_sgmii, in_be32(&priv->regs->tbipa), in tsec_configure_serdes()
80 tsec_local_mdio_write(priv->phyregs_sgmii, in_be32(&priv->regs->tbipa), in tsec_configure_serdes()
110 struct tsec_private *priv = (struct tsec_private *)dev->priv; in tsec_mcast_addr() local
111 struct tsec __iomem *regs = priv->regs; in tsec_mcast_addr()
181 static void adjust_link(struct tsec_private *priv, struct phy_device *phydev) in adjust_link() argument
183 struct tsec __iomem *regs = priv->regs; in adjust_link()
241 struct tsec_private *priv = (struct tsec_private *)dev->priv; in tsec_send() local
242 struct tsec __iomem *regs = priv->regs; in tsec_send()
249 in_be16(&priv->txbd[priv->tx_idx].status) & TXBD_READY; in tsec_send()
257 out_be32(&priv->txbd[priv->tx_idx].bufptr, (u32)packet); in tsec_send()
258 out_be16(&priv->txbd[priv->tx_idx].length, length); in tsec_send()
259 status = in_be16(&priv->txbd[priv->tx_idx].status); in tsec_send()
260 out_be16(&priv->txbd[priv->tx_idx].status, status | in tsec_send()
268 in_be16(&priv->txbd[priv->tx_idx].status) & TXBD_READY; in tsec_send()
276 priv->tx_idx = (priv->tx_idx + 1) % TX_BUF_CNT; in tsec_send()
277 result = in_be16(&priv->txbd[priv->tx_idx].status) & TXBD_STATS; in tsec_send()
285 struct tsec_private *priv = (struct tsec_private *)dev->priv; in tsec_recv() local
286 struct tsec __iomem *regs = priv->regs; in tsec_recv()
288 while (!(in_be16(&priv->rxbd[priv->rx_idx].status) & RXBD_EMPTY)) { in tsec_recv()
289 int length = in_be16(&priv->rxbd[priv->rx_idx].length); in tsec_recv()
290 uint16_t status = in_be16(&priv->rxbd[priv->rx_idx].status); in tsec_recv()
291 uchar *packet = net_rx_packets[priv->rx_idx]; in tsec_recv()
299 out_be16(&priv->rxbd[priv->rx_idx].length, 0); in tsec_recv()
303 if ((priv->rx_idx + 1) == PKTBUFSRX) in tsec_recv()
305 out_be16(&priv->rxbd[priv->rx_idx].status, status); in tsec_recv()
307 priv->rx_idx = (priv->rx_idx + 1) % PKTBUFSRX; in tsec_recv()
320 struct tsec_private *priv = (struct tsec_private *)dev->priv; in tsec_recv() local
321 struct tsec __iomem *regs = priv->regs; in tsec_recv()
324 if (!(in_be16(&priv->rxbd[priv->rx_idx].status) & RXBD_EMPTY)) { in tsec_recv()
325 int length = in_be16(&priv->rxbd[priv->rx_idx].length); in tsec_recv()
326 uint16_t status = in_be16(&priv->rxbd[priv->rx_idx].status); in tsec_recv()
331 buf = in_be32(&priv->rxbd[priv->rx_idx].bufptr); in tsec_recv()
349 struct tsec_private *priv = (struct tsec_private *)dev->priv; in tsec_free_pkt() local
352 out_be16(&priv->rxbd[priv->rx_idx].length, 0); in tsec_free_pkt()
356 if ((priv->rx_idx + 1) == PKTBUFSRX) in tsec_free_pkt()
358 out_be16(&priv->rxbd[priv->rx_idx].status, status); in tsec_free_pkt()
360 priv->rx_idx = (priv->rx_idx + 1) % PKTBUFSRX; in tsec_free_pkt()
373 struct tsec_private *priv = (struct tsec_private *)dev->priv; in tsec_halt() local
374 struct tsec __iomem *regs = priv->regs; in tsec_halt()
386 phy_shutdown(priv->phydev); in tsec_halt()
395 void redundant_init(struct tsec_private *priv) in redundant_init() argument
397 struct tsec __iomem *regs = priv->regs; in redundant_init()
431 tsec_send(priv->dev, (void *)pkt, sizeof(pkt)); in redundant_init()
435 in_be16(&priv->rxbd[priv->rx_idx].status) & RXBD_EMPTY; in redundant_init()
438 printf("%s: tsec: rx error\n", priv->dev->name); in redundant_init()
443 if (!memcmp(pkt, net_rx_packets[priv->rx_idx], sizeof(pkt))) in redundant_init()
446 out_be16(&priv->rxbd[priv->rx_idx].length, 0); in redundant_init()
448 if ((priv->rx_idx + 1) == PKTBUFSRX) in redundant_init()
450 out_be16(&priv->rxbd[priv->rx_idx].status, status); in redundant_init()
451 priv->rx_idx = (priv->rx_idx + 1) % PKTBUFSRX; in redundant_init()
478 static void startup_tsec(struct tsec_private *priv) in startup_tsec() argument
480 struct tsec __iomem *regs = priv->regs; in startup_tsec()
485 priv->rx_idx = 0; in startup_tsec()
486 priv->tx_idx = 0; in startup_tsec()
492 out_be32(&regs->tbase, (u32)&priv->txbd[0]); in startup_tsec()
493 out_be32(&regs->rbase, (u32)&priv->rxbd[0]); in startup_tsec()
497 out_be16(&priv->rxbd[i].status, RXBD_EMPTY); in startup_tsec()
498 out_be16(&priv->rxbd[i].length, 0); in startup_tsec()
499 out_be32(&priv->rxbd[i].bufptr, (u32)net_rx_packets[i]); in startup_tsec()
501 status = in_be16(&priv->rxbd[PKTBUFSRX - 1].status); in startup_tsec()
502 out_be16(&priv->rxbd[PKTBUFSRX - 1].status, status | RXBD_WRAP); in startup_tsec()
506 out_be16(&priv->txbd[i].status, 0); in startup_tsec()
507 out_be16(&priv->txbd[i].length, 0); in startup_tsec()
508 out_be32(&priv->txbd[i].bufptr, 0); in startup_tsec()
510 status = in_be16(&priv->txbd[TX_BUF_CNT - 1].status); in startup_tsec()
511 out_be16(&priv->txbd[TX_BUF_CNT - 1].status, status | TXBD_WRAP); in startup_tsec()
516 redundant_init(priv); in startup_tsec()
540 struct tsec_private *priv = (struct tsec_private *)dev->priv; in tsec_init() local
544 struct tsec __iomem *regs = priv->regs; in tsec_init()
585 startup_tsec(priv); in tsec_init()
588 ret = phy_startup(priv->phydev); in tsec_init()
591 priv->phydev->dev->name); in tsec_init()
595 adjust_link(priv, priv->phydev); in tsec_init()
598 return priv->phydev->link ? 0 : -1; in tsec_init()
601 static phy_interface_t tsec_get_interface(struct tsec_private *priv) in tsec_get_interface() argument
603 struct tsec __iomem *regs = priv->regs; in tsec_get_interface()
622 phy_interface_t interface = priv->interface; in tsec_get_interface()
637 if (priv->flags & TSEC_GIGABIT) in tsec_get_interface()
648 static int init_phy(struct tsec_private *priv) in init_phy() argument
651 struct tsec __iomem *regs = priv->regs; in init_phy()
657 if (priv->flags & TSEC_GIGABIT) in init_phy()
661 out_be32(&regs->tbipa, priv->tbiaddr); in init_phy()
663 priv->interface = tsec_get_interface(priv); in init_phy()
665 if (priv->interface == PHY_INTERFACE_MODE_SGMII) in init_phy()
666 tsec_configure_serdes(priv); in init_phy()
668 phydev = phy_connect(priv->bus, priv->phyaddr, priv->dev, in init_phy()
669 priv->interface); in init_phy()
676 priv->phydev = phydev; in init_phy()
692 struct tsec_private *priv; in tsec_initialize() local
701 priv = (struct tsec_private *)malloc(sizeof(*priv)); in tsec_initialize()
703 if (NULL == 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()
775 struct tsec_private *priv = dev_get_priv(dev); in tsec_probe() local
784 priv->regs = (struct tsec *)pdata->iobase; in tsec_probe()
790 priv->phyaddr = reg; in tsec_probe()
799 priv->phyregs_sgmii = (struct tsec_mii_mng *)(reg + 0x520); in tsec_probe()
810 priv->tbiaddr = reg; in tsec_probe()
812 priv->tbiaddr = CONFIG_SYS_TBIPA_VALUE; 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()