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

Re: [Xen-devel] [PATCH v2 1/5] arm/early-printk: calculate baud rate divisor from user provided value



On 05/24/2013 02:47 PM, 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@xxxxxxxxxxx>

Reviewed-by: Julien Grall <julien.grall@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) */



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

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