1 1.2 martin /* $NetBSD: adm5120reg.h,v 1.2 2008/04/28 20:23:27 martin Exp $ */ 2 1.1 dyoung 3 1.1 dyoung /*- 4 1.1 dyoung * Copyright (c) 2007 Ruslan Ermilov and Vsevolod Lobko. 5 1.1 dyoung * All rights reserved. 6 1.1 dyoung * 7 1.1 dyoung * Redistribution and use in source and binary forms, with or 8 1.1 dyoung * without modification, are permitted provided that the following 9 1.1 dyoung * conditions are met: 10 1.1 dyoung * 1. Redistributions of source code must retain the above copyright 11 1.1 dyoung * notice, this list of conditions and the following disclaimer. 12 1.1 dyoung * 2. Redistributions in binary form must reproduce the above 13 1.1 dyoung * copyright notice, this list of conditions and the following 14 1.1 dyoung * disclaimer in the documentation and/or other materials provided 15 1.1 dyoung * with the distribution. 16 1.1 dyoung * 3. The names of the authors may not be used to endorse or promote 17 1.1 dyoung * products derived from this software without specific prior 18 1.1 dyoung * written permission. 19 1.1 dyoung * 20 1.1 dyoung * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY 21 1.1 dyoung * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 22 1.1 dyoung * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 23 1.1 dyoung * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS 24 1.1 dyoung * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, 25 1.1 dyoung * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 26 1.1 dyoung * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, 27 1.1 dyoung * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 28 1.1 dyoung * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 29 1.1 dyoung * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 30 1.1 dyoung * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY 31 1.1 dyoung * OF SUCH DAMAGE. 32 1.1 dyoung */ 33 1.1 dyoung /*- 34 1.1 dyoung * Copyright (c) 2001 The NetBSD Foundation, Inc. 35 1.1 dyoung * All rights reserved. 36 1.1 dyoung * 37 1.1 dyoung * This code is derived from software contributed to The NetBSD Foundation 38 1.1 dyoung * by Jason R. Thorpe. 39 1.1 dyoung * 40 1.1 dyoung * Redistribution and use in source and binary forms, with or without 41 1.1 dyoung * modification, are permitted provided that the following conditions 42 1.1 dyoung * are met: 43 1.1 dyoung * 1. Redistributions of source code must retain the above copyright 44 1.1 dyoung * notice, this list of conditions and the following disclaimer. 45 1.1 dyoung * 2. Redistributions in binary form must reproduce the above copyright 46 1.1 dyoung * notice, this list of conditions and the following disclaimer in the 47 1.1 dyoung * documentation and/or other materials provided with the distribution. 48 1.1 dyoung * 49 1.1 dyoung * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 50 1.1 dyoung * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 51 1.1 dyoung * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 52 1.1 dyoung * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 53 1.1 dyoung * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 54 1.1 dyoung * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 55 1.1 dyoung * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 56 1.1 dyoung * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 57 1.1 dyoung * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 58 1.1 dyoung * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 59 1.1 dyoung * POSSIBILITY OF SUCH DAMAGE. 60 1.1 dyoung */ 61 1.1 dyoung 62 1.1 dyoung #ifndef _ADM5120REG_H_ 63 1.1 dyoung #define _ADM5120REG_H_ 64 1.1 dyoung 65 1.1 dyoung /* 66 1.1 dyoung * Memory map and register definitions for the Alchemy Semiconductor Pb1000. 67 1.1 dyoung */ 68 1.1 dyoung 69 1.1 dyoung /* Last byte of physical address space. */ 70 1.1 dyoung #define ADM5120_TOP 0x1fffffff 71 1.1 dyoung #define ADM5120_BOTTOM 0x0 72 1.1 dyoung 73 1.1 dyoung /* Flash addresses */ 74 1.1 dyoung #define ADM5120_BASE_SRAM0 0x1fc00000 75 1.1 dyoung 76 1.1 dyoung /* UARTs */ 77 1.1 dyoung #define ADM5120_BASE_UART1 0x12800000 78 1.1 dyoung #define ADM5120_BASE_UART0 0x12600000 79 1.1 dyoung 80 1.1 dyoung /* ICU */ 81 1.1 dyoung #define ADM5120_BASE_ICU 0x12200000 82 1.1 dyoung #define ICU_STATUS_REG 0x00 83 1.1 dyoung #define ICU_RAW_STATUS_REG 0x04 84 1.1 dyoung #define ICU_ENABLE_REG 0x08 85 1.1 dyoung #define ICU_DISABLE_REG 0x0c 86 1.1 dyoung #define ICU_SOFT_REG 0x10 87 1.1 dyoung #define ICU_MODE_REG 0x14 88 1.1 dyoung #define ICU_FIQ_STATUS_REG 0x18 89 1.1 dyoung #define ICU_TESTSRC_REG 0x1c 90 1.1 dyoung #define ICU_SRCSEL_REG 0x20 91 1.1 dyoung #define ICU_LEVEL_REG 0x24 92 1.1 dyoung #define ICU_INT_MASK 0x3ff 93 1.1 dyoung 94 1.1 dyoung /* Switch */ 95 1.1 dyoung #define ADM5120_BASE_SWITCH 0x12000000 96 1.1 dyoung #define SW_CODE_REG 0x00 97 1.1 dyoung #define CLKS_MASK 0x00300000 98 1.1 dyoung #define CLKS_175MHZ 0x00000000 99 1.1 dyoung #define CLKS_200MHZ 0x00100000 100 1.1 dyoung #define SW_SFTRES_REG 0x04 101 1.1 dyoung #define SW_MEMCONT_REG 0x1c 102 1.1 dyoung #define SDRAM_SIZE_4MBYTES 0x0001 103 1.1 dyoung #define SDRAM_SIZE_8MBYTES 0x0002 104 1.1 dyoung #define SDRAM_SIZE_16MBYTES 0x0003 105 1.1 dyoung #define SDRAM_SIZE_64MBYTES 0x0004 106 1.1 dyoung #define SDRAM_SIZE_128MBYTES 0x0005 107 1.1 dyoung #define SDRAM_SIZE_MASK 0x0007 108 1.1 dyoung #define SRAM0_SIZE_SHIFT 8 109 1.1 dyoung #define SRAM1_SIZE_SHIFT 16 110 1.1 dyoung #define SRAM_MASK 0x0007 111 1.1 dyoung #define SRAM_SSIZE 0x40000 112 1.1 dyoung 113 1.1 dyoung #define ADM5120_BASE_PCI_CONFDATA 0x115ffff8 114 1.1 dyoung #define ADM5120_BASE_PCI_CONFADDR 0x115ffff0 115 1.1 dyoung #define ADM5120_BASE_PCI_IO 0x11500000 116 1.1 dyoung #define ADM5120_BASE_PCI_MEM 0x11400000 117 1.1 dyoung #define ADM5120_BASE_USB 0x11200000 118 1.1 dyoung #define ADM5120_BASE_MPMC 0x11000000 119 1.1 dyoung #define ADM5120_BASE_EXTIO1 0x10e00000 120 1.1 dyoung #define ADM5120_BASE_EXTIO0 0x10c00000 121 1.1 dyoung #define ADM5120_BASE_RSVD0 0x10800000 122 1.1 dyoung #define ADM5120_BASE_SRAM1 0x10000000 123 1.1 dyoung 124 1.1 dyoung #define _REG_READ(b, o) *((volatile uint32_t *)MIPS_PHYS_TO_KSEG1((b) + (o))) 125 1.1 dyoung #define SW_READ(o) _REG_READ(ADM5120_BASE_SWITCH, o) 126 1.1 dyoung 127 1.1 dyoung #define _REG_WRITE(b, o, v) (_REG_READ(b, o)) = (v) 128 1.1 dyoung #define SW_WRITE(o, v) _REG_WRITE(ADM5120_BASE_SWITCH,o, v) 129 1.1 dyoung 130 1.1 dyoung /* USB */ 131 1.1 dyoung 132 1.1 dyoung /* Watchdog Timers: base address is switch controller */ 133 1.1 dyoung 134 1.1 dyoung #define ADM5120_WDOG0 0x00c0 135 1.1 dyoung #define ADM5120_WDOG1 0x00c4 136 1.1 dyoung 137 1.1 dyoung #define ADM5120_WDOG0_WTTR __BIT(31) /* 0: do not reset, 138 1.1 dyoung * 1: reset on wdog expiration 139 1.1 dyoung */ 140 1.1 dyoung #define ADM5120_WDOG1_WDE __BIT(31) /* 0: deactivate, 141 1.1 dyoung * 1: drop all CPU-bound 142 1.1 dyoung * packets, disable flow 143 1.1 dyoung * control on all ports. 144 1.1 dyoung */ 145 1.1 dyoung #define ADM5120_WDOG_WTS_MASK __BITS(30, 16) /* Watchdog Timer Set: 146 1.1 dyoung * timer expires when it 147 1.1 dyoung * reaches WTS. Units of 148 1.1 dyoung * 10ms. 149 1.1 dyoung */ 150 1.1 dyoung #define ADM5120_WDOG_RSVD __BIT(15) 151 1.1 dyoung #define ADM5120_WDOG_WT_MASK __BITS(14, 0) /* Watchdog Timer: 152 1.1 dyoung * counts up, write to clear. 153 1.1 dyoung */ 154 1.1 dyoung 155 1.1 dyoung /* GPIO: base address is switch controller */ 156 1.1 dyoung #define ADM5120_GPIO0 0x00b8 157 1.1 dyoung 158 1.1 dyoung #define ADM5120_GPIO0_OV __BITS(31, 24) /* rw: output value */ 159 1.1 dyoung #define ADM5120_GPIO0_OE __BITS(23, 16) /* rw: output enable, 160 1.1 dyoung * bit[n] = 0 -> input 161 1.1 dyoung * bit[n] = 1 -> output 162 1.1 dyoung */ 163 1.1 dyoung #define ADM5120_GPIO0_IV __BITS(15, 8) /* ro: input value */ 164 1.1 dyoung #define ADM5120_GPIO0_RSVD __BITS(7, 0) /* rw: reserved */ 165 1.1 dyoung 166 1.1 dyoung #define ADM5120_GPIO2 0x00bc 167 1.1 dyoung #define ADM5120_GPIO2_EW __BIT(6) /* 1: enable wait state pin, 168 1.1 dyoung * pin GPIO[0], for GPIO[1] 169 1.1 dyoung * or GPIO[3] Chip Select: 170 1.1 dyoung * memory controller waits for 171 1.1 dyoung * WAIT# inactive (high). 172 1.1 dyoung */ 173 1.1 dyoung #define ADM5120_GPIO2_CSX1 __BIT(5) /* 1: GPIO[3:4] act as 174 1.1 dyoung * Chip Select for 175 1.1 dyoung * External I/O 1 (CSX1) 176 1.1 dyoung * and External Interrupt 1 177 1.1 dyoung * (INTX1), respectively. 178 1.1 dyoung * 0: CSX1/INTX1 disabled 179 1.1 dyoung */ 180 1.1 dyoung #define ADM5120_GPIO2_CSX0 __BIT(4) /* 1: GPIO[1:2] act as 181 1.1 dyoung * Chip Select for 182 1.1 dyoung * External I/O 0 (CSX0) 183 1.1 dyoung * and External Interrupt 0 184 1.1 dyoung * (INTX0), respectively. 185 1.1 dyoung * 0: CSX0/INTX0 disabled 186 1.1 dyoung */ 187 1.1 dyoung 188 1.1 dyoung /* MultiPort Memory Controller (MPMC) */ 189 1.1 dyoung 190 1.1 dyoung #define ADM5120_MPMC_CONTROL 0x000 191 1.1 dyoung #define ADM5120_MPMC_CONTROL_DWB __BIT(3) /* write 1 to 192 1.1 dyoung * drain write 193 1.1 dyoung * buffers. write 0 194 1.1 dyoung * for normal buffer 195 1.1 dyoung * operation. 196 1.1 dyoung */ 197 1.1 dyoung #define ADM5120_MPMC_CONTROL_LPM __BIT(2) /* 1: activate low-power 198 1.1 dyoung * mode. SDRAM is 199 1.1 dyoung * still refreshed. 200 1.1 dyoung */ 201 1.1 dyoung #define ADM5120_MPMC_CONTROL_AM __BIT(1) /* 1: address mirror: 202 1.1 dyoung * static memory 203 1.1 dyoung * chip select 0 204 1.1 dyoung * is mapped to chip 205 1.1 dyoung * select 1. 206 1.1 dyoung */ 207 1.1 dyoung #define ADM5120_MPMC_CONTROL_ME __BIT(0) /* 0: disable MPMC. 208 1.1 dyoung * DRAM is not 209 1.1 dyoung * refreshed. 210 1.1 dyoung * 1: enable MPMC. 211 1.1 dyoung */ 212 1.1 dyoung 213 1.1 dyoung #define ADM5120_MPMC_STATUS 0x004 214 1.1 dyoung #define ADM5120_MPMC_STATUS_SRA __BIT(2) /* read-only 215 1.1 dyoung * MPMC operating mode 216 1.1 dyoung * indication, 217 1.1 dyoung * 1: self-refresh 218 1.1 dyoung * acknowledge 219 1.1 dyoung * 0: normal mode 220 1.1 dyoung */ 221 1.1 dyoung #define ADM5120_MPMC_STATUS_WBS __BIT(1) /* read-only 222 1.1 dyoung * write-buffer status, 223 1.1 dyoung * 0: buffers empty 224 1.1 dyoung * 1: contain data 225 1.1 dyoung */ 226 1.1 dyoung #define ADM5120_MPMC_STATUS_BU __BIT(0) /* read-only MPMC 227 1.1 dyoung * "busy" indication, 228 1.1 dyoung * 0: MPMC idle 229 1.1 dyoung * 1: MPMC is performing 230 1.1 dyoung * memory transactions 231 1.1 dyoung */ 232 1.1 dyoung 233 1.1 dyoung #define ADM5120_MPMC_SEW 0x080 234 1.1 dyoung #define ADM5120_MPMC_SEW_RSVD __BITS(31, 10) 235 1.1 dyoung #define ADM5120_MPMC_SEW_EWTO __BITS(9, 0) /* timeout access after 236 1.1 dyoung * 16 * (n + 1) clock cycles 237 1.1 dyoung * (XXX which clock?) 238 1.1 dyoung */ 239 1.1 dyoung 240 1.1 dyoung #define ADM5120_MPMC_SC(__i) (0x200 + 0x020 * (__i)) 241 1.1 dyoung #define ADM5120_MPMC_SC_RSVD0 __BITS(31, 21) 242 1.1 dyoung #define ADM5120_MPMC_SC_WP __BIT(20) /* 1: write protect */ 243 1.1 dyoung #define ADM5120_MPMC_SC_BE __BIT(20) /* 1: enable write buffer */ 244 1.1 dyoung #define ADM5120_MPMC_SC_RSVD1 __BITS(18, 9) 245 1.1 dyoung #define ADM5120_MPMC_SC_EW __BIT(8) /* 1: enable extended wait; 246 1.1 dyoung */ 247 1.1 dyoung #define ADM5120_MPMC_SC_BLS __BIT(7) /* 0: byte line state pins 248 1.1 dyoung * are active high on read, 249 1.1 dyoung * active low on write. 250 1.1 dyoung * 251 1.1 dyoung * 1: byte line state pins 252 1.1 dyoung * are active low on read and 253 1.1 dyoung * on write. 254 1.1 dyoung */ 255 1.1 dyoung #define ADM5120_MPMC_SC_CCP __BIT(6) /* 0: chip select is active low, 256 1.1 dyoung * 1: active high 257 1.1 dyoung */ 258 1.1 dyoung #define ADM5120_MPMC_SC_RSVD2 __BITS(5, 4) 259 1.1 dyoung #define ADM5120_MPMC_SC_PM __BIT(3) /* 0: page mode disabled, 260 1.1 dyoung * 1: enable asynchronous 261 1.1 dyoung * page mode four 262 1.1 dyoung */ 263 1.1 dyoung #define ADM5120_MPMC_SC_RSVD3 __BIT(2) 264 1.1 dyoung #define ADM5120_MPMC_SC_MW_MASK __BITS(1, 0) /* memory width, bits */ 265 1.1 dyoung #define ADM5120_MPMC_SC_MW_8B __SHIFTIN(0, ADM5120_MPMC_SC_MW_MASK) 266 1.1 dyoung #define ADM5120_MPMC_SC_MW_16B __SHIFTIN(1, ADM5120_MPMC_SC_MW_MASK) 267 1.1 dyoung #define ADM5120_MPMC_SC_MW_32B __SHIFTIN(2, ADM5120_MPMC_SC_MW_MASK) 268 1.1 dyoung #define ADM5120_MPMC_SC_MW_RSVD __SHIFTIN(3, ADM5120_MPMC_SC_MW_MASK) 269 1.1 dyoung 270 1.1 dyoung #define ADM5120_MPMC_SWW(__i) (0x204 + 0x020 * (__i)) 271 1.1 dyoung #define ADM5120_MPMC_SWW_RSVD __BITS(31, 4) 272 1.1 dyoung #define ADM5120_MPMC_SWW_WWE __BITS(3, 0) /* delay (n + 1) * HCLK cycles 273 1.1 dyoung * after asserting chip select 274 1.1 dyoung * (CS) before asserting write 275 1.1 dyoung * enable (WE) 276 1.1 dyoung */ 277 1.1 dyoung 278 1.1 dyoung #define ADM5120_MPMC_SWO(__i) (0x208 + 0x020 * (__i)) 279 1.1 dyoung #define ADM5120_MPMC_SWO_RSVD __BITS(31, 4) 280 1.1 dyoung #define ADM5120_MPMC_SWO_WOE __BITS(3, 0) /* delay n * HCLK cycles 281 1.1 dyoung * after asserting chip select 282 1.1 dyoung * before asserting output 283 1.1 dyoung * enable (OE) 284 1.1 dyoung */ 285 1.1 dyoung 286 1.1 dyoung #define ADM5120_MPMC_SWR(__i) (0x20c + 0x020 * (__i)) 287 1.1 dyoung #define ADM5120_MPMC_SWR_RSVD __BITS(31, 5) 288 1.1 dyoung #define ADM5120_MPMC_SWR_NMRW __BITS(4, 0) /* read wait states for 289 1.1 dyoung * either first page-mode 290 1.1 dyoung * access or for non-page mode 291 1.1 dyoung * read, (n + 1) * HCLK cycles 292 1.1 dyoung */ 293 1.1 dyoung 294 1.1 dyoung #define ADM5120_MPMC_SWP(__i) (0x210 + 0x020 * (__i)) 295 1.1 dyoung #define ADM5120_MPMC_SWP_RSVD __BITS(31, 5) 296 1.1 dyoung #define ADM5120_MPMC_SWP_WPS __BITS(4, 0) /* read wait states for 297 1.1 dyoung * second and subsequent 298 1.1 dyoung * page-mode read, 299 1.1 dyoung * (n + 1) * HCLK cycles 300 1.1 dyoung */ 301 1.1 dyoung 302 1.1 dyoung #define ADM5120_MPMC_SWWR(__i) (0x214 + 0x020 * (__i)) 303 1.1 dyoung #define ADM5120_MPMC_SWWR_RSVD __BITS(31, 5) 304 1.1 dyoung #define ADM5120_MPMC_SWWR_WWS __BITS(4, 0) /* write wait states after 305 1.1 dyoung * the first read (??), 306 1.1 dyoung * (n + 2) * HCLK cycles 307 1.1 dyoung */ 308 1.1 dyoung 309 1.1 dyoung #define ADM5120_MPMC_SWT(__i) (0x218 + 0x020 * (__i)) 310 1.1 dyoung #define ADM5120_MPMC_SWT_RSVD __BITS(31, 4) 311 1.1 dyoung #define ADM5120_MPMC_SWT_WAITTURN __BITS(3, 0) /* bus turnaround time, 312 1.1 dyoung * (n + 1) * HCLK cycles 313 1.1 dyoung */ 314 1.1 dyoung 315 1.1 dyoung #endif /* _ADM5120REG_H_ */ 316