Commit ff992dbf authored by Jani Nikula's avatar Jani Nikula
Browse files

drm/i915/display: add intel_bo_get/set_frontbuffer() and use them

parent 63db15fe
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -3,6 +3,7 @@

#include "gem/i915_gem_mman.h"
#include "gem/i915_gem_object.h"
#include "gem/i915_gem_object_frontbuffer.h"
#include "intel_bo.h"

bool intel_bo_is_tiled(struct drm_gem_object *obj)
@@ -39,3 +40,14 @@ int intel_bo_read_from_page(struct drm_gem_object *obj, u64 offset, void *dst, i
{
	return i915_gem_object_read_from_page(to_intel_bo(obj), offset, dst, size);
}

struct intel_frontbuffer *intel_bo_get_frontbuffer(struct drm_gem_object *obj)
{
	return i915_gem_object_get_frontbuffer(to_intel_bo(obj));
}

struct intel_frontbuffer *intel_bo_set_frontbuffer(struct drm_gem_object *obj,
						   struct intel_frontbuffer *front)
{
	return i915_gem_object_set_frontbuffer(to_intel_bo(obj), front);
}
+4 −0
Original line number Diff line number Diff line
@@ -17,4 +17,8 @@ void intel_bo_flush_if_display(struct drm_gem_object *obj);
int intel_bo_fb_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma);
int intel_bo_read_from_page(struct drm_gem_object *obj, u64 offset, void *dst, int size);

struct intel_frontbuffer *intel_bo_get_frontbuffer(struct drm_gem_object *obj);
struct intel_frontbuffer *intel_bo_set_frontbuffer(struct drm_gem_object *obj,
						   struct intel_frontbuffer *front);

#endif /* __INTEL_BO__ */
+4 −3
Original line number Diff line number Diff line
@@ -59,6 +59,7 @@
#include "gem/i915_gem_object_types.h"
#include "i915_active.h"
#include "i915_drv.h"
#include "intel_bo.h"
#include "intel_display_trace.h"
#include "intel_display_types.h"
#include "intel_dp.h"
@@ -266,7 +267,7 @@ static void frontbuffer_release(struct kref *ref)

	i915_ggtt_clear_scanout(obj);

	ret = i915_gem_object_set_frontbuffer(obj, NULL);
	ret = intel_bo_set_frontbuffer(intel_bo_to_drm_bo(obj), NULL);
	drm_WARN_ON(&intel_bo_to_i915(obj)->drm, ret);
	spin_unlock(&intel_bo_to_i915(obj)->display.fb_tracking.lock);

@@ -280,7 +281,7 @@ intel_frontbuffer_get(struct drm_i915_gem_object *obj)
	struct drm_i915_private *i915 = intel_bo_to_i915(obj);
	struct intel_frontbuffer *front, *cur;

	front = i915_gem_object_get_frontbuffer(obj);
	front = intel_bo_get_frontbuffer(intel_bo_to_drm_bo(obj));
	if (front)
		return front;

@@ -298,7 +299,7 @@ intel_frontbuffer_get(struct drm_i915_gem_object *obj)
	INIT_WORK(&front->flush_work, intel_frontbuffer_flush_work);

	spin_lock(&i915->display.fb_tracking.lock);
	cur = i915_gem_object_set_frontbuffer(obj, front);
	cur = intel_bo_set_frontbuffer(intel_bo_to_drm_bo(obj), front);
	spin_unlock(&i915->display.fb_tracking.lock);
	if (cur != front)
		kfree(front);
+11 −0
Original line number Diff line number Diff line
@@ -66,3 +66,14 @@ int intel_bo_read_from_page(struct drm_gem_object *obj, u64 offset, void *dst, i
	xe_bo_unlock(bo);
	return ret;
}

struct intel_frontbuffer *intel_bo_get_frontbuffer(struct drm_gem_object *obj)
{
	return NULL;
}

struct intel_frontbuffer *intel_bo_set_frontbuffer(struct drm_gem_object *obj,
						   struct intel_frontbuffer *front)
{
	return front;
}