Home | History | Annotate | Line # | Download | only in mvme
      1 /*	$NetBSD: pcctworeg.h,v 1.3 2008/04/28 20:23:54 martin Exp $	*/
      2 
      3 /*-
      4  * Copyright (c) 1999, 2002 The NetBSD Foundation, Inc.
      5  * All rights reserved.
      6  *
      7  * This code is derived from software contributed to The NetBSD Foundation
      8  * by Steve C. Woodford
      9  *
     10  * Redistribution and use in source and binary forms, with or without
     11  * modification, are permitted provided that the following conditions
     12  * are met:
     13  * 1. Redistributions of source code must retain the above copyright
     14  *    notice, this list of conditions and the following disclaimer.
     15  * 2. Redistributions in binary form must reproduce the above copyright
     16  *    notice, this list of conditions and the following disclaimer in the
     17  *    documentation and/or other materials provided with the distribution.
     18  *
     19  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
     20  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     21  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     22  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
     23  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     24  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     25  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     26  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     27  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     28  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     29  * POSSIBILITY OF SUCH DAMAGE.
     30  */
     31 
     32 /*
     33  * Register definitions for the PCCchip2 device, and offset to the
     34  * various subordinate devices which hang off it.
     35  */
     36 #ifndef	_MVME_PCCTWOREG_H
     37 #define	_MVME_PCCTWOREG_H
     38 
     39 /*
     40  * Offsets to the various devices which hang off the PCCChip2.
     41  * Note that these are offsets from the base of the PCCChip2's
     42  * own registers.
     43  */
     44 #define PCCTWO_REG_OFF	    0x00000	/* Offset of PCCChip2's own registers */
     45 #define PCCTWO_LPT_OFF	    0x00000	/* Offset of parallel port registers */
     46 #define PCCTWO_SCC_OFF      0x03000	/* Offset of CD2401 Serial Comms chip */
     47 #define PCCTWO_IE_OFF	    0x04000	/* Offset of 82596 LAN controller */
     48 #define PCCTWO_NCRSC_OFF    0x05000	/* Offset of NCR53C710 SCSI chip */
     49 
     50 /*
     51  * The two devices on mvme1[67]2's MCchip
     52  */
     53 #define MCCHIP_ZS0_OFF      0x03000
     54 #define MCCHIP_ZS1_OFF      0x03800
     55 
     56 /*
     57  * This is needed to figure out the boot device.
     58  * (The physical address of the boot device's registers are passed in
     59  * from the Boot ROM)
     60  */
     61 #define PCCTWO_PADDR(off)	((void *)(0xfff42000u + (off)))
     62 
     63 
     64 /*
     65  * The layout of the PCCchip2's Registers.
     66  * Each one is 8-bits wide, unless otherwise indicated.
     67  */
     68 #define	PCC2REG_CHIP_ID		0x00	/* Chip ID */
     69 #define	PCC2REG_CHIP_REVISION	0x01	/* Chip Revision */
     70 #define	PCC2REG_GENERAL_CONTROL	0x02	/* General Control */
     71 #define	PCC2REG_VECTOR_BASE	0x03	/* Vector Base */
     72 #define	PCC2REG_TIMER1_COMPARE	0x04	/* Tick Timer 1 Compare (32-bit) */
     73 #define	PCC2REG_TIMER1_COUNTER	0x08	/* Tick Timer 1 Counter (32-bit) */
     74 #define	PCC2REG_TIMER2_COMPARE	0x0c	/* Tick Timer 2 Compare (32-bit) */
     75 #define	PCC2REG_TIMER2_COUNTER	0x10	/* Tick Timer 2 Counter (32-bit) */
     76 #define	PCC2REG_PRESCALE_COUNT	0x14	/* Prescaler Count */
     77 #define	PCC2REG_PRESCALE_ADJUST	0x15	/* Prescaler Clock Adjust */
     78 #define	PCC2REG_TIMER2_CONTROL	0x16	/* Tick Timer 2 Control */
     79 #define	PCC2REG_TIMER1_CONTROL	0x17	/* Tick Timer 1 Control */
     80 #define	PCC2REG_GPIO_ICSR	0x18	/* GP Input Interrupt Control */
     81 #define	PCC2REG_GPIO_CONTROL	0x19	/* GP Input/Output Control */
     82 #define	PCC2REG_TIMER2_ICSR	0x1a	/* Tick Timer 2 Interrupt Control */
     83 #define	PCC2REG_TIMER1_ICSR	0x1b	/* Tick Timer 1 Interrupt Control */
     84 #define	PCC2REG_SCC_ERR_STATUS	0x1c	/* SCC Error Status */
     85 #define	PCC2REG_SCC_MODEM_ICSR	0x1d	/* SCC Modem Interrupt Control */
     86 #define	PCC2REG_SCC_TX_ICSR	0x1e	/* SCC Transmit Interrupt Control */
     87 #define	PCC2REG_SCC_RX_ICSR	0x1f	/* SCC Receive Interrupt Control */
     88 #define	PCC2REG_SCC_MODEM_PIACK	0x23	/* SCC Modem PIACK */
     89 #define	PCC2REG_SCC_TX_PIACK	0x25	/* SCC Transmit PIACK */
     90 #define	PCC2REG_SCC_RX_PIACK	0x27	/* SCC Receive PIACK */
     91 #define	PCC2REG_ETH_ERR_STATUS	0x28	/* LANC Error Status */
     92 #define	PCC2REG_ETH_ICSR	0x2a	/* LANC Interrupt Control */
     93 #define	PCC2REG_ETH_BERR_STATUS	0x2b	/* LANC Bus Error Interrupt Ctrl */
     94 #define	PCC2REG_SCSI_ERR_STATUS	0x2c	/* SCSI Error Status */
     95 #define	PCC2REG_SCSI_ICSR	0x2f	/* SCSI Interrupt Control */
     96 #define	PCC2REG_PRT_ACK_ICSR	0x30	/* Printer ACK Interrupt Control */
     97 #define	PCC2REG_PRT_FAULT_ICSR	0x31	/* Printer FAULT Interrupt Ctrl */
     98 #define	PCC2REG_PRT_SEL_ICSR	0x32	/* Printer SEL Interrupt Control */
     99 #define	PCC2REG_PRT_PE_ICSR	0x33	/* Printer PE Interrupt Control */
    100 #define	PCC2REG_PRT_BUSY_ICSR	0x34	/* Printer BUSY Interrupt Control */
    101 #define	PCC2REG_PRT_INPUT_STATUS 0x36	/* Printer Input Status */
    102 #define	PCC2REG_PRT_CONTROL	0x37	/* Printer Port Control */
    103 #define	PCC2REG_CHIP_SPEED	0x38	/* Chip Speed (16-bit) */
    104 #define	PCC2REG_PRT_DATA	0x3a	/* Printer Data (16-bit) */
    105 #define	PCC2REG_IRQ_LEVEL	0x3e	/* Interrupt Priority Level */
    106 #define	PCC2REG_IRQ_MASK	0x3f	/* Interrupt Mask */
    107 
    108 /*
    109  * Additions to the registers for the MCChip. Some of these overlap with
    110  * the PCCchip2's registers, but only where hardware is not present, eg.
    111  * the printer registers.
    112  */
    113 #define	MCCHIPREG_TIMER4_ICSR	0x18	/* Tick timer 4 interrupt control */
    114 #define	MCCHIPREG_TIMER3_ICSR	0x19	/* Tick timer 4 interrupt control */
    115 #define	MCCHIPREG_PARERR_ICSR	0x1c	/* Parity error interrupt control */
    116 #define	MCCHIPREG_SCC_ICSR	0x1d	/* ZS-85230 interrupt control */
    117 #define	MCCHIPREG_TIMER4_CTRL	0x1e	/* Tick timer 4 control */
    118 #define	MCCHIPREG_TIMER3_CTRL	0x1f	/* Tick timer 3 control */
    119 #define	MCCHIPREG_DRAM_BAR	0x20	/* DRAM Base Address (16-bits) */
    120 #define	MCCHIPREG_SRAM_BAR	0x22	/* SRAM Base Address (16-bits) */
    121 #define	MCCHIPREG_DRAM_SIZE	0x24	/* DRAM Size */
    122 #define	MCCHIPREG_RAM_OPTIONS	0x25	/* DRAM/SRAM Options */
    123 #define	MCCHIPREG_SRAM_SIZE	0x26	/* SRAM Size */
    124 #define	MCCHIPREG_GP_INPUTS	0x2d	/* General Purpose Inputs */
    125 #define	MCCHIPREG_162_VERSION	0x2e	/* MVME162-LX Series Version */
    126 #define	MCCHIPREG_TIMER3_COMP	0x30	/* Tick Timer 3 Compare (32-bit) */
    127 #define	MCCHIPREG_TIMER3_CNTR	0x34	/* Tick Timer 3 Counter (32-bit) */
    128 #define	MCCHIPREG_TIMER4_COMP	0x38	/* Tick Timer 4 Compare (32-bit) */
    129 #define	MCCHIPREG_TIMER4_CNTR	0x3c	/* Tick Timer 4 Counter (32-bit) */
    130 #define	MCCHIPREG_BUS_CLOCK	0x40	/* Bus Clock */
    131 #define	MCCHIPREG_EPROM_TIMING	0x41	/* EPROM Access Time Control */
    132 #define	MCCHIPREG_FLASH_TIMING	0x42	/* FLASH Access Time Control */
    133 #define	MCCHIPREG_ABORT_ICSR	0x43	/* ABORT Switch Interrupt Control */
    134 #define	MCCHIPREG_RESET_CONTROL	0x44	/* Reset Switch Control */
    135 #define	MCCHIPREG_WDOG_CONTROL	0x45	/* Watchdog Timer Control */
    136 #define	MCCHIPREG_TIMEBASE_SEL	0x46	/* Access & Watchdog Timebase Select */
    137 #define	MCCHIPREG_DRAM_CONTROL	0x48	/* Parity DRAM Control */
    138 #define	MCCHIPREG_MPU_STATUS	0x4a	/* MPU Status */
    139 #define	MCCHIPREG_PRESCALER	0x4c	/* Prescaler Count Register (32-bits) */
    140 
    141 /*
    142  * PCCchip2's register size is 0x40. MCchip's is 0x50. Plump for the latter.
    143  */
    144 #define PCC2REG_SIZE		0x50
    145 
    146 /*
    147  * Convenience macroes for accessing the PCCChip2's registers
    148  * through bus_space.
    149  */
    150 #define	pcc2_reg_read(sc,r)	\
    151 		bus_space_read_1((sc)->sc_bust, (sc)->sc_bush, (r))
    152 #define	pcc2_reg_read16(sc,r)	\
    153 		bus_space_read_2((sc)->sc_bust, (sc)->sc_bush, (r))
    154 #define	pcc2_reg_read32(sc,r)	\
    155 		bus_space_read_4((sc)->sc_bust, (sc)->sc_bush, (r))
    156 #define	pcc2_reg_write(sc,r,v)	\
    157 		bus_space_write_1((sc)->sc_bust, (sc)->sc_bush, (r), (v))
    158 #define	pcc2_reg_write16(sc,r,v)	\
    159 		bus_space_write_2((sc)->sc_bust, (sc)->sc_bush, (r), (v))
    160 #define	pcc2_reg_write32(sc,r,v)	\
    161 		bus_space_write_4((sc)->sc_bust, (sc)->sc_bush, (r), (v))
    162 
    163 /*
    164  * We use the interrupt vector bases suggested in the Motorola Docs...
    165  * The first is written to the PCCChip2 for interrupt sources under
    166  * its control. The second is written to the CD2401's Local Interrupt
    167  * Vector Register. Thus, we don't use the Auto-Vector facilities
    168  * for the CD2401, as recommended in the PCCChip2 Programmer's Guide.
    169  * The third is used as a base for the ZS85230 serial chips on mvme162.
    170  */
    171 #define PCCTWO_VECBASE		0x50
    172 #define PCCTWO_SCC_VECBASE	0x5c
    173 #define MCCHIP_ZS_VECBASE	0x5c
    174 
    175 /*
    176  * PCCchip2 Vector Encoding (Offsets from PCCTWO_VECBASE)
    177  * The order 0x0 -> 0xf also indicates priority, with 0x0 lowest.
    178  */
    179 #define PCCTWOV_PRT_BUSY	0x0	/* Printer Port 'BSY' */
    180 #define PCCTWOV_PRT_PE		0x1	/* Printer Port 'PE' (Paper Empty) */
    181 #define PCCTWOV_PRT_SELECT	0x2	/* Printer Port 'SELECT' */
    182 #define PCCTWOV_PRT_FAULT	0x3	/* Printer Port 'FAULT' */
    183 #define PCCTWOV_PRT_ACK		0x4	/* Printer Port 'ACK' */
    184 #define PCCTWOV_SCSI		0x5	/* SCSI Interrupt */
    185 #define PCCTWOV_LANC_ERR	0x6	/* LAN Controller Error */
    186 #define PCCTWOV_LANC_IRQ	0x7	/* LAN Controller Interrupt */
    187 #define PCCTWOV_TIMER2		0x8	/* Tick Timer 2 Interrupt */
    188 #define PCCTWOV_TIMER1		0x9	/* Tick Timer 1 Interrupt */
    189 #define PCCTWOV_GPIO		0xa	/* General Purpose Input Interrupt */
    190 #define PCCTWOV_SCC_RX_EXCEP	0xc	/* SCC Receive Exception */
    191 #define PCCTWOV_SCC_MODEM	0xd	/* SCC Modem (Non-Auto-vector mode) */
    192 #define PCCTWOV_SCC_TX		0xe	/* SCC Tx (Non-Auto-vector mode) */
    193 #define PCCTWOV_SCC_RX		0xf	/* SCC Rx (Non-Auto-vector mode) */
    194 #define PCCTWOV_MAX		16
    195 
    196 /*
    197  * MCchip-specific Vector Encoding (Offsets from PCCTWO_VECBASE)
    198  */
    199 #define MCCHIPV_TIMER4		0x3	/* Tick Timer 4 Interrupt */
    200 #define MCCHIPV_TIMER3		0x4	/* Tick Timer 3 Interrupt */
    201 #define MCCHIPV_PARITY_ERR	0xb	/* Parity DRAM Error Exception */
    202 #define MCCHIPV_ZS0		0xc	/* First ZS85230 Interrupt Vector */
    203 #define MCCHIPV_ZS1		0xc	/* Second ZS85230 Interrupt Vector */
    204 #define MCCHIPV_ABORT		0xe	/* Abort Switch */
    205 
    206 /*
    207  * How to identify the PCCchip2 from an MCchip
    208  */
    209 #define PCCTWO_CHIP_ID_PCC2	0x20
    210 #define PCCTWO_CHIP_ID_MCCHIP	0x84
    211 
    212 
    213 /*
    214  * Bit Values for the General Control Register (PCC2REG_GENERAL_CONTROL)
    215  */
    216 #define	PCCTWO_GEN_CTRL_FAST	(1u<<0)	/* BBRAM Speed Control */
    217 #define	PCCTWO_GEN_CTRL_MIEN	(1u<<1)	/* Master Interrupt Enable */
    218 #define PCCTWO_GEN_CTRL_C040	(1u<<2)	/* Set when CPU is mc68k family */
    219 #define PCCTWO_GEN_CTRL_DR0	(1u<<3)	/* Download ROM at 0 (mvme166 only) */
    220 
    221 
    222 /*
    223  * Calculate the Prescaler Adjust value for a given
    224  * value of BCLK in MHz. (PCC2REG_PRESCALE_ADJUST)
    225  */
    226 #define PCCTWO_PRES_ADJ(mhz)	(256 - (mhz))
    227 
    228 
    229 /*
    230  * Calculate the Tick Timer Compare register value for
    231  * a given number of micro-seconds. With the PCCChip2,
    232  * this is simple since the Tick Counters already have
    233  * a 1uS period. (PCC2REG_TIMER[12]_COMPARE)
    234  */
    235 #define PCCTWO_TIMERFREQ	1000000
    236 #define PCCTWO_US2LIM(us)	(us)
    237 #define PCCTWO_LIM2US(lim)	(lim)
    238 
    239 /*
    240  * The Tick Timer Control Registers (PCC2REG_TIMER[12]_CONTROL)
    241  */
    242 #define PCCTWO_TT_CTRL_CEN	(1u<<0)	/* Counter Enable */
    243 #define PCCTWO_TT_CTRL_COC	(1u<<1)	/* Clear On Compare */
    244 #define PCCTWO_TT_CTRL_COVF	(1u<<2)	/* Clear Overflow Counter */
    245 #define PCCTWO_TT_CTRL_OVF(r)	((r)>>4)/* Value of the Overflow Counter */
    246 
    247 
    248 /*
    249  * All the Interrupt Control Registers (PCC2REG_*_ICSR) on the PCCChip2
    250  * mostly share the same basic layout. These are defined as follows:
    251  */
    252 #define PCCTWO_ICR_LEVEL_MASK	0x7	/* Mask for the interrupt level */
    253 #define PCCTWO_ICR_ICLR		(1u<<3)	/* Clear Int. (edge-sensitive mode) */
    254 #define PCCTWO_ICR_AVEC		(1u<<3)	/* Enable Auto-Vector Mode */
    255 #define PCCTWO_ICR_IEN		(1u<<4)	/* Interrupt Enable */
    256 #define PCCTWO_ICR_INT		(1u<<5)	/* Interrupt Active */
    257 #define PCCTWO_ICR_LEVEL	(0u<<6)	/* Level Triggered */
    258 #define PCCTWO_ICR_EDGE		(1u<<6)	/* Edge Triggered */
    259 #define PCCTWO_ICR_RISE_HIGH	(0u<<7)	/* Polarity: Rising Edge or Hi Level */
    260 #define PCCTWO_ICR_FALL_LOW	(1u<<7)	/* Polarity: Falling Edge or Lo Level */
    261 #define PCCTWO_ICR_SC_RD(r)	((r)>>6)/* Get Snoop Control Bits */
    262 #define PCCTWO_ICR_SC_WR(r)	((r)<<6)/* Write Snoop Control Bits */
    263 
    264 
    265 
    266 /*
    267  * Most of the Error Status Registers (PCC2REG_*_ERR_STATUS) mostly
    268  * follow the same layout. These error registers are used when a
    269  * device (eg. SCC, LANC) is mastering the PCCChip2's local bus (for
    270  * example, performing a DMA) and some error occurs. The bits are
    271  * defined as follows:
    272  */
    273 #define PCCTWO_ERR_SR_SCLR	(1u<<0)	/* Clear Error Status */
    274 #define PCCTWO_ERR_SR_LTO	(1u<<1)	/* Local Bus Timeout */
    275 #define PCCTWO_ERR_SR_EXT	(1u<<2)	/* External (VMEbus) Error */
    276 #define PCCTWO_ERR_SR_PRTY	(1u<<3)	/* DRAM Parity Error */
    277 #define PCCTWO_ERR_SR_RTRY	(1u<<4)	/* Retry Required */
    278 #define PCCTWO_ERR_SR_MASK	0x0Eu
    279 
    280 
    281 /*
    282  * General Purpose Input/Output Pin Control Register
    283  * (PCC2REG_GPIO_CONTROL)
    284  */
    285 #define PCCTWO_GPIO_CTRL_GPO	(1u<<0)	/* Controls the GP Output Pin */
    286 #define PCCTWO_GPIO_CTRL_GPOE	(1u<<1)	/* General Purpose Output Enable */
    287 #define PCCTWO_GPIO_CTRL_GPI	(1u<<3)	/* The current state of the GP Input */
    288 
    289 
    290 /*
    291  * Printer Input Status Register (PCC2REG_PRT_INPUT_STATUS)
    292  */
    293 #define PCCTWO_PRT_IN_SR_BSY	(1u<<0)	/* State of printer's BSY Input */
    294 #define PCCTWO_PRT_IN_SR_PE	(1u<<1)	/* State of printer's PE Input */
    295 #define PCCTWO_PRT_IN_SR_SEL	(1u<<2)	/* State of printer's SELECT Input */
    296 #define PCCTWO_PRT_IN_SR_FLT	(1u<<3)	/* State of printer's FAULT Input */
    297 #define PCCTWO_PRT_IN_SR_ACK	(1u<<4)	/* State of printer's ACK Input */
    298 #define PCCTWO_PRT_IN_SR_PINT	(1u<<7)	/* Printer Interrupt Status */
    299 
    300 
    301 /*
    302  * Printer Port Control Register (PCC2REG_PRT_CONTROL)
    303  */
    304 #define PCCTWO_PRT_CTRL_MAN	(1u<<0)	/* Manual Strobe Control */
    305 #define PCCTWO_PRT_CTRL_FAST	(1u<<1)	/* Fast Auto Strobe */
    306 #define PCCTWO_PRT_CTRL_STB	(1u<<2)	/* Strobe Pin, in manual control mode */
    307 #define PCCTWO_PRT_CTRL_INP	(1u<<3)	/* Printer Input Prime */
    308 #define	PCCTWO_PRT_CTRL_DOEN	(1u<<4)	/* Printer Data Output Enable */
    309 
    310 #endif	/* _MVME_PCCTWOREG_H */
    311