[U-Boot] [PATCH 1/2] arm: lpc32xx: switch serial console to driver model
Vladimir Zapolskiy
vz at mleia.com
Sat Dec 19 21:50:53 CET 2015
Hi Simon,
On 19.12.2015 22:30, Simon Glass wrote:
> 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
Ok, thanks for the hint, I relied only on coding style description from
README.
>> +
>> #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.
Here I want to emphasize that the change is non-SPL specific.
If this patch is applied, then SPL image still contains legacy NS16550
driver, and U-boot image is switched to its DM driver.
!defined(CONFIG_SPL_BUILD) is removed in the second change.
>> +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.
>
That is done in the second patch.
Do you think it makes sense to squash them?
With best wishes,
Vladimir
More information about the U-Boot
mailing list