[PATCH] serial: Flush posted write on 34xx to make 8250 work (Re: What happened to the serial console on BeagleBoard with 2.6.28-rc2?)

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

 



* David Brownell <david-b@xxxxxxxxxxx> [081102 11:26]:
> On Sunday 02 November 2008, Rick Bronson wrote:
> > > Is that what you saw too?
> > 
> >   Yep, that's what I saw, but only if I had DEBUG_LL=y.  Without that
> > I had nothing except "Uncompressing Linux........".  
> 
> I don't have DEBUG_LL=y ... if you had some kind of network
> link configured over USB, could you SSH in?  (I can.)
> 
> 
> >   I guess we don't see this problem on the other 2 ports since they
> > are mapped MT_MEMORY_SO and not MT_DEVICE (L4_34XX_PHYS).
> 
> Hmm, inconsistency is to be avoided.  :)
> 
> I wonder what the root cause is ... is the driver missing
> various barriers needed to make MT_DEVICE work?  Or is the
> MT_DEVICE incorrect in the first place?  "git whatchanged"
> didn't show any recent changes that seemed (on a quick
> glance) to affect I/O at that level.  Maybe it was one of
> the other TTY changes interacting here.

Yeah I don't know what may have changed, or have things just
gotten faster now with cortex since 2.6.27?

Anyways, this patch fixes the issue for me without marking
things strongly ordered. Rick, does this work for you?

Regards,

Tony
>From 57eea529292418a20a119c5b18d7636cf44992ae Mon Sep 17 00:00:00 2001
From: Tony Lindgren <tony@xxxxxxxxxxx>
Date: Fri, 31 Oct 2008 16:47:42 -0700
Subject: [PATCH] serial: Flush posted write on 34xx to make 8250 work

On omap34xx, we need to flush posted writes for TX.

Signed-off-by: Tony Lindgren <tony@xxxxxxxxxxx>

diff --git a/drivers/serial/8250.c b/drivers/serial/8250.c
index 5f383d8..629a16c 100644
--- a/drivers/serial/8250.c
+++ b/drivers/serial/8250.c
@@ -413,6 +413,13 @@ serial_out(struct uart_8250_port *up, int offset, int value)
 
 	case UPIO_MEM:
 		writeb(value, up->port.membase + offset);
+#ifdef CONFIG_ARCH_OMAP
+		/* Flush posted write for TX */
+		if (cpu_is_omap34xx() && is_omap_port(up) &&
+			(save_offset == UART_TX || save_offset == UART_IER ||
+				save_offset == UART_LCR))
+			value = serial_in(up, UART_LCR); /* Safe to read */
+#endif
 		break;
 
 	case UPIO_RM9000:

[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux