[PATCH v2 3/7] OMAP: PM CONSTRAINTS: implement wake-up latency constraints
From: Kevin Hilman <hidden>
Date: 2011-03-17 20:18:41
Also in:
linux-omap
Jean Pihet [off-list ref] writes:
quoted hunk
Implement the wake-up latency constraints using an internal unified function _set_dev_constraint at OMAP PM level, which calls the corresponding function at omap device level. The actual constraints management code is at the omap device level. Note: the bus throughput function is implemented but currently is a no-op. Tested on OMAP3 Beagleboard in RET/OFF using wake-up latency constraints on MPU, CORE and PER. Signed-off-by: Jean Pihet <redacted> --- arch/arm/plat-omap/omap-pm-constraints.c | 174 ++++++++++++++++-------------- 1 files changed, 91 insertions(+), 83 deletions(-)diff --git a/arch/arm/plat-omap/omap-pm-constraints.c b/arch/arm/plat-omap/omap-pm-constraints.c index c8b4e4c..c6735da 100644 --- a/arch/arm/plat-omap/omap-pm-constraints.c +++ b/arch/arm/plat-omap/omap-pm-constraints.c@@ -24,6 +24,7 @@ /* Interface documentation is in mach/omap-pm.h */ #include <plat/omap-pm.h> #include <plat/omap_device.h> +#include <plat/common.h> static bool off_mode_enabled; static u32 dummy_context_loss_counter;@@ -32,119 +33,126 @@ static u32 dummy_context_loss_counter; * Device-driver-originated constraints (via board-*.c files) */ -int omap_pm_set_max_mpu_wakeup_lat(struct device *dev, long t) +/* + * Generic function to omap_device layer for the constraints API. + */ +static int _set_dev_constraint(enum omap_pm_constraint_class class, + struct device *req_dev, struct device *dev, + long t) { - if (!dev || t < -1) { + int ret = 0; + + if (!req_dev || !dev || t < -1) { WARN(1, "OMAP PM: %s: invalid parameter(s)", __func__); return -EINVAL; - }; - - if (t == -1) - pr_debug("OMAP PM: remove max MPU wakeup latency constraint: " - "dev %s\n", dev_name(dev)); - else - pr_debug("OMAP PM: add max MPU wakeup latency constraint: " - "dev %s, t = %ld usec\n", dev_name(dev), t); + } - /* - * For current Linux, this needs to map the MPU to a - * powerdomain, then go through the list of current max lat - * constraints on the MPU and find the smallest. If - * the latency constraint has changed, the code should - * recompute the state to enter for the next powerdomain - * state. - * - * TI CDP code can call constraint_set here. - */ + /* Try to catch non omap_device for dev */
comment should be 'only valid for omap_devices'
+ if (dev->parent == &omap_device_parent) {
+ if (t == -1)
+ pr_debug("OMAP PM: remove constraint of class %d "
+ "from req_dev %s on dev %s\n",
+ class, dev_name(req_dev), dev_name(dev));
+ else
+ pr_debug("OMAP PM: add constraint of class %d "
+ "from req_dev %s on dev %s, t = %ld\n",
+ class, dev_name(req_dev), dev_name(dev), t);
+
+ /* Call the omap_device API */comment not needed
+ ret = omap_device_set_dev_constraint(class, req_dev, dev, t);
Calling a function which doesn't yet exist. Patches should be ordered such that the kernel still compiles after each patch.
+ } else {
+ pr_err("OMAP-PM set_wakeup_lat: Error: platform device "
+ "not valid\n");comment should be 'Error: not an omap_device'.
+ return -EINVAL; + } - return 0; + return ret; }
Kevin