/**
 * @file
 * @brief This file contains the processor specific definitions of
 * the TI OMAP34XX. For more info on OMAP34XX,
 * See http://focus.ti.com/pdfs/wtbu/swpu114g.pdf
 *
 * FileName: include/asm-arm/arch-omap/omap3-silicon.h
 *
 * OMAP34XX base address defines go here.
 *
 * Originally from Linux kernel:
 * http://linux.omap.com/pub/kernel/3430zoom/linux-ldp-v1.0b.tar.gz
 * include/asm-arm/arch-omap/omap3-silicon.h
 */
/*
 * (C) Copyright 2008
 * Texas Instruments, <www.ti.com>
 * Nishanth Menon <x0nishan@ti.com>
 *
 * Copyright (C) 2007 Texas Instruments, <www.ti.com>
 * Copyright (C) 2007 Nokia Corporation.
 *
 * 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.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 * MA 02111-1307 USA
 */

#ifndef __ASM_ARCH_OMAP3_H
#define __ASM_ARCH_OMAP3_H

/* PLEASE PLACE ONLY BASE DEFINES HERE */

/** OMAP Internal Bus Base addresses */
#define OMAP_L4_CORE_BASE	0x48000000
#define OMAP_INTC_BASE		0x48200000
#define OMAP_L4_WKUP_BASE	0x48300000
#define OMAP_L4_PER_BASE	0x49000000
#define OMAP_L4_EMU_BASE	0x54000000
#define OMAP_SGX_BASE		0x50000000
#define OMAP_IVA_BASE		0x5C000000
#define OMAP_SMX_APE_BASE	0x68000000
#define OMAP_SMS_BASE		0x6C000000
#define OMAP_SDRC_BASE		0x6D000000
#define OMAP_GPMC_BASE		0x6E000000

/** Peripheral Base Addresses */
#define OMAP_CTRL_BASE		(OMAP_L4_CORE_BASE + 0x02000)
#define OMAP_CM_BASE		(OMAP_L4_CORE_BASE + 0x04000)
#define OMAP_PRM_BASE		(OMAP_L4_WKUP_BASE + 0x06000)

#define OMAP_UART1_BASE		(OMAP_L4_CORE_BASE + 0x6A000)
#define OMAP_UART2_BASE		(OMAP_L4_CORE_BASE + 0x6C000)
#define OMAP_UART3_BASE		(OMAP_L4_PER_BASE + 0x20000)

#define OMAP_I2C1_BASE		(OMAP_L4_CORE_BASE + 0x70000)
#define OMAP_I2C2_BASE		(OMAP_L4_CORE_BASE + 0x72000)
#define OMAP_I2C3_BASE		(OMAP_L4_CORE_BASE + 0x60000)

#define OMAP_GPTIMER1_BASE	(OMAP_L4_WKUP_BASE + 0x18000)
#define OMAP_GPTIMER2_BASE	(OMAP_L4_PER_BASE + 0x32000)
#define OMAP_GPTIMER3_BASE	(OMAP_L4_PER_BASE + 0x34000)
#define OMAP_GPTIMER4_BASE	(OMAP_L4_PER_BASE + 0x36000)
#define OMAP_GPTIMER5_BASE	(OMAP_L4_PER_BASE + 0x38000)
#define OMAP_GPTIMER6_BASE	(OMAP_L4_PER_BASE + 0x3A000)
#define OMAP_GPTIMER7_BASE	(OMAP_L4_PER_BASE + 0x3C000)
#define OMAP_GPTIMER8_BASE	(OMAP_L4_PER_BASE + 0x3E000)
#define OMAP_GPTIMER9_BASE	(OMAP_L4_PER_BASE + 0x40000)
#define OMAP_GPTIMER10_BASE	(OMAP_L4_CORE_BASE + 0x86000)
#define OMAP_GPTIMER11_BASE	(OMAP_L4_CORE_BASE + 0x88000)

#define OMAP_WDTIMER2_BASE	(OMAP_L4_WKUP_BASE + 0x14000)
#define OMAP_WDTIMER3_BASE	(OMAP_L4_PER_BASE + 0x30000)

#define OMAP_32KTIMER_BASE	(OMAP_L4_WKUP_BASE + 0x20000)

#define OMAP_MMC1_BASE		(OMAP_L4_CORE_BASE + 0x9C000)
#define OMAP_MMC2_BASE		(OMAP_L4_CORE_BASE + 0xB4000)
#define OMAP_MMC3_BASE		(OMAP_L4_CORE_BASE + 0xAD000)

#define OMAP_MUSB0_BASE		(OMAP_L4_CORE_BASE + 0xAB000)

#define OMAP_GPIO1_BASE		(OMAP_L4_WKUP_BASE + 0x10000)
#define OMAP_GPIO2_BASE		(OMAP_L4_PER_BASE + 0x50000)
#define OMAP_GPIO3_BASE		(OMAP_L4_PER_BASE + 0x52000)
#define OMAP_GPIO4_BASE		(OMAP_L4_PER_BASE + 0x54000)
#define OMAP_GPIO5_BASE		(OMAP_L4_PER_BASE + 0x56000)
#define OMAP_GPIO6_BASE		(OMAP_L4_PER_BASE + 0x58000)

/** MPU WDT Definition */
#define OMAP_MPU_WDTIMER_BASE	OMAP_WDTIMER2_BASE

#define OMAP_HSUSB_OTG_BASE    (OMAP_L4_CORE_BASE + 0xAB000)
#define OMAP_USBTLL_BASE       (OMAP_L4_CORE_BASE + 0x62000)
#define OMAP_UHH_CONFIG_BASE   (OMAP_L4_CORE_BASE + 0x64000)
#define OMAP_OHCI_BASE         (OMAP_L4_CORE_BASE + 0x64400)
#define OMAP_EHCI_BASE         (OMAP_L4_CORE_BASE + 0x64800)

/** Interrupt Vector base address */
#define OMAP_SRAM_INTVECT	0x4020F800
#define OMAP_SRAM_INTVECT_COPYSIZE	0x64
/** Temporary stack for us to use C calls in low_level_init */
#define OMAP_SRAM_STACK		0x4020FFFC

/** Gives the silicon revision */
#define OMAP_TAP_BASE		(OMAP_L4_WKUP_BASE + 0xA000)
#define IDCODE_REG		(OMAP_TAP_BASE + 0x204)

/** Masks to extract information from ID code register */
#define IDCODE_HAWKEYE_MASK	0x0FFFF000
#define IDCODE_VERSION_MASK	0xF0000000

 #define get_hawkeye(v)		(((v) & IDCODE_HAWKEYE_MASK) >> 12)
 #define get_version(v)		(((v) & IDCODE_VERSION_MASK) >> 28)

#define HAWKEYE_ES1		0x0B6D6000
#define HAWKEYE_ES2		0x0B7AE000
#define HAWKEYE_ES2_1		0x1B7AE000

#define DEVICE_MASK		((0x1 << 8)|(0x1 << 9)|(0x1 << 10))

#define OMAP_SDRC_CS0		0x80000000
#define OMAP_SDRC_CS1		0xA0000000

#endif /* __ASM_ARCH_OMAP3_H */

