Merge remote-tracking branch 'remotes/armbru/tags/pull-qapi-2021-02-08' into staging
[qemu/ar7.git] / hw / sd / sd.c
blob8517dbce8ba2e6a51e8c4b4daba862617a53aa73
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 struct SDState {
91 DeviceState parent_obj;
93 /* If true, created by sd_init() for a non-qdevified caller */
94 /* TODO purge them with fire */
95 bool me_no_qdev_me_kill_mammoth_with_rocks;
97 /* SD Memory Card Registers */
98 uint32_t ocr;
99 uint8_t scr[8];
100 uint8_t cid[16];
101 uint8_t csd[16];
102 uint16_t rca;
103 uint32_t card_status;
104 uint8_t sd_status[64];
106 /* Static properties */
108 uint8_t spec_version;
109 BlockBackend *blk;
110 bool spi;
112 /* Runtime changeables */
114 uint32_t mode; /* current card mode, one of SDCardModes */
115 int32_t state; /* current card state, one of SDCardStates */
116 uint32_t vhs;
117 bool wp_switch;
118 unsigned long *wp_groups;
119 int32_t wpgrps_size;
120 uint64_t size;
121 uint32_t blk_len;
122 uint32_t multi_blk_cnt;
123 uint32_t erase_start;
124 uint32_t erase_end;
125 uint8_t pwd[16];
126 uint32_t pwd_len;
127 uint8_t function_group[6];
128 uint8_t current_cmd;
129 /* True if we will handle the next command as an ACMD. Note that this does
130 * *not* track the APP_CMD status bit!
132 bool expecting_acmd;
133 uint32_t blk_written;
134 uint64_t data_start;
135 uint32_t data_offset;
136 uint8_t data[512];
137 qemu_irq readonly_cb;
138 qemu_irq inserted_cb;
139 QEMUTimer *ocr_power_timer;
140 const char *proto_name;
141 bool enable;
142 uint8_t dat_lines;
143 bool cmd_line;
146 static void sd_realize(DeviceState *dev, Error **errp);
148 static const char *sd_state_name(enum SDCardStates state)
150 static const char *state_name[] = {
151 [sd_idle_state] = "idle",
152 [sd_ready_state] = "ready",
153 [sd_identification_state] = "identification",
154 [sd_standby_state] = "standby",
155 [sd_transfer_state] = "transfer",
156 [sd_sendingdata_state] = "sendingdata",
157 [sd_receivingdata_state] = "receivingdata",
158 [sd_programming_state] = "programming",
159 [sd_disconnect_state] = "disconnect",
161 if (state == sd_inactive_state) {
162 return "inactive";
164 assert(state < ARRAY_SIZE(state_name));
165 return state_name[state];
168 static const char *sd_response_name(sd_rsp_type_t rsp)
170 static const char *response_name[] = {
171 [sd_r0] = "RESP#0 (no response)",
172 [sd_r1] = "RESP#1 (normal cmd)",
173 [sd_r2_i] = "RESP#2 (CID reg)",
174 [sd_r2_s] = "RESP#2 (CSD reg)",
175 [sd_r3] = "RESP#3 (OCR reg)",
176 [sd_r6] = "RESP#6 (RCA)",
177 [sd_r7] = "RESP#7 (operating voltage)",
179 if (rsp == sd_illegal) {
180 return "ILLEGAL RESP";
182 if (rsp == sd_r1b) {
183 rsp = sd_r1;
185 assert(rsp < ARRAY_SIZE(response_name));
186 return response_name[rsp];
189 static uint8_t sd_get_dat_lines(SDState *sd)
191 return sd->enable ? sd->dat_lines : 0;
194 static bool sd_get_cmd_line(SDState *sd)
196 return sd->enable ? sd->cmd_line : false;
199 static void sd_set_voltage(SDState *sd, uint16_t millivolts)
201 trace_sdcard_set_voltage(millivolts);
203 switch (millivolts) {
204 case 3001 ... 3600: /* SD_VOLTAGE_3_3V */
205 case 2001 ... 3000: /* SD_VOLTAGE_3_0V */
206 break;
207 default:
208 qemu_log_mask(LOG_GUEST_ERROR, "SD card voltage not supported: %.3fV",
209 millivolts / 1000.f);
213 static void sd_set_mode(SDState *sd)
215 switch (sd->state) {
216 case sd_inactive_state:
217 sd->mode = sd_inactive;
218 break;
220 case sd_idle_state:
221 case sd_ready_state:
222 case sd_identification_state:
223 sd->mode = sd_card_identification_mode;
224 break;
226 case sd_standby_state:
227 case sd_transfer_state:
228 case sd_sendingdata_state:
229 case sd_receivingdata_state:
230 case sd_programming_state:
231 case sd_disconnect_state:
232 sd->mode = sd_data_transfer_mode;
233 break;
237 static const sd_cmd_type_t sd_cmd_type[SDMMC_CMD_MAX] = {
238 sd_bc, sd_none, sd_bcr, sd_bcr, sd_none, sd_none, sd_none, sd_ac,
239 sd_bcr, sd_ac, sd_ac, sd_adtc, sd_ac, sd_ac, sd_none, sd_ac,
240 /* 16 */
241 sd_ac, sd_adtc, sd_adtc, sd_none, sd_none, sd_none, sd_none, sd_none,
242 sd_adtc, sd_adtc, sd_adtc, sd_adtc, sd_ac, sd_ac, sd_adtc, sd_none,
243 /* 32 */
244 sd_ac, sd_ac, sd_none, sd_none, sd_none, sd_none, sd_ac, sd_none,
245 sd_none, sd_none, sd_bc, sd_none, sd_none, sd_none, sd_none, sd_none,
246 /* 48 */
247 sd_none, sd_none, sd_none, sd_none, sd_none, sd_none, sd_none, sd_ac,
248 sd_adtc, sd_none, sd_none, sd_none, sd_none, sd_none, sd_none, sd_none,
251 static const int sd_cmd_class[SDMMC_CMD_MAX] = {
252 0, 0, 0, 0, 0, 9, 10, 0, 0, 0, 0, 1, 0, 0, 0, 0,
253 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 6, 6, 6, 6,
254 5, 5, 10, 10, 10, 10, 5, 9, 9, 9, 7, 7, 7, 7, 7, 7,
255 7, 7, 10, 7, 9, 9, 9, 8, 8, 10, 8, 8, 8, 8, 8, 8,
258 static uint8_t sd_crc7(const void *message, size_t width)
260 int i, bit;
261 uint8_t shift_reg = 0x00;
262 const uint8_t *msg = (const uint8_t *)message;
264 for (i = 0; i < width; i ++, msg ++)
265 for (bit = 7; bit >= 0; bit --) {
266 shift_reg <<= 1;
267 if ((shift_reg >> 7) ^ ((*msg >> bit) & 1))
268 shift_reg ^= 0x89;
271 return shift_reg;
274 #define OCR_POWER_DELAY_NS 500000 /* 0.5ms */
276 FIELD(OCR, VDD_VOLTAGE_WINDOW, 0, 24)
277 FIELD(OCR, VDD_VOLTAGE_WIN_LO, 0, 8)
278 FIELD(OCR, DUAL_VOLTAGE_CARD, 7, 1)
279 FIELD(OCR, VDD_VOLTAGE_WIN_HI, 8, 16)
280 FIELD(OCR, ACCEPT_SWITCH_1V8, 24, 1) /* Only UHS-I */
281 FIELD(OCR, UHS_II_CARD, 29, 1) /* Only UHS-II */
282 FIELD(OCR, CARD_CAPACITY, 30, 1) /* 0:SDSC, 1:SDHC/SDXC */
283 FIELD(OCR, CARD_POWER_UP, 31, 1)
285 #define ACMD41_ENQUIRY_MASK 0x00ffffff
286 #define ACMD41_R3_MASK (R_OCR_VDD_VOLTAGE_WIN_HI_MASK \
287 | R_OCR_ACCEPT_SWITCH_1V8_MASK \
288 | R_OCR_UHS_II_CARD_MASK \
289 | R_OCR_CARD_CAPACITY_MASK \
290 | R_OCR_CARD_POWER_UP_MASK)
292 static void sd_set_ocr(SDState *sd)
294 /* All voltages OK */
295 sd->ocr = R_OCR_VDD_VOLTAGE_WIN_HI_MASK;
298 static void sd_ocr_powerup(void *opaque)
300 SDState *sd = opaque;
302 trace_sdcard_powerup();
303 assert(!FIELD_EX32(sd->ocr, OCR, CARD_POWER_UP));
305 /* card power-up OK */
306 sd->ocr = FIELD_DP32(sd->ocr, OCR, CARD_POWER_UP, 1);
308 if (sd->size > SDSC_MAX_CAPACITY) {
309 sd->ocr = FIELD_DP32(sd->ocr, OCR, CARD_CAPACITY, 1);
313 static void sd_set_scr(SDState *sd)
315 sd->scr[0] = 0 << 4; /* SCR structure version 1.0 */
316 if (sd->spec_version == SD_PHY_SPECv1_10_VERS) {
317 sd->scr[0] |= 1; /* Spec Version 1.10 */
318 } else {
319 sd->scr[0] |= 2; /* Spec Version 2.00 or Version 3.0X */
321 sd->scr[1] = (2 << 4) /* SDSC Card (Security Version 1.01) */
322 | 0b0101; /* 1-bit or 4-bit width bus modes */
323 sd->scr[2] = 0x00; /* Extended Security is not supported. */
324 if (sd->spec_version >= SD_PHY_SPECv3_01_VERS) {
325 sd->scr[2] |= 1 << 7; /* Spec Version 3.0X */
327 sd->scr[3] = 0x00;
328 /* reserved for manufacturer usage */
329 sd->scr[4] = 0x00;
330 sd->scr[5] = 0x00;
331 sd->scr[6] = 0x00;
332 sd->scr[7] = 0x00;
335 #define MID 0xaa
336 #define OID "XY"
337 #define PNM "QEMU!"
338 #define PRV 0x01
339 #define MDT_YR 2006
340 #define MDT_MON 2
342 static void sd_set_cid(SDState *sd)
344 sd->cid[0] = MID; /* Fake card manufacturer ID (MID) */
345 sd->cid[1] = OID[0]; /* OEM/Application ID (OID) */
346 sd->cid[2] = OID[1];
347 sd->cid[3] = PNM[0]; /* Fake product name (PNM) */
348 sd->cid[4] = PNM[1];
349 sd->cid[5] = PNM[2];
350 sd->cid[6] = PNM[3];
351 sd->cid[7] = PNM[4];
352 sd->cid[8] = PRV; /* Fake product revision (PRV) */
353 sd->cid[9] = 0xde; /* Fake serial number (PSN) */
354 sd->cid[10] = 0xad;
355 sd->cid[11] = 0xbe;
356 sd->cid[12] = 0xef;
357 sd->cid[13] = 0x00 | /* Manufacture date (MDT) */
358 ((MDT_YR - 2000) / 10);
359 sd->cid[14] = ((MDT_YR % 10) << 4) | MDT_MON;
360 sd->cid[15] = (sd_crc7(sd->cid, 15) << 1) | 1;
363 #define HWBLOCK_SHIFT 9 /* 512 bytes */
364 #define SECTOR_SHIFT 5 /* 16 kilobytes */
365 #define WPGROUP_SHIFT 7 /* 2 megs */
366 #define CMULT_SHIFT 9 /* 512 times HWBLOCK_SIZE */
367 #define WPGROUP_SIZE (1 << (HWBLOCK_SHIFT + SECTOR_SHIFT + WPGROUP_SHIFT))
369 static const uint8_t sd_csd_rw_mask[16] = {
370 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
371 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfe,
374 static void sd_set_csd(SDState *sd, uint64_t size)
376 int hwblock_shift = HWBLOCK_SHIFT;
377 uint32_t csize;
378 uint32_t sectsize = (1 << (SECTOR_SHIFT + 1)) - 1;
379 uint32_t wpsize = (1 << (WPGROUP_SHIFT + 1)) - 1;
381 /* To indicate 2 GiB card, BLOCK_LEN shall be 1024 bytes */
382 if (size == SDSC_MAX_CAPACITY) {
383 hwblock_shift += 1;
385 csize = (size >> (CMULT_SHIFT + hwblock_shift)) - 1;
387 if (size <= SDSC_MAX_CAPACITY) { /* Standard Capacity SD */
388 sd->csd[0] = 0x00; /* CSD structure */
389 sd->csd[1] = 0x26; /* Data read access-time-1 */
390 sd->csd[2] = 0x00; /* Data read access-time-2 */
391 sd->csd[3] = 0x32; /* Max. data transfer rate: 25 MHz */
392 sd->csd[4] = 0x5f; /* Card Command Classes */
393 sd->csd[5] = 0x50 | /* Max. read data block length */
394 hwblock_shift;
395 sd->csd[6] = 0xe0 | /* Partial block for read allowed */
396 ((csize >> 10) & 0x03);
397 sd->csd[7] = 0x00 | /* Device size */
398 ((csize >> 2) & 0xff);
399 sd->csd[8] = 0x3f | /* Max. read current */
400 ((csize << 6) & 0xc0);
401 sd->csd[9] = 0xfc | /* Max. write current */
402 ((CMULT_SHIFT - 2) >> 1);
403 sd->csd[10] = 0x40 | /* Erase sector size */
404 (((CMULT_SHIFT - 2) << 7) & 0x80) | (sectsize >> 1);
405 sd->csd[11] = 0x00 | /* Write protect group size */
406 ((sectsize << 7) & 0x80) | wpsize;
407 sd->csd[12] = 0x90 | /* Write speed factor */
408 (hwblock_shift >> 2);
409 sd->csd[13] = 0x20 | /* Max. write data block length */
410 ((hwblock_shift << 6) & 0xc0);
411 sd->csd[14] = 0x00; /* File format group */
412 } else { /* SDHC */
413 size /= 512 * KiB;
414 size -= 1;
415 sd->csd[0] = 0x40;
416 sd->csd[1] = 0x0e;
417 sd->csd[2] = 0x00;
418 sd->csd[3] = 0x32;
419 sd->csd[4] = 0x5b;
420 sd->csd[5] = 0x59;
421 sd->csd[6] = 0x00;
422 sd->csd[7] = (size >> 16) & 0xff;
423 sd->csd[8] = (size >> 8) & 0xff;
424 sd->csd[9] = (size & 0xff);
425 sd->csd[10] = 0x7f;
426 sd->csd[11] = 0x80;
427 sd->csd[12] = 0x0a;
428 sd->csd[13] = 0x40;
429 sd->csd[14] = 0x00;
431 sd->csd[15] = (sd_crc7(sd->csd, 15) << 1) | 1;
434 static void sd_set_rca(SDState *sd)
436 sd->rca += 0x4567;
439 FIELD(CSR, AKE_SEQ_ERROR, 3, 1)
440 FIELD(CSR, APP_CMD, 5, 1)
441 FIELD(CSR, FX_EVENT, 6, 1)
442 FIELD(CSR, READY_FOR_DATA, 8, 1)
443 FIELD(CSR, CURRENT_STATE, 9, 4)
444 FIELD(CSR, ERASE_RESET, 13, 1)
445 FIELD(CSR, CARD_ECC_DISABLED, 14, 1)
446 FIELD(CSR, WP_ERASE_SKIP, 15, 1)
447 FIELD(CSR, CSD_OVERWRITE, 16, 1)
448 FIELD(CSR, DEFERRED_RESPONSE, 17, 1)
449 FIELD(CSR, ERROR, 19, 1)
450 FIELD(CSR, CC_ERROR, 20, 1)
451 FIELD(CSR, CARD_ECC_FAILED, 21, 1)
452 FIELD(CSR, ILLEGAL_COMMAND, 22, 1)
453 FIELD(CSR, COM_CRC_ERROR, 23, 1)
454 FIELD(CSR, LOCK_UNLOCK_FAILED, 24, 1)
455 FIELD(CSR, CARD_IS_LOCKED, 25, 1)
456 FIELD(CSR, WP_VIOLATION, 26, 1)
457 FIELD(CSR, ERASE_PARAM, 27, 1)
458 FIELD(CSR, ERASE_SEQ_ERROR, 28, 1)
459 FIELD(CSR, BLOCK_LEN_ERROR, 29, 1)
460 FIELD(CSR, ADDRESS_ERROR, 30, 1)
461 FIELD(CSR, OUT_OF_RANGE, 31, 1)
463 /* Card status bits, split by clear condition:
464 * A : According to the card current state
465 * B : Always related to the previous command
466 * C : Cleared by read
468 #define CARD_STATUS_A (R_CSR_READY_FOR_DATA_MASK \
469 | R_CSR_CARD_ECC_DISABLED_MASK \
470 | R_CSR_CARD_IS_LOCKED_MASK)
471 #define CARD_STATUS_B (R_CSR_CURRENT_STATE_MASK \
472 | R_CSR_ILLEGAL_COMMAND_MASK \
473 | R_CSR_COM_CRC_ERROR_MASK)
474 #define CARD_STATUS_C (R_CSR_AKE_SEQ_ERROR_MASK \
475 | R_CSR_APP_CMD_MASK \
476 | R_CSR_ERASE_RESET_MASK \
477 | R_CSR_WP_ERASE_SKIP_MASK \
478 | R_CSR_CSD_OVERWRITE_MASK \
479 | R_CSR_ERROR_MASK \
480 | R_CSR_CC_ERROR_MASK \
481 | R_CSR_CARD_ECC_FAILED_MASK \
482 | R_CSR_LOCK_UNLOCK_FAILED_MASK \
483 | R_CSR_WP_VIOLATION_MASK \
484 | R_CSR_ERASE_PARAM_MASK \
485 | R_CSR_ERASE_SEQ_ERROR_MASK \
486 | R_CSR_BLOCK_LEN_ERROR_MASK \
487 | R_CSR_ADDRESS_ERROR_MASK \
488 | R_CSR_OUT_OF_RANGE_MASK)
490 static void sd_set_cardstatus(SDState *sd)
492 sd->card_status = 0x00000100;
495 static void sd_set_sdstatus(SDState *sd)
497 memset(sd->sd_status, 0, 64);
500 static int sd_req_crc_validate(SDRequest *req)
502 uint8_t buffer[5];
503 buffer[0] = 0x40 | req->cmd;
504 stl_be_p(&buffer[1], req->arg);
505 return 0;
506 return sd_crc7(buffer, 5) != req->crc; /* TODO */
509 static void sd_response_r1_make(SDState *sd, uint8_t *response)
511 stl_be_p(response, sd->card_status);
513 /* Clear the "clear on read" status bits */
514 sd->card_status &= ~CARD_STATUS_C;
517 static void sd_response_r3_make(SDState *sd, uint8_t *response)
519 stl_be_p(response, sd->ocr & ACMD41_R3_MASK);
522 static void sd_response_r6_make(SDState *sd, uint8_t *response)
524 uint16_t status;
526 status = ((sd->card_status >> 8) & 0xc000) |
527 ((sd->card_status >> 6) & 0x2000) |
528 (sd->card_status & 0x1fff);
529 sd->card_status &= ~(CARD_STATUS_C & 0xc81fff);
530 stw_be_p(response + 0, sd->rca);
531 stw_be_p(response + 2, status);
534 static void sd_response_r7_make(SDState *sd, uint8_t *response)
536 stl_be_p(response, sd->vhs);
539 static inline uint64_t sd_addr_to_wpnum(uint64_t addr)
541 return addr >> (HWBLOCK_SHIFT + SECTOR_SHIFT + WPGROUP_SHIFT);
544 static void sd_reset(DeviceState *dev)
546 SDState *sd = SD_CARD(dev);
547 uint64_t size;
548 uint64_t sect;
550 trace_sdcard_reset();
551 if (sd->blk) {
552 blk_get_geometry(sd->blk, &sect);
553 } else {
554 sect = 0;
556 size = sect << 9;
558 sect = sd_addr_to_wpnum(size) + 1;
560 sd->state = sd_idle_state;
561 sd->rca = 0x0000;
562 sd_set_ocr(sd);
563 sd_set_scr(sd);
564 sd_set_cid(sd);
565 sd_set_csd(sd, size);
566 sd_set_cardstatus(sd);
567 sd_set_sdstatus(sd);
569 g_free(sd->wp_groups);
570 sd->wp_switch = sd->blk ? !blk_is_writable(sd->blk) : false;
571 sd->wpgrps_size = sect;
572 sd->wp_groups = bitmap_new(sd->wpgrps_size);
573 memset(sd->function_group, 0, sizeof(sd->function_group));
574 sd->erase_start = INVALID_ADDRESS;
575 sd->erase_end = INVALID_ADDRESS;
576 sd->size = size;
577 sd->blk_len = 0x200;
578 sd->pwd_len = 0;
579 sd->expecting_acmd = false;
580 sd->dat_lines = 0xf;
581 sd->cmd_line = true;
582 sd->multi_blk_cnt = 0;
585 static bool sd_get_inserted(SDState *sd)
587 return sd->blk && blk_is_inserted(sd->blk);
590 static bool sd_get_readonly(SDState *sd)
592 return sd->wp_switch;
595 static void sd_cardchange(void *opaque, bool load, Error **errp)
597 SDState *sd = opaque;
598 DeviceState *dev = DEVICE(sd);
599 SDBus *sdbus;
600 bool inserted = sd_get_inserted(sd);
601 bool readonly = sd_get_readonly(sd);
603 if (inserted) {
604 trace_sdcard_inserted(readonly);
605 sd_reset(dev);
606 } else {
607 trace_sdcard_ejected();
610 if (sd->me_no_qdev_me_kill_mammoth_with_rocks) {
611 qemu_set_irq(sd->inserted_cb, inserted);
612 if (inserted) {
613 qemu_set_irq(sd->readonly_cb, readonly);
615 } else {
616 sdbus = SD_BUS(qdev_get_parent_bus(dev));
617 sdbus_set_inserted(sdbus, inserted);
618 if (inserted) {
619 sdbus_set_readonly(sdbus, readonly);
624 static const BlockDevOps sd_block_ops = {
625 .change_media_cb = sd_cardchange,
628 static bool sd_ocr_vmstate_needed(void *opaque)
630 SDState *sd = opaque;
632 /* Include the OCR state (and timer) if it is not yet powered up */
633 return !FIELD_EX32(sd->ocr, OCR, CARD_POWER_UP);
636 static const VMStateDescription sd_ocr_vmstate = {
637 .name = "sd-card/ocr-state",
638 .version_id = 1,
639 .minimum_version_id = 1,
640 .needed = sd_ocr_vmstate_needed,
641 .fields = (VMStateField[]) {
642 VMSTATE_UINT32(ocr, SDState),
643 VMSTATE_TIMER_PTR(ocr_power_timer, SDState),
644 VMSTATE_END_OF_LIST()
648 static int sd_vmstate_pre_load(void *opaque)
650 SDState *sd = opaque;
652 /* If the OCR state is not included (prior versions, or not
653 * needed), then the OCR must be set as powered up. If the OCR state
654 * is included, this will be replaced by the state restore.
656 sd_ocr_powerup(sd);
658 return 0;
661 static const VMStateDescription sd_vmstate = {
662 .name = "sd-card",
663 .version_id = 2,
664 .minimum_version_id = 2,
665 .pre_load = sd_vmstate_pre_load,
666 .fields = (VMStateField[]) {
667 VMSTATE_UINT32(mode, SDState),
668 VMSTATE_INT32(state, SDState),
669 VMSTATE_UINT8_ARRAY(cid, SDState, 16),
670 VMSTATE_UINT8_ARRAY(csd, SDState, 16),
671 VMSTATE_UINT16(rca, SDState),
672 VMSTATE_UINT32(card_status, SDState),
673 VMSTATE_PARTIAL_BUFFER(sd_status, SDState, 1),
674 VMSTATE_UINT32(vhs, SDState),
675 VMSTATE_BITMAP(wp_groups, SDState, 0, wpgrps_size),
676 VMSTATE_UINT32(blk_len, SDState),
677 VMSTATE_UINT32(multi_blk_cnt, SDState),
678 VMSTATE_UINT32(erase_start, SDState),
679 VMSTATE_UINT32(erase_end, SDState),
680 VMSTATE_UINT8_ARRAY(pwd, SDState, 16),
681 VMSTATE_UINT32(pwd_len, SDState),
682 VMSTATE_UINT8_ARRAY(function_group, SDState, 6),
683 VMSTATE_UINT8(current_cmd, SDState),
684 VMSTATE_BOOL(expecting_acmd, SDState),
685 VMSTATE_UINT32(blk_written, SDState),
686 VMSTATE_UINT64(data_start, SDState),
687 VMSTATE_UINT32(data_offset, SDState),
688 VMSTATE_UINT8_ARRAY(data, SDState, 512),
689 VMSTATE_UNUSED_V(1, 512),
690 VMSTATE_BOOL(enable, SDState),
691 VMSTATE_END_OF_LIST()
693 .subsections = (const VMStateDescription*[]) {
694 &sd_ocr_vmstate,
695 NULL
699 /* Legacy initialization function for use by non-qdevified callers */
700 SDState *sd_init(BlockBackend *blk, bool is_spi)
702 Object *obj;
703 DeviceState *dev;
704 SDState *sd;
705 Error *err = NULL;
707 obj = object_new(TYPE_SD_CARD);
708 dev = DEVICE(obj);
709 if (!qdev_prop_set_drive_err(dev, "drive", blk, &err)) {
710 error_reportf_err(err, "sd_init failed: ");
711 return NULL;
713 qdev_prop_set_bit(dev, "spi", is_spi);
716 * Realizing the device properly would put it into the QOM
717 * composition tree even though it is not plugged into an
718 * appropriate bus. That's a no-no. Hide the device from
719 * QOM/qdev, and call its qdev realize callback directly.
721 object_ref(obj);
722 object_unparent(obj);
723 sd_realize(dev, &err);
724 if (err) {
725 error_reportf_err(err, "sd_init failed: ");
726 return NULL;
729 sd = SD_CARD(dev);
730 sd->me_no_qdev_me_kill_mammoth_with_rocks = true;
731 return sd;
734 void sd_set_cb(SDState *sd, qemu_irq readonly, qemu_irq insert)
736 sd->readonly_cb = readonly;
737 sd->inserted_cb = insert;
738 qemu_set_irq(readonly, sd->blk ? !blk_is_writable(sd->blk) : 0);
739 qemu_set_irq(insert, sd->blk ? blk_is_inserted(sd->blk) : 0);
742 static void sd_erase(SDState *sd)
744 int i;
745 uint64_t erase_start = sd->erase_start;
746 uint64_t erase_end = sd->erase_end;
748 trace_sdcard_erase(sd->erase_start, sd->erase_end);
749 if (sd->erase_start == INVALID_ADDRESS
750 || sd->erase_end == INVALID_ADDRESS) {
751 sd->card_status |= ERASE_SEQ_ERROR;
752 sd->erase_start = INVALID_ADDRESS;
753 sd->erase_end = INVALID_ADDRESS;
754 return;
757 if (FIELD_EX32(sd->ocr, OCR, CARD_CAPACITY)) {
758 /* High capacity memory card: erase units are 512 byte blocks */
759 erase_start *= 512;
760 erase_end *= 512;
763 if (sd->erase_start > sd->size || sd->erase_end > sd->size) {
764 sd->card_status |= OUT_OF_RANGE;
765 sd->erase_start = INVALID_ADDRESS;
766 sd->erase_end = INVALID_ADDRESS;
767 return;
770 erase_start = sd_addr_to_wpnum(erase_start);
771 erase_end = sd_addr_to_wpnum(erase_end);
772 sd->erase_start = INVALID_ADDRESS;
773 sd->erase_end = INVALID_ADDRESS;
774 sd->csd[14] |= 0x40;
776 for (i = erase_start; i <= erase_end; i++) {
777 assert(i < sd->wpgrps_size);
778 if (test_bit(i, sd->wp_groups)) {
779 sd->card_status |= WP_ERASE_SKIP;
784 static uint32_t sd_wpbits(SDState *sd, uint64_t addr)
786 uint32_t i, wpnum;
787 uint32_t ret = 0;
789 wpnum = sd_addr_to_wpnum(addr);
791 for (i = 0; i < 32; i++, wpnum++, addr += WPGROUP_SIZE) {
792 assert(wpnum < sd->wpgrps_size);
793 if (addr < sd->size && test_bit(wpnum, sd->wp_groups)) {
794 ret |= (1 << i);
798 return ret;
801 static void sd_function_switch(SDState *sd, uint32_t arg)
803 int i, mode, new_func;
804 mode = !!(arg & 0x80000000);
806 sd->data[0] = 0x00; /* Maximum current consumption */
807 sd->data[1] = 0x01;
808 sd->data[2] = 0x80; /* Supported group 6 functions */
809 sd->data[3] = 0x01;
810 sd->data[4] = 0x80; /* Supported group 5 functions */
811 sd->data[5] = 0x01;
812 sd->data[6] = 0x80; /* Supported group 4 functions */
813 sd->data[7] = 0x01;
814 sd->data[8] = 0x80; /* Supported group 3 functions */
815 sd->data[9] = 0x01;
816 sd->data[10] = 0x80; /* Supported group 2 functions */
817 sd->data[11] = 0x43;
818 sd->data[12] = 0x80; /* Supported group 1 functions */
819 sd->data[13] = 0x03;
821 memset(&sd->data[14], 0, 3);
822 for (i = 0; i < 6; i ++) {
823 new_func = (arg >> (i * 4)) & 0x0f;
824 if (mode && new_func != 0x0f)
825 sd->function_group[i] = new_func;
826 sd->data[16 - (i >> 1)] |= new_func << ((i % 2) * 4);
828 memset(&sd->data[17], 0, 47);
831 static inline bool sd_wp_addr(SDState *sd, uint64_t addr)
833 return test_bit(sd_addr_to_wpnum(addr), sd->wp_groups);
836 static void sd_lock_command(SDState *sd)
838 int erase, lock, clr_pwd, set_pwd, pwd_len;
839 erase = !!(sd->data[0] & 0x08);
840 lock = sd->data[0] & 0x04;
841 clr_pwd = sd->data[0] & 0x02;
842 set_pwd = sd->data[0] & 0x01;
844 if (sd->blk_len > 1)
845 pwd_len = sd->data[1];
846 else
847 pwd_len = 0;
849 if (lock) {
850 trace_sdcard_lock();
851 } else {
852 trace_sdcard_unlock();
854 if (erase) {
855 if (!(sd->card_status & CARD_IS_LOCKED) || sd->blk_len > 1 ||
856 set_pwd || clr_pwd || lock || sd->wp_switch ||
857 (sd->csd[14] & 0x20)) {
858 sd->card_status |= LOCK_UNLOCK_FAILED;
859 return;
861 bitmap_zero(sd->wp_groups, sd->wpgrps_size);
862 sd->csd[14] &= ~0x10;
863 sd->card_status &= ~CARD_IS_LOCKED;
864 sd->pwd_len = 0;
865 /* Erasing the entire card here! */
866 fprintf(stderr, "SD: Card force-erased by CMD42\n");
867 return;
870 if (sd->blk_len < 2 + pwd_len ||
871 pwd_len <= sd->pwd_len ||
872 pwd_len > sd->pwd_len + 16) {
873 sd->card_status |= LOCK_UNLOCK_FAILED;
874 return;
877 if (sd->pwd_len && memcmp(sd->pwd, sd->data + 2, sd->pwd_len)) {
878 sd->card_status |= LOCK_UNLOCK_FAILED;
879 return;
882 pwd_len -= sd->pwd_len;
883 if ((pwd_len && !set_pwd) ||
884 (clr_pwd && (set_pwd || lock)) ||
885 (lock && !sd->pwd_len && !set_pwd) ||
886 (!set_pwd && !clr_pwd &&
887 (((sd->card_status & CARD_IS_LOCKED) && lock) ||
888 (!(sd->card_status & CARD_IS_LOCKED) && !lock)))) {
889 sd->card_status |= LOCK_UNLOCK_FAILED;
890 return;
893 if (set_pwd) {
894 memcpy(sd->pwd, sd->data + 2 + sd->pwd_len, pwd_len);
895 sd->pwd_len = pwd_len;
898 if (clr_pwd) {
899 sd->pwd_len = 0;
902 if (lock)
903 sd->card_status |= CARD_IS_LOCKED;
904 else
905 sd->card_status &= ~CARD_IS_LOCKED;
908 static sd_rsp_type_t sd_normal_command(SDState *sd, SDRequest req)
910 uint32_t rca = 0x0000;
911 uint64_t addr = (sd->ocr & (1 << 30)) ? (uint64_t) req.arg << 9 : req.arg;
913 /* CMD55 precedes an ACMD, so we are not interested in tracing it.
914 * However there is no ACMD55, so we want to trace this particular case.
916 if (req.cmd != 55 || sd->expecting_acmd) {
917 trace_sdcard_normal_command(sd->proto_name,
918 sd_cmd_name(req.cmd), req.cmd,
919 req.arg, sd_state_name(sd->state));
922 /* Not interpreting this as an app command */
923 sd->card_status &= ~APP_CMD;
925 if (sd_cmd_type[req.cmd] == sd_ac
926 || sd_cmd_type[req.cmd] == sd_adtc) {
927 rca = req.arg >> 16;
930 /* CMD23 (set block count) must be immediately followed by CMD18 or CMD25
931 * if not, its effects are cancelled */
932 if (sd->multi_blk_cnt != 0 && !(req.cmd == 18 || req.cmd == 25)) {
933 sd->multi_blk_cnt = 0;
936 if (sd_cmd_class[req.cmd] == 6 && FIELD_EX32(sd->ocr, OCR, CARD_CAPACITY)) {
937 /* Only Standard Capacity cards support class 6 commands */
938 return sd_illegal;
941 switch (req.cmd) {
942 /* Basic commands (Class 0 and Class 1) */
943 case 0: /* CMD0: GO_IDLE_STATE */
944 switch (sd->state) {
945 case sd_inactive_state:
946 return sd->spi ? sd_r1 : sd_r0;
948 default:
949 sd->state = sd_idle_state;
950 sd_reset(DEVICE(sd));
951 return sd->spi ? sd_r1 : sd_r0;
953 break;
955 case 1: /* CMD1: SEND_OP_CMD */
956 if (!sd->spi)
957 goto bad_cmd;
959 sd->state = sd_transfer_state;
960 return sd_r1;
962 case 2: /* CMD2: ALL_SEND_CID */
963 if (sd->spi)
964 goto bad_cmd;
965 switch (sd->state) {
966 case sd_ready_state:
967 sd->state = sd_identification_state;
968 return sd_r2_i;
970 default:
971 break;
973 break;
975 case 3: /* CMD3: SEND_RELATIVE_ADDR */
976 if (sd->spi)
977 goto bad_cmd;
978 switch (sd->state) {
979 case sd_identification_state:
980 case sd_standby_state:
981 sd->state = sd_standby_state;
982 sd_set_rca(sd);
983 return sd_r6;
985 default:
986 break;
988 break;
990 case 4: /* CMD4: SEND_DSR */
991 if (sd->spi)
992 goto bad_cmd;
993 switch (sd->state) {
994 case sd_standby_state:
995 break;
997 default:
998 break;
1000 break;
1002 case 5: /* CMD5: reserved for SDIO cards */
1003 return sd_illegal;
1005 case 6: /* CMD6: SWITCH_FUNCTION */
1006 switch (sd->mode) {
1007 case sd_data_transfer_mode:
1008 sd_function_switch(sd, req.arg);
1009 sd->state = sd_sendingdata_state;
1010 sd->data_start = 0;
1011 sd->data_offset = 0;
1012 return sd_r1;
1014 default:
1015 break;
1017 break;
1019 case 7: /* CMD7: SELECT/DESELECT_CARD */
1020 if (sd->spi)
1021 goto bad_cmd;
1022 switch (sd->state) {
1023 case sd_standby_state:
1024 if (sd->rca != rca)
1025 return sd_r0;
1027 sd->state = sd_transfer_state;
1028 return sd_r1b;
1030 case sd_transfer_state:
1031 case sd_sendingdata_state:
1032 if (sd->rca == rca)
1033 break;
1035 sd->state = sd_standby_state;
1036 return sd_r1b;
1038 case sd_disconnect_state:
1039 if (sd->rca != rca)
1040 return sd_r0;
1042 sd->state = sd_programming_state;
1043 return sd_r1b;
1045 case sd_programming_state:
1046 if (sd->rca == rca)
1047 break;
1049 sd->state = sd_disconnect_state;
1050 return sd_r1b;
1052 default:
1053 break;
1055 break;
1057 case 8: /* CMD8: SEND_IF_COND */
1058 if (sd->spec_version < SD_PHY_SPECv2_00_VERS) {
1059 break;
1061 if (sd->state != sd_idle_state) {
1062 break;
1064 sd->vhs = 0;
1066 /* No response if not exactly one VHS bit is set. */
1067 if (!(req.arg >> 8) || (req.arg >> (ctz32(req.arg & ~0xff) + 1))) {
1068 return sd->spi ? sd_r7 : sd_r0;
1071 /* Accept. */
1072 sd->vhs = req.arg;
1073 return sd_r7;
1075 case 9: /* CMD9: SEND_CSD */
1076 switch (sd->state) {
1077 case sd_standby_state:
1078 if (sd->rca != rca)
1079 return sd_r0;
1081 return sd_r2_s;
1083 case sd_transfer_state:
1084 if (!sd->spi)
1085 break;
1086 sd->state = sd_sendingdata_state;
1087 memcpy(sd->data, sd->csd, 16);
1088 sd->data_start = addr;
1089 sd->data_offset = 0;
1090 return sd_r1;
1092 default:
1093 break;
1095 break;
1097 case 10: /* CMD10: SEND_CID */
1098 switch (sd->state) {
1099 case sd_standby_state:
1100 if (sd->rca != rca)
1101 return sd_r0;
1103 return sd_r2_i;
1105 case sd_transfer_state:
1106 if (!sd->spi)
1107 break;
1108 sd->state = sd_sendingdata_state;
1109 memcpy(sd->data, sd->cid, 16);
1110 sd->data_start = addr;
1111 sd->data_offset = 0;
1112 return sd_r1;
1114 default:
1115 break;
1117 break;
1119 case 12: /* CMD12: STOP_TRANSMISSION */
1120 switch (sd->state) {
1121 case sd_sendingdata_state:
1122 sd->state = sd_transfer_state;
1123 return sd_r1b;
1125 case sd_receivingdata_state:
1126 sd->state = sd_programming_state;
1127 /* Bzzzzzzztt .... Operation complete. */
1128 sd->state = sd_transfer_state;
1129 return sd_r1b;
1131 default:
1132 break;
1134 break;
1136 case 13: /* CMD13: SEND_STATUS */
1137 switch (sd->mode) {
1138 case sd_data_transfer_mode:
1139 if (sd->rca != rca)
1140 return sd_r0;
1142 return sd_r1;
1144 default:
1145 break;
1147 break;
1149 case 15: /* CMD15: GO_INACTIVE_STATE */
1150 if (sd->spi)
1151 goto bad_cmd;
1152 switch (sd->mode) {
1153 case sd_data_transfer_mode:
1154 if (sd->rca != rca)
1155 return sd_r0;
1157 sd->state = sd_inactive_state;
1158 return sd_r0;
1160 default:
1161 break;
1163 break;
1165 /* Block read commands (Classs 2) */
1166 case 16: /* CMD16: SET_BLOCKLEN */
1167 switch (sd->state) {
1168 case sd_transfer_state:
1169 if (req.arg > (1 << HWBLOCK_SHIFT)) {
1170 sd->card_status |= BLOCK_LEN_ERROR;
1171 } else {
1172 trace_sdcard_set_blocklen(req.arg);
1173 sd->blk_len = req.arg;
1176 return sd_r1;
1178 default:
1179 break;
1181 break;
1183 case 17: /* CMD17: READ_SINGLE_BLOCK */
1184 switch (sd->state) {
1185 case sd_transfer_state:
1187 if (addr + sd->blk_len > sd->size) {
1188 sd->card_status |= ADDRESS_ERROR;
1189 return sd_r1;
1192 sd->state = sd_sendingdata_state;
1193 sd->data_start = addr;
1194 sd->data_offset = 0;
1195 return sd_r1;
1197 default:
1198 break;
1200 break;
1202 case 18: /* CMD18: READ_MULTIPLE_BLOCK */
1203 switch (sd->state) {
1204 case sd_transfer_state:
1206 if (addr + sd->blk_len > sd->size) {
1207 sd->card_status |= ADDRESS_ERROR;
1208 return sd_r1;
1211 sd->state = sd_sendingdata_state;
1212 sd->data_start = addr;
1213 sd->data_offset = 0;
1214 return sd_r1;
1216 default:
1217 break;
1219 break;
1221 case 19: /* CMD19: SEND_TUNING_BLOCK (SD) */
1222 if (sd->spec_version < SD_PHY_SPECv3_01_VERS) {
1223 break;
1225 if (sd->state == sd_transfer_state) {
1226 sd->state = sd_sendingdata_state;
1227 sd->data_offset = 0;
1228 return sd_r1;
1230 break;
1232 case 23: /* CMD23: SET_BLOCK_COUNT */
1233 if (sd->spec_version < SD_PHY_SPECv3_01_VERS) {
1234 break;
1236 switch (sd->state) {
1237 case sd_transfer_state:
1238 sd->multi_blk_cnt = req.arg;
1239 return sd_r1;
1241 default:
1242 break;
1244 break;
1246 /* Block write commands (Class 4) */
1247 case 24: /* CMD24: WRITE_SINGLE_BLOCK */
1248 switch (sd->state) {
1249 case sd_transfer_state:
1250 /* Writing in SPI mode not implemented. */
1251 if (sd->spi)
1252 break;
1254 if (addr + sd->blk_len > sd->size) {
1255 sd->card_status |= ADDRESS_ERROR;
1256 return sd_r1;
1259 sd->state = sd_receivingdata_state;
1260 sd->data_start = addr;
1261 sd->data_offset = 0;
1262 sd->blk_written = 0;
1264 if (sd_wp_addr(sd, sd->data_start)) {
1265 sd->card_status |= WP_VIOLATION;
1267 if (sd->csd[14] & 0x30) {
1268 sd->card_status |= WP_VIOLATION;
1270 return sd_r1;
1272 default:
1273 break;
1275 break;
1277 case 25: /* CMD25: WRITE_MULTIPLE_BLOCK */
1278 switch (sd->state) {
1279 case sd_transfer_state:
1280 /* Writing in SPI mode not implemented. */
1281 if (sd->spi)
1282 break;
1284 if (addr + sd->blk_len > sd->size) {
1285 sd->card_status |= ADDRESS_ERROR;
1286 return sd_r1;
1289 sd->state = sd_receivingdata_state;
1290 sd->data_start = addr;
1291 sd->data_offset = 0;
1292 sd->blk_written = 0;
1294 if (sd_wp_addr(sd, sd->data_start)) {
1295 sd->card_status |= WP_VIOLATION;
1297 if (sd->csd[14] & 0x30) {
1298 sd->card_status |= WP_VIOLATION;
1300 return sd_r1;
1302 default:
1303 break;
1305 break;
1307 case 26: /* CMD26: PROGRAM_CID */
1308 if (sd->spi)
1309 goto bad_cmd;
1310 switch (sd->state) {
1311 case sd_transfer_state:
1312 sd->state = sd_receivingdata_state;
1313 sd->data_start = 0;
1314 sd->data_offset = 0;
1315 return sd_r1;
1317 default:
1318 break;
1320 break;
1322 case 27: /* CMD27: PROGRAM_CSD */
1323 switch (sd->state) {
1324 case sd_transfer_state:
1325 sd->state = sd_receivingdata_state;
1326 sd->data_start = 0;
1327 sd->data_offset = 0;
1328 return sd_r1;
1330 default:
1331 break;
1333 break;
1335 /* Write protection (Class 6) */
1336 case 28: /* CMD28: SET_WRITE_PROT */
1337 switch (sd->state) {
1338 case sd_transfer_state:
1339 if (addr >= sd->size) {
1340 sd->card_status |= ADDRESS_ERROR;
1341 return sd_r1b;
1344 sd->state = sd_programming_state;
1345 set_bit(sd_addr_to_wpnum(addr), sd->wp_groups);
1346 /* Bzzzzzzztt .... Operation complete. */
1347 sd->state = sd_transfer_state;
1348 return sd_r1b;
1350 default:
1351 break;
1353 break;
1355 case 29: /* CMD29: CLR_WRITE_PROT */
1356 switch (sd->state) {
1357 case sd_transfer_state:
1358 if (addr >= sd->size) {
1359 sd->card_status |= ADDRESS_ERROR;
1360 return sd_r1b;
1363 sd->state = sd_programming_state;
1364 clear_bit(sd_addr_to_wpnum(addr), sd->wp_groups);
1365 /* Bzzzzzzztt .... Operation complete. */
1366 sd->state = sd_transfer_state;
1367 return sd_r1b;
1369 default:
1370 break;
1372 break;
1374 case 30: /* CMD30: SEND_WRITE_PROT */
1375 switch (sd->state) {
1376 case sd_transfer_state:
1377 sd->state = sd_sendingdata_state;
1378 *(uint32_t *) sd->data = sd_wpbits(sd, req.arg);
1379 sd->data_start = addr;
1380 sd->data_offset = 0;
1381 return sd_r1b;
1383 default:
1384 break;
1386 break;
1388 /* Erase commands (Class 5) */
1389 case 32: /* CMD32: ERASE_WR_BLK_START */
1390 switch (sd->state) {
1391 case sd_transfer_state:
1392 sd->erase_start = req.arg;
1393 return sd_r1;
1395 default:
1396 break;
1398 break;
1400 case 33: /* CMD33: ERASE_WR_BLK_END */
1401 switch (sd->state) {
1402 case sd_transfer_state:
1403 sd->erase_end = req.arg;
1404 return sd_r1;
1406 default:
1407 break;
1409 break;
1411 case 38: /* CMD38: ERASE */
1412 switch (sd->state) {
1413 case sd_transfer_state:
1414 if (sd->csd[14] & 0x30) {
1415 sd->card_status |= WP_VIOLATION;
1416 return sd_r1b;
1419 sd->state = sd_programming_state;
1420 sd_erase(sd);
1421 /* Bzzzzzzztt .... Operation complete. */
1422 sd->state = sd_transfer_state;
1423 return sd_r1b;
1425 default:
1426 break;
1428 break;
1430 /* Lock card commands (Class 7) */
1431 case 42: /* CMD42: LOCK_UNLOCK */
1432 switch (sd->state) {
1433 case sd_transfer_state:
1434 sd->state = sd_receivingdata_state;
1435 sd->data_start = 0;
1436 sd->data_offset = 0;
1437 return sd_r1;
1439 default:
1440 break;
1442 break;
1444 case 52 ... 54:
1445 /* CMD52, CMD53, CMD54: reserved for SDIO cards
1446 * (see the SDIO Simplified Specification V2.0)
1447 * Handle as illegal command but do not complain
1448 * on stderr, as some OSes may use these in their
1449 * probing for presence of an SDIO card.
1451 return sd_illegal;
1453 /* Application specific commands (Class 8) */
1454 case 55: /* CMD55: APP_CMD */
1455 switch (sd->state) {
1456 case sd_ready_state:
1457 case sd_identification_state:
1458 case sd_inactive_state:
1459 return sd_illegal;
1460 case sd_idle_state:
1461 if (rca) {
1462 qemu_log_mask(LOG_GUEST_ERROR,
1463 "SD: illegal RCA 0x%04x for APP_CMD\n", req.cmd);
1465 default:
1466 break;
1468 if (!sd->spi) {
1469 if (sd->rca != rca) {
1470 return sd_r0;
1473 sd->expecting_acmd = true;
1474 sd->card_status |= APP_CMD;
1475 return sd_r1;
1477 case 56: /* CMD56: GEN_CMD */
1478 switch (sd->state) {
1479 case sd_transfer_state:
1480 sd->data_offset = 0;
1481 if (req.arg & 1)
1482 sd->state = sd_sendingdata_state;
1483 else
1484 sd->state = sd_receivingdata_state;
1485 return sd_r1;
1487 default:
1488 break;
1490 break;
1492 case 58: /* CMD58: READ_OCR (SPI) */
1493 if (!sd->spi) {
1494 goto bad_cmd;
1496 return sd_r3;
1498 case 59: /* CMD59: CRC_ON_OFF (SPI) */
1499 if (!sd->spi) {
1500 goto bad_cmd;
1502 return sd_r1;
1504 default:
1505 bad_cmd:
1506 qemu_log_mask(LOG_GUEST_ERROR, "SD: Unknown CMD%i\n", req.cmd);
1507 return sd_illegal;
1510 qemu_log_mask(LOG_GUEST_ERROR, "SD: CMD%i in a wrong state\n", req.cmd);
1511 return sd_illegal;
1514 static sd_rsp_type_t sd_app_command(SDState *sd,
1515 SDRequest req)
1517 trace_sdcard_app_command(sd->proto_name, sd_acmd_name(req.cmd),
1518 req.cmd, req.arg, sd_state_name(sd->state));
1519 sd->card_status |= APP_CMD;
1520 switch (req.cmd) {
1521 case 6: /* ACMD6: SET_BUS_WIDTH */
1522 if (sd->spi) {
1523 goto unimplemented_spi_cmd;
1525 switch (sd->state) {
1526 case sd_transfer_state:
1527 sd->sd_status[0] &= 0x3f;
1528 sd->sd_status[0] |= (req.arg & 0x03) << 6;
1529 return sd_r1;
1531 default:
1532 break;
1534 break;
1536 case 13: /* ACMD13: SD_STATUS */
1537 switch (sd->state) {
1538 case sd_transfer_state:
1539 sd->state = sd_sendingdata_state;
1540 sd->data_start = 0;
1541 sd->data_offset = 0;
1542 return sd_r1;
1544 default:
1545 break;
1547 break;
1549 case 22: /* ACMD22: SEND_NUM_WR_BLOCKS */
1550 switch (sd->state) {
1551 case sd_transfer_state:
1552 *(uint32_t *) sd->data = sd->blk_written;
1554 sd->state = sd_sendingdata_state;
1555 sd->data_start = 0;
1556 sd->data_offset = 0;
1557 return sd_r1;
1559 default:
1560 break;
1562 break;
1564 case 23: /* ACMD23: SET_WR_BLK_ERASE_COUNT */
1565 switch (sd->state) {
1566 case sd_transfer_state:
1567 return sd_r1;
1569 default:
1570 break;
1572 break;
1574 case 41: /* ACMD41: SD_APP_OP_COND */
1575 if (sd->spi) {
1576 /* SEND_OP_CMD */
1577 sd->state = sd_transfer_state;
1578 return sd_r1;
1580 if (sd->state != sd_idle_state) {
1581 break;
1583 /* If it's the first ACMD41 since reset, we need to decide
1584 * whether to power up. If this is not an enquiry ACMD41,
1585 * we immediately report power on and proceed below to the
1586 * ready state, but if it is, we set a timer to model a
1587 * delay for power up. This works around a bug in EDK2
1588 * UEFI, which sends an initial enquiry ACMD41, but
1589 * assumes that the card is in ready state as soon as it
1590 * sees the power up bit set. */
1591 if (!FIELD_EX32(sd->ocr, OCR, CARD_POWER_UP)) {
1592 if ((req.arg & ACMD41_ENQUIRY_MASK) != 0) {
1593 timer_del(sd->ocr_power_timer);
1594 sd_ocr_powerup(sd);
1595 } else {
1596 trace_sdcard_inquiry_cmd41();
1597 if (!timer_pending(sd->ocr_power_timer)) {
1598 timer_mod_ns(sd->ocr_power_timer,
1599 (qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL)
1600 + OCR_POWER_DELAY_NS));
1605 if (FIELD_EX32(sd->ocr & req.arg, OCR, VDD_VOLTAGE_WINDOW)) {
1606 /* We accept any voltage. 10000 V is nothing.
1608 * Once we're powered up, we advance straight to ready state
1609 * unless it's an enquiry ACMD41 (bits 23:0 == 0).
1611 sd->state = sd_ready_state;
1614 return sd_r3;
1616 case 42: /* ACMD42: SET_CLR_CARD_DETECT */
1617 switch (sd->state) {
1618 case sd_transfer_state:
1619 /* Bringing in the 50KOhm pull-up resistor... Done. */
1620 return sd_r1;
1622 default:
1623 break;
1625 break;
1627 case 51: /* ACMD51: SEND_SCR */
1628 switch (sd->state) {
1629 case sd_transfer_state:
1630 sd->state = sd_sendingdata_state;
1631 sd->data_start = 0;
1632 sd->data_offset = 0;
1633 return sd_r1;
1635 default:
1636 break;
1638 break;
1640 case 18: /* Reserved for SD security applications */
1641 case 25:
1642 case 26:
1643 case 38:
1644 case 43 ... 49:
1645 /* Refer to the "SD Specifications Part3 Security Specification" for
1646 * information about the SD Security Features.
1648 qemu_log_mask(LOG_UNIMP, "SD: CMD%i Security not implemented\n",
1649 req.cmd);
1650 return sd_illegal;
1652 default:
1653 /* Fall back to standard commands. */
1654 return sd_normal_command(sd, req);
1656 unimplemented_spi_cmd:
1657 /* Commands that are recognised but not yet implemented in SPI mode. */
1658 qemu_log_mask(LOG_UNIMP, "SD: CMD%i not implemented in SPI mode\n",
1659 req.cmd);
1660 return sd_illegal;
1663 qemu_log_mask(LOG_GUEST_ERROR, "SD: ACMD%i in a wrong state\n", req.cmd);
1664 return sd_illegal;
1667 static int cmd_valid_while_locked(SDState *sd, const uint8_t cmd)
1669 /* Valid commands in locked state:
1670 * basic class (0)
1671 * lock card class (7)
1672 * CMD16
1673 * implicitly, the ACMD prefix CMD55
1674 * ACMD41 and ACMD42
1675 * Anything else provokes an "illegal command" response.
1677 if (sd->expecting_acmd) {
1678 return cmd == 41 || cmd == 42;
1680 if (cmd == 16 || cmd == 55) {
1681 return 1;
1683 return sd_cmd_class[cmd] == 0 || sd_cmd_class[cmd] == 7;
1686 int sd_do_command(SDState *sd, SDRequest *req,
1687 uint8_t *response) {
1688 int last_state;
1689 sd_rsp_type_t rtype;
1690 int rsplen;
1692 if (!sd->blk || !blk_is_inserted(sd->blk) || !sd->enable) {
1693 return 0;
1696 if (sd_req_crc_validate(req)) {
1697 sd->card_status |= COM_CRC_ERROR;
1698 rtype = sd_illegal;
1699 goto send_response;
1702 if (req->cmd >= SDMMC_CMD_MAX) {
1703 qemu_log_mask(LOG_GUEST_ERROR, "SD: incorrect command 0x%02x\n",
1704 req->cmd);
1705 req->cmd &= 0x3f;
1708 if (sd->card_status & CARD_IS_LOCKED) {
1709 if (!cmd_valid_while_locked(sd, req->cmd)) {
1710 sd->card_status |= ILLEGAL_COMMAND;
1711 sd->expecting_acmd = false;
1712 qemu_log_mask(LOG_GUEST_ERROR, "SD: Card is locked\n");
1713 rtype = sd_illegal;
1714 goto send_response;
1718 last_state = sd->state;
1719 sd_set_mode(sd);
1721 if (sd->expecting_acmd) {
1722 sd->expecting_acmd = false;
1723 rtype = sd_app_command(sd, *req);
1724 } else {
1725 rtype = sd_normal_command(sd, *req);
1728 if (rtype == sd_illegal) {
1729 sd->card_status |= ILLEGAL_COMMAND;
1730 } else {
1731 /* Valid command, we can update the 'state before command' bits.
1732 * (Do this now so they appear in r1 responses.)
1734 sd->current_cmd = req->cmd;
1735 sd->card_status &= ~CURRENT_STATE;
1736 sd->card_status |= (last_state << 9);
1739 send_response:
1740 switch (rtype) {
1741 case sd_r1:
1742 case sd_r1b:
1743 sd_response_r1_make(sd, response);
1744 rsplen = 4;
1745 break;
1747 case sd_r2_i:
1748 memcpy(response, sd->cid, sizeof(sd->cid));
1749 rsplen = 16;
1750 break;
1752 case sd_r2_s:
1753 memcpy(response, sd->csd, sizeof(sd->csd));
1754 rsplen = 16;
1755 break;
1757 case sd_r3:
1758 sd_response_r3_make(sd, response);
1759 rsplen = 4;
1760 break;
1762 case sd_r6:
1763 sd_response_r6_make(sd, response);
1764 rsplen = 4;
1765 break;
1767 case sd_r7:
1768 sd_response_r7_make(sd, response);
1769 rsplen = 4;
1770 break;
1772 case sd_r0:
1773 case sd_illegal:
1774 rsplen = 0;
1775 break;
1776 default:
1777 g_assert_not_reached();
1779 trace_sdcard_response(sd_response_name(rtype), rsplen);
1781 if (rtype != sd_illegal) {
1782 /* Clear the "clear on valid command" status bits now we've
1783 * sent any response
1785 sd->card_status &= ~CARD_STATUS_B;
1788 #ifdef DEBUG_SD
1789 qemu_hexdump(stderr, "Response", response, rsplen);
1790 #endif
1792 return rsplen;
1795 static void sd_blk_read(SDState *sd, uint64_t addr, uint32_t len)
1797 trace_sdcard_read_block(addr, len);
1798 if (!sd->blk || blk_pread(sd->blk, addr, sd->data, len) < 0) {
1799 fprintf(stderr, "sd_blk_read: read error on host side\n");
1803 static void sd_blk_write(SDState *sd, uint64_t addr, uint32_t len)
1805 trace_sdcard_write_block(addr, len);
1806 if (!sd->blk || blk_pwrite(sd->blk, addr, sd->data, len, 0) < 0) {
1807 fprintf(stderr, "sd_blk_write: write error on host side\n");
1811 #define BLK_READ_BLOCK(a, len) sd_blk_read(sd, a, len)
1812 #define BLK_WRITE_BLOCK(a, len) sd_blk_write(sd, a, len)
1813 #define APP_READ_BLOCK(a, len) memset(sd->data, 0xec, len)
1814 #define APP_WRITE_BLOCK(a, len)
1816 void sd_write_byte(SDState *sd, uint8_t value)
1818 int i;
1820 if (!sd->blk || !blk_is_inserted(sd->blk) || !sd->enable)
1821 return;
1823 if (sd->state != sd_receivingdata_state) {
1824 qemu_log_mask(LOG_GUEST_ERROR,
1825 "%s: not in Receiving-Data state\n", __func__);
1826 return;
1829 if (sd->card_status & (ADDRESS_ERROR | WP_VIOLATION))
1830 return;
1832 trace_sdcard_write_data(sd->proto_name,
1833 sd_acmd_name(sd->current_cmd),
1834 sd->current_cmd, value);
1835 switch (sd->current_cmd) {
1836 case 24: /* CMD24: WRITE_SINGLE_BLOCK */
1837 sd->data[sd->data_offset ++] = value;
1838 if (sd->data_offset >= sd->blk_len) {
1839 /* TODO: Check CRC before committing */
1840 sd->state = sd_programming_state;
1841 BLK_WRITE_BLOCK(sd->data_start, sd->data_offset);
1842 sd->blk_written ++;
1843 sd->csd[14] |= 0x40;
1844 /* Bzzzzzzztt .... Operation complete. */
1845 sd->state = sd_transfer_state;
1847 break;
1849 case 25: /* CMD25: WRITE_MULTIPLE_BLOCK */
1850 if (sd->data_offset == 0) {
1851 /* Start of the block - let's check the address is valid */
1852 if (sd->data_start + sd->blk_len > sd->size) {
1853 sd->card_status |= ADDRESS_ERROR;
1854 break;
1856 if (sd_wp_addr(sd, sd->data_start)) {
1857 sd->card_status |= WP_VIOLATION;
1858 break;
1861 sd->data[sd->data_offset++] = value;
1862 if (sd->data_offset >= sd->blk_len) {
1863 /* TODO: Check CRC before committing */
1864 sd->state = sd_programming_state;
1865 BLK_WRITE_BLOCK(sd->data_start, sd->data_offset);
1866 sd->blk_written++;
1867 sd->data_start += sd->blk_len;
1868 sd->data_offset = 0;
1869 sd->csd[14] |= 0x40;
1871 /* Bzzzzzzztt .... Operation complete. */
1872 if (sd->multi_blk_cnt != 0) {
1873 if (--sd->multi_blk_cnt == 0) {
1874 /* Stop! */
1875 sd->state = sd_transfer_state;
1876 break;
1880 sd->state = sd_receivingdata_state;
1882 break;
1884 case 26: /* CMD26: PROGRAM_CID */
1885 sd->data[sd->data_offset ++] = value;
1886 if (sd->data_offset >= sizeof(sd->cid)) {
1887 /* TODO: Check CRC before committing */
1888 sd->state = sd_programming_state;
1889 for (i = 0; i < sizeof(sd->cid); i ++)
1890 if ((sd->cid[i] | 0x00) != sd->data[i])
1891 sd->card_status |= CID_CSD_OVERWRITE;
1893 if (!(sd->card_status & CID_CSD_OVERWRITE))
1894 for (i = 0; i < sizeof(sd->cid); i ++) {
1895 sd->cid[i] |= 0x00;
1896 sd->cid[i] &= sd->data[i];
1898 /* Bzzzzzzztt .... Operation complete. */
1899 sd->state = sd_transfer_state;
1901 break;
1903 case 27: /* CMD27: PROGRAM_CSD */
1904 sd->data[sd->data_offset ++] = value;
1905 if (sd->data_offset >= sizeof(sd->csd)) {
1906 /* TODO: Check CRC before committing */
1907 sd->state = sd_programming_state;
1908 for (i = 0; i < sizeof(sd->csd); i ++)
1909 if ((sd->csd[i] | sd_csd_rw_mask[i]) !=
1910 (sd->data[i] | sd_csd_rw_mask[i]))
1911 sd->card_status |= CID_CSD_OVERWRITE;
1913 /* Copy flag (OTP) & Permanent write protect */
1914 if (sd->csd[14] & ~sd->data[14] & 0x60)
1915 sd->card_status |= CID_CSD_OVERWRITE;
1917 if (!(sd->card_status & CID_CSD_OVERWRITE))
1918 for (i = 0; i < sizeof(sd->csd); i ++) {
1919 sd->csd[i] |= sd_csd_rw_mask[i];
1920 sd->csd[i] &= sd->data[i];
1922 /* Bzzzzzzztt .... Operation complete. */
1923 sd->state = sd_transfer_state;
1925 break;
1927 case 42: /* CMD42: LOCK_UNLOCK */
1928 sd->data[sd->data_offset ++] = value;
1929 if (sd->data_offset >= sd->blk_len) {
1930 /* TODO: Check CRC before committing */
1931 sd->state = sd_programming_state;
1932 sd_lock_command(sd);
1933 /* Bzzzzzzztt .... Operation complete. */
1934 sd->state = sd_transfer_state;
1936 break;
1938 case 56: /* CMD56: GEN_CMD */
1939 sd->data[sd->data_offset ++] = value;
1940 if (sd->data_offset >= sd->blk_len) {
1941 APP_WRITE_BLOCK(sd->data_start, sd->data_offset);
1942 sd->state = sd_transfer_state;
1944 break;
1946 default:
1947 qemu_log_mask(LOG_GUEST_ERROR, "%s: unknown command\n", __func__);
1948 break;
1952 #define SD_TUNING_BLOCK_SIZE 64
1954 static const uint8_t sd_tuning_block_pattern[SD_TUNING_BLOCK_SIZE] = {
1955 /* See: Physical Layer Simplified Specification Version 3.01, Table 4-2 */
1956 0xff, 0x0f, 0xff, 0x00, 0x0f, 0xfc, 0xc3, 0xcc,
1957 0xc3, 0x3c, 0xcc, 0xff, 0xfe, 0xff, 0xfe, 0xef,
1958 0xff, 0xdf, 0xff, 0xdd, 0xff, 0xfb, 0xff, 0xfb,
1959 0xbf, 0xff, 0x7f, 0xff, 0x77, 0xf7, 0xbd, 0xef,
1960 0xff, 0xf0, 0xff, 0xf0, 0x0f, 0xfc, 0xcc, 0x3c,
1961 0xcc, 0x33, 0xcc, 0xcf, 0xff, 0xef, 0xff, 0xee,
1962 0xff, 0xfd, 0xff, 0xfd, 0xdf, 0xff, 0xbf, 0xff,
1963 0xbb, 0xff, 0xf7, 0xff, 0xf7, 0x7f, 0x7b, 0xde,
1966 uint8_t sd_read_byte(SDState *sd)
1968 /* TODO: Append CRCs */
1969 uint8_t ret;
1970 uint32_t io_len;
1972 if (!sd->blk || !blk_is_inserted(sd->blk) || !sd->enable)
1973 return 0x00;
1975 if (sd->state != sd_sendingdata_state) {
1976 qemu_log_mask(LOG_GUEST_ERROR,
1977 "%s: not in Sending-Data state\n", __func__);
1978 return 0x00;
1981 if (sd->card_status & (ADDRESS_ERROR | WP_VIOLATION))
1982 return 0x00;
1984 io_len = (sd->ocr & (1 << 30)) ? 512 : sd->blk_len;
1986 trace_sdcard_read_data(sd->proto_name,
1987 sd_acmd_name(sd->current_cmd),
1988 sd->current_cmd, io_len);
1989 switch (sd->current_cmd) {
1990 case 6: /* CMD6: SWITCH_FUNCTION */
1991 ret = sd->data[sd->data_offset ++];
1993 if (sd->data_offset >= 64)
1994 sd->state = sd_transfer_state;
1995 break;
1997 case 9: /* CMD9: SEND_CSD */
1998 case 10: /* CMD10: SEND_CID */
1999 ret = sd->data[sd->data_offset ++];
2001 if (sd->data_offset >= 16)
2002 sd->state = sd_transfer_state;
2003 break;
2005 case 13: /* ACMD13: SD_STATUS */
2006 ret = sd->sd_status[sd->data_offset ++];
2008 if (sd->data_offset >= sizeof(sd->sd_status))
2009 sd->state = sd_transfer_state;
2010 break;
2012 case 17: /* CMD17: READ_SINGLE_BLOCK */
2013 if (sd->data_offset == 0)
2014 BLK_READ_BLOCK(sd->data_start, io_len);
2015 ret = sd->data[sd->data_offset ++];
2017 if (sd->data_offset >= io_len)
2018 sd->state = sd_transfer_state;
2019 break;
2021 case 18: /* CMD18: READ_MULTIPLE_BLOCK */
2022 if (sd->data_offset == 0) {
2023 if (sd->data_start + io_len > sd->size) {
2024 sd->card_status |= ADDRESS_ERROR;
2025 return 0x00;
2027 BLK_READ_BLOCK(sd->data_start, io_len);
2029 ret = sd->data[sd->data_offset ++];
2031 if (sd->data_offset >= io_len) {
2032 sd->data_start += io_len;
2033 sd->data_offset = 0;
2035 if (sd->multi_blk_cnt != 0) {
2036 if (--sd->multi_blk_cnt == 0) {
2037 /* Stop! */
2038 sd->state = sd_transfer_state;
2039 break;
2043 break;
2045 case 19: /* CMD19: SEND_TUNING_BLOCK (SD) */
2046 if (sd->data_offset >= SD_TUNING_BLOCK_SIZE - 1) {
2047 sd->state = sd_transfer_state;
2049 ret = sd_tuning_block_pattern[sd->data_offset++];
2050 break;
2052 case 22: /* ACMD22: SEND_NUM_WR_BLOCKS */
2053 ret = sd->data[sd->data_offset ++];
2055 if (sd->data_offset >= 4)
2056 sd->state = sd_transfer_state;
2057 break;
2059 case 30: /* CMD30: SEND_WRITE_PROT */
2060 ret = sd->data[sd->data_offset ++];
2062 if (sd->data_offset >= 4)
2063 sd->state = sd_transfer_state;
2064 break;
2066 case 51: /* ACMD51: SEND_SCR */
2067 ret = sd->scr[sd->data_offset ++];
2069 if (sd->data_offset >= sizeof(sd->scr))
2070 sd->state = sd_transfer_state;
2071 break;
2073 case 56: /* CMD56: GEN_CMD */
2074 if (sd->data_offset == 0)
2075 APP_READ_BLOCK(sd->data_start, sd->blk_len);
2076 ret = sd->data[sd->data_offset ++];
2078 if (sd->data_offset >= sd->blk_len)
2079 sd->state = sd_transfer_state;
2080 break;
2082 default:
2083 qemu_log_mask(LOG_GUEST_ERROR, "%s: unknown command\n", __func__);
2084 return 0x00;
2087 return ret;
2090 static bool sd_data_ready(SDState *sd)
2092 return sd->state == sd_sendingdata_state;
2095 void sd_enable(SDState *sd, bool enable)
2097 sd->enable = enable;
2100 static void sd_instance_init(Object *obj)
2102 SDState *sd = SD_CARD(obj);
2104 sd->enable = true;
2105 sd->ocr_power_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL, sd_ocr_powerup, sd);
2108 static void sd_instance_finalize(Object *obj)
2110 SDState *sd = SD_CARD(obj);
2112 timer_free(sd->ocr_power_timer);
2115 static void sd_realize(DeviceState *dev, Error **errp)
2117 SDState *sd = SD_CARD(dev);
2118 int ret;
2120 sd->proto_name = sd->spi ? "SPI" : "SD";
2122 switch (sd->spec_version) {
2123 case SD_PHY_SPECv1_10_VERS
2124 ... SD_PHY_SPECv3_01_VERS:
2125 break;
2126 default:
2127 error_setg(errp, "Invalid SD card Spec version: %u", sd->spec_version);
2128 return;
2131 if (sd->blk) {
2132 int64_t blk_size;
2134 if (!blk_supports_write_perm(sd->blk)) {
2135 error_setg(errp, "Cannot use read-only drive as SD card");
2136 return;
2139 blk_size = blk_getlength(sd->blk);
2140 if (blk_size > 0 && !is_power_of_2(blk_size)) {
2141 int64_t blk_size_aligned = pow2ceil(blk_size);
2142 char *blk_size_str;
2144 blk_size_str = size_to_str(blk_size);
2145 error_setg(errp, "Invalid SD card size: %s", blk_size_str);
2146 g_free(blk_size_str);
2148 blk_size_str = size_to_str(blk_size_aligned);
2149 error_append_hint(errp,
2150 "SD card size has to be a power of 2, e.g. %s.\n"
2151 "You can resize disk images with"
2152 " 'qemu-img resize <imagefile> <new-size>'\n"
2153 "(note that this will lose data if you make the"
2154 " image smaller than it currently is).\n",
2155 blk_size_str);
2156 g_free(blk_size_str);
2158 return;
2161 ret = blk_set_perm(sd->blk, BLK_PERM_CONSISTENT_READ | BLK_PERM_WRITE,
2162 BLK_PERM_ALL, errp);
2163 if (ret < 0) {
2164 return;
2166 blk_set_dev_ops(sd->blk, &sd_block_ops, sd);
2170 static Property sd_properties[] = {
2171 DEFINE_PROP_UINT8("spec_version", SDState,
2172 spec_version, SD_PHY_SPECv2_00_VERS),
2173 DEFINE_PROP_DRIVE("drive", SDState, blk),
2174 /* We do not model the chip select pin, so allow the board to select
2175 * whether card should be in SSI or MMC/SD mode. It is also up to the
2176 * board to ensure that ssi transfers only occur when the chip select
2177 * is asserted. */
2178 DEFINE_PROP_BOOL("spi", SDState, spi, false),
2179 DEFINE_PROP_END_OF_LIST()
2182 static void sd_class_init(ObjectClass *klass, void *data)
2184 DeviceClass *dc = DEVICE_CLASS(klass);
2185 SDCardClass *sc = SD_CARD_CLASS(klass);
2187 dc->realize = sd_realize;
2188 device_class_set_props(dc, sd_properties);
2189 dc->vmsd = &sd_vmstate;
2190 dc->reset = sd_reset;
2191 dc->bus_type = TYPE_SD_BUS;
2192 set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
2194 sc->set_voltage = sd_set_voltage;
2195 sc->get_dat_lines = sd_get_dat_lines;
2196 sc->get_cmd_line = sd_get_cmd_line;
2197 sc->do_command = sd_do_command;
2198 sc->write_byte = sd_write_byte;
2199 sc->read_byte = sd_read_byte;
2200 sc->data_ready = sd_data_ready;
2201 sc->enable = sd_enable;
2202 sc->get_inserted = sd_get_inserted;
2203 sc->get_readonly = sd_get_readonly;
2206 static const TypeInfo sd_info = {
2207 .name = TYPE_SD_CARD,
2208 .parent = TYPE_DEVICE,
2209 .instance_size = sizeof(SDState),
2210 .class_size = sizeof(SDCardClass),
2211 .class_init = sd_class_init,
2212 .instance_init = sd_instance_init,
2213 .instance_finalize = sd_instance_finalize,
2216 static void sd_register_types(void)
2218 type_register_static(&sd_info);
2221 type_init(sd_register_types)