| 
									
										
										
										
											2007-04-30 19:37:19 +01:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * Serial port stubs for kernel decompress status messages | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2010-05-18 12:51:17 -04:00
										 |  |  |  * Initially based on: | 
					
						
							|  |  |  |  * arch/arm/plat-omap/include/mach/uncompress.h | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Original copyrights follow. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Copyright (C) 2000 RidgeRun, Inc. | 
					
						
							|  |  |  |  * Author: Greg Lonnon <glonnon@ridgerun.com> | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Rewritten by: | 
					
						
							|  |  |  |  * Author: <source@mvista.com> | 
					
						
							|  |  |  |  * 2004 (c) MontaVista Software, Inc. | 
					
						
							| 
									
										
										
										
											2007-04-30 19:37:19 +01:00
										 |  |  |  * | 
					
						
							|  |  |  |  * This file is licensed under the terms of the GNU General Public License | 
					
						
							|  |  |  |  * version 2. This program is licensed "as is" without any warranty of any | 
					
						
							|  |  |  |  * kind, whether express or implied. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <linux/types.h>
 | 
					
						
							|  |  |  | #include <linux/serial_reg.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-18 14:00:36 -07:00
										 |  |  | #include <asm/mach-types.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-05-18 12:51:17 -04:00
										 |  |  | #include <mach/serial.h>
 | 
					
						
							| 
									
										
										
										
											2009-02-18 14:00:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-10 10:30:31 -06:00
										 |  |  | #define IOMEM(x)	((void __force __iomem *)(x))
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-04-28 17:00:17 -04:00
										 |  |  | u32 *uart; | 
					
						
							| 
									
										
										
										
											2009-02-18 14:00:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-04-30 19:37:19 +01:00
										 |  |  | /* PORT_16C550A, in polled non-fifo mode */ | 
					
						
							|  |  |  | static void putc(char c) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2012-08-28 14:38:05 +05:30
										 |  |  | 	if (!uart) | 
					
						
							|  |  |  | 		return; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-04-30 19:37:19 +01:00
										 |  |  | 	while (!(uart[UART_LSR] & UART_LSR_THRE)) | 
					
						
							|  |  |  | 		barrier(); | 
					
						
							|  |  |  | 	uart[UART_TX] = c; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static inline void flush(void) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2012-08-28 14:38:05 +05:30
										 |  |  | 	if (!uart) | 
					
						
							|  |  |  | 		return; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-04-30 19:37:19 +01:00
										 |  |  | 	while (!(uart[UART_LSR] & UART_LSR_THRE)) | 
					
						
							|  |  |  | 		barrier(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-22 10:29:23 +01:00
										 |  |  | static inline void set_uart_info(u32 phys) | 
					
						
							| 
									
										
										
										
											2010-05-18 12:51:17 -04:00
										 |  |  | { | 
					
						
							|  |  |  | 	uart = (u32 *)phys; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-22 10:29:23 +01:00
										 |  |  | #define _DEBUG_LL_ENTRY(machine, phys)				\
 | 
					
						
							|  |  |  | 	{							\ | 
					
						
							|  |  |  | 		if (machine_is_##machine()) {			\ | 
					
						
							|  |  |  | 			set_uart_info(phys);			\ | 
					
						
							|  |  |  | 			break;					\ | 
					
						
							|  |  |  | 		}						\ | 
					
						
							| 
									
										
										
										
											2010-05-18 12:51:17 -04:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define DEBUG_LL_DAVINCI(machine, port)				\
 | 
					
						
							| 
									
										
										
										
											2012-03-22 10:29:23 +01:00
										 |  |  | 	_DEBUG_LL_ENTRY(machine, DAVINCI_UART##port##_BASE) | 
					
						
							| 
									
										
										
										
											2010-05-18 12:51:17 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | #define DEBUG_LL_DA8XX(machine, port)				\
 | 
					
						
							| 
									
										
										
										
											2012-03-22 10:29:23 +01:00
										 |  |  | 	_DEBUG_LL_ENTRY(machine, DA8XX_UART##port##_BASE) | 
					
						
							| 
									
										
										
										
											2010-05-18 12:51:17 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-05-18 12:51:18 -04:00
										 |  |  | #define DEBUG_LL_TNETV107X(machine, port)			\
 | 
					
						
							| 
									
										
										
										
											2012-03-22 10:29:23 +01:00
										 |  |  | 	_DEBUG_LL_ENTRY(machine, TNETV107X_UART##port##_BASE) | 
					
						
							| 
									
										
										
										
											2010-05-18 12:51:18 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-05-18 12:51:17 -04:00
										 |  |  | static inline void __arch_decomp_setup(unsigned long arch_id) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	/*
 | 
					
						
							|  |  |  | 	 * Initialize the port based on the machine ID from the bootloader. | 
					
						
							|  |  |  | 	 * Note that we're using macros here instead of switch statement | 
					
						
							|  |  |  | 	 * as machine_is functions are optimized out for the boards that | 
					
						
							|  |  |  | 	 * are not selected. | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	do { | 
					
						
							|  |  |  | 		/* Davinci boards */ | 
					
						
							|  |  |  | 		DEBUG_LL_DAVINCI(davinci_evm,		0); | 
					
						
							|  |  |  | 		DEBUG_LL_DAVINCI(sffsdr,		0); | 
					
						
							|  |  |  | 		DEBUG_LL_DAVINCI(neuros_osd2,		0); | 
					
						
							|  |  |  | 		DEBUG_LL_DAVINCI(davinci_dm355_evm,	0); | 
					
						
							|  |  |  | 		DEBUG_LL_DAVINCI(dm355_leopard,		0); | 
					
						
							|  |  |  | 		DEBUG_LL_DAVINCI(davinci_dm6467_evm,	0); | 
					
						
							|  |  |  | 		DEBUG_LL_DAVINCI(davinci_dm365_evm,	0); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		/* DA8xx boards */ | 
					
						
							|  |  |  | 		DEBUG_LL_DA8XX(davinci_da830_evm,	2); | 
					
						
							|  |  |  | 		DEBUG_LL_DA8XX(davinci_da850_evm,	2); | 
					
						
							| 
									
										
										
										
											2010-09-02 13:58:07 -04:00
										 |  |  | 		DEBUG_LL_DA8XX(mityomapl138,		1); | 
					
						
							| 
									
										
										
										
											2010-09-23 11:28:40 -05:00
										 |  |  | 		DEBUG_LL_DA8XX(omapl138_hawkboard,	2); | 
					
						
							| 
									
										
										
										
											2010-05-18 12:51:18 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		/* TNETV107x boards */ | 
					
						
							|  |  |  | 		DEBUG_LL_TNETV107X(tnetv107x,		1); | 
					
						
							| 
									
										
										
										
											2010-05-18 12:51:17 -04:00
										 |  |  | 	} while (0); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define arch_decomp_setup()	__arch_decomp_setup(arch_id)
 |