xref: /netbsd-src/sys/arch/evbarm/gemini/gemini.h (revision 41bfa2c41de55ac3bdff662d3605ff084e83ebfb)
1*41bfa2c4Scliff /*	$NetBSD: gemini.h,v 1.8 2008/12/06 05:22:39 cliff Exp $	*/
2f5d7ce3dSmatt 
37c8bb98aSmatt /*-
47c8bb98aSmatt  * Copyright (c) 2008 The NetBSD Foundation, Inc.
5f5d7ce3dSmatt  * All rights reserved.
6f5d7ce3dSmatt  *
77c8bb98aSmatt  * This code is derived from software contributed to The NetBSD Foundation
87c8bb98aSmatt  * by Matt Thomas <matt@3am-software.com>
97c8bb98aSmatt  *
10f5d7ce3dSmatt  * Redistribution and use in source and binary forms, with or without
11f5d7ce3dSmatt  * modification, are permitted provided that the following conditions
12f5d7ce3dSmatt  * are met:
13f5d7ce3dSmatt  * 1. Redistributions of source code must retain the above copyright
14f5d7ce3dSmatt  *    notice, this list of conditions and the following disclaimer.
15f5d7ce3dSmatt  * 2. Redistributions in binary form must reproduce the above copyright
16f5d7ce3dSmatt  *    notice, this list of conditions and the following disclaimer in the
17f5d7ce3dSmatt  *    documentation and/or other materials provided with the distribution.
18f5d7ce3dSmatt  *
197c8bb98aSmatt  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
207c8bb98aSmatt  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
217c8bb98aSmatt  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
227c8bb98aSmatt  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
237c8bb98aSmatt  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
247c8bb98aSmatt  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
257c8bb98aSmatt  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
267c8bb98aSmatt  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
277c8bb98aSmatt  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
287c8bb98aSmatt  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
297c8bb98aSmatt  * POSSIBILITY OF SUCH DAMAGE.
30f5d7ce3dSmatt  */
31f5d7ce3dSmatt 
32f5d7ce3dSmatt #ifndef _EVBARM_GEMINI_GEMINI_H
33f5d7ce3dSmatt #define _EVBARM_GEMINI_GEMINI_H
34f5d7ce3dSmatt 
35f5d7ce3dSmatt /*
3601b65de4Scliff  * sanity check opt_gemini.h
3701b65de4Scliff  */
3801b65de4Scliff #include "opt_gemini.h"
3901b65de4Scliff #if !defined(GEMINI)
4001b65de4Scliff # error must define GEMINI to use gemini.h
4101b65de4Scliff #endif
4201b65de4Scliff #if !defined(GEMINI_SINGLE) && !defined(GEMINI_MASTER) && !defined(GEMINI_SLAVE)
4301b65de4Scliff # error must define one of GEMINI_SINGLE, GEMINI_MASTER, or GEMINI_SLAVE
4401b65de4Scliff #endif
4501b65de4Scliff #if defined(GEMINI_SINGLE)
4601b65de4Scliff # if defined(GEMINI_MASTER) || defined(GEMINI_SLAVE)
4701b65de4Scliff #  error GEMINI_SINGLE can not define either GEMINI_MASTER or GEMINI_SLAVE
4801b65de4Scliff # endif
4901b65de4Scliff #else
5001b65de4Scliff # if defined(GEMINI_MASTER) && defined(GEMINI_SLAVE)
5101b65de4Scliff #  error can not define both GEMINI_MASTER and GEMINI_SLAVE
5201b65de4Scliff # endif
5301b65de4Scliff #endif
5401b65de4Scliff 
55*41bfa2c4Scliff #include <machine/vmparam.h>
56*41bfa2c4Scliff #include <arm/gemini/gemini_reg.h>
57*41bfa2c4Scliff 
58*41bfa2c4Scliff 
5901b65de4Scliff /*
60f5d7ce3dSmatt  * Kernel VM space: 192MB at KERNEL_VM_BASE
61f5d7ce3dSmatt  */
62f5d7ce3dSmatt #define	KERNEL_VM_BASE		((KERNEL_BASE + 0x01000000) & ~(0x400000-1))
63f5d7ce3dSmatt #define KERNEL_VM_SIZE		0x0C000000
64f5d7ce3dSmatt 
65f5d7ce3dSmatt /*
66f5d7ce3dSmatt  * We devmap IO starting at KERNEL_VM_BASE + KERNEL_VM_SIZE
67f5d7ce3dSmatt  */
68f5d7ce3dSmatt #define	GEMINI_KERNEL_IO_VBASE	(KERNEL_VM_BASE + KERNEL_VM_SIZE)
6984dc474cScliff #define	GEMINI_GLOBAL_VBASE	GEMINI_KERNEL_IO_VBASE
7084dc474cScliff #define	GEMINI_WATCHDOG_VBASE	(GEMINI_GLOBAL_VBASE   + L1_S_SIZE)
713b02e840Scliff #define	GEMINI_UART_VBASE	(GEMINI_WATCHDOG_VBASE + L1_S_SIZE)
723b02e840Scliff #define	GEMINI_LPCHC_VBASE	(GEMINI_UART_VBASE     + L1_S_SIZE)
73a80e63a8Scliff #define	GEMINI_LPCIO_VBASE	(GEMINI_LPCHC_VBASE    + L1_S_SIZE)
74a80e63a8Scliff #define	GEMINI_TIMER_VBASE	(GEMINI_LPCIO_VBASE    + L1_S_SIZE)
75dda2ff23Scliff #define	GEMINI_DRAMC_VBASE	(GEMINI_TIMER_VBASE    + L1_S_SIZE)
76*41bfa2c4Scliff 
77*41bfa2c4Scliff /*
78*41bfa2c4Scliff  * mapping of physical RAM
79*41bfa2c4Scliff  */
80dda2ff23Scliff #define	GEMINI_RAMDISK_VBASE	(GEMINI_DRAMC_VBASE    + L1_S_SIZE)
81a80e63a8Scliff #define	GEMINI_RAMDISK_PBASE	0x00800000
82a80e63a8Scliff #define	GEMINI_RAMDISK_SIZE	0x00300000
83a80e63a8Scliff #define	GEMINI_RAMDISK_PEND	(GEMINI_RAMDISK_PBASE + GEMINI_RAMDISK_SIZE)
84f5d7ce3dSmatt 
85*41bfa2c4Scliff #define	GEMINI_IPMQ_VBASE 					\
86*41bfa2c4Scliff 	((GEMINI_RAMDISK_VBASE + GEMINI_RAMDISK_SIZE		\
87*41bfa2c4Scliff 	  + (L1_S_SIZE * 4) - 1) & ~((L1_S_SIZE * 4) - 1))
88*41bfa2c4Scliff 		/* round up for l2pt alignment */
89*41bfa2c4Scliff #ifdef GEMINI_SLAVE
90*41bfa2c4Scliff # define	GEMINI_IPMQ_PBASE	(GEMINI_RAMDISK_PEND + (GEMINI_BUSBASE * 1024 * 1024))
91*41bfa2c4Scliff #else
92*41bfa2c4Scliff # define	GEMINI_IPMQ_PBASE	GEMINI_RAMDISK_PEND
93*41bfa2c4Scliff #endif
94*41bfa2c4Scliff #if 0
95*41bfa2c4Scliff # define	GEMINI_IPMQ_SIZE	(2 * sizeof(ipm_queue_t))
96*41bfa2c4Scliff #else
97*41bfa2c4Scliff # define	GEMINI_IPMQ_SIZE	(2 * 4096)
98*41bfa2c4Scliff #endif
99*41bfa2c4Scliff #define	GEMINI_IPMQ_PEND	(GEMINI_IPMQ_PBASE + GEMINI_IPMQ_SIZE)
100*41bfa2c4Scliff 
101*41bfa2c4Scliff /*
102*41bfa2c4Scliff  * reserve physical RAM, as needed
103*41bfa2c4Scliff  *
104*41bfa2c4Scliff  * NOTE: the RAM used for the IPM queues is owned by the MASTER
105*41bfa2c4Scliff  * so MASTER needs to reserve those pages from VM; the slave does not.
106*41bfa2c4Scliff  * Hence, GEMINI_RAM_RESV_PEND is adjusted for the MASTER but not the SLAVE.
107*41bfa2c4Scliff  */
108*41bfa2c4Scliff #define GEMINI_RAM_RESV_PBASE	0
109*41bfa2c4Scliff #define GEMINI_RAM_RESV_PEND	0
110*41bfa2c4Scliff #if defined(MEMORY_DISK_DYNAMIC)
111*41bfa2c4Scliff # undef  GEMINI_RAM_RESV_PBASE
112*41bfa2c4Scliff # undef  GEMINI_RAM_RESV_PEND
113*41bfa2c4Scliff # define GEMINI_RAM_RESV_PBASE	GEMINI_RAMDISK_PBASE
114*41bfa2c4Scliff # define GEMINI_RAM_RESV_PEND	GEMINI_RAMDISK_PEND
115*41bfa2c4Scliff #endif
116*41bfa2c4Scliff #if (NGEMINIIPM > 0) && !defined(GEMINI_SLAVE)
117*41bfa2c4Scliff # if (NGEMINIIPM > 1)
118*41bfa2c4Scliff #  error unexpected NGEMINIIPM > 1
119*41bfa2c4Scliff # endif
120*41bfa2c4Scliff # if (GEMINI_RAM_RESV_PBASE == 0)
121*41bfa2c4Scliff #  undef  GEMINI_RAM_RESV_PBASE
122*41bfa2c4Scliff #  define GEMINI_RAM_RESV_PBASE	GEMINI_IPMQ_PBASE
123*41bfa2c4Scliff # endif
124*41bfa2c4Scliff # undef  GEMINI_RAM_RESV_PEND
125*41bfa2c4Scliff # define GEMINI_RAM_RESV_PEND	GEMINI_IPMQ_PEND
126*41bfa2c4Scliff #endif
127*41bfa2c4Scliff 
128*41bfa2c4Scliff /*
129*41bfa2c4Scliff  * to map all of memory, including RAM owned by both core.
130*41bfa2c4Scliff  * we start at nice round vbase to simplify conversion
131*41bfa2c4Scliff  * from VA to PA and back
132*41bfa2c4Scliff  */
133*41bfa2c4Scliff #define GEMINI_ALLMEM_PBASE	0
134*41bfa2c4Scliff #define GEMINI_ALLMEM_VBASE	0xf0000000
135*41bfa2c4Scliff #define GEMINI_ALLMEM_SIZE	128		/* units of MB */
136*41bfa2c4Scliff 
137f5d7ce3dSmatt 
138f5d7ce3dSmatt #endif /* _EVBARM_GEMINI_GEMINI_H */
139