Lines Matching refs:card

141 	if (err && cmd->retries && !mmc_card_removed(host->card)) {  in mmc_request_done()
195 if (mmc_card_removed(host->card)) in mmc_start_request()
270 void mmc_start_bkops(struct mmc_card *card, bool from_exception) in mmc_start_bkops() argument
276 BUG_ON(!card); in mmc_start_bkops()
278 if (!card->ext_csd.man_bkops_en || mmc_card_doing_bkops(card)) in mmc_start_bkops()
281 err = mmc_read_bkops_status(card); in mmc_start_bkops()
284 mmc_hostname(card->host), err); in mmc_start_bkops()
288 if (!card->ext_csd.raw_bkops_status) in mmc_start_bkops()
291 if (card->ext_csd.raw_bkops_status < EXT_CSD_BKOPS_LEVEL_2 && in mmc_start_bkops()
295 mmc_claim_host(card->host); in mmc_start_bkops()
296 if (card->ext_csd.raw_bkops_status >= EXT_CSD_BKOPS_LEVEL_2) { in mmc_start_bkops()
304 err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL, in mmc_start_bkops()
309 mmc_hostname(card->host), err); in mmc_start_bkops()
319 mmc_card_set_doing_bkops(card); in mmc_start_bkops()
321 mmc_release_host(card->host); in mmc_start_bkops()
417 mmc_card_removed(host->card)) { in mmc_wait_for_data_req_done()
418 err = host->areq->err_check(host->card, in mmc_wait_for_data_req_done()
458 if (!mmc_interrupt_hpi(host->card)) { in mmc_wait_for_req_done()
469 mmc_card_removed(host->card)) in mmc_wait_for_req_done()
561 if (host->card && mmc_card_mmc(host->card) && in mmc_start_req()
570 mmc_start_bkops(host->card, true); in mmc_start_req()
622 int mmc_interrupt_hpi(struct mmc_card *card) in mmc_interrupt_hpi() argument
628 BUG_ON(!card); in mmc_interrupt_hpi()
630 if (!card->ext_csd.hpi_en) { in mmc_interrupt_hpi()
631 pr_info("%s: HPI enable bit unset\n", mmc_hostname(card->host)); in mmc_interrupt_hpi()
635 mmc_claim_host(card->host); in mmc_interrupt_hpi()
636 err = mmc_send_status(card, &status); in mmc_interrupt_hpi()
638 pr_err("%s: Get card status fail\n", mmc_hostname(card->host)); in mmc_interrupt_hpi()
657 mmc_hostname(card->host), R1_CURRENT_STATE(status)); in mmc_interrupt_hpi()
662 err = mmc_send_hpi_cmd(card, &status); in mmc_interrupt_hpi()
666 prg_wait = jiffies + msecs_to_jiffies(card->ext_csd.out_of_int_time); in mmc_interrupt_hpi()
668 err = mmc_send_status(card, &status); in mmc_interrupt_hpi()
677 mmc_release_host(card->host); in mmc_interrupt_hpi()
720 int mmc_stop_bkops(struct mmc_card *card) in mmc_stop_bkops() argument
724 BUG_ON(!card); in mmc_stop_bkops()
725 err = mmc_interrupt_hpi(card); in mmc_stop_bkops()
732 mmc_card_clr_doing_bkops(card); in mmc_stop_bkops()
740 int mmc_read_bkops_status(struct mmc_card *card) in mmc_read_bkops_status() argument
745 mmc_claim_host(card->host); in mmc_read_bkops_status()
746 err = mmc_get_ext_csd(card, &ext_csd); in mmc_read_bkops_status()
747 mmc_release_host(card->host); in mmc_read_bkops_status()
751 card->ext_csd.raw_bkops_status = ext_csd[EXT_CSD_BKOPS_STATUS]; in mmc_read_bkops_status()
752 card->ext_csd.raw_exception_status = ext_csd[EXT_CSD_EXP_EVENTS_STATUS]; in mmc_read_bkops_status()
766 void mmc_set_data_timeout(struct mmc_data *data, const struct mmc_card *card) in mmc_set_data_timeout() argument
773 if (mmc_card_sdio(card)) { in mmc_set_data_timeout()
782 mult = mmc_card_sd(card) ? 100 : 10; in mmc_set_data_timeout()
789 mult <<= card->csd.r2w_factor; in mmc_set_data_timeout()
791 data->timeout_ns = card->csd.tacc_ns * mult; in mmc_set_data_timeout()
792 data->timeout_clks = card->csd.tacc_clks * mult; in mmc_set_data_timeout()
797 if (mmc_card_sd(card)) { in mmc_set_data_timeout()
801 if (mmc_host_clk_rate(card->host)) in mmc_set_data_timeout()
803 (mmc_host_clk_rate(card->host) / 1000); in mmc_set_data_timeout()
821 if (timeout_us > limit_us || mmc_card_blockaddr(card)) { in mmc_set_data_timeout()
837 if (mmc_card_long_read_time(card) && data->flags & MMC_DATA_READ) { in mmc_set_data_timeout()
848 if (mmc_host_is_spi(card->host)) { in mmc_set_data_timeout()
874 unsigned int mmc_align_data_size(struct mmc_card *card, unsigned int sz) in mmc_align_data_size() argument
968 void mmc_get_card(struct mmc_card *card) in mmc_get_card() argument
970 pm_runtime_get_sync(&card->dev); in mmc_get_card()
971 mmc_claim_host(card->host); in mmc_get_card()
979 void mmc_put_card(struct mmc_card *card) in mmc_put_card() argument
981 mmc_release_host(card->host); in mmc_put_card()
982 pm_runtime_mark_last_busy(&card->dev); in mmc_put_card()
983 pm_runtime_put_autosuspend(&card->dev); in mmc_put_card()
1094 int mmc_execute_tuning(struct mmc_card *card) in mmc_execute_tuning() argument
1096 struct mmc_host *host = card->host; in mmc_execute_tuning()
1103 if (mmc_card_mmc(card)) in mmc_execute_tuning()
1818 void mmc_init_erase(struct mmc_card *card) in mmc_init_erase() argument
1822 if (is_power_of_2(card->erase_size)) in mmc_init_erase()
1823 card->erase_shift = ffs(card->erase_size) - 1; in mmc_init_erase()
1825 card->erase_shift = 0; in mmc_init_erase()
1842 if (mmc_card_sd(card) && card->ssr.au) { in mmc_init_erase()
1843 card->pref_erase = card->ssr.au; in mmc_init_erase()
1844 card->erase_shift = ffs(card->ssr.au) - 1; in mmc_init_erase()
1845 } else if (card->ext_csd.hc_erase_size) { in mmc_init_erase()
1846 card->pref_erase = card->ext_csd.hc_erase_size; in mmc_init_erase()
1847 } else if (card->erase_size) { in mmc_init_erase()
1848 sz = (card->csd.capacity << (card->csd.read_blkbits - 9)) >> 11; in mmc_init_erase()
1850 card->pref_erase = 512 * 1024 / 512; in mmc_init_erase()
1852 card->pref_erase = 1024 * 1024 / 512; in mmc_init_erase()
1854 card->pref_erase = 2 * 1024 * 1024 / 512; in mmc_init_erase()
1856 card->pref_erase = 4 * 1024 * 1024 / 512; in mmc_init_erase()
1857 if (card->pref_erase < card->erase_size) in mmc_init_erase()
1858 card->pref_erase = card->erase_size; in mmc_init_erase()
1860 sz = card->pref_erase % card->erase_size; in mmc_init_erase()
1862 card->pref_erase += card->erase_size - sz; in mmc_init_erase()
1865 card->pref_erase = 0; in mmc_init_erase()
1868 static unsigned int mmc_mmc_erase_timeout(struct mmc_card *card, in mmc_mmc_erase_timeout() argument
1874 (arg == MMC_TRIM_ARG && card->ext_csd.rev >= 6)) { in mmc_mmc_erase_timeout()
1875 erase_timeout = card->ext_csd.trim_timeout; in mmc_mmc_erase_timeout()
1876 } else if (card->ext_csd.erase_group_def & 1) { in mmc_mmc_erase_timeout()
1879 erase_timeout = card->ext_csd.trim_timeout; in mmc_mmc_erase_timeout()
1881 erase_timeout = card->ext_csd.hc_erase_timeout; in mmc_mmc_erase_timeout()
1884 unsigned int mult = (10 << card->csd.r2w_factor); in mmc_mmc_erase_timeout()
1885 unsigned int timeout_clks = card->csd.tacc_clks * mult; in mmc_mmc_erase_timeout()
1889 if (card->csd.tacc_ns < 1000000) in mmc_mmc_erase_timeout()
1890 timeout_us = (card->csd.tacc_ns * mult) / 1000; in mmc_mmc_erase_timeout()
1892 timeout_us = (card->csd.tacc_ns / 1000) * mult; in mmc_mmc_erase_timeout()
1900 (mmc_host_clk_rate(card->host) / 1000); in mmc_mmc_erase_timeout()
1915 erase_timeout *= card->ext_csd.sec_erase_mult; in mmc_mmc_erase_timeout()
1917 erase_timeout *= card->ext_csd.sec_trim_mult; in mmc_mmc_erase_timeout()
1926 if (mmc_host_is_spi(card->host) && erase_timeout < 1000) in mmc_mmc_erase_timeout()
1932 static unsigned int mmc_sd_erase_timeout(struct mmc_card *card, in mmc_sd_erase_timeout() argument
1938 if (card->ssr.erase_timeout) { in mmc_sd_erase_timeout()
1940 erase_timeout = card->ssr.erase_timeout * qty + in mmc_sd_erase_timeout()
1941 card->ssr.erase_offset; in mmc_sd_erase_timeout()
1957 static unsigned int mmc_erase_timeout(struct mmc_card *card, in mmc_erase_timeout() argument
1961 if (mmc_card_sd(card)) in mmc_erase_timeout()
1962 return mmc_sd_erase_timeout(card, arg, qty); in mmc_erase_timeout()
1964 return mmc_mmc_erase_timeout(card, arg, qty); in mmc_erase_timeout()
1967 static int mmc_do_erase(struct mmc_card *card, unsigned int from, in mmc_do_erase() argument
1991 if (card->erase_shift) in mmc_do_erase()
1992 qty += ((to >> card->erase_shift) - in mmc_do_erase()
1993 (from >> card->erase_shift)) + 1; in mmc_do_erase()
1994 else if (mmc_card_sd(card)) in mmc_do_erase()
1997 qty += ((to / card->erase_size) - in mmc_do_erase()
1998 (from / card->erase_size)) + 1; in mmc_do_erase()
2000 if (!mmc_card_blockaddr(card)) { in mmc_do_erase()
2005 if (mmc_card_sd(card)) in mmc_do_erase()
2011 err = mmc_wait_for_cmd(card->host, &cmd, 0); in mmc_do_erase()
2020 if (mmc_card_sd(card)) in mmc_do_erase()
2026 err = mmc_wait_for_cmd(card->host, &cmd, 0); in mmc_do_erase()
2038 cmd.busy_timeout = mmc_erase_timeout(card, arg, qty); in mmc_do_erase()
2039 err = mmc_wait_for_cmd(card->host, &cmd, 0); in mmc_do_erase()
2047 if (mmc_host_is_spi(card->host)) in mmc_do_erase()
2054 cmd.arg = card->rca << 16; in mmc_do_erase()
2057 err = mmc_wait_for_cmd(card->host, &cmd, 0); in mmc_do_erase()
2070 mmc_hostname(card->host), __func__); in mmc_do_erase()
2090 int mmc_erase(struct mmc_card *card, unsigned int from, unsigned int nr, in mmc_erase() argument
2095 if (!(card->host->caps & MMC_CAP_ERASE) || in mmc_erase()
2096 !(card->csd.cmdclass & CCC_ERASE)) in mmc_erase()
2099 if (!card->erase_size) in mmc_erase()
2102 if (mmc_card_sd(card) && arg != MMC_ERASE_ARG) in mmc_erase()
2106 !(card->ext_csd.sec_feature_support & EXT_CSD_SEC_ER_EN)) in mmc_erase()
2110 !(card->ext_csd.sec_feature_support & EXT_CSD_SEC_GB_CL_EN)) in mmc_erase()
2114 if (from % card->erase_size || nr % card->erase_size) in mmc_erase()
2119 rem = from % card->erase_size; in mmc_erase()
2121 rem = card->erase_size - rem; in mmc_erase()
2128 rem = nr % card->erase_size; in mmc_erase()
2144 return mmc_do_erase(card, from, to, arg); in mmc_erase()
2148 int mmc_can_erase(struct mmc_card *card) in mmc_can_erase() argument
2150 if ((card->host->caps & MMC_CAP_ERASE) && in mmc_can_erase()
2151 (card->csd.cmdclass & CCC_ERASE) && card->erase_size) in mmc_can_erase()
2157 int mmc_can_trim(struct mmc_card *card) in mmc_can_trim() argument
2159 if (card->ext_csd.sec_feature_support & EXT_CSD_SEC_GB_CL_EN) in mmc_can_trim()
2165 int mmc_can_discard(struct mmc_card *card) in mmc_can_discard() argument
2171 if (card->ext_csd.feature_support & MMC_DISCARD_FEATURE) in mmc_can_discard()
2177 int mmc_can_sanitize(struct mmc_card *card) in mmc_can_sanitize() argument
2179 if (!mmc_can_trim(card) && !mmc_can_erase(card)) in mmc_can_sanitize()
2181 if (card->ext_csd.sec_feature_support & EXT_CSD_SEC_SANITIZE) in mmc_can_sanitize()
2187 int mmc_can_secure_erase_trim(struct mmc_card *card) in mmc_can_secure_erase_trim() argument
2189 if ((card->ext_csd.sec_feature_support & EXT_CSD_SEC_ER_EN) && in mmc_can_secure_erase_trim()
2190 !(card->quirks & MMC_QUIRK_SEC_ERASE_TRIM_BROKEN)) in mmc_can_secure_erase_trim()
2196 int mmc_erase_group_aligned(struct mmc_card *card, unsigned int from, in mmc_erase_group_aligned() argument
2199 if (!card->erase_size) in mmc_erase_group_aligned()
2201 if (from % card->erase_size || nr % card->erase_size) in mmc_erase_group_aligned()
2207 static unsigned int mmc_do_calc_max_discard(struct mmc_card *card, in mmc_do_calc_max_discard() argument
2210 struct mmc_host *host = card->host; in mmc_do_calc_max_discard()
2214 if (card->erase_shift) in mmc_do_calc_max_discard()
2215 max_qty = UINT_MAX >> card->erase_shift; in mmc_do_calc_max_discard()
2216 else if (mmc_card_sd(card)) in mmc_do_calc_max_discard()
2219 max_qty = UINT_MAX / card->erase_size; in mmc_do_calc_max_discard()
2225 timeout = mmc_erase_timeout(card, arg, qty + x); in mmc_do_calc_max_discard()
2243 if (card->erase_shift) in mmc_do_calc_max_discard()
2244 max_discard = --qty << card->erase_shift; in mmc_do_calc_max_discard()
2245 else if (mmc_card_sd(card)) in mmc_do_calc_max_discard()
2248 max_discard = --qty * card->erase_size; in mmc_do_calc_max_discard()
2253 unsigned int mmc_calc_max_discard(struct mmc_card *card) in mmc_calc_max_discard() argument
2255 struct mmc_host *host = card->host; in mmc_calc_max_discard()
2266 if (mmc_card_mmc(card) && !(card->ext_csd.erase_group_def & 1)) in mmc_calc_max_discard()
2267 return card->pref_erase; in mmc_calc_max_discard()
2269 max_discard = mmc_do_calc_max_discard(card, MMC_ERASE_ARG); in mmc_calc_max_discard()
2270 if (mmc_can_trim(card)) { in mmc_calc_max_discard()
2271 max_trim = mmc_do_calc_max_discard(card, MMC_TRIM_ARG); in mmc_calc_max_discard()
2274 } else if (max_discard < card->erase_size) { in mmc_calc_max_discard()
2283 int mmc_set_blocklen(struct mmc_card *card, unsigned int blocklen) in mmc_set_blocklen() argument
2287 if (mmc_card_blockaddr(card) || mmc_card_ddr52(card)) in mmc_set_blocklen()
2293 return mmc_wait_for_cmd(card->host, &cmd, 5); in mmc_set_blocklen()
2297 int mmc_set_blockcount(struct mmc_card *card, unsigned int blockcount, in mmc_set_blockcount() argument
2307 return mmc_wait_for_cmd(card->host, &cmd, 5); in mmc_set_blockcount()
2324 if (!host->card) in mmc_hw_reset()
2387 if (!host->card || mmc_card_removed(host->card)) in _mmc_detect_card_removed()
2405 mmc_card_set_removed(host->card); in _mmc_detect_card_removed()
2414 struct mmc_card *card = host->card; in mmc_detect_card_removed() local
2419 if (!card) in mmc_detect_card_removed()
2422 ret = mmc_card_removed(card); in mmc_detect_card_removed()
2563 BUG_ON(host->card); in mmc_stop_host()
2609 mmc_power_up(host, host->card->ocr); in mmc_power_restore_host()
2621 int mmc_flush_cache(struct mmc_card *card) in mmc_flush_cache() argument
2625 if (mmc_card_mmc(card) && in mmc_flush_cache()
2626 (card->ext_csd.cache_size > 0) && in mmc_flush_cache()
2627 (card->ext_csd.cache_ctrl & 1)) { in mmc_flush_cache()
2628 err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL, in mmc_flush_cache()
2632 mmc_hostname(card->host), err); in mmc_flush_cache()