mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-26 22:24:09 +08:00
drm/amdgpu: only enable swiotlb alloc when need v2
get the max io mapping address of system memory to see if it is over our card accessing range. v2: move checking 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-2-david1.zhou@amd.com
This commit is contained in:
parent
82626363a2
commit
fd5fd480dd
@ -1504,6 +1504,7 @@ struct amdgpu_device {
|
|||||||
const struct amdgpu_asic_funcs *asic_funcs;
|
const struct amdgpu_asic_funcs *asic_funcs;
|
||||||
bool shutdown;
|
bool shutdown;
|
||||||
bool need_dma32;
|
bool need_dma32;
|
||||||
|
bool need_swiotlb;
|
||||||
bool accel_working;
|
bool accel_working;
|
||||||
struct work_struct reset_work;
|
struct work_struct reset_work;
|
||||||
struct notifier_block acpi_nb;
|
struct notifier_block acpi_nb;
|
||||||
|
@ -1018,7 +1018,7 @@ static int amdgpu_ttm_tt_populate(struct ttm_tt *ttm,
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_SWIOTLB
|
#ifdef CONFIG_SWIOTLB
|
||||||
if (swiotlb_nr_tbl()) {
|
if (adev->need_swiotlb && swiotlb_nr_tbl()) {
|
||||||
return ttm_dma_populate(>t->ttm, adev->dev, ctx);
|
return ttm_dma_populate(>t->ttm, adev->dev, ctx);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -1045,7 +1045,7 @@ static void amdgpu_ttm_tt_unpopulate(struct ttm_tt *ttm)
|
|||||||
adev = amdgpu_ttm_adev(ttm->bdev);
|
adev = amdgpu_ttm_adev(ttm->bdev);
|
||||||
|
|
||||||
#ifdef CONFIG_SWIOTLB
|
#ifdef CONFIG_SWIOTLB
|
||||||
if (swiotlb_nr_tbl()) {
|
if (adev->need_swiotlb && swiotlb_nr_tbl()) {
|
||||||
ttm_dma_unpopulate(>t->ttm, adev->dev);
|
ttm_dma_unpopulate(>t->ttm, adev->dev);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -2010,7 +2010,7 @@ static int amdgpu_ttm_debugfs_init(struct amdgpu_device *adev)
|
|||||||
count = ARRAY_SIZE(amdgpu_ttm_debugfs_list);
|
count = ARRAY_SIZE(amdgpu_ttm_debugfs_list);
|
||||||
|
|
||||||
#ifdef CONFIG_SWIOTLB
|
#ifdef CONFIG_SWIOTLB
|
||||||
if (!swiotlb_nr_tbl())
|
if (!(adev->need_swiotlb && swiotlb_nr_tbl()))
|
||||||
--count;
|
--count;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
*/
|
*/
|
||||||
#include <linux/firmware.h>
|
#include <linux/firmware.h>
|
||||||
#include <drm/drmP.h>
|
#include <drm/drmP.h>
|
||||||
|
#include <drm/drm_cache.h>
|
||||||
#include "amdgpu.h"
|
#include "amdgpu.h"
|
||||||
#include "gmc_v6_0.h"
|
#include "gmc_v6_0.h"
|
||||||
#include "amdgpu_ucode.h"
|
#include "amdgpu_ucode.h"
|
||||||
@ -851,6 +852,7 @@ static int gmc_v6_0_sw_init(void *handle)
|
|||||||
pci_set_consistent_dma_mask(adev->pdev, DMA_BIT_MASK(32));
|
pci_set_consistent_dma_mask(adev->pdev, DMA_BIT_MASK(32));
|
||||||
dev_warn(adev->dev, "amdgpu: No coherent DMA available.\n");
|
dev_warn(adev->dev, "amdgpu: No coherent DMA available.\n");
|
||||||
}
|
}
|
||||||
|
adev->need_swiotlb = drm_get_max_iomem() > ((u64)1 << dma_bits);
|
||||||
|
|
||||||
r = gmc_v6_0_init_microcode(adev);
|
r = gmc_v6_0_init_microcode(adev);
|
||||||
if (r) {
|
if (r) {
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
*/
|
*/
|
||||||
#include <linux/firmware.h>
|
#include <linux/firmware.h>
|
||||||
#include <drm/drmP.h>
|
#include <drm/drmP.h>
|
||||||
|
#include <drm/drm_cache.h>
|
||||||
#include "amdgpu.h"
|
#include "amdgpu.h"
|
||||||
#include "cikd.h"
|
#include "cikd.h"
|
||||||
#include "cik.h"
|
#include "cik.h"
|
||||||
@ -999,6 +1000,7 @@ static int gmc_v7_0_sw_init(void *handle)
|
|||||||
pci_set_consistent_dma_mask(adev->pdev, DMA_BIT_MASK(32));
|
pci_set_consistent_dma_mask(adev->pdev, DMA_BIT_MASK(32));
|
||||||
pr_warn("amdgpu: No coherent DMA available\n");
|
pr_warn("amdgpu: No coherent DMA available\n");
|
||||||
}
|
}
|
||||||
|
adev->need_swiotlb = drm_get_max_iomem() > ((u64)1 << dma_bits);
|
||||||
|
|
||||||
r = gmc_v7_0_init_microcode(adev);
|
r = gmc_v7_0_init_microcode(adev);
|
||||||
if (r) {
|
if (r) {
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
*/
|
*/
|
||||||
#include <linux/firmware.h>
|
#include <linux/firmware.h>
|
||||||
#include <drm/drmP.h>
|
#include <drm/drmP.h>
|
||||||
|
#include <drm/drm_cache.h>
|
||||||
#include "amdgpu.h"
|
#include "amdgpu.h"
|
||||||
#include "gmc_v8_0.h"
|
#include "gmc_v8_0.h"
|
||||||
#include "amdgpu_ucode.h"
|
#include "amdgpu_ucode.h"
|
||||||
@ -1085,6 +1086,7 @@ static int gmc_v8_0_sw_init(void *handle)
|
|||||||
*/
|
*/
|
||||||
adev->need_dma32 = false;
|
adev->need_dma32 = false;
|
||||||
dma_bits = adev->need_dma32 ? 32 : 40;
|
dma_bits = adev->need_dma32 ? 32 : 40;
|
||||||
|
adev->need_swiotlb = drm_get_max_iomem() > ((u64)1 << dma_bits);
|
||||||
r = pci_set_dma_mask(adev->pdev, DMA_BIT_MASK(dma_bits));
|
r = pci_set_dma_mask(adev->pdev, DMA_BIT_MASK(dma_bits));
|
||||||
if (r) {
|
if (r) {
|
||||||
adev->need_dma32 = true;
|
adev->need_dma32 = true;
|
||||||
@ -1096,6 +1098,7 @@ static int gmc_v8_0_sw_init(void *handle)
|
|||||||
pci_set_consistent_dma_mask(adev->pdev, DMA_BIT_MASK(32));
|
pci_set_consistent_dma_mask(adev->pdev, DMA_BIT_MASK(32));
|
||||||
pr_warn("amdgpu: No coherent DMA available\n");
|
pr_warn("amdgpu: No coherent DMA available\n");
|
||||||
}
|
}
|
||||||
|
adev->need_swiotlb = drm_get_max_iomem() > ((u64)1 << dma_bits);
|
||||||
|
|
||||||
r = gmc_v8_0_init_microcode(adev);
|
r = gmc_v8_0_init_microcode(adev);
|
||||||
if (r) {
|
if (r) {
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#include <linux/firmware.h>
|
#include <linux/firmware.h>
|
||||||
|
#include <drm/drm_cache.h>
|
||||||
#include "amdgpu.h"
|
#include "amdgpu.h"
|
||||||
#include "gmc_v9_0.h"
|
#include "gmc_v9_0.h"
|
||||||
#include "amdgpu_atomfirmware.h"
|
#include "amdgpu_atomfirmware.h"
|
||||||
@ -850,6 +851,7 @@ static int gmc_v9_0_sw_init(void *handle)
|
|||||||
pci_set_consistent_dma_mask(adev->pdev, DMA_BIT_MASK(32));
|
pci_set_consistent_dma_mask(adev->pdev, DMA_BIT_MASK(32));
|
||||||
printk(KERN_WARNING "amdgpu: No coherent DMA available.\n");
|
printk(KERN_WARNING "amdgpu: No coherent DMA available.\n");
|
||||||
}
|
}
|
||||||
|
adev->need_swiotlb = drm_get_max_iomem() > ((u64)1 << dma_bits);
|
||||||
|
|
||||||
r = gmc_v9_0_mc_init(adev);
|
r = gmc_v9_0_mc_init(adev);
|
||||||
if (r)
|
if (r)
|
||||||
|
Loading…
Reference in New Issue
Block a user