diff options
Diffstat (limited to 'drivers/net')
| -rw-r--r-- | drivers/net/dm9000x.c | 16 | ||||
| -rw-r--r-- | drivers/net/rtl8169.c | 28 | 
2 files changed, 32 insertions, 12 deletions
diff --git a/drivers/net/dm9000x.c b/drivers/net/dm9000x.c index 844fb766d..e7365fe06 100644 --- a/drivers/net/dm9000x.c +++ b/drivers/net/dm9000x.c @@ -214,24 +214,28 @@ static void dm9000_rx_status_32bit(u16 *RxStatus, u16 *RxLen)  	DM9000_outb(DM9000_MRCMD, DM9000_IO);  	tmpdata = DM9000_inl(DM9000_DATA); -	*RxStatus = tmpdata; -	*RxLen = tmpdata >> 16; +	*RxStatus = __le16_to_cpu(tmpdata); +	*RxLen = __le16_to_cpu(tmpdata >> 16);  }  static void dm9000_rx_status_16bit(u16 *RxStatus, u16 *RxLen)  {  	DM9000_outb(DM9000_MRCMD, DM9000_IO); -	*RxStatus = DM9000_inw(DM9000_DATA); -	*RxLen = DM9000_inw(DM9000_DATA); +	*RxStatus = __le16_to_cpu(DM9000_inw(DM9000_DATA)); +	*RxLen = __le16_to_cpu(DM9000_inw(DM9000_DATA));  }  static void dm9000_rx_status_8bit(u16 *RxStatus, u16 *RxLen)  {  	DM9000_outb(DM9000_MRCMD, DM9000_IO); -	*RxStatus = DM9000_inb(DM9000_DATA) + (DM9000_inb(DM9000_DATA) << 8); -	*RxLen = DM9000_inb(DM9000_DATA) + (DM9000_inb(DM9000_DATA) << 8); +	*RxStatus = +	    __le16_to_cpu(DM9000_inb(DM9000_DATA) + +			  (DM9000_inb(DM9000_DATA) << 8)); +	*RxLen = +	    __le16_to_cpu(DM9000_inb(DM9000_DATA) + +			  (DM9000_inb(DM9000_DATA) << 8));  }  /* diff --git a/drivers/net/rtl8169.c b/drivers/net/rtl8169.c index d069afbe2..7c00926a6 100644 --- a/drivers/net/rtl8169.c +++ b/drivers/net/rtl8169.c @@ -112,8 +112,10 @@ static int media[MAX_UNITS] = { -1, -1, -1, -1, -1, -1, -1, -1 };  enum RTL8169_registers {  	MAC0 = 0,		/* Ethernet hardware address. */  	MAR0 = 8,		/* Multicast filter. */ -	TxDescStartAddr = 0x20, -	TxHDescStartAddr = 0x28, +	TxDescStartAddrLow = 0x20, +	TxDescStartAddrHigh = 0x24, +	TxHDescStartAddrLow = 0x28, +	TxHDescStartAddrHigh = 0x2c,  	FLASH = 0x30,  	ERSR = 0x36,  	ChipCmd = 0x37, @@ -138,7 +140,8 @@ enum RTL8169_registers {  	PHYstatus = 0x6C,  	RxMaxSize = 0xDA,  	CPlusCmd = 0xE0, -	RxDescStartAddr = 0xE4, +	RxDescStartAddrLow = 0xE4, +	RxDescStartAddrHigh = 0xE8,  	EarlyTxThres = 0xEC,  	FuncEvent = 0xF0,  	FuncEventMask = 0xF4, @@ -478,6 +481,7 @@ static int rtl_send(struct eth_device *dev, volatile void *packet, int length)  	while (len < ETH_ZLEN)  		ptxb[len++] = '\0'; +	tpc->TxDescArray[entry].buf_Haddr = 0;  	tpc->TxDescArray[entry].buf_addr = cpu_to_le32((unsigned long)ptxb);  	if (entry != (NUM_TX_DESC - 1)) {  		tpc->TxDescArray[entry].status = @@ -558,7 +562,11 @@ static void rtl8169_hw_start(struct eth_device *dev)  #endif  	RTL_W8(Cfg9346, Cfg9346_Unlock); -	RTL_W8(ChipCmd, CmdTxEnb | CmdRxEnb); + +	/* RTL-8169sb/8110sb or previous version */ +	if (tpc->chipset <= 5) +		RTL_W8(ChipCmd, CmdTxEnb | CmdRxEnb); +  	RTL_W8(EarlyTxThres, EarlyTxThld);  	/* For gigabit rtl8169 */ @@ -576,8 +584,15 @@ static void rtl8169_hw_start(struct eth_device *dev)  	tpc->cur_rx = 0; -	RTL_W32(TxDescStartAddr, (unsigned long)tpc->TxDescArray); -	RTL_W32(RxDescStartAddr, (unsigned long)tpc->RxDescArray); +	RTL_W32(TxDescStartAddrLow, (unsigned long)tpc->TxDescArray); +	RTL_W32(TxDescStartAddrHigh, (unsigned long)0); +	RTL_W32(RxDescStartAddrLow, (unsigned long)tpc->RxDescArray); +	RTL_W32(RxDescStartAddrHigh, (unsigned long)0); + +	/* RTL-8169sc/8110sc or later version */ +	if (tpc->chipset > 5) +		RTL_W8(ChipCmd, CmdTxEnb | CmdRxEnb); +  	RTL_W8(Cfg9346, Cfg9346_Lock);  	udelay(10); @@ -737,6 +752,7 @@ static int rtl_init(struct eth_device *dev, bd_t *bis)  		bis->bi_enetaddr[i] = dev->enetaddr[i] = RTL_R8(MAC0 + i);  #ifdef DEBUG_RTL8169 +	printf("chipset = %d\n", tpc->chipset);  	printf("MAC Address");  	for (i = 0; i < MAC_ADDR_LEN; i++)  		printf(":%02x", dev->enetaddr[i]);  |