Linux驱动emmc的8bits/4bits/1bits模式自动匹配优化
【背景】
Linux驅動emmc的bus-width的bits模式匹配,從8bit->4bit->1bit的自適應匹配,是根據發送ext_csd命令來看是否有response應答來選擇的。但是每個bus-bit的response wait時間很長,wait_for_completion的timeout時間,默認為MAX_SCHEDULE_TIMEOUT=~0>>1,會阻塞等待很長時間,長達數秒,甚至此時文件系統已經初始化完成了還在阻塞等待。
【優化】
減少emmc bits-mode匹配時間;
在驅動mmc_wait_for_req_done()中使用wait_for_completion_timeout(&completion, msecs_to_jiffies(ms))來代替wait_for_completion(&completion),ms超時就返回。
【代碼】
??? if(unlikely(mrq->cmd->opcode == MMC_SEND_EXT_CSD))
?? ??? ?{
?? ??? ??? ?ret = wait_for_completion_timeout(&mrq->completion, msecs_to_jiffies(500));
?? ??? ??? ?if(!ret)
?? ??? ??? ?{
?? ??? ??? ??? ?struct sdhci_host *host_mmc;
?? ??? ??? ???? pr_info("[debug_emmc] timeout.");
?? ??? ??? ??? ?host_mmc = mmc_priv(host);
?? ??? ??? ??? ?mrq->cmd->error = -ETIMEDOUT;
?? ??? ??? ??? ?mrq->cmd->retries = 0;
?? ??? ??? ??? ?complete(&mrq->completion);
?? ??? ??? ??? ?host_mmc->mrq = NULL;
?? ??? ??? ?}?? ?
?? ??? ?}
?? ??? ?else
?? ??? ??? ?wait_for_completion(&mrq->completion);
?????????
總結
以上是生活随笔為你收集整理的Linux驱动emmc的8bits/4bits/1bits模式自动匹配优化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 妇科病历汇报PPT模板
- 下一篇: 阿里巴巴并购的迷局,暗合大数据拼图