From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756648AbdGLLEG (ORCPT ); Wed, 12 Jul 2017 07:04:06 -0400 Received: from ozlabs.org ([103.22.144.67]:50417 "EHLO ozlabs.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756571AbdGLLEF (ORCPT ); Wed, 12 Jul 2017 07:04:05 -0400 From: Michael Ellerman To: Palmer Dabbelt Cc: yamada.masahiro@socionext.com, mmarek@suse.com, will.deacon@arm.com, peterz@infradead.org, boqun.feng@gmail.com, mingo@redhat.com, daniel.lezcano@linaro.org, tglx@linutronix.de, jason@lakedaemon.net, marc.zyngier@arm.com, gregkh@linuxfoundation.org, jslaby@suse.com, davem@davemloft.net, mchehab@kernel.org, sfr@canb.auug.org.au, fweisbec@gmail.com, viro@zeniv.linux.org.uk, mcgrof@kernel.org, dledford@redhat.com, bart.vanassche@sandisk.com, sstabellini@kernel.org, daniel.vetter@ffwll.ch, msalter@redhat.com, nicolas.dichtel@6wind.com, james.hogan@imgtec.com, paul.gortmaker@windriver.com, linux@roeck-us.net, heiko.carstens@de.ibm.com, schwidefsky@de.ibm.com, linux-kernel@vger.kernel.org, patches@groups.riscv.org, akpm@linux-foundation.org, albert@sifive.com Subject: Re: [PATCH 08/17] tty: New RISC-V SBI console driver In-Reply-To: References: User-Agent: Notmuch/0.21 (https://notmuchmail.org) Date: Wed, 12 Jul 2017 21:04:00 +1000 Message-ID: <87fue1lxwf.fsf@concordia.ellerman.id.au> MIME-Version: 1.0 Content-Type: text/plain Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Palmer Dabbelt writes: > On Mon, 10 Jul 2017 23:21:07 PDT (-0700), mpe@ellerman.id.au wrote: >> Palmer Dabbelt writes: >>> >> ... >>> +#ifdef CONFIG_EARLY_PRINTK >>> +static void sbi_console_write(struct console *co, const char *buf, >>> + unsigned int n) >>> +{ >>> + int i; >>> + >>> + for (i = 0; i < n; ++i) { >>> + if (buf[i] == '\n') >>> + sbi_console_putchar('\r'); >>> + sbi_console_putchar(buf[i]); >>> + } >>> +} >>> + >>> +static struct console early_console_dev __initdata = { >>> + .name = "early", >>> + .write = sbi_console_write, >>> + .flags = CON_PRINTBUFFER | CON_BOOT, >> >> AFAICS you could add CON_ANYTIME here, which would mean this console >> would print output before the CPU is online. >> >> I think it doesn't currently matter because you call parse_early_param() >> from setup_arch(), at which point the boot CPU has been marked online. >> >> But if this console can actually work earlier then you might be better >> off just registering it unconditionally very early. > > That seems like a good idea. I'm not familiar with how all this works, but > from my understanding of this early_initcall() should be sufficient to make > this work? The only other driver that sets CON_ANYTIME and supports > EARLY_PRINTK is hvc_xen, but that installs a header to let init code register > the console directly. The early_initcall mechanism seems cleaner if it does > the right thing. Unfortunately early_initcall is not very "early" :) It's earlier than all the other initcalls, but it's late compared to most of the arch boot code. The early_param() will work better, ie. register the console earlier and increase the chance of you getting output from an early crash, than early_initcall. But it requires you to put earlyprintk on the command line. The best option is to just register the console as early as you can, ie. as soon as it can give you output. So somewhere in your setup_arch(), or even earlier (I haven't read your boot code). cheers