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
,
85 sd_receivingdata_state
,
91 DeviceState parent_obj
;
93 /* If true, created by sd_init() for a non-qdevified caller */
94 /* TODO purge them with fire */
95 bool me_no_qdev_me_kill_mammoth_with_rocks
;
97 /* SD Memory Card Registers */
103 uint32_t card_status
;
104 uint8_t sd_status
[64];
106 /* Static properties */
108 uint8_t spec_version
;
112 /* Runtime changeables */
114 uint32_t mode
; /* current card mode, one of SDCardModes */
115 int32_t state
; /* current card state, one of SDCardStates */
118 unsigned long *wp_groups
;
122 uint32_t multi_blk_cnt
;
123 uint32_t erase_start
;
127 uint8_t function_group
[6];
129 /* True if we will handle the next command as an ACMD. Note that this does
130 * *not* track the APP_CMD status bit!
133 uint32_t blk_written
;
135 uint32_t data_offset
;
137 qemu_irq readonly_cb
;
138 qemu_irq inserted_cb
;
139 QEMUTimer
*ocr_power_timer
;
140 const char *proto_name
;
146 static void sd_realize(DeviceState
*dev
, Error
**errp
);
148 static const char *sd_state_name(enum SDCardStates state
)
150 static const char *state_name
[] = {
151 [sd_idle_state
] = "idle",
152 [sd_ready_state
] = "ready",
153 [sd_identification_state
] = "identification",
154 [sd_standby_state
] = "standby",
155 [sd_transfer_state
] = "transfer",
156 [sd_sendingdata_state
] = "sendingdata",
157 [sd_receivingdata_state
] = "receivingdata",
158 [sd_programming_state
] = "programming",
159 [sd_disconnect_state
] = "disconnect",
161 if (state
== sd_inactive_state
) {
164 assert(state
< ARRAY_SIZE(state_name
));
165 return state_name
[state
];
168 static const char *sd_response_name(sd_rsp_type_t rsp
)
170 static const char *response_name
[] = {
171 [sd_r0
] = "RESP#0 (no response)",
172 [sd_r1
] = "RESP#1 (normal cmd)",
173 [sd_r2_i
] = "RESP#2 (CID reg)",
174 [sd_r2_s
] = "RESP#2 (CSD reg)",
175 [sd_r3
] = "RESP#3 (OCR reg)",
176 [sd_r6
] = "RESP#6 (RCA)",
177 [sd_r7
] = "RESP#7 (operating voltage)",
179 if (rsp
== sd_illegal
) {
180 return "ILLEGAL RESP";
185 assert(rsp
< ARRAY_SIZE(response_name
));
186 return response_name
[rsp
];
189 static uint8_t sd_get_dat_lines(SDState
*sd
)
191 return sd
->enable
? sd
->dat_lines
: 0;
194 static bool sd_get_cmd_line(SDState
*sd
)
196 return sd
->enable
? sd
->cmd_line
: false;
199 static void sd_set_voltage(SDState
*sd
, uint16_t millivolts
)
201 trace_sdcard_set_voltage(millivolts
);
203 switch (millivolts
) {
204 case 3001 ... 3600: /* SD_VOLTAGE_3_3V */
205 case 2001 ... 3000: /* SD_VOLTAGE_3_0V */
208 qemu_log_mask(LOG_GUEST_ERROR
, "SD card voltage not supported: %.3fV",
209 millivolts
/ 1000.f
);
213 static void sd_set_mode(SDState
*sd
)
216 case sd_inactive_state
:
217 sd
->mode
= sd_inactive
;
222 case sd_identification_state
:
223 sd
->mode
= sd_card_identification_mode
;
226 case sd_standby_state
:
227 case sd_transfer_state
:
228 case sd_sendingdata_state
:
229 case sd_receivingdata_state
:
230 case sd_programming_state
:
231 case sd_disconnect_state
:
232 sd
->mode
= sd_data_transfer_mode
;
237 static const sd_cmd_type_t sd_cmd_type
[SDMMC_CMD_MAX
] = {
238 sd_bc
, sd_none
, sd_bcr
, sd_bcr
, sd_none
, sd_none
, sd_none
, sd_ac
,
239 sd_bcr
, sd_ac
, sd_ac
, sd_adtc
, sd_ac
, sd_ac
, sd_none
, sd_ac
,
241 sd_ac
, sd_adtc
, sd_adtc
, sd_none
, sd_none
, sd_none
, sd_none
, sd_none
,
242 sd_adtc
, sd_adtc
, sd_adtc
, sd_adtc
, sd_ac
, sd_ac
, sd_adtc
, sd_none
,
244 sd_ac
, sd_ac
, sd_none
, sd_none
, sd_none
, sd_none
, sd_ac
, sd_none
,
245 sd_none
, sd_none
, sd_bc
, sd_none
, sd_none
, sd_none
, sd_none
, sd_none
,
247 sd_none
, sd_none
, sd_none
, sd_none
, sd_none
, sd_none
, sd_none
, sd_ac
,
248 sd_adtc
, sd_none
, sd_none
, sd_none
, sd_none
, sd_none
, sd_none
, sd_none
,
251 static const int sd_cmd_class
[SDMMC_CMD_MAX
] = {
252 0, 0, 0, 0, 0, 9, 10, 0, 0, 0, 0, 1, 0, 0, 0, 0,
253 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 6, 6, 6, 6,
254 5, 5, 10, 10, 10, 10, 5, 9, 9, 9, 7, 7, 7, 7, 7, 7,
255 7, 7, 10, 7, 9, 9, 9, 8, 8, 10, 8, 8, 8, 8, 8, 8,
258 static uint8_t sd_crc7(const void *message
, size_t width
)
261 uint8_t shift_reg
= 0x00;
262 const uint8_t *msg
= (const uint8_t *)message
;
264 for (i
= 0; i
< width
; i
++, msg
++)
265 for (bit
= 7; bit
>= 0; bit
--) {
267 if ((shift_reg
>> 7) ^ ((*msg
>> bit
) & 1))
274 #define OCR_POWER_DELAY_NS 500000 /* 0.5ms */
276 FIELD(OCR
, VDD_VOLTAGE_WINDOW
, 0, 24)
277 FIELD(OCR
, VDD_VOLTAGE_WIN_LO
, 0, 8)
278 FIELD(OCR
, DUAL_VOLTAGE_CARD
, 7, 1)
279 FIELD(OCR
, VDD_VOLTAGE_WIN_HI
, 8, 16)
280 FIELD(OCR
, ACCEPT_SWITCH_1V8
, 24, 1) /* Only UHS-I */
281 FIELD(OCR
, UHS_II_CARD
, 29, 1) /* Only UHS-II */
282 FIELD(OCR
, CARD_CAPACITY
, 30, 1) /* 0:SDSC, 1:SDHC/SDXC */
283 FIELD(OCR
, CARD_POWER_UP
, 31, 1)
285 #define ACMD41_ENQUIRY_MASK 0x00ffffff
286 #define ACMD41_R3_MASK (R_OCR_VDD_VOLTAGE_WIN_HI_MASK \
287 | R_OCR_ACCEPT_SWITCH_1V8_MASK \
288 | R_OCR_UHS_II_CARD_MASK \
289 | R_OCR_CARD_CAPACITY_MASK \
290 | R_OCR_CARD_POWER_UP_MASK)
292 static void sd_set_ocr(SDState
*sd
)
294 /* All voltages OK */
295 sd
->ocr
= R_OCR_VDD_VOLTAGE_WIN_HI_MASK
;
298 static void sd_ocr_powerup(void *opaque
)
300 SDState
*sd
= opaque
;
302 trace_sdcard_powerup();
303 assert(!FIELD_EX32(sd
->ocr
, OCR
, CARD_POWER_UP
));
305 /* card power-up OK */
306 sd
->ocr
= FIELD_DP32(sd
->ocr
, OCR
, CARD_POWER_UP
, 1);
308 if (sd
->size
> SDSC_MAX_CAPACITY
) {
309 sd
->ocr
= FIELD_DP32(sd
->ocr
, OCR
, CARD_CAPACITY
, 1);
313 static void sd_set_scr(SDState
*sd
)
315 sd
->scr
[0] = 0 << 4; /* SCR structure version 1.0 */
316 if (sd
->spec_version
== SD_PHY_SPECv1_10_VERS
) {
317 sd
->scr
[0] |= 1; /* Spec Version 1.10 */
319 sd
->scr
[0] |= 2; /* Spec Version 2.00 or Version 3.0X */
321 sd
->scr
[1] = (2 << 4) /* SDSC Card (Security Version 1.01) */
322 | 0b0101; /* 1-bit or 4-bit width bus modes */
323 sd
->scr
[2] = 0x00; /* Extended Security is not supported. */
324 if (sd
->spec_version
>= SD_PHY_SPECv3_01_VERS
) {
325 sd
->scr
[2] |= 1 << 7; /* Spec Version 3.0X */
328 /* reserved for manufacturer usage */
342 static void sd_set_cid(SDState
*sd
)
344 sd
->cid
[0] = MID
; /* Fake card manufacturer ID (MID) */
345 sd
->cid
[1] = OID
[0]; /* OEM/Application ID (OID) */
347 sd
->cid
[3] = PNM
[0]; /* Fake product name (PNM) */
352 sd
->cid
[8] = PRV
; /* Fake product revision (PRV) */
353 sd
->cid
[9] = 0xde; /* Fake serial number (PSN) */
357 sd
->cid
[13] = 0x00 | /* Manufacture date (MDT) */
358 ((MDT_YR
- 2000) / 10);
359 sd
->cid
[14] = ((MDT_YR
% 10) << 4) | MDT_MON
;
360 sd
->cid
[15] = (sd_crc7(sd
->cid
, 15) << 1) | 1;
363 #define HWBLOCK_SHIFT 9 /* 512 bytes */
364 #define SECTOR_SHIFT 5 /* 16 kilobytes */
365 #define WPGROUP_SHIFT 7 /* 2 megs */
366 #define CMULT_SHIFT 9 /* 512 times HWBLOCK_SIZE */
367 #define WPGROUP_SIZE (1 << (HWBLOCK_SHIFT + SECTOR_SHIFT + WPGROUP_SHIFT))
369 static const uint8_t sd_csd_rw_mask
[16] = {
370 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
371 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfe,
374 static void sd_set_csd(SDState
*sd
, uint64_t size
)
376 int hwblock_shift
= HWBLOCK_SHIFT
;
378 uint32_t sectsize
= (1 << (SECTOR_SHIFT
+ 1)) - 1;
379 uint32_t wpsize
= (1 << (WPGROUP_SHIFT
+ 1)) - 1;
381 /* To indicate 2 GiB card, BLOCK_LEN shall be 1024 bytes */
382 if (size
== SDSC_MAX_CAPACITY
) {
385 csize
= (size
>> (CMULT_SHIFT
+ hwblock_shift
)) - 1;
387 if (size
<= SDSC_MAX_CAPACITY
) { /* Standard Capacity SD */
388 sd
->csd
[0] = 0x00; /* CSD structure */
389 sd
->csd
[1] = 0x26; /* Data read access-time-1 */
390 sd
->csd
[2] = 0x00; /* Data read access-time-2 */
391 sd
->csd
[3] = 0x32; /* Max. data transfer rate: 25 MHz */
392 sd
->csd
[4] = 0x5f; /* Card Command Classes */
393 sd
->csd
[5] = 0x50 | /* Max. read data block length */
395 sd
->csd
[6] = 0xe0 | /* Partial block for read allowed */
396 ((csize
>> 10) & 0x03);
397 sd
->csd
[7] = 0x00 | /* Device size */
398 ((csize
>> 2) & 0xff);
399 sd
->csd
[8] = 0x3f | /* Max. read current */
400 ((csize
<< 6) & 0xc0);
401 sd
->csd
[9] = 0xfc | /* Max. write current */
402 ((CMULT_SHIFT
- 2) >> 1);
403 sd
->csd
[10] = 0x40 | /* Erase sector size */
404 (((CMULT_SHIFT
- 2) << 7) & 0x80) | (sectsize
>> 1);
405 sd
->csd
[11] = 0x00 | /* Write protect group size */
406 ((sectsize
<< 7) & 0x80) | wpsize
;
407 sd
->csd
[12] = 0x90 | /* Write speed factor */
408 (hwblock_shift
>> 2);
409 sd
->csd
[13] = 0x20 | /* Max. write data block length */
410 ((hwblock_shift
<< 6) & 0xc0);
411 sd
->csd
[14] = 0x00; /* File format group */
422 sd
->csd
[7] = (size
>> 16) & 0xff;
423 sd
->csd
[8] = (size
>> 8) & 0xff;
424 sd
->csd
[9] = (size
& 0xff);
431 sd
->csd
[15] = (sd_crc7(sd
->csd
, 15) << 1) | 1;
434 static void sd_set_rca(SDState
*sd
)
439 FIELD(CSR
, AKE_SEQ_ERROR
, 3, 1)
440 FIELD(CSR
, APP_CMD
, 5, 1)
441 FIELD(CSR
, FX_EVENT
, 6, 1)
442 FIELD(CSR
, READY_FOR_DATA
, 8, 1)
443 FIELD(CSR
, CURRENT_STATE
, 9, 4)
444 FIELD(CSR
, ERASE_RESET
, 13, 1)
445 FIELD(CSR
, CARD_ECC_DISABLED
, 14, 1)
446 FIELD(CSR
, WP_ERASE_SKIP
, 15, 1)
447 FIELD(CSR
, CSD_OVERWRITE
, 16, 1)
448 FIELD(CSR
, DEFERRED_RESPONSE
, 17, 1)
449 FIELD(CSR
, ERROR
, 19, 1)
450 FIELD(CSR
, CC_ERROR
, 20, 1)
451 FIELD(CSR
, CARD_ECC_FAILED
, 21, 1)
452 FIELD(CSR
, ILLEGAL_COMMAND
, 22, 1)
453 FIELD(CSR
, COM_CRC_ERROR
, 23, 1)
454 FIELD(CSR
, LOCK_UNLOCK_FAILED
, 24, 1)
455 FIELD(CSR
, CARD_IS_LOCKED
, 25, 1)
456 FIELD(CSR
, WP_VIOLATION
, 26, 1)
457 FIELD(CSR
, ERASE_PARAM
, 27, 1)
458 FIELD(CSR
, ERASE_SEQ_ERROR
, 28, 1)
459 FIELD(CSR
, BLOCK_LEN_ERROR
, 29, 1)
460 FIELD(CSR
, ADDRESS_ERROR
, 30, 1)
461 FIELD(CSR
, OUT_OF_RANGE
, 31, 1)
463 /* Card status bits, split by clear condition:
464 * A : According to the card current state
465 * B : Always related to the previous command
466 * C : Cleared by read
468 #define CARD_STATUS_A (R_CSR_READY_FOR_DATA_MASK \
469 | R_CSR_CARD_ECC_DISABLED_MASK \
470 | R_CSR_CARD_IS_LOCKED_MASK)
471 #define CARD_STATUS_B (R_CSR_CURRENT_STATE_MASK \
472 | R_CSR_ILLEGAL_COMMAND_MASK \
473 | R_CSR_COM_CRC_ERROR_MASK)
474 #define CARD_STATUS_C (R_CSR_AKE_SEQ_ERROR_MASK \
475 | R_CSR_APP_CMD_MASK \
476 | R_CSR_ERASE_RESET_MASK \
477 | R_CSR_WP_ERASE_SKIP_MASK \
478 | R_CSR_CSD_OVERWRITE_MASK \
480 | R_CSR_CC_ERROR_MASK \
481 | R_CSR_CARD_ECC_FAILED_MASK \
482 | R_CSR_LOCK_UNLOCK_FAILED_MASK \
483 | R_CSR_WP_VIOLATION_MASK \
484 | R_CSR_ERASE_PARAM_MASK \
485 | R_CSR_ERASE_SEQ_ERROR_MASK \
486 | R_CSR_BLOCK_LEN_ERROR_MASK \
487 | R_CSR_ADDRESS_ERROR_MASK \
488 | R_CSR_OUT_OF_RANGE_MASK)
490 static void sd_set_cardstatus(SDState
*sd
)
492 sd
->card_status
= 0x00000100;
495 static void sd_set_sdstatus(SDState
*sd
)
497 memset(sd
->sd_status
, 0, 64);
500 static int sd_req_crc_validate(SDRequest
*req
)
503 buffer
[0] = 0x40 | req
->cmd
;
504 stl_be_p(&buffer
[1], req
->arg
);
506 return sd_crc7(buffer
, 5) != req
->crc
; /* TODO */
509 static void sd_response_r1_make(SDState
*sd
, uint8_t *response
)
511 stl_be_p(response
, sd
->card_status
);
513 /* Clear the "clear on read" status bits */
514 sd
->card_status
&= ~CARD_STATUS_C
;
517 static void sd_response_r3_make(SDState
*sd
, uint8_t *response
)
519 stl_be_p(response
, sd
->ocr
& ACMD41_R3_MASK
);
522 static void sd_response_r6_make(SDState
*sd
, uint8_t *response
)
526 status
= ((sd
->card_status
>> 8) & 0xc000) |
527 ((sd
->card_status
>> 6) & 0x2000) |
528 (sd
->card_status
& 0x1fff);
529 sd
->card_status
&= ~(CARD_STATUS_C
& 0xc81fff);
530 stw_be_p(response
+ 0, sd
->rca
);
531 stw_be_p(response
+ 2, status
);
534 static void sd_response_r7_make(SDState
*sd
, uint8_t *response
)
536 stl_be_p(response
, sd
->vhs
);
539 static inline uint64_t sd_addr_to_wpnum(uint64_t addr
)
541 return addr
>> (HWBLOCK_SHIFT
+ SECTOR_SHIFT
+ WPGROUP_SHIFT
);
544 static void sd_reset(DeviceState
*dev
)
546 SDState
*sd
= SD_CARD(dev
);
550 trace_sdcard_reset();
552 blk_get_geometry(sd
->blk
, §
);
558 sect
= sd_addr_to_wpnum(size
) + 1;
560 sd
->state
= sd_idle_state
;
565 sd_set_csd(sd
, size
);
566 sd_set_cardstatus(sd
);
569 g_free(sd
->wp_groups
);
570 sd
->wp_switch
= sd
->blk
? !blk_is_writable(sd
->blk
) : false;
571 sd
->wpgrps_size
= sect
;
572 sd
->wp_groups
= bitmap_new(sd
->wpgrps_size
);
573 memset(sd
->function_group
, 0, sizeof(sd
->function_group
));
574 sd
->erase_start
= INVALID_ADDRESS
;
575 sd
->erase_end
= INVALID_ADDRESS
;
579 sd
->expecting_acmd
= false;
582 sd
->multi_blk_cnt
= 0;
585 static bool sd_get_inserted(SDState
*sd
)
587 return sd
->blk
&& blk_is_inserted(sd
->blk
);
590 static bool sd_get_readonly(SDState
*sd
)
592 return sd
->wp_switch
;
595 static void sd_cardchange(void *opaque
, bool load
, Error
**errp
)
597 SDState
*sd
= opaque
;
598 DeviceState
*dev
= DEVICE(sd
);
600 bool inserted
= sd_get_inserted(sd
);
601 bool readonly
= sd_get_readonly(sd
);
604 trace_sdcard_inserted(readonly
);
607 trace_sdcard_ejected();
610 if (sd
->me_no_qdev_me_kill_mammoth_with_rocks
) {
611 qemu_set_irq(sd
->inserted_cb
, inserted
);
613 qemu_set_irq(sd
->readonly_cb
, readonly
);
616 sdbus
= SD_BUS(qdev_get_parent_bus(dev
));
617 sdbus_set_inserted(sdbus
, inserted
);
619 sdbus_set_readonly(sdbus
, readonly
);
624 static const BlockDevOps sd_block_ops
= {
625 .change_media_cb
= sd_cardchange
,
628 static bool sd_ocr_vmstate_needed(void *opaque
)
630 SDState
*sd
= opaque
;
632 /* Include the OCR state (and timer) if it is not yet powered up */
633 return !FIELD_EX32(sd
->ocr
, OCR
, CARD_POWER_UP
);
636 static const VMStateDescription sd_ocr_vmstate
= {
637 .name
= "sd-card/ocr-state",
639 .minimum_version_id
= 1,
640 .needed
= sd_ocr_vmstate_needed
,
641 .fields
= (VMStateField
[]) {
642 VMSTATE_UINT32(ocr
, SDState
),
643 VMSTATE_TIMER_PTR(ocr_power_timer
, SDState
),
644 VMSTATE_END_OF_LIST()
648 static int sd_vmstate_pre_load(void *opaque
)
650 SDState
*sd
= opaque
;
652 /* If the OCR state is not included (prior versions, or not
653 * needed), then the OCR must be set as powered up. If the OCR state
654 * is included, this will be replaced by the state restore.
661 static const VMStateDescription sd_vmstate
= {
664 .minimum_version_id
= 2,
665 .pre_load
= sd_vmstate_pre_load
,
666 .fields
= (VMStateField
[]) {
667 VMSTATE_UINT32(mode
, SDState
),
668 VMSTATE_INT32(state
, SDState
),
669 VMSTATE_UINT8_ARRAY(cid
, SDState
, 16),
670 VMSTATE_UINT8_ARRAY(csd
, SDState
, 16),
671 VMSTATE_UINT16(rca
, SDState
),
672 VMSTATE_UINT32(card_status
, SDState
),
673 VMSTATE_PARTIAL_BUFFER(sd_status
, SDState
, 1),
674 VMSTATE_UINT32(vhs
, SDState
),
675 VMSTATE_BITMAP(wp_groups
, SDState
, 0, wpgrps_size
),
676 VMSTATE_UINT32(blk_len
, SDState
),
677 VMSTATE_UINT32(multi_blk_cnt
, SDState
),
678 VMSTATE_UINT32(erase_start
, SDState
),
679 VMSTATE_UINT32(erase_end
, SDState
),
680 VMSTATE_UINT8_ARRAY(pwd
, SDState
, 16),
681 VMSTATE_UINT32(pwd_len
, SDState
),
682 VMSTATE_UINT8_ARRAY(function_group
, SDState
, 6),
683 VMSTATE_UINT8(current_cmd
, SDState
),
684 VMSTATE_BOOL(expecting_acmd
, SDState
),
685 VMSTATE_UINT32(blk_written
, SDState
),
686 VMSTATE_UINT64(data_start
, SDState
),
687 VMSTATE_UINT32(data_offset
, SDState
),
688 VMSTATE_UINT8_ARRAY(data
, SDState
, 512),
689 VMSTATE_UNUSED_V(1, 512),
690 VMSTATE_BOOL(enable
, SDState
),
691 VMSTATE_END_OF_LIST()
693 .subsections
= (const VMStateDescription
*[]) {
699 /* Legacy initialization function for use by non-qdevified callers */
700 SDState
*sd_init(BlockBackend
*blk
, bool is_spi
)
707 obj
= object_new(TYPE_SD_CARD
);
709 if (!qdev_prop_set_drive_err(dev
, "drive", blk
, &err
)) {
710 error_reportf_err(err
, "sd_init failed: ");
713 qdev_prop_set_bit(dev
, "spi", is_spi
);
716 * Realizing the device properly would put it into the QOM
717 * composition tree even though it is not plugged into an
718 * appropriate bus. That's a no-no. Hide the device from
719 * QOM/qdev, and call its qdev realize callback directly.
722 object_unparent(obj
);
723 sd_realize(dev
, &err
);
725 error_reportf_err(err
, "sd_init failed: ");
730 sd
->me_no_qdev_me_kill_mammoth_with_rocks
= true;
734 void sd_set_cb(SDState
*sd
, qemu_irq readonly
, qemu_irq insert
)
736 sd
->readonly_cb
= readonly
;
737 sd
->inserted_cb
= insert
;
738 qemu_set_irq(readonly
, sd
->blk
? !blk_is_writable(sd
->blk
) : 0);
739 qemu_set_irq(insert
, sd
->blk
? blk_is_inserted(sd
->blk
) : 0);
742 static void sd_erase(SDState
*sd
)
745 uint64_t erase_start
= sd
->erase_start
;
746 uint64_t erase_end
= sd
->erase_end
;
748 trace_sdcard_erase(sd
->erase_start
, sd
->erase_end
);
749 if (sd
->erase_start
== INVALID_ADDRESS
750 || sd
->erase_end
== INVALID_ADDRESS
) {
751 sd
->card_status
|= ERASE_SEQ_ERROR
;
752 sd
->erase_start
= INVALID_ADDRESS
;
753 sd
->erase_end
= INVALID_ADDRESS
;
757 if (FIELD_EX32(sd
->ocr
, OCR
, CARD_CAPACITY
)) {
758 /* High capacity memory card: erase units are 512 byte blocks */
763 if (erase_start
> sd
->size
|| erase_end
> sd
->size
) {
764 sd
->card_status
|= OUT_OF_RANGE
;
765 sd
->erase_start
= INVALID_ADDRESS
;
766 sd
->erase_end
= INVALID_ADDRESS
;
770 erase_start
= sd_addr_to_wpnum(erase_start
);
771 erase_end
= sd_addr_to_wpnum(erase_end
);
772 sd
->erase_start
= INVALID_ADDRESS
;
773 sd
->erase_end
= INVALID_ADDRESS
;
776 for (i
= erase_start
; i
<= erase_end
; i
++) {
777 assert(i
< sd
->wpgrps_size
);
778 if (test_bit(i
, sd
->wp_groups
)) {
779 sd
->card_status
|= WP_ERASE_SKIP
;
784 static uint32_t sd_wpbits(SDState
*sd
, uint64_t addr
)
789 wpnum
= sd_addr_to_wpnum(addr
);
791 for (i
= 0; i
< 32; i
++, wpnum
++, addr
+= WPGROUP_SIZE
) {
792 assert(wpnum
< sd
->wpgrps_size
);
793 if (addr
< sd
->size
&& test_bit(wpnum
, sd
->wp_groups
)) {
801 static void sd_function_switch(SDState
*sd
, uint32_t arg
)
803 int i
, mode
, new_func
;
804 mode
= !!(arg
& 0x80000000);
806 sd
->data
[0] = 0x00; /* Maximum current consumption */
808 sd
->data
[2] = 0x80; /* Supported group 6 functions */
810 sd
->data
[4] = 0x80; /* Supported group 5 functions */
812 sd
->data
[6] = 0x80; /* Supported group 4 functions */
814 sd
->data
[8] = 0x80; /* Supported group 3 functions */
816 sd
->data
[10] = 0x80; /* Supported group 2 functions */
818 sd
->data
[12] = 0x80; /* Supported group 1 functions */
821 memset(&sd
->data
[14], 0, 3);
822 for (i
= 0; i
< 6; i
++) {
823 new_func
= (arg
>> (i
* 4)) & 0x0f;
824 if (mode
&& new_func
!= 0x0f)
825 sd
->function_group
[i
] = new_func
;
826 sd
->data
[16 - (i
>> 1)] |= new_func
<< ((i
% 2) * 4);
828 memset(&sd
->data
[17], 0, 47);
831 static inline bool sd_wp_addr(SDState
*sd
, uint64_t addr
)
833 return test_bit(sd_addr_to_wpnum(addr
), sd
->wp_groups
);
836 static void sd_lock_command(SDState
*sd
)
838 int erase
, lock
, clr_pwd
, set_pwd
, pwd_len
;
839 erase
= !!(sd
->data
[0] & 0x08);
840 lock
= sd
->data
[0] & 0x04;
841 clr_pwd
= sd
->data
[0] & 0x02;
842 set_pwd
= sd
->data
[0] & 0x01;
845 pwd_len
= sd
->data
[1];
852 trace_sdcard_unlock();
855 if (!(sd
->card_status
& CARD_IS_LOCKED
) || sd
->blk_len
> 1 ||
856 set_pwd
|| clr_pwd
|| lock
|| sd
->wp_switch
||
857 (sd
->csd
[14] & 0x20)) {
858 sd
->card_status
|= LOCK_UNLOCK_FAILED
;
861 bitmap_zero(sd
->wp_groups
, sd
->wpgrps_size
);
862 sd
->csd
[14] &= ~0x10;
863 sd
->card_status
&= ~CARD_IS_LOCKED
;
865 /* Erasing the entire card here! */
866 fprintf(stderr
, "SD: Card force-erased by CMD42\n");
870 if (sd
->blk_len
< 2 + pwd_len
||
871 pwd_len
<= sd
->pwd_len
||
872 pwd_len
> sd
->pwd_len
+ 16) {
873 sd
->card_status
|= LOCK_UNLOCK_FAILED
;
877 if (sd
->pwd_len
&& memcmp(sd
->pwd
, sd
->data
+ 2, sd
->pwd_len
)) {
878 sd
->card_status
|= LOCK_UNLOCK_FAILED
;
882 pwd_len
-= sd
->pwd_len
;
883 if ((pwd_len
&& !set_pwd
) ||
884 (clr_pwd
&& (set_pwd
|| lock
)) ||
885 (lock
&& !sd
->pwd_len
&& !set_pwd
) ||
886 (!set_pwd
&& !clr_pwd
&&
887 (((sd
->card_status
& CARD_IS_LOCKED
) && lock
) ||
888 (!(sd
->card_status
& CARD_IS_LOCKED
) && !lock
)))) {
889 sd
->card_status
|= LOCK_UNLOCK_FAILED
;
894 memcpy(sd
->pwd
, sd
->data
+ 2 + sd
->pwd_len
, pwd_len
);
895 sd
->pwd_len
= pwd_len
;
903 sd
->card_status
|= CARD_IS_LOCKED
;
905 sd
->card_status
&= ~CARD_IS_LOCKED
;
908 static sd_rsp_type_t
sd_normal_command(SDState
*sd
, SDRequest req
)
910 uint32_t rca
= 0x0000;
911 uint64_t addr
= (sd
->ocr
& (1 << 30)) ? (uint64_t) req
.arg
<< 9 : req
.arg
;
913 /* CMD55 precedes an ACMD, so we are not interested in tracing it.
914 * However there is no ACMD55, so we want to trace this particular case.
916 if (req
.cmd
!= 55 || sd
->expecting_acmd
) {
917 trace_sdcard_normal_command(sd
->proto_name
,
918 sd_cmd_name(req
.cmd
), req
.cmd
,
919 req
.arg
, sd_state_name(sd
->state
));
922 /* Not interpreting this as an app command */
923 sd
->card_status
&= ~APP_CMD
;
925 if (sd_cmd_type
[req
.cmd
] == sd_ac
926 || sd_cmd_type
[req
.cmd
] == sd_adtc
) {
930 /* CMD23 (set block count) must be immediately followed by CMD18 or CMD25
931 * if not, its effects are cancelled */
932 if (sd
->multi_blk_cnt
!= 0 && !(req
.cmd
== 18 || req
.cmd
== 25)) {
933 sd
->multi_blk_cnt
= 0;
936 if (sd_cmd_class
[req
.cmd
] == 6 && FIELD_EX32(sd
->ocr
, OCR
, CARD_CAPACITY
)) {
937 /* Only Standard Capacity cards support class 6 commands */
942 /* Basic commands (Class 0 and Class 1) */
943 case 0: /* CMD0: GO_IDLE_STATE */
945 case sd_inactive_state
:
946 return sd
->spi
? sd_r1
: sd_r0
;
949 sd
->state
= sd_idle_state
;
950 sd_reset(DEVICE(sd
));
951 return sd
->spi
? sd_r1
: sd_r0
;
955 case 1: /* CMD1: SEND_OP_CMD */
959 sd
->state
= sd_transfer_state
;
962 case 2: /* CMD2: ALL_SEND_CID */
967 sd
->state
= sd_identification_state
;
975 case 3: /* CMD3: SEND_RELATIVE_ADDR */
979 case sd_identification_state
:
980 case sd_standby_state
:
981 sd
->state
= sd_standby_state
;
990 case 4: /* CMD4: SEND_DSR */
994 case sd_standby_state
:
1002 case 5: /* CMD5: reserved for SDIO cards */
1005 case 6: /* CMD6: SWITCH_FUNCTION */
1007 case sd_data_transfer_mode
:
1008 sd_function_switch(sd
, req
.arg
);
1009 sd
->state
= sd_sendingdata_state
;
1011 sd
->data_offset
= 0;
1019 case 7: /* CMD7: SELECT/DESELECT_CARD */
1022 switch (sd
->state
) {
1023 case sd_standby_state
:
1027 sd
->state
= sd_transfer_state
;
1030 case sd_transfer_state
:
1031 case sd_sendingdata_state
:
1035 sd
->state
= sd_standby_state
;
1038 case sd_disconnect_state
:
1042 sd
->state
= sd_programming_state
;
1045 case sd_programming_state
:
1049 sd
->state
= sd_disconnect_state
;
1057 case 8: /* CMD8: SEND_IF_COND */
1058 if (sd
->spec_version
< SD_PHY_SPECv2_00_VERS
) {
1061 if (sd
->state
!= sd_idle_state
) {
1066 /* No response if not exactly one VHS bit is set. */
1067 if (!(req
.arg
>> 8) || (req
.arg
>> (ctz32(req
.arg
& ~0xff) + 1))) {
1068 return sd
->spi
? sd_r7
: sd_r0
;
1075 case 9: /* CMD9: SEND_CSD */
1076 switch (sd
->state
) {
1077 case sd_standby_state
:
1083 case sd_transfer_state
:
1086 sd
->state
= sd_sendingdata_state
;
1087 memcpy(sd
->data
, sd
->csd
, 16);
1088 sd
->data_start
= addr
;
1089 sd
->data_offset
= 0;
1097 case 10: /* CMD10: SEND_CID */
1098 switch (sd
->state
) {
1099 case sd_standby_state
:
1105 case sd_transfer_state
:
1108 sd
->state
= sd_sendingdata_state
;
1109 memcpy(sd
->data
, sd
->cid
, 16);
1110 sd
->data_start
= addr
;
1111 sd
->data_offset
= 0;
1119 case 12: /* CMD12: STOP_TRANSMISSION */
1120 switch (sd
->state
) {
1121 case sd_sendingdata_state
:
1122 sd
->state
= sd_transfer_state
;
1125 case sd_receivingdata_state
:
1126 sd
->state
= sd_programming_state
;
1127 /* Bzzzzzzztt .... Operation complete. */
1128 sd
->state
= sd_transfer_state
;
1136 case 13: /* CMD13: SEND_STATUS */
1138 case sd_data_transfer_mode
:
1149 case 15: /* CMD15: GO_INACTIVE_STATE */
1153 case sd_data_transfer_mode
:
1157 sd
->state
= sd_inactive_state
;
1165 /* Block read commands (Classs 2) */
1166 case 16: /* CMD16: SET_BLOCKLEN */
1167 switch (sd
->state
) {
1168 case sd_transfer_state
:
1169 if (req
.arg
> (1 << HWBLOCK_SHIFT
)) {
1170 sd
->card_status
|= BLOCK_LEN_ERROR
;
1172 trace_sdcard_set_blocklen(req
.arg
);
1173 sd
->blk_len
= req
.arg
;
1183 case 17: /* CMD17: READ_SINGLE_BLOCK */
1184 case 18: /* CMD18: READ_MULTIPLE_BLOCK */
1185 switch (sd
->state
) {
1186 case sd_transfer_state
:
1188 if (addr
+ sd
->blk_len
> sd
->size
) {
1189 sd
->card_status
|= ADDRESS_ERROR
;
1193 sd
->state
= sd_sendingdata_state
;
1194 sd
->data_start
= addr
;
1195 sd
->data_offset
= 0;
1203 case 19: /* CMD19: SEND_TUNING_BLOCK (SD) */
1204 if (sd
->spec_version
< SD_PHY_SPECv3_01_VERS
) {
1207 if (sd
->state
== sd_transfer_state
) {
1208 sd
->state
= sd_sendingdata_state
;
1209 sd
->data_offset
= 0;
1214 case 23: /* CMD23: SET_BLOCK_COUNT */
1215 if (sd
->spec_version
< SD_PHY_SPECv3_01_VERS
) {
1218 switch (sd
->state
) {
1219 case sd_transfer_state
:
1220 sd
->multi_blk_cnt
= req
.arg
;
1228 /* Block write commands (Class 4) */
1229 case 24: /* CMD24: WRITE_SINGLE_BLOCK */
1230 case 25: /* CMD25: WRITE_MULTIPLE_BLOCK */
1231 switch (sd
->state
) {
1232 case sd_transfer_state
:
1234 if (addr
+ sd
->blk_len
> sd
->size
) {
1235 sd
->card_status
|= ADDRESS_ERROR
;
1239 sd
->state
= sd_receivingdata_state
;
1240 sd
->data_start
= addr
;
1241 sd
->data_offset
= 0;
1242 sd
->blk_written
= 0;
1244 if (sd_wp_addr(sd
, sd
->data_start
)) {
1245 sd
->card_status
|= WP_VIOLATION
;
1247 if (sd
->csd
[14] & 0x30) {
1248 sd
->card_status
|= WP_VIOLATION
;
1257 case 26: /* CMD26: PROGRAM_CID */
1260 switch (sd
->state
) {
1261 case sd_transfer_state
:
1262 sd
->state
= sd_receivingdata_state
;
1264 sd
->data_offset
= 0;
1272 case 27: /* CMD27: PROGRAM_CSD */
1273 switch (sd
->state
) {
1274 case sd_transfer_state
:
1275 sd
->state
= sd_receivingdata_state
;
1277 sd
->data_offset
= 0;
1285 /* Write protection (Class 6) */
1286 case 28: /* CMD28: SET_WRITE_PROT */
1287 if (sd
->size
> SDSC_MAX_CAPACITY
) {
1291 switch (sd
->state
) {
1292 case sd_transfer_state
:
1293 if (addr
>= sd
->size
) {
1294 sd
->card_status
|= ADDRESS_ERROR
;
1298 sd
->state
= sd_programming_state
;
1299 set_bit(sd_addr_to_wpnum(addr
), sd
->wp_groups
);
1300 /* Bzzzzzzztt .... Operation complete. */
1301 sd
->state
= sd_transfer_state
;
1309 case 29: /* CMD29: CLR_WRITE_PROT */
1310 if (sd
->size
> SDSC_MAX_CAPACITY
) {
1314 switch (sd
->state
) {
1315 case sd_transfer_state
:
1316 if (addr
>= sd
->size
) {
1317 sd
->card_status
|= ADDRESS_ERROR
;
1321 sd
->state
= sd_programming_state
;
1322 clear_bit(sd_addr_to_wpnum(addr
), sd
->wp_groups
);
1323 /* Bzzzzzzztt .... Operation complete. */
1324 sd
->state
= sd_transfer_state
;
1332 case 30: /* CMD30: SEND_WRITE_PROT */
1333 if (sd
->size
> SDSC_MAX_CAPACITY
) {
1337 switch (sd
->state
) {
1338 case sd_transfer_state
:
1339 sd
->state
= sd_sendingdata_state
;
1340 *(uint32_t *) sd
->data
= sd_wpbits(sd
, req
.arg
);
1341 sd
->data_start
= addr
;
1342 sd
->data_offset
= 0;
1350 /* Erase commands (Class 5) */
1351 case 32: /* CMD32: ERASE_WR_BLK_START */
1352 switch (sd
->state
) {
1353 case sd_transfer_state
:
1354 sd
->erase_start
= req
.arg
;
1362 case 33: /* CMD33: ERASE_WR_BLK_END */
1363 switch (sd
->state
) {
1364 case sd_transfer_state
:
1365 sd
->erase_end
= req
.arg
;
1373 case 38: /* CMD38: ERASE */
1374 switch (sd
->state
) {
1375 case sd_transfer_state
:
1376 if (sd
->csd
[14] & 0x30) {
1377 sd
->card_status
|= WP_VIOLATION
;
1381 sd
->state
= sd_programming_state
;
1383 /* Bzzzzzzztt .... Operation complete. */
1384 sd
->state
= sd_transfer_state
;
1392 /* Lock card commands (Class 7) */
1393 case 42: /* CMD42: LOCK_UNLOCK */
1394 switch (sd
->state
) {
1395 case sd_transfer_state
:
1396 sd
->state
= sd_receivingdata_state
;
1398 sd
->data_offset
= 0;
1407 /* CMD52, CMD53, CMD54: reserved for SDIO cards
1408 * (see the SDIO Simplified Specification V2.0)
1409 * Handle as illegal command but do not complain
1410 * on stderr, as some OSes may use these in their
1411 * probing for presence of an SDIO card.
1415 /* Application specific commands (Class 8) */
1416 case 55: /* CMD55: APP_CMD */
1417 switch (sd
->state
) {
1418 case sd_ready_state
:
1419 case sd_identification_state
:
1420 case sd_inactive_state
:
1424 qemu_log_mask(LOG_GUEST_ERROR
,
1425 "SD: illegal RCA 0x%04x for APP_CMD\n", req
.cmd
);
1431 if (sd
->rca
!= rca
) {
1435 sd
->expecting_acmd
= true;
1436 sd
->card_status
|= APP_CMD
;
1439 case 56: /* CMD56: GEN_CMD */
1440 switch (sd
->state
) {
1441 case sd_transfer_state
:
1442 sd
->data_offset
= 0;
1444 sd
->state
= sd_sendingdata_state
;
1446 sd
->state
= sd_receivingdata_state
;
1454 case 58: /* CMD58: READ_OCR (SPI) */
1460 case 59: /* CMD59: CRC_ON_OFF (SPI) */
1468 qemu_log_mask(LOG_GUEST_ERROR
, "SD: Unknown CMD%i\n", req
.cmd
);
1472 qemu_log_mask(LOG_GUEST_ERROR
, "SD: CMD%i in a wrong state\n", req
.cmd
);
1476 static sd_rsp_type_t
sd_app_command(SDState
*sd
,
1479 trace_sdcard_app_command(sd
->proto_name
, sd_acmd_name(req
.cmd
),
1480 req
.cmd
, req
.arg
, sd_state_name(sd
->state
));
1481 sd
->card_status
|= APP_CMD
;
1483 case 6: /* ACMD6: SET_BUS_WIDTH */
1485 goto unimplemented_spi_cmd
;
1487 switch (sd
->state
) {
1488 case sd_transfer_state
:
1489 sd
->sd_status
[0] &= 0x3f;
1490 sd
->sd_status
[0] |= (req
.arg
& 0x03) << 6;
1498 case 13: /* ACMD13: SD_STATUS */
1499 switch (sd
->state
) {
1500 case sd_transfer_state
:
1501 sd
->state
= sd_sendingdata_state
;
1503 sd
->data_offset
= 0;
1511 case 22: /* ACMD22: SEND_NUM_WR_BLOCKS */
1512 switch (sd
->state
) {
1513 case sd_transfer_state
:
1514 *(uint32_t *) sd
->data
= sd
->blk_written
;
1516 sd
->state
= sd_sendingdata_state
;
1518 sd
->data_offset
= 0;
1526 case 23: /* ACMD23: SET_WR_BLK_ERASE_COUNT */
1527 switch (sd
->state
) {
1528 case sd_transfer_state
:
1536 case 41: /* ACMD41: SD_APP_OP_COND */
1539 sd
->state
= sd_transfer_state
;
1542 if (sd
->state
!= sd_idle_state
) {
1545 /* If it's the first ACMD41 since reset, we need to decide
1546 * whether to power up. If this is not an enquiry ACMD41,
1547 * we immediately report power on and proceed below to the
1548 * ready state, but if it is, we set a timer to model a
1549 * delay for power up. This works around a bug in EDK2
1550 * UEFI, which sends an initial enquiry ACMD41, but
1551 * assumes that the card is in ready state as soon as it
1552 * sees the power up bit set. */
1553 if (!FIELD_EX32(sd
->ocr
, OCR
, CARD_POWER_UP
)) {
1554 if ((req
.arg
& ACMD41_ENQUIRY_MASK
) != 0) {
1555 timer_del(sd
->ocr_power_timer
);
1558 trace_sdcard_inquiry_cmd41();
1559 if (!timer_pending(sd
->ocr_power_timer
)) {
1560 timer_mod_ns(sd
->ocr_power_timer
,
1561 (qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL
)
1562 + OCR_POWER_DELAY_NS
));
1567 if (FIELD_EX32(sd
->ocr
& req
.arg
, OCR
, VDD_VOLTAGE_WINDOW
)) {
1568 /* We accept any voltage. 10000 V is nothing.
1570 * Once we're powered up, we advance straight to ready state
1571 * unless it's an enquiry ACMD41 (bits 23:0 == 0).
1573 sd
->state
= sd_ready_state
;
1578 case 42: /* ACMD42: SET_CLR_CARD_DETECT */
1579 switch (sd
->state
) {
1580 case sd_transfer_state
:
1581 /* Bringing in the 50KOhm pull-up resistor... Done. */
1589 case 51: /* ACMD51: SEND_SCR */
1590 switch (sd
->state
) {
1591 case sd_transfer_state
:
1592 sd
->state
= sd_sendingdata_state
;
1594 sd
->data_offset
= 0;
1602 case 18: /* Reserved for SD security applications */
1607 /* Refer to the "SD Specifications Part3 Security Specification" for
1608 * information about the SD Security Features.
1610 qemu_log_mask(LOG_UNIMP
, "SD: CMD%i Security not implemented\n",
1615 /* Fall back to standard commands. */
1616 return sd_normal_command(sd
, req
);
1618 unimplemented_spi_cmd
:
1619 /* Commands that are recognised but not yet implemented in SPI mode. */
1620 qemu_log_mask(LOG_UNIMP
, "SD: CMD%i not implemented in SPI mode\n",
1625 qemu_log_mask(LOG_GUEST_ERROR
, "SD: ACMD%i in a wrong state\n", req
.cmd
);
1629 static int cmd_valid_while_locked(SDState
*sd
, const uint8_t cmd
)
1631 /* Valid commands in locked state:
1633 * lock card class (7)
1635 * implicitly, the ACMD prefix CMD55
1637 * Anything else provokes an "illegal command" response.
1639 if (sd
->expecting_acmd
) {
1640 return cmd
== 41 || cmd
== 42;
1642 if (cmd
== 16 || cmd
== 55) {
1645 return sd_cmd_class
[cmd
] == 0 || sd_cmd_class
[cmd
] == 7;
1648 int sd_do_command(SDState
*sd
, SDRequest
*req
,
1649 uint8_t *response
) {
1651 sd_rsp_type_t rtype
;
1654 if (!sd
->blk
|| !blk_is_inserted(sd
->blk
) || !sd
->enable
) {
1658 if (sd_req_crc_validate(req
)) {
1659 sd
->card_status
|= COM_CRC_ERROR
;
1664 if (req
->cmd
>= SDMMC_CMD_MAX
) {
1665 qemu_log_mask(LOG_GUEST_ERROR
, "SD: incorrect command 0x%02x\n",
1670 if (sd
->card_status
& CARD_IS_LOCKED
) {
1671 if (!cmd_valid_while_locked(sd
, req
->cmd
)) {
1672 sd
->card_status
|= ILLEGAL_COMMAND
;
1673 sd
->expecting_acmd
= false;
1674 qemu_log_mask(LOG_GUEST_ERROR
, "SD: Card is locked\n");
1680 last_state
= sd
->state
;
1683 if (sd
->expecting_acmd
) {
1684 sd
->expecting_acmd
= false;
1685 rtype
= sd_app_command(sd
, *req
);
1687 rtype
= sd_normal_command(sd
, *req
);
1690 if (rtype
== sd_illegal
) {
1691 sd
->card_status
|= ILLEGAL_COMMAND
;
1693 /* Valid command, we can update the 'state before command' bits.
1694 * (Do this now so they appear in r1 responses.)
1696 sd
->current_cmd
= req
->cmd
;
1697 sd
->card_status
&= ~CURRENT_STATE
;
1698 sd
->card_status
|= (last_state
<< 9);
1705 sd_response_r1_make(sd
, response
);
1710 memcpy(response
, sd
->cid
, sizeof(sd
->cid
));
1715 memcpy(response
, sd
->csd
, sizeof(sd
->csd
));
1720 sd_response_r3_make(sd
, response
);
1725 sd_response_r6_make(sd
, response
);
1730 sd_response_r7_make(sd
, response
);
1739 g_assert_not_reached();
1741 trace_sdcard_response(sd_response_name(rtype
), rsplen
);
1743 if (rtype
!= sd_illegal
) {
1744 /* Clear the "clear on valid command" status bits now we've
1747 sd
->card_status
&= ~CARD_STATUS_B
;
1751 qemu_hexdump(stderr
, "Response", response
, rsplen
);
1757 static void sd_blk_read(SDState
*sd
, uint64_t addr
, uint32_t len
)
1759 trace_sdcard_read_block(addr
, len
);
1760 if (!sd
->blk
|| blk_pread(sd
->blk
, addr
, sd
->data
, len
) < 0) {
1761 fprintf(stderr
, "sd_blk_read: read error on host side\n");
1765 static void sd_blk_write(SDState
*sd
, uint64_t addr
, uint32_t len
)
1767 trace_sdcard_write_block(addr
, len
);
1768 if (!sd
->blk
|| blk_pwrite(sd
->blk
, addr
, sd
->data
, len
, 0) < 0) {
1769 fprintf(stderr
, "sd_blk_write: write error on host side\n");
1773 #define BLK_READ_BLOCK(a, len) sd_blk_read(sd, a, len)
1774 #define BLK_WRITE_BLOCK(a, len) sd_blk_write(sd, a, len)
1775 #define APP_READ_BLOCK(a, len) memset(sd->data, 0xec, len)
1776 #define APP_WRITE_BLOCK(a, len)
1778 void sd_write_byte(SDState
*sd
, uint8_t value
)
1782 if (!sd
->blk
|| !blk_is_inserted(sd
->blk
) || !sd
->enable
)
1785 if (sd
->state
!= sd_receivingdata_state
) {
1786 qemu_log_mask(LOG_GUEST_ERROR
,
1787 "%s: not in Receiving-Data state\n", __func__
);
1791 if (sd
->card_status
& (ADDRESS_ERROR
| WP_VIOLATION
))
1794 trace_sdcard_write_data(sd
->proto_name
,
1795 sd_acmd_name(sd
->current_cmd
),
1796 sd
->current_cmd
, value
);
1797 switch (sd
->current_cmd
) {
1798 case 24: /* CMD24: WRITE_SINGLE_BLOCK */
1799 sd
->data
[sd
->data_offset
++] = value
;
1800 if (sd
->data_offset
>= sd
->blk_len
) {
1801 /* TODO: Check CRC before committing */
1802 sd
->state
= sd_programming_state
;
1803 BLK_WRITE_BLOCK(sd
->data_start
, sd
->data_offset
);
1805 sd
->csd
[14] |= 0x40;
1806 /* Bzzzzzzztt .... Operation complete. */
1807 sd
->state
= sd_transfer_state
;
1811 case 25: /* CMD25: WRITE_MULTIPLE_BLOCK */
1812 if (sd
->data_offset
== 0) {
1813 /* Start of the block - let's check the address is valid */
1814 if (sd
->data_start
+ sd
->blk_len
> sd
->size
) {
1815 sd
->card_status
|= ADDRESS_ERROR
;
1818 if (sd_wp_addr(sd
, sd
->data_start
)) {
1819 sd
->card_status
|= WP_VIOLATION
;
1823 sd
->data
[sd
->data_offset
++] = value
;
1824 if (sd
->data_offset
>= sd
->blk_len
) {
1825 /* TODO: Check CRC before committing */
1826 sd
->state
= sd_programming_state
;
1827 BLK_WRITE_BLOCK(sd
->data_start
, sd
->data_offset
);
1829 sd
->data_start
+= sd
->blk_len
;
1830 sd
->data_offset
= 0;
1831 sd
->csd
[14] |= 0x40;
1833 /* Bzzzzzzztt .... Operation complete. */
1834 if (sd
->multi_blk_cnt
!= 0) {
1835 if (--sd
->multi_blk_cnt
== 0) {
1837 sd
->state
= sd_transfer_state
;
1842 sd
->state
= sd_receivingdata_state
;
1846 case 26: /* CMD26: PROGRAM_CID */
1847 sd
->data
[sd
->data_offset
++] = value
;
1848 if (sd
->data_offset
>= sizeof(sd
->cid
)) {
1849 /* TODO: Check CRC before committing */
1850 sd
->state
= sd_programming_state
;
1851 for (i
= 0; i
< sizeof(sd
->cid
); i
++)
1852 if ((sd
->cid
[i
] | 0x00) != sd
->data
[i
])
1853 sd
->card_status
|= CID_CSD_OVERWRITE
;
1855 if (!(sd
->card_status
& CID_CSD_OVERWRITE
))
1856 for (i
= 0; i
< sizeof(sd
->cid
); i
++) {
1858 sd
->cid
[i
] &= sd
->data
[i
];
1860 /* Bzzzzzzztt .... Operation complete. */
1861 sd
->state
= sd_transfer_state
;
1865 case 27: /* CMD27: PROGRAM_CSD */
1866 sd
->data
[sd
->data_offset
++] = value
;
1867 if (sd
->data_offset
>= sizeof(sd
->csd
)) {
1868 /* TODO: Check CRC before committing */
1869 sd
->state
= sd_programming_state
;
1870 for (i
= 0; i
< sizeof(sd
->csd
); i
++)
1871 if ((sd
->csd
[i
] | sd_csd_rw_mask
[i
]) !=
1872 (sd
->data
[i
] | sd_csd_rw_mask
[i
]))
1873 sd
->card_status
|= CID_CSD_OVERWRITE
;
1875 /* Copy flag (OTP) & Permanent write protect */
1876 if (sd
->csd
[14] & ~sd
->data
[14] & 0x60)
1877 sd
->card_status
|= CID_CSD_OVERWRITE
;
1879 if (!(sd
->card_status
& CID_CSD_OVERWRITE
))
1880 for (i
= 0; i
< sizeof(sd
->csd
); i
++) {
1881 sd
->csd
[i
] |= sd_csd_rw_mask
[i
];
1882 sd
->csd
[i
] &= sd
->data
[i
];
1884 /* Bzzzzzzztt .... Operation complete. */
1885 sd
->state
= sd_transfer_state
;
1889 case 42: /* CMD42: LOCK_UNLOCK */
1890 sd
->data
[sd
->data_offset
++] = value
;
1891 if (sd
->data_offset
>= sd
->blk_len
) {
1892 /* TODO: Check CRC before committing */
1893 sd
->state
= sd_programming_state
;
1894 sd_lock_command(sd
);
1895 /* Bzzzzzzztt .... Operation complete. */
1896 sd
->state
= sd_transfer_state
;
1900 case 56: /* CMD56: GEN_CMD */
1901 sd
->data
[sd
->data_offset
++] = value
;
1902 if (sd
->data_offset
>= sd
->blk_len
) {
1903 APP_WRITE_BLOCK(sd
->data_start
, sd
->data_offset
);
1904 sd
->state
= sd_transfer_state
;
1909 qemu_log_mask(LOG_GUEST_ERROR
, "%s: unknown command\n", __func__
);
1914 #define SD_TUNING_BLOCK_SIZE 64
1916 static const uint8_t sd_tuning_block_pattern
[SD_TUNING_BLOCK_SIZE
] = {
1917 /* See: Physical Layer Simplified Specification Version 3.01, Table 4-2 */
1918 0xff, 0x0f, 0xff, 0x00, 0x0f, 0xfc, 0xc3, 0xcc,
1919 0xc3, 0x3c, 0xcc, 0xff, 0xfe, 0xff, 0xfe, 0xef,
1920 0xff, 0xdf, 0xff, 0xdd, 0xff, 0xfb, 0xff, 0xfb,
1921 0xbf, 0xff, 0x7f, 0xff, 0x77, 0xf7, 0xbd, 0xef,
1922 0xff, 0xf0, 0xff, 0xf0, 0x0f, 0xfc, 0xcc, 0x3c,
1923 0xcc, 0x33, 0xcc, 0xcf, 0xff, 0xef, 0xff, 0xee,
1924 0xff, 0xfd, 0xff, 0xfd, 0xdf, 0xff, 0xbf, 0xff,
1925 0xbb, 0xff, 0xf7, 0xff, 0xf7, 0x7f, 0x7b, 0xde,
1928 uint8_t sd_read_byte(SDState
*sd
)
1930 /* TODO: Append CRCs */
1934 if (!sd
->blk
|| !blk_is_inserted(sd
->blk
) || !sd
->enable
)
1937 if (sd
->state
!= sd_sendingdata_state
) {
1938 qemu_log_mask(LOG_GUEST_ERROR
,
1939 "%s: not in Sending-Data state\n", __func__
);
1943 if (sd
->card_status
& (ADDRESS_ERROR
| WP_VIOLATION
))
1946 io_len
= (sd
->ocr
& (1 << 30)) ? 512 : sd
->blk_len
;
1948 trace_sdcard_read_data(sd
->proto_name
,
1949 sd_acmd_name(sd
->current_cmd
),
1950 sd
->current_cmd
, io_len
);
1951 switch (sd
->current_cmd
) {
1952 case 6: /* CMD6: SWITCH_FUNCTION */
1953 ret
= sd
->data
[sd
->data_offset
++];
1955 if (sd
->data_offset
>= 64)
1956 sd
->state
= sd_transfer_state
;
1959 case 9: /* CMD9: SEND_CSD */
1960 case 10: /* CMD10: SEND_CID */
1961 ret
= sd
->data
[sd
->data_offset
++];
1963 if (sd
->data_offset
>= 16)
1964 sd
->state
= sd_transfer_state
;
1967 case 13: /* ACMD13: SD_STATUS */
1968 ret
= sd
->sd_status
[sd
->data_offset
++];
1970 if (sd
->data_offset
>= sizeof(sd
->sd_status
))
1971 sd
->state
= sd_transfer_state
;
1974 case 17: /* CMD17: READ_SINGLE_BLOCK */
1975 if (sd
->data_offset
== 0)
1976 BLK_READ_BLOCK(sd
->data_start
, io_len
);
1977 ret
= sd
->data
[sd
->data_offset
++];
1979 if (sd
->data_offset
>= io_len
)
1980 sd
->state
= sd_transfer_state
;
1983 case 18: /* CMD18: READ_MULTIPLE_BLOCK */
1984 if (sd
->data_offset
== 0) {
1985 if (sd
->data_start
+ io_len
> sd
->size
) {
1986 sd
->card_status
|= ADDRESS_ERROR
;
1989 BLK_READ_BLOCK(sd
->data_start
, io_len
);
1991 ret
= sd
->data
[sd
->data_offset
++];
1993 if (sd
->data_offset
>= io_len
) {
1994 sd
->data_start
+= io_len
;
1995 sd
->data_offset
= 0;
1997 if (sd
->multi_blk_cnt
!= 0) {
1998 if (--sd
->multi_blk_cnt
== 0) {
2000 sd
->state
= sd_transfer_state
;
2007 case 19: /* CMD19: SEND_TUNING_BLOCK (SD) */
2008 if (sd
->data_offset
>= SD_TUNING_BLOCK_SIZE
- 1) {
2009 sd
->state
= sd_transfer_state
;
2011 ret
= sd_tuning_block_pattern
[sd
->data_offset
++];
2014 case 22: /* ACMD22: SEND_NUM_WR_BLOCKS */
2015 ret
= sd
->data
[sd
->data_offset
++];
2017 if (sd
->data_offset
>= 4)
2018 sd
->state
= sd_transfer_state
;
2021 case 30: /* CMD30: SEND_WRITE_PROT */
2022 ret
= sd
->data
[sd
->data_offset
++];
2024 if (sd
->data_offset
>= 4)
2025 sd
->state
= sd_transfer_state
;
2028 case 51: /* ACMD51: SEND_SCR */
2029 ret
= sd
->scr
[sd
->data_offset
++];
2031 if (sd
->data_offset
>= sizeof(sd
->scr
))
2032 sd
->state
= sd_transfer_state
;
2035 case 56: /* CMD56: GEN_CMD */
2036 if (sd
->data_offset
== 0)
2037 APP_READ_BLOCK(sd
->data_start
, sd
->blk_len
);
2038 ret
= sd
->data
[sd
->data_offset
++];
2040 if (sd
->data_offset
>= sd
->blk_len
)
2041 sd
->state
= sd_transfer_state
;
2045 qemu_log_mask(LOG_GUEST_ERROR
, "%s: unknown command\n", __func__
);
2052 static bool sd_receive_ready(SDState
*sd
)
2054 return sd
->state
== sd_receivingdata_state
;
2057 static bool sd_data_ready(SDState
*sd
)
2059 return sd
->state
== sd_sendingdata_state
;
2062 void sd_enable(SDState
*sd
, bool enable
)
2064 sd
->enable
= enable
;
2067 static void sd_instance_init(Object
*obj
)
2069 SDState
*sd
= SD_CARD(obj
);
2072 sd
->ocr_power_timer
= timer_new_ns(QEMU_CLOCK_VIRTUAL
, sd_ocr_powerup
, sd
);
2075 static void sd_instance_finalize(Object
*obj
)
2077 SDState
*sd
= SD_CARD(obj
);
2079 timer_free(sd
->ocr_power_timer
);
2082 static void sd_realize(DeviceState
*dev
, Error
**errp
)
2084 SDState
*sd
= SD_CARD(dev
);
2087 sd
->proto_name
= sd
->spi
? "SPI" : "SD";
2089 switch (sd
->spec_version
) {
2090 case SD_PHY_SPECv1_10_VERS
2091 ... SD_PHY_SPECv3_01_VERS
:
2094 error_setg(errp
, "Invalid SD card Spec version: %u", sd
->spec_version
);
2101 if (!blk_supports_write_perm(sd
->blk
)) {
2102 error_setg(errp
, "Cannot use read-only drive as SD card");
2106 blk_size
= blk_getlength(sd
->blk
);
2107 if (blk_size
> 0 && !is_power_of_2(blk_size
)) {
2108 int64_t blk_size_aligned
= pow2ceil(blk_size
);
2111 blk_size_str
= size_to_str(blk_size
);
2112 error_setg(errp
, "Invalid SD card size: %s", blk_size_str
);
2113 g_free(blk_size_str
);
2115 blk_size_str
= size_to_str(blk_size_aligned
);
2116 error_append_hint(errp
,
2117 "SD card size has to be a power of 2, e.g. %s.\n"
2118 "You can resize disk images with"
2119 " 'qemu-img resize <imagefile> <new-size>'\n"
2120 "(note that this will lose data if you make the"
2121 " image smaller than it currently is).\n",
2123 g_free(blk_size_str
);
2128 ret
= blk_set_perm(sd
->blk
, BLK_PERM_CONSISTENT_READ
| BLK_PERM_WRITE
,
2129 BLK_PERM_ALL
, errp
);
2133 blk_set_dev_ops(sd
->blk
, &sd_block_ops
, sd
);
2137 static Property sd_properties
[] = {
2138 DEFINE_PROP_UINT8("spec_version", SDState
,
2139 spec_version
, SD_PHY_SPECv2_00_VERS
),
2140 DEFINE_PROP_DRIVE("drive", SDState
, blk
),
2141 /* We do not model the chip select pin, so allow the board to select
2142 * whether card should be in SSI or MMC/SD mode. It is also up to the
2143 * board to ensure that ssi transfers only occur when the chip select
2145 DEFINE_PROP_BOOL("spi", SDState
, spi
, false),
2146 DEFINE_PROP_END_OF_LIST()
2149 static void sd_class_init(ObjectClass
*klass
, void *data
)
2151 DeviceClass
*dc
= DEVICE_CLASS(klass
);
2152 SDCardClass
*sc
= SD_CARD_CLASS(klass
);
2154 dc
->realize
= sd_realize
;
2155 device_class_set_props(dc
, sd_properties
);
2156 dc
->vmsd
= &sd_vmstate
;
2157 dc
->reset
= sd_reset
;
2158 dc
->bus_type
= TYPE_SD_BUS
;
2159 set_bit(DEVICE_CATEGORY_STORAGE
, dc
->categories
);
2161 sc
->set_voltage
= sd_set_voltage
;
2162 sc
->get_dat_lines
= sd_get_dat_lines
;
2163 sc
->get_cmd_line
= sd_get_cmd_line
;
2164 sc
->do_command
= sd_do_command
;
2165 sc
->write_byte
= sd_write_byte
;
2166 sc
->read_byte
= sd_read_byte
;
2167 sc
->receive_ready
= sd_receive_ready
;
2168 sc
->data_ready
= sd_data_ready
;
2169 sc
->enable
= sd_enable
;
2170 sc
->get_inserted
= sd_get_inserted
;
2171 sc
->get_readonly
= sd_get_readonly
;
2174 static const TypeInfo sd_info
= {
2175 .name
= TYPE_SD_CARD
,
2176 .parent
= TYPE_DEVICE
,
2177 .instance_size
= sizeof(SDState
),
2178 .class_size
= sizeof(SDCardClass
),
2179 .class_init
= sd_class_init
,
2180 .instance_init
= sd_instance_init
,
2181 .instance_finalize
= sd_instance_finalize
,
2184 static void sd_register_types(void)
2186 type_register_static(&sd_info
);
2189 type_init(sd_register_types
)