Commit edc0fdbb authored by Ben Widawsky's avatar Ben Widawsky Committed by Jani Nikula

drm/i915: Extract CFB threshold calculation

Right now, there is no threshold (0 means fail, 1 means 1:1 compression
limit). This is to split the function/non-functional change of the next
patch.

The next patch will start to attempt to reduce the amount of CFB space
we need for dire situations. It will be contained within this function.
Signed-off-by: default avatarBen Widawsky <ben@bwidawsk.net>
Reviewed-by: default avatarRodrigo Vivi <rodrigo.vivi@intel.com>
Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
parent c4213885
...@@ -103,22 +103,36 @@ static unsigned long i915_stolen_to_physical(struct drm_device *dev) ...@@ -103,22 +103,36 @@ static unsigned long i915_stolen_to_physical(struct drm_device *dev)
return base; return base;
} }
static int i915_setup_compression(struct drm_device *dev, int size) static int find_compression_threshold(struct drm_device *dev,
struct drm_mm_node *node,
int size)
{ {
struct drm_i915_private *dev_priv = dev->dev_private; struct drm_i915_private *dev_priv = dev->dev_private;
struct drm_mm_node *uninitialized_var(compressed_llb); const int compression_threshold = 1;
int ret; int ret;
/* Try to over-allocate to reduce reallocations and fragmentation */ /* Try to over-allocate to reduce reallocations and fragmentation */
ret = drm_mm_insert_node(&dev_priv->mm.stolen, ret = drm_mm_insert_node(&dev_priv->mm.stolen, node,
&dev_priv->fbc.compressed_fb,
size <<= 1, 4096, DRM_MM_SEARCH_DEFAULT); size <<= 1, 4096, DRM_MM_SEARCH_DEFAULT);
if (ret) if (ret)
ret = drm_mm_insert_node(&dev_priv->mm.stolen, ret = drm_mm_insert_node(&dev_priv->mm.stolen, node,
&dev_priv->fbc.compressed_fb,
size >>= 1, 4096, size >>= 1, 4096,
DRM_MM_SEARCH_DEFAULT); DRM_MM_SEARCH_DEFAULT);
if (ret) if (ret)
return 0;
else
return compression_threshold;
}
static int i915_setup_compression(struct drm_device *dev, int size)
{
struct drm_i915_private *dev_priv = dev->dev_private;
struct drm_mm_node *uninitialized_var(compressed_llb);
int ret;
ret = find_compression_threshold(dev, &dev_priv->fbc.compressed_fb,
size);
if (!ret)
goto err_llb; goto err_llb;
if (HAS_PCH_SPLIT(dev)) if (HAS_PCH_SPLIT(dev))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment