#define OPAL_SET_POWER_SHIFT_RATIO             155
 #define OPAL_SENSOR_GROUP_CLEAR                        156
 #define OPAL_PCI_SET_P2P                       157
+#define OPAL_QUIESCE                           158
 #define OPAL_NPU_SPA_SETUP                     159
 #define OPAL_NPU_SPA_CLEAR_CACHE               160
 #define OPAL_NPU_TL_SET                                161
 #define OPAL_PCI_SET_PBCQ_TUNNEL_BAR           165
 #define OPAL_LAST                              165
 
+#define QUIESCE_HOLD                   1 /* Spin all calls at entry */
+#define QUIESCE_REJECT                 2 /* Fail all calls with OPAL_BUSY */
+#define QUIESCE_LOCK_BREAK             3 /* Set to ignore locks. */
+#define QUIESCE_RESUME                 4 /* Un-quiesce */
+#define QUIESCE_RESUME_FAST_REBOOT     5 /* Un-quiesce, fast reboot */
+
 /* Device tree flags */
 
 /*
 
 int opal_sensor_group_clear(u32 group_hndl, int token);
 
 s64 opal_signal_system_reset(s32 cpu);
+s64 opal_quiesce(u64 shutdown_type, s32 cpu);
 
 /* Internal functions */
 extern int early_init_dt_scan_opal(unsigned long node, const char *uname,
 
 OPAL_CALL(opal_get_power_shift_ratio,          OPAL_GET_POWER_SHIFT_RATIO);
 OPAL_CALL(opal_set_power_shift_ratio,          OPAL_SET_POWER_SHIFT_RATIO);
 OPAL_CALL(opal_sensor_group_clear,             OPAL_SENSOR_GROUP_CLEAR);
+OPAL_CALL(opal_quiesce,                                OPAL_QUIESCE);
 OPAL_CALL(opal_npu_spa_setup,                  OPAL_NPU_SPA_SETUP);
 OPAL_CALL(opal_npu_spa_clear_cache,            OPAL_NPU_SPA_CLEAR_CACHE);
 OPAL_CALL(opal_npu_tl_set,                     OPAL_NPU_TL_SET);
 
        int64_t rc;
 
        if (cpu >= 0) {
-               rc = opal_signal_system_reset(get_hard_smp_processor_id(cpu));
+               int h = get_hard_smp_processor_id(cpu);
+
+               if (opal_check_token(OPAL_QUIESCE))
+                       opal_quiesce(QUIESCE_HOLD, h);
+
+               rc = opal_signal_system_reset(h);
+
+               if (opal_check_token(OPAL_QUIESCE))
+                       opal_quiesce(QUIESCE_RESUME, h);
+
                if (rc != OPAL_SUCCESS)
                        return 0;
                return 1;
                bool success = true;
                int c;
 
+               if (opal_check_token(OPAL_QUIESCE))
+                       opal_quiesce(QUIESCE_HOLD, -1);
 
                /*
                 * We do not use broadcasts (yet), because it's not clear
                        if (rc != OPAL_SUCCESS)
                                success = false;
                }
+
+               if (opal_check_token(OPAL_QUIESCE))
+                       opal_quiesce(QUIESCE_RESUME, -1);
+
                if (success)
                        return 1;