|
@@ -0,0 +1,185 @@
|
|
|
+#ifndef __ALPHA_MCPCIA__H__
|
|
|
+#define __ALPHA_MCPCIA__H__
|
|
|
+
|
|
|
+/* Define to experiment with fitting everything into one 128MB HAE window.
|
|
|
+ One window per bus, that is. */
|
|
|
+#define MCPCIA_ONE_HAE_WINDOW 1
|
|
|
+
|
|
|
+#include <linux/types.h>
|
|
|
+#include <asm/compiler.h>
|
|
|
+#include <asm/mce.h>
|
|
|
+
|
|
|
+/*
|
|
|
+ * MCPCIA is the internal name for a core logic chipset which provides
|
|
|
+ * PCI access for the RAWHIDE family of systems.
|
|
|
+ *
|
|
|
+ * This file is based on:
|
|
|
+ *
|
|
|
+ * RAWHIDE System Programmer's Manual
|
|
|
+ * 16-May-96
|
|
|
+ * Rev. 1.4
|
|
|
+ *
|
|
|
+ */
|
|
|
+
|
|
|
+/*------------------------------------------------------------------------**
|
|
|
+** **
|
|
|
+** I/O procedures **
|
|
|
+** **
|
|
|
+** inport[b|w|t|l], outport[b|w|t|l] 8:16:24:32 IO xfers **
|
|
|
+** inportbxt: 8 bits only **
|
|
|
+** inport: alias of inportw **
|
|
|
+** outport: alias of outportw **
|
|
|
+** **
|
|
|
+** inmem[b|w|t|l], outmem[b|w|t|l] 8:16:24:32 ISA memory xfers **
|
|
|
+** inmembxt: 8 bits only **
|
|
|
+** inmem: alias of inmemw **
|
|
|
+** outmem: alias of outmemw **
|
|
|
+** **
|
|
|
+**------------------------------------------------------------------------*/
|
|
|
+
|
|
|
+
|
|
|
+/* MCPCIA ADDRESS BIT DEFINITIONS
|
|
|
+ *
|
|
|
+ * 3333 3333 3322 2222 2222 1111 1111 11
|
|
|
+ * 9876 5432 1098 7654 3210 9876 5432 1098 7654 3210
|
|
|
+ * ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
|
|
|
+ * 1 000
|
|
|
+ * ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
|
|
|
+ * | |\|
|
|
|
+ * | Byte Enable --+ |
|
|
|
+ * | Transfer Length --+
|
|
|
+ * +-- IO space, not cached
|
|
|
+ *
|
|
|
+ * Byte Transfer
|
|
|
+ * Enable Length Transfer Byte Address
|
|
|
+ * adr<6:5> adr<4:3> Length Enable Adder
|
|
|
+ * ---------------------------------------------
|
|
|
+ * 00 00 Byte 1110 0x000
|
|
|
+ * 01 00 Byte 1101 0x020
|
|
|
+ * 10 00 Byte 1011 0x040
|
|
|
+ * 11 00 Byte 0111 0x060
|
|
|
+ *
|
|
|
+ * 00 01 Word 1100 0x008
|
|
|
+ * 01 01 Word 1001 0x028 <= Not supported in this code.
|
|
|
+ * 10 01 Word 0011 0x048
|
|
|
+ *
|
|
|
+ * 00 10 Tribyte 1000 0x010
|
|
|
+ * 01 10 Tribyte 0001 0x030
|
|
|
+ *
|
|
|
+ * 10 11 Longword 0000 0x058
|
|
|
+ *
|
|
|
+ * Note that byte enables are asserted low.
|
|
|
+ *
|
|
|
+ */
|
|
|
+
|
|
|
+#define MCPCIA_MAX_HOSES 4
|
|
|
+
|
|
|
+#define MCPCIA_MID(m) ((unsigned long)(m) << 33)
|
|
|
+
|
|
|
+/* Dodge has PCI0 and PCI1 at MID 4 and 5 respectively.
|
|
|
+ Durango adds PCI2 and PCI3 at MID 6 and 7 respectively. */
|
|
|
+#define MCPCIA_HOSE2MID(h) ((h) + 4)
|
|
|
+
|
|
|
+#define MCPCIA_MEM_MASK 0x07ffffff /* SPARSE Mem region mask is 27 bits */
|
|
|
+
|
|
|
+/*
|
|
|
+ * Memory spaces:
|
|
|
+ */
|
|
|
+#define MCPCIA_SPARSE(m) (IDENT_ADDR + 0xf000000000UL + MCPCIA_MID(m))
|
|
|
+#define MCPCIA_DENSE(m) (IDENT_ADDR + 0xf100000000UL + MCPCIA_MID(m))
|
|
|
+#define MCPCIA_IO(m) (IDENT_ADDR + 0xf180000000UL + MCPCIA_MID(m))
|
|
|
+#define MCPCIA_CONF(m) (IDENT_ADDR + 0xf1c0000000UL + MCPCIA_MID(m))
|
|
|
+#define MCPCIA_CSR(m) (IDENT_ADDR + 0xf1e0000000UL + MCPCIA_MID(m))
|
|
|
+#define MCPCIA_IO_IACK(m) (IDENT_ADDR + 0xf1f0000000UL + MCPCIA_MID(m))
|
|
|
+#define MCPCIA_DENSE_IO(m) (IDENT_ADDR + 0xe1fc000000UL + MCPCIA_MID(m))
|
|
|
+#define MCPCIA_DENSE_CONF(m) (IDENT_ADDR + 0xe1fe000000UL + MCPCIA_MID(m))
|
|
|
+
|
|
|
+/*
|
|
|
+ * General Registers
|
|
|
+ */
|
|
|
+#define MCPCIA_REV(m) (MCPCIA_CSR(m) + 0x000)
|
|
|
+#define MCPCIA_WHOAMI(m) (MCPCIA_CSR(m) + 0x040)
|
|
|
+#define MCPCIA_PCI_LAT(m) (MCPCIA_CSR(m) + 0x080)
|
|
|
+#define MCPCIA_CAP_CTRL(m) (MCPCIA_CSR(m) + 0x100)
|
|
|
+#define MCPCIA_HAE_MEM(m) (MCPCIA_CSR(m) + 0x400)
|
|
|
+#define MCPCIA_HAE_IO(m) (MCPCIA_CSR(m) + 0x440)
|
|
|
+#define _MCPCIA_IACK_SC(m) (MCPCIA_CSR(m) + 0x480)
|
|
|
+#define MCPCIA_HAE_DENSE(m) (MCPCIA_CSR(m) + 0x4C0)
|
|
|
+
|
|
|
+/*
|
|
|
+ * Interrupt Control registers
|
|
|
+ */
|
|
|
+#define MCPCIA_INT_CTL(m) (MCPCIA_CSR(m) + 0x500)
|
|
|
+#define MCPCIA_INT_REQ(m) (MCPCIA_CSR(m) + 0x540)
|
|
|
+#define MCPCIA_INT_TARG(m) (MCPCIA_CSR(m) + 0x580)
|
|
|
+#define MCPCIA_INT_ADR(m) (MCPCIA_CSR(m) + 0x5C0)
|
|
|
+#define MCPCIA_INT_ADR_EXT(m) (MCPCIA_CSR(m) + 0x600)
|
|
|
+#define MCPCIA_INT_MASK0(m) (MCPCIA_CSR(m) + 0x640)
|
|
|
+#define MCPCIA_INT_MASK1(m) (MCPCIA_CSR(m) + 0x680)
|
|
|
+#define MCPCIA_INT_ACK0(m) (MCPCIA_CSR(m) + 0x10003f00)
|
|
|
+#define MCPCIA_INT_ACK1(m) (MCPCIA_CSR(m) + 0x10003f40)
|
|
|
+
|
|
|
+/*
|
|
|
+ * Performance Monitor registers
|
|
|
+ */
|
|
|
+#define MCPCIA_PERF_MON(m) (MCPCIA_CSR(m) + 0x300)
|
|
|
+#define MCPCIA_PERF_CONT(m) (MCPCIA_CSR(m) + 0x340)
|
|
|
+
|
|
|
+/*
|
|
|
+ * Diagnostic Registers
|
|
|
+ */
|
|
|
+#define MCPCIA_CAP_DIAG(m) (MCPCIA_CSR(m) + 0x700)
|
|
|
+#define MCPCIA_TOP_OF_MEM(m) (MCPCIA_CSR(m) + 0x7C0)
|
|
|
+
|
|
|
+/*
|
|
|
+ * Error registers
|
|
|
+ */
|
|
|
+#define MCPCIA_MC_ERR0(m) (MCPCIA_CSR(m) + 0x800)
|
|
|
+#define MCPCIA_MC_ERR1(m) (MCPCIA_CSR(m) + 0x840)
|
|
|
+#define MCPCIA_CAP_ERR(m) (MCPCIA_CSR(m) + 0x880)
|
|
|
+#define MCPCIA_PCI_ERR1(m) (MCPCIA_CSR(m) + 0x1040)
|
|
|
+#define MCPCIA_MDPA_STAT(m) (MCPCIA_CSR(m) + 0x4000)
|
|
|
+#define MCPCIA_MDPA_SYN(m) (MCPCIA_CSR(m) + 0x4040)
|
|
|
+#define MCPCIA_MDPA_DIAG(m) (MCPCIA_CSR(m) + 0x4080)
|
|
|
+#define MCPCIA_MDPB_STAT(m) (MCPCIA_CSR(m) + 0x8000)
|
|
|
+#define MCPCIA_MDPB_SYN(m) (MCPCIA_CSR(m) + 0x8040)
|
|
|
+#define MCPCIA_MDPB_DIAG(m) (MCPCIA_CSR(m) + 0x8080)
|
|
|
+
|
|
|
+/*
|
|
|
+ * PCI Address Translation Registers.
|
|
|
+ */
|
|
|
+#define MCPCIA_SG_TBIA(m) (MCPCIA_CSR(m) + 0x1300)
|
|
|
+#define MCPCIA_HBASE(m) (MCPCIA_CSR(m) + 0x1340)
|
|
|
+
|
|
|
+#define MCPCIA_W0_BASE(m) (MCPCIA_CSR(m) + 0x1400)
|
|
|
+#define MCPCIA_W0_MASK(m) (MCPCIA_CSR(m) + 0x1440)
|
|
|
+#define MCPCIA_T0_BASE(m) (MCPCIA_CSR(m) + 0x1480)
|
|
|
+
|
|
|
+#define MCPCIA_W1_BASE(m) (MCPCIA_CSR(m) + 0x1500)
|
|
|
+#define MCPCIA_W1_MASK(m) (MCPCIA_CSR(m) + 0x1540)
|
|
|
+#define MCPCIA_T1_BASE(m) (MCPCIA_CSR(m) + 0x1580)
|
|
|
+
|
|
|
+#define MCPCIA_W2_BASE(m) (MCPCIA_CSR(m) + 0x1600)
|
|
|
+#define MCPCIA_W2_MASK(m) (MCPCIA_CSR(m) + 0x1640)
|
|
|
+#define MCPCIA_T2_BASE(m) (MCPCIA_CSR(m) + 0x1680)
|
|
|
+
|
|
|
+#define MCPCIA_W3_BASE(m) (MCPCIA_CSR(m) + 0x1700)
|
|
|
+#define MCPCIA_W3_MASK(m) (MCPCIA_CSR(m) + 0x1740)
|
|
|
+#define MCPCIA_T3_BASE(m) (MCPCIA_CSR(m) + 0x1780)
|
|
|
+
|
|
|
+/* Hack! Only words for bus 0. */
|
|
|
+
|
|
|
+#ifndef MCPCIA_ONE_HAE_WINDOW
|
|
|
+#define MCPCIA_HAE_ADDRESS MCPCIA_HAE_MEM(4)
|
|
|
+#endif
|
|
|
+#define MCPCIA_IACK_SC _MCPCIA_IACK_SC(4)
|
|
|
+
|
|
|
+/*
|
|
|
+ * The canonical non-remaped I/O and MEM addresses have these values
|
|
|
+ * subtracted out. This is arranged so that folks manipulating ISA
|
|
|
+ * devices can use their familiar numbers and have them map to bus 0.
|
|
|
+ */
|
|
|
+
|
|
|
+#define MCPCIA_IO_BIAS MCPCIA_IO(4)
|
|
|
+#define MCPCIA_MEM_BIAS MCPCIA_DENSE(4)
|
|
|
+
|