2 * SD Memory Card emulation as defined in the "SD Memory Card Physical
3 * layer specification, Version 1.10."
5 * Copyright (c) 2006 Andrzej Zaborowski <balrog@zabor.org>
6 * Copyright (c) 2007 CodeSourcery
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 * 2. Redistributions in binary form must reproduce the above copyright
15 * notice, this list of conditions and the following disclaimer in
16 * the documentation and/or other materials provided with the
19 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS''
20 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
22 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR
23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
26 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
27 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 #include "qemu/osdep.h"
35 #include "hw/registerfields.h"
36 #include "sysemu/block-backend.h"
38 #include "qapi/error.h"
39 #include "qemu/bitmap.h"
40 #include "qemu/cutils.h"
41 #include "hw/qdev-properties.h"
42 #include "qemu/error-report.h"
43 #include "qemu/timer.h"
45 #include "sdmmc-internal.h"
50 #define ACMD41_ENQUIRY_MASK 0x00ffffff
53 sd_r0
= 0, /* no response */
54 sd_r1
, /* normal response command */
55 sd_r2_i
, /* CID register */
56 sd_r2_s
, /* CSD register */
57 sd_r3
, /* OCR register */
58 sd_r6
= 6, /* Published RCA response */
59 sd_r7
, /* Operating voltage */
66 sd_card_identification_mode
,
67 sd_data_transfer_mode
,
71 sd_inactive_state
= -1,
74 sd_identification_state
,
78 sd_receivingdata_state
,
84 DeviceState parent_obj
;
86 /* SD Memory Card Registers */
93 uint8_t sd_status
[64];
95 /* Configurable properties */
99 uint32_t mode
; /* current card mode, one of SDCardModes */
100 int32_t state
; /* current card state, one of SDCardStates */
103 unsigned long *wp_groups
;
107 uint32_t multi_blk_cnt
;
108 uint32_t erase_start
;
112 uint8_t function_group
[6];
114 /* True if we will handle the next command as an ACMD. Note that this does
115 * *not* track the APP_CMD status bit!
118 uint32_t blk_written
;
120 uint32_t data_offset
;
122 qemu_irq readonly_cb
;
123 qemu_irq inserted_cb
;
124 QEMUTimer
*ocr_power_timer
;
130 static const char *sd_state_name(enum SDCardStates state
)
132 static const char *state_name
[] = {
133 [sd_idle_state
] = "idle",
134 [sd_ready_state
] = "ready",
135 [sd_identification_state
] = "identification",
136 [sd_standby_state
] = "standby",
137 [sd_transfer_state
] = "transfer",
138 [sd_sendingdata_state
] = "sendingdata",
139 [sd_receivingdata_state
] = "receivingdata",
140 [sd_programming_state
] = "programming",
141 [sd_disconnect_state
] = "disconnect",
143 if (state
== sd_inactive_state
) {
146 assert(state
<= ARRAY_SIZE(state_name
));
147 return state_name
[state
];
150 static const char *sd_response_name(sd_rsp_type_t rsp
)
152 static const char *response_name
[] = {
153 [sd_r0
] = "RESP#0 (no response)",
154 [sd_r1
] = "RESP#1 (normal cmd)",
155 [sd_r2_i
] = "RESP#2 (CID reg)",
156 [sd_r2_s
] = "RESP#2 (CSD reg)",
157 [sd_r3
] = "RESP#3 (OCR reg)",
158 [sd_r6
] = "RESP#6 (RCA)",
159 [sd_r7
] = "RESP#7 (operating voltage)",
161 if (rsp
== sd_illegal
) {
162 return "ILLEGAL RESP";
167 assert(rsp
<= ARRAY_SIZE(response_name
));
168 return response_name
[rsp
];
171 static uint8_t sd_get_dat_lines(SDState
*sd
)
173 return sd
->enable
? sd
->dat_lines
: 0;
176 static bool sd_get_cmd_line(SDState
*sd
)
178 return sd
->enable
? sd
->cmd_line
: false;
181 static void sd_set_voltage(SDState
*sd
, uint16_t millivolts
)
183 trace_sdcard_set_voltage(millivolts
);
185 switch (millivolts
) {
186 case 3001 ... 3600: /* SD_VOLTAGE_3_3V */
187 case 2001 ... 3000: /* SD_VOLTAGE_3_0V */
190 qemu_log_mask(LOG_GUEST_ERROR
, "SD card voltage not supported: %.3fV",
191 millivolts
/ 1000.f
);
195 static void sd_set_mode(SDState
*sd
)
198 case sd_inactive_state
:
199 sd
->mode
= sd_inactive
;
204 case sd_identification_state
:
205 sd
->mode
= sd_card_identification_mode
;
208 case sd_standby_state
:
209 case sd_transfer_state
:
210 case sd_sendingdata_state
:
211 case sd_receivingdata_state
:
212 case sd_programming_state
:
213 case sd_disconnect_state
:
214 sd
->mode
= sd_data_transfer_mode
;
219 static const sd_cmd_type_t sd_cmd_type
[SDMMC_CMD_MAX
] = {
220 sd_bc
, sd_none
, sd_bcr
, sd_bcr
, sd_none
, sd_none
, sd_none
, sd_ac
,
221 sd_bcr
, sd_ac
, sd_ac
, sd_adtc
, sd_ac
, sd_ac
, sd_none
, sd_ac
,
223 sd_ac
, sd_adtc
, sd_adtc
, sd_none
, sd_none
, sd_none
, sd_none
, sd_none
,
224 sd_adtc
, sd_adtc
, sd_adtc
, sd_adtc
, sd_ac
, sd_ac
, sd_adtc
, sd_none
,
226 sd_ac
, sd_ac
, sd_none
, sd_none
, sd_none
, sd_none
, sd_ac
, sd_none
,
227 sd_none
, sd_none
, sd_bc
, sd_none
, sd_none
, sd_none
, sd_none
, sd_none
,
229 sd_none
, sd_none
, sd_none
, sd_none
, sd_none
, sd_none
, sd_none
, sd_ac
,
230 sd_adtc
, sd_none
, sd_none
, sd_none
, sd_none
, sd_none
, sd_none
, sd_none
,
233 static const int sd_cmd_class
[SDMMC_CMD_MAX
] = {
234 0, 0, 0, 0, 0, 9, 10, 0, 0, 0, 0, 1, 0, 0, 0, 0,
235 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 6, 6, 6, 6,
236 5, 5, 10, 10, 10, 10, 5, 9, 9, 9, 7, 7, 7, 7, 7, 7,
237 7, 7, 10, 7, 9, 9, 9, 8, 8, 10, 8, 8, 8, 8, 8, 8,
240 static uint8_t sd_crc7(void *message
, size_t width
)
243 uint8_t shift_reg
= 0x00;
244 uint8_t *msg
= (uint8_t *) message
;
246 for (i
= 0; i
< width
; i
++, msg
++)
247 for (bit
= 7; bit
>= 0; bit
--) {
249 if ((shift_reg
>> 7) ^ ((*msg
>> bit
) & 1))
256 static uint16_t sd_crc16(void *message
, size_t width
)
259 uint16_t shift_reg
= 0x0000;
260 uint16_t *msg
= (uint16_t *) message
;
263 for (i
= 0; i
< width
; i
++, msg
++)
264 for (bit
= 15; bit
>= 0; bit
--) {
266 if ((shift_reg
>> 15) ^ ((*msg
>> bit
) & 1))
273 #define OCR_POWER_DELAY_NS 500000 /* 0.5ms */
275 FIELD(OCR
, CARD_CAPACITY
, 30, 1) /* 0:SDSC, 1:SDHC/SDXC */
276 FIELD(OCR
, CARD_POWER_UP
, 31, 1)
278 static void sd_set_ocr(SDState
*sd
)
280 /* All voltages OK, Standard Capacity SD Memory Card, not yet powered up */
281 sd
->ocr
= 0x00ffff00;
284 static void sd_ocr_powerup(void *opaque
)
286 SDState
*sd
= opaque
;
288 trace_sdcard_powerup();
289 assert(!FIELD_EX32(sd
->ocr
, OCR
, CARD_POWER_UP
));
291 /* card power-up OK */
292 sd
->ocr
= FIELD_DP32(sd
->ocr
, OCR
, CARD_POWER_UP
, 1);
294 if (sd
->size
> 1 * G_BYTE
) {
295 sd
->ocr
= FIELD_DP32(sd
->ocr
, OCR
, CARD_CAPACITY
, 1);
299 static void sd_set_scr(SDState
*sd
)
301 sd
->scr
[0] = 0x00; /* SCR Structure */
302 sd
->scr
[1] = 0x2f; /* SD Security Support */
318 static void sd_set_cid(SDState
*sd
)
320 sd
->cid
[0] = MID
; /* Fake card manufacturer ID (MID) */
321 sd
->cid
[1] = OID
[0]; /* OEM/Application ID (OID) */
323 sd
->cid
[3] = PNM
[0]; /* Fake product name (PNM) */
328 sd
->cid
[8] = PRV
; /* Fake product revision (PRV) */
329 sd
->cid
[9] = 0xde; /* Fake serial number (PSN) */
333 sd
->cid
[13] = 0x00 | /* Manufacture date (MDT) */
334 ((MDT_YR
- 2000) / 10);
335 sd
->cid
[14] = ((MDT_YR
% 10) << 4) | MDT_MON
;
336 sd
->cid
[15] = (sd_crc7(sd
->cid
, 15) << 1) | 1;
339 #define HWBLOCK_SHIFT 9 /* 512 bytes */
340 #define SECTOR_SHIFT 5 /* 16 kilobytes */
341 #define WPGROUP_SHIFT 7 /* 2 megs */
342 #define CMULT_SHIFT 9 /* 512 times HWBLOCK_SIZE */
343 #define WPGROUP_SIZE (1 << (HWBLOCK_SHIFT + SECTOR_SHIFT + WPGROUP_SHIFT))
345 static const uint8_t sd_csd_rw_mask
[16] = {
346 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
347 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfe,
350 static void sd_set_csd(SDState
*sd
, uint64_t size
)
352 uint32_t csize
= (size
>> (CMULT_SHIFT
+ HWBLOCK_SHIFT
)) - 1;
353 uint32_t sectsize
= (1 << (SECTOR_SHIFT
+ 1)) - 1;
354 uint32_t wpsize
= (1 << (WPGROUP_SHIFT
+ 1)) - 1;
356 if (size
<= 1 * G_BYTE
) { /* Standard Capacity SD */
357 sd
->csd
[0] = 0x00; /* CSD structure */
358 sd
->csd
[1] = 0x26; /* Data read access-time-1 */
359 sd
->csd
[2] = 0x00; /* Data read access-time-2 */
360 sd
->csd
[3] = 0x5a; /* Max. data transfer rate */
361 sd
->csd
[4] = 0x5f; /* Card Command Classes */
362 sd
->csd
[5] = 0x50 | /* Max. read data block length */
364 sd
->csd
[6] = 0xe0 | /* Partial block for read allowed */
365 ((csize
>> 10) & 0x03);
366 sd
->csd
[7] = 0x00 | /* Device size */
367 ((csize
>> 2) & 0xff);
368 sd
->csd
[8] = 0x3f | /* Max. read current */
369 ((csize
<< 6) & 0xc0);
370 sd
->csd
[9] = 0xfc | /* Max. write current */
371 ((CMULT_SHIFT
- 2) >> 1);
372 sd
->csd
[10] = 0x40 | /* Erase sector size */
373 (((CMULT_SHIFT
- 2) << 7) & 0x80) | (sectsize
>> 1);
374 sd
->csd
[11] = 0x00 | /* Write protect group size */
375 ((sectsize
<< 7) & 0x80) | wpsize
;
376 sd
->csd
[12] = 0x90 | /* Write speed factor */
377 (HWBLOCK_SHIFT
>> 2);
378 sd
->csd
[13] = 0x20 | /* Max. write data block length */
379 ((HWBLOCK_SHIFT
<< 6) & 0xc0);
380 sd
->csd
[14] = 0x00; /* File format group */
381 sd
->csd
[15] = (sd_crc7(sd
->csd
, 15) << 1) | 1;
392 sd
->csd
[7] = (size
>> 16) & 0xff;
393 sd
->csd
[8] = (size
>> 8) & 0xff;
394 sd
->csd
[9] = (size
& 0xff);
404 static void sd_set_rca(SDState
*sd
)
409 /* Card status bits, split by clear condition:
410 * A : According to the card current state
411 * B : Always related to the previous command
412 * C : Cleared by read
414 #define CARD_STATUS_A 0x02004100
415 #define CARD_STATUS_B 0x00c01e00
416 #define CARD_STATUS_C 0xfd39a028
418 static void sd_set_cardstatus(SDState
*sd
)
420 sd
->card_status
= 0x00000100;
423 static void sd_set_sdstatus(SDState
*sd
)
425 memset(sd
->sd_status
, 0, 64);
428 static int sd_req_crc_validate(SDRequest
*req
)
431 buffer
[0] = 0x40 | req
->cmd
;
432 buffer
[1] = (req
->arg
>> 24) & 0xff;
433 buffer
[2] = (req
->arg
>> 16) & 0xff;
434 buffer
[3] = (req
->arg
>> 8) & 0xff;
435 buffer
[4] = (req
->arg
>> 0) & 0xff;
437 return sd_crc7(buffer
, 5) != req
->crc
; /* TODO */
440 static void sd_response_r1_make(SDState
*sd
, uint8_t *response
)
442 uint32_t status
= sd
->card_status
;
443 /* Clear the "clear on read" status bits */
444 sd
->card_status
&= ~CARD_STATUS_C
;
446 response
[0] = (status
>> 24) & 0xff;
447 response
[1] = (status
>> 16) & 0xff;
448 response
[2] = (status
>> 8) & 0xff;
449 response
[3] = (status
>> 0) & 0xff;
452 static void sd_response_r3_make(SDState
*sd
, uint8_t *response
)
454 response
[0] = (sd
->ocr
>> 24) & 0xff;
455 response
[1] = (sd
->ocr
>> 16) & 0xff;
456 response
[2] = (sd
->ocr
>> 8) & 0xff;
457 response
[3] = (sd
->ocr
>> 0) & 0xff;
460 static void sd_response_r6_make(SDState
*sd
, uint8_t *response
)
466 status
= ((sd
->card_status
>> 8) & 0xc000) |
467 ((sd
->card_status
>> 6) & 0x2000) |
468 (sd
->card_status
& 0x1fff);
469 sd
->card_status
&= ~(CARD_STATUS_C
& 0xc81fff);
471 response
[0] = (arg
>> 8) & 0xff;
472 response
[1] = arg
& 0xff;
473 response
[2] = (status
>> 8) & 0xff;
474 response
[3] = status
& 0xff;
477 static void sd_response_r7_make(SDState
*sd
, uint8_t *response
)
479 response
[0] = (sd
->vhs
>> 24) & 0xff;
480 response
[1] = (sd
->vhs
>> 16) & 0xff;
481 response
[2] = (sd
->vhs
>> 8) & 0xff;
482 response
[3] = (sd
->vhs
>> 0) & 0xff;
485 static inline uint64_t sd_addr_to_wpnum(uint64_t addr
)
487 return addr
>> (HWBLOCK_SHIFT
+ SECTOR_SHIFT
+ WPGROUP_SHIFT
);
490 static void sd_reset(DeviceState
*dev
)
492 SDState
*sd
= SD_CARD(dev
);
496 trace_sdcard_reset();
498 blk_get_geometry(sd
->blk
, §
);
504 sect
= sd_addr_to_wpnum(size
) + 1;
506 sd
->state
= sd_idle_state
;
511 sd_set_csd(sd
, size
);
512 sd_set_cardstatus(sd
);
515 g_free(sd
->wp_groups
);
516 sd
->wp_switch
= sd
->blk
? blk_is_read_only(sd
->blk
) : false;
517 sd
->wpgrps_size
= sect
;
518 sd
->wp_groups
= bitmap_new(sd
->wpgrps_size
);
519 memset(sd
->function_group
, 0, sizeof(sd
->function_group
));
525 sd
->expecting_acmd
= false;
528 sd
->multi_blk_cnt
= 0;
531 static bool sd_get_inserted(SDState
*sd
)
533 return sd
->blk
&& blk_is_inserted(sd
->blk
);
536 static bool sd_get_readonly(SDState
*sd
)
538 return sd
->wp_switch
;
541 static void sd_cardchange(void *opaque
, bool load
, Error
**errp
)
543 SDState
*sd
= opaque
;
544 DeviceState
*dev
= DEVICE(sd
);
545 SDBus
*sdbus
= SD_BUS(qdev_get_parent_bus(dev
));
546 bool inserted
= sd_get_inserted(sd
);
547 bool readonly
= sd_get_readonly(sd
);
550 trace_sdcard_inserted(readonly
);
553 trace_sdcard_ejected();
556 /* The IRQ notification is for legacy non-QOM SD controller devices;
557 * QOMified controllers use the SDBus APIs.
560 sdbus_set_inserted(sdbus
, inserted
);
562 sdbus_set_readonly(sdbus
, readonly
);
565 qemu_set_irq(sd
->inserted_cb
, inserted
);
567 qemu_set_irq(sd
->readonly_cb
, readonly
);
572 static const BlockDevOps sd_block_ops
= {
573 .change_media_cb
= sd_cardchange
,
576 static bool sd_ocr_vmstate_needed(void *opaque
)
578 SDState
*sd
= opaque
;
580 /* Include the OCR state (and timer) if it is not yet powered up */
581 return !FIELD_EX32(sd
->ocr
, OCR
, CARD_POWER_UP
);
584 static const VMStateDescription sd_ocr_vmstate
= {
585 .name
= "sd-card/ocr-state",
587 .minimum_version_id
= 1,
588 .needed
= sd_ocr_vmstate_needed
,
589 .fields
= (VMStateField
[]) {
590 VMSTATE_UINT32(ocr
, SDState
),
591 VMSTATE_TIMER_PTR(ocr_power_timer
, SDState
),
592 VMSTATE_END_OF_LIST()
596 static int sd_vmstate_pre_load(void *opaque
)
598 SDState
*sd
= opaque
;
600 /* If the OCR state is not included (prior versions, or not
601 * needed), then the OCR must be set as powered up. If the OCR state
602 * is included, this will be replaced by the state restore.
609 static const VMStateDescription sd_vmstate
= {
612 .minimum_version_id
= 1,
613 .pre_load
= sd_vmstate_pre_load
,
614 .fields
= (VMStateField
[]) {
615 VMSTATE_UINT32(mode
, SDState
),
616 VMSTATE_INT32(state
, SDState
),
617 VMSTATE_UINT8_ARRAY(cid
, SDState
, 16),
618 VMSTATE_UINT8_ARRAY(csd
, SDState
, 16),
619 VMSTATE_UINT16(rca
, SDState
),
620 VMSTATE_UINT32(card_status
, SDState
),
621 VMSTATE_PARTIAL_BUFFER(sd_status
, SDState
, 1),
622 VMSTATE_UINT32(vhs
, SDState
),
623 VMSTATE_BITMAP(wp_groups
, SDState
, 0, wpgrps_size
),
624 VMSTATE_UINT32(blk_len
, SDState
),
625 VMSTATE_UINT32(multi_blk_cnt
, SDState
),
626 VMSTATE_UINT32(erase_start
, SDState
),
627 VMSTATE_UINT32(erase_end
, SDState
),
628 VMSTATE_UINT8_ARRAY(pwd
, SDState
, 16),
629 VMSTATE_UINT32(pwd_len
, SDState
),
630 VMSTATE_UINT8_ARRAY(function_group
, SDState
, 6),
631 VMSTATE_UINT8(current_cmd
, SDState
),
632 VMSTATE_BOOL(expecting_acmd
, SDState
),
633 VMSTATE_UINT32(blk_written
, SDState
),
634 VMSTATE_UINT64(data_start
, SDState
),
635 VMSTATE_UINT32(data_offset
, SDState
),
636 VMSTATE_UINT8_ARRAY(data
, SDState
, 512),
637 VMSTATE_UNUSED_V(1, 512),
638 VMSTATE_BOOL(enable
, SDState
),
639 VMSTATE_END_OF_LIST()
641 .subsections
= (const VMStateDescription
*[]) {
647 /* Legacy initialization function for use by non-qdevified callers */
648 SDState
*sd_init(BlockBackend
*blk
, bool is_spi
)
654 obj
= object_new(TYPE_SD_CARD
);
656 qdev_prop_set_drive(dev
, "drive", blk
, &err
);
658 error_report("sd_init failed: %s", error_get_pretty(err
));
661 qdev_prop_set_bit(dev
, "spi", is_spi
);
662 object_property_set_bool(obj
, true, "realized", &err
);
664 error_report("sd_init failed: %s", error_get_pretty(err
));
671 void sd_set_cb(SDState
*sd
, qemu_irq readonly
, qemu_irq insert
)
673 sd
->readonly_cb
= readonly
;
674 sd
->inserted_cb
= insert
;
675 qemu_set_irq(readonly
, sd
->blk
? blk_is_read_only(sd
->blk
) : 0);
676 qemu_set_irq(insert
, sd
->blk
? blk_is_inserted(sd
->blk
) : 0);
679 static void sd_erase(SDState
*sd
)
682 uint64_t erase_start
= sd
->erase_start
;
683 uint64_t erase_end
= sd
->erase_end
;
685 trace_sdcard_erase();
686 if (!sd
->erase_start
|| !sd
->erase_end
) {
687 sd
->card_status
|= ERASE_SEQ_ERROR
;
691 if (FIELD_EX32(sd
->ocr
, OCR
, CARD_CAPACITY
)) {
692 /* High capacity memory card: erase units are 512 byte blocks */
697 erase_start
= sd_addr_to_wpnum(erase_start
);
698 erase_end
= sd_addr_to_wpnum(erase_end
);
703 for (i
= erase_start
; i
<= erase_end
; i
++) {
704 if (test_bit(i
, sd
->wp_groups
)) {
705 sd
->card_status
|= WP_ERASE_SKIP
;
710 static uint32_t sd_wpbits(SDState
*sd
, uint64_t addr
)
715 wpnum
= sd_addr_to_wpnum(addr
);
717 for (i
= 0; i
< 32; i
++, wpnum
++, addr
+= WPGROUP_SIZE
) {
718 if (addr
< sd
->size
&& test_bit(wpnum
, sd
->wp_groups
)) {
726 static void sd_function_switch(SDState
*sd
, uint32_t arg
)
728 int i
, mode
, new_func
, crc
;
729 mode
= !!(arg
& 0x80000000);
731 sd
->data
[0] = 0x00; /* Maximum current consumption */
733 sd
->data
[2] = 0x80; /* Supported group 6 functions */
735 sd
->data
[4] = 0x80; /* Supported group 5 functions */
737 sd
->data
[6] = 0x80; /* Supported group 4 functions */
739 sd
->data
[8] = 0x80; /* Supported group 3 functions */
741 sd
->data
[10] = 0x80; /* Supported group 2 functions */
743 sd
->data
[12] = 0x80; /* Supported group 1 functions */
745 for (i
= 0; i
< 6; i
++) {
746 new_func
= (arg
>> (i
* 4)) & 0x0f;
747 if (mode
&& new_func
!= 0x0f)
748 sd
->function_group
[i
] = new_func
;
749 sd
->data
[14 + (i
>> 1)] = new_func
<< ((i
* 4) & 4);
751 memset(&sd
->data
[17], 0, 47);
752 crc
= sd_crc16(sd
->data
, 64);
753 sd
->data
[65] = crc
>> 8;
754 sd
->data
[66] = crc
& 0xff;
757 static inline bool sd_wp_addr(SDState
*sd
, uint64_t addr
)
759 return test_bit(sd_addr_to_wpnum(addr
), sd
->wp_groups
);
762 static void sd_lock_command(SDState
*sd
)
764 int erase
, lock
, clr_pwd
, set_pwd
, pwd_len
;
765 erase
= !!(sd
->data
[0] & 0x08);
766 lock
= sd
->data
[0] & 0x04;
767 clr_pwd
= sd
->data
[0] & 0x02;
768 set_pwd
= sd
->data
[0] & 0x01;
771 pwd_len
= sd
->data
[1];
778 trace_sdcard_unlock();
781 if (!(sd
->card_status
& CARD_IS_LOCKED
) || sd
->blk_len
> 1 ||
782 set_pwd
|| clr_pwd
|| lock
|| sd
->wp_switch
||
783 (sd
->csd
[14] & 0x20)) {
784 sd
->card_status
|= LOCK_UNLOCK_FAILED
;
787 bitmap_zero(sd
->wp_groups
, sd
->wpgrps_size
);
788 sd
->csd
[14] &= ~0x10;
789 sd
->card_status
&= ~CARD_IS_LOCKED
;
791 /* Erasing the entire card here! */
792 fprintf(stderr
, "SD: Card force-erased by CMD42\n");
796 if (sd
->blk_len
< 2 + pwd_len
||
797 pwd_len
<= sd
->pwd_len
||
798 pwd_len
> sd
->pwd_len
+ 16) {
799 sd
->card_status
|= LOCK_UNLOCK_FAILED
;
803 if (sd
->pwd_len
&& memcmp(sd
->pwd
, sd
->data
+ 2, sd
->pwd_len
)) {
804 sd
->card_status
|= LOCK_UNLOCK_FAILED
;
808 pwd_len
-= sd
->pwd_len
;
809 if ((pwd_len
&& !set_pwd
) ||
810 (clr_pwd
&& (set_pwd
|| lock
)) ||
811 (lock
&& !sd
->pwd_len
&& !set_pwd
) ||
812 (!set_pwd
&& !clr_pwd
&&
813 (((sd
->card_status
& CARD_IS_LOCKED
) && lock
) ||
814 (!(sd
->card_status
& CARD_IS_LOCKED
) && !lock
)))) {
815 sd
->card_status
|= LOCK_UNLOCK_FAILED
;
820 memcpy(sd
->pwd
, sd
->data
+ 2 + sd
->pwd_len
, pwd_len
);
821 sd
->pwd_len
= pwd_len
;
829 sd
->card_status
|= CARD_IS_LOCKED
;
831 sd
->card_status
&= ~CARD_IS_LOCKED
;
834 static sd_rsp_type_t
sd_normal_command(SDState
*sd
,
837 uint32_t rca
= 0x0000;
838 uint64_t addr
= (sd
->ocr
& (1 << 30)) ? (uint64_t) req
.arg
<< 9 : req
.arg
;
840 trace_sdcard_normal_command(req
.cmd
, req
.arg
, sd_state_name(sd
->state
));
842 /* Not interpreting this as an app command */
843 sd
->card_status
&= ~APP_CMD
;
845 if (sd_cmd_type
[req
.cmd
] == sd_ac
846 || sd_cmd_type
[req
.cmd
] == sd_adtc
) {
850 /* CMD23 (set block count) must be immediately followed by CMD18 or CMD25
851 * if not, its effects are cancelled */
852 if (sd
->multi_blk_cnt
!= 0 && !(req
.cmd
== 18 || req
.cmd
== 25)) {
853 sd
->multi_blk_cnt
= 0;
857 /* Basic commands (Class 0 and Class 1) */
858 case 0: /* CMD0: GO_IDLE_STATE */
860 case sd_inactive_state
:
861 return sd
->spi
? sd_r1
: sd_r0
;
864 sd
->state
= sd_idle_state
;
865 sd_reset(DEVICE(sd
));
866 return sd
->spi
? sd_r1
: sd_r0
;
870 case 1: /* CMD1: SEND_OP_CMD */
874 sd
->state
= sd_transfer_state
;
877 case 2: /* CMD2: ALL_SEND_CID */
882 sd
->state
= sd_identification_state
;
890 case 3: /* CMD3: SEND_RELATIVE_ADDR */
894 case sd_identification_state
:
895 case sd_standby_state
:
896 sd
->state
= sd_standby_state
;
905 case 4: /* CMD4: SEND_DSR */
909 case sd_standby_state
:
917 case 5: /* CMD5: reserved for SDIO cards */
920 case 6: /* CMD6: SWITCH_FUNCTION */
924 case sd_data_transfer_mode
:
925 sd_function_switch(sd
, req
.arg
);
926 sd
->state
= sd_sendingdata_state
;
936 case 7: /* CMD7: SELECT/DESELECT_CARD */
940 case sd_standby_state
:
944 sd
->state
= sd_transfer_state
;
947 case sd_transfer_state
:
948 case sd_sendingdata_state
:
952 sd
->state
= sd_standby_state
;
955 case sd_disconnect_state
:
959 sd
->state
= sd_programming_state
;
962 case sd_programming_state
:
966 sd
->state
= sd_disconnect_state
;
974 case 8: /* CMD8: SEND_IF_COND */
975 /* Physical Layer Specification Version 2.00 command */
980 /* No response if not exactly one VHS bit is set. */
981 if (!(req
.arg
>> 8) || (req
.arg
>> (ctz32(req
.arg
& ~0xff) + 1))) {
982 return sd
->spi
? sd_r7
: sd_r0
;
994 case 9: /* CMD9: SEND_CSD */
996 case sd_standby_state
:
1002 case sd_transfer_state
:
1005 sd
->state
= sd_sendingdata_state
;
1006 memcpy(sd
->data
, sd
->csd
, 16);
1007 sd
->data_start
= addr
;
1008 sd
->data_offset
= 0;
1016 case 10: /* CMD10: SEND_CID */
1017 switch (sd
->state
) {
1018 case sd_standby_state
:
1024 case sd_transfer_state
:
1027 sd
->state
= sd_sendingdata_state
;
1028 memcpy(sd
->data
, sd
->cid
, 16);
1029 sd
->data_start
= addr
;
1030 sd
->data_offset
= 0;
1038 case 11: /* CMD11: READ_DAT_UNTIL_STOP */
1041 switch (sd
->state
) {
1042 case sd_transfer_state
:
1043 sd
->state
= sd_sendingdata_state
;
1044 sd
->data_start
= req
.arg
;
1045 sd
->data_offset
= 0;
1047 if (sd
->data_start
+ sd
->blk_len
> sd
->size
)
1048 sd
->card_status
|= ADDRESS_ERROR
;
1056 case 12: /* CMD12: STOP_TRANSMISSION */
1057 switch (sd
->state
) {
1058 case sd_sendingdata_state
:
1059 sd
->state
= sd_transfer_state
;
1062 case sd_receivingdata_state
:
1063 sd
->state
= sd_programming_state
;
1064 /* Bzzzzzzztt .... Operation complete. */
1065 sd
->state
= sd_transfer_state
;
1073 case 13: /* CMD13: SEND_STATUS */
1075 case sd_data_transfer_mode
:
1086 case 15: /* CMD15: GO_INACTIVE_STATE */
1090 case sd_data_transfer_mode
:
1094 sd
->state
= sd_inactive_state
;
1102 /* Block read commands (Classs 2) */
1103 case 16: /* CMD16: SET_BLOCKLEN */
1104 switch (sd
->state
) {
1105 case sd_transfer_state
:
1106 if (req
.arg
> (1 << HWBLOCK_SHIFT
)) {
1107 sd
->card_status
|= BLOCK_LEN_ERROR
;
1109 trace_sdcard_set_blocklen(req
.arg
);
1110 sd
->blk_len
= req
.arg
;
1120 case 17: /* CMD17: READ_SINGLE_BLOCK */
1121 switch (sd
->state
) {
1122 case sd_transfer_state
:
1123 sd
->state
= sd_sendingdata_state
;
1124 sd
->data_start
= addr
;
1125 sd
->data_offset
= 0;
1127 if (sd
->data_start
+ sd
->blk_len
> sd
->size
)
1128 sd
->card_status
|= ADDRESS_ERROR
;
1136 case 18: /* CMD18: READ_MULTIPLE_BLOCK */
1137 switch (sd
->state
) {
1138 case sd_transfer_state
:
1139 sd
->state
= sd_sendingdata_state
;
1140 sd
->data_start
= addr
;
1141 sd
->data_offset
= 0;
1143 if (sd
->data_start
+ sd
->blk_len
> sd
->size
)
1144 sd
->card_status
|= ADDRESS_ERROR
;
1152 case 23: /* CMD23: SET_BLOCK_COUNT */
1153 switch (sd
->state
) {
1154 case sd_transfer_state
:
1155 sd
->multi_blk_cnt
= req
.arg
;
1163 /* Block write commands (Class 4) */
1164 case 24: /* CMD24: WRITE_SINGLE_BLOCK */
1166 goto unimplemented_cmd
;
1167 switch (sd
->state
) {
1168 case sd_transfer_state
:
1169 /* Writing in SPI mode not implemented. */
1172 sd
->state
= sd_receivingdata_state
;
1173 sd
->data_start
= addr
;
1174 sd
->data_offset
= 0;
1175 sd
->blk_written
= 0;
1177 if (sd
->data_start
+ sd
->blk_len
> sd
->size
)
1178 sd
->card_status
|= ADDRESS_ERROR
;
1179 if (sd_wp_addr(sd
, sd
->data_start
))
1180 sd
->card_status
|= WP_VIOLATION
;
1181 if (sd
->csd
[14] & 0x30)
1182 sd
->card_status
|= WP_VIOLATION
;
1190 case 25: /* CMD25: WRITE_MULTIPLE_BLOCK */
1192 goto unimplemented_cmd
;
1193 switch (sd
->state
) {
1194 case sd_transfer_state
:
1195 /* Writing in SPI mode not implemented. */
1198 sd
->state
= sd_receivingdata_state
;
1199 sd
->data_start
= addr
;
1200 sd
->data_offset
= 0;
1201 sd
->blk_written
= 0;
1203 if (sd
->data_start
+ sd
->blk_len
> sd
->size
)
1204 sd
->card_status
|= ADDRESS_ERROR
;
1205 if (sd_wp_addr(sd
, sd
->data_start
))
1206 sd
->card_status
|= WP_VIOLATION
;
1207 if (sd
->csd
[14] & 0x30)
1208 sd
->card_status
|= WP_VIOLATION
;
1216 case 26: /* CMD26: PROGRAM_CID */
1219 switch (sd
->state
) {
1220 case sd_transfer_state
:
1221 sd
->state
= sd_receivingdata_state
;
1223 sd
->data_offset
= 0;
1231 case 27: /* CMD27: PROGRAM_CSD */
1233 goto unimplemented_cmd
;
1234 switch (sd
->state
) {
1235 case sd_transfer_state
:
1236 sd
->state
= sd_receivingdata_state
;
1238 sd
->data_offset
= 0;
1246 /* Write protection (Class 6) */
1247 case 28: /* CMD28: SET_WRITE_PROT */
1248 switch (sd
->state
) {
1249 case sd_transfer_state
:
1250 if (addr
>= sd
->size
) {
1251 sd
->card_status
|= ADDRESS_ERROR
;
1255 sd
->state
= sd_programming_state
;
1256 set_bit(sd_addr_to_wpnum(addr
), sd
->wp_groups
);
1257 /* Bzzzzzzztt .... Operation complete. */
1258 sd
->state
= sd_transfer_state
;
1266 case 29: /* CMD29: CLR_WRITE_PROT */
1267 switch (sd
->state
) {
1268 case sd_transfer_state
:
1269 if (addr
>= sd
->size
) {
1270 sd
->card_status
|= ADDRESS_ERROR
;
1274 sd
->state
= sd_programming_state
;
1275 clear_bit(sd_addr_to_wpnum(addr
), sd
->wp_groups
);
1276 /* Bzzzzzzztt .... Operation complete. */
1277 sd
->state
= sd_transfer_state
;
1285 case 30: /* CMD30: SEND_WRITE_PROT */
1286 switch (sd
->state
) {
1287 case sd_transfer_state
:
1288 sd
->state
= sd_sendingdata_state
;
1289 *(uint32_t *) sd
->data
= sd_wpbits(sd
, req
.arg
);
1290 sd
->data_start
= addr
;
1291 sd
->data_offset
= 0;
1299 /* Erase commands (Class 5) */
1300 case 32: /* CMD32: ERASE_WR_BLK_START */
1301 switch (sd
->state
) {
1302 case sd_transfer_state
:
1303 sd
->erase_start
= req
.arg
;
1311 case 33: /* CMD33: ERASE_WR_BLK_END */
1312 switch (sd
->state
) {
1313 case sd_transfer_state
:
1314 sd
->erase_end
= req
.arg
;
1322 case 38: /* CMD38: ERASE */
1323 switch (sd
->state
) {
1324 case sd_transfer_state
:
1325 if (sd
->csd
[14] & 0x30) {
1326 sd
->card_status
|= WP_VIOLATION
;
1330 sd
->state
= sd_programming_state
;
1332 /* Bzzzzzzztt .... Operation complete. */
1333 sd
->state
= sd_transfer_state
;
1341 /* Lock card commands (Class 7) */
1342 case 42: /* CMD42: LOCK_UNLOCK */
1344 goto unimplemented_cmd
;
1345 switch (sd
->state
) {
1346 case sd_transfer_state
:
1347 sd
->state
= sd_receivingdata_state
;
1349 sd
->data_offset
= 0;
1359 /* CMD52, CMD53: reserved for SDIO cards
1360 * (see the SDIO Simplified Specification V2.0)
1361 * Handle as illegal command but do not complain
1362 * on stderr, as some OSes may use these in their
1363 * probing for presence of an SDIO card.
1367 /* Application specific commands (Class 8) */
1368 case 55: /* CMD55: APP_CMD */
1372 sd
->expecting_acmd
= true;
1373 sd
->card_status
|= APP_CMD
;
1376 case 56: /* CMD56: GEN_CMD */
1377 switch (sd
->state
) {
1378 case sd_transfer_state
:
1379 sd
->data_offset
= 0;
1381 sd
->state
= sd_sendingdata_state
;
1383 sd
->state
= sd_receivingdata_state
;
1393 qemu_log_mask(LOG_GUEST_ERROR
, "SD: Unknown CMD%i\n", req
.cmd
);
1397 /* Commands that are recognised but not yet implemented in SPI mode. */
1398 qemu_log_mask(LOG_UNIMP
, "SD: CMD%i not implemented in SPI mode\n",
1403 qemu_log_mask(LOG_GUEST_ERROR
, "SD: CMD%i in a wrong state\n", req
.cmd
);
1407 static sd_rsp_type_t
sd_app_command(SDState
*sd
,
1410 trace_sdcard_app_command(req
.cmd
, req
.arg
);
1411 sd
->card_status
|= APP_CMD
;
1413 case 6: /* ACMD6: SET_BUS_WIDTH */
1414 switch (sd
->state
) {
1415 case sd_transfer_state
:
1416 sd
->sd_status
[0] &= 0x3f;
1417 sd
->sd_status
[0] |= (req
.arg
& 0x03) << 6;
1425 case 13: /* ACMD13: SD_STATUS */
1426 switch (sd
->state
) {
1427 case sd_transfer_state
:
1428 sd
->state
= sd_sendingdata_state
;
1430 sd
->data_offset
= 0;
1438 case 22: /* ACMD22: SEND_NUM_WR_BLOCKS */
1439 switch (sd
->state
) {
1440 case sd_transfer_state
:
1441 *(uint32_t *) sd
->data
= sd
->blk_written
;
1443 sd
->state
= sd_sendingdata_state
;
1445 sd
->data_offset
= 0;
1453 case 23: /* ACMD23: SET_WR_BLK_ERASE_COUNT */
1454 switch (sd
->state
) {
1455 case sd_transfer_state
:
1463 case 41: /* ACMD41: SD_APP_OP_COND */
1466 sd
->state
= sd_transfer_state
;
1469 switch (sd
->state
) {
1471 /* If it's the first ACMD41 since reset, we need to decide
1472 * whether to power up. If this is not an enquiry ACMD41,
1473 * we immediately report power on and proceed below to the
1474 * ready state, but if it is, we set a timer to model a
1475 * delay for power up. This works around a bug in EDK2
1476 * UEFI, which sends an initial enquiry ACMD41, but
1477 * assumes that the card is in ready state as soon as it
1478 * sees the power up bit set. */
1479 if (!FIELD_EX32(sd
->ocr
, OCR
, CARD_POWER_UP
)) {
1480 if ((req
.arg
& ACMD41_ENQUIRY_MASK
) != 0) {
1481 timer_del(sd
->ocr_power_timer
);
1484 trace_sdcard_inquiry_cmd41();
1485 if (!timer_pending(sd
->ocr_power_timer
)) {
1486 timer_mod_ns(sd
->ocr_power_timer
,
1487 (qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL
)
1488 + OCR_POWER_DELAY_NS
));
1493 /* We accept any voltage. 10000 V is nothing.
1495 * Once we're powered up, we advance straight to ready state
1496 * unless it's an enquiry ACMD41 (bits 23:0 == 0).
1498 if (req
.arg
& ACMD41_ENQUIRY_MASK
) {
1499 sd
->state
= sd_ready_state
;
1509 case 42: /* ACMD42: SET_CLR_CARD_DETECT */
1510 switch (sd
->state
) {
1511 case sd_transfer_state
:
1512 /* Bringing in the 50KOhm pull-up resistor... Done. */
1520 case 51: /* ACMD51: SEND_SCR */
1521 switch (sd
->state
) {
1522 case sd_transfer_state
:
1523 sd
->state
= sd_sendingdata_state
;
1525 sd
->data_offset
= 0;
1534 /* Fall back to standard commands. */
1535 return sd_normal_command(sd
, req
);
1538 qemu_log_mask(LOG_GUEST_ERROR
, "SD: ACMD%i in a wrong state\n", req
.cmd
);
1542 static int cmd_valid_while_locked(SDState
*sd
, SDRequest
*req
)
1544 /* Valid commands in locked state:
1546 * lock card class (7)
1548 * implicitly, the ACMD prefix CMD55
1550 * Anything else provokes an "illegal command" response.
1552 if (sd
->expecting_acmd
) {
1553 return req
->cmd
== 41 || req
->cmd
== 42;
1555 if (req
->cmd
== 16 || req
->cmd
== 55) {
1558 return sd_cmd_class
[req
->cmd
] == 0
1559 || sd_cmd_class
[req
->cmd
] == 7;
1562 int sd_do_command(SDState
*sd
, SDRequest
*req
,
1563 uint8_t *response
) {
1565 sd_rsp_type_t rtype
;
1568 if (!sd
->blk
|| !blk_is_inserted(sd
->blk
) || !sd
->enable
) {
1572 if (sd_req_crc_validate(req
)) {
1573 sd
->card_status
|= COM_CRC_ERROR
;
1578 if (req
->cmd
>= SDMMC_CMD_MAX
) {
1579 qemu_log_mask(LOG_GUEST_ERROR
, "SD: incorrect command 0x%02x\n",
1584 if (sd
->card_status
& CARD_IS_LOCKED
) {
1585 if (!cmd_valid_while_locked(sd
, req
)) {
1586 sd
->card_status
|= ILLEGAL_COMMAND
;
1587 sd
->expecting_acmd
= false;
1588 qemu_log_mask(LOG_GUEST_ERROR
, "SD: Card is locked\n");
1594 last_state
= sd
->state
;
1597 if (sd
->expecting_acmd
) {
1598 sd
->expecting_acmd
= false;
1599 rtype
= sd_app_command(sd
, *req
);
1601 rtype
= sd_normal_command(sd
, *req
);
1604 if (rtype
== sd_illegal
) {
1605 sd
->card_status
|= ILLEGAL_COMMAND
;
1607 /* Valid command, we can update the 'state before command' bits.
1608 * (Do this now so they appear in r1 responses.)
1610 sd
->current_cmd
= req
->cmd
;
1611 sd
->card_status
&= ~CURRENT_STATE
;
1612 sd
->card_status
|= (last_state
<< 9);
1619 sd_response_r1_make(sd
, response
);
1624 memcpy(response
, sd
->cid
, sizeof(sd
->cid
));
1629 memcpy(response
, sd
->csd
, sizeof(sd
->csd
));
1634 sd_response_r3_make(sd
, response
);
1639 sd_response_r6_make(sd
, response
);
1644 sd_response_r7_make(sd
, response
);
1653 g_assert_not_reached();
1655 trace_sdcard_response(sd_response_name(rtype
), rsplen
);
1657 if (rtype
!= sd_illegal
) {
1658 /* Clear the "clear on valid command" status bits now we've
1661 sd
->card_status
&= ~CARD_STATUS_B
;
1665 qemu_hexdump((const char *)response
, stderr
, "Response", rsplen
);
1671 static void sd_blk_read(SDState
*sd
, uint64_t addr
, uint32_t len
)
1673 trace_sdcard_read_block(addr
, len
);
1674 if (!sd
->blk
|| blk_pread(sd
->blk
, addr
, sd
->data
, len
) < 0) {
1675 fprintf(stderr
, "sd_blk_read: read error on host side\n");
1679 static void sd_blk_write(SDState
*sd
, uint64_t addr
, uint32_t len
)
1681 trace_sdcard_write_block(addr
, len
);
1682 if (!sd
->blk
|| blk_pwrite(sd
->blk
, addr
, sd
->data
, len
, 0) < 0) {
1683 fprintf(stderr
, "sd_blk_write: write error on host side\n");
1687 #define BLK_READ_BLOCK(a, len) sd_blk_read(sd, a, len)
1688 #define BLK_WRITE_BLOCK(a, len) sd_blk_write(sd, a, len)
1689 #define APP_READ_BLOCK(a, len) memset(sd->data, 0xec, len)
1690 #define APP_WRITE_BLOCK(a, len)
1692 void sd_write_data(SDState
*sd
, uint8_t value
)
1696 if (!sd
->blk
|| !blk_is_inserted(sd
->blk
) || !sd
->enable
)
1699 if (sd
->state
!= sd_receivingdata_state
) {
1700 qemu_log_mask(LOG_GUEST_ERROR
,
1701 "sd_write_data: not in Receiving-Data state\n");
1705 if (sd
->card_status
& (ADDRESS_ERROR
| WP_VIOLATION
))
1708 trace_sdcard_write_data(sd
->current_cmd
, value
);
1709 switch (sd
->current_cmd
) {
1710 case 24: /* CMD24: WRITE_SINGLE_BLOCK */
1711 sd
->data
[sd
->data_offset
++] = value
;
1712 if (sd
->data_offset
>= sd
->blk_len
) {
1713 /* TODO: Check CRC before committing */
1714 sd
->state
= sd_programming_state
;
1715 BLK_WRITE_BLOCK(sd
->data_start
, sd
->data_offset
);
1717 sd
->csd
[14] |= 0x40;
1718 /* Bzzzzzzztt .... Operation complete. */
1719 sd
->state
= sd_transfer_state
;
1723 case 25: /* CMD25: WRITE_MULTIPLE_BLOCK */
1724 if (sd
->data_offset
== 0) {
1725 /* Start of the block - let's check the address is valid */
1726 if (sd
->data_start
+ sd
->blk_len
> sd
->size
) {
1727 sd
->card_status
|= ADDRESS_ERROR
;
1730 if (sd_wp_addr(sd
, sd
->data_start
)) {
1731 sd
->card_status
|= WP_VIOLATION
;
1735 sd
->data
[sd
->data_offset
++] = value
;
1736 if (sd
->data_offset
>= sd
->blk_len
) {
1737 /* TODO: Check CRC before committing */
1738 sd
->state
= sd_programming_state
;
1739 BLK_WRITE_BLOCK(sd
->data_start
, sd
->data_offset
);
1741 sd
->data_start
+= sd
->blk_len
;
1742 sd
->data_offset
= 0;
1743 sd
->csd
[14] |= 0x40;
1745 /* Bzzzzzzztt .... Operation complete. */
1746 if (sd
->multi_blk_cnt
!= 0) {
1747 if (--sd
->multi_blk_cnt
== 0) {
1749 sd
->state
= sd_transfer_state
;
1754 sd
->state
= sd_receivingdata_state
;
1758 case 26: /* CMD26: PROGRAM_CID */
1759 sd
->data
[sd
->data_offset
++] = value
;
1760 if (sd
->data_offset
>= sizeof(sd
->cid
)) {
1761 /* TODO: Check CRC before committing */
1762 sd
->state
= sd_programming_state
;
1763 for (i
= 0; i
< sizeof(sd
->cid
); i
++)
1764 if ((sd
->cid
[i
] | 0x00) != sd
->data
[i
])
1765 sd
->card_status
|= CID_CSD_OVERWRITE
;
1767 if (!(sd
->card_status
& CID_CSD_OVERWRITE
))
1768 for (i
= 0; i
< sizeof(sd
->cid
); i
++) {
1770 sd
->cid
[i
] &= sd
->data
[i
];
1772 /* Bzzzzzzztt .... Operation complete. */
1773 sd
->state
= sd_transfer_state
;
1777 case 27: /* CMD27: PROGRAM_CSD */
1778 sd
->data
[sd
->data_offset
++] = value
;
1779 if (sd
->data_offset
>= sizeof(sd
->csd
)) {
1780 /* TODO: Check CRC before committing */
1781 sd
->state
= sd_programming_state
;
1782 for (i
= 0; i
< sizeof(sd
->csd
); i
++)
1783 if ((sd
->csd
[i
] | sd_csd_rw_mask
[i
]) !=
1784 (sd
->data
[i
] | sd_csd_rw_mask
[i
]))
1785 sd
->card_status
|= CID_CSD_OVERWRITE
;
1787 /* Copy flag (OTP) & Permanent write protect */
1788 if (sd
->csd
[14] & ~sd
->data
[14] & 0x60)
1789 sd
->card_status
|= CID_CSD_OVERWRITE
;
1791 if (!(sd
->card_status
& CID_CSD_OVERWRITE
))
1792 for (i
= 0; i
< sizeof(sd
->csd
); i
++) {
1793 sd
->csd
[i
] |= sd_csd_rw_mask
[i
];
1794 sd
->csd
[i
] &= sd
->data
[i
];
1796 /* Bzzzzzzztt .... Operation complete. */
1797 sd
->state
= sd_transfer_state
;
1801 case 42: /* CMD42: LOCK_UNLOCK */
1802 sd
->data
[sd
->data_offset
++] = value
;
1803 if (sd
->data_offset
>= sd
->blk_len
) {
1804 /* TODO: Check CRC before committing */
1805 sd
->state
= sd_programming_state
;
1806 sd_lock_command(sd
);
1807 /* Bzzzzzzztt .... Operation complete. */
1808 sd
->state
= sd_transfer_state
;
1812 case 56: /* CMD56: GEN_CMD */
1813 sd
->data
[sd
->data_offset
++] = value
;
1814 if (sd
->data_offset
>= sd
->blk_len
) {
1815 APP_WRITE_BLOCK(sd
->data_start
, sd
->data_offset
);
1816 sd
->state
= sd_transfer_state
;
1821 qemu_log_mask(LOG_GUEST_ERROR
, "sd_write_data: unknown command\n");
1826 uint8_t sd_read_data(SDState
*sd
)
1828 /* TODO: Append CRCs */
1832 if (!sd
->blk
|| !blk_is_inserted(sd
->blk
) || !sd
->enable
)
1835 if (sd
->state
!= sd_sendingdata_state
) {
1836 qemu_log_mask(LOG_GUEST_ERROR
,
1837 "sd_read_data: not in Sending-Data state\n");
1841 if (sd
->card_status
& (ADDRESS_ERROR
| WP_VIOLATION
))
1844 io_len
= (sd
->ocr
& (1 << 30)) ? 512 : sd
->blk_len
;
1846 trace_sdcard_read_data(sd
->current_cmd
, io_len
);
1847 switch (sd
->current_cmd
) {
1848 case 6: /* CMD6: SWITCH_FUNCTION */
1849 ret
= sd
->data
[sd
->data_offset
++];
1851 if (sd
->data_offset
>= 64)
1852 sd
->state
= sd_transfer_state
;
1855 case 9: /* CMD9: SEND_CSD */
1856 case 10: /* CMD10: SEND_CID */
1857 ret
= sd
->data
[sd
->data_offset
++];
1859 if (sd
->data_offset
>= 16)
1860 sd
->state
= sd_transfer_state
;
1863 case 11: /* CMD11: READ_DAT_UNTIL_STOP */
1864 if (sd
->data_offset
== 0)
1865 BLK_READ_BLOCK(sd
->data_start
, io_len
);
1866 ret
= sd
->data
[sd
->data_offset
++];
1868 if (sd
->data_offset
>= io_len
) {
1869 sd
->data_start
+= io_len
;
1870 sd
->data_offset
= 0;
1871 if (sd
->data_start
+ io_len
> sd
->size
) {
1872 sd
->card_status
|= ADDRESS_ERROR
;
1878 case 13: /* ACMD13: SD_STATUS */
1879 ret
= sd
->sd_status
[sd
->data_offset
++];
1881 if (sd
->data_offset
>= sizeof(sd
->sd_status
))
1882 sd
->state
= sd_transfer_state
;
1885 case 17: /* CMD17: READ_SINGLE_BLOCK */
1886 if (sd
->data_offset
== 0)
1887 BLK_READ_BLOCK(sd
->data_start
, io_len
);
1888 ret
= sd
->data
[sd
->data_offset
++];
1890 if (sd
->data_offset
>= io_len
)
1891 sd
->state
= sd_transfer_state
;
1894 case 18: /* CMD18: READ_MULTIPLE_BLOCK */
1895 if (sd
->data_offset
== 0) {
1896 if (sd
->data_start
+ io_len
> sd
->size
) {
1897 sd
->card_status
|= ADDRESS_ERROR
;
1900 BLK_READ_BLOCK(sd
->data_start
, io_len
);
1902 ret
= sd
->data
[sd
->data_offset
++];
1904 if (sd
->data_offset
>= io_len
) {
1905 sd
->data_start
+= io_len
;
1906 sd
->data_offset
= 0;
1908 if (sd
->multi_blk_cnt
!= 0) {
1909 if (--sd
->multi_blk_cnt
== 0) {
1911 sd
->state
= sd_transfer_state
;
1918 case 22: /* ACMD22: SEND_NUM_WR_BLOCKS */
1919 ret
= sd
->data
[sd
->data_offset
++];
1921 if (sd
->data_offset
>= 4)
1922 sd
->state
= sd_transfer_state
;
1925 case 30: /* CMD30: SEND_WRITE_PROT */
1926 ret
= sd
->data
[sd
->data_offset
++];
1928 if (sd
->data_offset
>= 4)
1929 sd
->state
= sd_transfer_state
;
1932 case 51: /* ACMD51: SEND_SCR */
1933 ret
= sd
->scr
[sd
->data_offset
++];
1935 if (sd
->data_offset
>= sizeof(sd
->scr
))
1936 sd
->state
= sd_transfer_state
;
1939 case 56: /* CMD56: GEN_CMD */
1940 if (sd
->data_offset
== 0)
1941 APP_READ_BLOCK(sd
->data_start
, sd
->blk_len
);
1942 ret
= sd
->data
[sd
->data_offset
++];
1944 if (sd
->data_offset
>= sd
->blk_len
)
1945 sd
->state
= sd_transfer_state
;
1949 qemu_log_mask(LOG_GUEST_ERROR
, "sd_read_data: unknown command\n");
1956 bool sd_data_ready(SDState
*sd
)
1958 return sd
->state
== sd_sendingdata_state
;
1961 void sd_enable(SDState
*sd
, bool enable
)
1963 sd
->enable
= enable
;
1966 static void sd_instance_init(Object
*obj
)
1968 SDState
*sd
= SD_CARD(obj
);
1971 sd
->ocr_power_timer
= timer_new_ns(QEMU_CLOCK_VIRTUAL
, sd_ocr_powerup
, sd
);
1974 static void sd_instance_finalize(Object
*obj
)
1976 SDState
*sd
= SD_CARD(obj
);
1978 timer_del(sd
->ocr_power_timer
);
1979 timer_free(sd
->ocr_power_timer
);
1982 static void sd_realize(DeviceState
*dev
, Error
**errp
)
1984 SDState
*sd
= SD_CARD(dev
);
1987 if (sd
->blk
&& blk_is_read_only(sd
->blk
)) {
1988 error_setg(errp
, "Cannot use read-only drive as SD card");
1993 ret
= blk_set_perm(sd
->blk
, BLK_PERM_CONSISTENT_READ
| BLK_PERM_WRITE
,
1994 BLK_PERM_ALL
, errp
);
1998 blk_set_dev_ops(sd
->blk
, &sd_block_ops
, sd
);
2002 static Property sd_properties
[] = {
2003 DEFINE_PROP_DRIVE("drive", SDState
, blk
),
2004 /* We do not model the chip select pin, so allow the board to select
2005 * whether card should be in SSI or MMC/SD mode. It is also up to the
2006 * board to ensure that ssi transfers only occur when the chip select
2008 DEFINE_PROP_BOOL("spi", SDState
, spi
, false),
2009 DEFINE_PROP_END_OF_LIST()
2012 static void sd_class_init(ObjectClass
*klass
, void *data
)
2014 DeviceClass
*dc
= DEVICE_CLASS(klass
);
2015 SDCardClass
*sc
= SD_CARD_CLASS(klass
);
2017 dc
->realize
= sd_realize
;
2018 dc
->props
= sd_properties
;
2019 dc
->vmsd
= &sd_vmstate
;
2020 dc
->reset
= sd_reset
;
2021 dc
->bus_type
= TYPE_SD_BUS
;
2023 sc
->set_voltage
= sd_set_voltage
;
2024 sc
->get_dat_lines
= sd_get_dat_lines
;
2025 sc
->get_cmd_line
= sd_get_cmd_line
;
2026 sc
->do_command
= sd_do_command
;
2027 sc
->write_data
= sd_write_data
;
2028 sc
->read_data
= sd_read_data
;
2029 sc
->data_ready
= sd_data_ready
;
2030 sc
->enable
= sd_enable
;
2031 sc
->get_inserted
= sd_get_inserted
;
2032 sc
->get_readonly
= sd_get_readonly
;
2035 static const TypeInfo sd_info
= {
2036 .name
= TYPE_SD_CARD
,
2037 .parent
= TYPE_DEVICE
,
2038 .instance_size
= sizeof(SDState
),
2039 .class_size
= sizeof(SDCardClass
),
2040 .class_init
= sd_class_init
,
2041 .instance_init
= sd_instance_init
,
2042 .instance_finalize
= sd_instance_finalize
,
2045 static void sd_register_types(void)
2047 type_register_static(&sd_info
);
2050 type_init(sd_register_types
)