diff options
Diffstat (limited to 'arch/powerpc/sysdev/mpc8xx_pic.c')
-rw-r--r-- | arch/powerpc/sysdev/mpc8xx_pic.c | 30 |
1 files changed, 12 insertions, 18 deletions
diff --git a/arch/powerpc/sysdev/mpc8xx_pic.c b/arch/powerpc/sysdev/mpc8xx_pic.c index 2fc2bcd79b5e..7aa4ff5f5ec8 100644 --- a/arch/powerpc/sysdev/mpc8xx_pic.c +++ b/arch/powerpc/sysdev/mpc8xx_pic.c | |||
@@ -19,11 +19,10 @@ | |||
19 | 19 | ||
20 | extern int cpm_get_irq(struct pt_regs *regs); | 20 | extern int cpm_get_irq(struct pt_regs *regs); |
21 | 21 | ||
22 | static struct device_node *mpc8xx_pic_node; | ||
23 | static struct irq_host *mpc8xx_pic_host; | 22 | static struct irq_host *mpc8xx_pic_host; |
24 | #define NR_MASK_WORDS ((NR_IRQS + 31) / 32) | 23 | #define NR_MASK_WORDS ((NR_IRQS + 31) / 32) |
25 | static unsigned long ppc_cached_irq_mask[NR_MASK_WORDS]; | 24 | static unsigned long ppc_cached_irq_mask[NR_MASK_WORDS]; |
26 | static sysconf8xx_t *siu_reg; | 25 | static sysconf8xx_t __iomem *siu_reg; |
27 | 26 | ||
28 | int cpm_get_irq(struct pt_regs *regs); | 27 | int cpm_get_irq(struct pt_regs *regs); |
29 | 28 | ||
@@ -120,11 +119,6 @@ unsigned int mpc8xx_get_irq(void) | |||
120 | 119 | ||
121 | } | 120 | } |
122 | 121 | ||
123 | static int mpc8xx_pic_host_match(struct irq_host *h, struct device_node *node) | ||
124 | { | ||
125 | return mpc8xx_pic_node == node; | ||
126 | } | ||
127 | |||
128 | static int mpc8xx_pic_host_map(struct irq_host *h, unsigned int virq, | 122 | static int mpc8xx_pic_host_map(struct irq_host *h, unsigned int virq, |
129 | irq_hw_number_t hw) | 123 | irq_hw_number_t hw) |
130 | { | 124 | { |
@@ -158,7 +152,6 @@ static int mpc8xx_pic_host_xlate(struct irq_host *h, struct device_node *ct, | |||
158 | 152 | ||
159 | 153 | ||
160 | static struct irq_host_ops mpc8xx_pic_host_ops = { | 154 | static struct irq_host_ops mpc8xx_pic_host_ops = { |
161 | .match = mpc8xx_pic_host_match, | ||
162 | .map = mpc8xx_pic_host_map, | 155 | .map = mpc8xx_pic_host_map, |
163 | .xlate = mpc8xx_pic_host_xlate, | 156 | .xlate = mpc8xx_pic_host_xlate, |
164 | }; | 157 | }; |
@@ -166,32 +159,33 @@ static struct irq_host_ops mpc8xx_pic_host_ops = { | |||
166 | int mpc8xx_pic_init(void) | 159 | int mpc8xx_pic_init(void) |
167 | { | 160 | { |
168 | struct resource res; | 161 | struct resource res; |
169 | struct device_node *np = NULL; | 162 | struct device_node *np; |
170 | int ret; | 163 | int ret; |
171 | 164 | ||
172 | np = of_find_node_by_type(np, "mpc8xx-pic"); | 165 | np = of_find_compatible_node(NULL, NULL, "fsl,pq1-pic"); |
173 | 166 | if (np == NULL) | |
167 | np = of_find_node_by_type(NULL, "mpc8xx-pic"); | ||
174 | if (np == NULL) { | 168 | if (np == NULL) { |
175 | printk(KERN_ERR "Could not find open-pic node\n"); | 169 | printk(KERN_ERR "Could not find fsl,pq1-pic node\n"); |
176 | return -ENOMEM; | 170 | return -ENOMEM; |
177 | } | 171 | } |
178 | 172 | ||
179 | mpc8xx_pic_node = of_node_get(np); | ||
180 | |||
181 | ret = of_address_to_resource(np, 0, &res); | 173 | ret = of_address_to_resource(np, 0, &res); |
182 | of_node_put(np); | ||
183 | if (ret) | 174 | if (ret) |
184 | return ret; | 175 | goto out; |
185 | 176 | ||
186 | siu_reg = (void *)ioremap(res.start, res.end - res.start + 1); | 177 | siu_reg = ioremap(res.start, res.end - res.start + 1); |
187 | if (siu_reg == NULL) | 178 | if (siu_reg == NULL) |
188 | return -EINVAL; | 179 | return -EINVAL; |
189 | 180 | ||
190 | mpc8xx_pic_host = irq_alloc_host(IRQ_HOST_MAP_LINEAR, 64, &mpc8xx_pic_host_ops, 64); | 181 | mpc8xx_pic_host = irq_alloc_host(of_node_get(np), IRQ_HOST_MAP_LINEAR, |
182 | 64, &mpc8xx_pic_host_ops, 64); | ||
191 | if (mpc8xx_pic_host == NULL) { | 183 | if (mpc8xx_pic_host == NULL) { |
192 | printk(KERN_ERR "MPC8xx PIC: failed to allocate irq host!\n"); | 184 | printk(KERN_ERR "MPC8xx PIC: failed to allocate irq host!\n"); |
193 | ret = -ENOMEM; | 185 | ret = -ENOMEM; |
194 | } | 186 | } |
195 | 187 | ||
188 | out: | ||
189 | of_node_put(np); | ||
196 | return ret; | 190 | return ret; |
197 | } | 191 | } |