From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751387AbdGNFH3 (ORCPT ); Fri, 14 Jul 2017 01:07:29 -0400 Received: from ozlabs.org ([103.22.144.67]:38919 "EHLO ozlabs.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750819AbdGNFH2 (ORCPT ); Fri, 14 Jul 2017 01:07:28 -0400 From: Michael Ellerman To: Palmer Dabbelt , james.hogan@imgtec.com 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, 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: Fri, 14 Jul 2017 15:07:23 +1000 Message-ID: <87tw2fobck.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 Thu, 13 Jul 2017 05:32:26 PDT (-0700), james.hogan@imgtec.com wrote: >> On Thu, Jul 13, 2017 at 09:59:53PM +1000, Michael Ellerman wrote: >>> >>> I think it's fairly uncontroversial to have the early console in arch >>> code, especially in a case like this where there's no code shared >>> between the console and the TTY driver. But maybe someone will prove me >>> wrong. >>> >>> Doing it the other way is not really hacky IMO, you can just have an >>> extern for the early console in one of your asm headers. >> >> For reference both metag and mips do something like this for JTAG based >> consoles (with drivers both residing in drivers/tty/): ... >> >> Its not all that pretty but it gets you console output that much >> earlier and is a fairly special case, so I think its worth it. > > If someone else is doing it, then it's good enough for me :). How does this > look? > > diff --git a/arch/riscv/kernel/setup.c b/arch/riscv/kernel/setup.c > index 319fad96f537..148fd0dc414b 100644 > --- a/arch/riscv/kernel/setup.c > +++ b/arch/riscv/kernel/setup.c > @@ -59,6 +59,14 @@ unsigned long pfn_base; > /* The lucky hart to first increment this variable will boot the other cores */ > atomic_t hart_lottery; > > +#if defined(CONFIG_HVC_RISCV_SBI) && defined(CONFIG_EARLY_PRINTK) ^ This is always true because you said so in your Kconfig. > +/* > + * The SBI's early console lives in hvc_riscv_sbi.c, but we want very early > + * access > + */ > +extern struct console riscv_sbi_early_console_dev; > +#endif I would have put it in one of your arch headers, so that the hvc driver can include it too. Personally I tend not to bother #ifdef'ing every extern declaration, but there are arguments both ways. > #ifdef CONFIG_BLK_DEV_INITRD > static void __init setup_initrd(void) > { > @@ -203,6 +211,13 @@ static void __init setup_bootmem(void) > > void __init setup_arch(char **cmdline_p) > { > +#if defined(CONFIG_TTY_RISCV_SBI) && defined(CONFIG_EARLY_PRINTK) ^ HVC > + if (likely(early_console == NULL)) { I don't think you need to check. You're the boss of early_console at this point in boot. > + early_console = &riscv_sbi_early_console; > + register_console(early_console); > + } > +#endif > + > #ifdef CONFIG_CMDLINE_BOOL > #ifdef CONFIG_CMDLINE_OVERRIDE > strlcpy(boot_command_line, builtin_cmdline, COMMAND_LINE_SIZE); cheers