[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [RFC 24/29] xen/arm: Don't use pl011 UART by default for early printk
On 04/29/2013 05:45 PM, Ian Campbell wrote: > On Mon, 2013-04-29 at 00:02 +0100, Julien Grall wrote: >> Add CONFIG_EARLY_PRINTK options in configs/arm{32,64}.mk to let the user >> to choose if he wants to have early output, ie before the console is >> initialized. > > These shouldn't go in config/arm*.mk but should be handed in > xen/arch/arm/ I don't understand why, it's a config option and the user can modify arm32.mk >> >> This code is specific for each UART. When CONFIG_EARLY_PRINTK is enabled, >> Xen will only be able to run on a board with this UART. >> >> If a developper wants to add support for a new UART, he must implement the >> following function/variable: >> - early_uart_paddr: variable which contains the physical base address >> for the UART >> - early_uart_init: initialize the UART >> - early_uart_ready: check and wait until the UART can transmit a new >> character >> - early_uart_transmit: transmit a character >> >> For more details about the parameters of each function, >> see arm{32,64}/debug-pl011.S comments. > > It's a damned shame the asm isn't compatible, oh well... > >> diff --git a/config/arm32.mk b/config/arm32.mk >> index f64f0c1..83a7767 100644 >> --- a/config/arm32.mk >> +++ b/config/arm32.mk >> @@ -7,6 +7,17 @@ CONFIG_ARM_$(XEN_OS) := y >> # Explicitly specifiy 32-bit ARM ISA since toolchain default can be -mthumb: >> CFLAGS += -marm >> >> +# Xen early debugging function >> +# This is helpful if you are debbuging code that executes before the console >> +# is initialized. >> +# Note that selecting this option will limit Xen to a single UART >> +# definition. Attempting to boot Xen image on a different platform *will >> +# not work*, so this option should not be enable for Xens that are >> +# intended to be portable. >> +# Possible value: >> +# - none: no early printk > > Blank/unset would represent none? Or you mean literal "none"? I choose to use literal "none", but finally I think it's better to have blank/unset. >> +# - pl011: printk with PL011 UART >> +CONFIG_EARLY_PRINTK := none > > I guess you mean literal none... > > Can this be overriden on command line or in .config? You may need to > use ?= so it can be. Yes. Make overrides all "local" variables with the ones on the command line. >> HAS_PL011 := y >> >> # Use only if calling $(LD) directly. >> diff --git a/config/arm64.mk b/config/arm64.mk >> index b2457eb..6187df8 100644 >> --- a/config/arm64.mk >> +++ b/config/arm64.mk >> @@ -4,6 +4,17 @@ CONFIG_ARM_$(XEN_OS) := y >> >> CFLAGS += #-marm -march= -mcpu= etc >> >> +# Xen early debugging function >> +# This is helpful if you are debbuging code that executes before the console >> +# is initialized. >> +# Note that selecting this option will limit Xen to a single UART >> +# definition. Attempting to boot Xen image on a different platform *will >> +# not work*, so this option should not be enable for Xens that are >> +# intended to be portable. >> +# Possible value: >> +# - none: no early printk >> +# - pl011: printk with PL011 UART >> +CONFIG_EARLY_PRINTK := none > > Shall we create config/arm.mk, included from arm32 and arm64 and reduce > the duplication? I think so. >> diff --git a/xen/arch/arm/arm32/Makefile b/xen/arch/arm/arm32/Makefile >> index 1ad3364..6af8ca3 100644 >> --- a/xen/arch/arm/arm32/Makefile >> +++ b/xen/arch/arm/arm32/Makefile >> @@ -5,4 +5,7 @@ obj-y += mode_switch.o >> obj-y += proc-ca15.o >> >> obj-y += traps.o >> -obj-y += domain.o >> \ No newline at end of file >> +obj-y += domain.o >> + >> +obj-$(EARLY_PRINTK) += debug.o >> +obj-$(CONFIG_EARLY_PL011) += debug-pl011.o > > This could become > obj-$(EARLY_PRINTK) += debug-$(CONFIG_EARLY_PRINTK).o > and save adding a new one for each name? And if you create a stub > debug-none.S you could just make it obj-y ? Should we gate this on > debug=y? What does debug=y do? I think we don't need debug-none.S if CONFIG_EARLY_PRINTK is unset when early printk is disabled. We just need to check in Rules.mk is CONFIG_EARLY_PRINTK is set or not and defined EARLY_PRINTK. >> @@ -106,8 +106,10 @@ past_zImage: >> bne 1b >> >> boot_cpu: >> -#ifdef EARLY_UART_ADDRESS >> - ldr r11, =EARLY_UART_ADDRESS /* r11 := UART base address */ >> +#ifdef EARLY_PRINTK >> + ldr r0, =early_uart_paddr /* VA of early_uart_paddr */ >> + add r0, r0, r10 /* PA of early_uart_paddr */ >> + ldr r11, [r0] /* r11 := UART base address */ > > If head.S were to #include debug-pl011.inc would that simplify some of > this stuff? It's also used in debug.s, which is a wrapper for the C early printk. If we use macros instead of functions the code will be simplified. All link register used will be removed. I will rework this patch. -- Julien _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |