* @IWL_FW_INI_APPLY_POLICY_OVERRIDE_CFG: override trigger configuration
  * @IWL_FW_INI_APPLY_POLICY_OVERRIDE_DATA: override trigger data.
  *     Append otherwise
+ * @IWL_FW_INI_APPLY_POLICY_DUMP_COMPLETE_CMD: send cmd once dump collected
  */
 enum iwl_fw_ini_trigger_apply_policy {
        IWL_FW_INI_APPLY_POLICY_MATCH_TIME_POINT        = BIT(0),
        IWL_FW_INI_APPLY_POLICY_OVERRIDE_REGIONS        = BIT(8),
        IWL_FW_INI_APPLY_POLICY_OVERRIDE_CFG            = BIT(9),
        IWL_FW_INI_APPLY_POLICY_OVERRIDE_DATA           = BIT(10),
+       IWL_FW_INI_APPLY_POLICY_DUMP_COMPLETE_CMD       = BIT(16),
 };
 
 /**
 
 /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
 /*
- * Copyright (C) 2005-2014, 2018-2020 Intel Corporation
+ * Copyright (C) 2005-2014, 2018-2022 Intel Corporation
  * Copyright (C) 2013-2015 Intel Mobile Communications GmbH
  * Copyright (C) 2016-2017 Intel Deutschland GmbH
  */
         * &struct iwl_buf_alloc_cmd
         */
        BUFFER_ALLOCATION = 0x8,
+       /**
+        * @FW_DUMP_COMPLETE_CMD:
+        * sends command to fw once dump collection completed
+        * &struct iwl_dbg_dump_complete_cmd
+        */
+       FW_DUMP_COMPLETE_CMD = 0xB,
        /**
         * @MFU_ASSERT_DUMP_NTF:
         * &struct iwl_mfu_assert_dump_notif
        __le32 enabled_severities;
 } __packed; /* DEBUG_HOST_EVENT_CFG_CMD_API_S_VER_1 */
 
+/**
+ * struct iwl_dbg_dump_complete_cmd - dump complete cmd
+ *
+ * @tp: timepoint whose dump has completed
+ * @tp_data: timepoint data
+ */
+struct iwl_dbg_dump_complete_cmd {
+       __le32 tp;
+       __le32 tp_data;
+} __packed; /* FW_DUMP_COMPLETE_CMD_API_S_VER_1 */
+
 #endif /* __iwl_fw_api_debug_h__ */
 
 }
 IWL_EXPORT_SYMBOL(iwl_fw_start_dbg_conf);
 
+void iwl_send_dbg_dump_complete_cmd(struct iwl_fw_runtime *fwrt,
+                                   u32 timepoint,
+                                   u32 timepoint_data)
+{
+       struct iwl_dbg_dump_complete_cmd hcmd_data;
+       struct iwl_host_cmd hcmd = {
+               .id = WIDE_ID(DEBUG_GROUP, FW_DUMP_COMPLETE_CMD),
+               .data[0] = &hcmd_data,
+               .len[0] = sizeof(hcmd_data),
+       };
+
+       if (test_bit(STATUS_FW_ERROR, &fwrt->trans->status))
+               return;
+
+       if (fw_has_capa(&fwrt->fw->ucode_capa,
+                       IWL_UCODE_TLV_CAPA_DUMP_COMPLETE_SUPPORT)) {
+               hcmd_data.tp = cpu_to_le32(timepoint);
+               hcmd_data.tp_data = cpu_to_le32(timepoint_data);
+               iwl_trans_send_cmd(fwrt->trans, &hcmd);
+       }
+}
+
 /* this function assumes dump_start was called beforehand and dump_end will be
  * called afterwards
  */
        struct iwl_fw_dbg_params params = {0};
        struct iwl_fwrt_dump_data *dump_data =
                &fwrt->dump.wks[wk_idx].dump_data;
-
+       u32 policy;
+       u32 time_point;
        if (!test_bit(wk_idx, &fwrt->dump.active_wks))
                return;
 
 
        iwl_fw_dbg_stop_restart_recording(fwrt, ¶ms, false);
 
+       policy = le32_to_cpu(dump_data->trig->apply_policy);
+       time_point = le32_to_cpu(dump_data->trig->time_point);
+
+       if (policy & IWL_FW_INI_APPLY_POLICY_DUMP_COMPLETE_CMD) {
+               IWL_DEBUG_FW_INFO(fwrt, "WRT: sending dump complete\n");
+               iwl_send_dbg_dump_complete_cmd(fwrt, time_point, 0);
+       }
        if (fwrt->trans->dbg.last_tp_resetfw == IWL_FW_INI_RESET_FW_MODE_STOP_FW_ONLY)
                iwl_force_nmi(fwrt->trans);
 
 
 /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
 /*
- * Copyright (C) 2005-2014, 2018-2019, 2021 Intel Corporation
+ * Copyright (C) 2005-2014, 2018-2019, 2021-2022 Intel Corporation
  * Copyright (C) 2013-2015 Intel Mobile Communications GmbH
  * Copyright (C) 2015-2017 Intel Deutschland GmbH
  */
 }
 
 void iwl_fwrt_dump_error_logs(struct iwl_fw_runtime *fwrt);
+void iwl_send_dbg_dump_complete_cmd(struct iwl_fw_runtime *fwrt,
+                                   u32 timepoint,
+                                   u32 timepoint_data);
 #endif  /* __iwl_fw_dbg_h__ */
 
  *     reset flow
  * @IWL_UCODE_TLV_CAPA_PASSIVE_6GHZ_SCAN: Support for passive scan on 6GHz PSC
  *      channels even when these are not enabled.
+ * @IWL_UCODE_TLV_CAPA_DUMP_COMPLETE_SUPPORT: Support for indicating dump collection
+ *     complete to FW.
  *
  * @NUM_IWL_UCODE_TLV_CAPA: number of bits used
  */
 
        IWL_UCODE_TLV_CAPA_BIGTK_SUPPORT                = (__force iwl_ucode_tlv_capa_t)100,
        IWL_UCODE_TLV_CAPA_DRAM_FRAG_SUPPORT            = (__force iwl_ucode_tlv_capa_t)104,
+       IWL_UCODE_TLV_CAPA_DUMP_COMPLETE_SUPPORT        = (__force iwl_ucode_tlv_capa_t)105,
 
 #ifdef __CHECKER__
        /* sparse says it cannot increment the previous enum member */