From: Greg Kroah-Hartman Date: Tue, 5 Jun 2018 10:21:08 +0000 (+0200) Subject: 4.9-stable patches X-Git-Tag: v4.9.107~2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6dbd294567bc6a7b41e55b21375d18e89da12f0a;p=thirdparty%2Fkernel%2Fstable-queue.git 4.9-stable patches added patches: serial-pl011-add-console-matching-function.patch sparc64-don-t-clibber-fixed-registers-in-__multi4.patch --- diff --git a/queue-4.9/serial-pl011-add-console-matching-function.patch b/queue-4.9/serial-pl011-add-console-matching-function.patch new file mode 100644 index 00000000000..e9b051357f7 --- /dev/null +++ b/queue-4.9/serial-pl011-add-console-matching-function.patch @@ -0,0 +1,102 @@ +From 10879ae5f12e9cab3c4e8e9504c1aaa8a033bde7 Mon Sep 17 00:00:00 2001 +From: Aleksey Makarov +Date: Tue, 4 Oct 2016 10:15:32 +0300 +Subject: serial: pl011: add console matching function + +From: Aleksey Makarov + +commit 10879ae5f12e9cab3c4e8e9504c1aaa8a033bde7 upstream. + +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. + +This patch was merged to tty-next but then reverted because of +conflict with + +commit 46e36683f433 ("serial: earlycon: Extend earlycon command line option to support 64-bit addresses") + +Now it is fixed. + +Signed-off-by: Aleksey Makarov +Reviewed-by: Peter Hurley +Acked-by: Russell King +Tested-by: Christopher Covington +Signed-off-by: Ard Biesheuvel +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/tty/serial/amba-pl011.c | 55 ++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 55 insertions(+) + +--- a/drivers/tty/serial/amba-pl011.c ++++ b/drivers/tty/serial/amba-pl011.c +@@ -2320,12 +2320,67 @@ static int __init pl011_console_setup(st + return uart_set_options(&uap->port, co, baud, parity, bits, flow); + } + ++/** ++ * pl011_console_match - non-standard console matching ++ * @co: registering console ++ * @name: name from console command line ++ * @idx: index from console command line ++ * @options: ptr to option string from console command line ++ * ++ * Only attempts to match console command lines of the form: ++ * console=pl011,mmio|mmio32,[,] ++ * console=pl011,0x[,] ++ * This form is used to register an initial earlycon boot console and ++ * replace it with the amba_console at pl011 driver init. ++ * ++ * Performs console setup for a match (as required by interface) ++ * If no are specified, then assume the h/w is already setup. ++ * ++ * Returns 0 if console matches; otherwise non-zero to use default matching ++ */ ++static int __init pl011_console_match(struct console *co, char *name, int idx, ++ char *options) ++{ ++ unsigned char iotype; ++ resource_size_t addr; ++ int i; ++ ++ if (strcmp(name, "pl011") != 0) ++ return -ENODEV; ++ ++ if (uart_parse_earlycon(options, &iotype, &addr, &options)) ++ return -ENODEV; ++ ++ if (iotype != UPIO_MEM && iotype != UPIO_MEM32) ++ return -ENODEV; ++ ++ /* try to match the port specified on the command line */ ++ for (i = 0; i < ARRAY_SIZE(amba_ports); i++) { ++ struct uart_port *port; ++ ++ if (!amba_ports[i]) ++ continue; ++ ++ port = &amba_ports[i]->port; ++ ++ if (port->mapbase != addr) ++ continue; ++ ++ co->index = i; ++ port->cons = co; ++ return pl011_console_setup(co, options); ++ } ++ ++ return -ENODEV; ++} ++ + static struct uart_driver amba_reg; + static struct console amba_console = { + .name = "ttyAMA", + .write = pl011_console_write, + .device = uart_console_device, + .setup = pl011_console_setup, ++ .match = pl011_console_match, + .flags = CON_PRINTBUFFER, + .index = -1, + .data = &amba_reg, diff --git a/queue-4.9/series b/queue-4.9/series index 1849df3f170..cb26eb5a6d4 100644 --- a/queue-4.9/series +++ b/queue-4.9/series @@ -57,3 +57,5 @@ drm-i915-disable-lvds-on-radiant-p845.patch sparc64-fix-build-warnings-with-gcc-7.patch fix-io_destroy-aio_complete-race.patch mm-fix-the-null-mapping-case-in-__isolate_lru_page.patch +sparc64-don-t-clibber-fixed-registers-in-__multi4.patch +serial-pl011-add-console-matching-function.patch diff --git a/queue-4.9/sparc64-don-t-clibber-fixed-registers-in-__multi4.patch b/queue-4.9/sparc64-don-t-clibber-fixed-registers-in-__multi4.patch new file mode 100644 index 00000000000..1f5cce8269c --- /dev/null +++ b/queue-4.9/sparc64-don-t-clibber-fixed-registers-in-__multi4.patch @@ -0,0 +1,66 @@ +From 79db795833bf5c3e798bcd7a5aeeee3fb0505927 Mon Sep 17 00:00:00 2001 +From: "David S. Miller" +Date: Tue, 15 Aug 2017 21:32:19 -0700 +Subject: sparc64: Don't clibber fixed registers in __multi4. + +From: David S. Miller + +commit 79db795833bf5c3e798bcd7a5aeeee3fb0505927 upstream. + +%g4 and %g5 are fixed registers used by the kernel for the thread +pointer and the per-cpu offset. Use %o4 and %g7 instead. + +Diagnosis by Anthony Yznaga. + +Fixes: 1b4af13ff2cc ("sparc64: Add __multi3 for gcc 7.x and later.") +Reported-by: Anatoly Pugachev +Tested-by: Anatoly Pugachev +Signed-off-by: David S. Miller +Cc: Guenter Roeck +Signed-off-by: Greg Kroah-Hartman + +--- + arch/sparc/lib/multi3.S | 24 ++++++++++++------------ + 1 file changed, 12 insertions(+), 12 deletions(-) + +--- a/arch/sparc/lib/multi3.S ++++ b/arch/sparc/lib/multi3.S +@@ -5,26 +5,26 @@ + .align 4 + ENTRY(__multi3) /* %o0 = u, %o1 = v */ + mov %o1, %g1 +- srl %o3, 0, %g4 +- mulx %g4, %g1, %o1 ++ srl %o3, 0, %o4 ++ mulx %o4, %g1, %o1 + srlx %g1, 0x20, %g3 +- mulx %g3, %g4, %g5 +- sllx %g5, 0x20, %o5 +- srl %g1, 0, %g4 ++ mulx %g3, %o4, %g7 ++ sllx %g7, 0x20, %o5 ++ srl %g1, 0, %o4 + sub %o1, %o5, %o5 + srlx %o5, 0x20, %o5 +- addcc %g5, %o5, %g5 ++ addcc %g7, %o5, %g7 + srlx %o3, 0x20, %o5 +- mulx %g4, %o5, %g4 ++ mulx %o4, %o5, %o4 + mulx %g3, %o5, %o5 + sethi %hi(0x80000000), %g3 +- addcc %g5, %g4, %g5 +- srlx %g5, 0x20, %g5 ++ addcc %g7, %o4, %g7 ++ srlx %g7, 0x20, %g7 + add %g3, %g3, %g3 + movcc %xcc, %g0, %g3 +- addcc %o5, %g5, %o5 +- sllx %g4, 0x20, %g4 +- add %o1, %g4, %o1 ++ addcc %o5, %g7, %o5 ++ sllx %o4, 0x20, %o4 ++ add %o1, %o4, %o1 + add %o5, %g3, %g2 + mulx %g1, %o2, %g1 + add %g1, %g2, %g1