diff options
Diffstat (limited to 'drivers/scsi/isci/host.c')
-rw-r--r-- | drivers/scsi/isci/host.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/drivers/scsi/isci/host.c b/drivers/scsi/isci/host.c index 26072f1e9852..2328f98c7f1e 100644 --- a/drivers/scsi/isci/host.c +++ b/drivers/scsi/isci/host.c | |||
@@ -1091,6 +1091,7 @@ static void isci_host_completion_routine(unsigned long data) | |||
1091 | struct isci_request *request; | 1091 | struct isci_request *request; |
1092 | struct isci_request *next_request; | 1092 | struct isci_request *next_request; |
1093 | struct sas_task *task; | 1093 | struct sas_task *task; |
1094 | u16 active; | ||
1094 | 1095 | ||
1095 | INIT_LIST_HEAD(&completed_request_list); | 1096 | INIT_LIST_HEAD(&completed_request_list); |
1096 | INIT_LIST_HEAD(&errored_request_list); | 1097 | INIT_LIST_HEAD(&errored_request_list); |
@@ -1181,6 +1182,13 @@ static void isci_host_completion_routine(unsigned long data) | |||
1181 | } | 1182 | } |
1182 | } | 1183 | } |
1183 | 1184 | ||
1185 | /* the coalesence timeout doubles at each encoding step, so | ||
1186 | * update it based on the ilog2 value of the outstanding requests | ||
1187 | */ | ||
1188 | active = isci_tci_active(ihost); | ||
1189 | writel(SMU_ICC_GEN_VAL(NUMBER, active) | | ||
1190 | SMU_ICC_GEN_VAL(TIMER, ISCI_COALESCE_BASE + ilog2(active)), | ||
1191 | &ihost->smu_registers->interrupt_coalesce_control); | ||
1184 | } | 1192 | } |
1185 | 1193 | ||
1186 | /** | 1194 | /** |
@@ -1471,7 +1479,7 @@ static void sci_controller_ready_state_enter(struct sci_base_state_machine *sm) | |||
1471 | struct isci_host *ihost = container_of(sm, typeof(*ihost), sm); | 1479 | struct isci_host *ihost = container_of(sm, typeof(*ihost), sm); |
1472 | 1480 | ||
1473 | /* set the default interrupt coalescence number and timeout value. */ | 1481 | /* set the default interrupt coalescence number and timeout value. */ |
1474 | sci_controller_set_interrupt_coalescence(ihost, 0x10, 250); | 1482 | sci_controller_set_interrupt_coalescence(ihost, 0, 0); |
1475 | } | 1483 | } |
1476 | 1484 | ||
1477 | static void sci_controller_ready_state_exit(struct sci_base_state_machine *sm) | 1485 | static void sci_controller_ready_state_exit(struct sci_base_state_machine *sm) |