static void debug_work_func(struct work_struct *work) { unsigned int uSensorCnt; struct ssp_data *data = container_of(work, struct ssp_data, work_debug); ssp_dbg("[SSP]: %s(%u) - Sensor state: 0x%x, RC: %u, CC: %u, TC: %u\n", __func__, data->uIrqCnt, data->uSensorState, data->uResetCnt, data->uComFailCnt, data->uTimeOutCnt); for (uSensorCnt = 0; uSensorCnt < SENSOR_MAX; uSensorCnt++) if ((atomic_read(&data->aSensorEnable) & (1 << uSensorCnt)) || data->batchLatencyBuf[uSensorCnt]) print_sensordata(data, uSensorCnt); if (((atomic_read(&data->aSensorEnable) & (1 << ACCELEROMETER_SENSOR)) && (data->batchLatencyBuf[ACCELEROMETER_SENSOR] == 0) && (data->uIrqCnt == 0) && (data->uTimeOutCnt > 0)) || (data->uTimeOutCnt > LIMIT_TIMEOUT_CNT)) { if (data->uResetCnt < LIMIT_RESET_CNT) { pr_info("[SSP] : %s - uTimeOutCnt(%u), pending(%u)\n", __func__, data->uTimeOutCnt, !list_empty(&data->pending_list)); reset_mcu(data); } else ssp_enable(data, false); data->uTimeOutCnt = 0; data->uComFailCnt = 0; } data->uIrqCnt = 0; }
static void debug_work_func(struct work_struct *work) { unsigned int uSensorCnt; struct ssp_data *data = container_of(work, struct ssp_data, work_debug); ssp_dbg("[SSP]: %s(%u) - Sensor state: 0x%x, RC: %u, CC: %u, DC: %u," " LC: %u, TC: %u\n", __func__, data->uIrqCnt, data->uSensorState, data->uResetCnt, data->uComFailCnt, data->uDumpCnt, data->uListEmptyCnt, data->uTimeOutCnt); switch (data->fw_dl_state) { case FW_DL_STATE_FAIL: case FW_DL_STATE_DOWNLOADING: case FW_DL_STATE_SYNC: pr_info("[SSP] : %s firmware downloading state = %d\n", __func__, data->fw_dl_state); return; } for (uSensorCnt = 0; uSensorCnt < SENSOR_MAX; uSensorCnt++) if ((atomic_read(&data->aSensorEnable) & (1 << uSensorCnt)) || data->batchLatencyBuf[uSensorCnt]) print_sensordata(data, uSensorCnt); if (((atomic_read(&data->aSensorEnable) & (1 << ACCELEROMETER_SENSOR)) && (data->batchLatencyBuf[ACCELEROMETER_SENSOR] == 0) && (data->uIrqCnt == 0) && (data->uTimeOutCnt > 0)) || (data->uListEmptyCnt > LIMIT_LIST_EMPTY_CNT) || (data->uTimeOutCnt > LIMIT_TIMEOUT_CNT)) recovery_mcu(data); data->uIrqCnt = 0; }
static void debug_work_func(struct work_struct *work) { unsigned int uSensorCnt; struct ssp_data *data = container_of(work, struct ssp_data, work_debug); ssp_infof("(%u) - Sensor state: 0x%llx, RC: %u, CC: %u DC: %u" " TC: %u", data->uIrqCnt, data->uSensorState, data->uResetCnt, data->uComFailCnt, data->uDumpCnt, data->uTimeOutCnt); switch (data->fw_dl_state) { case FW_DL_STATE_FAIL: case FW_DL_STATE_DOWNLOADING: case FW_DL_STATE_SYNC: ssp_infof("firmware downloading state = %d", data->fw_dl_state); return; } for (uSensorCnt = 0; uSensorCnt < SENSOR_MAX; uSensorCnt++) if ((atomic64_read(&data->aSensorEnable) & (1 << uSensorCnt)) || data->batchLatencyBuf[uSensorCnt]) print_sensordata(data, uSensorCnt); if (((atomic64_read(&data->aSensorEnable) & (1 << ACCELEROMETER_SENSOR)) && (data->batchLatencyBuf[ACCELEROMETER_SENSOR] == 0) && (data->uIrqCnt == 0) && (data->uTimeOutCnt > 0)) || (data->uTimeOutCnt > LIMIT_TIMEOUT_CNT)) recovery_mcu(data); data->uIrqCnt = 0; if(data->gyro_lib_state == GYRO_CALIBRATION_STATE_EVENT_OCCUR) set_gyro_cal_lib_enable(data, false); }
static void debug_work_func(struct work_struct *work) { unsigned int uSensorCnt; struct ssp_data *data = container_of(work, struct ssp_data, work_debug); static int uTotalIrqCnt = 0; ssp_dbg("[SSP]: %s(%u) - Sensor state: 0x%x, TO: %u, BC: %u, RC: %u\n", __func__, data->uIrqCnt, data->uAliveSensorDebug, data->uTimeOutCnt, data->uBusyCnt, data->uResetCnt); for (uSensorCnt = 0; uSensorCnt < (SENSOR_MAX - 1); uSensorCnt++) if (atomic_read(&data->aSensorEnable) & (1 << uSensorCnt)) print_sensordata(data, uSensorCnt); if((atomic_read(&data->aSensorEnable) & 0x4f) && (data->uIrqCnt == 0)) uTotalIrqCnt++; else uTotalIrqCnt = 0; data->uIrqCnt = 0; if( (uTotalIrqCnt>1) || (data->uSsdFailCnt >= 3) || (data->uInstFailCnt >= 1) || ((data->uTimeOutCnt + data->uBusyCnt) > 5) ) { if (data->uResetCnt < 20) { reset_mcu(data); data->uResetCnt++; } data->uSsdFailCnt = 0; data->uInstFailCnt = 0; uTotalIrqCnt = 0; } }
static void debug_work_func(struct work_struct *work) { unsigned int uSensorCnt; struct ssp_data *data = container_of(work, struct ssp_data, work_debug); ssp_dbg("[SSP]: %s(%u) - Sensor state: 0x%x, RC: %u, MS: %u\n", __func__, data->uIrqCnt, data->uSensorState, data->uResetCnt, data->uMissSensorCnt); if (data->fw_dl_state >= FW_DL_STATE_DOWNLOADING && data->fw_dl_state < FW_DL_STATE_DONE) { pr_info("[SSP] : %s firmware downloading state = %d\n", __func__, data->fw_dl_state); return; } else if (data->fw_dl_state == FW_DL_STATE_FAIL) { pr_err("[SSP] : %s firmware download failed = %d\n", __func__, data->fw_dl_state); return; } for (uSensorCnt = 0; uSensorCnt < (SENSOR_MAX - 1); uSensorCnt++) if (atomic_read(&data->aSensorEnable) & (1 << uSensorCnt)) print_sensordata(data, uSensorCnt); if ((atomic_read(&data->aSensorEnable) & SSP_BYPASS_SENSORS_EN_ALL)\ && (data->uIrqCnt == 0)) data->uIrqFailCnt++; else data->uIrqFailCnt = 0; if (((data->uSsdFailCnt >= LIMIT_SSD_FAIL_CNT) || (data->uInstFailCnt >= LIMIT_INSTRUCTION_FAIL_CNT) || (data->uIrqFailCnt >= LIMIT_IRQ_FAIL_CNT) || ((data->uTimeOutCnt + data->uBusyCnt) > LIMIT_TIMEOUT_CNT)) && (data->bSspShutdown == false)) { if (data->uResetCnt < LIMIT_RESET_CNT) { pr_info("[SSP] : %s - uSsdFailCnt(%u), uInstFailCnt(%u),"\ "uIrqFailCnt(%u), uTimeOutCnt(%u), uBusyCnt(%u)\n", __func__, data->uSsdFailCnt, data->uInstFailCnt, data->uIrqFailCnt, data->uTimeOutCnt, data->uBusyCnt); reset_mcu(data); data->uResetCnt++; } else ssp_enable(data, false); data->uSsdFailCnt = 0; data->uInstFailCnt = 0; data->uTimeOutCnt = 0; data->uBusyCnt = 0; data->uIrqFailCnt = 0; } data->uIrqCnt = 0; }
static void debug_work_func(struct work_struct *work) { unsigned int uSensorCnt; struct ssp_data *data = container_of(work, struct ssp_data, work_debug); ssp_dbg("[SSP]: %s(%u) - Sensor state: 0x%x, RC: %u, MS: %u\n", __func__, data->uIrqCnt, data->uSensorState, data->uResetCnt, data->uMissSensorCnt); for (uSensorCnt = 0; uSensorCnt < (SENSOR_MAX - 1); uSensorCnt++) if (atomic_read(&data->aSensorEnable) & (1 << uSensorCnt)) print_sensordata(data, uSensorCnt); if ((atomic_read(&data->aSensorEnable) & 0x4f) && (data->uIrqCnt == 0)) data->uIrqFailCnt++; else data->uIrqFailCnt = 0; if (((data->uSsdFailCnt >= LIMIT_SSD_FAIL_CNT) || (data->uInstFailCnt >= LIMIT_INSTRUCTION_FAIL_CNT) || (data->uIrqFailCnt >= LIMIT_IRQ_FAIL_CNT) || ((data->uTimeOutCnt + data->uBusyCnt) > LIMIT_TIMEOUT_CNT)) && (data->bSspShutdown == false)) { if (data->uResetCnt < LIMIT_RESET_CNT) { reset_mcu(data); data->uResetCnt++; } else { if (data->bSspShutdown == false) { data->bSspShutdown = true; disable_irq_wake(data->iIrq); disable_irq(data->iIrq); } } data->uSsdFailCnt = 0; data->uInstFailCnt = 0; data->uTimeOutCnt = 0; data->uBusyCnt = 0; data->uIrqFailCnt = 0; } data->uIrqCnt = 0; }
static void debug_work_func(struct work_struct *work) { unsigned int uSensorCnt; struct ssp_data *data = container_of(work, struct ssp_data, work_debug); ssp_dbg("[SSP]: %s(%u) - Sensor state: 0x%x, RC: %u, CC: %u DC: %u TC: %u\n", __func__, data->uIrqCnt, data->uSensorState, data->uResetCnt, data->uComFailCnt, data->uDumpCnt, data->uTimeOutCnt); switch (data->fw_dl_state) { case FW_DL_STATE_FAIL: case FW_DL_STATE_DOWNLOADING: case FW_DL_STATE_SYNC: pr_info("[SSP] : %s firmware downloading state = %d\n", __func__, data->fw_dl_state); return; } for (uSensorCnt = 0; uSensorCnt < SENSOR_MAX; uSensorCnt++) if ((atomic_read(&data->aSensorEnable) & (1 << uSensorCnt)) || data->batchLatencyBuf[uSensorCnt]) print_sensordata(data, uSensorCnt); if (data->uTimeOutCnt > LIMIT_TIMEOUT_CNT) { if (data->uComFailCnt < LIMIT_RESET_CNT) { pr_info("[SSP] : %s - uTimeOutCnt(%u), pending(%u)\n", __func__, data->uTimeOutCnt, !list_empty(&data->pending_list)); data->uComFailCnt++; reset_mcu(data); } else ssp_enable(data, false); data->uTimeOutCnt = 0; } data->uIrqCnt = 0; }
static void debug_work_func(struct work_struct *work) { unsigned int uSensorCnt; struct ssp_data *data = container_of(work, struct ssp_data, work_debug); ssp_dbg("[SSP]: %s(%u) - Sensor state: 0x%x, RC: %u, MS: %u Santi: %u Dump: %u\n", __func__, data->uIrqCnt, data->uSensorState, data->uResetCnt, data->uMissSensorCnt,data->uSanityCnt,data->uDumpCnt); if (data->fw_dl_state >= FW_DL_STATE_DOWNLOADING && data->fw_dl_state < FW_DL_STATE_DONE) { pr_info("[SSP] : %s firmware downloading state = %d\n", __func__, data->fw_dl_state); return; } else if (data->fw_dl_state == FW_DL_STATE_FAIL) { pr_err("[SSP] : %s firmware download failed = %d\n", __func__, data->fw_dl_state); return; } if(sanity_check(data)>0) data->uSanityCnt++; if (set_sensor_position(data) < 0) { pr_err("[SSP]: %s :set_sensor_position delayed \n", __func__); } for (uSensorCnt = 0; uSensorCnt < (SENSOR_MAX); uSensorCnt++) if ((atomic_read(&data->aSensorEnable) & (1 << uSensorCnt)) || data->batchLatencyBuf[uSensorCnt]) print_sensordata(data, uSensorCnt); if (((data->uSsdFailCnt >= LIMIT_SSD_FAIL_CNT) || (data->uInstFailCnt >= LIMIT_INSTRUCTION_FAIL_CNT) || (data->uIrqFailCnt >= LIMIT_IRQ_FAIL_CNT) || ((data->uTimeOutCnt + data->uBusyCnt) > LIMIT_TIMEOUT_CNT)) && (data->bSspShutdown == false)) { if (data->uResetCnt < LIMIT_RESET_CNT) { wake_lock(&data->ssp_wake_lock); pr_info("[SSP] : %s - uSsdFailCnt(%u), uInstFailCnt(%u),"\ "uIrqFailCnt(%u), uTimeOutCnt(%u), uBusyCnt(%u), pending(%u)\n", __func__, data->uSsdFailCnt, data->uInstFailCnt, data->uIrqFailCnt, data->uTimeOutCnt, data->uBusyCnt, !list_empty(&data->pending_list)); reset_mcu(data); data->uResetCnt++; wake_unlock(&data->ssp_wake_lock); } else { pr_info("[SSP] : %s - data->uResetCnt == LIMIT_RESET_CNT\n", __func__); ssp_enable(data, false); } data->uSsdFailCnt = 0; data->uInstFailCnt = 0; data->uTimeOutCnt = 0; data->uBusyCnt = 0; data->uIrqFailCnt = 0; } data->uIrqCnt = 0; }