pxareg.h revision 256281
1/* $NetBSD: pxa2x0reg.h,v 1.9 2006/04/10 04:13:58 simonb Exp $ */ 2 3/* 4 * Copyright (c) 2002 Genetec Corporation. All rights reserved. 5 * Written by Hiroyuki Bessho for Genetec Corporation. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 3. All advertising materials mentioning features or use of this software 16 * must display the following acknowledgement: 17 * This product includes software developed for the NetBSD Project by 18 * Genetec Corporation. 19 * 4. The name of Genetec Corporation may not be used to endorse or 20 * promote products derived from this software without specific prior 21 * written permission. 22 * 23 * THIS SOFTWARE IS PROVIDED BY GENETEC CORPORATION ``AS IS'' AND 24 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 25 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 26 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GENETEC CORPORATION 27 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 28 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 29 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 30 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 31 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 32 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 33 * POSSIBILITY OF SUCH DAMAGE. 34 * 35 * $FreeBSD: stable/10/sys/arm/xscale/pxa/pxareg.h 236987 2012-06-13 04:38:09Z imp $ 36 */ 37 38 39/* 40 * Intel PXA2[15]0 processor is XScale based integrated CPU 41 * 42 * Reference: 43 * Intel(r) PXA250 and PXA210 Application Processors 44 * Developer's Manual 45 * (278522-001.pdf) 46 */ 47#ifndef _ARM_XSCALE_PXAREG_H_ 48#define _ARM_XSCALE_PXAREG_H_ 49 50/* Borrow some register definitions from sa11x0 */ 51#include <arm/sa11x0/sa11x0_reg.h> 52 53#ifndef _LOCORE 54#include <sys/types.h> /* for uint32_t */ 55#endif 56 57/* 58 * Chip select domains 59 */ 60#define PXA2X0_CS0_START 0x00000000 61#define PXA2X0_CS1_START 0x04000000 62#define PXA2X0_CS2_START 0x08000000 63#define PXA2X0_CS3_START 0x0c000000 64#define PXA2X0_CS4_START 0x10000000 65#define PXA2X0_CS5_START 0x14000000 66#define PXA2X0_CS_SIZE 0x04000000 67 68#define PXA2X0_PCMCIA_SLOT0 0x20000000 69#define PXA2X0_PCMCIA_SLOT1 0x30000000 70 71#define PXA2X0_PERIPH_START 0x40000000 72/* #define PXA2X0_MEMCTL_START 0x48000000 */ 73#define PXA270_PERIPH_END 0x530fffff 74#define PXA250_PERIPH_END 0x480fffff 75#define PXA2X0_PERIPH_OFFSET 0xa8000000 76 77#define PXA2X0_SDRAM0_START 0xa0000000 78#define PXA2X0_SDRAM1_START 0xa4000000 79#define PXA2X0_SDRAM2_START 0xa8000000 80#define PXA2X0_SDRAM3_START 0xac000000 81#define PXA2X0_SDRAM_BANKS 4 82#define PXA2X0_SDRAM_BANK_SIZE 0x04000000 83 84/* 85 * Physical address of integrated peripherals 86 */ 87 88#define PXA2X0_DMAC_BASE 0x40000000 89#define PXA2X0_DMAC_SIZE 0x300 90#define PXA2X0_FFUART_BASE 0x40100000 /* Full Function UART */ 91#define PXA2X0_FFUART_SIZE 0x20 92#define PXA2X0_BTUART_BASE 0x40200000 /* Bluetooth UART */ 93#define PXA2X0_BTUART_SIZE 0x24 94#define PXA2X0_I2C_BASE 0x40300000 95#define PXA2X0_I2C_SIZE 0x000016a4 96#define PXA2X0_I2S_BASE 0x40400000 97#define PXA2X0_AC97_BASE 0x40500000 98#define PXA2X0_AC97_SIZE 0x600 99#define PXA2X0_USBDC_BASE 0x40600000 /* USB Client */ 100#define PXA2X0_USBDC_SIZE 0x0e04 101#define PXA2X0_STUART_BASE 0x40700000 /* Standard UART */ 102#define PXA2X0_STUART_SIZE 0x24 103#define PXA2X0_ICP_BASE 0x40800000 104#define PXA2X0_RTC_BASE 0x40900000 105#define PXA2X0_RTC_SIZE 0x10 106#define PXA2X0_OST_BASE 0x40a00000 /* OS Timer */ 107#define PXA2X0_OST_SIZE 0x20 108#define PXA2X0_PWM0_BASE 0x40b00000 109#define PXA2X0_PWM1_BASE 0x40c00000 110#define PXA2X0_INTCTL_BASE 0x40d00000 /* Interrupt controller */ 111#define PXA2X0_INTCTL_SIZE 0x20 112#define PXA2X0_GPIO_BASE 0x40e00000 113 114#define PXA270_GPIO_SIZE 0x150 115#define PXA250_GPIO_SIZE 0x70 116#define PXA2X0_POWMAN_BASE 0x40f00000 /* Power management */ 117#define PXA2X0_SSP_BASE 0x41000000 118#define PXA2X0_MMC_BASE 0x41100000 /* MultiMediaCard */ 119#define PXA2X0_MMC_SIZE 0x48 120#define PXA2X0_CLKMAN_BASE 0x41300000 /* Clock Manager */ 121#define PXA2X0_CLKMAN_SIZE 12 122#define PXA2X0_HWUART_BASE 0x41600000 /* Hardware UART */ 123#define PXA2X0_HWUART_SIZE 0x30 124#define PXA2X0_LCDC_BASE 0x44000000 /* LCD Controller */ 125#define PXA2X0_LCDC_SIZE 0x220 126#define PXA2X0_MEMCTL_BASE 0x48000000 /* Memory Controller */ 127#define PXA2X0_MEMCTL_SIZE 0x48 128#define PXA2X0_USBH_BASE 0x4c000000 /* USB Host controller */ 129#define PXA2X0_USBH_SIZE 0x70 130 131/* Internal SRAM storage. PXA27x only */ 132#define PXA270_SRAM0_START 0x5c000000 133#define PXA270_SRAM1_START 0x5c010000 134#define PXA270_SRAM2_START 0x5c020000 135#define PXA270_SRAM3_START 0x5c030000 136#define PXA270_SRAM_BANKS 4 137#define PXA270_SRAM_BANK_SIZE 0x00010000 138 139/* width of interrupt controller */ 140#define ICU_LEN 32 /* but [0..7,15,16] is not used */ 141#define ICU_INT_HWMASK 0xffffff00 142#define PXA250_IRQ_MIN 8 /* 0..7 are not used by integrated 143 peripherals */ 144#define PXA270_IRQ_MIN 0 145 146#define PXA2X0_INT_USBH1 3 /* USB host (OHCI) */ 147 148#define PXA2X0_INT_HWUART 7 149#define PXA2X0_INT_GPIO0 8 150#define PXA2X0_INT_GPIO1 9 151#define PXA2X0_INT_GPION 10 /* irq from GPIO[2..80] */ 152#define PXA2X0_INT_USB 11 153#define PXA2X0_INT_PMU 12 154#define PXA2X0_INT_I2S 13 155#define PXA2X0_INT_AC97 14 156#define PXA2X0_INT_LCD 17 157#define PXA2X0_INT_I2C 18 158#define PXA2X0_INT_ICP 19 159#define PXA2X0_INT_STUART 20 160#define PXA2X0_INT_BTUART 21 161#define PXA2X0_INT_FFUART 22 162#define PXA2X0_INT_MMC 23 163#define PXA2X0_INT_SSP 24 164#define PXA2X0_INT_DMA 25 165#define PXA2X0_INT_OST0 26 166#define PXA2X0_INT_OST1 27 167#define PXA2X0_INT_OST2 28 168#define PXA2X0_INT_OST3 29 169#define PXA2X0_INT_RTCHZ 30 170#define PXA2X0_INT_ALARM 31 /* RTC Alarm interrupt */ 171 172/* DMAC */ 173#define DMAC_N_CHANNELS 16 174#define DMAC_N_PRIORITIES 3 175 176#define DMAC_DCSR(n) ((n)*4) 177#define DCSR_BUSERRINTR (1<<0) /* bus error interrupt */ 178#define DCSR_STARTINTR (1<<1) /* start interrupt */ 179#define DCSR_ENDINTR (1<<2) /* end interrupt */ 180#define DCSR_STOPSTATE (1<<3) /* channel is not running */ 181#define DCSR_REQPEND (1<<8) /* request pending */ 182#define DCSR_STOPIRQEN (1<<29) /* stop interrupt enable */ 183#define DCSR_NODESCFETCH (1<<30) /* no-descriptor fetch mode */ 184#define DCSR_RUN (1<<31) 185#define DMAC_DINT 0x00f0 /* DAM interrupt */ 186#define DMAC_DINT_MASK 0xffffu 187#define DMAC_DRCMR(n) (0x100+(n)*4) /* Channel map register */ 188#define DRCMR_CHLNUM 0x0f /* channel number */ 189#define DRCMR_MAPVLD (1<<7) /* map valid */ 190#define DMAC_DDADR(n) (0x0200+(n)*16) 191#define DDADR_STOP (1<<0) 192#define DMAC_DSADR(n) (0x0204+(n)*16) 193#define DMAC_DTADR(n) (0x0208+(n)*16) 194#define DMAC_DCMD(n) (0x020c+(n)*16) 195#define DCMD_LENGTH_MASK 0x1fff 196#define DCMD_WIDTH_SHIFT 14 197#define DCMD_WIDTH_0 (0<<DCMD_WIDTH_SHIFT) /* for mem-to-mem transfer*/ 198#define DCMD_WIDTH_1 (1<<DCMD_WIDTH_SHIFT) 199#define DCMD_WIDTH_2 (2<<DCMD_WIDTH_SHIFT) 200#define DCMD_WIDTH_4 (3<<DCMD_WIDTH_SHIFT) 201#define DCMD_SIZE_SHIFT 16 202#define DCMD_SIZE_8 (1<<DCMD_SIZE_SHIFT) 203#define DCMD_SIZE_16 (2<<DCMD_SIZE_SHIFT) 204#define DCMD_SIZE_32 (3<<DCMD_SIZE_SHIFT) 205#define DCMD_LITTLE_ENDIEN (0<<18) 206#define DCMD_ENDIRQEN (1<<21) 207#define DCMD_STARTIRQEN (1<<22) 208#define DCMD_FLOWTRG (1<<28) /* flow control by target */ 209#define DCMD_FLOWSRC (1<<29) /* flow control by source */ 210#define DCMD_INCTRGADDR (1<<30) /* increment target address */ 211#define DCMD_INCSRCADDR (1<<31) /* increment source address */ 212 213#ifndef __ASSEMBLER__ 214/* DMA descriptor */ 215struct pxa_dma_desc { 216 volatile uint32_t dd_ddadr; 217#define DMAC_DESC_LAST 0x1 218 volatile uint32_t dd_dsadr; 219 volatile uint32_t dd_dtadr; 220 volatile uint32_t dd_dcmd; /* command and length */ 221}; 222#endif 223 224/* UART */ 225#define PXA2X0_COM_FREQ 14745600L 226 227/* I2C */ 228#define I2C_IBMR 0x1680 /* Bus monitor register */ 229#define I2C_IDBR 0x1688 /* Data buffer */ 230#define I2C_ICR 0x1690 /* Control register */ 231#define ICR_START (1<<0) 232#define ICR_STOP (1<<1) 233#define ICR_ACKNAK (1<<2) 234#define ICR_TB (1<<3) 235#define ICR_MA (1<<4) 236#define I2C_ISR 0x1698 /* Status register */ 237#define I2C_ISAR 0x16a0 /* Slave address */ 238 239/* Clock Manager */ 240#define CLKMAN_CCCR 0x00 /* Core Clock Configuration */ 241#define CCCR_TURBO_X1 (2<<7) 242#define CCCR_TURBO_X15 (3<<7) /* x 1.5 */ 243#define CCCR_TURBO_X2 (4<<7) 244#define CCCR_TURBO_X25 (5<<7) /* x 2.5 */ 245#define CCCR_TURBO_X3 (6<<7) /* x 3.0 */ 246#define CCCR_RUN_X1 (1<<5) 247#define CCCR_RUN_X2 (2<<5) 248#define CCCR_RUN_X4 (3<<5) 249#define CCCR_MEM_X27 (1<<0) /* x27, 99.53MHz */ 250#define CCCR_MEM_X32 (2<<0) /* x32, 117,96MHz */ 251#define CCCR_MEM_X36 (3<<0) /* x26, 132.71MHz */ 252#define CCCR_MEM_X40 (4<<0) /* x27, 99.53MHz */ 253#define CCCR_MEM_X45 (5<<0) /* x27, 99.53MHz */ 254#define CCCR_MEM_X9 (0x1f<<0) /* x9, 33.2MHz */ 255 256#define CLKMAN_CKEN 0x04 /* Clock Enable Register */ 257#define CLKMAN_OSCC 0x08 /* Osillcator Configuration Register */ 258 259#define CCCR_N_SHIFT 7 260#define CCCR_N_MASK (0x07<<CCCR_N_SHIFT) 261#define CCCR_M_SHIFT 5 262#define CCCR_M_MASK (0x03<<CCCR_M_SHIFT) 263#define CCCR_L_MASK 0x1f 264 265#define CKEN_PWM0 (1<<0) 266#define CKEN_PWM1 (1<<1) 267#define CKEN_AC97 (1<<2) 268#define CKEN_SSP (1<<3) 269#define CKEN_STUART (1<<5) 270#define CKEN_FFUART (1<<6) 271#define CKEN_BTUART (1<<7) 272#define CKEN_I2S (1<<8) 273#define CKEN_USBH (1<<10) 274#define CKEN_USB (1<<11) 275#define CKEN_MMC (1<<12) 276#define CKEN_FICP (1<<13) 277#define CKEN_I2C (1<<14) 278#define CKEN_LCD (1<<16) 279 280#define OSCC_OOK (1<<0) /* 32.768 kHz oscillator status */ 281#define OSCC_OON (1<<1) /* 32.768 kHz oscillator */ 282 283/* 284 * RTC 285 */ 286#define RTC_RCNR 0x0000 /* count register */ 287#define RTC_RTAR 0x0004 /* alarm register */ 288#define RTC_RTSR 0x0008 /* status register */ 289#define RTC_RTTR 0x000c /* trim register */ 290/* 291 * GPIO 292 */ 293#define GPIO_GPLR0 0x00 /* Level reg [31:0] */ 294#define GPIO_GPLR1 0x04 /* Level reg [63:32] */ 295#define GPIO_GPLR2 0x08 /* Level reg [80:64] */ 296 297#define GPIO_GPDR0 0x0c /* dir reg [31:0] */ 298#define GPIO_GPDR1 0x10 /* dir reg [63:32] */ 299#define GPIO_GPDR2 0x14 /* dir reg [80:64] */ 300 301#define GPIO_GPSR0 0x18 /* set reg [31:0] */ 302#define GPIO_GPSR1 0x1c /* set reg [63:32] */ 303#define GPIO_GPSR2 0x20 /* set reg [80:64] */ 304 305#define GPIO_GPCR0 0x24 /* clear reg [31:0] */ 306#define GPIO_GPCR1 0x28 /* clear reg [63:32] */ 307#define GPIO_GPCR2 0x2c /* clear reg [80:64] */ 308 309#define GPIO_GPER0 0x30 /* rising edge [31:0] */ 310#define GPIO_GPER1 0x34 /* rising edge [63:32] */ 311#define GPIO_GPER2 0x38 /* rising edge [80:64] */ 312 313#define GPIO_GRER0 0x30 /* rising edge [31:0] */ 314#define GPIO_GRER1 0x34 /* rising edge [63:32] */ 315#define GPIO_GRER2 0x38 /* rising edge [80:64] */ 316 317#define GPIO_GFER0 0x3c /* falling edge [31:0] */ 318#define GPIO_GFER1 0x40 /* falling edge [63:32] */ 319#define GPIO_GFER2 0x44 /* falling edge [80:64] */ 320 321#define GPIO_GEDR0 0x48 /* edge detect [31:0] */ 322#define GPIO_GEDR1 0x4c /* edge detect [63:32] */ 323#define GPIO_GEDR2 0x50 /* edge detect [80:64] */ 324 325#define GPIO_GAFR0_L 0x54 /* alternate function [15:0] */ 326#define GPIO_GAFR0_U 0x58 /* alternate function [31:16] */ 327#define GPIO_GAFR1_L 0x5c /* alternate function [47:32] */ 328#define GPIO_GAFR1_U 0x60 /* alternate function [63:48] */ 329#define GPIO_GAFR2_L 0x64 /* alternate function [79:64] */ 330#define GPIO_GAFR2_U 0x68 /* alternate function [80] */ 331 332/* Only for PXA270 */ 333#define GPIO_GAFR3_L 0x6c /* alternate function [111:96] */ 334#define GPIO_GAFR3_U 0x70 /* alternate function [120:112] */ 335 336#define GPIO_GPLR3 0x100 /* Level reg [120:96] */ 337#define GPIO_GPDR3 0x10c /* dir reg [120:96] */ 338#define GPIO_GPSR3 0x118 /* set reg [120:96] */ 339#define GPIO_GPCR3 0x124 /* clear reg [120:96] */ 340#define GPIO_GRER3 0x130 /* rising edge [120:96] */ 341#define GPIO_GFER3 0x13c /* falling edge [120:96] */ 342#define GPIO_GEDR3 0x148 /* edge detect [120:96] */ 343 344/* a bit simpler if we don't support PXA270 */ 345#define PXA250_GPIO_REG(r, pin) ((r) + (((pin) / 32) * 4)) 346#define PXA250_GPIO_NPINS 85 347 348#define PXA270_GPIO_REG(r, pin) \ 349(pin < 96 ? PXA250_GPIO_REG(r,pin) : ((r) + 0x100 + ((((pin)-96) / 32) * 4))) 350#define PXA270_GPIO_NPINS 121 351 352 353#define GPIO_BANK(pin) ((pin) / 32) 354#define GPIO_BIT(pin) (1u << ((pin) & 0x1f)) 355#define GPIO_FN_REG(pin) (GPIO_GAFR0_L + (((pin) / 16) * 4)) 356#define GPIO_FN_SHIFT(pin) ((pin & 0xf) * 2) 357 358#define GPIO_IN 0x00 /* Regular GPIO input pin */ 359#define GPIO_OUT 0x10 /* Regular GPIO output pin */ 360#define GPIO_ALT_FN_1_IN 0x01 /* Alternate function 1 input */ 361#define GPIO_ALT_FN_1_OUT 0x11 /* Alternate function 1 output */ 362#define GPIO_ALT_FN_2_IN 0x02 /* Alternate function 2 input */ 363#define GPIO_ALT_FN_2_OUT 0x12 /* Alternate function 2 output */ 364#define GPIO_ALT_FN_3_IN 0x03 /* Alternate function 3 input */ 365#define GPIO_ALT_FN_3_OUT 0x13 /* Alternate function 3 output */ 366#define GPIO_SET 0x20 /* Initial state is Set */ 367#define GPIO_CLR 0x00 /* Initial state is Clear */ 368 369#define GPIO_FN_MASK 0x03 370#define GPIO_FN_IS_OUT(n) ((n) & GPIO_OUT) 371#define GPIO_FN_IS_SET(n) ((n) & GPIO_SET) 372#define GPIO_FN(n) ((n) & GPIO_FN_MASK) 373#define GPIO_IS_GPIO(n) (GPIO_FN(n) == 0) 374#define GPIO_IS_GPIO_IN(n) (((n) & (GPIO_FN_MASK|GPIO_OUT)) == GPIO_IN) 375#define GPIO_IS_GPIO_OUT(n) (((n) & (GPIO_FN_MASK|GPIO_OUT)) == GPIO_OUT) 376 377#define IRQ_GPIO0 64 378#define IRQ_NGPIO 128 379#define IRQ_GPIO_MAX IRQ_GPIO0 + IRQ_NGPIO 380#define IRQ_TO_GPIO(x) (x - IRQ_GPIO0) 381#define GPIO_TO_IRQ(x) (x + IRQ_GPIO0) 382 383/* 384 * memory controller 385 */ 386 387#define MEMCTL_MDCNFG 0x0000 388#define MDCNFG_DE0 (1<<0) 389#define MDCNFG_DE1 (1<<1) 390#define MDCNFD_DWID01_SHIFT 2 391#define MDCNFD_DCAC01_SHIFT 3 392#define MDCNFD_DRAC01_SHIFT 5 393#define MDCNFD_DNB01_SHIFT 7 394#define MDCNFG_DE2 (1<<16) 395#define MDCNFG_DE3 (1<<17) 396#define MDCNFD_DWID23_SHIFT 18 397#define MDCNFD_DCAC23_SHIFT 19 398#define MDCNFD_DRAC23_SHIFT 21 399#define MDCNFD_DNB23_SHIFT 23 400 401#define MDCNFD_DWID_MASK 0x1 402#define MDCNFD_DCAC_MASK 0x3 403#define MDCNFD_DRAC_MASK 0x3 404#define MDCNFD_DNB_MASK 0x1 405 406#define MEMCTL_MDREFR 0x04 /* refresh control register */ 407#define MDREFR_DRI 0xfff 408#define MDREFR_E0PIN (1<<12) 409#define MDREFR_K0RUN (1<<13) /* SDCLK0 enable */ 410#define MDREFR_K0DB2 (1<<14) /* SDCLK0 1/2 freq */ 411#define MDREFR_E1PIN (1<<15) 412#define MDREFR_K1RUN (1<<16) /* SDCLK1 enable */ 413#define MDREFR_K1DB2 (1<<17) /* SDCLK1 1/2 freq */ 414#define MDREFR_K2RUN (1<<18) /* SDCLK2 enable */ 415#define MDREFR_K2DB2 (1<<19) /* SDCLK2 1/2 freq */ 416#define MDREFR_APD (1<<20) /* Auto Power Down */ 417#define MDREFR_SLFRSH (1<<22) /* Self Refresh */ 418#define MDREFR_K0FREE (1<<23) /* SDCLK0 free run */ 419#define MDREFR_K1FREE (1<<24) /* SDCLK1 free run */ 420#define MDREFR_K2FREE (1<<25) /* SDCLK2 free run */ 421 422#define MEMCTL_MSC0 0x08 /* Asychronous Statis memory Control CS[01] */ 423#define MEMCTL_MSC1 0x0c /* Asychronous Statis memory Control CS[23] */ 424#define MEMCTL_MSC2 0x10 /* Asychronous Statis memory Control CS[45] */ 425#define MSC_RBUFF_SHIFT 15 /* return data buffer */ 426#define MSC_RBUFF (1<<MSC_RBUFF_SHIFT) 427#define MSC_RRR_SHIFT 12 /* recovery time */ 428#define MSC_RRR (7<<MSC_RRR_SHIFT) 429#define MSC_RDN_SHIFT 8 /* ROM delay next access */ 430#define MSC_RDN (0x0f<<MSC_RDN_SHIFT) 431#define MSC_RDF_SHIFT 4 /* ROM delay first access*/ 432#define MSC_RDF (0x0f<<MSC_RDF_SHIFT) 433#define MSC_RBW_SHIFT 3 /* 32/16 bit bus */ 434#define MSC_RBW (1<<MSC_RBW_SHIFT) 435#define MSC_RT_SHIFT 0 /* type */ 436#define MSC_RT (7<<MSC_RT_SHIFT) 437#define MSC_RT_NONBURST 0 438#define MSC_RT_SRAM 1 439#define MSC_RT_BURST4 2 440#define MSC_RT_BURST8 3 441#define MSC_RT_VLIO 4 442 443/* expansion memory timing configuration */ 444#define MEMCTL_MCMEM(n) (0x28+4*(n)) 445#define MEMCTL_MCATT(n) (0x30+4*(n)) 446#define MEMCTL_MCIO(n) (0x38+4*(n)) 447 448#define MC_HOLD_SHIFT 14 449#define MC_ASST_SHIFT 7 450#define MC_SET_SHIFT 0 451#define MC_TIMING_VAL(hold,asst,set) (((hold)<<MC_HOLD_SHIFT)| \ 452 ((asst)<<MC_ASST_SHIFT)|((set)<<MC_SET_SHIFT)) 453 454#define MEMCTL_MECR 0x14 /* Expansion memory configuration */ 455#define MECR_NOS (1<<0) /* Number of sockets */ 456#define MECR_CIT (1<<1) /* Card-is-there */ 457 458#define MEMCTL_MDMRS 0x0040 459 460/* 461 * LCD Controller 462 */ 463#define LCDC_LCCR0 0x000 /* Controller Control Register 0 */ 464#define LCCR0_ENB (1U<<0) /* LCD Controller Enable */ 465#define LCCR0_CMS (1U<<1) /* Color/Mono select */ 466#define LCCR0_SDS (1U<<2) /* Single/Dual -panel */ 467#define LCCR0_LDM (1U<<3) /* LCD Disable Done Mask */ 468#define LCCR0_SFM (1U<<4) /* Start of Frame Mask */ 469#define LCCR0_IUM (1U<<5) /* Input FIFO Underrun Mask */ 470#define LCCR0_EFM (1U<<6) /* End of Frame Mask */ 471#define LCCR0_PAS (1U<<7) /* Passive/Active Display select */ 472#define LCCR0_DPD (1U<<9) /* Double-Pixel Data pin mode */ 473#define LCCR0_DIS (1U<<10) /* LCD Disable */ 474#define LCCR0_QDM (1U<<11) /* LCD Quick Disable Mask */ 475#define LCCR0_BM (1U<<20) /* Branch Mask */ 476#define LCCR0_OUM (1U<<21) /* Output FIFO Underrun Mask */ 477 478#define LCCR0_IMASK (LCCR0_LDM|LCCR0_SFM|LCCR0_IUM|LCCR0_EFM|LCCR0_QDM|LCCR0_BM|LCCR0_OUM) 479 480 481#define LCDC_LCCR1 0x004 /* Controller Control Register 1 */ 482#define LCDC_LCCR2 0x008 /* Controller Control Register 2 */ 483#define LCDC_LCCR3 0x00c /* Controller Control Register 2 */ 484#define LCCR3_BPP_SHIFT 24 /* Bits per pixel */ 485#define LCCR3_BPP (0x07<<LCCR3_BPP_SHIFT) 486#define LCDC_LCCR4 0x010 /* Controller Control Register 4 */ 487#define LCDC_LCCR5 0x014 /* Controller Control Register 5 */ 488#define LCDC_FBR0 0x020 /* DMA ch0 frame branch register */ 489#define LCDC_FBR1 0x024 /* DMA ch1 frame branch register */ 490#define LCDC_FBR2 0x028 /* DMA ch2 frame branch register */ 491#define LCDC_FBR3 0x02c /* DMA ch3 frame branch register */ 492#define LCDC_FBR4 0x030 /* DMA ch4 frame branch register */ 493#define LCDC_LCSR1 0x034 /* controller status register 1 PXA27x only */ 494#define LCDC_LCSR 0x038 /* controller status register */ 495#define LCSR_LDD (1U<<0) /* LCD disable done */ 496#define LCSR_SOF (1U<<1) /* Start of frame */ 497#define LCDC_LIIDR 0x03c /* controller interrupt ID Register */ 498#define LCDC_TRGBR 0x040 /* TMED RGB Speed Register */ 499#define LCDC_TCR 0x044 /* TMED Control Register */ 500#define LCDC_OVL1C1 0x050 /* Overlay 1 control register 1 */ 501#define LCDC_OVL1C2 0x060 /* Overlay 1 control register 2 */ 502#define LCDC_OVL2C1 0x070 /* Overlay 1 control register 1 */ 503#define LCDC_OVL2C2 0x080 /* Overlay 1 control register 2 */ 504#define LCDC_CCR 0x090 /* Cursor control register */ 505#define LCDC_CMDCR 0x100 /* Command control register */ 506#define LCDC_PRSR 0x104 /* Panel read status register */ 507#define LCDC_FBR5 0x110 /* DMA ch5 frame branch register */ 508#define LCDC_FBR6 0x114 /* DMA ch6 frame branch register */ 509#define LCDC_FDADR0 0x200 /* DMA ch0 frame descriptor address */ 510#define LCDC_FSADR0 0x204 /* DMA ch0 frame source address */ 511#define LCDC_FIDR0 0x208 /* DMA ch0 frame ID register */ 512#define LCDC_LDCMD0 0x20c /* DMA ch0 command register */ 513#define LCDC_FDADR1 0x210 /* DMA ch1 frame descriptor address */ 514#define LCDC_FSADR1 0x214 /* DMA ch1 frame source address */ 515#define LCDC_FIDR1 0x218 /* DMA ch1 frame ID register */ 516#define LCDC_LDCMD1 0x21c /* DMA ch1 command register */ 517#define LCDC_FDADR2 0x220 /* DMA ch2 frame descriptor address */ 518#define LCDC_FSADR2 0x224 /* DMA ch2 frame source address */ 519#define LCDC_FIDR2 0x228 /* DMA ch2 frame ID register */ 520#define LCDC_LDCMD2 0x22c /* DMA ch2 command register */ 521#define LCDC_FDADR3 0x230 /* DMA ch3 frame descriptor address */ 522#define LCDC_FSADR3 0x234 /* DMA ch3 frame source address */ 523#define LCDC_FIDR3 0x238 /* DMA ch3 frame ID register */ 524#define LCDC_LDCMD3 0x23c /* DMA ch3 command register */ 525#define LCDC_FDADR4 0x240 /* DMA ch4 frame descriptor address */ 526#define LCDC_FSADR4 0x244 /* DMA ch4 frame source address */ 527#define LCDC_FIDR4 0x248 /* DMA ch4 frame ID register */ 528#define LCDC_LDCMD4 0x24c /* DMA ch4 command register */ 529#define LCDC_FDADR5 0x250 /* DMA ch5 frame descriptor address */ 530#define LCDC_FSADR5 0x254 /* DMA ch5 frame source address */ 531#define LCDC_FIDR5 0x258 /* DMA ch5 frame ID register */ 532#define LCDC_LDCMD5 0x25c /* DMA ch5 command register */ 533#define LCDC_FDADR6 0x260 /* DMA ch6 frame descriptor address */ 534#define LCDC_FSADR6 0x264 /* DMA ch6 frame source address */ 535#define LCDC_FIDR6 0x268 /* DMA ch6 frame ID register */ 536#define LCDC_LDCMD6 0x26c /* DMA ch6 command register */ 537#define LCDC_LCDBSCNTR 0x054 /* LCD buffer strength control register */ 538 539/* 540 * MMC/SD controller 541 */ 542#define MMC_STRPCL 0x00 /* start/stop MMC clock */ 543#define STRPCL_NOOP 0 544#define STRPCL_STOP 1 /* stop MMC clock */ 545#define STRPCL_START 2 /* start MMC clock */ 546#define MMC_STAT 0x04 /* status register */ 547#define STAT_READ_TIME_OUT (1<<0) 548#define STAT_TIMEOUT_RESPONSE (1<<1) 549#define STAT_CRC_WRITE_ERROR (1<<2) 550#define STAT_CRC_READ_ERROR (1<<3) 551#define STAT_SPI_READ_ERROR_TOKEN (1<<4) 552#define STAT_RES_CRC_ERR (1<<5) 553#define STAT_XMIT_FIFO_EMPTY (1<<6) 554#define STAT_RECV_FIFO_FULL (1<<7) 555#define STAT_CLK_EN (1<<8) 556#define STAT_DATA_TRAN_DONE (1<<11) 557#define STAT_PRG_DONE (1<<12) 558#define STAT_END_CMD_RES (1<<13) 559#define MMC_CLKRT 0x08 /* MMC clock rate */ 560#define CLKRT_20M 0 561#define CLKRT_10M 1 562#define CLKRT_5M 2 563#define CLKRT_2_5M 3 564#define CLKRT_1_25M 4 565#define CLKRT_625K 5 566#define CLKRT_312K 6 567#define MMC_SPI 0x0c /* SPI mode control */ 568#define SPI_EN (1<<0) /* enable SPI mode */ 569#define SPI_CRC_ON (1<<1) /* enable CRC generation */ 570#define SPI_CS_EN (1<<2) /* Enable CS[01] */ 571#define SPI_CS_ADDRESS (1<<3) /* CS0/CS1 */ 572#define MMC_CMDAT 0x10 /* command/response/data */ 573#define CMDAT_RESPONSE_FORMAT 0x03 574#define CMDAT_RESPONSE_FORMAT_NO 0 /* no response */ 575#define CMDAT_RESPONSE_FORMAT_R1 1 /* R1, R1b, R4, R5 */ 576#define CMDAT_RESPONSE_FORMAT_R2 2 577#define CMDAT_RESPONSE_FORMAT_R3 3 578#define CMDAT_DATA_EN (1<<2) 579#define CMDAT_WRITE (1<<3) /* 1=write 0=read operation */ 580#define CMDAT_STREAM_BLOCK (1<<4) /* stream mode */ 581#define CMDAT_BUSY (1<<5) /* busy signal is expected */ 582#define CMDAT_INIT (1<<6) /* preceede command with 80 clocks */ 583#define CMDAT_MMC_DMA_EN (1<<7) /* DMA enable */ 584#define MMC_RESTO 0x14 /* expected response time out */ 585#define MMC_RDTO 0x18 /* expected data read time out */ 586#define MMC_BLKLEN 0x1c /* block length of data transaction */ 587#define MMC_NOB 0x20 /* number of blocks (block mode) */ 588#define MMC_PRTBUF 0x24 /* partial MMC_TXFIFO written */ 589#define PRTBUF_BUF_PART_FULL (1<<0) /* buffer partially full */ 590#define MMC_I_MASK 0x28 /* interrupt mask */ 591#define MMC_I_REG 0x2c /* interrupt register */ 592#define MMC_I_DATA_TRAN_DONE (1<<0) 593#define MMC_I_PRG_DONE (1<<1) 594#define MMC_I_END_CMD_RES (1<<2) 595#define MMC_I_STOP_CMD (1<<3) 596#define MMC_I_CLK_IS_OFF (1<<4) 597#define MMC_I_RXFIFO_RD_REQ (1<<5) 598#define MMC_I_TXFIFO_WR_REQ (1<<6) 599#define MMC_CMD 0x30 /* index of current command */ 600#define MMC_ARGH 0x34 /* MSW part of the current command arg */ 601#define MMC_ARGL 0x38 /* LSW part of the current command arg */ 602#define MMC_RES 0x3c /* response FIFO */ 603#define MMC_RXFIFO 0x40 /* receive FIFO */ 604#define MMC_TXFIFO 0x44 /* transmit FIFO */ 605 606/* 607 * AC97 608 */ 609#define AC97_N_CODECS 2 610#define AC97_GCR 0x000c /* Global control register */ 611#define GCR_GIE (1<<0) /* interrupt enable */ 612#define GCR_COLD_RST (1<<1) 613#define GCR_WARM_RST (1<<2) 614#define GCR_ACLINK_OFF (1<<3) 615#define GCR_PRIRES_IEN (1<<4) /* Primary resume interrupt enable */ 616#define GCR_SECRES_IEN (1<<5) /* Secondary resume interrupt enable */ 617#define GCR_PRIRDY_IEN (1<<8) /* Primary ready interrupt enable */ 618#define GCR_SECRDY_IEN (1<<9) /* Primary ready interrupt enable */ 619#define GCR_SDONE_IE (1<<18) /* Status done interrupt enable */ 620#define GCR_CDONE_IE (1<<19) /* Command done interrupt enable */ 621 622#define AC97_GSR 0x001c /* Global status register */ 623#define GSR_GSCI (1<<0) /* codec GPI status change interrupt */ 624#define GSR_MIINT (1<<1) /* modem in interrupt */ 625#define GSR_MOINT (1<<2) /* modem out interrupt */ 626#define GSR_PIINT (1<<5) /* PCM in interrupt */ 627#define GSR_POINT (1<<6) /* PCM out interrupt */ 628#define GSR_MINT (1<<7) /* Mic in interrupt */ 629#define GSR_PCR (1<<8) /* primary code ready */ 630#define GSR_SCR (1<<9) /* secondary code ready */ 631#define GSR_PRIRES (1<<10) /* primary resume interrupt */ 632#define GSR_SECRES (1<<11) /* secondary resume interrupt */ 633#define GSR_BIT1SLT12 (1<<12) /* Bit 1 of slot 12 */ 634#define GSR_BIT2SLT12 (1<<13) /* Bit 2 of slot 12 */ 635#define GSR_BIT3SLT12 (1<<14) /* Bit 3 of slot 12 */ 636#define GSR_RDCS (1<<15) /* Read completion status */ 637#define GSR_SDONE (1<<18) /* status done */ 638#define GSR_CDONE (1<<19) /* command done */ 639 640#define AC97_POCR 0x0000 /* PCM-out control */ 641#define AC97_PICR 0x0004 /* PCM-in control */ 642#define AC97_POSR 0x0010 /* PCM-out status */ 643#define AC97_PISR 0x0014 /* PCM-out status */ 644#define AC97_MCCR 0x0008 /* MIC-in control register */ 645#define AC97_MCSR 0x0018 /* MIC-in status register */ 646#define AC97_MICR 0x0100 /* Modem-in control register */ 647#define AC97_MISR 0x0108 /* Modem-in status register */ 648#define AC97_MOCR 0x0110 /* Modem-out control register */ 649#define AC97_MOSR 0x0118 /* Modem-out status register */ 650#define AC97_FEFIE (1<<3) /* fifo error interrupt enable */ 651#define AC97_FIFOE (1<<4) /* fifo error */ 652 653#define AC97_CAR 0x0020 /* Codec access register */ 654#define CAR_CAIP (1<<0) /* Codec access in progress */ 655 656#define AC97_PCDR 0x0040 /* PCM data register */ 657#define AC97_MCDR 0x0060 /* MIC-in data register */ 658#define AC97_MODR 0x0140 /* Modem data register */ 659 660/* address to access codec registers */ 661#define AC97_PRIAUDIO 0x0200 /* Primary audio codec */ 662#define AC97_SECAUDIO 0x0300 /* Secondary autio codec */ 663#define AC97_PRIMODEM 0x0400 /* Primary modem codec */ 664#define AC97_SECMODEM 0x0500 /* Secondary modem codec */ 665#define AC97_CODEC_BASE(c) (AC97_PRIAUDIO + ((c) * 0x100)) 666 667/* 668 * USB device controller 669 */ 670#define USBDC_UDCCR 0x0000 /* UDC control register */ 671#define USBDC_UDCCS(n) (0x0010+4*(n)) /* Endpoint Control/Status Registers */ 672#define USBDC_UICR0 0x0050 /* UDC Interrupt Control Register 0 */ 673#define USBDC_UICR1 0x0054 /* UDC Interrupt Control Register 1 */ 674#define USBDC_USIR0 0x0058 /* UDC Status Interrupt Register 0 */ 675#define USBDC_USIR1 0x005C /* UDC Status Interrupt Register 1 */ 676#define USBDC_UFNHR 0x0060 /* UDC Frame Number Register High */ 677#define USBDC_UFNLR 0x0064 /* UDC Frame Number Register Low */ 678#define USBDC_UBCR2 0x0068 /* UDC Byte Count Register 2 */ 679#define USBDC_UBCR4 0x006C /* UDC Byte Count Register 4 */ 680#define USBDC_UBCR7 0x0070 /* UDC Byte Count Register 7 */ 681#define USBDC_UBCR9 0x0074 /* UDC Byte Count Register 9 */ 682#define USBDC_UBCR12 0x0078 /* UDC Byte Count Register 12 */ 683#define USBDC_UBCR14 0x007C /* UDC Byte Count Register 14 */ 684#define USBDC_UDDR0 0x0080 /* UDC Endpoint 0 Data Register */ 685#define USBDC_UDDR1 0x0100 /* UDC Endpoint 1 Data Register */ 686#define USBDC_UDDR2 0x0180 /* UDC Endpoint 2 Data Register */ 687#define USBDC_UDDR3 0x0200 /* UDC Endpoint 3 Data Register */ 688#define USBDC_UDDR4 0x0400 /* UDC Endpoint 4 Data Register */ 689#define USBDC_UDDR5 0x00A0 /* UDC Endpoint 5 Data Register */ 690#define USBDC_UDDR6 0x0600 /* UDC Endpoint 6 Data Register */ 691#define USBDC_UDDR7 0x0680 /* UDC Endpoint 7 Data Register */ 692#define USBDC_UDDR8 0x0700 /* UDC Endpoint 8 Data Register */ 693#define USBDC_UDDR9 0x0900 /* UDC Endpoint 9 Data Register */ 694#define USBDC_UDDR10 0x00C0 /* UDC Endpoint 10 Data Register */ 695#define USBDC_UDDR11 0x0B00 /* UDC Endpoint 11 Data Register */ 696#define USBDC_UDDR12 0x0B80 /* UDC Endpoint 12 Data Register */ 697#define USBDC_UDDR13 0x0C00 /* UDC Endpoint 13 Data Register */ 698#define USBDC_UDDR14 0x0E00 /* UDC Endpoint 14 Data Register */ 699#define USBDC_UDDR15 0x00E0 /* UDC Endpoint 15 Data Register */ 700 701#define USBHC_UHCRHDA 0x0048 /* UHC Root Hub Descriptor A */ 702#define UHCRHDA_POTPGT_SHIFT 24 /* Power on to power good time */ 703#define UHCRHDA_NOCP (1<<12) /* No over current protection */ 704#define UHCRHDA_OCPM (1<<11) /* Over current protection mode */ 705#define UHCRHDA_DT (1<<10) /* Device type */ 706#define UHCRHDA_NPS (1<<9) /* No power switching */ 707#define UHCRHDA_PSM (1<<8) /* Power switching mode */ 708#define UHCRHDA_NDP_MASK 0xff /* Number downstream ports */ 709#define USBHC_UHCRHDB 0x004c /* UHC Root Hub Descriptor B */ 710#define USBHC_UHCRHS 0x0050 /* UHC Root Hub Stauts */ 711#define USBHC_UHCHR 0x0064 /* UHC Reset Register */ 712#define UHCHR_SSEP3 (1<<11) /* Sleep standby enable for port3 */ 713#define UHCHR_SSEP2 (1<<10) /* Sleep standby enable for port2 */ 714#define UHCHR_SSEP1 (1<<9) /* Sleep standby enable for port1 */ 715#define UHCHR_PCPL (1<<7) /* Power control polarity low */ 716#define UHCHR_PSPL (1<<6) /* Power sense polarity low */ 717#define UHCHR_SSE (1<<5) /* Sleep standby enable */ 718#define UHCHR_UIT (1<<4) /* USB interrupt test */ 719#define UHCHR_SSDC (1<<3) /* Simulation scale down clock */ 720#define UHCHR_CGR (1<<2) /* Clock generation reset */ 721#define UHCHR_FHR (1<<1) /* Force host controller reset */ 722#define UHCHR_FSBIR (1<<0) /* Force system bus interface reset */ 723#define UHCHR_MASK 0xeff 724 725/* 726 * PWM controller 727 */ 728#define PWM_PWMCR 0x0000 /* Control register */ 729#define PWM_PWMDCR 0x0004 /* Duty cycle register */ 730#define PWM_FD (1<<10) /* Full duty */ 731#define PWM_PWMPCR 0x0008 /* Period register */ 732 733/* 734 * OS timer 735 */ 736#define OST_MR0 0x00 /* Match register 0 */ 737#define OST_MR1 0x04 /* Match register 1 */ 738#define OST_MR2 0x08 /* Match register 2 */ 739#define OST_MR3 0x0c /* Match register 3 */ 740#define OST_CR 0x10 /* Count register */ 741#define OST_SR 0x14 /* Status register */ 742#define OST_SR_CH0 (1<<0) 743#define OST_SR_CH1 (1<<1) 744#define OST_SR_CH2 (1<<2) 745#define OST_SR_CH3 (1<<3) 746#define OST_WR 0x18 /* Watchdog enable register */ 747#define OST_IR 0x1c /* Interrupt enable register */ 748 749/* 750 * Interrupt controller 751 */ 752#define ICU_IP 0x00 /* IRQ pending register */ 753#define ICU_MR 0x04 /* Mask register */ 754#define ICU_LR 0x08 /* Level register */ 755#define ICU_FP 0x0c /* FIQ pending register */ 756#define ICU_PR 0x10 /* Pending register */ 757#define ICU_CR 0x14 /* Control register */ 758 759#endif /* _ARM_XSCALE_PXAREG_H_ */ 760