| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-06-04 13:29:57 +02:00
										 |  |  | static unsigned long uart_base; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #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
 | 
					
						
							| 
									
										
										
										
											2010-03-18 16:55:45 +01:00
										 |  |  | #define MX51_UART1_BASE_ADDR	0x73fbc000
 | 
					
						
							| 
									
										
										
										
											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: | 
					
						
							| 
									
										
										
										
											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: | 
					
						
							| 
									
										
										
										
											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; | 
					
						
							| 
									
										
										
										
											2010-03-18 16:55:45 +01:00
										 |  |  | 	case MACH_TYPE_MX51_BABBAGE: | 
					
						
							|  |  |  | 		uart_base = MX51_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__ */
 |