From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932271AbcBPNKJ (ORCPT ); Tue, 16 Feb 2016 08:10:09 -0500 Received: from foss.arm.com ([217.140.101.70]:52717 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932086AbcBPNKG (ORCPT ); Tue, 16 Feb 2016 08:10:06 -0500 Message-ID: <56C31F9F.10000@arm.com> Date: Tue, 16 Feb 2016 13:09:51 +0000 From: Vladimir Murzin User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.2.0 MIME-Version: 1.0 To: Andy Shevchenko CC: Arnd Bergmann , Russell King , Greg Kroah-Hartman , Daniel Lezcano , Thomas Gleixner , =?UTF-8?B?VXdlIEtsZWluZS1Lw7ZuaWc=?= , Mark Rutland , Pawel Moll , ijc+devicetree , Kumar Gala , Jiri Slaby , Rob Herring , devicetree , "linux-serial@vger.kernel.org" , "linux-api@vger.kernel.org" , linux-arm Mailing List , "linux-kernel@vger.kernel.org" Subject: Re: [PATCH v3 05/10] serial: mps2-uart: add support for early console References: <1455617295-23736-1-git-send-email-vladimir.murzin@arm.com> <1455617295-23736-6-git-send-email-vladimir.murzin@arm.com> In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 16/02/16 10:36, Andy Shevchenko wrote: > On Tue, Feb 16, 2016 at 12:08 PM, Vladimir Murzin > wrote: >> This adds support early console for MPS2 UART which can be enabled via >> earlycon=mps2,0x40004000 > > >> --- a/drivers/tty/serial/mps2-uart.c >> +++ b/drivers/tty/serial/mps2-uart.c >> @@ -435,6 +435,36 @@ static struct console mps2_uart_console = { >> >> #define MPS2_SERIAL_CONSOLE (&mps2_uart_console) >> >> +static void mps2_early_putchar(struct uart_port *port, int ch) >> +{ >> + >> + while (readb(port->membase + UARTn_STATE) & UARTn_STATE_TX_FULL) >> + cpu_relax(); > > Infinite busy loop? In case of broken hw, yes, but I'm quite unsure how we can help to fix it. Do you have something in mind? > >> + >> + writeb((unsigned char)ch, port->membase + UARTn_DATA); >> +} >> + >> + >> +static void mps2_early_write(struct console *con, const char *s, unsigned n) >> +{ >> + struct earlycon_device *dev = con->data; >> + >> + uart_console_write(&dev->port, s, n, mps2_early_putchar); >> +} >> + >> +static int __init mps2_early_console_setup(struct earlycon_device *device, >> + const char *opt) >> +{ >> + if (!device->port.membase) >> + return -ENODEV; >> + >> + device->con->write = mps2_early_write; >> + >> + return 0; >> +} >> +EARLYCON_DECLARE(mps2, mps2_early_console_setup); >> +OF_EARLYCON_DECLARE(mps2, "arm,mps2-uart", mps2_early_console_setup); > > IIRC Peter Hurley mentioned you don't need to put both anymore, OF_ > one is enough. > I've just tried with OF_ only and seems it works fine. Thanks for pointing at it! Cheers Vladimir