hw/sd: Correct the maximum size of a Standard Capacity SD Memory Card
Per the SD spec, Standard Capacity SD Memory Card (SDSC) supports
capacity up to and including 2 GiB.
Fixes: 2d7adea4fe
("hw/sd: Support SDHC size cards")
Signed-off-by: Bin Meng <bin.meng@windriver.com>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Tested-by: Sai Pavan Boddu <sai.pavan.boddu@xilinx.com>
Message-Id: <1598021136-49525-2-git-send-email-bmeng.cn@gmail.com>
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
This commit is contained in:
parent
b638627c72
commit
6d2d4069c4
@ -51,6 +51,8 @@
|
|||||||
|
|
||||||
//#define DEBUG_SD 1
|
//#define DEBUG_SD 1
|
||||||
|
|
||||||
|
#define SDSC_MAX_CAPACITY (2 * GiB)
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
sd_r0 = 0, /* no response */
|
sd_r0 = 0, /* no response */
|
||||||
sd_r1, /* normal response command */
|
sd_r1, /* normal response command */
|
||||||
@ -314,7 +316,7 @@ static void sd_ocr_powerup(void *opaque)
|
|||||||
/* card power-up OK */
|
/* card power-up OK */
|
||||||
sd->ocr = FIELD_DP32(sd->ocr, OCR, CARD_POWER_UP, 1);
|
sd->ocr = FIELD_DP32(sd->ocr, OCR, CARD_POWER_UP, 1);
|
||||||
|
|
||||||
if (sd->size > 1 * GiB) {
|
if (sd->size > SDSC_MAX_CAPACITY) {
|
||||||
sd->ocr = FIELD_DP32(sd->ocr, OCR, CARD_CAPACITY, 1);
|
sd->ocr = FIELD_DP32(sd->ocr, OCR, CARD_CAPACITY, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -386,7 +388,7 @@ static void sd_set_csd(SDState *sd, uint64_t size)
|
|||||||
uint32_t sectsize = (1 << (SECTOR_SHIFT + 1)) - 1;
|
uint32_t sectsize = (1 << (SECTOR_SHIFT + 1)) - 1;
|
||||||
uint32_t wpsize = (1 << (WPGROUP_SHIFT + 1)) - 1;
|
uint32_t wpsize = (1 << (WPGROUP_SHIFT + 1)) - 1;
|
||||||
|
|
||||||
if (size <= 1 * GiB) { /* Standard Capacity SD */
|
if (size <= SDSC_MAX_CAPACITY) { /* Standard Capacity SD */
|
||||||
sd->csd[0] = 0x00; /* CSD structure */
|
sd->csd[0] = 0x00; /* CSD structure */
|
||||||
sd->csd[1] = 0x26; /* Data read access-time-1 */
|
sd->csd[1] = 0x26; /* Data read access-time-1 */
|
||||||
sd->csd[2] = 0x00; /* Data read access-time-2 */
|
sd->csd[2] = 0x00; /* Data read access-time-2 */
|
||||||
|
Loading…
Reference in New Issue
Block a user