Skip to contentSkip to conversation

serial/ns16550: check UART mode for TEMT value

PATCH New Scott Wood 3 participants 3 messages Jan 3, 2013 – Jan 7, 2013 1 message not in the archive

lore
Share & tools
lore

A message that is not in the archive (sent off-list or not yet received): CAAwP0s0y=hPh3FrTSLptd_5UnbYGTV47s=6hVkR8aL0-Z_Ejeg@mail.gmail.com

Scott Wood

author
#1 lore raw

PATCH 1/1 serial/ns16550: check UART mode for TEMT value

Quoted 29 lines · Javier Martinez Canillas
Quoted 2 lines · Javier Martinez Canillas

But if I'm the only one having this issue maybe is just my hardware

behaving

Quoted 1 line

badly. I'll ask other OMAP3 users if they can boot with mainline

U-Boot to

Quoted 2 lines

confirm this.

Hello,

I tested with an Beagleboard which is another OMAP3 board that has the same PC16550D UART than my OMAP3 IGEPv2 and the board does not hang while waiting for TEMT. I've also tested with an OMAP4 pandaboard and it boots correctly too.

But the hung issue seems to not be an issue with my IGEPv2 board but with any IGEPv2 board since another user reported that his board hangs with the latest U-Boot too. Reverting cb55b332 (serial/ns16550: wait for TEMT before initializing) solved the issue for him.

Will a patch like this be an acceptable solution?

drivers/serial/ns16550.c +0 -0
index bbd91ca..8106a9a 100644

drivers/serial/ns16550.c line 42

Quoted 7 lines
drivers/serial/ns16550.c +2 -0
@@ -36,8 +36,10 @@
 
 void NS16550_init(NS16550_t com_port, int baud_divisor)
 {
+#if (CONFIG_MACH_TYPE != MACH_TYPE_IGEP0020)
        while (!(serial_in(&com_port->lsr) & UART_LSR_TEMT))
                ;
+#endif

Probably better to have your board config file define CONFIG_SYS_NS16550_BROKEN_TEMT or similar (and document the symbol in README).

-Scott

#2 lore raw

PATCH 1/1 serial/ns16550: check UART mode for TEMT value

Quoted 32 lines · Scott Wood
Quoted 31 lines · Javier Martinez Canillas
Quoted 7 lines · Javier Martinez Canillas

But if I'm the only one having this issue maybe is just my hardware behaving
badly. I'll ask other OMAP3 users if they can boot with mainline U-Boot to
confirm this.

Hello,

I tested with an Beagleboard which is another OMAP3 board that has the same PC16550D UART than my OMAP3 IGEPv2 and the board does not hang while waiting for TEMT. I've also tested with an OMAP4 pandaboard and it boots correctly too.

But the hung issue seems to not be an issue with my IGEPv2 board but with any IGEPv2 board since another user reported that his board hangs with the latest U-Boot too. Reverting cb55b332 (serial/ns16550: wait for TEMT before initializing) solved the issue for him.

Will a patch like this be an acceptable solution?

drivers/serial/ns16550.c +0 -0
index bbd91ca..8106a9a 100644
@@ -36,8 +36,10 @@
 
Quoted 11 lines

drivers/serial/ns16550.c line 42

Quoted 6 lines
drivers/serial/ns16550.c +2 -0
 void NS16550_init(NS16550_t com_port, int baud_divisor)
 {
+#if (CONFIG_MACH_TYPE != MACH_TYPE_IGEP0020)
        while (!(serial_in(&com_port->lsr) & UART_LSR_TEMT))
                ;
+#endif

Probably better to have your board config file define CONFIG_SYS_NS16550_BROKEN_TEMT or similar (and document the symbol in README).

To be clear, yes, please, that way. Thanks!

--
Tom

#3 lore raw

PATCH 1/1 serial/ns16550: check UART mode for TEMT value

Quoted 45 lines · Tom Rini
Quoted 32 lines · Scott Wood
Quoted 31 lines · Javier Martinez Canillas
Quoted 7 lines · Javier Martinez Canillas

But if I'm the only one having this issue maybe is just my hardware behaving
badly. I'll ask other OMAP3 users if they can boot with mainline U-Boot to
confirm this.

Hello,

I tested with an Beagleboard which is another OMAP3 board that has the same PC16550D UART than my OMAP3 IGEPv2 and the board does not hang while waiting for TEMT. I've also tested with an OMAP4 pandaboard and it boots correctly too.

But the hung issue seems to not be an issue with my IGEPv2 board but with any IGEPv2 board since another user reported that his board hangs with the latest U-Boot too. Reverting cb55b332 (serial/ns16550: wait for TEMT before initializing) solved the issue for him.

Will a patch like this be an acceptable solution?

drivers/serial/ns16550.c +0 -0
index bbd91ca..8106a9a 100644
@@ -36,8 +36,10 @@
 
Quoted 11 lines

drivers/serial/ns16550.c line 42

Quoted 6 lines
drivers/serial/ns16550.c +2 -0
 void NS16550_init(NS16550_t com_port, int baud_divisor)
 {
+#if (CONFIG_MACH_TYPE != MACH_TYPE_IGEP0020)
        while (!(serial_in(&com_port->lsr) & UART_LSR_TEMT))
                ;
+#endif

Probably better to have your board config file define CONFIG_SYS_NS16550_BROKEN_TEMT or similar (and document the symbol in README).

Quoted 4 lines

To be clear, yes, please, that way. Thanks!

--
Tom

Ok, thanks a lot for the suggestion.

I just sent a patch-set that adds this config option and uses it on IGEP board config file.

Best regards,
Javier