2 * Freescale Three Speed Ethernet Controller driver
4 * This software may be used and distributed according to the
5 * terms of the GNU Public License, Version 2, incorporated
8 * Copyright 2004-2011 Freescale Semiconductor, Inc.
9 * (C) Copyright 2003, Motorola, Inc.
21 #include <asm/errno.h>
22 #include <asm/processor.h>
24 DECLARE_GLOBAL_DATA_PTR;
28 static uint rxIdx; /* index of the current RX buffer */
29 static uint txIdx; /* index of the current TX buffer */
31 typedef volatile struct rtxbd {
32 txbd8_t txbd[TX_BUF_CNT];
33 rxbd8_t rxbd[PKTBUFSRX];
36 #define MAXCONTROLLERS (8)
38 static struct tsec_private *privlist[MAXCONTROLLERS];
39 static int num_tsecs = 0;
42 static RTXBD rtx __attribute__ ((aligned(8)));
44 #error "rtx must be 64-bit aligned"
47 static int tsec_send(struct eth_device *dev, void *packet, int length);
49 /* Default initializations for TSEC controllers. */
51 static struct tsec_info_struct tsec_info[] = {
53 STD_TSEC_INFO(1), /* TSEC1 */
56 STD_TSEC_INFO(2), /* TSEC2 */
58 #ifdef CONFIG_MPC85XX_FEC
60 .regs = (tsec_t *)(TSEC_BASE_ADDR + 0x2000),
61 .devname = CONFIG_MPC85XX_FEC_NAME,
62 .phyaddr = FEC_PHY_ADDR,
64 .mii_devname = DEFAULT_MII_NAME
68 STD_TSEC_INFO(3), /* TSEC3 */
71 STD_TSEC_INFO(4), /* TSEC4 */
75 #define TBIANA_SETTINGS ( \
76 TBIANA_ASYMMETRIC_PAUSE \
77 | TBIANA_SYMMETRIC_PAUSE \
78 | TBIANA_FULL_DUPLEX \
81 /* By default force the TBI PHY into 1000Mbps full duplex when in SGMII mode */
82 #ifndef CONFIG_TSEC_TBICR_SETTINGS
83 #define CONFIG_TSEC_TBICR_SETTINGS ( \
89 #endif /* CONFIG_TSEC_TBICR_SETTINGS */
91 /* Configure the TBI for SGMII operation */
92 static void tsec_configure_serdes(struct tsec_private *priv)
94 /* Access TBI PHY registers at given TSEC register offset as opposed
95 * to the register offset used for external PHY accesses */
96 tsec_local_mdio_write(priv->phyregs_sgmii, in_be32(&priv->regs->tbipa),
97 0, TBI_ANA, TBIANA_SETTINGS);
98 tsec_local_mdio_write(priv->phyregs_sgmii, in_be32(&priv->regs->tbipa),
99 0, TBI_TBICON, TBICON_CLK_SELECT);
100 tsec_local_mdio_write(priv->phyregs_sgmii, in_be32(&priv->regs->tbipa),
101 0, TBI_CR, CONFIG_TSEC_TBICR_SETTINGS);
104 #ifdef CONFIG_MCAST_TFTP
106 /* CREDITS: linux gianfar driver, slightly adjusted... thanx. */
108 /* Set the appropriate hash bit for the given addr */
110 /* The algorithm works like so:
111 * 1) Take the Destination Address (ie the multicast address), and
112 * do a CRC on it (little endian), and reverse the bits of the
114 * 2) Use the 8 most significant bits as a hash into a 256-entry
115 * table. The table is controlled through 8 32-bit registers:
116 * gaddr0-7. gaddr0's MSB is entry 0, and gaddr7's LSB is entry
117 * 255. This means that the 3 most significant bits in the
118 * hash index which gaddr register to use, and the 5 other bits
119 * indicate which bit (assuming an IBM numbering scheme, which
120 * for PowerPC (tm) is usually the case) in the register holds
123 tsec_mcast_addr(struct eth_device *dev, const u8 *mcast_mac, u8 set)
125 struct tsec_private *priv = privlist[1];
126 struct tsec __iomem *regs = priv->regs;
128 u8 whichbit, whichreg;
130 result = ether_crc(MAC_ADDR_LEN, mcast_mac);
131 whichbit = (result >> 24) & 0x1f; /* the 5 LSB = which bit to set */
132 whichreg = result >> 29; /* the 3 MSB = which reg to set it in */
134 value = 1 << (31-whichbit);
137 setbits_be32(®s->hash.gaddr0 + whichreg, value);
139 clrbits_be32(®s->hash.gaddr0 + whichreg, value);
143 #endif /* Multicast TFTP ? */
145 /* Initialized required registers to appropriate values, zeroing
146 * those we don't care about (unless zero is bad, in which case,
147 * choose a more appropriate value)
149 static void init_registers(tsec_t *regs)
152 out_be32(®s->ievent, IEVENT_INIT_CLEAR);
154 out_be32(®s->imask, IMASK_INIT_CLEAR);
156 out_be32(®s->hash.iaddr0, 0);
157 out_be32(®s->hash.iaddr1, 0);
158 out_be32(®s->hash.iaddr2, 0);
159 out_be32(®s->hash.iaddr3, 0);
160 out_be32(®s->hash.iaddr4, 0);
161 out_be32(®s->hash.iaddr5, 0);
162 out_be32(®s->hash.iaddr6, 0);
163 out_be32(®s->hash.iaddr7, 0);
165 out_be32(®s->hash.gaddr0, 0);
166 out_be32(®s->hash.gaddr1, 0);
167 out_be32(®s->hash.gaddr2, 0);
168 out_be32(®s->hash.gaddr3, 0);
169 out_be32(®s->hash.gaddr4, 0);
170 out_be32(®s->hash.gaddr5, 0);
171 out_be32(®s->hash.gaddr6, 0);
172 out_be32(®s->hash.gaddr7, 0);
174 out_be32(®s->rctrl, 0x00000000);
176 /* Init RMON mib registers */
177 memset((void *)&(regs->rmon), 0, sizeof(rmon_mib_t));
179 out_be32(®s->rmon.cam1, 0xffffffff);
180 out_be32(®s->rmon.cam2, 0xffffffff);
182 out_be32(®s->mrblr, MRBLR_INIT_SETTINGS);
184 out_be32(®s->minflr, MINFLR_INIT_SETTINGS);
186 out_be32(®s->attr, ATTR_INIT_SETTINGS);
187 out_be32(®s->attreli, ATTRELI_INIT_SETTINGS);
191 /* Configure maccfg2 based on negotiated speed and duplex
192 * reported by PHY handling code
194 static void adjust_link(struct tsec_private *priv, struct phy_device *phydev)
196 tsec_t *regs = priv->regs;
200 printf("%s: No link.\n", phydev->dev->name);
204 /* clear all bits relative with interface mode */
205 ecntrl = in_be32(®s->ecntrl);
206 ecntrl &= ~ECNTRL_R100;
208 maccfg2 = in_be32(®s->maccfg2);
209 maccfg2 &= ~(MACCFG2_IF | MACCFG2_FULL_DUPLEX);
212 maccfg2 |= MACCFG2_FULL_DUPLEX;
214 switch (phydev->speed) {
216 maccfg2 |= MACCFG2_GMII;
220 maccfg2 |= MACCFG2_MII;
222 /* Set R100 bit in all modes although
223 * it is only used in RGMII mode
225 if (phydev->speed == 100)
226 ecntrl |= ECNTRL_R100;
229 printf("%s: Speed was bad\n", phydev->dev->name);
233 out_be32(®s->ecntrl, ecntrl);
234 out_be32(®s->maccfg2, maccfg2);
236 printf("Speed: %d, %s duplex%s\n", phydev->speed,
237 (phydev->duplex) ? "full" : "half",
238 (phydev->port == PORT_FIBRE) ? ", fiber mode" : "");
241 #ifdef CONFIG_SYS_FSL_ERRATUM_NMG_ETSEC129
243 * When MACCFG1[Rx_EN] is enabled during system boot as part
244 * of the eTSEC port initialization sequence,
245 * the eTSEC Rx logic may not be properly initialized.
247 void redundant_init(struct eth_device *dev)
249 struct tsec_private *priv = dev->priv;
250 tsec_t *regs = priv->regs;
253 static const u8 pkt[] = {
254 0x00, 0x1e, 0x4f, 0x12, 0xcb, 0x2c, 0x00, 0x25,
255 0x64, 0xbb, 0xd1, 0xab, 0x08, 0x00, 0x45, 0x00,
256 0x00, 0x5c, 0xdd, 0x22, 0x00, 0x00, 0x80, 0x01,
257 0x1f, 0x71, 0x0a, 0xc1, 0x14, 0x22, 0x0a, 0xc1,
258 0x14, 0x6a, 0x08, 0x00, 0xef, 0x7e, 0x02, 0x00,
259 0x94, 0x05, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66,
260 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e,
261 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76,
262 0x77, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
263 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
264 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
265 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
266 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70,
269 /* Enable promiscuous mode */
270 setbits_be32(®s->rctrl, 0x8);
271 /* Enable loopback mode */
272 setbits_be32(®s->maccfg1, MACCFG1_LOOPBACK);
273 /* Enable transmit and receive */
274 setbits_be32(®s->maccfg1, MACCFG1_RX_EN | MACCFG1_TX_EN);
276 /* Tell the DMA it is clear to go */
277 setbits_be32(®s->dmactrl, DMACTRL_INIT_SETTINGS);
278 out_be32(®s->tstat, TSTAT_CLEAR_THALT);
279 out_be32(®s->rstat, RSTAT_CLEAR_RHALT);
280 clrbits_be32(®s->dmactrl, DMACTRL_GRS | DMACTRL_GTS);
283 tsec_send(dev, (void *)pkt, sizeof(pkt));
285 /* Wait for buffer to be received */
286 for (t = 0; rtx.rxbd[rxIdx].status & RXBD_EMPTY; t++) {
287 if (t >= 10 * TOUT_LOOP) {
288 printf("%s: tsec: rx error\n", dev->name);
293 if (!memcmp(pkt, (void *)NetRxPackets[rxIdx], sizeof(pkt)))
296 rtx.rxbd[rxIdx].length = 0;
297 rtx.rxbd[rxIdx].status =
298 RXBD_EMPTY | (((rxIdx + 1) == PKTBUFSRX) ? RXBD_WRAP : 0);
299 rxIdx = (rxIdx + 1) % PKTBUFSRX;
301 if (in_be32(®s->ievent) & IEVENT_BSY) {
302 out_be32(®s->ievent, IEVENT_BSY);
303 out_be32(®s->rstat, RSTAT_CLEAR_RHALT);
306 printf("loopback recv packet error!\n");
307 clrbits_be32(®s->maccfg1, MACCFG1_RX_EN);
309 setbits_be32(®s->maccfg1, MACCFG1_RX_EN);
311 } while ((count++ < 4) && (fail == 1));
314 panic("eTSEC init fail!\n");
315 /* Disable promiscuous mode */
316 clrbits_be32(®s->rctrl, 0x8);
317 /* Disable loopback mode */
318 clrbits_be32(®s->maccfg1, MACCFG1_LOOPBACK);
322 /* Set up the buffers and their descriptors, and bring up the
325 static void startup_tsec(struct eth_device *dev)
328 struct tsec_private *priv = (struct tsec_private *)dev->priv;
329 tsec_t *regs = priv->regs;
331 /* reset the indices to zero */
334 #ifdef CONFIG_SYS_FSL_ERRATUM_NMG_ETSEC129
338 /* Point to the buffer descriptors */
339 out_be32(®s->tbase, (unsigned int)(&rtx.txbd[txIdx]));
340 out_be32(®s->rbase, (unsigned int)(&rtx.rxbd[rxIdx]));
342 /* Initialize the Rx Buffer descriptors */
343 for (i = 0; i < PKTBUFSRX; i++) {
344 rtx.rxbd[i].status = RXBD_EMPTY;
345 rtx.rxbd[i].length = 0;
346 rtx.rxbd[i].bufPtr = (uint) NetRxPackets[i];
348 rtx.rxbd[PKTBUFSRX - 1].status |= RXBD_WRAP;
350 /* Initialize the TX Buffer Descriptors */
351 for (i = 0; i < TX_BUF_CNT; i++) {
352 rtx.txbd[i].status = 0;
353 rtx.txbd[i].length = 0;
354 rtx.txbd[i].bufPtr = 0;
356 rtx.txbd[TX_BUF_CNT - 1].status |= TXBD_WRAP;
358 #ifdef CONFIG_SYS_FSL_ERRATUM_NMG_ETSEC129
360 if ((SVR_MAJ(svr) == 1) || IS_SVR_REV(svr, 2, 0))
363 /* Enable Transmit and Receive */
364 setbits_be32(®s->maccfg1, MACCFG1_RX_EN | MACCFG1_TX_EN);
366 /* Tell the DMA it is clear to go */
367 setbits_be32(®s->dmactrl, DMACTRL_INIT_SETTINGS);
368 out_be32(®s->tstat, TSTAT_CLEAR_THALT);
369 out_be32(®s->rstat, RSTAT_CLEAR_RHALT);
370 clrbits_be32(®s->dmactrl, DMACTRL_GRS | DMACTRL_GTS);
373 /* This returns the status bits of the device. The return value
374 * is never checked, and this is what the 8260 driver did, so we
375 * do the same. Presumably, this would be zero if there were no
378 static int tsec_send(struct eth_device *dev, void *packet, int length)
382 struct tsec_private *priv = (struct tsec_private *)dev->priv;
383 tsec_t *regs = priv->regs;
385 /* Find an empty buffer descriptor */
386 for (i = 0; rtx.txbd[txIdx].status & TXBD_READY; i++) {
387 if (i >= TOUT_LOOP) {
388 debug("%s: tsec: tx buffers full\n", dev->name);
393 rtx.txbd[txIdx].bufPtr = (uint) packet;
394 rtx.txbd[txIdx].length = length;
395 rtx.txbd[txIdx].status |=
396 (TXBD_READY | TXBD_LAST | TXBD_CRC | TXBD_INTERRUPT);
398 /* Tell the DMA to go */
399 out_be32(®s->tstat, TSTAT_CLEAR_THALT);
401 /* Wait for buffer to be transmitted */
402 for (i = 0; rtx.txbd[txIdx].status & TXBD_READY; i++) {
403 if (i >= TOUT_LOOP) {
404 debug("%s: tsec: tx error\n", dev->name);
409 txIdx = (txIdx + 1) % TX_BUF_CNT;
410 result = rtx.txbd[txIdx].status & TXBD_STATS;
415 static int tsec_recv(struct eth_device *dev)
418 struct tsec_private *priv = (struct tsec_private *)dev->priv;
419 tsec_t *regs = priv->regs;
421 while (!(rtx.rxbd[rxIdx].status & RXBD_EMPTY)) {
423 length = rtx.rxbd[rxIdx].length;
425 /* Send the packet up if there were no errors */
426 if (!(rtx.rxbd[rxIdx].status & RXBD_STATS)) {
427 NetReceive(NetRxPackets[rxIdx], length - 4);
429 printf("Got error %x\n",
430 (rtx.rxbd[rxIdx].status & RXBD_STATS));
433 rtx.rxbd[rxIdx].length = 0;
435 /* Set the wrap bit if this is the last element in the list */
436 rtx.rxbd[rxIdx].status =
437 RXBD_EMPTY | (((rxIdx + 1) == PKTBUFSRX) ? RXBD_WRAP : 0);
439 rxIdx = (rxIdx + 1) % PKTBUFSRX;
442 if (in_be32(®s->ievent) & IEVENT_BSY) {
443 out_be32(®s->ievent, IEVENT_BSY);
444 out_be32(®s->rstat, RSTAT_CLEAR_RHALT);
451 /* Stop the interface */
452 static void tsec_halt(struct eth_device *dev)
454 struct tsec_private *priv = (struct tsec_private *)dev->priv;
455 tsec_t *regs = priv->regs;
457 clrbits_be32(®s->dmactrl, DMACTRL_GRS | DMACTRL_GTS);
458 setbits_be32(®s->dmactrl, DMACTRL_GRS | DMACTRL_GTS);
460 while ((in_be32(®s->ievent) & (IEVENT_GRSC | IEVENT_GTSC))
461 != (IEVENT_GRSC | IEVENT_GTSC))
464 clrbits_be32(®s->maccfg1, MACCFG1_TX_EN | MACCFG1_RX_EN);
466 /* Shut down the PHY, as needed */
467 phy_shutdown(priv->phydev);
470 /* Initializes data structures and registers for the controller,
471 * and brings the interface up. Returns the link status, meaning
472 * that it returns success if the link is up, failure otherwise.
473 * This allows u-boot to find the first active controller.
475 static int tsec_init(struct eth_device *dev, bd_t * bd)
478 char tmpbuf[MAC_ADDR_LEN];
480 struct tsec_private *priv = (struct tsec_private *)dev->priv;
481 tsec_t *regs = priv->regs;
484 /* Make sure the controller is stopped */
487 /* Init MACCFG2. Defaults to GMII */
488 out_be32(®s->maccfg2, MACCFG2_INIT_SETTINGS);
491 out_be32(®s->ecntrl, ECNTRL_INIT_SETTINGS);
493 /* Copy the station address into the address registers.
494 * Backwards, because little endian MACS are dumb */
495 for (i = 0; i < MAC_ADDR_LEN; i++)
496 tmpbuf[MAC_ADDR_LEN - 1 - i] = dev->enetaddr[i];
498 tempval = (tmpbuf[0] << 24) | (tmpbuf[1] << 16) | (tmpbuf[2] << 8) |
501 out_be32(®s->macstnaddr1, tempval);
503 tempval = *((uint *) (tmpbuf + 4));
505 out_be32(®s->macstnaddr2, tempval);
507 /* Clear out (for the most part) the other registers */
508 init_registers(regs);
510 /* Ready the device for tx/rx */
513 /* Start up the PHY */
514 ret = phy_startup(priv->phydev);
516 printf("Could not initialize PHY %s\n",
517 priv->phydev->dev->name);
521 adjust_link(priv, priv->phydev);
523 /* If there's no link, fail */
524 return priv->phydev->link ? 0 : -1;
527 static phy_interface_t tsec_get_interface(struct tsec_private *priv)
529 tsec_t *regs = priv->regs;
532 ecntrl = in_be32(®s->ecntrl);
534 if (ecntrl & ECNTRL_SGMII_MODE)
535 return PHY_INTERFACE_MODE_SGMII;
537 if (ecntrl & ECNTRL_TBI_MODE) {
538 if (ecntrl & ECNTRL_REDUCED_MODE)
539 return PHY_INTERFACE_MODE_RTBI;
541 return PHY_INTERFACE_MODE_TBI;
544 if (ecntrl & ECNTRL_REDUCED_MODE) {
545 if (ecntrl & ECNTRL_REDUCED_MII_MODE)
546 return PHY_INTERFACE_MODE_RMII;
548 phy_interface_t interface = priv->interface;
551 * This isn't autodetected, so it must
552 * be set by the platform code.
554 if ((interface == PHY_INTERFACE_MODE_RGMII_ID) ||
555 (interface == PHY_INTERFACE_MODE_RGMII_TXID) ||
556 (interface == PHY_INTERFACE_MODE_RGMII_RXID))
559 return PHY_INTERFACE_MODE_RGMII;
563 if (priv->flags & TSEC_GIGABIT)
564 return PHY_INTERFACE_MODE_GMII;
566 return PHY_INTERFACE_MODE_MII;
570 /* Discover which PHY is attached to the device, and configure it
571 * properly. If the PHY is not recognized, then return 0
572 * (failure). Otherwise, return 1
574 static int init_phy(struct eth_device *dev)
576 struct tsec_private *priv = (struct tsec_private *)dev->priv;
577 struct phy_device *phydev;
578 tsec_t *regs = priv->regs;
579 u32 supported = (SUPPORTED_10baseT_Half |
580 SUPPORTED_10baseT_Full |
581 SUPPORTED_100baseT_Half |
582 SUPPORTED_100baseT_Full);
584 if (priv->flags & TSEC_GIGABIT)
585 supported |= SUPPORTED_1000baseT_Full;
587 /* Assign a Physical address to the TBI */
588 out_be32(®s->tbipa, CONFIG_SYS_TBIPA_VALUE);
590 priv->interface = tsec_get_interface(priv);
592 if (priv->interface == PHY_INTERFACE_MODE_SGMII)
593 tsec_configure_serdes(priv);
595 phydev = phy_connect(priv->bus, priv->phyaddr, dev, priv->interface);
597 phydev->supported &= supported;
598 phydev->advertising = phydev->supported;
600 priv->phydev = phydev;
607 /* Initialize device structure. Returns success if PHY
608 * initialization succeeded (i.e. if it recognizes the PHY)
610 static int tsec_initialize(bd_t *bis, struct tsec_info_struct *tsec_info)
612 struct eth_device *dev;
614 struct tsec_private *priv;
616 dev = (struct eth_device *)malloc(sizeof *dev);
621 memset(dev, 0, sizeof *dev);
623 priv = (struct tsec_private *)malloc(sizeof(*priv));
628 privlist[num_tsecs++] = priv;
629 priv->regs = tsec_info->regs;
630 priv->phyregs_sgmii = tsec_info->miiregs_sgmii;
632 priv->phyaddr = tsec_info->phyaddr;
633 priv->flags = tsec_info->flags;
635 sprintf(dev->name, tsec_info->devname);
636 priv->interface = tsec_info->interface;
637 priv->bus = miiphy_get_dev_by_name(tsec_info->mii_devname);
640 dev->init = tsec_init;
641 dev->halt = tsec_halt;
642 dev->send = tsec_send;
643 dev->recv = tsec_recv;
644 #ifdef CONFIG_MCAST_TFTP
645 dev->mcast = tsec_mcast_addr;
648 /* Tell u-boot to get the addr from the env */
649 for (i = 0; i < 6; i++)
650 dev->enetaddr[i] = 0;
655 setbits_be32(&priv->regs->maccfg1, MACCFG1_SOFT_RESET);
656 udelay(2); /* Soft Reset must be asserted for 3 TX clocks */
657 clrbits_be32(&priv->regs->maccfg1, MACCFG1_SOFT_RESET);
659 /* Try to initialize PHY here, and return */
660 return init_phy(dev);
664 * Initialize all the TSEC devices
666 * Returns the number of TSEC devices that were initialized
668 int tsec_eth_init(bd_t *bis, struct tsec_info_struct *tsecs, int num)
673 for (i = 0; i < num; i++) {
674 ret = tsec_initialize(bis, &tsecs[i]);
682 int tsec_standard_init(bd_t *bis)
684 struct fsl_pq_mdio_info info;
686 info.regs = (struct tsec_mii_mng *)CONFIG_SYS_MDIO_BASE_ADDR;
687 info.name = DEFAULT_MII_NAME;
689 fsl_pq_mdio_init(bis, &info);
691 return tsec_eth_init(bis, tsec_info, ARRAY_SIZE(tsec_info));