Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
mips
pci
fixup-pmcmsp.c
Go to the documentation of this file.
1
/*
2
* PMC-Sierra MSP board specific pci fixups.
3
*
4
* Copyright 2001 MontaVista Software Inc.
5
* Copyright 2005-2007 PMC-Sierra, Inc
6
*
7
* Author: MontaVista Software, Inc.
8
*
[email protected]
or
[email protected]
9
*
10
* This program is free software; you can redistribute it and/or modify it
11
* under the terms of the GNU General Public License as published by the
12
* Free Software Foundation; either version 2 of the License, or (at your
13
* option) any later version.
14
*
15
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
16
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
17
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
18
* NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
19
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
20
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
21
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
22
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25
*
26
* You should have received a copy of the GNU General Public License along
27
* with this program; if not, write to the Free Software Foundation, Inc.,
28
* 675 Mass Ave, Cambridge, MA 02139, USA.
29
*/
30
31
#ifdef CONFIG_PCI
32
33
#include <linux/types.h>
34
#include <linux/pci.h>
35
#include <linux/kernel.h>
36
#include <
linux/init.h
>
37
38
#include <asm/byteorder.h>
39
40
#include <
msp_pci.h
>
41
#include <
msp_cic_int.h
>
42
43
/* PCI interrupt pins */
44
#define IRQ4 MSP_INT_EXT4
45
#define IRQ5 MSP_INT_EXT5
46
#define IRQ6 MSP_INT_EXT6
47
48
#if defined(CONFIG_PMC_MSP7120_GW)
49
/* Garibaldi Board IRQ wiring to PCI slots */
50
static
char
irq_tab[][5]
__initdata
= {
51
/* INTA INTB INTC INTD */
52
{0, 0, 0, 0, 0 },
/* (AD[0]): Unused */
53
{0, 0, 0, 0, 0 },
/* (AD[1]): Unused */
54
{0, 0, 0, 0, 0 },
/* (AD[2]): Unused */
55
{0, 0, 0, 0, 0 },
/* (AD[3]): Unused */
56
{0, 0, 0, 0, 0 },
/* (AD[4]): Unused */
57
{0, 0, 0, 0, 0 },
/* (AD[5]): Unused */
58
{0, 0, 0, 0, 0 },
/* (AD[6]): Unused */
59
{0, 0, 0, 0, 0 },
/* (AD[7]): Unused */
60
{0, 0, 0, 0, 0 },
/* (AD[8]): Unused */
61
{0, 0, 0, 0, 0 },
/* (AD[9]): Unused */
62
{0, 0, 0, 0, 0 },
/* 0 (AD[10]): Unused */
63
{0, 0, 0, 0, 0 },
/* 1 (AD[11]): Unused */
64
{0, 0, 0, 0, 0 },
/* 2 (AD[12]): Unused */
65
{0, 0, 0, 0, 0 },
/* 3 (AD[13]): Unused */
66
{0, 0, 0, 0, 0 },
/* 4 (AD[14]): Unused */
67
{0, 0, 0, 0, 0 },
/* 5 (AD[15]): Unused */
68
{0, 0, 0, 0, 0 },
/* 6 (AD[16]): Unused */
69
{0, 0, 0, 0, 0 },
/* 7 (AD[17]): Unused */
70
{0, 0, 0, 0, 0 },
/* 8 (AD[18]): Unused */
71
{0, 0, 0, 0, 0 },
/* 9 (AD[19]): Unused */
72
{0, 0, 0, 0, 0 },
/* 10 (AD[20]): Unused */
73
{0, 0, 0, 0, 0 },
/* 11 (AD[21]): Unused */
74
{0, 0, 0, 0, 0 },
/* 12 (AD[22]): Unused */
75
{0, 0, 0, 0, 0 },
/* 13 (AD[23]): Unused */
76
{0, 0, 0, 0, 0 },
/* 14 (AD[24]): Unused */
77
{0, 0, 0, 0, 0 },
/* 15 (AD[25]): Unused */
78
{0, 0, 0, 0, 0 },
/* 16 (AD[26]): Unused */
79
{0, 0, 0, 0, 0 },
/* 17 (AD[27]): Unused */
80
{0,
IRQ4
,
IRQ4
, 0, 0 },
/* 18 (AD[28]): slot 0 */
81
{0, 0, 0, 0, 0 },
/* 19 (AD[29]): Unused */
82
{0,
IRQ5
,
IRQ5
, 0, 0 },
/* 20 (AD[30]): slot 1 */
83
{0,
IRQ6
,
IRQ6
, 0, 0 }
/* 21 (AD[31]): slot 2 */
84
};
85
86
#elif defined(CONFIG_PMC_MSP7120_EVAL)
87
88
/* MSP7120 Eval Board IRQ wiring to PCI slots */
89
static
char
irq_tab[][5]
__initdata
= {
90
/* INTA INTB INTC INTD */
91
{0, 0, 0, 0, 0 },
/* (AD[0]): Unused */
92
{0, 0, 0, 0, 0 },
/* (AD[1]): Unused */
93
{0, 0, 0, 0, 0 },
/* (AD[2]): Unused */
94
{0, 0, 0, 0, 0 },
/* (AD[3]): Unused */
95
{0, 0, 0, 0, 0 },
/* (AD[4]): Unused */
96
{0, 0, 0, 0, 0 },
/* (AD[5]): Unused */
97
{0, 0, 0, 0, 0 },
/* (AD[6]): Unused */
98
{0, 0, 0, 0, 0 },
/* (AD[7]): Unused */
99
{0, 0, 0, 0, 0 },
/* (AD[8]): Unused */
100
{0, 0, 0, 0, 0 },
/* (AD[9]): Unused */
101
{0, 0, 0, 0, 0 },
/* 0 (AD[10]): Unused */
102
{0, 0, 0, 0, 0 },
/* 1 (AD[11]): Unused */
103
{0, 0, 0, 0, 0 },
/* 2 (AD[12]): Unused */
104
{0, 0, 0, 0, 0 },
/* 3 (AD[13]): Unused */
105
{0, 0, 0, 0, 0 },
/* 4 (AD[14]): Unused */
106
{0, 0, 0, 0, 0 },
/* 5 (AD[15]): Unused */
107
{0,
IRQ6
,
IRQ6
, 0, 0 },
/* 6 (AD[16]): slot 3 (mini) */
108
{0,
IRQ5
,
IRQ5
, 0, 0 },
/* 7 (AD[17]): slot 2 (mini) */
109
{0,
IRQ4
,
IRQ4
,
IRQ4
, IRQ4},
/* 8 (AD[18]): slot 0 (PCI) */
110
{0,
IRQ5
,
IRQ5
,
IRQ5
, IRQ5},
/* 9 (AD[19]): slot 1 (PCI) */
111
{0, 0, 0, 0, 0 },
/* 10 (AD[20]): Unused */
112
{0, 0, 0, 0, 0 },
/* 11 (AD[21]): Unused */
113
{0, 0, 0, 0, 0 },
/* 12 (AD[22]): Unused */
114
{0, 0, 0, 0, 0 },
/* 13 (AD[23]): Unused */
115
{0, 0, 0, 0, 0 },
/* 14 (AD[24]): Unused */
116
{0, 0, 0, 0, 0 },
/* 15 (AD[25]): Unused */
117
{0, 0, 0, 0, 0 },
/* 16 (AD[26]): Unused */
118
{0, 0, 0, 0, 0 },
/* 17 (AD[27]): Unused */
119
{0, 0, 0, 0, 0 },
/* 18 (AD[28]): Unused */
120
{0, 0, 0, 0, 0 },
/* 19 (AD[29]): Unused */
121
{0, 0, 0, 0, 0 },
/* 20 (AD[30]): Unused */
122
{0, 0, 0, 0, 0 }
/* 21 (AD[31]): Unused */
123
};
124
125
#else
126
127
/* Unknown board -- don't assign any IRQs */
128
static
char
irq_tab[][5]
__initdata
= {
129
/* INTA INTB INTC INTD */
130
{0, 0, 0, 0, 0 },
/* (AD[0]): Unused */
131
{0, 0, 0, 0, 0 },
/* (AD[1]): Unused */
132
{0, 0, 0, 0, 0 },
/* (AD[2]): Unused */
133
{0, 0, 0, 0, 0 },
/* (AD[3]): Unused */
134
{0, 0, 0, 0, 0 },
/* (AD[4]): Unused */
135
{0, 0, 0, 0, 0 },
/* (AD[5]): Unused */
136
{0, 0, 0, 0, 0 },
/* (AD[6]): Unused */
137
{0, 0, 0, 0, 0 },
/* (AD[7]): Unused */
138
{0, 0, 0, 0, 0 },
/* (AD[8]): Unused */
139
{0, 0, 0, 0, 0 },
/* (AD[9]): Unused */
140
{0, 0, 0, 0, 0 },
/* 0 (AD[10]): Unused */
141
{0, 0, 0, 0, 0 },
/* 1 (AD[11]): Unused */
142
{0, 0, 0, 0, 0 },
/* 2 (AD[12]): Unused */
143
{0, 0, 0, 0, 0 },
/* 3 (AD[13]): Unused */
144
{0, 0, 0, 0, 0 },
/* 4 (AD[14]): Unused */
145
{0, 0, 0, 0, 0 },
/* 5 (AD[15]): Unused */
146
{0, 0, 0, 0, 0 },
/* 6 (AD[16]): Unused */
147
{0, 0, 0, 0, 0 },
/* 7 (AD[17]): Unused */
148
{0, 0, 0, 0, 0 },
/* 8 (AD[18]): Unused */
149
{0, 0, 0, 0, 0 },
/* 9 (AD[19]): Unused */
150
{0, 0, 0, 0, 0 },
/* 10 (AD[20]): Unused */
151
{0, 0, 0, 0, 0 },
/* 11 (AD[21]): Unused */
152
{0, 0, 0, 0, 0 },
/* 12 (AD[22]): Unused */
153
{0, 0, 0, 0, 0 },
/* 13 (AD[23]): Unused */
154
{0, 0, 0, 0, 0 },
/* 14 (AD[24]): Unused */
155
{0, 0, 0, 0, 0 },
/* 15 (AD[25]): Unused */
156
{0, 0, 0, 0, 0 },
/* 16 (AD[26]): Unused */
157
{0, 0, 0, 0, 0 },
/* 17 (AD[27]): Unused */
158
{0, 0, 0, 0, 0 },
/* 18 (AD[28]): Unused */
159
{0, 0, 0, 0, 0 },
/* 19 (AD[29]): Unused */
160
{0, 0, 0, 0, 0 },
/* 20 (AD[30]): Unused */
161
{0, 0, 0, 0, 0 }
/* 21 (AD[31]): Unused */
162
};
163
#endif
164
165
/*****************************************************************************
166
*
167
* FUNCTION: pcibios_plat_dev_init
168
* _________________________________________________________________________
169
*
170
* DESCRIPTION: Perform platform specific device initialization at
171
* pci_enable_device() time.
172
* None are needed for the MSP7120 PCI Controller.
173
*
174
* INPUTS: dev - structure describing the PCI device
175
*
176
* OUTPUTS: none
177
*
178
* RETURNS: PCIBIOS_SUCCESSFUL
179
*
180
****************************************************************************/
181
int
pcibios_plat_dev_init
(
struct
pci_dev
*
dev
)
182
{
183
return
PCIBIOS_SUCCESSFUL
;
184
}
185
186
/*****************************************************************************
187
*
188
* FUNCTION: pcibios_map_irq
189
* _________________________________________________________________________
190
*
191
* DESCRIPTION: Perform board supplied PCI IRQ mapping routine.
192
*
193
* INPUTS: dev - unused
194
* slot - PCI slot. Identified by which bit of the AD[] bus
195
* drives the IDSEL line. AD[10] is 0, AD[31] is
196
* slot 21.
197
* pin - numbered using the scheme of the PCI_INTERRUPT_PIN
198
* field of the config header.
199
*
200
* OUTPUTS: none
201
*
202
* RETURNS: IRQ number
203
*
204
****************************************************************************/
205
int
__init
pcibios_map_irq
(
const
struct
pci_dev
*
dev
,
u8
slot
,
u8
pin
)
206
{
207
#if !defined(CONFIG_PMC_MSP7120_GW) && !defined(CONFIG_PMC_MSP7120_EVAL)
208
printk
(
KERN_WARNING
"PCI: unknown board, no PCI IRQs assigned.\n"
);
209
#endif
210
printk
(
KERN_WARNING
"PCI: irq_tab returned %d for slot=%d pin=%d\n"
,
211
irq_tab[slot][pin], slot, pin);
212
213
return
irq_tab[
slot
][
pin
];
214
}
215
216
#endif
/* CONFIG_PCI */
Generated on Thu Jan 10 2013 13:11:57 for Linux Kernel by
1.8.2