|
@@ -579,7 +579,7 @@ static void xics_update_irq_servers(void)
|
|
|
int i, j;
|
|
|
struct device_node *np;
|
|
|
u32 ilen;
|
|
|
- const u32 *ireg, *isize;
|
|
|
+ const u32 *ireg;
|
|
|
u32 hcpuid;
|
|
|
|
|
|
/* Find the server numbers for the boot cpu. */
|
|
@@ -607,11 +607,6 @@ static void xics_update_irq_servers(void)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- /* get the bit size of server numbers */
|
|
|
- isize = of_get_property(np, "ibm,interrupt-server#-size", NULL);
|
|
|
- if (isize)
|
|
|
- interrupt_server_size = *isize;
|
|
|
-
|
|
|
of_node_put(np);
|
|
|
}
|
|
|
|
|
@@ -682,6 +677,7 @@ void __init xics_init_IRQ(void)
|
|
|
struct device_node *np;
|
|
|
u32 indx = 0;
|
|
|
int found = 0;
|
|
|
+ const u32 *isize;
|
|
|
|
|
|
ppc64_boot_msg(0x20, "XICS Init");
|
|
|
|
|
@@ -701,6 +697,26 @@ void __init xics_init_IRQ(void)
|
|
|
if (found == 0)
|
|
|
return;
|
|
|
|
|
|
+ /* get the bit size of server numbers */
|
|
|
+ found = 0;
|
|
|
+
|
|
|
+ for_each_compatible_node(np, NULL, "ibm,ppc-xics") {
|
|
|
+ isize = of_get_property(np, "ibm,interrupt-server#-size", NULL);
|
|
|
+
|
|
|
+ if (!isize)
|
|
|
+ continue;
|
|
|
+
|
|
|
+ if (!found) {
|
|
|
+ interrupt_server_size = *isize;
|
|
|
+ found = 1;
|
|
|
+ } else if (*isize != interrupt_server_size) {
|
|
|
+ printk(KERN_WARNING "XICS: "
|
|
|
+ "mismatched ibm,interrupt-server#-size\n");
|
|
|
+ interrupt_server_size = max(*isize,
|
|
|
+ interrupt_server_size);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
xics_update_irq_servers();
|
|
|
xics_init_host();
|
|
|
|