Skip to content

Commit

Permalink
serial, mfd: don't hardcode the console
Browse files Browse the repository at this point in the history
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 <mika.westerberg@linux.intel.com>
Signed-off-by: Alan Cox <alan@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
  • Loading branch information
Mika Westerberg authored and Greg Kroah-Hartman committed Nov 15, 2011
1 parent 66ef27c commit b82e324
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 17 deletions.
2 changes: 1 addition & 1 deletion arch/x86/include/asm/mrst.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
2 changes: 1 addition & 1 deletion arch/x86/kernel/early_printk.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
16 changes: 12 additions & 4 deletions arch/x86/platform/mrst/early_printk_mrst.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 0xffa28080

static 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);
Expand Down
18 changes: 7 additions & 11 deletions drivers/tty/serial/mfd.c
Original file line number Diff line number Diff line change
Expand Up @@ -1156,7 +1156,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;
Expand All @@ -1167,9 +1166,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 = {
Expand All @@ -1178,9 +1175,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 = {
Expand Down Expand Up @@ -1210,6 +1211,7 @@ static struct uart_driver serial_hsu_reg = {
.major = TTY_MAJOR,
.minor = 128,
.nr = 3,
.cons = SERIAL_HSU_CONSOLE,
};

#ifdef CONFIG_PM
Expand Down Expand Up @@ -1344,12 +1346,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);
}

Expand Down

0 comments on commit b82e324

Please sign in to comment.