mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
synced 2026-04-27 11:58:32 -04:00
Merge drm/drm-next into drm-xe-next
Need to sync some header include that propagated through drm-intel-next. v2: After some changes in drm/drm-next Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
This commit is contained in:
@@ -754,6 +754,55 @@ void xe_device_wmb(struct xe_device *xe)
|
||||
xe_mmio_write32(gt, SOFTWARE_FLAGS_SPR33, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* xe_device_td_flush() - Flush transient L3 cache entries
|
||||
* @xe: The device
|
||||
*
|
||||
* Display engine has direct access to memory and is never coherent with L3/L4
|
||||
* caches (or CPU caches), however KMD is responsible for specifically flushing
|
||||
* transient L3 GPU cache entries prior to the flip sequence to ensure scanout
|
||||
* can happen from such a surface without seeing corruption.
|
||||
*
|
||||
* Display surfaces can be tagged as transient by mapping it using one of the
|
||||
* various L3:XD PAT index modes on Xe2.
|
||||
*
|
||||
* Note: On non-discrete xe2 platforms, like LNL, the entire L3 cache is flushed
|
||||
* at the end of each submission via PIPE_CONTROL for compute/render, since SA
|
||||
* Media is not coherent with L3 and we want to support render-vs-media
|
||||
* usescases. For other engines like copy/blt the HW internally forces uncached
|
||||
* behaviour, hence why we can skip the TDF on such platforms.
|
||||
*/
|
||||
void xe_device_td_flush(struct xe_device *xe)
|
||||
{
|
||||
struct xe_gt *gt;
|
||||
u8 id;
|
||||
|
||||
if (!IS_DGFX(xe) || GRAPHICS_VER(xe) < 20)
|
||||
return;
|
||||
|
||||
for_each_gt(gt, xe, id) {
|
||||
if (xe_gt_is_media_type(gt))
|
||||
continue;
|
||||
|
||||
if (xe_force_wake_get(gt_to_fw(gt), XE_FW_GT))
|
||||
return;
|
||||
|
||||
xe_mmio_write32(gt, XE2_TDF_CTRL, TRANSIENT_FLUSH_REQUEST);
|
||||
/*
|
||||
* FIXME: We can likely do better here with our choice of
|
||||
* timeout. Currently we just assume the worst case, i.e. 150us,
|
||||
* which is believed to be sufficient to cover the worst case
|
||||
* scenario on current platforms if all cache entries are
|
||||
* transient and need to be flushed..
|
||||
*/
|
||||
if (xe_mmio_wait32(gt, XE2_TDF_CTRL, TRANSIENT_FLUSH_REQUEST, 0,
|
||||
150, NULL, false))
|
||||
xe_gt_err_once(gt, "TD flush timeout\n");
|
||||
|
||||
xe_force_wake_put(gt_to_fw(gt), XE_FW_GT);
|
||||
}
|
||||
}
|
||||
|
||||
u32 xe_device_ccs_bytes(struct xe_device *xe, u64 size)
|
||||
{
|
||||
return xe_device_has_flat_ccs(xe) ?
|
||||
|
||||
Reference in New Issue
Block a user