Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit aedc0e52 authored by Sergei Shtylyov's avatar Sergei Shtylyov Committed by Stephen Hemminger
Browse files

Fix RTL8019AS init for Toshiba RBTX49xx boards



    Ensure that 8-bit mode is selected for the on-board Realtek RTL8019AS chip
on Toshiba RBHMA4x00, get rid of the duplicate #ifdef's when setting
ei_status.word16.
    The chip's datasheet says that the PSTOP register shouldn't exceed 0x60 in
8-bit mode -- ensure this too.

Signed-off-by: default avatarSergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: default avatarStephen Hemminger <shemminger@osdl.org>
parent 8cd35da0
Loading
Loading
Loading
Loading
+19 −12
Original line number Diff line number Diff line
@@ -139,8 +139,9 @@ bad_clone_list[] __initdata = {

#if defined(CONFIG_PLAT_MAPPI)
#  define DCR_VAL 0x4b
#elif defined(CONFIG_PLAT_OAKS32R)
#  define DCR_VAL 0x48
#elif defined(CONFIG_PLAT_OAKS32R)  || \
   defined(CONFIG_TOSHIBA_RBTX4927) || defined(CONFIG_TOSHIBA_RBTX4938)
#  define DCR_VAL 0x48		/* 8-bit mode */
#else
#  define DCR_VAL 0x49
#endif
@@ -396,6 +397,18 @@ static int __init ne_probe1(struct net_device *dev, int ioaddr)
		/* We must set the 8390 for word mode. */
		outb_p(DCR_VAL, ioaddr + EN0_DCFG);
		start_page = NESM_START_PG;

		/*
		 * Realtek RTL8019AS datasheet says that the PSTOP register
		 * shouldn't exceed 0x60 in 8-bit mode.
		 * This chip can be identified by reading the signature from
		 * the  remote byte count registers (otherwise write-only)...
		 */
		if ((DCR_VAL & 0x01) == 0 &&		/* 8-bit mode */
		    inb(ioaddr + EN0_RCNTLO) == 0x50 &&
		    inb(ioaddr + EN0_RCNTHI) == 0x70)
			stop_page = 0x60;
		else
			stop_page = NESM_STOP_PG;
	} else {
		start_page = NE1SM_START_PG;
@@ -509,15 +522,9 @@ static int __init ne_probe1(struct net_device *dev, int ioaddr)
	ei_status.name = name;
	ei_status.tx_start_page = start_page;
	ei_status.stop_page = stop_page;
#if defined(CONFIG_TOSHIBA_RBTX4927) || defined(CONFIG_TOSHIBA_RBTX4938)
	wordlength = 1;
#endif

#ifdef CONFIG_PLAT_OAKS32R
	ei_status.word16 = 0;
#else
	ei_status.word16 = (wordlength == 2);
#endif
	/* Use 16-bit mode only if this wasn't overridden by DCR_VAL */
	ei_status.word16 = (wordlength == 2 && (DCR_VAL & 0x01));

	ei_status.rx_start_page = start_page + TX_PAGES;
#ifdef PACKETBUF_MEMSIZE