• Akshata Jahagirdar's avatar
    drm/xe/xe2: Introduce identity map for compressed pat for vram · 2b808d6b
    Akshata Jahagirdar authored
    Xe2+ has unified compression (exactly one compression mode/format),
    where compression is now controlled via PAT at PTE level.
    This simplifies KMD operations, as it can now decompress freely
    without concern for the buffer's original compression format—unlike DG2,
    which had multiple compression formats and thus required copying the
    raw CCS state during VRAM eviction. In addition mixed VRAM and system
    memory buffers were not supported with compression enabled.
    
    On Xe2 dGPU compression is still only supported with VRAM, however we
    can now support compression with VRAM and system memory buffers,
    with GPU access being seamless underneath. So long as when doing
    VRAM -> system memory the KMD uses compressed -> uncompressed,
    to decompress it. This also allows CPU access to such buffers,
    assuming that userspace first decompress the corresponding
    pages being accessed.
    If the pages are already in system memory then KMD would have already
    decompressed them. When restoring such buffers with sysmem -> VRAM
    the KMD can't easily know which pages were originally compressed,
    so we always use uncompressed -> uncompressed here.
    With this it also means we can drop all the raw CCS handling on such
    platforms (including needing to allocate extra CCS storage).
    
    In order to support this we now need to have two different identity
    mappings for compressed and uncompressed VRAM.
    In this patch, we set up the additional identity map for the VRAM with
    compressed pat_index. We then select the appropriate mapping during
    migration/clear. During eviction (vram->sysmem), we use the mapping
    from compressed -> uncompressed. During restore (sysmem->vram), we need
    the mapping from uncompressed -> uncompressed.
    Therefore, we need to have two different mappings for compressed and
    uncompressed vram. We set up an additional identity map for the vram
    with compressed pat_index.
    We then select the appropriate mapping during migration/clear.
    
    v2: Formatting nits, Updated code to match recent changes in
        xe_migrate_prepare_vm(). (Matt)
    
    v3: Move identity map loop to a helper function. (Matt Brost)
    
    v4: Split helper function in different patch, and
    	add asserts and nits. (Matt Brost)
    
    v5: Convert the 2 bool arguments of pte_update_size to flags
    	argument (Matt Brost)
    
    v6: Formatting nits (Matt Brost)
    Signed-off-by: default avatarAkshata Jahagirdar <akshata.jahagirdar@intel.com>
    Reviewed-by: default avatarHimal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
    Reviewed-by: default avatarMatthew Brost <matthew.brost@intel.com>
    Signed-off-by: default avatarMatt Roper <matthew.d.roper@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/b00db5c7267e54260cb6183ba24b15c1e6ae52a3.1721250309.git.akshata.jahagirdar@intel.com
    2b808d6b
xe_migrate.c 42.4 KB