mirror of
https://github.com/torvalds/linux.git
synced 2026-05-28 09:04:39 +02:00
drm/i915: Add intel_bo_alloc_framebuffer()
Encapsulate the struct intel_framebuffer into an xe_framebuffer or i915_framebuffer, and allow to add specific fields for each variant for the panic use-case. This is particularly needed to have a struct xe_res_cursor available to support drm panic on discrete GPU. Signed-off-by: Jocelyn Falempe <jfalempe@redhat.com> Link: https://lore.kernel.org/r/20250624091501.257661-7-jfalempe@redhat.com Signed-off-by: Maarten Lankhorst <dev@lankhorst.se>
This commit is contained in:
parent
718370ff28
commit
da091afacb
|
|
@ -15,6 +15,7 @@
|
|||
#include "i9xx_plane.h"
|
||||
#include "i9xx_plane_regs.h"
|
||||
#include "intel_atomic.h"
|
||||
#include "intel_bo.h"
|
||||
#include "intel_de.h"
|
||||
#include "intel_display_irq.h"
|
||||
#include "intel_display_regs.h"
|
||||
|
|
@ -1174,7 +1175,7 @@ i9xx_get_initial_plane_config(struct intel_crtc *crtc,
|
|||
|
||||
drm_WARN_ON(display->drm, pipe != crtc->pipe);
|
||||
|
||||
intel_fb = kzalloc(sizeof(*intel_fb), GFP_KERNEL);
|
||||
intel_fb = intel_bo_alloc_framebuffer();
|
||||
if (!intel_fb) {
|
||||
drm_dbg_kms(display->drm, "failed to alloc fb\n");
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
// SPDX-License-Identifier: MIT
|
||||
/* Copyright © 2024 Intel Corporation */
|
||||
|
||||
#include "display/intel_display_types.h"
|
||||
#include "gem/i915_gem_mman.h"
|
||||
#include "gem/i915_gem_object.h"
|
||||
#include "gem/i915_gem_object_frontbuffer.h"
|
||||
|
|
@ -57,3 +58,8 @@ void intel_bo_describe(struct seq_file *m, struct drm_gem_object *obj)
|
|||
{
|
||||
i915_debugfs_describe_obj(m, to_intel_bo(obj));
|
||||
}
|
||||
|
||||
struct intel_framebuffer *intel_bo_alloc_framebuffer(void)
|
||||
{
|
||||
return i915_gem_object_alloc_framebuffer();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@
|
|||
#include <linux/types.h>
|
||||
|
||||
struct drm_gem_object;
|
||||
struct intel_framebuffer;
|
||||
struct seq_file;
|
||||
struct vm_area_struct;
|
||||
|
||||
|
|
@ -23,5 +24,6 @@ struct intel_frontbuffer *intel_bo_set_frontbuffer(struct drm_gem_object *obj,
|
|||
struct intel_frontbuffer *front);
|
||||
|
||||
void intel_bo_describe(struct seq_file *m, struct drm_gem_object *obj);
|
||||
struct intel_framebuffer *intel_bo_alloc_framebuffer(void);
|
||||
|
||||
#endif /* __INTEL_BO__ */
|
||||
|
|
|
|||
|
|
@ -2346,7 +2346,7 @@ intel_framebuffer_create(struct drm_gem_object *obj,
|
|||
struct intel_framebuffer *intel_fb;
|
||||
int ret;
|
||||
|
||||
intel_fb = kzalloc(sizeof(*intel_fb), GFP_KERNEL);
|
||||
intel_fb = intel_bo_alloc_framebuffer();
|
||||
if (!intel_fb)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
|
|
|
|||
|
|
@ -3029,7 +3029,7 @@ skl_get_initial_plane_config(struct intel_crtc *crtc,
|
|||
return;
|
||||
}
|
||||
|
||||
intel_fb = kzalloc(sizeof(*intel_fb), GFP_KERNEL);
|
||||
intel_fb = intel_bo_alloc_framebuffer();
|
||||
if (!intel_fb) {
|
||||
drm_dbg_kms(display->drm, "failed to alloc fb\n");
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@
|
|||
#include "i915_vma_types.h"
|
||||
|
||||
enum intel_region_id;
|
||||
struct intel_framebuffer;
|
||||
|
||||
#define obj_to_i915(obj__) to_i915((obj__)->base.dev)
|
||||
|
||||
|
|
@ -691,6 +692,7 @@ i915_gem_object_unpin_pages(struct drm_i915_gem_object *obj)
|
|||
int __i915_gem_object_put_pages(struct drm_i915_gem_object *obj);
|
||||
int i915_gem_object_truncate(struct drm_i915_gem_object *obj);
|
||||
|
||||
struct intel_framebuffer *i915_gem_object_alloc_framebuffer(void);
|
||||
/**
|
||||
* i915_gem_object_pin_map - return a contiguous mapping of the entire object
|
||||
* @obj: the object to map into kernel address space
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@
|
|||
#include <drm/drm_cache.h>
|
||||
#include <linux/vmalloc.h>
|
||||
|
||||
#include "display/intel_display_types.h"
|
||||
#include "gt/intel_gt.h"
|
||||
#include "gt/intel_tlb.h"
|
||||
|
||||
|
|
@ -354,6 +355,27 @@ static void *i915_gem_object_map_pfn(struct drm_i915_gem_object *obj,
|
|||
return vaddr ?: ERR_PTR(-ENOMEM);
|
||||
}
|
||||
|
||||
struct i915_panic_data {
|
||||
struct page **pages;
|
||||
int page;
|
||||
void *vaddr;
|
||||
};
|
||||
|
||||
struct i915_framebuffer {
|
||||
struct intel_framebuffer base;
|
||||
struct i915_panic_data panic;
|
||||
};
|
||||
|
||||
struct intel_framebuffer *i915_gem_object_alloc_framebuffer(void)
|
||||
{
|
||||
struct i915_framebuffer *i915_fb;
|
||||
|
||||
i915_fb = kzalloc(sizeof(*i915_fb), GFP_KERNEL);
|
||||
if (i915_fb)
|
||||
return &i915_fb->base;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* get, pin, and map the pages of the object into kernel space */
|
||||
void *i915_gem_object_pin_map(struct drm_i915_gem_object *obj,
|
||||
enum i915_map_type type)
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@
|
|||
|
||||
#include <drm/drm_gem.h>
|
||||
|
||||
#include "intel_display_types.h"
|
||||
|
||||
#include "xe_bo.h"
|
||||
#include "intel_bo.h"
|
||||
|
||||
|
|
@ -59,3 +61,25 @@ void intel_bo_describe(struct seq_file *m, struct drm_gem_object *obj)
|
|||
{
|
||||
/* FIXME */
|
||||
}
|
||||
|
||||
struct xe_panic_data {
|
||||
struct page **pages;
|
||||
int page;
|
||||
void *vaddr;
|
||||
};
|
||||
|
||||
struct xe_framebuffer {
|
||||
struct intel_framebuffer base;
|
||||
struct xe_panic_data panic;
|
||||
};
|
||||
|
||||
struct intel_framebuffer *intel_bo_alloc_framebuffer(void)
|
||||
{
|
||||
struct xe_framebuffer *xe_fb;
|
||||
|
||||
xe_fb = kzalloc(sizeof(*xe_fb), GFP_KERNEL);
|
||||
if (xe_fb)
|
||||
return &xe_fb->base;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user