Commit 8a08e50c authored by Serge Semin's avatar Serge Semin Committed by Sean Paul

drm: Permit video-buffers writecombine mapping for MIPS

Since commit 4b050ba7 ("MIPS: pgtable.h: Implement the
pgprot_writecombine function for MIPS") and commit c4687b15 ("MIPS: Fix
definition of pgprot_writecombine()") write-combine vma mapping is
available to be used by kernel subsystems for MIPS. In particular the
uncached accelerated attribute is requested to be set by ioremap_wc()
method and by generic PCI memory pages/ranges mapping methods. The same
is done by the drm_io_prot()/ttm_io_prot() functions in case if
write-combine flag is set for vma's passed for mapping. But for some
reason the pgprot_writecombine() method calling is ifdefed to be a
platform-specific with MIPS system being marked as lacking of one. At the
very least it doesn't reflect the current MIPS platform implementation.
So in order to improve the DRM subsystem performance on MIPS with UCA
mapping enabled, we need to have pgprot_writecombine() called for buffers,
which need store operations being combined. In case if particular MIPS
chip doesn't support the UCA attribute, the mapping will fall back to
noncached.

Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: Paul Burton <paul.burton@mips.com>
Cc: James Hogan <jhogan@kernel.org>
Acked-by: default avatarChristian König <christian.koenig@amd.com>
Reviewed-by: default avatarPaul Burton <paul.burton@mips.com>
Signed-off-by: default avatarVadim V. Vlasov <vadim.vlasov@t-platforms.ru>
Signed-off-by: default avatarSerge Semin <fancer.lancer@gmail.com>
Signed-off-by: default avatarSean Paul <seanpaul@chromium.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20190423123122.32573-1-fancer.lancer@gmail.com
parent b7a3623d
...@@ -74,7 +74,8 @@ static pgprot_t drm_io_prot(struct drm_local_map *map, ...@@ -74,7 +74,8 @@ static pgprot_t drm_io_prot(struct drm_local_map *map,
/* We don't want graphics memory to be mapped encrypted */ /* We don't want graphics memory to be mapped encrypted */
tmp = pgprot_decrypted(tmp); tmp = pgprot_decrypted(tmp);
#if defined(__i386__) || defined(__x86_64__) || defined(__powerpc__) #if defined(__i386__) || defined(__x86_64__) || defined(__powerpc__) || \
defined(__mips__)
if (map->type == _DRM_REGISTERS && !(map->flags & _DRM_WRITE_COMBINING)) if (map->type == _DRM_REGISTERS && !(map->flags & _DRM_WRITE_COMBINING))
tmp = pgprot_noncached(tmp); tmp = pgprot_noncached(tmp);
else else
...@@ -85,7 +86,7 @@ static pgprot_t drm_io_prot(struct drm_local_map *map, ...@@ -85,7 +86,7 @@ static pgprot_t drm_io_prot(struct drm_local_map *map,
tmp = pgprot_writecombine(tmp); tmp = pgprot_writecombine(tmp);
else else
tmp = pgprot_noncached(tmp); tmp = pgprot_noncached(tmp);
#elif defined(__sparc__) || defined(__arm__) || defined(__mips__) #elif defined(__sparc__) || defined(__arm__)
tmp = pgprot_noncached(tmp); tmp = pgprot_noncached(tmp);
#endif #endif
return tmp; return tmp;
......
...@@ -539,13 +539,13 @@ pgprot_t ttm_io_prot(uint32_t caching_flags, pgprot_t tmp) ...@@ -539,13 +539,13 @@ pgprot_t ttm_io_prot(uint32_t caching_flags, pgprot_t tmp)
tmp = pgprot_noncached(tmp); tmp = pgprot_noncached(tmp);
#endif #endif
#if defined(__ia64__) || defined(__arm__) || defined(__aarch64__) || \ #if defined(__ia64__) || defined(__arm__) || defined(__aarch64__) || \
defined(__powerpc__) defined(__powerpc__) || defined(__mips__)
if (caching_flags & TTM_PL_FLAG_WC) if (caching_flags & TTM_PL_FLAG_WC)
tmp = pgprot_writecombine(tmp); tmp = pgprot_writecombine(tmp);
else else
tmp = pgprot_noncached(tmp); tmp = pgprot_noncached(tmp);
#endif #endif
#if defined(__sparc__) || defined(__mips__) #if defined(__sparc__)
tmp = pgprot_noncached(tmp); tmp = pgprot_noncached(tmp);
#endif #endif
return tmp; return tmp;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment