Message ID | 20220216055435.2335297-1-kai.heng.feng@canonical.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | mmc: rtsx: Let MMC core handle runtime PM | expand |
On Wed, 16 Feb 2022 at 06:55, Kai-Heng Feng <kai.heng.feng@canonical.com> wrote: > > Since MMC core handles runtime PM reference counting, we can avoid doing > redundant runtime PM work in the driver. That means the only thing > commit 5b4258f6721f ("misc: rtsx: rts5249 support runtime PM") misses is > to always enable runtime PM, to let its parent driver enable ASPM in the > runtime idle routine. > > Fixes: 7499b529d97f ("mmc: rtsx: Use pm_runtime_{get,put}() to handle runtime PM") > Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com> This looks good to me! Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org> Greg, do you want to funnel this through your tree - or should I wait for an rc containing 7499b529d97f and take it through my mmc tree? Either way works for me. Kind regards Uffe > --- > drivers/mmc/host/rtsx_pci_sdmmc.c | 18 ------------------ > 1 file changed, 18 deletions(-) > > diff --git a/drivers/mmc/host/rtsx_pci_sdmmc.c b/drivers/mmc/host/rtsx_pci_sdmmc.c > index 2a3f14afe9f83..265b3889f9d72 100644 > --- a/drivers/mmc/host/rtsx_pci_sdmmc.c > +++ b/drivers/mmc/host/rtsx_pci_sdmmc.c > @@ -823,7 +823,6 @@ static void sd_request(struct work_struct *work) > } > > mutex_lock(&pcr->pcr_mutex); > - pm_runtime_get_sync(dev); > > rtsx_pci_start_run(pcr); > > @@ -860,8 +859,6 @@ static void sd_request(struct work_struct *work) > data->bytes_xfered = data->blocks * data->blksz; > } > > - pm_runtime_mark_last_busy(dev); > - pm_runtime_put_autosuspend(dev); > mutex_unlock(&pcr->pcr_mutex); > > finish: > @@ -1093,7 +1090,6 @@ static void sdmmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) > return; > > mutex_lock(&pcr->pcr_mutex); > - pm_runtime_get_sync(dev); > > rtsx_pci_start_run(pcr); > > @@ -1127,8 +1123,6 @@ static void sdmmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) > rtsx_pci_switch_clock(pcr, ios->clock, host->ssc_depth, > host->initial_mode, host->double_clk, host->vpclk); > > - pm_runtime_mark_last_busy(dev); > - pm_runtime_put_autosuspend(dev); > mutex_unlock(&pcr->pcr_mutex); > } > > @@ -1144,7 +1138,6 @@ static int sdmmc_get_ro(struct mmc_host *mmc) > return -ENOMEDIUM; > > mutex_lock(&pcr->pcr_mutex); > - pm_runtime_get_sync(dev); > > rtsx_pci_start_run(pcr); > > @@ -1154,8 +1147,6 @@ static int sdmmc_get_ro(struct mmc_host *mmc) > if (val & SD_WRITE_PROTECT) > ro = 1; > > - pm_runtime_mark_last_busy(dev); > - pm_runtime_put_autosuspend(dev); > mutex_unlock(&pcr->pcr_mutex); > > return ro; > @@ -1173,7 +1164,6 @@ static int sdmmc_get_cd(struct mmc_host *mmc) > return cd; > > mutex_lock(&pcr->pcr_mutex); > - pm_runtime_get_sync(dev); > > rtsx_pci_start_run(pcr); > > @@ -1183,8 +1173,6 @@ static int sdmmc_get_cd(struct mmc_host *mmc) > if (val & SD_EXIST) > cd = 1; > > - pm_runtime_mark_last_busy(dev); > - pm_runtime_put_autosuspend(dev); > mutex_unlock(&pcr->pcr_mutex); > > return cd; > @@ -1282,7 +1270,6 @@ static int sdmmc_switch_voltage(struct mmc_host *mmc, struct mmc_ios *ios) > return err; > > mutex_lock(&pcr->pcr_mutex); > - pm_runtime_get_sync(dev); > > rtsx_pci_start_run(pcr); > > @@ -1312,8 +1299,6 @@ static int sdmmc_switch_voltage(struct mmc_host *mmc, struct mmc_ios *ios) > err = rtsx_pci_write_register(pcr, SD_BUS_STAT, > SD_CLK_TOGGLE_EN | SD_CLK_FORCE_STOP, 0); > > - pm_runtime_mark_last_busy(dev); > - pm_runtime_put_autosuspend(dev); > mutex_unlock(&pcr->pcr_mutex); > > return err; > @@ -1334,7 +1319,6 @@ static int sdmmc_execute_tuning(struct mmc_host *mmc, u32 opcode) > return err; > > mutex_lock(&pcr->pcr_mutex); > - pm_runtime_get_sync(dev); > > rtsx_pci_start_run(pcr); > > @@ -1367,8 +1351,6 @@ static int sdmmc_execute_tuning(struct mmc_host *mmc, u32 opcode) > err = sd_change_phase(host, DDR50_RX_PHASE(pcr), true); > > out: > - pm_runtime_mark_last_busy(dev); > - pm_runtime_put_autosuspend(dev); > mutex_unlock(&pcr->pcr_mutex); > > return err; > -- > 2.34.1 >
On Wed, Feb 16, 2022 at 11:29:52AM +0100, Ulf Hansson wrote: > On Wed, 16 Feb 2022 at 06:55, Kai-Heng Feng <kai.heng.feng@canonical.com> wrote: > > > > Since MMC core handles runtime PM reference counting, we can avoid doing > > redundant runtime PM work in the driver. That means the only thing > > commit 5b4258f6721f ("misc: rtsx: rts5249 support runtime PM") misses is > > to always enable runtime PM, to let its parent driver enable ASPM in the > > runtime idle routine. > > > > Fixes: 7499b529d97f ("mmc: rtsx: Use pm_runtime_{get,put}() to handle runtime PM") > > Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com> > > This looks good to me! > > Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org> > > Greg, do you want to funnel this through your tree - or should I wait > for an rc containing 7499b529d97f and take it through my mmc tree? > Either way works for me. I will take it now, thanks. greg k-h
diff --git a/drivers/mmc/host/rtsx_pci_sdmmc.c b/drivers/mmc/host/rtsx_pci_sdmmc.c index 2a3f14afe9f83..265b3889f9d72 100644 --- a/drivers/mmc/host/rtsx_pci_sdmmc.c +++ b/drivers/mmc/host/rtsx_pci_sdmmc.c @@ -823,7 +823,6 @@ static void sd_request(struct work_struct *work) } mutex_lock(&pcr->pcr_mutex); - pm_runtime_get_sync(dev); rtsx_pci_start_run(pcr); @@ -860,8 +859,6 @@ static void sd_request(struct work_struct *work) data->bytes_xfered = data->blocks * data->blksz; } - pm_runtime_mark_last_busy(dev); - pm_runtime_put_autosuspend(dev); mutex_unlock(&pcr->pcr_mutex); finish: @@ -1093,7 +1090,6 @@ static void sdmmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) return; mutex_lock(&pcr->pcr_mutex); - pm_runtime_get_sync(dev); rtsx_pci_start_run(pcr); @@ -1127,8 +1123,6 @@ static void sdmmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) rtsx_pci_switch_clock(pcr, ios->clock, host->ssc_depth, host->initial_mode, host->double_clk, host->vpclk); - pm_runtime_mark_last_busy(dev); - pm_runtime_put_autosuspend(dev); mutex_unlock(&pcr->pcr_mutex); } @@ -1144,7 +1138,6 @@ static int sdmmc_get_ro(struct mmc_host *mmc) return -ENOMEDIUM; mutex_lock(&pcr->pcr_mutex); - pm_runtime_get_sync(dev); rtsx_pci_start_run(pcr); @@ -1154,8 +1147,6 @@ static int sdmmc_get_ro(struct mmc_host *mmc) if (val & SD_WRITE_PROTECT) ro = 1; - pm_runtime_mark_last_busy(dev); - pm_runtime_put_autosuspend(dev); mutex_unlock(&pcr->pcr_mutex); return ro; @@ -1173,7 +1164,6 @@ static int sdmmc_get_cd(struct mmc_host *mmc) return cd; mutex_lock(&pcr->pcr_mutex); - pm_runtime_get_sync(dev); rtsx_pci_start_run(pcr); @@ -1183,8 +1173,6 @@ static int sdmmc_get_cd(struct mmc_host *mmc) if (val & SD_EXIST) cd = 1; - pm_runtime_mark_last_busy(dev); - pm_runtime_put_autosuspend(dev); mutex_unlock(&pcr->pcr_mutex); return cd; @@ -1282,7 +1270,6 @@ static int sdmmc_switch_voltage(struct mmc_host *mmc, struct mmc_ios *ios) return err; mutex_lock(&pcr->pcr_mutex); - pm_runtime_get_sync(dev); rtsx_pci_start_run(pcr); @@ -1312,8 +1299,6 @@ static int sdmmc_switch_voltage(struct mmc_host *mmc, struct mmc_ios *ios) err = rtsx_pci_write_register(pcr, SD_BUS_STAT, SD_CLK_TOGGLE_EN | SD_CLK_FORCE_STOP, 0); - pm_runtime_mark_last_busy(dev); - pm_runtime_put_autosuspend(dev); mutex_unlock(&pcr->pcr_mutex); return err; @@ -1334,7 +1319,6 @@ static int sdmmc_execute_tuning(struct mmc_host *mmc, u32 opcode) return err; mutex_lock(&pcr->pcr_mutex); - pm_runtime_get_sync(dev); rtsx_pci_start_run(pcr); @@ -1367,8 +1351,6 @@ static int sdmmc_execute_tuning(struct mmc_host *mmc, u32 opcode) err = sd_change_phase(host, DDR50_RX_PHASE(pcr), true); out: - pm_runtime_mark_last_busy(dev); - pm_runtime_put_autosuspend(dev); mutex_unlock(&pcr->pcr_mutex); return err;
Since MMC core handles runtime PM reference counting, we can avoid doing redundant runtime PM work in the driver. That means the only thing commit 5b4258f6721f ("misc: rtsx: rts5249 support runtime PM") misses is to always enable runtime PM, to let its parent driver enable ASPM in the runtime idle routine. Fixes: 7499b529d97f ("mmc: rtsx: Use pm_runtime_{get,put}() to handle runtime PM") Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com> --- drivers/mmc/host/rtsx_pci_sdmmc.c | 18 ------------------ 1 file changed, 18 deletions(-)