li      r0,0
        mtspr   SPRN_LPID,r0
        mfspr   r3,SPRN_LPCR
+       ori     r3, r3, LPCR_PECEDH
        bl      __init_LPCR
        bl      __init_HFSCR
        bl      __init_tlb_power8
        li      r0,0
        mtspr   SPRN_LPID,r0
        mfspr   r3,SPRN_LPCR
+       ori     r3, r3, LPCR_PECEDH
        bl      __init_LPCR
        bl      __init_HFSCR
        bl      __init_tlb_power8
 
 #include <asm/opal.h>
 #include <asm/runlatch.h>
 #include <asm/code-patching.h>
+#include <asm/dbell.h>
 
 #include "powernv.h"
 
 {
        if (cpu != boot_cpuid)
                xics_setup_cpu();
+
+#ifdef CONFIG_PPC_DOORBELL
+       if (cpu_has_feature(CPU_FTR_DBELL))
+               doorbell_setup_this_cpu();
+#endif
 }
 
 int pnv_smp_kick_cpu(int nr)
 
 #include <asm/errno.h>
 #include <asm/xics.h>
 #include <asm/kvm_ppc.h>
+#include <asm/dbell.h>
 
 struct icp_ipl {
        union {
 static void icp_native_cause_ipi(int cpu, unsigned long data)
 {
        kvmppc_set_host_ipi(cpu, 1);
-       icp_native_set_qirr(cpu, IPI_PRIORITY);
+#ifdef CONFIG_PPC_DOORBELL
+       if (cpu_has_feature(CPU_FTR_DBELL) &&
+           (cpumask_test_cpu(cpu, cpu_sibling_mask(smp_processor_id()))))
+               doorbell_cause_ipi(cpu, data);
+       else
+#endif
+               icp_native_set_qirr(cpu, IPI_PRIORITY);
 }
 
 void xics_wake_cpu(int cpu)