[U-Boot] [PATCH] arm: serial: Add debug UART capability to the pl01x driver

This patch adds an ability to use pl01x as a debug UART. It must be configured like other types of debug UARTs
Signed-off-by: Sergey Temerkhanov s.temerkhanov@gmail.com Signed-off-by: Radha Mohan Chintakuntla rchintakuntla@cavium.com ---
drivers/serial/Kconfig | 20 ++++++++++++++++++++ drivers/serial/serial_pl01x.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+)
diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig index ccb80d2..b471adc 100644 --- a/drivers/serial/Kconfig +++ b/drivers/serial/Kconfig @@ -77,6 +77,13 @@ config DEBUG_UART_S5P will need to provide parameters to make this work. The driver will be available until the real driver-model serial is running.
+config DEBUG_UART_PL01X + bool "pl01x" + help + Select this to enable a debug UART using the pl01x driver. You + will need to provide parameters to make this work. The driver will + be available until the real driver model serial is running. + endchoice
config DEBUG_UART_BASE @@ -109,6 +116,19 @@ config DEBUG_UART_SHIFT value. Use this value to specify the shift to use, where 0=byte registers, 2=32-bit word registers, etc.
+config DEBUG_UART_SKIP_INIT + bool "Skip UART initialition" + help + Select this if the UART you want to use for debug output is already + initialized by the time U-Boot starts its execution. + +config DEBUG_UART_PL011 + bool "PL011 UART type" + depends on DEBUG_UART_PL01X + help + Select this if the UART you want to use for debug output is of type + PL011. + config ROCKCHIP_SERIAL bool "Rockchip on-chip UART support" depends on ARCH_UNIPHIER && DM_SERIAL diff --git a/drivers/serial/serial_pl01x.c b/drivers/serial/serial_pl01x.c index e6ceaa1..5e96bf4 100644 --- a/drivers/serial/serial_pl01x.c +++ b/drivers/serial/serial_pl01x.c @@ -391,3 +391,31 @@ U_BOOT_DRIVER(serial_pl01x) = { };
#endif + +#ifdef CONFIG_DEBUG_UART_PL01X + +#include <debug_uart.h> + +void debug_uart_init(void) +{ +#ifndef CONFIG_DEBUG_UART_SKIP_INIT + struct pl01x_regs *regs = (struct pl01x_regs *)CONFIG_DEBUG_UART_BASE; + enum pl01x_type type = CONFIG_IS_ENABLED(DEBUG_UART_PL011) ? + TYPE_PL011 : TYPE_PL010; + + pl01x_generic_serial_init(regs, type); + pl01x_generic_setbrg(regs, type, + CONFIG_DEBUG_UART_CLOCK, CONFIG_BAUDRATE); +#endif +} + +static inline void _debug_uart_putc(int ch) +{ + struct pl01x_regs *regs = (struct pl01x_regs *)CONFIG_DEBUG_UART_BASE; + + pl01x_putc(regs, ch); +} + +DEBUG_UART_FUNCS + +#endif

Hi Sergey,
On 8 September 2015 at 12:14, Sergey Temerkhanov s.temerkhanov@gmail.com wrote:
This patch adds an ability to use pl01x as a debug UART. It must be configured like other types of debug UARTs
Signed-off-by: Sergey Temerkhanov s.temerkhanov@gmail.com Signed-off-by: Radha Mohan Chintakuntla rchintakuntla@cavium.com
drivers/serial/Kconfig | 20 ++++++++++++++++++++ drivers/serial/serial_pl01x.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+)
diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig index ccb80d2..b471adc 100644 --- a/drivers/serial/Kconfig +++ b/drivers/serial/Kconfig @@ -77,6 +77,13 @@ config DEBUG_UART_S5P will need to provide parameters to make this work. The driver will be available until the real driver-model serial is running.
+config DEBUG_UART_PL01X
bool "pl01x"
help
Select this to enable a debug UART using the pl01x driver. You
will need to provide parameters to make this work. The driver will
be available until the real driver model serial is running.
endchoice
config DEBUG_UART_BASE @@ -109,6 +116,19 @@ config DEBUG_UART_SHIFT value. Use this value to specify the shift to use, where 0=byte registers, 2=32-bit word registers, etc.
+config DEBUG_UART_SKIP_INIT
bool "Skip UART initialition"
spelling. Also can you please put this in a separate patch? I have another debug UART patch which might allow this to be implemented differently.
help
Select this if the UART you want to use for debug output is already
initialized by the time U-Boot starts its execution.
+config DEBUG_UART_PL011
I think this one needs to go up in the choice section: prompt "Select which UART will provide the debug UART"
bool "PL011 UART type"
depends on DEBUG_UART_PL01X
help
Select this if the UART you want to use for debug output is of type
PL011.
config ROCKCHIP_SERIAL bool "Rockchip on-chip UART support" depends on ARCH_UNIPHIER && DM_SERIAL diff --git a/drivers/serial/serial_pl01x.c b/drivers/serial/serial_pl01x.c index e6ceaa1..5e96bf4 100644 --- a/drivers/serial/serial_pl01x.c +++ b/drivers/serial/serial_pl01x.c @@ -391,3 +391,31 @@ U_BOOT_DRIVER(serial_pl01x) = { };
#endif
+#ifdef CONFIG_DEBUG_UART_PL01X
+#include <debug_uart.h>
+void debug_uart_init(void) +{ +#ifndef CONFIG_DEBUG_UART_SKIP_INIT
struct pl01x_regs *regs = (struct pl01x_regs *)CONFIG_DEBUG_UART_BASE;
enum pl01x_type type = CONFIG_IS_ENABLED(DEBUG_UART_PL011) ?
TYPE_PL011 : TYPE_PL010;
pl01x_generic_serial_init(regs, type);
pl01x_generic_setbrg(regs, type,
CONFIG_DEBUG_UART_CLOCK, CONFIG_BAUDRATE);
+#endif +}
+static inline void _debug_uart_putc(int ch) +{
struct pl01x_regs *regs = (struct pl01x_regs *)CONFIG_DEBUG_UART_BASE;
pl01x_putc(regs, ch);
+}
+DEBUG_UART_FUNCS
+#endif
2.2.0
Regards, Simon
participants (2)
-
Sergey Temerkhanov
-
Simon Glass