提交 1ef8014d 编写于 作者: S Sebastien Dugue 提交者: Paul Mackerras

powerpc/pseries: Fix getting the server number size

The 'ibm,interrupt-server#-size' properties are not in the cpu nodes,
which is where we currently look for them, but rather live under the
interrupt source controller nodes (which have "ibm,ppc-xics" in their
compatible property).

This moves the code that looks for the ibm,interrupt-server#-size
properties from xics_update_irq_servers() into xics_init_IRQ().

Also this adds a check for mismatched sizes across the interrupt
source controller nodes.  Not sure this is necessary as in this case
the firmware might be seriously busted.

This property only appears on POWER6 boxes and is only used in the
set-indicator(gqirm) call, and apparently firmware currently ignores
the value we pass.  Nevertheless we need to fix it in case future
firmware versions use it.
Signed-off-by: NSebastien Dugue <sebastien.dugue@bull.net>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Acked-by: NMilton Miller <miltonm@bga.com>
Signed-off-by: NPaul Mackerras <paulus@samba.org>
上级 691de576
......@@ -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();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册