2014年1月24日 星期五

Support eMMC .

  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 的內容才有意義,才需要去解析......




沒有留言:

張貼留言