[PATCH v2 3/7] OMAP: PM CONSTRAINTS: implement wake-up latency constraints

Kevin Hilman khilman at ti.com
Thu Mar 17 16:18:41 EDT 2011


Jean Pihet <jean.pihet at newoldbits.com> writes:

> 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 <j-pihet at ti.com>
> ---
>  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



More information about the linux-arm-kernel mailing list