imx6sl 的 BSP 已經蠻新的了 , 目前的 eMMC 應該都認得/支援 .
我們開發的時候都使用 MMC0 來開機 , 內部 eMMC (MMC1) 先當作 /mnt/exdcard 來使用
(base on Android) .
當我都修正好MMC1的 IO setting 後, 發現開機會 crash . crash 的原因在 MMC1 偵測到 eMMC 後要解析 partition 時候會出錯 .
這時候想到多年前我第一次接觸 eMMC 的時候發現eMMC 多的一個 boot partition 的東西,
基本上我不太了解這個 boot partition 的用處,當時只將eMMC 當作一般 MMC 來使用.
有的前面的經驗 , 找尋一下 SD Driver 並修改 , 現在可以正確 working 了.
修改的 patch 如下 :
Index: drivers/mmc/card/block.c
===================================================================
--- drivers/mmc/card/block.c (revision 45)
+++ drivers/mmc/card/block.c (working copy)
@@ -449,7 +449,8 @@
if (main_md->part_curr == md->part_type)
return 0;
- if (mmc_card_mmc(card)) {
+ if (mmc_card_mmc(card))
+ {
card->ext_csd.part_config &= ~EXT_CSD_PART_CONFIG_ACC_MASK;
card->ext_csd.part_config |= md->part_type;
@@ -1200,7 +1201,8 @@
mmc_claim_host(card->host);
ret = mmc_blk_part_switch(card, md);
- if (ret) {
+ if (ret)
+ {
ret = 0;
goto out;
}
@@ -1419,7 +1421,11 @@
if (!mmc_card_mmc(card))
return 0;
- if (card->ext_csd.boot_size) {
+ if (card->ext_csd.part_config)
+ {
+
+ if (card->ext_csd.boot_size)
+ {
ret = mmc_blk_alloc_part(card, md, EXT_CSD_PART_CONFIG_ACC_BOOT0,
card->ext_csd.boot_size >> 9,
true,
@@ -1433,7 +1439,9 @@
if (ret)
return ret;
}
+ }
+
return ret;
}
主要是判斷csd 中的 part_config 有沒有設定,如果有設定 boot partition 的內容才有意義,才需要去解析......
沒有留言:
張貼留言