Xscale UART detection false positive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The following code from autoconfig_16550a() incorrectly determines that
the UARTS in the Tundra TSI108 are Xscale UARTS and misconfigures them.

>	/*
>	 * Try writing and reading the UART_IER_UUE bit (b6).
>	 * If it works, this is probably one of the Xscale platform's
>	 * internal UARTs.
>	 * We're going to explicitly set the UUE bit to 0 before
>	 * trying to write and read a 1 just to make sure it's not
>	 * already a 1 and maybe locked there before we even start start.
>	 */
>	iersave = serial_in(up, UART_IER);
>	serial_outp(up, UART_IER, iersave & ~UART_IER_UUE);
>	if (!(serial_in(up, UART_IER) & UART_IER_UUE)) {
>		/*
>		 * OK it's in a known zero state, try writing and reading
>		 * without disturbing the current state of the other bits.
>		 */
>		serial_outp(up, UART_IER, iersave | UART_IER_UUE);
>		if (serial_in(up, UART_IER) & UART_IER_UUE) {
>			/*
>			 * It's an Xscale.
>			 * We'll leave the UART_IER_UUE bit set to 1 (enabled).
>			 */
>			DEBUG_AUTOCONF("Xscale ");
>			up->port.type = PORT_XSCALE;
>			up->capabilities |= UART_CAP_UUE;
>			return;
>		}
>	} else {
>		/*
>		 * If we got here we couldn't force the IER_UUE bit to 0.
>		 * Log it and continue.
>		 */
>		DEBUG_AUTOCONF("Couldn't force IER_UUE to 0 ");
>	}
>	serial_outp(up, UART_IER, iersave);

Right now, I work around this by ifdeffing out that code.
Any ideas on alternative methods for autodetecting Xscale UARTS?

Dale Farnsworth
-
To unsubscribe from this list: send the line "unsubscribe linux-serial" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux PPP]     [Linux FS]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Linmodem]     [Device Mapper]     [Linux Kernel for ARM]

  Powered by Linux