Lines Matching +full:rx +full:- +full:sample +full:- +full:delay +full:- +full:ns
7 * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved.
20 * Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
26 * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved.
102 * NORMALIZE_PUT_POINTER() -
112 * NORMALIZE_EVENT_POINTER() -
124 * NORMALIZE_GET_POINTER() -
133 * NORMALIZE_GET_POINTER_CYCLE_BIT() -
139 ((SMU_CQGR_CYCLE_BIT & (x)) << (31 - SMU_COMPLETION_QUEUE_GET_CYCLE_BIT_SHIFT))
142 * COMPLETION_QUEUE_CYCLE_BIT() -
154 sm->initial_state_id = initial_state; in sci_init_sm()
155 sm->previous_state_id = initial_state; in sci_init_sm()
156 sm->current_state_id = initial_state; in sci_init_sm()
157 sm->state_table = state_table; in sci_init_sm()
159 handler = sm->state_table[initial_state].enter_state; in sci_init_sm()
169 handler = sm->state_table[sm->current_state_id].exit_state; in sci_change_state()
173 sm->previous_state_id = sm->current_state_id; in sci_change_state()
174 sm->current_state_id = next_state; in sci_change_state()
176 handler = sm->state_table[sm->current_state_id].enter_state; in sci_change_state()
183 u32 get_value = ihost->completion_queue_get; in sci_controller_completion_queue_has_entries()
187 COMPLETION_QUEUE_CYCLE_BIT(ihost->completion_queue[get_index])) in sci_controller_completion_queue_has_entries()
202 writel(SMU_ISR_COMPLETION, &ihost->smu_registers->interrupt_status); in sci_controller_isr()
210 spin_lock(&ihost->scic_lock); in sci_controller_isr()
211 if (test_bit(IHOST_IRQ_ENABLED, &ihost->flags)) { in sci_controller_isr()
212 writel(0xFF000000, &ihost->smu_registers->interrupt_mask); in sci_controller_isr()
213 writel(0, &ihost->smu_registers->interrupt_mask); in sci_controller_isr()
215 spin_unlock(&ihost->scic_lock); in sci_controller_isr()
225 tasklet_schedule(&ihost->completion_tasklet); in isci_msix_isr()
235 readl(&ihost->smu_registers->interrupt_status); in sci_controller_error_isr()
251 writel(0xff, &ihost->smu_registers->interrupt_mask); in sci_controller_error_isr()
252 writel(0, &ihost->smu_registers->interrupt_mask); in sci_controller_error_isr()
260 struct isci_request *ireq = ihost->reqs[index]; in sci_controller_task_completion()
263 if (test_bit(IREQ_ACTIVE, &ireq->flags) && in sci_controller_task_completion()
264 ireq->io_tag != SCI_CONTROLLER_INVALID_IO_TAG && in sci_controller_task_completion()
265 ISCI_TAG_SEQ(ireq->io_tag) == ihost->io_request_sequence[index]) in sci_controller_task_completion()
283 ireq = ihost->reqs[index]; in sci_controller_sdma_completion()
284 dev_warn(&ihost->pdev->dev, "%s: %x for io request %p\n", in sci_controller_sdma_completion()
293 idev = ihost->device_table[index]; in sci_controller_sdma_completion()
294 dev_warn(&ihost->pdev->dev, "%s: %x for device %p\n", in sci_controller_sdma_completion()
301 dev_warn(&ihost->pdev->dev, "%s: unknown completion type %x\n", in sci_controller_sdma_completion()
320 frame_header = ihost->uf_control.buffers.array[frame_index].header; in sci_controller_unsolicited_frame()
321 ihost->uf_control.buffers.array[frame_index].state = UNSOLICITED_FRAME_IN_USE; in sci_controller_unsolicited_frame()
332 if (frame_header->is_address_frame) { in sci_controller_unsolicited_frame()
334 iphy = &ihost->phys[index]; in sci_controller_unsolicited_frame()
346 iphy = &ihost->phys[index]; in sci_controller_unsolicited_frame()
349 if (index < ihost->remote_node_entries) in sci_controller_unsolicited_frame()
350 idev = ihost->device_table[index]; in sci_controller_unsolicited_frame()
380 dev_err(&ihost->pdev->dev, in sci_controller_event_completion()
394 dev_err(&ihost->pdev->dev, in sci_controller_event_completion()
403 ireq = ihost->reqs[index]; in sci_controller_event_completion()
411 ireq = ihost->reqs[index]; in sci_controller_event_completion()
415 dev_warn(&ihost->pdev->dev, in sci_controller_event_completion()
426 idev = ihost->device_table[index]; in sci_controller_event_completion()
430 dev_warn(&ihost->pdev->dev, in sci_controller_event_completion()
452 iphy = &ihost->phys[index]; in sci_controller_event_completion()
459 if (index < ihost->remote_node_entries) { in sci_controller_event_completion()
460 idev = ihost->device_table[index]; in sci_controller_event_completion()
465 dev_err(&ihost->pdev->dev, in sci_controller_event_completion()
477 dev_warn(&ihost->pdev->dev, in sci_controller_event_completion()
494 dev_dbg(&ihost->pdev->dev, in sci_controller_process_completions()
497 ihost->completion_queue_get); in sci_controller_process_completions()
500 get_index = NORMALIZE_GET_POINTER(ihost->completion_queue_get); in sci_controller_process_completions()
501 get_cycle = SMU_CQGR_CYCLE_BIT & ihost->completion_queue_get; in sci_controller_process_completions()
503 event_get = NORMALIZE_EVENT_POINTER(ihost->completion_queue_get); in sci_controller_process_completions()
504 event_cycle = SMU_CQGR_EVENT_CYCLE_BIT & ihost->completion_queue_get; in sci_controller_process_completions()
508 == COMPLETION_QUEUE_CYCLE_BIT(ihost->completion_queue[get_index]) in sci_controller_process_completions()
512 ent = ihost->completion_queue[get_index]; in sci_controller_process_completions()
516 (SMU_COMPLETION_QUEUE_GET_CYCLE_BIT_SHIFT - SCU_MAX_COMPLETION_QUEUE_SHIFT); in sci_controller_process_completions()
517 get_index = (get_index+1) & (SCU_MAX_COMPLETION_QUEUE_ENTRIES-1); in sci_controller_process_completions()
519 dev_dbg(&ihost->pdev->dev, in sci_controller_process_completions()
543 (SMU_COMPLETION_QUEUE_GET_EVENT_CYCLE_BIT_SHIFT - SCU_MAX_EVENTS_SHIFT); in sci_controller_process_completions()
544 event_get = (event_get+1) & (SCU_MAX_EVENTS-1); in sci_controller_process_completions()
550 dev_warn(&ihost->pdev->dev, in sci_controller_process_completions()
561 ihost->completion_queue_get = in sci_controller_process_completions()
569 writel(ihost->completion_queue_get, in sci_controller_process_completions()
570 &ihost->smu_registers->completion_queue_get); in sci_controller_process_completions()
574 dev_dbg(&ihost->pdev->dev, in sci_controller_process_completions()
577 ihost->completion_queue_get); in sci_controller_process_completions()
586 readl(&ihost->smu_registers->interrupt_status); in sci_controller_error_handler()
592 writel(SMU_ISR_QUEUE_SUSPEND, &ihost->smu_registers->interrupt_status); in sci_controller_error_handler()
594 dev_err(&ihost->pdev->dev, "%s: status: %#x\n", __func__, in sci_controller_error_handler()
597 sci_change_state(&ihost->sm, SCIC_FAILED); in sci_controller_error_handler()
605 writel(0, &ihost->smu_registers->interrupt_mask); in sci_controller_error_handler()
614 writel(SMU_ISR_COMPLETION, &ihost->smu_registers->interrupt_status); in isci_intx_isr()
615 tasklet_schedule(&ihost->completion_tasklet); in isci_intx_isr()
618 spin_lock(&ihost->scic_lock); in isci_intx_isr()
620 spin_unlock(&ihost->scic_lock); in isci_intx_isr()
638 * isci_host_start_complete() - This function is called by the core library,
648 dev_info(&ihost->pdev->dev, in isci_host_start_complete()
650 clear_bit(IHOST_START_PENDING, &ihost->flags); in isci_host_start_complete()
651 wake_up(&ihost->eventq); in isci_host_start_complete()
657 struct isci_host *ihost = ha->lldd_ha; in isci_host_scan_finished()
659 if (test_bit(IHOST_START_PENDING, &ihost->flags)) in isci_host_scan_finished()
668 * sci_controller_get_suggested_start_timeout() - This method returns the
691 * --------------------------------- in sci_controller_get_suggested_start_timeout()
696 * per interval - 1 (once OEM parameters are supported). in sci_controller_get_suggested_start_timeout()
701 + ((SCI_MAX_PHYS - 1) * SCIC_SDS_CONTROLLER_POWER_CONTROL_INTERVAL); in sci_controller_get_suggested_start_timeout()
706 set_bit(IHOST_IRQ_ENABLED, &ihost->flags); in sci_controller_enable_interrupts()
707 writel(0, &ihost->smu_registers->interrupt_mask); in sci_controller_enable_interrupts()
712 clear_bit(IHOST_IRQ_ENABLED, &ihost->flags); in sci_controller_disable_interrupts()
713 writel(0xffffffff, &ihost->smu_registers->interrupt_mask); in sci_controller_disable_interrupts()
714 readl(&ihost->smu_registers->interrupt_mask); /* flush */ in sci_controller_disable_interrupts()
722 readl(&ihost->scu_registers->peg0.ptsg.control); in sci_controller_enable_port_task_scheduler()
727 &ihost->scu_registers->peg0.ptsg.control); in sci_controller_enable_port_task_scheduler()
740 readl(&ihost->smu_registers->task_context_assignment[0]); in sci_controller_assign_task_entries()
743 (SMU_TCA_GEN_VAL(ENDING, ihost->task_context_entries - 1)) | in sci_controller_assign_task_entries()
747 &ihost->smu_registers->task_context_assignment[0]); in sci_controller_assign_task_entries()
758 ihost->completion_queue_get = 0; in sci_controller_initialize_completion_queue()
761 (SMU_CQC_QUEUE_LIMIT_SET(SCU_MAX_COMPLETION_QUEUE_ENTRIES - 1) | in sci_controller_initialize_completion_queue()
762 SMU_CQC_EVENT_LIMIT_SET(SCU_MAX_EVENTS - 1)); in sci_controller_initialize_completion_queue()
765 &ihost->smu_registers->completion_queue_control); in sci_controller_initialize_completion_queue()
777 &ihost->smu_registers->completion_queue_get); in sci_controller_initialize_completion_queue()
786 &ihost->smu_registers->completion_queue_put); in sci_controller_initialize_completion_queue()
794 ihost->completion_queue[index] = 0x80000000; in sci_controller_initialize_completion_queue()
809 &ihost->scu_registers->sdma.unsolicited_frame_queue_control); in sci_controller_initialize_unsolicited_frame_queue()
818 &ihost->scu_registers->sdma.unsolicited_frame_get_pointer); in sci_controller_initialize_unsolicited_frame_queue()
822 &ihost->scu_registers->sdma.unsolicited_frame_put_pointer); in sci_controller_initialize_unsolicited_frame_queue()
827 if (ihost->sm.current_state_id == SCIC_STARTING) { in sci_controller_transition_to_ready()
832 sci_change_state(&ihost->sm, SCIC_READY); in sci_controller_transition_to_ready()
842 state = iphy->sm.current_state_id; in is_phy_starting()
866 struct isci_phy *iphy = &ihost->phys[i]; in is_controller_start_complete()
867 u32 state = iphy->sm.current_state_id; in is_controller_start_complete()
879 * - all links have been given an opportunity to start in is_controller_start_complete()
880 * - have no indication of a connected device in is_controller_start_complete()
881 * - have an indication of a connected device and it has in is_controller_start_complete()
884 if ((iphy->is_in_link_training == false && state == SCI_PHY_INITIAL) || in is_controller_start_complete()
885 (iphy->is_in_link_training == false && state == SCI_PHY_STOPPED) || in is_controller_start_complete()
886 (iphy->is_in_link_training == true && is_phy_starting(iphy)) || in is_controller_start_complete()
887 (ihost->port_agent.phy_ready_mask != ihost->port_agent.phy_configured_mask)) in is_controller_start_complete()
895 * sci_controller_start_next_phy - start phy
904 struct sci_oem_params *oem = &ihost->oem_parameters; in sci_controller_start_next_phy()
910 if (ihost->phy_startup_timer_pending) in sci_controller_start_next_phy()
913 if (ihost->next_phy_to_start >= SCI_MAX_PHYS) { in sci_controller_start_next_phy()
916 sci_del_timer(&ihost->phy_timer); in sci_controller_start_next_phy()
917 ihost->phy_startup_timer_pending = false; in sci_controller_start_next_phy()
920 iphy = &ihost->phys[ihost->next_phy_to_start]; in sci_controller_start_next_phy()
922 if (oem->controller.mode_type == SCIC_PORT_MANUAL_CONFIGURATION_MODE) { in sci_controller_start_next_phy()
924 ihost->next_phy_to_start++; in sci_controller_start_next_phy()
942 sci_mod_timer(&ihost->phy_timer, in sci_controller_start_next_phy()
944 ihost->phy_startup_timer_pending = true; in sci_controller_start_next_phy()
946 dev_warn(&ihost->pdev->dev, in sci_controller_start_next_phy()
951 ihost->phys[ihost->next_phy_to_start].phy_index, in sci_controller_start_next_phy()
955 ihost->next_phy_to_start++; in sci_controller_start_next_phy()
968 spin_lock_irqsave(&ihost->scic_lock, flags); in phy_startup_timeout()
970 if (tmr->cancel) in phy_startup_timeout()
973 ihost->phy_startup_timer_pending = false; in phy_startup_timeout()
980 spin_unlock_irqrestore(&ihost->scic_lock, flags); in phy_startup_timeout()
985 return CIRC_CNT(ihost->tci_head, ihost->tci_tail, SCI_MAX_IO_REQUESTS); in isci_tci_active()
994 if (ihost->sm.current_state_id != SCIC_INITIALIZED) { in sci_controller_start()
995 dev_warn(&ihost->pdev->dev, "%s invalid state: %d\n", in sci_controller_start()
996 __func__, ihost->sm.current_state_id); in sci_controller_start()
1001 BUILD_BUG_ON(SCI_MAX_IO_REQUESTS > 1 << sizeof(ihost->tci_pool[0]) * 8); in sci_controller_start()
1002 ihost->tci_head = 0; in sci_controller_start()
1003 ihost->tci_tail = 0; in sci_controller_start()
1004 for (index = 0; index < ihost->task_context_entries; index++) in sci_controller_start()
1008 sci_remote_node_table_initialize(&ihost->available_remote_nodes, in sci_controller_start()
1009 ihost->remote_node_entries); in sci_controller_start()
1030 for (index = 0; index < ihost->logical_port_entries; index++) { in sci_controller_start()
1031 struct isci_port *iport = &ihost->ports[index]; in sci_controller_start()
1040 sci_mod_timer(&ihost->timer, timeout); in sci_controller_start()
1042 sci_change_state(&ihost->sm, SCIC_STARTING); in sci_controller_start()
1049 struct isci_host *ihost = SHOST_TO_SAS_HA(shost)->lldd_ha; in isci_host_start()
1052 set_bit(IHOST_START_PENDING, &ihost->flags); in isci_host_start()
1054 spin_lock_irq(&ihost->scic_lock); in isci_host_start()
1057 spin_unlock_irq(&ihost->scic_lock); in isci_host_start()
1063 clear_bit(IHOST_STOP_PENDING, &ihost->flags); in isci_host_stop_complete()
1064 wake_up(&ihost->eventq); in isci_host_stop_complete()
1074 writel(SMU_ISR_COMPLETION, &ihost->smu_registers->interrupt_status); in sci_controller_completion_handler()
1076 writel(0xFF000000, &ihost->smu_registers->interrupt_mask); in sci_controller_completion_handler()
1077 writel(0, &ihost->smu_registers->interrupt_mask); in sci_controller_completion_handler()
1082 if (!test_bit(IREQ_ABORT_PATH_ACTIVE, &ireq->flags) && in ireq_done()
1083 !(task->task_state_flags & SAS_TASK_STATE_ABORTED)) { in ireq_done()
1084 if (test_bit(IREQ_COMPLETE_IN_TARGET, &ireq->flags)) { in ireq_done()
1086 dev_dbg(&ihost->pdev->dev, in ireq_done()
1087 "%s: Normal - ireq/task = %p/%p\n", in ireq_done()
1089 task->lldd_task = NULL; in ireq_done()
1090 task->task_done(task); in ireq_done()
1092 dev_dbg(&ihost->pdev->dev, in ireq_done()
1093 "%s: Error - ireq/task = %p/%p\n", in ireq_done()
1095 if (sas_protocol_ata(task->task_proto)) in ireq_done()
1096 task->lldd_task = NULL; in ireq_done()
1100 task->lldd_task = NULL; in ireq_done()
1102 if (test_and_clear_bit(IREQ_ABORT_PATH_ACTIVE, &ireq->flags)) in ireq_done()
1103 wake_up_all(&ihost->eventq); in ireq_done()
1105 if (!test_bit(IREQ_NO_AUTO_FREE_TAG, &ireq->flags)) in ireq_done()
1106 isci_free_tag(ihost, ireq->io_tag); in ireq_done()
1109 * isci_host_completion_routine() - This function is the delayed service
1121 spin_lock_irq(&ihost->scic_lock); in isci_host_completion_routine()
1123 spin_unlock_irq(&ihost->scic_lock); in isci_host_completion_routine()
1129 active = isci_tci_active(ihost) - SCI_MAX_PORTS; in isci_host_completion_routine()
1137 &ihost->smu_registers->interrupt_coalesce_control); in isci_host_completion_routine()
1141 * sci_controller_stop() - This method will stop an individual controller
1144 * conditions are met: -# the method return status is SCI_SUCCESS. -# the
1160 if (ihost->sm.current_state_id != SCIC_READY) { in sci_controller_stop()
1161 dev_warn(&ihost->pdev->dev, "%s invalid state: %d\n", in sci_controller_stop()
1162 __func__, ihost->sm.current_state_id); in sci_controller_stop()
1166 sci_mod_timer(&ihost->timer, timeout); in sci_controller_stop()
1167 sci_change_state(&ihost->sm, SCIC_STOPPING); in sci_controller_stop()
1172 * sci_controller_reset() - This method will reset the supplied core
1185 switch (ihost->sm.current_state_id) { in sci_controller_reset()
1194 sci_change_state(&ihost->sm, SCIC_RESETTING); in sci_controller_reset()
1197 dev_warn(&ihost->pdev->dev, "%s invalid state: %d\n", in sci_controller_reset()
1198 __func__, ihost->sm.current_state_id); in sci_controller_reset()
1212 phy_status = sci_phy_stop(&ihost->phys[index]); in sci_controller_stop_phys()
1218 dev_warn(&ihost->pdev->dev, in sci_controller_stop_phys()
1222 ihost->phys[index].phy_index, phy_status); in sci_controller_stop_phys()
1231 * isci_host_deinit - shutdown frame reception and dma
1247 writel(SGPIO_HW_CONTROL, &ihost->scu_registers->peg0.sgpio.output_data_select[i]); in isci_host_deinit()
1249 set_bit(IHOST_STOP_PENDING, &ihost->flags); in isci_host_deinit()
1251 spin_lock_irq(&ihost->scic_lock); in isci_host_deinit()
1253 spin_unlock_irq(&ihost->scic_lock); in isci_host_deinit()
1265 * enclosure to sample the gpios going inactive in isci_host_deinit()
1267 writel(0, &ihost->scu_registers->peg0.sgpio.interface_control); in isci_host_deinit()
1269 spin_lock_irq(&ihost->scic_lock); in isci_host_deinit()
1271 spin_unlock_irq(&ihost->scic_lock); in isci_host_deinit()
1274 for (i = 0; i < ihost->logical_port_entries; i++) { in isci_host_deinit()
1275 struct isci_port *iport = &ihost->ports[i]; in isci_host_deinit()
1276 del_timer_sync(&iport->timer.timer); in isci_host_deinit()
1281 struct isci_phy *iphy = &ihost->phys[i]; in isci_host_deinit()
1282 del_timer_sync(&iphy->sata_timer.timer); in isci_host_deinit()
1285 del_timer_sync(&ihost->port_agent.timer.timer); in isci_host_deinit()
1287 del_timer_sync(&ihost->power_control.timer.timer); in isci_host_deinit()
1289 del_timer_sync(&ihost->timer.timer); in isci_host_deinit()
1291 del_timer_sync(&ihost->phy_timer.timer); in isci_host_deinit()
1296 struct pci_dev *pdev = isci_host->pdev; in scu_base()
1297 int id = isci_host->id; in scu_base()
1304 struct pci_dev *pdev = isci_host->pdev; in smu_base()
1305 int id = isci_host->id; in smu_base()
1314 sci_change_state(&ihost->sm, SCIC_RESET); in sci_controller_initial_state_enter()
1321 sci_del_timer(&ihost->timer); in sci_controller_starting_state_exit()
1332 * sci_controller_set_interrupt_coalescence() - This method allows the user to
1364 * ----- --- --- ----- in sci_controller_set_interrupt_coalescence()
1365 * 0 - - Disabled in sci_controller_set_interrupt_coalescence()
1366 * 1 13.3 20.0 ns in sci_controller_set_interrupt_coalescence()
1402 /* make the timeout value in unit of (10 ns). */ in sci_controller_set_interrupt_coalescence()
1415 if ((coalesce_timeout - max) < (2 * min - coalesce_timeout)) in sci_controller_set_interrupt_coalescence()
1434 &ihost->smu_registers->interrupt_coalesce_control); in sci_controller_set_interrupt_coalescence()
1437 ihost->interrupt_coalesce_number = (u16)coalesce_number; in sci_controller_set_interrupt_coalescence()
1438 ihost->interrupt_coalesce_timeout = coalesce_timeout / 100; in sci_controller_set_interrupt_coalescence()
1450 val = readl(&ihost->smu_registers->clock_gating_control); in sci_controller_ready_state_enter()
1455 writel(val, &ihost->smu_registers->clock_gating_control); in sci_controller_ready_state_enter()
1475 for (index = 0; index < ihost->logical_port_entries; index++) { in sci_controller_stop_ports()
1476 struct isci_port *iport = &ihost->ports[index]; in sci_controller_stop_ports()
1484 dev_warn(&ihost->pdev->dev, in sci_controller_stop_ports()
1488 iport->logical_port_index, in sci_controller_stop_ports()
1504 for (index = 0; index < ihost->remote_node_entries; index++) { in sci_controller_stop_devices()
1505 if (ihost->device_table[index] != NULL) { in sci_controller_stop_devices()
1507 device_status = sci_remote_device_stop(ihost->device_table[index], 0); in sci_controller_stop_devices()
1511 dev_warn(&ihost->pdev->dev, in sci_controller_stop_devices()
1516 ihost->device_table[index], device_status); in sci_controller_stop_devices()
1539 sci_del_timer(&ihost->timer); in sci_controller_stopping_state_exit()
1548 writel(0xFFFFFFFF, &ihost->smu_registers->soft_reset_control); in sci_controller_reset_hardware()
1550 /* Delay for 1ms to before clearing the CQP and UFQPR. */ in sci_controller_reset_hardware()
1554 writel(0x00000000, &ihost->smu_registers->completion_queue_get); in sci_controller_reset_hardware()
1557 writel(0, &ihost->scu_registers->sdma.unsolicited_frame_get_pointer); in sci_controller_reset_hardware()
1560 writel(~SMU_INTERRUPT_STATUS_RESERVED_MASK, &ihost->smu_registers->interrupt_status); in sci_controller_reset_hardware()
1568 sci_change_state(&ihost->sm, SCIC_RESET); in sci_controller_resetting_state_enter()
1599 struct sci_base_state_machine *sm = &ihost->sm; in controller_timeout()
1602 spin_lock_irqsave(&ihost->scic_lock, flags); in controller_timeout()
1604 if (tmr->cancel) in controller_timeout()
1607 if (sm->current_state_id == SCIC_STARTING) in controller_timeout()
1609 else if (sm->current_state_id == SCIC_STOPPING) { in controller_timeout()
1613 dev_err(&ihost->pdev->dev, in controller_timeout()
1619 spin_unlock_irqrestore(&ihost->scic_lock, flags); in controller_timeout()
1628 sci_init_sm(&ihost->sm, sci_controller_state_table, SCIC_INITIAL); in sci_controller_construct()
1630 ihost->scu_registers = scu_base; in sci_controller_construct()
1631 ihost->smu_registers = smu_base; in sci_controller_construct()
1633 sci_port_configuration_agent_construct(&ihost->port_agent); in sci_controller_construct()
1637 sci_port_construct(&ihost->ports[i], i, ihost); in sci_controller_construct()
1638 sci_port_construct(&ihost->ports[i], SCIC_SDS_DUMMY_PORT, ihost); in sci_controller_construct()
1643 sci_phy_construct(&ihost->phys[i], in sci_controller_construct()
1644 &ihost->ports[SCI_MAX_PORTS], i); in sci_controller_construct()
1647 ihost->invalid_phy_mask = 0; in sci_controller_construct()
1649 sci_init_timer(&ihost->timer, controller_timeout); in sci_controller_construct()
1659 if (oem->ports[i].phy_mask > SCIC_SDS_PARM_PHY_MASK_MAX) in sci_oem_parameters_validate()
1660 return -EINVAL; in sci_oem_parameters_validate()
1663 if (oem->phys[i].sas_address.high == 0 && in sci_oem_parameters_validate()
1664 oem->phys[i].sas_address.low == 0) in sci_oem_parameters_validate()
1665 return -EINVAL; in sci_oem_parameters_validate()
1667 if (oem->controller.mode_type == SCIC_PORT_AUTOMATIC_CONFIGURATION_MODE) { in sci_oem_parameters_validate()
1669 if (oem->ports[i].phy_mask != 0) in sci_oem_parameters_validate()
1670 return -EINVAL; in sci_oem_parameters_validate()
1671 } else if (oem->controller.mode_type == SCIC_PORT_MANUAL_CONFIGURATION_MODE) { in sci_oem_parameters_validate()
1675 phy_mask |= oem->ports[i].phy_mask; in sci_oem_parameters_validate()
1678 return -EINVAL; in sci_oem_parameters_validate()
1680 return -EINVAL; in sci_oem_parameters_validate()
1682 if (oem->controller.max_concurr_spin_up > MAX_CONCURRENT_DEVICE_SPIN_UP_COUNT || in sci_oem_parameters_validate()
1683 oem->controller.max_concurr_spin_up < 1) in sci_oem_parameters_validate()
1684 return -EINVAL; in sci_oem_parameters_validate()
1686 if (oem->controller.do_enable_ssc) { in sci_oem_parameters_validate()
1687 if (version < ISCI_ROM_VER_1_1 && oem->controller.do_enable_ssc != 1) in sci_oem_parameters_validate()
1688 return -EINVAL; in sci_oem_parameters_validate()
1691 u8 test = oem->controller.ssc_sata_tx_spread_level; in sci_oem_parameters_validate()
1701 return -EINVAL; in sci_oem_parameters_validate()
1704 test = oem->controller.ssc_sas_tx_spread_level; in sci_oem_parameters_validate()
1705 if (oem->controller.ssc_sas_tx_type == 0) { in sci_oem_parameters_validate()
1712 return -EINVAL; in sci_oem_parameters_validate()
1714 } else if (oem->controller.ssc_sas_tx_type == 1) { in sci_oem_parameters_validate()
1721 return -EINVAL; in sci_oem_parameters_validate()
1732 if (ihost->user_parameters.max_concurr_spinup) in max_spin_up()
1733 return min_t(u8, ihost->user_parameters.max_concurr_spinup, in max_spin_up()
1736 return min_t(u8, ihost->oem_parameters.controller.max_concurr_spin_up, in max_spin_up()
1748 spin_lock_irqsave(&ihost->scic_lock, flags); in power_control_timeout()
1750 if (tmr->cancel) in power_control_timeout()
1753 ihost->power_control.phys_granted_power = 0; in power_control_timeout()
1755 if (ihost->power_control.phys_waiting == 0) { in power_control_timeout()
1756 ihost->power_control.timer_started = false; in power_control_timeout()
1762 if (ihost->power_control.phys_waiting == 0) in power_control_timeout()
1765 iphy = ihost->power_control.requesters[i]; in power_control_timeout()
1769 if (ihost->power_control.phys_granted_power >= max_spin_up(ihost)) in power_control_timeout()
1772 ihost->power_control.requesters[i] = NULL; in power_control_timeout()
1773 ihost->power_control.phys_waiting--; in power_control_timeout()
1774 ihost->power_control.phys_granted_power++; in power_control_timeout()
1777 if (iphy->protocol == SAS_PROTOCOL_SSP) { in power_control_timeout()
1781 struct isci_phy *requester = ihost->power_control.requesters[j]; in power_control_timeout()
1789 u8 other = memcmp(requester->frame_rcvd.iaf.sas_addr, in power_control_timeout()
1790 iphy->frame_rcvd.iaf.sas_addr, in power_control_timeout()
1791 sizeof(requester->frame_rcvd.iaf.sas_addr)); in power_control_timeout()
1794 ihost->power_control.requesters[j] = NULL; in power_control_timeout()
1795 ihost->power_control.phys_waiting--; in power_control_timeout()
1808 ihost->power_control.timer_started = true; in power_control_timeout()
1811 spin_unlock_irqrestore(&ihost->scic_lock, flags); in power_control_timeout()
1819 if (ihost->power_control.phys_granted_power < max_spin_up(ihost)) { in sci_controller_power_control_queue_insert()
1820 ihost->power_control.phys_granted_power++; in sci_controller_power_control_queue_insert()
1827 if (ihost->power_control.timer_started) in sci_controller_power_control_queue_insert()
1828 sci_del_timer(&ihost->power_control.timer); in sci_controller_power_control_queue_insert()
1830 sci_mod_timer(&ihost->power_control.timer, in sci_controller_power_control_queue_insert()
1832 ihost->power_control.timer_started = true; in sci_controller_power_control_queue_insert()
1844 current_phy = &ihost->phys[i]; in sci_controller_power_control_queue_insert()
1846 other = memcmp(current_phy->frame_rcvd.iaf.sas_addr, in sci_controller_power_control_queue_insert()
1847 iphy->frame_rcvd.iaf.sas_addr, in sci_controller_power_control_queue_insert()
1848 sizeof(current_phy->frame_rcvd.iaf.sas_addr)); in sci_controller_power_control_queue_insert()
1850 if (current_phy->sm.current_state_id == SCI_PHY_READY && in sci_controller_power_control_queue_insert()
1851 current_phy->protocol == SAS_PROTOCOL_SSP && in sci_controller_power_control_queue_insert()
1860 ihost->power_control.requesters[iphy->phy_index] = iphy; in sci_controller_power_control_queue_insert()
1861 ihost->power_control.phys_waiting++; in sci_controller_power_control_queue_insert()
1871 if (ihost->power_control.requesters[iphy->phy_index]) in sci_controller_power_control_queue_remove()
1872 ihost->power_control.phys_waiting--; in sci_controller_power_control_queue_remove()
1874 ihost->power_control.requesters[iphy->phy_index] = NULL; in sci_controller_power_control_queue_remove()
1899 + ihost->id; in to_cable_select()
1901 return &ihost->oem_parameters.controller.cable_selection_mask; in to_cable_select()
1925 struct scu_afe_registers __iomem *afe = &ihost->scu_registers->afe; in sci_controller_afe_initialization()
1926 const struct sci_oem_params *oem = &ihost->oem_parameters; in sci_controller_afe_initialization()
1927 struct pci_dev *pdev = ihost->pdev; in sci_controller_afe_initialization()
1933 writel(0x0081000f, &afe->afe_dfx_master_control0); in sci_controller_afe_initialization()
1937 /* PM Rx Equalization Save, PM SPhy Rx Acknowledgement in sci_controller_afe_initialization()
1940 writel(0x0007FFFF, &afe->afe_pmsn_master_control2); in sci_controller_afe_initialization()
1946 writel(0x00005A00, &afe->afe_bias_control); in sci_controller_afe_initialization()
1948 writel(0x00005F00, &afe->afe_bias_control); in sci_controller_afe_initialization()
1950 writel(0x00005500, &afe->afe_bias_control); in sci_controller_afe_initialization()
1956 writel(0x80040908, &afe->afe_pll_control0); in sci_controller_afe_initialization()
1958 writel(0x80040A08, &afe->afe_pll_control0); in sci_controller_afe_initialization()
1960 writel(0x80000B08, &afe->afe_pll_control0); in sci_controller_afe_initialization()
1962 writel(0x00000B08, &afe->afe_pll_control0); in sci_controller_afe_initialization()
1964 writel(0x80000B08, &afe->afe_pll_control0); in sci_controller_afe_initialization()
1971 afe_status = readl(&afe->afe_common_block_status); in sci_controller_afe_initialization()
1979 writel(0x7bcc96ad, &afe->afe_pmsn_master_control0); in sci_controller_afe_initialization()
1984 struct scu_afe_transceiver __iomem *xcvr = &afe->scu_afe_xcvr[phy_id]; in sci_controller_afe_initialization()
1985 const struct sci_phy_oem_params *oem_phy = &oem->phys[phy_id]; in sci_controller_afe_initialization()
1995 writel(0x00004512, &xcvr->afe_xcvr_control0); in sci_controller_afe_initialization()
1998 writel(0x0050100F, &xcvr->afe_xcvr_control1); in sci_controller_afe_initialization()
2002 writel(0x00030000, &xcvr->afe_tx_ssc_control); in sci_controller_afe_initialization()
2006 writel(0x00010202, &xcvr->afe_tx_ssc_control); in sci_controller_afe_initialization()
2012 writel(0x00014500, &xcvr->afe_xcvr_control0); in sci_controller_afe_initialization()
2016 writel(0x00010202, &xcvr->afe_tx_ssc_control); in sci_controller_afe_initialization()
2022 writel(0x0001C500, &xcvr->afe_xcvr_control0); in sci_controller_afe_initialization()
2026 /* Power up TX and RX out from power down (PWRDNTX and in sci_controller_afe_initialization()
2030 writel(0x000003F0, &xcvr->afe_channel_control); in sci_controller_afe_initialization()
2032 writel(0x000003D7, &xcvr->afe_channel_control); in sci_controller_afe_initialization()
2035 writel(0x000003D4, &xcvr->afe_channel_control); in sci_controller_afe_initialization()
2037 writel(0x000001E7, &xcvr->afe_channel_control); in sci_controller_afe_initialization()
2040 writel(0x000001E4, &xcvr->afe_channel_control); in sci_controller_afe_initialization()
2043 &xcvr->afe_channel_control); in sci_controller_afe_initialization()
2047 &xcvr->afe_channel_control); in sci_controller_afe_initialization()
2053 writel(0x00040000, &xcvr->afe_tx_control); in sci_controller_afe_initialization()
2058 /* RDPI=0x0(RX Power On), RXOOBDETPDNC=0x0, in sci_controller_afe_initialization()
2059 * TPD=0x0(TX Power On), RDD=0x0(RX Detect in sci_controller_afe_initialization()
2062 writel(0x00004100, &xcvr->afe_xcvr_control0); in sci_controller_afe_initialization()
2064 writel(0x00014100, &xcvr->afe_xcvr_control0); in sci_controller_afe_initialization()
2066 writel(0x0001C100, &xcvr->afe_xcvr_control0); in sci_controller_afe_initialization()
2071 writel(0x3F11103F, &xcvr->afe_rx_ssc_control0); in sci_controller_afe_initialization()
2073 writel(0x3F11103F, &xcvr->afe_rx_ssc_control0); in sci_controller_afe_initialization()
2076 writel(0x00040000, &xcvr->afe_tx_control); in sci_controller_afe_initialization()
2078 writel(0x01400C0F, &xcvr->afe_rx_ssc_control1); in sci_controller_afe_initialization()
2081 writel(0x3F6F103F, &xcvr->afe_rx_ssc_control0); in sci_controller_afe_initialization()
2085 writel(0x00040000, &xcvr->afe_tx_control); in sci_controller_afe_initialization()
2089 &xcvr->afe_xcvr_control1); in sci_controller_afe_initialization()
2092 writel(0x000003E0, &xcvr->afe_dfx_rx_control1); in sci_controller_afe_initialization()
2097 &xcvr->afe_rx_ssc_control0); in sci_controller_afe_initialization()
2101 writel(0x00040000, &xcvr->afe_tx_control); in sci_controller_afe_initialization()
2106 writel(oem_phy->afe_tx_amp_control0, &xcvr->afe_tx_amp_control0); in sci_controller_afe_initialization()
2109 writel(oem_phy->afe_tx_amp_control1, &xcvr->afe_tx_amp_control1); in sci_controller_afe_initialization()
2112 writel(oem_phy->afe_tx_amp_control2, &xcvr->afe_tx_amp_control2); in sci_controller_afe_initialization()
2115 writel(oem_phy->afe_tx_amp_control3, &xcvr->afe_tx_amp_control3); in sci_controller_afe_initialization()
2120 writel(0x00010f00, &afe->afe_dfx_master_control0); in sci_controller_afe_initialization()
2126 sci_init_timer(&ihost->power_control.timer, power_control_timeout); in sci_controller_initialize_power_control()
2128 memset(ihost->power_control.requesters, 0, in sci_controller_initialize_power_control()
2129 sizeof(ihost->power_control.requesters)); in sci_controller_initialize_power_control()
2131 ihost->power_control.phys_waiting = 0; in sci_controller_initialize_power_control()
2132 ihost->power_control.phys_granted_power = 0; in sci_controller_initialize_power_control()
2137 struct sci_base_state_machine *sm = &ihost->sm; in sci_controller_initialize()
2141 if (ihost->sm.current_state_id != SCIC_RESET) { in sci_controller_initialize()
2142 dev_warn(&ihost->pdev->dev, "%s invalid state: %d\n", in sci_controller_initialize()
2143 __func__, ihost->sm.current_state_id); in sci_controller_initialize()
2149 sci_init_timer(&ihost->phy_timer, phy_startup_timeout); in sci_controller_initialize()
2151 ihost->next_phy_to_start = 0; in sci_controller_initialize()
2152 ihost->phy_startup_timer_pending = false; in sci_controller_initialize()
2165 writel(0, &ihost->smu_registers->soft_reset_control); in sci_controller_initialize()
2170 for (i = 100; i >= 1; i--) { in sci_controller_initialize()
2175 status = readl(&ihost->smu_registers->control_status); in sci_controller_initialize()
2186 val = readl(&ihost->smu_registers->device_context_capacity); in sci_controller_initialize()
2189 ihost->logical_port_entries = min(smu_max_ports(val), SCI_MAX_PORTS); in sci_controller_initialize()
2190 ihost->task_context_entries = min(smu_max_task_contexts(val), SCI_MAX_IO_REQUESTS); in sci_controller_initialize()
2191 ihost->remote_node_entries = min(smu_max_rncs(val), SCI_MAX_REMOTE_DEVICES); in sci_controller_initialize()
2197 for (i = 0; i < ihost->logical_port_entries; i++) { in sci_controller_initialize()
2199 *ptsg = &ihost->scu_registers->peg0.ptsg; in sci_controller_initialize()
2201 writel(i, &ptsg->protocol_engine[i]); in sci_controller_initialize()
2205 val = readl(&ihost->scu_registers->sdma.pdma_configuration); in sci_controller_initialize()
2207 writel(val, &ihost->scu_registers->sdma.pdma_configuration); in sci_controller_initialize()
2209 val = readl(&ihost->scu_registers->sdma.cdma_configuration); in sci_controller_initialize()
2211 writel(val, &ihost->scu_registers->sdma.cdma_configuration); in sci_controller_initialize()
2218 result = sci_phy_initialize(&ihost->phys[i], in sci_controller_initialize()
2219 &ihost->scu_registers->peg0.pe[i].tl, in sci_controller_initialize()
2220 &ihost->scu_registers->peg0.pe[i].ll); in sci_controller_initialize()
2225 for (i = 0; i < ihost->logical_port_entries; i++) { in sci_controller_initialize()
2226 struct isci_port *iport = &ihost->ports[i]; in sci_controller_initialize()
2228 iport->port_task_scheduler_registers = &ihost->scu_registers->peg0.ptsg.port[i]; in sci_controller_initialize()
2229 iport->port_pe_configuration_register = &ihost->scu_registers->peg0.ptsg.protocol_engine[0]; in sci_controller_initialize()
2230 iport->viit_registers = &ihost->scu_registers->peg0.viit[i]; in sci_controller_initialize()
2233 result = sci_port_configuration_agent_initialize(ihost, &ihost->port_agent); in sci_controller_initialize()
2248 struct device *dev = &ihost->pdev->dev; in sci_controller_dma_alloc()
2252 /* detect re-initialization */ in sci_controller_dma_alloc()
2253 if (ihost->completion_queue) in sci_controller_dma_alloc()
2257 ihost->completion_queue = dmam_alloc_coherent(dev, size, &ihost->cq_dma, in sci_controller_dma_alloc()
2259 if (!ihost->completion_queue) in sci_controller_dma_alloc()
2260 return -ENOMEM; in sci_controller_dma_alloc()
2262 size = ihost->remote_node_entries * sizeof(union scu_remote_node_context); in sci_controller_dma_alloc()
2263 ihost->remote_node_context_table = dmam_alloc_coherent(dev, size, &ihost->rnc_dma, in sci_controller_dma_alloc()
2266 if (!ihost->remote_node_context_table) in sci_controller_dma_alloc()
2267 return -ENOMEM; in sci_controller_dma_alloc()
2269 size = ihost->task_context_entries * sizeof(struct scu_task_context), in sci_controller_dma_alloc()
2270 ihost->task_context_table = dmam_alloc_coherent(dev, size, &ihost->tc_dma, in sci_controller_dma_alloc()
2272 if (!ihost->task_context_table) in sci_controller_dma_alloc()
2273 return -ENOMEM; in sci_controller_dma_alloc()
2276 ihost->ufi_buf = dmam_alloc_coherent(dev, size, &ihost->ufi_dma, GFP_KERNEL); in sci_controller_dma_alloc()
2277 if (!ihost->ufi_buf) in sci_controller_dma_alloc()
2278 return -ENOMEM; in sci_controller_dma_alloc()
2286 return -ENOMEM; in sci_controller_dma_alloc()
2288 ireq->tc = &ihost->task_context_table[i]; in sci_controller_dma_alloc()
2289 ireq->owning_controller = ihost; in sci_controller_dma_alloc()
2290 ireq->request_daddr = dma; in sci_controller_dma_alloc()
2291 ireq->isci_host = ihost; in sci_controller_dma_alloc()
2292 ihost->reqs[i] = ireq; in sci_controller_dma_alloc()
2305 writel(lower_32_bits(ihost->cq_dma), &ihost->smu_registers->completion_queue_lower); in sci_controller_mem_init()
2306 writel(upper_32_bits(ihost->cq_dma), &ihost->smu_registers->completion_queue_upper); in sci_controller_mem_init()
2308 writel(lower_32_bits(ihost->rnc_dma), &ihost->smu_registers->remote_node_context_lower); in sci_controller_mem_init()
2309 writel(upper_32_bits(ihost->rnc_dma), &ihost->smu_registers->remote_node_context_upper); in sci_controller_mem_init()
2311 writel(lower_32_bits(ihost->tc_dma), &ihost->smu_registers->host_task_table_lower); in sci_controller_mem_init()
2312 writel(upper_32_bits(ihost->tc_dma), &ihost->smu_registers->host_task_table_upper); in sci_controller_mem_init()
2320 writel(lower_32_bits(ihost->uf_control.headers.physical_address), in sci_controller_mem_init()
2321 &ihost->scu_registers->sdma.uf_header_base_address_lower); in sci_controller_mem_init()
2322 writel(upper_32_bits(ihost->uf_control.headers.physical_address), in sci_controller_mem_init()
2323 &ihost->scu_registers->sdma.uf_header_base_address_upper); in sci_controller_mem_init()
2325 writel(lower_32_bits(ihost->uf_control.address_table.physical_address), in sci_controller_mem_init()
2326 &ihost->scu_registers->sdma.uf_address_table_lower); in sci_controller_mem_init()
2327 writel(upper_32_bits(ihost->uf_control.address_table.physical_address), in sci_controller_mem_init()
2328 &ihost->scu_registers->sdma.uf_address_table_upper); in sci_controller_mem_init()
2334 * isci_host_init - (re-)initialize hardware and internal (private) state
2338 * one-time initialization objects like locks and waitqueues, are
2346 spin_lock_irq(&ihost->scic_lock); in isci_host_init()
2348 spin_unlock_irq(&ihost->scic_lock); in isci_host_init()
2350 dev_err(&ihost->pdev->dev, in isci_host_init()
2351 "%s: sci_controller_construct failed - status = %x\n", in isci_host_init()
2354 return -ENODEV; in isci_host_init()
2357 spin_lock_irq(&ihost->scic_lock); in isci_host_init()
2359 spin_unlock_irq(&ihost->scic_lock); in isci_host_init()
2361 dev_warn(&ihost->pdev->dev, in isci_host_init()
2362 "%s: sci_controller_initialize failed -" in isci_host_init()
2365 return -ENODEV; in isci_host_init()
2373 writel(1, &ihost->scu_registers->peg0.sgpio.interface_control); in isci_host_init()
2375 writel(SGPIO_HW_CONTROL, &ihost->scu_registers->peg0.sgpio.output_data_select[i]); in isci_host_init()
2376 writel(0, &ihost->scu_registers->peg0.sgpio.vendor_specific_code); in isci_host_init()
2384 switch (ihost->sm.current_state_id) { in sci_controller_link_up()
2386 sci_del_timer(&ihost->phy_timer); in sci_controller_link_up()
2387 ihost->phy_startup_timer_pending = false; in sci_controller_link_up()
2388 ihost->port_agent.link_up_handler(ihost, &ihost->port_agent, in sci_controller_link_up()
2393 ihost->port_agent.link_up_handler(ihost, &ihost->port_agent, in sci_controller_link_up()
2397 dev_dbg(&ihost->pdev->dev, in sci_controller_link_up()
2399 "unexpected state %d\n", __func__, iphy->phy_index, in sci_controller_link_up()
2400 ihost->sm.current_state_id); in sci_controller_link_up()
2407 switch (ihost->sm.current_state_id) { in sci_controller_link_down()
2410 ihost->port_agent.link_down_handler(ihost, &ihost->port_agent, in sci_controller_link_down()
2414 dev_dbg(&ihost->pdev->dev, in sci_controller_link_down()
2418 iphy->phy_index, in sci_controller_link_down()
2419 ihost->sm.current_state_id); in sci_controller_link_down()
2427 for (index = 0; index < ihost->remote_node_entries; index++) { in sci_controller_has_remote_devices_stopping()
2428 if ((ihost->device_table[index] != NULL) && in sci_controller_has_remote_devices_stopping()
2429 (ihost->device_table[index]->sm.current_state_id == SCI_DEV_STOPPING)) in sci_controller_has_remote_devices_stopping()
2439 if (ihost->sm.current_state_id != SCIC_STOPPING) { in sci_controller_remote_device_stopped()
2440 dev_dbg(&ihost->pdev->dev, in sci_controller_remote_device_stopped()
2444 ihost->sm.current_state_id); in sci_controller_remote_device_stopped()
2454 dev_dbg(&ihost->pdev->dev, "%s[%d]: %#x\n", in sci_controller_post_request()
2455 __func__, ihost->id, request); in sci_controller_post_request()
2457 writel(request, &ihost->smu_registers->post_context_port); in sci_controller_post_request()
2467 if (task_index < ihost->task_context_entries) { in sci_request_by_tag()
2468 struct isci_request *ireq = ihost->reqs[task_index]; in sci_request_by_tag()
2470 if (test_bit(IREQ_ACTIVE, &ireq->flags)) { in sci_request_by_tag()
2473 if (task_sequence == ihost->io_request_sequence[task_index]) in sci_request_by_tag()
2503 &ihost->available_remote_nodes, remote_node_count in sci_controller_allocate_remote_node_context()
2507 ihost->device_table[node_index] = idev; in sci_controller_allocate_remote_node_context()
2523 if (ihost->device_table[node_id] == idev) { in sci_controller_free_remote_node_context()
2524 ihost->device_table[node_id] = NULL; in sci_controller_free_remote_node_context()
2527 &ihost->available_remote_nodes, remote_node_count, node_id in sci_controller_free_remote_node_context()
2541 sizeof(struct dev_to_host_fis) - sizeof(u32)); in sci_controller_copy_sata_response()
2546 if (sci_unsolicited_frame_control_release_frame(&ihost->uf_control, frame_index)) in sci_controller_release_frame()
2547 writel(ihost->uf_control.get, in sci_controller_release_frame()
2548 &ihost->scu_registers->sdma.unsolicited_frame_get_pointer); in sci_controller_release_frame()
2553 u16 tail = ihost->tci_tail & (SCI_MAX_IO_REQUESTS-1); in isci_tci_free()
2555 ihost->tci_pool[tail] = tci; in isci_tci_free()
2556 ihost->tci_tail = tail + 1; in isci_tci_free()
2561 u16 head = ihost->tci_head & (SCI_MAX_IO_REQUESTS-1); in isci_tci_alloc()
2562 u16 tci = ihost->tci_pool[head]; in isci_tci_alloc()
2564 ihost->tci_head = head + 1; in isci_tci_alloc()
2570 return CIRC_SPACE(ihost->tci_head, ihost->tci_tail, SCI_MAX_IO_REQUESTS); in isci_tci_space()
2577 u8 seq = ihost->io_request_sequence[tci]; in isci_alloc_tag()
2594 if (seq == ihost->io_request_sequence[tci]) { in isci_free_tag()
2595 ihost->io_request_sequence[tci] = (seq+1) & (SCI_MAX_SEQ-1); in isci_free_tag()
2610 if (ihost->sm.current_state_id != SCIC_READY) { in sci_controller_start_io()
2611 dev_warn(&ihost->pdev->dev, "%s invalid state: %d\n", in sci_controller_start_io()
2612 __func__, ihost->sm.current_state_id); in sci_controller_start_io()
2620 set_bit(IREQ_ACTIVE, &ireq->flags); in sci_controller_start_io()
2621 sci_controller_post_request(ihost, ireq->post_context); in sci_controller_start_io()
2635 if (ihost->sm.current_state_id != SCIC_READY) { in sci_controller_terminate_request()
2636 dev_warn(&ihost->pdev->dev, "%s invalid state: %d\n", in sci_controller_terminate_request()
2637 __func__, ihost->sm.current_state_id); in sci_controller_terminate_request()
2642 dev_dbg(&ihost->pdev->dev, "%s: status=%d; ireq=%p; flags=%lx\n", in sci_controller_terminate_request()
2643 __func__, status, ireq, ireq->flags); in sci_controller_terminate_request()
2646 !test_bit(IREQ_PENDING_ABORT, &ireq->flags) && in sci_controller_terminate_request()
2647 !test_and_set_bit(IREQ_TC_ABORT_POSTED, &ireq->flags)) { in sci_controller_terminate_request()
2649 * POST_TC_ABORT request sub-type. in sci_controller_terminate_request()
2652 ihost, ireq->post_context | in sci_controller_terminate_request()
2659 * sci_controller_complete_io() - This method will perform core specific
2662 * reused (i.e. re-constructed).
2675 switch (ihost->sm.current_state_id) { in sci_controller_complete_io()
2684 clear_bit(IREQ_ACTIVE, &ireq->flags); in sci_controller_complete_io()
2687 dev_warn(&ihost->pdev->dev, "%s invalid state: %d\n", in sci_controller_complete_io()
2688 __func__, ihost->sm.current_state_id); in sci_controller_complete_io()
2696 struct isci_host *ihost = ireq->owning_controller; in sci_controller_continue_io()
2698 if (ihost->sm.current_state_id != SCIC_READY) { in sci_controller_continue_io()
2699 dev_warn(&ihost->pdev->dev, "%s invalid state: %d\n", in sci_controller_continue_io()
2700 __func__, ihost->sm.current_state_id); in sci_controller_continue_io()
2704 set_bit(IREQ_ACTIVE, &ireq->flags); in sci_controller_continue_io()
2705 sci_controller_post_request(ihost, ireq->post_context); in sci_controller_continue_io()
2710 * sci_controller_start_task() - This method is called by the SCIC user to
2724 if (ihost->sm.current_state_id != SCIC_READY) { in sci_controller_start_task()
2725 dev_warn(&ihost->pdev->dev, in sci_controller_start_task()
2735 set_bit(IREQ_ACTIVE, &ireq->flags); in sci_controller_start_task()
2744 set_bit(IREQ_ACTIVE, &ireq->flags); in sci_controller_start_task()
2745 sci_controller_post_request(ihost, ireq->post_context); in sci_controller_start_task()
2760 return -EINVAL; in sci_write_gpio_tx_gp()
2781 writel(val, &ihost->scu_registers->peg0.sgpio.output_data_select[d]); in sci_write_gpio_tx_gp()
2793 struct isci_host *ihost = sas_ha->lldd_ha; in isci_gpio_write()
2801 written = -EINVAL; in isci_gpio_write()