* [PATCH v2 0/2] OMAP3: wdtimer: Fix CORE idle
@ 2011-03-10 12:10 Kalle Jokiniemi
2011-03-10 12:10 ` [PATCH 1/2] Watchdog: omap_wdt: add fine grain runtime-pm Kalle Jokiniemi
` (2 more replies)
0 siblings, 3 replies; 11+ messages in thread
From: Kalle Jokiniemi @ 2011-03-10 12:10 UTC (permalink / raw)
To: linux-watchdog, wim, khilman, linux-omap, tony
Cc: jhnikula, ilkka.koskinen, Kalle Jokiniemi
These patches fix the issue where the wdtimer blocks CORE idle
transitions on n900 (OMAP3). The root cause was that SMART idle
mode in wdtimer did not allow the CORE idle transition to happen.
v2: updated commit message on patch 1/2, Cc'd Wim, and added
comments to code about possible HW bug in wdtimer2.
Wim, please check patch number one and add your acked by.
I propose that we push these upstream via linux-omap-pm,
as the patches deal with PM and need to be applied together
to get the desired functionality.
Paul Walmsley (2):
Watchdog: omap_wdt: add fine grain runtime-pm
OMAP3: wdtimer: Fix CORE idle transition
arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | 1 +
drivers/watchdog/omap_wdt.c | 25 +++++++++++++++++++++++--
2 files changed, 24 insertions(+), 2 deletions(-)
^ permalink raw reply [flat|nested] 11+ messages in thread* [PATCH 1/2] Watchdog: omap_wdt: add fine grain runtime-pm 2011-03-10 12:10 [PATCH v2 0/2] OMAP3: wdtimer: Fix CORE idle Kalle Jokiniemi @ 2011-03-10 12:10 ` Kalle Jokiniemi 2011-03-10 12:10 ` [PATCH 2/2] OMAP3: wdtimer: Fix CORE idle transition Kalle Jokiniemi 2011-03-10 21:55 ` [PATCH v2 0/2] OMAP3: wdtimer: Fix CORE idle Wim Van Sebroeck 2 siblings, 0 replies; 11+ messages in thread From: Kalle Jokiniemi @ 2011-03-10 12:10 UTC (permalink / raw) To: linux-watchdog, wim, khilman, linux-omap, tony Cc: jhnikula, ilkka.koskinen, Paul Walmsley, Kalle Jokiniemi From: Paul Walmsley <paul@pwsan.com> The omap_wdt should only be in full active state when the registers are being accessed. Otherwise the device can be on lower power mode. This patch is based on a patch created by Kalle Jokiniemi: https://patchwork.kernel.org/patch/618231/ which is itself based on a patch created by Atal Shargorodsky: http://lkml.org/lkml/2009/3/10/266. Signed-off-by: Paul Walmsley <paul@pwsan.com> Signed-off-by: Kalle Jokiniemi <kalle.jokiniemi@nokia.com> Tested-by: Kalle Jokiniemi <kalle.jokiniemi@nokia.com> Cc: Wim Van Sebroeck <wim@iguana.be> --- drivers/watchdog/omap_wdt.c | 25 +++++++++++++++++++++++-- 1 files changed, 23 insertions(+), 2 deletions(-) diff --git a/drivers/watchdog/omap_wdt.c b/drivers/watchdog/omap_wdt.c index 3dd4971..2b4acb8 100644 --- a/drivers/watchdog/omap_wdt.c +++ b/drivers/watchdog/omap_wdt.c @@ -124,6 +124,8 @@ static void omap_wdt_set_timeout(struct omap_wdt_dev *wdev) u32 pre_margin = GET_WLDR_VAL(timer_margin); void __iomem *base = wdev->base; + pm_runtime_get_sync(wdev->dev); + /* just count up at 32 KHz */ while (__raw_readl(base + OMAP_WATCHDOG_WPS) & 0x04) cpu_relax(); @@ -131,6 +133,8 @@ static void omap_wdt_set_timeout(struct omap_wdt_dev *wdev) __raw_writel(pre_margin, base + OMAP_WATCHDOG_LDR); while (__raw_readl(base + OMAP_WATCHDOG_WPS) & 0x04) cpu_relax(); + + pm_runtime_put_sync(wdev->dev); } /* @@ -160,6 +164,8 @@ static int omap_wdt_open(struct inode *inode, struct file *file) omap_wdt_ping(wdev); /* trigger loading of new timeout value */ omap_wdt_enable(wdev); + pm_runtime_put_sync(wdev->dev); + return nonseekable_open(inode, file); } @@ -171,6 +177,7 @@ static int omap_wdt_release(struct inode *inode, struct file *file) * Shut off the timer unless NOWAYOUT is defined. */ #ifndef CONFIG_WATCHDOG_NOWAYOUT + pm_runtime_get_sync(wdev->dev); omap_wdt_disable(wdev); @@ -190,9 +197,11 @@ static ssize_t omap_wdt_write(struct file *file, const char __user *data, /* Refresh LOAD_TIME. */ if (len) { + pm_runtime_get_sync(wdev->dev); spin_lock(&wdt_lock); omap_wdt_ping(wdev); spin_unlock(&wdt_lock); + pm_runtime_put_sync(wdev->dev); } return len; } @@ -224,15 +233,18 @@ static long omap_wdt_ioctl(struct file *file, unsigned int cmd, return put_user(omap_prcm_get_reset_sources(), (int __user *)arg); case WDIOC_KEEPALIVE: + pm_runtime_get_sync(wdev->dev); spin_lock(&wdt_lock); omap_wdt_ping(wdev); spin_unlock(&wdt_lock); + pm_runtime_put_sync(wdev->dev); return 0; case WDIOC_SETTIMEOUT: if (get_user(new_margin, (int __user *)arg)) return -EFAULT; omap_wdt_adjust_timeout(new_margin); + pm_runtime_get_sync(wdev->dev); spin_lock(&wdt_lock); omap_wdt_disable(wdev); omap_wdt_set_timeout(wdev); @@ -240,6 +252,7 @@ static long omap_wdt_ioctl(struct file *file, unsigned int cmd, omap_wdt_ping(wdev); spin_unlock(&wdt_lock); + pm_runtime_put_sync(wdev->dev); /* Fall */ case WDIOC_GETTIMEOUT: return put_user(timer_margin, (int __user *)arg); @@ -345,8 +358,11 @@ static void omap_wdt_shutdown(struct platform_device *pdev) { struct omap_wdt_dev *wdev = platform_get_drvdata(pdev); - if (wdev->omap_wdt_users) + if (wdev->omap_wdt_users) { + pm_runtime_get_sync(wdev->dev); omap_wdt_disable(wdev); + pm_runtime_put_sync(wdev->dev); + } } static int __devexit omap_wdt_remove(struct platform_device *pdev) @@ -381,8 +397,11 @@ static int omap_wdt_suspend(struct platform_device *pdev, pm_message_t state) { struct omap_wdt_dev *wdev = platform_get_drvdata(pdev); - if (wdev->omap_wdt_users) + if (wdev->omap_wdt_users) { + pm_runtime_get_sync(wdev->dev); omap_wdt_disable(wdev); + pm_runtime_put_sync(wdev->dev); + } return 0; } @@ -392,8 +411,10 @@ static int omap_wdt_resume(struct platform_device *pdev) struct omap_wdt_dev *wdev = platform_get_drvdata(pdev); if (wdev->omap_wdt_users) { + pm_runtime_get_sync(wdev->dev); omap_wdt_enable(wdev); omap_wdt_ping(wdev); + pm_runtime_put_sync(wdev->dev); } return 0; -- 1.7.1 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 2/2] OMAP3: wdtimer: Fix CORE idle transition 2011-03-10 12:10 [PATCH v2 0/2] OMAP3: wdtimer: Fix CORE idle Kalle Jokiniemi 2011-03-10 12:10 ` [PATCH 1/2] Watchdog: omap_wdt: add fine grain runtime-pm Kalle Jokiniemi @ 2011-03-10 12:10 ` Kalle Jokiniemi 2011-03-10 14:52 ` Paul Walmsley 2011-03-10 21:55 ` [PATCH v2 0/2] OMAP3: wdtimer: Fix CORE idle Wim Van Sebroeck 2 siblings, 1 reply; 11+ messages in thread From: Kalle Jokiniemi @ 2011-03-10 12:10 UTC (permalink / raw) To: linux-watchdog, wim, khilman, linux-omap, tony Cc: jhnikula, ilkka.koskinen, Paul Walmsley, Kalle Jokiniemi, Benoit Cousson From: Paul Walmsley <paul@pwsan.com> The HW superwised smart idle for wdtimer in OMAP3 prevents CORE power domain idle transitions. Disable it by swithing to SW supervised transitions. This could be a hardware bug in the OMAP3 wdtimer2 block. Signed-off-by: Kalle Jokiniemi <kalle.jokiniemi@nokia.com> Signed-off-by: Paul Walmsley <paul@pwsan.com> Cc: Benoit Cousson <b-cousson@ti.com> --- arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | 5 +++++ 1 files changed, 5 insertions(+), 0 deletions(-) diff --git a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c index 196a834..ebd3309 100644 --- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c @@ -1293,6 +1293,11 @@ static struct omap_hwmod omap3xxx_wd_timer2_hwmod = { .slaves = omap3xxx_wd_timer2_slaves, .slaves_cnt = ARRAY_SIZE(omap3xxx_wd_timer2_slaves), .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430), + /* + * XXX: Use software supervised mode, HW supervised smartidle seems to + * block CORE power domain idle transitions. Maybe a HW bug in wdt2? + */ + .flags = HWMOD_SWSUP_SIDLE, }; /* UART common */ -- 1.7.1 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH 2/2] OMAP3: wdtimer: Fix CORE idle transition 2011-03-10 12:10 ` [PATCH 2/2] OMAP3: wdtimer: Fix CORE idle transition Kalle Jokiniemi @ 2011-03-10 14:52 ` Paul Walmsley 2011-03-14 10:34 ` kalle.jokiniemi 0 siblings, 1 reply; 11+ messages in thread From: Paul Walmsley @ 2011-03-10 14:52 UTC (permalink / raw) To: Kalle Jokiniemi Cc: linux-watchdog, wim, khilman, linux-omap, tony, jhnikula, ilkka.koskinen, Benoit Cousson On Thu, 10 Mar 2011, Kalle Jokiniemi wrote: > From: Paul Walmsley <paul@pwsan.com> > > The HW superwised smart idle for wdtimer in OMAP3 prevents > CORE power domain idle transitions. Disable it by swithing > to SW supervised transitions. > > This could be a hardware bug in the OMAP3 wdtimer2 block. > > Signed-off-by: Kalle Jokiniemi <kalle.jokiniemi@nokia.com> > Signed-off-by: Paul Walmsley <paul@pwsan.com> > Cc: Benoit Cousson <b-cousson@ti.com> I've queued this one for 2.6.39, since it seems pretty clear that target smart-idle mode doesn't work with this IP block. Probably we'll need to do the same thing for OMAP2420/2430, but I'm not going to touch those right now, since we're so close to the merge window. - Paul ^ permalink raw reply [flat|nested] 11+ messages in thread
* RE: [PATCH 2/2] OMAP3: wdtimer: Fix CORE idle transition 2011-03-10 14:52 ` Paul Walmsley @ 2011-03-14 10:34 ` kalle.jokiniemi 2011-03-14 19:27 ` Paul Walmsley 0 siblings, 1 reply; 11+ messages in thread From: kalle.jokiniemi @ 2011-03-14 10:34 UTC (permalink / raw) To: paul Cc: linux-watchdog, wim, khilman, linux-omap, tony, jhnikula, ilkka.koskinen, b-cousson Hi Paul, > -----Original Message----- > From: ext Paul Walmsley [mailto:paul@pwsan.com] > Sent: 10. maaliskuuta 2011 16:53 > > From: Paul Walmsley <paul@pwsan.com> > > > > The HW superwised smart idle for wdtimer in OMAP3 prevents CORE > power > > domain idle transitions. Disable it by swithing to SW supervised > > transitions. > > > > This could be a hardware bug in the OMAP3 wdtimer2 block. > > > > Signed-off-by: Kalle Jokiniemi <kalle.jokiniemi@nokia.com> > > Signed-off-by: Paul Walmsley <paul@pwsan.com> > > Cc: Benoit Cousson <b-cousson@ti.com> > > I've queued this one for 2.6.39, since it seems pretty clear that target smart- > idle mode doesn't work with this IP block. What about the 1/2 patch? Is that going in, and to which kernel version (our integrator would like to put in a note when we can remove the back ported patch) - Kalle > > Probably we'll need to do the same thing for OMAP2420/2430, but I'm not > going to touch those right now, since we're so close to the merge window. > > > - Paul ^ permalink raw reply [flat|nested] 11+ messages in thread
* RE: [PATCH 2/2] OMAP3: wdtimer: Fix CORE idle transition 2011-03-14 10:34 ` kalle.jokiniemi @ 2011-03-14 19:27 ` Paul Walmsley 2011-03-15 6:57 ` kalle.jokiniemi 0 siblings, 1 reply; 11+ messages in thread From: Paul Walmsley @ 2011-03-14 19:27 UTC (permalink / raw) To: kalle.jokiniemi Cc: linux-watchdog, wim, khilman, linux-omap, tony, jhnikula, ilkka.koskinen, b-cousson Hello Kalle, On Mon, 14 Mar 2011, kalle.jokiniemi@nokia.com wrote: > What about the 1/2 patch? Is that going in, and to which kernel version > (our integrator would like to put in a note when we can remove the back > ported patch) It's queued for Linus for the upcoming merge window: http://git.kernel.org/?p=linux/kernel/git/tmlind/linux-omap-2.6.git;a=commit;h=0503add9d251db22ba2f610fb8d9b7743a9786da Thread here: http://www.spinics.net/lists/linux-omap/msg48381.html If there aren't further comments on the watchdog patch, and Linus is okay with the branch, it should appear in 2.6.39. - Paul ^ permalink raw reply [flat|nested] 11+ messages in thread
* RE: [PATCH 2/2] OMAP3: wdtimer: Fix CORE idle transition 2011-03-14 19:27 ` Paul Walmsley @ 2011-03-15 6:57 ` kalle.jokiniemi 0 siblings, 0 replies; 11+ messages in thread From: kalle.jokiniemi @ 2011-03-15 6:57 UTC (permalink / raw) To: paul Cc: linux-watchdog, wim, khilman, linux-omap, tony, jhnikula, ilkka.koskinen, b-cousson Hi, > -----Original Message----- > From: linux-omap-owner@vger.kernel.org [mailto:linux-omap- > owner@vger.kernel.org] On Behalf Of ext Paul Walmsley > Sent: 14. maaliskuuta 2011 21:27 > To: Jokiniemi Kalle (Nokia-MS/Tampere) > Cc: linux-watchdog@vger.kernel.org; wim@iguana.be; khilman@ti.com; > linux-omap@vger.kernel.org; tony@atomide.com; jhnikula@gmail.com; > Koskinen Ilkka (Nokia-MS/Tampere); b-cousson@ti.com > Subject: RE: [PATCH 2/2] OMAP3: wdtimer: Fix CORE idle transition > > Hello Kalle, > > On Mon, 14 Mar 2011, kalle.jokiniemi@nokia.com wrote: > > > What about the 1/2 patch? Is that going in, and to which kernel > > version (our integrator would like to put in a note when we can remove > > the back ported patch) > > It's queued for Linus for the upcoming merge window: > > http://git.kernel.org/?p=linux/kernel/git/tmlind/linux-omap- > 2.6.git;a=commit;h=0503add9d251db22ba2f610fb8d9b7743a9786da > > Thread here: > > http://www.spinics.net/lists/linux-omap/msg48381.html > > If there aren't further comments on the watchdog patch, and Linus is okay > with the branch, it should appear in 2.6.39. Thanks for the confirmation. - Kalle > > > > - Paul > -- > To unsubscribe from this list: send the line "unsubscribe linux-omap" in the > body of a message to majordomo@vger.kernel.org More majordomo info at > http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v2 0/2] OMAP3: wdtimer: Fix CORE idle 2011-03-10 12:10 [PATCH v2 0/2] OMAP3: wdtimer: Fix CORE idle Kalle Jokiniemi 2011-03-10 12:10 ` [PATCH 1/2] Watchdog: omap_wdt: add fine grain runtime-pm Kalle Jokiniemi 2011-03-10 12:10 ` [PATCH 2/2] OMAP3: wdtimer: Fix CORE idle transition Kalle Jokiniemi @ 2011-03-10 21:55 ` Wim Van Sebroeck 2011-03-10 23:33 ` Paul Walmsley 2 siblings, 1 reply; 11+ messages in thread From: Wim Van Sebroeck @ 2011-03-10 21:55 UTC (permalink / raw) To: Kalle Jokiniemi Cc: linux-watchdog, khilman, linux-omap, tony, jhnikula, ilkka.koskinen Hi All, > These patches fix the issue where the wdtimer blocks CORE idle > transitions on n900 (OMAP3). The root cause was that SMART idle > mode in wdtimer did not allow the CORE idle transition to happen. > > v2: updated commit message on patch 1/2, Cc'd Wim, and added > comments to code about possible HW bug in wdtimer2. > > Wim, please check patch number one and add your acked by. > > I propose that we push these upstream via linux-omap-pm, > as the patches deal with PM and need to be applied together > to get the desired functionality. > > Paul Walmsley (2): > Watchdog: omap_wdt: add fine grain runtime-pm > OMAP3: wdtimer: Fix CORE idle transition > > arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | 1 + > drivers/watchdog/omap_wdt.c | 25 +++++++++++++++++++++++-- > 2 files changed, 24 insertions(+), 2 deletions(-) Acked-by: Wim Van Sebroeck <wim@iguana.be> linux-omap-pm is indeed the best tree for getting this upstream. Kind regards, Wim. ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v2 0/2] OMAP3: wdtimer: Fix CORE idle 2011-03-10 21:55 ` [PATCH v2 0/2] OMAP3: wdtimer: Fix CORE idle Wim Van Sebroeck @ 2011-03-10 23:33 ` Paul Walmsley 2011-03-10 23:48 ` Kevin Hilman 0 siblings, 1 reply; 11+ messages in thread From: Paul Walmsley @ 2011-03-10 23:33 UTC (permalink / raw) To: Wim Van Sebroeck, khilman Cc: Kalle Jokiniemi, linux-watchdog, linux-omap, tony, jhnikula, ilkka.koskinen Hi Wim, Kevin, On Thu, 10 Mar 2011, Wim Van Sebroeck wrote: > > These patches fix the issue where the wdtimer blocks CORE idle > > transitions on n900 (OMAP3). The root cause was that SMART idle > > mode in wdtimer did not allow the CORE idle transition to happen. > > > > v2: updated commit message on patch 1/2, Cc'd Wim, and added > > comments to code about possible HW bug in wdtimer2. > > > > Wim, please check patch number one and add your acked by. > > > > I propose that we push these upstream via linux-omap-pm, > > as the patches deal with PM and need to be applied together > > to get the desired functionality. > > > > Paul Walmsley (2): > > Watchdog: omap_wdt: add fine grain runtime-pm > > OMAP3: wdtimer: Fix CORE idle transition > > > > arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | 1 + > > drivers/watchdog/omap_wdt.c | 25 +++++++++++++++++++++++-- > > 2 files changed, 24 insertions(+), 2 deletions(-) > > Acked-by: Wim Van Sebroeck <wim@iguana.be> Thanks. > linux-omap-pm is indeed the best tree for getting this upstream. Kevin, do you want to take the drivers/watchdog/omap_wdt.c patch? The first patch is queued in my branch currently. - Paul ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v2 0/2] OMAP3: wdtimer: Fix CORE idle 2011-03-10 23:33 ` Paul Walmsley @ 2011-03-10 23:48 ` Kevin Hilman 2011-03-11 5:13 ` Paul Walmsley 0 siblings, 1 reply; 11+ messages in thread From: Kevin Hilman @ 2011-03-10 23:48 UTC (permalink / raw) To: Paul Walmsley Cc: Wim Van Sebroeck, Kalle Jokiniemi, linux-watchdog, linux-omap, tony, jhnikula, ilkka.koskinen Paul Walmsley <paul@pwsan.com> writes: > Hi Wim, Kevin, > > On Thu, 10 Mar 2011, Wim Van Sebroeck wrote: > >> > These patches fix the issue where the wdtimer blocks CORE idle >> > transitions on n900 (OMAP3). The root cause was that SMART idle >> > mode in wdtimer did not allow the CORE idle transition to happen. >> > >> > v2: updated commit message on patch 1/2, Cc'd Wim, and added >> > comments to code about possible HW bug in wdtimer2. >> > >> > Wim, please check patch number one and add your acked by. >> > >> > I propose that we push these upstream via linux-omap-pm, >> > as the patches deal with PM and need to be applied together >> > to get the desired functionality. >> > >> > Paul Walmsley (2): >> > Watchdog: omap_wdt: add fine grain runtime-pm >> > OMAP3: wdtimer: Fix CORE idle transition >> > >> > arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | 1 + >> > drivers/watchdog/omap_wdt.c | 25 +++++++++++++++++++++++-- >> > 2 files changed, 24 insertions(+), 2 deletions(-) >> >> Acked-by: Wim Van Sebroeck <wim@iguana.be> > > Thanks. > >> linux-omap-pm is indeed the best tree for getting this upstream. > > Kevin, do you want to take the drivers/watchdog/omap_wdt.c patch? The > first patch is queued in my branch currently. Go ahead and merge with the first patch. Acked-by: Kevin Hilman <khilman@ti.com> ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v2 0/2] OMAP3: wdtimer: Fix CORE idle 2011-03-10 23:48 ` Kevin Hilman @ 2011-03-11 5:13 ` Paul Walmsley 0 siblings, 0 replies; 11+ messages in thread From: Paul Walmsley @ 2011-03-11 5:13 UTC (permalink / raw) To: Kevin Hilman Cc: Wim Van Sebroeck, Kalle Jokiniemi, linux-watchdog, linux-omap, tony, jhnikula, ilkka.koskinen On Thu, 10 Mar 2011, Kevin Hilman wrote: > Go ahead and merge with the first patch. > > Acked-by: Kevin Hilman <khilman@ti.com> Done. - Paul ^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2011-03-15 6:58 UTC | newest] Thread overview: 11+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2011-03-10 12:10 [PATCH v2 0/2] OMAP3: wdtimer: Fix CORE idle Kalle Jokiniemi 2011-03-10 12:10 ` [PATCH 1/2] Watchdog: omap_wdt: add fine grain runtime-pm Kalle Jokiniemi 2011-03-10 12:10 ` [PATCH 2/2] OMAP3: wdtimer: Fix CORE idle transition Kalle Jokiniemi 2011-03-10 14:52 ` Paul Walmsley 2011-03-14 10:34 ` kalle.jokiniemi 2011-03-14 19:27 ` Paul Walmsley 2011-03-15 6:57 ` kalle.jokiniemi 2011-03-10 21:55 ` [PATCH v2 0/2] OMAP3: wdtimer: Fix CORE idle Wim Van Sebroeck 2011-03-10 23:33 ` Paul Walmsley 2011-03-10 23:48 ` Kevin Hilman 2011-03-11 5:13 ` Paul Walmsley
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox