/*
 *    Copyright (c) 2010 Nest Labs, Inc.
 *
 *    See file CREDITS for list of people who contributed to this
 *    project.
 *
 *    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
 *
 *    Description:
 *      This file defines register and register field constants and
 *      macros for the Texas Instruments Open Multimedia Application
 *      Platform (OMAP) 3 General Purpose Memory Controller (GPMC).
 */

#ifndef _OMAP3_GPMC_H
#define _OMAP3_GPMC_H

#include <asm/arch/bits.h>

/*
 * GPMC Interconnect Configuration
 */
#define GPMC_SYSCONFIG_AUTOIDLE_DISABLE					ARM_REG_VAL(0, 0)
#define GPMC_SYSCONFIG_AUTOIDLE_ENABLE					ARM_REG_VAL(0, 1)
#define GPMC_SYSCONFIG_SOFTRESET						ARM_REG_VAL(1, 1)
#define GPMC_SYSCONFIG_IDLEMODE_FORCE					ARM_REG_VAL(3, 0)
#define GPMC_SYSCONFIG_IDLEMODE_NONE					ARM_REG_VAL(3, 1)
#define GPMC_SYSCONFIG_IDLEMODE_SMART					ARM_REG_VAL(3, 2)

#define GPMC_SYSCONFIG_IRQENABLE_FIFOEVENT_DISABLE		ARM_REG_VAL(0, 0)
#define GPMC_SYSCONFIG_IRQENABLE_FIFOEVENT_ENABLE		ARM_REG_VAL(0, 1)

#define GPMC_SYSCONFIG_IRQENABLE_TERMINALCOUNT_DISABLE	ARM_REG_VAL(0, 0)
#define GPMC_SYSCONFIG_IRQENABLE_TERMINALCOUNT_ENABLE	ARM_REG_VAL(0, 1)

#define GPMC_SYSCONFIG_IRQENABLE_TERMINALCOUNT_DISABLE	ARM_REG_VAL(0, 0)
#define GPMC_SYSCONFIG_IRQENABLE_TERMINALCOUNT_ENABLE	ARM_REG_VAL(0, 1)

/*
 * GPMC Interrupt Control
 */

#define GPMC_IRQENABLE_WAIT3EDGEDETECTION_DISABLE		ARM_REG_VAL(11, 0)
#define GPMC_IRQENABLE_WAIT3EDGEDETECTION_ENABLE		ARM_REG_VAL(11, 1)

#define GPMC_IRQENABLE_WAIT2EDGEDETECTION_DISABLE		ARM_REG_VAL(10, 0)
#define GPMC_IRQENABLE_WAIT2EDGEDETECTION_ENABLE		ARM_REG_VAL(10, 1)

#define GPMC_IRQENABLE_WAIT1EDGEDETECTION_DISABLE		ARM_REG_VAL(9, 0)
#define GPMC_IRQENABLE_WAIT1EDGEDETECTION_ENABLE		ARM_REG_VAL(9, 1)

#define GPMC_IRQENABLE_WAIT0EDGEDETECTION_DISABLE		ARM_REG_VAL(8, 0)
#define GPMC_IRQENABLE_WAIT0EDGEDETECTION_ENABLE		ARM_REG_VAL(8, 1)

#define GPMC_IRQENABLE_TERMINALCOUNTEVENT_DISABLE		ARM_REG_VAL(1, 0)
#define GPMC_IRQENABLE_TERMINALCOUNTEVENT_ENABLE		ARM_REG_VAL(1, 1)

#define GPMC_IRQENABLE_FIFOEVENTENABLE_DISABLE			ARM_REG_VAL(0, 0)
#define GPMC_IRQENABLE_FIFOEVENTENABLE_ENABLE			ARM_REG_VAL(0, 0)

#define GPMC_IRQENABLE_ALL_DISABLE					\
	(GPMC_IRQENABLE_WAIT3EDGEDETECTION_DISABLE |	\
	 GPMC_IRQENABLE_WAIT2EDGEDETECTION_DISABLE |	\
	 GPMC_IRQENABLE_WAIT1EDGEDETECTION_DISABLE |	\
	 GPMC_IRQENABLE_WAIT0EDGEDETECTION_DISABLE |	\
	 GPMC_IRQENABLE_TERMINALCOUNTEVENT_DISABLE |	\
	 GPMC_IRQENABLE_FIFOEVENTENABLE_DISABLE)

