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