hw/sd: Introduce a "sd-card" SPI variant model
[qemu/armbru.git] / hw / sd / sd.c
blob132daba4bd13dd9ff342a78a05fef56a5a934b52
1 /*
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
11 * are met:
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
18 * distribution.
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"
36 #include "hw/irq.h"
37 #include "hw/registerfields.h"
38 #include "sysemu/block-backend.h"
39 #include "hw/sd/sd.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"
48 #include "qemu/log.h"
49 #include "qemu/module.h"
50 #include "sdmmc-internal.h"
51 #include "trace.h"
53 //#define DEBUG_SD 1
55 #define SDSC_MAX_CAPACITY (2 * GiB)
57 #define INVALID_ADDRESS UINT32_MAX
59 typedef enum {
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 */
67 sd_r1b = -1,
68 sd_illegal = -2,
69 } sd_rsp_type_t;
71 enum SDCardModes {
72 sd_inactive,
73 sd_card_identification_mode,
74 sd_data_transfer_mode,
77 enum SDCardStates {
78 sd_inactive_state = -1,
79 sd_idle_state = 0,
80 sd_ready_state,
81 sd_identification_state,
82 sd_standby_state,
83 sd_transfer_state,
84 sd_sendingdata_state,
85 sd_receivingdata_state,
86 sd_programming_state,
87 sd_disconnect_state,
90 typedef sd_rsp_type_t (*sd_cmd_handler)(SDState *sd, SDRequest req);
92 typedef struct SDProto {
93 const char *name;
94 sd_cmd_handler cmd[SDMMC_CMD_MAX];
95 sd_cmd_handler acmd[SDMMC_CMD_MAX];
96 } SDProto;
98 struct SDState {
99 DeviceState parent_obj;
101 /* If true, created by sd_init() for a non-qdevified caller */
102 /* TODO purge them with fire */
103 bool me_no_qdev_me_kill_mammoth_with_rocks;
105 /* SD Memory Card Registers */
106 uint32_t ocr;
107 uint8_t scr[8];
108 uint8_t cid[16];
109 uint8_t csd[16];
110 uint16_t rca;
111 uint32_t card_status;
112 uint8_t sd_status[64];
114 /* Static properties */
116 uint8_t spec_version;
117 BlockBackend *blk;
119 /* Runtime changeables */
121 uint32_t mode; /* current card mode, one of SDCardModes */
122 int32_t state; /* current card state, one of SDCardStates */
123 uint32_t vhs;
124 bool wp_switch;
125 unsigned long *wp_group_bmap;
126 int32_t wp_group_bits;
127 uint64_t size;
128 uint32_t blk_len;
129 uint32_t multi_blk_cnt;
130 uint32_t erase_start;
131 uint32_t erase_end;
132 uint8_t pwd[16];
133 uint32_t pwd_len;
134 uint8_t function_group[6];
135 uint8_t current_cmd;
136 /* True if we will handle the next command as an ACMD. Note that this does
137 * *not* track the APP_CMD status bit!
139 bool expecting_acmd;
140 uint32_t blk_written;
141 uint64_t data_start;
142 uint32_t data_offset;
143 uint8_t data[512];
144 qemu_irq readonly_cb;
145 qemu_irq inserted_cb;
146 QEMUTimer *ocr_power_timer;
147 bool enable;
148 uint8_t dat_lines;
149 bool cmd_line;
152 static void sd_realize(DeviceState *dev, Error **errp);
154 static const struct SDProto *sd_proto(SDState *sd)
156 SDCardClass *sc = SD_CARD_GET_CLASS(sd);
158 return sc->proto;
161 static const SDProto sd_proto_spi;
163 static bool sd_is_spi(SDState *sd)
165 return sd_proto(sd) == &sd_proto_spi;
168 static const char *sd_version_str(enum SDPhySpecificationVersion version)
170 static const char *sdphy_version[] = {
171 [SD_PHY_SPECv1_10_VERS] = "v1.10",
172 [SD_PHY_SPECv2_00_VERS] = "v2.00",
173 [SD_PHY_SPECv3_01_VERS] = "v3.01",
175 if (version >= ARRAY_SIZE(sdphy_version)) {
176 return "unsupported version";
178 return sdphy_version[version];
181 static const char *sd_state_name(enum SDCardStates state)
183 static const char *state_name[] = {
184 [sd_idle_state] = "idle",
185 [sd_ready_state] = "ready",
186 [sd_identification_state] = "identification",
187 [sd_standby_state] = "standby",
188 [sd_transfer_state] = "transfer",
189 [sd_sendingdata_state] = "sendingdata",
190 [sd_receivingdata_state] = "receivingdata",
191 [sd_programming_state] = "programming",
192 [sd_disconnect_state] = "disconnect",
194 if (state == sd_inactive_state) {
195 return "inactive";
197 assert(state < ARRAY_SIZE(state_name));
198 return state_name[state];
201 static const char *sd_response_name(sd_rsp_type_t rsp)
203 static const char *response_name[] = {
204 [sd_r0] = "RESP#0 (no response)",
205 [sd_r1] = "RESP#1 (normal cmd)",
206 [sd_r2_i] = "RESP#2 (CID reg)",
207 [sd_r2_s] = "RESP#2 (CSD reg)",
208 [sd_r3] = "RESP#3 (OCR reg)",
209 [sd_r6] = "RESP#6 (RCA)",
210 [sd_r7] = "RESP#7 (operating voltage)",
212 if (rsp == sd_illegal) {
213 return "ILLEGAL RESP";
215 if (rsp == sd_r1b) {
216 rsp = sd_r1;
218 assert(rsp < ARRAY_SIZE(response_name));
219 return response_name[rsp];
222 static uint8_t sd_get_dat_lines(SDState *sd)
224 return sd->enable ? sd->dat_lines : 0;
227 static bool sd_get_cmd_line(SDState *sd)
229 return sd->enable ? sd->cmd_line : false;
232 static void sd_set_voltage(SDState *sd, uint16_t millivolts)
234 trace_sdcard_set_voltage(millivolts);
236 switch (millivolts) {
237 case 3001 ... 3600: /* SD_VOLTAGE_3_3V */
238 case 2001 ... 3000: /* SD_VOLTAGE_3_0V */
239 break;
240 default:
241 qemu_log_mask(LOG_GUEST_ERROR, "SD card voltage not supported: %.3fV",
242 millivolts / 1000.f);
246 static void sd_set_mode(SDState *sd)
248 switch (sd->state) {
249 case sd_inactive_state:
250 sd->mode = sd_inactive;
251 break;
253 case sd_idle_state:
254 case sd_ready_state:
255 case sd_identification_state:
256 sd->mode = sd_card_identification_mode;
257 break;
259 case sd_standby_state:
260 case sd_transfer_state:
261 case sd_sendingdata_state:
262 case sd_receivingdata_state:
263 case sd_programming_state:
264 case sd_disconnect_state:
265 sd->mode = sd_data_transfer_mode;
266 break;
270 static const sd_cmd_type_t sd_cmd_type[SDMMC_CMD_MAX] = {
271 sd_bc, sd_none, sd_bcr, sd_bcr, sd_none, sd_none, sd_none, sd_ac,
272 sd_bcr, sd_ac, sd_ac, sd_adtc, sd_ac, sd_ac, sd_none, sd_ac,
273 /* 16 */
274 sd_ac, sd_adtc, sd_adtc, sd_none, sd_none, sd_none, sd_none, sd_none,
275 sd_adtc, sd_adtc, sd_adtc, sd_adtc, sd_ac, sd_ac, sd_adtc, sd_none,
276 /* 32 */
277 sd_ac, sd_ac, sd_none, sd_none, sd_none, sd_none, sd_ac, sd_none,
278 sd_none, sd_none, sd_bc, sd_none, sd_none, sd_none, sd_none, sd_none,
279 /* 48 */
280 sd_none, sd_none, sd_none, sd_none, sd_none, sd_none, sd_none, sd_ac,
281 sd_adtc, sd_none, sd_none, sd_none, sd_none, sd_none, sd_none, sd_none,
284 static const int sd_cmd_class[SDMMC_CMD_MAX] = {
285 0, 0, 0, 0, 0, 9, 10, 0, 0, 0, 0, 1, 0, 0, 0, 0,
286 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 6, 6, 6, 6,
287 5, 5, 10, 10, 10, 10, 5, 9, 9, 9, 7, 7, 7, 7, 7, 7,
288 7, 7, 10, 7, 9, 9, 9, 8, 8, 10, 8, 8, 8, 8, 8, 8,
291 static uint8_t sd_crc7(const void *message, size_t width)
293 int i, bit;
294 uint8_t shift_reg = 0x00;
295 const uint8_t *msg = (const uint8_t *)message;
297 for (i = 0; i < width; i ++, msg ++)
298 for (bit = 7; bit >= 0; bit --) {
299 shift_reg <<= 1;
300 if ((shift_reg >> 7) ^ ((*msg >> bit) & 1))
301 shift_reg ^= 0x89;
304 return shift_reg;
307 #define OCR_POWER_DELAY_NS 500000 /* 0.5ms */
309 FIELD(OCR, VDD_VOLTAGE_WINDOW, 0, 24)
310 FIELD(OCR, VDD_VOLTAGE_WIN_LO, 0, 8)
311 FIELD(OCR, DUAL_VOLTAGE_CARD, 7, 1)
312 FIELD(OCR, VDD_VOLTAGE_WIN_HI, 8, 16)
313 FIELD(OCR, ACCEPT_SWITCH_1V8, 24, 1) /* Only UHS-I */
314 FIELD(OCR, UHS_II_CARD, 29, 1) /* Only UHS-II */
315 FIELD(OCR, CARD_CAPACITY, 30, 1) /* 0:SDSC, 1:SDHC/SDXC */
316 FIELD(OCR, CARD_POWER_UP, 31, 1)
318 #define ACMD41_ENQUIRY_MASK 0x00ffffff
319 #define ACMD41_R3_MASK (R_OCR_VDD_VOLTAGE_WIN_HI_MASK \
320 | R_OCR_ACCEPT_SWITCH_1V8_MASK \
321 | R_OCR_UHS_II_CARD_MASK \
322 | R_OCR_CARD_CAPACITY_MASK \
323 | R_OCR_CARD_POWER_UP_MASK)
325 static void sd_ocr_powerup(void *opaque)
327 SDState *sd = opaque;
329 trace_sdcard_powerup();
330 assert(!FIELD_EX32(sd->ocr, OCR, CARD_POWER_UP));
332 /* card power-up OK */
333 sd->ocr = FIELD_DP32(sd->ocr, OCR, CARD_POWER_UP, 1);
335 if (sd->size > SDSC_MAX_CAPACITY) {
336 sd->ocr = FIELD_DP32(sd->ocr, OCR, CARD_CAPACITY, 1);
340 static void sd_set_ocr(SDState *sd)
342 /* All voltages OK */
343 sd->ocr = R_OCR_VDD_VOLTAGE_WIN_HI_MASK;
345 if (sd_is_spi(sd)) {
347 * We don't need to emulate power up sequence in SPI-mode.
348 * Thus, the card's power up status bit should be set to 1 when reset.
349 * The card's capacity status bit should also be set if SD card size
350 * is larger than 2GB for SDHC support.
352 sd_ocr_powerup(sd);
356 static void sd_set_scr(SDState *sd)
358 sd->scr[0] = 0 << 4; /* SCR structure version 1.0 */
359 if (sd->spec_version == SD_PHY_SPECv1_10_VERS) {
360 sd->scr[0] |= 1; /* Spec Version 1.10 */
361 } else {
362 sd->scr[0] |= 2; /* Spec Version 2.00 or Version 3.0X */
364 sd->scr[1] = (2 << 4) /* SDSC Card (Security Version 1.01) */
365 | 0b0101; /* 1-bit or 4-bit width bus modes */
366 sd->scr[2] = 0x00; /* Extended Security is not supported. */
367 if (sd->spec_version >= SD_PHY_SPECv3_01_VERS) {
368 sd->scr[2] |= 1 << 7; /* Spec Version 3.0X */
370 sd->scr[3] = 0x00;
371 /* reserved for manufacturer usage */
372 sd->scr[4] = 0x00;
373 sd->scr[5] = 0x00;
374 sd->scr[6] = 0x00;
375 sd->scr[7] = 0x00;
378 #define MID 0xaa
379 #define OID "XY"
380 #define PNM "QEMU!"
381 #define PRV 0x01
382 #define MDT_YR 2006
383 #define MDT_MON 2
385 static void sd_set_cid(SDState *sd)
387 sd->cid[0] = MID; /* Fake card manufacturer ID (MID) */
388 sd->cid[1] = OID[0]; /* OEM/Application ID (OID) */
389 sd->cid[2] = OID[1];
390 sd->cid[3] = PNM[0]; /* Fake product name (PNM) */
391 sd->cid[4] = PNM[1];
392 sd->cid[5] = PNM[2];
393 sd->cid[6] = PNM[3];
394 sd->cid[7] = PNM[4];
395 sd->cid[8] = PRV; /* Fake product revision (PRV) */
396 sd->cid[9] = 0xde; /* Fake serial number (PSN) */
397 sd->cid[10] = 0xad;
398 sd->cid[11] = 0xbe;
399 sd->cid[12] = 0xef;
400 sd->cid[13] = 0x00 | /* Manufacture date (MDT) */
401 ((MDT_YR - 2000) / 10);
402 sd->cid[14] = ((MDT_YR % 10) << 4) | MDT_MON;
403 sd->cid[15] = (sd_crc7(sd->cid, 15) << 1) | 1;
406 #define HWBLOCK_SHIFT 9 /* 512 bytes */
407 #define SECTOR_SHIFT 5 /* 16 kilobytes */
408 #define WPGROUP_SHIFT 7 /* 2 megs */
409 #define CMULT_SHIFT 9 /* 512 times HWBLOCK_SIZE */
410 #define WPGROUP_SIZE (1 << (HWBLOCK_SHIFT + SECTOR_SHIFT + WPGROUP_SHIFT))
412 static const uint8_t sd_csd_rw_mask[16] = {
413 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
414 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfe,
417 static void sd_set_csd(SDState *sd, uint64_t size)
419 int hwblock_shift = HWBLOCK_SHIFT;
420 uint32_t csize;
421 uint32_t sectsize = (1 << (SECTOR_SHIFT + 1)) - 1;
422 uint32_t wpsize = (1 << (WPGROUP_SHIFT + 1)) - 1;
424 /* To indicate 2 GiB card, BLOCK_LEN shall be 1024 bytes */
425 if (size == SDSC_MAX_CAPACITY) {
426 hwblock_shift += 1;
428 csize = (size >> (CMULT_SHIFT + hwblock_shift)) - 1;
430 if (size <= SDSC_MAX_CAPACITY) { /* Standard Capacity SD */
431 sd->csd[0] = 0x00; /* CSD structure */
432 sd->csd[1] = 0x26; /* Data read access-time-1 */
433 sd->csd[2] = 0x00; /* Data read access-time-2 */
434 sd->csd[3] = 0x32; /* Max. data transfer rate: 25 MHz */
435 sd->csd[4] = 0x5f; /* Card Command Classes */
436 sd->csd[5] = 0x50 | /* Max. read data block length */
437 hwblock_shift;
438 sd->csd[6] = 0xe0 | /* Partial block for read allowed */
439 ((csize >> 10) & 0x03);
440 sd->csd[7] = 0x00 | /* Device size */
441 ((csize >> 2) & 0xff);
442 sd->csd[8] = 0x3f | /* Max. read current */
443 ((csize << 6) & 0xc0);
444 sd->csd[9] = 0xfc | /* Max. write current */
445 ((CMULT_SHIFT - 2) >> 1);
446 sd->csd[10] = 0x40 | /* Erase sector size */
447 (((CMULT_SHIFT - 2) << 7) & 0x80) | (sectsize >> 1);
448 sd->csd[11] = 0x00 | /* Write protect group size */
449 ((sectsize << 7) & 0x80) | wpsize;
450 sd->csd[12] = 0x90 | /* Write speed factor */
451 (hwblock_shift >> 2);
452 sd->csd[13] = 0x20 | /* Max. write data block length */
453 ((hwblock_shift << 6) & 0xc0);
454 sd->csd[14] = 0x00; /* File format group */
455 } else { /* SDHC */
456 size /= 512 * KiB;
457 size -= 1;
458 sd->csd[0] = 0x40;
459 sd->csd[1] = 0x0e;
460 sd->csd[2] = 0x00;
461 sd->csd[3] = 0x32;
462 sd->csd[4] = 0x5b;
463 sd->csd[5] = 0x59;
464 sd->csd[6] = 0x00;
465 sd->csd[7] = (size >> 16) & 0xff;
466 sd->csd[8] = (size >> 8) & 0xff;
467 sd->csd[9] = (size & 0xff);
468 sd->csd[10] = 0x7f;
469 sd->csd[11] = 0x80;
470 sd->csd[12] = 0x0a;
471 sd->csd[13] = 0x40;
472 sd->csd[14] = 0x00;
474 sd->csd[15] = (sd_crc7(sd->csd, 15) << 1) | 1;
477 static void sd_set_rca(SDState *sd)
479 sd->rca += 0x4567;
482 FIELD(CSR, AKE_SEQ_ERROR, 3, 1)
483 FIELD(CSR, APP_CMD, 5, 1)
484 FIELD(CSR, FX_EVENT, 6, 1)
485 FIELD(CSR, READY_FOR_DATA, 8, 1)
486 FIELD(CSR, CURRENT_STATE, 9, 4)
487 FIELD(CSR, ERASE_RESET, 13, 1)
488 FIELD(CSR, CARD_ECC_DISABLED, 14, 1)
489 FIELD(CSR, WP_ERASE_SKIP, 15, 1)
490 FIELD(CSR, CSD_OVERWRITE, 16, 1)
491 FIELD(CSR, DEFERRED_RESPONSE, 17, 1)
492 FIELD(CSR, ERROR, 19, 1)
493 FIELD(CSR, CC_ERROR, 20, 1)
494 FIELD(CSR, CARD_ECC_FAILED, 21, 1)
495 FIELD(CSR, ILLEGAL_COMMAND, 22, 1)
496 FIELD(CSR, COM_CRC_ERROR, 23, 1)
497 FIELD(CSR, LOCK_UNLOCK_FAILED, 24, 1)
498 FIELD(CSR, CARD_IS_LOCKED, 25, 1)
499 FIELD(CSR, WP_VIOLATION, 26, 1)
500 FIELD(CSR, ERASE_PARAM, 27, 1)
501 FIELD(CSR, ERASE_SEQ_ERROR, 28, 1)
502 FIELD(CSR, BLOCK_LEN_ERROR, 29, 1)
503 FIELD(CSR, ADDRESS_ERROR, 30, 1)
504 FIELD(CSR, OUT_OF_RANGE, 31, 1)
506 /* Card status bits, split by clear condition:
507 * A : According to the card current state
508 * B : Always related to the previous command
509 * C : Cleared by read
511 #define CARD_STATUS_A (R_CSR_READY_FOR_DATA_MASK \
512 | R_CSR_CARD_ECC_DISABLED_MASK \
513 | R_CSR_CARD_IS_LOCKED_MASK)
514 #define CARD_STATUS_B (R_CSR_CURRENT_STATE_MASK \
515 | R_CSR_ILLEGAL_COMMAND_MASK \
516 | R_CSR_COM_CRC_ERROR_MASK)
517 #define CARD_STATUS_C (R_CSR_AKE_SEQ_ERROR_MASK \
518 | R_CSR_APP_CMD_MASK \
519 | R_CSR_ERASE_RESET_MASK \
520 | R_CSR_WP_ERASE_SKIP_MASK \
521 | R_CSR_CSD_OVERWRITE_MASK \
522 | R_CSR_ERROR_MASK \
523 | R_CSR_CC_ERROR_MASK \
524 | R_CSR_CARD_ECC_FAILED_MASK \
525 | R_CSR_LOCK_UNLOCK_FAILED_MASK \
526 | R_CSR_WP_VIOLATION_MASK \
527 | R_CSR_ERASE_PARAM_MASK \
528 | R_CSR_ERASE_SEQ_ERROR_MASK \
529 | R_CSR_BLOCK_LEN_ERROR_MASK \
530 | R_CSR_ADDRESS_ERROR_MASK \
531 | R_CSR_OUT_OF_RANGE_MASK)
533 static void sd_set_cardstatus(SDState *sd)
535 sd->card_status = 0x00000100;
538 static void sd_set_sdstatus(SDState *sd)
540 memset(sd->sd_status, 0, 64);
543 static int sd_req_crc_validate(SDRequest *req)
545 uint8_t buffer[5];
546 buffer[0] = 0x40 | req->cmd;
547 stl_be_p(&buffer[1], req->arg);
548 return 0;
549 return sd_crc7(buffer, 5) != req->crc; /* TODO */
552 static void sd_response_r1_make(SDState *sd, uint8_t *response)
554 stl_be_p(response, sd->card_status);
556 /* Clear the "clear on read" status bits */
557 sd->card_status &= ~CARD_STATUS_C;
560 static void sd_response_r3_make(SDState *sd, uint8_t *response)
562 stl_be_p(response, sd->ocr & ACMD41_R3_MASK);
565 static void sd_response_r6_make(SDState *sd, uint8_t *response)
567 uint16_t status;
569 status = ((sd->card_status >> 8) & 0xc000) |
570 ((sd->card_status >> 6) & 0x2000) |
571 (sd->card_status & 0x1fff);
572 sd->card_status &= ~(CARD_STATUS_C & 0xc81fff);
573 stw_be_p(response + 0, sd->rca);
574 stw_be_p(response + 2, status);
577 static void sd_response_r7_make(SDState *sd, uint8_t *response)
579 stl_be_p(response, sd->vhs);
582 static inline uint64_t sd_addr_to_wpnum(uint64_t addr)
584 return addr >> (HWBLOCK_SHIFT + SECTOR_SHIFT + WPGROUP_SHIFT);
587 static void sd_reset(DeviceState *dev)
589 SDState *sd = SD_CARD(dev);
590 uint64_t size;
591 uint64_t sect;
593 trace_sdcard_reset();
594 if (sd->blk) {
595 blk_get_geometry(sd->blk, &sect);
596 } else {
597 sect = 0;
599 size = sect << 9;
601 sect = sd_addr_to_wpnum(size) + 1;
603 sd->state = sd_idle_state;
604 sd->rca = 0x0000;
605 sd->size = size;
606 sd_set_ocr(sd);
607 sd_set_scr(sd);
608 sd_set_cid(sd);
609 sd_set_csd(sd, size);
610 sd_set_cardstatus(sd);
611 sd_set_sdstatus(sd);
613 g_free(sd->wp_group_bmap);
614 sd->wp_switch = sd->blk ? !blk_is_writable(sd->blk) : false;
615 sd->wp_group_bits = sect;
616 sd->wp_group_bmap = bitmap_new(sd->wp_group_bits);
617 memset(sd->function_group, 0, sizeof(sd->function_group));
618 sd->erase_start = INVALID_ADDRESS;
619 sd->erase_end = INVALID_ADDRESS;
620 sd->blk_len = 0x200;
621 sd->pwd_len = 0;
622 sd->expecting_acmd = false;
623 sd->dat_lines = 0xf;
624 sd->cmd_line = true;
625 sd->multi_blk_cnt = 0;
628 static bool sd_get_inserted(SDState *sd)
630 return sd->blk && blk_is_inserted(sd->blk);
633 static bool sd_get_readonly(SDState *sd)
635 return sd->wp_switch;
638 static void sd_cardchange(void *opaque, bool load, Error **errp)
640 SDState *sd = opaque;
641 DeviceState *dev = DEVICE(sd);
642 SDBus *sdbus;
643 bool inserted = sd_get_inserted(sd);
644 bool readonly = sd_get_readonly(sd);
646 if (inserted) {
647 trace_sdcard_inserted(readonly);
648 sd_reset(dev);
649 } else {
650 trace_sdcard_ejected();
653 if (sd->me_no_qdev_me_kill_mammoth_with_rocks) {
654 qemu_set_irq(sd->inserted_cb, inserted);
655 if (inserted) {
656 qemu_set_irq(sd->readonly_cb, readonly);
658 } else {
659 sdbus = SD_BUS(qdev_get_parent_bus(dev));
660 sdbus_set_inserted(sdbus, inserted);
661 if (inserted) {
662 sdbus_set_readonly(sdbus, readonly);
667 static const BlockDevOps sd_block_ops = {
668 .change_media_cb = sd_cardchange,
671 static bool sd_ocr_vmstate_needed(void *opaque)
673 SDState *sd = opaque;
675 /* Include the OCR state (and timer) if it is not yet powered up */
676 return !FIELD_EX32(sd->ocr, OCR, CARD_POWER_UP);
679 static const VMStateDescription sd_ocr_vmstate = {
680 .name = "sd-card/ocr-state",
681 .version_id = 1,
682 .minimum_version_id = 1,
683 .needed = sd_ocr_vmstate_needed,
684 .fields = (VMStateField[]) {
685 VMSTATE_UINT32(ocr, SDState),
686 VMSTATE_TIMER_PTR(ocr_power_timer, SDState),
687 VMSTATE_END_OF_LIST()
691 static int sd_vmstate_pre_load(void *opaque)
693 SDState *sd = opaque;
695 /* If the OCR state is not included (prior versions, or not
696 * needed), then the OCR must be set as powered up. If the OCR state
697 * is included, this will be replaced by the state restore.
699 sd_ocr_powerup(sd);
701 return 0;
704 static const VMStateDescription sd_vmstate = {
705 .name = "sd-card",
706 .version_id = 2,
707 .minimum_version_id = 2,
708 .pre_load = sd_vmstate_pre_load,
709 .fields = (VMStateField[]) {
710 VMSTATE_UINT32(mode, SDState),
711 VMSTATE_INT32(state, SDState),
712 VMSTATE_UINT8_ARRAY(cid, SDState, 16),
713 VMSTATE_UINT8_ARRAY(csd, SDState, 16),
714 VMSTATE_UINT16(rca, SDState),
715 VMSTATE_UINT32(card_status, SDState),
716 VMSTATE_PARTIAL_BUFFER(sd_status, SDState, 1),
717 VMSTATE_UINT32(vhs, SDState),
718 VMSTATE_BITMAP(wp_group_bmap, SDState, 0, wp_group_bits),
719 VMSTATE_UINT32(blk_len, SDState),
720 VMSTATE_UINT32(multi_blk_cnt, SDState),
721 VMSTATE_UINT32(erase_start, SDState),
722 VMSTATE_UINT32(erase_end, SDState),
723 VMSTATE_UINT8_ARRAY(pwd, SDState, 16),
724 VMSTATE_UINT32(pwd_len, SDState),
725 VMSTATE_UINT8_ARRAY(function_group, SDState, 6),
726 VMSTATE_UINT8(current_cmd, SDState),
727 VMSTATE_BOOL(expecting_acmd, SDState),
728 VMSTATE_UINT32(blk_written, SDState),
729 VMSTATE_UINT64(data_start, SDState),
730 VMSTATE_UINT32(data_offset, SDState),
731 VMSTATE_UINT8_ARRAY(data, SDState, 512),
732 VMSTATE_UNUSED_V(1, 512),
733 VMSTATE_BOOL(enable, SDState),
734 VMSTATE_END_OF_LIST()
736 .subsections = (const VMStateDescription*[]) {
737 &sd_ocr_vmstate,
738 NULL
742 /* Legacy initialization function for use by non-qdevified callers */
743 SDState *sd_init(BlockBackend *blk, bool is_spi)
745 Object *obj;
746 DeviceState *dev;
747 SDState *sd;
748 Error *err = NULL;
750 obj = object_new(is_spi ? TYPE_SD_CARD_SPI : TYPE_SD_CARD);
751 dev = DEVICE(obj);
752 if (!qdev_prop_set_drive_err(dev, "drive", blk, &err)) {
753 error_reportf_err(err, "sd_init failed: ");
754 return NULL;
758 * Realizing the device properly would put it into the QOM
759 * composition tree even though it is not plugged into an
760 * appropriate bus. That's a no-no. Hide the device from
761 * QOM/qdev, and call its qdev realize callback directly.
763 object_ref(obj);
764 object_unparent(obj);
765 sd_realize(dev, &err);
766 if (err) {
767 error_reportf_err(err, "sd_init failed: ");
768 return NULL;
771 sd = SD_CARD(dev);
772 sd->me_no_qdev_me_kill_mammoth_with_rocks = true;
773 return sd;
776 void sd_set_cb(SDState *sd, qemu_irq readonly, qemu_irq insert)
778 sd->readonly_cb = readonly;
779 sd->inserted_cb = insert;
780 qemu_set_irq(readonly, sd->blk ? !blk_is_writable(sd->blk) : 0);
781 qemu_set_irq(insert, sd->blk ? blk_is_inserted(sd->blk) : 0);
784 static void sd_blk_read(SDState *sd, uint64_t addr, uint32_t len)
786 trace_sdcard_read_block(addr, len);
787 if (!sd->blk || blk_pread(sd->blk, addr, len, sd->data, 0) < 0) {
788 fprintf(stderr, "sd_blk_read: read error on host side\n");
792 static void sd_blk_write(SDState *sd, uint64_t addr, uint32_t len)
794 trace_sdcard_write_block(addr, len);
795 if (!sd->blk || blk_pwrite(sd->blk, addr, len, sd->data, 0) < 0) {
796 fprintf(stderr, "sd_blk_write: write error on host side\n");
800 #define BLK_READ_BLOCK(a, len) sd_blk_read(sd, a, len)
801 #define BLK_WRITE_BLOCK(a, len) sd_blk_write(sd, a, len)
802 #define APP_READ_BLOCK(a, len) memset(sd->data, 0xec, len)
803 #define APP_WRITE_BLOCK(a, len)
805 static void sd_erase(SDState *sd)
807 uint64_t erase_start = sd->erase_start;
808 uint64_t erase_end = sd->erase_end;
809 bool sdsc = true;
810 uint64_t wpnum;
811 uint64_t erase_addr;
812 int erase_len = 1 << HWBLOCK_SHIFT;
814 trace_sdcard_erase(sd->erase_start, sd->erase_end);
815 if (sd->erase_start == INVALID_ADDRESS
816 || sd->erase_end == INVALID_ADDRESS) {
817 sd->card_status |= ERASE_SEQ_ERROR;
818 sd->erase_start = INVALID_ADDRESS;
819 sd->erase_end = INVALID_ADDRESS;
820 return;
823 if (FIELD_EX32(sd->ocr, OCR, CARD_CAPACITY)) {
824 /* High capacity memory card: erase units are 512 byte blocks */
825 erase_start *= 512;
826 erase_end *= 512;
827 sdsc = false;
830 if (erase_start > sd->size || erase_end > sd->size) {
831 sd->card_status |= OUT_OF_RANGE;
832 sd->erase_start = INVALID_ADDRESS;
833 sd->erase_end = INVALID_ADDRESS;
834 return;
837 sd->erase_start = INVALID_ADDRESS;
838 sd->erase_end = INVALID_ADDRESS;
839 sd->csd[14] |= 0x40;
841 memset(sd->data, 0xff, erase_len);
842 for (erase_addr = erase_start; erase_addr <= erase_end;
843 erase_addr += erase_len) {
844 if (sdsc) {
845 /* Only SDSC cards support write protect groups */
846 wpnum = sd_addr_to_wpnum(erase_addr);
847 assert(wpnum < sd->wp_group_bits);
848 if (test_bit(wpnum, sd->wp_group_bmap)) {
849 sd->card_status |= WP_ERASE_SKIP;
850 continue;
853 BLK_WRITE_BLOCK(erase_addr, erase_len);
857 static uint32_t sd_wpbits(SDState *sd, uint64_t addr)
859 uint32_t i, wpnum;
860 uint32_t ret = 0;
862 wpnum = sd_addr_to_wpnum(addr);
864 for (i = 0; i < 32; i++, wpnum++, addr += WPGROUP_SIZE) {
865 if (addr >= sd->size) {
867 * If the addresses of the last groups are outside the valid range,
868 * then the corresponding write protection bits shall be set to 0.
870 continue;
872 assert(wpnum < sd->wp_group_bits);
873 if (test_bit(wpnum, sd->wp_group_bmap)) {
874 ret |= (1 << i);
878 return ret;
881 static void sd_function_switch(SDState *sd, uint32_t arg)
883 int i, mode, new_func;
884 mode = !!(arg & 0x80000000);
886 sd->data[0] = 0x00; /* Maximum current consumption */
887 sd->data[1] = 0x01;
888 sd->data[2] = 0x80; /* Supported group 6 functions */
889 sd->data[3] = 0x01;
890 sd->data[4] = 0x80; /* Supported group 5 functions */
891 sd->data[5] = 0x01;
892 sd->data[6] = 0x80; /* Supported group 4 functions */
893 sd->data[7] = 0x01;
894 sd->data[8] = 0x80; /* Supported group 3 functions */
895 sd->data[9] = 0x01;
896 sd->data[10] = 0x80; /* Supported group 2 functions */
897 sd->data[11] = 0x43;
898 sd->data[12] = 0x80; /* Supported group 1 functions */
899 sd->data[13] = 0x03;
901 memset(&sd->data[14], 0, 3);
902 for (i = 0; i < 6; i ++) {
903 new_func = (arg >> (i * 4)) & 0x0f;
904 if (mode && new_func != 0x0f)
905 sd->function_group[i] = new_func;
906 sd->data[16 - (i >> 1)] |= new_func << ((i % 2) * 4);
908 memset(&sd->data[17], 0, 47);
911 static inline bool sd_wp_addr(SDState *sd, uint64_t addr)
913 return test_bit(sd_addr_to_wpnum(addr), sd->wp_group_bmap);
916 static void sd_lock_command(SDState *sd)
918 int erase, lock, clr_pwd, set_pwd, pwd_len;
919 erase = !!(sd->data[0] & 0x08);
920 lock = sd->data[0] & 0x04;
921 clr_pwd = sd->data[0] & 0x02;
922 set_pwd = sd->data[0] & 0x01;
924 if (sd->blk_len > 1)
925 pwd_len = sd->data[1];
926 else
927 pwd_len = 0;
929 if (lock) {
930 trace_sdcard_lock();
931 } else {
932 trace_sdcard_unlock();
934 if (erase) {
935 if (!(sd->card_status & CARD_IS_LOCKED) || sd->blk_len > 1 ||
936 set_pwd || clr_pwd || lock || sd->wp_switch ||
937 (sd->csd[14] & 0x20)) {
938 sd->card_status |= LOCK_UNLOCK_FAILED;
939 return;
941 bitmap_zero(sd->wp_group_bmap, sd->wp_group_bits);
942 sd->csd[14] &= ~0x10;
943 sd->card_status &= ~CARD_IS_LOCKED;
944 sd->pwd_len = 0;
945 /* Erasing the entire card here! */
946 fprintf(stderr, "SD: Card force-erased by CMD42\n");
947 return;
950 if (sd->blk_len < 2 + pwd_len ||
951 pwd_len <= sd->pwd_len ||
952 pwd_len > sd->pwd_len + 16) {
953 sd->card_status |= LOCK_UNLOCK_FAILED;
954 return;
957 if (sd->pwd_len && memcmp(sd->pwd, sd->data + 2, sd->pwd_len)) {
958 sd->card_status |= LOCK_UNLOCK_FAILED;
959 return;
962 pwd_len -= sd->pwd_len;
963 if ((pwd_len && !set_pwd) ||
964 (clr_pwd && (set_pwd || lock)) ||
965 (lock && !sd->pwd_len && !set_pwd) ||
966 (!set_pwd && !clr_pwd &&
967 (((sd->card_status & CARD_IS_LOCKED) && lock) ||
968 (!(sd->card_status & CARD_IS_LOCKED) && !lock)))) {
969 sd->card_status |= LOCK_UNLOCK_FAILED;
970 return;
973 if (set_pwd) {
974 memcpy(sd->pwd, sd->data + 2 + sd->pwd_len, pwd_len);
975 sd->pwd_len = pwd_len;
978 if (clr_pwd) {
979 sd->pwd_len = 0;
982 if (lock)
983 sd->card_status |= CARD_IS_LOCKED;
984 else
985 sd->card_status &= ~CARD_IS_LOCKED;
988 static bool address_in_range(SDState *sd, const char *desc,
989 uint64_t addr, uint32_t length)
991 if (addr + length > sd->size) {
992 qemu_log_mask(LOG_GUEST_ERROR,
993 "%s offset %"PRIu64" > card %"PRIu64" [%%%u]\n",
994 desc, addr, sd->size, length);
995 sd->card_status |= ADDRESS_ERROR;
996 return false;
998 return true;
1001 static sd_rsp_type_t sd_invalid_state_for_cmd(SDState *sd, SDRequest req)
1003 qemu_log_mask(LOG_GUEST_ERROR, "%s: CMD%i in a wrong state: %s (spec %s)\n",
1004 sd_proto(sd)->name, req.cmd, sd_state_name(sd->state),
1005 sd_version_str(sd->spec_version));
1007 return sd_illegal;
1010 static sd_rsp_type_t sd_cmd_illegal(SDState *sd, SDRequest req)
1012 qemu_log_mask(LOG_GUEST_ERROR, "%s: Unknown CMD%i for spec %s\n",
1013 sd_proto(sd)->name, req.cmd,
1014 sd_version_str(sd->spec_version));
1016 return sd_illegal;
1019 /* Commands that are recognised but not yet implemented. */
1020 static sd_rsp_type_t sd_cmd_unimplemented(SDState *sd, SDRequest req)
1022 qemu_log_mask(LOG_UNIMP, "%s: CMD%i not implemented\n",
1023 sd_proto(sd)->name, req.cmd);
1025 return sd_illegal;
1028 static sd_rsp_type_t sd_cmd_GO_IDLE_STATE(SDState *sd, SDRequest req)
1030 if (sd->state != sd_inactive_state) {
1031 sd->state = sd_idle_state;
1032 sd_reset(DEVICE(sd));
1035 return sd_is_spi(sd) ? sd_r1 : sd_r0;
1038 static sd_rsp_type_t sd_cmd_SEND_OP_CMD(SDState *sd, SDRequest req)
1040 sd->state = sd_transfer_state;
1042 return sd_r1;
1045 static sd_rsp_type_t sd_cmd_ALL_SEND_CID(SDState *sd, SDRequest req)
1047 if (sd->state != sd_ready_state) {
1048 return sd_invalid_state_for_cmd(sd, req);
1051 sd->state = sd_identification_state;
1053 return sd_r2_i;
1056 static sd_rsp_type_t sd_cmd_SEND_RELATIVE_ADDR(SDState *sd, SDRequest req)
1058 switch (sd->state) {
1059 case sd_identification_state:
1060 case sd_standby_state:
1061 sd->state = sd_standby_state;
1062 sd_set_rca(sd);
1063 return sd_r6;
1065 default:
1066 return sd_invalid_state_for_cmd(sd, req);
1070 static sd_rsp_type_t sd_cmd_SEND_TUNING_BLOCK(SDState *sd, SDRequest req)
1072 if (sd->spec_version < SD_PHY_SPECv3_01_VERS) {
1073 return sd_cmd_illegal(sd, req);
1076 if (sd->state != sd_transfer_state) {
1077 return sd_invalid_state_for_cmd(sd, req);
1080 sd->state = sd_sendingdata_state;
1081 sd->data_offset = 0;
1083 return sd_r1;
1086 static sd_rsp_type_t sd_cmd_SET_BLOCK_COUNT(SDState *sd, SDRequest req)
1088 if (sd->spec_version < SD_PHY_SPECv3_01_VERS) {
1089 return sd_cmd_illegal(sd, req);
1092 if (sd->state != sd_transfer_state) {
1093 return sd_invalid_state_for_cmd(sd, req);
1096 sd->multi_blk_cnt = req.arg;
1098 return sd_r1;
1101 static sd_rsp_type_t sd_normal_command(SDState *sd, SDRequest req)
1103 uint32_t rca = 0x0000;
1104 uint64_t addr = (sd->ocr & (1 << 30)) ? (uint64_t) req.arg << 9 : req.arg;
1106 /* CMD55 precedes an ACMD, so we are not interested in tracing it.
1107 * However there is no ACMD55, so we want to trace this particular case.
1109 if (req.cmd != 55 || sd->expecting_acmd) {
1110 trace_sdcard_normal_command(sd_proto(sd)->name,
1111 sd_cmd_name(req.cmd), req.cmd,
1112 req.arg, sd_state_name(sd->state));
1115 /* Not interpreting this as an app command */
1116 sd->card_status &= ~APP_CMD;
1118 if (sd_cmd_type[req.cmd] == sd_ac
1119 || sd_cmd_type[req.cmd] == sd_adtc) {
1120 rca = req.arg >> 16;
1123 /* CMD23 (set block count) must be immediately followed by CMD18 or CMD25
1124 * if not, its effects are cancelled */
1125 if (sd->multi_blk_cnt != 0 && !(req.cmd == 18 || req.cmd == 25)) {
1126 sd->multi_blk_cnt = 0;
1129 if (sd_cmd_class[req.cmd] == 6 && FIELD_EX32(sd->ocr, OCR, CARD_CAPACITY)) {
1130 /* Only Standard Capacity cards support class 6 commands */
1131 return sd_illegal;
1134 if (sd_proto(sd)->cmd[req.cmd]) {
1135 return sd_proto(sd)->cmd[req.cmd](sd, req);
1138 switch (req.cmd) {
1139 /* Basic commands (Class 0 and Class 1) */
1140 case 4: /* CMD4: SEND_DSR */
1141 switch (sd->state) {
1142 case sd_standby_state:
1143 break;
1145 default:
1146 break;
1148 break;
1150 case 6: /* CMD6: SWITCH_FUNCTION */
1151 switch (sd->mode) {
1152 case sd_data_transfer_mode:
1153 sd_function_switch(sd, req.arg);
1154 sd->state = sd_sendingdata_state;
1155 sd->data_start = 0;
1156 sd->data_offset = 0;
1157 return sd_r1;
1159 default:
1160 break;
1162 break;
1164 case 7: /* CMD7: SELECT/DESELECT_CARD */
1165 switch (sd->state) {
1166 case sd_standby_state:
1167 if (sd->rca != rca)
1168 return sd_r0;
1170 sd->state = sd_transfer_state;
1171 return sd_r1b;
1173 case sd_transfer_state:
1174 case sd_sendingdata_state:
1175 if (sd->rca == rca)
1176 break;
1178 sd->state = sd_standby_state;
1179 return sd_r1b;
1181 case sd_disconnect_state:
1182 if (sd->rca != rca)
1183 return sd_r0;
1185 sd->state = sd_programming_state;
1186 return sd_r1b;
1188 case sd_programming_state:
1189 if (sd->rca == rca)
1190 break;
1192 sd->state = sd_disconnect_state;
1193 return sd_r1b;
1195 default:
1196 break;
1198 break;
1200 case 8: /* CMD8: SEND_IF_COND */
1201 if (sd->spec_version < SD_PHY_SPECv2_00_VERS) {
1202 break;
1204 if (sd->state != sd_idle_state) {
1205 break;
1207 sd->vhs = 0;
1209 /* No response if not exactly one VHS bit is set. */
1210 if (!(req.arg >> 8) || (req.arg >> (ctz32(req.arg & ~0xff) + 1))) {
1211 return sd_is_spi(sd) ? sd_r7 : sd_r0;
1214 /* Accept. */
1215 sd->vhs = req.arg;
1216 return sd_r7;
1218 case 9: /* CMD9: SEND_CSD */
1219 switch (sd->state) {
1220 case sd_standby_state:
1221 if (sd->rca != rca)
1222 return sd_r0;
1224 return sd_r2_s;
1226 case sd_transfer_state:
1227 if (!sd_is_spi(sd)) {
1228 break;
1230 sd->state = sd_sendingdata_state;
1231 memcpy(sd->data, sd->csd, 16);
1232 sd->data_start = addr;
1233 sd->data_offset = 0;
1234 return sd_r1;
1236 default:
1237 break;
1239 break;
1241 case 10: /* CMD10: SEND_CID */
1242 switch (sd->state) {
1243 case sd_standby_state:
1244 if (sd->rca != rca)
1245 return sd_r0;
1247 return sd_r2_i;
1249 case sd_transfer_state:
1250 if (!sd_is_spi(sd)) {
1251 break;
1253 sd->state = sd_sendingdata_state;
1254 memcpy(sd->data, sd->cid, 16);
1255 sd->data_start = addr;
1256 sd->data_offset = 0;
1257 return sd_r1;
1259 default:
1260 break;
1262 break;
1264 case 12: /* CMD12: STOP_TRANSMISSION */
1265 switch (sd->state) {
1266 case sd_sendingdata_state:
1267 sd->state = sd_transfer_state;
1268 return sd_r1b;
1270 case sd_receivingdata_state:
1271 sd->state = sd_programming_state;
1272 /* Bzzzzzzztt .... Operation complete. */
1273 sd->state = sd_transfer_state;
1274 return sd_r1b;
1276 default:
1277 break;
1279 break;
1281 case 13: /* CMD13: SEND_STATUS */
1282 switch (sd->mode) {
1283 case sd_data_transfer_mode:
1284 if (!sd_is_spi(sd) && sd->rca != rca) {
1285 return sd_r0;
1288 return sd_r1;
1290 default:
1291 break;
1293 break;
1295 case 15: /* CMD15: GO_INACTIVE_STATE */
1296 switch (sd->mode) {
1297 case sd_data_transfer_mode:
1298 if (sd->rca != rca)
1299 return sd_r0;
1301 sd->state = sd_inactive_state;
1302 return sd_r0;
1304 default:
1305 break;
1307 break;
1309 /* Block read commands (Classs 2) */
1310 case 16: /* CMD16: SET_BLOCKLEN */
1311 switch (sd->state) {
1312 case sd_transfer_state:
1313 if (req.arg > (1 << HWBLOCK_SHIFT)) {
1314 sd->card_status |= BLOCK_LEN_ERROR;
1315 } else {
1316 trace_sdcard_set_blocklen(req.arg);
1317 sd->blk_len = req.arg;
1320 return sd_r1;
1322 default:
1323 break;
1325 break;
1327 case 17: /* CMD17: READ_SINGLE_BLOCK */
1328 case 18: /* CMD18: READ_MULTIPLE_BLOCK */
1329 switch (sd->state) {
1330 case sd_transfer_state:
1332 if (!address_in_range(sd, "READ_BLOCK", addr, sd->blk_len)) {
1333 return sd_r1;
1336 sd->state = sd_sendingdata_state;
1337 sd->data_start = addr;
1338 sd->data_offset = 0;
1339 return sd_r1;
1341 default:
1342 break;
1344 break;
1346 /* Block write commands (Class 4) */
1347 case 24: /* CMD24: WRITE_SINGLE_BLOCK */
1348 case 25: /* CMD25: WRITE_MULTIPLE_BLOCK */
1349 switch (sd->state) {
1350 case sd_transfer_state:
1352 if (!address_in_range(sd, "WRITE_BLOCK", addr, sd->blk_len)) {
1353 return sd_r1;
1356 sd->state = sd_receivingdata_state;
1357 sd->data_start = addr;
1358 sd->data_offset = 0;
1359 sd->blk_written = 0;
1361 if (sd->size <= SDSC_MAX_CAPACITY) {
1362 if (sd_wp_addr(sd, sd->data_start)) {
1363 sd->card_status |= WP_VIOLATION;
1366 if (sd->csd[14] & 0x30) {
1367 sd->card_status |= WP_VIOLATION;
1369 return sd_r1;
1371 default:
1372 break;
1374 break;
1376 case 26: /* CMD26: PROGRAM_CID */
1377 switch (sd->state) {
1378 case sd_transfer_state:
1379 sd->state = sd_receivingdata_state;
1380 sd->data_start = 0;
1381 sd->data_offset = 0;
1382 return sd_r1;
1384 default:
1385 break;
1387 break;
1389 case 27: /* CMD27: PROGRAM_CSD */
1390 switch (sd->state) {
1391 case sd_transfer_state:
1392 sd->state = sd_receivingdata_state;
1393 sd->data_start = 0;
1394 sd->data_offset = 0;
1395 return sd_r1;
1397 default:
1398 break;
1400 break;
1402 /* Write protection (Class 6) */
1403 case 28: /* CMD28: SET_WRITE_PROT */
1404 if (sd->size > SDSC_MAX_CAPACITY) {
1405 return sd_illegal;
1408 switch (sd->state) {
1409 case sd_transfer_state:
1410 if (!address_in_range(sd, "SET_WRITE_PROT", addr, 1)) {
1411 return sd_r1b;
1414 sd->state = sd_programming_state;
1415 set_bit(sd_addr_to_wpnum(addr), sd->wp_group_bmap);
1416 /* Bzzzzzzztt .... Operation complete. */
1417 sd->state = sd_transfer_state;
1418 return sd_r1b;
1420 default:
1421 break;
1423 break;
1425 case 29: /* CMD29: CLR_WRITE_PROT */
1426 if (sd->size > SDSC_MAX_CAPACITY) {
1427 return sd_illegal;
1430 switch (sd->state) {
1431 case sd_transfer_state:
1432 if (!address_in_range(sd, "CLR_WRITE_PROT", addr, 1)) {
1433 return sd_r1b;
1436 sd->state = sd_programming_state;
1437 clear_bit(sd_addr_to_wpnum(addr), sd->wp_group_bmap);
1438 /* Bzzzzzzztt .... Operation complete. */
1439 sd->state = sd_transfer_state;
1440 return sd_r1b;
1442 default:
1443 break;
1445 break;
1447 case 30: /* CMD30: SEND_WRITE_PROT */
1448 if (sd->size > SDSC_MAX_CAPACITY) {
1449 return sd_illegal;
1452 switch (sd->state) {
1453 case sd_transfer_state:
1454 if (!address_in_range(sd, "SEND_WRITE_PROT",
1455 req.arg, sd->blk_len)) {
1456 return sd_r1;
1459 sd->state = sd_sendingdata_state;
1460 *(uint32_t *) sd->data = sd_wpbits(sd, req.arg);
1461 sd->data_start = addr;
1462 sd->data_offset = 0;
1463 return sd_r1;
1465 default:
1466 break;
1468 break;
1470 /* Erase commands (Class 5) */
1471 case 32: /* CMD32: ERASE_WR_BLK_START */
1472 switch (sd->state) {
1473 case sd_transfer_state:
1474 sd->erase_start = req.arg;
1475 return sd_r1;
1477 default:
1478 break;
1480 break;
1482 case 33: /* CMD33: ERASE_WR_BLK_END */
1483 switch (sd->state) {
1484 case sd_transfer_state:
1485 sd->erase_end = req.arg;
1486 return sd_r1;
1488 default:
1489 break;
1491 break;
1493 case 38: /* CMD38: ERASE */
1494 switch (sd->state) {
1495 case sd_transfer_state:
1496 if (sd->csd[14] & 0x30) {
1497 sd->card_status |= WP_VIOLATION;
1498 return sd_r1b;
1501 sd->state = sd_programming_state;
1502 sd_erase(sd);
1503 /* Bzzzzzzztt .... Operation complete. */
1504 sd->state = sd_transfer_state;
1505 return sd_r1b;
1507 default:
1508 break;
1510 break;
1512 /* Lock card commands (Class 7) */
1513 case 42: /* CMD42: LOCK_UNLOCK */
1514 switch (sd->state) {
1515 case sd_transfer_state:
1516 sd->state = sd_receivingdata_state;
1517 sd->data_start = 0;
1518 sd->data_offset = 0;
1519 return sd_r1;
1521 default:
1522 break;
1524 break;
1526 /* Application specific commands (Class 8) */
1527 case 55: /* CMD55: APP_CMD */
1528 switch (sd->state) {
1529 case sd_ready_state:
1530 case sd_identification_state:
1531 case sd_inactive_state:
1532 return sd_illegal;
1533 case sd_idle_state:
1534 if (rca) {
1535 qemu_log_mask(LOG_GUEST_ERROR,
1536 "SD: illegal RCA 0x%04x for APP_CMD\n", req.cmd);
1538 default:
1539 break;
1541 if (!sd_is_spi(sd)) {
1542 if (sd->rca != rca) {
1543 return sd_r0;
1546 sd->expecting_acmd = true;
1547 sd->card_status |= APP_CMD;
1548 return sd_r1;
1550 case 56: /* CMD56: GEN_CMD */
1551 switch (sd->state) {
1552 case sd_transfer_state:
1553 sd->data_offset = 0;
1554 if (req.arg & 1)
1555 sd->state = sd_sendingdata_state;
1556 else
1557 sd->state = sd_receivingdata_state;
1558 return sd_r1;
1560 default:
1561 break;
1563 break;
1565 case 58: /* CMD58: READ_OCR (SPI) */
1566 return sd_r3;
1568 case 59: /* CMD59: CRC_ON_OFF (SPI) */
1569 return sd_r1;
1571 default:
1572 qemu_log_mask(LOG_GUEST_ERROR, "SD: Unknown CMD%i\n", req.cmd);
1573 return sd_illegal;
1576 return sd_invalid_state_for_cmd(sd, req);
1579 static sd_rsp_type_t sd_app_command(SDState *sd,
1580 SDRequest req)
1582 trace_sdcard_app_command(sd_proto(sd)->name, sd_acmd_name(req.cmd),
1583 req.cmd, req.arg, sd_state_name(sd->state));
1584 sd->card_status |= APP_CMD;
1586 if (sd_proto(sd)->acmd[req.cmd]) {
1587 return sd_proto(sd)->acmd[req.cmd](sd, req);
1590 switch (req.cmd) {
1591 case 6: /* ACMD6: SET_BUS_WIDTH */
1592 switch (sd->state) {
1593 case sd_transfer_state:
1594 sd->sd_status[0] &= 0x3f;
1595 sd->sd_status[0] |= (req.arg & 0x03) << 6;
1596 return sd_r1;
1598 default:
1599 break;
1601 break;
1603 case 13: /* ACMD13: SD_STATUS */
1604 switch (sd->state) {
1605 case sd_transfer_state:
1606 sd->state = sd_sendingdata_state;
1607 sd->data_start = 0;
1608 sd->data_offset = 0;
1609 return sd_r1;
1611 default:
1612 break;
1614 break;
1616 case 22: /* ACMD22: SEND_NUM_WR_BLOCKS */
1617 switch (sd->state) {
1618 case sd_transfer_state:
1619 *(uint32_t *) sd->data = sd->blk_written;
1621 sd->state = sd_sendingdata_state;
1622 sd->data_start = 0;
1623 sd->data_offset = 0;
1624 return sd_r1;
1626 default:
1627 break;
1629 break;
1631 case 23: /* ACMD23: SET_WR_BLK_ERASE_COUNT */
1632 switch (sd->state) {
1633 case sd_transfer_state:
1634 return sd_r1;
1636 default:
1637 break;
1639 break;
1641 case 41: /* ACMD41: SD_APP_OP_COND */
1642 if (sd->state != sd_idle_state) {
1643 break;
1645 /* If it's the first ACMD41 since reset, we need to decide
1646 * whether to power up. If this is not an enquiry ACMD41,
1647 * we immediately report power on and proceed below to the
1648 * ready state, but if it is, we set a timer to model a
1649 * delay for power up. This works around a bug in EDK2
1650 * UEFI, which sends an initial enquiry ACMD41, but
1651 * assumes that the card is in ready state as soon as it
1652 * sees the power up bit set. */
1653 if (!FIELD_EX32(sd->ocr, OCR, CARD_POWER_UP)) {
1654 if ((req.arg & ACMD41_ENQUIRY_MASK) != 0) {
1655 timer_del(sd->ocr_power_timer);
1656 sd_ocr_powerup(sd);
1657 } else {
1658 trace_sdcard_inquiry_cmd41();
1659 if (!timer_pending(sd->ocr_power_timer)) {
1660 timer_mod_ns(sd->ocr_power_timer,
1661 (qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL)
1662 + OCR_POWER_DELAY_NS));
1667 if (FIELD_EX32(sd->ocr & req.arg, OCR, VDD_VOLTAGE_WINDOW)) {
1668 /* We accept any voltage. 10000 V is nothing.
1670 * Once we're powered up, we advance straight to ready state
1671 * unless it's an enquiry ACMD41 (bits 23:0 == 0).
1673 sd->state = sd_ready_state;
1676 return sd_r3;
1678 case 42: /* ACMD42: SET_CLR_CARD_DETECT */
1679 switch (sd->state) {
1680 case sd_transfer_state:
1681 /* Bringing in the 50KOhm pull-up resistor... Done. */
1682 return sd_r1;
1684 default:
1685 break;
1687 break;
1689 case 51: /* ACMD51: SEND_SCR */
1690 switch (sd->state) {
1691 case sd_transfer_state:
1692 sd->state = sd_sendingdata_state;
1693 sd->data_start = 0;
1694 sd->data_offset = 0;
1695 return sd_r1;
1697 default:
1698 break;
1700 break;
1702 case 18: /* Reserved for SD security applications */
1703 case 25:
1704 case 26:
1705 case 38:
1706 case 43 ... 49:
1707 /* Refer to the "SD Specifications Part3 Security Specification" for
1708 * information about the SD Security Features.
1710 qemu_log_mask(LOG_UNIMP, "SD: CMD%i Security not implemented\n",
1711 req.cmd);
1712 return sd_illegal;
1714 default:
1715 /* Fall back to standard commands. */
1716 return sd_normal_command(sd, req);
1719 qemu_log_mask(LOG_GUEST_ERROR, "SD: ACMD%i in a wrong state\n", req.cmd);
1720 return sd_illegal;
1723 static int cmd_valid_while_locked(SDState *sd, const uint8_t cmd)
1725 /* Valid commands in locked state:
1726 * basic class (0)
1727 * lock card class (7)
1728 * CMD16
1729 * implicitly, the ACMD prefix CMD55
1730 * ACMD41 and ACMD42
1731 * Anything else provokes an "illegal command" response.
1733 if (sd->expecting_acmd) {
1734 return cmd == 41 || cmd == 42;
1736 if (cmd == 16 || cmd == 55) {
1737 return 1;
1739 return sd_cmd_class[cmd] == 0 || sd_cmd_class[cmd] == 7;
1742 int sd_do_command(SDState *sd, SDRequest *req,
1743 uint8_t *response) {
1744 int last_state;
1745 sd_rsp_type_t rtype;
1746 int rsplen;
1748 if (!sd->blk || !blk_is_inserted(sd->blk) || !sd->enable) {
1749 return 0;
1752 if (sd_req_crc_validate(req)) {
1753 sd->card_status |= COM_CRC_ERROR;
1754 rtype = sd_illegal;
1755 goto send_response;
1758 if (req->cmd >= SDMMC_CMD_MAX) {
1759 qemu_log_mask(LOG_GUEST_ERROR, "SD: incorrect command 0x%02x\n",
1760 req->cmd);
1761 req->cmd &= 0x3f;
1764 if (sd->card_status & CARD_IS_LOCKED) {
1765 if (!cmd_valid_while_locked(sd, req->cmd)) {
1766 sd->card_status |= ILLEGAL_COMMAND;
1767 sd->expecting_acmd = false;
1768 qemu_log_mask(LOG_GUEST_ERROR, "SD: Card is locked\n");
1769 rtype = sd_illegal;
1770 goto send_response;
1774 last_state = sd->state;
1775 sd_set_mode(sd);
1777 if (sd->expecting_acmd) {
1778 sd->expecting_acmd = false;
1779 rtype = sd_app_command(sd, *req);
1780 } else {
1781 rtype = sd_normal_command(sd, *req);
1784 if (rtype == sd_illegal) {
1785 sd->card_status |= ILLEGAL_COMMAND;
1786 } else {
1787 /* Valid command, we can update the 'state before command' bits.
1788 * (Do this now so they appear in r1 responses.)
1790 sd->current_cmd = req->cmd;
1791 sd->card_status &= ~CURRENT_STATE;
1792 sd->card_status |= (last_state << 9);
1795 send_response:
1796 switch (rtype) {
1797 case sd_r1:
1798 case sd_r1b:
1799 sd_response_r1_make(sd, response);
1800 rsplen = 4;
1801 break;
1803 case sd_r2_i:
1804 memcpy(response, sd->cid, sizeof(sd->cid));
1805 rsplen = 16;
1806 break;
1808 case sd_r2_s:
1809 memcpy(response, sd->csd, sizeof(sd->csd));
1810 rsplen = 16;
1811 break;
1813 case sd_r3:
1814 sd_response_r3_make(sd, response);
1815 rsplen = 4;
1816 break;
1818 case sd_r6:
1819 sd_response_r6_make(sd, response);
1820 rsplen = 4;
1821 break;
1823 case sd_r7:
1824 sd_response_r7_make(sd, response);
1825 rsplen = 4;
1826 break;
1828 case sd_r0:
1829 case sd_illegal:
1830 rsplen = 0;
1831 break;
1832 default:
1833 g_assert_not_reached();
1835 trace_sdcard_response(sd_response_name(rtype), rsplen);
1837 if (rtype != sd_illegal) {
1838 /* Clear the "clear on valid command" status bits now we've
1839 * sent any response
1841 sd->card_status &= ~CARD_STATUS_B;
1844 #ifdef DEBUG_SD
1845 qemu_hexdump(stderr, "Response", response, rsplen);
1846 #endif
1848 return rsplen;
1851 void sd_write_byte(SDState *sd, uint8_t value)
1853 int i;
1855 if (!sd->blk || !blk_is_inserted(sd->blk) || !sd->enable)
1856 return;
1858 if (sd->state != sd_receivingdata_state) {
1859 qemu_log_mask(LOG_GUEST_ERROR,
1860 "%s: not in Receiving-Data state\n", __func__);
1861 return;
1864 if (sd->card_status & (ADDRESS_ERROR | WP_VIOLATION))
1865 return;
1867 trace_sdcard_write_data(sd_proto(sd)->name,
1868 sd_acmd_name(sd->current_cmd),
1869 sd->current_cmd, value);
1870 switch (sd->current_cmd) {
1871 case 24: /* CMD24: WRITE_SINGLE_BLOCK */
1872 sd->data[sd->data_offset ++] = value;
1873 if (sd->data_offset >= sd->blk_len) {
1874 /* TODO: Check CRC before committing */
1875 sd->state = sd_programming_state;
1876 BLK_WRITE_BLOCK(sd->data_start, sd->data_offset);
1877 sd->blk_written ++;
1878 sd->csd[14] |= 0x40;
1879 /* Bzzzzzzztt .... Operation complete. */
1880 sd->state = sd_transfer_state;
1882 break;
1884 case 25: /* CMD25: WRITE_MULTIPLE_BLOCK */
1885 if (sd->data_offset == 0) {
1886 /* Start of the block - let's check the address is valid */
1887 if (!address_in_range(sd, "WRITE_MULTIPLE_BLOCK",
1888 sd->data_start, sd->blk_len)) {
1889 break;
1891 if (sd->size <= SDSC_MAX_CAPACITY) {
1892 if (sd_wp_addr(sd, sd->data_start)) {
1893 sd->card_status |= WP_VIOLATION;
1894 break;
1898 sd->data[sd->data_offset++] = value;
1899 if (sd->data_offset >= sd->blk_len) {
1900 /* TODO: Check CRC before committing */
1901 sd->state = sd_programming_state;
1902 BLK_WRITE_BLOCK(sd->data_start, sd->data_offset);
1903 sd->blk_written++;
1904 sd->data_start += sd->blk_len;
1905 sd->data_offset = 0;
1906 sd->csd[14] |= 0x40;
1908 /* Bzzzzzzztt .... Operation complete. */
1909 if (sd->multi_blk_cnt != 0) {
1910 if (--sd->multi_blk_cnt == 0) {
1911 /* Stop! */
1912 sd->state = sd_transfer_state;
1913 break;
1917 sd->state = sd_receivingdata_state;
1919 break;
1921 case 26: /* CMD26: PROGRAM_CID */
1922 sd->data[sd->data_offset ++] = value;
1923 if (sd->data_offset >= sizeof(sd->cid)) {
1924 /* TODO: Check CRC before committing */
1925 sd->state = sd_programming_state;
1926 for (i = 0; i < sizeof(sd->cid); i ++)
1927 if ((sd->cid[i] | 0x00) != sd->data[i])
1928 sd->card_status |= CID_CSD_OVERWRITE;
1930 if (!(sd->card_status & CID_CSD_OVERWRITE))
1931 for (i = 0; i < sizeof(sd->cid); i ++) {
1932 sd->cid[i] |= 0x00;
1933 sd->cid[i] &= sd->data[i];
1935 /* Bzzzzzzztt .... Operation complete. */
1936 sd->state = sd_transfer_state;
1938 break;
1940 case 27: /* CMD27: PROGRAM_CSD */
1941 sd->data[sd->data_offset ++] = value;
1942 if (sd->data_offset >= sizeof(sd->csd)) {
1943 /* TODO: Check CRC before committing */
1944 sd->state = sd_programming_state;
1945 for (i = 0; i < sizeof(sd->csd); i ++)
1946 if ((sd->csd[i] | sd_csd_rw_mask[i]) !=
1947 (sd->data[i] | sd_csd_rw_mask[i]))
1948 sd->card_status |= CID_CSD_OVERWRITE;
1950 /* Copy flag (OTP) & Permanent write protect */
1951 if (sd->csd[14] & ~sd->data[14] & 0x60)
1952 sd->card_status |= CID_CSD_OVERWRITE;
1954 if (!(sd->card_status & CID_CSD_OVERWRITE))
1955 for (i = 0; i < sizeof(sd->csd); i ++) {
1956 sd->csd[i] |= sd_csd_rw_mask[i];
1957 sd->csd[i] &= sd->data[i];
1959 /* Bzzzzzzztt .... Operation complete. */
1960 sd->state = sd_transfer_state;
1962 break;
1964 case 42: /* CMD42: LOCK_UNLOCK */
1965 sd->data[sd->data_offset ++] = value;
1966 if (sd->data_offset >= sd->blk_len) {
1967 /* TODO: Check CRC before committing */
1968 sd->state = sd_programming_state;
1969 sd_lock_command(sd);
1970 /* Bzzzzzzztt .... Operation complete. */
1971 sd->state = sd_transfer_state;
1973 break;
1975 case 56: /* CMD56: GEN_CMD */
1976 sd->data[sd->data_offset ++] = value;
1977 if (sd->data_offset >= sd->blk_len) {
1978 APP_WRITE_BLOCK(sd->data_start, sd->data_offset);
1979 sd->state = sd_transfer_state;
1981 break;
1983 default:
1984 qemu_log_mask(LOG_GUEST_ERROR, "%s: unknown command\n", __func__);
1985 break;
1989 #define SD_TUNING_BLOCK_SIZE 64
1991 static const uint8_t sd_tuning_block_pattern[SD_TUNING_BLOCK_SIZE] = {
1992 /* See: Physical Layer Simplified Specification Version 3.01, Table 4-2 */
1993 0xff, 0x0f, 0xff, 0x00, 0x0f, 0xfc, 0xc3, 0xcc,
1994 0xc3, 0x3c, 0xcc, 0xff, 0xfe, 0xff, 0xfe, 0xef,
1995 0xff, 0xdf, 0xff, 0xdd, 0xff, 0xfb, 0xff, 0xfb,
1996 0xbf, 0xff, 0x7f, 0xff, 0x77, 0xf7, 0xbd, 0xef,
1997 0xff, 0xf0, 0xff, 0xf0, 0x0f, 0xfc, 0xcc, 0x3c,
1998 0xcc, 0x33, 0xcc, 0xcf, 0xff, 0xef, 0xff, 0xee,
1999 0xff, 0xfd, 0xff, 0xfd, 0xdf, 0xff, 0xbf, 0xff,
2000 0xbb, 0xff, 0xf7, 0xff, 0xf7, 0x7f, 0x7b, 0xde,
2003 uint8_t sd_read_byte(SDState *sd)
2005 /* TODO: Append CRCs */
2006 uint8_t ret;
2007 uint32_t io_len;
2009 if (!sd->blk || !blk_is_inserted(sd->blk) || !sd->enable)
2010 return 0x00;
2012 if (sd->state != sd_sendingdata_state) {
2013 qemu_log_mask(LOG_GUEST_ERROR,
2014 "%s: not in Sending-Data state\n", __func__);
2015 return 0x00;
2018 if (sd->card_status & (ADDRESS_ERROR | WP_VIOLATION))
2019 return 0x00;
2021 io_len = (sd->ocr & (1 << 30)) ? 512 : sd->blk_len;
2023 trace_sdcard_read_data(sd_proto(sd)->name,
2024 sd_acmd_name(sd->current_cmd),
2025 sd->current_cmd, io_len);
2026 switch (sd->current_cmd) {
2027 case 6: /* CMD6: SWITCH_FUNCTION */
2028 ret = sd->data[sd->data_offset ++];
2030 if (sd->data_offset >= 64)
2031 sd->state = sd_transfer_state;
2032 break;
2034 case 9: /* CMD9: SEND_CSD */
2035 case 10: /* CMD10: SEND_CID */
2036 ret = sd->data[sd->data_offset ++];
2038 if (sd->data_offset >= 16)
2039 sd->state = sd_transfer_state;
2040 break;
2042 case 13: /* ACMD13: SD_STATUS */
2043 ret = sd->sd_status[sd->data_offset ++];
2045 if (sd->data_offset >= sizeof(sd->sd_status))
2046 sd->state = sd_transfer_state;
2047 break;
2049 case 17: /* CMD17: READ_SINGLE_BLOCK */
2050 if (sd->data_offset == 0)
2051 BLK_READ_BLOCK(sd->data_start, io_len);
2052 ret = sd->data[sd->data_offset ++];
2054 if (sd->data_offset >= io_len)
2055 sd->state = sd_transfer_state;
2056 break;
2058 case 18: /* CMD18: READ_MULTIPLE_BLOCK */
2059 if (sd->data_offset == 0) {
2060 if (!address_in_range(sd, "READ_MULTIPLE_BLOCK",
2061 sd->data_start, io_len)) {
2062 return 0x00;
2064 BLK_READ_BLOCK(sd->data_start, io_len);
2066 ret = sd->data[sd->data_offset ++];
2068 if (sd->data_offset >= io_len) {
2069 sd->data_start += io_len;
2070 sd->data_offset = 0;
2072 if (sd->multi_blk_cnt != 0) {
2073 if (--sd->multi_blk_cnt == 0) {
2074 /* Stop! */
2075 sd->state = sd_transfer_state;
2076 break;
2080 break;
2082 case 19: /* CMD19: SEND_TUNING_BLOCK (SD) */
2083 if (sd->data_offset >= SD_TUNING_BLOCK_SIZE - 1) {
2084 sd->state = sd_transfer_state;
2086 ret = sd_tuning_block_pattern[sd->data_offset++];
2087 break;
2089 case 22: /* ACMD22: SEND_NUM_WR_BLOCKS */
2090 ret = sd->data[sd->data_offset ++];
2092 if (sd->data_offset >= 4)
2093 sd->state = sd_transfer_state;
2094 break;
2096 case 30: /* CMD30: SEND_WRITE_PROT */
2097 ret = sd->data[sd->data_offset ++];
2099 if (sd->data_offset >= 4)
2100 sd->state = sd_transfer_state;
2101 break;
2103 case 51: /* ACMD51: SEND_SCR */
2104 ret = sd->scr[sd->data_offset ++];
2106 if (sd->data_offset >= sizeof(sd->scr))
2107 sd->state = sd_transfer_state;
2108 break;
2110 case 56: /* CMD56: GEN_CMD */
2111 if (sd->data_offset == 0)
2112 APP_READ_BLOCK(sd->data_start, sd->blk_len);
2113 ret = sd->data[sd->data_offset ++];
2115 if (sd->data_offset >= sd->blk_len)
2116 sd->state = sd_transfer_state;
2117 break;
2119 default:
2120 qemu_log_mask(LOG_GUEST_ERROR, "%s: unknown command\n", __func__);
2121 return 0x00;
2124 return ret;
2127 static bool sd_receive_ready(SDState *sd)
2129 return sd->state == sd_receivingdata_state;
2132 static bool sd_data_ready(SDState *sd)
2134 return sd->state == sd_sendingdata_state;
2137 void sd_enable(SDState *sd, bool enable)
2139 sd->enable = enable;
2142 static const SDProto sd_proto_spi = {
2143 .name = "SPI",
2144 .cmd = {
2145 [0] = sd_cmd_GO_IDLE_STATE,
2146 [1] = sd_cmd_SEND_OP_CMD,
2147 [2 ... 4] = sd_cmd_illegal,
2148 [5] = sd_cmd_illegal,
2149 [7] = sd_cmd_illegal,
2150 [15] = sd_cmd_illegal,
2151 [26] = sd_cmd_illegal,
2152 [52 ... 54] = sd_cmd_illegal,
2154 .acmd = {
2155 [6] = sd_cmd_unimplemented,
2156 [41] = sd_cmd_SEND_OP_CMD,
2160 static const SDProto sd_proto_sd = {
2161 .name = "SD",
2162 .cmd = {
2163 [0] = sd_cmd_GO_IDLE_STATE,
2164 [1] = sd_cmd_illegal,
2165 [2] = sd_cmd_ALL_SEND_CID,
2166 [3] = sd_cmd_SEND_RELATIVE_ADDR,
2167 [5] = sd_cmd_illegal,
2168 [19] = sd_cmd_SEND_TUNING_BLOCK,
2169 [23] = sd_cmd_SET_BLOCK_COUNT,
2170 [52 ... 54] = sd_cmd_illegal,
2171 [58] = sd_cmd_illegal,
2172 [59] = sd_cmd_illegal,
2176 static void sd_instance_init(Object *obj)
2178 SDState *sd = SD_CARD(obj);
2180 sd->enable = true;
2181 sd->ocr_power_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL, sd_ocr_powerup, sd);
2184 static void sd_instance_finalize(Object *obj)
2186 SDState *sd = SD_CARD(obj);
2188 timer_free(sd->ocr_power_timer);
2191 static void sd_realize(DeviceState *dev, Error **errp)
2193 SDState *sd = SD_CARD(dev);
2194 int ret;
2196 switch (sd->spec_version) {
2197 case SD_PHY_SPECv1_10_VERS
2198 ... SD_PHY_SPECv3_01_VERS:
2199 break;
2200 default:
2201 error_setg(errp, "Invalid SD card Spec version: %u", sd->spec_version);
2202 return;
2205 if (sd->blk) {
2206 int64_t blk_size;
2208 if (!blk_supports_write_perm(sd->blk)) {
2209 error_setg(errp, "Cannot use read-only drive as SD card");
2210 return;
2213 blk_size = blk_getlength(sd->blk);
2214 if (blk_size > 0 && !is_power_of_2(blk_size)) {
2215 int64_t blk_size_aligned = pow2ceil(blk_size);
2216 char *blk_size_str;
2218 blk_size_str = size_to_str(blk_size);
2219 error_setg(errp, "Invalid SD card size: %s", blk_size_str);
2220 g_free(blk_size_str);
2222 blk_size_str = size_to_str(blk_size_aligned);
2223 error_append_hint(errp,
2224 "SD card size has to be a power of 2, e.g. %s.\n"
2225 "You can resize disk images with"
2226 " 'qemu-img resize <imagefile> <new-size>'\n"
2227 "(note that this will lose data if you make the"
2228 " image smaller than it currently is).\n",
2229 blk_size_str);
2230 g_free(blk_size_str);
2232 return;
2235 ret = blk_set_perm(sd->blk, BLK_PERM_CONSISTENT_READ | BLK_PERM_WRITE,
2236 BLK_PERM_ALL, errp);
2237 if (ret < 0) {
2238 return;
2240 blk_set_dev_ops(sd->blk, &sd_block_ops, sd);
2244 static Property sd_properties[] = {
2245 DEFINE_PROP_UINT8("spec_version", SDState,
2246 spec_version, SD_PHY_SPECv2_00_VERS),
2247 DEFINE_PROP_DRIVE("drive", SDState, blk),
2248 /* We do not model the chip select pin, so allow the board to select
2249 * whether card should be in SSI or MMC/SD mode. It is also up to the
2250 * board to ensure that ssi transfers only occur when the chip select
2251 * is asserted. */
2252 DEFINE_PROP_END_OF_LIST()
2255 static void sd_class_init(ObjectClass *klass, void *data)
2257 DeviceClass *dc = DEVICE_CLASS(klass);
2258 SDCardClass *sc = SD_CARD_CLASS(klass);
2260 dc->realize = sd_realize;
2261 device_class_set_props(dc, sd_properties);
2262 dc->vmsd = &sd_vmstate;
2263 dc->reset = sd_reset;
2264 dc->bus_type = TYPE_SD_BUS;
2265 set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
2267 sc->set_voltage = sd_set_voltage;
2268 sc->get_dat_lines = sd_get_dat_lines;
2269 sc->get_cmd_line = sd_get_cmd_line;
2270 sc->do_command = sd_do_command;
2271 sc->write_byte = sd_write_byte;
2272 sc->read_byte = sd_read_byte;
2273 sc->receive_ready = sd_receive_ready;
2274 sc->data_ready = sd_data_ready;
2275 sc->enable = sd_enable;
2276 sc->get_inserted = sd_get_inserted;
2277 sc->get_readonly = sd_get_readonly;
2278 sc->proto = &sd_proto_sd;
2281 static const TypeInfo sd_info = {
2282 .name = TYPE_SD_CARD,
2283 .parent = TYPE_DEVICE,
2284 .instance_size = sizeof(SDState),
2285 .class_size = sizeof(SDCardClass),
2286 .class_init = sd_class_init,
2287 .instance_init = sd_instance_init,
2288 .instance_finalize = sd_instance_finalize,
2292 * We do not model the chip select pin, so allow the board to select
2293 * whether card should be in SSI or MMC/SD mode. It is also up to the
2294 * board to ensure that ssi transfers only occur when the chip select
2295 * is asserted.
2297 static void sd_spi_class_init(ObjectClass *klass, void *data)
2299 DeviceClass *dc = DEVICE_CLASS(klass);
2300 SDCardClass *sc = SD_CARD_CLASS(klass);
2302 dc->desc = "SD SPI";
2303 sc->proto = &sd_proto_spi;
2306 static const TypeInfo sd_spi_info = {
2307 .name = TYPE_SD_CARD_SPI,
2308 .parent = TYPE_SD_CARD,
2309 .class_init = sd_spi_class_init,
2312 static void sd_register_types(void)
2314 type_register_static(&sd_info);
2315 type_register_static(&sd_spi_info);
2318 type_init(sd_register_types)