linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Florian Fainelli <f.fainelli@gmail.com>
To: Guenter Roeck <linux@roeck-us.net>
Cc: arnd@arndb.de, Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	linux-kernel@vger.kernel.org, benh@kernel.crashing.org,
	paulus@samba.org, mpe@ellerman.id.au,
	linuxppc-dev@lists.ozlabs.org
Subject: Re: [PATCH] serial: 8250: Default SERIAL_OF_PLATFORM to SERIAL_8250
Date: Mon, 26 Nov 2018 16:08:26 -0800	[thread overview]
Message-ID: <5a13dfac-adcb-b0b2-0114-90f9d1eabe8b@gmail.com> (raw)
In-Reply-To: <20181123182023.GA10080@roeck-us.net>

+PPC folks

On 11/23/18 10:20 AM, Guenter Roeck wrote:
> On Mon, Nov 19, 2018 at 12:50:50PM -0800, Guenter Roeck wrote:
>> On Mon, Nov 19, 2018 at 10:44:30AM -0800, Florian Fainelli wrote:
>>> On 11/15/18 5:16 PM, Guenter Roeck wrote:
>>>> On Thu, Nov 15, 2018 at 11:48:20AM -0800, Florian Fainelli wrote:
>>>>>
>>>>> OK, would you mind testing this below? It seems to me that 8250_of.c is
>>>>> incompatible with arch/powerpc/kernel/legacy_serial.c and that is what
>>>>> is causing the issue here.
>>>>>
>>>>> diff --git a/drivers/tty/serial/8250/Kconfig
>>>>> b/drivers/tty/serial/8250/Kconfig
>>>>> index d7737dca0e48..21cb14cbd34a 100644
>>>>> --- a/drivers/tty/serial/8250/Kconfig
>>>>> +++ b/drivers/tty/serial/8250/Kconfig
>>>>> @@ -483,7 +483,7 @@ config SERIAL_8250_PXA
>>>>>
>>>>>  config SERIAL_OF_PLATFORM
>>>>>         tristate "Devicetree based probing for 8250 ports"
>>>>> -       depends on SERIAL_8250 && OF
>>>>> +       depends on SERIAL_8250 && OF && !(PPC && PPC_UDBG_16550)
>>>>>         default SERIAL_8250
>>>>>         help
>>>>>           This option is used for all 8250 compatible serial ports that
>>>>
>>>> 44x/virtex5_defconfig has both PPC_UDBG_16550 and SERIAL_OF_PLATFORM enabled
>>>> and fails to boot (or display anything on the console) with this patch applied.
>>>
>>> Thanks for trying, can you either share or provide a link to the mpc85xx
>>> and ml507 qemu command lines that you use? I spent a good chunk of my
>>> time trying to get a kernel to boot but has failed so far.
>>>
>>
> 
> Any update ? I still see the boot failures in next-20181123.

Yes, took most of last week's off sorry for the delay. I have finally
been able to boot a kernel using your instructions, thanks. The problem
is the following call chain:

of_platform_serial_probe()
 -> serial8250_register_8250_port()
    -> up->port.uartclk == 0, return -EINVAL
	-> irq_dispose_mapping()

and then we basically unwind what we just did with
of_platform_serial_probe() including disabling the UART's IRQ, comment
out the irq_dispose_mapping() and you will have a functional console
again. 8250_of.c is clearly not a full replacement for legacy_serial.c
(that was a first attempt), so we need to keep that code around. Making
the depends even more conditional also does not sound too appealing,
because while we have identified mpc85xx as being problematic, who knows
about other platforms. So the best I have that does not involve a revert
is this below.

Ben, Michael, would that sound reasonable to you? It seems to me that
there is a million ways to shoot the legacy_serial 8250 registration in
the foot in any cases, and having CONFIG_SERIAL_OF_PLATFORM just made it
painfully obvious.

diff --git a/arch/powerpc/kernel/legacy_serial.c
b/arch/powerpc/kernel/legacy_serial.c
index 33b34a58fc62..31353a27d714 100644
--- a/arch/powerpc/kernel/legacy_serial.c
+++ b/arch/powerpc/kernel/legacy_serial.c
@@ -16,7 +16,7 @@
 #include <asm/pci-bridge.h>
 #include <asm/ppc-pci.h>

-#undef DEBUG
+#define DEBUG

 #ifdef DEBUG
 #define DBG(fmt...) do { printk(fmt); } while(0)
@@ -70,6 +70,29 @@ static void tsi_serial_out(struct uart_port *p, int
offset, int value)
                writeb(value, p->membase + offset);
 }

+#ifdef CONFIG_SERIAL_OF_PLATFORM
+static struct property uart_prop = {
+       .value = "disabled",
+       .name = "status",
+       .length = strlen("disabled"),
+};
+
+static void __init disable_uart_node(struct device_node *np)
+{
+       /* To avoid having 8250_of.c attempt to register the same device
+        * and failing to do, and calling irq_dispose_mapping(), just
+        * disable the device_node for now.
+        */
+       of_update_property(np, &uart_prop);
+       pr_info("%s: disabled UART node\n", __func__);
+}
+#else
+static inline int disable_uart_node(struct device_node *np)
+{
+       return 0;
+}
+#endif
+
 static int __init add_legacy_port(struct device_node *np, int want_index,
                                  int iotype, phys_addr_t base,
                                  phys_addr_t taddr, unsigned long irq,
@@ -80,6 +103,8 @@ static int __init add_legacy_port(struct device_node
*np, int want_index,
        u32 shift = 0;
        int index;

+       disable_uart_node(np);
+
        /* get clock freq. if present */
        clk = of_get_property(np, "clock-frequency", NULL);
        if (clk && *clk)



-- 
Florian

  reply	other threads:[~2018-11-27  0:08 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-11-15  1:11 [PATCH] serial: 8250: Default SERIAL_OF_PLATFORM to SERIAL_8250 Guenter Roeck
2018-11-15  3:56 ` Florian Fainelli
2018-11-15  5:36   ` Guenter Roeck
2018-11-15 17:19     ` Florian Fainelli
2018-11-15  5:38   ` Guenter Roeck
2018-11-15 17:19     ` Florian Fainelli
2018-11-15 17:25       ` Guenter Roeck
2018-11-15 19:48         ` Florian Fainelli
2018-11-16  1:16           ` Guenter Roeck
2018-11-19 18:44             ` Florian Fainelli
2018-11-19 20:50               ` Guenter Roeck
2018-11-23 18:20                 ` Guenter Roeck
2018-11-27  0:08                   ` Florian Fainelli [this message]
2018-12-05  5:47                     ` Michael Ellerman
2018-12-05 22:40                       ` Florian Fainelli
2018-12-20 15:21 ` Greg Kroah-Hartman
2018-12-20 17:38   ` Guenter Roeck
2018-12-21  4:27     ` [PATCH] Revert "serial: 8250: Default SERIAL_OF_PLATFORM to SERIAL_8250" Florian Fainelli
2018-12-21  4:28     ` [PATCH] serial: 8250: Default SERIAL_OF_PLATFORM to SERIAL_8250 Florian Fainelli
  -- strict thread matches above, loose matches on Subject: below --
2018-11-01 18:26 Florian Fainelli

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=5a13dfac-adcb-b0b2-0114-90f9d1eabe8b@gmail.com \
    --to=f.fainelli@gmail.com \
    --cc=arnd@arndb.de \
    --cc=benh@kernel.crashing.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@roeck-us.net \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=mpe@ellerman.id.au \
    --cc=paulus@samba.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).