#define GPMC_IRQENABLE_ALL_ENABLE					\
	(GPMC_IRQENABLE_WAIT3EDGEDETECTION_ENABLE |		\
	 GPMC_IRQENABLE_WAIT2EDGEDETECTION_ENABLE |		\
	 GPMC_IRQENABLE_WAIT1EDGEDETECTION_ENABLE |		\
	 GPMC_IRQENABLE_WAIT0EDGEDETECTION_ENABLE |		\
	 GPMC_IRQENABLE_TERMINALCOUNTEVENT_ENABLE |		\
	 GPMC_IRQENABLE_FIFOEVENTENABLE_ENABLE)

/*
 * GPMC Timeout Counter Control
 */

#define GPMC_TIMEOUTSTARTVALUE_MASK						ARM_REG_VAL(4, 0x1FF)
#define GPMC_TIMEOUTSTARTVALUE_ENCODE(v)				ARM_REG_VAL_ENCODE(4, GPMC_TIMEOUTSTARTVALUE_MASK, v)
#define GPMC_TIMEOUTSTARTVALUE_DECODE(v)				ARM_REG_VAL_DECODE(4, GPMC_TIMEOUTSTARTVALUE_MASK, v)

#define GPMC_TIMEOUTENABLE_OFF							ARM_REG_VAL(0, 0)
#define GPMC_TIMEOUTENABLE_ON							ARM_REG_VAL(0, 1)

/*
 * GPMC Global Configuration
 */
#define GPMC_WAIT3PINPOLARITY_ACTIVE_LOW				ARM_REG_VAL(11, 0)
#define GPMC_WAIT3PINPOLARITY_ACTIVE_HIGH				ARM_REG_VAL(11, 1)

#define GPMC_WAIT2PINPOLARITY_ACTIVE_LOW				ARM_REG_VAL(10, 0)
#define GPMC_WAIT2PINPOLARITY_ACTIVE_HIGH				ARM_REG_VAL(10, 1)

#define GPMC_WAIT1PINPOLARITY_ACTIVE_LOW				ARM_REG_VAL(9, 0)
#define GPMC_WAIT1PINPOLARITY_ACTIVE_HIGH				ARM_REG_VAL(9, 1)

#define GPMC_WAIT0PINPOLARITY_ACTIVE_LOW				ARM_REG_VAL(8, 0)
#define GPMC_WAIT0PINPOLARITY_ACTIVE_HIGH				ARM_REG_VAL(8, 1)

#define GPMC_WRITEPROTECT_LOW							ARM_REG_VAL(4, 0)
#define GPMC_WRITEPROTECT_HIGH							ARM_REG_VAL(4, 1)

#define GPMC_LIMITEDADDRESS_DISABLED					ARM_REG_VAL(1, 0)
#define GPMC_LIMITEDADDRESS_ENABLED						ARM_REG_VAL(1, 1)

#define GPMC_NANDFORCEPOSTEDWRITE_DISABLED				ARM_REG_VAL(0, 0)
#define GPMC_NANDFORCEPOSTEDWRITE_ENABLED				ARM_REG_VAL(0, 1)

#define GPMC_CONFIG7_MASKADDRESS_MASK					ARM_REG_VAL(8, 0xF)
#define GPMC_CONFIG7_MASKADDRESS_ENCODE(v)				ARM_REG_VAL_ENCODE(8, GPMC_CONFIG7_MASKADDRESS_MASK, v)
#define GPMC_CONFIG7_MASKADDRESS_DECODE(v)				ARM_REG_VAL_DECODE(8, GPMC_CONFIG7_MASKADDRESS_MASK, v)
#define GPMC_CONFIG7_MASKADDRESS_256_MB					  0x0
#define GPMC_CONFIG7_MASKADDRESS_128_MB					  0x8
#define GPMC_CONFIG7_MASKADDRESS_64_MB					  0xC
#define GPMC_CONFIG7_MASKADDRESS_32_MB					  0xE
#define GPMC_CONFIG7_MASKADDRESS_16_MB					  0xF

#define GPMC_CONFIG7_CSVALID_DISABLED					ARM_REG_VAL(6, 0)
#define GPMC_CONFIG7_CSVALID_ENABLED					ARM_REG_VAL(6, 1)

#define GPMC_CONFIG7_BASEADDRESS_MASK					ARM_REG_VAL(0, 0x3F)
#define GPMC_CONFIG7_BASEADDRESS_ENCODE(v)				ARM_REG_VAL_ENCODE(0, GPMC_CONFIG7_BASEADDRESS_MASK, ((v) >> 24))
#define GPMC_CONFIG7_BASEADDRESS_DECODE(v)				(ARM_REG_VAL_DECODE(0, GPMC_CONFIG7_BASEADDRESS_MASK, v) << 24)


#endif /* _OMAP3_GPMC_H */
