1*ce099b40Smartin /* $NetBSD: adm5120reg.h,v 1.2 2008/04/28 20:23:27 martin Exp $ */ 2320845ddSdyoung 3320845ddSdyoung /*- 4320845ddSdyoung * Copyright (c) 2007 Ruslan Ermilov and Vsevolod Lobko. 5320845ddSdyoung * All rights reserved. 6320845ddSdyoung * 7320845ddSdyoung * Redistribution and use in source and binary forms, with or 8320845ddSdyoung * without modification, are permitted provided that the following 9320845ddSdyoung * conditions are met: 10320845ddSdyoung * 1. Redistributions of source code must retain the above copyright 11320845ddSdyoung * notice, this list of conditions and the following disclaimer. 12320845ddSdyoung * 2. Redistributions in binary form must reproduce the above 13320845ddSdyoung * copyright notice, this list of conditions and the following 14320845ddSdyoung * disclaimer in the documentation and/or other materials provided 15320845ddSdyoung * with the distribution. 16320845ddSdyoung * 3. The names of the authors may not be used to endorse or promote 17320845ddSdyoung * products derived from this software without specific prior 18320845ddSdyoung * written permission. 19320845ddSdyoung * 20320845ddSdyoung * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY 21320845ddSdyoung * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 22320845ddSdyoung * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 23320845ddSdyoung * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS 24320845ddSdyoung * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, 25320845ddSdyoung * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 26320845ddSdyoung * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, 27320845ddSdyoung * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 28320845ddSdyoung * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 29320845ddSdyoung * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 30320845ddSdyoung * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY 31320845ddSdyoung * OF SUCH DAMAGE. 32320845ddSdyoung */ 33320845ddSdyoung /*- 34320845ddSdyoung * Copyright (c) 2001 The NetBSD Foundation, Inc. 35320845ddSdyoung * All rights reserved. 36320845ddSdyoung * 37320845ddSdyoung * This code is derived from software contributed to The NetBSD Foundation 38320845ddSdyoung * by Jason R. Thorpe. 39320845ddSdyoung * 40320845ddSdyoung * Redistribution and use in source and binary forms, with or without 41320845ddSdyoung * modification, are permitted provided that the following conditions 42320845ddSdyoung * are met: 43320845ddSdyoung * 1. Redistributions of source code must retain the above copyright 44320845ddSdyoung * notice, this list of conditions and the following disclaimer. 45320845ddSdyoung * 2. Redistributions in binary form must reproduce the above copyright 46320845ddSdyoung * notice, this list of conditions and the following disclaimer in the 47320845ddSdyoung * documentation and/or other materials provided with the distribution. 48320845ddSdyoung * 49320845ddSdyoung * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 50320845ddSdyoung * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 51320845ddSdyoung * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 52320845ddSdyoung * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 53320845ddSdyoung * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 54320845ddSdyoung * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 55320845ddSdyoung * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 56320845ddSdyoung * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 57320845ddSdyoung * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 58320845ddSdyoung * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 59320845ddSdyoung * POSSIBILITY OF SUCH DAMAGE. 60320845ddSdyoung */ 61320845ddSdyoung 62320845ddSdyoung #ifndef _ADM5120REG_H_ 63320845ddSdyoung #define _ADM5120REG_H_ 64320845ddSdyoung 65320845ddSdyoung /* 66320845ddSdyoung * Memory map and register definitions for the Alchemy Semiconductor Pb1000. 67320845ddSdyoung */ 68320845ddSdyoung 69320845ddSdyoung /* Last byte of physical address space. */ 70320845ddSdyoung #define ADM5120_TOP 0x1fffffff 71320845ddSdyoung #define ADM5120_BOTTOM 0x0 72320845ddSdyoung 73320845ddSdyoung /* Flash addresses */ 74320845ddSdyoung #define ADM5120_BASE_SRAM0 0x1fc00000 75320845ddSdyoung 76320845ddSdyoung /* UARTs */ 77320845ddSdyoung #define ADM5120_BASE_UART1 0x12800000 78320845ddSdyoung #define ADM5120_BASE_UART0 0x12600000 79320845ddSdyoung 80320845ddSdyoung /* ICU */ 81320845ddSdyoung #define ADM5120_BASE_ICU 0x12200000 82320845ddSdyoung #define ICU_STATUS_REG 0x00 83320845ddSdyoung #define ICU_RAW_STATUS_REG 0x04 84320845ddSdyoung #define ICU_ENABLE_REG 0x08 85320845ddSdyoung #define ICU_DISABLE_REG 0x0c 86320845ddSdyoung #define ICU_SOFT_REG 0x10 87320845ddSdyoung #define ICU_MODE_REG 0x14 88320845ddSdyoung #define ICU_FIQ_STATUS_REG 0x18 89320845ddSdyoung #define ICU_TESTSRC_REG 0x1c 90320845ddSdyoung #define ICU_SRCSEL_REG 0x20 91320845ddSdyoung #define ICU_LEVEL_REG 0x24 92320845ddSdyoung #define ICU_INT_MASK 0x3ff 93320845ddSdyoung 94320845ddSdyoung /* Switch */ 95320845ddSdyoung #define ADM5120_BASE_SWITCH 0x12000000 96320845ddSdyoung #define SW_CODE_REG 0x00 97320845ddSdyoung #define CLKS_MASK 0x00300000 98320845ddSdyoung #define CLKS_175MHZ 0x00000000 99320845ddSdyoung #define CLKS_200MHZ 0x00100000 100320845ddSdyoung #define SW_SFTRES_REG 0x04 101320845ddSdyoung #define SW_MEMCONT_REG 0x1c 102320845ddSdyoung #define SDRAM_SIZE_4MBYTES 0x0001 103320845ddSdyoung #define SDRAM_SIZE_8MBYTES 0x0002 104320845ddSdyoung #define SDRAM_SIZE_16MBYTES 0x0003 105320845ddSdyoung #define SDRAM_SIZE_64MBYTES 0x0004 106320845ddSdyoung #define SDRAM_SIZE_128MBYTES 0x0005 107320845ddSdyoung #define SDRAM_SIZE_MASK 0x0007 108320845ddSdyoung #define SRAM0_SIZE_SHIFT 8 109320845ddSdyoung #define SRAM1_SIZE_SHIFT 16 110320845ddSdyoung #define SRAM_MASK 0x0007 111320845ddSdyoung #define SRAM_SSIZE 0x40000 112320845ddSdyoung 113320845ddSdyoung #define ADM5120_BASE_PCI_CONFDATA 0x115ffff8 114320845ddSdyoung #define ADM5120_BASE_PCI_CONFADDR 0x115ffff0 115320845ddSdyoung #define ADM5120_BASE_PCI_IO 0x11500000 116320845ddSdyoung #define ADM5120_BASE_PCI_MEM 0x11400000 117320845ddSdyoung #define ADM5120_BASE_USB 0x11200000 118320845ddSdyoung #define ADM5120_BASE_MPMC 0x11000000 119320845ddSdyoung #define ADM5120_BASE_EXTIO1 0x10e00000 120320845ddSdyoung #define ADM5120_BASE_EXTIO0 0x10c00000 121320845ddSdyoung #define ADM5120_BASE_RSVD0 0x10800000 122320845ddSdyoung #define ADM5120_BASE_SRAM1 0x10000000 123320845ddSdyoung 124320845ddSdyoung #define _REG_READ(b, o) *((volatile uint32_t *)MIPS_PHYS_TO_KSEG1((b) + (o))) 125320845ddSdyoung #define SW_READ(o) _REG_READ(ADM5120_BASE_SWITCH, o) 126320845ddSdyoung 127320845ddSdyoung #define _REG_WRITE(b, o, v) (_REG_READ(b, o)) = (v) 128320845ddSdyoung #define SW_WRITE(o, v) _REG_WRITE(ADM5120_BASE_SWITCH,o, v) 129320845ddSdyoung 130320845ddSdyoung /* USB */ 131320845ddSdyoung 132320845ddSdyoung /* Watchdog Timers: base address is switch controller */ 133320845ddSdyoung 134320845ddSdyoung #define ADM5120_WDOG0 0x00c0 135320845ddSdyoung #define ADM5120_WDOG1 0x00c4 136320845ddSdyoung 137320845ddSdyoung #define ADM5120_WDOG0_WTTR __BIT(31) /* 0: do not reset, 138320845ddSdyoung * 1: reset on wdog expiration 139320845ddSdyoung */ 140320845ddSdyoung #define ADM5120_WDOG1_WDE __BIT(31) /* 0: deactivate, 141320845ddSdyoung * 1: drop all CPU-bound 142320845ddSdyoung * packets, disable flow 143320845ddSdyoung * control on all ports. 144320845ddSdyoung */ 145320845ddSdyoung #define ADM5120_WDOG_WTS_MASK __BITS(30, 16) /* Watchdog Timer Set: 146320845ddSdyoung * timer expires when it 147320845ddSdyoung * reaches WTS. Units of 148320845ddSdyoung * 10ms. 149320845ddSdyoung */ 150320845ddSdyoung #define ADM5120_WDOG_RSVD __BIT(15) 151320845ddSdyoung #define ADM5120_WDOG_WT_MASK __BITS(14, 0) /* Watchdog Timer: 152320845ddSdyoung * counts up, write to clear. 153320845ddSdyoung */ 154320845ddSdyoung 155320845ddSdyoung /* GPIO: base address is switch controller */ 156320845ddSdyoung #define ADM5120_GPIO0 0x00b8 157320845ddSdyoung 158320845ddSdyoung #define ADM5120_GPIO0_OV __BITS(31, 24) /* rw: output value */ 159320845ddSdyoung #define ADM5120_GPIO0_OE __BITS(23, 16) /* rw: output enable, 160320845ddSdyoung * bit[n] = 0 -> input 161320845ddSdyoung * bit[n] = 1 -> output 162320845ddSdyoung */ 163320845ddSdyoung #define ADM5120_GPIO0_IV __BITS(15, 8) /* ro: input value */ 164320845ddSdyoung #define ADM5120_GPIO0_RSVD __BITS(7, 0) /* rw: reserved */ 165320845ddSdyoung 166320845ddSdyoung #define ADM5120_GPIO2 0x00bc 167320845ddSdyoung #define ADM5120_GPIO2_EW __BIT(6) /* 1: enable wait state pin, 168320845ddSdyoung * pin GPIO[0], for GPIO[1] 169320845ddSdyoung * or GPIO[3] Chip Select: 170320845ddSdyoung * memory controller waits for 171320845ddSdyoung * WAIT# inactive (high). 172320845ddSdyoung */ 173320845ddSdyoung #define ADM5120_GPIO2_CSX1 __BIT(5) /* 1: GPIO[3:4] act as 174320845ddSdyoung * Chip Select for 175320845ddSdyoung * External I/O 1 (CSX1) 176320845ddSdyoung * and External Interrupt 1 177320845ddSdyoung * (INTX1), respectively. 178320845ddSdyoung * 0: CSX1/INTX1 disabled 179320845ddSdyoung */ 180320845ddSdyoung #define ADM5120_GPIO2_CSX0 __BIT(4) /* 1: GPIO[1:2] act as 181320845ddSdyoung * Chip Select for 182320845ddSdyoung * External I/O 0 (CSX0) 183320845ddSdyoung * and External Interrupt 0 184320845ddSdyoung * (INTX0), respectively. 185320845ddSdyoung * 0: CSX0/INTX0 disabled 186320845ddSdyoung */ 187320845ddSdyoung 188320845ddSdyoung /* MultiPort Memory Controller (MPMC) */ 189320845ddSdyoung 190320845ddSdyoung #define ADM5120_MPMC_CONTROL 0x000 191320845ddSdyoung #define ADM5120_MPMC_CONTROL_DWB __BIT(3) /* write 1 to 192320845ddSdyoung * drain write 193320845ddSdyoung * buffers. write 0 194320845ddSdyoung * for normal buffer 195320845ddSdyoung * operation. 196320845ddSdyoung */ 197320845ddSdyoung #define ADM5120_MPMC_CONTROL_LPM __BIT(2) /* 1: activate low-power 198320845ddSdyoung * mode. SDRAM is 199320845ddSdyoung * still refreshed. 200320845ddSdyoung */ 201320845ddSdyoung #define ADM5120_MPMC_CONTROL_AM __BIT(1) /* 1: address mirror: 202320845ddSdyoung * static memory 203320845ddSdyoung * chip select 0 204320845ddSdyoung * is mapped to chip 205320845ddSdyoung * select 1. 206320845ddSdyoung */ 207320845ddSdyoung #define ADM5120_MPMC_CONTROL_ME __BIT(0) /* 0: disable MPMC. 208320845ddSdyoung * DRAM is not 209320845ddSdyoung * refreshed. 210320845ddSdyoung * 1: enable MPMC. 211320845ddSdyoung */ 212320845ddSdyoung 213320845ddSdyoung #define ADM5120_MPMC_STATUS 0x004 214320845ddSdyoung #define ADM5120_MPMC_STATUS_SRA __BIT(2) /* read-only 215320845ddSdyoung * MPMC operating mode 216320845ddSdyoung * indication, 217320845ddSdyoung * 1: self-refresh 218320845ddSdyoung * acknowledge 219320845ddSdyoung * 0: normal mode 220320845ddSdyoung */ 221320845ddSdyoung #define ADM5120_MPMC_STATUS_WBS __BIT(1) /* read-only 222320845ddSdyoung * write-buffer status, 223320845ddSdyoung * 0: buffers empty 224320845ddSdyoung * 1: contain data 225320845ddSdyoung */ 226320845ddSdyoung #define ADM5120_MPMC_STATUS_BU __BIT(0) /* read-only MPMC 227320845ddSdyoung * "busy" indication, 228320845ddSdyoung * 0: MPMC idle 229320845ddSdyoung * 1: MPMC is performing 230320845ddSdyoung * memory transactions 231320845ddSdyoung */ 232320845ddSdyoung 233320845ddSdyoung #define ADM5120_MPMC_SEW 0x080 234320845ddSdyoung #define ADM5120_MPMC_SEW_RSVD __BITS(31, 10) 235320845ddSdyoung #define ADM5120_MPMC_SEW_EWTO __BITS(9, 0) /* timeout access after 236320845ddSdyoung * 16 * (n + 1) clock cycles 237320845ddSdyoung * (XXX which clock?) 238320845ddSdyoung */ 239320845ddSdyoung 240320845ddSdyoung #define ADM5120_MPMC_SC(__i) (0x200 + 0x020 * (__i)) 241320845ddSdyoung #define ADM5120_MPMC_SC_RSVD0 __BITS(31, 21) 242320845ddSdyoung #define ADM5120_MPMC_SC_WP __BIT(20) /* 1: write protect */ 243320845ddSdyoung #define ADM5120_MPMC_SC_BE __BIT(20) /* 1: enable write buffer */ 244320845ddSdyoung #define ADM5120_MPMC_SC_RSVD1 __BITS(18, 9) 245320845ddSdyoung #define ADM5120_MPMC_SC_EW __BIT(8) /* 1: enable extended wait; 246320845ddSdyoung */ 247320845ddSdyoung #define ADM5120_MPMC_SC_BLS __BIT(7) /* 0: byte line state pins 248320845ddSdyoung * are active high on read, 249320845ddSdyoung * active low on write. 250320845ddSdyoung * 251320845ddSdyoung * 1: byte line state pins 252320845ddSdyoung * are active low on read and 253320845ddSdyoung * on write. 254320845ddSdyoung */ 255320845ddSdyoung #define ADM5120_MPMC_SC_CCP __BIT(6) /* 0: chip select is active low, 256320845ddSdyoung * 1: active high 257320845ddSdyoung */ 258320845ddSdyoung #define ADM5120_MPMC_SC_RSVD2 __BITS(5, 4) 259320845ddSdyoung #define ADM5120_MPMC_SC_PM __BIT(3) /* 0: page mode disabled, 260320845ddSdyoung * 1: enable asynchronous 261320845ddSdyoung * page mode four 262320845ddSdyoung */ 263320845ddSdyoung #define ADM5120_MPMC_SC_RSVD3 __BIT(2) 264320845ddSdyoung #define ADM5120_MPMC_SC_MW_MASK __BITS(1, 0) /* memory width, bits */ 265320845ddSdyoung #define ADM5120_MPMC_SC_MW_8B __SHIFTIN(0, ADM5120_MPMC_SC_MW_MASK) 266320845ddSdyoung #define ADM5120_MPMC_SC_MW_16B __SHIFTIN(1, ADM5120_MPMC_SC_MW_MASK) 267320845ddSdyoung #define ADM5120_MPMC_SC_MW_32B __SHIFTIN(2, ADM5120_MPMC_SC_MW_MASK) 268320845ddSdyoung #define ADM5120_MPMC_SC_MW_RSVD __SHIFTIN(3, ADM5120_MPMC_SC_MW_MASK) 269320845ddSdyoung 270320845ddSdyoung #define ADM5120_MPMC_SWW(__i) (0x204 + 0x020 * (__i)) 271320845ddSdyoung #define ADM5120_MPMC_SWW_RSVD __BITS(31, 4) 272320845ddSdyoung #define ADM5120_MPMC_SWW_WWE __BITS(3, 0) /* delay (n + 1) * HCLK cycles 273320845ddSdyoung * after asserting chip select 274320845ddSdyoung * (CS) before asserting write 275320845ddSdyoung * enable (WE) 276320845ddSdyoung */ 277320845ddSdyoung 278320845ddSdyoung #define ADM5120_MPMC_SWO(__i) (0x208 + 0x020 * (__i)) 279320845ddSdyoung #define ADM5120_MPMC_SWO_RSVD __BITS(31, 4) 280320845ddSdyoung #define ADM5120_MPMC_SWO_WOE __BITS(3, 0) /* delay n * HCLK cycles 281320845ddSdyoung * after asserting chip select 282320845ddSdyoung * before asserting output 283320845ddSdyoung * enable (OE) 284320845ddSdyoung */ 285320845ddSdyoung 286320845ddSdyoung #define ADM5120_MPMC_SWR(__i) (0x20c + 0x020 * (__i)) 287320845ddSdyoung #define ADM5120_MPMC_SWR_RSVD __BITS(31, 5) 288320845ddSdyoung #define ADM5120_MPMC_SWR_NMRW __BITS(4, 0) /* read wait states for 289320845ddSdyoung * either first page-mode 290320845ddSdyoung * access or for non-page mode 291320845ddSdyoung * read, (n + 1) * HCLK cycles 292320845ddSdyoung */ 293320845ddSdyoung 294320845ddSdyoung #define ADM5120_MPMC_SWP(__i) (0x210 + 0x020 * (__i)) 295320845ddSdyoung #define ADM5120_MPMC_SWP_RSVD __BITS(31, 5) 296320845ddSdyoung #define ADM5120_MPMC_SWP_WPS __BITS(4, 0) /* read wait states for 297320845ddSdyoung * second and subsequent 298320845ddSdyoung * page-mode read, 299320845ddSdyoung * (n + 1) * HCLK cycles 300320845ddSdyoung */ 301320845ddSdyoung 302320845ddSdyoung #define ADM5120_MPMC_SWWR(__i) (0x214 + 0x020 * (__i)) 303320845ddSdyoung #define ADM5120_MPMC_SWWR_RSVD __BITS(31, 5) 304320845ddSdyoung #define ADM5120_MPMC_SWWR_WWS __BITS(4, 0) /* write wait states after 305320845ddSdyoung * the first read (??), 306320845ddSdyoung * (n + 2) * HCLK cycles 307320845ddSdyoung */ 308320845ddSdyoung 309320845ddSdyoung #define ADM5120_MPMC_SWT(__i) (0x218 + 0x020 * (__i)) 310320845ddSdyoung #define ADM5120_MPMC_SWT_RSVD __BITS(31, 4) 311320845ddSdyoung #define ADM5120_MPMC_SWT_WAITTURN __BITS(3, 0) /* bus turnaround time, 312320845ddSdyoung * (n + 1) * HCLK cycles 313320845ddSdyoung */ 314320845ddSdyoung 315320845ddSdyoung #endif /* _ADM5120REG_H_ */ 316