uboot/include/asm-i386/ic/sc520.h
<<
>>
Prefs
   1/*
   2 * (C) Copyright 2002
   3 * Daniel Engström, Omicron Ceti AB <daniel@omicron.se>.
   4 *
   5 * See file CREDITS for list of people who contributed to this
   6 * project.
   7 *
   8 * This program is free software; you can redistribute it and/or
   9 * modify it under the terms of the GNU General Public License as
  10 * published by the Free Software Foundation; either version 2 of
  11 * the License, or (at your option) any later version.
  12 *
  13 * This program is distributed in the hope that it will be useful,
  14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16 * GNU General Public License for more details.
  17 *
  18 * You should have received a copy of the GNU General Public License
  19 * along with this program; if not, write to the Free Software
  20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
  21 * MA 02111-1307 USA
  22 */
  23
  24#ifndef _ASM_IC_SC520_H_
  25#define _ASM_IC_SC520_H_ 1
  26
  27#ifndef __ASSEMBLY__
  28
  29void init_sc520(void);
  30unsigned long init_sc520_dram(void);
  31
  32/* Memory mapped configuration registers */
  33typedef struct sc520_mmcr {
  34        u16 revid;      /* ElanSC520 microcontroller revision id */
  35        u8  cpuctl;     /* am5x86 CPU control  */
  36
  37        u8  pad_0x003[0x0d];
  38
  39        u8  drcctl;             /* SDRAM control */
  40        u8  pad_0x011[0x01];
  41        u8  drctmctl;           /* SDRAM timing control */
  42        u8  pad_0x013[0x01];
  43        u16 drccfg;             /* SDRAM bank configuration*/
  44        u8  pad_0x016[0x02];
  45        u32 drcbendadr;         /* SDRAM bank 0-3 ending address*/
  46        u8  pad_0x01c[0x04];
  47        u8  eccctl;             /* ECC control */
  48        u8  eccsta;             /* ECC status */
  49        u8  eccckbpos;          /* ECC check bit position */
  50        u8  ecccktest;          /* ECC Check Code Test */
  51        u32 eccsbadd;           /* ECC single-bit error address */
  52        u32 eccmbadd;           /* ECC multi-bit error address */
  53
  54        u8  pad_0x02c[0x14];
  55
  56        u8  dbctl;              /* SDRAM buffer control */
  57
  58        u8  pad_0x041[0x0f];
  59
  60        u16 bootcsctl;          /* /BOOTCS control */
  61        u8  pad_0x052[0x02];
  62        u16 romcs1ctl;          /* /ROMCS1 control */
  63        u16 romcs2ctl;          /* /ROMCS2 control */
  64
  65        u8  pad_0x058[0x08];
  66
  67        u16 hbctl;              /* host bridge control */
  68        u16 hbtgtirqctl;        /* host bridge target interrupt control */
  69        u16 hbtgtirqsta;        /* host bridge target interrupt status */
  70        u16 hbmstirqctl;        /* host bridge target interrupt control */
  71        u16 hbmstirqsta;        /* host bridge master interrupt status */
  72        u8  pad_0x06a[0x02];
  73        u32 mstintadd;          /* host bridge master interrupt address */
  74
  75        u8  sysarbctl;          /* system arbiter control */
  76        u8  pciarbsta;          /* PCI bus arbiter status */
  77        u16 sysarbmenb;         /* system arbiter master enable */
  78        u32 arbprictl;          /* arbiter priority control */
  79
  80        u8  pad_0x078[0x08];
  81
  82        u8  adddecctl;          /* address decode control */
  83        u8  pad_0x081[0x01];
  84        u16 wpvsta;             /* write-protect violation status */
  85        u8  pad_0x084[0x04];
  86        u32 par[16];            /* programmable address regions */
  87
  88        u8  pad_0x0c8[0x0b38];
  89
  90        u8  gpecho;             /* GP echo mode */
  91        u8  gpcsdw;             /* GP chip select data width */
  92        u16 gpcsqual;           /* GP chip select qualification */
  93        u8  pad_0xc04[0x4];
  94        u8  gpcsrt;             /* GP chip select recovery time */
  95        u8  gpcspw;             /* GP chip select pulse width */
  96        u8  gpcsoff;            /* GP chip select offset */
  97        u8  gprdw;              /* GP read pulse width */
  98        u8  gprdoff;            /* GP read offset */
  99        u8  gpwrw;              /* GP write pulse width */
 100        u8  gpwroff;            /* GP write offset */
 101        u8  gpalew;             /* GP ale pulse width */
 102        u8  gpaleoff;           /* GP ale offset */
 103
 104        u8  pad_0xc11[0x0f];
 105
 106        u16 piopfs15_0;         /* PIO15-PIO0 pin function select */
 107        u16 piopfs31_16;        /* PIO31-PIO16 pin function select */
 108        u8  cspfs;              /* chip select pin function select */
 109        u8  pad_0xc25[0x01];
 110        u8  clksel;             /* clock select */
 111        u8  pad_0xc27[0x01];
 112        u16 dsctl;              /* drive strength control */
 113        u16 piodir15_0;         /* PIO15-PIO0 direction */
 114        u16 piodir31_16;        /* PIO31-PIO16 direction */
 115        u8  pad_0xc2e[0x02];
 116        u16 piodata15_0 ;       /* PIO15-PIO0 data */
 117        u16 piodata31_16;       /* PIO31-PIO16 data */
 118        u16 pioset15_0;         /* PIO15-PIO0 set */
 119        u16 pioset31_16;        /* PIO31-PIO16 set */
 120        u16 pioclr15_0;         /* PIO15-PIO0 clear */
 121        u16 pioclr31_16;        /* PIO31-PIO16 clear */
 122
 123        u8  pad_0xc3c[0x24];
 124
 125        u16 swtmrmilli;         /* software timer millisecond count */
 126        u16 swtmrmicro;         /* software timer microsecond count */
 127        u8  swtmrcfg;           /* software timer configuration */
 128
 129        u8  pad_0xc65[0x0b];
 130
 131        u8  gptmrsta;           /* GP timers status register */
 132        u8  pad_0xc71;
 133        u16 gptmr0ctl;          /* GP timer 0 mode/control */
 134        u16 gptmr0cnt;          /* GP timer 0 count */
 135        u16 gptmr0maxcmpa;      /* GP timer 0 maxcount compare A */
 136        u16 gptmr0maxcmpb;      /* GP timer 0 maxcount compare B */
 137        u16 gptmr1ctl;          /* GP timer 1 mode/control */
 138        u16 gptmr1cnt;          /* GP timer 1 count */
 139        u16 gptmr1maxcmpa;      /* GP timer 1 maxcount compare A */
 140        u16 gptmr1maxcmpb;      /* GP timer 1 maxcount compare B*/
 141        u16 gptmr2ctl;          /* GP timer 2 mode/control */
 142        u16 gptmr2cnt;          /* GP timer 2 count */
 143        u8  pad_0xc86[0x08];
 144        u16 gptmr2maxcmpa;      /* GP timer 2 maxcount compare A */
 145
 146        u8  pad_0xc90[0x20];
 147
 148        u16 wdtmrctl;           /* watchdog timer control */
 149        u16 wdtmrcntl;          /* watchdog timer count low */
 150        u16 wdtmrcnth;          /* watchdog timer count high */
 151
 152        u8  pad_0xcb6[0x0a];
 153
 154        u8  uart1ctl;           /* UART 1 general control */
 155        u8  uart1sta;           /* UART 1 general status */
 156        u8  uart1fcrshad;       /* UART 1 FIFO control shadow */
 157        u8  pad_0xcc3[0x01];
 158        u8  uart2ctl;           /* UART 2 general control */
 159        u8  uart2sta;           /* UART 2 general status */
 160        u8  uart2fcrshad;       /* UART 2 FIFO control shadow */
 161
 162        u8  pad_0xcc7[0x09];
 163
 164        u8  ssictl;             /* SSI control */
 165        u8  ssixmit;            /* SSI transmit */
 166        u8  ssicmd;             /* SSI command */
 167        u8  ssista;             /* SSI status */
 168        u8  ssircv;             /* SSI receive */
 169
 170        u8  pad_0xcd5[0x2b];
 171
 172        u8  picicr;             /* interrupt control */
 173        u8  pad_0xd01[0x01];
 174        u8  pic_mode[3];        /* PIC interrupt mode */
 175        u8  pad_0xd05[0x03];
 176        u16 swint16_1;          /* software interrupt 16-1 control */
 177        u8  swint22_17;         /* software interrupt 22-17/NMI control */
 178        u8  pad_0xd0b[0x05];
 179        u16 intpinpol;          /* interrupt pin polarity */
 180        u8  pad_0xd12[0x02];
 181        u16 pcihostmap;         /* PCI host bridge interrupt mapping */
 182        u8  pad_0xd16[0x02];
 183        u16 eccmap;             /* ECC interrupt mapping */
 184        u8  gp_tmr_int_map[3];  /* GP timer interrupt mapping */
 185        u8  pad_0xd1d[0x03];
 186        u8  pit_int_map[3];     /* PIT interrupt mapping */
 187        u8  pad_0xd23[0x05];
 188        u8  uart_int_map[2];    /* UART interrupt mapping */
 189        u8  pad_0xd2a[0x06];
 190        u8  pci_int_map[4];     /* PCI interrupt mapping (A through D)*/
 191        u8  pad_0xd34[0x0c];
 192        u8  dmabcintmap;        /* DMA buffer chaining interrupt mapping */
 193        u8  ssimap;             /* SSI interrupt mapping register */
 194        u8  wdtmap;             /* watchdog timer interrupt mapping */
 195        u8  rtcmap;             /* RTC interrupt mapping register */
 196        u8  wpvmap;             /* write-protect interrupt mapping */
 197        u8  icemap;             /* AMDebug JTAG Rx/Tx interrupt mapping */
 198        u8  ferrmap;            /* floating point error interrupt mapping */
 199        u8  pad_0xd47[0x09];
 200        u8  gp_int_map[11];     /* GP IRQ interrupt mapping */
 201
 202        u8  pad_0xd5b[0x15];
 203
 204        u8  sysinfo;            /* system board information */
 205        u8  pad_0xd71[0x01];
 206        u8  rescfg;             /* reset configuration */
 207        u8  pad_0xd73[0x01];
 208        u8  ressta;             /* reset status */
 209
 210        u8  pad_0xd75[0x0b];
 211
 212        u8  gpdmactl;           /* GP-DMA Control */
 213        u8  gpdmammio;          /* GP-DMA memory-mapped I/O */
 214        u16 gpdmaextchmapa;     /* GP-DMA resource channel map a */
 215        u16 gpdmaextchmapb;     /* GP-DMA resource channel map b */
 216        u8  gp_dma_ext_pg_0;    /* GP-DMA channel extended page 0 */
 217        u8  gp_dma_ext_pg_1;    /* GP-DMA channel extended page 0 */
 218        u8  gp_dma_ext_pg_2;    /* GP-DMA channel extended page 0 */
 219        u8  gp_dma_ext_pg_3;    /* GP-DMA channel extended page 0 */
 220        u8  gp_dma_ext_pg_5;    /* GP-DMA channel extended page 0 */
 221        u8  gp_dma_ext_pg_6;    /* GP-DMA channel extended page 0 */
 222        u8  gp_dma_ext_pg_7;    /* GP-DMA channel extended page 0 */
 223        u8  pad_0xd8d[0x03];
 224        u8  gpdmaexttc3;        /* GP-DMA channel 3 extender transfer count */
 225        u8  gpdmaexttc5;        /* GP-DMA channel 5 extender transfer count */
 226        u8  gpdmaexttc6;        /* GP-DMA channel 6 extender transfer count */
 227        u8  gpdmaexttc7;        /* GP-DMA channel 7 extender transfer count */
 228        u8  pad_0xd94[0x4];
 229        u8  gpdmabcctl;         /* buffer chaining control */
 230        u8  gpdmabcsta;         /* buffer chaining status */
 231        u8  gpdmabsintenb;      /* buffer chaining interrupt enable */
 232        u8  gpdmabcval;         /* buffer chaining valid */
 233        u8  pad_0xd9c[0x04];
 234        u16 gpdmanxtaddl3;      /* GP-DMA channel 3 next address low */
 235        u16 gpdmanxtaddh3;      /* GP-DMA channel 3 next address high */
 236        u16 gpdmanxtaddl5;      /* GP-DMA channel 5 next address low */
 237        u16 gpdmanxtaddh5;      /* GP-DMA channel 5 next address high */
 238        u16 gpdmanxtaddl6;      /* GP-DMA channel 6 next address low */
 239        u16 gpdmanxtaddh6;      /* GP-DMA channel 6 next address high */
 240        u16 gpdmanxtaddl7;      /* GP-DMA channel 7 next address low */
 241        u16 gpdmanxtaddh7;      /* GP-DMA channel 7 next address high */
 242        u16 gpdmanxttcl3;       /* GP-DMA channel 3 next transfer count low */
 243        u16 gpdmanxttch3;       /* GP-DMA channel 3 next transfer count high */
 244        u16 gpdmanxttcl5;       /* GP-DMA channel 5 next transfer count low */
 245        u16 gpdmanxttch5;       /* GP-DMA channel 5 next transfer count high */
 246        u16 gpdmanxttcl6;       /* GP-DMA channel 6 next transfer count low */
 247        u16 gpdmanxttch6;       /* GP-DMA channel 6 next transfer count high */
 248        u16 gpdmanxttcl7;       /* GP-DMA channel 7 next transfer count low */
 249        u16 gpdmanxttch7;       /* GP-DMA channel 7 next transfer count high */
 250
 251        u8  pad_0xdc0[0x0240];
 252} sc520_mmcr_t;
 253
 254extern volatile sc520_mmcr_t *sc520_mmcr;
 255
 256#endif
 257
 258/* MMCR Offsets (required for assembler code */
 259#define SC520_DBCTL             0x0040  /* SDRAM Buffer Control Register */
 260#define SC520_PAR14             0x00c0  /* Programmable Address Region 14 Register */
 261#define SC520_PAR15             0x00c4  /* Programmable Address Region 15 Register */
 262#define SC520_SWTMRMILLI        0x0c60  /* Software Timer Millisecond Count */
 263#define SC520_SWTMRMICRO        0x0c62  /* Software Timer Microsecond Count */
 264
 265/* MMCR Register bits (not all of them :) ) */
 266
 267/* SSI Stuff */
 268#define CTL_CLK_SEL_4           0x00    /* Nominal Bit Rate = 8 MHz    */
 269#define CTL_CLK_SEL_8           0x10    /* Nominal Bit Rate = 4 MHz    */
 270#define CTL_CLK_SEL_16          0x20    /* Nominal Bit Rate = 2 MHz    */
 271#define CTL_CLK_SEL_32          0x30    /* Nominal Bit Rate = 1 MHz    */
 272#define CTL_CLK_SEL_64          0x40    /* Nominal Bit Rate = 512 KHz  */
 273#define CTL_CLK_SEL_128         0x50    /* Nominal Bit Rate = 256 KHz  */
 274#define CTL_CLK_SEL_256         0x60    /* Nominal Bit Rate = 128 KHz  */
 275#define CTL_CLK_SEL_512         0x70    /* Nominal Bit Rate = 64 KHz   */
 276
 277#define TC_INT_ENB              0x08    /* Transaction Complete Interrupt Enable */
 278#define PHS_INV_ENB             0x04    /* SSI Inverted Phase Mode Enable */
 279#define CLK_INV_ENB             0x02    /* SSI Inverted Clock Mode Enable */
 280#define MSBF_ENB                0x01    /* SSI Most Significant Bit First Mode Enable */
 281
 282#define SSICMD_CMD_SEL_XMITRCV  0x03    /* Simultaneous Transmit / Receive Transaction */
 283#define SSICMD_CMD_SEL_RCV      0x02    /* Receive Transaction */
 284#define SSICMD_CMD_SEL_XMIT     0x01    /* Transmit Transaction */
 285#define SSISTA_BSY              0x02    /* SSI Busy */
 286#define SSISTA_TC_INT           0x01    /* SSI Transaction Complete Interrupt */
 287
 288/* BITS for SC520_ADDDECCTL: */
 289#define WPV_INT_ENB             0x80    /* Write-Protect Violation Interrupt Enable */
 290#define IO_HOLE_DEST_PCI        0x10    /* I/O Hole Access Destination */
 291#define RTC_DIS                 0x04    /* RTC Disable */
 292#define UART2_DIS               0x02    /* UART2 Disable */
 293#define UART1_DIS               0x01    /* UART1 Disable */
 294
 295/* bus mapping constants (used for PCI core initialization) */                                                                                                                                                                                                                                                                                                                                                                                           /* bus mapping constants */
 296#define SC520_REG_ADDR          0x00000cf8
 297#define SC520_REG_DATA          0x00000cfc
 298
 299#define SC520_ISA_MEM_PHYS      0x00000000
 300#define SC520_ISA_MEM_BUS       0x00000000
 301#define SC520_ISA_MEM_SIZE      0x01000000
 302
 303#define SC520_ISA_IO_PHYS       0x00000000
 304#define SC520_ISA_IO_BUS        0x00000000
 305#define SC520_ISA_IO_SIZE       0x00001000
 306
 307/* PCI I/O space from 0x1000 to 0xdfff
 308 * (make 0xe000-0xfdff available for stuff like PCCard boot) */
 309#define SC520_PCI_IO_PHYS       0x00001000
 310#define SC520_PCI_IO_BUS        0x00001000
 311#define SC520_PCI_IO_SIZE       0x0000d000
 312
 313/* system memory from 0x00000000 to 0x0fffffff */
 314#define SC520_PCI_MEMORY_PHYS   0x00000000
 315#define SC520_PCI_MEMORY_BUS    0x00000000
 316#define SC520_PCI_MEMORY_SIZE   0x10000000
 317
 318/* PCI bus memory from 0x10000000 to 0x26ffffff
 319 * (make 0x27000000 - 0x27ffffff available for stuff like PCCard boot) */
 320#define SC520_PCI_MEM_PHYS      0x10000000
 321#define SC520_PCI_MEM_BUS       0x10000000
 322#define SC520_PCI_MEM_SIZE      0x17000000
 323
 324/* 0x28000000 - 0x3fffffff is used by the flash banks */
 325
 326/* 0x40000000 - 0xffffffff is not adressable by the SC520 */
 327
 328/* priority numbers used for interrupt channel mappings */
 329#define SC520_IRQ_DISABLED 0
 330#define SC520_IRQ0  1
 331#define SC520_IRQ1  2
 332#define SC520_IRQ2  4  /* same as IRQ9 */
 333#define SC520_IRQ3  11
 334#define SC520_IRQ4  12
 335#define SC520_IRQ5  13
 336#define SC520_IRQ6  21
 337#define SC520_IRQ7  22
 338#define SC520_IRQ8  3
 339#define SC520_IRQ9  4
 340#define SC520_IRQ10 5
 341#define SC520_IRQ11 6
 342#define SC520_IRQ12 7
 343#define SC520_IRQ13 8
 344#define SC520_IRQ14 9
 345#define SC520_IRQ15 10
 346
 347#endif
 348