Proceedings of the PM SW Workshop Jun 2010

From OMAPpedia

(Difference between revisions)
Jump to: navigation, search
Line 56: Line 56:
* More to be added as identified during discussions
* More to be added as identified during discussions
-
===Minutes===
+
===Minutes & Action Items===
* Aligned on all the discussions and PPT presented by Benoit & Rajendra
* Aligned on all the discussions and PPT presented by Benoit & Rajendra
* Aligned on Latency measurements; need to identify the resources to do it  
* Aligned on Latency measurements; need to identify the resources to do it  
Line 176: Line 176:
       pwrdm_set_next_pwrst (pwrdm, new_state); // existing function to program next state
       pwrdm_set_next_pwrst (pwrdm, new_state); // existing function to program next state
  }
  }
 +
 +
===Minutes & Action Items===
 +
* Use device wakeup latency instead of device latency.
 +
* Need to start pursuing the HW team to provide wakeup latency numbers – this is a very much needed in the long run; and it is needed for complete entitlement of HW PM features by the SW
 +
* Aligned on Vibhore’s proposal + comments provided during the meeting (e.g. structures suggested by Paul during meeting); Vibhore can go ahead with the implementation
 +
 +
.wakeuplat = {
 +
    [FUNC-PWRST-OFF] = 50,
 +
    [FUNC-PWRST-OSWR] = 30,
 +
  [FUNC-PWRST-CSWR] = 5,
 +
  [FUNC-PWRST-ON] = 0,
 +
};
 +
.func_pwrsts = (FUNC_PWRST_OFF | FUNC_PWRST_OSWR | FUNC_PWRST_CSWR |  FUNC_PWRST_ON)
 +
1 << FUNC_PWRST_OFF
 +
pwrdm_wakelat_set_constraint
 +
pwrdm_wakeuplat_remove_constraint
 +
pwrdm_wakeuplat_update_pwrst)
 +
 +
* The open question is how we measure the latencies and who will do it.
 +
 +
 +
 +
==General Minutes and Action Items==
 +
* There is need to have more meetings between maintainers (Paul, Kevin, Tony) and the key HW IP designers for the following reasons
 +
** For HW designers to understand how “hacks” or “one of cases” negatively impact Linux SW design (making it complex and difficult to manage)
 +
** For maintainers to better understand constraints of HW design so that they can suggest a better SW modeling solution

Revision as of 10:34, 11 June 2010

This wikipage contains proceedings of the PM SW Workshop held in Bangalore on 7-11 Jun, 2010

Contents

HWMOD Framework Enhancements

Reset Management Support in HWMOD

More Granular HWMOD Structures

Multi-level omap_device_idle

Placeholder for patches from Vibhore to support device latency contraint

Access to HWMOD Internal Data

Miscellaneous Issues

Minutes & Action Items


Power Domain And Clock Domain Cleanup

Aligned on the following two phase approach


SRF Replacement - Constraints Part

Types of Latency Constraints

Details of Interrupt Latency

Details of Device Latency

Proposed Implementation

void omap_pm_set_max_dev_wakeup_lat(struct device *dev, long t)
{
	/*  existing code */	
	1. Look for devices’ power domain (might be multiple step if starting  with general device)
	2. Use device name as identifier for constraint request

	if (t == -1)
		pwrdm_release_wakeup_lat_constraint (pwrdm, lat_dev_name);
	else
		 pwrdm_set_wakeup_lat_constraint (pwrdm, lat_dev_name, t);
}
struct powerdomain {
/* existing entries*/
const u32 wakeup_lat[PWRDM_MAX_PWRSTS-1];
static LIST_HEAD(wakeup_lat_constraint_list);
} 
static struct powerdomain core_44xx_pwrdm = {
.wakeup_lat = {
50,   /* off */
20,   /* ret */ -1 for not supported power state
0,     /* inactive */ Do we have to worry about OSWR?
}
}
pwrdm_set_wakeup_lat_constraint (struct powerdomain *pwrdm, char *lat_dev_name, long lat_us){
	1. If new constraint, add a new entry to wakeup_lat_constraint_list
	2. If already existing, update entries’ latency value
	3. pwrdm_check_for_state_change (pwrdm)
} 
pwrdm_release_wakeup_lat_constraint (struct powerdomain *pwrdm, char   *lat_dev_name){
	1. Remove this devices’ constraint from wakeup_lat_constraint_list
	2. pwrdm_check_for_state_change (pwrdm)
}
pwrdm_check_for_state_change (struct powerdomain *pwrdm){
	1. min_latency = find_min_wakeup_latency_constraint (pwrdm) 
		 //go through the list for minimum latency value
	2. find power state that has latency lower than minimum constraint
		 for (new_state = 0x0; new_state < PWRDM_MAX_PWRSTS; new_state++){
		    if (pwrdm->wakeup_lat[i] < min_latency) break;
		}
	3.  if (pwrdm->state != new_state)
 		    pwrdm_set_next_pwrst (pwrdm, new_state); // existing function to program next state
}

Minutes & Action Items

.wakeuplat = {
    [FUNC-PWRST-OFF] = 50,
   [FUNC-PWRST-OSWR] = 30,
  [FUNC-PWRST-CSWR] = 5,
  [FUNC-PWRST-ON] = 0,
};
.func_pwrsts = (FUNC_PWRST_OFF | FUNC_PWRST_OSWR | FUNC_PWRST_CSWR |   FUNC_PWRST_ON)
1 << FUNC_PWRST_OFF
pwrdm_wakelat_set_constraint
pwrdm_wakeuplat_remove_constraint
pwrdm_wakeuplat_update_pwrst)


General Minutes and Action Items

Personal tools
Namespaces
Variants
Actions
Navigation
Toolbox