serial,mfd: Fix CMSPAR setup
Subsystems (2)
PATCH 1/2 serial,mfd: Fix CMSPAR setup
From: Alan Cox <[email protected]>
This is referenced the wrong way. Mika Westerberg added some checks to the tty to support multiple console, but the real problem is simply referencing the termios object via the wrong path.
Signed-off-by Alan Cox <[email protected]>
---
drivers/tty/serial/mfd.c | 4 +--- 1 files changed, 1 insertions(+), 3 deletions(-)
drivers/tty/serial/mfd.c +1 -3
@@ -884,7 +884,6 @@ serial_hsu_set_termios(struct uart_port *port, struct ktermios *termios, {struct uart_hsu_port *up = container_of(port, struct uart_hsu_port, port); -struct tty_struct *tty = port->state->port.tty;unsigned char cval, fcr =0 ;unsigned long flags;unsigned int baud, quot;
@@ -907,8 +906,7 @@ serial_hsu_set_termios(struct uart_port *port, struct ktermios *termios, }/* CMSPAR isn't supported by this driver */ -if (tty) - tty->termios->c_cflag &= ~CMSPAR ; + termios->c_cflag &= ~CMSPAR ;if (termios->c_cflag &CSTOPB ) cval |=UART_LCR_STOP ;
PATCH 2/2 serial, mfd: don't hardcode the console
From: Mika Westerberg <[email protected]>
Add support to specify which HSU port to use as an early console. This can be selected by passing "earlyprintk=hsu<n>" on the kernel command line. By default port 0 is still used.
Signed-off-by Mika Westerberg <[email protected]>
Signed-off-by Alan Cox <[email protected]>
---
arch/x86/include/asm/mrst.h | 2 +- arch/x86/kernel/early_printk.c | 2 +- arch/x86/platform/mrst/early_printk_mrst.c | 16 ++++++++++++---- drivers/tty/serial/mfd.c | 18 +++++++----------- 4 files changed, 21 insertions(+), 17 deletions(-)
arch/x86/include/asm/mrst.h +1 -1
@@ -51,7 +51,7 @@ extern struct console early_mrst_console;extern void mrst_early_console_init (void );extern struct console early_hsu_console; -extern void hsu_early_console_init (void ); +extern void hsu_early_console_init (const char *);extern void intel_scu_devices_create (void );extern void intel_scu_devices_destroy (void );
arch/x86/kernel/early_printk.c +1 -1
@@ -247,7 +247,7 @@ static int __init setup_early_printk(char *buf) }if (!strncmp (buf,"hsu" ,3 )) { -hsu_early_console_init (); +hsu_early_console_init (buf +3 );early_console_register (&early_hsu_console, keep); }#endif
arch/x86/platform/mrst/early_printk_mrst.c +12 -4
@@ -245,16 +245,24 @@ struct console early_mrst_console = {* Following is the early console based on Medfield HSU (High * Speed UART) device. */ -#define HSU_PORT2_PADDR 0xffa28180 +#define HSU_PORT_BASE 0xffa28080static void __iomem *phsu; -void hsu_early_console_init (void ) +void hsu_early_console_init (const char *s) { +unsigned long paddr, port =0 ;u8 lcr; - phsu = (void *)set_fixmap_offset_nocache (FIX_EARLYCON_MEM_BASE , -HSU_PORT2_PADDR ); +/* +* Select the early HSU console port if specified by user in the +* kernel command line. +*/ +if (*s && !kstrtoul (s,10 , &port)) + port =clamp_val (port,0 ,2 ); + + paddr =HSU_PORT_BASE + port *0x80 ; + phsu = (void *)set_fixmap_offset_nocache (FIX_EARLYCON_MEM_BASE , paddr);/* Disable FIFO */ writeb (0x0 , phsu +UART_FCR );
drivers/tty/serial/mfd.c +7 -11
@@ -1154,7 +1154,6 @@ serial_hsu_console_setup(struct console *co, char *options)int bits =8 ;int parity ='n' ;int flow ='n' ; -int ret;if (co->index ==-1 || co->index >= serial_hsu_reg.nr) co->index =0 ;
@@ -1165,9 +1164,7 @@ serial_hsu_console_setup(struct console *co, char *options)if (options)uart_parse_options (options, &baud, &parity, &bits, &flow); - ret =uart_set_options (&up->port, co, baud, parity, bits, flow); - -return ret; +return uart_set_options (&up->port, co, baud, parity, bits, flow); }static struct console serial_hsu_console = {
@@ -1176,9 +1173,13 @@ static struct console serial_hsu_console = { .device = uart_console_device, .setup = serial_hsu_console_setup, .flags = CON_PRINTBUFFER, - .index = 2, + .index = -1, .data = &serial_hsu_reg, }; + +#define SERIAL_HSU_CONSOLE (&serial_hsu_console) +#else +#define SERIAL_HSU_CONSOLE NULL#endif struct uart_ops serial_hsu_pops = {
@@ -1208,6 +1209,7 @@ static struct uart_driver serial_hsu_reg = { .major = TTY_MAJOR, .minor = 128, .nr = 3, + .cons = SERIAL_HSU_CONSOLE, };#ifdef CONFIG_PM
@@ -1342,12 +1344,6 @@ static int serial_hsu_probe(struct pci_dev *pdev, }uart_add_one_port (&serial_hsu_reg, &uport->port); -#ifdef CONFIG_SERIAL_MFD_HSU_CONSOLE -if (index ==2 ) { -register_console (&serial_hsu_console); - uport->port.cons = &serial_hsu_console; - } -#endif pci_set_drvdata (pdev, uport); }