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