Merge tag 'amd-drm-fixes-5.15-2021-09-23' of https://gitlab.freedesktop.org/agd5f/linux into drm-fixes
amd-drm-fixes-5.15-2021-09-23: amdgpu: - Update MAINTAINERS entry for powerplay - Fix empty macros - SI DPM fix amdkfd: - SVM fixes - DMA mapping fix Signed-off-by: Dave Airlie <airlied@redhat.com> From: Alex Deucher <alexander.deucher@amd.com> Link: https://patchwork.freedesktop.org/patch/msgid/20210923211330.20725-1-alexander.deucher@amd.com
This commit is contained in:
commit
22a94600e2
|
@ -977,12 +977,12 @@ L: platform-driver-x86@vger.kernel.org
|
|||
S: Maintained
|
||||
F: drivers/platform/x86/amd-pmc.*
|
||||
|
||||
AMD POWERPLAY
|
||||
AMD POWERPLAY AND SWSMU
|
||||
M: Evan Quan <evan.quan@amd.com>
|
||||
L: amd-gfx@lists.freedesktop.org
|
||||
S: Supported
|
||||
T: git https://gitlab.freedesktop.org/agd5f/linux.git
|
||||
F: drivers/gpu/drm/amd/pm/powerplay/
|
||||
F: drivers/gpu/drm/amd/pm/
|
||||
|
||||
AMD PTDMA DRIVER
|
||||
M: Sanjay R Mehta <sanju.mehta@amd.com>
|
||||
|
|
|
@ -971,7 +971,6 @@ out:
|
|||
void kgd2kfd_device_exit(struct kfd_dev *kfd)
|
||||
{
|
||||
if (kfd->init_complete) {
|
||||
svm_migrate_fini((struct amdgpu_device *)kfd->kgd);
|
||||
device_queue_manager_uninit(kfd->dqm);
|
||||
kfd_interrupt_exit(kfd);
|
||||
kfd_topology_remove_device(kfd);
|
||||
|
|
|
@ -891,9 +891,16 @@ int svm_migrate_init(struct amdgpu_device *adev)
|
|||
pgmap->ops = &svm_migrate_pgmap_ops;
|
||||
pgmap->owner = SVM_ADEV_PGMAP_OWNER(adev);
|
||||
pgmap->flags = MIGRATE_VMA_SELECT_DEVICE_PRIVATE;
|
||||
|
||||
/* Device manager releases device-specific resources, memory region and
|
||||
* pgmap when driver disconnects from device.
|
||||
*/
|
||||
r = devm_memremap_pages(adev->dev, pgmap);
|
||||
if (IS_ERR(r)) {
|
||||
pr_err("failed to register HMM device memory\n");
|
||||
|
||||
/* Disable SVM support capability */
|
||||
pgmap->type = 0;
|
||||
devm_release_mem_region(adev->dev, res->start,
|
||||
res->end - res->start + 1);
|
||||
return PTR_ERR(r);
|
||||
|
@ -908,12 +915,3 @@ int svm_migrate_init(struct amdgpu_device *adev)
|
|||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void svm_migrate_fini(struct amdgpu_device *adev)
|
||||
{
|
||||
struct dev_pagemap *pgmap = &adev->kfd.dev->pgmap;
|
||||
|
||||
devm_memunmap_pages(adev->dev, pgmap);
|
||||
devm_release_mem_region(adev->dev, pgmap->range.start,
|
||||
pgmap->range.end - pgmap->range.start + 1);
|
||||
}
|
||||
|
|
|
@ -47,7 +47,6 @@ unsigned long
|
|||
svm_migrate_addr_to_pfn(struct amdgpu_device *adev, unsigned long addr);
|
||||
|
||||
int svm_migrate_init(struct amdgpu_device *adev);
|
||||
void svm_migrate_fini(struct amdgpu_device *adev);
|
||||
|
||||
#else
|
||||
|
||||
|
@ -55,10 +54,6 @@ static inline int svm_migrate_init(struct amdgpu_device *adev)
|
|||
{
|
||||
return 0;
|
||||
}
|
||||
static inline void svm_migrate_fini(struct amdgpu_device *adev)
|
||||
{
|
||||
/* empty */
|
||||
}
|
||||
|
||||
#endif /* IS_ENABLED(CONFIG_HSA_AMD_SVM) */
|
||||
|
||||
|
|
|
@ -118,6 +118,13 @@ static void svm_range_remove_notifier(struct svm_range *prange)
|
|||
mmu_interval_notifier_remove(&prange->notifier);
|
||||
}
|
||||
|
||||
static bool
|
||||
svm_is_valid_dma_mapping_addr(struct device *dev, dma_addr_t dma_addr)
|
||||
{
|
||||
return dma_addr && !dma_mapping_error(dev, dma_addr) &&
|
||||
!(dma_addr & SVM_RANGE_VRAM_DOMAIN);
|
||||
}
|
||||
|
||||
static int
|
||||
svm_range_dma_map_dev(struct amdgpu_device *adev, struct svm_range *prange,
|
||||
unsigned long offset, unsigned long npages,
|
||||
|
@ -139,8 +146,7 @@ svm_range_dma_map_dev(struct amdgpu_device *adev, struct svm_range *prange,
|
|||
|
||||
addr += offset;
|
||||
for (i = 0; i < npages; i++) {
|
||||
if (WARN_ONCE(addr[i] && !dma_mapping_error(dev, addr[i]),
|
||||
"leaking dma mapping\n"))
|
||||
if (svm_is_valid_dma_mapping_addr(dev, addr[i]))
|
||||
dma_unmap_page(dev, addr[i], PAGE_SIZE, dir);
|
||||
|
||||
page = hmm_pfn_to_page(hmm_pfns[i]);
|
||||
|
@ -209,7 +215,7 @@ void svm_range_dma_unmap(struct device *dev, dma_addr_t *dma_addr,
|
|||
return;
|
||||
|
||||
for (i = offset; i < offset + npages; i++) {
|
||||
if (!dma_addr[i] || dma_mapping_error(dev, dma_addr[i]))
|
||||
if (!svm_is_valid_dma_mapping_addr(dev, dma_addr[i]))
|
||||
continue;
|
||||
pr_debug("dma unmapping 0x%llx\n", dma_addr[i] >> PAGE_SHIFT);
|
||||
dma_unmap_page(dev, dma_addr[i], PAGE_SIZE, dir);
|
||||
|
@ -1165,7 +1171,7 @@ svm_range_map_to_gpu(struct amdgpu_device *adev, struct amdgpu_vm *vm,
|
|||
unsigned long last_start;
|
||||
int last_domain;
|
||||
int r = 0;
|
||||
int64_t i;
|
||||
int64_t i, j;
|
||||
|
||||
last_start = prange->start + offset;
|
||||
|
||||
|
@ -1178,7 +1184,11 @@ svm_range_map_to_gpu(struct amdgpu_device *adev, struct amdgpu_vm *vm,
|
|||
for (i = offset; i < offset + npages; i++) {
|
||||
last_domain = dma_addr[i] & SVM_RANGE_VRAM_DOMAIN;
|
||||
dma_addr[i] &= ~SVM_RANGE_VRAM_DOMAIN;
|
||||
if ((prange->start + i) < prange->last &&
|
||||
|
||||
/* Collect all pages in the same address range and memory domain
|
||||
* that can be mapped with a single call to update mapping.
|
||||
*/
|
||||
if (i < offset + npages - 1 &&
|
||||
last_domain == (dma_addr[i + 1] & SVM_RANGE_VRAM_DOMAIN))
|
||||
continue;
|
||||
|
||||
|
@ -1201,6 +1211,10 @@ svm_range_map_to_gpu(struct amdgpu_device *adev, struct amdgpu_vm *vm,
|
|||
NULL, dma_addr,
|
||||
&vm->last_update,
|
||||
&table_freed);
|
||||
|
||||
for (j = last_start - prange->start; j <= i; j++)
|
||||
dma_addr[j] |= last_domain;
|
||||
|
||||
if (r) {
|
||||
pr_debug("failed %d to map to gpu 0x%lx\n", r, prange->start);
|
||||
goto out;
|
||||
|
|
|
@ -42,7 +42,7 @@
|
|||
#define DC_LOGGER \
|
||||
engine->ctx->logger
|
||||
|
||||
#define DC_TRACE_LEVEL_MESSAGE(...) /* do nothing */
|
||||
#define DC_TRACE_LEVEL_MESSAGE(...) do { } while (0)
|
||||
#define IS_DC_I2CAUX_LOGGING_ENABLED() (false)
|
||||
#define LOG_FLAG_Error_I2cAux LOG_ERROR
|
||||
#define LOG_FLAG_I2cAux_DceAux LOG_I2C_AUX
|
||||
|
@ -76,7 +76,7 @@ enum {
|
|||
#define DEFAULT_AUX_ENGINE_MULT 0
|
||||
#define DEFAULT_AUX_ENGINE_LENGTH 69
|
||||
|
||||
#define DC_TRACE_LEVEL_MESSAGE(...) /* do nothing */
|
||||
#define DC_TRACE_LEVEL_MESSAGE(...) do { } while (0)
|
||||
|
||||
static void release_engine(
|
||||
struct dce_aux *engine)
|
||||
|
|
|
@ -6867,6 +6867,8 @@ static int si_dpm_enable(struct amdgpu_device *adev)
|
|||
si_enable_auto_throttle_source(adev, AMDGPU_DPM_AUTO_THROTTLE_SRC_THERMAL, true);
|
||||
si_thermal_start_thermal_controller(adev);
|
||||
|
||||
ni_update_current_ps(adev, boot_ps);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue