Lines Matching +full:non +full:- +full:urgent

1 // SPDX-License-Identifier: GPL-2.0-or-later
5 * Copyright 2006-2007 Pierre Ossman
75 if (!mmc_host_is_spi(card->host)) in __mmc_send_status()
76 cmd.arg = card->rca << 16; in __mmc_send_status()
79 err = mmc_wait_for_cmd(card->host, &cmd, retries); in __mmc_send_status()
106 cmd.arg = card->rca << 16; in _mmc_select_card()
119 return _mmc_select_card(card->host, card); in mmc_select_card()
141 cmd.arg = (host->dsr << 16) | 0xffff; in mmc_set_dsr()
167 * Non-SPI hosts need to prevent chipselect going active during in mmc_go_idle()
172 * rules that must accommodate non-MMC slaves which this layer in mmc_go_idle()
187 host->use_spi_crc = 0; in mmc_go_idle()
195 struct mmc_host *host = data->host; in __mmc_send_op_cond_cb()
196 struct mmc_command *cmd = data->cmd; in __mmc_send_op_cond_cb()
197 u32 ocr = data->ocr; in __mmc_send_op_cond_cb()
205 if (!(cmd->resp[0] & R1_SPI_IDLE)) { in __mmc_send_op_cond_cb()
210 if (cmd->resp[0] & MMC_CARD_BUSY) { in __mmc_send_op_cond_cb()
226 cmd->arg = cmd->resp[0] | BIT(30); in __mmc_send_op_cond_cb()
262 cmd.arg = card->rca << 16; in mmc_set_relative_addr()
265 return mmc_wait_for_cmd(card->host, &cmd, MMC_CMD_RETRIES); in mmc_set_relative_addr()
288 * NOTE: void *buf, caller for the buf is required to use DMA-capable
289 * buffer or on-stack buffer (with some overhead in callee).
347 return -ENOMEM; in mmc_spi_send_cxd()
363 if (mmc_host_is_spi(card->host)) in mmc_send_csd()
364 return mmc_spi_send_cxd(card->host, csd, MMC_SEND_CSD); in mmc_send_csd()
366 return mmc_send_cxd_native(card->host, card->rca << 16, csd, in mmc_send_csd()
384 return -EINVAL; in mmc_get_ext_csd()
387 return -EOPNOTSUPP; in mmc_get_ext_csd()
395 return -ENOMEM; in mmc_get_ext_csd()
397 err = mmc_send_adtc_data(card, card->host, MMC_SEND_EXT_CSD, 0, ext_csd, in mmc_get_ext_csd()
434 host->use_spi_crc = use_crc; in mmc_spi_set_crc()
442 return -EBADMSG; in mmc_switch_status_error()
448 return -EBADMSG; in mmc_switch_status_error()
453 /* Caller must hold re-tuning */
460 if (!crc_err_fatal && err == -EILSEQ) in mmc_switch_status()
465 return mmc_switch_status_error(card->host, status); in mmc_switch_status()
471 struct mmc_host *host = data->card->host; in mmc_busy_cb()
475 if (data->busy_cmd != MMC_BUSY_IO && host->ops->card_busy) { in mmc_busy_cb()
476 *busy = host->ops->card_busy(host); in mmc_busy_cb()
480 err = mmc_send_status(data->card, &status); in mmc_busy_cb()
481 if (data->retry_crc_err && err == -EILSEQ) { in mmc_busy_cb()
488 switch (data->busy_cmd) { in mmc_busy_cb()
493 err = R1_STATUS(status) ? -EIO : 0; in mmc_busy_cb()
500 err = -EINVAL; in mmc_busy_cb()
537 return -ETIMEDOUT; in __mmc_poll_for_busy()
555 struct mmc_host *host = card->host; in mmc_poll_for_busy()
576 if (!(host->caps & MMC_CAP_NEED_RSP_BUSY) && host->max_busy_timeout && in mmc_prepare_busy_cmd()
577 (timeout_ms > host->max_busy_timeout)) { in mmc_prepare_busy_cmd()
578 cmd->flags = MMC_CMD_AC | MMC_RSP_SPI_R1 | MMC_RSP_R1; in mmc_prepare_busy_cmd()
582 cmd->flags = MMC_CMD_AC | MMC_RSP_SPI_R1B | MMC_RSP_R1B; in mmc_prepare_busy_cmd()
583 cmd->busy_timeout = timeout_ms; in mmc_prepare_busy_cmd()
589 * __mmc_switch - modify EXT_CSD register
607 struct mmc_host *host = card->host; in __mmc_switch()
611 unsigned char old_timing = host->ios.timing; in __mmc_switch()
616 pr_warn("%s: unspecified timeout for CMD6 - use generic\n", in __mmc_switch()
618 timeout_ms = card->ext_csd.generic_cmd6_time; in __mmc_switch()
633 if (((host->caps & MMC_CAP_WAIT_WHILE_BUSY) && use_r1b_resp) || in __mmc_switch()
638 * If the host doesn't support HW polling via the ->card_busy() ops and in __mmc_switch()
642 if (!send_status && !host->ops->card_busy) { in __mmc_switch()
682 struct mmc_ios *ios = &host->ios; in mmc_send_tuning()
687 if (ios->bus_width == MMC_BUS_WIDTH_8) { in mmc_send_tuning()
690 } else if (ios->bus_width == MMC_BUS_WIDTH_4) { in mmc_send_tuning()
694 return -EINVAL; in mmc_send_tuning()
698 return -ENOMEM; in mmc_send_tuning()
737 err = -EIO; in mmc_send_tuning()
785 * routine normally provide temporary on-stack buffers ... in mmc_send_bus_test()
789 return -ENOMEM; in mmc_send_bus_test()
799 return -EINVAL; in mmc_send_bus_test()
833 err = -EIO; in mmc_send_bus_test()
858 return -EINVAL; in mmc_bus_test()
864 mmc_send_bus_test(card, card->host, MMC_BUS_TEST_W, width); in mmc_bus_test()
865 return mmc_send_bus_test(card, card->host, MMC_BUS_TEST_R, width); in mmc_bus_test()
870 unsigned int busy_timeout_ms = card->ext_csd.out_of_int_time; in mmc_send_hpi_cmd()
871 struct mmc_host *host = card->host; in mmc_send_hpi_cmd()
876 cmd.opcode = card->ext_csd.hpi_cmd; in mmc_send_hpi_cmd()
877 cmd.arg = card->rca << 16 | 1; in mmc_send_hpi_cmd()
892 if (host->caps & MMC_CAP_WAIT_WHILE_BUSY && use_r1b_resp) in mmc_send_hpi_cmd()
900 * mmc_interrupt_hpi - Issue for High priority Interrupt
904 * until out-of prg-state.
911 if (!card->ext_csd.hpi_en) { in mmc_interrupt_hpi()
912 pr_info("%s: HPI enable bit unset\n", mmc_hostname(card->host)); in mmc_interrupt_hpi()
918 pr_err("%s: Get card status fail\n", mmc_hostname(card->host)); in mmc_interrupt_hpi()
937 mmc_hostname(card->host), R1_CURRENT_STATE(status)); in mmc_interrupt_hpi()
938 err = -EINVAL; in mmc_interrupt_hpi()
949 return (card && card->csd.mmca_vsn > CSD_SPEC_VER_3); in mmc_can_ext_csd()
961 card->ext_csd.raw_bkops_status = ext_csd[EXT_CSD_BKOPS_STATUS]; in mmc_read_bkops_status()
962 card->ext_csd.raw_exception_status = ext_csd[EXT_CSD_EXP_EVENTS_STATUS]; in mmc_read_bkops_status()
968 * mmc_run_bkops - Run BKOPS for supported cards
972 * enabled and in case it reports urgent BKOPS level.
978 if (!card->ext_csd.man_bkops_en) in mmc_run_bkops()
984 mmc_hostname(card->host), err); in mmc_run_bkops()
988 if (!card->ext_csd.raw_bkops_status || in mmc_run_bkops()
989 card->ext_csd.raw_bkops_status < EXT_CSD_BKOPS_LEVEL_2) in mmc_run_bkops()
992 mmc_retune_hold(card->host); in mmc_run_bkops()
995 * For urgent BKOPS status, LEVEL_2 and higher, let's execute in mmc_run_bkops()
997 * urgent levels by using an asynchronous background task, when idle. in mmc_run_bkops()
1006 if (err == -ETIMEDOUT && !mmc_interrupt_hpi(card)) in mmc_run_bkops()
1007 pr_warn("%s: BKOPS aborted\n", mmc_hostname(card->host)); in mmc_run_bkops()
1010 mmc_hostname(card->host), err); in mmc_run_bkops()
1012 mmc_retune_release(card->host); in mmc_run_bkops()
1021 if (!card->ext_csd.cmdq_support) in mmc_cmdq_switch()
1022 return -EOPNOTSUPP; in mmc_cmdq_switch()
1025 val, card->ext_csd.generic_cmd6_time); in mmc_cmdq_switch()
1027 card->ext_csd.cmdq_en = enable; in mmc_cmdq_switch()
1046 struct mmc_host *host = card->host; in mmc_sanitize()
1051 return -EOPNOTSUPP; in mmc_sanitize()
1071 if (err == -ETIMEDOUT && !mmc_interrupt_hpi(card)) in mmc_sanitize()