[PATCH 4/5] arm: mvebu: Espressobin: Define console env

Pali Rohár pali at kernel.org
Wed Aug 26 17:10:48 CEST 2020


On Wednesday 26 August 2020 16:43:10 Andre Heider wrote:
> On 26/08/2020 16:10, Pali Rohár wrote:
> > On Wednesday 26 August 2020 16:00:05 Andre Heider wrote:
> > > On 26/08/2020 15:31, Pali Rohár wrote:
> > > > On Wednesday 26 August 2020 15:22:26 Andre Heider wrote:
> > > > > Hi,
> > > > > 
> > > > > On 24/08/2020 16:25, Pali Rohár wrote:
> > > > > > Some distribution bootscripts append console env into boot cmdline.
> > > > > > So define console env correctly to have early console access.
> > > > > > 
> > > > > > Signed-off-by: Pali Rohár <pali at kernel.org>
> > > > > > ---
> > > > > >     include/configs/mvebu_armada-37xx.h | 2 ++
> > > > > >     1 file changed, 2 insertions(+)
> > > > > > 
> > > > > > diff --git a/include/configs/mvebu_armada-37xx.h b/include/configs/mvebu_armada-37xx.h
> > > > > > index 6feceda757..b473072976 100644
> > > > > > --- a/include/configs/mvebu_armada-37xx.h
> > > > > > +++ b/include/configs/mvebu_armada-37xx.h
> > > > > > @@ -17,6 +17,7 @@
> > > > > >     #define CONFIG_SYS_BAUDRATE_TABLE	{ 9600, 19200, 38400, 57600, \
> > > > > >     					  115200, 230400, 460800, 921600 }
> > > > > > +#define CONFIG_DEFAULT_CONSOLE "console=ttyMV0,115200 earlycon=ar3700_uart,0xd0012000"
> > > > > >     /*
> > > > > >      * For booting Linux, the board info and command line data
> > > > > > @@ -99,6 +100,7 @@
> > > > > >     	"kernel_addr=0x7000000\0"	\
> > > > > >     	"kernel_addr_r=0x7000000\0"	\
> > > > > >     	"ramdisk_addr_r=0x8000000\0"	\
> > > > > > +	"console=" CONFIG_DEFAULT_CONSOLE "\0" \
> > > > > >     	BOOTENV
> > > > > >     #endif /* _CONFIG_MVEBU_ARMADA_37XX_H */
> > > > > > 
> > > > > 
> > > > > this breaks booting debian with systemd for me:
> > > > > [    4.632197] systemd-udevd[90]: Starting version 241
> > > > > [    4.639324] systemd-udevd[91]: Failed to create udev control event
> > > > > source: Operation not permitted
> > > > > 
> > > > > "env delete console" and it works again.
> > > > 
> > > > This is really suspicious. Why systemd has problems with control socket
> > > > when console= parameter is specified on boot command line? And if
> > > > console= parameter is problematic on command line, why console output is
> > > > working fine? For me it looks like this variable controls something
> > > > different, not (only) console output. Maybe some bootscript sets
> > > > something more when it see u-boot env ${console} non-empty?
> > > 
> > > It sounds like a bug in systemd, this may be related:
> > > https://github.com/systemd/systemd/issues/13332
> > > 
> > > With ugly workarounds like:
> > > https://github.com/openembedded/openembedded-core/commit/dd6ee0b06cd8df6204cf600050516d15172302ea
> > > 
> > > This is easy for to me to work around, but note that this systemd version is
> > > the one shipping with current debian stable.
> > 
> > But this looks like to be related to command line 'console=null'.
> > 
> > Can you check which parameter is causing problem? console=... or
> > earlycon=... ? Also do you have /dev/ttyMV0 in your system?
> > 
> 
> yup, it's there:
> crw--w---- 1 root tty 253, 0 Aug 26 15:09 /dev/ttyMV0
> 
> But I think it's related to console=null because it ends up as invalid:
> Your patch sets "console" to "console=...".

