summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/xe/display/xe_panic.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/xe/display/xe_panic.c')
-rw-r--r--drivers/gpu/drm/xe/display/xe_panic.c26
1 files changed, 16 insertions, 10 deletions
diff --git a/drivers/gpu/drm/xe/display/xe_panic.c b/drivers/gpu/drm/xe/display/xe_panic.c
index bebb21d617f0..12c6fb99015d 100644
--- a/drivers/gpu/drm/xe/display/xe_panic.c
+++ b/drivers/gpu/drm/xe/display/xe_panic.c
@@ -5,8 +5,6 @@
#include <drm/drm_panic.h>
#include <drm/intel/display_parent_interface.h>
-#include "intel_display_types.h"
-#include "intel_fb.h"
#include "xe_bo.h"
#include "xe_panic.h"
#include "xe_res_cursor.h"
@@ -16,6 +14,9 @@ struct intel_panic {
struct iosys_map vmap;
int page;
+
+ struct xe_bo *bo;
+ unsigned int (*tiling)(unsigned int x, unsigned int y, unsigned int width);
};
static void xe_panic_kunmap(struct intel_panic *panic)
@@ -36,14 +37,13 @@ static void xe_panic_kunmap(struct intel_panic *panic)
static void xe_panic_page_set_pixel(struct drm_scanout_buffer *sb, unsigned int x,
unsigned int y, u32 color)
{
- struct intel_framebuffer *fb = (struct intel_framebuffer *)sb->private;
- struct intel_panic *panic = fb->panic;
- struct xe_bo *bo = gem_to_xe_bo(intel_fb_bo(&fb->base));
+ struct intel_panic *panic = sb->private;
+ struct xe_bo *bo = panic->bo;
unsigned int new_page;
unsigned int offset;
- if (fb->panic_tiling)
- offset = fb->panic_tiling(sb->width, x, y);
+ if (panic->tiling)
+ offset = panic->tiling(sb->width, x, y);
else
offset = y * sb->pitch[0] + x * sb->format->cpp[0];
@@ -84,16 +84,22 @@ static struct intel_panic *xe_panic_alloc(void)
return panic;
}
-static int xe_panic_setup(struct intel_panic *panic, struct drm_scanout_buffer *sb)
+static int xe_panic_setup(struct intel_panic *panic, struct drm_scanout_buffer *sb,
+ struct drm_gem_object *obj,
+ unsigned int (*tiling)(unsigned int x, unsigned int y, unsigned int width))
{
- struct intel_framebuffer *fb = (struct intel_framebuffer *)sb->private;
- struct xe_bo *bo = gem_to_xe_bo(intel_fb_bo(&fb->base));
+ struct xe_bo *bo = gem_to_xe_bo(obj);
if (xe_bo_is_vram(bo) && !xe_bo_is_visible_vram(bo))
return -ENODEV;
panic->page = -1;
+ panic->bo = bo;
+ panic->tiling = tiling;
+
+ sb->private = panic;
sb->set_pixel = xe_panic_page_set_pixel;
+
return 0;
}