How to enable early printk
-Early printk can only be enabled if debug=y. You may want to enable it if
-you are debbuging code that executes before the console is initialized.
+Early printk can only be enabled if CONFIG_DEBUG=y or in EXPERT mode. You
+may want to enable it if you are debugging 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.
-CONFIG_EARLY_PRINTK=<INC>,<BASE_ADDRESS>,<OTHER_OPTIONS>
+Select one of the "Early printk via * UART" in the choice possible for
+"Early printk" in the "Debugging options" of Kconfig. You will then need to
+set other options, which depends on the driver selected.
-<INC> and <BASE_ADDRESS> are mandatory arguments:
+CONFIG_EARLY_UART_BASE_ADDRESS is a mandatory argument, it is the base
+physical address of the UART to use.
- - <INC> is the name of the driver, see xen/arch/arm/arm{32,64}/debug-*.inc
- (where <INC> corresponds to the wildcarded *).
- - <BASE_ADDRESS> is the base physical address of the UART to use
+Other options depends on the driver selected:
+ - 8250
+ - CONFIG_EARLY_UART_8250_REG_SHIFT is, optionally, the left-shift to
+ apply to the register offsets within the uart.
+ - pl011
+ - CONFIG_EARLY_UART_PL011_BAUD_RATE is, optionally, a baud rate which
+ should be used to configure the UART at start of day.
-<OTHER_OPTIONS> varies depending on <INC>:
+ If CONFIG_EARLY_UART_PL011_BAUD_RATE is set to 0 then the code will
+ not try to initialize the UART, so that bootloader or firmware
+ settings can be used for maximum compatibility.
+ - scif
+ - CONFIG_EARLY_UART_SCIF_VERSION_* is, optionally, the interface version
+ of the UART. Default to version NONE.
- - 8250,<BASE_ADDRESS>,<REG_SHIFT>
- - <REG_SHIFT> is, optionally, the left-shift to apply to the
- register offsets within the uart.
- - pl011,<BASE_ADDRESS>,<BAUD_RATE>
- - <BAUD_RATE> is, optionally a baud rate which should be used to
- configure the UART at start of day.
-
- If <BAUD_RATE> is not given then the code will not try to
- initialize the UART, so that bootloader or firmware settings can
- be used for maximum compatibility.
- - scif,<BASE_ADDRESS>,<VERSION>
- - SCIF<VERSION> is, optionally, the interface version of the UART.
-
- If <VERSION> is not given then the default interface version (SCIF)
- will be used.
- For all other uarts there are no additional options.
As a convenience it is also possible to select from a list of
-predefined configurations using CONFIG_EARLY_PRINTK=mach where mach is
-the name of the machine:
-
- - brcm: printk with 8250 on Broadcom 7445D0 boards with A15 processors.
- - dra7: printk with 8250 on DRA7 platform
- - exynos5250: printk with the second UART
- - fastmodel: printk on ARM Fastmodel software emulators
- - hikey960: printk with pl011 with Hikey 960
- - juno: printk with pl011 on Juno platform
- - lager: printk with SCIF0 on Renesas Lager board (R-Car H2 processor)
- - midway: printk with the pl011 on Calxeda Midway processors
- - mvebu: printk with the MVEBU for Marvell Armada 3700 SoCs
- - omap5432: printk with UART3 on TI OMAP5432 processors
- - rcar3: printk with SCIF2 on Renesas R-Car Gen3 processors
- - seattle: printk with pl011 for AMD Seattle processor
- - sun6i: printk with 8250 on Allwinner A31 processors
- - sun7i: printk with 8250 on Allwinner A20 processors
- - thunderx: printk with pl011 for Cavium ThunderX processor
- - vexpress: printk with pl011 for versatile express
- - xgene-mcdivitt: printk with 820 on Xgene mcdivitt platform
- - xgene-storm: printk with 820 on Xgene storm platform
- - zynqmp: printk with Cadence UART for Xilinx ZynqMP SoCs
-
-These settings are is hardcoded in xen/arch/arm/Rules.mk,
-see there when adding support for new machines.
+predefined configurations available in the list of choice for "Early
+printk" for specific platform.
By default early printk is disabled.
--- /dev/null
+choice
+ bool "Early printk"
+ optional
+ help
+ You may want to enable early printk if you are debugging 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.
+
+ Choose one of the UART drivers for early printk, then you'll
+ have to specify the parameters, like the base address.
+
+ Deprecated: Alternatively, there are platform specific options
+ which will have default values for the various parameters. But
+ such option will soon be removed.
+
+ config EARLY_UART_CHOICE_8250
+ select EARLY_UART_8250
+ bool "Early printk via 8250 UART"
+ help
+ Say Y here if you wish the early printk to direct their
+ output to a 8250 UART. You can use this option to
+ provide the parameters for the 8250 UART rather than
+ selecting one of the platform specific options below 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.
+ config EARLY_UART_CHOICE_CADENCE
+ select EARLY_UART_CADENCE
+ depends on ARM_64
+ bool "Early printk via Cadence UART"
+ 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 below 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.
+ config EARLY_UART_CHOICE_EXYNOS4210
+ select EARLY_UART_EXYNOS4210
+ depends on ARM_32
+ bool "Early printk via Exynos4210 UART"
+ help
+ Say Y here if you wish the early printk to direct their
+ output to a Exynos 4210 UART. You can use this option to
+ provide the parameters for the Exynos 4210 UART rather than
+ selecting one of the platform specific options below 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.
+ config EARLY_UART_CHOICE_MESON
+ select EARLY_UART_MESON
+ depends on ARM_64
+ bool "Early printk via MESON UART"
+ help
+ Say Y here if you wish the early printk to direct their
+ output to a MESON UART. You can use this option to
+ provide the parameters for the MESON UART rather than
+ selecting one of the platform specific options below 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.
+ config EARLY_UART_CHOICE_MVEBU
+ select EARLY_UART_MVEBU
+ depends on ARM_64
+ bool "Early printk via MVEBU UART"
+ help
+ Say Y here if you wish the early printk to direct their
+ output to a MVEBU UART. You can use this option to
+ provide the parameters for the MVEBU UART rather than
+ selecting one of the platform specific options below 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.
+ config EARLY_UART_CHOICE_PL011
+ select EARLY_UART_PL011
+ bool "Early printk via PL011 UART"
+ help
+ Say Y here if you wish the early printk to direct their
+ output to a PL011 UART. You can use this option to
+ provide the parameters for the PL011 UART rather than
+ selecting one of the platform specific options below 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.
+ config EARLY_UART_CHOICE_SCIF
+ select EARLY_UART_SCIF
+ bool "Early printk via SCIF UART"
+ help
+ Say Y here if you wish the early printk to direct their
+ output to a SCIF UART. You can use this option to
+ provide the parameters for the SCIF UART rather than
+ selecting one of the platform specific options below 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.
+
+ config EARLY_PRINTK_BRCM
+ bool "Early printk with 8250 on Broadcom 7445D0 boards with A15 processors"
+ select EARLY_UART_8250
+ config EARLY_PRINTK_DRA7
+ bool "Early printk with 8250 on DRA7 platform"
+ select EARLY_UART_8250
+ config EARLY_PRINTK_EXYNOS5250
+ bool "Early printk with the second UART on Exynos5250"
+ select EARLY_UART_EXYNOS4210
+ depends on ARM_32
+ config EARLY_PRINTK_FASTMODEL
+ bool "Early printk with pl011 on ARM Fastmodel software emulators"
+ select EARLY_UART_PL011
+ config EARLY_PRINTK_HIKEY960
+ bool "Early printk with pl011 with Hikey 960"
+ select EARLY_UART_PL011
+ config EARLY_PRINTK_JUNO
+ bool "Early printk with pl011 on Juno platform"
+ select EARLY_UART_PL011
+ config EARLY_PRINTK_LAGER
+ bool "Early printk with SCIF0 on Renesas Lager board (R-Car H2 processor)"
+ select EARLY_UART_SCIF
+ config EARLY_PRINTK_MIDWAY
+ bool "Early printk with pl011 on Calxeda Midway processors"
+ select EARLY_UART_PL011
+ config EARLY_PRINTK_MVEBU
+ bool "Early printk with MVEBU for Marvell Armada 3700 SoCs"
+ select EARLY_UART_MVEBU
+ depends on ARM_64
+ config EARLY_PRINTK_OMAP5432
+ bool "Early printk with UART3 on TI OMAP5432 processors"
+ select EARLY_UART_8250
+ config EARLY_PRINTK_RCAR3
+ bool "Early printk with SCIF2 on Renesas R-Car Gen3 processors"
+ select EARLY_UART_SCIF
+ config EARLY_PRINTK_SEATTLE
+ bool "Early printk with pl011 for AMD Seattle processor"
+ select EARLY_UART_PL011
+ config EARLY_PRINTK_SUN6I
+ bool "Early printk with 8250 on Allwinner A31 processors"
+ select EARLY_UART_8250
+ config EARLY_PRINTK_SUN7I
+ bool "Early printk with 8250 on Allwinner A20 processors"
+ select EARLY_UART_8250
+ config EARLY_PRINTK_THUNDERX
+ bool "Early printk with pl011 for Cavium ThunderX processor"
+ select EARLY_UART_PL011
+ depends on ARM_64
+ config EARLY_PRINTK_VEXPRESS
+ bool "Early printk with pl011 for versatile express"
+ select EARLY_UART_PL011
+ config EARLY_PRINTK_XGENE_MCDIVITT
+ bool "Early printk with 820 on Xgene mcdivitt platform"
+ select EARLY_UART_8250
+ config EARLY_PRINTK_XGENE_STORM
+ bool "Early printk with 820 on Xgene storm platform"
+ select EARLY_UART_8250
+ config EARLY_PRINTK_ZYNQMP
+ bool "Early printk with Cadence UART for Xilinx ZynqMP SoCs"
+ select EARLY_UART_CADENCE
+ depends on ARM_64
+endchoice
+
+
+config EARLY_UART_8250
+ select EARLY_PRINTK
+ bool
+config EARLY_UART_CADENCE
+ select EARLY_PRINTK
+ bool
+config EARLY_UART_EXYNOS4210
+ select EARLY_PRINTK
+ bool
+config EARLY_UART_MESON
+ select EARLY_PRINTK
+ bool
+config EARLY_UART_MVEBU
+ select EARLY_PRINTK
+ bool
+config EARLY_UART_PL011
+ select EARLY_PRINTK
+ bool
+config EARLY_UART_SCIF
+ select EARLY_PRINTK
+ bool
+
+config EARLY_PRINTK
+ bool
+
+config EARLY_UART_BASE_ADDRESS
+ depends on EARLY_PRINTK
+ hex "Early printk, physical base address of debug UART"
+ range 0x0 0xffffffff if ARM_32
+ default 0xF040AB00 if EARLY_PRINTK_BRCM
+ default 0x4806A000 if EARLY_PRINTK_DRA7
+ default 0x1c090000 if EARLY_PRINTK_FASTMODEL
+ default 0x12c20000 if EARLY_PRINTK_EXYNOS5250
+ default 0xfff32000 if EARLY_PRINTK_HIKEY960
+ default 0x7ff80000 if EARLY_PRINTK_JUNO
+ default 0xe6e60000 if EARLY_PRINTK_LAGER
+ default 0xfff36000 if EARLY_PRINTK_MIDWAY
+ default 0xd0012000 if EARLY_PRINTK_MVEBU
+ default 0x48020000 if EARLY_PRINTK_OMAP5432
+ default 0xe6e88000 if EARLY_PRINTK_RCAR3
+ default 0xe1010000 if EARLY_PRINTK_SEATTLE
+ default 0x01c28000 if EARLY_PRINTK_SUN6I
+ default 0x01c28000 if EARLY_PRINTK_SUN7I
+ default 0x87e024000000 if EARLY_PRINTK_THUNDERX
+ default 0x1c090000 if EARLY_PRINTK_VEXPRESS
+ default 0x1c021000 if EARLY_PRINTK_XGENE_MCDIVITT
+ default 0x1c020000 if EARLY_PRINTK_XGENE_STORM
+ default 0xff000000 if EARLY_PRINTK_ZYNQMP
+
+config EARLY_UART_PL011_BAUD_RATE
+ depends on EARLY_UART_PL011
+ int "Early printk UART baud rate for pl011"
+ help
+ Optionally sets the baud rate which should be used to configure
+ the UART at start of day.
+
+ If EARLY_UART_PL011_BAUD_RATE is set to 0 then the code will
+ not try to initialize the UART, so that bootloader or firmware
+ settings can be used for maximum compatibility.
+
+ default 115200 if EARLY_PRINTK_FASTMODEL
+ default 0
+
+config EARLY_UART_INIT
+ depends on EARLY_UART_PL011 && EARLY_UART_PL011_BAUD_RATE != 0
+ def_bool y
+
+config EARLY_UART_8250_REG_SHIFT
+ depends on EARLY_UART_8250
+ int "Early printk, left-shift to apply to the register offsets within the 8250 UART"
+ help
+ EARLY_UART_8250_REG_SHIFT is, optionally, the left-shift to
+ apply to the register offsets within the UART with early
+ printk.
+
+ Default to 0.
+
+ default 2 if EARLY_PRINTK_BRCM
+ default 2 if EARLY_PRINTK_DRA7
+ default 2 if EARLY_PRINTK_OMAP5432
+ default 2 if EARLY_PRINTK_SUN6I
+ default 2 if EARLY_PRINTK_SUN7I
+ default 2 if EARLY_PRINTK_XGENE_MCDIVITT
+ default 2 if EARLY_PRINTK_XGENE_STORM
+ default 0
+
+choice EARLY_UART_SCIF_VERSION
+ prompt "Early printk UART SCIF interface version"
+ depends on EARLY_UART_SCIF
+ default EARLY_UART_SCIF_VERSION_NONE
+ help
+ Select the interface version of the SCIF UART.
+
+ Select EARLY_UART_SCIF_VERSION_NONE to use the default
+ interface version (SCIF).
+ config EARLY_UART_SCIF_VERSION_NONE
+ bool "default SCIF UART interface"
+ config EARLY_UART_SCIF_VERSION_A
+ bool "SCIF UART interface version A"
+endchoice
+
+config EARLY_PRINTK_INC
+ string
+ default "debug-8250.inc" if EARLY_UART_8250
+ default "debug-cadence.inc" if EARLY_UART_CADENCE
+ default "debug-exynos4210.inc" if EARLY_UART_EXYNOS4210
+ default "debug-meson.inc" if EARLY_UART_MESON
+ default "debug-mvebu.inc" if EARLY_UART_MVEBU
+ default "debug-pl011.inc" if EARLY_UART_PL011
+ default "debug-scif.inc" if EARLY_UART_SCIF
CFLAGS-$(CONFIG_ARM_64) += -mcpu=generic
CFLAGS-$(CONFIG_ARM_64) += -mgeneral-regs-only # No fp registers etc
-EARLY_PRINTK := n
-
-ifeq ($(CONFIG_DEBUG),y)
-
-# See docs/misc/arm/early-printk.txt for syntax
-
-EARLY_PRINTK_brcm := 8250,0xF040AB00,2
-EARLY_PRINTK_dra7 := 8250,0x4806A000,2
-EARLY_PRINTK_fastmodel := pl011,0x1c090000,115200
-EARLY_PRINTK_exynos5250 := exynos4210,0x12c20000
-EARLY_PRINTK_hikey960 := pl011,0xfff32000
-EARLY_PRINTK_juno := pl011,0x7ff80000
-EARLY_PRINTK_lager := scif,0xe6e60000
-EARLY_PRINTK_midway := pl011,0xfff36000
-EARLY_PRINTK_mvebu := mvebu,0xd0012000
-EARLY_PRINTK_omap5432 := 8250,0x48020000,2
-EARLY_PRINTK_rcar3 := scif,0xe6e88000
-EARLY_PRINTK_seattle := pl011,0xe1010000
-EARLY_PRINTK_sun6i := 8250,0x01c28000,2
-EARLY_PRINTK_sun7i := 8250,0x01c28000,2
-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)))
-else
-EARLY_PRINTK_CFG := $(subst $(comma), ,$(CONFIG_EARLY_PRINTK))
-endif
-
-# Extract configuration from string
-EARLY_PRINTK_INC := $(word 1,$(EARLY_PRINTK_CFG))
-EARLY_UART_BASE_ADDRESS := $(word 2,$(EARLY_PRINTK_CFG))
-
-# UART specific options
-ifeq ($(EARLY_PRINTK_INC),8250)
-EARLY_UART_REG_SHIFT := $(word 3,$(EARLY_PRINTK_CFG))
-endif
-ifeq ($(EARLY_PRINTK_INC),pl011)
-ifneq ($(word 3,$(EARLY_PRINTK_CFG)),)
-EARLY_PRINTK_INIT_UART := y
-EARLY_PRINTK_BAUD := $(word 3,$(EARLY_PRINTK_CFG))
-endif
-endif
-ifeq ($(EARLY_PRINTK_INC),scif)
-ifneq ($(word 3,$(EARLY_PRINTK_CFG)),)
-CFLAGS-y += -DCONFIG_EARLY_UART_SCIF_VERSION_$(word 3,$(EARLY_PRINTK_CFG))
-else
-CFLAGS-y += -DCONFIG_EARLY_UART_SCIF_VERSION_NONE
-endif
-endif
-
-ifneq ($(EARLY_PRINTK_INC),)
-EARLY_PRINTK := y
-endif
-
-CFLAGS-$(EARLY_PRINTK) += -DCONFIG_EARLY_PRINTK
-CFLAGS-$(EARLY_PRINTK_INIT_UART) += -DCONFIG_EARLY_UART_INIT
-CFLAGS-$(EARLY_PRINTK) += -DCONFIG_EARLY_PRINTK_INC=\"debug-$(EARLY_PRINTK_INC).inc\"
-CFLAGS-$(EARLY_PRINTK) += -DCONFIG_EARLY_UART_PL011_BAUD_RATE=$(EARLY_PRINTK_BAUD)
-CFLAGS-$(EARLY_PRINTK) += -DCONFIG_EARLY_UART_BASE_ADDRESS=$(EARLY_UART_BASE_ADDRESS)
-CFLAGS-$(EARLY_PRINTK) += -DCONFIG_EARLY_UART_8250_REG_SHIFT=$(EARLY_UART_REG_SHIFT)
-
-else # !CONFIG_DEBUG
-
-ifneq ($(CONFIG_EARLY_PRINTK),)
-# Early printk is dependant on a debug build.
-$(error CONFIG_EARLY_PRINTK enabled for non-debug build)
-endif
-
+ifneq ($(filter command line environment,$(origin CONFIG_EARLY_PRINTK)),)
+ $(error You must use 'make menuconfig' to enable/disable early printk now)
endif