2005-04-16 15:20:36 -07:00
/*
* arch / m32r / boot / compressed / m32r_sio . c
*
* 2003 - 02 - 12 : Takeo Takahashi
2006-12-08 02:35:57 -08:00
* 2006 - 11 - 30 : OPSPUT support by Kazuhiro Inaoka
2005-04-16 15:20:36 -07:00
*
*/
2005-06-21 17:16:10 -07:00
# include <asm/processor.h>
2005-04-16 15:20:36 -07:00
static void putc ( char c ) ;
static int puts ( const char * s )
{
char c ;
while ( ( c = * s + + ) ) putc ( c ) ;
return 0 ;
}
2008-02-04 22:27:33 -08:00
# if defined(CONFIG_PLAT_M32700UT) || defined(CONFIG_PLAT_OPSPUT)
2005-04-16 15:20:36 -07:00
# include <asm/m32r.h>
# include <asm/io.h>
# define USE_FPGA_MAP 0
# if USE_FPGA_MAP
/*
* fpga configuration program uses MMU , and define map as same as
* M32104 uT - Engine board .
*/
# define BOOT_SIO0STS (volatile unsigned short *)(0x02c00000 + 0x20006)
# define BOOT_SIO0TXB (volatile unsigned short *)(0x02c00000 + 0x2000c)
# else
# undef PLD_BASE
2006-12-08 02:35:57 -08:00
# if defined(CONFIG_PLAT_OPSPUT)
# define PLD_BASE 0x1cc00000
# else
2005-04-16 15:20:36 -07:00
# define PLD_BASE 0xa4c00000
2006-12-08 02:35:57 -08:00
# endif
2005-04-16 15:20:36 -07:00
# define BOOT_SIO0STS PLD_ESIO0STS
# define BOOT_SIO0TXB PLD_ESIO0TXB
# endif
static void putc ( char c )
{
2005-06-21 17:16:10 -07:00
while ( ( * BOOT_SIO0STS & 0x3 ) ! = 0x3 )
cpu_relax ( ) ;
2005-04-16 15:20:36 -07:00
if ( c = = ' \n ' ) {
* BOOT_SIO0TXB = ' \r ' ;
2005-06-21 17:16:10 -07:00
while ( ( * BOOT_SIO0STS & 0x3 ) ! = 0x3 )
cpu_relax ( ) ;
2005-04-16 15:20:36 -07:00
}
* BOOT_SIO0TXB = c ;
}
2008-02-04 22:27:33 -08:00
# else /* !(CONFIG_PLAT_M32700UT) */
2005-06-21 17:16:10 -07:00
# if defined(CONFIG_PLAT_MAPPI2)
2005-04-16 15:20:36 -07:00
# define SIO0STS (volatile unsigned short *)(0xa0efd000 + 14)
# define SIO0TXB (volatile unsigned short *)(0xa0efd000 + 30)
# else
# define SIO0STS (volatile unsigned short *)(0x00efd000 + 14)
# define SIO0TXB (volatile unsigned short *)(0x00efd000 + 30)
# endif
static void putc ( char c )
{
2005-06-21 17:16:10 -07:00
while ( ( * SIO0STS & 0x1 ) = = 0 )
cpu_relax ( ) ;
2005-04-16 15:20:36 -07:00
if ( c = = ' \n ' ) {
* SIO0TXB = ' \r ' ;
2005-06-21 17:16:10 -07:00
while ( ( * SIO0STS & 0x1 ) = = 0 )
cpu_relax ( ) ;
2005-04-16 15:20:36 -07:00
}
* SIO0TXB = c ;
}
# endif