summaryrefslogtreecommitdiff
path: root/board/mpl/common/pci_parts.h
blob: 4193e9233c9233ee1ec68aa21ca14382925e7add (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
 /*
 * (C) Copyright 2001
 * Denis Peter, MPL AG Switzerland, d.peter@mpl.ch
 *
 * SPDX-License-Identifier:	GPL-2.0+
 */
#ifndef _PCI_PARTS_H_
#define _PCI_PARTS_H_


/* Board specific file containing:
 * - PCI Memory Mapping
 * - PCI IO Mapping
 * - PCI Interrupt Mapping
 */

/* PIP405 PCI INT Routing:
 *                      IRQ0  VECTOR
 * PIXX4 IDSEL  = AD16  INTA#  28 (Function 2 USB is INTD# = 31)
 * VGA   IDSEL  = AD17  INTB#  29
 * SCSI  IDSEL  = AD18  INTC#  30
 * PC104 IDSEL0 = AD20  INTA#  28
 * PC104 IDSEL1 = AD21  INTB#  29
 * PC104 IDSEL2 = AD22  INTC#  30
 * PC104 IDSEL3 = AD23  INTD#  31
 *
 * busdevfunc = EXXX XXXX BBBB BBBB DDDD DFFF RRRR RR00
 *              ^         ^         ^     ^   ^
 *             31        23        15    10   7
 * E = Enabled
 * B = Bussnumber
 * D = Devicenumber (Device0 = AD10)
 * F = Functionnumber
 * R = Registernumber
 *
 * Device = (busdevfunc>>11) + 10
 * Vector = devicenumber % 4 + 28
 *
 */
#define PCI_HIGHEST_ON_BOARD_ID	19
/*#define PCI_DEV_NUMBER(x)	(((x>>11) & 0x1f) + 10) */
#define PCI_IRQ_VECTOR(x)	((PCI_DEV(x) + 10) % 4) + 28


/* PCI Device List for PIP405 */

/* Mapping:
 * +-------------+------------+------------+--------------------------------+
 * | PCI MemAddr | PCI IOAddr | Local Addr | Device / Function              |
 * +-------------+------------+------------+--------------------------------+
 * |  0x00000000 |            | 0xA0000000 | ISA Memory (hard wired)        |
 * |  0x00FFFFFF |            | 0xA0FFFFFF |                                |
 * +-------------+------------+------------+--------------------------------+
 * |             | 0x00000000 | 0xE8000000 | ISA IO (hard wired)            |
 * |             | 0x0000FFFF | 0xE800FFFF |                                |
 * +-------------+------------+------------+--------------------------------+
 * |  0x80000000 |            | 0x80000000 | VGA Controller Memory          |
 * |  0x80FFFFFF |            | 0x80FFFFFF |                                |
 * +-------------+------------+------------+--------------------------------+
 * |  0x81000000 |            | 0x81000000 | SCSI Controller Memory         |
 * |  0x81FFFFFF |            | 0x81FFFFFF |                                |
 * +-------------+------------+------------+--------------------------------+
 */

struct pci_pip405_config_entry {
	int		index;	/* address */
	unsigned long	val;	/* value */
	int		width;	/* data size */
};

extern void pci_pip405_write_regs(struct pci_controller *,
				  pci_dev_t,
				  struct pci_config_table *);

/* PIIX4 ISA Bridge Function 0 */
static struct pci_pip405_config_entry piix4_isa_bridge_f0[] = {
	{PCI_CFG_PIIX4_SERIRQ,	0xD0,		1}, /* enable Continous SERIRQ Pin */
	{PCI_CFG_PIIX4_GENCFG,	0x00018041,	4}, /* enable SERIRQs, ISA, PNP, GPI11 */
	{PCI_CFG_PIIX4_TOM,	0xFE,		1}, /* Top of Memory		*/
	{PCI_CFG_PIIX4_XBCS,	0x02C4,		2}, /* disable all peri CS	*/
	{PCI_CFG_PIIX4_RTCCFG,	0x21,		1}, /* enable RTC		*/
#if defined(CONFIG_PIP405)
	{PCI_CFG_PIIX4_MBDMA,	0x82,		1}, /* set MBDMA0 to DMA 2	*/
	{PCI_CFG_PIIX4_MBDMA+1,	0x83,		1}, /* set MBDMA1 to DMA 3	*/
#endif
	{PCI_CFG_PIIX4_DLC,	0x0,		1}, /* disable passive release feature */
	{ }					    /* end of device table	*/
};

/* PIIX4 IDE Controller Function 1 */
static struct pci_pip405_config_entry piix4_ide_cntrl_f1[] = {
	{PCI_CFG_PIIX4_BMIBA,	0x0001000,	4}, /* set BMI to a valid address */
	{PCI_COMMAND,		0x0001,		2}, /* enable IO access	*/
#if !defined(CONFIG_MIP405T)
	{PCI_CFG_PIIX4_IDETIM,	0x80008000,	4}, /* enable Both IDE channels	*/
#else
	{PCI_CFG_PIIX4_IDETIM,	0x00008000,	4}, /* enable IDE channel0	*/
#endif
	{ }					    /* end of device table	*/
};

/* PIIX4 USB Controller Function 2 */
static struct pci_pip405_config_entry piix4_usb_cntrl_f2[] = {
#if !defined(CONFIG_MIP405T)
	{PCI_INTERRUPT_LINE,	31,		1}, /* Int vector = 31		*/
	{PCI_BASE_ADDRESS_4,	0x0000E001,	4}, /* Set IO Address to 0xe000 to 0xe01F */
	{PCI_LATENCY_TIMER,	0x80,		1}, /* Latency Timer 0x80	*/
	{0xC0,			0x2000,		2}, /* Legacy support		*/
	{PCI_COMMAND,		0x0005,		2}, /* enable IO access and Master */
#endif
	{ }					    /* end of device table	*/
};

/* PIIX4 Power Management Function 3 */
static struct pci_pip405_config_entry piix4_pmm_cntrl_f3[] = {
	{PCI_CFG_PIIX4_PMBA,	0x00004000,	4}, /* set PMBA to "valid" value */
	{PCI_CFG_PIIX4_SMBBA,	0x00005000,	4}, /* set SMBBA to "valid" value */
	{PCI_CFG_PIIX4_PMMISC,	0x01,		1}, /* enable PMBA IO access	*/
	{PCI_COMMAND,		0x0001,		2}, /* enable IO access	*/
	{ }					    /* end of device table	*/
};
/* PPC405 Dummy only used to prevent autosetup on this host bridge */
static struct pci_pip405_config_entry ppc405_dummy[] = {
	{ }					    /* end of device table	*/
};

void pci_405gp_setup_vga(struct pci_controller *hose, pci_dev_t dev,
			 struct pci_config_table *entry);


static struct pci_config_table pci_pip405_config_table[]={
	{PCI_VENDOR_ID_IBM,			/* 405 dummy */
	 PCI_DEVICE_ID_IBM_405GP,
	 PCI_ANY_ID,
	 PCI_ANY_ID, PCI_ANY_ID, 0,
	 pci_pip405_write_regs, {(unsigned long) ppc405_dummy}},

	{PCI_VENDOR_ID_INTEL,			/* PIIX4 ISA Bridge Function 0 */
	 PCI_DEVICE_ID_INTEL_82371AB_0,
	 PCI_ANY_ID,
	 PCI_ANY_ID, PCI_ANY_ID, 0,
	 pci_pip405_write_regs, {(unsigned long) piix4_isa_bridge_f0}},

	{PCI_VENDOR_ID_INTEL,			/* PIIX4 IDE Controller Function 1 */
	 PCI_DEVICE_ID_INTEL_82371AB,
	 PCI_ANY_ID,
	 PCI_ANY_ID, PCI_ANY_ID, 1,
	 pci_pip405_write_regs, {(unsigned long) piix4_ide_cntrl_f1}},

	{PCI_VENDOR_ID_INTEL,			/* PIIX4 USB Controller Function 2 */
	 PCI_DEVICE_ID_INTEL_82371AB_2,
	 PCI_ANY_ID,
	 PCI_ANY_ID, PCI_ANY_ID, 2,
	 pci_pip405_write_regs, {(unsigned long) piix4_usb_cntrl_f2}},

	{PCI_VENDOR_ID_INTEL,			/* PIIX4 USB Controller Function 3 */
	 PCI_DEVICE_ID_INTEL_82371AB_3,
	 PCI_ANY_ID,
	 PCI_ANY_ID, PCI_ANY_ID, 3,
	 pci_pip405_write_regs, {(unsigned long) piix4_pmm_cntrl_f3}},

	{PCI_ANY_ID,
	 PCI_ANY_ID,
	 PCI_CLASS_DISPLAY_VGA,
	 PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
	 pci_405gp_setup_vga},

	{PCI_ANY_ID,
	 PCI_ANY_ID,
	 PCI_CLASS_NOT_DEFINED_VGA,
	 PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
	 pci_405gp_setup_vga},

	{ }
};
#endif /* _PCI_PARTS_H_ */