Skip to content

Commit 5493ee1

Browse files
committed
Merge tag 'amd-drm-next-5.20-2022-07-29' of https://gitlab.freedesktop.org/agd5f/linux into drm-next
amd-drm-next-5.20-2022-07-29: amdgpu: - Misc spelling and grammar fixes - DC whitespace cleanups - ACP smatch fix - GFX 11.0 updates - PSP 13.0 updates - VCN 4.0 updates - DC FP fix for PPC64 - Misc bug fixes amdkfd: - SVM fixes Signed-off-by: Dave Airlie <airlied@redhat.com> From: Alex Deucher <alexander.deucher@amd.com> Link: https://patchwork.freedesktop.org/patch/msgid/20220729202742.6636-1-alexander.deucher@amd.com
2 parents 2bc7ea7 + 64f9915 commit 5493ee1

62 files changed

Lines changed: 2181 additions & 377 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

drivers/gpu/drm/amd/amdgpu/Makefile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,8 @@ amdgpu-y += \
115115
psp_v11_0.o \
116116
psp_v11_0_8.o \
117117
psp_v12_0.o \
118-
psp_v13_0.o
118+
psp_v13_0.o \
119+
psp_v13_0_4.o
119120

120121
# add DCE block
121122
amdgpu-y += \

drivers/gpu/drm/amd/amdgpu/amdgpu.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1020,7 +1020,7 @@ struct amdgpu_device {
10201020
bool psp_sysfs_en;
10211021

10221022
/* Chip product information */
1023-
char product_number[16];
1023+
char product_number[20];
10241024
char product_name[AMDGPU_PRODUCT_NAME_LEN];
10251025
char serial[20];
10261026

drivers/gpu/drm/amd/amdgpu/amdgpu_acp.c

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -390,14 +390,6 @@ static int acp_hw_init(void *handle)
390390
i2s_pdata[2].i2s_reg_comp1 = ACP_BT_COMP1_REG_OFFSET;
391391
i2s_pdata[2].i2s_reg_comp2 = ACP_BT_COMP2_REG_OFFSET;
392392

393-
i2s_pdata[3].quirks = DW_I2S_QUIRK_COMP_REG_OFFSET;
394-
switch (adev->asic_type) {
395-
case CHIP_STONEY:
396-
i2s_pdata[3].quirks |= DW_I2S_QUIRK_16BIT_IDX_OVERRIDE;
397-
break;
398-
default:
399-
break;
400-
}
401393
adev->acp.acp_res[0].name = "acp2x_dma";
402394
adev->acp.acp_res[0].flags = IORESOURCE_MEM;
403395
adev->acp.acp_res[0].start = acp_base;

drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,9 @@ int amdgpu_queue_mask_bit_to_set_resource_bit(struct amdgpu_device *adev,
172172
struct amdgpu_amdkfd_fence *amdgpu_amdkfd_fence_create(u64 context,
173173
struct mm_struct *mm,
174174
struct svm_range_bo *svm_bo);
175+
#if defined(CONFIG_DEBUG_FS)
176+
int kfd_debugfs_kfd_mem_limits(struct seq_file *m, void *data);
177+
#endif
175178
#if IS_ENABLED(CONFIG_HSA_AMD)
176179
bool amdkfd_fence_check_mm(struct dma_fence *f, struct mm_struct *mm);
177180
struct amdgpu_amdkfd_fence *to_amdgpu_amdkfd_fence(struct dma_fence *f);
@@ -305,6 +308,10 @@ bool amdgpu_amdkfd_bo_mapped_to_dev(struct amdgpu_device *adev, struct kgd_mem *
305308
void amdgpu_amdkfd_block_mmu_notifications(void *p);
306309
int amdgpu_amdkfd_criu_resume(void *p);
307310
bool amdgpu_amdkfd_ras_query_utcl2_poison_status(struct amdgpu_device *adev);
311+
int amdgpu_amdkfd_reserve_mem_limit(struct amdgpu_device *adev,
312+
uint64_t size, u32 alloc_flag);
313+
void amdgpu_amdkfd_unreserve_mem_limit(struct amdgpu_device *adev,
314+
uint64_t size, u32 alloc_flag);
308315

309316
#if IS_ENABLED(CONFIG_HSA_AMD)
310317
void amdgpu_amdkfd_gpuvm_init_mem_limits(void);

drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_fence.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -159,19 +159,22 @@ static void amdkfd_fence_release(struct dma_fence *f)
159159
}
160160

161161
/**
162-
* amdkfd_fence_check_mm - Check if @mm is same as that of the fence @f
163-
* if same return TRUE else return FALSE.
162+
* amdkfd_fence_check_mm - Check whether to prevent eviction of @f by @mm
164163
*
165164
* @f: [IN] fence
166165
* @mm: [IN] mm that needs to be verified
166+
*
167+
* Check if @mm is same as that of the fence @f, if same return TRUE else
168+
* return FALSE.
169+
* For svm bo, which support vram overcommitment, always return FALSE.
167170
*/
168171
bool amdkfd_fence_check_mm(struct dma_fence *f, struct mm_struct *mm)
169172
{
170173
struct amdgpu_amdkfd_fence *fence = to_amdgpu_amdkfd_fence(f);
171174

172175
if (!fence)
173176
return false;
174-
else if (fence->mm == mm)
177+
else if (fence->mm == mm && !fence->svm_bo)
175178
return true;
176179

177180
return false;

drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c

Lines changed: 41 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ void amdgpu_amdkfd_reserve_system_mem(uint64_t size)
129129
*
130130
* Return: returns -ENOMEM in case of error, ZERO otherwise
131131
*/
132-
static int amdgpu_amdkfd_reserve_mem_limit(struct amdgpu_device *adev,
132+
int amdgpu_amdkfd_reserve_mem_limit(struct amdgpu_device *adev,
133133
uint64_t size, u32 alloc_flag)
134134
{
135135
uint64_t reserved_for_pt =
@@ -169,7 +169,7 @@ static int amdgpu_amdkfd_reserve_mem_limit(struct amdgpu_device *adev,
169169
kfd_mem_limit.max_system_mem_limit && !no_system_mem_limit) ||
170170
(kfd_mem_limit.ttm_mem_used + ttm_mem_needed >
171171
kfd_mem_limit.max_ttm_mem_limit) ||
172-
(adev->kfd.vram_used + vram_needed >
172+
(adev && adev->kfd.vram_used + vram_needed >
173173
adev->gmc.real_vram_size -
174174
atomic64_read(&adev->vram_pin_size) -
175175
reserved_for_pt)) {
@@ -180,7 +180,10 @@ static int amdgpu_amdkfd_reserve_mem_limit(struct amdgpu_device *adev,
180180
/* Update memory accounting by decreasing available system
181181
* memory, TTM memory and GPU memory as computed above
182182
*/
183-
adev->kfd.vram_used += vram_needed;
183+
WARN_ONCE(vram_needed && !adev,
184+
"adev reference can't be null when vram is used");
185+
if (adev)
186+
adev->kfd.vram_used += vram_needed;
184187
kfd_mem_limit.system_mem_used += system_mem_needed;
185188
kfd_mem_limit.ttm_mem_used += ttm_mem_needed;
186189

@@ -189,7 +192,7 @@ static int amdgpu_amdkfd_reserve_mem_limit(struct amdgpu_device *adev,
189192
return ret;
190193
}
191194

192-
static void unreserve_mem_limit(struct amdgpu_device *adev,
195+
void amdgpu_amdkfd_unreserve_mem_limit(struct amdgpu_device *adev,
193196
uint64_t size, u32 alloc_flag)
194197
{
195198
spin_lock(&kfd_mem_limit.mem_limit_lock);
@@ -198,7 +201,10 @@ static void unreserve_mem_limit(struct amdgpu_device *adev,
198201
kfd_mem_limit.system_mem_used -= size;
199202
kfd_mem_limit.ttm_mem_used -= size;
200203
} else if (alloc_flag & KFD_IOC_ALLOC_MEM_FLAGS_VRAM) {
201-
adev->kfd.vram_used -= ALIGN(size, VRAM_ALLOCATION_ALIGN);
204+
WARN_ONCE(!adev,
205+
"adev reference can't be null when alloc mem flags vram is set");
206+
if (adev)
207+
adev->kfd.vram_used -= ALIGN(size, VRAM_ALLOCATION_ALIGN);
202208
} else if (alloc_flag & KFD_IOC_ALLOC_MEM_FLAGS_USERPTR) {
203209
kfd_mem_limit.system_mem_used -= size;
204210
} else if (!(alloc_flag &
@@ -207,8 +213,7 @@ static void unreserve_mem_limit(struct amdgpu_device *adev,
207213
pr_err("%s: Invalid BO type %#x\n", __func__, alloc_flag);
208214
goto release;
209215
}
210-
211-
WARN_ONCE(adev->kfd.vram_used < 0,
216+
WARN_ONCE(adev && adev->kfd.vram_used < 0,
212217
"KFD VRAM memory accounting unbalanced");
213218
WARN_ONCE(kfd_mem_limit.ttm_mem_used < 0,
214219
"KFD TTM memory accounting unbalanced");
@@ -225,7 +230,7 @@ void amdgpu_amdkfd_release_notify(struct amdgpu_bo *bo)
225230
u32 alloc_flags = bo->kfd_bo->alloc_flags;
226231
u64 size = amdgpu_bo_size(bo);
227232

228-
unreserve_mem_limit(adev, size, alloc_flags);
233+
amdgpu_amdkfd_unreserve_mem_limit(adev, size, alloc_flags);
229234

230235
kfree(bo->kfd_bo);
231236
}
@@ -773,7 +778,6 @@ kfd_mem_attach_dmabuf(struct amdgpu_device *adev, struct kgd_mem *mem,
773778

774779
*bo = gem_to_amdgpu_bo(gobj);
775780
(*bo)->flags |= AMDGPU_GEM_CREATE_PREEMPTIBLE;
776-
(*bo)->parent = amdgpu_bo_ref(mem->bo);
777781

778782
return 0;
779783
}
@@ -1749,7 +1753,7 @@ int amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu(
17491753
/* Don't unreserve system mem limit twice */
17501754
goto err_reserve_limit;
17511755
err_bo_create:
1752-
unreserve_mem_limit(adev, size, flags);
1756+
amdgpu_amdkfd_unreserve_mem_limit(adev, size, flags);
17531757
err_reserve_limit:
17541758
mutex_destroy(&(*mem)->lock);
17551759
if (gobj)
@@ -1770,6 +1774,7 @@ int amdgpu_amdkfd_gpuvm_free_memory_of_gpu(
17701774
{
17711775
struct amdkfd_process_info *process_info = mem->process_info;
17721776
unsigned long bo_size = mem->bo->tbo.base.size;
1777+
bool use_release_notifier = (mem->bo->kfd_bo == mem);
17731778
struct kfd_mem_attachment *entry, *tmp;
17741779
struct bo_vm_reservation_context ctx;
17751780
struct ttm_validate_buffer *bo_list_entry;
@@ -1861,6 +1866,13 @@ int amdgpu_amdkfd_gpuvm_free_memory_of_gpu(
18611866
*/
18621867
drm_gem_object_put(&mem->bo->tbo.base);
18631868

1869+
/*
1870+
* For kgd_mem allocated in amdgpu_amdkfd_gpuvm_import_dmabuf(),
1871+
* explicitly free it here.
1872+
*/
1873+
if (!use_release_notifier)
1874+
kfree(mem);
1875+
18641876
return ret;
18651877
}
18661878

@@ -2883,3 +2895,22 @@ bool amdgpu_amdkfd_bo_mapped_to_dev(struct amdgpu_device *adev, struct kgd_mem *
28832895
}
28842896
return false;
28852897
}
2898+
2899+
#if defined(CONFIG_DEBUG_FS)
2900+
2901+
int kfd_debugfs_kfd_mem_limits(struct seq_file *m, void *data)
2902+
{
2903+
2904+
spin_lock(&kfd_mem_limit.mem_limit_lock);
2905+
seq_printf(m, "System mem used %lldM out of %lluM\n",
2906+
(kfd_mem_limit.system_mem_used >> 20),
2907+
(kfd_mem_limit.max_system_mem_limit >> 20));
2908+
seq_printf(m, "TTM mem used %lldM out of %lluM\n",
2909+
(kfd_mem_limit.ttm_mem_used >> 20),
2910+
(kfd_mem_limit.max_ttm_mem_limit >> 20));
2911+
spin_unlock(&kfd_mem_limit.mem_limit_lock);
2912+
2913+
return 0;
2914+
}
2915+
2916+
#endif

drivers/gpu/drm/amd/amdgpu/amdgpu_device.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4668,7 +4668,6 @@ static int amdgpu_reset_reg_dumps(struct amdgpu_device *adev)
46684668
int i;
46694669

46704670
lockdep_assert_held(&adev->reset_domain->sem);
4671-
dump_stack();
46724671

46734672
for (i = 0; i < adev->num_regs; i++) {
46744673
adev->reset_dump_reg_value[i] = RREG32(adev->reset_dump_reg_list[i]);
@@ -5300,6 +5299,9 @@ int amdgpu_device_gpu_recover(struct amdgpu_device *adev,
53005299
drm_sched_start(&ring->sched, !tmp_adev->asic_reset_res);
53015300
}
53025301

5302+
if (adev->enable_mes)
5303+
amdgpu_mes_self_test(tmp_adev);
5304+
53035305
if (!drm_drv_uses_atomic_modeset(adev_to_drm(tmp_adev)) && !job_signaled) {
53045306
drm_helper_resume_force_mode(adev_to_drm(tmp_adev));
53055307
}

drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1630,12 +1630,14 @@ static int amdgpu_discovery_set_psp_ip_blocks(struct amdgpu_device *adev)
16301630
case IP_VERSION(13, 0, 1):
16311631
case IP_VERSION(13, 0, 2):
16321632
case IP_VERSION(13, 0, 3):
1633-
case IP_VERSION(13, 0, 4):
16341633
case IP_VERSION(13, 0, 5):
16351634
case IP_VERSION(13, 0, 7):
16361635
case IP_VERSION(13, 0, 8):
16371636
amdgpu_device_ip_block_add(adev, &psp_v13_0_ip_block);
16381637
break;
1638+
case IP_VERSION(13, 0, 4):
1639+
amdgpu_device_ip_block_add(adev, &psp_v13_0_4_ip_block);
1640+
break;
16391641
default:
16401642
dev_err(adev->dev,
16411643
"Failed to add psp ip block(MP0_HWIP:0x%x)\n",

drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
#include "psp_v11_0_8.h"
3838
#include "psp_v12_0.h"
3939
#include "psp_v13_0.h"
40+
#include "psp_v13_0_4.h"
4041

4142
#include "amdgpu_ras.h"
4243
#include "amdgpu_securedisplay.h"
@@ -151,6 +152,10 @@ static int psp_early_init(void *handle)
151152
psp_v13_0_set_psp_funcs(psp);
152153
psp->autoload_supported = true;
153154
break;
155+
case IP_VERSION(13, 0, 4):
156+
psp_v13_0_4_set_psp_funcs(psp);
157+
psp->autoload_supported = true;
158+
break;
154159
default:
155160
return -EINVAL;
156161
}
@@ -1292,6 +1297,8 @@ static void psp_xgmi_reflect_topology_info(struct psp_context *psp,
12921297

12931298
break;
12941299
}
1300+
1301+
amdgpu_put_xgmi_hive(hive);
12951302
}
12961303

12971304
int psp_xgmi_get_topology_info(struct psp_context *psp,
@@ -3692,3 +3699,11 @@ const struct amdgpu_ip_block_version psp_v13_0_ip_block = {
36923699
.rev = 0,
36933700
.funcs = &psp_ip_funcs,
36943701
};
3702+
3703+
const struct amdgpu_ip_block_version psp_v13_0_4_ip_block = {
3704+
.type = AMD_IP_BLOCK_TYPE_PSP,
3705+
.major = 13,
3706+
.minor = 0,
3707+
.rev = 4,
3708+
.funcs = &psp_ip_funcs,
3709+
};

drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -439,6 +439,7 @@ extern const struct amdgpu_ip_block_version psp_v11_0_ip_block;
439439
extern const struct amdgpu_ip_block_version psp_v11_0_8_ip_block;
440440
extern const struct amdgpu_ip_block_version psp_v12_0_ip_block;
441441
extern const struct amdgpu_ip_block_version psp_v13_0_ip_block;
442+
extern const struct amdgpu_ip_block_version psp_v13_0_4_ip_block;
442443

443444
extern int psp_wait_for(struct psp_context *psp, uint32_t reg_index,
444445
uint32_t field_val, uint32_t mask, bool check_changed);

0 commit comments

Comments
 (0)