forked from mirrors/linux
		
	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: Chunming Zhou <david1.zhou@amd.com> Reviewed-by: Monk Liu <monk.liu@amd.com> Reviewed-by: Christian König <christian.koenig@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com> Link: https://patchwork.freedesktop.org/patch/msgid/20180209024410.1469-3-david1.zhou@amd.com
This commit is contained in:
		
							parent
							
								
									fd5fd480dd
								
							
						
					
					
						commit
						1bc3d3cce8
					
				
					 3 changed files with 6 additions and 3 deletions
				
			
		| 
						 | 
					@ -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 @@
 | 
				
			||||||
#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,
 | 
				
			||||||
		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,
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_SWIOTLB
 | 
					#ifdef CONFIG_SWIOTLB
 | 
				
			||||||
	if (swiotlb_nr_tbl()) {
 | 
						if (rdev->need_swiotlb && swiotlb_nr_tbl()) {
 | 
				
			||||||
		return ttm_dma_populate(>t->ttm, rdev->dev, ctx);
 | 
							return ttm_dma_populate(>t->ttm, rdev->dev, ctx);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					@ -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(>t->ttm, rdev->dev);
 | 
							ttm_dma_unpopulate(>t->ttm, rdev->dev);
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue