|
@@ -1091,6 +1091,7 @@ static void isci_host_completion_routine(unsigned long data)
|
|
|
struct isci_request *request;
|
|
|
struct isci_request *next_request;
|
|
|
struct sas_task *task;
|
|
|
+ u16 active;
|
|
|
|
|
|
INIT_LIST_HEAD(&completed_request_list);
|
|
|
INIT_LIST_HEAD(&errored_request_list);
|
|
@@ -1181,6 +1182,13 @@ static void isci_host_completion_routine(unsigned long data)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /* the coalesence timeout doubles at each encoding step, so
|
|
|
+ * update it based on the ilog2 value of the outstanding requests
|
|
|
+ */
|
|
|
+ active = isci_tci_active(ihost);
|
|
|
+ writel(SMU_ICC_GEN_VAL(NUMBER, active) |
|
|
|
+ SMU_ICC_GEN_VAL(TIMER, ISCI_COALESCE_BASE + ilog2(active)),
|
|
|
+ &ihost->smu_registers->interrupt_coalesce_control);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -1471,7 +1479,7 @@ static void sci_controller_ready_state_enter(struct sci_base_state_machine *sm)
|
|
|
struct isci_host *ihost = container_of(sm, typeof(*ihost), sm);
|
|
|
|
|
|
/* set the default interrupt coalescence number and timeout value. */
|
|
|
- sci_controller_set_interrupt_coalescence(ihost, 0x10, 250);
|
|
|
+ sci_controller_set_interrupt_coalescence(ihost, 0, 0);
|
|
|
}
|
|
|
|
|
|
static void sci_controller_ready_state_exit(struct sci_base_state_machine *sm)
|