Commit 85e23c66 authored by Dave Airlie's avatar Dave Airlie

Merge tag 'drm-xe-fixes-2024-07-11' of https://gitlab.freedesktop.org/drm/xe/kernel into drm-fixes

UAPI Changes:
- Use write-back caching mode for system memory on DGFX (Thomas)

Driver Changes:
- Do not leak object when finalizing hdcp gsc (Nirmoy)
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>

From: Lucas De Marchi <lucas.demarchi@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/vgqz35btnxdddko3byrgww5ii36wig2tvondg2p3j3b3ourj4i@rqgolll3wwkh
parents 94e068cf 609458ab
...@@ -159,12 +159,16 @@ void intel_hdcp_gsc_fini(struct xe_device *xe) ...@@ -159,12 +159,16 @@ void intel_hdcp_gsc_fini(struct xe_device *xe)
{ {
struct intel_hdcp_gsc_message *hdcp_message = struct intel_hdcp_gsc_message *hdcp_message =
xe->display.hdcp.hdcp_message; xe->display.hdcp.hdcp_message;
struct i915_hdcp_arbiter *arb = xe->display.hdcp.arbiter;
if (!hdcp_message) if (hdcp_message) {
return;
xe_bo_unpin_map_no_vm(hdcp_message->hdcp_bo); xe_bo_unpin_map_no_vm(hdcp_message->hdcp_bo);
kfree(hdcp_message); kfree(hdcp_message);
xe->display.hdcp.hdcp_message = NULL;
}
kfree(arb);
xe->display.hdcp.arbiter = NULL;
} }
static int xe_gsc_send_sync(struct xe_device *xe, static int xe_gsc_send_sync(struct xe_device *xe,
......
...@@ -317,7 +317,7 @@ static struct ttm_tt *xe_ttm_tt_create(struct ttm_buffer_object *ttm_bo, ...@@ -317,7 +317,7 @@ static struct ttm_tt *xe_ttm_tt_create(struct ttm_buffer_object *ttm_bo,
struct xe_device *xe = xe_bo_device(bo); struct xe_device *xe = xe_bo_device(bo);
struct xe_ttm_tt *tt; struct xe_ttm_tt *tt;
unsigned long extra_pages; unsigned long extra_pages;
enum ttm_caching caching; enum ttm_caching caching = ttm_cached;
int err; int err;
tt = kzalloc(sizeof(*tt), GFP_KERNEL); tt = kzalloc(sizeof(*tt), GFP_KERNEL);
...@@ -331,6 +331,13 @@ static struct ttm_tt *xe_ttm_tt_create(struct ttm_buffer_object *ttm_bo, ...@@ -331,6 +331,13 @@ static struct ttm_tt *xe_ttm_tt_create(struct ttm_buffer_object *ttm_bo,
extra_pages = DIV_ROUND_UP(xe_device_ccs_bytes(xe, bo->size), extra_pages = DIV_ROUND_UP(xe_device_ccs_bytes(xe, bo->size),
PAGE_SIZE); PAGE_SIZE);
/*
* DGFX system memory is always WB / ttm_cached, since
* other caching modes are only supported on x86. DGFX
* GPU system memory accesses are always coherent with the
* CPU.
*/
if (!IS_DGFX(xe)) {
switch (bo->cpu_caching) { switch (bo->cpu_caching) {
case DRM_XE_GEM_CPU_CACHING_WC: case DRM_XE_GEM_CPU_CACHING_WC:
caching = ttm_write_combined; caching = ttm_write_combined;
...@@ -345,12 +352,14 @@ static struct ttm_tt *xe_ttm_tt_create(struct ttm_buffer_object *ttm_bo, ...@@ -345,12 +352,14 @@ static struct ttm_tt *xe_ttm_tt_create(struct ttm_buffer_object *ttm_bo,
/* /*
* Display scanout is always non-coherent with the CPU cache. * Display scanout is always non-coherent with the CPU cache.
* *
* For Xe_LPG and beyond, PPGTT PTE lookups are also non-coherent and * For Xe_LPG and beyond, PPGTT PTE lookups are also
* require a CPU:WC mapping. * non-coherent and require a CPU:WC mapping.
*/ */
if ((!bo->cpu_caching && bo->flags & XE_BO_FLAG_SCANOUT) || if ((!bo->cpu_caching && bo->flags & XE_BO_FLAG_SCANOUT) ||
(xe->info.graphics_verx100 >= 1270 && bo->flags & XE_BO_FLAG_PAGETABLE)) (xe->info.graphics_verx100 >= 1270 &&
bo->flags & XE_BO_FLAG_PAGETABLE))
caching = ttm_write_combined; caching = ttm_write_combined;
}
err = ttm_tt_init(&tt->ttm, &bo->ttm, page_flags, caching, extra_pages); err = ttm_tt_init(&tt->ttm, &bo->ttm, page_flags, caching, extra_pages);
if (err) { if (err) {
......
...@@ -66,7 +66,8 @@ struct xe_bo { ...@@ -66,7 +66,8 @@ struct xe_bo {
/** /**
* @cpu_caching: CPU caching mode. Currently only used for userspace * @cpu_caching: CPU caching mode. Currently only used for userspace
* objects. * objects. Exceptions are system memory on DGFX, which is always
* WB.
*/ */
u16 cpu_caching; u16 cpu_caching;
......
...@@ -776,7 +776,13 @@ struct drm_xe_gem_create { ...@@ -776,7 +776,13 @@ struct drm_xe_gem_create {
#define DRM_XE_GEM_CPU_CACHING_WC 2 #define DRM_XE_GEM_CPU_CACHING_WC 2
/** /**
* @cpu_caching: The CPU caching mode to select for this object. If * @cpu_caching: The CPU caching mode to select for this object. If
* mmaping the object the mode selected here will also be used. * mmaping the object the mode selected here will also be used. The
* exception is when mapping system memory (including data evicted
* to system) on discrete GPUs. The caching mode selected will
* then be overridden to DRM_XE_GEM_CPU_CACHING_WB, and coherency
* between GPU- and CPU is guaranteed. The caching mode of
* existing CPU-mappings will be updated transparently to
* user-space clients.
*/ */
__u16 cpu_caching; __u16 cpu_caching;
/** @pad: MBZ */ /** @pad: MBZ */
......
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