2007-07-09 22:06:53 +01:00
/*
2008-08-05 16:14:15 +01:00
* arch / arm / plat - mxc / include / mach / uncompress . h
2007-07-09 22:06:53 +01:00
*
* Copyright ( C ) 1999 ARM Limited
* Copyright ( C ) Shane Nay ( shane @ minirl . com )
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 2 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*/
# ifndef __ASM_ARCH_MXC_UNCOMPRESS_H__
# define __ASM_ARCH_MXC_UNCOMPRESS_H__
# define __MXC_BOOT_UNCOMPRESS
2009-06-04 13:29:57 +02:00
# include <asm/mach-types.h>
2007-07-09 22:06:53 +01:00
2011-04-28 17:00:17 -04:00
unsigned long uart_base ;
2009-06-04 13:29:57 +02:00
# define UART(x) (*(volatile unsigned long *)(uart_base + (x)))
2007-07-09 22:06:53 +01:00
# define USR2 0x98
# define USR2_TXFE (1<<14)
# define TXR 0x40
# define UCR1 0x80
# define UCR1_UARTEN 1
/*
* The following code assumes the serial port has already been
* initialized by the bootloader . We search for the first enabled
* port in the most probable order . If you didn ' t setup a port in
* your bootloader then nothing will appear ( which might be desired ) .
*
* This does not append a newline
*/
static void putc ( int ch )
{
2009-06-04 13:29:57 +02:00
if ( ! uart_base )
return ;
if ( ! ( UART ( UCR1 ) & UCR1_UARTEN ) )
return ;
2007-07-09 22:06:53 +01:00
while ( ! ( UART ( USR2 ) & USR2_TXFE ) )
2007-07-27 23:30:55 +01:00
barrier ( ) ;
2007-07-09 22:06:53 +01:00
UART ( TXR ) = ch ;
}
2010-01-14 20:36:55 +01:00
static inline void flush ( void )
{
}
2007-07-09 22:06:53 +01:00
2009-06-04 13:29:57 +02:00
# define MX1_UART1_BASE_ADDR 0x00206000
2009-06-04 11:32:12 +02:00
# define MX25_UART1_BASE_ADDR 0x43f90000
2009-06-04 13:29:57 +02:00
# define MX2X_UART1_BASE_ADDR 0x1000a000
# define MX3X_UART1_BASE_ADDR 0x43F90000
2009-07-31 20:29:22 +09:00
# define MX3X_UART2_BASE_ADDR 0x43F94000
2011-02-18 22:22:23 +01:00
# define MX3X_UART5_BASE_ADDR 0x43FB4000
2010-03-18 16:55:45 +01:00
# define MX51_UART1_BASE_ADDR 0x73fbc000
2010-12-30 19:25:06 +08:00
# define MX50_UART1_BASE_ADDR 0x53fbc000
2011-01-04 14:22:56 +08:00
# define MX53_UART1_BASE_ADDR 0x53fbc000
2009-06-04 13:29:57 +02:00
static __inline__ void __arch_decomp_setup ( unsigned long arch_id )
{
switch ( arch_id ) {
case MACH_TYPE_MX1ADS :
case MACH_TYPE_SCB9328 :
uart_base = MX1_UART1_BASE_ADDR ;
break ;
2009-06-04 11:32:46 +02:00
case MACH_TYPE_MX25_3DS :
uart_base = MX25_UART1_BASE_ADDR ;
break ;
2009-06-04 13:29:57 +02:00
case MACH_TYPE_IMX27LITE :
case MACH_TYPE_MX27_3DS :
case MACH_TYPE_MX27ADS :
case MACH_TYPE_PCM038 :
case MACH_TYPE_MX21ADS :
2009-11-12 11:29:43 +01:00
case MACH_TYPE_PCA100 :
2009-11-25 15:24:50 -02:00
case MACH_TYPE_MXT_TD60 :
2011-01-24 16:55:02 -02:00
case MACH_TYPE_IMX27IPCAM :
2009-06-04 13:29:57 +02:00
uart_base = MX2X_UART1_BASE_ADDR ;
break ;
case MACH_TYPE_MX31LITE :
case MACH_TYPE_ARMADILLO5X0 :
case MACH_TYPE_MX31MOBOARD :
case MACH_TYPE_QONG :
case MACH_TYPE_MX31_3DS :
case MACH_TYPE_PCM037 :
case MACH_TYPE_MX31ADS :
case MACH_TYPE_MX35_3DS :
case MACH_TYPE_PCM043 :
2009-10-26 11:55:59 +01:00
case MACH_TYPE_LILLY1131 :
2011-01-21 16:03:57 -02:00
case MACH_TYPE_VPR200 :
2011-12-13 07:31:45 +01:00
case MACH_TYPE_EUKREA_CPUIMX35SD :
2009-06-04 13:29:57 +02:00
uart_base = MX3X_UART1_BASE_ADDR ;
break ;
2009-07-31 20:29:22 +09:00
case MACH_TYPE_MAGX_ZN5 :
uart_base = MX3X_UART2_BASE_ADDR ;
break ;
2011-02-18 22:22:23 +01:00
case MACH_TYPE_BUG :
uart_base = MX3X_UART5_BASE_ADDR ;
break ;
2010-03-18 16:55:45 +01:00
case MACH_TYPE_MX51_BABBAGE :
2010-10-12 16:12:36 +02:00
case MACH_TYPE_EUKREA_CPUIMX51SD :
2011-01-21 16:03:57 -02:00
case MACH_TYPE_MX51_3DS :
2010-03-18 16:55:45 +01:00
uart_base = MX51_UART1_BASE_ADDR ;
break ;
2010-12-30 19:25:06 +08:00
case MACH_TYPE_MX50_RDP :
uart_base = MX50_UART1_BASE_ADDR ;
break ;
2011-01-04 14:22:56 +08:00
case MACH_TYPE_MX53_EVK :
2011-02-18 12:36:15 +08:00
case MACH_TYPE_MX53_LOCO :
2011-02-21 14:28:10 +08:00
case MACH_TYPE_MX53_SMD :
2011-06-10 13:08:14 -03:00
case MACH_TYPE_MX53_ARD :
2011-01-04 14:22:56 +08:00
uart_base = MX53_UART1_BASE_ADDR ;
break ;
2009-06-04 13:29:57 +02:00
default :
break ;
}
}
2007-07-09 22:06:53 +01:00
2009-06-04 13:29:57 +02:00
# define arch_decomp_setup() __arch_decomp_setup(arch_id)
2007-07-09 22:06:53 +01:00
# define arch_decomp_wdog()
# endif /* __ASM_ARCH_MXC_UNCOMPRESS_H__ */