drm/i915: Document CxSR
Add some documentation explaining what CxSR actually is. Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Link: http://patchwork.freedesktop.org/patch/msgid/20170421181432.15216-7-ville.syrjala@linux.intel.com Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
This commit is contained in:
@@ -386,6 +386,43 @@ static bool _intel_set_memory_cxsr(struct drm_i915_private *dev_priv, bool enabl
|
||||
return was_enabled;
|
||||
}
|
||||
|
||||
/**
|
||||
* intel_set_memory_cxsr - Configure CxSR state
|
||||
* @dev_priv: i915 device
|
||||
* @enable: Allow vs. disallow CxSR
|
||||
*
|
||||
* Allow or disallow the system to enter a special CxSR
|
||||
* (C-state self refresh) state. What typically happens in CxSR mode
|
||||
* is that several display FIFOs may get combined into a single larger
|
||||
* FIFO for a particular plane (so called max FIFO mode) to allow the
|
||||
* system to defer memory fetches longer, and the memory will enter
|
||||
* self refresh.
|
||||
*
|
||||
* Note that enabling CxSR does not guarantee that the system enter
|
||||
* this special mode, nor does it guarantee that the system stays
|
||||
* in that mode once entered. So this just allows/disallows the system
|
||||
* to autonomously utilize the CxSR mode. Other factors such as core
|
||||
* C-states will affect when/if the system actually enters/exits the
|
||||
* CxSR mode.
|
||||
*
|
||||
* Note that on VLV/CHV this actually only controls the max FIFO mode,
|
||||
* and the system is free to enter/exit memory self refresh at any time
|
||||
* even when the use of CxSR has been disallowed.
|
||||
*
|
||||
* While the system is actually in the CxSR/max FIFO mode, some plane
|
||||
* control registers will not get latched on vblank. Thus in order to
|
||||
* guarantee the system will respond to changes in the plane registers
|
||||
* we must always disallow CxSR prior to making changes to those registers.
|
||||
* Unfortunately the system will re-evaluate the CxSR conditions at
|
||||
* frame start which happens after vblank start (which is when the plane
|
||||
* registers would get latched), so we can't proceed with the plane update
|
||||
* during the same frame where we disallowed CxSR.
|
||||
*
|
||||
* Certain platforms also have a deeper HPLL SR mode. Fortunately the
|
||||
* HPLL SR mode depends on CxSR itself, so we don't have to hand hold
|
||||
* the hardware w.r.t. HPLL SR when writing to plane registers.
|
||||
* Disallowing just CxSR is sufficient.
|
||||
*/
|
||||
bool intel_set_memory_cxsr(struct drm_i915_private *dev_priv, bool enable)
|
||||
{
|
||||
bool ret;
|
||||
|
Reference in New Issue
Block a user