1 /* $NetBSD: s3c2800reg.h,v 1.8 2022/05/23 21:46:11 andvar Exp $ */ 2 3 /* 4 * Copyright (c) 2002, 2003 Fujitsu Component Limited 5 * Copyright (c) 2002, 2003, 2005 Genetec Corporation 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 1. Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 3. Neither the name of The Fujitsu Component Limited nor the name of 17 * Genetec corporation may not be used to endorse or promote products 18 * derived from this software without specific prior written permission. 19 * 20 * THIS SOFTWARE IS PROVIDED BY FUJITSU COMPONENT LIMITED AND GENETEC 21 * CORPORATION ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, 22 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 23 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 24 * DISCLAIMED. IN NO EVENT SHALL FUJITSU COMPONENT LIMITED OR GENETEC 25 * CORPORATION BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 26 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 27 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 28 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 29 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 30 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 31 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 32 * SUCH DAMAGE. 33 */ 34 35 /* 36 * Samsung S3C2800 processor is ARM920T based integrated CPU 37 * 38 * Reference: 39 * S3C2800 User's Manual 40 */ 41 #ifndef _ARM_S3C2XX0_S3C2800REG_H_ 42 #define _ARM_S3C2XX0_S3C2800REG_H_ 43 44 /* common definitions for S3C2800, S3C2400 and S3C2410 */ 45 #include <arm/s3c2xx0/s3c2xx0reg.h> 46 47 /* 48 * Memory Map 49 */ 50 51 /* ROM/SRAM/FLASH */ 52 #define S3C2800_SBANK0_START 0x00000000 53 #define S3C2800_SBANK1_START 0x02000000 54 #define S3C2800_SBANK2_START 0x04000000 55 #define S3C2800_SBANK3_START 0x06000000 56 #define S3C2800_SBANK4_START 0x08000000 57 58 /* DRAM */ 59 #define S3C2800_DBANK0_START 0x08000000 60 #define S3C2800_DBANK1_START 0x0a000000 61 #define S3C2800_DBANK2_START 0x0c000000 62 #define S3C2800_DBANK3_START 0x0e000000 63 #define S3C2800_DBANK_SIZE 0x02000000 /* 32MB */ 64 65 /* 66 * Physical address of integrated peripherals 67 */ 68 #define S3C2800_PERIPHERALS 0x10000000 69 #define S3C2800_PERIPHERALS_SIZE 0x200000 /* 2MBytes */ 70 #define S3C2800_CLKMAN_BASE 0x10000000 /* clock & power management */ 71 #define S3C2800_CLKMAN_SIZE 0x18 72 #define S3C2800_MEMCTL_BASE 0x10010000 /* memory controller */ 73 #define S3C2800_MEMCTL_SIZE 0x20 74 #define S3C2800_DMA0_BASE 0x10030000 75 #define S3C2800_DMA1_BASE 0x10040000 76 #define S3C2800_DMA2_BASE 0x10050000 77 #define S3C2800_DMA3_BASE 0x10060000 78 #define S3C2800_PCICTL_BASE 0x10080000 79 #define S3C2800_PCICTL_SIZE 0x58 80 #define S3C2800_GPIO_BASE 0x10100000 81 #define S3C2800_GPIO_SIZE 0x50 82 #define S3C2800_TIMER0_BASE 0x10130000 83 #define S3C2800_TIMER1_BASE 0x10140000 84 #define S3C2800_TIMER2_BASE 0x10150000 85 #define S3C2800_TIMER_SIZE 0x10 86 #define S3C2800_UART0_BASE 0x10170000 87 #define S3C2800_UART1_BASE 0x10180000 88 #define S3C2800_UART_SIZE 0x2c 89 #define S3C2800_IIC0_BASE 0x10190000 90 #define S3C2800_IIC1_BASE 0x101a0000 91 #define S3C2800_IIC_SIZE 0x10 92 #define S3C2800_INTCTL_BASE 0x10020000 93 #define S3C2800_INTCTL_SIZE 0x14 94 #define S3C2800_WDT_BASE 0x10120000 95 #define S3C2800_WDT_SIZE 0x0c 96 97 98 /* width of interrupt controller */ 99 #define ICU_LEN 29 100 #define ICU_INT_HWMASK 0x1fffffff 101 102 /* Clock & power manager */ 103 #define CLKMAN_PLLCON 0x00 104 105 /* MDIV, PDIV, SDIV */ 106 #define PLLCON_MDIV_SHIFT 12 107 #define PLLCON_MDIV_MASK (0xff<<PLLCON_MDIV_SHIFT) 108 #define PLLCON_PDIV_SHIFT 4 109 #define PLLCON_PDIV_MASK (0x3f<<PLLCON_PDIV_SHIFT) 110 #define PLLCON_SDIV_SHIFT 0 111 #define PLLCON_SDIV_MASK (0x03<<PLLCON_SDIV_SHIFT) 112 113 #define CLKMAN_CLKCON 0x04 114 #define CLKCON_PCLK (1<<12) /* APB clock division ratio */ 115 #define CLKCON_HCLK (1<<11) /* AHB clock division ratio */ 116 #define CLKCON_PCI (1<<10) /* FCLK into PCI */ 117 #define CLKCON_IIC1 (1<<9) /* PCLK to I2C1 */ 118 #define CLKCON_IIC0 (1<<8) /* PCLK to I2C0 */ 119 #define CLKCON_RTC (1<<7) /* PCLK to RTC */ 120 #define CLKCON_UART1 (1<<6) /* PCLK to UART1 */ 121 #define CLKCON_UART0 (1<<5) /* PCLK to UART0 */ 122 #define CLKCON_DMA23 (1<<4) /* PCLK to DMA2,3 */ 123 #define CLKCON_DMA01 (1<<3) /* PCLK to DMA0,1 */ 124 #define CLKCON_TIMER (1<<2) /* PCLK to TIMER */ 125 #define CLKCON_IDLE (1<<1) /* Enter IDLE Mode */ 126 127 #define CLKMAN_CLKSLOW 0x08 /* slow clock control */ 128 #define CLKSLOW_SLOW (1<<4) /* 1: Enable SLOW mode */ 129 #define CLKSLOW_VAL_MASK 0x0f /* divider value for slow clock */ 130 131 #define CLKMAN_LOCKTIME 0x0c /* PLL lock time */ 132 133 #define CLKMAN_SWRCON 0x10 /* Software reset control */ 134 #define SWRCON_SWR (1<<0) /* 1: Invoke software reset */ 135 136 #define CLKMAN_RSTSR 0x14 /* Reset status register */ 137 #define RSTSR_WDR (1<<2) /* watchdog reset */ 138 #define RSTSR_SWR (1<<1) /* Software reset */ 139 #define RSTSR_HWR (1<<0) /* Hardware reset */ 140 141 /* memory controller */ 142 #define MEMCTL_ENDIAN 0x00 /* Endian control (read-only) */ 143 #define MEMCTL_SMBCON0 0x04 /* SBank0 control register for static */ 144 #define MEMCTL_SMBCON1 0x08 /* SBank0 control register for static */ 145 #define MEMCTL_SMBCON2 0x0c /* SBank0 control register for static */ 146 #define MEMCTL_SMBCON3 0x10 /* SBank0 control register for static */ 147 #define SMBCON_WS (1<<20) /* Wait status */ 148 #define SMBCON_ST (1<<19) /* use UB/LB */ 149 #define SMBCON_TACS_SHIFT 12 /* address setup time before nSCSn */ 150 #define SMBCON_TACS (3<<SMBCON_TACS_SHIFT) 151 #define SMBCON_TCOS_SHIFT 10 /* CS setup time before nOE */ 152 #define SMBCON_TCOS (3<<SMBCON_TCOS_SHIFT) 153 #define SMBCON_TOCH_SHIFT 8 /* CS hold time after nOE */ 154 #define SMBCON_TOCH (3<<SMBCON_TOCH_SHIFT) 155 #define SMBCON_TACC_SHIFT 4 /* Access cycle */ 156 #define SMBCON_TACC (0x0f<<SMBCON_TOCH_SHIFT) 157 #define SMBCON_TACC_1CLK (0x00<<SMBCON_TOCH_SHIFT) 158 #define SMBCON_TACC_2CLK (0x01<<SMBCON_TOCH_SHIFT) 159 #define SMBCON_TACC_3CLK (0x02<<SMBCON_TOCH_SHIFT) 160 #define SMBCON_TACC_4CLK (0x03<<SMBCON_TOCH_SHIFT) 161 #define SMBCON_TACC_6CLK (0x04<<SMBCON_TOCH_SHIFT) 162 #define SMBCON_TACC_7CLK (0x05<<SMBCON_TOCH_SHIFT) 163 #define SMBCON_TACC_8CLK (0x06<<SMBCON_TOCH_SHIFT) 164 #define SMBCON_TACC_9CLK (0x07<<SMBCON_TOCH_SHIFT) 165 #define SMBCON_TACC_10CLK (0x08<<SMBCON_TOCH_SHIFT) 166 #define SMBCON_TACC_12CLK (0x09<<SMBCON_TOCH_SHIFT) 167 #define SMBCON_TACC_14CLK (0x0a<<SMBCON_TOCH_SHIFT) 168 #define SMBCON_TCAH_SHIFT 2 /* Address hold time after nSCSn */ 169 #define SMBCON_SDW 0x03 170 #define SMBCON_SDW_8BIT 0 171 #define SMBCON_SDW_16BIT 1 172 #define SMBCON_SDW_32BIT 2 173 #define MEMCTL_REFRESH 0x14 /* DRAM/SDRAM refresh control */ 174 #define REFRESH_REFEN (1<<23) 175 #define REFRESH_REFMD (1<<22) 176 #define REFRESH_TRP (3<<20) 177 #define REFRESH_TRC (3<<16) 178 #define REFRESH_TCHR (3<<12) /* CAS hold time */ 179 #define REFRESH_COUNTER 0x7ff 180 #define MEMCTL_DMTMCON 0x18 /* timing control for dynamic memory */ 181 #define DMTMCON_DW_SHIFT 16 182 #define DMTMCON_DW (3<<DMTMCON_DW_SHIFT) /* bus width */ 183 #define DMTMCON_MT (3<<10) /* dynamic memory type */ 184 #define DMTMCON_TRCD (3<<8) /* DRAM RAS to CAS delay */ 185 #define DMTMCON_TCAS (3<<6) /* CAS pulse width */ 186 #define DMTMCON_TCP (3<<4) /* CAS pre charge */ 187 #define DMTMCON_CAN (3<<2) /* column address number */ 188 #define DMTMCON_STRCD (3<<0) /* SDRAM RAS to CAS delay */ 189 #define MEMCTL_MRSR 0x1c /* SDRAM mode register */ 190 #define MRSR_CL_SHIFT 4 191 #define MRSR_CL (7<<MRSR_CL_SHIFT) /* CAS latency */ 192 193 /* GPIO */ 194 #define GPIO_PCONA 0x00 /* port A configuration */ 195 #define PCON_INPUT 0 /* Input port */ 196 #define PCON_OUTPUT 1 /* Output port */ 197 #define PCON_ALTFUN 2 /* Alternate function */ 198 #define GPIO_PDATA 0x04 /* port A data */ 199 #define GPIO_PUPA 0x08 /* port A pull-up */ 200 #define GPIO_PCONB 0x0c 201 #define GPIO_PDATB 0x10 202 #define GPIO_PCONC 0x18 203 #define GPIO_PDATC 0x1c 204 #define GPIO_PUPC 0x20 205 #define GPIO_PCOND 0x24 206 #define GPIO_PDATD 0x28 207 #define GPIO_PUPD 0x2c 208 #define GPIO_PCONE 0x30 209 #define GPIO_PDATE 0x34 210 #define GPIO_PUPE 0x38 211 #define GPIO_PCONF 0x3c 212 #define GPIO_PDATF 0x40 213 #define GPIO_PUPF 0x44 214 215 #define GPIO_EXTINTR 0x48 /* external interrupt control */ 216 #define EXTINTR_LOW 0x00 217 #define EXTINTR_HIGH 0x01 218 #define EXTINTR_FALLING 0x02 219 #define EXTINTR_RISING 0x04 220 #define EXTINTR_BOTH 0x06 221 222 #define GPIO_SPUCR 0x4c /* special pull-up control */ 223 #define SPUCR1 (1<<1) /* pull-up for data[31:16] */ 224 #define SPUCR0 (1<<0) /* pull-up for data[15:0] */ 225 226 /* Timer */ 227 #define TIMER_TMCON 0x00 /* control register */ 228 #define TMCON_MUX (3<<2) /* MUX input */ 229 #define TMCON_MUX_DIV4 (0<<2) 230 #define TMCON_MUX_DIV8 (1<<2) 231 #define TMCON_MUX_DIV16 (2<<2) 232 #define TMCON_MUX_DIV32 (3<<2) 233 #define TMCON_INTENA (1<<1) /* Interrupt/DMA enable */ 234 #define TMCON_ENABLE (1<<0) /* Count enable */ 235 #define TIMER_TMDAT 0x04 /* data register */ 236 #define TMDAT_PRESCALER (0xff<<16) 237 #define TMDAT_DATA 0xffff 238 #define TIMER_TMCNT 0x08 /* down counter */ 239 240 /* UART (Small diffs to S3C2400's UART) */ 241 #define UMCON_AFC (1<<1) /* auto flow control */ 242 #define UMSTAT_DCTS (1<<1) /* CTS change */ 243 244 /* Interrupt controller */ 245 #define INTCTL_IRQPND 0x0c /* IRQ pending */ 246 #define INTCTL_FIQPND 0x10 /* FIQ pending */ 247 248 /* Interrupt source */ 249 #define S3C2800_INT_RTC 28 /* RTC alarm */ 250 #define S3C2800_INT_TICK 27 /* RTC tick */ 251 #define S3C2800_INT_FULL 26 /* Remocon data FIFO full */ 252 #define S3C2800_INT_RMT 25 /* Remocon data input */ 253 #define S3C2800_INT_UERR1 24 /* UART1 error */ 254 #define S3C2800_INT_UERR0 23 /* UART0 error */ 255 #define S3C2800_INT_TXD1 22 /* UART1 Tx */ 256 #define S3C2800_INT_TXD0 21 /* UART0 Tx */ 257 #define S3C2800_INT_RXD1 20 /* UART1 Rx */ 258 #define S3C2800_INT_RXD0 19 /* UART0 Rx*/ 259 #define S3C2800_INT_IIC1 18 260 #define S3C2800_INT_IIC0 17 261 #define S3C2800_INT_TIMER2 16 262 #define S3C2800_INT_TIMER1 15 263 #define S3C2800_INT_TIMER0 14 264 #define S3C2800_INT_DMA3 13 265 #define S3C2800_INT_DMA2 12 266 #define S3C2800_INT_DMA1 11 267 #define S3C2800_INT_DMA0 10 268 #define S3C2800_INT_PCI 8 /* PCI interrupt */ 269 #define S3C2800_INT_EXT(n) (n) /* External interrupt [7:0] */ 270 271 272 /* PCI space */ 273 #define S3C2800_PCI_BASE 0x20000000 274 #define S3C2800_PCI_MEMSPACE_BASE 0x20000000 /* Memory space */ 275 #define S3C2800_PCI_MEMSPACE_SIZE 0x08000000 276 #define S3C2800_PCI_CONF0_BASE 0x28000000 /* Config type 0 space */ 277 #define S3C2800_PCI_CONF0_SIZE 0x0000b000 278 #define S3C2800_PCI_CONF1_BASE 0x2a000000 /* Config type 1 space */ 279 #define S3C2800_PCI_CONF1_SIZE 0x02000000 280 #define S3C2800_PCI_IOSPACE_BASE 0x2e000000 281 #define S3C2800_PCI_IOSPACE_SIZE 0x00100000 282 283 #define PCICTL_PCICON 0x0100 /* control and status */ 284 #define PCICON_INT (1<<31) /* internal interrupt status */ 285 #define PCICON_MBS (1<<29) /* PCI master interface busy */ 286 #define PCICON_TBS (1<<28) /* PCI target interface busy */ 287 #define PCICON_CRS (1<<27) /* ARM CPU reset status */ 288 #define PCICON_RDY (1<<9) /* Enable PCI target read */ 289 #define PCICON_CFD (1<<8) /* Configuration done */ 290 #define PCICON_ATS (1<<4) /* Enable address translation */ 291 #define PCICON_ARB (1<<1) /* Enable internal arbiter */ 292 #define PCICON_HST (1<<0) /* bridge/adaptor */ 293 294 #define PCICTL_PCISET 0x104 /* PCI command, read count, DAC */ 295 #define PCISET_CMD_SHIFT 17 296 #define PCISET_DAC_MASK 0xff 297 298 #define PCICTL_PCIINTEN 0x108 /* interrupt enable */ 299 #define PCICTL_PCIINTST 0x10c /* interrupt status */ 300 301 #define PCIINTEN_BAP (1<<31) /* INTA# in adapter mode */ 302 #define PCIINTST_WDE (1<<31) /* master fatal error in read */ 303 #define PCIINTST_RDE (1<<30) /* master fatal error in write */ 304 #define PCIINT_INA (1<<10) /* INTA# enable */ 305 #define PCIINT_SER (1<<9) /* SERR# interrupt enable */ 306 #define PCIINT_TPE (1<<4) /* target parity error */ 307 #define PCIINT_MPE (1<<3) /* master parity error */ 308 #define PCIINT_MFE (1<<2) /* master fatal error */ 309 #define PCIINT_PRA (1<<1) /* reset assert interrupt */ 310 #define PCIINT_PRD (1<<0) /* reset de-assert interrupt */ 311 312 #define PCICTL_PCIBATPA0 0x140 /* address translation PCI to AHB BAR0 */ 313 #define PCICTL_PCIBAM0 0x144 /* BAR0 mask */ 314 #define PCICTL_PCIBATPA1 0x148 /* address translation PCI to AHB BAR1 */ 315 #define PCICTL_PCIBAM1 0x14c /* BAR0 mask */ 316 #define PCICTL_PCIBATPA2 0x150 /* address translation PCI to AHB BAR2 */ 317 #define PCICTL_PCIBAM2 0x154 /* BAR0 mask */ 318 319 /* Watch dog timer */ 320 #define WDT_WTPSCLR 0x00 321 #define WDT_WTCON 0x04 322 #define WTCON_WDTSTOP 0xa5 323 #define WDT_WTCNT 0x08 324 325 #endif /* _ARM_S3C2XX0_S3C2800REG_H_ */ 326