diff options
| author | Atsushi Nemoto <anemo@mba.ocn.ne.jp> | 2008-07-29 09:10:08 -0400 |
|---|---|---|
| committer | Ralf Baechle <ralf@linux-mips.org> | 2008-07-30 16:54:41 -0400 |
| commit | e352953ce00bb870124e9054dbbbda2262f9269c (patch) | |
| tree | 76297cc5749b91bec76d75f4520d88add8ca3efc | |
| parent | 7779a5e07d33fe316fe468e7afe7975fb686a831 (diff) | |
[MIPS] TXx9: Support early_printk
Kill jmr3927-specific prom_putchar and add txx9-generic prom_putchar
to support early_printk.
Signed-off-by: Atsushi Nemoto <anemo@mba.ocn.ne.jp>
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
| -rw-r--r-- | arch/mips/txx9/Kconfig | 3 | ||||
| -rw-r--r-- | arch/mips/txx9/generic/setup.c | 31 | ||||
| -rw-r--r-- | arch/mips/txx9/jmr3927/prom.c | 17 | ||||
| -rw-r--r-- | arch/mips/txx9/rbtx4927/prom.c | 1 | ||||
| -rw-r--r-- | arch/mips/txx9/rbtx4938/prom.c | 1 | ||||
| -rw-r--r-- | include/asm-mips/txx9/generic.h | 9 |
6 files changed, 46 insertions, 16 deletions
diff --git a/arch/mips/txx9/Kconfig b/arch/mips/txx9/Kconfig index 6de4c5aa92be..9b14db2ce204 100644 --- a/arch/mips/txx9/Kconfig +++ b/arch/mips/txx9/Kconfig | |||
| @@ -30,6 +30,7 @@ config SOC_TX3927 | |||
| 30 | select IRQ_TXX9 | 30 | select IRQ_TXX9 |
| 31 | select SWAP_IO_SPACE | 31 | select SWAP_IO_SPACE |
| 32 | select SYS_HAS_CPU_TX39XX | 32 | select SYS_HAS_CPU_TX39XX |
| 33 | select SYS_HAS_EARLY_PRINTK | ||
| 33 | select SYS_SUPPORTS_32BIT_KERNEL | 34 | select SYS_SUPPORTS_32BIT_KERNEL |
| 34 | select SYS_SUPPORTS_LITTLE_ENDIAN | 35 | select SYS_SUPPORTS_LITTLE_ENDIAN |
| 35 | select SYS_SUPPORTS_BIG_ENDIAN | 36 | select SYS_SUPPORTS_BIG_ENDIAN |
| @@ -49,6 +50,7 @@ config SOC_TX4927 | |||
| 49 | select PCI_TX4927 | 50 | select PCI_TX4927 |
| 50 | select SWAP_IO_SPACE | 51 | select SWAP_IO_SPACE |
| 51 | select SYS_HAS_CPU_TX49XX | 52 | select SYS_HAS_CPU_TX49XX |
| 53 | select SYS_HAS_EARLY_PRINTK | ||
| 52 | select SYS_SUPPORTS_32BIT_KERNEL | 54 | select SYS_SUPPORTS_32BIT_KERNEL |
| 53 | select SYS_SUPPORTS_64BIT_KERNEL | 55 | select SYS_SUPPORTS_64BIT_KERNEL |
| 54 | select SYS_SUPPORTS_LITTLE_ENDIAN | 56 | select SYS_SUPPORTS_LITTLE_ENDIAN |
| @@ -70,6 +72,7 @@ config SOC_TX4938 | |||
| 70 | select PCI_TX4927 | 72 | select PCI_TX4927 |
| 71 | select SWAP_IO_SPACE | 73 | select SWAP_IO_SPACE |
| 72 | select SYS_HAS_CPU_TX49XX | 74 | select SYS_HAS_CPU_TX49XX |
| 75 | select SYS_HAS_EARLY_PRINTK | ||
| 73 | select SYS_SUPPORTS_32BIT_KERNEL | 76 | select SYS_SUPPORTS_32BIT_KERNEL |
| 74 | select SYS_SUPPORTS_64BIT_KERNEL | 77 | select SYS_SUPPORTS_64BIT_KERNEL |
| 75 | select SYS_SUPPORTS_LITTLE_ENDIAN | 78 | select SYS_SUPPORTS_LITTLE_ENDIAN |
diff --git a/arch/mips/txx9/generic/setup.c b/arch/mips/txx9/generic/setup.c index 94ce1a5c38a4..1bc57d0f4c5c 100644 --- a/arch/mips/txx9/generic/setup.c +++ b/arch/mips/txx9/generic/setup.c | |||
| @@ -271,6 +271,37 @@ void __init txx9_sio_init(unsigned long baseaddr, int irq, | |||
| 271 | #endif /* CONFIG_SERIAL_TXX9 */ | 271 | #endif /* CONFIG_SERIAL_TXX9 */ |
| 272 | } | 272 | } |
| 273 | 273 | ||
| 274 | #ifdef CONFIG_EARLY_PRINTK | ||
| 275 | static void __init null_prom_putchar(char c) | ||
| 276 | { | ||
| 277 | } | ||
| 278 | void (*txx9_prom_putchar)(char c) __initdata = null_prom_putchar; | ||
| 279 | |||
| 280 | void __init prom_putchar(char c) | ||
| 281 | { | ||
| 282 | txx9_prom_putchar(c); | ||
| 283 | } | ||
| 284 | |||
| 285 | static void __iomem *early_txx9_sio_port; | ||
| 286 | |||
| 287 | static void __init early_txx9_sio_putchar(char c) | ||
| 288 | { | ||
| 289 | #define TXX9_SICISR 0x0c | ||
| 290 | #define TXX9_SITFIFO 0x1c | ||
| 291 | #define TXX9_SICISR_TXALS 0x00000002 | ||
| 292 | while (!(__raw_readl(early_txx9_sio_port + TXX9_SICISR) & | ||
| 293 | TXX9_SICISR_TXALS)) | ||
| 294 | ; | ||
| 295 | __raw_writel(c, early_txx9_sio_port + TXX9_SITFIFO); | ||
| 296 | } | ||
| 297 | |||
| 298 | void __init txx9_sio_putchar_init(unsigned long baseaddr) | ||
| 299 | { | ||
| 300 | early_txx9_sio_port = ioremap(baseaddr, 0x24); | ||
| 301 | txx9_prom_putchar = early_txx9_sio_putchar; | ||
| 302 | } | ||
| 303 | #endif /* CONFIG_EARLY_PRINTK */ | ||
| 304 | |||
| 274 | /* wrappers */ | 305 | /* wrappers */ |
| 275 | void __init plat_mem_setup(void) | 306 | void __init plat_mem_setup(void) |
| 276 | { | 307 | { |
diff --git a/arch/mips/txx9/jmr3927/prom.c b/arch/mips/txx9/jmr3927/prom.c index 23df38c1490e..70c4c8ec3e84 100644 --- a/arch/mips/txx9/jmr3927/prom.c +++ b/arch/mips/txx9/jmr3927/prom.c | |||
| @@ -41,22 +41,6 @@ | |||
| 41 | #include <asm/txx9/generic.h> | 41 | #include <asm/txx9/generic.h> |
| 42 | #include <asm/txx9/jmr3927.h> | 42 | #include <asm/txx9/jmr3927.h> |
| 43 | 43 | ||
| 44 | #define TIMEOUT 0xffffff | ||
| 45 | |||
| 46 | void | ||
| 47 | prom_putchar(char c) | ||
| 48 | { | ||
| 49 | int i = 0; | ||
| 50 | |||
| 51 | do { | ||
| 52 | i++; | ||
| 53 | if (i>TIMEOUT) | ||
| 54 | break; | ||
| 55 | } while (!(tx3927_sioptr(1)->cisr & TXx927_SICISR_TXALS)); | ||
| 56 | tx3927_sioptr(1)->tfifo = c; | ||
| 57 | return; | ||
| 58 | } | ||
| 59 | |||
| 60 | void __init jmr3927_prom_init(void) | 44 | void __init jmr3927_prom_init(void) |
| 61 | { | 45 | { |
| 62 | /* CCFG */ | 46 | /* CCFG */ |
| @@ -65,4 +49,5 @@ void __init jmr3927_prom_init(void) | |||
| 65 | 49 | ||
| 66 | prom_init_cmdline(); | 50 | prom_init_cmdline(); |
| 67 | add_memory_region(0, JMR3927_SDRAM_SIZE, BOOT_MEM_RAM); | 51 | add_memory_region(0, JMR3927_SDRAM_SIZE, BOOT_MEM_RAM); |
| 52 | txx9_sio_putchar_init(TX3927_SIO_REG(1)); | ||
| 68 | } | 53 | } |
diff --git a/arch/mips/txx9/rbtx4927/prom.c b/arch/mips/txx9/rbtx4927/prom.c index 5c0de54ebdd2..1dc0a5b1956b 100644 --- a/arch/mips/txx9/rbtx4927/prom.c +++ b/arch/mips/txx9/rbtx4927/prom.c | |||
| @@ -38,4 +38,5 @@ void __init rbtx4927_prom_init(void) | |||
| 38 | { | 38 | { |
| 39 | prom_init_cmdline(); | 39 | prom_init_cmdline(); |
| 40 | add_memory_region(0, tx4927_get_mem_size(), BOOT_MEM_RAM); | 40 | add_memory_region(0, tx4927_get_mem_size(), BOOT_MEM_RAM); |
| 41 | txx9_sio_putchar_init(TX4927_SIO_REG(0) & 0xfffffffffULL); | ||
| 41 | } | 42 | } |
diff --git a/arch/mips/txx9/rbtx4938/prom.c b/arch/mips/txx9/rbtx4938/prom.c index ee189519ce5a..d73123cd2ab9 100644 --- a/arch/mips/txx9/rbtx4938/prom.c +++ b/arch/mips/txx9/rbtx4938/prom.c | |||
| @@ -22,4 +22,5 @@ void __init rbtx4938_prom_init(void) | |||
| 22 | prom_init_cmdline(); | 22 | prom_init_cmdline(); |
| 23 | #endif | 23 | #endif |
| 24 | add_memory_region(0, tx4938_get_mem_size(), BOOT_MEM_RAM); | 24 | add_memory_region(0, tx4938_get_mem_size(), BOOT_MEM_RAM); |
| 25 | txx9_sio_putchar_init(TX4938_SIO_REG(0) & 0xfffffffffULL); | ||
| 25 | } | 26 | } |
diff --git a/include/asm-mips/txx9/generic.h b/include/asm-mips/txx9/generic.h index a295aaa846fa..5b1ccf901c62 100644 --- a/include/asm-mips/txx9/generic.h +++ b/include/asm-mips/txx9/generic.h | |||
| @@ -49,5 +49,14 @@ void txx9_spi_init(int busid, unsigned long base, int irq); | |||
| 49 | void txx9_ethaddr_init(unsigned int id, unsigned char *ethaddr); | 49 | void txx9_ethaddr_init(unsigned int id, unsigned char *ethaddr); |
| 50 | void txx9_sio_init(unsigned long baseaddr, int irq, | 50 | void txx9_sio_init(unsigned long baseaddr, int irq, |
| 51 | unsigned int line, unsigned int sclk, int nocts); | 51 | unsigned int line, unsigned int sclk, int nocts); |
| 52 | void prom_putchar(char c); | ||
| 53 | #ifdef CONFIG_EARLY_PRINTK | ||
| 54 | extern void (*txx9_prom_putchar)(char c); | ||
| 55 | void txx9_sio_putchar_init(unsigned long baseaddr); | ||
| 56 | #else | ||
| 57 | static inline void txx9_sio_putchar_init(unsigned long baseaddr) | ||
| 58 | { | ||
| 59 | } | ||
| 60 | #endif | ||
| 52 | 61 | ||
| 53 | #endif /* __ASM_TXX9_GENERIC_H */ | 62 | #endif /* __ASM_TXX9_GENERIC_H */ |
