| 
									
										
										
										
											2005-09-07 17:20:27 +01:00
										 |  |  | /*
 | 
					
						
							| 
									
										
										
										
											2009-05-28 14:16:04 -07:00
										 |  |  |  * arch/arm/plat-omap/include/mach/serial.h | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Copyright (C) 2009 Texas Instruments | 
					
						
							|  |  |  |  * Addded OMAP4 support- Santosh Shilimkar <santosh.shilimkar@ti.com> | 
					
						
							| 
									
										
										
										
											2005-09-07 17:20:27 +01:00
										 |  |  |  * | 
					
						
							|  |  |  |  * 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_SERIAL_H
 | 
					
						
							|  |  |  | #define __ASM_ARCH_SERIAL_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-03 20:14:02 +03:00
										 |  |  | #include <linux/init.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-04-30 17:39:19 -07:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * Memory entry used for the DEBUG_LL UART configuration. See also | 
					
						
							|  |  |  |  * uncompress.h and debug-macro.S. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Note that using a memory location for storing the UART configuration | 
					
						
							|  |  |  |  * has at least two limitations: | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * 1. Kernel uncompress code cannot overlap OMAP_UART_INFO as the | 
					
						
							|  |  |  |  *    uncompress code could then partially overwrite itself | 
					
						
							|  |  |  |  * 2. We assume printascii is called at least once before paging_init, | 
					
						
							|  |  |  |  *    and addruart has a chance to read OMAP_UART_INFO | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | #define OMAP_UART_INFO		(PHYS_OFFSET + 0x3ffc)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-09-07 17:20:27 +01:00
										 |  |  | /* OMAP1 serial ports */ | 
					
						
							| 
									
										
										
										
											2010-02-15 08:48:53 -08:00
										 |  |  | #define OMAP1_UART1_BASE	0xfffb0000
 | 
					
						
							|  |  |  | #define OMAP1_UART2_BASE	0xfffb0800
 | 
					
						
							|  |  |  | #define OMAP1_UART3_BASE	0xfffb9800
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-09-07 17:20:27 +01:00
										 |  |  | /* OMAP2 serial ports */ | 
					
						
							| 
									
										
										
										
											2010-02-15 08:48:53 -08:00
										 |  |  | #define OMAP2_UART1_BASE	0x4806a000
 | 
					
						
							|  |  |  | #define OMAP2_UART2_BASE	0x4806c000
 | 
					
						
							|  |  |  | #define OMAP2_UART3_BASE	0x4806e000
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-10-06 15:49:15 +03:00
										 |  |  | /* OMAP3 serial ports */ | 
					
						
							| 
									
										
										
										
											2010-02-15 08:49:01 -08:00
										 |  |  | #define OMAP3_UART1_BASE	OMAP2_UART1_BASE
 | 
					
						
							|  |  |  | #define OMAP3_UART2_BASE	OMAP2_UART2_BASE
 | 
					
						
							| 
									
										
										
										
											2010-02-15 08:48:53 -08:00
										 |  |  | #define OMAP3_UART3_BASE	0x49020000
 | 
					
						
							|  |  |  | #define OMAP3_UART4_BASE	0x49042000	/* Only on 36xx */
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-28 14:16:04 -07:00
										 |  |  | /* OMAP4 serial ports */ | 
					
						
							| 
									
										
										
										
											2010-02-15 08:49:01 -08:00
										 |  |  | #define OMAP4_UART1_BASE	OMAP2_UART1_BASE
 | 
					
						
							|  |  |  | #define OMAP4_UART2_BASE	OMAP2_UART2_BASE
 | 
					
						
							| 
									
										
										
										
											2010-02-15 08:48:53 -08:00
										 |  |  | #define OMAP4_UART3_BASE	0x48020000
 | 
					
						
							|  |  |  | #define OMAP4_UART4_BASE	0x4806e000
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-15 08:49:01 -08:00
										 |  |  | /* External port on Zoom2/3 */ | 
					
						
							|  |  |  | #define ZOOM_UART_BASE		0x10000000
 | 
					
						
							| 
									
										
										
										
											2010-04-30 12:57:14 -07:00
										 |  |  | #define ZOOM_UART_VIRT		0xfa400000
 | 
					
						
							| 
									
										
										
										
											2010-02-15 08:49:01 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-15 08:48:53 -08:00
										 |  |  | #define OMAP_PORT_SHIFT		2
 | 
					
						
							|  |  |  | #define OMAP7XX_PORT_SHIFT	0
 | 
					
						
							| 
									
										
										
										
											2010-02-15 08:49:01 -08:00
										 |  |  | #define ZOOM_PORT_SHIFT		1
 | 
					
						
							| 
									
										
										
										
											2005-09-07 17:20:27 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | #define OMAP1510_BASE_BAUD	(12000000/16)
 | 
					
						
							|  |  |  | #define OMAP16XX_BASE_BAUD	(48000000/16)
 | 
					
						
							| 
									
										
										
										
											2008-10-06 15:49:15 +03:00
										 |  |  | #define OMAP24XX_BASE_BAUD	(48000000/16)
 | 
					
						
							| 
									
										
										
										
											2005-09-07 17:20:27 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-15 08:49:01 -08:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * DEBUG_LL port encoding stored into the UART1 scratchpad register by | 
					
						
							|  |  |  |  * decomp_setup in uncompress.h | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | #define OMAP1UART1		11
 | 
					
						
							|  |  |  | #define OMAP1UART2		12
 | 
					
						
							|  |  |  | #define OMAP1UART3		13
 | 
					
						
							|  |  |  | #define OMAP2UART1		21
 | 
					
						
							|  |  |  | #define OMAP2UART2		22
 | 
					
						
							|  |  |  | #define OMAP2UART3		23
 | 
					
						
							|  |  |  | #define OMAP3UART1		OMAP2UART1
 | 
					
						
							|  |  |  | #define OMAP3UART2		OMAP2UART2
 | 
					
						
							|  |  |  | #define OMAP3UART3		33
 | 
					
						
							|  |  |  | #define OMAP3UART4		34		/* Only on 36xx */
 | 
					
						
							|  |  |  | #define OMAP4UART1		OMAP2UART1
 | 
					
						
							|  |  |  | #define OMAP4UART2		OMAP2UART2
 | 
					
						
							|  |  |  | #define OMAP4UART3		43
 | 
					
						
							|  |  |  | #define OMAP4UART4		44
 | 
					
						
							|  |  |  | #define ZOOM_UART		95		/* Only on zoom2/3 */
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-15 08:48:53 -08:00
										 |  |  | /* This is only used by 8250.c for omap1510 */ | 
					
						
							| 
									
										
										
										
											2008-09-01 21:25:33 +01:00
										 |  |  | #define is_omap_port(pt)	({int __ret = 0;			\
 | 
					
						
							| 
									
										
										
										
											2010-02-15 08:48:53 -08:00
										 |  |  | 			if ((pt)->port.mapbase == OMAP1_UART1_BASE ||	\ | 
					
						
							|  |  |  | 			    (pt)->port.mapbase == OMAP1_UART2_BASE ||	\ | 
					
						
							|  |  |  | 			    (pt)->port.mapbase == OMAP1_UART3_BASE)	\ | 
					
						
							| 
									
										
										
										
											2008-09-01 21:25:33 +01:00
										 |  |  | 				__ret = 1;				\ | 
					
						
							|  |  |  | 			__ret;						\ | 
					
						
							| 
									
										
										
										
											2005-09-07 17:20:27 +01:00
										 |  |  | 			}) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
											  
											
												OMAP3: PM: UART: disable clocks when idle and off-mode support
