1 /* 2 * SD Memory Card emulation as defined in the "SD Memory Card Physical 3 * layer specification, Version 2.00." 4 * 5 * Copyright (c) 2006 Andrzej Zaborowski <balrog@zabor.org> 6 * Copyright (c) 2007 CodeSourcery 7 * Copyright (c) 2018 Philippe Mathieu-Daudé <f4bug@amsat.org> 8 * 9 * Redistribution and use in source and binary forms, with or without 10 * modification, are permitted provided that the following conditions 11 * are met: 12 * 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. 19 * 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. 31 */ 32 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" 52 53 //#define DEBUG_SD 1 54 55 #define SDSC_MAX_CAPACITY (2 * GiB) 56 57 #define INVALID_ADDRESS UINT32_MAX 58 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; 70 71 enum SDCardModes { 72 sd_inactive, 73 sd_card_identification_mode, 74 sd_data_transfer_mode, 75 }; 76 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, 88 }; 89 90 typedef sd_rsp_type_t (*sd_cmd_handler)(SDState *sd, SDRequest req); 91 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; 97 98 struct SDState { 99 DeviceState parent_obj; 100 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; 104 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]; 113 114 /* Static properties */ 115 116 uint8_t spec_version; 117 BlockBackend *blk; 118 119 /* Runtime changeables */ 120 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! 138 */ 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; 150 }; 151 152 static void sd_realize(DeviceState *dev, Error **errp); 153 154 static const struct SDProto *sd_proto(SDState *sd) 155 { 156 SDCardClass *sc = SD_CARD_GET_CLASS(sd); 157 158 return sc->proto; 159 } 160 161 static const SDProto sd_proto_spi; 162 163 static bool sd_is_spi(SDState *sd) 164 { 165 return sd_proto(sd) == &sd_proto_spi; 166 } 167 168 static const char *sd_version_str(enum SDPhySpecificationVersion version) 169 { 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", 174 }; 175 if (version >= ARRAY_SIZE(sdphy_version)) { 176 return "unsupported version"; 177 } 178 return sdphy_version[version]; 179 } 180 181 static const char *sd_state_name(enum SDCardStates state) 182 { 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", 193 }; 194 if (state == sd_inactive_state) { 195 return "inactive"; 196 } 197 assert(state < ARRAY_SIZE(state_name)); 198 return state_name[state]; 199 } 200 201 static const char *sd_response_name(sd_rsp_type_t rsp) 202 { 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)", 211 }; 212 if (rsp == sd_illegal) { 213 return "ILLEGAL RESP"; 214 } 215 if (rsp == sd_r1b) { 216 rsp = sd_r1; 217 } 218 assert(rsp < ARRAY_SIZE(response_name)); 219 return response_name[rsp]; 220 } 221 222 static uint8_t sd_get_dat_lines(SDState *sd) 223 { 224 return sd->enable ? sd->dat_lines : 0; 225 } 226 227 static bool sd_get_cmd_line(SDState *sd) 228 { 229 return sd->enable ? sd->cmd_line : false; 230 } 231 232 static void sd_set_voltage(SDState *sd, uint16_t millivolts) 233 { 234 trace_sdcard_set_voltage(millivolts); 235 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); 243 } 244 } 245 246 static void sd_set_mode(SDState *sd) 247 { 248 switch (sd->state) { 249 case sd_inactive_state: 250 sd->mode = sd_inactive; 251 break; 252 253 case sd_idle_state: 254 case sd_ready_state: 255 case sd_identification_state: 256 sd->mode = sd_card_identification_mode; 257 break; 258 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; 267 } 268 } 269 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, 282 }; 283 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, 289 }; 290 291 static uint8_t sd_crc7(const void *message, size_t width) 292 { 293 int i, bit; 294 uint8_t shift_reg = 0x00; 295 const uint8_t *msg = (const uint8_t *)message; 296 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; 302 } 303 304 return shift_reg; 305 } 306 307 #define OCR_POWER_DELAY_NS 500000 /* 0.5ms */ 308 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) 317 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) 324 325 static void sd_ocr_powerup(void *opaque) 326 { 327 SDState *sd = opaque; 328 329 trace_sdcard_powerup(); 330 assert(!FIELD_EX32(sd->ocr, OCR, CARD_POWER_UP)); 331 332 /* card power-up OK */ 333 sd->ocr = FIELD_DP32(sd->ocr, OCR, CARD_POWER_UP, 1); 334 335 if (sd->size > SDSC_MAX_CAPACITY) { 336 sd->ocr = FIELD_DP32(sd->ocr, OCR, CARD_CAPACITY, 1); 337 } 338 } 339 340 static void sd_set_ocr(SDState *sd) 341 { 342 /* All voltages OK */ 343 sd->ocr = R_OCR_VDD_VOLTAGE_WIN_HI_MASK; 344 345 if (sd_is_spi(sd)) { 346 /* 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. 351 */ 352 sd_ocr_powerup(sd); 353 } 354 } 355 356 static void sd_set_scr(SDState *sd) 357 { 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 */ 363 } 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 */ 369 } 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; 376 } 377 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 384 385 static void sd_set_cid(SDState *sd) 386 { 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; 404 } 405 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)) 411 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, 415 }; 416 417 static void sd_set_csd(SDState *sd, uint64_t size) 418 { 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; 423 424 /* To indicate 2 GiB card, BLOCK_LEN shall be 1024 bytes */ 425 if (size == SDSC_MAX_CAPACITY) { 426 hwblock_shift += 1; 427 } 428 csize = (size >> (CMULT_SHIFT + hwblock_shift)) - 1; 429 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; 473 } 474 sd->csd[15] = (sd_crc7(sd->csd, 15) << 1) | 1; 475 } 476 477 static void sd_set_rca(SDState *sd) 478 { 479 sd->rca += 0x4567; 480 } 481 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) 505 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 510 */ 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) 532 533 static void sd_set_cardstatus(SDState *sd) 534 { 535 sd->card_status = 0x00000100; 536 } 537 538 static void sd_set_sdstatus(SDState *sd) 539 { 540 memset(sd->sd_status, 0, 64); 541 } 542 543 static int sd_req_crc_validate(SDRequest *req) 544 { 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 */ 550 } 551 552 static void sd_response_r1_make(SDState *sd, uint8_t *response) 553 { 554 stl_be_p(response, sd->card_status); 555 556 /* Clear the "clear on read" status bits */ 557 sd->card_status &= ~CARD_STATUS_C; 558 } 559 560 static void sd_response_r3_make(SDState *sd, uint8_t *response) 561 { 562 stl_be_p(response, sd->ocr & ACMD41_R3_MASK); 563 } 564 565 static void sd_response_r6_make(SDState *sd, uint8_t *response) 566 { 567 uint16_t status; 568 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); 575 } 576 577 static void sd_response_r7_make(SDState *sd, uint8_t *response) 578 { 579 stl_be_p(response, sd->vhs); 580 } 581 582 static inline uint64_t sd_addr_to_wpnum(uint64_t addr) 583 { 584 return addr >> (HWBLOCK_SHIFT + SECTOR_SHIFT + WPGROUP_SHIFT); 585 } 586 587 static void sd_reset(DeviceState *dev) 588 { 589 SDState *sd = SD_CARD(dev); 590 uint64_t size; 591 uint64_t sect; 592 593 trace_sdcard_reset(); 594 if (sd->blk) { 595 blk_get_geometry(sd->blk, §); 596 } else { 597 sect = 0; 598 } 599 size = sect << 9; 600 601 sect = sd_addr_to_wpnum(size) + 1; 602 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); 612 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; 626 } 627 628 static bool sd_get_inserted(SDState *sd) 629 { 630 return sd->blk && blk_is_inserted(sd->blk); 631 } 632 633 static bool sd_get_readonly(SDState *sd) 634 { 635 return sd->wp_switch; 636 } 637 638 static void sd_cardchange(void *opaque, bool load, Error **errp) 639 { 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); 645 646 if (inserted) { 647 trace_sdcard_inserted(readonly); 648 sd_reset(dev); 649 } else { 650 trace_sdcard_ejected(); 651 } 652 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); 657 } 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); 663 } 664 } 665 } 666 667 static const BlockDevOps sd_block_ops = { 668 .change_media_cb = sd_cardchange, 669 }; 670 671 static bool sd_ocr_vmstate_needed(void *opaque) 672 { 673 SDState *sd = opaque; 674 675 /* Include the OCR state (and timer) if it is not yet powered up */ 676 return !FIELD_EX32(sd->ocr, OCR, CARD_POWER_UP); 677 } 678 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() 688 }, 689 }; 690 691 static int sd_vmstate_pre_load(void *opaque) 692 { 693 SDState *sd = opaque; 694 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. 698 */ 699 sd_ocr_powerup(sd); 700 701 return 0; 702 } 703 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() 735 }, 736 .subsections = (const VMStateDescription*[]) { 737 &sd_ocr_vmstate, 738 NULL 739 }, 740 }; 741 742 /* Legacy initialization function for use by non-qdevified callers */ 743 SDState *sd_init(BlockBackend *blk, bool is_spi) 744 { 745 Object *obj; 746 DeviceState *dev; 747 SDState *sd; 748 Error *err = NULL; 749 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; 755 } 756 757 /* 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. 762 */ 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; 769 } 770 771 sd = SD_CARD(dev); 772 sd->me_no_qdev_me_kill_mammoth_with_rocks = true; 773 return sd; 774 } 775 776 void sd_set_cb(SDState *sd, qemu_irq readonly, qemu_irq insert) 777 { 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); 782 } 783 784 static void sd_blk_read(SDState *sd, uint64_t addr, uint32_t len) 785 { 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"); 789 } 790 } 791 792 static void sd_blk_write(SDState *sd, uint64_t addr, uint32_t len) 793 { 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"); 797 } 798 } 799 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) 804 805 static void sd_erase(SDState *sd) 806 { 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; 813 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; 821 } 822 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; 828 } 829 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; 835 } 836 837 sd->erase_start = INVALID_ADDRESS; 838 sd->erase_end = INVALID_ADDRESS; 839 sd->csd[14] |= 0x40; 840 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; 851 } 852 } 853 BLK_WRITE_BLOCK(erase_addr, erase_len); 854 } 855 } 856 857 static uint32_t sd_wpbits(SDState *sd, uint64_t addr) 858 { 859 uint32_t i, wpnum; 860 uint32_t ret = 0; 861 862 wpnum = sd_addr_to_wpnum(addr); 863 864 for (i = 0; i < 32; i++, wpnum++, addr += WPGROUP_SIZE) { 865 if (addr >= sd->size) { 866 /* 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. 869 */ 870 continue; 871 } 872 assert(wpnum < sd->wp_group_bits); 873 if (test_bit(wpnum, sd->wp_group_bmap)) { 874 ret |= (1 << i); 875 } 876 } 877 878 return ret; 879 } 880 881 static void sd_function_switch(SDState *sd, uint32_t arg) 882 { 883 int i, mode, new_func; 884 mode = !!(arg & 0x80000000); 885 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; 900 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); 907 } 908 memset(&sd->data[17], 0, 47); 909 } 910 911 static inline bool sd_wp_addr(SDState *sd, uint64_t addr) 912 { 913 return test_bit(sd_addr_to_wpnum(addr), sd->wp_group_bmap); 914 } 915 916 static void sd_lock_command(SDState *sd) 917 { 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; 923 924 if (sd->blk_len > 1) 925 pwd_len = sd->data[1]; 926 else 927 pwd_len = 0; 928 929 if (lock) { 930 trace_sdcard_lock(); 931 } else { 932 trace_sdcard_unlock(); 933 } 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; 940 } 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; 948 } 949 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; 955 } 956 957 if (sd->pwd_len && memcmp(sd->pwd, sd->data + 2, sd->pwd_len)) { 958 sd->card_status |= LOCK_UNLOCK_FAILED; 959 return; 960 } 961 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; 971 } 972 973 if (set_pwd) { 974 memcpy(sd->pwd, sd->data + 2 + sd->pwd_len, pwd_len); 975 sd->pwd_len = pwd_len; 976 } 977 978 if (clr_pwd) { 979 sd->pwd_len = 0; 980 } 981 982 if (lock) 983 sd->card_status |= CARD_IS_LOCKED; 984 else 985 sd->card_status &= ~CARD_IS_LOCKED; 986 } 987 988 static bool address_in_range(SDState *sd, const char *desc, 989 uint64_t addr, uint32_t length) 990 { 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; 997 } 998 return true; 999 } 1000 1001 static sd_rsp_type_t sd_invalid_state_for_cmd(SDState *sd, SDRequest req) 1002 { 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)); 1006 1007 return sd_illegal; 1008 } 1009 1010 static sd_rsp_type_t sd_cmd_illegal(SDState *sd, SDRequest req) 1011 { 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)); 1015 1016 return sd_illegal; 1017 } 1018 1019 /* Commands that are recognised but not yet implemented. */ 1020 static sd_rsp_type_t sd_cmd_unimplemented(SDState *sd, SDRequest req) 1021 { 1022 qemu_log_mask(LOG_UNIMP, "%s: CMD%i not implemented\n", 1023 sd_proto(sd)->name, req.cmd); 1024 1025 return sd_illegal; 1026 } 1027 1028 static sd_rsp_type_t sd_cmd_GO_IDLE_STATE(SDState *sd, SDRequest req) 1029 { 1030 if (sd->state != sd_inactive_state) { 1031 sd->state = sd_idle_state; 1032 sd_reset(DEVICE(sd)); 1033 } 1034 1035 return sd_is_spi(sd) ? sd_r1 : sd_r0; 1036 } 1037 1038 static sd_rsp_type_t sd_cmd_SEND_OP_CMD(SDState *sd, SDRequest req) 1039 { 1040 sd->state = sd_transfer_state; 1041 1042 return sd_r1; 1043 } 1044 1045 static sd_rsp_type_t sd_cmd_ALL_SEND_CID(SDState *sd, SDRequest req) 1046 { 1047 if (sd->state != sd_ready_state) { 1048 return sd_invalid_state_for_cmd(sd, req); 1049 } 1050 1051 sd->state = sd_identification_state; 1052 1053 return sd_r2_i; 1054 } 1055 1056 static sd_rsp_type_t sd_cmd_SEND_RELATIVE_ADDR(SDState *sd, SDRequest req) 1057 { 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; 1064 1065 default: 1066 return sd_invalid_state_for_cmd(sd, req); 1067 } 1068 } 1069 1070 static sd_rsp_type_t sd_cmd_SEND_TUNING_BLOCK(SDState *sd, SDRequest req) 1071 { 1072 if (sd->spec_version < SD_PHY_SPECv3_01_VERS) { 1073 return sd_cmd_illegal(sd, req); 1074 } 1075 1076 if (sd->state != sd_transfer_state) { 1077 return sd_invalid_state_for_cmd(sd, req); 1078 } 1079 1080 sd->state = sd_sendingdata_state; 1081 sd->data_offset = 0; 1082 1083 return sd_r1; 1084 } 1085 1086 static sd_rsp_type_t sd_cmd_SET_BLOCK_COUNT(SDState *sd, SDRequest req) 1087 { 1088 if (sd->spec_version < SD_PHY_SPECv3_01_VERS) { 1089 return sd_cmd_illegal(sd, req); 1090 } 1091 1092 if (sd->state != sd_transfer_state) { 1093 return sd_invalid_state_for_cmd(sd, req); 1094 } 1095 1096 sd->multi_blk_cnt = req.arg; 1097 1098 return sd_r1; 1099 } 1100 1101 static sd_rsp_type_t sd_normal_command(SDState *sd, SDRequest req) 1102 { 1103 uint32_t rca = 0x0000; 1104 uint64_t addr = (sd->ocr & (1 << 30)) ? (uint64_t) req.arg << 9 : req.arg; 1105 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. 1108 */ 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)); 1113 } 1114 1115 /* Not interpreting this as an app command */ 1116 sd->card_status &= ~APP_CMD; 1117 1118 if (sd_cmd_type[req.cmd] == sd_ac 1119 || sd_cmd_type[req.cmd] == sd_adtc) { 1120 rca = req.arg >> 16; 1121 } 1122 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; 1127 } 1128 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; 1132 } 1133 1134 if (sd_proto(sd)->cmd[req.cmd]) { 1135 return sd_proto(sd)->cmd[req.cmd](sd, req); 1136 } 1137 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; 1144 1145 default: 1146 break; 1147 } 1148 break; 1149 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; 1158 1159 default: 1160 break; 1161 } 1162 break; 1163 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; 1169 1170 sd->state = sd_transfer_state; 1171 return sd_r1b; 1172 1173 case sd_transfer_state: 1174 case sd_sendingdata_state: 1175 if (sd->rca == rca) 1176 break; 1177 1178 sd->state = sd_standby_state; 1179 return sd_r1b; 1180 1181 case sd_disconnect_state: 1182 if (sd->rca != rca) 1183 return sd_r0; 1184 1185 sd->state = sd_programming_state; 1186 return sd_r1b; 1187 1188 case sd_programming_state: 1189 if (sd->rca == rca) 1190 break; 1191 1192 sd->state = sd_disconnect_state; 1193 return sd_r1b; 1194 1195 default: 1196 break; 1197 } 1198 break; 1199 1200 case 8: /* CMD8: SEND_IF_COND */ 1201 if (sd->spec_version < SD_PHY_SPECv2_00_VERS) { 1202 break; 1203 } 1204 if (sd->state != sd_idle_state) { 1205 break; 1206 } 1207 sd->vhs = 0; 1208 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; 1212 } 1213 1214 /* Accept. */ 1215 sd->vhs = req.arg; 1216 return sd_r7; 1217 1218 case 9: /* CMD9: SEND_CSD */ 1219 switch (sd->state) { 1220 case sd_standby_state: 1221 if (sd->rca != rca) 1222 return sd_r0; 1223 1224 return sd_r2_s; 1225 1226 case sd_transfer_state: 1227 if (!sd_is_spi(sd)) { 1228 break; 1229 } 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; 1235 1236 default: 1237 break; 1238 } 1239 break; 1240 1241 case 10: /* CMD10: SEND_CID */ 1242 switch (sd->state) { 1243 case sd_standby_state: 1244 if (sd->rca != rca) 1245 return sd_r0; 1246 1247 return sd_r2_i; 1248 1249 case sd_transfer_state: 1250 if (!sd_is_spi(sd)) { 1251 break; 1252 } 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; 1258 1259 default: 1260 break; 1261 } 1262 break; 1263 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; 1269 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; 1275 1276 default: 1277 break; 1278 } 1279 break; 1280 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; 1286 } 1287 1288 return sd_r1; 1289 1290 default: 1291 break; 1292 } 1293 break; 1294 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; 1300 1301 sd->state = sd_inactive_state; 1302 return sd_r0; 1303 1304 default: 1305 break; 1306 } 1307 break; 1308 1309 /* Block read commands (Class 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; 1318 } 1319 1320 return sd_r1; 1321 1322 default: 1323 break; 1324 } 1325 break; 1326 1327 case 17: /* CMD17: READ_SINGLE_BLOCK */ 1328 case 18: /* CMD18: READ_MULTIPLE_BLOCK */ 1329 switch (sd->state) { 1330 case sd_transfer_state: 1331 1332 if (!address_in_range(sd, "READ_BLOCK", addr, sd->blk_len)) { 1333 return sd_r1; 1334 } 1335 1336 sd->state = sd_sendingdata_state; 1337 sd->data_start = addr; 1338 sd->data_offset = 0; 1339 return sd_r1; 1340 1341 default: 1342 break; 1343 } 1344 break; 1345 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: 1351 1352 if (!address_in_range(sd, "WRITE_BLOCK", addr, sd->blk_len)) { 1353 return sd_r1; 1354 } 1355 1356 sd->state = sd_receivingdata_state; 1357 sd->data_start = addr; 1358 sd->data_offset = 0; 1359 sd->blk_written = 0; 1360 1361 if (sd->size <= SDSC_MAX_CAPACITY) { 1362 if (sd_wp_addr(sd, sd->data_start)) { 1363 sd->card_status |= WP_VIOLATION; 1364 } 1365 } 1366 if (sd->csd[14] & 0x30) { 1367 sd->card_status |= WP_VIOLATION; 1368 } 1369 return sd_r1; 1370 1371 default: 1372 break; 1373 } 1374 break; 1375 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; 1383 1384 default: 1385 break; 1386 } 1387 break; 1388 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; 1396 1397 default: 1398 break; 1399 } 1400 break; 1401 1402 /* Write protection (Class 6) */ 1403 case 28: /* CMD28: SET_WRITE_PROT */ 1404 if (sd->size > SDSC_MAX_CAPACITY) { 1405 return sd_illegal; 1406 } 1407 1408 switch (sd->state) { 1409 case sd_transfer_state: 1410 if (!address_in_range(sd, "SET_WRITE_PROT", addr, 1)) { 1411 return sd_r1b; 1412 } 1413 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; 1419 1420 default: 1421 break; 1422 } 1423 break; 1424 1425 case 29: /* CMD29: CLR_WRITE_PROT */ 1426 if (sd->size > SDSC_MAX_CAPACITY) { 1427 return sd_illegal; 1428 } 1429 1430 switch (sd->state) { 1431 case sd_transfer_state: 1432 if (!address_in_range(sd, "CLR_WRITE_PROT", addr, 1)) { 1433 return sd_r1b; 1434 } 1435 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; 1441 1442 default: 1443 break; 1444 } 1445 break; 1446 1447 case 30: /* CMD30: SEND_WRITE_PROT */ 1448 if (sd->size > SDSC_MAX_CAPACITY) { 1449 return sd_illegal; 1450 } 1451 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; 1457 } 1458 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; 1464 1465 default: 1466 break; 1467 } 1468 break; 1469 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; 1476 1477 default: 1478 break; 1479 } 1480 break; 1481 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; 1487 1488 default: 1489 break; 1490 } 1491 break; 1492 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; 1499 } 1500 1501 sd->state = sd_programming_state; 1502 sd_erase(sd); 1503 /* Bzzzzzzztt .... Operation complete. */ 1504 sd->state = sd_transfer_state; 1505 return sd_r1b; 1506 1507 default: 1508 break; 1509 } 1510 break; 1511 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; 1520 1521 default: 1522 break; 1523 } 1524 break; 1525 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); 1537 } 1538 default: 1539 break; 1540 } 1541 if (!sd_is_spi(sd)) { 1542 if (sd->rca != rca) { 1543 return sd_r0; 1544 } 1545 } 1546 sd->expecting_acmd = true; 1547 sd->card_status |= APP_CMD; 1548 return sd_r1; 1549 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; 1559 1560 default: 1561 break; 1562 } 1563 break; 1564 1565 case 58: /* CMD58: READ_OCR (SPI) */ 1566 return sd_r3; 1567 1568 case 59: /* CMD59: CRC_ON_OFF (SPI) */ 1569 return sd_r1; 1570 1571 default: 1572 qemu_log_mask(LOG_GUEST_ERROR, "SD: Unknown CMD%i\n", req.cmd); 1573 return sd_illegal; 1574 } 1575 1576 return sd_invalid_state_for_cmd(sd, req); 1577 } 1578 1579 static sd_rsp_type_t sd_app_command(SDState *sd, 1580 SDRequest req) 1581 { 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; 1585 1586 if (sd_proto(sd)->acmd[req.cmd]) { 1587 return sd_proto(sd)->acmd[req.cmd](sd, req); 1588 } 1589 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; 1597 1598 default: 1599 break; 1600 } 1601 break; 1602 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; 1610 1611 default: 1612 break; 1613 } 1614 break; 1615 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; 1620 1621 sd->state = sd_sendingdata_state; 1622 sd->data_start = 0; 1623 sd->data_offset = 0; 1624 return sd_r1; 1625 1626 default: 1627 break; 1628 } 1629 break; 1630 1631 case 23: /* ACMD23: SET_WR_BLK_ERASE_COUNT */ 1632 switch (sd->state) { 1633 case sd_transfer_state: 1634 return sd_r1; 1635 1636 default: 1637 break; 1638 } 1639 break; 1640 1641 case 41: /* ACMD41: SD_APP_OP_COND */ 1642 if (sd->state != sd_idle_state) { 1643 break; 1644 } 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)); 1663 } 1664 } 1665 } 1666 1667 if (FIELD_EX32(sd->ocr & req.arg, OCR, VDD_VOLTAGE_WINDOW)) { 1668 /* We accept any voltage. 10000 V is nothing. 1669 * 1670 * Once we're powered up, we advance straight to ready state 1671 * unless it's an enquiry ACMD41 (bits 23:0 == 0). 1672 */ 1673 sd->state = sd_ready_state; 1674 } 1675 1676 return sd_r3; 1677 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; 1683 1684 default: 1685 break; 1686 } 1687 break; 1688 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; 1696 1697 default: 1698 break; 1699 } 1700 break; 1701 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. 1709 */ 1710 qemu_log_mask(LOG_UNIMP, "SD: CMD%i Security not implemented\n", 1711 req.cmd); 1712 return sd_illegal; 1713 1714 default: 1715 /* Fall back to standard commands. */ 1716 return sd_normal_command(sd, req); 1717 } 1718 1719 qemu_log_mask(LOG_GUEST_ERROR, "SD: ACMD%i in a wrong state\n", req.cmd); 1720 return sd_illegal; 1721 } 1722 1723 static int cmd_valid_while_locked(SDState *sd, const uint8_t cmd) 1724 { 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. 1732 */ 1733 if (sd->expecting_acmd) { 1734 return cmd == 41 || cmd == 42; 1735 } 1736 if (cmd == 16 || cmd == 55) { 1737 return 1; 1738 } 1739 return sd_cmd_class[cmd] == 0 || sd_cmd_class[cmd] == 7; 1740 } 1741 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; 1747 1748 if (!sd->blk || !blk_is_inserted(sd->blk) || !sd->enable) { 1749 return 0; 1750 } 1751 1752 if (sd_req_crc_validate(req)) { 1753 sd->card_status |= COM_CRC_ERROR; 1754 rtype = sd_illegal; 1755 goto send_response; 1756 } 1757 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; 1762 } 1763 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; 1771 } 1772 } 1773 1774 last_state = sd->state; 1775 sd_set_mode(sd); 1776 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); 1782 } 1783 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.) 1789 */ 1790 sd->current_cmd = req->cmd; 1791 sd->card_status &= ~CURRENT_STATE; 1792 sd->card_status |= (last_state << 9); 1793 } 1794 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; 1802 1803 case sd_r2_i: 1804 memcpy(response, sd->cid, sizeof(sd->cid)); 1805 rsplen = 16; 1806 break; 1807 1808 case sd_r2_s: 1809 memcpy(response, sd->csd, sizeof(sd->csd)); 1810 rsplen = 16; 1811 break; 1812 1813 case sd_r3: 1814 sd_response_r3_make(sd, response); 1815 rsplen = 4; 1816 break; 1817 1818 case sd_r6: 1819 sd_response_r6_make(sd, response); 1820 rsplen = 4; 1821 break; 1822 1823 case sd_r7: 1824 sd_response_r7_make(sd, response); 1825 rsplen = 4; 1826 break; 1827 1828 case sd_r0: 1829 case sd_illegal: 1830 rsplen = 0; 1831 break; 1832 default: 1833 g_assert_not_reached(); 1834 } 1835 trace_sdcard_response(sd_response_name(rtype), rsplen); 1836 1837 if (rtype != sd_illegal) { 1838 /* Clear the "clear on valid command" status bits now we've 1839 * sent any response 1840 */ 1841 sd->card_status &= ~CARD_STATUS_B; 1842 } 1843 1844 #ifdef DEBUG_SD 1845 qemu_hexdump(stderr, "Response", response, rsplen); 1846 #endif 1847 1848 return rsplen; 1849 } 1850 1851 void sd_write_byte(SDState *sd, uint8_t value) 1852 { 1853 int i; 1854 1855 if (!sd->blk || !blk_is_inserted(sd->blk) || !sd->enable) 1856 return; 1857 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; 1862 } 1863 1864 if (sd->card_status & (ADDRESS_ERROR | WP_VIOLATION)) 1865 return; 1866 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; 1881 } 1882 break; 1883 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; 1890 } 1891 if (sd->size <= SDSC_MAX_CAPACITY) { 1892 if (sd_wp_addr(sd, sd->data_start)) { 1893 sd->card_status |= WP_VIOLATION; 1894 break; 1895 } 1896 } 1897 } 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; 1907 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; 1914 } 1915 } 1916 1917 sd->state = sd_receivingdata_state; 1918 } 1919 break; 1920 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; 1929 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]; 1934 } 1935 /* Bzzzzzzztt .... Operation complete. */ 1936 sd->state = sd_transfer_state; 1937 } 1938 break; 1939 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; 1949 1950 /* Copy flag (OTP) & Permanent write protect */ 1951 if (sd->csd[14] & ~sd->data[14] & 0x60) 1952 sd->card_status |= CID_CSD_OVERWRITE; 1953 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]; 1958 } 1959 /* Bzzzzzzztt .... Operation complete. */ 1960 sd->state = sd_transfer_state; 1961 } 1962 break; 1963 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; 1972 } 1973 break; 1974 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; 1980 } 1981 break; 1982 1983 default: 1984 qemu_log_mask(LOG_GUEST_ERROR, "%s: unknown command\n", __func__); 1985 break; 1986 } 1987 } 1988 1989 #define SD_TUNING_BLOCK_SIZE 64 1990 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, 2001 }; 2002 2003 uint8_t sd_read_byte(SDState *sd) 2004 { 2005 /* TODO: Append CRCs */ 2006 uint8_t ret; 2007 uint32_t io_len; 2008 2009 if (!sd->blk || !blk_is_inserted(sd->blk) || !sd->enable) 2010 return 0x00; 2011 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; 2016 } 2017 2018 if (sd->card_status & (ADDRESS_ERROR | WP_VIOLATION)) 2019 return 0x00; 2020 2021 io_len = (sd->ocr & (1 << 30)) ? 512 : sd->blk_len; 2022 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 ++]; 2029 2030 if (sd->data_offset >= 64) 2031 sd->state = sd_transfer_state; 2032 break; 2033 2034 case 9: /* CMD9: SEND_CSD */ 2035 case 10: /* CMD10: SEND_CID */ 2036 ret = sd->data[sd->data_offset ++]; 2037 2038 if (sd->data_offset >= 16) 2039 sd->state = sd_transfer_state; 2040 break; 2041 2042 case 13: /* ACMD13: SD_STATUS */ 2043 ret = sd->sd_status[sd->data_offset ++]; 2044 2045 if (sd->data_offset >= sizeof(sd->sd_status)) 2046 sd->state = sd_transfer_state; 2047 break; 2048 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 ++]; 2053 2054 if (sd->data_offset >= io_len) 2055 sd->state = sd_transfer_state; 2056 break; 2057 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; 2063 } 2064 BLK_READ_BLOCK(sd->data_start, io_len); 2065 } 2066 ret = sd->data[sd->data_offset ++]; 2067 2068 if (sd->data_offset >= io_len) { 2069 sd->data_start += io_len; 2070 sd->data_offset = 0; 2071 2072 if (sd->multi_blk_cnt != 0) { 2073 if (--sd->multi_blk_cnt == 0) { 2074 /* Stop! */ 2075 sd->state = sd_transfer_state; 2076 break; 2077 } 2078 } 2079 } 2080 break; 2081 2082 case 19: /* CMD19: SEND_TUNING_BLOCK (SD) */ 2083 if (sd->data_offset >= SD_TUNING_BLOCK_SIZE - 1) { 2084 sd->state = sd_transfer_state; 2085 } 2086 ret = sd_tuning_block_pattern[sd->data_offset++]; 2087 break; 2088 2089 case 22: /* ACMD22: SEND_NUM_WR_BLOCKS */ 2090 ret = sd->data[sd->data_offset ++]; 2091 2092 if (sd->data_offset >= 4) 2093 sd->state = sd_transfer_state; 2094 break; 2095 2096 case 30: /* CMD30: SEND_WRITE_PROT */ 2097 ret = sd->data[sd->data_offset ++]; 2098 2099 if (sd->data_offset >= 4) 2100 sd->state = sd_transfer_state; 2101 break; 2102 2103 case 51: /* ACMD51: SEND_SCR */ 2104 ret = sd->scr[sd->data_offset ++]; 2105 2106 if (sd->data_offset >= sizeof(sd->scr)) 2107 sd->state = sd_transfer_state; 2108 break; 2109 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 ++]; 2114 2115 if (sd->data_offset >= sd->blk_len) 2116 sd->state = sd_transfer_state; 2117 break; 2118 2119 default: 2120 qemu_log_mask(LOG_GUEST_ERROR, "%s: unknown command\n", __func__); 2121 return 0x00; 2122 } 2123 2124 return ret; 2125 } 2126 2127 static bool sd_receive_ready(SDState *sd) 2128 { 2129 return sd->state == sd_receivingdata_state; 2130 } 2131 2132 static bool sd_data_ready(SDState *sd) 2133 { 2134 return sd->state == sd_sendingdata_state; 2135 } 2136 2137 void sd_enable(SDState *sd, bool enable) 2138 { 2139 sd->enable = enable; 2140 } 2141 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, 2153 }, 2154 .acmd = { 2155 [6] = sd_cmd_unimplemented, 2156 [41] = sd_cmd_SEND_OP_CMD, 2157 }, 2158 }; 2159 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, 2173 }, 2174 }; 2175 2176 static void sd_instance_init(Object *obj) 2177 { 2178 SDState *sd = SD_CARD(obj); 2179 2180 sd->enable = true; 2181 sd->ocr_power_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL, sd_ocr_powerup, sd); 2182 } 2183 2184 static void sd_instance_finalize(Object *obj) 2185 { 2186 SDState *sd = SD_CARD(obj); 2187 2188 timer_free(sd->ocr_power_timer); 2189 } 2190 2191 static void sd_realize(DeviceState *dev, Error **errp) 2192 { 2193 SDState *sd = SD_CARD(dev); 2194 int ret; 2195 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; 2203 } 2204 2205 if (sd->blk) { 2206 int64_t blk_size; 2207 2208 if (!blk_supports_write_perm(sd->blk)) { 2209 error_setg(errp, "Cannot use read-only drive as SD card"); 2210 return; 2211 } 2212 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; 2217 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); 2221 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); 2231 2232 return; 2233 } 2234 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; 2239 } 2240 blk_set_dev_ops(sd->blk, &sd_block_ops, sd); 2241 } 2242 } 2243 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() 2253 }; 2254 2255 static void sd_class_init(ObjectClass *klass, void *data) 2256 { 2257 DeviceClass *dc = DEVICE_CLASS(klass); 2258 SDCardClass *sc = SD_CARD_CLASS(klass); 2259 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); 2266 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; 2279 } 2280 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, 2289 }; 2290 2291 /* 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. 2296 */ 2297 static void sd_spi_class_init(ObjectClass *klass, void *data) 2298 { 2299 DeviceClass *dc = DEVICE_CLASS(klass); 2300 SDCardClass *sc = SD_CARD_CLASS(klass); 2301 2302 dc->desc = "SD SPI"; 2303 sc->proto = &sd_proto_spi; 2304 } 2305 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, 2310 }; 2311 2312 static void sd_register_types(void) 2313 { 2314 type_register_static(&sd_info); 2315 type_register_static(&sd_spi_info); 2316 } 2317 2318 type_init(sd_register_types) 2319