Commit 45a321a7 authored by Ville Syrjälä's avatar Ville Syrjälä
Browse files

drm/i915/fbc: Embed the compressed_llb node



Not much point in dynamically allocating the line length
buffer mm node that I can see. Just embed it directly like
we do the for the cfb node. One less failure point to worry
about.

Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20210610183237.3920-4-ville.syrjala@linux.intel.com


Reviewed-by: default avatarJosé Roberto de Souza <jose.souza@intel.com>
parent 5826d9f2
Loading
Loading
Loading
Loading
+9 −20
Original line number Diff line number Diff line
@@ -489,11 +489,12 @@ static int intel_fbc_alloc_cfb(struct drm_i915_private *dev_priv,
			       unsigned int size, unsigned int fb_cpp)
{
	struct intel_fbc *fbc = &dev_priv->fbc;
	struct drm_mm_node *compressed_llb;
	int ret;

	drm_WARN_ON(&dev_priv->drm,
		    drm_mm_node_allocated(&fbc->compressed_fb));
	drm_WARN_ON(&dev_priv->drm,
		    drm_mm_node_allocated(&fbc->compressed_llb));

	ret = find_compression_limit(dev_priv, &fbc->compressed_fb,
				     size, fb_cpp);
@@ -507,16 +508,10 @@ static int intel_fbc_alloc_cfb(struct drm_i915_private *dev_priv,
	fbc->limit = ret;

	if (DISPLAY_VER(dev_priv) < 5 && !IS_G4X(dev_priv)) {
		compressed_llb = kzalloc(sizeof(*compressed_llb), GFP_KERNEL);
		if (!compressed_llb)
			goto err_fb;

		ret = i915_gem_stolen_insert_node(dev_priv, compressed_llb,
		ret = i915_gem_stolen_insert_node(dev_priv, &fbc->compressed_llb,
						  4096, 4096);
		if (ret)
			goto err_fb;

		fbc->compressed_llb = compressed_llb;
	}

	drm_dbg_kms(&dev_priv->drm,
@@ -526,7 +521,6 @@ static int intel_fbc_alloc_cfb(struct drm_i915_private *dev_priv,
	return 0;

err_fb:
	kfree(compressed_llb);
	i915_gem_stolen_remove_node(dev_priv, &fbc->compressed_fb);
err_llb:
	if (drm_mm_initialized(&dev_priv->mm.stolen))
@@ -549,13 +543,13 @@ static void intel_fbc_program_cfb(struct drm_i915_private *dev_priv)
						 fbc->compressed_fb.start,
						 U32_MAX));
		GEM_BUG_ON(range_overflows_end_t(u64, dev_priv->dsm.start,
						 fbc->compressed_llb->start,
						 fbc->compressed_llb.start,
						 U32_MAX));

		intel_de_write(dev_priv, FBC_CFB_BASE,
			       dev_priv->dsm.start + fbc->compressed_fb.start);
		intel_de_write(dev_priv, FBC_LL_BASE,
			       dev_priv->dsm.start + fbc->compressed_llb->start);
			       dev_priv->dsm.start + fbc->compressed_llb.start);
	}
}

@@ -566,14 +560,9 @@ static void __intel_fbc_cleanup_cfb(struct drm_i915_private *dev_priv)
	if (WARN_ON(intel_fbc_hw_is_active(dev_priv)))
		return;

	if (!drm_mm_node_allocated(&fbc->compressed_fb))
		return;

	if (fbc->compressed_llb) {
		i915_gem_stolen_remove_node(dev_priv, fbc->compressed_llb);
		kfree(fbc->compressed_llb);
	}

	if (drm_mm_node_allocated(&fbc->compressed_llb))
		i915_gem_stolen_remove_node(dev_priv, &fbc->compressed_llb);
	if (drm_mm_node_allocated(&fbc->compressed_fb))
		i915_gem_stolen_remove_node(dev_priv, &fbc->compressed_fb);
}

+1 −1
Original line number Diff line number Diff line
@@ -350,7 +350,7 @@ struct intel_fbc {
	struct intel_crtc *crtc;

	struct drm_mm_node compressed_fb;
	struct drm_mm_node *compressed_llb;
	struct drm_mm_node compressed_llb;

	u8 limit;