This patch allows the UART clocks to be disabled when the OMAP UARTs
are inactive, thus permitting the chip to hit retention in idle.
After the expiration of an activity timer, each UART is allowed to
disable its clocks so the system can enter retention.  The activity
timer is (re)activated on any UART interrupt, UART wake event or any
IO pad wakeup.  The actual disable of the UART clocks is done in the
'prepare_idle' hook called from the OMAP idle loop.
While the activity timer is active, the smart-idle mode of the UART is
also disabled.  This is due to a "feature" of the UART module that
after a UART wakeup, the smart-idle mode may be entered before the
UART has communicated the interrupt, or upon TX, an idle mode may be
entered before the TX FIFOs are emptied.
Upon suspend, the 'prepare_suspend' hook cancels any pending activity
timers and allows the clocks to be disabled immediately.
In addition, upon disabling clocks the UART state is saved in case
of an off-mode transition while clocks are off.
Special thanks to Tero Kristo for the initial ideas and first versions
of UART idle support, and to Jouni Hogander for extra testing and
bugfixes.
Tested on OMAP3 (Beagle, RX51, SDP, EVM) and OMAP2 (n810)
Cc: Tero Kristo <tero.kristo@nokia.com>
Cc: Jouni Hogander <jouni.hogander@nokia.com>
Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
											
										 
											2009-02-04 10:51:40 -08:00
										 |  |  | #ifndef __ASSEMBLER__
 | 
					
						
							| 
									
										
										
										
											2009-09-03 20:14:02 +03:00
										 |  |  | extern void __init omap_serial_early_init(void); | 
					
						
							| 
									
										
											  
											
												OMAP3: PM: UART: disable clocks when idle and off-mode support
