From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andre Przywara Subject: [PATCH 1/4] arm/early-printk: calculate baud rate divisor from user provided value Date: Fri, 24 May 2013 12:42:29 +0200 Message-ID: <1369392152-1305-2-git-send-email-andre.przywara@calxeda.com> References: <1369392152-1305-1-git-send-email-andre.przywara@calxeda.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1369392152-1305-1-git-send-email-andre.przywara@calxeda.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: stefano.stabellini@eu.citrix.com, Ian.Campbell@citrix.com Cc: Andre Przywara , xen-devel@lists.xen.org List-Id: xen-devel@lists.xenproject.org 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 --- 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