Home | History | Annotate | Download | only in net
      1 /* $Id$
      2  * tg3.c: Broadcom Tigon3 ethernet driver.
      3  *
      4  * Copyright (C) 2001, 2002 David S. Miller (davem (at) redhat.com)
      5  * Copyright (C) 2001, 2002 Jeff Garzik (jgarzik (at) mandrakesoft.com)
      6  * Copyright (C) 2003 Eric Biederman (ebiederman (at) lnxi.com)  [etherboot port]
      7  */
      8 
      9 FILE_LICENCE ( GPL2_ONLY );
     10 
     11 /* 11-13-2003	timlegge	Fix Issue with NetGear GA302T
     12  * 11-18-2003   ebiederm        Generalize NetGear Fix to what the code was supposed to be.
     13  * 01-06-2005   Alf (Frederic Olivie) Add Dell bcm 5751 (0x1677) support
     14  * 04-15-2005   Martin Vogt Add Fujitsu Siemens Computer (FSC) 0x1734 bcm 5751 0x105d support
     15  */
     16 
     17 #include "etherboot.h"
     18 #include "nic.h"
     19 #include <errno.h>
     20 #include <gpxe/pci.h>
     21 #include <gpxe/ethernet.h>
     22 #include "string.h"
     23 #include <mii.h>
     24 #include "tg3.h"
     25 
     26 #define SUPPORT_COPPER_PHY  1
     27 #define SUPPORT_FIBER_PHY   1
     28 #define SUPPORT_LINK_REPORT 1
     29 #define SUPPORT_PARTNO_STR  1
     30 #define SUPPORT_PHY_STR     1
     31 
     32 static struct tg3 tg3;
     33 
     34 /* These numbers seem to be hard coded in the NIC firmware somehow.
     35  * You can't change the ring sizes, but you can change where you place
     36  * them in the NIC onboard memory.
     37  */
     38 #define TG3_RX_RING_SIZE		512
     39 #define TG3_DEF_RX_RING_PENDING		20	/* RX_RING_PENDING seems to be o.k. at 20 and 200 */
     40 #define TG3_RX_RCB_RING_SIZE	1024
     41 
     42 /*	(GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 ? \
     43 	 512 : 1024) */
     44 #define TG3_TX_RING_SIZE		512
     45 #define TG3_DEF_TX_RING_PENDING		(TG3_TX_RING_SIZE - 1)
     46 
     47 #define TG3_RX_RING_BYTES	(sizeof(struct tg3_rx_buffer_desc) * TG3_RX_RING_SIZE)
     48 #define TG3_RX_RCB_RING_BYTES	(sizeof(struct tg3_rx_buffer_desc) * TG3_RX_RCB_RING_SIZE)
     49 
     50 #define TG3_TX_RING_BYTES	(sizeof(struct tg3_tx_buffer_desc) * TG3_TX_RING_SIZE)
     51 #define NEXT_TX(N)		(((N) + 1) & (TG3_TX_RING_SIZE - 1))
     52 #define PREV_TX(N)		(((N) - 1) & (TG3_TX_RING_SIZE - 1))
     53 
     54 #define RX_PKT_BUF_SZ		(1536 + 2 + 64)
     55 
     56 struct eth_frame {
     57 	uint8_t  dst_addr[ETH_ALEN];
     58 	uint8_t  src_addr[ETH_ALEN];
     59 	uint16_t type;
     60 	uint8_t  data [ETH_FRAME_LEN - ETH_HLEN];
     61 };
     62 
     63 struct bss {
     64 	struct tg3_rx_buffer_desc rx_std[TG3_RX_RING_SIZE];
     65 	struct tg3_rx_buffer_desc rx_rcb[TG3_RX_RCB_RING_SIZE];
     66 	struct tg3_tx_buffer_desc tx_ring[TG3_TX_RING_SIZE];
     67 	struct tg3_hw_status      hw_status;
     68 	struct tg3_hw_stats       hw_stats;
     69 	unsigned char             rx_bufs[TG3_DEF_RX_RING_PENDING][RX_PKT_BUF_SZ];
     70 	struct eth_frame	  tx_frame[2];
     71 } tg3_bss __shared;
     72 
     73 /**
     74  * pci_save_state - save the PCI configuration space of a device before suspending
     75  * @dev: - PCI device that we're dealing with
     76  * @buffer: - buffer to hold config space context
     77  *
     78  * @buffer must be large enough to hold the entire PCI 2.2 config space
     79  * (>= 64 bytes).
     80  */
     81 static int pci_save_state(struct pci_device *dev, uint32_t *buffer)
     82 {
     83 	int i;
     84 	for (i = 0; i < 16; i++)
     85 		pci_read_config_dword(dev, i * 4,&buffer[i]);
     86 	return 0;
     87 }
     88 
     89 /**
     90  * pci_restore_state - Restore the saved state of a PCI device
     91  * @dev: - PCI device that we're dealing with
     92  * @buffer: - saved PCI config space
     93  *
     94  */
     95 static int pci_restore_state(struct pci_device *dev, uint32_t *buffer)
     96 {
     97 	int i;
     98 
     99 	for (i = 0; i < 16; i++)
    100 		pci_write_config_dword(dev,i * 4, buffer[i]);
    101 	return 0;
    102 }
    103 
    104 static void tg3_write_indirect_reg32(uint32_t off, uint32_t val)
    105 {
    106 	pci_write_config_dword(tg3.pdev, TG3PCI_REG_BASE_ADDR, off);
    107 	pci_write_config_dword(tg3.pdev, TG3PCI_REG_DATA, val);
    108 }
    109 
    110 #define tw32(reg,val)		tg3_write_indirect_reg32((reg),(val))
    111 #define tw32_mailbox(reg, val)	writel(((val) & 0xffffffff), tg3.regs + (reg))
    112 #define tw16(reg,val)		writew(((val) & 0xffff), tg3.regs + (reg))
    113 #define tw8(reg,val)		writeb(((val) & 0xff), tg3.regs + (reg))
    114 #define tr32(reg)		readl(tg3.regs + (reg))
    115 #define tr16(reg)		readw(tg3.regs + (reg))
    116 #define tr8(reg)		readb(tg3.regs + (reg))
    117 
    118 static void tw32_carefully(uint32_t reg, uint32_t val)
    119 {
    120 	tw32(reg, val);
    121 	tr32(reg);
    122 	udelay(100);
    123 }
    124 
    125 static void tw32_mailbox2(uint32_t reg, uint32_t val)
    126 {
    127 	tw32_mailbox(reg, val);
    128 	tr32(reg);
    129 }
    130 
    131 static void tg3_write_mem(uint32_t off, uint32_t val)
    132 {
    133 	pci_write_config_dword(tg3.pdev, TG3PCI_MEM_WIN_BASE_ADDR, off);
    134 	pci_write_config_dword(tg3.pdev, TG3PCI_MEM_WIN_DATA, val);
    135 
    136 	/* Always leave this as zero. */
    137 	pci_write_config_dword(tg3.pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
    138 }
    139 
    140 static void tg3_read_mem(uint32_t off, uint32_t *val)
    141 {
    142 	pci_write_config_dword(tg3.pdev, TG3PCI_MEM_WIN_BASE_ADDR, off);
    143 	pci_read_config_dword(tg3.pdev, TG3PCI_MEM_WIN_DATA, val);
    144 
    145 	/* Always leave this as zero. */
    146 	pci_write_config_dword(tg3.pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
    147 }
    148 
    149 static void tg3_disable_ints(struct tg3 *tp)
    150 {
    151 	tw32(TG3PCI_MISC_HOST_CTRL,
    152 	     (tp->misc_host_ctrl | MISC_HOST_CTRL_MASK_PCI_INT));
    153 	tw32_mailbox2(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001);
    154 }
    155 
    156 static void tg3_switch_clocks(struct tg3 *tp)
    157 {
    158 	uint32_t orig_clock_ctrl, clock_ctrl;
    159 
    160 	clock_ctrl = tr32(TG3PCI_CLOCK_CTRL);
    161 
    162 	orig_clock_ctrl = clock_ctrl;
    163 	clock_ctrl &= (CLOCK_CTRL_FORCE_CLKRUN | CLOCK_CTRL_CLKRUN_OENABLE | 0x1f);
    164 	tp->pci_clock_ctrl = clock_ctrl;
    165 
    166 	if ((GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705) &&
    167 	    (!((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750)
    168 	       && (tp->tg3_flags & TG3_FLAG_ENABLE_ASF))) &&
    169 		(orig_clock_ctrl & CLOCK_CTRL_44MHZ_CORE)!=0) {
    170 		tw32_carefully(TG3PCI_CLOCK_CTRL,
    171 			clock_ctrl | (CLOCK_CTRL_44MHZ_CORE | CLOCK_CTRL_ALTCLK));
    172 		tw32_carefully(TG3PCI_CLOCK_CTRL,
    173 			clock_ctrl | (CLOCK_CTRL_ALTCLK));
    174 	}
    175 	tw32_carefully(TG3PCI_CLOCK_CTRL, clock_ctrl);
    176 }
    177 
    178 #define PHY_BUSY_LOOPS	5000
    179 
    180 static int tg3_readphy(struct tg3 *tp, int reg, uint32_t *val)
    181 {
    182 	uint32_t frame_val;
    183 	int loops, ret;
    184 
    185 	tw32_carefully(MAC_MI_MODE, tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL);
    186 
    187 	*val = 0xffffffff;
    188 
    189 	frame_val  = ((PHY_ADDR << MI_COM_PHY_ADDR_SHIFT) &
    190 		      MI_COM_PHY_ADDR_MASK);
    191 	frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) &
    192 		      MI_COM_REG_ADDR_MASK);
    193 	frame_val |= (MI_COM_CMD_READ | MI_COM_START);
    194 
    195 	tw32_carefully(MAC_MI_COM, frame_val);
    196 
    197 	loops = PHY_BUSY_LOOPS;
    198 	while (loops-- > 0) {
    199 		udelay(10);
    200 		frame_val = tr32(MAC_MI_COM);
    201 
    202 		if ((frame_val & MI_COM_BUSY) == 0) {
    203 			udelay(5);
    204 			frame_val = tr32(MAC_MI_COM);
    205 			break;
    206 		}
    207 	}
    208 
    209 	ret = -EBUSY;
    210 	if (loops > 0) {
    211 		*val = frame_val & MI_COM_DATA_MASK;
    212 		ret = 0;
    213 	}
    214 
    215 	tw32_carefully(MAC_MI_MODE, tp->mi_mode);
    216 
    217 	return ret;
    218 }
    219 
    220 static int tg3_writephy(struct tg3 *tp, int reg, uint32_t val)
    221 {
    222 	uint32_t frame_val;
    223 	int loops, ret;
    224 
    225 	tw32_carefully(MAC_MI_MODE, tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL);
    226 
    227 	frame_val  = ((PHY_ADDR << MI_COM_PHY_ADDR_SHIFT) &
    228 		      MI_COM_PHY_ADDR_MASK);
    229 	frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) &
    230 		      MI_COM_REG_ADDR_MASK);
    231 	frame_val |= (val & MI_COM_DATA_MASK);
    232 	frame_val |= (MI_COM_CMD_WRITE | MI_COM_START);
    233 
    234 	tw32_carefully(MAC_MI_COM, frame_val);
    235 
    236 	loops = PHY_BUSY_LOOPS;
    237 	while (loops-- > 0) {
    238 		udelay(10);
    239 		frame_val = tr32(MAC_MI_COM);
    240 		if ((frame_val & MI_COM_BUSY) == 0) {
    241 			udelay(5);
    242 			frame_val = tr32(MAC_MI_COM);
    243 			break;
    244 		}
    245 	}
    246 
    247 	ret = -EBUSY;
    248 	if (loops > 0)
    249 		ret = 0;
    250 
    251 	tw32_carefully(MAC_MI_MODE, tp->mi_mode);
    252 
    253 	return ret;
    254 }
    255 
    256 static int tg3_writedsp(struct tg3 *tp, uint16_t addr, uint16_t val)
    257 {
    258 	int err;
    259 	err  = tg3_writephy(tp, MII_TG3_DSP_ADDRESS, addr);
    260 	err |= tg3_writephy(tp, MII_TG3_DSP_RW_PORT, val);
    261 	return err;
    262 }
    263 
    264 
    265 static void tg3_phy_set_wirespeed(struct tg3 *tp)
    266 {
    267 	uint32_t val;
    268 
    269 	if (tp->tg3_flags2 & TG3_FLG2_NO_ETH_WIRE_SPEED)
    270 		return;
    271 
    272 	tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x7007);
    273 	tg3_readphy(tp, MII_TG3_AUX_CTRL, &val);
    274 	tg3_writephy(tp, MII_TG3_AUX_CTRL, (val | (1 << 15) | (1 << 4)));
    275 }
    276 
    277 static int tg3_bmcr_reset(struct tg3 *tp)
    278 {
    279 	uint32_t phy_control;
    280 	int limit, err;
    281 
    282 	/* OK, reset it, and poll the BMCR_RESET bit until it
    283 	 * clears or we time out.
    284 	 */
    285 	phy_control = BMCR_RESET;
    286 	err = tg3_writephy(tp, MII_BMCR, phy_control);
    287 	if (err != 0)
    288 		return -EBUSY;
    289 
    290 	limit = 5000;
    291 	while (limit--) {
    292 		err = tg3_readphy(tp, MII_BMCR, &phy_control);
    293 		if (err != 0)
    294 			return -EBUSY;
    295 
    296 		if ((phy_control & BMCR_RESET) == 0) {
    297 			udelay(40);
    298 			break;
    299 		}
    300 		udelay(10);
    301 	}
    302 	if (limit <= 0)
    303 		return -EBUSY;
    304 
    305 	return 0;
    306 }
    307 
    308 static int tg3_wait_macro_done(struct tg3 *tp)
    309 {
    310 	int limit = 100;
    311 
    312 	while (limit--) {
    313 		uint32_t tmp32;
    314 
    315 		tg3_readphy(tp, 0x16, &tmp32);
    316 		if ((tmp32 & 0x1000) == 0)
    317 			break;
    318 	}
    319 	if (limit <= 0)
    320 		return -EBUSY;
    321 
    322 	return 0;
    323 }
    324 
    325 static int tg3_phy_write_and_check_testpat(struct tg3 *tp, int *resetp)
    326 {
    327 	static const uint32_t test_pat[4][6] = {
    328 	{ 0x00005555, 0x00000005, 0x00002aaa, 0x0000000a, 0x00003456, 0x00000003 },
    329 	{ 0x00002aaa, 0x0000000a, 0x00003333, 0x00000003, 0x0000789a, 0x00000005 },
    330 	{ 0x00005a5a, 0x00000005, 0x00002a6a, 0x0000000a, 0x00001bcd, 0x00000003 },
    331 	{ 0x00002a5a, 0x0000000a, 0x000033c3, 0x00000003, 0x00002ef1, 0x00000005 }
    332 	};
    333 	int chan;
    334 
    335 	for (chan = 0; chan < 4; chan++) {
    336 		int i;
    337 
    338 		tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
    339 			(chan * 0x2000) | 0x0200);
    340 		tg3_writephy(tp, 0x16, 0x0002);
    341 
    342 		for (i = 0; i < 6; i++)
    343 			tg3_writephy(tp, MII_TG3_DSP_RW_PORT,
    344 				test_pat[chan][i]);
    345 
    346 		tg3_writephy(tp, 0x16, 0x0202);
    347 		if (tg3_wait_macro_done(tp)) {
    348 			*resetp = 1;
    349 			return -EBUSY;
    350 		}
    351 
    352 		tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
    353 			     (chan * 0x2000) | 0x0200);
    354 		tg3_writephy(tp, 0x16, 0x0082);
    355 		if (tg3_wait_macro_done(tp)) {
    356 			*resetp = 1;
    357 			return -EBUSY;
    358 		}
    359 
    360 		tg3_writephy(tp, 0x16, 0x0802);
    361 		if (tg3_wait_macro_done(tp)) {
    362 			*resetp = 1;
    363 			return -EBUSY;
    364 		}
    365 
    366 		for (i = 0; i < 6; i += 2) {
    367 			uint32_t low, high;
    368 
    369 			tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &low);
    370 			tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &high);
    371 			if (tg3_wait_macro_done(tp)) {
    372 				*resetp = 1;
    373 				return -EBUSY;
    374 			}
    375 			low &= 0x7fff;
    376 			high &= 0x000f;
    377 			if (low != test_pat[chan][i] ||
    378 			    high != test_pat[chan][i+1]) {
    379 				tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000b);
    380 				tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x4001);
    381 				tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x4005);
    382 
    383 				return -EBUSY;
    384 			}
    385 		}
    386 	}
    387 
    388 	return 0;
    389 }
    390 
    391 static int tg3_phy_reset_chanpat(struct tg3 *tp)
    392 {
    393 	int chan;
    394 
    395 	for (chan = 0; chan < 4; chan++) {
    396 		int i;
    397 
    398 		tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
    399 			     (chan * 0x2000) | 0x0200);
    400 		tg3_writephy(tp, 0x16, 0x0002);
    401 		for (i = 0; i < 6; i++)
    402 			tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x000);
    403 		tg3_writephy(tp, 0x16, 0x0202);
    404 		if (tg3_wait_macro_done(tp))
    405 			return -EBUSY;
    406 	}
    407 
    408 	return 0;
    409 }
    410 
    411 static int tg3_phy_reset_5703_4_5(struct tg3 *tp)
    412 {
    413 	uint32_t reg32, phy9_orig;
    414 	int retries, do_phy_reset, err;
    415 
    416 	retries = 10;
    417 	do_phy_reset = 1;
    418 	do {
    419 		if (do_phy_reset) {
    420 			err = tg3_bmcr_reset(tp);
    421 			if (err)
    422 				return err;
    423 			do_phy_reset = 0;
    424 		}
    425 
    426 		/* Disable transmitter and interrupt.  */
    427 		tg3_readphy(tp, MII_TG3_EXT_CTRL, &reg32);
    428 		reg32 |= 0x3000;
    429 		tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32);
    430 
    431 		/* Set full-duplex, 1000 mbps.  */
    432 		tg3_writephy(tp, MII_BMCR,
    433 			BMCR_FULLDPLX | TG3_BMCR_SPEED1000);
    434 
    435 		/* Set to master mode.  */
    436 		tg3_readphy(tp, MII_TG3_CTRL, &phy9_orig);
    437 		tg3_writephy(tp, MII_TG3_CTRL,
    438 			(MII_TG3_CTRL_AS_MASTER |
    439 				MII_TG3_CTRL_ENABLE_AS_MASTER));
    440 
    441 		/* Enable SM_DSP_CLOCK and 6dB.  */
    442 		tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x0c00);
    443 
    444 		/* Block the PHY control access.  */
    445 		tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x8005);
    446 		tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x0800);
    447 
    448 		err = tg3_phy_write_and_check_testpat(tp, &do_phy_reset);
    449 		if (!err)
    450 			break;
    451 	} while (--retries);
    452 
    453 	err = tg3_phy_reset_chanpat(tp);
    454 	if (err)
    455 		return err;
    456 
    457 	tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x8005);
    458 	tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x0000);
    459 
    460 	tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x8200);
    461 	tg3_writephy(tp, 0x16, 0x0000);
    462 
    463 	tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x0400);
    464 
    465 	tg3_writephy(tp, MII_TG3_CTRL, phy9_orig);
    466 
    467 	tg3_readphy(tp, MII_TG3_EXT_CTRL, &reg32);
    468 	reg32 &= ~0x3000;
    469 	tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32);
    470 
    471 	return err;
    472 }
    473 
    474 /* This will reset the tigon3 PHY if there is no valid
    475  * link.
    476  */
    477 static int tg3_phy_reset(struct tg3 *tp)
    478 {
    479 	uint32_t phy_status;
    480 	int err;
    481 
    482 	err  = tg3_readphy(tp, MII_BMSR, &phy_status);
    483 	err |= tg3_readphy(tp, MII_BMSR, &phy_status);
    484 	if (err != 0)
    485 		return -EBUSY;
    486 
    487 	if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703) ||
    488 		(GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) ||
    489 		(GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705)) {
    490 		err = tg3_phy_reset_5703_4_5(tp);
    491 		if (err)
    492 			return err;
    493 		goto out;
    494 	}
    495 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750) {
    496 	  // Taken from Broadcom's source code
    497 	  tg3_writephy(tp, 0x18, 0x0c00);
    498 	  tg3_writephy(tp, 0x17, 0x000a);
    499 	  tg3_writephy(tp, 0x15, 0x310b);
    500 	  tg3_writephy(tp, 0x17, 0x201f);
    501 	  tg3_writephy(tp, 0x15, 0x9506);
    502 	  tg3_writephy(tp, 0x17, 0x401f);
    503 	  tg3_writephy(tp, 0x15, 0x14e2);
    504 	  tg3_writephy(tp, 0x18, 0x0400);
    505 	}
    506 	err = tg3_bmcr_reset(tp);
    507 	if (err)
    508 		return err;
    509  out:
    510 	tg3_phy_set_wirespeed(tp);
    511 	return 0;
    512 }
    513 
    514 static void tg3_set_power_state_0(struct tg3 *tp)
    515 {
    516 	uint16_t power_control;
    517 	int pm = tp->pm_cap;
    518 
    519 	/* Make sure register accesses (indirect or otherwise)
    520 	 * will function correctly.
    521 	 */
    522 	pci_write_config_dword(tp->pdev,  TG3PCI_MISC_HOST_CTRL, tp->misc_host_ctrl);
    523 
    524 	pci_read_config_word(tp->pdev, pm + PCI_PM_CTRL, &power_control);
    525 
    526 	power_control |= PCI_PM_CTRL_PME_STATUS;
    527 	power_control &= ~(PCI_PM_CTRL_STATE_MASK);
    528 	power_control |= 0;
    529 	pci_write_config_word(tp->pdev, pm + PCI_PM_CTRL, power_control);
    530 
    531 	tw32_carefully(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
    532 
    533 	return;
    534 }
    535 
    536 
    537 #if SUPPORT_LINK_REPORT
    538 static void tg3_link_report(struct tg3 *tp)
    539 {
    540 	if (!tp->carrier_ok) {
    541 		printf("Link is down.\n");
    542 	} else {
    543 		printf("Link is up at %d Mbps, %s duplex. %s %s %s\n",
    544 			(tp->link_config.active_speed == SPEED_1000 ?
    545 			       1000 :
    546 			(tp->link_config.active_speed == SPEED_100 ?
    547 				100 : 10)),
    548 			(tp->link_config.active_duplex == DUPLEX_FULL ?
    549 				"full" : "half"),
    550 			(tp->tg3_flags & TG3_FLAG_TX_PAUSE) ? "TX" : "",
    551 			(tp->tg3_flags & TG3_FLAG_RX_PAUSE) ? "RX" : "",
    552 			(tp->tg3_flags & (TG3_FLAG_TX_PAUSE |TG3_FLAG_RX_PAUSE)) ? "flow control" : "");
    553 	}
    554 }
    555 #else
    556 #define tg3_link_report(tp)
    557 #endif
    558 
    559 static void tg3_setup_flow_control(struct tg3 *tp, uint32_t local_adv, uint32_t remote_adv)
    560 {
    561 	uint32_t new_tg3_flags = 0;
    562 
    563 	if (local_adv & ADVERTISE_PAUSE_CAP) {
    564 		if (local_adv & ADVERTISE_PAUSE_ASYM) {
    565 			if (remote_adv & LPA_PAUSE_CAP)
    566 				new_tg3_flags |=
    567 					(TG3_FLAG_RX_PAUSE |
    568 					 TG3_FLAG_TX_PAUSE);
    569 			else if (remote_adv & LPA_PAUSE_ASYM)
    570 				new_tg3_flags |=
    571 					(TG3_FLAG_RX_PAUSE);
    572 		} else {
    573 			if (remote_adv & LPA_PAUSE_CAP)
    574 				new_tg3_flags |=
    575 					(TG3_FLAG_RX_PAUSE |
    576 					 TG3_FLAG_TX_PAUSE);
    577 		}
    578 	} else if (local_adv & ADVERTISE_PAUSE_ASYM) {
    579 		if ((remote_adv & LPA_PAUSE_CAP) &&
    580 		    (remote_adv & LPA_PAUSE_ASYM))
    581 			new_tg3_flags |= TG3_FLAG_TX_PAUSE;
    582 	}
    583 
    584 	tp->tg3_flags &= ~(TG3_FLAG_RX_PAUSE | TG3_FLAG_TX_PAUSE);
    585 	tp->tg3_flags |= new_tg3_flags;
    586 
    587 	if (new_tg3_flags & TG3_FLAG_RX_PAUSE)
    588 		tp->rx_mode |= RX_MODE_FLOW_CTRL_ENABLE;
    589 	else
    590 		tp->rx_mode &= ~RX_MODE_FLOW_CTRL_ENABLE;
    591 
    592 	if (new_tg3_flags & TG3_FLAG_TX_PAUSE)
    593 		tp->tx_mode |= TX_MODE_FLOW_CTRL_ENABLE;
    594 	else
    595 		tp->tx_mode &= ~TX_MODE_FLOW_CTRL_ENABLE;
    596 }
    597 
    598 #if SUPPORT_COPPER_PHY
    599 static void tg3_aux_stat_to_speed_duplex(
    600 	struct tg3 *tp __unused, uint32_t val, uint8_t *speed, uint8_t *duplex)
    601 {
    602 	static const uint8_t map[] = {
    603 		[0] = (SPEED_INVALID << 2) | DUPLEX_INVALID,
    604 		[MII_TG3_AUX_STAT_10HALF >> 8]   = (SPEED_10 << 2) | DUPLEX_HALF,
    605 		[MII_TG3_AUX_STAT_10FULL >> 8]   = (SPEED_10 << 2) | DUPLEX_FULL,
    606 		[MII_TG3_AUX_STAT_100HALF >> 8]  = (SPEED_100 << 2) | DUPLEX_HALF,
    607 		[MII_TG3_AUX_STAT_100_4 >> 8] = (SPEED_INVALID << 2) | DUPLEX_INVALID,
    608 		[MII_TG3_AUX_STAT_100FULL >> 8]  = (SPEED_100 << 2) | DUPLEX_FULL,
    609 		[MII_TG3_AUX_STAT_1000HALF >> 8] = (SPEED_1000 << 2) | DUPLEX_HALF,
    610 		[MII_TG3_AUX_STAT_1000FULL >> 8] = (SPEED_1000 << 2) | DUPLEX_FULL,
    611 	};
    612 	uint8_t result;
    613 	result = map[(val & MII_TG3_AUX_STAT_SPDMASK) >> 8];
    614 	*speed = result >> 2;
    615 	*duplex = result & 3;
    616 }
    617 
    618 static int tg3_phy_copper_begin(struct tg3 *tp)
    619 {
    620 	uint32_t new_adv;
    621 
    622 	tp->link_config.advertising =
    623 		(ADVERTISED_10baseT_Half | ADVERTISED_10baseT_Full |
    624 			ADVERTISED_100baseT_Half | ADVERTISED_100baseT_Full |
    625 			ADVERTISED_1000baseT_Half | ADVERTISED_1000baseT_Full |
    626 			ADVERTISED_Autoneg | ADVERTISED_MII);
    627 
    628 	if (tp->tg3_flags & TG3_FLAG_10_100_ONLY) {
    629 		tp->link_config.advertising &=
    630 			~(ADVERTISED_1000baseT_Half | ADVERTISED_1000baseT_Full);
    631 	}
    632 
    633 	new_adv = (ADVERTISE_CSMA | ADVERTISE_PAUSE_CAP);
    634 	if (tp->link_config.advertising & ADVERTISED_10baseT_Half) {
    635 		new_adv |= ADVERTISE_10HALF;
    636 	}
    637 	if (tp->link_config.advertising & ADVERTISED_10baseT_Full) {
    638 		new_adv |= ADVERTISE_10FULL;
    639 	}
    640 	if (tp->link_config.advertising & ADVERTISED_100baseT_Half) {
    641 		new_adv |= ADVERTISE_100HALF;
    642 	}
    643 	if (tp->link_config.advertising & ADVERTISED_100baseT_Full) {
    644 		new_adv |= ADVERTISE_100FULL;
    645 	}
    646 	tg3_writephy(tp, MII_ADVERTISE, new_adv);
    647 
    648 	if (tp->link_config.advertising &
    649 		(ADVERTISED_1000baseT_Half | ADVERTISED_1000baseT_Full)) {
    650 		new_adv = 0;
    651 		if (tp->link_config.advertising & ADVERTISED_1000baseT_Half) {
    652 			new_adv |= MII_TG3_CTRL_ADV_1000_HALF;
    653 		}
    654 		if (tp->link_config.advertising & ADVERTISED_1000baseT_Full) {
    655 			new_adv |= MII_TG3_CTRL_ADV_1000_FULL;
    656 		}
    657 		if (!(tp->tg3_flags & TG3_FLAG_10_100_ONLY) &&
    658 			(tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 ||
    659 				tp->pci_chip_rev_id == CHIPREV_ID_5701_B0)) {
    660 			new_adv |= (MII_TG3_CTRL_AS_MASTER |
    661 				MII_TG3_CTRL_ENABLE_AS_MASTER);
    662 		}
    663 		tg3_writephy(tp, MII_TG3_CTRL, new_adv);
    664 	} else {
    665 		tg3_writephy(tp, MII_TG3_CTRL, 0);
    666 	}
    667 
    668 	tg3_writephy(tp, MII_BMCR, BMCR_ANENABLE | BMCR_ANRESTART);
    669 
    670 	return 0;
    671 }
    672 
    673 static int tg3_init_5401phy_dsp(struct tg3 *tp)
    674 {
    675 	int err;
    676 
    677 	/* Turn off tap power management. */
    678 	err  = tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x0c20);
    679 
    680 	err |= tg3_writedsp(tp, 0x0012, 0x1804);
    681 	err |= tg3_writedsp(tp, 0x0013, 0x1204);
    682 	err |= tg3_writedsp(tp, 0x8006, 0x0132);
    683 	err |= tg3_writedsp(tp, 0x8006, 0x0232);
    684 	err |= tg3_writedsp(tp, 0x201f, 0x0a20);
    685 
    686 	udelay(40);
    687 
    688 	return err;
    689 }
    690 
    691 static int tg3_setup_copper_phy(struct tg3 *tp)
    692 {
    693 	int current_link_up;
    694 	uint32_t bmsr, dummy;
    695 	int i, err;
    696 
    697 	tw32_carefully(MAC_STATUS,
    698 		(MAC_STATUS_SYNC_CHANGED | MAC_STATUS_CFG_CHANGED
    699 		 | MAC_STATUS_LNKSTATE_CHANGED));
    700 
    701 	tp->mi_mode = MAC_MI_MODE_BASE;
    702 	tw32_carefully(MAC_MI_MODE, tp->mi_mode);
    703 
    704 	tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x02);
    705 
    706 	/* Some third-party PHYs need to be reset on link going
    707 	 * down.
    708 	 */
    709 	if (	(	(GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703) ||
    710 			(GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) ||
    711 			(tp->pci_chip_rev_id == CHIPREV_ID_5705_A0)) &&
    712 		(tp->carrier_ok)) {
    713 		tg3_readphy(tp, MII_BMSR, &bmsr);
    714 		tg3_readphy(tp, MII_BMSR, &bmsr);
    715 		if (!(bmsr & BMSR_LSTATUS))
    716 			tg3_phy_reset(tp);
    717 	}
    718 
    719 	if ((tp->phy_id & PHY_ID_MASK) == PHY_ID_BCM5401) {
    720 		tg3_readphy(tp, MII_BMSR, &bmsr);
    721 		tg3_readphy(tp, MII_BMSR, &bmsr);
    722 
    723 		if (!(tp->tg3_flags & TG3_FLAG_INIT_COMPLETE))
    724 			bmsr = 0;
    725 
    726 		if (!(bmsr & BMSR_LSTATUS)) {
    727 			err = tg3_init_5401phy_dsp(tp);
    728 			if (err)
    729 				return err;
    730 
    731 			tg3_readphy(tp, MII_BMSR, &bmsr);
    732 			for (i = 0; i < 1000; i++) {
    733 				udelay(10);
    734 				tg3_readphy(tp, MII_BMSR, &bmsr);
    735 				if (bmsr & BMSR_LSTATUS) {
    736 					udelay(40);
    737 					break;
    738 				}
    739 			}
    740 
    741 			if ((tp->phy_id & PHY_ID_REV_MASK) == PHY_REV_BCM5401_B0 &&
    742 			    !(bmsr & BMSR_LSTATUS) &&
    743 			    tp->link_config.active_speed == SPEED_1000) {
    744 				err = tg3_phy_reset(tp);
    745 				if (!err)
    746 					err = tg3_init_5401phy_dsp(tp);
    747 				if (err)
    748 					return err;
    749 			}
    750 		}
    751 	} else if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 ||
    752 		   tp->pci_chip_rev_id == CHIPREV_ID_5701_B0) {
    753 		/* 5701 {A0,B0} CRC bug workaround */
    754 		tg3_writephy(tp, 0x15, 0x0a75);
    755 		tg3_writephy(tp, 0x1c, 0x8c68);
    756 		tg3_writephy(tp, 0x1c, 0x8d68);
    757 		tg3_writephy(tp, 0x1c, 0x8c68);
    758 	}
    759 
    760 	/* Clear pending interrupts... */
    761 	tg3_readphy(tp, MII_TG3_ISTAT, &dummy);
    762 	tg3_readphy(tp, MII_TG3_ISTAT, &dummy);
    763 
    764 	tg3_writephy(tp, MII_TG3_IMASK, ~0);
    765 
    766 	if (tp->led_mode == led_mode_three_link)
    767 		tg3_writephy(tp, MII_TG3_EXT_CTRL,
    768 			     MII_TG3_EXT_CTRL_LNK3_LED_MODE);
    769 	else
    770 		tg3_writephy(tp, MII_TG3_EXT_CTRL, 0);
    771 
    772 	current_link_up = 0;
    773 
    774 	tg3_readphy(tp, MII_BMSR, &bmsr);
    775 	tg3_readphy(tp, MII_BMSR, &bmsr);
    776 
    777 	if (bmsr & BMSR_LSTATUS) {
    778 		uint32_t aux_stat, bmcr;
    779 
    780 		tg3_readphy(tp, MII_TG3_AUX_STAT, &aux_stat);
    781 		for (i = 0; i < 2000; i++) {
    782 			udelay(10);
    783 			tg3_readphy(tp, MII_TG3_AUX_STAT, &aux_stat);
    784 			if (aux_stat)
    785 				break;
    786 		}
    787 
    788 		tg3_aux_stat_to_speed_duplex(tp, aux_stat,
    789 			&tp->link_config.active_speed,
    790 			&tp->link_config.active_duplex);
    791 		tg3_readphy(tp, MII_BMCR, &bmcr);
    792 		tg3_readphy(tp, MII_BMCR, &bmcr);
    793 		if (bmcr & BMCR_ANENABLE) {
    794 			uint32_t gig_ctrl;
    795 
    796 			current_link_up = 1;
    797 
    798 			/* Force autoneg restart if we are exiting
    799 			 * low power mode.
    800 			 */
    801 			tg3_readphy(tp, MII_TG3_CTRL, &gig_ctrl);
    802 			if (!(gig_ctrl & (MII_TG3_CTRL_ADV_1000_HALF |
    803 				      MII_TG3_CTRL_ADV_1000_FULL))) {
    804 				current_link_up = 0;
    805 			}
    806 		} else {
    807 			current_link_up = 0;
    808 		}
    809 	}
    810 
    811 	if (current_link_up == 1 &&
    812 		(tp->link_config.active_duplex == DUPLEX_FULL)) {
    813 		uint32_t local_adv, remote_adv;
    814 
    815 		tg3_readphy(tp, MII_ADVERTISE, &local_adv);
    816 		local_adv &= (ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM);
    817 
    818 		tg3_readphy(tp, MII_LPA, &remote_adv);
    819 		remote_adv &= (LPA_PAUSE_CAP | LPA_PAUSE_ASYM);
    820 
    821 		/* If we are not advertising full pause capability,
    822 		 * something is wrong.  Bring the link down and reconfigure.
    823 		 */
    824 		if (local_adv != ADVERTISE_PAUSE_CAP) {
    825 			current_link_up = 0;
    826 		} else {
    827 			tg3_setup_flow_control(tp, local_adv, remote_adv);
    828 		}
    829 	}
    830 
    831 	if (current_link_up == 0) {
    832 		uint32_t tmp;
    833 
    834 		tg3_phy_copper_begin(tp);
    835 
    836 		tg3_readphy(tp, MII_BMSR, &tmp);
    837 		tg3_readphy(tp, MII_BMSR, &tmp);
    838 		if (tmp & BMSR_LSTATUS)
    839 			current_link_up = 1;
    840 	}
    841 
    842 	tp->mac_mode &= ~MAC_MODE_PORT_MODE_MASK;
    843 	if (current_link_up == 1) {
    844 		if (tp->link_config.active_speed == SPEED_100 ||
    845 		    tp->link_config.active_speed == SPEED_10)
    846 			tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
    847 		else
    848 			tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
    849 	} else
    850 		tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
    851 
    852 	tp->mac_mode &= ~MAC_MODE_HALF_DUPLEX;
    853 	if (tp->link_config.active_duplex == DUPLEX_HALF)
    854 		tp->mac_mode |= MAC_MODE_HALF_DUPLEX;
    855 
    856 	tp->mac_mode &= ~MAC_MODE_LINK_POLARITY;
    857 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700) {
    858 		if ((tp->led_mode == led_mode_link10) ||
    859 		    (current_link_up == 1 &&
    860 		     tp->link_config.active_speed == SPEED_10))
    861 			tp->mac_mode |= MAC_MODE_LINK_POLARITY;
    862 	} else {
    863 		if (current_link_up == 1)
    864 			tp->mac_mode |= MAC_MODE_LINK_POLARITY;
    865 		tw32(MAC_LED_CTRL, LED_CTRL_PHY_MODE_1);
    866 	}
    867 
    868 	/* ??? Without this setting Netgear GA302T PHY does not
    869 	 * ??? send/receive packets...
    870 	 * With this other PHYs cannot bring up the link
    871 	 */
    872 	if ((tp->phy_id & PHY_ID_MASK) == PHY_ID_BCM5411 &&
    873 		tp->pci_chip_rev_id == CHIPREV_ID_5700_ALTIMA) {
    874 		tp->mi_mode |= MAC_MI_MODE_AUTO_POLL;
    875 		tw32_carefully(MAC_MI_MODE, tp->mi_mode);
    876 	}
    877 
    878 	tw32_carefully(MAC_MODE, tp->mac_mode);
    879 
    880 	/* Link change polled. */
    881 	tw32_carefully(MAC_EVENT, 0);
    882 
    883 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 &&
    884 	    current_link_up == 1 &&
    885 	    tp->link_config.active_speed == SPEED_1000 &&
    886 	    ((tp->tg3_flags & TG3_FLAG_PCIX_MODE) ||
    887 	     (tp->tg3_flags & TG3_FLAG_PCI_HIGH_SPEED))) {
    888 		udelay(120);
    889 		tw32_carefully(MAC_STATUS,
    890 			(MAC_STATUS_SYNC_CHANGED | MAC_STATUS_CFG_CHANGED));
    891 		tg3_write_mem(
    892 			      NIC_SRAM_FIRMWARE_MBOX,
    893 			      NIC_SRAM_FIRMWARE_MBOX_MAGIC2);
    894 	}
    895 
    896 	if (current_link_up != tp->carrier_ok) {
    897 		tp->carrier_ok = current_link_up;
    898 		tg3_link_report(tp);
    899 	}
    900 
    901 	return 0;
    902 }
    903 #else
    904 #define tg3_setup_copper_phy(TP) (-EINVAL)
    905 #endif /* SUPPORT_COPPER_PHY */
    906 
    907 #if SUPPORT_FIBER_PHY
    908 struct tg3_fiber_aneginfo {
    909 	int state;
    910 #define ANEG_STATE_UNKNOWN		0
    911 #define ANEG_STATE_AN_ENABLE		1
    912 #define ANEG_STATE_RESTART_INIT		2
    913 #define ANEG_STATE_RESTART		3
    914 #define ANEG_STATE_DISABLE_LINK_OK	4
    915 #define ANEG_STATE_ABILITY_DETECT_INIT	5
    916 #define ANEG_STATE_ABILITY_DETECT	6
    917 #define ANEG_STATE_ACK_DETECT_INIT	7
    918 #define ANEG_STATE_ACK_DETECT		8
    919 #define ANEG_STATE_COMPLETE_ACK_INIT	9
    920 #define ANEG_STATE_COMPLETE_ACK		10
    921 #define ANEG_STATE_IDLE_DETECT_INIT	11
    922 #define ANEG_STATE_IDLE_DETECT		12
    923 #define ANEG_STATE_LINK_OK		13
    924 #define ANEG_STATE_NEXT_PAGE_WAIT_INIT	14
    925 #define ANEG_STATE_NEXT_PAGE_WAIT	15
    926 
    927 	uint32_t flags;
    928 #define MR_AN_ENABLE		0x00000001
    929 #define MR_RESTART_AN		0x00000002
    930 #define MR_AN_COMPLETE		0x00000004
    931 #define MR_PAGE_RX		0x00000008
    932 #define MR_NP_LOADED		0x00000010
    933 #define MR_TOGGLE_TX		0x00000020
    934 #define MR_LP_ADV_FULL_DUPLEX	0x00000040
    935 #define MR_LP_ADV_HALF_DUPLEX	0x00000080
    936 #define MR_LP_ADV_SYM_PAUSE	0x00000100
    937 #define MR_LP_ADV_ASYM_PAUSE	0x00000200
    938 #define MR_LP_ADV_REMOTE_FAULT1	0x00000400
    939 #define MR_LP_ADV_REMOTE_FAULT2	0x00000800
    940 #define MR_LP_ADV_NEXT_PAGE	0x00001000
    941 #define MR_TOGGLE_RX		0x00002000
    942 #define MR_NP_RX		0x00004000
    943 
    944 #define MR_LINK_OK		0x80000000
    945 
    946 	unsigned long link_time, cur_time;
    947 
    948 	uint32_t ability_match_cfg;
    949 	int ability_match_count;
    950 
    951 	char ability_match, idle_match, ack_match;
    952 
    953 	uint32_t txconfig, rxconfig;
    954 #define ANEG_CFG_NP		0x00000080
    955 #define ANEG_CFG_ACK		0x00000040
    956 #define ANEG_CFG_RF2		0x00000020
    957 #define ANEG_CFG_RF1		0x00000010
    958 #define ANEG_CFG_PS2		0x00000001
    959 #define ANEG_CFG_PS1		0x00008000
    960 #define ANEG_CFG_HD		0x00004000
    961 #define ANEG_CFG_FD		0x00002000
    962 #define ANEG_CFG_INVAL		0x00001f06
    963 
    964 };
    965 #define ANEG_OK		0
    966 #define ANEG_DONE	1
    967 #define ANEG_TIMER_ENAB	2
    968 #define ANEG_FAILED	-1
    969 
    970 #define ANEG_STATE_SETTLE_TIME	10000
    971 
    972 static int tg3_fiber_aneg_smachine(struct tg3 *tp,
    973 				   struct tg3_fiber_aneginfo *ap)
    974 {
    975 	unsigned long delta;
    976 	uint32_t rx_cfg_reg;
    977 	int ret;
    978 
    979 	if (ap->state == ANEG_STATE_UNKNOWN) {
    980 		ap->rxconfig = 0;
    981 		ap->link_time = 0;
    982 		ap->cur_time = 0;
    983 		ap->ability_match_cfg = 0;
    984 		ap->ability_match_count = 0;
    985 		ap->ability_match = 0;
    986 		ap->idle_match = 0;
    987 		ap->ack_match = 0;
    988 	}
    989 	ap->cur_time++;
    990 
    991 	if (tr32(MAC_STATUS) & MAC_STATUS_RCVD_CFG) {
    992 		rx_cfg_reg = tr32(MAC_RX_AUTO_NEG);
    993 
    994 		if (rx_cfg_reg != ap->ability_match_cfg) {
    995 			ap->ability_match_cfg = rx_cfg_reg;
    996 			ap->ability_match = 0;
    997 			ap->ability_match_count = 0;
    998 		} else {
    999 			if (++ap->ability_match_count > 1) {
   1000 				ap->ability_match = 1;
   1001 				ap->ability_match_cfg = rx_cfg_reg;
   1002 			}
   1003 		}
   1004 		if (rx_cfg_reg & ANEG_CFG_ACK)
   1005 			ap->ack_match = 1;
   1006 		else
   1007 			ap->ack_match = 0;
   1008 
   1009 		ap->idle_match = 0;
   1010 	} else {
   1011 		ap->idle_match = 1;
   1012 		ap->ability_match_cfg = 0;
   1013 		ap->ability_match_count = 0;
   1014 		ap->ability_match = 0;
   1015 		ap->ack_match = 0;
   1016 
   1017 		rx_cfg_reg = 0;
   1018 	}
   1019 
   1020 	ap->rxconfig = rx_cfg_reg;
   1021 	ret = ANEG_OK;
   1022 
   1023 	switch(ap->state) {
   1024 	case ANEG_STATE_UNKNOWN:
   1025 		if (ap->flags & (MR_AN_ENABLE | MR_RESTART_AN))
   1026 			ap->state = ANEG_STATE_AN_ENABLE;
   1027 
   1028 		/* fallthru */
   1029 	case ANEG_STATE_AN_ENABLE:
   1030 		ap->flags &= ~(MR_AN_COMPLETE | MR_PAGE_RX);
   1031 		if (ap->flags & MR_AN_ENABLE) {
   1032 			ap->link_time = 0;
   1033 			ap->cur_time = 0;
   1034 			ap->ability_match_cfg = 0;
   1035 			ap->ability_match_count = 0;
   1036 			ap->ability_match = 0;
   1037 			ap->idle_match = 0;
   1038 			ap->ack_match = 0;
   1039 
   1040 			ap->state = ANEG_STATE_RESTART_INIT;
   1041 		} else {
   1042 			ap->state = ANEG_STATE_DISABLE_LINK_OK;
   1043 		}
   1044 		break;
   1045 
   1046 	case ANEG_STATE_RESTART_INIT:
   1047 		ap->link_time = ap->cur_time;
   1048 		ap->flags &= ~(MR_NP_LOADED);
   1049 		ap->txconfig = 0;
   1050 		tw32(MAC_TX_AUTO_NEG, 0);
   1051 		tp->mac_mode |= MAC_MODE_SEND_CONFIGS;
   1052 		tw32_carefully(MAC_MODE, tp->mac_mode);
   1053 
   1054 		ret = ANEG_TIMER_ENAB;
   1055 		ap->state = ANEG_STATE_RESTART;
   1056 
   1057 		/* fallthru */
   1058 	case ANEG_STATE_RESTART:
   1059 		delta = ap->cur_time - ap->link_time;
   1060 		if (delta > ANEG_STATE_SETTLE_TIME) {
   1061 			ap->state = ANEG_STATE_ABILITY_DETECT_INIT;
   1062 		} else {
   1063 			ret = ANEG_TIMER_ENAB;
   1064 		}
   1065 		break;
   1066 
   1067 	case ANEG_STATE_DISABLE_LINK_OK:
   1068 		ret = ANEG_DONE;
   1069 		break;
   1070 
   1071 	case ANEG_STATE_ABILITY_DETECT_INIT:
   1072 		ap->flags &= ~(MR_TOGGLE_TX);
   1073 		ap->txconfig = (ANEG_CFG_FD | ANEG_CFG_PS1);
   1074 		tw32(MAC_TX_AUTO_NEG, ap->txconfig);
   1075 		tp->mac_mode |= MAC_MODE_SEND_CONFIGS;
   1076 		tw32_carefully(MAC_MODE, tp->mac_mode);
   1077 
   1078 		ap->state = ANEG_STATE_ABILITY_DETECT;
   1079 		break;
   1080 
   1081 	case ANEG_STATE_ABILITY_DETECT:
   1082 		if (ap->ability_match != 0 && ap->rxconfig != 0) {
   1083 			ap->state = ANEG_STATE_ACK_DETECT_INIT;
   1084 		}
   1085 		break;
   1086 
   1087 	case ANEG_STATE_ACK_DETECT_INIT:
   1088 		ap->txconfig |= ANEG_CFG_ACK;
   1089 		tw32(MAC_TX_AUTO_NEG, ap->txconfig);
   1090 		tp->mac_mode |= MAC_MODE_SEND_CONFIGS;
   1091 		tw32_carefully(MAC_MODE, tp->mac_mode);
   1092 
   1093 		ap->state = ANEG_STATE_ACK_DETECT;
   1094 
   1095 		/* fallthru */
   1096 	case ANEG_STATE_ACK_DETECT:
   1097 		if (ap->ack_match != 0) {
   1098 			if ((ap->rxconfig & ~ANEG_CFG_ACK) ==
   1099 			    (ap->ability_match_cfg & ~ANEG_CFG_ACK)) {
   1100 				ap->state = ANEG_STATE_COMPLETE_ACK_INIT;
   1101 			} else {
   1102 				ap->state = ANEG_STATE_AN_ENABLE;
   1103 			}
   1104 		} else if (ap->ability_match != 0 &&
   1105 			   ap->rxconfig == 0) {
   1106 			ap->state = ANEG_STATE_AN_ENABLE;
   1107 		}
   1108 		break;
   1109 
   1110 	case ANEG_STATE_COMPLETE_ACK_INIT:
   1111 		if (ap->rxconfig & ANEG_CFG_INVAL) {
   1112 			ret = ANEG_FAILED;
   1113 			break;
   1114 		}
   1115 		ap->flags &= ~(MR_LP_ADV_FULL_DUPLEX |
   1116 			       MR_LP_ADV_HALF_DUPLEX |
   1117 			       MR_LP_ADV_SYM_PAUSE |
   1118 			       MR_LP_ADV_ASYM_PAUSE |
   1119 			       MR_LP_ADV_REMOTE_FAULT1 |
   1120 			       MR_LP_ADV_REMOTE_FAULT2 |
   1121 			       MR_LP_ADV_NEXT_PAGE |
   1122 			       MR_TOGGLE_RX |
   1123 			       MR_NP_RX);
   1124 		if (ap->rxconfig & ANEG_CFG_FD)
   1125 			ap->flags |= MR_LP_ADV_FULL_DUPLEX;
   1126 		if (ap->rxconfig & ANEG_CFG_HD)
   1127 			ap->flags |= MR_LP_ADV_HALF_DUPLEX;
   1128 		if (ap->rxconfig & ANEG_CFG_PS1)
   1129 			ap->flags |= MR_LP_ADV_SYM_PAUSE;
   1130 		if (ap->rxconfig & ANEG_CFG_PS2)
   1131 			ap->flags |= MR_LP_ADV_ASYM_PAUSE;
   1132 		if (ap->rxconfig & ANEG_CFG_RF1)
   1133 			ap->flags |= MR_LP_ADV_REMOTE_FAULT1;
   1134 		if (ap->rxconfig & ANEG_CFG_RF2)
   1135 			ap->flags |= MR_LP_ADV_REMOTE_FAULT2;
   1136 		if (ap->rxconfig & ANEG_CFG_NP)
   1137 			ap->flags |= MR_LP_ADV_NEXT_PAGE;
   1138 
   1139 		ap->link_time = ap->cur_time;
   1140 
   1141 		ap->flags ^= (MR_TOGGLE_TX);
   1142 		if (ap->rxconfig & 0x0008)
   1143 			ap->flags |= MR_TOGGLE_RX;
   1144 		if (ap->rxconfig & ANEG_CFG_NP)
   1145 			ap->flags |= MR_NP_RX;
   1146 		ap->flags |= MR_PAGE_RX;
   1147 
   1148 		ap->state = ANEG_STATE_COMPLETE_ACK;
   1149 		ret = ANEG_TIMER_ENAB;
   1150 		break;
   1151 
   1152 	case ANEG_STATE_COMPLETE_ACK:
   1153 		if (ap->ability_match != 0 &&
   1154 		    ap->rxconfig == 0) {
   1155 			ap->state = ANEG_STATE_AN_ENABLE;
   1156 			break;
   1157 		}
   1158 		delta = ap->cur_time - ap->link_time;
   1159 		if (delta > ANEG_STATE_SETTLE_TIME) {
   1160 			if (!(ap->flags & (MR_LP_ADV_NEXT_PAGE))) {
   1161 				ap->state = ANEG_STATE_IDLE_DETECT_INIT;
   1162 			} else {
   1163 				if ((ap->txconfig & ANEG_CFG_NP) == 0 &&
   1164 				    !(ap->flags & MR_NP_RX)) {
   1165 					ap->state = ANEG_STATE_IDLE_DETECT_INIT;
   1166 				} else {
   1167 					ret = ANEG_FAILED;
   1168 				}
   1169 			}
   1170 		}
   1171 		break;
   1172 
   1173 	case ANEG_STATE_IDLE_DETECT_INIT:
   1174 		ap->link_time = ap->cur_time;
   1175 		tp->mac_mode &= ~MAC_MODE_SEND_CONFIGS;
   1176 		tw32_carefully(MAC_MODE, tp->mac_mode);
   1177 
   1178 		ap->state = ANEG_STATE_IDLE_DETECT;
   1179 		ret = ANEG_TIMER_ENAB;
   1180 		break;
   1181 
   1182 	case ANEG_STATE_IDLE_DETECT:
   1183 		if (ap->ability_match != 0 &&
   1184 		    ap->rxconfig == 0) {
   1185 			ap->state = ANEG_STATE_AN_ENABLE;
   1186 			break;
   1187 		}
   1188 		delta = ap->cur_time - ap->link_time;
   1189 		if (delta > ANEG_STATE_SETTLE_TIME) {
   1190 			/* XXX another gem from the Broadcom driver :( */
   1191 			ap->state = ANEG_STATE_LINK_OK;
   1192 		}
   1193 		break;
   1194 
   1195 	case ANEG_STATE_LINK_OK:
   1196 		ap->flags |= (MR_AN_COMPLETE | MR_LINK_OK);
   1197 		ret = ANEG_DONE;
   1198 		break;
   1199 
   1200 	case ANEG_STATE_NEXT_PAGE_WAIT_INIT:
   1201 		/* ??? unimplemented */
   1202 		break;
   1203 
   1204 	case ANEG_STATE_NEXT_PAGE_WAIT:
   1205 		/* ??? unimplemented */
   1206 		break;
   1207 
   1208 	default:
   1209 		ret = ANEG_FAILED;
   1210 		break;
   1211 	};
   1212 
   1213 	return ret;
   1214 }
   1215 
   1216 static int tg3_setup_fiber_phy(struct tg3 *tp)
   1217 {
   1218 	uint32_t orig_pause_cfg;
   1219 	uint16_t orig_active_speed;
   1220 	uint8_t orig_active_duplex;
   1221 	int current_link_up;
   1222 	int i;
   1223 
   1224 	orig_pause_cfg =
   1225 		(tp->tg3_flags & (TG3_FLAG_RX_PAUSE |
   1226 				  TG3_FLAG_TX_PAUSE));
   1227 	orig_active_speed = tp->link_config.active_speed;
   1228 	orig_active_duplex = tp->link_config.active_duplex;
   1229 
   1230 	tp->mac_mode &= ~(MAC_MODE_PORT_MODE_MASK | MAC_MODE_HALF_DUPLEX);
   1231 	tp->mac_mode |= MAC_MODE_PORT_MODE_TBI;
   1232 	tw32_carefully(MAC_MODE, tp->mac_mode);
   1233 
   1234 	/* Reset when initting first time or we have a link. */
   1235 	if (!(tp->tg3_flags & TG3_FLAG_INIT_COMPLETE) ||
   1236 	    (tr32(MAC_STATUS) & MAC_STATUS_PCS_SYNCED)) {
   1237 		/* Set PLL lock range. */
   1238 		tg3_writephy(tp, 0x16, 0x8007);
   1239 
   1240 		/* SW reset */
   1241 		tg3_writephy(tp, MII_BMCR, BMCR_RESET);
   1242 
   1243 		/* Wait for reset to complete. */
   1244 		mdelay(5);
   1245 
   1246 		/* Config mode; select PMA/Ch 1 regs. */
   1247 		tg3_writephy(tp, 0x10, 0x8411);
   1248 
   1249 		/* Enable auto-lock and comdet, select txclk for tx. */
   1250 		tg3_writephy(tp, 0x11, 0x0a10);
   1251 
   1252 		tg3_writephy(tp, 0x18, 0x00a0);
   1253 		tg3_writephy(tp, 0x16, 0x41ff);
   1254 
   1255 		/* Assert and deassert POR. */
   1256 		tg3_writephy(tp, 0x13, 0x0400);
   1257 		udelay(40);
   1258 		tg3_writephy(tp, 0x13, 0x0000);
   1259 
   1260 		tg3_writephy(tp, 0x11, 0x0a50);
   1261 		udelay(40);
   1262 		tg3_writephy(tp, 0x11, 0x0a10);
   1263 
   1264 		/* Wait for signal to stabilize */
   1265 		mdelay(150);
   1266 
   1267 		/* Deselect the channel register so we can read the PHYID
   1268 		 * later.
   1269 		 */
   1270 		tg3_writephy(tp, 0x10, 0x8011);
   1271 	}
   1272 
   1273 	/* Disable link change interrupt.  */
   1274 	tw32_carefully(MAC_EVENT, 0);
   1275 
   1276 	current_link_up = 0;
   1277 	if (tr32(MAC_STATUS) & MAC_STATUS_PCS_SYNCED) {
   1278 		if (!(tp->tg3_flags & TG3_FLAG_GOT_SERDES_FLOWCTL)) {
   1279 			struct tg3_fiber_aneginfo aninfo;
   1280 			int status = ANEG_FAILED;
   1281 			unsigned int tick;
   1282 			uint32_t tmp;
   1283 
   1284 			memset(&aninfo, 0, sizeof(aninfo));
   1285 			aninfo.flags |= (MR_AN_ENABLE);
   1286 
   1287 			tw32(MAC_TX_AUTO_NEG, 0);
   1288 
   1289 			tmp = tp->mac_mode & ~MAC_MODE_PORT_MODE_MASK;
   1290 			tw32_carefully(MAC_MODE, tmp | MAC_MODE_PORT_MODE_GMII);
   1291 
   1292 			tw32_carefully(MAC_MODE, tp->mac_mode | MAC_MODE_SEND_CONFIGS);
   1293 
   1294 			aninfo.state = ANEG_STATE_UNKNOWN;
   1295 			aninfo.cur_time = 0;
   1296 			tick = 0;
   1297 			while (++tick < 195000) {
   1298 				status = tg3_fiber_aneg_smachine(tp, &aninfo);
   1299 				if (status == ANEG_DONE ||
   1300 				    status == ANEG_FAILED)
   1301 					break;
   1302 
   1303 				udelay(1);
   1304 			}
   1305 
   1306 			tp->mac_mode &= ~MAC_MODE_SEND_CONFIGS;
   1307 			tw32_carefully(MAC_MODE, tp->mac_mode);
   1308 
   1309 			if (status == ANEG_DONE &&
   1310 			    (aninfo.flags &
   1311 			     (MR_AN_COMPLETE | MR_LINK_OK |
   1312 			      MR_LP_ADV_FULL_DUPLEX))) {
   1313 				uint32_t local_adv, remote_adv;
   1314 
   1315 				local_adv = ADVERTISE_PAUSE_CAP;
   1316 				remote_adv = 0;
   1317 				if (aninfo.flags & MR_LP_ADV_SYM_PAUSE)
   1318 					remote_adv |= LPA_PAUSE_CAP;
   1319 				if (aninfo.flags & MR_LP_ADV_ASYM_PAUSE)
   1320 					remote_adv |= LPA_PAUSE_ASYM;
   1321 
   1322 				tg3_setup_flow_control(tp, local_adv, remote_adv);
   1323 
   1324 				tp->tg3_flags |=
   1325 					TG3_FLAG_GOT_SERDES_FLOWCTL;
   1326 				current_link_up = 1;
   1327 			}
   1328 			for (i = 0; i < 60; i++) {
   1329 				udelay(20);
   1330 				tw32_carefully(MAC_STATUS,
   1331 					(MAC_STATUS_SYNC_CHANGED | MAC_STATUS_CFG_CHANGED));
   1332 				if ((tr32(MAC_STATUS) &
   1333 				     (MAC_STATUS_SYNC_CHANGED |
   1334 				      MAC_STATUS_CFG_CHANGED)) == 0)
   1335 					break;
   1336 			}
   1337 			if (current_link_up == 0 &&
   1338 			    (tr32(MAC_STATUS) & MAC_STATUS_PCS_SYNCED)) {
   1339 				current_link_up = 1;
   1340 			}
   1341 		} else {
   1342 			/* Forcing 1000FD link up. */
   1343 			current_link_up = 1;
   1344 		}
   1345 	}
   1346 
   1347 	tp->mac_mode &= ~MAC_MODE_LINK_POLARITY;
   1348 	tw32_carefully(MAC_MODE, tp->mac_mode);
   1349 
   1350 	tp->hw_status->status =
   1351 		(SD_STATUS_UPDATED |
   1352 		 (tp->hw_status->status & ~SD_STATUS_LINK_CHG));
   1353 
   1354 	for (i = 0; i < 100; i++) {
   1355 		udelay(20);
   1356 		tw32_carefully(MAC_STATUS,
   1357 			(MAC_STATUS_SYNC_CHANGED | MAC_STATUS_CFG_CHANGED));
   1358 		if ((tr32(MAC_STATUS) &
   1359 		     (MAC_STATUS_SYNC_CHANGED |
   1360 		      MAC_STATUS_CFG_CHANGED)) == 0)
   1361 			break;
   1362 	}
   1363 
   1364 	if ((tr32(MAC_STATUS) & MAC_STATUS_PCS_SYNCED) == 0)
   1365 		current_link_up = 0;
   1366 
   1367 	if (current_link_up == 1) {
   1368 		tp->link_config.active_speed = SPEED_1000;
   1369 		tp->link_config.active_duplex = DUPLEX_FULL;
   1370 	} else {
   1371 		tp->link_config.active_speed = SPEED_INVALID;
   1372 		tp->link_config.active_duplex = DUPLEX_INVALID;
   1373 	}
   1374 
   1375 	if (current_link_up != tp->carrier_ok) {
   1376 		tp->carrier_ok = current_link_up;
   1377 		tg3_link_report(tp);
   1378 	} else {
   1379 		uint32_t now_pause_cfg =
   1380 			tp->tg3_flags & (TG3_FLAG_RX_PAUSE |
   1381 					 TG3_FLAG_TX_PAUSE);
   1382 		if (orig_pause_cfg != now_pause_cfg ||
   1383 		    orig_active_speed != tp->link_config.active_speed ||
   1384 		    orig_active_duplex != tp->link_config.active_duplex)
   1385 			tg3_link_report(tp);
   1386 	}
   1387 
   1388 	if ((tr32(MAC_STATUS) & MAC_STATUS_PCS_SYNCED) == 0) {
   1389 		tw32_carefully(MAC_MODE, tp->mac_mode | MAC_MODE_LINK_POLARITY);
   1390 		if (tp->tg3_flags & TG3_FLAG_INIT_COMPLETE) {
   1391 			tw32_carefully(MAC_MODE, tp->mac_mode);
   1392 		}
   1393 	}
   1394 
   1395 	return 0;
   1396 }
   1397 #else
   1398 #define tg3_setup_fiber_phy(TP) (-EINVAL)
   1399 #endif /* SUPPORT_FIBER_PHY */
   1400 
   1401 static int tg3_setup_phy(struct tg3 *tp)
   1402 {
   1403 	int err;
   1404 
   1405 	if (tp->phy_id == PHY_ID_SERDES) {
   1406 		err = tg3_setup_fiber_phy(tp);
   1407 	} else {
   1408 		err = tg3_setup_copper_phy(tp);
   1409 	}
   1410 
   1411 	if (tp->link_config.active_speed == SPEED_1000 &&
   1412 	    tp->link_config.active_duplex == DUPLEX_HALF)
   1413 		tw32(MAC_TX_LENGTHS,
   1414 		     ((2 << TX_LENGTHS_IPG_CRS_SHIFT) |
   1415 		      (6 << TX_LENGTHS_IPG_SHIFT) |
   1416 		      (0xff << TX_LENGTHS_SLOT_TIME_SHIFT)));
   1417 	else
   1418 		tw32(MAC_TX_LENGTHS,
   1419 		     ((2 << TX_LENGTHS_IPG_CRS_SHIFT) |
   1420 		      (6 << TX_LENGTHS_IPG_SHIFT) |
   1421 		      (32 << TX_LENGTHS_SLOT_TIME_SHIFT)));
   1422 
   1423 	return err;
   1424 }
   1425 
   1426 
   1427 #define MAX_WAIT_CNT 1000
   1428 
   1429 /* To stop a block, clear the enable bit and poll till it
   1430  * clears.
   1431  */
   1432 static int tg3_stop_block(struct tg3 *tp, unsigned long ofs, uint32_t enable_bit)
   1433 {
   1434 	unsigned int i;
   1435 	uint32_t val;
   1436 
   1437 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 ||
   1438 	    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787) {
   1439 		switch(ofs) {
   1440 		case RCVLSC_MODE:
   1441 		case DMAC_MODE:
   1442 		case MBFREE_MODE:
   1443 		case BUFMGR_MODE:
   1444 		case MEMARB_MODE:
   1445 			/* We can't enable/disable these bits of the
   1446 			 * 5705 or 5787, just say success.
   1447 			 */
   1448 			return 0;
   1449 		default:
   1450 			break;
   1451 		}
   1452 	}
   1453 	val = tr32(ofs);
   1454 	val &= ~enable_bit;
   1455 	tw32(ofs, val);
   1456 	tr32(ofs);
   1457 
   1458 	for (i = 0; i < MAX_WAIT_CNT; i++) {
   1459 		udelay(100);
   1460 		val = tr32(ofs);
   1461 		if ((val & enable_bit) == 0)
   1462 			break;
   1463 	}
   1464 
   1465 	if (i == MAX_WAIT_CNT) {
   1466 		printf( "tg3_stop_block timed out, ofs=%#lx enable_bit=%3x\n",
   1467 		       ofs, enable_bit );
   1468 		return -ENODEV;
   1469 	}
   1470 
   1471 	return 0;
   1472 }
   1473 
   1474 static int tg3_abort_hw(struct tg3 *tp)
   1475 {
   1476 	int i, err;
   1477 	uint32_t val;
   1478 
   1479 	tg3_disable_ints(tp);
   1480 
   1481 	tp->rx_mode &= ~RX_MODE_ENABLE;
   1482 	tw32_carefully(MAC_RX_MODE, tp->rx_mode);
   1483 
   1484 	err  = tg3_stop_block(tp, RCVBDI_MODE,   RCVBDI_MODE_ENABLE);
   1485 	err |= tg3_stop_block(tp, RCVLPC_MODE,   RCVLPC_MODE_ENABLE);
   1486 	err |= tg3_stop_block(tp, RCVLSC_MODE,   RCVLSC_MODE_ENABLE);
   1487 	err |= tg3_stop_block(tp, RCVDBDI_MODE,  RCVDBDI_MODE_ENABLE);
   1488 	err |= tg3_stop_block(tp, RCVDCC_MODE,   RCVDCC_MODE_ENABLE);
   1489 	err |= tg3_stop_block(tp, RCVCC_MODE,    RCVCC_MODE_ENABLE);
   1490 
   1491 	err |= tg3_stop_block(tp, SNDBDS_MODE,   SNDBDS_MODE_ENABLE);
   1492 	err |= tg3_stop_block(tp, SNDBDI_MODE,   SNDBDI_MODE_ENABLE);
   1493 	err |= tg3_stop_block(tp, SNDDATAI_MODE, SNDDATAI_MODE_ENABLE);
   1494 	err |= tg3_stop_block(tp, RDMAC_MODE,    RDMAC_MODE_ENABLE);
   1495 	err |= tg3_stop_block(tp, SNDDATAC_MODE, SNDDATAC_MODE_ENABLE);
   1496 	err |= tg3_stop_block(tp, SNDBDC_MODE,   SNDBDC_MODE_ENABLE);
   1497 	if (err)
   1498 		goto out;
   1499 
   1500 	tp->mac_mode &= ~MAC_MODE_TDE_ENABLE;
   1501 	tw32_carefully(MAC_MODE, tp->mac_mode);
   1502 
   1503 	tp->tx_mode &= ~TX_MODE_ENABLE;
   1504 	tw32_carefully(MAC_TX_MODE, tp->tx_mode);
   1505 
   1506 	for (i = 0; i < MAX_WAIT_CNT; i++) {
   1507 		udelay(100);
   1508 		if (!(tr32(MAC_TX_MODE) & TX_MODE_ENABLE))
   1509 			break;
   1510 	}
   1511 	if (i >= MAX_WAIT_CNT) {
   1512 		printf("tg3_abort_hw timed out TX_MODE_ENABLE will not clear MAC_TX_MODE=%x\n",
   1513 		       (unsigned int) tr32(MAC_TX_MODE));
   1514 		return -ENODEV;
   1515 	}
   1516 
   1517 	err  = tg3_stop_block(tp, HOSTCC_MODE, HOSTCC_MODE_ENABLE);
   1518 	err |= tg3_stop_block(tp, WDMAC_MODE,  WDMAC_MODE_ENABLE);
   1519 	err |= tg3_stop_block(tp, MBFREE_MODE, MBFREE_MODE_ENABLE);
   1520 
   1521 	val = tr32(FTQ_RESET);
   1522 	val |= FTQ_RESET_DMA_READ_QUEUE | FTQ_RESET_DMA_HIGH_PRI_READ |
   1523 	       FTQ_RESET_SEND_BD_COMPLETION | FTQ_RESET_DMA_WRITE |
   1524 	       FTQ_RESET_DMA_HIGH_PRI_WRITE | FTQ_RESET_SEND_DATA_COMPLETION |
   1525 	       FTQ_RESET_HOST_COALESCING | FTQ_RESET_MAC_TX |
   1526 	       FTQ_RESET_RX_BD_COMPLETE | FTQ_RESET_RX_LIST_PLCMT |
   1527                FTQ_RESET_RX_DATA_COMPLETION;
   1528 	tw32(FTQ_RESET, val);
   1529 
   1530 	err |= tg3_stop_block(tp, BUFMGR_MODE, BUFMGR_MODE_ENABLE);
   1531 	err |= tg3_stop_block(tp, MEMARB_MODE, MEMARB_MODE_ENABLE);
   1532 	if (err)
   1533 		goto out;
   1534 
   1535 	memset(tp->hw_status, 0, TG3_HW_STATUS_SIZE);
   1536 
   1537 out:
   1538 	return err;
   1539 }
   1540 
   1541 static void tg3_chip_reset(struct tg3 *tp)
   1542 {
   1543 	uint32_t val;
   1544 
   1545 	if (!(tp->tg3_flags2 & TG3_FLG2_SUN_5704)) {
   1546 		/* Force NVRAM to settle.
   1547 		 * This deals with a chip bug which can result in EEPROM
   1548 		 * corruption.
   1549 		 */
   1550 		if (tp->tg3_flags & TG3_FLAG_NVRAM) {
   1551 			int i;
   1552 
   1553 			tw32(NVRAM_SWARB, SWARB_REQ_SET1);
   1554 			for (i = 0; i < 100000; i++) {
   1555 				if (tr32(NVRAM_SWARB) & SWARB_GNT1)
   1556 					break;
   1557 				udelay(10);
   1558 			}
   1559 		}
   1560 	}
   1561 	/* In Etherboot we don't need to worry about the 5701
   1562 	 * REG_WRITE_BUG because we do all register writes indirectly.
   1563 	 */
   1564 
   1565 	// Alf: here patched
   1566 	/* do the reset */
   1567 	val = GRC_MISC_CFG_CORECLK_RESET;
   1568 	if (tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS) {
   1569 		if (tr32(0x7e2c) == 0x60) {
   1570 			tw32(0x7e2c, 0x20);
   1571 		}
   1572 		if (tp->pci_chip_rev_id != CHIPREV_ID_5750_A0) {
   1573 			tw32(GRC_MISC_CFG, (1 << 29));
   1574 			val |= (1 << 29);
   1575 		}
   1576 	}
   1577 
   1578 	if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705)
   1579 	    || (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750)
   1580 	    || (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787)) {
   1581 		val |= GRC_MISC_CFG_KEEP_GPHY_POWER;
   1582 	}
   1583 
   1584 	// Alf : Please VALIDATE THIS.
   1585 	// It is necessary in my case (5751) to prevent a reboot, but
   1586 	// I have no idea about a side effect on any other version.
   1587 	// It appears to be what's done in tigon3.c from Broadcom
   1588 	if (tp->pci_chip_rev_id != CHIPREV_ID_5750_A0) {
   1589 	  tw32(GRC_MISC_CFG, 0x20000000) ;
   1590 	  val |= 0x20000000 ;
   1591 	}
   1592 
   1593 	tw32(GRC_MISC_CFG, val);
   1594 
   1595 	/* Flush PCI posted writes.  The normal MMIO registers
   1596 	 * are inaccessible at this time so this is the only
   1597 	 * way to make this reliably.  I tried to use indirect
   1598 	 * register read/write but this upset some 5701 variants.
   1599 	 */
   1600 	pci_read_config_dword(tp->pdev, PCI_COMMAND, &val);
   1601 
   1602 	udelay(120);
   1603 
   1604 	/* Re-enable indirect register accesses. */
   1605 	pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
   1606 			       tp->misc_host_ctrl);
   1607 
   1608 	/* Set MAX PCI retry to zero. */
   1609 	val = (PCISTATE_ROM_ENABLE | PCISTATE_ROM_RETRY_ENABLE);
   1610 	if (tp->pci_chip_rev_id == CHIPREV_ID_5704_A0 &&
   1611 	    (tp->tg3_flags & TG3_FLAG_PCIX_MODE))
   1612 		val |= PCISTATE_RETRY_SAME_DMA;
   1613 	pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, val);
   1614 
   1615 	pci_restore_state(tp->pdev, tp->pci_cfg_state);
   1616 
   1617 	/* Make sure PCI-X relaxed ordering bit is clear. */
   1618 	pci_read_config_dword(tp->pdev, TG3PCI_X_CAPS, &val);
   1619 	val &= ~PCIX_CAPS_RELAXED_ORDERING;
   1620 	pci_write_config_dword(tp->pdev, TG3PCI_X_CAPS, val);
   1621 
   1622 	tw32(MEMARB_MODE, MEMARB_MODE_ENABLE);
   1623 
   1624 	if (((tp->nic_sram_data_cfg & NIC_SRAM_DATA_CFG_MINI_PCI) != 0) &&
   1625 		(GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705)) {
   1626 		tp->pci_clock_ctrl |=
   1627 			(CLOCK_CTRL_FORCE_CLKRUN | CLOCK_CTRL_CLKRUN_OENABLE);
   1628 		tw32(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl);
   1629 	}
   1630 
   1631 	tw32(TG3PCI_MISC_HOST_CTRL, tp->misc_host_ctrl);
   1632 }
   1633 
   1634 static void tg3_stop_fw(struct tg3 *tp)
   1635 {
   1636 	if (tp->tg3_flags & TG3_FLAG_ENABLE_ASF) {
   1637 		uint32_t val;
   1638 		int i;
   1639 
   1640 		tg3_write_mem(NIC_SRAM_FW_CMD_MBOX, FWCMD_NICDRV_PAUSE_FW);
   1641 		val = tr32(GRC_RX_CPU_EVENT);
   1642 		val |= (1 << 14);
   1643 		tw32(GRC_RX_CPU_EVENT, val);
   1644 
   1645 		/* Wait for RX cpu to ACK the event.  */
   1646 		for (i = 0; i < 100; i++) {
   1647 			if (!(tr32(GRC_RX_CPU_EVENT) & (1 << 14)))
   1648 				break;
   1649 			udelay(1);
   1650 		}
   1651 	}
   1652 }
   1653 
   1654 static int tg3_restart_fw(struct tg3 *tp, uint32_t state)
   1655 {
   1656 	uint32_t val;
   1657 	int i;
   1658 
   1659 	tg3_write_mem(NIC_SRAM_FIRMWARE_MBOX,
   1660 		NIC_SRAM_FIRMWARE_MBOX_MAGIC1);
   1661 	/* Wait for firmware initialization to complete. */
   1662 	for (i = 0; i < 100000; i++) {
   1663 		tg3_read_mem(NIC_SRAM_FIRMWARE_MBOX, &val);
   1664 		if (val == (uint32_t) ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1)
   1665 			break;
   1666 		udelay(10);
   1667 	}
   1668 	if (i >= 100000 &&
   1669 		    !(tp->tg3_flags2 & TG3_FLG2_SUN_5704) &&
   1670 		    !(GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787)) {
   1671 		printf ( "Firmware will not restart magic=%#x\n",
   1672 			val );
   1673 		return -ENODEV;
   1674 	}
   1675 	if (!(tp->tg3_flags & TG3_FLAG_ENABLE_ASF)) {
   1676 	  state = DRV_STATE_SUSPEND;
   1677 	}
   1678 
   1679 	if ((tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS) &&
   1680 	    (tp->pci_chip_rev_id != CHIPREV_ID_5750_A0)) {
   1681 	  // Enable PCIE bug fix
   1682 	  tg3_read_mem(0x7c00, &val);
   1683 	  tg3_write_mem(0x7c00, val | 0x02000000);
   1684 	}
   1685 	tg3_write_mem(NIC_SRAM_FW_DRV_STATE_MBOX, state);
   1686 	return 0;
   1687 }
   1688 
   1689 static int tg3_halt(struct tg3 *tp)
   1690 {
   1691 	tg3_stop_fw(tp);
   1692 	tg3_abort_hw(tp);
   1693 	tg3_chip_reset(tp);
   1694 	return tg3_restart_fw(tp, DRV_STATE_UNLOAD);
   1695 }
   1696 
   1697 static void __tg3_set_mac_addr(struct tg3 *tp)
   1698 {
   1699 	uint32_t addr_high, addr_low;
   1700 	int i;
   1701 
   1702 	addr_high = ((tp->nic->node_addr[0] << 8) |
   1703 		     tp->nic->node_addr[1]);
   1704 	addr_low = ((tp->nic->node_addr[2] << 24) |
   1705 		    (tp->nic->node_addr[3] << 16) |
   1706 		    (tp->nic->node_addr[4] <<  8) |
   1707 		    (tp->nic->node_addr[5] <<  0));
   1708 	for (i = 0; i < 4; i++) {
   1709 		tw32(MAC_ADDR_0_HIGH + (i * 8), addr_high);
   1710 		tw32(MAC_ADDR_0_LOW + (i * 8), addr_low);
   1711 	}
   1712 
   1713 	if ((GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700) &&
   1714 		(GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701) &&
   1715 		(GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705)) {
   1716 		for(i = 0; i < 12; i++) {
   1717 			tw32(MAC_EXTADDR_0_HIGH + (i * 8), addr_high);
   1718 			tw32(MAC_EXTADDR_0_LOW + (i * 8), addr_low);
   1719 		}
   1720 	}
   1721 	addr_high = (tp->nic->node_addr[0] +
   1722 		     tp->nic->node_addr[1] +
   1723 		     tp->nic->node_addr[2] +
   1724 		     tp->nic->node_addr[3] +
   1725 		     tp->nic->node_addr[4] +
   1726 		     tp->nic->node_addr[5]) &
   1727 		TX_BACKOFF_SEED_MASK;
   1728 	tw32(MAC_TX_BACKOFF_SEED, addr_high);
   1729 }
   1730 
   1731 static void tg3_set_bdinfo(struct tg3 *tp, uint32_t bdinfo_addr,
   1732 			   dma_addr_t mapping, uint32_t maxlen_flags,
   1733 			   uint32_t nic_addr)
   1734 {
   1735 	tg3_write_mem((bdinfo_addr +
   1736 		       TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH),
   1737 		      ((uint64_t) mapping >> 32));
   1738 	tg3_write_mem((bdinfo_addr +
   1739 		       TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW),
   1740 		      ((uint64_t) mapping & 0xffffffff));
   1741 	tg3_write_mem((bdinfo_addr +
   1742 		       TG3_BDINFO_MAXLEN_FLAGS),
   1743 		       maxlen_flags);
   1744 	if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705) {
   1745 		tg3_write_mem((bdinfo_addr + TG3_BDINFO_NIC_ADDR), nic_addr);
   1746 	}
   1747 }
   1748 
   1749 
   1750 static void tg3_init_rings(struct tg3 *tp)
   1751 {
   1752 	unsigned i;
   1753 
   1754 	/* Zero out the tg3 variables */
   1755 	memset(&tg3_bss, 0, sizeof(tg3_bss));
   1756 	tp->rx_std    = &tg3_bss.rx_std[0];
   1757 	tp->rx_rcb    = &tg3_bss.rx_rcb[0];
   1758 	tp->tx_ring   = &tg3_bss.tx_ring[0];
   1759 	tp->hw_status = &tg3_bss.hw_status;
   1760 	tp->hw_stats  = &tg3_bss.hw_stats;
   1761 	tp->mac_mode  = 0;
   1762 
   1763 
   1764 	/* Initialize tx/rx rings for packet processing.
   1765 	 *
   1766 	 * The chip has been shut down and the driver detached from
   1767 	 * the networking, so no interrupts or new tx packets will
   1768 	 * end up in the driver.
   1769 	 */
   1770 
   1771 	/* Initialize invariants of the rings, we only set this
   1772 	 * stuff once.  This works because the card does not
   1773 	 * write into the rx buffer posting rings.
   1774 	 */
   1775 	for (i = 0; i < TG3_RX_RING_SIZE; i++) {
   1776 		struct tg3_rx_buffer_desc *rxd;
   1777 
   1778 		rxd = &tp->rx_std[i];
   1779 		rxd->idx_len = (RX_PKT_BUF_SZ - 2 - 64)	<< RXD_LEN_SHIFT;
   1780 		rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT);
   1781 		rxd->opaque = (RXD_OPAQUE_RING_STD | (i << RXD_OPAQUE_INDEX_SHIFT));
   1782 
   1783 		/* Note where the receive buffer for the ring is placed */
   1784 		rxd->addr_hi = 0;
   1785 		rxd->addr_lo = virt_to_bus(
   1786 			&tg3_bss.rx_bufs[i%TG3_DEF_RX_RING_PENDING][2]);
   1787 	}
   1788 }
   1789 
   1790 #define TG3_WRITE_SETTINGS(TABLE) \
   1791 do { \
   1792 	const uint32_t *_table, *_end; \
   1793 	_table = TABLE; \
   1794 	_end = _table + sizeof(TABLE)/sizeof(TABLE[0]);  \
   1795 	for(; _table < _end; _table += 2) { \
   1796 		tw32(_table[0], _table[1]); \
   1797 	} \
   1798 } while(0)
   1799 
   1800 
   1801 /* initialize/reset the tg3 */
   1802 static int tg3_setup_hw(struct tg3 *tp)
   1803 {
   1804 	uint32_t val, rdmac_mode;
   1805 	int i, err, limit;
   1806 
   1807 	/* Simply don't support setups with extremly buggy firmware in etherboot */
   1808 	if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0) {
   1809 		printf("Error 5701_A0 firmware bug detected\n");
   1810 		return -EINVAL;
   1811 	}
   1812 
   1813 	tg3_disable_ints(tp);
   1814 
   1815 	/* Originally this was all in tg3_init_hw */
   1816 
   1817 	/* Force the chip into D0. */
   1818 	tg3_set_power_state_0(tp);
   1819 
   1820 	tg3_switch_clocks(tp);
   1821 
   1822 	tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0);
   1823 
   1824 	// This should go somewhere else
   1825 #define T3_PCIE_CAPABILITY_ID_REG           0xD0
   1826 #define T3_PCIE_CAPABILITY_ID               0x10
   1827 #define T3_PCIE_CAPABILITY_REG              0xD2
   1828 
   1829 	/* Originally this was all in tg3_reset_hw */
   1830 
   1831 	tg3_stop_fw(tp);
   1832 
   1833 	/* No need to call tg3_abort_hw here, it is called before tg3_setup_hw. */
   1834 
   1835 	tg3_chip_reset(tp);
   1836 
   1837 	tw32(GRC_MODE, tp->grc_mode);  /* Redundant? */
   1838 
   1839 	err = tg3_restart_fw(tp, DRV_STATE_START);
   1840 	if (err)
   1841 		return err;
   1842 
   1843 	if (tp->phy_id == PHY_ID_SERDES) {
   1844 		tp->mac_mode = MAC_MODE_PORT_MODE_TBI;
   1845 	}
   1846 	tw32_carefully(MAC_MODE, tp->mac_mode);
   1847 
   1848 
   1849 	/* This works around an issue with Athlon chipsets on
   1850 	 * B3 tigon3 silicon.  This bit has no effect on any
   1851 	 * other revision.
   1852 	 * Alf: Except 5750 ! (which reboots)
   1853 	 */
   1854 
   1855         if (!(tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS))
   1856 	  tp->pci_clock_ctrl |= CLOCK_CTRL_DELAY_PCI_GRANT;
   1857 	tw32_carefully(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl);
   1858 
   1859 	if (tp->pci_chip_rev_id == CHIPREV_ID_5704_A0 &&
   1860 	    (tp->tg3_flags & TG3_FLAG_PCIX_MODE)) {
   1861 		val = tr32(TG3PCI_PCISTATE);
   1862 		val |= PCISTATE_RETRY_SAME_DMA;
   1863 		tw32(TG3PCI_PCISTATE, val);
   1864 	}
   1865 
   1866 	/* Descriptor ring init may make accesses to the
   1867 	 * NIC SRAM area to setup the TX descriptors, so we
   1868 	 * can only do this after the hardware has been
   1869 	 * successfully reset.
   1870 	 */
   1871 	tg3_init_rings(tp);
   1872 
   1873 	/* Clear statistics/status block in chip */
   1874 	if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705) {
   1875 		for (i = NIC_SRAM_STATS_BLK;
   1876 		     i < NIC_SRAM_STATUS_BLK + TG3_HW_STATUS_SIZE;
   1877 		     i += sizeof(uint32_t)) {
   1878 			tg3_write_mem(i, 0);
   1879 			udelay(40);
   1880 		}
   1881 	}
   1882 
   1883 	/* This value is determined during the probe time DMA
   1884 	 * engine test, tg3_setup_dma.
   1885 	 */
   1886 	tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
   1887 
   1888 	tp->grc_mode &= ~(GRC_MODE_HOST_SENDBDS |
   1889 			  GRC_MODE_4X_NIC_SEND_RINGS |
   1890 			  GRC_MODE_NO_TX_PHDR_CSUM |
   1891 			  GRC_MODE_NO_RX_PHDR_CSUM);
   1892 	tp->grc_mode |= GRC_MODE_HOST_SENDBDS;
   1893 	tp->grc_mode |= GRC_MODE_NO_TX_PHDR_CSUM;
   1894 	tp->grc_mode |= GRC_MODE_NO_RX_PHDR_CSUM;
   1895 
   1896 	tw32(GRC_MODE,
   1897 		tp->grc_mode |
   1898 		(GRC_MODE_IRQ_ON_MAC_ATTN | GRC_MODE_HOST_STACKUP));
   1899 
   1900 	/* Setup the timer prescalar register.  Clock is always 66Mhz. */
   1901 	tw32(GRC_MISC_CFG,
   1902 	     (65 << GRC_MISC_CFG_PRESCALAR_SHIFT));
   1903 
   1904 	/* Initialize MBUF/DESC pool. */
   1905 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787) {
   1906 		/* Do nothing. */
   1907 	} else if ((GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705) &&
   1908 		(tp->pci_chip_rev_id != CHIPREV_ID_5721)) {
   1909 		tw32(BUFMGR_MB_POOL_ADDR, NIC_SRAM_MBUF_POOL_BASE);
   1910 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704)
   1911 			tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE64);
   1912 		else
   1913 			tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE96);
   1914 		tw32(BUFMGR_DMA_DESC_POOL_ADDR, NIC_SRAM_DMA_DESC_POOL_BASE);
   1915 		tw32(BUFMGR_DMA_DESC_POOL_SIZE, NIC_SRAM_DMA_DESC_POOL_SIZE);
   1916 	}
   1917 	if (!(tp->tg3_flags & TG3_FLAG_JUMBO_ENABLE)) {
   1918 		tw32(BUFMGR_MB_RDMA_LOW_WATER,
   1919 		     tp->bufmgr_config.mbuf_read_dma_low_water);
   1920 		tw32(BUFMGR_MB_MACRX_LOW_WATER,
   1921 		     tp->bufmgr_config.mbuf_mac_rx_low_water);
   1922 		tw32(BUFMGR_MB_HIGH_WATER,
   1923 		     tp->bufmgr_config.mbuf_high_water);
   1924 	} else {
   1925 		tw32(BUFMGR_MB_RDMA_LOW_WATER,
   1926 		     tp->bufmgr_config.mbuf_read_dma_low_water_jumbo);
   1927 		tw32(BUFMGR_MB_MACRX_LOW_WATER,
   1928 		     tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo);
   1929 		tw32(BUFMGR_MB_HIGH_WATER,
   1930 		     tp->bufmgr_config.mbuf_high_water_jumbo);
   1931 	}
   1932 	tw32(BUFMGR_DMA_LOW_WATER,
   1933 	     tp->bufmgr_config.dma_low_water);
   1934 	tw32(BUFMGR_DMA_HIGH_WATER,
   1935 	     tp->bufmgr_config.dma_high_water);
   1936 
   1937 	tw32(BUFMGR_MODE, BUFMGR_MODE_ENABLE | BUFMGR_MODE_ATTN_ENABLE);
   1938 	for (i = 0; i < 2000; i++) {
   1939 		if (tr32(BUFMGR_MODE) & BUFMGR_MODE_ENABLE)
   1940 			break;
   1941 		udelay(10);
   1942 	}
   1943 	if (i >= 2000) {
   1944 		printf("tg3_setup_hw cannot enable BUFMGR\n");
   1945 		return -ENODEV;
   1946 	}
   1947 
   1948 	tw32(FTQ_RESET, 0xffffffff);
   1949 	tw32(FTQ_RESET, 0x00000000);
   1950 	for (i = 0; i < 2000; i++) {
   1951 		if (tr32(FTQ_RESET) == 0x00000000)
   1952 			break;
   1953 		udelay(10);
   1954 	}
   1955 	if (i >= 2000) {
   1956 		printf("tg3_setup_hw cannot reset FTQ\n");
   1957 		return -ENODEV;
   1958 	}
   1959 
   1960 	/* Initialize TG3_BDINFO's at:
   1961 	 *  RCVDBDI_STD_BD:	standard eth size rx ring
   1962 	 *  RCVDBDI_JUMBO_BD:	jumbo frame rx ring
   1963 	 *  RCVDBDI_MINI_BD:	small frame rx ring (??? does not work)
   1964 	 *
   1965 	 * like so:
   1966 	 *  TG3_BDINFO_HOST_ADDR:	high/low parts of DMA address of ring
   1967 	 *  TG3_BDINFO_MAXLEN_FLAGS:	(rx max buffer size << 16) |
   1968 	 *                              ring attribute flags
   1969 	 *  TG3_BDINFO_NIC_ADDR:	location of descriptors in nic SRAM
   1970 	 *
   1971 	 * Standard receive ring @ NIC_SRAM_RX_BUFFER_DESC, 512 entries.
   1972 	 * Jumbo receive ring @ NIC_SRAM_RX_JUMBO_BUFFER_DESC, 256 entries.
   1973 	 *
   1974 	 * ??? No space allocated for mini receive ring? :(
   1975 	 *
   1976 	 * The size of each ring is fixed in the firmware, but the location is
   1977 	 * configurable.
   1978 	 */
   1979 	{
   1980 		static const uint32_t table_all[] = {
   1981 			/* Setup replenish thresholds. */
   1982 			RCVBDI_STD_THRESH, TG3_DEF_RX_RING_PENDING / 8,
   1983 
   1984 			/* Etherboot lives below 4GB */
   1985 			RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH, 0,
   1986 			RCVDBDI_STD_BD + TG3_BDINFO_NIC_ADDR, NIC_SRAM_RX_BUFFER_DESC,
   1987 		};
   1988 		static const uint32_t table_not_5705[] = {
   1989 			/* Buffer maximum length */
   1990 			RCVDBDI_STD_BD + TG3_BDINFO_MAXLEN_FLAGS, RX_STD_MAX_SIZE << BDINFO_FLAGS_MAXLEN_SHIFT,
   1991 
   1992 			/* Disable the mini frame rx ring */
   1993 			RCVDBDI_MINI_BD + TG3_BDINFO_MAXLEN_FLAGS,	BDINFO_FLAGS_DISABLED,
   1994 
   1995 			/* Disable the jumbo frame rx ring */
   1996 			RCVBDI_JUMBO_THRESH, 0,
   1997 			RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS, BDINFO_FLAGS_DISABLED,
   1998 
   1999 
   2000 		};
   2001 		TG3_WRITE_SETTINGS(table_all);
   2002 		tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW,
   2003 			virt_to_bus(tp->rx_std));
   2004 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 ||
   2005 		    GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787) {
   2006 			tw32(RCVDBDI_STD_BD + TG3_BDINFO_MAXLEN_FLAGS,
   2007 				RX_STD_MAX_SIZE_5705 << BDINFO_FLAGS_MAXLEN_SHIFT);
   2008 		} else {
   2009 			TG3_WRITE_SETTINGS(table_not_5705);
   2010 		}
   2011 	}
   2012 
   2013 
   2014 	/* There is only one send ring on 5705 and 5787, no need to explicitly
   2015 	 * disable the others.
   2016 	 */
   2017 	if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705 &&
   2018 	    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5787) {
   2019 		/* Clear out send RCB ring in SRAM. */
   2020 		for (i = NIC_SRAM_SEND_RCB; i < NIC_SRAM_RCV_RET_RCB; i += TG3_BDINFO_SIZE)
   2021 			tg3_write_mem(i + TG3_BDINFO_MAXLEN_FLAGS, BDINFO_FLAGS_DISABLED);
   2022 	}
   2023 
   2024 	tp->tx_prod = 0;
   2025 	tw32_mailbox(MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW, 0);
   2026 	tw32_mailbox2(MAILBOX_SNDNIC_PROD_IDX_0 + TG3_64BIT_REG_LOW, 0);
   2027 
   2028 	tg3_set_bdinfo(tp,
   2029 		NIC_SRAM_SEND_RCB,
   2030 		virt_to_bus(tp->tx_ring),
   2031 		(TG3_TX_RING_SIZE << BDINFO_FLAGS_MAXLEN_SHIFT),
   2032 		NIC_SRAM_TX_BUFFER_DESC);
   2033 
   2034 	/* There is only one receive return ring on 5705 and 5787, no need to
   2035 	 * explicitly disable the others.
   2036 	 */
   2037 	if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705 &&
   2038 	    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5787) {
   2039 		for (i = NIC_SRAM_RCV_RET_RCB; i < NIC_SRAM_STATS_BLK; i += TG3_BDINFO_SIZE) {
   2040 			tg3_write_mem(i + TG3_BDINFO_MAXLEN_FLAGS,
   2041 				BDINFO_FLAGS_DISABLED);
   2042 		}
   2043 	}
   2044 
   2045 	tp->rx_rcb_ptr = 0;
   2046 	tw32_mailbox2(MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW, 0);
   2047 
   2048 	tg3_set_bdinfo(tp,
   2049 		NIC_SRAM_RCV_RET_RCB,
   2050 		virt_to_bus(tp->rx_rcb),
   2051 		(TG3_RX_RCB_RING_SIZE << BDINFO_FLAGS_MAXLEN_SHIFT),
   2052 		0);
   2053 
   2054 	tp->rx_std_ptr = TG3_DEF_RX_RING_PENDING;
   2055 	tw32_mailbox2(MAILBOX_RCV_STD_PROD_IDX + TG3_64BIT_REG_LOW,
   2056 		     tp->rx_std_ptr);
   2057 
   2058 	tw32_mailbox2(MAILBOX_RCV_JUMBO_PROD_IDX + TG3_64BIT_REG_LOW, 0);
   2059 
   2060 	/* Initialize MAC address and backoff seed. */
   2061 	__tg3_set_mac_addr(tp);
   2062 
   2063 	/* Calculate RDMAC_MODE setting early, we need it to determine
   2064 	 * the RCVLPC_STATE_ENABLE mask.
   2065 	 */
   2066 	rdmac_mode = (RDMAC_MODE_ENABLE | RDMAC_MODE_TGTABORT_ENAB |
   2067 		RDMAC_MODE_MSTABORT_ENAB | RDMAC_MODE_PARITYERR_ENAB |
   2068 		RDMAC_MODE_ADDROFLOW_ENAB | RDMAC_MODE_FIFOOFLOW_ENAB |
   2069 		RDMAC_MODE_FIFOURUN_ENAB | RDMAC_MODE_FIFOOREAD_ENAB |
   2070 		RDMAC_MODE_LNGREAD_ENAB);
   2071 	if (tp->tg3_flags & TG3_FLAG_SPLIT_MODE)
   2072 		rdmac_mode |= RDMAC_MODE_SPLIT_ENABLE;
   2073 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) {
   2074 		if (tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) {
   2075 			if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) &&
   2076 				!(tp->tg3_flags2 & TG3_FLG2_IS_5788)) {
   2077 				rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST;
   2078 			}
   2079 		}
   2080 	}
   2081 
   2082 	/* Setup host coalescing engine. */
   2083 	tw32(HOSTCC_MODE, 0);
   2084 	for (i = 0; i < 2000; i++) {
   2085 		if (!(tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE))
   2086 			break;
   2087 		udelay(10);
   2088 	}
   2089 
   2090 	tp->mac_mode = MAC_MODE_TXSTAT_ENABLE | MAC_MODE_RXSTAT_ENABLE |
   2091 		MAC_MODE_TDE_ENABLE | MAC_MODE_RDE_ENABLE | MAC_MODE_FHDE_ENABLE;
   2092 	tw32_carefully(MAC_MODE, tp->mac_mode | MAC_MODE_RXSTAT_CLEAR | MAC_MODE_TXSTAT_CLEAR);
   2093 
   2094 	tp->grc_local_ctrl = GRC_LCLCTRL_INT_ON_ATTN | GRC_LCLCTRL_AUTO_SEEPROM;
   2095 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700)
   2096 		tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 |
   2097 				       GRC_LCLCTRL_GPIO_OUTPUT1);
   2098 	tw32_carefully(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
   2099 
   2100 	tw32_mailbox(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0);
   2101 	tr32(MAILBOX_INTERRUPT_0);
   2102 
   2103 	if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705) {
   2104 		tw32_carefully(DMAC_MODE, DMAC_MODE_ENABLE);
   2105 	}
   2106 
   2107 	val = (	WDMAC_MODE_ENABLE | WDMAC_MODE_TGTABORT_ENAB |
   2108 		WDMAC_MODE_MSTABORT_ENAB | WDMAC_MODE_PARITYERR_ENAB |
   2109 		WDMAC_MODE_ADDROFLOW_ENAB | WDMAC_MODE_FIFOOFLOW_ENAB |
   2110 		WDMAC_MODE_FIFOURUN_ENAB | WDMAC_MODE_FIFOOREAD_ENAB |
   2111 		WDMAC_MODE_LNGREAD_ENAB);
   2112 	if ((GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705) &&
   2113 		((tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) != 0) &&
   2114 		!(tp->tg3_flags2 & TG3_FLG2_IS_5788)) {
   2115 		val |= WDMAC_MODE_RX_ACCEL;
   2116 	}
   2117 
   2118 	/* Host coalescing bug fix */
   2119 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787)
   2120 		val |= (1 << 29);
   2121 
   2122 	tw32_carefully(WDMAC_MODE, val);
   2123 
   2124 	if ((tp->tg3_flags & TG3_FLAG_PCIX_MODE) != 0) {
   2125 		val = tr32(TG3PCI_X_CAPS);
   2126 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703) {
   2127 			val &= PCIX_CAPS_BURST_MASK;
   2128 			val |= (PCIX_CAPS_MAX_BURST_CPIOB << PCIX_CAPS_BURST_SHIFT);
   2129 		} else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) {
   2130 			val &= ~(PCIX_CAPS_SPLIT_MASK | PCIX_CAPS_BURST_MASK);
   2131 			val |= (PCIX_CAPS_MAX_BURST_CPIOB << PCIX_CAPS_BURST_SHIFT);
   2132 			if (tp->tg3_flags & TG3_FLAG_SPLIT_MODE)
   2133 				val |= (tp->split_mode_max_reqs <<
   2134 					PCIX_CAPS_SPLIT_SHIFT);
   2135 		}
   2136 		tw32(TG3PCI_X_CAPS, val);
   2137 	}
   2138 
   2139 	tw32_carefully(RDMAC_MODE, rdmac_mode);
   2140 	{
   2141 		static const uint32_t table_all[] = {
   2142 			/* MTU + ethernet header + FCS + optional VLAN tag */
   2143 			MAC_RX_MTU_SIZE, ETH_MAX_MTU + ETH_HLEN + 8,
   2144 
   2145 			/* The slot time is changed by tg3_setup_phy if we
   2146 			 * run at gigabit with half duplex.
   2147 			 */
   2148 			MAC_TX_LENGTHS,
   2149 			(2 << TX_LENGTHS_IPG_CRS_SHIFT) |
   2150 			(6 << TX_LENGTHS_IPG_SHIFT) |
   2151 			(32 << TX_LENGTHS_SLOT_TIME_SHIFT),
   2152 
   2153 			/* Receive rules. */
   2154 			MAC_RCV_RULE_CFG, RCV_RULE_CFG_DEFAULT_CLASS,
   2155 			RCVLPC_CONFIG, 0x0181,
   2156 
   2157 			/* Receive/send statistics. */
   2158 			RCVLPC_STATS_ENABLE, 0xffffff,
   2159 			RCVLPC_STATSCTRL, RCVLPC_STATSCTRL_ENABLE,
   2160 			SNDDATAI_STATSENAB, 0xffffff,
   2161 			SNDDATAI_STATSCTRL, (SNDDATAI_SCTRL_ENABLE |SNDDATAI_SCTRL_FASTUPD),
   2162 
   2163 			/* Host coalescing engine */
   2164 			HOSTCC_RXCOL_TICKS, 0,
   2165 			HOSTCC_TXCOL_TICKS, LOW_TXCOL_TICKS,
   2166 			HOSTCC_RXMAX_FRAMES, 1,
   2167 			HOSTCC_TXMAX_FRAMES, LOW_RXMAX_FRAMES,
   2168 			HOSTCC_RXCOAL_MAXF_INT, 1,
   2169 			HOSTCC_TXCOAL_MAXF_INT, 0,
   2170 
   2171 			/* Status/statistics block address. */
   2172 			/* Etherboot lives below 4GB, so HIGH == 0 */
   2173 			HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH, 0,
   2174 
   2175 			/* No need to enable 32byte coalesce mode. */
   2176 			HOSTCC_MODE, HOSTCC_MODE_ENABLE | 0,
   2177 
   2178 			RCVCC_MODE, RCVCC_MODE_ENABLE | RCVCC_MODE_ATTN_ENABLE,
   2179 			RCVLPC_MODE, RCVLPC_MODE_ENABLE,
   2180 
   2181 			RCVDCC_MODE, RCVDCC_MODE_ENABLE | RCVDCC_MODE_ATTN_ENABLE,
   2182 
   2183 			SNDDATAC_MODE, SNDDATAC_MODE_ENABLE,
   2184 			SNDBDC_MODE, SNDBDC_MODE_ENABLE | SNDBDC_MODE_ATTN_ENABLE,
   2185 			RCVBDI_MODE, RCVBDI_MODE_ENABLE | RCVBDI_MODE_RCB_ATTN_ENAB,
   2186 			RCVDBDI_MODE, RCVDBDI_MODE_ENABLE | RCVDBDI_MODE_INV_RING_SZ,
   2187 			SNDDATAI_MODE, SNDDATAI_MODE_ENABLE,
   2188 			SNDBDI_MODE, SNDBDI_MODE_ENABLE | SNDBDI_MODE_ATTN_ENABLE,
   2189 			SNDBDS_MODE, SNDBDS_MODE_ENABLE | SNDBDS_MODE_ATTN_ENABLE,
   2190 
   2191 			/* Accept all multicast frames. */
   2192 			MAC_HASH_REG_0, 0xffffffff,
   2193 			MAC_HASH_REG_1, 0xffffffff,
   2194 			MAC_HASH_REG_2, 0xffffffff,
   2195 			MAC_HASH_REG_3, 0xffffffff,
   2196 		};
   2197 		static const uint32_t table_not_5705[] = {
   2198 			/* Host coalescing engine */
   2199 			HOSTCC_RXCOAL_TICK_INT, 0,
   2200 			HOSTCC_TXCOAL_TICK_INT, 0,
   2201 
   2202 			/* Status/statistics block address. */
   2203 			/* Etherboot lives below 4GB, so HIGH == 0 */
   2204 			HOSTCC_STAT_COAL_TICKS, DEFAULT_STAT_COAL_TICKS,
   2205 			HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH, 0,
   2206 			HOSTCC_STATS_BLK_NIC_ADDR, NIC_SRAM_STATS_BLK,
   2207 			HOSTCC_STATUS_BLK_NIC_ADDR, NIC_SRAM_STATUS_BLK,
   2208 
   2209 			RCVLSC_MODE, RCVLSC_MODE_ENABLE | RCVLSC_MODE_ATTN_ENABLE,
   2210 
   2211 			MBFREE_MODE, MBFREE_MODE_ENABLE,
   2212 		};
   2213 		TG3_WRITE_SETTINGS(table_all);
   2214 		tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW,
   2215 			virt_to_bus(tp->hw_stats));
   2216 		tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW,
   2217 			virt_to_bus(tp->hw_status));
   2218 		if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705 &&
   2219 		    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5787) {
   2220 			TG3_WRITE_SETTINGS(table_not_5705);
   2221 		}
   2222 	}
   2223 
   2224 	tp->tx_mode = TX_MODE_ENABLE;
   2225 	tw32_carefully(MAC_TX_MODE, tp->tx_mode);
   2226 
   2227 	tp->rx_mode = RX_MODE_ENABLE;
   2228 	tw32_carefully(MAC_RX_MODE, tp->rx_mode);
   2229 
   2230 	tp->mi_mode = MAC_MI_MODE_BASE;
   2231 	tw32_carefully(MAC_MI_MODE, tp->mi_mode);
   2232 
   2233 	tw32(MAC_LED_CTRL, 0);
   2234 	tw32(MAC_MI_STAT, MAC_MI_STAT_LNKSTAT_ATTN_ENAB);
   2235 	if (tp->phy_id == PHY_ID_SERDES) {
   2236 		tw32_carefully(MAC_RX_MODE, RX_MODE_RESET);
   2237 	}
   2238 	tp->rx_mode |= RX_MODE_KEEP_VLAN_TAG; /* drop tagged vlan packets */
   2239 	tw32_carefully(MAC_RX_MODE, tp->rx_mode);
   2240 
   2241 	if (tp->pci_chip_rev_id == CHIPREV_ID_5703_A1)
   2242 		tw32(MAC_SERDES_CFG, 0x616000);
   2243 
   2244 	/* Prevent chip from dropping frames when flow control
   2245 	 * is enabled.
   2246 	 */
   2247 	tw32(MAC_LOW_WMARK_MAX_RX_FRAME, 2);
   2248 	tr32(MAC_LOW_WMARK_MAX_RX_FRAME);
   2249 
   2250 	err = tg3_setup_phy(tp);
   2251 
   2252 	/* Ignore CRC stats */
   2253 
   2254 	/* Initialize receive rules. */
   2255 	tw32(MAC_RCV_RULE_0,  0xc2000000 & RCV_RULE_DISABLE_MASK);
   2256 	tw32(MAC_RCV_VALUE_0, 0xffffffff & RCV_RULE_DISABLE_MASK);
   2257 	tw32(MAC_RCV_RULE_1,  0x86000004 & RCV_RULE_DISABLE_MASK);
   2258 	tw32(MAC_RCV_VALUE_1, 0xffffffff & RCV_RULE_DISABLE_MASK);
   2259 
   2260 	if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705)
   2261 	    || (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750))
   2262 		limit = 8;
   2263 	else
   2264 		limit = 16;
   2265 	if (tp->tg3_flags & TG3_FLAG_ENABLE_ASF)
   2266 		limit -= 4;
   2267 	switch (limit) {
   2268 	case 16:	tw32(MAC_RCV_RULE_15,  0); tw32(MAC_RCV_VALUE_15,  0);
   2269 	case 15:	tw32(MAC_RCV_RULE_14,  0); tw32(MAC_RCV_VALUE_14,  0);
   2270 	case 14:	tw32(MAC_RCV_RULE_13,  0); tw32(MAC_RCV_VALUE_13,  0);
   2271 	case 13:	tw32(MAC_RCV_RULE_12,  0); tw32(MAC_RCV_VALUE_12,  0);
   2272 	case 12:	tw32(MAC_RCV_RULE_11,  0); tw32(MAC_RCV_VALUE_11,  0);
   2273 	case 11:	tw32(MAC_RCV_RULE_10,  0); tw32(MAC_RCV_VALUE_10,  0);
   2274 	case 10:	tw32(MAC_RCV_RULE_9,  0);  tw32(MAC_RCV_VALUE_9,  0);
   2275 	case 9:		tw32(MAC_RCV_RULE_8,  0);  tw32(MAC_RCV_VALUE_8,  0);
   2276 	case 8:		tw32(MAC_RCV_RULE_7,  0);  tw32(MAC_RCV_VALUE_7,  0);
   2277 	case 7:		tw32(MAC_RCV_RULE_6,  0);  tw32(MAC_RCV_VALUE_6,  0);
   2278 	case 6:		tw32(MAC_RCV_RULE_5,  0);  tw32(MAC_RCV_VALUE_5,  0);
   2279 	case 5:		tw32(MAC_RCV_RULE_4,  0);  tw32(MAC_RCV_VALUE_4,  0);
   2280 	case 4:		/* tw32(MAC_RCV_RULE_3,  0); tw32(MAC_RCV_VALUE_3,  0); */
   2281 	case 3:		/* tw32(MAC_RCV_RULE_2,  0); tw32(MAC_RCV_VALUE_2,  0); */
   2282 	case 2:
   2283 	case 1:
   2284 	default:
   2285 		break;
   2286 	};
   2287 
   2288 	return err;
   2289 }
   2290 
   2291 
   2292 
   2293 /* Chips other than 5700/5701 use the NVRAM for fetching info. */
   2294 static void tg3_nvram_init(struct tg3 *tp)
   2295 {
   2296 	tw32(GRC_EEPROM_ADDR,
   2297 	     (EEPROM_ADDR_FSM_RESET |
   2298 	      (EEPROM_DEFAULT_CLOCK_PERIOD <<
   2299 	       EEPROM_ADDR_CLKPERD_SHIFT)));
   2300 
   2301 	mdelay(1);
   2302 
   2303 	/* Enable seeprom accesses. */
   2304 	tw32_carefully(GRC_LOCAL_CTRL,
   2305 		tr32(GRC_LOCAL_CTRL) | GRC_LCLCTRL_AUTO_SEEPROM);
   2306 
   2307 	if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 &&
   2308 	    GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701) {
   2309 		uint32_t nvcfg1 = tr32(NVRAM_CFG1);
   2310 
   2311 		tp->tg3_flags |= TG3_FLAG_NVRAM;
   2312 		if (nvcfg1 & NVRAM_CFG1_FLASHIF_ENAB) {
   2313 			if (nvcfg1 & NVRAM_CFG1_BUFFERED_MODE)
   2314 				tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
   2315 		} else {
   2316 			nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
   2317 			tw32(NVRAM_CFG1, nvcfg1);
   2318 		}
   2319 
   2320 	} else {
   2321 		tp->tg3_flags &= ~(TG3_FLAG_NVRAM | TG3_FLAG_NVRAM_BUFFERED);
   2322 	}
   2323 }
   2324 
   2325 
   2326 static int tg3_nvram_read_using_eeprom(
   2327 	struct tg3 *tp __unused, uint32_t offset, uint32_t *val)
   2328 {
   2329 	uint32_t tmp;
   2330 	int i;
   2331 
   2332 	if (offset > EEPROM_ADDR_ADDR_MASK ||
   2333 		(offset % 4) != 0) {
   2334 		return -EINVAL;
   2335 	}
   2336 
   2337 	tmp = tr32(GRC_EEPROM_ADDR) & ~(EEPROM_ADDR_ADDR_MASK |
   2338 					EEPROM_ADDR_DEVID_MASK |
   2339 					EEPROM_ADDR_READ);
   2340 	tw32(GRC_EEPROM_ADDR,
   2341 	     tmp |
   2342 	     (0 << EEPROM_ADDR_DEVID_SHIFT) |
   2343 	     ((offset << EEPROM_ADDR_ADDR_SHIFT) &
   2344 	      EEPROM_ADDR_ADDR_MASK) |
   2345 	     EEPROM_ADDR_READ | EEPROM_ADDR_START);
   2346 
   2347 	for (i = 0; i < 10000; i++) {
   2348 		tmp = tr32(GRC_EEPROM_ADDR);
   2349 
   2350 		if (tmp & EEPROM_ADDR_COMPLETE)
   2351 			break;
   2352 		udelay(100);
   2353 	}
   2354 	if (!(tmp & EEPROM_ADDR_COMPLETE)) {
   2355 		return -EBUSY;
   2356 	}
   2357 
   2358 	*val = tr32(GRC_EEPROM_DATA);
   2359 	return 0;
   2360 }
   2361 
   2362 static int tg3_nvram_read(struct tg3 *tp, uint32_t offset, uint32_t *val)
   2363 {
   2364 	int i, saw_done_clear;
   2365 
   2366 	if (!(tp->tg3_flags & TG3_FLAG_NVRAM))
   2367 		return tg3_nvram_read_using_eeprom(tp, offset, val);
   2368 
   2369 	if (tp->tg3_flags & TG3_FLAG_NVRAM_BUFFERED)
   2370 		offset = ((offset / NVRAM_BUFFERED_PAGE_SIZE) <<
   2371 			  NVRAM_BUFFERED_PAGE_POS) +
   2372 			(offset % NVRAM_BUFFERED_PAGE_SIZE);
   2373 
   2374 	if (offset > NVRAM_ADDR_MSK)
   2375 		return -EINVAL;
   2376 
   2377 	tw32(NVRAM_SWARB, SWARB_REQ_SET1);
   2378 	for (i = 0; i < 1000; i++) {
   2379 		if (tr32(NVRAM_SWARB) & SWARB_GNT1)
   2380 			break;
   2381 		udelay(20);
   2382 	}
   2383 
   2384 	tw32(NVRAM_ADDR, offset);
   2385 	tw32(NVRAM_CMD,
   2386 	     NVRAM_CMD_RD | NVRAM_CMD_GO |
   2387 	     NVRAM_CMD_FIRST | NVRAM_CMD_LAST | NVRAM_CMD_DONE);
   2388 
   2389 	/* Wait for done bit to clear then set again. */
   2390 	saw_done_clear = 0;
   2391 	for (i = 0; i < 1000; i++) {
   2392 		udelay(10);
   2393 		if (!saw_done_clear &&
   2394 		    !(tr32(NVRAM_CMD) & NVRAM_CMD_DONE))
   2395 			saw_done_clear = 1;
   2396 		else if (saw_done_clear &&
   2397 			 (tr32(NVRAM_CMD) & NVRAM_CMD_DONE))
   2398 			break;
   2399 	}
   2400 	if (i >= 1000) {
   2401 		tw32(NVRAM_SWARB, SWARB_REQ_CLR1);
   2402 		return -EBUSY;
   2403 	}
   2404 
   2405 	*val = bswap_32(tr32(NVRAM_RDDATA));
   2406 	tw32(NVRAM_SWARB, 0x20);
   2407 
   2408 	return 0;
   2409 }
   2410 
   2411 struct subsys_tbl_ent {
   2412 	uint16_t subsys_vendor, subsys_devid;
   2413 	uint32_t phy_id;
   2414 };
   2415 
   2416 static struct subsys_tbl_ent subsys_id_to_phy_id[] = {
   2417 	/* Broadcom boards. */
   2418 	{ 0x14e4, 0x1644, PHY_ID_BCM5401 }, /* BCM95700A6 */
   2419 	{ 0x14e4, 0x0001, PHY_ID_BCM5701 }, /* BCM95701A5 */
   2420 	{ 0x14e4, 0x0002, PHY_ID_BCM8002 }, /* BCM95700T6 */
   2421 	{ 0x14e4, 0x0003, PHY_ID_SERDES  }, /* BCM95700A9 */
   2422 	{ 0x14e4, 0x0005, PHY_ID_BCM5701 }, /* BCM95701T1 */
   2423 	{ 0x14e4, 0x0006, PHY_ID_BCM5701 }, /* BCM95701T8 */
   2424 	{ 0x14e4, 0x0007, PHY_ID_SERDES  }, /* BCM95701A7 */
   2425 	{ 0x14e4, 0x0008, PHY_ID_BCM5701 }, /* BCM95701A10 */
   2426 	{ 0x14e4, 0x8008, PHY_ID_BCM5701 }, /* BCM95701A12 */
   2427 	{ 0x14e4, 0x0009, PHY_ID_BCM5701 }, /* BCM95703Ax1 */
   2428 	{ 0x14e4, 0x8009, PHY_ID_BCM5701 }, /* BCM95703Ax2 */
   2429 
   2430 	/* 3com boards. */
   2431 	{ PCI_VENDOR_ID_3COM, 0x1000, PHY_ID_BCM5401 }, /* 3C996T */
   2432 	{ PCI_VENDOR_ID_3COM, 0x1006, PHY_ID_BCM5701 }, /* 3C996BT */
   2433 	/* { PCI_VENDOR_ID_3COM, 0x1002, PHY_ID_XXX },     3C996CT */
   2434 	/* { PCI_VENDOR_ID_3COM, 0x1003, PHY_ID_XXX },     3C997T */
   2435 	{ PCI_VENDOR_ID_3COM, 0x1004, PHY_ID_SERDES  }, /* 3C996SX */
   2436 	/* { PCI_VENDOR_ID_3COM, 0x1005, PHY_ID_XXX },     3C997SZ */
   2437 	{ PCI_VENDOR_ID_3COM, 0x1007, PHY_ID_BCM5701 }, /* 3C1000T */
   2438 	{ PCI_VENDOR_ID_3COM, 0x1008, PHY_ID_BCM5701 }, /* 3C940BR01 */
   2439 
   2440 	/* DELL boards. */
   2441 	{ PCI_VENDOR_ID_DELL, 0x00d1, PHY_ID_BCM5401 }, /* VIPER */
   2442 	{ PCI_VENDOR_ID_DELL, 0x0106, PHY_ID_BCM5401 }, /* JAGUAR */
   2443 	{ PCI_VENDOR_ID_DELL, 0x0109, PHY_ID_BCM5411 }, /* MERLOT */
   2444 	{ PCI_VENDOR_ID_DELL, 0x010a, PHY_ID_BCM5411 }, /* SLIM_MERLOT */
   2445 	{ PCI_VENDOR_ID_DELL, 0x0179, PHY_ID_BCM5751 }, /* EtherXpress */
   2446 
   2447 	/* Fujitsu Siemens Computer */
   2448 	{ PCI_VENDOR_ID_FSC, 0x105d, PHY_ID_BCM5751 }, /* Futro C200 */
   2449 
   2450 	/* Compaq boards. */
   2451 	{ PCI_VENDOR_ID_COMPAQ, 0x007c, PHY_ID_BCM5701 }, /* BANSHEE */
   2452 	{ PCI_VENDOR_ID_COMPAQ, 0x009a, PHY_ID_BCM5701 }, /* BANSHEE_2 */
   2453 	{ PCI_VENDOR_ID_COMPAQ, 0x007d, PHY_ID_SERDES  }, /* CHANGELING */
   2454 	{ PCI_VENDOR_ID_COMPAQ, 0x0085, PHY_ID_BCM5701 }, /* NC7780 */
   2455 	{ PCI_VENDOR_ID_COMPAQ, 0x0099, PHY_ID_BCM5701 }  /* NC7780_2 */
   2456 };
   2457 
   2458 static int tg3_phy_probe(struct tg3 *tp)
   2459 {
   2460 	uint32_t eeprom_phy_id, hw_phy_id_1, hw_phy_id_2;
   2461 	uint32_t hw_phy_id, hw_phy_id_masked;
   2462 	enum phy_led_mode eeprom_led_mode;
   2463 	uint32_t val;
   2464 	unsigned i;
   2465 	int eeprom_signature_found, err;
   2466 
   2467 	tp->phy_id = PHY_ID_INVALID;
   2468 
   2469 	for (i = 0; i < sizeof(subsys_id_to_phy_id)/sizeof(subsys_id_to_phy_id[0]); i++) {
   2470 		if ((subsys_id_to_phy_id[i].subsys_vendor == tp->subsystem_vendor) &&
   2471 			(subsys_id_to_phy_id[i].subsys_devid == tp->subsystem_device)) {
   2472 			tp->phy_id = subsys_id_to_phy_id[i].phy_id;
   2473 			break;
   2474 		}
   2475 	}
   2476 
   2477 	eeprom_phy_id = PHY_ID_INVALID;
   2478 	eeprom_led_mode = led_mode_auto;
   2479 	eeprom_signature_found = 0;
   2480 	tg3_read_mem(NIC_SRAM_DATA_SIG, &val);
   2481 	if (val == NIC_SRAM_DATA_SIG_MAGIC) {
   2482 		uint32_t nic_cfg;
   2483 
   2484 		tg3_read_mem(NIC_SRAM_DATA_CFG, &nic_cfg);
   2485 		tp->nic_sram_data_cfg = nic_cfg;
   2486 
   2487 		eeprom_signature_found = 1;
   2488 
   2489 		if ((nic_cfg & NIC_SRAM_DATA_CFG_PHY_TYPE_MASK) ==
   2490 		    NIC_SRAM_DATA_CFG_PHY_TYPE_FIBER) {
   2491 			eeprom_phy_id = PHY_ID_SERDES;
   2492 		} else {
   2493 			uint32_t nic_phy_id;
   2494 
   2495 			tg3_read_mem(NIC_SRAM_DATA_PHY_ID, &nic_phy_id);
   2496 			if (nic_phy_id != 0) {
   2497 				uint32_t id1 = nic_phy_id & NIC_SRAM_DATA_PHY_ID1_MASK;
   2498 				uint32_t id2 = nic_phy_id & NIC_SRAM_DATA_PHY_ID2_MASK;
   2499 
   2500 				eeprom_phy_id  = (id1 >> 16) << 10;
   2501 				eeprom_phy_id |= (id2 & 0xfc00) << 16;
   2502 				eeprom_phy_id |= (id2 & 0x03ff) <<  0;
   2503 			}
   2504 		}
   2505 
   2506 		switch (nic_cfg & NIC_SRAM_DATA_CFG_LED_MODE_MASK) {
   2507 		case NIC_SRAM_DATA_CFG_LED_TRIPLE_SPD:
   2508 			eeprom_led_mode = led_mode_three_link;
   2509 			break;
   2510 
   2511 		case NIC_SRAM_DATA_CFG_LED_LINK_SPD:
   2512 			eeprom_led_mode = led_mode_link10;
   2513 			break;
   2514 
   2515 		default:
   2516 			eeprom_led_mode = led_mode_auto;
   2517 			break;
   2518 		};
   2519 		if (((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703) ||
   2520 			(GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) ||
   2521 			(GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705)) &&
   2522 			(nic_cfg & NIC_SRAM_DATA_CFG_EEPROM_WP)) {
   2523 			tp->tg3_flags |= TG3_FLAG_EEPROM_WRITE_PROT;
   2524 		}
   2525 
   2526 		if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE)
   2527 			tp->tg3_flags |= TG3_FLAG_ENABLE_ASF;
   2528 		if (nic_cfg & NIC_SRAM_DATA_CFG_FIBER_WOL)
   2529 			tp->tg3_flags |= TG3_FLAG_SERDES_WOL_CAP;
   2530 	}
   2531 
   2532 	/* Now read the physical PHY_ID from the chip and verify
   2533 	 * that it is sane.  If it doesn't look good, we fall back
   2534 	 * to either the hard-coded table based PHY_ID and failing
   2535 	 * that the value found in the eeprom area.
   2536 	 */
   2537 	err  = tg3_readphy(tp, MII_PHYSID1, &hw_phy_id_1);
   2538 	err |= tg3_readphy(tp, MII_PHYSID2, &hw_phy_id_2);
   2539 
   2540 	hw_phy_id  = (hw_phy_id_1 & 0xffff) << 10;
   2541 	hw_phy_id |= (hw_phy_id_2 & 0xfc00) << 16;
   2542 	hw_phy_id |= (hw_phy_id_2 & 0x03ff) <<  0;
   2543 
   2544 	hw_phy_id_masked = hw_phy_id & PHY_ID_MASK;
   2545 
   2546 	if (!err && KNOWN_PHY_ID(hw_phy_id_masked)) {
   2547 		tp->phy_id = hw_phy_id;
   2548 	} else {
   2549 		/* phy_id currently holds the value found in the
   2550 		 * subsys_id_to_phy_id[] table or PHY_ID_INVALID
   2551 		 * if a match was not found there.
   2552 		 */
   2553 		if (tp->phy_id == PHY_ID_INVALID) {
   2554 			if (!eeprom_signature_found ||
   2555 			    !KNOWN_PHY_ID(eeprom_phy_id & PHY_ID_MASK))
   2556 				return -ENODEV;
   2557 			tp->phy_id = eeprom_phy_id;
   2558 		}
   2559 	}
   2560 
   2561 	err = tg3_phy_reset(tp);
   2562 	if (err)
   2563 		return err;
   2564 
   2565 	if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 ||
   2566 	    tp->pci_chip_rev_id == CHIPREV_ID_5701_B0) {
   2567 		uint32_t mii_tg3_ctrl;
   2568 
   2569 		/* These chips, when reset, only advertise 10Mb
   2570 		 * capabilities.  Fix that.
   2571 		 */
   2572 		err  = tg3_writephy(tp, MII_ADVERTISE,
   2573 				    (ADVERTISE_CSMA |
   2574 				     ADVERTISE_PAUSE_CAP |
   2575 				     ADVERTISE_10HALF |
   2576 				     ADVERTISE_10FULL |
   2577 				     ADVERTISE_100HALF |
   2578 				     ADVERTISE_100FULL));
   2579 		mii_tg3_ctrl = (MII_TG3_CTRL_ADV_1000_HALF |
   2580 				MII_TG3_CTRL_ADV_1000_FULL |
   2581 				MII_TG3_CTRL_AS_MASTER |
   2582 				MII_TG3_CTRL_ENABLE_AS_MASTER);
   2583 		if (tp->tg3_flags & TG3_FLAG_10_100_ONLY)
   2584 			mii_tg3_ctrl = 0;
   2585 
   2586 		err |= tg3_writephy(tp, MII_TG3_CTRL, mii_tg3_ctrl);
   2587 		err |= tg3_writephy(tp, MII_BMCR,
   2588 				    (BMCR_ANRESTART | BMCR_ANENABLE));
   2589 	}
   2590 
   2591 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703) {
   2592 		tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x0c00);
   2593 		tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x201f);
   2594 		tg3_writedsp(tp, MII_TG3_DSP_RW_PORT, 0x2aaa);
   2595 	}
   2596 
   2597 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) {
   2598 		tg3_writephy(tp, 0x1c, 0x8d68);
   2599 		tg3_writephy(tp, 0x1c, 0x8d68);
   2600 	}
   2601 
   2602 	/* Enable Ethernet@WireSpeed */
   2603 	tg3_phy_set_wirespeed(tp);
   2604 
   2605 	if (!err && ((tp->phy_id & PHY_ID_MASK) == PHY_ID_BCM5401)) {
   2606 		err = tg3_init_5401phy_dsp(tp);
   2607 	}
   2608 
   2609 	/* Determine the PHY led mode.
   2610 	 * Be careful if this gets set wrong it can result in an inability to
   2611 	 * establish a link.
   2612 	 */
   2613 	if (tp->phy_id == PHY_ID_SERDES) {
   2614 		tp->led_mode = led_mode_three_link;
   2615 	}
   2616 	else if (tp->subsystem_vendor == PCI_VENDOR_ID_DELL) {
   2617 		tp->led_mode = led_mode_link10;
   2618 	} else {
   2619 		tp->led_mode = led_mode_three_link;
   2620 		if (eeprom_signature_found &&
   2621 		    eeprom_led_mode != led_mode_auto)
   2622 			tp->led_mode = eeprom_led_mode;
   2623 	}
   2624 
   2625 	if (tp->phy_id == PHY_ID_SERDES)
   2626 		tp->link_config.advertising =
   2627 			(ADVERTISED_1000baseT_Half |
   2628 			 ADVERTISED_1000baseT_Full |
   2629 			 ADVERTISED_Autoneg |
   2630 			 ADVERTISED_FIBRE);
   2631 	if (tp->tg3_flags & TG3_FLAG_10_100_ONLY)
   2632 		tp->link_config.advertising &=
   2633 			~(ADVERTISED_1000baseT_Half |
   2634 			  ADVERTISED_1000baseT_Full);
   2635 
   2636 	return err;
   2637 }
   2638 
   2639 #if SUPPORT_PARTNO_STR
   2640 static void tg3_read_partno(struct tg3 *tp)
   2641 {
   2642 	unsigned char vpd_data[256];
   2643 	int i;
   2644 
   2645 	for (i = 0; i < 256; i += 4) {
   2646 		uint32_t tmp;
   2647 
   2648 		if (tg3_nvram_read(tp, 0x100 + i, &tmp))
   2649 			goto out_not_found;
   2650 
   2651 		vpd_data[i + 0] = ((tmp >>  0) & 0xff);
   2652 		vpd_data[i + 1] = ((tmp >>  8) & 0xff);
   2653 		vpd_data[i + 2] = ((tmp >> 16) & 0xff);
   2654 		vpd_data[i + 3] = ((tmp >> 24) & 0xff);
   2655 	}
   2656 
   2657 	/* Now parse and find the part number. */
   2658 	for (i = 0; i < 256; ) {
   2659 		unsigned char val = vpd_data[i];
   2660 		int block_end;
   2661 
   2662 		if (val == 0x82 || val == 0x91) {
   2663 			i = (i + 3 +
   2664 			     (vpd_data[i + 1] +
   2665 			      (vpd_data[i + 2] << 8)));
   2666 			continue;
   2667 		}
   2668 
   2669 		if (val != 0x90)
   2670 			goto out_not_found;
   2671 
   2672 		block_end = (i + 3 +
   2673 			     (vpd_data[i + 1] +
   2674 			      (vpd_data[i + 2] << 8)));
   2675 		i += 3;
   2676 		while (i < block_end) {
   2677 			if (vpd_data[i + 0] == 'P' &&
   2678 			    vpd_data[i + 1] == 'N') {
   2679 				int partno_len = vpd_data[i + 2];
   2680 
   2681 				if (partno_len > 24)
   2682 					goto out_not_found;
   2683 
   2684 				memcpy(tp->board_part_number,
   2685 				       &vpd_data[i + 3],
   2686 				       partno_len);
   2687 
   2688 				/* Success. */
   2689 				return;
   2690 			}
   2691 		}
   2692 
   2693 		/* Part number not found. */
   2694 		goto out_not_found;
   2695 	}
   2696 
   2697 out_not_found:
   2698 	memcpy(tp->board_part_number, "none", sizeof("none"));
   2699 }
   2700 #else
   2701 #define tg3_read_partno(TP) ((TP)->board_part_number[0] = '\0')
   2702 #endif
   2703 
   2704 static int tg3_get_invariants(struct tg3 *tp)
   2705 {
   2706 	uint32_t misc_ctrl_reg;
   2707 	uint32_t pci_state_reg, grc_misc_cfg;
   2708 	uint16_t pci_cmd;
   2709 	uint8_t  pci_latency;
   2710 	uint32_t val ;
   2711 	int err;
   2712 
   2713 	/* Read the subsystem vendor and device ids */
   2714 	pci_read_config_word(tp->pdev, PCI_SUBSYSTEM_VENDOR_ID, &tp->subsystem_vendor);
   2715 	pci_read_config_word(tp->pdev, PCI_SUBSYSTEM_ID, &tp->subsystem_device);
   2716 
   2717 	/* The sun_5704 code needs infrastructure etherboot does have
   2718 	 * ignore it for now.
   2719 	 */
   2720 
   2721 	/* If we have an AMD 762 or Intel ICH/ICH0 chipset, write
   2722 	 * reordering to the mailbox registers done by the host
   2723 	 * controller can cause major troubles.  We read back from
   2724 	 * every mailbox register write to force the writes to be
   2725 	 * posted to the chip in order.
   2726 	 *
   2727 	 * TG3_FLAG_MBOX_WRITE_REORDER has been forced on.
   2728 	 */
   2729 
   2730 	/* Force memory write invalidate off.  If we leave it on,
   2731 	 * then on 5700_BX chips we have to enable a workaround.
   2732 	 * The workaround is to set the TG3PCI_DMA_RW_CTRL boundry
   2733 	 * to match the cacheline size.  The Broadcom driver have this
   2734 	 * workaround but turns MWI off all the times so never uses
   2735 	 * it.  This seems to suggest that the workaround is insufficient.
   2736 	 */
   2737 	pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
   2738 	pci_cmd &= ~PCI_COMMAND_INVALIDATE;
   2739 	/* Also, force SERR#/PERR# in PCI command. */
   2740 	pci_cmd |= PCI_COMMAND_PARITY | PCI_COMMAND_SERR;
   2741 	pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
   2742 
   2743 	/* It is absolutely critical that TG3PCI_MISC_HOST_CTRL
   2744 	 * has the register indirect write enable bit set before
   2745 	 * we try to access any of the MMIO registers.  It is also
   2746 	 * critical that the PCI-X hw workaround situation is decided
   2747 	 * before that as well.
   2748 	 */
   2749 	pci_read_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL, &misc_ctrl_reg);
   2750 
   2751 	tp->pci_chip_rev_id = (misc_ctrl_reg >> MISC_HOST_CTRL_CHIPREV_SHIFT);
   2752 
   2753 	/* Initialize misc host control in PCI block. */
   2754 	tp->misc_host_ctrl |= (misc_ctrl_reg &
   2755 			       MISC_HOST_CTRL_CHIPREV);
   2756 	pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
   2757 			       tp->misc_host_ctrl);
   2758 
   2759 	pci_read_config_byte(tp->pdev, PCI_LATENCY_TIMER, &pci_latency);
   2760 	if (pci_latency < 64) {
   2761 		pci_write_config_byte(tp->pdev, PCI_LATENCY_TIMER, 64);
   2762 	}
   2763 
   2764 	pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE, &pci_state_reg);
   2765 
   2766 	/* If this is a 5700 BX chipset, and we are in PCI-X
   2767 	 * mode, enable register write workaround.
   2768 	 *
   2769 	 * The workaround is to use indirect register accesses
   2770 	 * for all chip writes not to mailbox registers.
   2771 	 *
   2772 	 * In etherboot to simplify things we just always use this work around.
   2773 	 */
   2774 	if ((pci_state_reg & PCISTATE_CONV_PCI_MODE) == 0) {
   2775 		tp->tg3_flags |= TG3_FLAG_PCIX_MODE;
   2776 	}
   2777 	/* Back to back register writes can cause problems on the 5701,
   2778 	 * the workaround is to read back all reg writes except those to
   2779 	 * mailbox regs.
   2780 	 * In etherboot we always use indirect register accesses so
   2781 	 * we don't see this.
   2782 	 */
   2783 
   2784 	if ((pci_state_reg & PCISTATE_BUS_SPEED_HIGH) != 0)
   2785 		tp->tg3_flags |= TG3_FLAG_PCI_HIGH_SPEED;
   2786 	if ((pci_state_reg & PCISTATE_BUS_32BIT) != 0)
   2787 		tp->tg3_flags |= TG3_FLAG_PCI_32BIT;
   2788 
   2789 	/* Chip-specific fixup from Broadcom driver */
   2790 	if ((tp->pci_chip_rev_id == CHIPREV_ID_5704_A0) &&
   2791 	    (!(pci_state_reg & PCISTATE_RETRY_SAME_DMA))) {
   2792 		pci_state_reg |= PCISTATE_RETRY_SAME_DMA;
   2793 		pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, pci_state_reg);
   2794 	}
   2795 
   2796 	/* determine if it is PCIE system */
   2797 	// Alf : I have no idea what this is about...
   2798 	// But it's definitely usefull
   2799 	val = pci_find_capability(tp->pdev, PCI_CAP_ID_EXP);
   2800 	if (val)
   2801 		tp->tg3_flags2 |= TG3_FLG2_PCI_EXPRESS;
   2802 
   2803 	/* Force the chip into D0. */
   2804 	tg3_set_power_state_0(tp);
   2805 
   2806 	/* Etherboot does not ask the tg3 to do checksums */
   2807 	/* Etherboot does not ask the tg3 to do jumbo frames */
   2808 	/* Ehterboot does not ask the tg3 to use WakeOnLan. */
   2809 
   2810 	/* A few boards don't want Ethernet@WireSpeed phy feature */
   2811 	if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700) ||
   2812 	    (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750) ||
   2813 		((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) &&
   2814 			(tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) &&
   2815 			(tp->pci_chip_rev_id != CHIPREV_ID_5705_A1))) {
   2816 		tp->tg3_flags2 |= TG3_FLG2_NO_ETH_WIRE_SPEED;
   2817 	}
   2818 
   2819 	/* Avoid tagged irq status etherboot does not use irqs */
   2820 
   2821 	/* Only 5701 and later support tagged irq status mode.
   2822 	 * Also, 5788 chips cannot use tagged irq status.
   2823 	 *
   2824 	 * However, since etherboot does not use irqs avoid tagged irqs
   2825 	 * status  because the interrupt condition is more difficult to
   2826 	 * fully clear in that mode.
   2827 	 */
   2828 
   2829 	/* Since some 5700_AX && 5700_BX have problems with 32BYTE
   2830 	 * coalesce_mode, and the rest work fine anything set.
   2831 	 * Don't enable HOST_CC_MODE_32BYTE in etherboot.
   2832 	 */
   2833 
   2834 	/* Initialize MAC MI mode, polling disabled. */
   2835 	tw32_carefully(MAC_MI_MODE, tp->mi_mode);
   2836 
   2837 	/* Initialize data/descriptor byte/word swapping. */
   2838 	tw32(GRC_MODE, tp->grc_mode);
   2839 
   2840 	tg3_switch_clocks(tp);
   2841 
   2842 	/* Clear this out for sanity. */
   2843 	tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0);
   2844 
   2845 	/* Etherboot does not need to check if the PCIX_TARGET_HWBUG
   2846 	 * is needed.  It always uses it.
   2847 	 */
   2848 
   2849 	udelay(50);
   2850 	tg3_nvram_init(tp);
   2851 
   2852 	/* The TX descriptors will reside in main memory.
   2853 	 */
   2854 
   2855 	/* See which board we are using.
   2856 	 */
   2857 	grc_misc_cfg = tr32(GRC_MISC_CFG);
   2858 	grc_misc_cfg &= GRC_MISC_CFG_BOARD_ID_MASK;
   2859 
   2860 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 &&
   2861 	    grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5704CIOBE) {
   2862 		tp->tg3_flags |= TG3_FLAG_SPLIT_MODE;
   2863 		tp->split_mode_max_reqs = SPLIT_MODE_5704_MAX_REQ;
   2864 	}
   2865 
   2866 	if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 &&
   2867 	    (grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788 ||
   2868 	     grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788M))
   2869 		tp->tg3_flags2 |= TG3_FLG2_IS_5788;
   2870 
   2871 #define PCI_DEVICE_ID_TIGON3_5901	0x170d
   2872 #define PCI_DEVICE_ID_TIGON3_5901_2	0x170e
   2873 
   2874 	/* these are limited to 10/100 only */
   2875 	if (((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703) &&
   2876 		    ((grc_misc_cfg == 0x8000) || (grc_misc_cfg == 0x4000))) ||
   2877 		((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) &&
   2878 			(tp->pdev->vendor == PCI_VENDOR_ID_BROADCOM) &&
   2879 			((tp->pdev->device == PCI_DEVICE_ID_TIGON3_5901) ||
   2880 				(tp->pdev->device == PCI_DEVICE_ID_TIGON3_5901_2)))) {
   2881 		tp->tg3_flags |= TG3_FLAG_10_100_ONLY;
   2882 	}
   2883 
   2884 	err = tg3_phy_probe(tp);
   2885 	if (err) {
   2886 		printf("phy probe failed, err %d\n", err);
   2887 	}
   2888 
   2889 	tg3_read_partno(tp);
   2890 
   2891 
   2892 	/* 5700 BX chips need to have their TX producer index mailboxes
   2893 	 * written twice to workaround a bug.
   2894 	 * In etherboot we do this unconditionally to simplify things.
   2895 	 */
   2896 
   2897 	/* 5700 chips can get confused if TX buffers straddle the
   2898 	 * 4GB address boundary in some cases.
   2899 	 *
   2900 	 * In etherboot we can ignore the problem as etherboot lives below 4GB.
   2901 	 */
   2902 
   2903 	/* In etherboot wake-on-lan is unconditionally disabled */
   2904 	return err;
   2905 }
   2906 
   2907 static int  tg3_get_device_address(struct tg3 *tp)
   2908 {
   2909 	struct nic *nic = tp->nic;
   2910 	uint32_t hi, lo, mac_offset;
   2911 
   2912 	if (PCI_FUNC(tp->pdev->devfn) == 0)
   2913 		mac_offset = 0x7c;
   2914 	else
   2915 		mac_offset = 0xcc;
   2916 
   2917 	/* First try to get it from MAC address mailbox. */
   2918 	tg3_read_mem(NIC_SRAM_MAC_ADDR_HIGH_MBOX, &hi);
   2919 	if ((hi >> 16) == 0x484b) {
   2920 		nic->node_addr[0] = (hi >>  8) & 0xff;
   2921 		nic->node_addr[1] = (hi >>  0) & 0xff;
   2922 
   2923 		tg3_read_mem(NIC_SRAM_MAC_ADDR_LOW_MBOX, &lo);
   2924 		nic->node_addr[2] = (lo >> 24) & 0xff;
   2925 		nic->node_addr[3] = (lo >> 16) & 0xff;
   2926 		nic->node_addr[4] = (lo >>  8) & 0xff;
   2927 		nic->node_addr[5] = (lo >>  0) & 0xff;
   2928 	}
   2929 	/* Next, try NVRAM. */
   2930 	else if (!tg3_nvram_read(tp, mac_offset + 0, &hi) &&
   2931 		 !tg3_nvram_read(tp, mac_offset + 4, &lo)) {
   2932 		nic->node_addr[0] = ((hi >> 16) & 0xff);
   2933 		nic->node_addr[1] = ((hi >> 24) & 0xff);
   2934 		nic->node_addr[2] = ((lo >>  0) & 0xff);
   2935 		nic->node_addr[3] = ((lo >>  8) & 0xff);
   2936 		nic->node_addr[4] = ((lo >> 16) & 0xff);
   2937 		nic->node_addr[5] = ((lo >> 24) & 0xff);
   2938 	}
   2939 	/* Finally just fetch it out of the MAC control regs. */
   2940 	else {
   2941 		hi = tr32(MAC_ADDR_0_HIGH);
   2942 		lo = tr32(MAC_ADDR_0_LOW);
   2943 
   2944 		nic->node_addr[5] = lo & 0xff;
   2945 		nic->node_addr[4] = (lo >> 8) & 0xff;
   2946 		nic->node_addr[3] = (lo >> 16) & 0xff;
   2947 		nic->node_addr[2] = (lo >> 24) & 0xff;
   2948 		nic->node_addr[1] = hi & 0xff;
   2949 		nic->node_addr[0] = (hi >> 8) & 0xff;
   2950 	}
   2951 
   2952 	return 0;
   2953 }
   2954 
   2955 
   2956 static int tg3_setup_dma(struct tg3 *tp)
   2957 {
   2958 	tw32(TG3PCI_CLOCK_CTRL, 0);
   2959 
   2960 	if ((tp->tg3_flags & TG3_FLAG_PCIX_MODE) == 0) {
   2961 		tp->dma_rwctrl =
   2962 			(0x7 << DMA_RWCTRL_PCI_WRITE_CMD_SHIFT) |
   2963 			(0x6 << DMA_RWCTRL_PCI_READ_CMD_SHIFT) |
   2964 			(0x7 << DMA_RWCTRL_WRITE_WATER_SHIFT) |
   2965 			(0x7 << DMA_RWCTRL_READ_WATER_SHIFT) |
   2966 			(0x0f << DMA_RWCTRL_MIN_DMA_SHIFT);
   2967 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) {
   2968 			tp->dma_rwctrl &= ~(DMA_RWCTRL_MIN_DMA << DMA_RWCTRL_MIN_DMA_SHIFT);
   2969 		}
   2970 	} else {
   2971 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704)
   2972 			tp->dma_rwctrl =
   2973 				(0x7 << DMA_RWCTRL_PCI_WRITE_CMD_SHIFT) |
   2974 				(0x6 << DMA_RWCTRL_PCI_READ_CMD_SHIFT) |
   2975 				(0x3 << DMA_RWCTRL_WRITE_WATER_SHIFT) |
   2976 				(0x7 << DMA_RWCTRL_READ_WATER_SHIFT) |
   2977 				(0x00 << DMA_RWCTRL_MIN_DMA_SHIFT);
   2978 		else
   2979 			tp->dma_rwctrl =
   2980 				(0x7 << DMA_RWCTRL_PCI_WRITE_CMD_SHIFT) |
   2981 				(0x6 << DMA_RWCTRL_PCI_READ_CMD_SHIFT) |
   2982 				(0x3 << DMA_RWCTRL_WRITE_WATER_SHIFT) |
   2983 				(0x3 << DMA_RWCTRL_READ_WATER_SHIFT) |
   2984 				(0x0f << DMA_RWCTRL_MIN_DMA_SHIFT);
   2985 
   2986 		/* Wheee, some more chip bugs... */
   2987 		if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703) ||
   2988 			(GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704)) {
   2989 			uint32_t ccval = tr32(TG3PCI_CLOCK_CTRL) & 0x1f;
   2990 
   2991 			if ((ccval == 0x6) || (ccval == 0x7)) {
   2992 				tp->dma_rwctrl |= DMA_RWCTRL_ONE_DMA;
   2993 			}
   2994 		}
   2995 	}
   2996 
   2997 	if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703) ||
   2998 		(GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704)) {
   2999 		tp->dma_rwctrl &= ~(DMA_RWCTRL_MIN_DMA << DMA_RWCTRL_MIN_DMA_SHIFT);
   3000 	}
   3001 
   3002 	/*
   3003 	  Alf : Tried that, but it does not work. Should be this way though :-(
   3004 	if (tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS) {
   3005     	  tp->dma_rwctrl |= 0x001f0000;
   3006 	}
   3007 	*/
   3008 	tp->dma_rwctrl |= DMA_RWCTRL_ASSERT_ALL_BE;
   3009 
   3010 	tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
   3011 
   3012 	return 0;
   3013 }
   3014 
   3015 static void tg3_init_link_config(struct tg3 *tp)
   3016 {
   3017 	tp->link_config.advertising =
   3018 		(ADVERTISED_10baseT_Half | ADVERTISED_10baseT_Full |
   3019 		 ADVERTISED_100baseT_Half | ADVERTISED_100baseT_Full |
   3020 		 ADVERTISED_1000baseT_Half | ADVERTISED_1000baseT_Full |
   3021 		 ADVERTISED_Autoneg | ADVERTISED_MII);
   3022 	tp->carrier_ok = 0;
   3023 	tp->link_config.active_speed = SPEED_INVALID;
   3024 	tp->link_config.active_duplex = DUPLEX_INVALID;
   3025 }
   3026 
   3027 
   3028 #if SUPPORT_PHY_STR
   3029 static const char * tg3_phy_string(struct tg3 *tp)
   3030 {
   3031 	switch (tp->phy_id & PHY_ID_MASK) {
   3032 	case PHY_ID_BCM5400:	return "5400";
   3033 	case PHY_ID_BCM5401:	return "5401";
   3034 	case PHY_ID_BCM5411:	return "5411";
   3035 	case PHY_ID_BCM5701:	return "5701";
   3036 	case PHY_ID_BCM5703:	return "5703";
   3037 	case PHY_ID_BCM5704:	return "5704";
   3038         case PHY_ID_BCM5705:    return "5705";
   3039         case PHY_ID_BCM5750:    return "5750";
   3040 	case PHY_ID_BCM5751:	return "5751";
   3041 	case PHY_ID_BCM5787:	return "5787";
   3042 	case PHY_ID_BCM8002:	return "8002/serdes";
   3043 	case PHY_ID_SERDES:	return "serdes";
   3044 	default:		return "unknown";
   3045 	};
   3046 }
   3047 #else
   3048 #define tg3_phy_string(TP) "?"
   3049 #endif
   3050 
   3051 
   3052 static void tg3_poll_link(struct tg3 *tp)
   3053 {
   3054 	uint32_t mac_stat;
   3055 
   3056 	mac_stat = tr32(MAC_STATUS);
   3057 	if (tp->phy_id == PHY_ID_SERDES) {
   3058 		if (tp->carrier_ok?
   3059 			(mac_stat & MAC_STATUS_LNKSTATE_CHANGED):
   3060 			(mac_stat & MAC_STATUS_PCS_SYNCED)) {
   3061 			tw32_carefully(MAC_MODE, tp->mac_mode & ~MAC_MODE_PORT_MODE_MASK);
   3062 			tw32_carefully(MAC_MODE, tp->mac_mode);
   3063 
   3064 			tg3_setup_phy(tp);
   3065 		}
   3066 	}
   3067 	else {
   3068 		if (mac_stat & MAC_STATUS_LNKSTATE_CHANGED) {
   3069 			tg3_setup_phy(tp);
   3070 		}
   3071 	}
   3072 }
   3073 
   3074 /**************************************************************************
   3075 POLL - Wait for a frame
   3076 ***************************************************************************/
   3077 static void tg3_ack_irqs(struct tg3 *tp)
   3078 {
   3079 	if (tp->hw_status->status & SD_STATUS_UPDATED) {
   3080 		/*
   3081 		 * writing any value to intr-mbox-0 clears PCI INTA# and
   3082 		 * chip-internal interrupt pending events.
   3083 		 * writing non-zero to intr-mbox-0 additional tells the
   3084 		 * NIC to stop sending us irqs, engaging "in-intr-handler"
   3085 		 * event coalescing.
   3086 		 */
   3087 		tw32_mailbox(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW,
   3088 			0x00000001);
   3089 		/*
   3090 		 * Flush PCI write.  This also guarantees that our
   3091 		 * status block has been flushed to host memory.
   3092 		 */
   3093 		tr32(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW);
   3094 		tp->hw_status->status &= ~SD_STATUS_UPDATED;
   3095 	}
   3096 }
   3097 
   3098 static int tg3_poll(struct nic *nic, int retrieve)
   3099 {
   3100 	/* return true if there's an ethernet packet ready to read */
   3101 	/* nic->packet should contain data on return */
   3102 	/* nic->packetlen should contain length of data */
   3103 
   3104 	struct tg3 *tp = &tg3;
   3105 	int result;
   3106 
   3107 	result = 0;
   3108 
   3109 	if ( (tp->hw_status->idx[0].rx_producer != tp->rx_rcb_ptr) && !retrieve )
   3110 	  return 1;
   3111 
   3112 	tg3_ack_irqs(tp);
   3113 
   3114 	if (tp->hw_status->idx[0].rx_producer != tp->rx_rcb_ptr) {
   3115 		struct tg3_rx_buffer_desc *desc;
   3116 		unsigned int len;
   3117 		desc = &tp->rx_rcb[tp->rx_rcb_ptr];
   3118 		if ((desc->opaque & RXD_OPAQUE_RING_MASK) == RXD_OPAQUE_RING_STD) {
   3119 			len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT) - 4; /* omit crc */
   3120 
   3121 			nic->packetlen = len;
   3122 			memcpy(nic->packet, bus_to_virt(desc->addr_lo), len);
   3123 			result = 1;
   3124 		}
   3125 		tp->rx_rcb_ptr = (tp->rx_rcb_ptr + 1) % TG3_RX_RCB_RING_SIZE;
   3126 
   3127 		/* ACK the status ring */
   3128 		tw32_mailbox2(MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW, tp->rx_rcb_ptr);
   3129 
   3130 		/* Refill RX ring. */
   3131 		if (result) {
   3132 			tp->rx_std_ptr = (tp->rx_std_ptr + 1) % TG3_RX_RING_SIZE;
   3133 			tw32_mailbox2(MAILBOX_RCV_STD_PROD_IDX + TG3_64BIT_REG_LOW, tp->rx_std_ptr);
   3134 		}
   3135 	}
   3136 	tg3_poll_link(tp);
   3137 	return result;
   3138 }
   3139 
   3140 /**************************************************************************
   3141 TRANSMIT - Transmit a frame
   3142 ***************************************************************************/
   3143 #if 0
   3144 static void tg3_set_txd(struct tg3 *tp, int entry,
   3145 	dma_addr_t mapping, int len, uint32_t flags,
   3146 	uint32_t mss_and_is_end)
   3147 {
   3148 	struct tg3_tx_buffer_desc *txd =  &tp->tx_ring[entry];
   3149 	int is_end = (mss_and_is_end & 0x1);
   3150 	if (is_end) {
   3151 		flags |= TXD_FLAG_END;
   3152 	}
   3153 
   3154 	txd->addr_hi   = 0;
   3155 	txd->addr_lo   = mapping & 0xffffffff;
   3156 	txd->len_flags = (len << TXD_LEN_SHIFT) | flags;
   3157 	txd->vlan_tag  = 0 << TXD_VLAN_TAG_SHIFT;
   3158 }
   3159 #endif
   3160 
   3161 static void tg3_transmit(struct nic *nic, const char *dst_addr,
   3162 	unsigned int type, unsigned int size, const char *packet)
   3163 {
   3164 	static int frame_idx;
   3165 	struct eth_frame *frame;
   3166 
   3167 	/* send the packet to destination */
   3168 	struct tg3_tx_buffer_desc *txd;
   3169 	struct tg3 *tp;
   3170 	uint32_t entry;
   3171 	int i;
   3172 
   3173 	/* Wait until there is a free packet frame */
   3174 	tp = &tg3;
   3175 	i = 0;
   3176 	entry = tp->tx_prod;
   3177 	while((tp->hw_status->idx[0].tx_consumer != entry) &&
   3178 		(tp->hw_status->idx[0].tx_consumer != PREV_TX(entry))) {
   3179 		mdelay(10);	/* give the nick a chance */
   3180 		if (++i > 500) { /* timeout 5s for transmit */
   3181 			printf("transmit timed out\n");
   3182 			tg3_halt(tp);
   3183 			tg3_setup_hw(tp);
   3184 			return;
   3185 		}
   3186 	}
   3187 	if (i != 0) {
   3188 		printf("#");
   3189 	}
   3190 
   3191 	/* Copy the packet to the our local buffer */
   3192 	frame = &tg3_bss.tx_frame[frame_idx];
   3193 	memcpy(frame->dst_addr, dst_addr, ETH_ALEN);
   3194 	memcpy(frame->src_addr, nic->node_addr, ETH_ALEN);
   3195 	frame->type = htons(type);
   3196 	memset(frame->data, 0, sizeof(frame->data));
   3197 	memcpy(frame->data, packet, size);
   3198 
   3199 	/* Setup the ring buffer entry to transmit */
   3200 	txd            = &tp->tx_ring[entry];
   3201 	txd->addr_hi   = 0; /* Etherboot runs under 4GB */
   3202 	txd->addr_lo   = virt_to_bus(frame);
   3203 	txd->len_flags = ((size + ETH_HLEN) << TXD_LEN_SHIFT) | TXD_FLAG_END;
   3204 	txd->vlan_tag  = 0 << TXD_VLAN_TAG_SHIFT;
   3205 
   3206 	/* Advance to the next entry */
   3207 	entry = NEXT_TX(entry);
   3208 	frame_idx ^= 1;
   3209 
   3210 	/* Packets are ready, update Tx producer idx local and on card */
   3211 	tw32_mailbox((MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW), entry);
   3212 	tw32_mailbox2((MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW), entry);
   3213 	tp->tx_prod = entry;
   3214 }
   3215 
   3216 /**************************************************************************
   3217 DISABLE - Turn off ethernet interface
   3218 ***************************************************************************/
   3219 static void tg3_disable ( struct nic *nic __unused ) {
   3220 	struct tg3 *tp = &tg3;
   3221 	/* put the card in its initial state */
   3222 	/* This function serves 3 purposes.
   3223 	 * This disables DMA and interrupts so we don't receive
   3224 	 *  unexpected packets or interrupts from the card after
   3225 	 *  etherboot has finished.
   3226 	 * This frees resources so etherboot may use
   3227 	 *  this driver on another interface
   3228 	 * This allows etherboot to reinitialize the interface
   3229 	 *  if something is something goes wrong.
   3230 	 */
   3231 	tg3_halt(tp);
   3232 	tp->tg3_flags &= ~(TG3_FLAG_INIT_COMPLETE|TG3_FLAG_GOT_SERDES_FLOWCTL);
   3233 	tp->carrier_ok = 0;
   3234 	iounmap((void *)tp->regs);
   3235 }
   3236 
   3237 /**************************************************************************
   3238 IRQ - Enable, Disable, or Force interrupts
   3239 ***************************************************************************/
   3240 static void tg3_irq(struct nic *nic __unused, irq_action_t action __unused)
   3241 {
   3242   switch ( action ) {
   3243   case DISABLE :
   3244     break;
   3245   case ENABLE :
   3246     break;
   3247   case FORCE :
   3248     break;
   3249   }
   3250 }
   3251 
   3252 static struct nic_operations tg3_operations = {
   3253 	.connect	= dummy_connect,
   3254 	.poll		= tg3_poll,
   3255 	.transmit	= tg3_transmit,
   3256 	.irq		= tg3_irq,
   3257 
   3258 };
   3259 
   3260 /**************************************************************************
   3261 PROBE - Look for an adapter, this routine's visible to the outside
   3262 You should omit the last argument struct pci_device * for a non-PCI NIC
   3263 ***************************************************************************/
   3264 static int tg3_probe ( struct nic *nic, struct pci_device *pdev ) {
   3265 
   3266 	struct tg3 *tp = &tg3;
   3267 	unsigned long tg3reg_base, tg3reg_len;
   3268 	int i, err, pm_cap;
   3269 
   3270 	memset(tp, 0, sizeof(*tp));
   3271 
   3272 	adjust_pci_device(pdev);
   3273 
   3274 	nic->irqno  = 0;
   3275         nic->ioaddr = pdev->ioaddr;
   3276 
   3277 	/* Find power-management capability. */
   3278 	pm_cap = pci_find_capability(pdev, PCI_CAP_ID_PM);
   3279 	if (pm_cap == 0) {
   3280 		printf("Cannot find PowerManagement capability, aborting.\n");
   3281 		return 0;
   3282 	}
   3283 	tg3reg_base = pci_bar_start(pdev, PCI_BASE_ADDRESS_0);
   3284 	if (tg3reg_base == -1UL) {
   3285 		printf("Unuseable bar\n");
   3286 		return 0;
   3287 	}
   3288 	tg3reg_len  = pci_bar_size(pdev,  PCI_BASE_ADDRESS_0);
   3289 
   3290 	tp->pdev       = pdev;
   3291 	tp->nic        = nic;
   3292 	tp->pm_cap     = pm_cap;
   3293 	tp->rx_mode    = 0;
   3294 	tp->tx_mode    = 0;
   3295 	tp->mi_mode    = MAC_MI_MODE_BASE;
   3296 	tp->tg3_flags  = 0 & ~TG3_FLAG_INIT_COMPLETE;
   3297 
   3298 	/* The word/byte swap controls here control register access byte
   3299 	 * swapping.  DMA data byte swapping is controlled in the GRC_MODE
   3300 	 * setting below.
   3301 	 */
   3302 	tp->misc_host_ctrl =
   3303 		MISC_HOST_CTRL_MASK_PCI_INT |
   3304 		MISC_HOST_CTRL_WORD_SWAP |
   3305 		MISC_HOST_CTRL_INDIR_ACCESS |
   3306 		MISC_HOST_CTRL_PCISTATE_RW;
   3307 
   3308 	/* The NONFRM (non-frame) byte/word swap controls take effect
   3309 	 * on descriptor entries, anything which isn't packet data.
   3310 	 *
   3311 	 * The StrongARM chips on the board (one for tx, one for rx)
   3312 	 * are running in big-endian mode.
   3313 	 */
   3314 	tp->grc_mode = (GRC_MODE_WSWAP_DATA | GRC_MODE_BSWAP_DATA |
   3315 			GRC_MODE_WSWAP_NONFRM_DATA);
   3316 #if __BYTE_ORDER == __BIG_ENDIAN
   3317 	tp->grc_mode |= GRC_MODE_BSWAP_NONFRM_DATA;
   3318 #endif
   3319 	tp->regs = (unsigned long) ioremap(tg3reg_base, tg3reg_len);
   3320 	if (tp->regs == 0UL) {
   3321 		printf("Cannot map device registers, aborting\n");
   3322 		return 0;
   3323 	}
   3324 
   3325 	tg3_init_link_config(tp);
   3326 
   3327 	err = tg3_get_invariants(tp);
   3328 	if (err) {
   3329 		printf("Problem fetching invariants of chip, aborting.\n");
   3330 		goto err_out_iounmap;
   3331 	}
   3332 
   3333 	err = tg3_get_device_address(tp);
   3334 	if (err) {
   3335 		printf("Could not obtain valid ethernet address, aborting.\n");
   3336 		goto err_out_iounmap;
   3337 	}
   3338 
   3339 	DBG ( "Ethernet addr: %s\n", eth_ntoa ( nic->node_addr ) );
   3340 
   3341 	tg3_setup_dma(tp);
   3342 
   3343 	/* Now that we have fully setup the chip, save away a snapshot
   3344 	 * of the PCI config space.  We need to restore this after
   3345 	 * GRC_MISC_CFG core clock resets and some resume events.
   3346 	 */
   3347 	pci_save_state(tp->pdev, tp->pci_cfg_state);
   3348 
   3349 	printf("Tigon3 [partno(%s) rev %hx PHY(%s)] (PCI%s:%s:%s)\n",
   3350 		tp->board_part_number,
   3351 		tp->pci_chip_rev_id,
   3352 		tg3_phy_string(tp),
   3353 		((tp->tg3_flags & TG3_FLAG_PCIX_MODE) ? "X" : ""),
   3354 		((tp->tg3_flags & TG3_FLAG_PCI_HIGH_SPEED) ?
   3355 			((tp->tg3_flags & TG3_FLAG_PCIX_MODE) ? "133MHz" : "66MHz") :
   3356 			((tp->tg3_flags & TG3_FLAG_PCIX_MODE) ? "100MHz" : "33MHz")),
   3357 		((tp->tg3_flags & TG3_FLAG_PCI_32BIT) ? "32-bit" : "64-bit"));
   3358 
   3359 
   3360 	err = tg3_setup_hw(tp);
   3361 	if (err) {
   3362 		goto err_out_disable;
   3363 	}
   3364 	tp->tg3_flags |= TG3_FLAG_INIT_COMPLETE;
   3365 
   3366 	/* Wait for a reasonable time for the link to come up */
   3367 	tg3_poll_link(tp);
   3368 	for(i = 0; !tp->carrier_ok && (i < VALID_LINK_TIMEOUT*100); i++) {
   3369 		mdelay(1);
   3370 		tg3_poll_link(tp);
   3371 	}
   3372 	if (!tp->carrier_ok){
   3373 		printf("Valid link not established\n");
   3374 		goto err_out_disable;
   3375 	}
   3376 
   3377 	nic->nic_op	= &tg3_operations;
   3378 	return 1;
   3379 
   3380  err_out_iounmap:
   3381 	iounmap((void *)tp->regs);
   3382 	return 0;
   3383  err_out_disable:
   3384 	tg3_disable(nic);
   3385 	return 0;
   3386 }
   3387 
   3388 
   3389 static struct pci_device_id tg3_nics[] = {
   3390 PCI_ROM(0x14e4, 0x1644, "tg3-5700",        "Broadcom Tigon 3 5700", 0),
   3391 PCI_ROM(0x14e4, 0x1645, "tg3-5701",        "Broadcom Tigon 3 5701", 0),
   3392 PCI_ROM(0x14e4, 0x1646, "tg3-5702",        "Broadcom Tigon 3 5702", 0),
   3393 PCI_ROM(0x14e4, 0x1647, "tg3-5703",        "Broadcom Tigon 3 5703", 0),
   3394 PCI_ROM(0x14e4, 0x1648, "tg3-5704",        "Broadcom Tigon 3 5704", 0),
   3395 PCI_ROM(0x14e4, 0x164d, "tg3-5702FE",      "Broadcom Tigon 3 5702FE", 0),
   3396 PCI_ROM(0x14e4, 0x1653, "tg3-5705",        "Broadcom Tigon 3 5705", 0),
   3397 PCI_ROM(0x14e4, 0x1654, "tg3-5705_2",      "Broadcom Tigon 3 5705_2", 0),
   3398 PCI_ROM(0x14e4, 0x1659, "tg3-5721",        "Broadcom Tigon 3 5721", 0),
   3399 PCI_ROM(0x14e4, 0x165d, "tg3-5705M",       "Broadcom Tigon 3 5705M", 0),
   3400 PCI_ROM(0x14e4, 0x165e, "tg3-5705M_2",     "Broadcom Tigon 3 5705M_2", 0),
   3401 PCI_ROM(0x14e4, 0x1677, "tg3-5751",        "Broadcom Tigon 3 5751", 0),
   3402 PCI_ROM(0x14e4, 0x167a, "tg3-5754",        "Broadcom Tigon 3 5754", 0),
   3403 PCI_ROM(0x14e4, 0x1693, "tg3-5787",	   "Broadcom Tigon 3 5787", 0),
   3404 PCI_ROM(0x14e4, 0x1696, "tg3-5782",        "Broadcom Tigon 3 5782", 0),
   3405 PCI_ROM(0x14e4, 0x169a, "tg3-5786",        "Broadcom Tigon 3 5786", 0),
   3406 PCI_ROM(0x14e4, 0x169c, "tg3-5788",        "Broadcom Tigon 3 5788", 0),
   3407 PCI_ROM(0x14e4, 0x169d, "tg3-5789",        "Broadcom Tigon 3 5789", 0),
   3408 PCI_ROM(0x14e4, 0x16a6, "tg3-5702X",       "Broadcom Tigon 3 5702X", 0),
   3409 PCI_ROM(0x14e4, 0x16a7, "tg3-5703X",       "Broadcom Tigon 3 5703X", 0),
   3410 PCI_ROM(0x14e4, 0x16a8, "tg3-5704S",       "Broadcom Tigon 3 5704S", 0),
   3411 PCI_ROM(0x14e4, 0x16c6, "tg3-5702A3",      "Broadcom Tigon 3 5702A3", 0),
   3412 PCI_ROM(0x14e4, 0x16c7, "tg3-5703A3",      "Broadcom Tigon 3 5703A3", 0),
   3413 PCI_ROM(0x14e4, 0x170d, "tg3-5901",        "Broadcom Tigon 3 5901", 0),
   3414 PCI_ROM(0x14e4, 0x170e, "tg3-5901_2",      "Broadcom Tigon 3 5901_2", 0),
   3415 PCI_ROM(0x1148, 0x4400, "tg3-9DXX",        "Syskonnect 9DXX", 0),
   3416 PCI_ROM(0x1148, 0x4500, "tg3-9MXX",        "Syskonnect 9MXX", 0),
   3417 PCI_ROM(0x173b, 0x03e8, "tg3-ac1000",      "Altima AC1000", 0),
   3418 PCI_ROM(0x173b, 0x03e9, "tg3-ac1001",      "Altima AC1001", 0),
   3419 PCI_ROM(0x173b, 0x03ea, "tg3-ac9100",      "Altima AC9100", 0),
   3420 PCI_ROM(0x173b, 0x03eb, "tg3-ac1003",      "Altima AC1003", 0),
   3421 PCI_ROM(0x0e11, 0x00ca, "tg3-hp",	   "HP Tigon 3", 0),
   3422 };
   3423 
   3424 PCI_DRIVER ( tg3_driver, tg3_nics, PCI_NO_CLASS );
   3425 
   3426 DRIVER ( "TG3", nic_driver, pci_driver, tg3_driver,
   3427 	 tg3_probe, tg3_disable );
   3428 
   3429 /*
   3430  * Local variables:
   3431  *  c-basic-offset: 8
   3432  *  c-indent-level: 8
   3433  *  tab-width: 8
   3434  * End:
   3435  */
   3436