blob: bce8af5e3bb2ab6f542b198770cdb8b0e1e72ab1 [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001/*
2 * arch/m32r/boot/compressed/m32r_sio.c
3 *
4 * 2003-02-12: Takeo Takahashi
5 *
6 */
7
Hirokazu Takata23680862005-06-21 17:16:10 -07008#include <asm/processor.h>
Linus Torvalds1da177e2005-04-16 15:20:36 -07009
10static void putc(char c);
11
12static int puts(const char *s)
13{
14 char c;
15 while ((c = *s++)) putc(c);
16 return 0;
17}
18
19#if defined(CONFIG_PLAT_M32700UT_Alpha) || defined(CONFIG_PLAT_M32700UT)
20#include <asm/m32r.h>
21#include <asm/io.h>
22
23#define USE_FPGA_MAP 0
24
25#if USE_FPGA_MAP
26/*
27 * fpga configuration program uses MMU, and define map as same as
28 * M32104 uT-Engine board.
29 */
30#define BOOT_SIO0STS (volatile unsigned short *)(0x02c00000 + 0x20006)
31#define BOOT_SIO0TXB (volatile unsigned short *)(0x02c00000 + 0x2000c)
32#else
33#undef PLD_BASE
34#define PLD_BASE 0xa4c00000
35#define BOOT_SIO0STS PLD_ESIO0STS
36#define BOOT_SIO0TXB PLD_ESIO0TXB
37#endif
38
39static void putc(char c)
40{
Hirokazu Takata23680862005-06-21 17:16:10 -070041 while ((*BOOT_SIO0STS & 0x3) != 0x3)
42 cpu_relax();
Linus Torvalds1da177e2005-04-16 15:20:36 -070043 if (c == '\n') {
44 *BOOT_SIO0TXB = '\r';
Hirokazu Takata23680862005-06-21 17:16:10 -070045 while ((*BOOT_SIO0STS & 0x3) != 0x3)
46 cpu_relax();
Linus Torvalds1da177e2005-04-16 15:20:36 -070047 }
48 *BOOT_SIO0TXB = c;
49}
Hirokazu Takata23680862005-06-21 17:16:10 -070050#else /* !(CONFIG_PLAT_M32700UT_Alpha) && !(CONFIG_PLAT_M32700UT) */
51#if defined(CONFIG_PLAT_MAPPI2)
Linus Torvalds1da177e2005-04-16 15:20:36 -070052#define SIO0STS (volatile unsigned short *)(0xa0efd000 + 14)
53#define SIO0TXB (volatile unsigned short *)(0xa0efd000 + 30)
54#else
55#define SIO0STS (volatile unsigned short *)(0x00efd000 + 14)
56#define SIO0TXB (volatile unsigned short *)(0x00efd000 + 30)
57#endif
58
59static void putc(char c)
60{
Hirokazu Takata23680862005-06-21 17:16:10 -070061 while ((*SIO0STS & 0x1) == 0)
62 cpu_relax();
Linus Torvalds1da177e2005-04-16 15:20:36 -070063 if (c == '\n') {
64 *SIO0TXB = '\r';
Hirokazu Takata23680862005-06-21 17:16:10 -070065 while ((*SIO0STS & 0x1) == 0)
66 cpu_relax();
Linus Torvalds1da177e2005-04-16 15:20:36 -070067 }
68 *SIO0TXB = c;
69}
70#endif