Browse Source

Merge pull request #2875 from Ingenic-community/mmc

sdio: mmc.c: 防止容量计算过程溢出/Prevent capacity calculation overflow.
Bernard Xiong 6 years ago
parent
commit
789fb4a938
1 changed files with 8 additions and 5 deletions
  1. 8 5
      components/drivers/sdio/mmc.c

+ 8 - 5
components/drivers/sdio/mmc.c

@@ -4,8 +4,8 @@
  * SPDX-License-Identifier: Apache-2.0
  * SPDX-License-Identifier: Apache-2.0
  *
  *
  * Change Logs:
  * Change Logs:
- * Date           Author        Notes
- * 2015-06-15     hichard     first version
+ * Date           Author       Notes
+ * 2015-06-15     hichard      first version
  */
  */
 
 
 #include <drivers/mmcsd_core.h>
 #include <drivers/mmcsd_core.h>
@@ -182,6 +182,8 @@ static int mmc_get_ext_csd(struct rt_mmcsd_card *card, rt_uint8_t **new_ext_csd)
  */
  */
 static int mmc_parse_ext_csd(struct rt_mmcsd_card *card, rt_uint8_t *ext_csd)
 static int mmc_parse_ext_csd(struct rt_mmcsd_card *card, rt_uint8_t *ext_csd)
 {
 {
+  rt_uint64_t card_capacity = 0;
+
   if(card == RT_NULL || ext_csd == RT_NULL)
   if(card == RT_NULL || ext_csd == RT_NULL)
   {
   {
     LOG_E("emmc parse ext csd fail, invaild args");
     LOG_E("emmc parse ext csd fail, invaild args");
@@ -191,9 +193,10 @@ static int mmc_parse_ext_csd(struct rt_mmcsd_card *card, rt_uint8_t *ext_csd)
   card->flags |=  CARD_FLAG_HIGHSPEED;
   card->flags |=  CARD_FLAG_HIGHSPEED;
   card->hs_max_data_rate = 200000000;
   card->hs_max_data_rate = 200000000;
   
   
-  card->card_capacity = *((rt_uint32_t *)&ext_csd[EXT_CSD_SEC_CNT]);
-  card->card_capacity *= card->card_blksize;
-  card->card_capacity >>= 10; /* unit:KB */
+  card_capacity = *((rt_uint32_t *)&ext_csd[EXT_CSD_SEC_CNT]);
+  card_capacity *= card->card_blksize;
+  card_capacity >>= 10; /* unit:KB */
+  card->card_capacity = card_capacity;
   LOG_I("emmc card capacity %d KB.", card->card_capacity);
   LOG_I("emmc card capacity %d KB.", card->card_capacity);
   
   
   return 0;
   return 0;