From: Peter Hurley <peter@hurleysoftware.com>
To: Matthias Schiffer <mschiffer@universe-factory.net>
Cc: Ralf Baechle <ralf@linux-mips.org>,
gregkh@linuxfoundation.org, jslaby@suse.com,
linux-mips@linux-mips.org, linux-serial@vger.kernel.org,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: Nonterministic hang during bootconsole/console handover on ath79
Date: Wed, 23 Mar 2016 17:44:26 -0700 [thread overview]
Message-ID: <56F3386A.5040100@hurleysoftware.com> (raw)
In-Reply-To: <56F2D523.6000405@universe-factory.net>
Hi Matthias,
On 03/23/2016 10:40 AM, Matthias Schiffer wrote:
> On 03/22/2016 04:38 PM, Peter Hurley wrote:
>> On 03/22/2016 06:07 AM, Matthias Schiffer wrote:
>>> I've tried your patch and I can't reproduce the issue anymore with it; I
>>> have no idea if this actually has to do something with the issue, or the
>>> change of the code path just hid the bug again.
>>>
>>> Regarding your other mail: with "small change", I was not talking about
>>> adding an additional printk; as mentioned, even changing the numbers in
>>> UTS_VERSION can hide the issue. I diffed a working and a broken kernel
>>> image, and the UTS_VERSION is really the only difference. I have no idea
>>> how to explain this.
>>
>> If _any_ change may hide the problem, that will make it impossible
>> to determine if any attempted fix actually works, regardless of what
>> debugging method you use.
>>
>> FWIW, you could still use the boot console to debug the problem by
>> disabling the regular command-line console.
>>
>> Regards,
>> Peter Hurley
>
> Hi,
> it seems Peter was on the right track. With some help from Ralf, I was able
> to narrow down the issue a bit, and I'm fairly sure the hang happens
> somewhere in autoconfig().
>
> autoconfig_16550a() is doing all kinds of weird checks to detect different
> hardware by writing a lot of register values which are documented as
> reserved in the AR7242 datasheet (there's a leaked version going around
> that can be easily googled...), no idea if any of those are problematic.
> Just setting UPF_FIXED_TYPE as suggested by Peter would avoid that code
> altogether.
That's just a debugging patch and not appropriate for permanent use,
the reason being that this uart is _not_ 16550 compatible (or even 16450
compatible).
The three options for 8250 driver support for this part are:
1. Similar to the debugging patch, set UPF_FIXED_TYPE but set port type
to PORT_8250 instead. This will lose FIFO support so 115K won't be
possible and likely neither will 38400.
2. Set UPF_FIXED_TYPE but define a new PORT_* value and add support for
this PORT_* value to uart_config array, uapi headers, and anywhere
the scratch register is used.
3. As with 2. above but don't set UPF_FIXED_TYPE and add a probe function
that detects ports of this type to autoconfig(). I don't recommend this
method.
This requirement is independent of fixing prom_putchar_ar71xx().
> That being said, I found another minimal change that seems to fix the
> issue: prom_putchar_ar71xx() in arch/mips/ath79/early_printk.c only waits
> for UART_LSR_THRE, while serial_putc() in
> drivers/tty/serial/8250/8250_early.c waits for (UART_LSR_TEMT |
> UART_LSR_THRE). Adjusting arch/mips/ath79/early_printk.c in the same way
> makes the hangs go away.
Go ahead and do this as well.
> Maybe the AR7242 doesn't like its serial config
> registers being poked while there's still something in the FIFO? Waiting
> for UART_LSR_TEMT seems like a good idea anyways to ensure that all
> characters have been printed before autoconfig() starts taking things
> apart.
I agree.
> (Why do these two versions of essentially the same code exist anyways?)
earlyprintk command-line parameter is arch-specific and predates
the arch-independent earlycon support.
earlycon requires the arch to either supply a fixmap for the uart i/o address
or ioremap() must work by parse_early_param(); note how the mmio in
arch/mips/ath79/early_printk.c accesses the mmio space @ KSEG1ADDR(uart base addr)?
Can't do that in arch-independent earlycon code.
Regards,
Peter Hurley
next prev parent reply other threads:[~2016-03-24 0:44 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-21 23:02 Nonterministic hang during bootconsole/console handover on ath79 Matthias Schiffer
2016-03-21 23:08 ` Greg KH
2016-03-22 0:52 ` Matthias Schiffer
2016-03-22 2:51 ` Peter Hurley
2016-03-22 2:44 ` Peter Hurley
2016-03-22 13:07 ` Matthias Schiffer
2016-03-22 15:38 ` Peter Hurley
2016-03-23 17:40 ` Matthias Schiffer
2016-03-24 0:44 ` Peter Hurley [this message]
2016-03-24 2:09 ` Matthias Schiffer
2016-03-24 3:17 ` Peter Hurley
2016-03-25 12:59 ` Gabor Juhos
2016-03-25 15:24 ` Peter Hurley
2016-03-22 5:40 ` Antony Pavlov
2016-03-22 9:50 ` Matthias Schiffer
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=56F3386A.5040100@hurleysoftware.com \
--to=peter@hurleysoftware.com \
--cc=gregkh@linuxfoundation.org \
--cc=jslaby@suse.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mips@linux-mips.org \
--cc=linux-serial@vger.kernel.org \
--cc=mschiffer@universe-factory.net \
--cc=ralf@linux-mips.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.