Skip to content

Commit 4c7106f

Browse files
committed
component: sdio: fix potential ricky clock setting
Currently RTT mmc stack only support Highspeed mode or blow, which means the max speed should be 52MHz according to JEDEC spec. Two problems show here: (1) max_data_rate = (unsigned int)-1. The value of unsigned int depends on compilers/arch. Moreover, it makes no sense to assume cpu addressing width with IP clock rate limit. (1)hs_max_data_rate was set to 200MHz. So what should BSP drivers do if 52MHz < max_data_rate < 200MHz? Either it blindly sets a spec-violated clock rate to drive a Highspeed card, or just adjust the clock rate internally. Both cases are really bad for practice. If the card claims to support Highspeed, we set the clock to not to exceed 52MHz. Otherwise it should be set according to card->max_data_rate parsed by ext_csd. This patch fixes it as-is, and also simplify the code a lot. Signed-off-by: Shawn Lin <[email protected]>
1 parent a7bcf90 commit 4c7106f

File tree

1 file changed

+3
-9
lines changed
  • components/drivers/sdio

1 file changed

+3
-9
lines changed

components/drivers/sdio/mmc.c

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ static int mmc_parse_ext_csd(struct rt_mmcsd_card *card, rt_uint8_t *ext_csd)
191191
}
192192

193193
card->flags |= CARD_FLAG_HIGHSPEED;
194-
card->hs_max_data_rate = 200000000;
194+
card->hs_max_data_rate = 52000000;
195195

196196
card_capacity = *((rt_uint32_t *)&ext_csd[EXT_CSD_SEC_CNT]);
197197
card_capacity *= card->card_blksize;
@@ -513,16 +513,10 @@ static rt_int32_t mmcsd_mmc_init_card(struct rt_mmcsd_host *host,
513513
card->flags |= CARD_FLAG_SDHC;
514514

515515
/* set bus speed */
516-
max_data_rate = (unsigned int)-1;
517516
if (card->flags & CARD_FLAG_HIGHSPEED)
518-
{
519-
if (max_data_rate > card->hs_max_data_rate)
520-
max_data_rate = card->hs_max_data_rate;
521-
}
522-
else if (max_data_rate > card->max_data_rate)
523-
{
517+
max_data_rate = card->hs_max_data_rate;
518+
else
524519
max_data_rate = card->max_data_rate;
525-
}
526520

527521
mmcsd_set_clock(host, max_data_rate);
528522

0 commit comments

Comments
 (0)