Home | History | Annotate | Line # | Download | only in include
      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