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. */
                }
        }
 
-       /* 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);
 }
 
        struct device_node *np;
        u32 indx = 0;
        int found = 0;
+       const u32 *isize;
 
        ppc64_boot_msg(0x20, "XICS Init");
 
        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();