return -1;
 
        /* Do runtime PM to manage a hierarchical CPU toplogy. */
-       ct_irq_enter_irqson();
        if (s2idle)
                dev_pm_genpd_suspend(pd_dev);
        else
                pm_runtime_put_sync_suspend(pd_dev);
-       ct_irq_exit_irqson();
+
+       ct_idle_enter();
 
        state = psci_get_domain_state();
        if (!state)
 
        ret = psci_cpu_suspend_enter(state) ? -1 : idx;
 
-       ct_irq_enter_irqson();
+       ct_idle_exit();
+
        if (s2idle)
                dev_pm_genpd_resume(pd_dev);
        else
                pm_runtime_get_sync(pd_dev);
-       ct_irq_exit_irqson();
 
        cpu_pm_exit();
 
         * of a shared state for the domain, assumes the domain states are all
         * deeper states.
         */
+       drv->states[state_count - 1].flags |= CPUIDLE_FLAG_RCU_IDLE;
        drv->states[state_count - 1].enter = psci_enter_domain_idle_state;
        drv->states[state_count - 1].enter_s2idle = psci_enter_s2idle_domain_idle_state;
        psci_cpuidle_use_cpuhp = true;