if (!(cmd->flags & CMD_ASYNC))
                lock_map_acquire_read(&trans->sync_cmd_lockdep_map);
 
-       if (!iwl_cmd_groupid(cmd->id))
+       if (trans->wide_cmd_header && !iwl_cmd_groupid(cmd->id))
                cmd->id = DEF_ID(cmd->id);
 
        ret = trans->ops->send_cmd(trans, cmd);
 
  * @hw_id_str: a string with info about HW ID. Set during transport allocation.
  * @pm_support: set to true in start_hw if link pm is supported
  * @ltr_enabled: set to true if the LTR is enabled
+ * @wide_cmd_header: true when ucode supports wide command header format
  * @num_rx_queues: number of RX queues allocated by the transport;
  *     the transport must set this before calling iwl_drv_start()
  * @iml_len: the length of the image loader
 
        const struct iwl_hcmd_arr *command_groups;
        int command_groups_size;
+       bool wide_cmd_header;
 
        u8 num_rx_queues;
 
 
                trans_cfg.rx_buf_size = rb_size_default;
        }
 
+       trans->wide_cmd_header = true;
        trans_cfg.bc_table_dword =
                mvm->trans->trans_cfg->device_family < IWL_DEVICE_FAMILY_AX210;
 
 
        const u8 *cmddata[IWL_MAX_CMD_TBS_PER_TFD];
        u16 cmdlen[IWL_MAX_CMD_TBS_PER_TFD];
 
+       if (WARN(!trans->wide_cmd_header &&
+                group_id > IWL_ALWAYS_LONG_GROUP,
+                "unsupported wide command %#x\n", cmd->id))
+               return -EINVAL;
+
        if (group_id != 0) {
                copy_size = sizeof(struct iwl_cmd_header_wide);
                cmd_size = sizeof(struct iwl_cmd_header_wide);