mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: James Hogan <james.hogan@imgtec.com>
To: Michael Ellerman <mpe@ellerman.id.au>
Cc: Palmer Dabbelt <palmer@dabbelt.com>,
	<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
Date: Thu, 13 Jul 2017 13:32:26 +0100	[thread overview]
Message-ID: <20170713123225.GV6973@jhogan-linux.le.imgtec.org> (raw)
In-Reply-To: <87lgnsk0na.fsf@concordia.ellerman.id.au>

[-- Attachment #1: Type: text/plain, Size: 3834 bytes --]

On Thu, Jul 13, 2017 at 09:59:53PM +1000, Michael Ellerman wrote:
> Palmer Dabbelt <palmer@dabbelt.com> writes:
> 
> > On Wed, 12 Jul 2017 04:04:00 PDT (-0700), mpe@ellerman.id.au wrote:
> >> Palmer Dabbelt <palmer@dabbelt.com> writes:
> >>
> >>> On Mon, 10 Jul 2017 23:21:07 PDT (-0700), mpe@ellerman.id.au wrote:
> >>>> Palmer Dabbelt <palmer@dabbelt.com> 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).
> >
> > Doing it that way would require either moving the TTY driver into arch code (it
> > was specifically suggested we move it out) or adding a header file to allow
> > setup_arch() to call into the driver (XEN does this, and we're doing it for our
> > timer, but it seems hacky).
> 
> 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/):

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/metag/kernel/setup.c#n107
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/metag/kernel/setup.c#n234

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/mips/include/asm/cdmm.h#n98
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/mips/kernel/setup.c#n958

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.

Cheers
James

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

  reply	other threads:[~2017-07-13 12:32 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-07-11  1:39 RISC-V Linux Port v5 Palmer Dabbelt
2017-07-11  1:39 ` [PATCH 01/17] lib: Add shared copies of some GCC library routines Palmer Dabbelt
2017-07-11  2:02   ` Stephen Rothwell
2017-07-11  2:03     ` Randy Dunlap
2017-07-11  2:09       ` [patches] " Palmer Dabbelt
2017-07-11  2:13         ` Randy Dunlap
2017-07-11  2:09     ` Palmer Dabbelt
2017-07-11  1:39 ` [PATCH 02/17] pci: Add a generic, weakly-linked pcibios_align_resource Palmer Dabbelt
2017-07-11  1:39 ` [PATCH 03/17] pci: Add a generic, weakly-linked pcibios_fixup_bus Palmer Dabbelt
2017-07-11 18:51   ` Luis R. Rodriguez
2017-07-11  1:39 ` [PATCH 04/17] MAINTAINERS: Add RISC-V Palmer Dabbelt
2017-07-11  1:39 ` [PATCH 05/17] clocksource: New RISC-V SBI timer driver Palmer Dabbelt
2017-07-31 11:00   ` Daniel Lezcano
2017-08-01  1:14     ` Palmer Dabbelt
2017-07-11  1:39 ` [PATCH 06/17] irqchip: RISC-V Local Interrupt Controller Driver Palmer Dabbelt
2017-07-11  1:39 ` [PATCH 07/17] irqchip: New RISC-V PLIC Driver Palmer Dabbelt
2017-07-11  1:39 ` [PATCH 08/17] tty: New RISC-V SBI console driver Palmer Dabbelt
2017-07-11  6:21   ` Michael Ellerman
2017-07-11 16:22     ` Palmer Dabbelt
2017-07-12 11:04       ` Michael Ellerman
2017-07-12 16:24         ` Palmer Dabbelt
2017-07-13 11:59           ` Michael Ellerman
2017-07-13 12:32             ` James Hogan [this message]
2017-07-13 21:50               ` Palmer Dabbelt
2017-07-14  5:07                 ` Michael Ellerman
2017-07-11  1:39 ` [PATCH 09/17] RISC-V: Init and Halt Code Palmer Dabbelt
2017-07-11  1:39 ` [PATCH 10/17] RISC-V: Atomic and Locking Code Palmer Dabbelt
2017-07-11  1:39 ` [PATCH 11/17] RISC-V: Generic library routines and assembly Palmer Dabbelt
2017-07-11  1:39 ` [PATCH 12/17] RISC-V: ELF and module implementation Palmer Dabbelt
2017-07-11  1:39 ` [PATCH 13/17] RISC-V: Task implementation Palmer Dabbelt
2017-07-11  1:39 ` [PATCH 14/17] RISC-V: Device, timer, IRQs, and the SBI Palmer Dabbelt
2017-07-11  1:39 ` [PATCH 15/17] RISC-V: Paging and MMU Palmer Dabbelt
2017-07-11  1:39 ` [PATCH 16/17] RISC-V: User-facing API Palmer Dabbelt
2017-07-11 13:39   ` Christoph Hellwig
2017-07-11 14:01     ` James Hogan
2017-07-11 17:28       ` [patches] " Palmer Dabbelt
2017-07-11  1:39 ` [PATCH 17/17] RISC-V: Build Infastructure Palmer Dabbelt
2017-07-11  6:31   ` Michael Ellerman
2017-07-11 16:22     ` Palmer Dabbelt
2017-07-12 10:44       ` Michael Ellerman
2017-07-11 18:39 ` RISC-V Linux Port v5 Luis R. Rodriguez
2017-07-11 19:50   ` Palmer Dabbelt
2017-07-12  1:31 RISC-V Linux Port v6 Palmer Dabbelt
2017-07-12  1:31 ` [PATCH 08/17] tty: New RISC-V SBI console driver Palmer Dabbelt

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=20170713123225.GV6973@jhogan-linux.le.imgtec.org \
    --to=james.hogan@imgtec.com \
    --cc=akpm@linux-foundation.org \
    --cc=albert@sifive.com \
    --cc=bart.vanassche@sandisk.com \
    --cc=boqun.feng@gmail.com \
    --cc=daniel.lezcano@linaro.org \
    --cc=daniel.vetter@ffwll.ch \
    --cc=davem@davemloft.net \
    --cc=dledford@redhat.com \
    --cc=fweisbec@gmail.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=heiko.carstens@de.ibm.com \
    --cc=jason@lakedaemon.net \
    --cc=jslaby@suse.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@roeck-us.net \
    --cc=marc.zyngier@arm.com \
    --cc=mcgrof@kernel.org \
    --cc=mchehab@kernel.org \
    --cc=mingo@redhat.com \
    --cc=mmarek@suse.com \
    --cc=mpe@ellerman.id.au \
    --cc=msalter@redhat.com \
    --cc=nicolas.dichtel@6wind.com \
    --cc=palmer@dabbelt.com \
    --cc=patches@groups.riscv.org \
    --cc=paul.gortmaker@windriver.com \
    --cc=peterz@infradead.org \
    --cc=schwidefsky@de.ibm.com \
    --cc=sfr@canb.auug.org.au \
    --cc=sstabellini@kernel.org \
    --cc=tglx@linutronix.de \
    --cc=viro@zeniv.linux.org.uk \
    --cc=will.deacon@arm.com \
    --cc=yamada.masahiro@socionext.com \
    /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

Powered by JetHome