Message ID | 1484276362-44984-1-git-send-email-shawn.lin@rock-chips.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 01/13/2017 10:59 AM, Shawn Lin wrote: > When deploying runtime PM, it's quite verbose to print the > log of ios setting. Also it's useless to print it from system > PM as it should be the same with booting time. We also have > sysfs to get all these information from ios attribute, so let's > skip this print from PM context. > > Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com> > --- > > Changes in v5: None > Changes in v4: None > Changes in v3: None > Changes in v2: None > > drivers/mmc/host/dw_mmc.c | 21 ++++++++++++--------- > 1 file changed, 12 insertions(+), 9 deletions(-) > > diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c > index 3d213e7..dc58ec3 100644 > --- a/drivers/mmc/host/dw_mmc.c > +++ b/drivers/mmc/host/dw_mmc.c > @@ -1153,7 +1153,8 @@ static void mci_send_cmd(struct dw_mci_slot *slot, u32 cmd, u32 arg) > cmd, arg, cmd_status); > } > > -static void dw_mci_setup_bus(struct dw_mci_slot *slot, bool force_clkinit) > +static void dw_mci_setup_bus(struct dw_mci_slot *slot, > + bool force_clkinit, bool pm_context) > { > struct dw_mci *host = slot->host; > unsigned int clock = slot->clock; > @@ -1182,11 +1183,13 @@ static void dw_mci_setup_bus(struct dw_mci_slot *slot, bool force_clkinit) > if ((clock != slot->__clk_old && > !test_bit(DW_MMC_CARD_NEEDS_POLL, &slot->flags)) || > force_clkinit) { > - dev_info(&slot->mmc->class_dev, > - "Bus speed (slot %d) = %dHz (slot req %dHz, actual %dHZ div = %d)\n", > - slot->id, host->bus_hz, clock, > - div ? ((host->bus_hz / div) >> 1) : > - host->bus_hz, div); > + /* Silent the verbose log if calling from PM context */ > + if (!pm_context) > + dev_info(&slot->mmc->class_dev, > + "Bus speed (slot %d) = %dHz (slot req %dHz, actual %dHZ div = %d)\n", > + slot->id, host->bus_hz, clock, > + div ? ((host->bus_hz / div) >> 1) : > + host->bus_hz, div); > > /* > * If card is polling, display the message only > @@ -1434,12 +1437,12 @@ static void dw_mci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) > } > > /* Adjust clock / bus width after power is up */ > - dw_mci_setup_bus(slot, false); > + dw_mci_setup_bus(slot, false, false); > > break; > case MMC_POWER_OFF: > /* Turn clock off before power goes down */ > - dw_mci_setup_bus(slot, false); > + dw_mci_setup_bus(slot, false, false); > > if (!IS_ERR(mmc->supply.vmmc)) > mmc_regulator_set_ocr(mmc, mmc->supply.vmmc, 0); > @@ -3366,7 +3369,7 @@ int dw_mci_runtime_resume(struct device *dev) > continue; > if (slot->mmc->pm_flags & MMC_PM_KEEP_POWER) { > dw_mci_set_ios(slot->mmc, &slot->mmc->ios); > - dw_mci_setup_bus(slot, true); > + dw_mci_setup_bus(slot, true, true); Sadness, it seems not work for firefly reload, maybe there is some problems with the card detect in that board. > } > } >
On 2017/1/15 11:50, ayaka wrote: > > > On 01/13/2017 10:59 AM, Shawn Lin wrote: >> When deploying runtime PM, it's quite verbose to print the >> log of ios setting. Also it's useless to print it from system >> PM as it should be the same with booting time. We also have >> sysfs to get all these information from ios attribute, so let's >> skip this print from PM context. >> >> Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com> >> --- >> >> Changes in v5: None >> Changes in v4: None >> Changes in v3: None >> Changes in v2: None >> >> drivers/mmc/host/dw_mmc.c | 21 ++++++++++++--------- >> 1 file changed, 12 insertions(+), 9 deletions(-) >> >> diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c >> index 3d213e7..dc58ec3 100644 >> --- a/drivers/mmc/host/dw_mmc.c >> +++ b/drivers/mmc/host/dw_mmc.c >> @@ -1153,7 +1153,8 @@ static void mci_send_cmd(struct dw_mci_slot >> *slot, u32 cmd, u32 arg) >> cmd, arg, cmd_status); >> } >> -static void dw_mci_setup_bus(struct dw_mci_slot *slot, bool >> force_clkinit) >> +static void dw_mci_setup_bus(struct dw_mci_slot *slot, >> + bool force_clkinit, bool pm_context) >> { >> struct dw_mci *host = slot->host; >> unsigned int clock = slot->clock; >> @@ -1182,11 +1183,13 @@ static void dw_mci_setup_bus(struct >> dw_mci_slot *slot, bool force_clkinit) >> if ((clock != slot->__clk_old && >> !test_bit(DW_MMC_CARD_NEEDS_POLL, &slot->flags)) || >> force_clkinit) { >> - dev_info(&slot->mmc->class_dev, >> - "Bus speed (slot %d) = %dHz (slot req %dHz, actual >> %dHZ div = %d)\n", >> - slot->id, host->bus_hz, clock, >> - div ? ((host->bus_hz / div) >> 1) : >> - host->bus_hz, div); >> + /* Silent the verbose log if calling from PM context */ >> + if (!pm_context) >> + dev_info(&slot->mmc->class_dev, >> + "Bus speed (slot %d) = %dHz (slot req %dHz, >> actual %dHZ div = %d)\n", >> + slot->id, host->bus_hz, clock, >> + div ? ((host->bus_hz / div) >> 1) : >> + host->bus_hz, div); >> /* >> * If card is polling, display the message only >> @@ -1434,12 +1437,12 @@ static void dw_mci_set_ios(struct mmc_host >> *mmc, struct mmc_ios *ios) >> } >> /* Adjust clock / bus width after power is up */ >> - dw_mci_setup_bus(slot, false); >> + dw_mci_setup_bus(slot, false, false); >> break; >> case MMC_POWER_OFF: >> /* Turn clock off before power goes down */ >> - dw_mci_setup_bus(slot, false); >> + dw_mci_setup_bus(slot, false, false); >> if (!IS_ERR(mmc->supply.vmmc)) >> mmc_regulator_set_ocr(mmc, mmc->supply.vmmc, 0); >> @@ -3366,7 +3369,7 @@ int dw_mci_runtime_resume(struct device *dev) >> continue; >> if (slot->mmc->pm_flags & MMC_PM_KEEP_POWER) { >> dw_mci_set_ios(slot->mmc, &slot->mmc->ios); >> - dw_mci_setup_bus(slot, true); >> + dw_mci_setup_bus(slot, true, true); > Sadness, it seems not work for firefly reload, maybe there is some > problems with the card detect in that board. This patch is intended to prevent the spamming log from pm context but your firefly-reload board should have a another problem. So IIRC you still see the spamming log with polling mode, we need to dig that later but we need this two patches(at least 2/2) merged into 4.10-rc cycle to fix the boot problem. >> } >> } >> > > > >
Hi Shawn, On 01/13/2017 11:59 AM, Shawn Lin wrote: > When deploying runtime PM, it's quite verbose to print the > log of ios setting. Also it's useless to print it from system > PM as it should be the same with booting time. We also have > sysfs to get all these information from ios attribute, so let's > skip this print from PM context. It seems that force_clkinit and pm_context are same value.. Why do you put "pm_context"? Best Regards, Jaehoon Chung > > Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com> > --- > > Changes in v5: None > Changes in v4: None > Changes in v3: None > Changes in v2: None > > drivers/mmc/host/dw_mmc.c | 21 ++++++++++++--------- > 1 file changed, 12 insertions(+), 9 deletions(-) > > diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c > index 3d213e7..dc58ec3 100644 > --- a/drivers/mmc/host/dw_mmc.c > +++ b/drivers/mmc/host/dw_mmc.c > @@ -1153,7 +1153,8 @@ static void mci_send_cmd(struct dw_mci_slot *slot, u32 cmd, u32 arg) > cmd, arg, cmd_status); > } > > -static void dw_mci_setup_bus(struct dw_mci_slot *slot, bool force_clkinit) > +static void dw_mci_setup_bus(struct dw_mci_slot *slot, > + bool force_clkinit, bool pm_context) > { > struct dw_mci *host = slot->host; > unsigned int clock = slot->clock; > @@ -1182,11 +1183,13 @@ static void dw_mci_setup_bus(struct dw_mci_slot *slot, bool force_clkinit) > if ((clock != slot->__clk_old && > !test_bit(DW_MMC_CARD_NEEDS_POLL, &slot->flags)) || > force_clkinit) { > - dev_info(&slot->mmc->class_dev, > - "Bus speed (slot %d) = %dHz (slot req %dHz, actual %dHZ div = %d)\n", > - slot->id, host->bus_hz, clock, > - div ? ((host->bus_hz / div) >> 1) : > - host->bus_hz, div); > + /* Silent the verbose log if calling from PM context */ > + if (!pm_context) > + dev_info(&slot->mmc->class_dev, > + "Bus speed (slot %d) = %dHz (slot req %dHz, actual %dHZ div = %d)\n", > + slot->id, host->bus_hz, clock, > + div ? ((host->bus_hz / div) >> 1) : > + host->bus_hz, div); > > /* > * If card is polling, display the message only > @@ -1434,12 +1437,12 @@ static void dw_mci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) > } > > /* Adjust clock / bus width after power is up */ > - dw_mci_setup_bus(slot, false); > + dw_mci_setup_bus(slot, false, false); > > break; > case MMC_POWER_OFF: > /* Turn clock off before power goes down */ > - dw_mci_setup_bus(slot, false); > + dw_mci_setup_bus(slot, false, false); > > if (!IS_ERR(mmc->supply.vmmc)) > mmc_regulator_set_ocr(mmc, mmc->supply.vmmc, 0); > @@ -3366,7 +3369,7 @@ int dw_mci_runtime_resume(struct device *dev) > continue; > if (slot->mmc->pm_flags & MMC_PM_KEEP_POWER) { > dw_mci_set_ios(slot->mmc, &slot->mmc->ios); > - dw_mci_setup_bus(slot, true); > + dw_mci_setup_bus(slot, true, true); > } > } > >
Hi Jaehoon, On 2017/1/16 18:00, Jaehoon Chung wrote: > Hi Shawn, > > On 01/13/2017 11:59 AM, Shawn Lin wrote: >> When deploying runtime PM, it's quite verbose to print the >> log of ios setting. Also it's useless to print it from system >> PM as it should be the same with booting time. We also have >> sysfs to get all these information from ios attribute, so let's >> skip this print from PM context. > > It seems that force_clkinit and pm_context are same value.. > Why do you put "pm_context"? > Ah, you are right. So what I need is just to don't print it when force_clkinit is there. I will reuse it. Thanks. > Best Regards, > Jaehoon Chung > >> >> Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com> >> --- >> >> Changes in v5: None >> Changes in v4: None >> Changes in v3: None >> Changes in v2: None >> >> drivers/mmc/host/dw_mmc.c | 21 ++++++++++++--------- >> 1 file changed, 12 insertions(+), 9 deletions(-) >> >> diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c >> index 3d213e7..dc58ec3 100644 >> --- a/drivers/mmc/host/dw_mmc.c >> +++ b/drivers/mmc/host/dw_mmc.c >> @@ -1153,7 +1153,8 @@ static void mci_send_cmd(struct dw_mci_slot *slot, u32 cmd, u32 arg) >> cmd, arg, cmd_status); >> } >> >> -static void dw_mci_setup_bus(struct dw_mci_slot *slot, bool force_clkinit) >> +static void dw_mci_setup_bus(struct dw_mci_slot *slot, >> + bool force_clkinit, bool pm_context) >> { >> struct dw_mci *host = slot->host; >> unsigned int clock = slot->clock; >> @@ -1182,11 +1183,13 @@ static void dw_mci_setup_bus(struct dw_mci_slot *slot, bool force_clkinit) >> if ((clock != slot->__clk_old && >> !test_bit(DW_MMC_CARD_NEEDS_POLL, &slot->flags)) || >> force_clkinit) { >> - dev_info(&slot->mmc->class_dev, >> - "Bus speed (slot %d) = %dHz (slot req %dHz, actual %dHZ div = %d)\n", >> - slot->id, host->bus_hz, clock, >> - div ? ((host->bus_hz / div) >> 1) : >> - host->bus_hz, div); >> + /* Silent the verbose log if calling from PM context */ >> + if (!pm_context) >> + dev_info(&slot->mmc->class_dev, >> + "Bus speed (slot %d) = %dHz (slot req %dHz, actual %dHZ div = %d)\n", >> + slot->id, host->bus_hz, clock, >> + div ? ((host->bus_hz / div) >> 1) : >> + host->bus_hz, div); >> >> /* >> * If card is polling, display the message only >> @@ -1434,12 +1437,12 @@ static void dw_mci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) >> } >> >> /* Adjust clock / bus width after power is up */ >> - dw_mci_setup_bus(slot, false); >> + dw_mci_setup_bus(slot, false, false); >> >> break; >> case MMC_POWER_OFF: >> /* Turn clock off before power goes down */ >> - dw_mci_setup_bus(slot, false); >> + dw_mci_setup_bus(slot, false, false); >> >> if (!IS_ERR(mmc->supply.vmmc)) >> mmc_regulator_set_ocr(mmc, mmc->supply.vmmc, 0); >> @@ -3366,7 +3369,7 @@ int dw_mci_runtime_resume(struct device *dev) >> continue; >> if (slot->mmc->pm_flags & MMC_PM_KEEP_POWER) { >> dw_mci_set_ios(slot->mmc, &slot->mmc->ios); >> - dw_mci_setup_bus(slot, true); >> + dw_mci_setup_bus(slot, true, true); >> } >> } >> >> > > > >
diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c index 3d213e7..dc58ec3 100644 --- a/drivers/mmc/host/dw_mmc.c +++ b/drivers/mmc/host/dw_mmc.c @@ -1153,7 +1153,8 @@ static void mci_send_cmd(struct dw_mci_slot *slot, u32 cmd, u32 arg) cmd, arg, cmd_status); } -static void dw_mci_setup_bus(struct dw_mci_slot *slot, bool force_clkinit) +static void dw_mci_setup_bus(struct dw_mci_slot *slot, + bool force_clkinit, bool pm_context) { struct dw_mci *host = slot->host; unsigned int clock = slot->clock; @@ -1182,11 +1183,13 @@ static void dw_mci_setup_bus(struct dw_mci_slot *slot, bool force_clkinit) if ((clock != slot->__clk_old && !test_bit(DW_MMC_CARD_NEEDS_POLL, &slot->flags)) || force_clkinit) { - dev_info(&slot->mmc->class_dev, - "Bus speed (slot %d) = %dHz (slot req %dHz, actual %dHZ div = %d)\n", - slot->id, host->bus_hz, clock, - div ? ((host->bus_hz / div) >> 1) : - host->bus_hz, div); + /* Silent the verbose log if calling from PM context */ + if (!pm_context) + dev_info(&slot->mmc->class_dev, + "Bus speed (slot %d) = %dHz (slot req %dHz, actual %dHZ div = %d)\n", + slot->id, host->bus_hz, clock, + div ? ((host->bus_hz / div) >> 1) : + host->bus_hz, div); /* * If card is polling, display the message only @@ -1434,12 +1437,12 @@ static void dw_mci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) } /* Adjust clock / bus width after power is up */ - dw_mci_setup_bus(slot, false); + dw_mci_setup_bus(slot, false, false); break; case MMC_POWER_OFF: /* Turn clock off before power goes down */ - dw_mci_setup_bus(slot, false); + dw_mci_setup_bus(slot, false, false); if (!IS_ERR(mmc->supply.vmmc)) mmc_regulator_set_ocr(mmc, mmc->supply.vmmc, 0); @@ -3366,7 +3369,7 @@ int dw_mci_runtime_resume(struct device *dev) continue; if (slot->mmc->pm_flags & MMC_PM_KEEP_POWER) { dw_mci_set_ios(slot->mmc, &slot->mmc->ios); - dw_mci_setup_bus(slot, true); + dw_mci_setup_bus(slot, true, true); } }
When deploying runtime PM, it's quite verbose to print the log of ios setting. Also it's useless to print it from system PM as it should be the same with booting time. We also have sysfs to get all these information from ios attribute, so let's skip this print from PM context. Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com> --- Changes in v5: None Changes in v4: None Changes in v3: None Changes in v2: None drivers/mmc/host/dw_mmc.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-)