On Mon, 2021-05-24 at 17:45 +0100, Matthew Auld wrote:
On Fri, 21 May 2021 at 16:33, Thomas Hellström thomas.hellstrom@linux.intel.com wrote:
Memcpy from wc will be used as well by TTM memcpy. Move it to core drm, and make the interface do the right thing even on !X86.
Cc: Christian König christian.koenig@amd.com Cc: Daniel Vetter daniel.vetter@ffwll.ch Cc: Dave Airlie airlied@gmail.com Signed-off-by: Thomas Hellström thomas.hellstrom@linux.intel.com
<snip>
+#ifdef CONFIG_X86 +bool drm_memcpy_from_wc(void *dst, const void *src, unsigned long len); +bool drm_memcpy_from_wc_dbm(struct dma_buf_map *dst, + const struct dma_buf_map *src, + unsigned long len); +void drm_unaligned_memcpy_from_wc(void *dst, const void *src, unsigned long len);
+/* The movntdqa instructions used for memcpy-from-wc require 16- byte alignment,
- as well as SSE4.1 support. drm_memcpy_from_wc() will report if
it cannot
- perform the operation. To check beforehand, pass in the
parameters to
- drm_can_memcpy_from_wc() - since we only care about the low 4
bits,
- you only need to pass in the minor offsets, page-aligned
pointers are
- always valid.
- For just checking for SSE4.1, in the foreknowledge that the
future use
- will be correctly aligned, just use drm_has_memcpy_from_wc().
- */
+#define drm_can_memcpy_from_wc(dst, src, len) \ + drm_memcpy_from_wc((void *)((unsigned long)(dst) | (unsigned long)(src) | (len)), NULL, 0)
+#define drm_has_memcpy_from_wc() \ + drm_memcpy_from_wc(NULL, NULL, 0)
+void drm_memcpy_init_early(void);
+#else
+#define drm_memcpy_from_wc(_dst, _src, _len) (false) +#define drm_memcpy_from_wc_dbm(_dst, _src, _len) (false) +#define drm_can_memcpy_from_wc(_dst, _src, _len) (false) +#define drm_has_memcpy_from_wc() (false)
Does the compiler not complain for these on !x86, if called without checking the result of the statement? Maybe just make these function stubs?
Otherwise, Reviewed-by: Matthew Auld matthew.auld@intel.com
Hmm, you're right. I'll fix. Thanks for reviewing!
/Thomas