[U-Boot] [PATCH 1/2] arm: lpc32xx: switch serial console to driver model
Simon Glass
sjg at chromium.org
Sat Dec 19 21:30:07 CET 2015
Hi Vladimir,
On 12 December 2015 at 17:48, Vladimir Zapolskiy <vz at mleia.com> wrote:
> On NXP LPC32xx platform for non-SPL builds the change adds
> standard (NS16550) and high-speed UARTs to driver model.
> Due to specific of DM NS16550 device description UART clock can not be
> got in runtime and by default it is set to 13MHz, if board PERIPH_CLK
> is different, this should be specified in board configuration file.
>
> For SPL builds HSUARTs are disabled and non-DM NS16550 driver is
> compiled, if needed.
>
> The change also updates default configs of devkit3250 and work_92105
> boards to reflect updates in platform files.
>
> Signed-off-by: Vladimir Zapolskiy <vz at mleia.com>
> ---
> arch/arm/cpu/arm926ejs/lpc32xx/devices.c | 37 ++++++++++++++++++++++++++++--
> arch/arm/include/asm/arch-lpc32xx/config.h | 32 +++++++++++++++-----------
> configs/devkit3250_defconfig | 1 +
> configs/work_92105_defconfig | 1 +
> 4 files changed, 56 insertions(+), 15 deletions(-)
Reviewed-by: Simon Glass <sjg at chromium.org>
Nits below.
>
> diff --git a/arch/arm/cpu/arm926ejs/lpc32xx/devices.c b/arch/arm/cpu/arm926ejs/lpc32xx/devices.c
> index b1c3f8f..447d0cd 100644
> --- a/arch/arm/cpu/arm926ejs/lpc32xx/devices.c
> +++ b/arch/arm/cpu/arm926ejs/lpc32xx/devices.c
> @@ -5,12 +5,14 @@
> */
>
> #include <common.h>
> -#include <asm/arch/cpu.h>
> +#include <dm.h>
> +#include <dm/platform_data/lpc32xx_hsuart.h>
> +#include <ns16550.h>
nit: please put this before the dm/ include. Sub-directory include
should go at the end. See:
http://www.denx.de/wiki/U-Boot/CodingStyle
> +
> #include <asm/arch/clk.h>
> #include <asm/arch/uart.h>
> #include <asm/arch/mux.h>
> #include <asm/io.h>
> -#include <dm.h>
>
> static struct clk_pm_regs *clk = (struct clk_pm_regs *)CLK_PM_BASE;
> static struct uart_ctrl_regs *ctrl = (struct uart_ctrl_regs *)UART_CTRL_BASE;
> @@ -41,6 +43,37 @@ void lpc32xx_uart_init(unsigned int uart_id)
> &clk->u3clk + (uart_id - 3));
> }
>
> +#if !CONFIG_IS_ENABLED(OF_CONTROL) && !defined(CONFIG_SPL_BUILD)
#ifndef CONFIG_OF_CONTROL
should be equivalent to this.
> +static const struct ns16550_platdata lpc32xx_uart[] = {
> + { UART3_BASE, 2, CONFIG_SYS_NS16550_CLK },
> + { UART4_BASE, 2, CONFIG_SYS_NS16550_CLK },
> + { UART5_BASE, 2, CONFIG_SYS_NS16550_CLK },
> + { UART6_BASE, 2, CONFIG_SYS_NS16550_CLK },
> +};
> +
> +#if defined(CONFIG_LPC32XX_HSUART)
> +static const struct lpc32xx_hsuart_platdata lpc32xx_hsuart[] = {
> + { HS_UART1_BASE, },
> + { HS_UART2_BASE, },
> + { HS_UART7_BASE, },
> +};
> +#endif
> +
> +U_BOOT_DEVICES(lpc32xx_uarts) = {
> +#if defined(CONFIG_LPC32XX_HSUART)
> + { "lpc32xx_hsuart", &lpc32xx_hsuart[0], },
> + { "lpc32xx_hsuart", &lpc32xx_hsuart[1], },
> +#endif
> + { "ns16550_serial", &lpc32xx_uart[0], },
> + { "ns16550_serial", &lpc32xx_uart[1], },
> + { "ns16550_serial", &lpc32xx_uart[2], },
> + { "ns16550_serial", &lpc32xx_uart[3], },
> +#if defined(CONFIG_LPC32XX_HSUART)
> + { "lpc32xx_hsuart", &lpc32xx_hsuart[2], },
> +#endif
> +};
> +#endif
> +
> void lpc32xx_dma_init(void)
> {
> /* Enable DMA interface */
> diff --git a/arch/arm/include/asm/arch-lpc32xx/config.h b/arch/arm/include/asm/arch-lpc32xx/config.h
> index 521bff1..27e60e1 100644
> --- a/arch/arm/include/asm/arch-lpc32xx/config.h
> +++ b/arch/arm/include/asm/arch-lpc32xx/config.h
> @@ -16,16 +16,21 @@
> #define CONFIG_NR_DRAM_BANKS_MAX 2
>
> /* UART configuration */
> -#if (CONFIG_SYS_LPC32XX_UART >= 3) && (CONFIG_SYS_LPC32XX_UART <= 6)
> -#define CONFIG_SYS_NS16550_SERIAL
> -#define CONFIG_CONS_INDEX (CONFIG_SYS_LPC32XX_UART - 2)
> -#elif (CONFIG_SYS_LPC32XX_UART == 1) || (CONFIG_SYS_LPC32XX_UART == 2) || \
> +#if (CONFIG_SYS_LPC32XX_UART == 1) || (CONFIG_SYS_LPC32XX_UART == 2) || \
> (CONFIG_SYS_LPC32XX_UART == 7)
> +#if defined(CONFIG_SPL_BUILD)
> +/* SPL images do not support LPC32xx HSUART, UART5 is selected for SPL */
> +#undef CONFIG_SYS_LPC32XX_UART
> +#define CONFIG_SYS_LPC32XX_UART 5
> +#endif
> +
> +#if !defined(CONFIG_LPC32XX_HSUART)
> #define CONFIG_LPC32XX_HSUART
> -#else
> -#error "define CONFIG_SYS_LPC32XX_UART in the range from 1 to 7"
> +#endif
> #endif
>
> +#if defined(CONFIG_SPL_BUILD)
> +#define CONFIG_SYS_NS16550_SERIAL
> #define CONFIG_SYS_NS16550_REG_SIZE -4
> #define CONFIG_SYS_NS16550_CLK get_serial_clock()
>
> @@ -33,15 +38,16 @@
> #define CONFIG_SYS_NS16550_COM2 UART4_BASE
> #define CONFIG_SYS_NS16550_COM3 UART5_BASE
> #define CONFIG_SYS_NS16550_COM4 UART6_BASE
> +#endif
>
> -#if defined(CONFIG_LPC32XX_HSUART)
> -#if CONFIG_SYS_LPC32XX_UART == 1
> -#define HS_UART_BASE HS_UART1_BASE
> -#elif CONFIG_SYS_LPC32XX_UART == 2
> -#define HS_UART_BASE HS_UART2_BASE
> -#else /* CONFIG_SYS_LPC32XX_UART == 7 */
> -#define HS_UART_BASE HS_UART7_BASE
> +#if !defined(CONFIG_SYS_NS16550_CLK)
> +#define CONFIG_SYS_NS16550_CLK 13000000
> #endif
> +
> +#if !defined(CONFIG_LPC32XX_HSUART) || defined(CONFIG_SPL_BUILD)
> +#define CONFIG_CONS_INDEX (CONFIG_SYS_LPC32XX_UART - 2)
> +#else
> +#define CONFIG_CONS_INDEX CONFIG_SYS_LPC32XX_UART
> #endif
>
> #define CONFIG_SYS_BAUDRATE_TABLE \
> diff --git a/configs/devkit3250_defconfig b/configs/devkit3250_defconfig
> index 64a0fb0..0abb8e0 100644
> --- a/configs/devkit3250_defconfig
> +++ b/configs/devkit3250_defconfig
> @@ -1,5 +1,6 @@
> CONFIG_ARM=y
> CONFIG_TARGET_DEVKIT3250=y
> +CONFIG_DM_SERIAL=y
> CONFIG_DM_GPIO=y
> CONFIG_SPL=y
> # CONFIG_CMD_FPGA is not set
> diff --git a/configs/work_92105_defconfig b/configs/work_92105_defconfig
> index 1cad3a2..a5a108e 100644
> --- a/configs/work_92105_defconfig
> +++ b/configs/work_92105_defconfig
> @@ -1,5 +1,6 @@
> CONFIG_ARM=y
> CONFIG_TARGET_WORK_92105=y
> +CONFIG_DM_SERIAL=y
> CONFIG_DM_GPIO=y
> CONFIG_SPL=y
> # CONFIG_CMD_IMLS is not set
> --
> 2.1.4
>
BTW you should be able to adjust it to work in SPL also.
Regards,
Simon
More information about the U-Boot
mailing list