提交 f7be4e75 编写于 作者: A Aaro Koskinen 提交者: John Crispin

MIPS: early_printk: drop __init annotations

We cannot use __init for earlyprintk code or data, since the kernel
parameter "keep_bootcon" allows leaving the boot console enabled.

Currently MIPS will crash/hang/die if you use keep_bootcon. The patch
fixes it at least on Lemote FuLoong mini-PC. Changes for other boards
were done based on what I could find with grep...
Signed-off-by: NAaro Koskinen <aaro.koskinen@iki.fi>
Patchwork: http://patchwork.linux-mips.org/patch/4935/Signed-off-by: NJohn Crispin <blogic@openwrt.org>
上级 1e7decdb
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
#include <bcm63xx_io.h> #include <bcm63xx_io.h>
#include <bcm63xx_regs.h> #include <bcm63xx_regs.h>
static void __init wait_xfered(void) static void wait_xfered(void)
{ {
unsigned int val; unsigned int val;
...@@ -22,7 +22,7 @@ static void __init wait_xfered(void) ...@@ -22,7 +22,7 @@ static void __init wait_xfered(void)
} while (1); } while (1);
} }
void __init prom_putchar(char c) void prom_putchar(char c)
{ {
wait_xfered(); wait_xfered();
bcm_uart0_writel(c, UART_FIFO_REG); bcm_uart0_writel(c, UART_FIFO_REG);
......
...@@ -14,8 +14,7 @@ ...@@ -14,8 +14,7 @@
extern void prom_putchar(char); extern void prom_putchar(char);
static void __init static void early_console_write(struct console *con, const char *s, unsigned n)
early_console_write(struct console *con, const char *s, unsigned n)
{ {
while (n-- && *s) { while (n-- && *s) {
if (*s == '\n') if (*s == '\n')
...@@ -25,7 +24,7 @@ early_console_write(struct console *con, const char *s, unsigned n) ...@@ -25,7 +24,7 @@ early_console_write(struct console *con, const char *s, unsigned n)
} }
} }
static struct console early_console __initdata = { static struct console early_console = {
.name = "early", .name = "early",
.write = early_console_write, .write = early_console_write,
.flags = CON_PRINTBUFFER | CON_BOOT, .flags = CON_PRINTBUFFER | CON_BOOT,
......
...@@ -73,7 +73,7 @@ void __init prom_free_prom_memory(void) ...@@ -73,7 +73,7 @@ void __init prom_free_prom_memory(void)
#define PORT(offset) (u8 *)(KSEG1ADDR(LS1X_UART0_BASE + offset)) #define PORT(offset) (u8 *)(KSEG1ADDR(LS1X_UART0_BASE + offset))
void __init prom_putchar(char c) void prom_putchar(char c)
{ {
int timeout; int timeout;
......
...@@ -31,7 +31,7 @@ static inline struct ioc3_uartregs *console_uart(void) ...@@ -31,7 +31,7 @@ static inline struct ioc3_uartregs *console_uart(void)
return &ioc3->sregs.uarta; return &ioc3->sregs.uarta;
} }
void __init prom_putchar(char c) void prom_putchar(char c)
{ {
struct ioc3_uartregs *uart = console_uart(); struct ioc3_uartregs *uart = console_uart();
......
...@@ -513,19 +513,19 @@ void __init txx9_sio_init(unsigned long baseaddr, int irq, ...@@ -513,19 +513,19 @@ void __init txx9_sio_init(unsigned long baseaddr, int irq,
} }
#ifdef CONFIG_EARLY_PRINTK #ifdef CONFIG_EARLY_PRINTK
static void __init null_prom_putchar(char c) static void null_prom_putchar(char c)
{ {
} }
void (*txx9_prom_putchar)(char c) __initdata = null_prom_putchar; void (*txx9_prom_putchar)(char c) = null_prom_putchar;
void __init prom_putchar(char c) void prom_putchar(char c)
{ {
txx9_prom_putchar(c); txx9_prom_putchar(c);
} }
static void __iomem *early_txx9_sio_port; static void __iomem *early_txx9_sio_port;
static void __init early_txx9_sio_putchar(char c) static void early_txx9_sio_putchar(char c)
{ {
#define TXX9_SICISR 0x0c #define TXX9_SICISR 0x0c
#define TXX9_SITFIFO 0x1c #define TXX9_SITFIFO 0x1c
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册