set_irq_chained_handler(cascade, pseries_8259_cascade);
 }
 
-static struct device_node *cpuid_to_of_node(int cpu)
-{
-       struct device_node *np;
-       u32 hcpuid = get_hard_smp_processor_id(cpu);
-
-       for_each_node_by_type(np, "cpu") {
-               int i, len;
-               const u32 *intserv;
-
-               intserv = of_get_property(np, "ibm,ppc-interrupt-server#s",
-                                       &len);
-
-               if (!intserv)
-                       intserv = of_get_property(np, "reg", &len);
-
-               i = len / sizeof(u32);
-
-               while (i--)
-                       if (intserv[i] == hcpuid)
-                               return np;
-       }
-
-       return NULL;
-}
-
 void __init xics_init_IRQ(void)
 {
        int i, j;
        xics_init_host();
 
        /* Find the server numbers for the boot cpu. */
-       np = cpuid_to_of_node(boot_cpuid);
+       np = of_get_cpu_node(boot_cpuid, NULL);
        BUG_ON(!np);
        ireg = of_get_property(np, "ibm,ppc-interrupt-gserver#s", &ilen);
        if (!ireg)