It is doing same thing as other boards in U-Boot, see:

$ git grep 'define.*CONFIG_DEFAULT_CONSOLE'
include/configs/arndale.h:#define CONFIG_DEFAULT_CONSOLE                "console=ttySAC2,115200n8\0"
include/configs/espresso7420.h:#define CONFIG_DEFAULT_CONSOLE   "console=ttySAC1,115200n8\0"
include/configs/odroid.h:#define CONFIG_DEFAULT_CONSOLE         "console=ttySAC1,115200n8\0"
include/configs/odroid_xu3.h:#define CONFIG_DEFAULT_CONSOLE             "console=ttySAC2,115200n8\0"
include/configs/origen.h:#define CONFIG_DEFAULT_CONSOLE         "console=ttySAC1,115200n8\0"
include/configs/peach-pi.h:#define CONFIG_DEFAULT_CONSOLE       "console=ttySAC1,115200n8\0"
include/configs/peach-pit.h:#define CONFIG_DEFAULT_CONSOLE      "console=ttySAC1,115200n8\0"
include/configs/s5p_goni.h:#define CONFIG_DEFAULT_CONSOLE       "console=ttySAC2,115200n8\0"
include/configs/s5pc210_universal.h:#define CONFIG_DEFAULT_CONSOLE              "console=ttySAC1,115200n8\0"
include/configs/smdk5250.h:#define CONFIG_DEFAULT_CONSOLE               "console=ttySAC1,115200n8\0"
include/configs/smdk5420.h:#define CONFIG_DEFAULT_CONSOLE       "console=ttySAC1,115200n8\0"
include/configs/smdk5420.h:#define CONFIG_DEFAULT_CONSOLE               "console=ttySAC1,115200n8\0"
include/configs/smdkv310.h:#define CONFIG_DEFAULT_CONSOLE               "console=ttySAC2,115200n8\0"
include/configs/snow.h:#define CONFIG_DEFAULT_CONSOLE           "console=ttySAC1,115200n8\0"
include/configs/spring.h:#define CONFIG_DEFAULT_CONSOLE         "console=ttySAC1,115200n8\0"
include/configs/trats.h:#define CONFIG_DEFAULT_CONSOLE          "console=ttySAC2,115200n8\0"
include/configs/trats2.h:#define CONFIG_DEFAULT_CONSOLE         "console=ttySAC2,115200n8\0"

and:

$ git grep 'CONFIG_DEFAULT_CONSOLE' | grep -v ':#define'
include/configs/odroid.h:       "console=" CONFIG_DEFAULT_CONSOLE \
include/configs/odroid_xu3.h:   "console=" CONFIG_DEFAULT_CONSOLE \
include/configs/s5p_goni.h:     "console=" CONFIG_DEFAULT_CONSOLE \
include/configs/s5pc210_universal.h:    "console=" CONFIG_DEFAULT_CONSOLE \
include/configs/trats.h:        "console=" CONFIG_DEFAULT_CONSOLE \
include/configs/trats2.h:       "console=" CONFIG_DEFAULT_CONSOLE \
scripts/config_whitelist.txt:CONFIG_DEFAULT_CONSOLE

> Debian's boot.scr set "bootargs" to "... console=${console}".
> So we end up with with kernel args "console=console=..." :)

So then also other U-Boot boards are broken in Debian...
Where is that Debian's boot.scr file? In which package?

Armbian has 'setenv bootargs "$console ...'
https://dl.armbian.com/espressobin/u-boot/bootscript/boot.cmd

OpenWRT has 'setenv bootargs "${bootargs} ${console}"'
https://github.com/openwrt/openwrt/blob/master/target/linux/mvebu/image/generic-arm64.bootscript

So it seems that all expects that ${console} env contains 'console=tty...'

> So we need to strip one "console=", at least for debian's boot scripts:
> "setenv console ttyMV0,115200 earlycon=ar3700_uart,0xd0012000" and it works
> again, including earlycon.
> 
> Regards,
> Andre


More information about the U-Boot mailing list