Commit 1bc3d3cc authored by Chunming Zhou's avatar Chunming Zhou Committed by Alex Deucher

drm/radeon: only enable swiotlb path when need v2

swiotlb expands our card accessing range, but its path always is slower
than ttm pool allocation.
So add condition to use it.
v2: move a bit later
Signed-off-by: default avatarChunming Zhou <david1.zhou@amd.com>
Reviewed-by: default avatarMonk Liu <monk.liu@amd.com>
Reviewed-by: default avatarChristian König <christian.koenig@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20180209024410.1469-3-david1.zhou@amd.com
parent fd5fd480
...@@ -2387,6 +2387,7 @@ struct radeon_device { ...@@ -2387,6 +2387,7 @@ struct radeon_device {
struct radeon_dummy_page dummy_page; struct radeon_dummy_page dummy_page;
bool shutdown; bool shutdown;
bool need_dma32; bool need_dma32;
bool need_swiotlb;
bool accel_working; bool accel_working;
bool fastfb_working; /* IGP feature*/ bool fastfb_working; /* IGP feature*/
bool needs_reset, in_reset; bool needs_reset, in_reset;
......
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
#include <linux/slab.h> #include <linux/slab.h>
#include <drm/drmP.h> #include <drm/drmP.h>
#include <drm/drm_crtc_helper.h> #include <drm/drm_crtc_helper.h>
#include <drm/drm_cache.h>
#include <drm/radeon_drm.h> #include <drm/radeon_drm.h>
#include <linux/pm_runtime.h> #include <linux/pm_runtime.h>
#include <linux/vgaarb.h> #include <linux/vgaarb.h>
...@@ -1378,6 +1379,7 @@ int radeon_device_init(struct radeon_device *rdev, ...@@ -1378,6 +1379,7 @@ int radeon_device_init(struct radeon_device *rdev,
pci_set_consistent_dma_mask(rdev->pdev, DMA_BIT_MASK(32)); pci_set_consistent_dma_mask(rdev->pdev, DMA_BIT_MASK(32));
pr_warn("radeon: No coherent DMA available\n"); pr_warn("radeon: No coherent DMA available\n");
} }
rdev->need_swiotlb = drm_get_max_iomem() > ((u64)1 << dma_bits);
/* Registers mapping */ /* Registers mapping */
/* TODO: block userspace mapping of io register */ /* TODO: block userspace mapping of io register */
......
...@@ -756,7 +756,7 @@ static int radeon_ttm_tt_populate(struct ttm_tt *ttm, ...@@ -756,7 +756,7 @@ static int radeon_ttm_tt_populate(struct ttm_tt *ttm,
#endif #endif
#ifdef CONFIG_SWIOTLB #ifdef CONFIG_SWIOTLB
if (swiotlb_nr_tbl()) { if (rdev->need_swiotlb && swiotlb_nr_tbl()) {
return ttm_dma_populate(&gtt->ttm, rdev->dev, ctx); return ttm_dma_populate(&gtt->ttm, rdev->dev, ctx);
} }
#endif #endif
...@@ -788,7 +788,7 @@ static void radeon_ttm_tt_unpopulate(struct ttm_tt *ttm) ...@@ -788,7 +788,7 @@ static void radeon_ttm_tt_unpopulate(struct ttm_tt *ttm)
#endif #endif
#ifdef CONFIG_SWIOTLB #ifdef CONFIG_SWIOTLB
if (swiotlb_nr_tbl()) { if (rdev->need_swiotlb && swiotlb_nr_tbl()) {
ttm_dma_unpopulate(&gtt->ttm, rdev->dev); ttm_dma_unpopulate(&gtt->ttm, rdev->dev);
return; return;
} }
...@@ -1155,7 +1155,7 @@ static int radeon_ttm_debugfs_init(struct radeon_device *rdev) ...@@ -1155,7 +1155,7 @@ static int radeon_ttm_debugfs_init(struct radeon_device *rdev)
count = ARRAY_SIZE(radeon_ttm_debugfs_list); count = ARRAY_SIZE(radeon_ttm_debugfs_list);
#ifdef CONFIG_SWIOTLB #ifdef CONFIG_SWIOTLB
if (!swiotlb_nr_tbl()) if (!(rdev->need_swiotlb && swiotlb_nr_tbl()))
--count; --count;
#endif #endif
......
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