/*
 * DaVinci serial device definitions
 *
 * Author: Kevin Hilman, MontaVista Software, Inc. <source@mvista.com>
 *
 * 2007 (c) MontaVista Software, Inc. 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.
 */
#ifndef __ASM_ARCH_SERIAL_H
#define __ASM_ARCH_SERIAL_H

#include <asm/memory.h>

#include <mach/hardware.h>

/*
 * Stolen area that contains debug uart physical and virtual addresses.  These
 * addresses are filled in by the uncompress.h code, and are used by the debug
 * macros in debug-macro.S.
 *
 * This area sits just below the page tables (see arch/arm/kernel/head.S).
 */
#define DAVINCI_UART_INFO	(PLAT_PHYS_OFFSET + 0x3ff8)

#define DAVINCI_UART0_BASE	(IO_PHYS + 0x20000)
#define DAVINCI_UART1_BASE	(IO_PHYS + 0x20400)
#define DAVINCI_UART2_BASE	(IO_PHYS + 0x20800)

#define DA8XX_UART0_BASE	(IO_PHYS + 0x042000)
#define DA8XX_UART1_BASE	(IO_PHYS + 0x10c000)
#define DA8XX_UART2_BASE	(IO_PHYS + 0x10d000)

#define TNETV107X_UART0_BASE	0x08108100
#define TNETV107X_UART1_BASE	0x08088400
#define TNETV107X_UART2_BASE	0x08108300

#define TNETV107X_UART0_VIRT	IOMEM(0xfee08100)
#define TNETV107X_UART1_VIRT	IOMEM(0xfed88400)
#define TNETV107X_UART2_VIRT	IOMEM(0xfee08300)

/* DaVinci UART register offsets */
#define UART_DAVINCI_PWREMU		0x0c
#define UART_DM646X_SCR			0x10
#define UART_DM646X_SCR_TX_WATERMARK	0x08

#ifndef __ASSEMBLY__
struct davinci_uart_config {
	/* Bit field of UARTs present; bit 0 --> UART1 */
	unsigned int enabled_uarts;
};

extern int davinci_serial_init(struct davinci_uart_config *);
#endif

#endif /* __ASM_ARCH_SERIAL_H */
