[MMC] Fix SD timeout calculation
Secure Digital cards use a different algorithm to calculate the timeout for data transfers. Using the MMC one works often, but not always. Signed-off-by: Pierre Ossman <drzeus@drzeus.cx> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
此提交包含在:
@@ -912,6 +912,7 @@ static void mmc_read_scrs(struct mmc_host *host)
|
||||
struct mmc_request mrq;
|
||||
struct mmc_command cmd;
|
||||
struct mmc_data data;
|
||||
unsigned int timeout_us;
|
||||
|
||||
struct scatterlist sg;
|
||||
|
||||
@@ -947,8 +948,18 @@ static void mmc_read_scrs(struct mmc_host *host)
|
||||
|
||||
memset(&data, 0, sizeof(struct mmc_data));
|
||||
|
||||
data.timeout_ns = card->csd.tacc_ns * 10;
|
||||
data.timeout_clks = card->csd.tacc_clks * 10;
|
||||
data.timeout_ns = card->csd.tacc_ns * 100;
|
||||
data.timeout_clks = card->csd.tacc_clks * 100;
|
||||
|
||||
timeout_us = data.timeout_ns / 1000;
|
||||
timeout_us += data.timeout_clks * 1000 /
|
||||
(host->ios.clock / 1000);
|
||||
|
||||
if (timeout_us > 100000) {
|
||||
data.timeout_ns = 100000000;
|
||||
data.timeout_clks = 0;
|
||||
}
|
||||
|
||||
data.blksz_bits = 3;
|
||||
data.blksz = 1 << 3;
|
||||
data.blocks = 1;
|
||||
|
新增問題並參考
封鎖使用者