mmc.c (c10b85d6c25f9ae0cdcf3ec9809a3063e0c3c2c9) | mmc.c (04a2ea248f58b3b6216d0cd0a6b8698df8b14355) |
---|---|
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 */ --- 1437 unchanged lines hidden (view full) --- 1446 bool uhs_en = (mmc->ocr & OCR_S18R) ? true : false; 1447 uint caps; 1448 1449 1450 err = sd_get_capabilities(mmc); 1451 if (err) 1452 return err; 1453 /* Restrict card's capabilities by what the host can do */ | 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 */ --- 1437 unchanged lines hidden (view full) --- 1446 bool uhs_en = (mmc->ocr & OCR_S18R) ? true : false; 1447 uint caps; 1448 1449 1450 err = sd_get_capabilities(mmc); 1451 if (err) 1452 return err; 1453 /* Restrict card's capabilities by what the host can do */ |
1454 caps = mmc->card_caps & (mmc->cfg->host_caps | MMC_MODE_1BIT); | 1454 caps = mmc->card_caps & (mmc->host_caps | MMC_MODE_1BIT); |
1455 1456 if (!uhs_en) 1457 caps &= ~UHS_CAPS; 1458 1459 for_each_sd_mode_by_pref(caps, mwt) { 1460 uint *w; 1461 1462 for (w = widths; w < widths + ARRAY_SIZE(widths); w++) { --- 131 unchanged lines hidden (view full) --- 1594 const struct mode_width_tuning *mwt; 1595 const struct ext_csd_bus_width *ecbw; 1596 1597 err = mmc_get_capabilities(mmc); 1598 if (err) 1599 return err; 1600 1601 /* Restrict card's capabilities by what the host can do */ | 1455 1456 if (!uhs_en) 1457 caps &= ~UHS_CAPS; 1458 1459 for_each_sd_mode_by_pref(caps, mwt) { 1460 uint *w; 1461 1462 for (w = widths; w < widths + ARRAY_SIZE(widths); w++) { --- 131 unchanged lines hidden (view full) --- 1594 const struct mode_width_tuning *mwt; 1595 const struct ext_csd_bus_width *ecbw; 1596 1597 err = mmc_get_capabilities(mmc); 1598 if (err) 1599 return err; 1600 1601 /* Restrict card's capabilities by what the host can do */ |
1602 mmc->card_caps &= (mmc->cfg->host_caps | MMC_MODE_1BIT); | 1602 mmc->card_caps &= (mmc->host_caps | MMC_MODE_1BIT); |
1603 1604 /* Only version 4 of MMC supports wider bus widths */ 1605 if (mmc->version < MMC_VERSION_4) 1606 return 0; 1607 1608 if (!mmc->ext_csd) { 1609 debug("No ext_csd found!\n"); /* this should enver happen */ 1610 return -ENOTSUPP; --- 566 unchanged lines hidden (view full) --- 2177} 2178 2179int mmc_start_init(struct mmc *mmc) 2180{ 2181 bool no_card; 2182 bool uhs_en = supports_uhs(mmc->cfg->host_caps); 2183 int err; 2184 | 1603 1604 /* Only version 4 of MMC supports wider bus widths */ 1605 if (mmc->version < MMC_VERSION_4) 1606 return 0; 1607 1608 if (!mmc->ext_csd) { 1609 debug("No ext_csd found!\n"); /* this should enver happen */ 1610 return -ENOTSUPP; --- 566 unchanged lines hidden (view full) --- 2177} 2178 2179int mmc_start_init(struct mmc *mmc) 2180{ 2181 bool no_card; 2182 bool uhs_en = supports_uhs(mmc->cfg->host_caps); 2183 int err; 2184 |
2185 mmc->host_caps = mmc->cfg->host_caps; 2186 |
|
2185 /* we pretend there's no card when init is NULL */ 2186 no_card = mmc_getcd(mmc) == 0; 2187#if !CONFIG_IS_ENABLED(DM_MMC) 2188 no_card = no_card || (mmc->cfg->ops->init == NULL); 2189#endif 2190 if (no_card) { 2191 mmc->has_init = 0; 2192#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT) --- 7 unchanged lines hidden (view full) --- 2200 2201#ifdef CONFIG_FSL_ESDHC_ADAPTER_IDENT 2202 mmc_adapter_card_type_ident(); 2203#endif 2204 err = mmc_power_init(mmc); 2205 if (err) 2206 return err; 2207 | 2187 /* we pretend there's no card when init is NULL */ 2188 no_card = mmc_getcd(mmc) == 0; 2189#if !CONFIG_IS_ENABLED(DM_MMC) 2190 no_card = no_card || (mmc->cfg->ops->init == NULL); 2191#endif 2192 if (no_card) { 2193 mmc->has_init = 0; 2194#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT) --- 7 unchanged lines hidden (view full) --- 2202 2203#ifdef CONFIG_FSL_ESDHC_ADAPTER_IDENT 2204 mmc_adapter_card_type_ident(); 2205#endif 2206 err = mmc_power_init(mmc); 2207 if (err) 2208 return err; 2209 |
2208 err = mmc_power_on(mmc); | 2210 err = mmc_power_cycle(mmc); 2211 if (err) { 2212 /* 2213 * if power cycling is not supported, we should not try 2214 * to use the UHS modes, because we wouldn't be able to 2215 * recover from an error during the UHS initialization. 2216 */ 2217 debug("Unable to do a full power cycle. Disabling the UHS modes for safety\n"); 2218 uhs_en = false; 2219 mmc->host_caps &= ~UHS_CAPS; 2220 err = mmc_power_on(mmc); 2221 } |
2209 if (err) 2210 return err; 2211 2212#if CONFIG_IS_ENABLED(DM_MMC) 2213 /* The device has already been probed ready for use */ 2214#else 2215 /* made sure it's not NULL earlier */ 2216 err = mmc->cfg->ops->init(mmc); --- 214 unchanged lines hidden --- | 2222 if (err) 2223 return err; 2224 2225#if CONFIG_IS_ENABLED(DM_MMC) 2226 /* The device has already been probed ready for use */ 2227#else 2228 /* made sure it's not NULL earlier */ 2229 err = mmc->cfg->ops->init(mmc); --- 214 unchanged lines hidden --- |