* [PATCH 1/3] OMAP: omap_device: fix nsec/usec conversion in latency calculations @ 2009-11-23 17:33 Kevin Hilman 2009-11-23 17:33 ` [PATCH 2/3] OMAP: omap_device: track latency in nanoseconds Kevin Hilman 2009-12-01 12:55 ` [PATCH 1/3] OMAP: omap_device: fix nsec/usec conversion in latency calculations Paul Walmsley 0 siblings, 2 replies; 6+ messages in thread From: Kevin Hilman @ 2009-11-23 17:33 UTC (permalink / raw) To: linux-omap Use usecs = nsecs / NSEC_PER_USEC; instead of usecs = nsecs * NSEC_PER_USEC; Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com> --- arch/arm/plat-omap/omap_device.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/arm/plat-omap/omap_device.c b/arch/arm/plat-omap/omap_device.c index 288fd12..722f2c8 100644 --- a/arch/arm/plat-omap/omap_device.c +++ b/arch/arm/plat-omap/omap_device.c @@ -142,7 +142,7 @@ static int _omap_device_activate(struct omap_device *od, u8 ignore_lat) read_persistent_clock(&b); c = timespec_sub(b, a); - act_lat = timespec_to_ns(&c) * NSEC_PER_USEC; + act_lat = timespec_to_ns(&c) / NSEC_PER_USEC; pr_debug("omap_device: %s: pm_lat %d: activate: elapsed time " "%llu usec\n", od->pdev.name, od->pm_lat_level, @@ -198,7 +198,7 @@ static int _omap_device_deactivate(struct omap_device *od, u8 ignore_lat) read_persistent_clock(&b); c = timespec_sub(b, a); - deact_lat = timespec_to_ns(&c) * NSEC_PER_USEC; + deact_lat = timespec_to_ns(&c) / NSEC_PER_USEC; pr_debug("omap_device: %s: pm_lat %d: deactivate: elapsed time " "%llu usec\n", od->pdev.name, od->pm_lat_level, -- 1.6.5.1 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 2/3] OMAP: omap_device: track latency in nanoseconds 2009-11-23 17:33 [PATCH 1/3] OMAP: omap_device: fix nsec/usec conversion in latency calculations Kevin Hilman @ 2009-11-23 17:33 ` Kevin Hilman 2009-11-23 17:33 ` [PATCH 3/3] OMAP: omap_device: optionally auto-adjust device activate/deactivate latencies Kevin Hilman 2009-12-01 12:55 ` [PATCH 2/3] OMAP: omap_device: track latency in nanoseconds Paul Walmsley 2009-12-01 12:55 ` [PATCH 1/3] OMAP: omap_device: fix nsec/usec conversion in latency calculations Paul Walmsley 1 sibling, 2 replies; 6+ messages in thread From: Kevin Hilman @ 2009-11-23 17:33 UTC (permalink / raw) To: linux-omap Rather than having to do a usecs = nsecs / NSECS_PER_USEC to track latency in usecs, just track it in nanoseconds. Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com> --- arch/arm/plat-omap/include/plat/omap_device.h | 4 ++-- arch/arm/plat-omap/omap_device.c | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/arch/arm/plat-omap/include/plat/omap_device.h b/arch/arm/plat-omap/include/plat/omap_device.h index c504780..3b2f3a6 100644 --- a/arch/arm/plat-omap/include/plat/omap_device.h +++ b/arch/arm/plat-omap/include/plat/omap_device.h @@ -50,8 +50,8 @@ * @pm_lats: ptr to an omap_device_pm_latency table * @pm_lats_cnt: ARRAY_SIZE() of what is passed to @pm_lats * @pm_lat_level: array index of the last odpl entry executed - -1 if never - * @dev_wakeup_lat: dev wakeup latency in microseconds - * @_dev_wakeup_lat_limit: dev wakeup latency limit in usec - set by OMAP PM + * @dev_wakeup_lat: dev wakeup latency in nanoseconds + * @_dev_wakeup_lat_limit: dev wakeup latency limit in nsec - set by OMAP PM * @_state: one of OMAP_DEVICE_STATE_* (see above) * @flags: device flags * diff --git a/arch/arm/plat-omap/omap_device.c b/arch/arm/plat-omap/omap_device.c index 722f2c8..7bf665c 100644 --- a/arch/arm/plat-omap/omap_device.c +++ b/arch/arm/plat-omap/omap_device.c @@ -142,10 +142,10 @@ static int _omap_device_activate(struct omap_device *od, u8 ignore_lat) read_persistent_clock(&b); c = timespec_sub(b, a); - act_lat = timespec_to_ns(&c) / NSEC_PER_USEC; + act_lat = timespec_to_ns(&c); pr_debug("omap_device: %s: pm_lat %d: activate: elapsed time " - "%llu usec\n", od->pdev.name, od->pm_lat_level, + "%llu nsec\n", od->pdev.name, od->pm_lat_level, act_lat); WARN(act_lat > odpl->activate_lat, "omap_device: %s.%d: " @@ -198,10 +198,10 @@ static int _omap_device_deactivate(struct omap_device *od, u8 ignore_lat) read_persistent_clock(&b); c = timespec_sub(b, a); - deact_lat = timespec_to_ns(&c) / NSEC_PER_USEC; + deact_lat = timespec_to_ns(&c); pr_debug("omap_device: %s: pm_lat %d: deactivate: elapsed time " - "%llu usec\n", od->pdev.name, od->pm_lat_level, + "%llu nsec\n", od->pdev.name, od->pm_lat_level, deact_lat); WARN(deact_lat > odpl->deactivate_lat, "omap_device: %s.%d: " -- 1.6.5.1 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 3/3] OMAP: omap_device: optionally auto-adjust device activate/deactivate latencies 2009-11-23 17:33 ` [PATCH 2/3] OMAP: omap_device: track latency in nanoseconds Kevin Hilman @ 2009-11-23 17:33 ` Kevin Hilman 2009-11-23 18:35 ` Kevin Hilman 2009-12-01 12:55 ` [PATCH 2/3] OMAP: omap_device: track latency in nanoseconds Paul Walmsley 1 sibling, 1 reply; 6+ messages in thread From: Kevin Hilman @ 2009-11-23 17:33 UTC (permalink / raw) To: linux-omap First, this patch adds new worst-case latency values to the omap_device_pm_latency struct. Here the worst-case measured latencies for the activate and deactivate hooks are stored. In addition, add an option to auto-adjust the latency values used for device activate/deactivate. By setting a new 'OMAP_DEVICE_LATENCY_AUTO_ADJUST' flag in the omap_device_pm_latency struct, the omap_device layer automatically adjusts the activate/deactivate latencies to the worst-case measured values. Anytime a new worst-case value is found, it is printed to the console. Here is an example log during boot using UART2 s an example. After boot, the OPP is manually changed to the 125MHz OPP: [...] Freeing init memory: 128K omap_device: serial8250.2: new worst case deactivate latency 0: 30517 omap_device: serial8250.2: new worst case activate latency 0: 30517 omap_device: serial8250.2: new worst case activate latency 0: 218139648 omap_device: serial8250.2: new worst case deactivate latency 0: 61035 omap_device: serial8250.2: new worst case activate latency 0: 278076171 omap_device: serial8250.2: new worst case activate latency 0: 298614501 omap_device: serial8250.2: new worst case activate latency 0: 327331542 / # echo 125000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed omap_device: serial8250.2: new worst case deactivate latency 0: 91552 Motivation: this can be used as a technique to automatically determine the worst case latency values. The current method of printing a warning on every violation is too noisy to actually interact the console in order to set low OPP to discover latencies. Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com> --- arch/arm/plat-omap/include/plat/omap_device.h | 4 ++ arch/arm/plat-omap/omap_device.c | 41 ++++++++++++++++++++----- 2 files changed, 37 insertions(+), 8 deletions(-) diff --git a/arch/arm/plat-omap/include/plat/omap_device.h b/arch/arm/plat-omap/include/plat/omap_device.h index 3b2f3a6..e0634fe 100644 --- a/arch/arm/plat-omap/include/plat/omap_device.h +++ b/arch/arm/plat-omap/include/plat/omap_device.h @@ -132,11 +132,15 @@ int omap_device_enable_clocks(struct omap_device *od); */ struct omap_device_pm_latency { u32 deactivate_lat; + u32 deactivate_lat_worst; int (*deactivate_func)(struct omap_device *od); u32 activate_lat; + u32 activate_lat_worst; int (*activate_func)(struct omap_device *od); + u32 flags; }; +#define OMAP_DEVICE_LATENCY_AUTO_ADJUST BIT(1) /* Get omap_device pointer from platform_device pointer */ #define to_omap_device(x) container_of((x), struct omap_device, pdev) diff --git a/arch/arm/plat-omap/omap_device.c b/arch/arm/plat-omap/omap_device.c index 7bf665c..8ba12a6 100644 --- a/arch/arm/plat-omap/omap_device.c +++ b/arch/arm/plat-omap/omap_device.c @@ -148,10 +148,22 @@ static int _omap_device_activate(struct omap_device *od, u8 ignore_lat) "%llu nsec\n", od->pdev.name, od->pm_lat_level, act_lat); - WARN(act_lat > odpl->activate_lat, "omap_device: %s.%d: " - "activate step %d took longer than expected (%llu > %d)\n", - od->pdev.name, od->pdev.id, od->pm_lat_level, - act_lat, odpl->activate_lat); + if (act_lat > odpl->activate_lat) { + odpl->activate_lat_worst = act_lat; + if (odpl->flags & OMAP_DEVICE_LATENCY_AUTO_ADJUST) { + odpl->activate_lat = act_lat; + pr_warning("omap_device: %s.%d: new worst case " + "activate latency %d: %llu\n", + od->pdev.name, od->pdev.id, + od->pm_lat_level, act_lat); + } else + pr_warning("omap_device: %s.%d: activate " + "latency %d higher than exptected. " + "(%llu > %d)\n", + od->pdev.name, od->pdev.id, + od->pm_lat_level, act_lat, + odpl->activate_lat); + } od->dev_wakeup_lat -= odpl->activate_lat; } @@ -204,10 +216,23 @@ static int _omap_device_deactivate(struct omap_device *od, u8 ignore_lat) "%llu nsec\n", od->pdev.name, od->pm_lat_level, deact_lat); - WARN(deact_lat > odpl->deactivate_lat, "omap_device: %s.%d: " - "deactivate step %d took longer than expected " - "(%llu > %d)\n", od->pdev.name, od->pdev.id, - od->pm_lat_level, deact_lat, odpl->deactivate_lat); + if (deact_lat > odpl->deactivate_lat) { + odpl->deactivate_lat_worst = deact_lat; + if (odpl->flags & OMAP_DEVICE_LATENCY_AUTO_ADJUST) { + odpl->deactivate_lat = deact_lat; + pr_warning("omap_device: %s.%d: new worst case " + "deactivate latency %d: %llu\n", + od->pdev.name, od->pdev.id, + od->pm_lat_level, deact_lat); + } else + pr_warning("omap_device: %s.%d: deactivate " + "latency %d higher than exptected. " + "(%llu > %d)\n", + od->pdev.name, od->pdev.id, + od->pm_lat_level, deact_lat, + odpl->deactivate_lat); + } + od->dev_wakeup_lat += odpl->activate_lat; -- 1.6.5.1 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 3/3] OMAP: omap_device: optionally auto-adjust device activate/deactivate latencies 2009-11-23 17:33 ` [PATCH 3/3] OMAP: omap_device: optionally auto-adjust device activate/deactivate latencies Kevin Hilman @ 2009-11-23 18:35 ` Kevin Hilman 0 siblings, 0 replies; 6+ messages in thread From: Kevin Hilman @ 2009-11-23 18:35 UTC (permalink / raw) To: linux-omap Kevin Hilman wrote: > First, this patch adds new worst-case latency values to the > omap_device_pm_latency struct. Here the worst-case measured latencies > for the activate and deactivate hooks are stored. > > In addition, add an option to auto-adjust the latency values used for > device activate/deactivate. > > By setting a new 'OMAP_DEVICE_LATENCY_AUTO_ADJUST' flag in the > omap_device_pm_latency struct, the omap_device layer automatically > adjusts the activate/deactivate latencies to the worst-case measured > values. > > Anytime a new worst-case value is found, it is printed to the console. > Here is an example log during boot using UART2 s an example. After > boot, the OPP is manually changed to the 125MHz OPP: > > [...] > Freeing init memory: 128K > omap_device: serial8250.2: new worst case deactivate latency 0: 30517 > omap_device: serial8250.2: new worst case activate latency 0: 30517 > omap_device: serial8250.2: new worst case activate latency 0: 218139648 > omap_device: serial8250.2: new worst case deactivate latency 0: 61035 > omap_device: serial8250.2: new worst case activate latency 0: 278076171 > omap_device: serial8250.2: new worst case activate latency 0: 298614501 > omap_device: serial8250.2: new worst case activate latency 0: 327331542 > > / # echo 125000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed > > omap_device: serial8250.2: new worst case deactivate latency 0: 91552 > > Motivation: this can be used as a technique to automatically determine > the worst case latency values. The current method of printing a > warning on every violation is too noisy to actually interact the > console in order to set low OPP to discover latencies. Another motivation for this patch is that the activate/deactivate latenices can vary depending on the idlemode of the device. While working on the UART I noticed that when using no-idle, the activate latencies were as high as several hundred msecs as shown above. When the UARTs are in smart-idle, the max latency is well under 100 usecs. Kevin ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 2/3] OMAP: omap_device: track latency in nanoseconds 2009-11-23 17:33 ` [PATCH 2/3] OMAP: omap_device: track latency in nanoseconds Kevin Hilman 2009-11-23 17:33 ` [PATCH 3/3] OMAP: omap_device: optionally auto-adjust device activate/deactivate latencies Kevin Hilman @ 2009-12-01 12:55 ` Paul Walmsley 1 sibling, 0 replies; 6+ messages in thread From: Paul Walmsley @ 2009-12-01 12:55 UTC (permalink / raw) To: Kevin Hilman; +Cc: linux-omap On Mon, 23 Nov 2009, Kevin Hilman wrote: > Rather than having to do a usecs = nsecs / NSECS_PER_USEC to > track latency in usecs, just track it in nanoseconds. > > Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com> Thanks, looks good. Will queue this up with the rest of the hwmod patches for .33. - Paul ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 1/3] OMAP: omap_device: fix nsec/usec conversion in latency calculations 2009-11-23 17:33 [PATCH 1/3] OMAP: omap_device: fix nsec/usec conversion in latency calculations Kevin Hilman 2009-11-23 17:33 ` [PATCH 2/3] OMAP: omap_device: track latency in nanoseconds Kevin Hilman @ 2009-12-01 12:55 ` Paul Walmsley 1 sibling, 0 replies; 6+ messages in thread From: Paul Walmsley @ 2009-12-01 12:55 UTC (permalink / raw) To: Kevin Hilman; +Cc: linux-omap On Mon, 23 Nov 2009, Kevin Hilman wrote: > Use > > usecs = nsecs / NSEC_PER_USEC; > > instead of > > usecs = nsecs * NSEC_PER_USEC; > > Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com> Thanks, looks good. Will queue this up with the rest of the hwmod patches for .33. - Paul ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2009-12-01 12:55 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2009-11-23 17:33 [PATCH 1/3] OMAP: omap_device: fix nsec/usec conversion in latency calculations Kevin Hilman 2009-11-23 17:33 ` [PATCH 2/3] OMAP: omap_device: track latency in nanoseconds Kevin Hilman 2009-11-23 17:33 ` [PATCH 3/3] OMAP: omap_device: optionally auto-adjust device activate/deactivate latencies Kevin Hilman 2009-11-23 18:35 ` Kevin Hilman 2009-12-01 12:55 ` [PATCH 2/3] OMAP: omap_device: track latency in nanoseconds Paul Walmsley 2009-12-01 12:55 ` [PATCH 1/3] OMAP: omap_device: fix nsec/usec conversion in latency calculations Paul Walmsley
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.