This patch allows the UART clocks to be disabled when the OMAP UARTs
are inactive, thus permitting the chip to hit retention in idle.
After the expiration of an activity timer, each UART is allowed to
disable its clocks so the system can enter retention.  The activity
timer is (re)activated on any UART interrupt, UART wake event or any
IO pad wakeup.  The actual disable of the UART clocks is done in the
'prepare_idle' hook called from the OMAP idle loop.
While the activity timer is active, the smart-idle mode of the UART is
also disabled.  This is due to a "feature" of the UART module that
after a UART wakeup, the smart-idle mode may be entered before the
UART has communicated the interrupt, or upon TX, an idle mode may be
entered before the TX FIFOs are emptied.
Upon suspend, the 'prepare_suspend' hook cancels any pending activity
timers and allows the clocks to be disabled immediately.
In addition, upon disabling clocks the UART state is saved in case
of an off-mode transition while clocks are off.
Special thanks to Tero Kristo for the initial ideas and first versions
of UART idle support, and to Jouni Hogander for extra testing and
bugfixes.
Tested on OMAP3 (Beagle, RX51, SDP, EVM) and OMAP2 (n810)
Cc: Tero Kristo <tero.kristo@nokia.com>
Cc: Jouni Hogander <jouni.hogander@nokia.com>
Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
											
										 
											2009-02-04 10:51:40 -08:00
										 |  |  | extern void omap_serial_init(void); | 
					
						
							| 
									
										
										
										
											2009-12-11 16:16:35 -08:00
										 |  |  | extern void omap_serial_init_port(int port); | 
					
						
							| 
									
										
											  
											
												OMAP3: PM: UART: disable clocks when idle and off-mode support
This patch allows the UART clocks to be disabled when the OMAP UARTs
are inactive, thus permitting the chip to hit retention in idle.
After the expiration of an activity timer, each UART is allowed to
disable its clocks so the system can enter retention.  The activity
timer is (re)activated on any UART interrupt, UART wake event or any
IO pad wakeup.  The actual disable of the UART clocks is done in the
'prepare_idle' hook called from the OMAP idle loop.
While the activity timer is active, the smart-idle mode of the UART is
also disabled.  This is due to a "feature" of the UART module that
after a UART wakeup, the smart-idle mode may be entered before the
UART has communicated the interrupt, or upon TX, an idle mode may be
entered before the TX FIFOs are emptied.
Upon suspend, the 'prepare_suspend' hook cancels any pending activity
timers and allows the clocks to be disabled immediately.
In addition, upon disabling clocks the UART state is saved in case
of an off-mode transition while clocks are off.
Special thanks to Tero Kristo for the initial ideas and first versions
of UART idle support, and to Jouni Hogander for extra testing and
bugfixes.
Tested on OMAP3 (Beagle, RX51, SDP, EVM) and OMAP2 (n810)
Cc: Tero Kristo <tero.kristo@nokia.com>
Cc: Jouni Hogander <jouni.hogander@nokia.com>
Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
											
										 
											2009-02-04 10:51:40 -08:00
										 |  |  | extern int omap_uart_can_sleep(void); | 
					
						
							|  |  |  | extern void omap_uart_check_wakeup(void); | 
					
						
							|  |  |  | extern void omap_uart_prepare_suspend(void); | 
					
						
							|  |  |  | extern void omap_uart_prepare_idle(int num); | 
					
						
							|  |  |  | extern void omap_uart_resume_idle(int num); | 
					
						
							| 
									
										
										
										
											2009-03-05 16:32:23 +02:00
										 |  |  | extern void omap_uart_enable_irqs(int enable); | 
					
						
							| 
									
										
											  
											
												OMAP3: PM: UART: disable clocks when idle and off-mode support
This patch allows the UART clocks to be disabled when the OMAP UARTs
are inactive, thus permitting the chip to hit retention in idle.
After the expiration of an activity timer, each UART is allowed to
disable its clocks so the system can enter retention.  The activity
timer is (re)activated on any UART interrupt, UART wake event or any
IO pad wakeup.  The actual disable of the UART clocks is done in the
'prepare_idle' hook called from the OMAP idle loop.
While the activity timer is active, the smart-idle mode of the UART is
also disabled.  This is due to a "feature" of the UART module that
after a UART wakeup, the smart-idle mode may be entered before the
UART has communicated the interrupt, or upon TX, an idle mode may be
entered before the TX FIFOs are emptied.
Upon suspend, the 'prepare_suspend' hook cancels any pending activity
timers and allows the clocks to be disabled immediately.
In addition, upon disabling clocks the UART state is saved in case
of an off-mode transition while clocks are off.
Special thanks to Tero Kristo for the initial ideas and first versions
of UART idle support, and to Jouni Hogander for extra testing and
bugfixes.
Tested on OMAP3 (Beagle, RX51, SDP, EVM) and OMAP2 (n810)
Cc: Tero Kristo <tero.kristo@nokia.com>
Cc: Jouni Hogander <jouni.hogander@nokia.com>
Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
											
										 
											2009-02-04 10:51:40 -08:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-09-07 17:20:27 +01:00
										 |  |  | #endif
 |