diff options
author | Rob Herring <robh@kernel.org> | 2014-03-27 09:06:16 -0400 |
---|---|---|
committer | Rob Herring <robh@kernel.org> | 2014-05-20 16:19:25 -0400 |
commit | b0b6abd34c1b508d4ac95dbc614f36c49d29e65a (patch) | |
tree | 153b298e55c0ba79dc0ff1ad7f3d308f8d9ed32f /drivers/tty/serial | |
parent | 54196ccbe0ba1f268a646059473313589db35b01 (diff) |
serial: earlycon: add DT support
This adds the infrastructure to generic earlycon for earlycon setup
using DT. The actual setup is not enabled until a following commit to
add the FDT parsing.
Signed-off-by: Rob Herring <robh@kernel.org>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Jiri Slaby <jslaby@suse.cz>
Cc: Arnd Bergmann <arnd@arndb.de>
Acked-by: Grant Likely <grant.likely@linaro.org>
Diffstat (limited to 'drivers/tty/serial')
-rw-r--r-- | drivers/tty/serial/earlycon.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/drivers/tty/serial/earlycon.c b/drivers/tty/serial/earlycon.c index c92e83088adb..5131b5ee6164 100644 --- a/drivers/tty/serial/earlycon.c +++ b/drivers/tty/serial/earlycon.c | |||
@@ -15,6 +15,8 @@ | |||
15 | #include <linux/init.h> | 15 | #include <linux/init.h> |
16 | #include <linux/io.h> | 16 | #include <linux/io.h> |
17 | #include <linux/serial_core.h> | 17 | #include <linux/serial_core.h> |
18 | #include <linux/sizes.h> | ||
19 | #include <linux/mod_devicetable.h> | ||
18 | 20 | ||
19 | #ifdef CONFIG_FIX_EARLYCON_MEM | 21 | #ifdef CONFIG_FIX_EARLYCON_MEM |
20 | #include <asm/fixmap.h> | 22 | #include <asm/fixmap.h> |
@@ -32,6 +34,9 @@ static struct earlycon_device early_console_dev = { | |||
32 | .con = &early_con, | 34 | .con = &early_con, |
33 | }; | 35 | }; |
34 | 36 | ||
37 | static const struct of_device_id __earlycon_of_table_sentinel | ||
38 | __used __section(__earlycon_of_table_end); | ||
39 | |||
35 | static void __iomem * __init earlycon_map(unsigned long paddr, size_t size) | 40 | static void __iomem * __init earlycon_map(unsigned long paddr, size_t size) |
36 | { | 41 | { |
37 | void __iomem *base; | 42 | void __iomem *base; |
@@ -142,3 +147,26 @@ int __init setup_earlycon(char *buf, const char *match, | |||
142 | register_console(early_console_dev.con); | 147 | register_console(early_console_dev.con); |
143 | return 0; | 148 | return 0; |
144 | } | 149 | } |
150 | |||
151 | int __init of_setup_earlycon(unsigned long addr, | ||
152 | int (*setup)(struct earlycon_device *, const char *)) | ||
153 | { | ||
154 | int err; | ||
155 | struct uart_port *port = &early_console_dev.port; | ||
156 | |||
157 | port->iotype = UPIO_MEM; | ||
158 | port->mapbase = addr; | ||
159 | port->uartclk = BASE_BAUD * 16; | ||
160 | port->membase = earlycon_map(addr, SZ_4K); | ||
161 | |||
162 | early_console_dev.con->data = &early_console_dev; | ||
163 | err = setup(&early_console_dev, NULL); | ||
164 | if (err < 0) | ||
165 | return err; | ||
166 | if (!early_console_dev.con->write) | ||
167 | return -ENODEV; | ||
168 | |||
169 | |||
170 | register_console(early_console_dev.con); | ||
171 | return 0; | ||
172 | } | ||