Lines Matching refs:instance

60 extern void megasas_free_cmds(struct megasas_instance *instance);
62 *instance);
64 megasas_complete_cmd(struct megasas_instance *instance,
67 wait_and_poll(struct megasas_instance *instance, struct megasas_cmd *cmd,
71 megasas_return_cmd(struct megasas_instance *instance, struct megasas_cmd *cmd);
72 int megasas_alloc_cmds(struct megasas_instance *instance);
76 megasas_issue_polled(struct megasas_instance *instance,
79 megasas_check_and_restore_queue_depth(struct megasas_instance *instance);
81 int megasas_transition_to_ready(struct megasas_instance *instance, int ocr);
82 void megaraid_sas_kill_hba(struct megasas_instance *instance);
86 int megasas_sriov_start_heartbeat(struct megasas_instance *instance,
88 void megasas_start_timer(struct megasas_instance *instance,
101 megasas_enable_intr_fusion(struct megasas_instance *instance) in megasas_enable_intr_fusion() argument
104 regs = instance->reg_set; in megasas_enable_intr_fusion()
106 instance->mask_interrupts = 0; in megasas_enable_intr_fusion()
122 megasas_disable_intr_fusion(struct megasas_instance *instance) in megasas_disable_intr_fusion() argument
127 regs = instance->reg_set; in megasas_disable_intr_fusion()
128 instance->mask_interrupts = 1; in megasas_disable_intr_fusion()
162 *instance) in megasas_get_cmd_fusion()
166 (struct fusion_context *)instance->ctrl_context; in megasas_get_cmd_fusion()
188 inline void megasas_return_cmd_fusion(struct megasas_instance *instance, in megasas_return_cmd_fusion() argument
193 (struct fusion_context *)instance->ctrl_context; in megasas_return_cmd_fusion()
211 inline void megasas_return_mfi_mpt_pthr(struct megasas_instance *instance, in megasas_return_mfi_mpt_pthr() argument
222 spin_lock_irqsave(&instance->mfi_pool_lock, flags); in megasas_return_mfi_mpt_pthr()
223 megasas_return_cmd_fusion(instance, cmd_fusion); in megasas_return_mfi_mpt_pthr()
225 dev_err(&instance->pdev->dev, "Possible bug from %s %d\n", in megasas_return_mfi_mpt_pthr()
228 __megasas_return_cmd(instance, cmd_mfi); in megasas_return_mfi_mpt_pthr()
229 spin_unlock_irqrestore(&instance->mfi_pool_lock, flags); in megasas_return_mfi_mpt_pthr()
237 struct megasas_instance *instance) in megasas_teardown_frame_pool_fusion() argument
240 struct fusion_context *fusion = instance->ctrl_context; in megasas_teardown_frame_pool_fusion()
242 u16 max_cmd = instance->max_fw_cmds; in megasas_teardown_frame_pool_fusion()
284 megasas_free_cmds_fusion(struct megasas_instance *instance) in megasas_free_cmds_fusion() argument
287 struct fusion_context *fusion = instance->ctrl_context; in megasas_free_cmds_fusion()
296 max_cmds = instance->max_fw_cmds; in megasas_free_cmds_fusion()
300 dma_free_coherent(&instance->pdev->dev, req_sz, in megasas_free_cmds_fusion()
319 megasas_teardown_frame_pool_fusion(instance); in megasas_free_cmds_fusion()
337 static int megasas_create_frame_pool_fusion(struct megasas_instance *instance) in megasas_create_frame_pool_fusion() argument
345 fusion = instance->ctrl_context; in megasas_create_frame_pool_fusion()
346 max_cmd = instance->max_fw_cmds; in megasas_create_frame_pool_fusion()
355 instance->pdev, in megasas_create_frame_pool_fusion()
364 instance->pdev, in megasas_create_frame_pool_fusion()
394 megasas_teardown_frame_pool_fusion(instance); in megasas_create_frame_pool_fusion()
418 megasas_alloc_cmds_fusion(struct megasas_instance *instance) in megasas_alloc_cmds_fusion() argument
429 fusion = instance->ctrl_context; in megasas_alloc_cmds_fusion()
431 max_cmd = instance->max_fw_cmds; in megasas_alloc_cmds_fusion()
434 dma_alloc_coherent(&instance->pdev->dev, in megasas_alloc_cmds_fusion()
444 count = instance->msix_vectors > 0 ? instance->msix_vectors : 1; in megasas_alloc_cmds_fusion()
446 pci_pool_create("reply_frames pool", instance->pdev, in megasas_alloc_cmds_fusion()
472 pci_pool_create("io_request_frames pool", instance->pdev, in megasas_alloc_cmds_fusion()
505 max_cmd = instance->max_fw_cmds; in megasas_alloc_cmds_fusion()
539 cmd->instance = instance; in megasas_alloc_cmds_fusion()
553 if (megasas_create_frame_pool_fusion(instance)) { in megasas_alloc_cmds_fusion()
555 megasas_free_cmds_fusion(instance); in megasas_alloc_cmds_fusion()
566 dma_free_coherent(&instance->pdev->dev, fusion->request_alloc_sz, in megasas_alloc_cmds_fusion()
575 dma_free_coherent(&instance->pdev->dev, fusion->request_alloc_sz, in megasas_alloc_cmds_fusion()
590 wait_and_poll(struct megasas_instance *instance, struct megasas_cmd *cmd, in wait_and_poll() argument
599 fusion = instance->ctrl_context; in wait_and_poll()
610 megasas_return_mfi_mpt_pthr(instance, cmd, in wait_and_poll()
625 megasas_ioc_init_fusion(struct megasas_instance *instance) in megasas_ioc_init_fusion() argument
637 fusion = instance->ctrl_context; in megasas_ioc_init_fusion()
639 cmd = megasas_get_cmd(instance); in megasas_ioc_init_fusion()
648 dma_alloc_coherent(&instance->pdev->dev, in megasas_ioc_init_fusion()
670 IOCInitMessage->HostMSIxVectors = instance->msix_vectors; in megasas_ioc_init_fusion()
682 if ((instance->pdev->device == PCI_DEVICE_ID_LSI_INVADER) || in megasas_ioc_init_fusion()
683 (instance->pdev->device == PCI_DEVICE_ID_LSI_FURY)) in megasas_ioc_init_fusion()
713 instance->instancet->disable_intr(instance); in megasas_ioc_init_fusion()
716 if (readl(&instance->reg_set->doorbell) & 1) in megasas_ioc_init_fusion()
722 instance->instancet->fire_cmd(instance, req_desc.u.low, in megasas_ioc_init_fusion()
723 req_desc.u.high, instance->reg_set); in megasas_ioc_init_fusion()
725 wait_and_poll(instance, cmd, MFI_POLL_TIMEOUT_SECS); in megasas_ioc_init_fusion()
737 megasas_return_cmd(instance, cmd); in megasas_ioc_init_fusion()
739 dma_free_coherent(&instance->pdev->dev, in megasas_ioc_init_fusion()
762 megasas_get_ld_map_info(struct megasas_instance *instance) in megasas_get_ld_map_info() argument
772 cmd = megasas_get_cmd(instance); in megasas_get_ld_map_info()
779 fusion = instance->ctrl_context; in megasas_get_ld_map_info()
782 megasas_return_cmd(instance, cmd); in megasas_get_ld_map_info()
790 ci = (void *) fusion->ld_map[(instance->map_id & 1)]; in megasas_get_ld_map_info()
791 ci_h = fusion->ld_map_phys[(instance->map_id & 1)]; in megasas_get_ld_map_info()
795 megasas_return_cmd(instance, cmd); in megasas_get_ld_map_info()
802 dev_dbg(&instance->pdev->dev, in megasas_get_ld_map_info()
817 if (instance->ctrl_context && !instance->mask_interrupts) in megasas_get_ld_map_info()
818 ret = megasas_issue_blocked_cmd(instance, cmd, in megasas_get_ld_map_info()
821 ret = megasas_issue_polled(instance, cmd); in megasas_get_ld_map_info()
823 if (instance->ctrl_context && cmd->mpt_pthr_cmd_blocked) in megasas_get_ld_map_info()
824 megasas_return_mfi_mpt_pthr(instance, cmd, in megasas_get_ld_map_info()
827 megasas_return_cmd(instance, cmd); in megasas_get_ld_map_info()
833 megasas_get_map_info(struct megasas_instance *instance) in megasas_get_map_info() argument
835 struct fusion_context *fusion = instance->ctrl_context; in megasas_get_map_info()
838 if (!megasas_get_ld_map_info(instance)) { in megasas_get_map_info()
839 if (MR_ValidateMapInfo(instance)) { in megasas_get_map_info()
856 megasas_sync_map_info(struct megasas_instance *instance) in megasas_sync_map_info() argument
870 cmd = megasas_get_cmd(instance); in megasas_sync_map_info()
878 fusion = instance->ctrl_context; in megasas_sync_map_info()
881 megasas_return_cmd(instance, cmd); in megasas_sync_map_info()
885 map = fusion->ld_drv_map[instance->map_id & 1]; in megasas_sync_map_info()
896 fusion->ld_map[(instance->map_id - 1) & 1]; in megasas_sync_map_info()
899 ci_h = fusion->ld_map_phys[(instance->map_id - 1) & 1]; in megasas_sync_map_info()
924 instance->map_update_cmd = cmd; in megasas_sync_map_info()
926 instance->instancet->issue_dcmd(instance, cmd); in megasas_sync_map_info()
938 megasas_display_intel_branding(struct megasas_instance *instance) in megasas_display_intel_branding() argument
940 if (instance->pdev->subsystem_vendor != PCI_VENDOR_ID_INTEL) in megasas_display_intel_branding()
943 switch (instance->pdev->device) { in megasas_display_intel_branding()
945 switch (instance->pdev->subsystem_device) { in megasas_display_intel_branding()
947 dev_info(&instance->pdev->dev, "scsi host %d: %s\n", in megasas_display_intel_branding()
948 instance->host->host_no, in megasas_display_intel_branding()
952 dev_info(&instance->pdev->dev, "scsi host %d: %s\n", in megasas_display_intel_branding()
953 instance->host->host_no, in megasas_display_intel_branding()
957 dev_info(&instance->pdev->dev, "scsi host %d: %s\n", in megasas_display_intel_branding()
958 instance->host->host_no, in megasas_display_intel_branding()
962 dev_info(&instance->pdev->dev, "scsi host %d: %s\n", in megasas_display_intel_branding()
963 instance->host->host_no, in megasas_display_intel_branding()
971 switch (instance->pdev->subsystem_device) { in megasas_display_intel_branding()
973 dev_info(&instance->pdev->dev, "scsi host %d: %s\n", in megasas_display_intel_branding()
974 instance->host->host_no, in megasas_display_intel_branding()
978 dev_info(&instance->pdev->dev, "scsi host %d: %s\n", in megasas_display_intel_branding()
979 instance->host->host_no, in megasas_display_intel_branding()
998 megasas_init_adapter_fusion(struct megasas_instance *instance) in megasas_init_adapter_fusion() argument
1005 fusion = instance->ctrl_context; in megasas_init_adapter_fusion()
1007 reg_set = instance->reg_set; in megasas_init_adapter_fusion()
1012 instance->max_fw_cmds = in megasas_init_adapter_fusion()
1013 instance->instancet->read_fw_status_reg(reg_set) & 0x00FFFF; in megasas_init_adapter_fusion()
1014 instance->max_fw_cmds = min(instance->max_fw_cmds, (u16)1008); in megasas_init_adapter_fusion()
1021 instance->max_fw_cmds = instance->max_fw_cmds-1; in megasas_init_adapter_fusion()
1026 instance->max_mfi_cmds = in megasas_init_adapter_fusion()
1029 max_cmd = instance->max_fw_cmds; in megasas_init_adapter_fusion()
1048 instance->max_num_sge = rounddown_pow_of_two( in megasas_init_adapter_fusion()
1059 count = instance->msix_vectors > 0 ? instance->msix_vectors : 1; in megasas_init_adapter_fusion()
1067 if (megasas_alloc_cmds(instance)) in megasas_init_adapter_fusion()
1069 if (megasas_alloc_cmds_fusion(instance)) in megasas_init_adapter_fusion()
1072 if (megasas_ioc_init_fusion(instance)) in megasas_init_adapter_fusion()
1075 megasas_display_intel_branding(instance); in megasas_init_adapter_fusion()
1076 if (megasas_get_ctrl_info(instance)) { in megasas_init_adapter_fusion()
1077 dev_err(&instance->pdev->dev, in megasas_init_adapter_fusion()
1083 instance->flag_ieee = 1; in megasas_init_adapter_fusion()
1092 dev_err(&instance->pdev->dev, "Could not allocate " in megasas_init_adapter_fusion()
1105 fusion->ld_map[i] = dma_alloc_coherent(&instance->pdev->dev, in megasas_init_adapter_fusion()
1116 if (!megasas_get_map_info(instance)) in megasas_init_adapter_fusion()
1117 megasas_sync_map_info(instance); in megasas_init_adapter_fusion()
1123 dma_free_coherent(&instance->pdev->dev, fusion->max_map_sz, in megasas_init_adapter_fusion()
1126 megasas_free_cmds_fusion(instance); in megasas_init_adapter_fusion()
1128 megasas_free_cmds(instance); in megasas_init_adapter_fusion()
1140 megasas_fire_cmd_fusion(struct megasas_instance *instance, in megasas_fire_cmd_fusion() argument
1153 spin_lock_irqsave(&instance->hba_lock, flags); in megasas_fire_cmd_fusion()
1157 spin_unlock_irqrestore(&instance->hba_lock, flags); in megasas_fire_cmd_fusion()
1219 megasas_make_sgl_fusion(struct megasas_instance *instance, in megasas_make_sgl_fusion() argument
1228 fusion = instance->ctrl_context; in megasas_make_sgl_fusion()
1230 if ((instance->pdev->device == PCI_DEVICE_ID_LSI_INVADER) || in megasas_make_sgl_fusion()
1231 (instance->pdev->device == PCI_DEVICE_ID_LSI_FURY)) { in megasas_make_sgl_fusion()
1241 if (sge_count > instance->max_num_sge || !sge_count) in megasas_make_sgl_fusion()
1248 if ((instance->pdev->device == PCI_DEVICE_ID_LSI_INVADER) || in megasas_make_sgl_fusion()
1249 (instance->pdev->device == PCI_DEVICE_ID_LSI_FURY)) { in megasas_make_sgl_fusion()
1261 if ((instance->pdev->device == in megasas_make_sgl_fusion()
1263 (instance->pdev->device == in megasas_make_sgl_fusion()
1280 if ((instance->pdev->device == in megasas_make_sgl_fusion()
1282 (instance->pdev->device == in megasas_make_sgl_fusion()
1487 megasas_build_ldio_fusion(struct megasas_instance *instance, in megasas_build_ldio_fusion() argument
1500 device_id = MEGASAS_DEV_INDEX(instance, scp); in megasas_build_ldio_fusion()
1502 fusion = instance->ctrl_context; in megasas_build_ldio_fusion()
1574 local_map_ptr = fusion->ld_drv_map[(instance->map_id & 1)]; in megasas_build_ldio_fusion()
1577 instance->fw_supported_vd_count) || (!fusion->fast_path_io)) { in megasas_build_ldio_fusion()
1581 if (MR_BuildRaidContext(instance, &io_info, in megasas_build_ldio_fusion()
1590 cmd->request_desc->SCSIIO.MSIxIndex = instance->msix_vectors ? in megasas_build_ldio_fusion()
1591 raw_smp_processor_id() % instance->msix_vectors : 0; in megasas_build_ldio_fusion()
1600 if ((instance->pdev->device == PCI_DEVICE_ID_LSI_INVADER) || in megasas_build_ldio_fusion()
1601 (instance->pdev->device == PCI_DEVICE_ID_LSI_FURY)) { in megasas_build_ldio_fusion()
1617 get_updated_dev_handle(instance, in megasas_build_ldio_fusion()
1634 if ((instance->pdev->device == PCI_DEVICE_ID_LSI_INVADER) || in megasas_build_ldio_fusion()
1635 (instance->pdev->device == PCI_DEVICE_ID_LSI_FURY)) { in megasas_build_ldio_fusion()
1661 megasas_build_dcdb_fusion(struct megasas_instance *instance, in megasas_build_dcdb_fusion() argument
1671 struct fusion_context *fusion = instance->ctrl_context; in megasas_build_dcdb_fusion()
1679 device_id = MEGASAS_DEV_INDEX(instance, scmd); in megasas_build_dcdb_fusion()
1682 local_map_ptr = fusion->ld_drv_map[(instance->map_id & 1)]; in megasas_build_dcdb_fusion()
1687 instance->pd_list[pd_index].driveState == MR_PD_STATE_SYSTEM) { in megasas_build_dcdb_fusion()
1696 instance->msix_vectors ? in megasas_build_dcdb_fusion()
1698 instance->msix_vectors : in megasas_build_dcdb_fusion()
1702 if (instance->secure_jbod_support && in megasas_build_dcdb_fusion()
1723 if ((instance->pdev->device == PCI_DEVICE_ID_LSI_INVADER) || in megasas_build_dcdb_fusion()
1724 (instance->pdev->device == PCI_DEVICE_ID_LSI_FURY)) in megasas_build_dcdb_fusion()
1743 (device_id >= instance->fw_supported_vd_count)) in megasas_build_dcdb_fusion()
1748 if (ld >= instance->fw_supported_vd_count) in megasas_build_dcdb_fusion()
1812 megasas_build_io_fusion(struct megasas_instance *instance, in megasas_build_io_fusion() argument
1819 device_id = MEGASAS_DEV_INDEX(instance, scp); in megasas_build_io_fusion()
1841 megasas_build_ldio_fusion(instance, scp, cmd); in megasas_build_io_fusion()
1843 megasas_build_dcdb_fusion(instance, scp, cmd); in megasas_build_io_fusion()
1850 megasas_make_sgl_fusion(instance, scp, in megasas_build_io_fusion()
1854 if (sge_count > instance->max_num_sge) { in megasas_build_io_fusion()
1857 instance->max_num_sge); in megasas_build_io_fusion()
1883 megasas_get_request_descriptor(struct megasas_instance *instance, u16 index) in megasas_get_request_descriptor() argument
1888 if (index >= instance->max_fw_cmds) { in megasas_get_request_descriptor()
1891 instance->host->host_no); in megasas_get_request_descriptor()
1894 fusion = instance->ctrl_context; in megasas_get_request_descriptor()
1908 megasas_build_and_issue_cmd_fusion(struct megasas_instance *instance, in megasas_build_and_issue_cmd_fusion() argument
1916 fusion = instance->ctrl_context; in megasas_build_and_issue_cmd_fusion()
1918 cmd = megasas_get_cmd_fusion(instance); in megasas_build_and_issue_cmd_fusion()
1924 req_desc = megasas_get_request_descriptor(instance, index-1); in megasas_build_and_issue_cmd_fusion()
1931 if (megasas_build_io_fusion(instance, scmd, cmd)) { in megasas_build_and_issue_cmd_fusion()
1932 megasas_return_cmd_fusion(instance, cmd); in megasas_build_and_issue_cmd_fusion()
1949 atomic_inc(&instance->fw_outstanding); in megasas_build_and_issue_cmd_fusion()
1951 instance->instancet->fire_cmd(instance, in megasas_build_and_issue_cmd_fusion()
1953 instance->reg_set); in megasas_build_and_issue_cmd_fusion()
1964 complete_cmd_fusion(struct megasas_instance *instance, u32 MSIxIndex) in complete_cmd_fusion() argument
1979 fusion = instance->ctrl_context; in complete_cmd_fusion()
1981 if (instance->adprecovery == MEGASAS_HW_CRITICAL_ERROR) in complete_cmd_fusion()
2019 device_id = MEGASAS_DEV_INDEX(instance, in complete_cmd_fusion()
2042 megasas_return_cmd_fusion(instance, cmd_fusion); in complete_cmd_fusion()
2043 atomic_dec(&instance->fw_outstanding); in complete_cmd_fusion()
2047 cmd_mfi = instance->cmd_list[cmd_fusion->sync_cmd_idx]; in complete_cmd_fusion()
2051 dev_info(&instance->pdev->dev, in complete_cmd_fusion()
2055 megasas_return_mfi_mpt_pthr(instance, cmd_mfi, in complete_cmd_fusion()
2059 megasas_complete_cmd(instance, cmd_mfi, DID_OK); in complete_cmd_fusion()
2097 if ((instance->pdev->device == in complete_cmd_fusion()
2099 (instance->pdev->device == in complete_cmd_fusion()
2103 instance->reply_post_host_index_addr[MSIxIndex/8]); in complete_cmd_fusion()
2107 instance->reply_post_host_index_addr[0]); in complete_cmd_fusion()
2116 if ((instance->pdev->device == PCI_DEVICE_ID_LSI_INVADER) || in complete_cmd_fusion()
2117 (instance->pdev->device == PCI_DEVICE_ID_LSI_FURY)) in complete_cmd_fusion()
2120 instance->reply_post_host_index_addr[MSIxIndex/8]); in complete_cmd_fusion()
2124 instance->reply_post_host_index_addr[0]); in complete_cmd_fusion()
2125 megasas_check_and_restore_queue_depth(instance); in complete_cmd_fusion()
2138 struct megasas_instance *instance = in megasas_complete_cmd_dpc_fusion() local
2143 count = instance->msix_vectors > 0 ? instance->msix_vectors : 1; in megasas_complete_cmd_dpc_fusion()
2146 spin_lock_irqsave(&instance->hba_lock, flags); in megasas_complete_cmd_dpc_fusion()
2147 if (instance->adprecovery == MEGASAS_HW_CRITICAL_ERROR) { in megasas_complete_cmd_dpc_fusion()
2148 spin_unlock_irqrestore(&instance->hba_lock, flags); in megasas_complete_cmd_dpc_fusion()
2151 spin_unlock_irqrestore(&instance->hba_lock, flags); in megasas_complete_cmd_dpc_fusion()
2154 complete_cmd_fusion(instance, MSIxIndex); in megasas_complete_cmd_dpc_fusion()
2163 struct megasas_instance *instance = irq_context->instance; in megasas_isr_fusion() local
2166 if (instance->mask_interrupts) in megasas_isr_fusion()
2169 if (!instance->msix_vectors) { in megasas_isr_fusion()
2170 mfiStatus = instance->instancet->clear_intr(instance->reg_set); in megasas_isr_fusion()
2176 if (test_bit(MEGASAS_FUSION_IN_RESET, &instance->reset_flags)) { in megasas_isr_fusion()
2177 instance->instancet->clear_intr(instance->reg_set); in megasas_isr_fusion()
2181 if (!complete_cmd_fusion(instance, irq_context->MSIxIndex)) { in megasas_isr_fusion()
2182 instance->instancet->clear_intr(instance->reg_set); in megasas_isr_fusion()
2184 fw_state = instance->instancet->read_fw_status_reg( in megasas_isr_fusion()
2185 instance->reg_set) & MFI_STATE_MASK; in megasas_isr_fusion()
2186 dma_state = instance->instancet->read_fw_status_reg in megasas_isr_fusion()
2187 (instance->reg_set) & MFI_STATE_DMADONE; in megasas_isr_fusion()
2188 if (instance->crash_dump_drv_support && in megasas_isr_fusion()
2189 instance->crash_dump_app_support) { in megasas_isr_fusion()
2192 schedule_work(&instance->crash_init); in megasas_isr_fusion()
2194 schedule_work(&instance->work_init); in megasas_isr_fusion()
2197 "for scsi%d\n", instance->host->host_no); in megasas_isr_fusion()
2198 schedule_work(&instance->work_init); in megasas_isr_fusion()
2212 build_mpt_mfi_pass_thru(struct megasas_instance *instance, in build_mpt_mfi_pass_thru() argument
2222 cmd = megasas_get_cmd_fusion(instance); in build_mpt_mfi_pass_thru()
2251 fusion = instance->ctrl_context; in build_mpt_mfi_pass_thru()
2254 if ((instance->pdev->device == PCI_DEVICE_ID_LSI_INVADER) || in build_mpt_mfi_pass_thru()
2255 (instance->pdev->device == PCI_DEVICE_ID_LSI_FURY)) { in build_mpt_mfi_pass_thru()
2287 build_mpt_cmd(struct megasas_instance *instance, struct megasas_cmd *cmd) in build_mpt_cmd() argument
2292 if (build_mpt_mfi_pass_thru(instance, cmd)) { in build_mpt_cmd()
2299 req_desc = megasas_get_request_descriptor(instance, index - 1); in build_mpt_cmd()
2320 megasas_issue_dcmd_fusion(struct megasas_instance *instance, in megasas_issue_dcmd_fusion() argument
2325 req_desc = build_mpt_cmd(instance, cmd); in megasas_issue_dcmd_fusion()
2331 instance->instancet->fire_cmd(instance, req_desc->u.low, in megasas_issue_dcmd_fusion()
2332 req_desc->u.high, instance->reg_set); in megasas_issue_dcmd_fusion()
2340 megasas_release_fusion(struct megasas_instance *instance) in megasas_release_fusion() argument
2342 megasas_free_cmds(instance); in megasas_release_fusion()
2343 megasas_free_cmds_fusion(instance); in megasas_release_fusion()
2345 iounmap(instance->reg_set); in megasas_release_fusion()
2347 pci_release_selected_regions(instance->pdev, instance->bar); in megasas_release_fusion()
2366 megasas_alloc_host_crash_buffer(struct megasas_instance *instance) in megasas_alloc_host_crash_buffer() argument
2370 instance->crash_buf_pages = get_order(CRASH_DMA_BUF_SIZE); in megasas_alloc_host_crash_buffer()
2372 instance->crash_buf[i] = (void *)__get_free_pages(GFP_KERNEL, in megasas_alloc_host_crash_buffer()
2373 instance->crash_buf_pages); in megasas_alloc_host_crash_buffer()
2374 if (!instance->crash_buf[i]) { in megasas_alloc_host_crash_buffer()
2375 dev_info(&instance->pdev->dev, "Firmware crash dump " in megasas_alloc_host_crash_buffer()
2379 memset(instance->crash_buf[i], 0, in megasas_alloc_host_crash_buffer()
2380 ((1 << PAGE_SHIFT) << instance->crash_buf_pages)); in megasas_alloc_host_crash_buffer()
2382 instance->drv_buf_alloc = i; in megasas_alloc_host_crash_buffer()
2390 megasas_free_host_crash_buffer(struct megasas_instance *instance) in megasas_free_host_crash_buffer() argument
2394 for (i = 0; i < instance->drv_buf_alloc; i++) { in megasas_free_host_crash_buffer()
2395 if (instance->crash_buf[i]) in megasas_free_host_crash_buffer()
2396 free_pages((ulong)instance->crash_buf[i], in megasas_free_host_crash_buffer()
2397 instance->crash_buf_pages); in megasas_free_host_crash_buffer()
2399 instance->drv_buf_index = 0; in megasas_free_host_crash_buffer()
2400 instance->drv_buf_alloc = 0; in megasas_free_host_crash_buffer()
2401 instance->fw_crash_state = UNAVAILABLE; in megasas_free_host_crash_buffer()
2402 instance->fw_crash_buffer_size = 0; in megasas_free_host_crash_buffer()
2410 megasas_adp_reset_fusion(struct megasas_instance *instance, in megasas_adp_reset_fusion() argument
2421 megasas_check_reset_fusion(struct megasas_instance *instance, in megasas_check_reset_fusion() argument
2428 int megasas_wait_for_outstanding_fusion(struct megasas_instance *instance, in megasas_wait_for_outstanding_fusion() argument
2436 fw_state = instance->instancet->read_fw_status_reg( in megasas_wait_for_outstanding_fusion()
2437 instance->reg_set) & MFI_STATE_MASK; in megasas_wait_for_outstanding_fusion()
2441 instance->host->host_no); in megasas_wait_for_outstanding_fusion()
2446 if (instance->requestorId && !iotimeout) { in megasas_wait_for_outstanding_fusion()
2452 if (instance->requestorId && iotimeout) { in megasas_wait_for_outstanding_fusion()
2453 if (instance->hb_host_mem->HB.fwCounter != in megasas_wait_for_outstanding_fusion()
2454 instance->hb_host_mem->HB.driverCounter) { in megasas_wait_for_outstanding_fusion()
2455 instance->hb_host_mem->HB.driverCounter = in megasas_wait_for_outstanding_fusion()
2456 instance->hb_host_mem->HB.fwCounter; in megasas_wait_for_outstanding_fusion()
2467 instance->host->host_no); in megasas_wait_for_outstanding_fusion()
2475 outstanding = atomic_read(&instance->fw_outstanding); in megasas_wait_for_outstanding_fusion()
2482 outstanding, instance->host->host_no); in megasas_wait_for_outstanding_fusion()
2484 (unsigned long)instance); in megasas_wait_for_outstanding_fusion()
2489 if (atomic_read(&instance->fw_outstanding)) { in megasas_wait_for_outstanding_fusion()
2492 instance->host->host_no); in megasas_wait_for_outstanding_fusion()
2499 void megasas_reset_reply_desc(struct megasas_instance *instance) in megasas_reset_reply_desc() argument
2505 fusion = instance->ctrl_context; in megasas_reset_reply_desc()
2506 count = instance->msix_vectors > 0 ? instance->msix_vectors : 1; in megasas_reset_reply_desc()
2515 int megasas_check_mpio_paths(struct megasas_instance *instance, in megasas_check_mpio_paths() argument
2520 if (instance->mpio && instance->requestorId) { in megasas_check_mpio_paths()
2523 if (megasas_mgmt_info.instance[i] && in megasas_check_mpio_paths()
2524 (megasas_mgmt_info.instance[i] != instance) && in megasas_check_mpio_paths()
2525 megasas_mgmt_info.instance[i]->mpio && in megasas_check_mpio_paths()
2526 megasas_mgmt_info.instance[i]->requestorId in megasas_check_mpio_paths()
2528 (megasas_mgmt_info.instance[i]->ld_ids[j] in megasas_check_mpio_paths()
2542 struct megasas_instance *instance; in megasas_reset_fusion() local
2550 instance = (struct megasas_instance *)shost->hostdata; in megasas_reset_fusion()
2551 fusion = instance->ctrl_context; in megasas_reset_fusion()
2553 mutex_lock(&instance->reset_mutex); in megasas_reset_fusion()
2555 if (instance->adprecovery == MEGASAS_HW_CRITICAL_ERROR) { in megasas_reset_fusion()
2558 instance->host->host_no); in megasas_reset_fusion()
2559 mutex_unlock(&instance->reset_mutex); in megasas_reset_fusion()
2562 status_reg = instance->instancet->read_fw_status_reg(instance->reg_set); in megasas_reset_fusion()
2566 if (abs_state != MFI_STATE_FAULT && instance->crash_dump_buf && in megasas_reset_fusion()
2567 instance->crash_dump_app_support && iotimeout) { in megasas_reset_fusion()
2568 dev_info(&instance->pdev->dev, "IO timeout is detected, " in megasas_reset_fusion()
2570 instance->adprecovery = MEGASAS_ADPRESET_SM_INFAULT; in megasas_reset_fusion()
2571 status_reg = readl(&instance->reg_set->doorbell); in megasas_reset_fusion()
2573 &instance->reg_set->doorbell); in megasas_reset_fusion()
2574 readl(&instance->reg_set->doorbell); in megasas_reset_fusion()
2575 mutex_unlock(&instance->reset_mutex); in megasas_reset_fusion()
2579 dev_dbg(&instance->pdev->dev, "waiting for [%d] " in megasas_reset_fusion()
2582 } while ((instance->adprecovery != MEGASAS_HBA_OPERATIONAL) && in megasas_reset_fusion()
2585 if (instance->adprecovery == MEGASAS_HBA_OPERATIONAL) { in megasas_reset_fusion()
2586 dev_info(&instance->pdev->dev, "OCR done for IO " in megasas_reset_fusion()
2590 dev_info(&instance->pdev->dev, "Controller is not " in megasas_reset_fusion()
2599 if (instance->requestorId && !instance->skip_heartbeat_timer_del) in megasas_reset_fusion()
2600 del_timer_sync(&instance->sriov_heartbeat_timer); in megasas_reset_fusion()
2601 set_bit(MEGASAS_FUSION_IN_RESET, &instance->reset_flags); in megasas_reset_fusion()
2602 instance->adprecovery = MEGASAS_ADPRESET_SM_POLLING; in megasas_reset_fusion()
2603 instance->instancet->disable_intr(instance); in megasas_reset_fusion()
2607 if (megasas_wait_for_outstanding_fusion(instance, iotimeout, in megasas_reset_fusion()
2609 instance->adprecovery = MEGASAS_ADPRESET_SM_INFAULT; in megasas_reset_fusion()
2611 "adapter scsi%d.\n", instance->host->host_no); in megasas_reset_fusion()
2616 for (i = 0 ; i < instance->max_fw_cmds; i++) { in megasas_reset_fusion()
2621 megasas_check_mpio_paths(instance, in megasas_reset_fusion()
2624 megasas_return_cmd_fusion(instance, cmd_fusion); in megasas_reset_fusion()
2625 atomic_dec(&instance->fw_outstanding); in megasas_reset_fusion()
2629 status_reg = instance->instancet->read_fw_status_reg( in megasas_reset_fusion()
2630 instance->reg_set); in megasas_reset_fusion()
2633 if (instance->disableOnlineCtrlReset || in megasas_reset_fusion()
2638 instance->host->host_no); in megasas_reset_fusion()
2639 megaraid_sas_kill_hba(instance); in megasas_reset_fusion()
2640 instance->skip_heartbeat_timer_del = 1; in megasas_reset_fusion()
2646 if (instance->requestorId && !iotimeout) { in megasas_reset_fusion()
2650 (instance->hb_host_mem->HB.fwCounter != in megasas_reset_fusion()
2651 instance->hb_host_mem->HB.driverCounter)) { in megasas_reset_fusion()
2652 instance->hb_host_mem->HB.driverCounter = in megasas_reset_fusion()
2653 instance->hb_host_mem->HB.fwCounter; in megasas_reset_fusion()
2657 instance->host->host_no); in megasas_reset_fusion()
2664 instance->instancet-> in megasas_reset_fusion()
2666 instance->reg_set); in megasas_reset_fusion()
2674 instance->host->host_no); in megasas_reset_fusion()
2685 instance->host->host_no, in megasas_reset_fusion()
2687 megaraid_sas_kill_hba(instance); in megasas_reset_fusion()
2688 instance->skip_heartbeat_timer_del = 1; in megasas_reset_fusion()
2689 instance->adprecovery = in megasas_reset_fusion()
2700 &instance->reg_set->fusion_seq_offset); in megasas_reset_fusion()
2702 &instance->reg_set->fusion_seq_offset); in megasas_reset_fusion()
2704 &instance->reg_set->fusion_seq_offset); in megasas_reset_fusion()
2706 &instance->reg_set->fusion_seq_offset); in megasas_reset_fusion()
2708 &instance->reg_set->fusion_seq_offset); in megasas_reset_fusion()
2710 &instance->reg_set->fusion_seq_offset); in megasas_reset_fusion()
2712 &instance->reg_set->fusion_seq_offset); in megasas_reset_fusion()
2715 host_diag = readl(&instance->reg_set->fusion_host_diag); in megasas_reset_fusion()
2720 readl(&instance->reg_set->fusion_host_diag); in megasas_reset_fusion()
2725 instance->host->host_no); in megasas_reset_fusion()
2734 &instance->reg_set->fusion_host_diag); in megasas_reset_fusion()
2738 host_diag = readl(&instance->reg_set->fusion_host_diag); in megasas_reset_fusion()
2743 readl(&instance->reg_set->fusion_host_diag); in megasas_reset_fusion()
2748 instance->host->host_no); in megasas_reset_fusion()
2756 instance->instancet->read_fw_status_reg( in megasas_reset_fusion()
2757 instance->reg_set) & MFI_STATE_MASK; in megasas_reset_fusion()
2764 instance->instancet->read_fw_status_reg( in megasas_reset_fusion()
2765 instance->reg_set) & MFI_STATE_MASK; in megasas_reset_fusion()
2771 instance->host->host_no); in megasas_reset_fusion()
2776 if (megasas_transition_to_ready(instance, 1)) { in megasas_reset_fusion()
2780 instance->host->host_no); in megasas_reset_fusion()
2784 megasas_reset_reply_desc(instance); in megasas_reset_fusion()
2785 if (megasas_ioc_init_fusion(instance)) { in megasas_reset_fusion()
2789 instance->host->host_no); in megasas_reset_fusion()
2794 for (j = 0 ; j < instance->max_fw_cmds; j++) { in megasas_reset_fusion()
2799 instance-> in megasas_reset_fusion()
2803 megasas_return_mfi_mpt_pthr(instance, cmd_mfi, cmd_fusion); in megasas_reset_fusion()
2807 instance, in megasas_reset_fusion()
2814 instance->host->host_no); in megasas_reset_fusion()
2817 megasas_return_cmd_fusion(instance, cmd_fusion); in megasas_reset_fusion()
2819 instance->instancet-> in megasas_reset_fusion()
2820 fire_cmd(instance, in megasas_reset_fusion()
2825 instance-> in megasas_reset_fusion()
2832 if (megasas_get_ctrl_info(instance)) { in megasas_reset_fusion()
2833 dev_info(&instance->pdev->dev, in megasas_reset_fusion()
2836 megaraid_sas_kill_hba(instance); in megasas_reset_fusion()
2844 if (!megasas_get_map_info(instance)) in megasas_reset_fusion()
2845 megasas_sync_map_info(instance); in megasas_reset_fusion()
2848 &instance->reset_flags); in megasas_reset_fusion()
2849 instance->instancet->enable_intr(instance); in megasas_reset_fusion()
2850 instance->adprecovery = MEGASAS_HBA_OPERATIONAL; in megasas_reset_fusion()
2853 if (instance->requestorId) { in megasas_reset_fusion()
2854 if (!megasas_sriov_start_heartbeat(instance, 0)) in megasas_reset_fusion()
2855 megasas_start_timer(instance, in megasas_reset_fusion()
2856 &instance->sriov_heartbeat_timer, in megasas_reset_fusion()
2860 instance->skip_heartbeat_timer_del = 1; in megasas_reset_fusion()
2866 instance->host->host_no); in megasas_reset_fusion()
2868 if (instance->crash_dump_drv_support && in megasas_reset_fusion()
2869 instance->crash_dump_app_support) in megasas_reset_fusion()
2870 megasas_set_crash_dump_params(instance, in megasas_reset_fusion()
2873 megasas_set_crash_dump_params(instance, in megasas_reset_fusion()
2881 "adapter scsi%d.\n", instance->host->host_no); in megasas_reset_fusion()
2882 megaraid_sas_kill_hba(instance); in megasas_reset_fusion()
2883 instance->skip_heartbeat_timer_del = 1; in megasas_reset_fusion()
2887 if (instance->requestorId) { in megasas_reset_fusion()
2888 megasas_start_timer(instance, in megasas_reset_fusion()
2889 &instance->sriov_heartbeat_timer, in megasas_reset_fusion()
2893 clear_bit(MEGASAS_FUSION_IN_RESET, &instance->reset_flags); in megasas_reset_fusion()
2894 instance->instancet->enable_intr(instance); in megasas_reset_fusion()
2895 instance->adprecovery = MEGASAS_HBA_OPERATIONAL; in megasas_reset_fusion()
2898 clear_bit(MEGASAS_FUSION_IN_RESET, &instance->reset_flags); in megasas_reset_fusion()
2899 mutex_unlock(&instance->reset_mutex); in megasas_reset_fusion()
2906 struct megasas_instance *instance = in megasas_fusion_crash_dump_wq() local
2912 status_reg = instance->instancet->read_fw_status_reg(instance->reg_set); in megasas_fusion_crash_dump_wq()
2918 if (instance->drv_buf_index == 0) { in megasas_fusion_crash_dump_wq()
2922 if (instance->drv_buf_alloc) { in megasas_fusion_crash_dump_wq()
2923 dev_info(&instance->pdev->dev, "earlier crash dump is " in megasas_fusion_crash_dump_wq()
2928 &instance->reg_set->outbound_scratch_pad); in megasas_fusion_crash_dump_wq()
2929 readl(&instance->reg_set->outbound_scratch_pad); in megasas_fusion_crash_dump_wq()
2932 megasas_alloc_host_crash_buffer(instance); in megasas_fusion_crash_dump_wq()
2933 dev_info(&instance->pdev->dev, "Number of host crash buffers " in megasas_fusion_crash_dump_wq()
2934 "allocated: %d\n", instance->drv_buf_alloc); in megasas_fusion_crash_dump_wq()
2942 if (instance->drv_buf_index >= (instance->drv_buf_alloc)) { in megasas_fusion_crash_dump_wq()
2943 dev_info(&instance->pdev->dev, "Driver is done copying " in megasas_fusion_crash_dump_wq()
2944 "the buffer: %d\n", instance->drv_buf_alloc); in megasas_fusion_crash_dump_wq()
2948 memcpy(instance->crash_buf[instance->drv_buf_index], in megasas_fusion_crash_dump_wq()
2949 instance->crash_dump_buf, CRASH_DMA_BUF_SIZE); in megasas_fusion_crash_dump_wq()
2950 instance->drv_buf_index++; in megasas_fusion_crash_dump_wq()
2955 dev_info(&instance->pdev->dev, "Crash Dump is available,number " in megasas_fusion_crash_dump_wq()
2956 "of copied buffers: %d\n", instance->drv_buf_index); in megasas_fusion_crash_dump_wq()
2957 instance->fw_crash_buffer_size = instance->drv_buf_index; in megasas_fusion_crash_dump_wq()
2958 instance->fw_crash_state = AVAILABLE; in megasas_fusion_crash_dump_wq()
2959 instance->drv_buf_index = 0; in megasas_fusion_crash_dump_wq()
2960 writel(status_reg, &instance->reg_set->outbound_scratch_pad); in megasas_fusion_crash_dump_wq()
2961 readl(&instance->reg_set->outbound_scratch_pad); in megasas_fusion_crash_dump_wq()
2963 megasas_reset_fusion(instance->host, 0); in megasas_fusion_crash_dump_wq()
2965 writel(status_reg, &instance->reg_set->outbound_scratch_pad); in megasas_fusion_crash_dump_wq()
2966 readl(&instance->reg_set->outbound_scratch_pad); in megasas_fusion_crash_dump_wq()
2974 struct megasas_instance *instance = in megasas_fusion_ocr_wq() local
2977 megasas_reset_fusion(instance->host, 0); in megasas_fusion_ocr_wq()