aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndre Przywara <andre.przywara@calxeda.com>2013-05-24 15:47:26 +0200
committerIan Campbell <ian.campbell@citrix.com>2013-05-30 09:20:10 +0100
commitb68346247f74e002ef180403167888a03f488080 (patch)
tree05b17aaa93f8ba4d5dfb6b8151cacab4b842dfb8
parent54353cae096c19f176417f6d425de0a0f8a71228 (diff)
downloadxen-b68346247f74e002ef180403167888a03f488080.tar.gz
xen-b68346247f74e002ef180403167888a03f488080.tar.bz2
xen-b68346247f74e002ef180403167888a03f488080.zip
arm/early-printk: calculate baud rate divisor from user provided value
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> Acked-by: Ian Campbell <ian.campbell@citrix.com>
-rw-r--r--docs/misc/arm/early-printk.txt3
-rw-r--r--xen/arch/arm/Rules.mk3
-rw-r--r--xen/arch/arm/arm32/debug-exynos4210.inc4
-rw-r--r--xen/arch/arm/arm32/debug-pl011.inc4
-rw-r--r--xen/arch/arm/arm64/debug-pl011.inc4
5 files changed, 12 insertions, 6 deletions
diff --git a/docs/misc/arm/early-printk.txt b/docs/misc/arm/early-printk.txt
index d5cae85ddb..10c30531f6 100644
--- a/docs/misc/arm/early-printk.txt
+++ b/docs/misc/arm/early-printk.txt
@@ -12,4 +12,7 @@ where mach is the name of the machine:
- vexpress: printk with pl011 for versatile express
- exynos5250: printk with the second UART
+The baud rate is hardcoded in xen/arch/arm/Rules.mk,
+see there when adding support for new machines.
+
By default early printk is disabled.
diff --git a/xen/arch/arm/Rules.mk b/xen/arch/arm/Rules.mk
index b6a68902bb..b4d690716a 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 42416406ca..4922148ac1 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 6954aeb660..2d970ea364 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 ee6e0e03e7..722094036d 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) */