1 /* 2 * Copyright 2008, Freescale Semiconductor, Inc 3 * Andy Fleming 4 * 5 * Based vaguely on the Linux code 6 * 7 * SPDX-License-Identifier: GPL-2.0+ 8 */ 9 10 #include <config.h> 11 #include <common.h> 12 #include <command.h> 13 #include <dm.h> 14 #include <dm/device-internal.h> 15 #include <errno.h> 16 #include <mmc.h> 17 #include <part.h> 18 #include <power/regulator.h> 19 #include <malloc.h> 20 #include <memalign.h> 21 #include <linux/list.h> 22 #include <div64.h> 23 #include "mmc_private.h" 24 25 static int mmc_set_signal_voltage(struct mmc *mmc, uint signal_voltage); 26 static int mmc_power_cycle(struct mmc *mmc); 27 static int mmc_select_mode_and_width(struct mmc *mmc, uint card_caps); 28 29 #if CONFIG_IS_ENABLED(MMC_TINY) 30 static struct mmc mmc_static; 31 struct mmc *find_mmc_device(int dev_num) 32 { 33 return &mmc_static; 34 } 35 36 void mmc_do_preinit(void) 37 { 38 struct mmc *m = &mmc_static; 39 #ifdef CONFIG_FSL_ESDHC_ADAPTER_IDENT 40 mmc_set_preinit(m, 1); 41 #endif 42 if (m->preinit) 43 mmc_start_init(m); 44 } 45 46 struct blk_desc *mmc_get_blk_desc(struct mmc *mmc) 47 { 48 return &mmc->block_dev; 49 } 50 #endif 51 52 #if !CONFIG_IS_ENABLED(DM_MMC) 53 54 #if CONFIG_IS_ENABLED(MMC_UHS_SUPPORT) 55 static int mmc_wait_dat0(struct mmc *mmc, int state, int timeout) 56 { 57 return -ENOSYS; 58 } 59 #endif 60 61 __weak int board_mmc_getwp(struct mmc *mmc) 62 { 63 return -1; 64 } 65 66 int mmc_getwp(struct mmc *mmc) 67 { 68 int wp; 69 70 wp = board_mmc_getwp(mmc); 71 72 if (wp < 0) { 73 if (mmc->cfg->ops->getwp) 74 wp = mmc->cfg->ops->getwp(mmc); 75 else 76 wp = 0; 77 } 78 79 return wp; 80 } 81 82 __weak int board_mmc_getcd(struct mmc *mmc) 83 { 84 return -1; 85 } 86 #endif 87 88 #ifdef CONFIG_MMC_TRACE 89 void mmmc_trace_before_send(struct mmc *mmc, struct mmc_cmd *cmd) 90 { 91 printf("CMD_SEND:%d\n", cmd->cmdidx); 92 printf("\t\tARG\t\t\t 0x%08X\n", cmd->cmdarg); 93 } 94 95 void mmmc_trace_after_send(struct mmc *mmc, struct mmc_cmd *cmd, int ret) 96 { 97 int i; 98 u8 *ptr; 99 100 if (ret) { 101 printf("\t\tRET\t\t\t %d\n", ret); 102 } else { 103 switch (cmd->resp_type) { 104 case MMC_RSP_NONE: 105 printf("\t\tMMC_RSP_NONE\n"); 106 break; 107 case MMC_RSP_R1: 108 printf("\t\tMMC_RSP_R1,5,6,7 \t 0x%08X \n", 109 cmd->response[0]); 110 break; 111 case MMC_RSP_R1b: 112 printf("\t\tMMC_RSP_R1b\t\t 0x%08X \n", 113 cmd->response[0]); 114 break; 115 case MMC_RSP_R2: 116 printf("\t\tMMC_RSP_R2\t\t 0x%08X \n", 117 cmd->response[0]); 118 printf("\t\t \t\t 0x%08X \n", 119 cmd->response[1]); 120 printf("\t\t \t\t 0x%08X \n", 121 cmd->response[2]); 122 printf("\t\t \t\t 0x%08X \n", 123 cmd->response[3]); 124 printf("\n"); 125 printf("\t\t\t\t\tDUMPING DATA\n"); 126 for (i = 0; i < 4; i++) { 127 int j; 128 printf("\t\t\t\t\t%03d - ", i*4); 129 ptr = (u8 *)&cmd->response[i]; 130 ptr += 3; 131 for (j = 0; j < 4; j++) 132 printf("%02X ", *ptr--); 133 printf("\n"); 134 } 135 break; 136 case MMC_RSP_R3: 137 printf("\t\tMMC_RSP_R3,4\t\t 0x%08X \n", 138 cmd->response[0]); 139 break; 140 default: 141 printf("\t\tERROR MMC rsp not supported\n"); 142 break; 143 } 144 } 145 } 146 147 void mmc_trace_state(struct mmc *mmc, struct mmc_cmd *cmd) 148 { 149 int status; 150 151 status = (cmd->response[0] & MMC_STATUS_CURR_STATE) >> 9; 152 printf("CURR STATE:%d\n", status); 153 } 154 #endif 155 156 #if CONFIG_IS_ENABLED(MMC_VERBOSE) || defined(DEBUG) 157 const char *mmc_mode_name(enum bus_mode mode) 158 { 159 static const char *const names[] = { 160 [MMC_LEGACY] = "MMC legacy", 161 [SD_LEGACY] = "SD Legacy", 162 [MMC_HS] = "MMC High Speed (26MHz)", 163 [SD_HS] = "SD High Speed (50MHz)", 164 [UHS_SDR12] = "UHS SDR12 (25MHz)", 165 [UHS_SDR25] = "UHS SDR25 (50MHz)", 166 [UHS_SDR50] = "UHS SDR50 (100MHz)", 167 [UHS_SDR104] = "UHS SDR104 (208MHz)", 168 [UHS_DDR50] = "UHS DDR50 (50MHz)", 169 [MMC_HS_52] = "MMC High Speed (52MHz)", 170 [MMC_DDR_52] = "MMC DDR52 (52MHz)", 171 [MMC_HS_200] = "HS200 (200MHz)", 172 }; 173 174 if (mode >= MMC_MODES_END) 175 return "Unknown mode"; 176 else 177 return names[mode]; 178 } 179 #endif 180 181 static uint mmc_mode2freq(struct mmc *mmc, enum bus_mode mode) 182 { 183 static const int freqs[] = { 184 [SD_LEGACY] = 25000000, 185 [MMC_HS] = 26000000, 186 [SD_HS] = 50000000, 187 #if CONFIG_IS_ENABLED(MMC_UHS_SUPPORT) 188 [UHS_SDR12] = 25000000, 189 [UHS_SDR25] = 50000000, 190 [UHS_SDR50] = 100000000, 191 [UHS_DDR50] = 50000000, 192 #ifdef MMC_SUPPORTS_TUNING 193 [UHS_SDR104] = 208000000, 194 #endif 195 #endif 196 [MMC_HS_52] = 52000000, 197 [MMC_DDR_52] = 52000000, 198 #if CONFIG_IS_ENABLED(MMC_HS200_SUPPORT) 199 [MMC_HS_200] = 200000000, 200 #endif 201 }; 202 203 if (mode == MMC_LEGACY) 204 return mmc->legacy_speed; 205 else if (mode >= MMC_MODES_END) 206 return 0; 207 else 208 return freqs[mode]; 209 } 210 211 static int mmc_select_mode(struct mmc *mmc, enum bus_mode mode) 212 { 213 mmc->selected_mode = mode; 214 mmc->tran_speed = mmc_mode2freq(mmc, mode); 215 mmc->ddr_mode = mmc_is_mode_ddr(mode); 216 debug("selecting mode %s (freq : %d MHz)\n", mmc_mode_name(mode), 217 mmc->tran_speed / 1000000); 218 return 0; 219 } 220 221 #if !CONFIG_IS_ENABLED(DM_MMC) 222 int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd, struct mmc_data *data) 223 { 224 int ret; 225 226 mmmc_trace_before_send(mmc, cmd); 227 ret = mmc->cfg->ops->send_cmd(mmc, cmd, data); 228 mmmc_trace_after_send(mmc, cmd, ret); 229 230 return ret; 231 } 232 #endif 233 234 int mmc_send_status(struct mmc *mmc, int timeout) 235 { 236 struct mmc_cmd cmd; 237 int err, retries = 5; 238 239 cmd.cmdidx = MMC_CMD_SEND_STATUS; 240 cmd.resp_type = MMC_RSP_R1; 241 if (!mmc_host_is_spi(mmc)) 242 cmd.cmdarg = mmc->rca << 16; 243 244 while (1) { 245 err = mmc_send_cmd(mmc, &cmd, NULL); 246 if (!err) { 247 if ((cmd.response[0] & MMC_STATUS_RDY_FOR_DATA) && 248 (cmd.response[0] & MMC_STATUS_CURR_STATE) != 249 MMC_STATE_PRG) 250 break; 251 252 if (cmd.response[0] & MMC_STATUS_MASK) { 253 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT) 254 pr_err("Status Error: 0x%08X\n", 255 cmd.response[0]); 256 #endif 257 return -ECOMM; 258 } 259 } else if (--retries < 0) 260 return err; 261 262 if (timeout-- <= 0) 263 break; 264 265 udelay(1000); 266 } 267 268 mmc_trace_state(mmc, &cmd); 269 if (timeout <= 0) { 270 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT) 271 pr_err("Timeout waiting card ready\n"); 272 #endif 273 return -ETIMEDOUT; 274 } 275 276 return 0; 277 } 278 279 int mmc_set_blocklen(struct mmc *mmc, int len) 280 { 281 struct mmc_cmd cmd; 282 int err; 283 284 if (mmc->ddr_mode) 285 return 0; 286 287 cmd.cmdidx = MMC_CMD_SET_BLOCKLEN; 288 cmd.resp_type = MMC_RSP_R1; 289 cmd.cmdarg = len; 290 291 err = mmc_send_cmd(mmc, &cmd, NULL); 292 293 #ifdef CONFIG_MMC_QUIRKS 294 if (err && (mmc->quirks & MMC_QUIRK_RETRY_SET_BLOCKLEN)) { 295 int retries = 4; 296 /* 297 * It has been seen that SET_BLOCKLEN may fail on the first 298 * attempt, let's try a few more time 299 */ 300 do { 301 err = mmc_send_cmd(mmc, &cmd, NULL); 302 if (!err) 303 break; 304 } while (retries--); 305 } 306 #endif 307 308 return err; 309 } 310 311 #ifdef MMC_SUPPORTS_TUNING 312 static const u8 tuning_blk_pattern_4bit[] = { 313 0xff, 0x0f, 0xff, 0x00, 0xff, 0xcc, 0xc3, 0xcc, 314 0xc3, 0x3c, 0xcc, 0xff, 0xfe, 0xff, 0xfe, 0xef, 315 0xff, 0xdf, 0xff, 0xdd, 0xff, 0xfb, 0xff, 0xfb, 316 0xbf, 0xff, 0x7f, 0xff, 0x77, 0xf7, 0xbd, 0xef, 317 0xff, 0xf0, 0xff, 0xf0, 0x0f, 0xfc, 0xcc, 0x3c, 318 0xcc, 0x33, 0xcc, 0xcf, 0xff, 0xef, 0xff, 0xee, 319 0xff, 0xfd, 0xff, 0xfd, 0xdf, 0xff, 0xbf, 0xff, 320 0xbb, 0xff, 0xf7, 0xff, 0xf7, 0x7f, 0x7b, 0xde, 321 }; 322 323 static const u8 tuning_blk_pattern_8bit[] = { 324 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 325 0xff, 0xff, 0xcc, 0xcc, 0xcc, 0x33, 0xcc, 0xcc, 326 0xcc, 0x33, 0x33, 0xcc, 0xcc, 0xcc, 0xff, 0xff, 327 0xff, 0xee, 0xff, 0xff, 0xff, 0xee, 0xee, 0xff, 328 0xff, 0xff, 0xdd, 0xff, 0xff, 0xff, 0xdd, 0xdd, 329 0xff, 0xff, 0xff, 0xbb, 0xff, 0xff, 0xff, 0xbb, 330 0xbb, 0xff, 0xff, 0xff, 0x77, 0xff, 0xff, 0xff, 331 0x77, 0x77, 0xff, 0x77, 0xbb, 0xdd, 0xee, 0xff, 332 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 333 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xcc, 0x33, 0xcc, 334 0xcc, 0xcc, 0x33, 0x33, 0xcc, 0xcc, 0xcc, 0xff, 335 0xff, 0xff, 0xee, 0xff, 0xff, 0xff, 0xee, 0xee, 336 0xff, 0xff, 0xff, 0xdd, 0xff, 0xff, 0xff, 0xdd, 337 0xdd, 0xff, 0xff, 0xff, 0xbb, 0xff, 0xff, 0xff, 338 0xbb, 0xbb, 0xff, 0xff, 0xff, 0x77, 0xff, 0xff, 339 0xff, 0x77, 0x77, 0xff, 0x77, 0xbb, 0xdd, 0xee, 340 }; 341 342 int mmc_send_tuning(struct mmc *mmc, u32 opcode, int *cmd_error) 343 { 344 struct mmc_cmd cmd; 345 struct mmc_data data; 346 const u8 *tuning_block_pattern; 347 int size, err; 348 349 if (mmc->bus_width == 8) { 350 tuning_block_pattern = tuning_blk_pattern_8bit; 351 size = sizeof(tuning_blk_pattern_8bit); 352 } else if (mmc->bus_width == 4) { 353 tuning_block_pattern = tuning_blk_pattern_4bit; 354 size = sizeof(tuning_blk_pattern_4bit); 355 } else { 356 return -EINVAL; 357 } 358 359 ALLOC_CACHE_ALIGN_BUFFER(u8, data_buf, size); 360 361 cmd.cmdidx = opcode; 362 cmd.cmdarg = 0; 363 cmd.resp_type = MMC_RSP_R1; 364 365 data.dest = (void *)data_buf; 366 data.blocks = 1; 367 data.blocksize = size; 368 data.flags = MMC_DATA_READ; 369 370 err = mmc_send_cmd(mmc, &cmd, &data); 371 if (err) 372 return err; 373 374 if (memcmp(data_buf, tuning_block_pattern, size)) 375 return -EIO; 376 377 return 0; 378 } 379 #endif 380 381 static int mmc_read_blocks(struct mmc *mmc, void *dst, lbaint_t start, 382 lbaint_t blkcnt) 383 { 384 struct mmc_cmd cmd; 385 struct mmc_data data; 386 387 if (blkcnt > 1) 388 cmd.cmdidx = MMC_CMD_READ_MULTIPLE_BLOCK; 389 else 390 cmd.cmdidx = MMC_CMD_READ_SINGLE_BLOCK; 391 392 if (mmc->high_capacity) 393 cmd.cmdarg = start; 394 else 395 cmd.cmdarg = start * mmc->read_bl_len; 396 397 cmd.resp_type = MMC_RSP_R1; 398 399 data.dest = dst; 400 data.blocks = blkcnt; 401 data.blocksize = mmc->read_bl_len; 402 data.flags = MMC_DATA_READ; 403 404 if (mmc_send_cmd(mmc, &cmd, &data)) 405 return 0; 406 407 if (blkcnt > 1) { 408 cmd.cmdidx = MMC_CMD_STOP_TRANSMISSION; 409 cmd.cmdarg = 0; 410 cmd.resp_type = MMC_RSP_R1b; 411 if (mmc_send_cmd(mmc, &cmd, NULL)) { 412 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT) 413 pr_err("mmc fail to send stop cmd\n"); 414 #endif 415 return 0; 416 } 417 } 418 419 return blkcnt; 420 } 421 422 #if CONFIG_IS_ENABLED(BLK) 423 ulong mmc_bread(struct udevice *dev, lbaint_t start, lbaint_t blkcnt, void *dst) 424 #else 425 ulong mmc_bread(struct blk_desc *block_dev, lbaint_t start, lbaint_t blkcnt, 426 void *dst) 427 #endif 428 { 429 #if CONFIG_IS_ENABLED(BLK) 430 struct blk_desc *block_dev = dev_get_uclass_platdata(dev); 431 #endif 432 int dev_num = block_dev->devnum; 433 int err; 434 lbaint_t cur, blocks_todo = blkcnt; 435 436 if (blkcnt == 0) 437 return 0; 438 439 struct mmc *mmc = find_mmc_device(dev_num); 440 if (!mmc) 441 return 0; 442 443 if (CONFIG_IS_ENABLED(MMC_TINY)) 444 err = mmc_switch_part(mmc, block_dev->hwpart); 445 else 446 err = blk_dselect_hwpart(block_dev, block_dev->hwpart); 447 448 if (err < 0) 449 return 0; 450 451 if ((start + blkcnt) > block_dev->lba) { 452 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT) 453 pr_err("MMC: block number 0x" LBAF " exceeds max(0x" LBAF ")\n", 454 start + blkcnt, block_dev->lba); 455 #endif 456 return 0; 457 } 458 459 if (mmc_set_blocklen(mmc, mmc->read_bl_len)) { 460 debug("%s: Failed to set blocklen\n", __func__); 461 return 0; 462 } 463 464 do { 465 cur = (blocks_todo > mmc->cfg->b_max) ? 466 mmc->cfg->b_max : blocks_todo; 467 if (mmc_read_blocks(mmc, dst, start, cur) != cur) { 468 debug("%s: Failed to read blocks\n", __func__); 469 return 0; 470 } 471 blocks_todo -= cur; 472 start += cur; 473 dst += cur * mmc->read_bl_len; 474 } while (blocks_todo > 0); 475 476 return blkcnt; 477 } 478 479 static int mmc_go_idle(struct mmc *mmc) 480 { 481 struct mmc_cmd cmd; 482 int err; 483 484 udelay(1000); 485 486 cmd.cmdidx = MMC_CMD_GO_IDLE_STATE; 487 cmd.cmdarg = 0; 488 cmd.resp_type = MMC_RSP_NONE; 489 490 err = mmc_send_cmd(mmc, &cmd, NULL); 491 492 if (err) 493 return err; 494 495 udelay(2000); 496 497 return 0; 498 } 499 500 #if CONFIG_IS_ENABLED(MMC_UHS_SUPPORT) 501 static int mmc_switch_voltage(struct mmc *mmc, int signal_voltage) 502 { 503 struct mmc_cmd cmd; 504 int err = 0; 505 506 /* 507 * Send CMD11 only if the request is to switch the card to 508 * 1.8V signalling. 509 */ 510 if (signal_voltage == MMC_SIGNAL_VOLTAGE_330) 511 return mmc_set_signal_voltage(mmc, signal_voltage); 512 513 cmd.cmdidx = SD_CMD_SWITCH_UHS18V; 514 cmd.cmdarg = 0; 515 cmd.resp_type = MMC_RSP_R1; 516 517 err = mmc_send_cmd(mmc, &cmd, NULL); 518 if (err) 519 return err; 520 521 if (!mmc_host_is_spi(mmc) && (cmd.response[0] & MMC_STATUS_ERROR)) 522 return -EIO; 523 524 /* 525 * The card should drive cmd and dat[0:3] low immediately 526 * after the response of cmd11, but wait 100 us to be sure 527 */ 528 err = mmc_wait_dat0(mmc, 0, 100); 529 if (err == -ENOSYS) 530 udelay(100); 531 else if (err) 532 return -ETIMEDOUT; 533 534 /* 535 * During a signal voltage level switch, the clock must be gated 536 * for 5 ms according to the SD spec 537 */ 538 mmc_set_clock(mmc, mmc->clock, true); 539 540 err = mmc_set_signal_voltage(mmc, signal_voltage); 541 if (err) 542 return err; 543 544 /* Keep clock gated for at least 10 ms, though spec only says 5 ms */ 545 mdelay(10); 546 mmc_set_clock(mmc, mmc->clock, false); 547 548 /* 549 * Failure to switch is indicated by the card holding 550 * dat[0:3] low. Wait for at least 1 ms according to spec 551 */ 552 err = mmc_wait_dat0(mmc, 1, 1000); 553 if (err == -ENOSYS) 554 udelay(1000); 555 else if (err) 556 return -ETIMEDOUT; 557 558 return 0; 559 } 560 #endif 561 562 static int sd_send_op_cond(struct mmc *mmc, bool uhs_en) 563 { 564 int timeout = 1000; 565 int err; 566 struct mmc_cmd cmd; 567 568 while (1) { 569 cmd.cmdidx = MMC_CMD_APP_CMD; 570 cmd.resp_type = MMC_RSP_R1; 571 cmd.cmdarg = 0; 572 573 err = mmc_send_cmd(mmc, &cmd, NULL); 574 575 if (err) 576 return err; 577 578 cmd.cmdidx = SD_CMD_APP_SEND_OP_COND; 579 cmd.resp_type = MMC_RSP_R3; 580 581 /* 582 * Most cards do not answer if some reserved bits 583 * in the ocr are set. However, Some controller 584 * can set bit 7 (reserved for low voltages), but 585 * how to manage low voltages SD card is not yet 586 * specified. 587 */ 588 cmd.cmdarg = mmc_host_is_spi(mmc) ? 0 : 589 (mmc->cfg->voltages & 0xff8000); 590 591 if (mmc->version == SD_VERSION_2) 592 cmd.cmdarg |= OCR_HCS; 593 594 if (uhs_en) 595 cmd.cmdarg |= OCR_S18R; 596 597 err = mmc_send_cmd(mmc, &cmd, NULL); 598 599 if (err) 600 return err; 601 602 if (cmd.response[0] & OCR_BUSY) 603 break; 604 605 if (timeout-- <= 0) 606 return -EOPNOTSUPP; 607 608 udelay(1000); 609 } 610 611 if (mmc->version != SD_VERSION_2) 612 mmc->version = SD_VERSION_1_0; 613 614 if (mmc_host_is_spi(mmc)) { /* read OCR for spi */ 615 cmd.cmdidx = MMC_CMD_SPI_READ_OCR; 616 cmd.resp_type = MMC_RSP_R3; 617 cmd.cmdarg = 0; 618 619 err = mmc_send_cmd(mmc, &cmd, NULL); 620 621 if (err) 622 return err; 623 } 624 625 mmc->ocr = cmd.response[0]; 626 627 #if CONFIG_IS_ENABLED(MMC_UHS_SUPPORT) 628 if (uhs_en && !(mmc_host_is_spi(mmc)) && (cmd.response[0] & 0x41000000) 629 == 0x41000000) { 630 err = mmc_switch_voltage(mmc, MMC_SIGNAL_VOLTAGE_180); 631 if (err) 632 return err; 633 } 634 #endif 635 636 mmc->high_capacity = ((mmc->ocr & OCR_HCS) == OCR_HCS); 637 mmc->rca = 0; 638 639 return 0; 640 } 641 642 static int mmc_send_op_cond_iter(struct mmc *mmc, int use_arg) 643 { 644 struct mmc_cmd cmd; 645 int err; 646 647 cmd.cmdidx = MMC_CMD_SEND_OP_COND; 648 cmd.resp_type = MMC_RSP_R3; 649 cmd.cmdarg = 0; 650 if (use_arg && !mmc_host_is_spi(mmc)) 651 cmd.cmdarg = OCR_HCS | 652 (mmc->cfg->voltages & 653 (mmc->ocr & OCR_VOLTAGE_MASK)) | 654 (mmc->ocr & OCR_ACCESS_MODE); 655 656 err = mmc_send_cmd(mmc, &cmd, NULL); 657 if (err) 658 return err; 659 mmc->ocr = cmd.response[0]; 660 return 0; 661 } 662 663 static int mmc_send_op_cond(struct mmc *mmc) 664 { 665 int err, i; 666 667 /* Some cards seem to need this */ 668 mmc_go_idle(mmc); 669 670 /* Asking to the card its capabilities */ 671 for (i = 0; i < 2; i++) { 672 err = mmc_send_op_cond_iter(mmc, i != 0); 673 if (err) 674 return err; 675 676 /* exit if not busy (flag seems to be inverted) */ 677 if (mmc->ocr & OCR_BUSY) 678 break; 679 } 680 mmc->op_cond_pending = 1; 681 return 0; 682 } 683 684 static int mmc_complete_op_cond(struct mmc *mmc) 685 { 686 struct mmc_cmd cmd; 687 int timeout = 1000; 688 uint start; 689 int err; 690 691 mmc->op_cond_pending = 0; 692 if (!(mmc->ocr & OCR_BUSY)) { 693 /* Some cards seem to need this */ 694 mmc_go_idle(mmc); 695 696 start = get_timer(0); 697 while (1) { 698 err = mmc_send_op_cond_iter(mmc, 1); 699 if (err) 700 return err; 701 if (mmc->ocr & OCR_BUSY) 702 break; 703 if (get_timer(start) > timeout) 704 return -EOPNOTSUPP; 705 udelay(100); 706 } 707 } 708 709 if (mmc_host_is_spi(mmc)) { /* read OCR for spi */ 710 cmd.cmdidx = MMC_CMD_SPI_READ_OCR; 711 cmd.resp_type = MMC_RSP_R3; 712 cmd.cmdarg = 0; 713 714 err = mmc_send_cmd(mmc, &cmd, NULL); 715 716 if (err) 717 return err; 718 719 mmc->ocr = cmd.response[0]; 720 } 721 722 mmc->version = MMC_VERSION_UNKNOWN; 723 724 mmc->high_capacity = ((mmc->ocr & OCR_HCS) == OCR_HCS); 725 mmc->rca = 1; 726 727 return 0; 728 } 729 730 731 static int mmc_send_ext_csd(struct mmc *mmc, u8 *ext_csd) 732 { 733 struct mmc_cmd cmd; 734 struct mmc_data data; 735 int err; 736 737 /* Get the Card Status Register */ 738 cmd.cmdidx = MMC_CMD_SEND_EXT_CSD; 739 cmd.resp_type = MMC_RSP_R1; 740 cmd.cmdarg = 0; 741 742 data.dest = (char *)ext_csd; 743 data.blocks = 1; 744 data.blocksize = MMC_MAX_BLOCK_LEN; 745 data.flags = MMC_DATA_READ; 746 747 err = mmc_send_cmd(mmc, &cmd, &data); 748 749 return err; 750 } 751 752 int mmc_switch(struct mmc *mmc, u8 set, u8 index, u8 value) 753 { 754 struct mmc_cmd cmd; 755 int timeout = 1000; 756 int retries = 3; 757 int ret; 758 759 cmd.cmdidx = MMC_CMD_SWITCH; 760 cmd.resp_type = MMC_RSP_R1b; 761 cmd.cmdarg = (MMC_SWITCH_MODE_WRITE_BYTE << 24) | 762 (index << 16) | 763 (value << 8); 764 765 while (retries > 0) { 766 ret = mmc_send_cmd(mmc, &cmd, NULL); 767 768 /* Waiting for the ready status */ 769 if (!ret) { 770 ret = mmc_send_status(mmc, timeout); 771 return ret; 772 } 773 774 retries--; 775 } 776 777 return ret; 778 779 } 780 781 static int mmc_set_card_speed(struct mmc *mmc, enum bus_mode mode) 782 { 783 int err; 784 int speed_bits; 785 786 ALLOC_CACHE_ALIGN_BUFFER(u8, test_csd, MMC_MAX_BLOCK_LEN); 787 788 switch (mode) { 789 case MMC_HS: 790 case MMC_HS_52: 791 case MMC_DDR_52: 792 speed_bits = EXT_CSD_TIMING_HS; 793 break; 794 #if CONFIG_IS_ENABLED(MMC_HS200_SUPPORT) 795 case MMC_HS_200: 796 speed_bits = EXT_CSD_TIMING_HS200; 797 break; 798 #endif 799 case MMC_LEGACY: 800 speed_bits = EXT_CSD_TIMING_LEGACY; 801 break; 802 default: 803 return -EINVAL; 804 } 805 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_HS_TIMING, 806 speed_bits); 807 if (err) 808 return err; 809 810 if ((mode == MMC_HS) || (mode == MMC_HS_52)) { 811 /* Now check to see that it worked */ 812 err = mmc_send_ext_csd(mmc, test_csd); 813 if (err) 814 return err; 815 816 /* No high-speed support */ 817 if (!test_csd[EXT_CSD_HS_TIMING]) 818 return -ENOTSUPP; 819 } 820 821 return 0; 822 } 823 824 static int mmc_get_capabilities(struct mmc *mmc) 825 { 826 u8 *ext_csd = mmc->ext_csd; 827 char cardtype; 828 829 mmc->card_caps = MMC_MODE_1BIT | MMC_CAP(MMC_LEGACY); 830 831 if (mmc_host_is_spi(mmc)) 832 return 0; 833 834 /* Only version 4 supports high-speed */ 835 if (mmc->version < MMC_VERSION_4) 836 return 0; 837 838 if (!ext_csd) { 839 pr_err("No ext_csd found!\n"); /* this should enver happen */ 840 return -ENOTSUPP; 841 } 842 843 mmc->card_caps |= MMC_MODE_4BIT | MMC_MODE_8BIT; 844 845 cardtype = ext_csd[EXT_CSD_CARD_TYPE] & 0x3f; 846 mmc->cardtype = cardtype; 847 848 #if CONFIG_IS_ENABLED(MMC_HS200_SUPPORT) 849 if (cardtype & (EXT_CSD_CARD_TYPE_HS200_1_2V | 850 EXT_CSD_CARD_TYPE_HS200_1_8V)) { 851 mmc->card_caps |= MMC_MODE_HS200; 852 } 853 #endif 854 if (cardtype & EXT_CSD_CARD_TYPE_52) { 855 if (cardtype & EXT_CSD_CARD_TYPE_DDR_52) 856 mmc->card_caps |= MMC_MODE_DDR_52MHz; 857 mmc->card_caps |= MMC_MODE_HS_52MHz; 858 } 859 if (cardtype & EXT_CSD_CARD_TYPE_26) 860 mmc->card_caps |= MMC_MODE_HS; 861 862 return 0; 863 } 864 865 static int mmc_set_capacity(struct mmc *mmc, int part_num) 866 { 867 switch (part_num) { 868 case 0: 869 mmc->capacity = mmc->capacity_user; 870 break; 871 case 1: 872 case 2: 873 mmc->capacity = mmc->capacity_boot; 874 break; 875 case 3: 876 mmc->capacity = mmc->capacity_rpmb; 877 break; 878 case 4: 879 case 5: 880 case 6: 881 case 7: 882 mmc->capacity = mmc->capacity_gp[part_num - 4]; 883 break; 884 default: 885 return -1; 886 } 887 888 mmc_get_blk_desc(mmc)->lba = lldiv(mmc->capacity, mmc->read_bl_len); 889 890 return 0; 891 } 892 893 #if CONFIG_IS_ENABLED(MMC_HS200_SUPPORT) 894 static int mmc_boot_part_access_chk(struct mmc *mmc, unsigned int part_num) 895 { 896 int forbidden = 0; 897 bool change = false; 898 899 if (part_num & PART_ACCESS_MASK) 900 forbidden = MMC_CAP(MMC_HS_200); 901 902 if (MMC_CAP(mmc->selected_mode) & forbidden) { 903 debug("selected mode (%s) is forbidden for part %d\n", 904 mmc_mode_name(mmc->selected_mode), part_num); 905 change = true; 906 } else if (mmc->selected_mode != mmc->best_mode) { 907 debug("selected mode is not optimal\n"); 908 change = true; 909 } 910 911 if (change) 912 return mmc_select_mode_and_width(mmc, 913 mmc->card_caps & ~forbidden); 914 915 return 0; 916 } 917 #else 918 static inline int mmc_boot_part_access_chk(struct mmc *mmc, 919 unsigned int part_num) 920 { 921 return 0; 922 } 923 #endif 924 925 int mmc_switch_part(struct mmc *mmc, unsigned int part_num) 926 { 927 int ret; 928 929 ret = mmc_boot_part_access_chk(mmc, part_num); 930 if (ret) 931 return ret; 932 933 ret = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_PART_CONF, 934 (mmc->part_config & ~PART_ACCESS_MASK) 935 | (part_num & PART_ACCESS_MASK)); 936 937 /* 938 * Set the capacity if the switch succeeded or was intended 939 * to return to representing the raw device. 940 */ 941 if ((ret == 0) || ((ret == -ENODEV) && (part_num == 0))) { 942 ret = mmc_set_capacity(mmc, part_num); 943 mmc_get_blk_desc(mmc)->hwpart = part_num; 944 } 945 946 return ret; 947 } 948 949 #if CONFIG_IS_ENABLED(MMC_HW_PARTITIONING) 950 int mmc_hwpart_config(struct mmc *mmc, 951 const struct mmc_hwpart_conf *conf, 952 enum mmc_hwpart_conf_mode mode) 953 { 954 u8 part_attrs = 0; 955 u32 enh_size_mult; 956 u32 enh_start_addr; 957 u32 gp_size_mult[4]; 958 u32 max_enh_size_mult; 959 u32 tot_enh_size_mult = 0; 960 u8 wr_rel_set; 961 int i, pidx, err; 962 ALLOC_CACHE_ALIGN_BUFFER(u8, ext_csd, MMC_MAX_BLOCK_LEN); 963 964 if (mode < MMC_HWPART_CONF_CHECK || mode > MMC_HWPART_CONF_COMPLETE) 965 return -EINVAL; 966 967 if (IS_SD(mmc) || (mmc->version < MMC_VERSION_4_41)) { 968 pr_err("eMMC >= 4.4 required for enhanced user data area\n"); 969 return -EMEDIUMTYPE; 970 } 971 972 if (!(mmc->part_support & PART_SUPPORT)) { 973 pr_err("Card does not support partitioning\n"); 974 return -EMEDIUMTYPE; 975 } 976 977 if (!mmc->hc_wp_grp_size) { 978 pr_err("Card does not define HC WP group size\n"); 979 return -EMEDIUMTYPE; 980 } 981 982 /* check partition alignment and total enhanced size */ 983 if (conf->user.enh_size) { 984 if (conf->user.enh_size % mmc->hc_wp_grp_size || 985 conf->user.enh_start % mmc->hc_wp_grp_size) { 986 pr_err("User data enhanced area not HC WP group " 987 "size aligned\n"); 988 return -EINVAL; 989 } 990 part_attrs |= EXT_CSD_ENH_USR; 991 enh_size_mult = conf->user.enh_size / mmc->hc_wp_grp_size; 992 if (mmc->high_capacity) { 993 enh_start_addr = conf->user.enh_start; 994 } else { 995 enh_start_addr = (conf->user.enh_start << 9); 996 } 997 } else { 998 enh_size_mult = 0; 999 enh_start_addr = 0; 1000 } 1001 tot_enh_size_mult += enh_size_mult; 1002 1003 for (pidx = 0; pidx < 4; pidx++) { 1004 if (conf->gp_part[pidx].size % mmc->hc_wp_grp_size) { 1005 pr_err("GP%i partition not HC WP group size " 1006 "aligned\n", pidx+1); 1007 return -EINVAL; 1008 } 1009 gp_size_mult[pidx] = conf->gp_part[pidx].size / mmc->hc_wp_grp_size; 1010 if (conf->gp_part[pidx].size && conf->gp_part[pidx].enhanced) { 1011 part_attrs |= EXT_CSD_ENH_GP(pidx); 1012 tot_enh_size_mult += gp_size_mult[pidx]; 1013 } 1014 } 1015 1016 if (part_attrs && ! (mmc->part_support & ENHNCD_SUPPORT)) { 1017 pr_err("Card does not support enhanced attribute\n"); 1018 return -EMEDIUMTYPE; 1019 } 1020 1021 err = mmc_send_ext_csd(mmc, ext_csd); 1022 if (err) 1023 return err; 1024 1025 max_enh_size_mult = 1026 (ext_csd[EXT_CSD_MAX_ENH_SIZE_MULT+2] << 16) + 1027 (ext_csd[EXT_CSD_MAX_ENH_SIZE_MULT+1] << 8) + 1028 ext_csd[EXT_CSD_MAX_ENH_SIZE_MULT]; 1029 if (tot_enh_size_mult > max_enh_size_mult) { 1030 pr_err("Total enhanced size exceeds maximum (%u > %u)\n", 1031 tot_enh_size_mult, max_enh_size_mult); 1032 return -EMEDIUMTYPE; 1033 } 1034 1035 /* The default value of EXT_CSD_WR_REL_SET is device 1036 * dependent, the values can only be changed if the 1037 * EXT_CSD_HS_CTRL_REL bit is set. The values can be 1038 * changed only once and before partitioning is completed. */ 1039 wr_rel_set = ext_csd[EXT_CSD_WR_REL_SET]; 1040 if (conf->user.wr_rel_change) { 1041 if (conf->user.wr_rel_set) 1042 wr_rel_set |= EXT_CSD_WR_DATA_REL_USR; 1043 else 1044 wr_rel_set &= ~EXT_CSD_WR_DATA_REL_USR; 1045 } 1046 for (pidx = 0; pidx < 4; pidx++) { 1047 if (conf->gp_part[pidx].wr_rel_change) { 1048 if (conf->gp_part[pidx].wr_rel_set) 1049 wr_rel_set |= EXT_CSD_WR_DATA_REL_GP(pidx); 1050 else 1051 wr_rel_set &= ~EXT_CSD_WR_DATA_REL_GP(pidx); 1052 } 1053 } 1054 1055 if (wr_rel_set != ext_csd[EXT_CSD_WR_REL_SET] && 1056 !(ext_csd[EXT_CSD_WR_REL_PARAM] & EXT_CSD_HS_CTRL_REL)) { 1057 puts("Card does not support host controlled partition write " 1058 "reliability settings\n"); 1059 return -EMEDIUMTYPE; 1060 } 1061 1062 if (ext_csd[EXT_CSD_PARTITION_SETTING] & 1063 EXT_CSD_PARTITION_SETTING_COMPLETED) { 1064 pr_err("Card already partitioned\n"); 1065 return -EPERM; 1066 } 1067 1068 if (mode == MMC_HWPART_CONF_CHECK) 1069 return 0; 1070 1071 /* Partitioning requires high-capacity size definitions */ 1072 if (!(ext_csd[EXT_CSD_ERASE_GROUP_DEF] & 0x01)) { 1073 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, 1074 EXT_CSD_ERASE_GROUP_DEF, 1); 1075 1076 if (err) 1077 return err; 1078 1079 ext_csd[EXT_CSD_ERASE_GROUP_DEF] = 1; 1080 1081 /* update erase group size to be high-capacity */ 1082 mmc->erase_grp_size = 1083 ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] * 1024; 1084 1085 } 1086 1087 /* all OK, write the configuration */ 1088 for (i = 0; i < 4; i++) { 1089 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, 1090 EXT_CSD_ENH_START_ADDR+i, 1091 (enh_start_addr >> (i*8)) & 0xFF); 1092 if (err) 1093 return err; 1094 } 1095 for (i = 0; i < 3; i++) { 1096 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, 1097 EXT_CSD_ENH_SIZE_MULT+i, 1098 (enh_size_mult >> (i*8)) & 0xFF); 1099 if (err) 1100 return err; 1101 } 1102 for (pidx = 0; pidx < 4; pidx++) { 1103 for (i = 0; i < 3; i++) { 1104 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, 1105 EXT_CSD_GP_SIZE_MULT+pidx*3+i, 1106 (gp_size_mult[pidx] >> (i*8)) & 0xFF); 1107 if (err) 1108 return err; 1109 } 1110 } 1111 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, 1112 EXT_CSD_PARTITIONS_ATTRIBUTE, part_attrs); 1113 if (err) 1114 return err; 1115 1116 if (mode == MMC_HWPART_CONF_SET) 1117 return 0; 1118 1119 /* The WR_REL_SET is a write-once register but shall be 1120 * written before setting PART_SETTING_COMPLETED. As it is 1121 * write-once we can only write it when completing the 1122 * partitioning. */ 1123 if (wr_rel_set != ext_csd[EXT_CSD_WR_REL_SET]) { 1124 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, 1125 EXT_CSD_WR_REL_SET, wr_rel_set); 1126 if (err) 1127 return err; 1128 } 1129 1130 /* Setting PART_SETTING_COMPLETED confirms the partition 1131 * configuration but it only becomes effective after power 1132 * cycle, so we do not adjust the partition related settings 1133 * in the mmc struct. */ 1134 1135 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, 1136 EXT_CSD_PARTITION_SETTING, 1137 EXT_CSD_PARTITION_SETTING_COMPLETED); 1138 if (err) 1139 return err; 1140 1141 return 0; 1142 } 1143 #endif 1144 1145 #if !CONFIG_IS_ENABLED(DM_MMC) 1146 int mmc_getcd(struct mmc *mmc) 1147 { 1148 int cd; 1149 1150 cd = board_mmc_getcd(mmc); 1151 1152 if (cd < 0) { 1153 if (mmc->cfg->ops->getcd) 1154 cd = mmc->cfg->ops->getcd(mmc); 1155 else 1156 cd = 1; 1157 } 1158 1159 return cd; 1160 } 1161 #endif 1162 1163 static int sd_switch(struct mmc *mmc, int mode, int group, u8 value, u8 *resp) 1164 { 1165 struct mmc_cmd cmd; 1166 struct mmc_data data; 1167 1168 /* Switch the frequency */ 1169 cmd.cmdidx = SD_CMD_SWITCH_FUNC; 1170 cmd.resp_type = MMC_RSP_R1; 1171 cmd.cmdarg = (mode << 31) | 0xffffff; 1172 cmd.cmdarg &= ~(0xf << (group * 4)); 1173 cmd.cmdarg |= value << (group * 4); 1174 1175 data.dest = (char *)resp; 1176 data.blocksize = 64; 1177 data.blocks = 1; 1178 data.flags = MMC_DATA_READ; 1179 1180 return mmc_send_cmd(mmc, &cmd, &data); 1181 } 1182 1183 1184 static int sd_get_capabilities(struct mmc *mmc) 1185 { 1186 int err; 1187 struct mmc_cmd cmd; 1188 ALLOC_CACHE_ALIGN_BUFFER(__be32, scr, 2); 1189 ALLOC_CACHE_ALIGN_BUFFER(__be32, switch_status, 16); 1190 struct mmc_data data; 1191 int timeout; 1192 #if CONFIG_IS_ENABLED(MMC_UHS_SUPPORT) 1193 u32 sd3_bus_mode; 1194 #endif 1195 1196 mmc->card_caps = MMC_MODE_1BIT | MMC_CAP(SD_LEGACY); 1197 1198 if (mmc_host_is_spi(mmc)) 1199 return 0; 1200 1201 /* Read the SCR to find out if this card supports higher speeds */ 1202 cmd.cmdidx = MMC_CMD_APP_CMD; 1203 cmd.resp_type = MMC_RSP_R1; 1204 cmd.cmdarg = mmc->rca << 16; 1205 1206 err = mmc_send_cmd(mmc, &cmd, NULL); 1207 1208 if (err) 1209 return err; 1210 1211 cmd.cmdidx = SD_CMD_APP_SEND_SCR; 1212 cmd.resp_type = MMC_RSP_R1; 1213 cmd.cmdarg = 0; 1214 1215 timeout = 3; 1216 1217 retry_scr: 1218 data.dest = (char *)scr; 1219 data.blocksize = 8; 1220 data.blocks = 1; 1221 data.flags = MMC_DATA_READ; 1222 1223 err = mmc_send_cmd(mmc, &cmd, &data); 1224 1225 if (err) { 1226 if (timeout--) 1227 goto retry_scr; 1228 1229 return err; 1230 } 1231 1232 mmc->scr[0] = __be32_to_cpu(scr[0]); 1233 mmc->scr[1] = __be32_to_cpu(scr[1]); 1234 1235 switch ((mmc->scr[0] >> 24) & 0xf) { 1236 case 0: 1237 mmc->version = SD_VERSION_1_0; 1238 break; 1239 case 1: 1240 mmc->version = SD_VERSION_1_10; 1241 break; 1242 case 2: 1243 mmc->version = SD_VERSION_2; 1244 if ((mmc->scr[0] >> 15) & 0x1) 1245 mmc->version = SD_VERSION_3; 1246 break; 1247 default: 1248 mmc->version = SD_VERSION_1_0; 1249 break; 1250 } 1251 1252 if (mmc->scr[0] & SD_DATA_4BIT) 1253 mmc->card_caps |= MMC_MODE_4BIT; 1254 1255 /* Version 1.0 doesn't support switching */ 1256 if (mmc->version == SD_VERSION_1_0) 1257 return 0; 1258 1259 timeout = 4; 1260 while (timeout--) { 1261 err = sd_switch(mmc, SD_SWITCH_CHECK, 0, 1, 1262 (u8 *)switch_status); 1263 1264 if (err) 1265 return err; 1266 1267 /* The high-speed function is busy. Try again */ 1268 if (!(__be32_to_cpu(switch_status[7]) & SD_HIGHSPEED_BUSY)) 1269 break; 1270 } 1271 1272 /* If high-speed isn't supported, we return */ 1273 if (__be32_to_cpu(switch_status[3]) & SD_HIGHSPEED_SUPPORTED) 1274 mmc->card_caps |= MMC_CAP(SD_HS); 1275 1276 #if CONFIG_IS_ENABLED(MMC_UHS_SUPPORT) 1277 /* Version before 3.0 don't support UHS modes */ 1278 if (mmc->version < SD_VERSION_3) 1279 return 0; 1280 1281 sd3_bus_mode = __be32_to_cpu(switch_status[3]) >> 16 & 0x1f; 1282 if (sd3_bus_mode & SD_MODE_UHS_SDR104) 1283 mmc->card_caps |= MMC_CAP(UHS_SDR104); 1284 if (sd3_bus_mode & SD_MODE_UHS_SDR50) 1285 mmc->card_caps |= MMC_CAP(UHS_SDR50); 1286 if (sd3_bus_mode & SD_MODE_UHS_SDR25) 1287 mmc->card_caps |= MMC_CAP(UHS_SDR25); 1288 if (sd3_bus_mode & SD_MODE_UHS_SDR12) 1289 mmc->card_caps |= MMC_CAP(UHS_SDR12); 1290 if (sd3_bus_mode & SD_MODE_UHS_DDR50) 1291 mmc->card_caps |= MMC_CAP(UHS_DDR50); 1292 #endif 1293 1294 return 0; 1295 } 1296 1297 static int sd_set_card_speed(struct mmc *mmc, enum bus_mode mode) 1298 { 1299 int err; 1300 1301 ALLOC_CACHE_ALIGN_BUFFER(uint, switch_status, 16); 1302 int speed; 1303 1304 switch (mode) { 1305 case SD_LEGACY: 1306 speed = UHS_SDR12_BUS_SPEED; 1307 break; 1308 case SD_HS: 1309 speed = HIGH_SPEED_BUS_SPEED; 1310 break; 1311 #if CONFIG_IS_ENABLED(MMC_UHS_SUPPORT) 1312 case UHS_SDR12: 1313 speed = UHS_SDR12_BUS_SPEED; 1314 break; 1315 case UHS_SDR25: 1316 speed = UHS_SDR25_BUS_SPEED; 1317 break; 1318 case UHS_SDR50: 1319 speed = UHS_SDR50_BUS_SPEED; 1320 break; 1321 case UHS_DDR50: 1322 speed = UHS_DDR50_BUS_SPEED; 1323 break; 1324 case UHS_SDR104: 1325 speed = UHS_SDR104_BUS_SPEED; 1326 break; 1327 #endif 1328 default: 1329 return -EINVAL; 1330 } 1331 1332 err = sd_switch(mmc, SD_SWITCH_SWITCH, 0, speed, (u8 *)switch_status); 1333 if (err) 1334 return err; 1335 1336 if ((__be32_to_cpu(switch_status[4]) >> 24) != speed) 1337 return -ENOTSUPP; 1338 1339 return 0; 1340 } 1341 1342 int sd_select_bus_width(struct mmc *mmc, int w) 1343 { 1344 int err; 1345 struct mmc_cmd cmd; 1346 1347 if ((w != 4) && (w != 1)) 1348 return -EINVAL; 1349 1350 cmd.cmdidx = MMC_CMD_APP_CMD; 1351 cmd.resp_type = MMC_RSP_R1; 1352 cmd.cmdarg = mmc->rca << 16; 1353 1354 err = mmc_send_cmd(mmc, &cmd, NULL); 1355 if (err) 1356 return err; 1357 1358 cmd.cmdidx = SD_CMD_APP_SET_BUS_WIDTH; 1359 cmd.resp_type = MMC_RSP_R1; 1360 if (w == 4) 1361 cmd.cmdarg = 2; 1362 else if (w == 1) 1363 cmd.cmdarg = 0; 1364 err = mmc_send_cmd(mmc, &cmd, NULL); 1365 if (err) 1366 return err; 1367 1368 return 0; 1369 } 1370 1371 #if CONFIG_IS_ENABLED(MMC_WRITE) 1372 static int sd_read_ssr(struct mmc *mmc) 1373 { 1374 static const unsigned int sd_au_size[] = { 1375 0, SZ_16K / 512, SZ_32K / 512, 1376 SZ_64K / 512, SZ_128K / 512, SZ_256K / 512, 1377 SZ_512K / 512, SZ_1M / 512, SZ_2M / 512, 1378 SZ_4M / 512, SZ_8M / 512, (SZ_8M + SZ_4M) / 512, 1379 SZ_16M / 512, (SZ_16M + SZ_8M) / 512, SZ_32M / 512, 1380 SZ_64M / 512, 1381 }; 1382 int err, i; 1383 struct mmc_cmd cmd; 1384 ALLOC_CACHE_ALIGN_BUFFER(uint, ssr, 16); 1385 struct mmc_data data; 1386 int timeout = 3; 1387 unsigned int au, eo, et, es; 1388 1389 cmd.cmdidx = MMC_CMD_APP_CMD; 1390 cmd.resp_type = MMC_RSP_R1; 1391 cmd.cmdarg = mmc->rca << 16; 1392 1393 err = mmc_send_cmd(mmc, &cmd, NULL); 1394 if (err) 1395 return err; 1396 1397 cmd.cmdidx = SD_CMD_APP_SD_STATUS; 1398 cmd.resp_type = MMC_RSP_R1; 1399 cmd.cmdarg = 0; 1400 1401 retry_ssr: 1402 data.dest = (char *)ssr; 1403 data.blocksize = 64; 1404 data.blocks = 1; 1405 data.flags = MMC_DATA_READ; 1406 1407 err = mmc_send_cmd(mmc, &cmd, &data); 1408 if (err) { 1409 if (timeout--) 1410 goto retry_ssr; 1411 1412 return err; 1413 } 1414 1415 for (i = 0; i < 16; i++) 1416 ssr[i] = be32_to_cpu(ssr[i]); 1417 1418 au = (ssr[2] >> 12) & 0xF; 1419 if ((au <= 9) || (mmc->version == SD_VERSION_3)) { 1420 mmc->ssr.au = sd_au_size[au]; 1421 es = (ssr[3] >> 24) & 0xFF; 1422 es |= (ssr[2] & 0xFF) << 8; 1423 et = (ssr[3] >> 18) & 0x3F; 1424 if (es && et) { 1425 eo = (ssr[3] >> 16) & 0x3; 1426 mmc->ssr.erase_timeout = (et * 1000) / es; 1427 mmc->ssr.erase_offset = eo * 1000; 1428 } 1429 } else { 1430 debug("Invalid Allocation Unit Size.\n"); 1431 } 1432 1433 return 0; 1434 } 1435 #endif 1436 /* frequency bases */ 1437 /* divided by 10 to be nice to platforms without floating point */ 1438 static const int fbase[] = { 1439 10000, 1440 100000, 1441 1000000, 1442 10000000, 1443 }; 1444 1445 /* Multiplier values for TRAN_SPEED. Multiplied by 10 to be nice 1446 * to platforms without floating point. 1447 */ 1448 static const u8 multipliers[] = { 1449 0, /* reserved */ 1450 10, 1451 12, 1452 13, 1453 15, 1454 20, 1455 25, 1456 30, 1457 35, 1458 40, 1459 45, 1460 50, 1461 55, 1462 60, 1463 70, 1464 80, 1465 }; 1466 1467 static inline int bus_width(uint cap) 1468 { 1469 if (cap == MMC_MODE_8BIT) 1470 return 8; 1471 if (cap == MMC_MODE_4BIT) 1472 return 4; 1473 if (cap == MMC_MODE_1BIT) 1474 return 1; 1475 pr_warn("invalid bus witdh capability 0x%x\n", cap); 1476 return 0; 1477 } 1478 1479 #if !CONFIG_IS_ENABLED(DM_MMC) 1480 #ifdef MMC_SUPPORTS_TUNING 1481 static int mmc_execute_tuning(struct mmc *mmc, uint opcode) 1482 { 1483 return -ENOTSUPP; 1484 } 1485 #endif 1486 1487 static void mmc_send_init_stream(struct mmc *mmc) 1488 { 1489 } 1490 1491 static int mmc_set_ios(struct mmc *mmc) 1492 { 1493 int ret = 0; 1494 1495 if (mmc->cfg->ops->set_ios) 1496 ret = mmc->cfg->ops->set_ios(mmc); 1497 1498 return ret; 1499 } 1500 #endif 1501 1502 int mmc_set_clock(struct mmc *mmc, uint clock, bool disable) 1503 { 1504 if (!disable) { 1505 if (clock > mmc->cfg->f_max) 1506 clock = mmc->cfg->f_max; 1507 1508 if (clock < mmc->cfg->f_min) 1509 clock = mmc->cfg->f_min; 1510 } 1511 1512 mmc->clock = clock; 1513 mmc->clk_disable = disable; 1514 1515 return mmc_set_ios(mmc); 1516 } 1517 1518 static int mmc_set_bus_width(struct mmc *mmc, uint width) 1519 { 1520 mmc->bus_width = width; 1521 1522 return mmc_set_ios(mmc); 1523 } 1524 1525 #if CONFIG_IS_ENABLED(MMC_VERBOSE) || defined(DEBUG) 1526 /* 1527 * helper function to display the capabilities in a human 1528 * friendly manner. The capabilities include bus width and 1529 * supported modes. 1530 */ 1531 void mmc_dump_capabilities(const char *text, uint caps) 1532 { 1533 enum bus_mode mode; 1534 1535 printf("%s: widths [", text); 1536 if (caps & MMC_MODE_8BIT) 1537 printf("8, "); 1538 if (caps & MMC_MODE_4BIT) 1539 printf("4, "); 1540 if (caps & MMC_MODE_1BIT) 1541 printf("1, "); 1542 printf("\b\b] modes ["); 1543 for (mode = MMC_LEGACY; mode < MMC_MODES_END; mode++) 1544 if (MMC_CAP(mode) & caps) 1545 printf("%s, ", mmc_mode_name(mode)); 1546 printf("\b\b]\n"); 1547 } 1548 #endif 1549 1550 struct mode_width_tuning { 1551 enum bus_mode mode; 1552 uint widths; 1553 #ifdef MMC_SUPPORTS_TUNING 1554 uint tuning; 1555 #endif 1556 }; 1557 1558 #if CONFIG_IS_ENABLED(MMC_IO_VOLTAGE) 1559 int mmc_voltage_to_mv(enum mmc_voltage voltage) 1560 { 1561 switch (voltage) { 1562 case MMC_SIGNAL_VOLTAGE_000: return 0; 1563 case MMC_SIGNAL_VOLTAGE_330: return 3300; 1564 case MMC_SIGNAL_VOLTAGE_180: return 1800; 1565 case MMC_SIGNAL_VOLTAGE_120: return 1200; 1566 } 1567 return -EINVAL; 1568 } 1569 1570 static int mmc_set_signal_voltage(struct mmc *mmc, uint signal_voltage) 1571 { 1572 int err; 1573 1574 if (mmc->signal_voltage == signal_voltage) 1575 return 0; 1576 1577 mmc->signal_voltage = signal_voltage; 1578 err = mmc_set_ios(mmc); 1579 if (err) 1580 debug("unable to set voltage (err %d)\n", err); 1581 1582 return err; 1583 } 1584 #else 1585 static inline int mmc_set_signal_voltage(struct mmc *mmc, uint signal_voltage) 1586 { 1587 return 0; 1588 } 1589 #endif 1590 1591 static const struct mode_width_tuning sd_modes_by_pref[] = { 1592 #if CONFIG_IS_ENABLED(MMC_UHS_SUPPORT) 1593 #ifdef MMC_SUPPORTS_TUNING 1594 { 1595 .mode = UHS_SDR104, 1596 .widths = MMC_MODE_4BIT | MMC_MODE_1BIT, 1597 .tuning = MMC_CMD_SEND_TUNING_BLOCK 1598 }, 1599 #endif 1600 { 1601 .mode = UHS_SDR50, 1602 .widths = MMC_MODE_4BIT | MMC_MODE_1BIT, 1603 }, 1604 { 1605 .mode = UHS_DDR50, 1606 .widths = MMC_MODE_4BIT | MMC_MODE_1BIT, 1607 }, 1608 { 1609 .mode = UHS_SDR25, 1610 .widths = MMC_MODE_4BIT | MMC_MODE_1BIT, 1611 }, 1612 #endif 1613 { 1614 .mode = SD_HS, 1615 .widths = MMC_MODE_4BIT | MMC_MODE_1BIT, 1616 }, 1617 #if CONFIG_IS_ENABLED(MMC_UHS_SUPPORT) 1618 { 1619 .mode = UHS_SDR12, 1620 .widths = MMC_MODE_4BIT | MMC_MODE_1BIT, 1621 }, 1622 #endif 1623 { 1624 .mode = SD_LEGACY, 1625 .widths = MMC_MODE_4BIT | MMC_MODE_1BIT, 1626 } 1627 }; 1628 1629 #define for_each_sd_mode_by_pref(caps, mwt) \ 1630 for (mwt = sd_modes_by_pref;\ 1631 mwt < sd_modes_by_pref + ARRAY_SIZE(sd_modes_by_pref);\ 1632 mwt++) \ 1633 if (caps & MMC_CAP(mwt->mode)) 1634 1635 static int sd_select_mode_and_width(struct mmc *mmc, uint card_caps) 1636 { 1637 int err; 1638 uint widths[] = {MMC_MODE_4BIT, MMC_MODE_1BIT}; 1639 const struct mode_width_tuning *mwt; 1640 #if CONFIG_IS_ENABLED(MMC_UHS_SUPPORT) 1641 bool uhs_en = (mmc->ocr & OCR_S18R) ? true : false; 1642 #else 1643 bool uhs_en = false; 1644 #endif 1645 uint caps; 1646 1647 #ifdef DEBUG 1648 mmc_dump_capabilities("sd card", card_caps); 1649 mmc_dump_capabilities("host", mmc->host_caps); 1650 #endif 1651 1652 /* Restrict card's capabilities by what the host can do */ 1653 caps = card_caps & mmc->host_caps; 1654 1655 if (!uhs_en) 1656 caps &= ~UHS_CAPS; 1657 1658 for_each_sd_mode_by_pref(caps, mwt) { 1659 uint *w; 1660 1661 for (w = widths; w < widths + ARRAY_SIZE(widths); w++) { 1662 if (*w & caps & mwt->widths) { 1663 debug("trying mode %s width %d (at %d MHz)\n", 1664 mmc_mode_name(mwt->mode), 1665 bus_width(*w), 1666 mmc_mode2freq(mmc, mwt->mode) / 1000000); 1667 1668 /* configure the bus width (card + host) */ 1669 err = sd_select_bus_width(mmc, bus_width(*w)); 1670 if (err) 1671 goto error; 1672 mmc_set_bus_width(mmc, bus_width(*w)); 1673 1674 /* configure the bus mode (card) */ 1675 err = sd_set_card_speed(mmc, mwt->mode); 1676 if (err) 1677 goto error; 1678 1679 /* configure the bus mode (host) */ 1680 mmc_select_mode(mmc, mwt->mode); 1681 mmc_set_clock(mmc, mmc->tran_speed, false); 1682 1683 #ifdef MMC_SUPPORTS_TUNING 1684 /* execute tuning if needed */ 1685 if (mwt->tuning && !mmc_host_is_spi(mmc)) { 1686 err = mmc_execute_tuning(mmc, 1687 mwt->tuning); 1688 if (err) { 1689 debug("tuning failed\n"); 1690 goto error; 1691 } 1692 } 1693 #endif 1694 1695 #if CONFIG_IS_ENABLED(MMC_WRITE) 1696 err = sd_read_ssr(mmc); 1697 if (!err) 1698 pr_warn("unable to read ssr\n"); 1699 #endif 1700 if (!err) 1701 return 0; 1702 1703 error: 1704 /* revert to a safer bus speed */ 1705 mmc_select_mode(mmc, SD_LEGACY); 1706 mmc_set_clock(mmc, mmc->tran_speed, false); 1707 } 1708 } 1709 } 1710 1711 printf("unable to select a mode\n"); 1712 return -ENOTSUPP; 1713 } 1714 1715 /* 1716 * read the compare the part of ext csd that is constant. 1717 * This can be used to check that the transfer is working 1718 * as expected. 1719 */ 1720 static int mmc_read_and_compare_ext_csd(struct mmc *mmc) 1721 { 1722 int err; 1723 const u8 *ext_csd = mmc->ext_csd; 1724 ALLOC_CACHE_ALIGN_BUFFER(u8, test_csd, MMC_MAX_BLOCK_LEN); 1725 1726 if (mmc->version < MMC_VERSION_4) 1727 return 0; 1728 1729 err = mmc_send_ext_csd(mmc, test_csd); 1730 if (err) 1731 return err; 1732 1733 /* Only compare read only fields */ 1734 if (ext_csd[EXT_CSD_PARTITIONING_SUPPORT] 1735 == test_csd[EXT_CSD_PARTITIONING_SUPPORT] && 1736 ext_csd[EXT_CSD_HC_WP_GRP_SIZE] 1737 == test_csd[EXT_CSD_HC_WP_GRP_SIZE] && 1738 ext_csd[EXT_CSD_REV] 1739 == test_csd[EXT_CSD_REV] && 1740 ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] 1741 == test_csd[EXT_CSD_HC_ERASE_GRP_SIZE] && 1742 memcmp(&ext_csd[EXT_CSD_SEC_CNT], 1743 &test_csd[EXT_CSD_SEC_CNT], 4) == 0) 1744 return 0; 1745 1746 return -EBADMSG; 1747 } 1748 1749 #if CONFIG_IS_ENABLED(MMC_IO_VOLTAGE) 1750 static int mmc_set_lowest_voltage(struct mmc *mmc, enum bus_mode mode, 1751 uint32_t allowed_mask) 1752 { 1753 u32 card_mask = 0; 1754 1755 switch (mode) { 1756 case MMC_HS_200: 1757 if (mmc->cardtype & EXT_CSD_CARD_TYPE_HS200_1_8V) 1758 card_mask |= MMC_SIGNAL_VOLTAGE_180; 1759 if (mmc->cardtype & EXT_CSD_CARD_TYPE_HS200_1_2V) 1760 card_mask |= MMC_SIGNAL_VOLTAGE_120; 1761 break; 1762 case MMC_DDR_52: 1763 if (mmc->cardtype & EXT_CSD_CARD_TYPE_DDR_1_8V) 1764 card_mask |= MMC_SIGNAL_VOLTAGE_330 | 1765 MMC_SIGNAL_VOLTAGE_180; 1766 if (mmc->cardtype & EXT_CSD_CARD_TYPE_DDR_1_2V) 1767 card_mask |= MMC_SIGNAL_VOLTAGE_120; 1768 break; 1769 default: 1770 card_mask |= MMC_SIGNAL_VOLTAGE_330; 1771 break; 1772 } 1773 1774 while (card_mask & allowed_mask) { 1775 enum mmc_voltage best_match; 1776 1777 best_match = 1 << (ffs(card_mask & allowed_mask) - 1); 1778 if (!mmc_set_signal_voltage(mmc, best_match)) 1779 return 0; 1780 1781 allowed_mask &= ~best_match; 1782 } 1783 1784 return -ENOTSUPP; 1785 } 1786 #else 1787 static inline int mmc_set_lowest_voltage(struct mmc *mmc, enum bus_mode mode, 1788 uint32_t allowed_mask) 1789 { 1790 return 0; 1791 } 1792 #endif 1793 1794 static const struct mode_width_tuning mmc_modes_by_pref[] = { 1795 #if CONFIG_IS_ENABLED(MMC_HS200_SUPPORT) 1796 { 1797 .mode = MMC_HS_200, 1798 .widths = MMC_MODE_8BIT | MMC_MODE_4BIT, 1799 .tuning = MMC_CMD_SEND_TUNING_BLOCK_HS200 1800 }, 1801 #endif 1802 { 1803 .mode = MMC_DDR_52, 1804 .widths = MMC_MODE_8BIT | MMC_MODE_4BIT, 1805 }, 1806 { 1807 .mode = MMC_HS_52, 1808 .widths = MMC_MODE_8BIT | MMC_MODE_4BIT | MMC_MODE_1BIT, 1809 }, 1810 { 1811 .mode = MMC_HS, 1812 .widths = MMC_MODE_8BIT | MMC_MODE_4BIT | MMC_MODE_1BIT, 1813 }, 1814 { 1815 .mode = MMC_LEGACY, 1816 .widths = MMC_MODE_8BIT | MMC_MODE_4BIT | MMC_MODE_1BIT, 1817 } 1818 }; 1819 1820 #define for_each_mmc_mode_by_pref(caps, mwt) \ 1821 for (mwt = mmc_modes_by_pref;\ 1822 mwt < mmc_modes_by_pref + ARRAY_SIZE(mmc_modes_by_pref);\ 1823 mwt++) \ 1824 if (caps & MMC_CAP(mwt->mode)) 1825 1826 static const struct ext_csd_bus_width { 1827 uint cap; 1828 bool is_ddr; 1829 uint ext_csd_bits; 1830 } ext_csd_bus_width[] = { 1831 {MMC_MODE_8BIT, true, EXT_CSD_DDR_BUS_WIDTH_8}, 1832 {MMC_MODE_4BIT, true, EXT_CSD_DDR_BUS_WIDTH_4}, 1833 {MMC_MODE_8BIT, false, EXT_CSD_BUS_WIDTH_8}, 1834 {MMC_MODE_4BIT, false, EXT_CSD_BUS_WIDTH_4}, 1835 {MMC_MODE_1BIT, false, EXT_CSD_BUS_WIDTH_1}, 1836 }; 1837 1838 #define for_each_supported_width(caps, ddr, ecbv) \ 1839 for (ecbv = ext_csd_bus_width;\ 1840 ecbv < ext_csd_bus_width + ARRAY_SIZE(ext_csd_bus_width);\ 1841 ecbv++) \ 1842 if ((ddr == ecbv->is_ddr) && (caps & ecbv->cap)) 1843 1844 static int mmc_select_mode_and_width(struct mmc *mmc, uint card_caps) 1845 { 1846 int err; 1847 const struct mode_width_tuning *mwt; 1848 const struct ext_csd_bus_width *ecbw; 1849 1850 #ifdef DEBUG 1851 mmc_dump_capabilities("mmc", card_caps); 1852 mmc_dump_capabilities("host", mmc->host_caps); 1853 #endif 1854 1855 /* Restrict card's capabilities by what the host can do */ 1856 card_caps &= mmc->host_caps; 1857 1858 /* Only version 4 of MMC supports wider bus widths */ 1859 if (mmc->version < MMC_VERSION_4) 1860 return 0; 1861 1862 if (!mmc->ext_csd) { 1863 debug("No ext_csd found!\n"); /* this should enver happen */ 1864 return -ENOTSUPP; 1865 } 1866 1867 mmc_set_clock(mmc, mmc->legacy_speed, false); 1868 1869 for_each_mmc_mode_by_pref(card_caps, mwt) { 1870 for_each_supported_width(card_caps & mwt->widths, 1871 mmc_is_mode_ddr(mwt->mode), ecbw) { 1872 enum mmc_voltage old_voltage; 1873 debug("trying mode %s width %d (at %d MHz)\n", 1874 mmc_mode_name(mwt->mode), 1875 bus_width(ecbw->cap), 1876 mmc_mode2freq(mmc, mwt->mode) / 1000000); 1877 old_voltage = mmc->signal_voltage; 1878 err = mmc_set_lowest_voltage(mmc, mwt->mode, 1879 MMC_ALL_SIGNAL_VOLTAGE); 1880 if (err) 1881 continue; 1882 1883 /* configure the bus width (card + host) */ 1884 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, 1885 EXT_CSD_BUS_WIDTH, 1886 ecbw->ext_csd_bits & ~EXT_CSD_DDR_FLAG); 1887 if (err) 1888 goto error; 1889 mmc_set_bus_width(mmc, bus_width(ecbw->cap)); 1890 1891 /* configure the bus speed (card) */ 1892 err = mmc_set_card_speed(mmc, mwt->mode); 1893 if (err) 1894 goto error; 1895 1896 /* 1897 * configure the bus width AND the ddr mode (card) 1898 * The host side will be taken care of in the next step 1899 */ 1900 if (ecbw->ext_csd_bits & EXT_CSD_DDR_FLAG) { 1901 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, 1902 EXT_CSD_BUS_WIDTH, 1903 ecbw->ext_csd_bits); 1904 if (err) 1905 goto error; 1906 } 1907 1908 /* configure the bus mode (host) */ 1909 mmc_select_mode(mmc, mwt->mode); 1910 mmc_set_clock(mmc, mmc->tran_speed, false); 1911 #ifdef MMC_SUPPORTS_TUNING 1912 1913 /* execute tuning if needed */ 1914 if (mwt->tuning) { 1915 err = mmc_execute_tuning(mmc, mwt->tuning); 1916 if (err) { 1917 debug("tuning failed\n"); 1918 goto error; 1919 } 1920 } 1921 #endif 1922 1923 /* do a transfer to check the configuration */ 1924 err = mmc_read_and_compare_ext_csd(mmc); 1925 if (!err) 1926 return 0; 1927 error: 1928 mmc_set_signal_voltage(mmc, old_voltage); 1929 /* if an error occured, revert to a safer bus mode */ 1930 mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, 1931 EXT_CSD_BUS_WIDTH, EXT_CSD_BUS_WIDTH_1); 1932 mmc_select_mode(mmc, MMC_LEGACY); 1933 mmc_set_bus_width(mmc, 1); 1934 } 1935 } 1936 1937 pr_err("unable to select a mode\n"); 1938 1939 return -ENOTSUPP; 1940 } 1941 1942 static int mmc_startup_v4(struct mmc *mmc) 1943 { 1944 int err, i; 1945 u64 capacity; 1946 bool has_parts = false; 1947 bool part_completed; 1948 static const u32 mmc_versions[] = { 1949 MMC_VERSION_4, 1950 MMC_VERSION_4_1, 1951 MMC_VERSION_4_2, 1952 MMC_VERSION_4_3, 1953 MMC_VERSION_4_41, 1954 MMC_VERSION_4_5, 1955 MMC_VERSION_5_0, 1956 MMC_VERSION_5_1 1957 }; 1958 1959 ALLOC_CACHE_ALIGN_BUFFER(u8, ext_csd, MMC_MAX_BLOCK_LEN); 1960 1961 if (IS_SD(mmc) || (mmc->version < MMC_VERSION_4)) 1962 return 0; 1963 1964 /* check ext_csd version and capacity */ 1965 err = mmc_send_ext_csd(mmc, ext_csd); 1966 if (err) 1967 goto error; 1968 1969 /* store the ext csd for future reference */ 1970 if (!mmc->ext_csd) 1971 mmc->ext_csd = malloc(MMC_MAX_BLOCK_LEN); 1972 if (!mmc->ext_csd) 1973 return -ENOMEM; 1974 memcpy(mmc->ext_csd, ext_csd, MMC_MAX_BLOCK_LEN); 1975 1976 if (ext_csd[EXT_CSD_REV] > ARRAY_SIZE(mmc_versions)) 1977 return -EINVAL; 1978 1979 mmc->version = mmc_versions[ext_csd[EXT_CSD_REV]]; 1980 1981 if (mmc->version >= MMC_VERSION_4_2) { 1982 /* 1983 * According to the JEDEC Standard, the value of 1984 * ext_csd's capacity is valid if the value is more 1985 * than 2GB 1986 */ 1987 capacity = ext_csd[EXT_CSD_SEC_CNT] << 0 1988 | ext_csd[EXT_CSD_SEC_CNT + 1] << 8 1989 | ext_csd[EXT_CSD_SEC_CNT + 2] << 16 1990 | ext_csd[EXT_CSD_SEC_CNT + 3] << 24; 1991 capacity *= MMC_MAX_BLOCK_LEN; 1992 if ((capacity >> 20) > 2 * 1024) 1993 mmc->capacity_user = capacity; 1994 } 1995 1996 /* The partition data may be non-zero but it is only 1997 * effective if PARTITION_SETTING_COMPLETED is set in 1998 * EXT_CSD, so ignore any data if this bit is not set, 1999 * except for enabling the high-capacity group size 2000 * definition (see below). 2001 */ 2002 part_completed = !!(ext_csd[EXT_CSD_PARTITION_SETTING] & 2003 EXT_CSD_PARTITION_SETTING_COMPLETED); 2004 2005 /* store the partition info of emmc */ 2006 mmc->part_support = ext_csd[EXT_CSD_PARTITIONING_SUPPORT]; 2007 if ((ext_csd[EXT_CSD_PARTITIONING_SUPPORT] & PART_SUPPORT) || 2008 ext_csd[EXT_CSD_BOOT_MULT]) 2009 mmc->part_config = ext_csd[EXT_CSD_PART_CONF]; 2010 if (part_completed && 2011 (ext_csd[EXT_CSD_PARTITIONING_SUPPORT] & ENHNCD_SUPPORT)) 2012 mmc->part_attr = ext_csd[EXT_CSD_PARTITIONS_ATTRIBUTE]; 2013 2014 mmc->capacity_boot = ext_csd[EXT_CSD_BOOT_MULT] << 17; 2015 2016 mmc->capacity_rpmb = ext_csd[EXT_CSD_RPMB_MULT] << 17; 2017 2018 for (i = 0; i < 4; i++) { 2019 int idx = EXT_CSD_GP_SIZE_MULT + i * 3; 2020 uint mult = (ext_csd[idx + 2] << 16) + 2021 (ext_csd[idx + 1] << 8) + ext_csd[idx]; 2022 if (mult) 2023 has_parts = true; 2024 if (!part_completed) 2025 continue; 2026 mmc->capacity_gp[i] = mult; 2027 mmc->capacity_gp[i] *= 2028 ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE]; 2029 mmc->capacity_gp[i] *= ext_csd[EXT_CSD_HC_WP_GRP_SIZE]; 2030 mmc->capacity_gp[i] <<= 19; 2031 } 2032 2033 #ifndef CONFIG_SPL_BUILD 2034 if (part_completed) { 2035 mmc->enh_user_size = 2036 (ext_csd[EXT_CSD_ENH_SIZE_MULT + 2] << 16) + 2037 (ext_csd[EXT_CSD_ENH_SIZE_MULT + 1] << 8) + 2038 ext_csd[EXT_CSD_ENH_SIZE_MULT]; 2039 mmc->enh_user_size *= ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE]; 2040 mmc->enh_user_size *= ext_csd[EXT_CSD_HC_WP_GRP_SIZE]; 2041 mmc->enh_user_size <<= 19; 2042 mmc->enh_user_start = 2043 (ext_csd[EXT_CSD_ENH_START_ADDR + 3] << 24) + 2044 (ext_csd[EXT_CSD_ENH_START_ADDR + 2] << 16) + 2045 (ext_csd[EXT_CSD_ENH_START_ADDR + 1] << 8) + 2046 ext_csd[EXT_CSD_ENH_START_ADDR]; 2047 if (mmc->high_capacity) 2048 mmc->enh_user_start <<= 9; 2049 } 2050 #endif 2051 2052 /* 2053 * Host needs to enable ERASE_GRP_DEF bit if device is 2054 * partitioned. This bit will be lost every time after a reset 2055 * or power off. This will affect erase size. 2056 */ 2057 if (part_completed) 2058 has_parts = true; 2059 if ((ext_csd[EXT_CSD_PARTITIONING_SUPPORT] & PART_SUPPORT) && 2060 (ext_csd[EXT_CSD_PARTITIONS_ATTRIBUTE] & PART_ENH_ATTRIB)) 2061 has_parts = true; 2062 if (has_parts) { 2063 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, 2064 EXT_CSD_ERASE_GROUP_DEF, 1); 2065 2066 if (err) 2067 goto error; 2068 2069 ext_csd[EXT_CSD_ERASE_GROUP_DEF] = 1; 2070 } 2071 2072 if (ext_csd[EXT_CSD_ERASE_GROUP_DEF] & 0x01) { 2073 #if CONFIG_IS_ENABLED(MMC_WRITE) 2074 /* Read out group size from ext_csd */ 2075 mmc->erase_grp_size = 2076 ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] * 1024; 2077 #endif 2078 /* 2079 * if high capacity and partition setting completed 2080 * SEC_COUNT is valid even if it is smaller than 2 GiB 2081 * JEDEC Standard JESD84-B45, 6.2.4 2082 */ 2083 if (mmc->high_capacity && part_completed) { 2084 capacity = (ext_csd[EXT_CSD_SEC_CNT]) | 2085 (ext_csd[EXT_CSD_SEC_CNT + 1] << 8) | 2086 (ext_csd[EXT_CSD_SEC_CNT + 2] << 16) | 2087 (ext_csd[EXT_CSD_SEC_CNT + 3] << 24); 2088 capacity *= MMC_MAX_BLOCK_LEN; 2089 mmc->capacity_user = capacity; 2090 } 2091 } 2092 #if CONFIG_IS_ENABLED(MMC_WRITE) 2093 else { 2094 /* Calculate the group size from the csd value. */ 2095 int erase_gsz, erase_gmul; 2096 2097 erase_gsz = (mmc->csd[2] & 0x00007c00) >> 10; 2098 erase_gmul = (mmc->csd[2] & 0x000003e0) >> 5; 2099 mmc->erase_grp_size = (erase_gsz + 1) 2100 * (erase_gmul + 1); 2101 } 2102 #endif 2103 #if CONFIG_IS_ENABLED(MMC_HW_PARTITIONING) 2104 mmc->hc_wp_grp_size = 1024 2105 * ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] 2106 * ext_csd[EXT_CSD_HC_WP_GRP_SIZE]; 2107 #endif 2108 2109 mmc->wr_rel_set = ext_csd[EXT_CSD_WR_REL_SET]; 2110 2111 return 0; 2112 error: 2113 if (mmc->ext_csd) { 2114 free(mmc->ext_csd); 2115 mmc->ext_csd = NULL; 2116 } 2117 return err; 2118 } 2119 2120 static int mmc_startup(struct mmc *mmc) 2121 { 2122 int err, i; 2123 uint mult, freq; 2124 u64 cmult, csize; 2125 struct mmc_cmd cmd; 2126 struct blk_desc *bdesc; 2127 2128 #ifdef CONFIG_MMC_SPI_CRC_ON 2129 if (mmc_host_is_spi(mmc)) { /* enable CRC check for spi */ 2130 cmd.cmdidx = MMC_CMD_SPI_CRC_ON_OFF; 2131 cmd.resp_type = MMC_RSP_R1; 2132 cmd.cmdarg = 1; 2133 err = mmc_send_cmd(mmc, &cmd, NULL); 2134 if (err) 2135 return err; 2136 } 2137 #endif 2138 2139 /* Put the Card in Identify Mode */ 2140 cmd.cmdidx = mmc_host_is_spi(mmc) ? MMC_CMD_SEND_CID : 2141 MMC_CMD_ALL_SEND_CID; /* cmd not supported in spi */ 2142 cmd.resp_type = MMC_RSP_R2; 2143 cmd.cmdarg = 0; 2144 2145 err = mmc_send_cmd(mmc, &cmd, NULL); 2146 2147 #ifdef CONFIG_MMC_QUIRKS 2148 if (err && (mmc->quirks & MMC_QUIRK_RETRY_SEND_CID)) { 2149 int retries = 4; 2150 /* 2151 * It has been seen that SEND_CID may fail on the first 2152 * attempt, let's try a few more time 2153 */ 2154 do { 2155 err = mmc_send_cmd(mmc, &cmd, NULL); 2156 if (!err) 2157 break; 2158 } while (retries--); 2159 } 2160 #endif 2161 2162 if (err) 2163 return err; 2164 2165 memcpy(mmc->cid, cmd.response, 16); 2166 2167 /* 2168 * For MMC cards, set the Relative Address. 2169 * For SD cards, get the Relatvie Address. 2170 * This also puts the cards into Standby State 2171 */ 2172 if (!mmc_host_is_spi(mmc)) { /* cmd not supported in spi */ 2173 cmd.cmdidx = SD_CMD_SEND_RELATIVE_ADDR; 2174 cmd.cmdarg = mmc->rca << 16; 2175 cmd.resp_type = MMC_RSP_R6; 2176 2177 err = mmc_send_cmd(mmc, &cmd, NULL); 2178 2179 if (err) 2180 return err; 2181 2182 if (IS_SD(mmc)) 2183 mmc->rca = (cmd.response[0] >> 16) & 0xffff; 2184 } 2185 2186 /* Get the Card-Specific Data */ 2187 cmd.cmdidx = MMC_CMD_SEND_CSD; 2188 cmd.resp_type = MMC_RSP_R2; 2189 cmd.cmdarg = mmc->rca << 16; 2190 2191 err = mmc_send_cmd(mmc, &cmd, NULL); 2192 2193 if (err) 2194 return err; 2195 2196 mmc->csd[0] = cmd.response[0]; 2197 mmc->csd[1] = cmd.response[1]; 2198 mmc->csd[2] = cmd.response[2]; 2199 mmc->csd[3] = cmd.response[3]; 2200 2201 if (mmc->version == MMC_VERSION_UNKNOWN) { 2202 int version = (cmd.response[0] >> 26) & 0xf; 2203 2204 switch (version) { 2205 case 0: 2206 mmc->version = MMC_VERSION_1_2; 2207 break; 2208 case 1: 2209 mmc->version = MMC_VERSION_1_4; 2210 break; 2211 case 2: 2212 mmc->version = MMC_VERSION_2_2; 2213 break; 2214 case 3: 2215 mmc->version = MMC_VERSION_3; 2216 break; 2217 case 4: 2218 mmc->version = MMC_VERSION_4; 2219 break; 2220 default: 2221 mmc->version = MMC_VERSION_1_2; 2222 break; 2223 } 2224 } 2225 2226 /* divide frequency by 10, since the mults are 10x bigger */ 2227 freq = fbase[(cmd.response[0] & 0x7)]; 2228 mult = multipliers[((cmd.response[0] >> 3) & 0xf)]; 2229 2230 mmc->legacy_speed = freq * mult; 2231 mmc_select_mode(mmc, MMC_LEGACY); 2232 2233 mmc->dsr_imp = ((cmd.response[1] >> 12) & 0x1); 2234 mmc->read_bl_len = 1 << ((cmd.response[1] >> 16) & 0xf); 2235 #if CONFIG_IS_ENABLED(MMC_WRITE) 2236 2237 if (IS_SD(mmc)) 2238 mmc->write_bl_len = mmc->read_bl_len; 2239 else 2240 mmc->write_bl_len = 1 << ((cmd.response[3] >> 22) & 0xf); 2241 #endif 2242 2243 if (mmc->high_capacity) { 2244 csize = (mmc->csd[1] & 0x3f) << 16 2245 | (mmc->csd[2] & 0xffff0000) >> 16; 2246 cmult = 8; 2247 } else { 2248 csize = (mmc->csd[1] & 0x3ff) << 2 2249 | (mmc->csd[2] & 0xc0000000) >> 30; 2250 cmult = (mmc->csd[2] & 0x00038000) >> 15; 2251 } 2252 2253 mmc->capacity_user = (csize + 1) << (cmult + 2); 2254 mmc->capacity_user *= mmc->read_bl_len; 2255 mmc->capacity_boot = 0; 2256 mmc->capacity_rpmb = 0; 2257 for (i = 0; i < 4; i++) 2258 mmc->capacity_gp[i] = 0; 2259 2260 if (mmc->read_bl_len > MMC_MAX_BLOCK_LEN) 2261 mmc->read_bl_len = MMC_MAX_BLOCK_LEN; 2262 2263 #if CONFIG_IS_ENABLED(MMC_WRITE) 2264 if (mmc->write_bl_len > MMC_MAX_BLOCK_LEN) 2265 mmc->write_bl_len = MMC_MAX_BLOCK_LEN; 2266 #endif 2267 2268 if ((mmc->dsr_imp) && (0xffffffff != mmc->dsr)) { 2269 cmd.cmdidx = MMC_CMD_SET_DSR; 2270 cmd.cmdarg = (mmc->dsr & 0xffff) << 16; 2271 cmd.resp_type = MMC_RSP_NONE; 2272 if (mmc_send_cmd(mmc, &cmd, NULL)) 2273 pr_warn("MMC: SET_DSR failed\n"); 2274 } 2275 2276 /* Select the card, and put it into Transfer Mode */ 2277 if (!mmc_host_is_spi(mmc)) { /* cmd not supported in spi */ 2278 cmd.cmdidx = MMC_CMD_SELECT_CARD; 2279 cmd.resp_type = MMC_RSP_R1; 2280 cmd.cmdarg = mmc->rca << 16; 2281 err = mmc_send_cmd(mmc, &cmd, NULL); 2282 2283 if (err) 2284 return err; 2285 } 2286 2287 /* 2288 * For SD, its erase group is always one sector 2289 */ 2290 #if CONFIG_IS_ENABLED(MMC_WRITE) 2291 mmc->erase_grp_size = 1; 2292 #endif 2293 mmc->part_config = MMCPART_NOAVAILABLE; 2294 2295 err = mmc_startup_v4(mmc); 2296 if (err) 2297 return err; 2298 2299 err = mmc_set_capacity(mmc, mmc_get_blk_desc(mmc)->hwpart); 2300 if (err) 2301 return err; 2302 2303 if (IS_SD(mmc)) { 2304 err = sd_get_capabilities(mmc); 2305 if (err) 2306 return err; 2307 err = sd_select_mode_and_width(mmc, mmc->card_caps); 2308 } else { 2309 err = mmc_get_capabilities(mmc); 2310 if (err) 2311 return err; 2312 mmc_select_mode_and_width(mmc, mmc->card_caps); 2313 } 2314 2315 if (err) 2316 return err; 2317 2318 mmc->best_mode = mmc->selected_mode; 2319 2320 /* Fix the block length for DDR mode */ 2321 if (mmc->ddr_mode) { 2322 mmc->read_bl_len = MMC_MAX_BLOCK_LEN; 2323 #if CONFIG_IS_ENABLED(MMC_WRITE) 2324 mmc->write_bl_len = MMC_MAX_BLOCK_LEN; 2325 #endif 2326 } 2327 2328 /* fill in device description */ 2329 bdesc = mmc_get_blk_desc(mmc); 2330 bdesc->lun = 0; 2331 bdesc->hwpart = 0; 2332 bdesc->type = 0; 2333 bdesc->blksz = mmc->read_bl_len; 2334 bdesc->log2blksz = LOG2(bdesc->blksz); 2335 bdesc->lba = lldiv(mmc->capacity, mmc->read_bl_len); 2336 #if !defined(CONFIG_SPL_BUILD) || \ 2337 (defined(CONFIG_SPL_LIBCOMMON_SUPPORT) && \ 2338 !defined(CONFIG_USE_TINY_PRINTF)) 2339 sprintf(bdesc->vendor, "Man %06x Snr %04x%04x", 2340 mmc->cid[0] >> 24, (mmc->cid[2] & 0xffff), 2341 (mmc->cid[3] >> 16) & 0xffff); 2342 sprintf(bdesc->product, "%c%c%c%c%c%c", mmc->cid[0] & 0xff, 2343 (mmc->cid[1] >> 24), (mmc->cid[1] >> 16) & 0xff, 2344 (mmc->cid[1] >> 8) & 0xff, mmc->cid[1] & 0xff, 2345 (mmc->cid[2] >> 24) & 0xff); 2346 sprintf(bdesc->revision, "%d.%d", (mmc->cid[2] >> 20) & 0xf, 2347 (mmc->cid[2] >> 16) & 0xf); 2348 #else 2349 bdesc->vendor[0] = 0; 2350 bdesc->product[0] = 0; 2351 bdesc->revision[0] = 0; 2352 #endif 2353 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBDISK_SUPPORT) 2354 part_init(bdesc); 2355 #endif 2356 2357 return 0; 2358 } 2359 2360 static int mmc_send_if_cond(struct mmc *mmc) 2361 { 2362 struct mmc_cmd cmd; 2363 int err; 2364 2365 cmd.cmdidx = SD_CMD_SEND_IF_COND; 2366 /* We set the bit if the host supports voltages between 2.7 and 3.6 V */ 2367 cmd.cmdarg = ((mmc->cfg->voltages & 0xff8000) != 0) << 8 | 0xaa; 2368 cmd.resp_type = MMC_RSP_R7; 2369 2370 err = mmc_send_cmd(mmc, &cmd, NULL); 2371 2372 if (err) 2373 return err; 2374 2375 if ((cmd.response[0] & 0xff) != 0xaa) 2376 return -EOPNOTSUPP; 2377 else 2378 mmc->version = SD_VERSION_2; 2379 2380 return 0; 2381 } 2382 2383 #if !CONFIG_IS_ENABLED(DM_MMC) 2384 /* board-specific MMC power initializations. */ 2385 __weak void board_mmc_power_init(void) 2386 { 2387 } 2388 #endif 2389 2390 static int mmc_power_init(struct mmc *mmc) 2391 { 2392 #if CONFIG_IS_ENABLED(DM_MMC) 2393 #if CONFIG_IS_ENABLED(DM_REGULATOR) 2394 int ret; 2395 2396 ret = device_get_supply_regulator(mmc->dev, "vmmc-supply", 2397 &mmc->vmmc_supply); 2398 if (ret) 2399 debug("%s: No vmmc supply\n", mmc->dev->name); 2400 2401 ret = device_get_supply_regulator(mmc->dev, "vqmmc-supply", 2402 &mmc->vqmmc_supply); 2403 if (ret) 2404 debug("%s: No vqmmc supply\n", mmc->dev->name); 2405 #endif 2406 #else /* !CONFIG_DM_MMC */ 2407 /* 2408 * Driver model should use a regulator, as above, rather than calling 2409 * out to board code. 2410 */ 2411 board_mmc_power_init(); 2412 #endif 2413 return 0; 2414 } 2415 2416 /* 2417 * put the host in the initial state: 2418 * - turn on Vdd (card power supply) 2419 * - configure the bus width and clock to minimal values 2420 */ 2421 static void mmc_set_initial_state(struct mmc *mmc) 2422 { 2423 int err; 2424 2425 /* First try to set 3.3V. If it fails set to 1.8V */ 2426 err = mmc_set_signal_voltage(mmc, MMC_SIGNAL_VOLTAGE_330); 2427 if (err != 0) 2428 err = mmc_set_signal_voltage(mmc, MMC_SIGNAL_VOLTAGE_180); 2429 if (err != 0) 2430 pr_warn("mmc: failed to set signal voltage\n"); 2431 2432 mmc_select_mode(mmc, MMC_LEGACY); 2433 mmc_set_bus_width(mmc, 1); 2434 mmc_set_clock(mmc, 0, false); 2435 } 2436 2437 static int mmc_power_on(struct mmc *mmc) 2438 { 2439 #if CONFIG_IS_ENABLED(DM_MMC) && CONFIG_IS_ENABLED(DM_REGULATOR) 2440 if (mmc->vmmc_supply) { 2441 int ret = regulator_set_enable(mmc->vmmc_supply, true); 2442 2443 if (ret) { 2444 puts("Error enabling VMMC supply\n"); 2445 return ret; 2446 } 2447 } 2448 #endif 2449 return 0; 2450 } 2451 2452 static int mmc_power_off(struct mmc *mmc) 2453 { 2454 mmc_set_clock(mmc, 0, true); 2455 #if CONFIG_IS_ENABLED(DM_MMC) && CONFIG_IS_ENABLED(DM_REGULATOR) 2456 if (mmc->vmmc_supply) { 2457 int ret = regulator_set_enable(mmc->vmmc_supply, false); 2458 2459 if (ret) { 2460 debug("Error disabling VMMC supply\n"); 2461 return ret; 2462 } 2463 } 2464 #endif 2465 return 0; 2466 } 2467 2468 static int mmc_power_cycle(struct mmc *mmc) 2469 { 2470 int ret; 2471 2472 ret = mmc_power_off(mmc); 2473 if (ret) 2474 return ret; 2475 /* 2476 * SD spec recommends at least 1ms of delay. Let's wait for 2ms 2477 * to be on the safer side. 2478 */ 2479 udelay(2000); 2480 return mmc_power_on(mmc); 2481 } 2482 2483 int mmc_start_init(struct mmc *mmc) 2484 { 2485 bool no_card; 2486 bool uhs_en = supports_uhs(mmc->cfg->host_caps); 2487 int err; 2488 2489 /* 2490 * all hosts are capable of 1 bit bus-width and able to use the legacy 2491 * timings. 2492 */ 2493 mmc->host_caps = mmc->cfg->host_caps | MMC_CAP(SD_LEGACY) | 2494 MMC_CAP(MMC_LEGACY) | MMC_MODE_1BIT; 2495 2496 #if !defined(CONFIG_MMC_BROKEN_CD) 2497 /* we pretend there's no card when init is NULL */ 2498 no_card = mmc_getcd(mmc) == 0; 2499 #else 2500 no_card = 0; 2501 #endif 2502 #if !CONFIG_IS_ENABLED(DM_MMC) 2503 no_card = no_card || (mmc->cfg->ops->init == NULL); 2504 #endif 2505 if (no_card) { 2506 mmc->has_init = 0; 2507 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT) 2508 printf("MMC: no card present\n"); 2509 #endif 2510 return -ENOMEDIUM; 2511 } 2512 2513 if (mmc->has_init) 2514 return 0; 2515 2516 #ifdef CONFIG_FSL_ESDHC_ADAPTER_IDENT 2517 mmc_adapter_card_type_ident(); 2518 #endif 2519 err = mmc_power_init(mmc); 2520 if (err) 2521 return err; 2522 2523 #ifdef CONFIG_MMC_QUIRKS 2524 mmc->quirks = MMC_QUIRK_RETRY_SET_BLOCKLEN | 2525 MMC_QUIRK_RETRY_SEND_CID; 2526 #endif 2527 2528 err = mmc_power_cycle(mmc); 2529 if (err) { 2530 /* 2531 * if power cycling is not supported, we should not try 2532 * to use the UHS modes, because we wouldn't be able to 2533 * recover from an error during the UHS initialization. 2534 */ 2535 debug("Unable to do a full power cycle. Disabling the UHS modes for safety\n"); 2536 uhs_en = false; 2537 mmc->host_caps &= ~UHS_CAPS; 2538 err = mmc_power_on(mmc); 2539 } 2540 if (err) 2541 return err; 2542 2543 #if CONFIG_IS_ENABLED(DM_MMC) 2544 /* The device has already been probed ready for use */ 2545 #else 2546 /* made sure it's not NULL earlier */ 2547 err = mmc->cfg->ops->init(mmc); 2548 if (err) 2549 return err; 2550 #endif 2551 mmc->ddr_mode = 0; 2552 2553 retry: 2554 mmc_set_initial_state(mmc); 2555 mmc_send_init_stream(mmc); 2556 2557 /* Reset the Card */ 2558 err = mmc_go_idle(mmc); 2559 2560 if (err) 2561 return err; 2562 2563 /* The internal partition reset to user partition(0) at every CMD0*/ 2564 mmc_get_blk_desc(mmc)->hwpart = 0; 2565 2566 /* Test for SD version 2 */ 2567 err = mmc_send_if_cond(mmc); 2568 2569 /* Now try to get the SD card's operating condition */ 2570 err = sd_send_op_cond(mmc, uhs_en); 2571 if (err && uhs_en) { 2572 uhs_en = false; 2573 mmc_power_cycle(mmc); 2574 goto retry; 2575 } 2576 2577 /* If the command timed out, we check for an MMC card */ 2578 if (err == -ETIMEDOUT) { 2579 err = mmc_send_op_cond(mmc); 2580 2581 if (err) { 2582 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT) 2583 pr_err("Card did not respond to voltage select!\n"); 2584 #endif 2585 return -EOPNOTSUPP; 2586 } 2587 } 2588 2589 if (!err) 2590 mmc->init_in_progress = 1; 2591 2592 return err; 2593 } 2594 2595 static int mmc_complete_init(struct mmc *mmc) 2596 { 2597 int err = 0; 2598 2599 mmc->init_in_progress = 0; 2600 if (mmc->op_cond_pending) 2601 err = mmc_complete_op_cond(mmc); 2602 2603 if (!err) 2604 err = mmc_startup(mmc); 2605 if (err) 2606 mmc->has_init = 0; 2607 else 2608 mmc->has_init = 1; 2609 return err; 2610 } 2611 2612 int mmc_init(struct mmc *mmc) 2613 { 2614 int err = 0; 2615 __maybe_unused unsigned start; 2616 #if CONFIG_IS_ENABLED(DM_MMC) 2617 struct mmc_uclass_priv *upriv = dev_get_uclass_priv(mmc->dev); 2618 2619 upriv->mmc = mmc; 2620 #endif 2621 if (mmc->has_init) 2622 return 0; 2623 2624 start = get_timer(0); 2625 2626 if (!mmc->init_in_progress) 2627 err = mmc_start_init(mmc); 2628 2629 if (!err) 2630 err = mmc_complete_init(mmc); 2631 if (err) 2632 printf("%s: %d, time %lu\n", __func__, err, get_timer(start)); 2633 2634 return err; 2635 } 2636 2637 int mmc_set_dsr(struct mmc *mmc, u16 val) 2638 { 2639 mmc->dsr = val; 2640 return 0; 2641 } 2642 2643 /* CPU-specific MMC initializations */ 2644 __weak int cpu_mmc_init(bd_t *bis) 2645 { 2646 return -1; 2647 } 2648 2649 /* board-specific MMC initializations. */ 2650 __weak int board_mmc_init(bd_t *bis) 2651 { 2652 return -1; 2653 } 2654 2655 void mmc_set_preinit(struct mmc *mmc, int preinit) 2656 { 2657 mmc->preinit = preinit; 2658 } 2659 2660 #if CONFIG_IS_ENABLED(DM_MMC) && defined(CONFIG_SPL_BUILD) 2661 static int mmc_probe(bd_t *bis) 2662 { 2663 return 0; 2664 } 2665 #elif CONFIG_IS_ENABLED(DM_MMC) 2666 static int mmc_probe(bd_t *bis) 2667 { 2668 int ret, i; 2669 struct uclass *uc; 2670 struct udevice *dev; 2671 2672 ret = uclass_get(UCLASS_MMC, &uc); 2673 if (ret) 2674 return ret; 2675 2676 /* 2677 * Try to add them in sequence order. Really with driver model we 2678 * should allow holes, but the current MMC list does not allow that. 2679 * So if we request 0, 1, 3 we will get 0, 1, 2. 2680 */ 2681 for (i = 0; ; i++) { 2682 ret = uclass_get_device_by_seq(UCLASS_MMC, i, &dev); 2683 if (ret == -ENODEV) 2684 break; 2685 } 2686 uclass_foreach_dev(dev, uc) { 2687 ret = device_probe(dev); 2688 if (ret) 2689 pr_err("%s - probe failed: %d\n", dev->name, ret); 2690 } 2691 2692 return 0; 2693 } 2694 #else 2695 static int mmc_probe(bd_t *bis) 2696 { 2697 if (board_mmc_init(bis) < 0) 2698 cpu_mmc_init(bis); 2699 2700 return 0; 2701 } 2702 #endif 2703 2704 int mmc_initialize(bd_t *bis) 2705 { 2706 static int initialized = 0; 2707 int ret; 2708 if (initialized) /* Avoid initializing mmc multiple times */ 2709 return 0; 2710 initialized = 1; 2711 2712 #if !CONFIG_IS_ENABLED(BLK) 2713 #if !CONFIG_IS_ENABLED(MMC_TINY) 2714 mmc_list_init(); 2715 #endif 2716 #endif 2717 ret = mmc_probe(bis); 2718 if (ret) 2719 return ret; 2720 2721 #ifndef CONFIG_SPL_BUILD 2722 print_mmc_devices(','); 2723 #endif 2724 2725 mmc_do_preinit(); 2726 return 0; 2727 } 2728 2729 #ifdef CONFIG_CMD_BKOPS_ENABLE 2730 int mmc_set_bkops_enable(struct mmc *mmc) 2731 { 2732 int err; 2733 ALLOC_CACHE_ALIGN_BUFFER(u8, ext_csd, MMC_MAX_BLOCK_LEN); 2734 2735 err = mmc_send_ext_csd(mmc, ext_csd); 2736 if (err) { 2737 puts("Could not get ext_csd register values\n"); 2738 return err; 2739 } 2740 2741 if (!(ext_csd[EXT_CSD_BKOPS_SUPPORT] & 0x1)) { 2742 puts("Background operations not supported on device\n"); 2743 return -EMEDIUMTYPE; 2744 } 2745 2746 if (ext_csd[EXT_CSD_BKOPS_EN] & 0x1) { 2747 puts("Background operations already enabled\n"); 2748 return 0; 2749 } 2750 2751 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_BKOPS_EN, 1); 2752 if (err) { 2753 puts("Failed to enable manual background operations\n"); 2754 return err; 2755 } 2756 2757 puts("Enabled manual background operations\n"); 2758 2759 return 0; 2760 } 2761 #endif 2762