Message ID | 1411024883.27455.11.camel@debian-rtk5880 (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
[...] >> >> In that case, don't forget to enable MMC_CAP2_FULL_PWR_CYCLE. >> >> > >> > if MMC_CAP2_NO_PRESCAN_POWERUP enable, will call mmc_power_off() at start, >> > then it will check ios.power_mode, but the state is MMC_POWER_OFF and just >> > return. >> >> Uhh, that's right! So, I wonder why we invokes mmc_power_off() from >> that path at all. >> >> Hmm, I think we should change the behavior in mmc_start_host(), like below: >> 1) Add a "MMC_POWER_UNDEFINED" state which is what the power state >> should be assigned to at allocation. >> 2 ) From mmc_start_host(), invoke mmc_power_off() when >> MMC_CAP2_NO_PRESCAN_POWERUP and MMC_CAP2_FULL_PWR_CYCLE is set. >> >> Would that work? > Yes. I have confirmed this by following changes. The MMC_POWER_UNDEFINED > designation in mmc_start_host() will eventually cause a power-off > operation. > > But I wonder if we need to additionally check MMC_CAP2_FULL_PWR_CYCLE > before calling mmc_power_off()? The intent from my side was to keep the current behaviour for those that already used MMC_CAP2_NO_PRESCAN_POWERUP, but it's s not a big deal. So, let's try your proposal, thus don't check MMC_CAP2_FULL_PWR_CYCLE. Can you repost new version of your patches and please split them up on core and host separately. Kind regards Uffe -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Thu, 2014-09-18 at 23:14 +0200, Ulf Hansson wrote: > [...] > > >> > >> In that case, don't forget to enable MMC_CAP2_FULL_PWR_CYCLE. > >> > >> > > >> > if MMC_CAP2_NO_PRESCAN_POWERUP enable, will call mmc_power_off() at start, > >> > then it will check ios.power_mode, but the state is MMC_POWER_OFF and just > >> > return. > >> > >> Uhh, that's right! So, I wonder why we invokes mmc_power_off() from > >> that path at all. > >> > >> Hmm, I think we should change the behavior in mmc_start_host(), like below: > >> 1) Add a "MMC_POWER_UNDEFINED" state which is what the power state > >> should be assigned to at allocation. > >> 2 ) From mmc_start_host(), invoke mmc_power_off() when > >> MMC_CAP2_NO_PRESCAN_POWERUP and MMC_CAP2_FULL_PWR_CYCLE is set. > >> > >> Would that work? > > Yes. I have confirmed this by following changes. The MMC_POWER_UNDEFINED > > designation in mmc_start_host() will eventually cause a power-off > > operation. > > > > But I wonder if we need to additionally check MMC_CAP2_FULL_PWR_CYCLE > > before calling mmc_power_off()? > > The intent from my side was to keep the current behaviour for those > that already used MMC_CAP2_NO_PRESCAN_POWERUP, but it's s not a big > deal. > I checked the log and found the commit that invokes mmc_power_off(): a08b17be8b984a7c51cd5a480cd977363df353f9 0d3e3350d5871c53464be4c92d57198744247005 (https://www.mail-archive.com/linux-mmc@vger.kernel.org/msg19638.html ) The proposed change might bring back some delay since invoking mmc_power_off() in mmc_start_host() is more than NOP now and triggers real power-off and re-init in sdhci. Will this be OK? > So, let's try your proposal, thus don't check MMC_CAP2_FULL_PWR_CYCLE. > > Can you repost new version of your patches and please split them up on > core and host separately. > > Kind regards > Uffe > > ------Please consider the environment before printing this e-mail. -- Best regards, Roger Tseng
On 22 September 2014 12:09, Roger Tseng <rogerable@realtek.com> wrote: > On Thu, 2014-09-18 at 23:14 +0200, Ulf Hansson wrote: >> [...] >> >> >> >> >> In that case, don't forget to enable MMC_CAP2_FULL_PWR_CYCLE. >> >> >> >> > >> >> > if MMC_CAP2_NO_PRESCAN_POWERUP enable, will call mmc_power_off() at start, >> >> > then it will check ios.power_mode, but the state is MMC_POWER_OFF and just >> >> > return. >> >> >> >> Uhh, that's right! So, I wonder why we invokes mmc_power_off() from >> >> that path at all. >> >> >> >> Hmm, I think we should change the behavior in mmc_start_host(), like below: >> >> 1) Add a "MMC_POWER_UNDEFINED" state which is what the power state >> >> should be assigned to at allocation. >> >> 2 ) From mmc_start_host(), invoke mmc_power_off() when >> >> MMC_CAP2_NO_PRESCAN_POWERUP and MMC_CAP2_FULL_PWR_CYCLE is set. >> >> >> >> Would that work? >> > Yes. I have confirmed this by following changes. The MMC_POWER_UNDEFINED >> > designation in mmc_start_host() will eventually cause a power-off >> > operation. >> > >> > But I wonder if we need to additionally check MMC_CAP2_FULL_PWR_CYCLE >> > before calling mmc_power_off()? >> >> The intent from my side was to keep the current behaviour for those >> that already used MMC_CAP2_NO_PRESCAN_POWERUP, but it's s not a big >> deal. >> > > I checked the log and found the commit that invokes mmc_power_off(): > a08b17be8b984a7c51cd5a480cd977363df353f9 > 0d3e3350d5871c53464be4c92d57198744247005 > (https://www.mail-archive.com/linux-mmc@vger.kernel.org/msg19638.html ) > > The proposed change might bring back some delay since invoking > mmc_power_off() in mmc_start_host() is more than NOP now and triggers > real power-off and re-init in sdhci. Actually the above commits was added due to the below commit: fa5501890d8974301042e0202d342a6cbe8609f4 But the commits you refer to, didn't bring back the old behaviour, which I think was the intent. Instead we added a NOP call to mmc_power_off() from mmc_start_host(). We have few options on how to go forward, but let's loop in Adrian Hunter first, since he might be able to comment on this as well. Kind regards Uffe -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 23/09/2014 12:20 p.m., Ulf Hansson wrote: > On 22 September 2014 12:09, Roger Tseng <rogerable@realtek.com> wrote: >> On Thu, 2014-09-18 at 23:14 +0200, Ulf Hansson wrote: >>> [...] >>> >>>>> >>>>> In that case, don't forget to enable MMC_CAP2_FULL_PWR_CYCLE. >>>>> >>>>>> >>>>>> if MMC_CAP2_NO_PRESCAN_POWERUP enable, will call mmc_power_off() at start, >>>>>> then it will check ios.power_mode, but the state is MMC_POWER_OFF and just >>>>>> return. >>>>> >>>>> Uhh, that's right! So, I wonder why we invokes mmc_power_off() from >>>>> that path at all. >>>>> >>>>> Hmm, I think we should change the behavior in mmc_start_host(), like below: >>>>> 1) Add a "MMC_POWER_UNDEFINED" state which is what the power state >>>>> should be assigned to at allocation. >>>>> 2 ) From mmc_start_host(), invoke mmc_power_off() when >>>>> MMC_CAP2_NO_PRESCAN_POWERUP and MMC_CAP2_FULL_PWR_CYCLE is set. >>>>> >>>>> Would that work? >>>> Yes. I have confirmed this by following changes. The MMC_POWER_UNDEFINED >>>> designation in mmc_start_host() will eventually cause a power-off >>>> operation. >>>> >>>> But I wonder if we need to additionally check MMC_CAP2_FULL_PWR_CYCLE >>>> before calling mmc_power_off()? >>> >>> The intent from my side was to keep the current behaviour for those >>> that already used MMC_CAP2_NO_PRESCAN_POWERUP, but it's s not a big >>> deal. >>> >> >> I checked the log and found the commit that invokes mmc_power_off(): >> a08b17be8b984a7c51cd5a480cd977363df353f9 >> 0d3e3350d5871c53464be4c92d57198744247005 >> (https://www.mail-archive.com/linux-mmc@vger.kernel.org/msg19638.html ) >> >> The proposed change might bring back some delay since invoking >> mmc_power_off() in mmc_start_host() is more than NOP now and triggers >> real power-off and re-init in sdhci. > > Actually the above commits was added due to the below commit: > > fa5501890d8974301042e0202d342a6cbe8609f4 > > But the commits you refer to, didn't bring back the old behaviour, > which I think was the intent. Instead we added a NOP call to > mmc_power_off() from mmc_start_host(). > > We have few options on how to go forward, but let's loop in Adrian > Hunter first, since he might be able to comment on this as well. Having mmc_power_off() in mmc_start_host() actually power off should be OK. -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c index d03a080fb9cd..3457b0f74b71 100644 --- a/drivers/mmc/core/core.c +++ b/drivers/mmc/core/core.c @@ -2489,7 +2489,9 @@ void mmc_start_host(struct mmc_host *host) { host->f_init = max(freqs[0], host->f_min); host->rescan_disable = 0; - if (host->caps2 & MMC_CAP2_NO_PRESCAN_POWERUP) + host->ios.power_mode = MMC_POWER_UNDEFINED; + if (host->caps2 & (MMC_CAP2_NO_PRESCAN_POWERUP | + MMC_CAP2_FULL_PWR_CYCLE)) mmc_power_off(host); else mmc_power_up(host, host->ocr_avail); diff --git a/drivers/mmc/host/rtsx_pci_sdmmc.c b/drivers/mmc/host/rtsx_pci_sdmmc.c index dfde4a210238..d49460b5ff07 100644 --- a/drivers/mmc/host/rtsx_pci_sdmmc.c +++ b/drivers/mmc/host/rtsx_pci_sdmmc.c @@ -1292,6 +1292,7 @@ static void realtek_init_host(struct realtek_pci_sdmmc *host) mmc->caps = MMC_CAP_4_BIT_DATA | MMC_CAP_SD_HIGHSPEED | MMC_CAP_MMC_HIGHSPEED | MMC_CAP_BUS_WIDTH_TEST | MMC_CAP_UHS_SDR12 | MMC_CAP_UHS_SDR25; + mmc->caps2 = MMC_CAP2_NO_PRESCAN_POWERUP | MMC_CAP2_FULL_PWR_CYCLE; mmc->max_current_330 = 400; mmc->max_current_180 = 800; mmc->ops = &realtek_pci_sdmmc_ops; diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h index 7960424d0bc0..b3bfa609816a 100644 --- a/include/linux/mmc/host.h +++ b/include/linux/mmc/host.h @@ -42,6 +42,7 @@ struct mmc_ios { #define MMC_POWER_OFF 0 #define MMC_POWER_UP 1 #define MMC_POWER_ON 2 +#define MMC_POWER_UNDEFINED 3 unsigned char bus_width; /* data bus width */