diff options
-rw-r--r-- | drivers/scsi/isci/core/scic_sds_port.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/drivers/scsi/isci/core/scic_sds_port.c b/drivers/scsi/isci/core/scic_sds_port.c index 410c9a104bc0..a41fe426ac26 100644 --- a/drivers/scsi/isci/core/scic_sds_port.c +++ b/drivers/scsi/isci/core/scic_sds_port.c | |||
@@ -1673,12 +1673,6 @@ static void scic_sds_port_ready_substate_waiting_enter( | |||
1673 | 1673 | ||
1674 | scic_sds_port_suspend_port_task_scheduler(this_port); | 1674 | scic_sds_port_suspend_port_task_scheduler(this_port); |
1675 | 1675 | ||
1676 | /* Kill the dummy task for this port if it has not yet posted | ||
1677 | * the hardware will treat this as a NOP and just return abort | ||
1678 | * complete. | ||
1679 | */ | ||
1680 | scic_sds_port_abort_dummy_request(this_port); | ||
1681 | |||
1682 | this_port->not_ready_reason = SCIC_PORT_NOT_READY_NO_ACTIVE_PHYS; | 1676 | this_port->not_ready_reason = SCIC_PORT_NOT_READY_NO_ACTIVE_PHYS; |
1683 | 1677 | ||
1684 | if (this_port->active_phy_mask != 0) { | 1678 | if (this_port->active_phy_mask != 0) { |
@@ -1744,6 +1738,13 @@ static void scic_sds_port_ready_substate_operational_exit( | |||
1744 | { | 1738 | { |
1745 | struct scic_sds_port *this_port = (struct scic_sds_port *)object; | 1739 | struct scic_sds_port *this_port = (struct scic_sds_port *)object; |
1746 | 1740 | ||
1741 | /* | ||
1742 | * Kill the dummy task for this port if it has not yet posted | ||
1743 | * the hardware will treat this as a NOP and just return abort | ||
1744 | * complete. | ||
1745 | */ | ||
1746 | scic_sds_port_abort_dummy_request(this_port); | ||
1747 | |||
1747 | isci_event_port_not_ready( | 1748 | isci_event_port_not_ready( |
1748 | scic_sds_port_get_controller(this_port), | 1749 | scic_sds_port_get_controller(this_port), |
1749 | this_port, | 1750 | this_port, |
@@ -2643,6 +2644,13 @@ void scic_sds_port_invalidate_dummy_remote_node(struct scic_sds_port *sci_port) | |||
2643 | 2644 | ||
2644 | rnc->ssp.is_valid = false; | 2645 | rnc->ssp.is_valid = false; |
2645 | 2646 | ||
2647 | /* ensure the preceding tc abort request has reached the | ||
2648 | * controller and give it ample time to act before posting the rnc | ||
2649 | * invalidate | ||
2650 | */ | ||
2651 | SMU_ISR_READ(scic); /* flush */ | ||
2652 | udelay(10); | ||
2653 | |||
2646 | command = SCU_CONTEXT_COMMAND_POST_RNC_INVALIDATE | | 2654 | command = SCU_CONTEXT_COMMAND_POST_RNC_INVALIDATE | |
2647 | phys_index << SCU_CONTEXT_COMMAND_LOGICAL_PORT_SHIFT | rni; | 2655 | phys_index << SCU_CONTEXT_COMMAND_LOGICAL_PORT_SHIFT | rni; |
2648 | 2656 | ||