All of lore.kernel.org
 help / color / mirror / Atom feed
From: James Hogan <james.hogan@imgtec.com>
To: Tim Kryger <tim.kryger@linaro.org>
Cc: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Heikki Krogerus <heikki.krogerus@linux.intel.com>,
	linux-serial@vger.kernel.org,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	Patch Tracking <patches@linaro.org>,
	Thomas Petazzoni <thomas.petazzoni@free-electrons.com>,
	Gregory Clement <gregory.clement@free-electrons.com>,
	Lior Amsalem <alior@marvell.com>,
	Jason Cooper <jason@lakedaemon.net>,
	ARM Kernel List <linux-arm-kernel@lists.infradead.org>
Subject: Re: [PATCH v2] serial: 8250_dw: Improve unwritable LCR workaround
Date: Fri, 06 Dec 2013 16:59:16 -0800 (PST)	[thread overview]
Message-ID: <3010367.6CxxZ6Dpea@radagast> (raw)
In-Reply-To: <CAAYSxhpR664Od7AaWZrX0rE=iDUHo0h+4=uY=gvkFps4Hz4aew@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 2587 bytes --]

On Friday 06 December 2013 16:31:38 Tim Kryger wrote:
> On Fri, Dec 6, 2013 at 3:51 PM, James Hogan <james.hogan@imgtec.com> wrote:
> > On Friday 06 December 2013 23:29:02 James Hogan wrote:
> >> So it looks like the LCR does always change immediately for me in this
> >> case
> >> (obviously it hasn't hit the BUSY case), but not all the bits can be
> >> written. In particular bit 5 and bit 7 at the least. If I do this (sorry
> >> for whitespace munging):
> >> 
> >> diff --git a/drivers/tty/serial/8250/8250_dw.c
> >> b/drivers/tty/serial/8250/8250_dw.c
> >> index 4658e3e..722d448 100644
> >> --- a/drivers/tty/serial/8250/8250_dw.c
> >> +++ b/drivers/tty/serial/8250/8250_dw.c
> >> @@ -96,7 +96,7 @@ static void dw8250_serial_out(struct uart_port *p, int
> >> offset, int value)
> >> 
> >>       if (offset == UART_LCR) {
> >>       
> >>               int tries = 1000;
> >>               while (tries--) {
> >> 
> >> -                     if (value == p->serial_in(p, UART_LCR))
> >> +                     if (value & ~0xa0 == p->serial_in(p, UART_LCR) &
> >> ~0xa0)>> 
> >>                               return;
> >>                       
> >>                       dw8250_force_idle(p);
> >>                       writeb(value, p->membase + (UART_LCR <<
> >>                       p->regshift));
> >> 
> >> @@ -132,7 +132,7 @@ static void dw8250_serial_out32(struct uart_port *p,
> >> int offset, int value)
> >> 
> >>       if (offset == UART_LCR) {
> >>       
> >>               int tries = 1000;
> >>               while (tries--) {
> >> 
> >> -                     if (value == p->serial_in(p, UART_LCR))
> >> +                     if (value & ~0xa0 == p->serial_in(p, UART_LCR) &
> >> ~0xa0)> 
> > My appologies, that should have had some more brackets (I should have
> > retested after cleaning up my debugging). I.e.
> > +                       if ((value & ~0xa0) == (p->serial_in(p, UART_LCR)
> > & ~0xa0))
> > 
> > Cheers
> > James
> 
> James,
> 
> Thanks for the information.  This is really helpful.
> 
> You are right about bit 5 being a problem.  Its behavior differs
> between IP versions 3.00a and 3.14c per the docs.
> 
> As for bit 7, when it doesn't change this indicates the UART was busy
> and we need to do the workaround.
> 
> Would you mind testing it again using a mask of ~0x20?

It appears to work with ~0x20 too, and the workaround isn't getting hit (only 
tested boot and logging in - nothing fancy). I think having the printks in 
this code with the console directed at the serial must have caused 
resursion/busy problems somehow.

Cheers
James

[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

WARNING: multiple messages have this Message-ID (diff)
From: james.hogan@imgtec.com (James Hogan)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2] serial: 8250_dw: Improve unwritable LCR workaround
Date: Fri, 06 Dec 2013 16:59:16 -0800 (PST)	[thread overview]
Message-ID: <3010367.6CxxZ6Dpea@radagast> (raw)
In-Reply-To: <CAAYSxhpR664Od7AaWZrX0rE=iDUHo0h+4=uY=gvkFps4Hz4aew@mail.gmail.com>

On Friday 06 December 2013 16:31:38 Tim Kryger wrote:
> On Fri, Dec 6, 2013 at 3:51 PM, James Hogan <james.hogan@imgtec.com> wrote:
> > On Friday 06 December 2013 23:29:02 James Hogan wrote:
> >> So it looks like the LCR does always change immediately for me in this
> >> case
> >> (obviously it hasn't hit the BUSY case), but not all the bits can be
> >> written. In particular bit 5 and bit 7 at the least. If I do this (sorry
> >> for whitespace munging):
> >> 
> >> diff --git a/drivers/tty/serial/8250/8250_dw.c
> >> b/drivers/tty/serial/8250/8250_dw.c
> >> index 4658e3e..722d448 100644
> >> --- a/drivers/tty/serial/8250/8250_dw.c
> >> +++ b/drivers/tty/serial/8250/8250_dw.c
> >> @@ -96,7 +96,7 @@ static void dw8250_serial_out(struct uart_port *p, int
> >> offset, int value)
> >> 
> >>       if (offset == UART_LCR) {
> >>       
> >>               int tries = 1000;
> >>               while (tries--) {
> >> 
> >> -                     if (value == p->serial_in(p, UART_LCR))
> >> +                     if (value & ~0xa0 == p->serial_in(p, UART_LCR) &
> >> ~0xa0)>> 
> >>                               return;
> >>                       
> >>                       dw8250_force_idle(p);
> >>                       writeb(value, p->membase + (UART_LCR <<
> >>                       p->regshift));
> >> 
> >> @@ -132,7 +132,7 @@ static void dw8250_serial_out32(struct uart_port *p,
> >> int offset, int value)
> >> 
> >>       if (offset == UART_LCR) {
> >>       
> >>               int tries = 1000;
> >>               while (tries--) {
> >> 
> >> -                     if (value == p->serial_in(p, UART_LCR))
> >> +                     if (value & ~0xa0 == p->serial_in(p, UART_LCR) &
> >> ~0xa0)> 
> > My appologies, that should have had some more brackets (I should have
> > retested after cleaning up my debugging). I.e.
> > +                       if ((value & ~0xa0) == (p->serial_in(p, UART_LCR)
> > & ~0xa0))
> > 
> > Cheers
> > James
> 
> James,
> 
> Thanks for the information.  This is really helpful.
> 
> You are right about bit 5 being a problem.  Its behavior differs
> between IP versions 3.00a and 3.14c per the docs.
> 
> As for bit 7, when it doesn't change this indicates the UART was busy
> and we need to do the workaround.
> 
> Would you mind testing it again using a mask of ~0x20?

It appears to work with ~0x20 too, and the workaround isn't getting hit (only 
tested boot and logging in - nothing fancy). I think having the printks in 
this code with the console directed at the serial must have caused 
resursion/busy problems somehow.

Cheers
James
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20131206/50eb5703/attachment.sig>

  reply	other threads:[~2013-12-07  0:59 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-10-01 17:18 [PATCH v2] serial: 8250_dw: Improve unwritable LCR workaround Tim Kryger
2013-10-02  9:47 ` Heikki Krogerus
2013-11-26 18:36 ` Ezequiel Garcia
2013-11-26 18:36   ` Ezequiel Garcia
2013-11-26 18:36   ` Ezequiel Garcia
2013-11-26 23:03   ` Tim Kryger
2013-11-26 23:03     ` Tim Kryger
2013-11-26 23:03     ` Tim Kryger
2013-11-27 18:54     ` Ezequiel Garcia
2013-11-27 18:54       ` Ezequiel Garcia
2013-11-27 18:54       ` Ezequiel Garcia
2013-11-28  2:46       ` Tim Kryger
2013-11-28  2:46         ` Tim Kryger
2013-11-28  8:30       ` Thomas Petazzoni
2013-11-28  8:30         ` Thomas Petazzoni
2013-11-28 19:47         ` Ezequiel Garcia
2013-11-28 19:47           ` Ezequiel Garcia
2013-11-28 19:47           ` Ezequiel Garcia
2013-11-28 19:53           ` Ezequiel Garcia
2013-11-28 19:53             ` Ezequiel Garcia
2013-11-28 19:53             ` Ezequiel Garcia
2013-12-04 13:01             ` Ezequiel Garcia
2013-12-04 13:01               ` Ezequiel Garcia
2013-12-04 13:01               ` Ezequiel Garcia
2013-12-04 18:56               ` Tim Kryger
2013-12-04 18:56                 ` Tim Kryger
2013-12-04 18:56                 ` Tim Kryger
2013-12-06 23:29   ` James Hogan
2013-12-06 23:29     ` James Hogan
2013-12-06 23:51     ` James Hogan
2013-12-06 23:51       ` James Hogan
2013-12-07  0:31       ` Tim Kryger
2013-12-07  0:31         ` Tim Kryger
2013-12-07  0:59         ` James Hogan [this message]
2013-12-07  0:59           ` James Hogan
2013-12-10  0:42           ` Tim Kryger
2013-12-10  0:42             ` Tim Kryger
2013-12-10 12:11             ` Ezequiel Garcia
2013-12-10 12:11               ` Ezequiel Garcia
2013-12-10 12:11               ` Ezequiel Garcia
2013-12-10 22:48               ` James Hogan
2013-12-10 22:48                 ` James Hogan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=3010367.6CxxZ6Dpea@radagast \
    --to=james.hogan@imgtec.com \
    --cc=alior@marvell.com \
    --cc=ezequiel.garcia@free-electrons.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=gregory.clement@free-electrons.com \
    --cc=heikki.krogerus@linux.intel.com \
    --cc=jason@lakedaemon.net \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-serial@vger.kernel.org \
    --cc=patches@linaro.org \
    --cc=thomas.petazzoni@free-electrons.com \
    --cc=tim.kryger@linaro.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.