[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH for-4.13] xen/arm: Add Skeleton for using configuring early printk using Kconfig



On Tue, 1 Oct 2019, Julien Grall wrote:
> Hi Stefano,
> 
> On 10/1/19 8:33 PM, Stefano Stabellini wrote:
> > On Fri, 13 Sep 2019, Julien Grall wrote:
> > > At the moment, early printk can only be configured on the make command
> > > line. It is not very handy because a user has to remove the option
> > > everytime it is using another command other than compiling the
> > > hypervisor.
> > > 
> > > Furthermore, early printk is one of the few odds one that are not using
> > > Kconfig.
> > > 
> > > So this is about time to move it to Kconfig. For now, a skeleton is
> > > added with one example based on Cadence UART. Follow-up will continue to
> > > convert all the options to Kconfig.
> > > 
> > > Because Kconfig will prefix all the config by CONFIG_, it is necessary
> > > to adapt the define within the code.
> > > 
> > > Signed-off-by: Julien Grall <julien.grall@xxxxxxx>
> > > 
> > > ---
> > > 
> > > I have sent it as RFC because this is not complete. I will convert the
> > > rest once we agree the approach is correct.
> > > ---
> > >   xen/Kconfig.debug                  |  2 ++
> > >   xen/arch/arm/Kconfig.debug         | 40
> > > ++++++++++++++++++++++++++++++++++++++
> > >   xen/arch/arm/Rules.mk              |  5 ++---
> > >   xen/arch/arm/arm32/head.S          |  8 ++++----
> > >   xen/arch/arm/arm64/debug.S         |  4 ++--
> > >   xen/arch/arm/arm64/head.S          |  8 ++++----
> > >   xen/arch/x86/Kconfig.debug         |  0
> > >   xen/include/asm-arm/early_printk.h |  2 +-
> > >   8 files changed, 55 insertions(+), 14 deletions(-)
> > >   create mode 100644 xen/arch/arm/Kconfig.debug
> > >   create mode 100644 xen/arch/x86/Kconfig.debug
> > > 
> > > diff --git a/xen/Kconfig.debug b/xen/Kconfig.debug
> > > index e10e314e25..d0806dba32 100644
> > > --- a/xen/Kconfig.debug
> > > +++ b/xen/Kconfig.debug
> > > @@ -112,6 +112,8 @@ config XMEM_POOL_POISON
> > >             Poison free blocks with 0xAA bytes and verify them when a 
> > > block is
> > >             allocated in order to spot use-after-free issues.
> > >   +source "arch/$SRCARCH/Kconfig.debug"
> > > +
> > >   endif # DEBUG || EXPERT
> > >     endmenu
> > > diff --git a/xen/arch/arm/Kconfig.debug b/xen/arch/arm/Kconfig.debug
> > > new file mode 100644
> > > index 0000000000..bc3b622695
> > > --- /dev/null
> > > +++ b/xen/arch/arm/Kconfig.debug
> > > @@ -0,0 +1,40 @@
> > > +choice
> > > + prompt "Enable early printk"
> > > +
> > > + optional
> > > + config EARLY_PRINTK_ZYNQMP
> > > +         bool "Enable early printk on Xilinx ZynQMP"
> > > +         select EARLY_UART_CADENCE
> > > +         help
> > > +           Say Y here if you want the early printk support on Xilinx
> > > +           ZynQMP platform.
> > > +
> > > + config EARLY_PRINTK_CADENCE
> > > +         bool "Enable early printk via Cadence UART"
> > > +         select EARLY_UART_CADENCE
> > 
> > Why not select EARLY_PRINTK directly? Is EARLY_UART_CADENCE actually
> > needed?
> 
> Yes to select the proper EARLY_PRINTK_INC. For other UARTs (such as 8250), it
> will be necessary to enable more options.
> 
> The other option is to have lengthy if in some part of the Kconfig which is
> not pretty and likely a way to miss some places if we ever decide to add more
> alias (I hope not!).
> 
> > 
> > 
> > > +         help
> > > +           Say Y here if you wish the early printk to direct their
> > > +           output to a Cadence UART. You can use this option to provide
> > > +           the parameters for the Cadence UART rather than selecting
> > > +           one of the platform specific options above if you know the
> > > +           parameters for the port.
> > > +
> > > +           This option is preferred over the platform specific options;
> > > +           the platform specific options are deprecated and will soon
> > > +           be removed.
> > > +endchoice
> > > +
> > > +config EARLY_PRINTK
> > > + bool
> > > +
> > > +config EARLY_UART_CADENCE
> > > + bool
> > > + select EARLY_PRINTK
> > > +
> > > +config EARLY_UART_BASE_ADDRESS
> > > + hex "Physical base address of debug UART" if EARLY_PRINTK
> > > + default 0xff000000 if EARLY_PRINTK_ZYNQMP
> > 
> > This only works for EARLY_PRINTK_ZYNQMP and not for
> > EARLY_PRINTK_CADENCE. I imagine we need a default line for each of the
> > possible options above.
> 
> If you don't set any default value, then it will be requested when compiling
> Xen. The risk of setting a default value for "generic" config is the user may
> not notice that it needs to fill it up.
> 
> So he/she may end up to compile Xen with the wrong address and will get not
> output later on at best. This sort of things is quite difficult to debug until
> you know what you are doing.
> 
> > 
> > 
> > > +config EARLY_PRINTK_INC
> > > + string
> > > + default "debug-cadence.inc" if EARLY_UART_CADENCE
> > > diff --git a/xen/arch/arm/Rules.mk b/xen/arch/arm/Rules.mk
> > > index 3d9a0ed357..084f1725a8 100644
> > > --- a/xen/arch/arm/Rules.mk
> > > +++ b/xen/arch/arm/Rules.mk
> > > @@ -46,7 +46,6 @@ EARLY_PRINTK_thunderx       := pl011,0x87e024000000
> > >   EARLY_PRINTK_vexpress       := pl011,0x1c090000
> > >   EARLY_PRINTK_xgene-mcdivitt := 8250,0x1c021000,2
> > >   EARLY_PRINTK_xgene-storm    := 8250,0x1c020000,2
> > > -EARLY_PRINTK_zynqmp         := cadence,0xff000000
> > >     ifneq ($(EARLY_PRINTK_$(CONFIG_EARLY_PRINTK)),)
> > >   EARLY_PRINTK_CFG := $(subst $(comma),
> > > ,$(EARLY_PRINTK_$(CONFIG_EARLY_PRINTK)))
> > > @@ -82,9 +81,9 @@ endif
> > >     CFLAGS-$(EARLY_PRINTK) += -DCONFIG_EARLY_PRINTK
> > >   CFLAGS-$(EARLY_PRINTK_INIT_UART) += -DEARLY_PRINTK_INIT_UART
> > > -CFLAGS-$(EARLY_PRINTK) +=
> > > -DEARLY_PRINTK_INC=\"debug-$(EARLY_PRINTK_INC).inc\"
> > > +CFLAGS-$(EARLY_PRINTK) +=
> > > -DCONFIG_EARLY_PRINTK_INC=\"debug-$(EARLY_PRINTK_INC).inc\"
> > >   CFLAGS-$(EARLY_PRINTK) += -DEARLY_PRINTK_BAUD=$(EARLY_PRINTK_BAUD)
> > > -CFLAGS-$(EARLY_PRINTK) +=
> > > -DEARLY_UART_BASE_ADDRESS=$(EARLY_UART_BASE_ADDRESS)
> > > +CFLAGS-$(EARLY_PRINTK) +=
> > > -DCONFIG_EARLY_UART_BASE_ADDRESS=$(EARLY_UART_BASE_ADDRESS)
> > 
> > I don't have an opinion on the naming, the following is a suggestion to
> > make the patch easier to write.
> 
> I got bored enough on the plan to try to do more cleanup at the same time (see
> below). ;)
> 
> >  It looks like we could get away without
> > any of the renaming below if we choose to export
> > EARLY_UART_BASE_ADDRESS and keep using EARLY_UART_BASE_ADDRESS directly
> > in the code below.
> 
> I want to get rid of anything not starting with CONFIG_ because this is
> misleading. So they either got drop in this patch (and follow-ups) or they get
> renamed before hand.
> 
> I chose the former because some options will not be a straight prefixing of
> CONFIG_. For instance, EARLY_UART_REG_SHIFT is a specific to 8250, so I would
> like to rename it CONFIG_EARLY_UART_8250_SHIFT.
> 
> I can try to do the renaming before hand if you prefer.

Yes, I prefer the renaming to be separate if it is not a problem.

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.