serial: samsung: add support for early console
v3 cover serial: samsung: add support for early console
This patchset adds support for early console defined in device tree. As an example, DTS files for all Exynos4 based machines are updated with the correct value for common chosen/sdtout property.
To get it fully functional on ARM architecture, additional improvements (support for early_ioremap) are needed in early console code.
Best regards
Marek Szyprowski
Samsung R&D Institute Poland
Change log:
v3:
- rebased onto v3.18-rc1
- removed options from documentation (they are not yet supported)
v2: http://www.spinics.net/lists/linux-samsung-soc/msg37278.html
- added support for command line based initialization
v1: http://www.spinics.net/lists/linux-samsung-soc/msg37094.html
- initial version
Tomasz Figa (2):
serial: samsung: Add support for early console
ARM: dts: exynos4: Add stdout-path properties
Documentation/kernel-parameters.txt | 12 +++ arch/arm/boot/dts/exynos4210-origen.dts | 1 + arch/arm/boot/dts/exynos4210-smdkv310.dts | 1 + arch/arm/boot/dts/exynos4210-trats.dts | 1 + arch/arm/boot/dts/exynos4210-universal_c210.dts | 1 + arch/arm/boot/dts/exynos4412-odroid-common.dtsi | 4 + arch/arm/boot/dts/exynos4412-origen.dts | 1 + arch/arm/boot/dts/exynos4412-smdk4412.dts | 1 + arch/arm/boot/dts/exynos4412-tiny4412.dts | 4 + arch/arm/boot/dts/exynos4412-trats2.dts | 1 + drivers/tty/serial/Kconfig | 1 + drivers/tty/serial/samsung.c | 103 ++++++++++++++++++++++++ 12 files changed, 131 insertions(+)
Signature · 1 line
1.9.2
PATCH v3 1/2 serial: samsung: Add support for early console
From: Tomasz Figa <[email protected]>
This patch adds support for early console initialized from device tree and kernel command line to all variants of Samsung serial driver.
[mszyprow: added support for command line based initialization,
fixed comments, added documentation]
--- Documentation/kernel-parameters.txt | 12 +++++ drivers/tty/serial/Kconfig | 1 + drivers/tty/serial/samsung.c | 103 ++++++++++++++++++++++++++++++++++++ 3 files changed, 116 insertions(+)
Documentation/kernel-parameters.txt +12 -0
@@ -961,6 +961,18 @@ bytes respectively. Such letter suffixes can also be entirely omitted. smh Use ARM semihosting calls for early console. + s3c2410,<addr> + s3c2412,<addr> + s3c2440,<addr> + s3c6400,<addr> + s5pv210,<addr> + exynos4210,<addr> + Use early console provided by serial driver available + on Samsung SoCs, requires selecting proper type and + a correct base address of the selected UART port. The + serial port must already be setup and configured. + Options are not yet supported. + earlyprintk= [X86,SH,BLACKFIN,ARM,M68k] earlyprintk=vga earlyprintk=efi
drivers/tty/serial/Kconfig +1 -0
@@ -241,6 +241,7 @@ config SERIAL_SAMSUNG tristate "Samsung SoC serial support" depends on PLAT_SAMSUNG || ARCH_EXYNOS select SERIAL_CORE + select SERIAL_EARLYCON help Support for the on-chip UARTs on the Samsung S3C24XX series CPUs, providing /dev/ttySAC0, 1 and 2 (note, some machines may not
drivers/tty/serial/samsung.c +103 -0
109 lines not on this page · raw message
Signature · 1 line
1.9.2
PATCH v3 1/2 serial: samsung: Add support for early console
Quoted 11 lines · Marek Szyprowski
From: Tomasz Figa <[email protected]>
This patch adds support for early console initialized from device tree and kernel command line to all variants of Samsung serial driver.
Signed-off-by Tomasz Figa <[email protected]>[mszyprow: added support for command line based initialization,
fixed comments, added documentation]Signed-off-by Marek Szyprowski <[email protected]>Reviewed-by Alim Akhtar <[email protected]>Tested-by Alim Akhtar <[email protected]>
I tested this patchset with Exynos5 SoC.
Thanks,
Chanwoo Choi
Quoted 156 lines
--- Documentation/kernel-parameters.txt | 12 +++++ drivers/tty/serial/Kconfig | 1 + drivers/tty/serial/samsung.c | 103 ++++++++++++++++++++++++++++++++++++ 3 files changed, 116 insertions(+)Documentation/kernel-parameters.txt +12
-0@@ -961,6 +961,18 @@ bytes respectively. Such letter suffixes can also be entirely omitted. smh Use ARM semihosting calls for early console. + s3c2410,<addr> + s3c2412,<addr> + s3c2440,<addr> + s3c6400,<addr> + s5pv210,<addr> + exynos4210,<addr> + Use early console provided by serial driver available + on Samsung SoCs, requires selecting proper type and + a correct base address of the selected UART port. The + serial port must already be setup and configured. + Options are not yet supported. + earlyprintk= [X86,SH,BLACKFIN,ARM,M68k] earlyprintk=vga earlyprintk=efidrivers/tty/serial/Kconfig +1
-0@@ -241,6 +241,7 @@ config SERIAL_SAMSUNG tristate "Samsung SoC serial support" depends on PLAT_SAMSUNG || ARCH_EXYNOS select SERIAL_CORE + select SERIAL_EARLYCON help Support for the on-chip UARTs on the Samsung S3C24XX series CPUs, providing /dev/ttySAC0, 1 and 2 (note, some machines may notdrivers/tty/serial/samsung.c +103
-0@@ -1856,6 +1856,109 @@ static struct platform_driver samsung_serial_driver = {module_platform_driver (samsung_serial_driver); +/* +* Early console. +*/ + +struct samsung_early_console_data { +u32 txfull_mask; +}; + +static void samsung_early_busyuart (struct uart_port *port) +{ +while (!(readl (port->membase +S3C2410_UTRSTAT ) &S3C2410_UTRSTAT_TXFE )) + ; +} + +static void samsung_early_busyuart_fifo (struct uart_port *port) +{ +struct samsung_early_console_data *data = port->private_data; + +while (readl (port->membase +S3C2410_UFSTAT ) & data->txfull_mask) + ; +} + +static void samsung_early_putc (struct uart_port *port,int c) +{ +if (readl (port->membase +S3C2410_UFCON ) &S3C2410_UFCON_FIFOMODE ) +samsung_early_busyuart_fifo (port); +else +samsung_early_busyuart (port); + +writeb (c, port->membase +S3C2410_UTXH ); +} + +static void samsung_early_write (struct console *con,const char *s,unsigned n) +{ +struct earlycon_device *dev = con->data; + +uart_console_write (&dev->port, s, n, samsung_early_putc); +} + +static int __init samsung_early_console_setup (struct earlycon_device *device, +const char *opt) +{ +if (!device->port.membase) +return -ENODEV ; + + device->con->write = samsung_early_write; +return 0 ; +} + +/* S3C2410 */ +static struct samsung_early_console_data s3c2410_early_console_data = { + .txfull_mask =S3C2410_UFSTAT_TXFULL , +}; + +static int __init s3c2410_early_console_setup (struct earlycon_device *device, +const char *opt) +{ + device->port.private_data = &s3c2410_early_console_data; +return samsung_early_console_setup (device, opt); +} +OF_EARLYCON_DECLARE (s3c2410,"samsung,s3c2410-uart" , + s3c2410_early_console_setup); +EARLYCON_DECLARE (s3c2410, s3c2410_early_console_setup); + +/* S3C2412, S3C2440, S3C64xx */ +static struct samsung_early_console_data s3c2440_early_console_data = { + .txfull_mask =S3C2440_UFSTAT_TXFULL , +}; + +static int __init s3c2440_early_console_setup (struct earlycon_device *device, +const char *opt) +{ + device->port.private_data = &s3c2440_early_console_data; +return samsung_early_console_setup (device, opt); +} +OF_EARLYCON_DECLARE (s3c2412,"samsung,s3c2412-uart" , + s3c2440_early_console_setup); +OF_EARLYCON_DECLARE (s3c2440,"samsung,s3c2440-uart" , + s3c2440_early_console_setup); +OF_EARLYCON_DECLARE (s3c6400,"samsung,s3c6400-uart" , + s3c2440_early_console_setup); +EARLYCON_DECLARE (s3c2412, s3c2440_early_console_setup); +EARLYCON_DECLARE (s3c2440, s3c2440_early_console_setup); +EARLYCON_DECLARE (s3c6400, s3c2440_early_console_setup); + +/* S5PV210, EXYNOS */ +static struct samsung_early_console_data s5pv210_early_console_data = { + .txfull_mask =S5PV210_UFSTAT_TXFULL , +}; + +static int __init s5pv210_early_console_setup (struct earlycon_device *device, +const char *opt) +{ + device->port.private_data = &s5pv210_early_console_data; +return samsung_early_console_setup (device, opt); +} +OF_EARLYCON_DECLARE (s5pv210,"samsung,s5pv210-uart" , + s5pv210_early_console_setup); +OF_EARLYCON_DECLARE (exynos4210,"samsung,exynos4210-uart" , + s5pv210_early_console_setup); +EARLYCON_DECLARE (s5pv210, s5pv210_early_console_setup); +EARLYCON_DECLARE (exynos4210, s5pv210_early_console_setup); +MODULE_ALIAS ("platform:samsung-uart" );MODULE_DESCRIPTION ("Samsung SoC Serial port driver" );MODULE_AUTHOR ("Ben Dooks <[email protected]>" );
PATCH v3 2/2 ARM: dts: exynos4: Add stdout-path properties
In reply to Marek SzyprowskiFrom: Tomasz Figa <[email protected]>
This patch adds stdout-path property to chosen nodes of Exynos4 boards to enable use of earlycon feature without the need to hardcode port number in kernel itself.
--- arch/arm/boot/dts/exynos4210-origen.dts | 1 + arch/arm/boot/dts/exynos4210-smdkv310.dts | 1 + arch/arm/boot/dts/exynos4210-trats.dts | 1 + arch/arm/boot/dts/exynos4210-universal_c210.dts | 1 + arch/arm/boot/dts/exynos4412-odroid-common.dtsi | 4 ++++ arch/arm/boot/dts/exynos4412-origen.dts | 1 + arch/arm/boot/dts/exynos4412-smdk4412.dts | 1 + arch/arm/boot/dts/exynos4412-tiny4412.dts | 4 ++++ arch/arm/boot/dts/exynos4412-trats2.dts | 1 + 9 files changed, 15 insertions(+)
arch/arm/boot/dts/exynos4210-origen.dts +1 -0
@@ -31,6 +31,7 @@ chosen { bootargs ="root=/dev/ram0 rw ramdisk=8192 initrd=0x41000000,8M console=ttySAC2,115200 init=/linuxrc"; + stdout-path = &serial_2; }; regulators {
arch/arm/boot/dts/exynos4210-smdkv310.dts +1 -0
@@ -27,6 +27,7 @@ chosen { bootargs = "root=/dev/ram0 rw ramdisk=8192 initrd=0x41000000,8M console=ttySAC1,115200 init=/linuxrc"; + stdout-path = &serial_1; }; sdhci at 12530000 {
arch/arm/boot/dts/exynos4210-trats.dts +1 -0
@@ -28,6 +28,7 @@ chosen { bootargs = "console=ttySAC2,115200N8 root=/dev/mmcblk0p5 rootwait earlyprintk panic=5"; + stdout-path = &serial_2; }; regulators {
arch/arm/boot/dts/exynos4210-universal_c210.dts +1 -0
@@ -26,6 +26,7 @@ chosen { bootargs = "console=ttySAC2,115200N8 root=/dev/mmcblk0p5 rw rootwait earlyprintk panic=5 maxcpus=1"; + stdout-path = &serial_2; }; sysram at 02020000 {
arch/arm/boot/dts/exynos4412-odroid-common.dtsi +4 -0
@@ -11,6 +11,10 @@ #include "exynos4412.dtsi" / { + chosen { + stdout-path = &serial_1; + }; + firmware at 0204F000 { compatible = "samsung,secure-firmware"; reg = <0x0204F000 0x1000>;
arch/arm/boot/dts/exynos4412-origen.dts +1 -0
@@ -26,6 +26,7 @@ chosen { bootargs ="console=ttySAC2,115200"; + stdout-path = &serial_2; }; firmware at 0203F000 {
arch/arm/boot/dts/exynos4412-smdk4412.dts +1 -0
@@ -25,6 +25,7 @@ chosen { bootargs ="root=/dev/ram0 rw ramdisk=8192 initrd=0x41000000,8M console=ttySAC1,115200 init=/linuxrc"; + stdout-path = &serial_1; }; g2d at 10800000 {
arch/arm/boot/dts/exynos4412-tiny4412.dts +4 -0
@@ -18,6 +18,10 @@ model = "FriendlyARM TINY4412 board based on Exynos4412"; compatible = "friendlyarm,tiny4412", "samsung,exynos4412", "samsung,exynos4"; + chosen { + stdout-path = &serial_0; + }; + memory { reg = <0x40000000 0x40000000>; };
arch/arm/boot/dts/exynos4412-trats2.dts +1 -0
@@ -30,6 +30,7 @@ chosen { bootargs = "console=ttySAC2,115200N8 root=/dev/mmcblk0p5 rootwait earlyprintk panic=5"; + stdout-path = &serial_2; }; firmware at 0204F000 {
Signature · 1 line
1.9.2
v3 cover serial: samsung: add support for early console
In reply to Marek SzyprowskiHi,
I found this patchset was not merget even 3.19 merge window. As you know, there is no support of legacy early_printk on arm64. I need this patchset to support exynos arm64 board properly.
Dear Kukjin,
Could you pick up this patchset in your tree?
Best Regards,
Chanho Park
Quoted 60 lines
-----Original Message-----
From: linux-arm-kernel [mailto:linux-arm-kernel- [email protected]] On Behalf Of Marek Szyprowski
Sent: Monday, October 20, 2014 8:28 PM
To: [email protected]; linux-arm- [email protected]
Cc: Tomasz Figa; Kyungmin Park; [email protected]; Alim Akhtar; Marek Szyprowski
Subject: [PATCH v3 0/2] serial: samsung: add support for early consoleThis patchset adds support for early console defined in device tree. As an example, DTS files for all Exynos4 based machines are updated with the correct value for common chosen/sdtout property.
To get it fully functional on ARM architecture, additional improvements (support for
early_ioremap) are needed in early console code.Best regards
Marek Szyprowski
Samsung R&D Institute PolandChange log:
v3:
- rebased onto v3.18-rc1
- removed options from documentation (they are not yet supported)v2: http://www.spinics.net/lists/linux-samsung-soc/msg37278.html
- added support for command line based initializationv1: http://www.spinics.net/lists/linux-samsung-soc/msg37094.html
- initial versionTomasz Figa (2):
serial: samsung: Add support for early console
ARM: dts: exynos4: Add stdout-path propertiesDocumentation/kernel-parameters.txt | 12 +++ arch/arm/boot/dts/exynos4210-origen.dts | 1 + arch/arm/boot/dts/exynos4210-smdkv310.dts | 1 + arch/arm/boot/dts/exynos4210-trats.dts | 1 + arch/arm/boot/dts/exynos4210-universal_c210.dts | 1 + arch/arm/boot/dts/exynos4412-odroid-common.dtsi | 4 + arch/arm/boot/dts/exynos4412-origen.dts | 1 + arch/arm/boot/dts/exynos4412-smdk4412.dts | 1 + arch/arm/boot/dts/exynos4412-tiny4412.dts | 4 + arch/arm/boot/dts/exynos4412-trats2.dts | 1 + drivers/tty/serial/Kconfig | 1 + drivers/tty/serial/samsung.c | 103 ++++++++++++++++++++++++ 12 files changed, 131 insertions(+)--
1.9.2_______________________________________________
linux-arm-kernel mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel