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 */
2016-02-18 17:36:23 +01:00
static inline void putc ( char c )
2007-04-30 19:37:19 +01:00
{
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
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:17 -04:00
} while ( 0 ) ;
}
# define arch_decomp_setup() __arch_decomp_setup(arch_id)