shmem ensures the memory is cleared on allocation, however here we are using TTM, which doesn't natively support shmem (other than for swap), but instead just allocates normal system memory. And we only zero such memory for userspace allocations. In the case of intel_fbdev we are missing the memset_io() since display path incorrectly thinks object is shmem based. Fixes:44e694958b
("drm/xe/display: Implement display support") Signed-off-by: Matthew Auld <matthew.auld@intel.com> Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20240205153110.38340-2-matthew.auld@intel.com (cherry picked from commit63fb531fbf
) Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
64 lines
1.2 KiB
C
64 lines
1.2 KiB
C
/* SPDX-License-Identifier: MIT */
|
|
/*
|
|
* Copyright © 2022 Intel Corporation
|
|
*/
|
|
|
|
#ifndef _I915_GEM_OBJECT_H_
|
|
#define _I915_GEM_OBJECT_H_
|
|
|
|
#include <linux/types.h>
|
|
|
|
#include "xe_bo.h"
|
|
|
|
#define i915_gem_object_is_shmem(obj) (0) /* We don't use shmem */
|
|
|
|
static inline dma_addr_t i915_gem_object_get_dma_address(const struct xe_bo *bo, pgoff_t n)
|
|
{
|
|
/* Should never be called */
|
|
WARN_ON(1);
|
|
return n;
|
|
}
|
|
|
|
static inline bool i915_gem_object_is_tiled(const struct xe_bo *bo)
|
|
{
|
|
/* legacy tiling is unused */
|
|
return false;
|
|
}
|
|
|
|
static inline bool i915_gem_object_is_userptr(const struct xe_bo *bo)
|
|
{
|
|
/* legacy tiling is unused */
|
|
return false;
|
|
}
|
|
|
|
static inline int i915_gem_object_read_from_page(struct xe_bo *bo,
|
|
u32 ofs, u64 *ptr, u32 size)
|
|
{
|
|
struct ttm_bo_kmap_obj map;
|
|
void *src;
|
|
bool is_iomem;
|
|
int ret;
|
|
|
|
ret = xe_bo_lock(bo, true);
|
|
if (ret)
|
|
return ret;
|
|
|
|
ret = ttm_bo_kmap(&bo->ttm, ofs >> PAGE_SHIFT, 1, &map);
|
|
if (ret)
|
|
goto out_unlock;
|
|
|
|
ofs &= ~PAGE_MASK;
|
|
src = ttm_kmap_obj_virtual(&map, &is_iomem);
|
|
src += ofs;
|
|
if (is_iomem)
|
|
memcpy_fromio(ptr, (void __iomem *)src, size);
|
|
else
|
|
memcpy(ptr, src, size);
|
|
|
|
ttm_bo_kunmap(&map);
|
|
out_unlock:
|
|
xe_bo_unlock(bo);
|
|
return ret;
|
|
}
|
|
|
|
#endif
|