diff options
author | Aleksey Makarov <aleksey.makarov@linaro.org> | 2016-09-27 16:54:15 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2016-09-28 11:46:57 -0400 |
commit | 8b8f347d3a4859d22567f3b8e5bb4a69b1089739 (patch) | |
tree | fb77763acf74f11174050400cf95a10b119f734e /drivers/tty | |
parent | 888125a712986fd0fab99d09f42b307de32d740c (diff) |
serial: pl011: add console matching function
This patch adds function pl011_console_match() that implements
method match of struct console. It allows to match consoles against
data specified in a string, for example taken from command line or
compiled by ACPI SPCR table handler.
Signed-off-by: Aleksey Makarov <aleksey.makarov@linaro.org>
Reviewed-by: Peter Hurley <peter@hurleysoftware.com>
Acked-by: Russell King <rmk+kernel@armlinux.org.uk>
Tested-by: Christopher Covington <cov@codeaurora.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/tty')
-rw-r--r-- | drivers/tty/serial/amba-pl011.c | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/drivers/tty/serial/amba-pl011.c b/drivers/tty/serial/amba-pl011.c index e2c33b9528d8..cd5d1ee3b8b6 100644 --- a/drivers/tty/serial/amba-pl011.c +++ b/drivers/tty/serial/amba-pl011.c | |||
@@ -2315,12 +2315,67 @@ static int __init pl011_console_setup(struct console *co, char *options) | |||
2315 | return uart_set_options(&uap->port, co, baud, parity, bits, flow); | 2315 | return uart_set_options(&uap->port, co, baud, parity, bits, flow); |
2316 | } | 2316 | } |
2317 | 2317 | ||
2318 | /** | ||
2319 | * pl011_console_match - non-standard console matching | ||
2320 | * @co: registering console | ||
2321 | * @name: name from console command line | ||
2322 | * @idx: index from console command line | ||
2323 | * @options: ptr to option string from console command line | ||
2324 | * | ||
2325 | * Only attempts to match console command lines of the form: | ||
2326 | * console=pl011,mmio|mmio32,<addr>[,<options>] | ||
2327 | * console=pl011,0x<addr>[,<options>] | ||
2328 | * This form is used to register an initial earlycon boot console and | ||
2329 | * replace it with the amba_console at pl011 driver init. | ||
2330 | * | ||
2331 | * Performs console setup for a match (as required by interface) | ||
2332 | * If no <options> are specified, then assume the h/w is already setup. | ||
2333 | * | ||
2334 | * Returns 0 if console matches; otherwise non-zero to use default matching | ||
2335 | */ | ||
2336 | static int __init pl011_console_match(struct console *co, char *name, int idx, | ||
2337 | char *options) | ||
2338 | { | ||
2339 | unsigned char iotype; | ||
2340 | unsigned long addr; | ||
2341 | int i; | ||
2342 | |||
2343 | if (strcmp(name, "pl011") != 0) | ||
2344 | return -ENODEV; | ||
2345 | |||
2346 | if (uart_parse_earlycon(options, &iotype, &addr, &options)) | ||
2347 | return -ENODEV; | ||
2348 | |||
2349 | if (iotype != UPIO_MEM && iotype != UPIO_MEM32) | ||
2350 | return -ENODEV; | ||
2351 | |||
2352 | /* try to match the port specified on the command line */ | ||
2353 | for (i = 0; i < ARRAY_SIZE(amba_ports); i++) { | ||
2354 | struct uart_port *port; | ||
2355 | |||
2356 | if (!amba_ports[i]) | ||
2357 | continue; | ||
2358 | |||
2359 | port = &amba_ports[i]->port; | ||
2360 | |||
2361 | if (port->mapbase != addr) | ||
2362 | continue; | ||
2363 | |||
2364 | co->index = i; | ||
2365 | port->cons = co; | ||
2366 | return pl011_console_setup(co, options); | ||
2367 | } | ||
2368 | |||
2369 | return -ENODEV; | ||
2370 | } | ||
2371 | |||
2318 | static struct uart_driver amba_reg; | 2372 | static struct uart_driver amba_reg; |
2319 | static struct console amba_console = { | 2373 | static struct console amba_console = { |
2320 | .name = "ttyAMA", | 2374 | .name = "ttyAMA", |
2321 | .write = pl011_console_write, | 2375 | .write = pl011_console_write, |
2322 | .device = uart_console_device, | 2376 | .device = uart_console_device, |
2323 | .setup = pl011_console_setup, | 2377 | .setup = pl011_console_setup, |
2378 | .match = pl011_console_match, | ||
2324 | .flags = CON_PRINTBUFFER, | 2379 | .flags = CON_PRINTBUFFER, |
2325 | .index = -1, | 2380 | .index = -1, |
2326 | .data = &amba_reg, | 2381 | .data = &amba_reg, |