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

[Xen-changelog] [xen master] arm/early-printk: calculate baud rate divisor from user provided value



commit b68346247f74e002ef180403167888a03f488080
Author:     Andre Przywara <andre.przywara@xxxxxxxxxxx>
AuthorDate: Fri May 24 15:47:26 2013 +0200
Commit:     Ian Campbell <ian.campbell@xxxxxxxxxx>
CommitDate: Thu May 30 09:20:10 2013 +0100

    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@xxxxxxxxxxx>
    Reviewed-by: Julien Grall <julien.grall@xxxxxxxxxx>
    Acked-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
---
 docs/misc/arm/early-printk.txt          |    3 +++
 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 ++--
 5 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/docs/misc/arm/early-printk.txt b/docs/misc/arm/early-printk.txt
index d5cae85..10c3053 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 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) */
--
generated by git-patchbot for /home/xen/git/xen.git#master

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

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