linux/include/drm/ttm
Zack Rusin ef7efa60a3 drm/ttm: Make sure the mapped tt pages are decrypted when needed
commit 71ce046327 upstream.

Some drivers require the mapped tt pages to be decrypted. In an ideal
world this would have been handled by the dma layer, but the TTM page
fault handling would have to be rewritten to able to do that.

A side-effect of the TTM page fault handling is using a dma allocation
per order (via ttm_pool_alloc_page) which makes it impossible to just
trivially use dma_mmap_attrs. As a result ttm has to be very careful
about trying to make its pgprot for the mapped tt pages match what
the dma layer thinks it is. At the ttm layer it's possible to
deduce the requirement to have tt pages decrypted by checking
whether coherent dma allocations have been requested and the system
is running with confidential computing technologies.

This approach isn't ideal but keeping TTM matching DMAs expectations
for the page properties is in general fragile, unfortunately proper
fix would require a rewrite of TTM's page fault handling.

Fixes vmwgfx with SEV enabled.

v2: Explicitly include cc_platform.h
v3: Use CC_ATTR_GUEST_MEM_ENCRYPT instead of CC_ATTR_MEM_ENCRYPT to
limit the scope to guests and log when memory decryption is enabled.

Signed-off-by: Zack Rusin <zack.rusin@broadcom.com>
Fixes: 3bf3710e37 ("drm/ttm: Add a generic TTM memcpy move for page-based iomem")
Reviewed-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Acked-by: Christian König <christian.koenig@amd.com>
Cc: Huang Rui <ray.huang@amd.com>
Cc: dri-devel@lists.freedesktop.org
Cc: linux-kernel@vger.kernel.org
Cc: <stable@vger.kernel.org> # v5.14+
Link: https://patchwork.freedesktop.org/patch/msgid/20230926040359.3040017-1-zack@kde.org
Signed-off-by: Sasha Levin <sashal@kernel.org>
Signed-off-by: Ye Li <ye.li@broadcom.com>
Signed-off-by: Ajay Kaher <ajay.kaher@broadcom.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
History 2024-12-14 19:54:54 +01:00
..
ttm_bo_api.h drm/ttm: rename and cleanup ttm_bo_init 2022-07-11 10:53:13 +02:00
ttm_bo_driver.h drm/ttm: Remove unnecessary '0' values from ret 2022-09-07 09:42:57 +02:00
ttm_caching.h drm/ttm: add kerneldoc for enum ttm_caching 2021-09-09 13:26:43 +02:00
ttm_device.h drm/ttm: rework bulk move handling v5 2022-03-29 10:55:32 +02:00
ttm_execbuf_util.h drm/ttm: remove superflous extern attribute from funcs 2020-09-17 16:14:42 +02:00
ttm_kmap_iter.h dma-buf-map: Rename to iosys-map 2022-02-07 16:35:35 -08:00
ttm_placement.h drm/ttm: Clarify that the TTM_PL_SYSTEM is under TTMs control 2021-12-01 11:58:37 -05:00
ttm_pool.h drm/ttm: enable TTM page pool kerneldoc 2021-09-09 13:30:14 +02:00
ttm_range_manager.h drm/ttm: Try to check if new ttm man out of bounds during compile 2021-09-13 10:14:28 +02:00
ttm_resource.h drm/ttm: Add new callbacks to ttm res mgr 2022-08-22 15:33:12 +02:00
ttm_tt.h drm/ttm: Make sure the mapped tt pages are decrypted when needed 2024-12-14 19:54:54 +01:00