2 * SD Memory Card emulation as defined in the "SD Memory Card Physical
3 * layer specification, Version 2.00."
5 * Copyright (c) 2006 Andrzej Zaborowski <balrog@zabor.org>
6 * Copyright (c) 2007 CodeSourcery
7 * Copyright (c) 2018 Philippe Mathieu-Daudé <f4bug@amsat.org>
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer.
15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in
17 * the documentation and/or other materials provided with the
20 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS''
21 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
23 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR
24 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
27 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
28 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 #include "qemu/osdep.h"
34 #include "qemu/units.h"
35 #include "qemu/cutils.h"
37 #include "hw/registerfields.h"
38 #include "sysemu/block-backend.h"
40 #include "hw/sd/sdcard_legacy.h"
41 #include "migration/vmstate.h"
42 #include "qapi/error.h"
43 #include "qemu/bitmap.h"
44 #include "hw/qdev-properties.h"
45 #include "hw/qdev-properties-system.h"
46 #include "qemu/error-report.h"
47 #include "qemu/timer.h"
49 #include "qemu/module.h"
50 #include "sdmmc-internal.h"
55 #define SDSC_MAX_CAPACITY (2 * GiB)
57 #define INVALID_ADDRESS UINT32_MAX
60 sd_r0
= 0, /* no response */
61 sd_r1
, /* normal response command */
62 sd_r2_i
, /* CID register */
63 sd_r2_s
, /* CSD register */
64 sd_r3
, /* OCR register */
65 sd_r6
= 6, /* Published RCA response */
66 sd_r7
, /* Operating voltage */
73 sd_card_identification_mode
,
74 sd_data_transfer_mode
,
78 sd_inactive_state
= -1,
81 sd_identification_state
= 2,
83 sd_transfer_state
= 4,
84 sd_sendingdata_state
= 5,
85 sd_receivingdata_state
= 6,
86 sd_programming_state
= 7,
87 sd_disconnect_state
= 8,
90 #define SDMMC_CMD_MAX 64
92 typedef sd_rsp_type_t (*sd_cmd_handler
)(SDState
*sd
, SDRequest req
);
94 typedef struct SDProto
{
98 const sd_cmd_type_t type
;
100 sd_cmd_handler handler
;
101 } cmd
[SDMMC_CMD_MAX
], acmd
[SDMMC_CMD_MAX
];
105 DeviceState parent_obj
;
107 /* If true, created by sd_init() for a non-qdevified caller */
108 /* TODO purge them with fire */
109 bool me_no_qdev_me_kill_mammoth_with_rocks
;
111 /* SD Memory Card Registers */
117 uint32_t card_status
;
118 uint8_t sd_status
[64];
120 /* Static properties */
122 uint8_t spec_version
;
125 const SDProto
*proto
;
127 /* Runtime changeables */
129 uint32_t mode
; /* current card mode, one of SDCardModes */
130 int32_t state
; /* current card state, one of SDCardStates */
133 unsigned long *wp_group_bmap
;
134 int32_t wp_group_bits
;
137 uint32_t multi_blk_cnt
;
138 uint32_t erase_start
;
142 uint8_t function_group
[6];
144 const char *last_cmd_name
;
145 /* True if we will handle the next command as an ACMD. Note that this does
146 * *not* track the APP_CMD status bit!
149 uint32_t blk_written
;
152 uint32_t data_offset
;
155 qemu_irq readonly_cb
;
156 qemu_irq inserted_cb
;
157 QEMUTimer
*ocr_power_timer
;
163 static void sd_realize(DeviceState
*dev
, Error
**errp
);
165 static const SDProto sd_proto_spi
;
167 static bool sd_is_spi(SDState
*sd
)
169 return sd
->proto
== &sd_proto_spi
;
172 static const char *sd_version_str(enum SDPhySpecificationVersion version
)
174 static const char *sdphy_version
[] = {
175 [SD_PHY_SPECv1_10_VERS
] = "v1.10",
176 [SD_PHY_SPECv2_00_VERS
] = "v2.00",
177 [SD_PHY_SPECv3_01_VERS
] = "v3.01",
179 if (version
>= ARRAY_SIZE(sdphy_version
)) {
180 return "unsupported version";
182 return sdphy_version
[version
];
185 static const char *sd_mode_name(enum SDCardModes mode
)
187 static const char *mode_name
[] = {
188 [sd_inactive
] = "inactive",
189 [sd_card_identification_mode
] = "identification",
190 [sd_data_transfer_mode
] = "transfer",
192 assert(mode
< ARRAY_SIZE(mode_name
));
193 return mode_name
[mode
];
196 static const char *sd_state_name(enum SDCardStates state
)
198 static const char *state_name
[] = {
199 [sd_idle_state
] = "idle",
200 [sd_ready_state
] = "ready",
201 [sd_identification_state
] = "identification",
202 [sd_standby_state
] = "standby",
203 [sd_transfer_state
] = "transfer",
204 [sd_sendingdata_state
] = "sendingdata",
205 [sd_receivingdata_state
] = "receivingdata",
206 [sd_programming_state
] = "programming",
207 [sd_disconnect_state
] = "disconnect",
209 if (state
== sd_inactive_state
) {
212 assert(state
< ARRAY_SIZE(state_name
));
213 return state_name
[state
];
216 static const char *sd_response_name(sd_rsp_type_t rsp
)
218 static const char *response_name
[] = {
219 [sd_r0
] = "RESP#0 (no response)",
220 [sd_r1
] = "RESP#1 (normal cmd)",
221 [sd_r2_i
] = "RESP#2 (CID reg)",
222 [sd_r2_s
] = "RESP#2 (CSD reg)",
223 [sd_r3
] = "RESP#3 (OCR reg)",
224 [sd_r6
] = "RESP#6 (RCA)",
225 [sd_r7
] = "RESP#7 (operating voltage)",
227 if (rsp
== sd_illegal
) {
228 return "ILLEGAL RESP";
233 assert(rsp
< ARRAY_SIZE(response_name
));
234 return response_name
[rsp
];
237 static const char *sd_cmd_name(SDState
*sd
, uint8_t cmd
)
239 static const char *cmd_abbrev
[SDMMC_CMD_MAX
] = {
240 [18] = "READ_MULTIPLE_BLOCK",
242 [25] = "WRITE_MULTIPLE_BLOCK",
246 [60] = "MANUF_RSVD", [61] = "MANUF_RSVD",
247 [62] = "MANUF_RSVD", [63] = "MANUF_RSVD",
249 const SDProto
*sdp
= sd
->proto
;
251 if (sdp
->cmd
[cmd
].handler
) {
252 assert(!cmd_abbrev
[cmd
]);
253 return sdp
->cmd
[cmd
].name
;
255 return cmd_abbrev
[cmd
] ? cmd_abbrev
[cmd
] : "UNKNOWN_CMD";
258 static const char *sd_acmd_name(SDState
*sd
, uint8_t cmd
)
260 static const char *acmd_abbrev
[SDMMC_CMD_MAX
] = {
261 [6] = "SET_BUS_WIDTH",
263 [14] = "DPS_spec", [15] = "DPS_spec",
266 [22] = "SEND_NUM_WR_BLOCKS", [23] = "SET_WR_BLK_ERASE_COUNT",
267 [42] = "SET_CLR_CARD_DETECT",
269 [52] = "SECU_spec", [53] = "SECU_spec",
271 [56] = "SECU_spec", [57] = "SECU_spec",
272 [58] = "SECU_spec", [59] = "SECU_spec",
274 const SDProto
*sdp
= sd
->proto
;
276 if (sdp
->acmd
[cmd
].handler
) {
277 assert(!acmd_abbrev
[cmd
]);
278 return sdp
->acmd
[cmd
].name
;
281 return acmd_abbrev
[cmd
] ? acmd_abbrev
[cmd
] : "UNKNOWN_ACMD";
284 static uint8_t sd_get_dat_lines(SDState
*sd
)
286 return sd
->enable
? sd
->dat_lines
: 0;
289 static bool sd_get_cmd_line(SDState
*sd
)
291 return sd
->enable
? sd
->cmd_line
: false;
294 static void sd_set_voltage(SDState
*sd
, uint16_t millivolts
)
296 trace_sdcard_set_voltage(millivolts
);
298 switch (millivolts
) {
299 case 3001 ... 3600: /* SD_VOLTAGE_3_3V */
300 case 2001 ... 3000: /* SD_VOLTAGE_3_0V */
303 qemu_log_mask(LOG_GUEST_ERROR
, "SD card voltage not supported: %.3fV",
304 millivolts
/ 1000.f
);
308 static void sd_set_mode(SDState
*sd
)
311 case sd_inactive_state
:
312 sd
->mode
= sd_inactive
;
317 case sd_identification_state
:
318 sd
->mode
= sd_card_identification_mode
;
321 case sd_standby_state
:
322 case sd_transfer_state
:
323 case sd_sendingdata_state
:
324 case sd_receivingdata_state
:
325 case sd_programming_state
:
326 case sd_disconnect_state
:
327 sd
->mode
= sd_data_transfer_mode
;
332 static uint8_t sd_crc7(const void *message
, size_t width
)
335 uint8_t shift_reg
= 0x00;
336 const uint8_t *msg
= (const uint8_t *)message
;
338 for (i
= 0; i
< width
; i
++, msg
++)
339 for (bit
= 7; bit
>= 0; bit
--) {
341 if ((shift_reg
>> 7) ^ ((*msg
>> bit
) & 1))
348 /* Operation Conditions register */
350 #define OCR_POWER_DELAY_NS 500000 /* 0.5ms */
352 FIELD(OCR
, VDD_VOLTAGE_WINDOW
, 0, 24)
353 FIELD(OCR
, VDD_VOLTAGE_WIN_LO
, 0, 8)
354 FIELD(OCR
, DUAL_VOLTAGE_CARD
, 7, 1)
355 FIELD(OCR
, VDD_VOLTAGE_WIN_HI
, 8, 16)
356 FIELD(OCR
, ACCEPT_SWITCH_1V8
, 24, 1) /* Only UHS-I */
357 FIELD(OCR
, UHS_II_CARD
, 29, 1) /* Only UHS-II */
358 FIELD(OCR
, CARD_CAPACITY
, 30, 1) /* 0:SDSC, 1:SDHC/SDXC */
359 FIELD(OCR
, CARD_POWER_UP
, 31, 1)
361 #define ACMD41_ENQUIRY_MASK 0x00ffffff
362 #define ACMD41_R3_MASK (R_OCR_VDD_VOLTAGE_WIN_HI_MASK \
363 | R_OCR_ACCEPT_SWITCH_1V8_MASK \
364 | R_OCR_UHS_II_CARD_MASK \
365 | R_OCR_CARD_CAPACITY_MASK \
366 | R_OCR_CARD_POWER_UP_MASK)
368 static void sd_ocr_powerup(void *opaque
)
370 SDState
*sd
= opaque
;
372 trace_sdcard_powerup();
373 assert(!FIELD_EX32(sd
->ocr
, OCR
, CARD_POWER_UP
));
375 /* card power-up OK */
376 sd
->ocr
= FIELD_DP32(sd
->ocr
, OCR
, CARD_POWER_UP
, 1);
378 if (sd
->size
> SDSC_MAX_CAPACITY
) {
379 sd
->ocr
= FIELD_DP32(sd
->ocr
, OCR
, CARD_CAPACITY
, 1);
383 static void sd_set_ocr(SDState
*sd
)
385 /* All voltages OK */
386 sd
->ocr
= R_OCR_VDD_VOLTAGE_WIN_HI_MASK
;
390 * We don't need to emulate power up sequence in SPI-mode.
391 * Thus, the card's power up status bit should be set to 1 when reset.
392 * The card's capacity status bit should also be set if SD card size
393 * is larger than 2GB for SDHC support.
399 /* SD Configuration register */
401 static void sd_set_scr(SDState
*sd
)
403 sd
->scr
[0] = 0 << 4; /* SCR structure version 1.0 */
404 if (sd
->spec_version
== SD_PHY_SPECv1_10_VERS
) {
405 sd
->scr
[0] |= 1; /* Spec Version 1.10 */
407 sd
->scr
[0] |= 2; /* Spec Version 2.00 or Version 3.0X */
409 sd
->scr
[1] = (2 << 4) /* SDSC Card (Security Version 1.01) */
410 | 0b0101; /* 1-bit or 4-bit width bus modes */
411 sd
->scr
[2] = 0x00; /* Extended Security is not supported. */
412 if (sd
->spec_version
>= SD_PHY_SPECv3_01_VERS
) {
413 sd
->scr
[2] |= 1 << 7; /* Spec Version 3.0X */
416 /* reserved for manufacturer usage */
423 /* Card IDentification register */
432 static void sd_set_cid(SDState
*sd
)
434 sd
->cid
[0] = MID
; /* Fake card manufacturer ID (MID) */
435 sd
->cid
[1] = OID
[0]; /* OEM/Application ID (OID) */
437 sd
->cid
[3] = PNM
[0]; /* Fake product name (PNM) */
442 sd
->cid
[8] = PRV
; /* Fake product revision (PRV) */
443 stl_be_p(&sd
->cid
[9], 0xdeadbeef); /* Fake serial number (PSN) */
444 sd
->cid
[13] = 0x00 | /* Manufacture date (MDT) */
445 ((MDT_YR
- 2000) / 10);
446 sd
->cid
[14] = ((MDT_YR
% 10) << 4) | MDT_MON
;
447 sd
->cid
[15] = (sd_crc7(sd
->cid
, 15) << 1) | 1;
450 /* Card-Specific Data register */
452 #define HWBLOCK_SHIFT 9 /* 512 bytes */
453 #define SECTOR_SHIFT 5 /* 16 kilobytes */
454 #define WPGROUP_SHIFT 7 /* 2 megs */
455 #define CMULT_SHIFT 9 /* 512 times HWBLOCK_SIZE */
456 #define WPGROUP_SIZE (1 << (HWBLOCK_SHIFT + SECTOR_SHIFT + WPGROUP_SHIFT))
458 static const uint8_t sd_csd_rw_mask
[16] = {
459 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
460 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfe,
463 static void sd_set_csd(SDState
*sd
, uint64_t size
)
465 int hwblock_shift
= HWBLOCK_SHIFT
;
467 uint32_t sectsize
= (1 << (SECTOR_SHIFT
+ 1)) - 1;
468 uint32_t wpsize
= (1 << (WPGROUP_SHIFT
+ 1)) - 1;
470 /* To indicate 2 GiB card, BLOCK_LEN shall be 1024 bytes */
471 if (size
== SDSC_MAX_CAPACITY
) {
474 csize
= (size
>> (CMULT_SHIFT
+ hwblock_shift
)) - 1;
476 if (size
<= SDSC_MAX_CAPACITY
) { /* Standard Capacity SD */
477 sd
->csd
[0] = 0x00; /* CSD structure */
478 sd
->csd
[1] = 0x26; /* Data read access-time-1 */
479 sd
->csd
[2] = 0x00; /* Data read access-time-2 */
480 sd
->csd
[3] = 0x32; /* Max. data transfer rate: 25 MHz */
481 sd
->csd
[4] = 0x5f; /* Card Command Classes */
482 sd
->csd
[5] = 0x50 | /* Max. read data block length */
484 sd
->csd
[6] = 0xe0 | /* Partial block for read allowed */
485 ((csize
>> 10) & 0x03);
486 sd
->csd
[7] = 0x00 | /* Device size */
487 ((csize
>> 2) & 0xff);
488 sd
->csd
[8] = 0x3f | /* Max. read current */
489 ((csize
<< 6) & 0xc0);
490 sd
->csd
[9] = 0xfc | /* Max. write current */
491 ((CMULT_SHIFT
- 2) >> 1);
492 sd
->csd
[10] = 0x40 | /* Erase sector size */
493 (((CMULT_SHIFT
- 2) << 7) & 0x80) | (sectsize
>> 1);
494 sd
->csd
[11] = 0x00 | /* Write protect group size */
495 ((sectsize
<< 7) & 0x80) | wpsize
;
496 sd
->csd
[12] = 0x90 | /* Write speed factor */
497 (hwblock_shift
>> 2);
498 sd
->csd
[13] = 0x20 | /* Max. write data block length */
499 ((hwblock_shift
<< 6) & 0xc0);
500 sd
->csd
[14] = 0x00; /* File format group */
511 st24_be_p(&sd
->csd
[7], size
);
518 sd
->csd
[15] = (sd_crc7(sd
->csd
, 15) << 1) | 1;
521 /* Relative Card Address register */
523 static void sd_set_rca(SDState
*sd
)
528 static uint16_t sd_req_get_rca(SDState
*s
, SDRequest req
)
530 switch (s
->proto
->cmd
[req
.cmd
].type
) {
532 /* Called from legacy code not ported to SDProto array */
533 assert(!s
->proto
->cmd
[req
.cmd
].handler
);
537 return req
.arg
>> 16;
539 g_assert_not_reached();
545 static bool sd_req_rca_same(SDState
*s
, SDRequest req
)
547 return sd_req_get_rca(s
, req
) == s
->rca
;
550 /* Card Status register */
552 FIELD(CSR
, AKE_SEQ_ERROR
, 3, 1)
553 FIELD(CSR
, APP_CMD
, 5, 1)
554 FIELD(CSR
, FX_EVENT
, 6, 1)
555 FIELD(CSR
, READY_FOR_DATA
, 8, 1)
556 FIELD(CSR
, CURRENT_STATE
, 9, 4)
557 FIELD(CSR
, ERASE_RESET
, 13, 1)
558 FIELD(CSR
, CARD_ECC_DISABLED
, 14, 1)
559 FIELD(CSR
, WP_ERASE_SKIP
, 15, 1)
560 FIELD(CSR
, CSD_OVERWRITE
, 16, 1)
561 FIELD(CSR
, DEFERRED_RESPONSE
, 17, 1)
562 FIELD(CSR
, ERROR
, 19, 1)
563 FIELD(CSR
, CC_ERROR
, 20, 1)
564 FIELD(CSR
, CARD_ECC_FAILED
, 21, 1)
565 FIELD(CSR
, ILLEGAL_COMMAND
, 22, 1)
566 FIELD(CSR
, COM_CRC_ERROR
, 23, 1)
567 FIELD(CSR
, LOCK_UNLOCK_FAILED
, 24, 1)
568 FIELD(CSR
, CARD_IS_LOCKED
, 25, 1)
569 FIELD(CSR
, WP_VIOLATION
, 26, 1)
570 FIELD(CSR
, ERASE_PARAM
, 27, 1)
571 FIELD(CSR
, ERASE_SEQ_ERROR
, 28, 1)
572 FIELD(CSR
, BLOCK_LEN_ERROR
, 29, 1)
573 FIELD(CSR
, ADDRESS_ERROR
, 30, 1)
574 FIELD(CSR
, OUT_OF_RANGE
, 31, 1)
576 /* Card status bits, split by clear condition:
577 * A : According to the card current state
578 * B : Always related to the previous command
579 * C : Cleared by read
581 #define CARD_STATUS_A (R_CSR_READY_FOR_DATA_MASK \
582 | R_CSR_CARD_ECC_DISABLED_MASK \
583 | R_CSR_CARD_IS_LOCKED_MASK)
584 #define CARD_STATUS_B (R_CSR_CURRENT_STATE_MASK \
585 | R_CSR_ILLEGAL_COMMAND_MASK \
586 | R_CSR_COM_CRC_ERROR_MASK)
587 #define CARD_STATUS_C (R_CSR_AKE_SEQ_ERROR_MASK \
588 | R_CSR_APP_CMD_MASK \
589 | R_CSR_ERASE_RESET_MASK \
590 | R_CSR_WP_ERASE_SKIP_MASK \
591 | R_CSR_CSD_OVERWRITE_MASK \
593 | R_CSR_CC_ERROR_MASK \
594 | R_CSR_CARD_ECC_FAILED_MASK \
595 | R_CSR_LOCK_UNLOCK_FAILED_MASK \
596 | R_CSR_WP_VIOLATION_MASK \
597 | R_CSR_ERASE_PARAM_MASK \
598 | R_CSR_ERASE_SEQ_ERROR_MASK \
599 | R_CSR_BLOCK_LEN_ERROR_MASK \
600 | R_CSR_ADDRESS_ERROR_MASK \
601 | R_CSR_OUT_OF_RANGE_MASK)
603 static void sd_set_cardstatus(SDState
*sd
)
605 sd
->card_status
= READY_FOR_DATA
;
608 static void sd_set_sdstatus(SDState
*sd
)
610 memset(sd
->sd_status
, 0, 64);
613 static const uint8_t sd_tuning_block_pattern4
[64] = {
615 * See: Physical Layer Simplified Specification Version 3.01,
618 0xff, 0x0f, 0xff, 0x00, 0x0f, 0xfc, 0xc3, 0xcc,
619 0xc3, 0x3c, 0xcc, 0xff, 0xfe, 0xff, 0xfe, 0xef,
620 0xff, 0xdf, 0xff, 0xdd, 0xff, 0xfb, 0xff, 0xfb,
621 0xbf, 0xff, 0x7f, 0xff, 0x77, 0xf7, 0xbd, 0xef,
622 0xff, 0xf0, 0xff, 0xf0, 0x0f, 0xfc, 0xcc, 0x3c,
623 0xcc, 0x33, 0xcc, 0xcf, 0xff, 0xef, 0xff, 0xee,
624 0xff, 0xfd, 0xff, 0xfd, 0xdf, 0xff, 0xbf, 0xff,
625 0xbb, 0xff, 0xf7, 0xff, 0xf7, 0x7f, 0x7b, 0xde
628 static int sd_req_crc_validate(SDRequest
*req
)
631 buffer
[0] = 0x40 | req
->cmd
;
632 stl_be_p(&buffer
[1], req
->arg
);
634 return sd_crc7(buffer
, 5) != req
->crc
; /* TODO */
637 static void sd_response_r1_make(SDState
*sd
, uint8_t *response
)
639 stl_be_p(response
, sd
->card_status
);
641 /* Clear the "clear on read" status bits */
642 sd
->card_status
&= ~CARD_STATUS_C
;
645 static void sd_response_r3_make(SDState
*sd
, uint8_t *response
)
647 stl_be_p(response
, sd
->ocr
& ACMD41_R3_MASK
);
650 static void sd_response_r6_make(SDState
*sd
, uint8_t *response
)
654 status
= ((sd
->card_status
>> 8) & 0xc000) |
655 ((sd
->card_status
>> 6) & 0x2000) |
656 (sd
->card_status
& 0x1fff);
657 sd
->card_status
&= ~(CARD_STATUS_C
& 0xc81fff);
658 stw_be_p(response
+ 0, sd
->rca
);
659 stw_be_p(response
+ 2, status
);
662 static void sd_response_r7_make(SDState
*sd
, uint8_t *response
)
664 stl_be_p(response
, sd
->vhs
);
667 static uint32_t sd_blk_len(SDState
*sd
)
669 if (FIELD_EX32(sd
->ocr
, OCR
, CARD_CAPACITY
)) {
670 return 1 << HWBLOCK_SHIFT
;
675 static uint64_t sd_req_get_address(SDState
*sd
, SDRequest req
)
679 if (FIELD_EX32(sd
->ocr
, OCR
, CARD_CAPACITY
)) {
680 addr
= (uint64_t) req
.arg
<< HWBLOCK_SHIFT
;
684 trace_sdcard_req_addr(req
.arg
, addr
);
688 static inline uint64_t sd_addr_to_wpnum(uint64_t addr
)
690 return addr
>> (HWBLOCK_SHIFT
+ SECTOR_SHIFT
+ WPGROUP_SHIFT
);
693 static void sd_reset(DeviceState
*dev
)
695 SDState
*sd
= SD_CARD(dev
);
699 trace_sdcard_reset();
701 blk_get_geometry(sd
->blk
, §
);
705 size
= sect
<< HWBLOCK_SHIFT
;
707 sect
= sd_addr_to_wpnum(size
) + 1;
709 sd
->state
= sd_idle_state
;
717 sd_set_csd(sd
, size
);
718 sd_set_cardstatus(sd
);
721 g_free(sd
->wp_group_bmap
);
722 sd
->wp_switch
= sd
->blk
? !blk_is_writable(sd
->blk
) : false;
723 sd
->wp_group_bits
= sect
;
724 sd
->wp_group_bmap
= bitmap_new(sd
->wp_group_bits
);
725 memset(sd
->function_group
, 0, sizeof(sd
->function_group
));
726 sd
->erase_start
= INVALID_ADDRESS
;
727 sd
->erase_end
= INVALID_ADDRESS
;
730 sd
->expecting_acmd
= false;
733 sd
->multi_blk_cnt
= 0;
736 static bool sd_get_inserted(SDState
*sd
)
738 return sd
->blk
&& blk_is_inserted(sd
->blk
);
741 static bool sd_get_readonly(SDState
*sd
)
743 return sd
->wp_switch
;
746 static void sd_cardchange(void *opaque
, bool load
, Error
**errp
)
748 SDState
*sd
= opaque
;
749 DeviceState
*dev
= DEVICE(sd
);
751 bool inserted
= sd_get_inserted(sd
);
752 bool readonly
= sd_get_readonly(sd
);
755 trace_sdcard_inserted(readonly
);
758 trace_sdcard_ejected();
761 if (sd
->me_no_qdev_me_kill_mammoth_with_rocks
) {
762 qemu_set_irq(sd
->inserted_cb
, inserted
);
764 qemu_set_irq(sd
->readonly_cb
, readonly
);
767 sdbus
= SD_BUS(qdev_get_parent_bus(dev
));
768 sdbus_set_inserted(sdbus
, inserted
);
770 sdbus_set_readonly(sdbus
, readonly
);
775 static const BlockDevOps sd_block_ops
= {
776 .change_media_cb
= sd_cardchange
,
779 static bool sd_ocr_vmstate_needed(void *opaque
)
781 SDState
*sd
= opaque
;
783 /* Include the OCR state (and timer) if it is not yet powered up */
784 return !FIELD_EX32(sd
->ocr
, OCR
, CARD_POWER_UP
);
787 static const VMStateDescription sd_ocr_vmstate
= {
788 .name
= "sd-card/ocr-state",
790 .minimum_version_id
= 1,
791 .needed
= sd_ocr_vmstate_needed
,
792 .fields
= (const VMStateField
[]) {
793 VMSTATE_UINT32(ocr
, SDState
),
794 VMSTATE_TIMER_PTR(ocr_power_timer
, SDState
),
795 VMSTATE_END_OF_LIST()
799 static int sd_vmstate_pre_load(void *opaque
)
801 SDState
*sd
= opaque
;
803 /* If the OCR state is not included (prior versions, or not
804 * needed), then the OCR must be set as powered up. If the OCR state
805 * is included, this will be replaced by the state restore.
812 static const VMStateDescription sd_vmstate
= {
815 .minimum_version_id
= 2,
816 .pre_load
= sd_vmstate_pre_load
,
817 .fields
= (const VMStateField
[]) {
818 VMSTATE_UINT32(mode
, SDState
),
819 VMSTATE_INT32(state
, SDState
),
820 VMSTATE_UINT8_ARRAY(cid
, SDState
, 16),
821 VMSTATE_UINT8_ARRAY(csd
, SDState
, 16),
822 VMSTATE_UINT16(rca
, SDState
),
823 VMSTATE_UINT32(card_status
, SDState
),
824 VMSTATE_PARTIAL_BUFFER(sd_status
, SDState
, 1),
825 VMSTATE_UINT32(vhs
, SDState
),
826 VMSTATE_BITMAP(wp_group_bmap
, SDState
, 0, wp_group_bits
),
827 VMSTATE_UINT32(blk_len
, SDState
),
828 VMSTATE_UINT32(multi_blk_cnt
, SDState
),
829 VMSTATE_UINT32(erase_start
, SDState
),
830 VMSTATE_UINT32(erase_end
, SDState
),
831 VMSTATE_UINT8_ARRAY(pwd
, SDState
, 16),
832 VMSTATE_UINT32(pwd_len
, SDState
),
833 VMSTATE_UINT8_ARRAY(function_group
, SDState
, 6),
834 VMSTATE_UINT8(current_cmd
, SDState
),
835 VMSTATE_BOOL(expecting_acmd
, SDState
),
836 VMSTATE_UINT32(blk_written
, SDState
),
837 VMSTATE_UINT64(data_start
, SDState
),
838 VMSTATE_UINT32(data_offset
, SDState
),
839 VMSTATE_UINT8_ARRAY(data
, SDState
, 512),
840 VMSTATE_UNUSED_V(1, 512),
841 VMSTATE_BOOL(enable
, SDState
),
842 VMSTATE_END_OF_LIST()
844 .subsections
= (const VMStateDescription
* const []) {
850 /* Legacy initialization function for use by non-qdevified callers */
851 SDState
*sd_init(BlockBackend
*blk
, bool is_spi
)
858 obj
= object_new(is_spi
? TYPE_SD_CARD_SPI
: TYPE_SD_CARD
);
860 if (!qdev_prop_set_drive_err(dev
, "drive", blk
, &err
)) {
861 error_reportf_err(err
, "sd_init failed: ");
866 * Realizing the device properly would put it into the QOM
867 * composition tree even though it is not plugged into an
868 * appropriate bus. That's a no-no. Hide the device from
869 * QOM/qdev, and call its qdev realize callback directly.
872 object_unparent(obj
);
873 sd_realize(dev
, &err
);
875 error_reportf_err(err
, "sd_init failed: ");
880 sd
->me_no_qdev_me_kill_mammoth_with_rocks
= true;
884 void sd_set_cb(SDState
*sd
, qemu_irq readonly
, qemu_irq insert
)
886 sd
->readonly_cb
= readonly
;
887 sd
->inserted_cb
= insert
;
888 qemu_set_irq(readonly
, sd
->blk
? !blk_is_writable(sd
->blk
) : 0);
889 qemu_set_irq(insert
, sd
->blk
? blk_is_inserted(sd
->blk
) : 0);
892 static void sd_blk_read(SDState
*sd
, uint64_t addr
, uint32_t len
)
894 trace_sdcard_read_block(addr
, len
);
895 if (!sd
->blk
|| blk_pread(sd
->blk
, addr
, len
, sd
->data
, 0) < 0) {
896 fprintf(stderr
, "sd_blk_read: read error on host side\n");
900 static void sd_blk_write(SDState
*sd
, uint64_t addr
, uint32_t len
)
902 trace_sdcard_write_block(addr
, len
);
903 if (!sd
->blk
|| blk_pwrite(sd
->blk
, addr
, len
, sd
->data
, 0) < 0) {
904 fprintf(stderr
, "sd_blk_write: write error on host side\n");
908 #define APP_READ_BLOCK(a, len) memset(sd->data, 0xec, len)
909 #define APP_WRITE_BLOCK(a, len)
911 static void sd_erase(SDState
*sd
)
913 uint64_t erase_start
= sd
->erase_start
;
914 uint64_t erase_end
= sd
->erase_end
;
918 int erase_len
= 1 << HWBLOCK_SHIFT
;
920 trace_sdcard_erase(sd
->erase_start
, sd
->erase_end
);
921 if (sd
->erase_start
== INVALID_ADDRESS
922 || sd
->erase_end
== INVALID_ADDRESS
) {
923 sd
->card_status
|= ERASE_SEQ_ERROR
;
924 sd
->erase_start
= INVALID_ADDRESS
;
925 sd
->erase_end
= INVALID_ADDRESS
;
929 if (FIELD_EX32(sd
->ocr
, OCR
, CARD_CAPACITY
)) {
930 /* High capacity memory card: erase units are 512 byte blocks */
931 erase_start
<<= HWBLOCK_SHIFT
;
932 erase_end
<<= HWBLOCK_SHIFT
;
936 if (erase_start
> sd
->size
|| erase_end
> sd
->size
) {
937 sd
->card_status
|= OUT_OF_RANGE
;
938 sd
->erase_start
= INVALID_ADDRESS
;
939 sd
->erase_end
= INVALID_ADDRESS
;
943 sd
->erase_start
= INVALID_ADDRESS
;
944 sd
->erase_end
= INVALID_ADDRESS
;
947 memset(sd
->data
, 0xff, erase_len
);
948 for (erase_addr
= erase_start
; erase_addr
<= erase_end
;
949 erase_addr
+= erase_len
) {
951 /* Only SDSC cards support write protect groups */
952 wpnum
= sd_addr_to_wpnum(erase_addr
);
953 assert(wpnum
< sd
->wp_group_bits
);
954 if (test_bit(wpnum
, sd
->wp_group_bmap
)) {
955 sd
->card_status
|= WP_ERASE_SKIP
;
959 sd_blk_write(sd
, erase_addr
, erase_len
);
963 static uint32_t sd_wpbits(SDState
*sd
, uint64_t addr
)
968 wpnum
= sd_addr_to_wpnum(addr
);
970 for (i
= 0; i
< 32; i
++, wpnum
++, addr
+= WPGROUP_SIZE
) {
971 if (addr
>= sd
->size
) {
973 * If the addresses of the last groups are outside the valid range,
974 * then the corresponding write protection bits shall be set to 0.
978 assert(wpnum
< sd
->wp_group_bits
);
979 if (test_bit(wpnum
, sd
->wp_group_bmap
)) {
987 static void sd_function_switch(SDState
*sd
, uint32_t arg
)
989 int i
, mode
, new_func
;
990 mode
= !!(arg
& 0x80000000);
992 sd
->data
[0] = 0x00; /* Maximum current consumption */
994 sd
->data
[2] = 0x80; /* Supported group 6 functions */
996 sd
->data
[4] = 0x80; /* Supported group 5 functions */
998 sd
->data
[6] = 0x80; /* Supported group 4 functions */
1000 sd
->data
[8] = 0x80; /* Supported group 3 functions */
1002 sd
->data
[10] = 0x80; /* Supported group 2 functions */
1003 sd
->data
[11] = 0x43;
1004 sd
->data
[12] = 0x80; /* Supported group 1 functions */
1005 sd
->data
[13] = 0x03;
1007 memset(&sd
->data
[14], 0, 3);
1008 for (i
= 0; i
< 6; i
++) {
1009 new_func
= (arg
>> (i
* 4)) & 0x0f;
1010 if (mode
&& new_func
!= 0x0f)
1011 sd
->function_group
[i
] = new_func
;
1012 sd
->data
[16 - (i
>> 1)] |= new_func
<< ((i
% 2) * 4);
1014 memset(&sd
->data
[17], 0, 47);
1017 static inline bool sd_wp_addr(SDState
*sd
, uint64_t addr
)
1019 return test_bit(sd_addr_to_wpnum(addr
), sd
->wp_group_bmap
);
1022 static void sd_lock_command(SDState
*sd
)
1024 int erase
, lock
, clr_pwd
, set_pwd
, pwd_len
;
1025 erase
= !!(sd
->data
[0] & 0x08);
1026 lock
= sd
->data
[0] & 0x04;
1027 clr_pwd
= sd
->data
[0] & 0x02;
1028 set_pwd
= sd
->data
[0] & 0x01;
1030 if (sd
->blk_len
> 1)
1031 pwd_len
= sd
->data
[1];
1036 trace_sdcard_lock();
1038 trace_sdcard_unlock();
1041 if (!(sd
->card_status
& CARD_IS_LOCKED
) || sd
->blk_len
> 1 ||
1042 set_pwd
|| clr_pwd
|| lock
|| sd
->wp_switch
||
1043 (sd
->csd
[14] & 0x20)) {
1044 sd
->card_status
|= LOCK_UNLOCK_FAILED
;
1047 bitmap_zero(sd
->wp_group_bmap
, sd
->wp_group_bits
);
1048 sd
->csd
[14] &= ~0x10;
1049 sd
->card_status
&= ~CARD_IS_LOCKED
;
1051 /* Erasing the entire card here! */
1052 fprintf(stderr
, "SD: Card force-erased by CMD42\n");
1056 if (sd
->blk_len
< 2 + pwd_len
||
1057 pwd_len
<= sd
->pwd_len
||
1058 pwd_len
> sd
->pwd_len
+ 16) {
1059 sd
->card_status
|= LOCK_UNLOCK_FAILED
;
1063 if (sd
->pwd_len
&& memcmp(sd
->pwd
, sd
->data
+ 2, sd
->pwd_len
)) {
1064 sd
->card_status
|= LOCK_UNLOCK_FAILED
;
1068 pwd_len
-= sd
->pwd_len
;
1069 if ((pwd_len
&& !set_pwd
) ||
1070 (clr_pwd
&& (set_pwd
|| lock
)) ||
1071 (lock
&& !sd
->pwd_len
&& !set_pwd
) ||
1072 (!set_pwd
&& !clr_pwd
&&
1073 (((sd
->card_status
& CARD_IS_LOCKED
) && lock
) ||
1074 (!(sd
->card_status
& CARD_IS_LOCKED
) && !lock
)))) {
1075 sd
->card_status
|= LOCK_UNLOCK_FAILED
;
1080 memcpy(sd
->pwd
, sd
->data
+ 2 + sd
->pwd_len
, pwd_len
);
1081 sd
->pwd_len
= pwd_len
;
1089 sd
->card_status
|= CARD_IS_LOCKED
;
1091 sd
->card_status
&= ~CARD_IS_LOCKED
;
1094 static bool address_in_range(SDState
*sd
, const char *desc
,
1095 uint64_t addr
, uint32_t length
)
1097 if (addr
+ length
> sd
->size
) {
1098 qemu_log_mask(LOG_GUEST_ERROR
,
1099 "%s offset %"PRIu64
" > card %"PRIu64
" [%%%u]\n",
1100 desc
, addr
, sd
->size
, length
);
1101 sd
->card_status
|= ADDRESS_ERROR
;
1107 static sd_rsp_type_t
sd_invalid_state_for_cmd(SDState
*sd
, SDRequest req
)
1109 qemu_log_mask(LOG_GUEST_ERROR
, "%s: CMD%i in a wrong state: %s (spec %s)\n",
1110 sd
->proto
->name
, req
.cmd
, sd_state_name(sd
->state
),
1111 sd_version_str(sd
->spec_version
));
1116 static sd_rsp_type_t
sd_invalid_mode_for_cmd(SDState
*sd
, SDRequest req
)
1118 qemu_log_mask(LOG_GUEST_ERROR
, "%s: CMD%i in a wrong mode: %s (spec %s)\n",
1119 sd
->proto
->name
, req
.cmd
, sd_mode_name(sd
->mode
),
1120 sd_version_str(sd
->spec_version
));
1125 static sd_rsp_type_t
sd_cmd_illegal(SDState
*sd
, SDRequest req
)
1127 qemu_log_mask(LOG_GUEST_ERROR
, "%s: Unknown CMD%i for spec %s\n",
1128 sd
->proto
->name
, req
.cmd
,
1129 sd_version_str(sd
->spec_version
));
1134 /* Commands that are recognised but not yet implemented. */
1135 static sd_rsp_type_t
sd_cmd_unimplemented(SDState
*sd
, SDRequest req
)
1137 qemu_log_mask(LOG_UNIMP
, "%s: CMD%i not implemented\n",
1138 sd
->proto
->name
, req
.cmd
);
1143 static sd_rsp_type_t
sd_cmd_optional(SDState
*sd
, SDRequest req
)
1145 qemu_log_mask(LOG_UNIMP
, "%s: Optional CMD%i not implemented\n",
1146 sd
->proto
->name
, req
.cmd
);
1151 /* Configure fields for following sd_generic_write_byte() calls */
1152 static sd_rsp_type_t
sd_cmd_to_receivingdata(SDState
*sd
, SDRequest req
,
1153 uint64_t start
, size_t size
)
1155 if (sd
->state
!= sd_transfer_state
) {
1156 return sd_invalid_state_for_cmd(sd
, req
);
1158 sd
->state
= sd_receivingdata_state
;
1159 sd
->data_start
= start
;
1160 sd
->data_offset
= 0;
1161 /* sd->data[] used as receive buffer */
1162 sd
->data_size
= size
?: sizeof(sd
->data
);
1166 /* Configure fields for following sd_generic_read_byte() calls */
1167 static sd_rsp_type_t
sd_cmd_to_sendingdata(SDState
*sd
, SDRequest req
,
1169 const void *data
, size_t size
)
1171 if (sd
->state
!= sd_transfer_state
) {
1172 sd_invalid_state_for_cmd(sd
, req
);
1175 sd
->state
= sd_sendingdata_state
;
1176 sd
->data_start
= start
;
1177 sd
->data_offset
= 0;
1179 assert(size
> 0 && size
<= sizeof(sd
->data
));
1180 memcpy(sd
->data
, data
, size
);
1183 sd
->data_size
= size
;
1189 static sd_rsp_type_t
sd_cmd_GO_IDLE_STATE(SDState
*sd
, SDRequest req
)
1191 sd
->state
= sd_idle_state
;
1192 sd_reset(DEVICE(sd
));
1194 return sd_is_spi(sd
) ? sd_r1
: sd_r0
;
1198 static sd_rsp_type_t
spi_cmd_SEND_OP_COND(SDState
*sd
, SDRequest req
)
1200 sd
->state
= sd_transfer_state
;
1206 static sd_rsp_type_t
sd_cmd_ALL_SEND_CID(SDState
*sd
, SDRequest req
)
1208 switch (sd
->state
) {
1209 case sd_ready_state
:
1210 sd
->state
= sd_identification_state
;
1213 return sd_invalid_state_for_cmd(sd
, req
);
1218 static sd_rsp_type_t
sd_cmd_SEND_RELATIVE_ADDR(SDState
*sd
, SDRequest req
)
1220 switch (sd
->state
) {
1221 case sd_identification_state
:
1222 case sd_standby_state
:
1223 sd
->state
= sd_standby_state
;
1228 return sd_invalid_state_for_cmd(sd
, req
);
1233 static sd_rsp_type_t
sd_cmd_SWITCH_FUNCTION(SDState
*sd
, SDRequest req
)
1235 if (sd
->mode
!= sd_data_transfer_mode
) {
1236 return sd_invalid_mode_for_cmd(sd
, req
);
1238 if (sd
->state
!= sd_transfer_state
) {
1239 return sd_invalid_state_for_cmd(sd
, req
);
1242 sd_function_switch(sd
, req
.arg
);
1243 return sd_cmd_to_sendingdata(sd
, req
, 0, NULL
, 64);
1247 static sd_rsp_type_t
sd_cmd_DE_SELECT_CARD(SDState
*sd
, SDRequest req
)
1249 bool same_rca
= sd_req_rca_same(sd
, req
);
1251 switch (sd
->state
) {
1252 case sd_standby_state
:
1256 sd
->state
= sd_transfer_state
;
1259 case sd_transfer_state
:
1260 case sd_sendingdata_state
:
1264 sd
->state
= sd_standby_state
;
1267 case sd_disconnect_state
:
1271 sd
->state
= sd_programming_state
;
1274 case sd_programming_state
:
1278 sd
->state
= sd_disconnect_state
;
1284 return sd_invalid_state_for_cmd(sd
, req
);
1288 static sd_rsp_type_t
sd_cmd_SEND_IF_COND(SDState
*sd
, SDRequest req
)
1290 if (sd
->spec_version
< SD_PHY_SPECv2_00_VERS
) {
1291 return sd_cmd_illegal(sd
, req
);
1293 if (sd
->state
!= sd_idle_state
) {
1294 return sd_invalid_state_for_cmd(sd
, req
);
1298 /* No response if not exactly one VHS bit is set. */
1299 if (!(req
.arg
>> 8) || (req
.arg
>> (ctz32(req
.arg
& ~0xff) + 1))) {
1300 return sd_is_spi(sd
) ? sd_r7
: sd_r0
;
1309 static sd_rsp_type_t
spi_cmd_SEND_CSD(SDState
*sd
, SDRequest req
)
1311 if (sd
->state
!= sd_standby_state
) {
1312 return sd_invalid_state_for_cmd(sd
, req
);
1314 return sd_cmd_to_sendingdata(sd
, req
, sd_req_get_address(sd
, req
),
1318 static sd_rsp_type_t
sd_cmd_SEND_CSD(SDState
*sd
, SDRequest req
)
1320 if (sd
->state
!= sd_standby_state
) {
1321 return sd_invalid_state_for_cmd(sd
, req
);
1324 return sd_req_rca_same(sd
, req
) ? sd_r2_s
: sd_r0
;
1328 static sd_rsp_type_t
spi_cmd_SEND_CID(SDState
*sd
, SDRequest req
)
1330 if (sd
->state
!= sd_standby_state
) {
1331 return sd_invalid_state_for_cmd(sd
, req
);
1333 return sd_cmd_to_sendingdata(sd
, req
, sd_req_get_address(sd
, req
),
1337 static sd_rsp_type_t
sd_cmd_SEND_CID(SDState
*sd
, SDRequest req
)
1339 if (sd
->state
!= sd_standby_state
) {
1340 return sd_invalid_state_for_cmd(sd
, req
);
1343 return sd_req_rca_same(sd
, req
) ? sd_r2_i
: sd_r0
;
1347 static sd_rsp_type_t
sd_cmd_STOP_TRANSMISSION(SDState
*sd
, SDRequest req
)
1349 switch (sd
->state
) {
1350 case sd_sendingdata_state
:
1351 sd
->state
= sd_transfer_state
;
1353 case sd_receivingdata_state
:
1354 sd
->state
= sd_programming_state
;
1355 /* Bzzzzzzztt .... Operation complete. */
1356 sd
->state
= sd_transfer_state
;
1359 return sd_invalid_state_for_cmd(sd
, req
);
1364 static sd_rsp_type_t
sd_cmd_SEND_STATUS(SDState
*sd
, SDRequest req
)
1366 if (sd
->mode
!= sd_data_transfer_mode
) {
1367 return sd_invalid_mode_for_cmd(sd
, req
);
1370 switch (sd
->state
) {
1371 case sd_standby_state
:
1372 case sd_transfer_state
:
1373 case sd_sendingdata_state
:
1374 case sd_receivingdata_state
:
1375 case sd_programming_state
:
1376 case sd_disconnect_state
:
1379 return sd_invalid_state_for_cmd(sd
, req
);
1382 if (sd_is_spi(sd
)) {
1386 return sd_req_rca_same(sd
, req
) ? sd_r1
: sd_r0
;
1390 static sd_rsp_type_t
sd_cmd_GO_INACTIVE_STATE(SDState
*sd
, SDRequest req
)
1392 if (sd
->mode
!= sd_data_transfer_mode
) {
1393 return sd_invalid_mode_for_cmd(sd
, req
);
1395 switch (sd
->state
) {
1396 case sd_standby_state
:
1397 case sd_transfer_state
:
1398 case sd_sendingdata_state
:
1399 case sd_receivingdata_state
:
1400 case sd_programming_state
:
1401 case sd_disconnect_state
:
1404 return sd_invalid_state_for_cmd(sd
, req
);
1406 if (sd_req_rca_same(sd
, req
)) {
1407 sd
->state
= sd_inactive_state
;
1414 static sd_rsp_type_t
sd_cmd_SET_BLOCKLEN(SDState
*sd
, SDRequest req
)
1416 if (sd
->state
!= sd_transfer_state
) {
1417 return sd_invalid_state_for_cmd(sd
, req
);
1419 if (req
.arg
> (1 << HWBLOCK_SHIFT
)) {
1420 sd
->card_status
|= BLOCK_LEN_ERROR
;
1422 trace_sdcard_set_blocklen(req
.arg
);
1423 sd
->blk_len
= req
.arg
;
1430 static sd_rsp_type_t
sd_cmd_READ_SINGLE_BLOCK(SDState
*sd
, SDRequest req
)
1434 if (sd
->state
!= sd_transfer_state
) {
1435 return sd_invalid_state_for_cmd(sd
, req
);
1438 addr
= sd_req_get_address(sd
, req
);
1439 if (!address_in_range(sd
, "READ_SINGLE_BLOCK", addr
, sd
->blk_len
)) {
1443 sd_blk_read(sd
, addr
, sd
->blk_len
);
1444 return sd_cmd_to_sendingdata(sd
, req
, addr
, NULL
, sd
->blk_len
);
1448 static sd_rsp_type_t
sd_cmd_SEND_TUNING_BLOCK(SDState
*sd
, SDRequest req
)
1450 if (sd
->spec_version
< SD_PHY_SPECv3_01_VERS
) {
1451 return sd_cmd_illegal(sd
, req
);
1454 return sd_cmd_to_sendingdata(sd
, req
, 0,
1455 sd_tuning_block_pattern4
,
1456 sizeof(sd_tuning_block_pattern4
));
1460 static sd_rsp_type_t
sd_cmd_SET_BLOCK_COUNT(SDState
*sd
, SDRequest req
)
1462 if (sd
->spec_version
< SD_PHY_SPECv3_01_VERS
) {
1463 return sd_cmd_illegal(sd
, req
);
1466 if (sd
->state
!= sd_transfer_state
) {
1467 return sd_invalid_state_for_cmd(sd
, req
);
1470 sd
->multi_blk_cnt
= req
.arg
;
1471 trace_sdcard_set_block_count(sd
->multi_blk_cnt
);
1477 static sd_rsp_type_t
sd_cmd_WRITE_SINGLE_BLOCK(SDState
*sd
, SDRequest req
)
1481 if (sd
->state
!= sd_transfer_state
) {
1482 return sd_invalid_state_for_cmd(sd
, req
);
1485 addr
= sd_req_get_address(sd
, req
);
1486 if (!address_in_range(sd
, "WRITE_SINGLE_BLOCK", addr
, sd
->blk_len
)) {
1490 if (sd
->size
<= SDSC_MAX_CAPACITY
) {
1491 if (sd_wp_addr(sd
, addr
)) {
1492 sd
->card_status
|= WP_VIOLATION
;
1495 if (sd
->csd
[14] & 0x30) {
1496 sd
->card_status
|= WP_VIOLATION
;
1499 sd
->blk_written
= 0;
1500 return sd_cmd_to_receivingdata(sd
, req
, addr
, sd
->blk_len
);
1504 static sd_rsp_type_t
sd_cmd_PROGRAM_CSD(SDState
*sd
, SDRequest req
)
1506 return sd_cmd_to_receivingdata(sd
, req
, 0, sizeof(sd
->csd
));
1509 static sd_rsp_type_t
sd_cmd_SET_CLR_WRITE_PROT(SDState
*sd
, SDRequest req
,
1514 if (sd
->size
> SDSC_MAX_CAPACITY
) {
1518 if (sd
->state
!= sd_transfer_state
) {
1519 return sd_invalid_state_for_cmd(sd
, req
);
1522 addr
= sd_req_get_address(sd
, req
);
1523 if (!address_in_range(sd
, is_write
? "SET_WRITE_PROT" : "CLR_WRITE_PROT",
1528 sd
->state
= sd_programming_state
;
1530 set_bit(sd_addr_to_wpnum(addr
), sd
->wp_group_bmap
);
1532 clear_bit(sd_addr_to_wpnum(addr
), sd
->wp_group_bmap
);
1534 /* Bzzzzzzztt .... Operation complete. */
1535 sd
->state
= sd_transfer_state
;
1540 static sd_rsp_type_t
sd_cmd_SET_WRITE_PROT(SDState
*sd
, SDRequest req
)
1542 return sd_cmd_SET_CLR_WRITE_PROT(sd
, req
, true);
1546 static sd_rsp_type_t
sd_cmd_CLR_WRITE_PROT(SDState
*sd
, SDRequest req
)
1548 return sd_cmd_SET_CLR_WRITE_PROT(sd
, req
, false);
1552 static sd_rsp_type_t
sd_cmd_SEND_WRITE_PROT(SDState
*sd
, SDRequest req
)
1557 if (sd
->size
> SDSC_MAX_CAPACITY
) {
1561 if (sd
->state
!= sd_transfer_state
) {
1562 return sd_invalid_state_for_cmd(sd
, req
);
1565 addr
= sd_req_get_address(sd
, req
);
1566 if (!address_in_range(sd
, "SEND_WRITE_PROT", addr
, sd
->blk_len
)) {
1570 data
= sd_wpbits(sd
, req
.arg
);
1571 return sd_cmd_to_sendingdata(sd
, req
, addr
, &data
, sizeof(data
));
1575 static sd_rsp_type_t
sd_cmd_ERASE_WR_BLK_START(SDState
*sd
, SDRequest req
)
1577 if (sd
->state
!= sd_transfer_state
) {
1578 return sd_invalid_state_for_cmd(sd
, req
);
1580 sd
->erase_start
= req
.arg
;
1585 static sd_rsp_type_t
sd_cmd_ERASE_WR_BLK_END(SDState
*sd
, SDRequest req
)
1587 if (sd
->state
!= sd_transfer_state
) {
1588 return sd_invalid_state_for_cmd(sd
, req
);
1590 sd
->erase_end
= req
.arg
;
1595 static sd_rsp_type_t
sd_cmd_ERASE(SDState
*sd
, SDRequest req
)
1597 if (sd
->state
!= sd_transfer_state
) {
1598 return sd_invalid_state_for_cmd(sd
, req
);
1600 if (sd
->csd
[14] & 0x30) {
1601 sd
->card_status
|= WP_VIOLATION
;
1605 sd
->state
= sd_programming_state
;
1607 /* Bzzzzzzztt .... Operation complete. */
1608 sd
->state
= sd_transfer_state
;
1613 static sd_rsp_type_t
sd_cmd_LOCK_UNLOCK(SDState
*sd
, SDRequest req
)
1615 return sd_cmd_to_receivingdata(sd
, req
, 0, 0);
1619 static sd_rsp_type_t
sd_cmd_APP_CMD(SDState
*sd
, SDRequest req
)
1621 switch (sd
->state
) {
1622 case sd_ready_state
:
1623 case sd_identification_state
:
1624 case sd_inactive_state
:
1625 return sd_invalid_state_for_cmd(sd
, req
);
1627 if (!sd_is_spi(sd
) && sd_req_get_rca(sd
, req
) != 0x0000) {
1628 qemu_log_mask(LOG_GUEST_ERROR
,
1629 "SD: illegal RCA 0x%04x for APP_CMD\n", req
.cmd
);
1635 if (!sd_is_spi(sd
) && !sd_req_rca_same(sd
, req
)) {
1638 sd
->expecting_acmd
= true;
1639 sd
->card_status
|= APP_CMD
;
1644 static sd_rsp_type_t
sd_normal_command(SDState
*sd
, SDRequest req
)
1648 sd
->last_cmd_name
= sd_cmd_name(sd
, req
.cmd
);
1649 /* CMD55 precedes an ACMD, so we are not interested in tracing it.
1650 * However there is no ACMD55, so we want to trace this particular case.
1652 if (req
.cmd
!= 55 || sd
->expecting_acmd
) {
1653 trace_sdcard_normal_command(sd
->proto
->name
,
1654 sd
->last_cmd_name
, req
.cmd
,
1655 req
.arg
, sd_state_name(sd
->state
));
1658 /* Not interpreting this as an app command */
1659 sd
->card_status
&= ~APP_CMD
;
1661 /* CMD23 (set block count) must be immediately followed by CMD18 or CMD25
1662 * if not, its effects are cancelled */
1663 if (sd
->multi_blk_cnt
!= 0 && !(req
.cmd
== 18 || req
.cmd
== 25)) {
1664 sd
->multi_blk_cnt
= 0;
1667 if (sd
->proto
->cmd
[req
.cmd
].class == 6 && FIELD_EX32(sd
->ocr
, OCR
,
1669 /* Only Standard Capacity cards support class 6 commands */
1673 if (sd
->proto
->cmd
[req
.cmd
].handler
) {
1674 return sd
->proto
->cmd
[req
.cmd
].handler(sd
, req
);
1678 /* Block read commands (Class 2) */
1679 case 18: /* CMD18: READ_MULTIPLE_BLOCK */
1680 addr
= sd_req_get_address(sd
, req
);
1681 switch (sd
->state
) {
1682 case sd_transfer_state
:
1684 if (!address_in_range(sd
, "READ_BLOCK", addr
, sd
->blk_len
)) {
1688 sd
->state
= sd_sendingdata_state
;
1689 sd
->data_start
= addr
;
1690 sd
->data_offset
= 0;
1698 /* Block write commands (Class 4) */
1699 case 25: /* CMD25: WRITE_MULTIPLE_BLOCK */
1700 addr
= sd_req_get_address(sd
, req
);
1701 switch (sd
->state
) {
1702 case sd_transfer_state
:
1704 if (!address_in_range(sd
, "WRITE_BLOCK", addr
, sd
->blk_len
)) {
1708 sd
->state
= sd_receivingdata_state
;
1709 sd
->data_start
= addr
;
1710 sd
->data_offset
= 0;
1711 sd
->blk_written
= 0;
1713 if (sd
->size
<= SDSC_MAX_CAPACITY
) {
1714 if (sd_wp_addr(sd
, sd
->data_start
)) {
1715 sd
->card_status
|= WP_VIOLATION
;
1718 if (sd
->csd
[14] & 0x30) {
1719 sd
->card_status
|= WP_VIOLATION
;
1728 case 26: /* CMD26: PROGRAM_CID */
1729 return sd_cmd_to_receivingdata(sd
, req
, 0, sizeof(sd
->cid
));
1731 /* Application specific commands (Class 8) */
1732 case 56: /* CMD56: GEN_CMD */
1733 switch (sd
->state
) {
1734 case sd_transfer_state
:
1735 sd
->data_offset
= 0;
1737 sd
->state
= sd_sendingdata_state
;
1739 sd
->state
= sd_receivingdata_state
;
1747 case 58: /* CMD58: READ_OCR (SPI) */
1750 case 59: /* CMD59: CRC_ON_OFF (SPI) */
1754 qemu_log_mask(LOG_GUEST_ERROR
, "SD: Unknown CMD%i\n", req
.cmd
);
1758 return sd_invalid_state_for_cmd(sd
, req
);
1761 static sd_rsp_type_t
sd_app_command(SDState
*sd
,
1764 sd
->last_cmd_name
= sd_acmd_name(sd
, req
.cmd
);
1765 trace_sdcard_app_command(sd
->proto
->name
, sd
->last_cmd_name
,
1766 req
.cmd
, req
.arg
, sd_state_name(sd
->state
));
1767 sd
->card_status
|= APP_CMD
;
1769 if (sd
->proto
->acmd
[req
.cmd
].handler
) {
1770 return sd
->proto
->acmd
[req
.cmd
].handler(sd
, req
);
1774 case 6: /* ACMD6: SET_BUS_WIDTH */
1775 switch (sd
->state
) {
1776 case sd_transfer_state
:
1777 sd
->sd_status
[0] &= 0x3f;
1778 sd
->sd_status
[0] |= (req
.arg
& 0x03) << 6;
1786 case 13: /* ACMD13: SD_STATUS */
1787 switch (sd
->state
) {
1788 case sd_transfer_state
:
1789 return sd_cmd_to_sendingdata(sd
, req
, 0,
1791 sizeof(sd
->sd_status
));
1798 case 22: /* ACMD22: SEND_NUM_WR_BLOCKS */
1799 switch (sd
->state
) {
1800 case sd_transfer_state
:
1801 return sd_cmd_to_sendingdata(sd
, req
, 0,
1803 sizeof(sd
->blk_written
));
1810 case 23: /* ACMD23: SET_WR_BLK_ERASE_COUNT */
1811 switch (sd
->state
) {
1812 case sd_transfer_state
:
1820 case 41: /* ACMD41: SD_APP_OP_COND */
1821 if (sd
->state
!= sd_idle_state
) {
1824 /* If it's the first ACMD41 since reset, we need to decide
1825 * whether to power up. If this is not an enquiry ACMD41,
1826 * we immediately report power on and proceed below to the
1827 * ready state, but if it is, we set a timer to model a
1828 * delay for power up. This works around a bug in EDK2
1829 * UEFI, which sends an initial enquiry ACMD41, but
1830 * assumes that the card is in ready state as soon as it
1831 * sees the power up bit set. */
1832 if (!FIELD_EX32(sd
->ocr
, OCR
, CARD_POWER_UP
)) {
1833 if ((req
.arg
& ACMD41_ENQUIRY_MASK
) != 0) {
1834 timer_del(sd
->ocr_power_timer
);
1837 trace_sdcard_inquiry_cmd41();
1838 if (!timer_pending(sd
->ocr_power_timer
)) {
1839 timer_mod_ns(sd
->ocr_power_timer
,
1840 (qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL
)
1841 + OCR_POWER_DELAY_NS
));
1846 if (FIELD_EX32(sd
->ocr
& req
.arg
, OCR
, VDD_VOLTAGE_WINDOW
)) {
1847 /* We accept any voltage. 10000 V is nothing.
1849 * Once we're powered up, we advance straight to ready state
1850 * unless it's an enquiry ACMD41 (bits 23:0 == 0).
1852 sd
->state
= sd_ready_state
;
1857 case 42: /* ACMD42: SET_CLR_CARD_DETECT */
1858 switch (sd
->state
) {
1859 case sd_transfer_state
:
1860 /* Bringing in the 50KOhm pull-up resistor... Done. */
1868 case 51: /* ACMD51: SEND_SCR */
1869 switch (sd
->state
) {
1870 case sd_transfer_state
:
1871 return sd_cmd_to_sendingdata(sd
, req
, 0, sd
->scr
, sizeof(sd
->scr
));
1878 case 18: /* Reserved for SD security applications */
1883 /* Refer to the "SD Specifications Part3 Security Specification" for
1884 * information about the SD Security Features.
1886 qemu_log_mask(LOG_UNIMP
, "SD: CMD%i Security not implemented\n",
1891 /* Fall back to standard commands. */
1892 return sd_normal_command(sd
, req
);
1895 qemu_log_mask(LOG_GUEST_ERROR
, "SD: ACMD%i in a wrong state\n", req
.cmd
);
1899 static bool cmd_valid_while_locked(SDState
*sd
, unsigned cmd
)
1903 /* Valid commands in locked state:
1905 * lock card class (7)
1907 * implicitly, the ACMD prefix CMD55
1909 * Anything else provokes an "illegal command" response.
1911 if (sd
->expecting_acmd
) {
1912 return cmd
== 41 || cmd
== 42;
1914 if (cmd
== 16 || cmd
== 55) {
1917 if (!sd
->proto
->cmd
[cmd
].handler
) {
1920 cmd_class
= sd
->proto
->cmd
[cmd
].class;
1922 return cmd_class
== 0 || cmd_class
== 7;
1925 int sd_do_command(SDState
*sd
, SDRequest
*req
,
1926 uint8_t *response
) {
1928 sd_rsp_type_t rtype
;
1931 if (!sd
->blk
|| !blk_is_inserted(sd
->blk
) || !sd
->enable
) {
1935 if (sd
->state
== sd_inactive_state
) {
1940 if (sd_req_crc_validate(req
)) {
1941 sd
->card_status
|= COM_CRC_ERROR
;
1946 if (req
->cmd
>= SDMMC_CMD_MAX
) {
1947 qemu_log_mask(LOG_GUEST_ERROR
, "SD: incorrect command 0x%02x\n",
1952 if (sd
->card_status
& CARD_IS_LOCKED
) {
1953 if (!cmd_valid_while_locked(sd
, req
->cmd
)) {
1954 sd
->card_status
|= ILLEGAL_COMMAND
;
1955 sd
->expecting_acmd
= false;
1956 qemu_log_mask(LOG_GUEST_ERROR
, "SD: Card is locked\n");
1962 last_state
= sd
->state
;
1965 if (sd
->expecting_acmd
) {
1966 sd
->expecting_acmd
= false;
1967 rtype
= sd_app_command(sd
, *req
);
1969 rtype
= sd_normal_command(sd
, *req
);
1972 if (rtype
== sd_illegal
) {
1973 sd
->card_status
|= ILLEGAL_COMMAND
;
1975 /* Valid command, we can update the 'state before command' bits.
1976 * (Do this now so they appear in r1 responses.)
1978 sd
->current_cmd
= req
->cmd
;
1979 sd
->card_status
= FIELD_DP32(sd
->card_status
, CSR
,
1980 CURRENT_STATE
, last_state
);
1987 sd_response_r1_make(sd
, response
);
1992 memcpy(response
, sd
->cid
, sizeof(sd
->cid
));
1997 memcpy(response
, sd
->csd
, sizeof(sd
->csd
));
2002 sd_response_r3_make(sd
, response
);
2007 sd_response_r6_make(sd
, response
);
2012 sd_response_r7_make(sd
, response
);
2018 * Invalid state transition, reset implementation
2019 * fields to avoid OOB abuse.
2022 sd
->data_offset
= 0;
2028 g_assert_not_reached();
2030 trace_sdcard_response(sd_response_name(rtype
), rsplen
);
2032 if (rtype
!= sd_illegal
) {
2033 /* Clear the "clear on valid command" status bits now we've
2036 sd
->card_status
&= ~CARD_STATUS_B
;
2040 qemu_hexdump(stderr
, "Response", response
, rsplen
);
2046 /* Return true if buffer is consumed. Configured by sd_cmd_to_receivingdata() */
2047 static bool sd_generic_write_byte(SDState
*sd
, uint8_t value
)
2049 sd
->data
[sd
->data_offset
] = value
;
2051 if (++sd
->data_offset
>= sd
->data_size
) {
2052 sd
->state
= sd_transfer_state
;
2058 /* Return true when buffer is consumed. Configured by sd_cmd_to_sendingdata() */
2059 static bool sd_generic_read_byte(SDState
*sd
, uint8_t *value
)
2061 *value
= sd
->data
[sd
->data_offset
];
2063 if (++sd
->data_offset
>= sd
->data_size
) {
2064 sd
->state
= sd_transfer_state
;
2071 void sd_write_byte(SDState
*sd
, uint8_t value
)
2075 if (!sd
->blk
|| !blk_is_inserted(sd
->blk
) || !sd
->enable
)
2078 if (sd
->state
!= sd_receivingdata_state
) {
2079 qemu_log_mask(LOG_GUEST_ERROR
,
2080 "%s: not in Receiving-Data state\n", __func__
);
2084 if (sd
->card_status
& (ADDRESS_ERROR
| WP_VIOLATION
))
2087 trace_sdcard_write_data(sd
->proto
->name
,
2089 sd
->current_cmd
, sd
->data_offset
, value
);
2090 switch (sd
->current_cmd
) {
2091 case 24: /* CMD24: WRITE_SINGLE_BLOCK */
2092 if (sd_generic_write_byte(sd
, value
)) {
2093 /* TODO: Check CRC before committing */
2094 sd
->state
= sd_programming_state
;
2095 sd_blk_write(sd
, sd
->data_start
, sd
->data_offset
);
2097 sd
->csd
[14] |= 0x40;
2098 /* Bzzzzzzztt .... Operation complete. */
2099 sd
->state
= sd_transfer_state
;
2103 case 25: /* CMD25: WRITE_MULTIPLE_BLOCK */
2104 if (sd
->data_offset
== 0) {
2105 /* Start of the block - let's check the address is valid */
2106 if (!address_in_range(sd
, "WRITE_MULTIPLE_BLOCK",
2107 sd
->data_start
, sd
->blk_len
)) {
2110 if (sd
->size
<= SDSC_MAX_CAPACITY
) {
2111 if (sd_wp_addr(sd
, sd
->data_start
)) {
2112 sd
->card_status
|= WP_VIOLATION
;
2117 sd
->data
[sd
->data_offset
++] = value
;
2118 if (sd
->data_offset
>= sd
->blk_len
) {
2119 /* TODO: Check CRC before committing */
2120 sd
->state
= sd_programming_state
;
2121 sd_blk_write(sd
, sd
->data_start
, sd
->data_offset
);
2123 sd
->data_start
+= sd
->blk_len
;
2124 sd
->data_offset
= 0;
2125 sd
->csd
[14] |= 0x40;
2127 /* Bzzzzzzztt .... Operation complete. */
2128 if (sd
->multi_blk_cnt
!= 0) {
2129 if (--sd
->multi_blk_cnt
== 0) {
2131 sd
->state
= sd_transfer_state
;
2136 sd
->state
= sd_receivingdata_state
;
2140 case 26: /* CMD26: PROGRAM_CID */
2141 if (sd_generic_write_byte(sd
, value
)) {
2142 /* TODO: Check CRC before committing */
2143 sd
->state
= sd_programming_state
;
2144 for (i
= 0; i
< sizeof(sd
->cid
); i
++)
2145 if ((sd
->cid
[i
] | 0x00) != sd
->data
[i
])
2146 sd
->card_status
|= CID_CSD_OVERWRITE
;
2148 if (!(sd
->card_status
& CID_CSD_OVERWRITE
))
2149 for (i
= 0; i
< sizeof(sd
->cid
); i
++) {
2151 sd
->cid
[i
] &= sd
->data
[i
];
2153 /* Bzzzzzzztt .... Operation complete. */
2154 sd
->state
= sd_transfer_state
;
2158 case 27: /* CMD27: PROGRAM_CSD */
2159 if (sd_generic_write_byte(sd
, value
)) {
2160 /* TODO: Check CRC before committing */
2161 sd
->state
= sd_programming_state
;
2162 for (i
= 0; i
< sizeof(sd
->csd
); i
++)
2163 if ((sd
->csd
[i
] | sd_csd_rw_mask
[i
]) !=
2164 (sd
->data
[i
] | sd_csd_rw_mask
[i
]))
2165 sd
->card_status
|= CID_CSD_OVERWRITE
;
2167 /* Copy flag (OTP) & Permanent write protect */
2168 if (sd
->csd
[14] & ~sd
->data
[14] & 0x60)
2169 sd
->card_status
|= CID_CSD_OVERWRITE
;
2171 if (!(sd
->card_status
& CID_CSD_OVERWRITE
))
2172 for (i
= 0; i
< sizeof(sd
->csd
); i
++) {
2173 sd
->csd
[i
] |= sd_csd_rw_mask
[i
];
2174 sd
->csd
[i
] &= sd
->data
[i
];
2176 /* Bzzzzzzztt .... Operation complete. */
2177 sd
->state
= sd_transfer_state
;
2181 case 42: /* CMD42: LOCK_UNLOCK */
2182 if (sd_generic_write_byte(sd
, value
)) {
2183 /* TODO: Check CRC before committing */
2184 sd
->state
= sd_programming_state
;
2185 sd_lock_command(sd
);
2186 /* Bzzzzzzztt .... Operation complete. */
2187 sd
->state
= sd_transfer_state
;
2191 case 56: /* CMD56: GEN_CMD */
2192 sd
->data
[sd
->data_offset
++] = value
;
2193 if (sd
->data_offset
>= sd
->blk_len
) {
2194 APP_WRITE_BLOCK(sd
->data_start
, sd
->data_offset
);
2195 sd
->state
= sd_transfer_state
;
2200 qemu_log_mask(LOG_GUEST_ERROR
, "%s: unknown command\n", __func__
);
2205 uint8_t sd_read_byte(SDState
*sd
)
2207 /* TODO: Append CRCs */
2211 if (!sd
->blk
|| !blk_is_inserted(sd
->blk
) || !sd
->enable
)
2214 if (sd
->state
!= sd_sendingdata_state
) {
2215 qemu_log_mask(LOG_GUEST_ERROR
,
2216 "%s: not in Sending-Data state\n", __func__
);
2220 if (sd
->card_status
& (ADDRESS_ERROR
| WP_VIOLATION
))
2223 io_len
= sd_blk_len(sd
);
2225 trace_sdcard_read_data(sd
->proto
->name
,
2227 sd
->current_cmd
, sd
->data_offset
, io_len
);
2228 switch (sd
->current_cmd
) {
2229 case 6: /* CMD6: SWITCH_FUNCTION */
2230 case 9: /* CMD9: SEND_CSD */
2231 case 10: /* CMD10: SEND_CID */
2232 case 13: /* ACMD13: SD_STATUS */
2233 case 17: /* CMD17: READ_SINGLE_BLOCK */
2234 case 19: /* CMD19: SEND_TUNING_BLOCK (SD) */
2235 case 22: /* ACMD22: SEND_NUM_WR_BLOCKS */
2236 case 30: /* CMD30: SEND_WRITE_PROT */
2237 case 51: /* ACMD51: SEND_SCR */
2238 sd_generic_read_byte(sd
, &ret
);
2241 case 18: /* CMD18: READ_MULTIPLE_BLOCK */
2242 if (sd
->data_offset
== 0) {
2243 if (!address_in_range(sd
, "READ_MULTIPLE_BLOCK",
2244 sd
->data_start
, io_len
)) {
2247 sd_blk_read(sd
, sd
->data_start
, io_len
);
2249 ret
= sd
->data
[sd
->data_offset
++];
2251 if (sd
->data_offset
>= io_len
) {
2252 sd
->data_start
+= io_len
;
2253 sd
->data_offset
= 0;
2255 if (sd
->multi_blk_cnt
!= 0) {
2256 if (--sd
->multi_blk_cnt
== 0) {
2258 sd
->state
= sd_transfer_state
;
2265 case 56: /* CMD56: GEN_CMD */
2266 if (sd
->data_offset
== 0)
2267 APP_READ_BLOCK(sd
->data_start
, sd
->blk_len
);
2268 ret
= sd
->data
[sd
->data_offset
++];
2270 if (sd
->data_offset
>= sd
->blk_len
)
2271 sd
->state
= sd_transfer_state
;
2275 qemu_log_mask(LOG_GUEST_ERROR
, "%s: unknown command\n", __func__
);
2282 static bool sd_receive_ready(SDState
*sd
)
2284 return sd
->state
== sd_receivingdata_state
;
2287 static bool sd_data_ready(SDState
*sd
)
2289 return sd
->state
== sd_sendingdata_state
;
2292 void sd_enable(SDState
*sd
, bool enable
)
2294 sd
->enable
= enable
;
2297 static const SDProto sd_proto_spi
= {
2300 [0] = {0, sd_spi
, "GO_IDLE_STATE", sd_cmd_GO_IDLE_STATE
},
2301 [1] = {0, sd_spi
, "SEND_OP_COND", spi_cmd_SEND_OP_COND
},
2302 [5] = {9, sd_spi
, "IO_SEND_OP_COND", sd_cmd_optional
},
2303 [6] = {10, sd_spi
, "SWITCH_FUNCTION", sd_cmd_SWITCH_FUNCTION
},
2304 [8] = {0, sd_spi
, "SEND_IF_COND", sd_cmd_SEND_IF_COND
},
2305 [9] = {0, sd_spi
, "SEND_CSD", spi_cmd_SEND_CSD
},
2306 [10] = {0, sd_spi
, "SEND_CID", spi_cmd_SEND_CID
},
2307 [12] = {0, sd_spi
, "STOP_TRANSMISSION", sd_cmd_STOP_TRANSMISSION
},
2308 [13] = {0, sd_spi
, "SEND_STATUS", sd_cmd_SEND_STATUS
},
2309 [16] = {2, sd_spi
, "SET_BLOCKLEN", sd_cmd_SET_BLOCKLEN
},
2310 [17] = {2, sd_spi
, "READ_SINGLE_BLOCK", sd_cmd_READ_SINGLE_BLOCK
},
2311 [24] = {4, sd_spi
, "WRITE_SINGLE_BLOCK", sd_cmd_WRITE_SINGLE_BLOCK
},
2312 [27] = {4, sd_spi
, "PROGRAM_CSD", sd_cmd_PROGRAM_CSD
},
2313 [28] = {6, sd_spi
, "SET_WRITE_PROT", sd_cmd_SET_WRITE_PROT
},
2314 [29] = {6, sd_spi
, "CLR_WRITE_PROT", sd_cmd_CLR_WRITE_PROT
},
2315 [30] = {6, sd_spi
, "SEND_WRITE_PROT", sd_cmd_SEND_WRITE_PROT
},
2316 [32] = {5, sd_spi
, "ERASE_WR_BLK_START", sd_cmd_ERASE_WR_BLK_START
},
2317 [33] = {5, sd_spi
, "ERASE_WR_BLK_END", sd_cmd_ERASE_WR_BLK_END
},
2318 [34] = {10, sd_spi
, "READ_SEC_CMD", sd_cmd_optional
},
2319 [35] = {10, sd_spi
, "WRITE_SEC_CMD", sd_cmd_optional
},
2320 [36] = {10, sd_spi
, "SEND_PSI", sd_cmd_optional
},
2321 [37] = {10, sd_spi
, "CONTROL_ASSD_SYSTEM", sd_cmd_optional
},
2322 [38] = {5, sd_spi
, "ERASE", sd_cmd_ERASE
},
2323 [42] = {7, sd_spi
, "LOCK_UNLOCK", sd_cmd_LOCK_UNLOCK
},
2324 [50] = {10, sd_spi
, "DIRECT_SECURE_READ", sd_cmd_optional
},
2325 [52] = {9, sd_spi
, "IO_RW_DIRECT", sd_cmd_optional
},
2326 [53] = {9, sd_spi
, "IO_RW_EXTENDED", sd_cmd_optional
},
2327 [55] = {8, sd_spi
, "APP_CMD", sd_cmd_APP_CMD
},
2328 [57] = {10, sd_spi
, "DIRECT_SECURE_WRITE", sd_cmd_optional
},
2331 [41] = {8, sd_spi
, "SEND_OP_COND", spi_cmd_SEND_OP_COND
},
2335 static const SDProto sd_proto_sd
= {
2338 [0] = {0, sd_bc
, "GO_IDLE_STATE", sd_cmd_GO_IDLE_STATE
},
2339 [2] = {0, sd_bcr
, "ALL_SEND_CID", sd_cmd_ALL_SEND_CID
},
2340 [3] = {0, sd_bcr
, "SEND_RELATIVE_ADDR", sd_cmd_SEND_RELATIVE_ADDR
},
2341 [4] = {0, sd_bc
, "SEND_DSR", sd_cmd_unimplemented
},
2342 [5] = {9, sd_bc
, "IO_SEND_OP_COND", sd_cmd_optional
},
2343 [6] = {10, sd_adtc
, "SWITCH_FUNCTION", sd_cmd_SWITCH_FUNCTION
},
2344 [7] = {0, sd_ac
, "(DE)SELECT_CARD", sd_cmd_DE_SELECT_CARD
},
2345 [8] = {0, sd_bcr
, "SEND_IF_COND", sd_cmd_SEND_IF_COND
},
2346 [9] = {0, sd_ac
, "SEND_CSD", sd_cmd_SEND_CSD
},
2347 [10] = {0, sd_ac
, "SEND_CID", sd_cmd_SEND_CID
},
2348 [11] = {0, sd_ac
, "VOLTAGE_SWITCH", sd_cmd_optional
},
2349 [12] = {0, sd_ac
, "STOP_TRANSMISSION", sd_cmd_STOP_TRANSMISSION
},
2350 [13] = {0, sd_ac
, "SEND_STATUS", sd_cmd_SEND_STATUS
},
2351 [15] = {0, sd_ac
, "GO_INACTIVE_STATE", sd_cmd_GO_INACTIVE_STATE
},
2352 [16] = {2, sd_ac
, "SET_BLOCKLEN", sd_cmd_SET_BLOCKLEN
},
2353 [17] = {2, sd_adtc
, "READ_SINGLE_BLOCK", sd_cmd_READ_SINGLE_BLOCK
},
2354 [19] = {2, sd_adtc
, "SEND_TUNING_BLOCK", sd_cmd_SEND_TUNING_BLOCK
},
2355 [20] = {2, sd_ac
, "SPEED_CLASS_CONTROL", sd_cmd_optional
},
2356 [23] = {2, sd_ac
, "SET_BLOCK_COUNT", sd_cmd_SET_BLOCK_COUNT
},
2357 [24] = {4, sd_adtc
, "WRITE_SINGLE_BLOCK", sd_cmd_WRITE_SINGLE_BLOCK
},
2358 [27] = {4, sd_adtc
, "PROGRAM_CSD", sd_cmd_PROGRAM_CSD
},
2359 [28] = {6, sd_ac
, "SET_WRITE_PROT", sd_cmd_SET_WRITE_PROT
},
2360 [29] = {6, sd_ac
, "CLR_WRITE_PROT", sd_cmd_CLR_WRITE_PROT
},
2361 [30] = {6, sd_adtc
, "SEND_WRITE_PROT", sd_cmd_SEND_WRITE_PROT
},
2362 [32] = {5, sd_ac
, "ERASE_WR_BLK_START", sd_cmd_ERASE_WR_BLK_START
},
2363 [33] = {5, sd_ac
, "ERASE_WR_BLK_END", sd_cmd_ERASE_WR_BLK_END
},
2364 [34] = {10, sd_adtc
, "READ_SEC_CMD", sd_cmd_optional
},
2365 [35] = {10, sd_adtc
, "WRITE_SEC_CMD", sd_cmd_optional
},
2366 [36] = {10, sd_adtc
, "SEND_PSI", sd_cmd_optional
},
2367 [37] = {10, sd_ac
, "CONTROL_ASSD_SYSTEM", sd_cmd_optional
},
2368 [38] = {5, sd_ac
, "ERASE", sd_cmd_ERASE
},
2369 [42] = {7, sd_adtc
, "LOCK_UNLOCK", sd_cmd_LOCK_UNLOCK
},
2370 [43] = {1, sd_ac
, "Q_MANAGEMENT", sd_cmd_optional
},
2371 [44] = {1, sd_ac
, "Q_TASK_INFO_A", sd_cmd_optional
},
2372 [45] = {1, sd_ac
, "Q_TASK_INFO_B", sd_cmd_optional
},
2373 [46] = {1, sd_adtc
, "Q_RD_TASK", sd_cmd_optional
},
2374 [47] = {1, sd_adtc
, "Q_WR_TASK", sd_cmd_optional
},
2375 [48] = {1, sd_adtc
, "READ_EXTR_SINGLE", sd_cmd_optional
},
2376 [49] = {1, sd_adtc
, "WRITE_EXTR_SINGLE", sd_cmd_optional
},
2377 [50] = {10, sd_adtc
, "DIRECT_SECURE_READ", sd_cmd_optional
},
2378 [52] = {9, sd_bc
, "IO_RW_DIRECT", sd_cmd_optional
},
2379 [53] = {9, sd_bc
, "IO_RW_EXTENDED", sd_cmd_optional
},
2380 [55] = {8, sd_ac
, "APP_CMD", sd_cmd_APP_CMD
},
2381 [57] = {10, sd_adtc
, "DIRECT_SECURE_WRITE", sd_cmd_optional
},
2382 [58] = {11, sd_adtc
, "READ_EXTR_MULTI", sd_cmd_optional
},
2383 [59] = {11, sd_adtc
, "WRITE_EXTR_MULTI", sd_cmd_optional
},
2387 static void sd_instance_init(Object
*obj
)
2389 SDState
*sd
= SD_CARD(obj
);
2390 SDCardClass
*sc
= SD_CARD_GET_CLASS(sd
);
2392 sd
->proto
= sc
->proto
;
2393 sd
->last_cmd_name
= "UNSET";
2395 sd
->ocr_power_timer
= timer_new_ns(QEMU_CLOCK_VIRTUAL
, sd_ocr_powerup
, sd
);
2398 static void sd_instance_finalize(Object
*obj
)
2400 SDState
*sd
= SD_CARD(obj
);
2402 timer_free(sd
->ocr_power_timer
);
2405 static void sd_realize(DeviceState
*dev
, Error
**errp
)
2407 SDState
*sd
= SD_CARD(dev
);
2410 switch (sd
->spec_version
) {
2411 case SD_PHY_SPECv1_10_VERS
2412 ... SD_PHY_SPECv3_01_VERS
:
2415 error_setg(errp
, "Invalid SD card Spec version: %u", sd
->spec_version
);
2422 if (!blk_supports_write_perm(sd
->blk
)) {
2423 error_setg(errp
, "Cannot use read-only drive as SD card");
2427 blk_size
= blk_getlength(sd
->blk
);
2428 if (blk_size
> 0 && !is_power_of_2(blk_size
)) {
2429 int64_t blk_size_aligned
= pow2ceil(blk_size
);
2432 blk_size_str
= size_to_str(blk_size
);
2433 error_setg(errp
, "Invalid SD card size: %s", blk_size_str
);
2434 g_free(blk_size_str
);
2436 blk_size_str
= size_to_str(blk_size_aligned
);
2437 error_append_hint(errp
,
2438 "SD card size has to be a power of 2, e.g. %s.\n"
2439 "You can resize disk images with"
2440 " 'qemu-img resize <imagefile> <new-size>'\n"
2441 "(note that this will lose data if you make the"
2442 " image smaller than it currently is).\n",
2444 g_free(blk_size_str
);
2449 ret
= blk_set_perm(sd
->blk
, BLK_PERM_CONSISTENT_READ
| BLK_PERM_WRITE
,
2450 BLK_PERM_ALL
, errp
);
2454 blk_set_dev_ops(sd
->blk
, &sd_block_ops
, sd
);
2458 static Property sd_properties
[] = {
2459 DEFINE_PROP_UINT8("spec_version", SDState
,
2460 spec_version
, SD_PHY_SPECv2_00_VERS
),
2461 DEFINE_PROP_DRIVE("drive", SDState
, blk
),
2462 /* We do not model the chip select pin, so allow the board to select
2463 * whether card should be in SSI or MMC/SD mode. It is also up to the
2464 * board to ensure that ssi transfers only occur when the chip select
2466 DEFINE_PROP_END_OF_LIST()
2469 static void sd_class_init(ObjectClass
*klass
, void *data
)
2471 DeviceClass
*dc
= DEVICE_CLASS(klass
);
2472 SDCardClass
*sc
= SD_CARD_CLASS(klass
);
2474 dc
->realize
= sd_realize
;
2475 device_class_set_props(dc
, sd_properties
);
2476 dc
->vmsd
= &sd_vmstate
;
2477 dc
->reset
= sd_reset
;
2478 dc
->bus_type
= TYPE_SD_BUS
;
2479 set_bit(DEVICE_CATEGORY_STORAGE
, dc
->categories
);
2481 sc
->set_voltage
= sd_set_voltage
;
2482 sc
->get_dat_lines
= sd_get_dat_lines
;
2483 sc
->get_cmd_line
= sd_get_cmd_line
;
2484 sc
->do_command
= sd_do_command
;
2485 sc
->write_byte
= sd_write_byte
;
2486 sc
->read_byte
= sd_read_byte
;
2487 sc
->receive_ready
= sd_receive_ready
;
2488 sc
->data_ready
= sd_data_ready
;
2489 sc
->enable
= sd_enable
;
2490 sc
->get_inserted
= sd_get_inserted
;
2491 sc
->get_readonly
= sd_get_readonly
;
2492 sc
->proto
= &sd_proto_sd
;
2496 * We do not model the chip select pin, so allow the board to select
2497 * whether card should be in SSI or MMC/SD mode. It is also up to the
2498 * board to ensure that ssi transfers only occur when the chip select
2501 static void sd_spi_class_init(ObjectClass
*klass
, void *data
)
2503 DeviceClass
*dc
= DEVICE_CLASS(klass
);
2504 SDCardClass
*sc
= SD_CARD_CLASS(klass
);
2506 dc
->desc
= "SD SPI";
2507 sc
->proto
= &sd_proto_spi
;
2510 static const TypeInfo sd_types
[] = {
2512 .name
= TYPE_SD_CARD
,
2513 .parent
= TYPE_DEVICE
,
2514 .instance_size
= sizeof(SDState
),
2515 .class_size
= sizeof(SDCardClass
),
2516 .class_init
= sd_class_init
,
2517 .instance_init
= sd_instance_init
,
2518 .instance_finalize
= sd_instance_finalize
,
2521 .name
= TYPE_SD_CARD_SPI
,
2522 .parent
= TYPE_SD_CARD
,
2523 .class_init
= sd_spi_class_init
,
2527 DEFINE_TYPES(sd_types
)