/* Fusion */
        {PCI_DEVICE(PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_INVADER)},
        /* Invader */
+       {PCI_DEVICE(PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_FURY)},
+       /* Fury */
        {}
 };
 
        cmd->frame_count = 0;
        if ((instance->pdev->device != PCI_DEVICE_ID_LSI_FUSION) &&
            (instance->pdev->device != PCI_DEVICE_ID_LSI_INVADER) &&
+           (instance->pdev->device != PCI_DEVICE_ID_LSI_FURY) &&
            (reset_devices))
                cmd->frame->hdr.cmd = MFI_CMD_INVALID;
        list_add_tail(&cmd->list, &instance->cmd_pool);
        if ((instance->pdev->device == PCI_DEVICE_ID_LSI_SAS0073SKINNY) ||
            (instance->pdev->device == PCI_DEVICE_ID_LSI_SAS0071SKINNY) ||
            (instance->pdev->device == PCI_DEVICE_ID_LSI_FUSION) ||
-           (instance->pdev->device == PCI_DEVICE_ID_LSI_INVADER)) {
+           (instance->pdev->device == PCI_DEVICE_ID_LSI_INVADER) ||
+           (instance->pdev->device == PCI_DEVICE_ID_LSI_FURY)) {
                writel(MFI_STOP_ADP, &instance->reg_set->doorbell);
        } else {
                writel(MFI_STOP_ADP, &instance->reg_set->inbound_doorbell);
         * First wait for all commands to complete
         */
        if ((instance->pdev->device == PCI_DEVICE_ID_LSI_FUSION) ||
-           (instance->pdev->device == PCI_DEVICE_ID_LSI_INVADER))
+           (instance->pdev->device == PCI_DEVICE_ID_LSI_INVADER) ||
+           (instance->pdev->device == PCI_DEVICE_ID_LSI_FURY))
                ret = megasas_reset_fusion(scmd->device->host);
        else
                ret = megasas_generic_reset(scmd);
                                (instance->pdev->device ==
                                 PCI_DEVICE_ID_LSI_SAS0071SKINNY) ||
                                (instance->pdev->device ==
-                                PCI_DEVICE_ID_LSI_FUSION) ||
+                               PCI_DEVICE_ID_LSI_FUSION) ||
                                (instance->pdev->device ==
-                               PCI_DEVICE_ID_LSI_INVADER)) {
+                               PCI_DEVICE_ID_LSI_INVADER) ||
+                               (instance->pdev->device ==
+                               PCI_DEVICE_ID_LSI_FURY)) {
                                writel(
                                  MFI_INIT_CLEAR_HANDSHAKE|MFI_INIT_HOTPLUG,
                                  &instance->reg_set->doorbell);
                            (instance->pdev->device ==
                             PCI_DEVICE_ID_LSI_FUSION) ||
                            (instance->pdev->device ==
-                            PCI_DEVICE_ID_LSI_INVADER)) {
+                            PCI_DEVICE_ID_LSI_INVADER) ||
+                           (instance->pdev->device ==
+                            PCI_DEVICE_ID_LSI_FURY)) {
                                writel(MFI_INIT_HOTPLUG,
                                       &instance->reg_set->doorbell);
                        } else
                                (instance->pdev->device
                                        == PCI_DEVICE_ID_LSI_FUSION) ||
                                (instance->pdev->device
-                                       == PCI_DEVICE_ID_LSI_INVADER)) {
+                                       == PCI_DEVICE_ID_LSI_INVADER) ||
+                               (instance->pdev->device
+                                       == PCI_DEVICE_ID_LSI_FURY)) {
                                writel(MFI_RESET_FLAGS,
                                        &instance->reg_set->doorbell);
                                if ((instance->pdev->device ==
-                                   PCI_DEVICE_ID_LSI_FUSION) ||
-                                   (instance->pdev->device ==
-                                    PCI_DEVICE_ID_LSI_INVADER)) {
+                                       PCI_DEVICE_ID_LSI_FUSION) ||
+                                       (instance->pdev->device ==
+                                       PCI_DEVICE_ID_LSI_INVADER) ||
+                                       (instance->pdev->device ==
+                                       PCI_DEVICE_ID_LSI_FURY)) {
                                        for (i = 0; i < (10 * 1000); i += 20) {
                                                if (readl(
                                                            &instance->
                cmd->frame->io.pad_0 = 0;
                if ((instance->pdev->device != PCI_DEVICE_ID_LSI_FUSION) &&
                    (instance->pdev->device != PCI_DEVICE_ID_LSI_INVADER) &&
+                       (instance->pdev->device != PCI_DEVICE_ID_LSI_FURY) &&
                    (reset_devices))
                        cmd->frame->hdr.cmd = MFI_CMD_INVALID;
        }
        switch (instance->pdev->device) {
        case PCI_DEVICE_ID_LSI_FUSION:
        case PCI_DEVICE_ID_LSI_INVADER:
+       case PCI_DEVICE_ID_LSI_FURY:
                instance->instancet = &megasas_instance_template_fusion;
                break;
        case PCI_DEVICE_ID_LSI_SAS1078R:
        if (msix_enable && !msix_disable) {
                /* Check max MSI-X vectors */
                if ((instance->pdev->device == PCI_DEVICE_ID_LSI_FUSION) ||
-                   (instance->pdev->device == PCI_DEVICE_ID_LSI_INVADER)) {
+                       (instance->pdev->device == PCI_DEVICE_ID_LSI_INVADER) ||
+                       (instance->pdev->device == PCI_DEVICE_ID_LSI_FURY)) {
                        instance->msix_vectors = (readl(&instance->reg_set->
                                                        outbound_scratch_pad_2
                                                          ) & 0x1F) + 1;
 
        /* Fusion only supports host reset */
        if ((instance->pdev->device == PCI_DEVICE_ID_LSI_FUSION) ||
-           (instance->pdev->device == PCI_DEVICE_ID_LSI_INVADER)) {
+           (instance->pdev->device == PCI_DEVICE_ID_LSI_INVADER) ||
+           (instance->pdev->device == PCI_DEVICE_ID_LSI_FURY)) {
                host->hostt->eh_device_reset_handler = NULL;
                host->hostt->eh_bus_reset_handler = NULL;
        }
        switch (instance->pdev->device) {
        case PCI_DEVICE_ID_LSI_FUSION:
        case PCI_DEVICE_ID_LSI_INVADER:
+       case PCI_DEVICE_ID_LSI_FURY:
        {
                struct fusion_context *fusion;
 
        instance->disableOnlineCtrlReset = 1;
 
        if ((instance->pdev->device == PCI_DEVICE_ID_LSI_FUSION) ||
-           (instance->pdev->device == PCI_DEVICE_ID_LSI_INVADER))
+           (instance->pdev->device == PCI_DEVICE_ID_LSI_INVADER) ||
+           (instance->pdev->device == PCI_DEVICE_ID_LSI_FURY))
                INIT_WORK(&instance->work_init, megasas_fusion_ocr_wq);
        else
                INIT_WORK(&instance->work_init, process_fw_state_change_wq);
                free_irq(instance->pdev->irq, &instance->irq_context[0]);
 fail_irq:
        if ((instance->pdev->device == PCI_DEVICE_ID_LSI_FUSION) ||
-           (instance->pdev->device == PCI_DEVICE_ID_LSI_INVADER))
+           (instance->pdev->device == PCI_DEVICE_ID_LSI_INVADER) ||
+           (instance->pdev->device == PCI_DEVICE_ID_LSI_FURY))
                megasas_release_fusion(instance);
        else
                megasas_release_mfi(instance);
        switch (instance->pdev->device) {
        case PCI_DEVICE_ID_LSI_FUSION:
        case PCI_DEVICE_ID_LSI_INVADER:
+       case PCI_DEVICE_ID_LSI_FURY:
        {
                megasas_reset_reply_desc(instance);
                if (megasas_ioc_init_fusion(instance)) {
        switch (instance->pdev->device) {
        case PCI_DEVICE_ID_LSI_FUSION:
        case PCI_DEVICE_ID_LSI_INVADER:
+       case PCI_DEVICE_ID_LSI_FURY:
                megasas_release_fusion(instance);
                for (i = 0; i < 2 ; i++)
                        if (fusion->ld_map[i])
 
 
        fusion = instance->ctrl_context;
 
-       if (instance->pdev->device == PCI_DEVICE_ID_LSI_INVADER) {
+       if ((instance->pdev->device == PCI_DEVICE_ID_LSI_INVADER) ||
+               (instance->pdev->device == PCI_DEVICE_ID_LSI_FURY)) {
                struct MPI25_IEEE_SGE_CHAIN64 *sgl_ptr_end = sgl_ptr;
                sgl_ptr_end += fusion->max_sge_in_main_msg - 1;
                sgl_ptr_end->Flags = 0;
                sgl_ptr->Length = sg_dma_len(os_sgl);
                sgl_ptr->Address = sg_dma_address(os_sgl);
                sgl_ptr->Flags = 0;
-               if (instance->pdev->device == PCI_DEVICE_ID_LSI_INVADER) {
+               if ((instance->pdev->device == PCI_DEVICE_ID_LSI_INVADER) ||
+                       (instance->pdev->device == PCI_DEVICE_ID_LSI_FURY)) {
                        if (i == sge_count - 1)
                                sgl_ptr->Flags = IEEE_SGE_FLAGS_END_OF_LIST;
                }
                    (sge_count > fusion->max_sge_in_main_msg)) {
 
                        struct MPI25_IEEE_SGE_CHAIN64 *sg_chain;
-                       if (instance->pdev->device ==
-                           PCI_DEVICE_ID_LSI_INVADER) {
+                       if ((instance->pdev->device ==
+                               PCI_DEVICE_ID_LSI_INVADER) ||
+                               (instance->pdev->device ==
+                               PCI_DEVICE_ID_LSI_FURY)) {
                                if ((cmd->io_request->IoFlags &
                                MPI25_SAS_DEVICE0_FLAGS_ENABLED_FAST_PATH) !=
                                MPI25_SAS_DEVICE0_FLAGS_ENABLED_FAST_PATH)
                        sg_chain = sgl_ptr;
                        /* Prepare chain element */
                        sg_chain->NextChainOffset = 0;
-                       if (instance->pdev->device ==
-                           PCI_DEVICE_ID_LSI_INVADER)
+                       if ((instance->pdev->device ==
+                               PCI_DEVICE_ID_LSI_INVADER) ||
+                               (instance->pdev->device ==
+                               PCI_DEVICE_ID_LSI_FURY))
                                sg_chain->Flags = IEEE_SGE_FLAGS_CHAIN_ELEMENT;
                        else
                                sg_chain->Flags =
                cmd->request_desc->SCSIIO.RequestFlags =
                        (MPI2_REQ_DESCRIPT_FLAGS_HIGH_PRIORITY
                         << MEGASAS_REQ_DESCRIPT_FLAGS_TYPE_SHIFT);
-               if (instance->pdev->device == PCI_DEVICE_ID_LSI_INVADER) {
+               if ((instance->pdev->device == PCI_DEVICE_ID_LSI_INVADER) ||
+                       (instance->pdev->device == PCI_DEVICE_ID_LSI_FURY)) {
                        if (io_request->RaidContext.regLockFlags ==
                            REGION_TYPE_UNUSED)
                                cmd->request_desc->SCSIIO.RequestFlags =
                cmd->request_desc->SCSIIO.RequestFlags =
                        (MEGASAS_REQ_DESCRIPT_FLAGS_LD_IO
                         << MEGASAS_REQ_DESCRIPT_FLAGS_TYPE_SHIFT);
-               if (instance->pdev->device == PCI_DEVICE_ID_LSI_INVADER) {
+               if ((instance->pdev->device == PCI_DEVICE_ID_LSI_INVADER) ||
+                       (instance->pdev->device == PCI_DEVICE_ID_LSI_FURY)) {
                        if (io_request->RaidContext.regLockFlags ==
                            REGION_TYPE_UNUSED)
                                cmd->request_desc->SCSIIO.RequestFlags =
        fusion = instance->ctrl_context;
        io_req = cmd->io_request;
 
-       if (instance->pdev->device == PCI_DEVICE_ID_LSI_INVADER) {
+       if ((instance->pdev->device == PCI_DEVICE_ID_LSI_INVADER) ||
+               (instance->pdev->device == PCI_DEVICE_ID_LSI_FURY)) {
                struct MPI25_IEEE_SGE_CHAIN64 *sgl_ptr_end =
                        (struct MPI25_IEEE_SGE_CHAIN64 *)&io_req->SGL;
                sgl_ptr_end += fusion->max_sge_in_main_msg - 1;