mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-08 03:40:35 +09:00
mmc: core: sd:
fix sd physical layer version 3.0 or above max AU from size 4MB (0x9) to 64MB (0xF)
This commit is contained in:
@@ -215,7 +215,7 @@ static int mmc_decode_scr(struct mmc_card *card)
|
||||
static int mmc_read_ssr(struct mmc_card *card)
|
||||
{
|
||||
unsigned int au, es, et, eo;
|
||||
int err, i;
|
||||
int err, i, max_au;
|
||||
u32 *ssr;
|
||||
|
||||
if (!(card->csd.cmdclass & CCC_APP_SPEC)) {
|
||||
@@ -239,13 +239,14 @@ static int mmc_read_ssr(struct mmc_card *card)
|
||||
for (i = 0; i < 16; i++)
|
||||
ssr[i] = be32_to_cpu(ssr[i]);
|
||||
|
||||
max_au = card->scr.sda_spec3 ? 0xF : 0x9;
|
||||
/*
|
||||
* UNSTUFF_BITS only works with four u32s so we have to offset the
|
||||
* bitfield positions accordingly.
|
||||
*/
|
||||
au = UNSTUFF_BITS(ssr, 428 - 384, 4);
|
||||
//if (au > 0 || au <= 9) { //Modifyed by xbw at 2013-02-28
|
||||
if (au > 0 && au <= 9) {
|
||||
if (au > 0 && au <= max_au) {
|
||||
card->ssr.au = 1 << (au + 4);
|
||||
es = UNSTUFF_BITS(ssr, 408 - 384, 16);
|
||||
et = UNSTUFF_BITS(ssr, 402 - 384, 6);
|
||||
|
||||
Reference in New Issue
Block a user