* [PATCH 1/4] arm/early-printk: calculate baud rate divisor from user provided value
2013-05-24 10:42 [PATCH 0/4] ARM/early-printk: Improve reusability and add Calxeda support Andre Przywara
@ 2013-05-24 10:42 ` Andre Przywara
2013-05-24 12:15 ` Julien Grall
2013-05-24 10:42 ` [PATCH 2/4] arm/early-printk: allow skipping of UART init Andre Przywara
` (3 subsequent siblings)
4 siblings, 1 reply; 11+ messages in thread
From: Andre Przywara @ 2013-05-24 10:42 UTC (permalink / raw)
To: stefano.stabellini, Ian.Campbell; +Cc: Andre Przywara, xen-devel
For early-printk the used baud rate was hardcoded in the code, using
precalculated divisor values.
Let the calculation of these values be done by the preprocessor and
use a human readable value in xen/arch/arm/Rules.mk to drive this.
Signed-off-by: Andre Przywara <andre.przywara@calxeda.com>
---
xen/arch/arm/Rules.mk | 3 +++
xen/arch/arm/arm32/debug-exynos4210.inc | 4 ++--
xen/arch/arm/arm32/debug-pl011.inc | 4 ++--
xen/arch/arm/arm64/debug-pl011.inc | 4 ++--
4 files changed, 9 insertions(+), 6 deletions(-)
diff --git a/xen/arch/arm/Rules.mk b/xen/arch/arm/Rules.mk
index b6a6890..b4d6907 100644
--- a/xen/arch/arm/Rules.mk
+++ b/xen/arch/arm/Rules.mk
@@ -45,9 +45,11 @@ ifeq ($(debug),y)
# TODO handle UART base address from make command line
ifeq ($(CONFIG_EARLY_PRINTK), vexpress)
EARLY_PRINTK_INC := pl011
+EARLY_PRINTK_BAUD := 38400
endif
ifeq ($(CONFIG_EARLY_PRINTK), exynos5250)
EARLY_PRINTK_INC := exynos4210
+EARLY_PRINTK_BAUD := 115200
endif
ifneq ($(EARLY_PRINTK_INC),)
@@ -56,4 +58,5 @@ endif
CFLAGS-$(EARLY_PRINTK) += -DEARLY_PRINTK
CFLAGS-$(EARLY_PRINTK) += -DEARLY_PRINTK_INC=\"debug-$(EARLY_PRINTK_INC).inc\"
+CFLAGS-$(EARLY_PRINTK) += -DEARLY_PRINTK_BAUD=$(EARLY_PRINTK_BAUD)
endif
diff --git a/xen/arch/arm/arm32/debug-exynos4210.inc b/xen/arch/arm/arm32/debug-exynos4210.inc
index 4241640..4922148 100644
--- a/xen/arch/arm/arm32/debug-exynos4210.inc
+++ b/xen/arch/arm/arm32/debug-exynos4210.inc
@@ -38,9 +38,9 @@
orr \rd, \rd, #(0x7<<8)
str \rd, [\rc, #0x558]
- mov \rc, #4
+ mov \rc, #(100000000 / EARLY_PRINTK_BAUD % 16)
str \rc, [\rb, #UFRACVAL] /* -> UFRACVAL (Baud divisor fraction) */
- mov \rc, #53
+ mov \rc, #(100000000 / EARLY_PRINTK_BAUD / 16 - 1)
str \rc, [\rb, #UBRDIV] /* -> UBRDIV (Baud divisor integer) */
mov \rc, #3 /* 8n1 */
str \rc, [\rb, #ULCON] /* -> (Line control) */
diff --git a/xen/arch/arm/arm32/debug-pl011.inc b/xen/arch/arm/arm32/debug-pl011.inc
index 6954aeb..2d970ea 100644
--- a/xen/arch/arm/arm32/debug-pl011.inc
+++ b/xen/arch/arm/arm32/debug-pl011.inc
@@ -23,9 +23,9 @@
* rc: scratch register 1
* rd: scratch register 2 (unused here) */
.macro early_uart_init rb, rc, rd
- mov \rc, #0x0
+ mov \rc, #(7372800 / EARLY_PRINTK_BAUD % 16)
str \rc, [\rb, #0x28] /* -> UARTFBRD (Baud divisor fraction) */
- mov \rc, #0x4 /* 7.3728MHz / 0x4 == 16 * 115200 */
+ mov \rc, #(7372800 / EARLY_PRINTK_BAUD / 16)
str \rc, [\rb, #0x24] /* -> UARTIBRD (Baud divisor integer) */
mov \rc, #0x60 /* 8n1 */
str \rc, [\rb, #0x2C] /* -> UARTLCR_H (Line control) */
diff --git a/xen/arch/arm/arm64/debug-pl011.inc b/xen/arch/arm/arm64/debug-pl011.inc
index ee6e0e0..7220940 100644
--- a/xen/arch/arm/arm64/debug-pl011.inc
+++ b/xen/arch/arm/arm64/debug-pl011.inc
@@ -24,9 +24,9 @@
* xb: register which containts the UART base address
* c: scratch register number */
.macro early_uart_init xb, c
- mov x\c, #0x0
+ mov x\c, #(7372800 / EARLY_PRINTK_BAUD % 16)
strh w\c, [\xb, #0x28] /* -> UARTFBRD (Baud divisor fraction) */
- mov x\c, #0x4 /* 7.3728MHz / 0x4 == 16 * 115200 */
+ mov x\c, #(7372800 / EARLY_PRINTK_BAUD / 16)
strh w\c, [\xb, #0x24] /* -> UARTIBRD (Baud divisor integer) */
mov x\c, #0x60 /* 8n1 */
str w\c, [\xb, #0x2C] /* -> UARTLCR_H (Line control) */
--
1.7.12.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH 1/4] arm/early-printk: calculate baud rate divisor from user provided value
2013-05-24 10:42 ` [PATCH 1/4] arm/early-printk: calculate baud rate divisor from user provided value Andre Przywara
@ 2013-05-24 12:15 ` Julien Grall
0 siblings, 0 replies; 11+ messages in thread
From: Julien Grall @ 2013-05-24 12:15 UTC (permalink / raw)
To: Andre Przywara; +Cc: xen-devel, Ian.Campbell, stefano.stabellini
On 05/24/2013 11:42 AM, Andre Przywara wrote:
> For early-printk the used baud rate was hardcoded in the code, using
> precalculated divisor values.
> Let the calculation of these values be done by the preprocessor and
> use a human readable value in xen/arch/arm/Rules.mk to drive this.
>
> Signed-off-by: Andre Przywara <andre.przywara@calxeda.com>
Reviewed-by: Julien Grall <julien.grall@linaro.org>
> ---
> xen/arch/arm/Rules.mk | 3 +++
> xen/arch/arm/arm32/debug-exynos4210.inc | 4 ++--
> xen/arch/arm/arm32/debug-pl011.inc | 4 ++--
> xen/arch/arm/arm64/debug-pl011.inc | 4 ++--
> 4 files changed, 9 insertions(+), 6 deletions(-)
>
> diff --git a/xen/arch/arm/Rules.mk b/xen/arch/arm/Rules.mk
> index b6a6890..b4d6907 100644
> --- a/xen/arch/arm/Rules.mk
> +++ b/xen/arch/arm/Rules.mk
> @@ -45,9 +45,11 @@ ifeq ($(debug),y)
> # TODO handle UART base address from make command line
> ifeq ($(CONFIG_EARLY_PRINTK), vexpress)
> EARLY_PRINTK_INC := pl011
> +EARLY_PRINTK_BAUD := 38400
> endif
> ifeq ($(CONFIG_EARLY_PRINTK), exynos5250)
> EARLY_PRINTK_INC := exynos4210
> +EARLY_PRINTK_BAUD := 115200
> endif
>
> ifneq ($(EARLY_PRINTK_INC),)
> @@ -56,4 +58,5 @@ endif
>
> CFLAGS-$(EARLY_PRINTK) += -DEARLY_PRINTK
> CFLAGS-$(EARLY_PRINTK) += -DEARLY_PRINTK_INC=\"debug-$(EARLY_PRINTK_INC).inc\"
> +CFLAGS-$(EARLY_PRINTK) += -DEARLY_PRINTK_BAUD=$(EARLY_PRINTK_BAUD)
> endif
> diff --git a/xen/arch/arm/arm32/debug-exynos4210.inc b/xen/arch/arm/arm32/debug-exynos4210.inc
> index 4241640..4922148 100644
> --- a/xen/arch/arm/arm32/debug-exynos4210.inc
> +++ b/xen/arch/arm/arm32/debug-exynos4210.inc
> @@ -38,9 +38,9 @@
> orr \rd, \rd, #(0x7<<8)
> str \rd, [\rc, #0x558]
>
> - mov \rc, #4
> + mov \rc, #(100000000 / EARLY_PRINTK_BAUD % 16)
> str \rc, [\rb, #UFRACVAL] /* -> UFRACVAL (Baud divisor fraction) */
> - mov \rc, #53
> + mov \rc, #(100000000 / EARLY_PRINTK_BAUD / 16 - 1)
> str \rc, [\rb, #UBRDIV] /* -> UBRDIV (Baud divisor integer) */
> mov \rc, #3 /* 8n1 */
> str \rc, [\rb, #ULCON] /* -> (Line control) */
> diff --git a/xen/arch/arm/arm32/debug-pl011.inc b/xen/arch/arm/arm32/debug-pl011.inc
> index 6954aeb..2d970ea 100644
> --- a/xen/arch/arm/arm32/debug-pl011.inc
> +++ b/xen/arch/arm/arm32/debug-pl011.inc
> @@ -23,9 +23,9 @@
> * rc: scratch register 1
> * rd: scratch register 2 (unused here) */
> .macro early_uart_init rb, rc, rd
> - mov \rc, #0x0
> + mov \rc, #(7372800 / EARLY_PRINTK_BAUD % 16)
> str \rc, [\rb, #0x28] /* -> UARTFBRD (Baud divisor fraction) */
> - mov \rc, #0x4 /* 7.3728MHz / 0x4 == 16 * 115200 */
> + mov \rc, #(7372800 / EARLY_PRINTK_BAUD / 16)
> str \rc, [\rb, #0x24] /* -> UARTIBRD (Baud divisor integer) */
> mov \rc, #0x60 /* 8n1 */
> str \rc, [\rb, #0x2C] /* -> UARTLCR_H (Line control) */
> diff --git a/xen/arch/arm/arm64/debug-pl011.inc b/xen/arch/arm/arm64/debug-pl011.inc
> index ee6e0e0..7220940 100644
> --- a/xen/arch/arm/arm64/debug-pl011.inc
> +++ b/xen/arch/arm/arm64/debug-pl011.inc
> @@ -24,9 +24,9 @@
> * xb: register which containts the UART base address
> * c: scratch register number */
> .macro early_uart_init xb, c
> - mov x\c, #0x0
> + mov x\c, #(7372800 / EARLY_PRINTK_BAUD % 16)
> strh w\c, [\xb, #0x28] /* -> UARTFBRD (Baud divisor fraction) */
> - mov x\c, #0x4 /* 7.3728MHz / 0x4 == 16 * 115200 */
> + mov x\c, #(7372800 / EARLY_PRINTK_BAUD / 16)
> strh w\c, [\xb, #0x24] /* -> UARTIBRD (Baud divisor integer) */
> mov x\c, #0x60 /* 8n1 */
> str w\c, [\xb, #0x2C] /* -> UARTLCR_H (Line control) */
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 2/4] arm/early-printk: allow skipping of UART init
2013-05-24 10:42 [PATCH 0/4] ARM/early-printk: Improve reusability and add Calxeda support Andre Przywara
2013-05-24 10:42 ` [PATCH 1/4] arm/early-printk: calculate baud rate divisor from user provided value Andre Przywara
@ 2013-05-24 10:42 ` Andre Przywara
2013-05-24 12:30 ` Julien Grall
2013-05-24 10:42 ` [PATCH 3/4] arm/early-printk: move UART base address to Rules.mk Andre Przywara
` (2 subsequent siblings)
4 siblings, 1 reply; 11+ messages in thread
From: Andre Przywara @ 2013-05-24 10:42 UTC (permalink / raw)
To: stefano.stabellini, Ian.Campbell; +Cc: Andre Przywara, xen-devel
While it seems obvious to initialize the UART before using it, chances
are that some firmware code or the bootloader already did this.
So it may actually be a good idea to skip the initialization, in fact
this fixes early printk on my TC2 Versatile Express.
So provide an option in xen/arch/arm/Rules.mk to only initialize the
UART when needed.
Signed-off-by: Andre Przywara <andre.przywara@calxeda.com>
---
xen/arch/arm/Rules.mk | 2 ++
xen/arch/arm/arm32/head.S | 2 ++
xen/arch/arm/arm64/head.S | 2 ++
3 files changed, 6 insertions(+)
diff --git a/xen/arch/arm/Rules.mk b/xen/arch/arm/Rules.mk
index b4d6907..fdcf73e 100644
--- a/xen/arch/arm/Rules.mk
+++ b/xen/arch/arm/Rules.mk
@@ -49,6 +49,7 @@ EARLY_PRINTK_BAUD := 38400
endif
ifeq ($(CONFIG_EARLY_PRINTK), exynos5250)
EARLY_PRINTK_INC := exynos4210
+EARLY_PRINTK_INIT_UART := y
EARLY_PRINTK_BAUD := 115200
endif
@@ -57,6 +58,7 @@ EARLY_PRINTK := y
endif
CFLAGS-$(EARLY_PRINTK) += -DEARLY_PRINTK
+CFLAGS-$(EARLY_PRINTK_INIT_UART) += -DEARLY_PRINTK_INIT_UART
CFLAGS-$(EARLY_PRINTK) += -DEARLY_PRINTK_INC=\"debug-$(EARLY_PRINTK_INC).inc\"
CFLAGS-$(EARLY_PRINTK) += -DEARLY_PRINTK_BAUD=$(EARLY_PRINTK_BAUD)
endif
diff --git a/xen/arch/arm/arm32/head.S b/xen/arch/arm/arm32/head.S
index ec7f640..0588d54 100644
--- a/xen/arch/arm/arm32/head.S
+++ b/xen/arch/arm/arm32/head.S
@@ -369,7 +369,9 @@ fail: PRINT("- Boot failed -\r\n")
* r11: Early UART base address
* Clobbers r0-r2 */
init_uart:
+#ifdef EARLY_PRINTK_INIT_UART
early_uart_init r11, r1, r2
+#endif
adr r0, 1f
b puts /* Jump to puts */
1: .asciz "- UART enabled -\r\n"
diff --git a/xen/arch/arm/arm64/head.S b/xen/arch/arm/arm64/head.S
index 8955946..21b7e4d 100644
--- a/xen/arch/arm/arm64/head.S
+++ b/xen/arch/arm/arm64/head.S
@@ -116,7 +116,9 @@ boot_cpu:
#ifdef EARLY_PRINTK
ldr x23, =EARLY_UART_BASE_ADDRESS /* x23 := UART base address */
cbnz x22, 1f
+#ifdef EARLY_PRINTK_INIT_UART
bl init_uart /* CPU 0 sets up the UART too */
+#endif
1: PRINT("- CPU ")
mov x0, x22
bl putn
--
1.7.12.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH 2/4] arm/early-printk: allow skipping of UART init
2013-05-24 10:42 ` [PATCH 2/4] arm/early-printk: allow skipping of UART init Andre Przywara
@ 2013-05-24 12:30 ` Julien Grall
0 siblings, 0 replies; 11+ messages in thread
From: Julien Grall @ 2013-05-24 12:30 UTC (permalink / raw)
To: Andre Przywara; +Cc: xen-devel, Ian.Campbell, stefano.stabellini
On 05/24/2013 11:42 AM, Andre Przywara wrote:
> While it seems obvious to initialize the UART before using it, chances
> are that some firmware code or the bootloader already did this.
> So it may actually be a good idea to skip the initialization, in fact
> this fixes early printk on my TC2 Versatile Express.
> So provide an option in xen/arch/arm/Rules.mk to only initialize the
> UART when needed.
I'm using the fast model: Fast Models [8.0.60 (Mar 7 2013)] and the
UART initialization is needed.
Could you do one of the following option:
1) add fastmodel early printk (with EARLY_PRINTK_INIT_UART=y)
2) document the behavior in docs/misc/arm/early-printk.txt
> Signed-off-by: Andre Przywara <andre.przywara@calxeda.com>
> ---
> xen/arch/arm/Rules.mk | 2 ++
> xen/arch/arm/arm32/head.S | 2 ++
> xen/arch/arm/arm64/head.S | 2 ++
> 3 files changed, 6 insertions(+)
>
> diff --git a/xen/arch/arm/Rules.mk b/xen/arch/arm/Rules.mk
> index b4d6907..fdcf73e 100644
> --- a/xen/arch/arm/Rules.mk
> +++ b/xen/arch/arm/Rules.mk
> @@ -49,6 +49,7 @@ EARLY_PRINTK_BAUD := 38400
> endif
> ifeq ($(CONFIG_EARLY_PRINTK), exynos5250)
> EARLY_PRINTK_INC := exynos4210
> +EARLY_PRINTK_INIT_UART := y
> EARLY_PRINTK_BAUD := 115200
> endif
>
> @@ -57,6 +58,7 @@ EARLY_PRINTK := y
> endif
>
> CFLAGS-$(EARLY_PRINTK) += -DEARLY_PRINTK
> +CFLAGS-$(EARLY_PRINTK_INIT_UART) += -DEARLY_PRINTK_INIT_UART
> CFLAGS-$(EARLY_PRINTK) += -DEARLY_PRINTK_INC=\"debug-$(EARLY_PRINTK_INC).inc\"
> CFLAGS-$(EARLY_PRINTK) += -DEARLY_PRINTK_BAUD=$(EARLY_PRINTK_BAUD)
> endif
> diff --git a/xen/arch/arm/arm32/head.S b/xen/arch/arm/arm32/head.S
> index ec7f640..0588d54 100644
> --- a/xen/arch/arm/arm32/head.S
> +++ b/xen/arch/arm/arm32/head.S
> @@ -369,7 +369,9 @@ fail: PRINT("- Boot failed -\r\n")
> * r11: Early UART base address
> * Clobbers r0-r2 */
> init_uart:
> +#ifdef EARLY_PRINTK_INIT_UART
> early_uart_init r11, r1, r2
> +#endif
> adr r0, 1f
> b puts /* Jump to puts */
> 1: .asciz "- UART enabled -\r\n"
> diff --git a/xen/arch/arm/arm64/head.S b/xen/arch/arm/arm64/head.S
> index 8955946..21b7e4d 100644
> --- a/xen/arch/arm/arm64/head.S
> +++ b/xen/arch/arm/arm64/head.S
> @@ -116,7 +116,9 @@ boot_cpu:
> #ifdef EARLY_PRINTK
> ldr x23, =EARLY_UART_BASE_ADDRESS /* x23 := UART base address */
> cbnz x22, 1f
> +#ifdef EARLY_PRINTK_INIT_UART
> bl init_uart /* CPU 0 sets up the UART too */
> +#endif
> 1: PRINT("- CPU ")
> mov x0, x22
> bl putn
--
Julien
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 3/4] arm/early-printk: move UART base address to Rules.mk
2013-05-24 10:42 [PATCH 0/4] ARM/early-printk: Improve reusability and add Calxeda support Andre Przywara
2013-05-24 10:42 ` [PATCH 1/4] arm/early-printk: calculate baud rate divisor from user provided value Andre Przywara
2013-05-24 10:42 ` [PATCH 2/4] arm/early-printk: allow skipping of UART init Andre Przywara
@ 2013-05-24 10:42 ` Andre Przywara
2013-05-24 12:36 ` Julien Grall
2013-05-24 10:42 ` [PATCH 4/4] arm/early-printk: add Calxeda Midway UART support Andre Przywara
2013-05-24 12:40 ` [PATCH 0/4] ARM/early-printk: Improve reusability and add Calxeda support Julien Grall
4 siblings, 1 reply; 11+ messages in thread
From: Andre Przywara @ 2013-05-24 10:42 UTC (permalink / raw)
To: stefano.stabellini, Ian.Campbell; +Cc: Andre Przywara, xen-devel
The UART memory mapped base address is currently hardcoded in the
early-printk UART driver, which denies the driver to be used by
two machines with a different mapping.
Move this definition out to xen/arch/arm/Rules.mk, allowing easier
user access and later sharing of the driver.
Signed-off-by: Andre Przywara <andre.przywara@calxeda.com>
---
xen/arch/arm/Rules.mk | 3 +++
xen/arch/arm/arm32/debug-exynos4210.inc | 2 --
xen/arch/arm/arm32/debug-pl011.inc | 2 --
xen/arch/arm/arm64/debug-pl011.inc | 2 --
4 files changed, 3 insertions(+), 6 deletions(-)
diff --git a/xen/arch/arm/Rules.mk b/xen/arch/arm/Rules.mk
index fdcf73e..37a8271 100644
--- a/xen/arch/arm/Rules.mk
+++ b/xen/arch/arm/Rules.mk
@@ -46,11 +46,13 @@ ifeq ($(debug),y)
ifeq ($(CONFIG_EARLY_PRINTK), vexpress)
EARLY_PRINTK_INC := pl011
EARLY_PRINTK_BAUD := 38400
+EARLY_UART_BASE_ADDRESS := 0x1c090000
endif
ifeq ($(CONFIG_EARLY_PRINTK), exynos5250)
EARLY_PRINTK_INC := exynos4210
EARLY_PRINTK_INIT_UART := y
EARLY_PRINTK_BAUD := 115200
+EARLY_UART_BASE_ADDRESS := 0x12c20000
endif
ifneq ($(EARLY_PRINTK_INC),)
@@ -61,4 +63,5 @@ CFLAGS-$(EARLY_PRINTK) += -DEARLY_PRINTK
CFLAGS-$(EARLY_PRINTK_INIT_UART) += -DEARLY_PRINTK_INIT_UART
CFLAGS-$(EARLY_PRINTK) += -DEARLY_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)
endif
diff --git a/xen/arch/arm/arm32/debug-exynos4210.inc b/xen/arch/arm/arm32/debug-exynos4210.inc
index 4922148..d746c35 100644
--- a/xen/arch/arm/arm32/debug-exynos4210.inc
+++ b/xen/arch/arm/arm32/debug-exynos4210.inc
@@ -18,8 +18,6 @@
#include <asm/exynos4210-uart.h>
-#define EARLY_UART_BASE_ADDRESS 0x12c20000
-
/* Exynos 5 UART initialization
* rb: register which contains the UART base address
* rc: scratch register 1
diff --git a/xen/arch/arm/arm32/debug-pl011.inc b/xen/arch/arm/arm32/debug-pl011.inc
index 2d970ea..8b085b8 100644
--- a/xen/arch/arm/arm32/debug-pl011.inc
+++ b/xen/arch/arm/arm32/debug-pl011.inc
@@ -16,8 +16,6 @@
* GNU General Public License for more details.
*/
-#define EARLY_UART_BASE_ADDRESS 0x1c090000
-
/* PL011 UART initialization
* rb: register which contains the UART base address
* rc: scratch register 1
diff --git a/xen/arch/arm/arm64/debug-pl011.inc b/xen/arch/arm/arm64/debug-pl011.inc
index 7220940..b416235 100644
--- a/xen/arch/arm/arm64/debug-pl011.inc
+++ b/xen/arch/arm/arm64/debug-pl011.inc
@@ -18,8 +18,6 @@
#include <asm/asm_defns.h>
-#define EARLY_UART_BASE_ADDRESS 0x1c090000
-
/* PL011 UART initialization
* xb: register which containts the UART base address
* c: scratch register number */
--
1.7.12.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH 3/4] arm/early-printk: move UART base address to Rules.mk
2013-05-24 10:42 ` [PATCH 3/4] arm/early-printk: move UART base address to Rules.mk Andre Przywara
@ 2013-05-24 12:36 ` Julien Grall
2013-05-24 12:51 ` Julien Grall
0 siblings, 1 reply; 11+ messages in thread
From: Julien Grall @ 2013-05-24 12:36 UTC (permalink / raw)
To: Andre Przywara; +Cc: xen-devel, Ian.Campbell, stefano.stabellini
On 05/24/2013 11:42 AM, Andre Przywara wrote:
> The UART memory mapped base address is currently hardcoded in the
> early-printk UART driver, which denies the driver to be used by
> two machines with a different mapping.
> Move this definition out to xen/arch/arm/Rules.mk, allowing easier
> user access and later sharing of the driver.
>
> Signed-off-by: Andre Przywara <andre.przywara@calxeda.com>
Reviewed-by: Julien Grall <julien.grall@linaro.org>
> ---
> xen/arch/arm/Rules.mk | 3 +++
> xen/arch/arm/arm32/debug-exynos4210.inc | 2 --
> xen/arch/arm/arm32/debug-pl011.inc | 2 --
> xen/arch/arm/arm64/debug-pl011.inc | 2 --
> 4 files changed, 3 insertions(+), 6 deletions(-)
>
> diff --git a/xen/arch/arm/Rules.mk b/xen/arch/arm/Rules.mk
> index fdcf73e..37a8271 100644
> --- a/xen/arch/arm/Rules.mk
> +++ b/xen/arch/arm/Rules.mk
> @@ -46,11 +46,13 @@ ifeq ($(debug),y)
> ifeq ($(CONFIG_EARLY_PRINTK), vexpress)
> EARLY_PRINTK_INC := pl011
> EARLY_PRINTK_BAUD := 38400
> +EARLY_UART_BASE_ADDRESS := 0x1c090000
> endif
> ifeq ($(CONFIG_EARLY_PRINTK), exynos5250)
> EARLY_PRINTK_INC := exynos4210
> EARLY_PRINTK_INIT_UART := y
> EARLY_PRINTK_BAUD := 115200
> +EARLY_UART_BASE_ADDRESS := 0x12c20000
> endif
>
> ifneq ($(EARLY_PRINTK_INC),)
> @@ -61,4 +63,5 @@ CFLAGS-$(EARLY_PRINTK) += -DEARLY_PRINTK
> CFLAGS-$(EARLY_PRINTK_INIT_UART) += -DEARLY_PRINTK_INIT_UART
> CFLAGS-$(EARLY_PRINTK) += -DEARLY_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)
> endif
> diff --git a/xen/arch/arm/arm32/debug-exynos4210.inc b/xen/arch/arm/arm32/debug-exynos4210.inc
> index 4922148..d746c35 100644
> --- a/xen/arch/arm/arm32/debug-exynos4210.inc
> +++ b/xen/arch/arm/arm32/debug-exynos4210.inc
> @@ -18,8 +18,6 @@
>
> #include <asm/exynos4210-uart.h>
>
> -#define EARLY_UART_BASE_ADDRESS 0x12c20000
> -
> /* Exynos 5 UART initialization
> * rb: register which contains the UART base address
> * rc: scratch register 1
> diff --git a/xen/arch/arm/arm32/debug-pl011.inc b/xen/arch/arm/arm32/debug-pl011.inc
> index 2d970ea..8b085b8 100644
> --- a/xen/arch/arm/arm32/debug-pl011.inc
> +++ b/xen/arch/arm/arm32/debug-pl011.inc
> @@ -16,8 +16,6 @@
> * GNU General Public License for more details.
> */
>
> -#define EARLY_UART_BASE_ADDRESS 0x1c090000
> -
> /* PL011 UART initialization
> * rb: register which contains the UART base address
> * rc: scratch register 1
> diff --git a/xen/arch/arm/arm64/debug-pl011.inc b/xen/arch/arm/arm64/debug-pl011.inc
> index 7220940..b416235 100644
> --- a/xen/arch/arm/arm64/debug-pl011.inc
> +++ b/xen/arch/arm/arm64/debug-pl011.inc
> @@ -18,8 +18,6 @@
>
> #include <asm/asm_defns.h>
>
> -#define EARLY_UART_BASE_ADDRESS 0x1c090000
> -
> /* PL011 UART initialization
> * xb: register which containts the UART base address
> * c: scratch register number */
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 3/4] arm/early-printk: move UART base address to Rules.mk
2013-05-24 12:36 ` Julien Grall
@ 2013-05-24 12:51 ` Julien Grall
0 siblings, 0 replies; 11+ messages in thread
From: Julien Grall @ 2013-05-24 12:51 UTC (permalink / raw)
To: Andre Przywara; +Cc: stefano.stabellini, Ian.Campbell, xen-devel
On 05/24/2013 01:36 PM, Julien Grall wrote:
> On 05/24/2013 11:42 AM, Andre Przywara wrote:
>
>> The UART memory mapped base address is currently hardcoded in the
>> early-printk UART driver, which denies the driver to be used by
>> two machines with a different mapping.
>> Move this definition out to xen/arch/arm/Rules.mk, allowing easier
>> user access and later sharing of the driver.
>>
>> Signed-off-by: Andre Przywara <andre.przywara@calxeda.com>
>
> Reviewed-by: Julien Grall <julien.grall@linaro.org>
By the way, could you remove the "# TODO handle UART..." in
arch/arm/Rules.mk as you have implemented it?
Thanks,
Julien
>> ---
>> xen/arch/arm/Rules.mk | 3 +++
>> xen/arch/arm/arm32/debug-exynos4210.inc | 2 --
>> xen/arch/arm/arm32/debug-pl011.inc | 2 --
>> xen/arch/arm/arm64/debug-pl011.inc | 2 --
>> 4 files changed, 3 insertions(+), 6 deletions(-)
>>
>> diff --git a/xen/arch/arm/Rules.mk b/xen/arch/arm/Rules.mk
>> index fdcf73e..37a8271 100644
>> --- a/xen/arch/arm/Rules.mk
>> +++ b/xen/arch/arm/Rules.mk
>> @@ -46,11 +46,13 @@ ifeq ($(debug),y)
>> ifeq ($(CONFIG_EARLY_PRINTK), vexpress)
>> EARLY_PRINTK_INC := pl011
>> EARLY_PRINTK_BAUD := 38400
>> +EARLY_UART_BASE_ADDRESS := 0x1c090000
>> endif
>> ifeq ($(CONFIG_EARLY_PRINTK), exynos5250)
>> EARLY_PRINTK_INC := exynos4210
>> EARLY_PRINTK_INIT_UART := y
>> EARLY_PRINTK_BAUD := 115200
>> +EARLY_UART_BASE_ADDRESS := 0x12c20000
>> endif
>>
>> ifneq ($(EARLY_PRINTK_INC),)
>> @@ -61,4 +63,5 @@ CFLAGS-$(EARLY_PRINTK) += -DEARLY_PRINTK
>> CFLAGS-$(EARLY_PRINTK_INIT_UART) += -DEARLY_PRINTK_INIT_UART
>> CFLAGS-$(EARLY_PRINTK) += -DEARLY_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)
>> endif
>> diff --git a/xen/arch/arm/arm32/debug-exynos4210.inc b/xen/arch/arm/arm32/debug-exynos4210.inc
>> index 4922148..d746c35 100644
>> --- a/xen/arch/arm/arm32/debug-exynos4210.inc
>> +++ b/xen/arch/arm/arm32/debug-exynos4210.inc
>> @@ -18,8 +18,6 @@
>>
>> #include <asm/exynos4210-uart.h>
>>
>> -#define EARLY_UART_BASE_ADDRESS 0x12c20000
>> -
>> /* Exynos 5 UART initialization
>> * rb: register which contains the UART base address
>> * rc: scratch register 1
>> diff --git a/xen/arch/arm/arm32/debug-pl011.inc b/xen/arch/arm/arm32/debug-pl011.inc
>> index 2d970ea..8b085b8 100644
>> --- a/xen/arch/arm/arm32/debug-pl011.inc
>> +++ b/xen/arch/arm/arm32/debug-pl011.inc
>> @@ -16,8 +16,6 @@
>> * GNU General Public License for more details.
>> */
>>
>> -#define EARLY_UART_BASE_ADDRESS 0x1c090000
>> -
>> /* PL011 UART initialization
>> * rb: register which contains the UART base address
>> * rc: scratch register 1
>> diff --git a/xen/arch/arm/arm64/debug-pl011.inc b/xen/arch/arm/arm64/debug-pl011.inc
>> index 7220940..b416235 100644
>> --- a/xen/arch/arm/arm64/debug-pl011.inc
>> +++ b/xen/arch/arm/arm64/debug-pl011.inc
>> @@ -18,8 +18,6 @@
>>
>> #include <asm/asm_defns.h>
>>
>> -#define EARLY_UART_BASE_ADDRESS 0x1c090000
>> -
>> /* PL011 UART initialization
>> * xb: register which containts the UART base address
>> * c: scratch register number */
>
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xen.org
> http://lists.xen.org/xen-devel
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 4/4] arm/early-printk: add Calxeda Midway UART support
2013-05-24 10:42 [PATCH 0/4] ARM/early-printk: Improve reusability and add Calxeda support Andre Przywara
` (2 preceding siblings ...)
2013-05-24 10:42 ` [PATCH 3/4] arm/early-printk: move UART base address to Rules.mk Andre Przywara
@ 2013-05-24 10:42 ` Andre Przywara
2013-05-24 12:38 ` Julien Grall
2013-05-24 12:40 ` [PATCH 0/4] ARM/early-printk: Improve reusability and add Calxeda support Julien Grall
4 siblings, 1 reply; 11+ messages in thread
From: Andre Przywara @ 2013-05-24 10:42 UTC (permalink / raw)
To: stefano.stabellini, Ian.Campbell; +Cc: Andre Przywara, xen-devel
With the help of the last three patches add a stanza to
xen/arch/arm/Rules.mk to specify the UART configuration of the
Calxeda Midway machine.
The information has been taken from the Linux kernel's .dts file.
This can be enabled by adding "CONFIG_EARLY_PRINTK=midway" to
Config.mk.
Signed-off-by: Andre Przywara <andre.przywara@calxeda.com>
---
xen/arch/arm/Rules.mk | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/xen/arch/arm/Rules.mk b/xen/arch/arm/Rules.mk
index 37a8271..cfc9e4d 100644
--- a/xen/arch/arm/Rules.mk
+++ b/xen/arch/arm/Rules.mk
@@ -54,6 +54,11 @@ EARLY_PRINTK_INIT_UART := y
EARLY_PRINTK_BAUD := 115200
EARLY_UART_BASE_ADDRESS := 0x12c20000
endif
+ifeq ($(CONFIG_EARLY_PRINTK), midway)
+EARLY_PRINTK_INC := pl011
+EARLY_PRINTK_BAUD := 115200
+EARLY_UART_BASE_ADDRESS := 0xfff36000
+endif
ifneq ($(EARLY_PRINTK_INC),)
EARLY_PRINTK := y
--
1.7.12.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH 4/4] arm/early-printk: add Calxeda Midway UART support
2013-05-24 10:42 ` [PATCH 4/4] arm/early-printk: add Calxeda Midway UART support Andre Przywara
@ 2013-05-24 12:38 ` Julien Grall
0 siblings, 0 replies; 11+ messages in thread
From: Julien Grall @ 2013-05-24 12:38 UTC (permalink / raw)
To: Andre Przywara; +Cc: xen-devel, Ian.Campbell, stefano.stabellini
On 05/24/2013 11:42 AM, Andre Przywara wrote:
> With the help of the last three patches add a stanza to
> xen/arch/arm/Rules.mk to specify the UART configuration of the
> Calxeda Midway machine.
> The information has been taken from the Linux kernel's .dts file.
> This can be enabled by adding "CONFIG_EARLY_PRINTK=midway" to
> Config.mk.
Could add a line in docs/misc/arm/early-printk.txt to document this new
early printk?
Thanks,
Julien
> Signed-off-by: Andre Przywara <andre.przywara@calxeda.com>
> ---
> xen/arch/arm/Rules.mk | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/xen/arch/arm/Rules.mk b/xen/arch/arm/Rules.mk
> index 37a8271..cfc9e4d 100644
> --- a/xen/arch/arm/Rules.mk
> +++ b/xen/arch/arm/Rules.mk
> @@ -54,6 +54,11 @@ EARLY_PRINTK_INIT_UART := y
> EARLY_PRINTK_BAUD := 115200
> EARLY_UART_BASE_ADDRESS := 0x12c20000
> endif
> +ifeq ($(CONFIG_EARLY_PRINTK), midway)
> +EARLY_PRINTK_INC := pl011
> +EARLY_PRINTK_BAUD := 115200
> +EARLY_UART_BASE_ADDRESS := 0xfff36000
> +endif
>
> ifneq ($(EARLY_PRINTK_INC),)
> EARLY_PRINTK := y
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 0/4] ARM/early-printk: Improve reusability and add Calxeda support
2013-05-24 10:42 [PATCH 0/4] ARM/early-printk: Improve reusability and add Calxeda support Andre Przywara
` (3 preceding siblings ...)
2013-05-24 10:42 ` [PATCH 4/4] arm/early-printk: add Calxeda Midway UART support Andre Przywara
@ 2013-05-24 12:40 ` Julien Grall
4 siblings, 0 replies; 11+ messages in thread
From: Julien Grall @ 2013-05-24 12:40 UTC (permalink / raw)
To: Andre Przywara; +Cc: xen-devel, Ian.Campbell, stefano.stabellini
On 05/24/2013 11:42 AM, Andre Przywara wrote:
> The current early-printk support for ARM is rather hard-coded, making
> it hard to add machines or tweak settings.
> This series slightly moves some code to gather UART settings in
> xen/arch/arm/Rules.mk instead of the actual .c files. Also it allows
> two different machines with different settings to share the same
> driver, which the last patch exploits to add support the Calxeda
> Midway hardware.
>
> This haven't been extensively tested, but I looked at the generated
> assembly and did some quick checks on Versatile Express.
Thanks for this patch series, the UART code is now more generic :).
I tried all these patches on the fast model and the arndale board. I
didn't see any specific issue.
Cheers,
Julien
>
> Signed-off-by: Andre Przywara <andre.przywara@calxeda.com>
>
> Andre Przywara (4):
> arm/early-printk: calculate baud rate divisor from user provided
> value
> arm/early-printk: allow skipping of UART init
> arm/early-printk: move UART base address to Rules.mk
> arm/early-printk: add Calxeda Midway UART support
>
> xen/arch/arm/Rules.mk | 13 +++++++++++++
> xen/arch/arm/arm32/debug-exynos4210.inc | 6 ++----
> xen/arch/arm/arm32/debug-pl011.inc | 6 ++----
> xen/arch/arm/arm32/head.S | 2 ++
> xen/arch/arm/arm64/debug-pl011.inc | 6 ++----
> xen/arch/arm/arm64/head.S | 2 ++
> 6 files changed, 23 insertions(+), 12 deletions(-)
>
^ permalink raw reply [flat|nested] 11+ messages in thread