Skip to content

Commit af165fb

Browse files
committed
Merge tag 'amd-drm-next-6.9-2024-03-01' of https://gitlab.freedesktop.org/agd5f/linux into drm-next
amd-drm-next-6.9-2024-03-01: amdgpu: - GC 11.5.1 updates - Misc display cleanups - NBIO 7.9 updates - Backlight fixes - DMUB fixes - MPO fixes - atomfirmware table updates - SR-IOV fixes - VCN 4.x updates - use RMW accessors for pci config registers - PSR fixes - Suspend/resume fixes - RAS fixes - ABM fixes - Misc code cleanups - SI DPM fix - Revert freesync video amdkfd: - Misc cleanups - Error handling fixes radeon: - use RMW accessors for pci config registers From: Alex Deucher <alexander.deucher@amd.com> Link: https://patchwork.freedesktop.org/patch/msgid/20240301204857.13960-1-alexander.deucher@amd.com Signed-off-by: Dave Airlie <airlied@redhat.com>
2 parents c6d6a82 + b07395d commit af165fb

File tree

90 files changed

+783
-660
lines changed

Some content is hidden

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

90 files changed

+783
-660
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,7 @@ extern int amdgpu_emu_mode;
194194
extern uint amdgpu_smu_memory_pool_size;
195195
extern int amdgpu_smu_pptable_id;
196196
extern uint amdgpu_dc_feature_mask;
197+
extern uint amdgpu_freesync_vid_mode;
197198
extern uint amdgpu_dc_debug_mask;
198199
extern uint amdgpu_dc_visual_confirm;
199200
extern int amdgpu_dm_abm_level;

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -742,6 +742,11 @@ void amdgpu_amdkfd_debug_mem_fence(struct amdgpu_device *adev)
742742
amdgpu_device_flush_hdp(adev, NULL);
743743
}
744744

745+
bool amdgpu_amdkfd_is_fed(struct amdgpu_device *adev)
746+
{
747+
return amdgpu_ras_get_fed_status(adev);
748+
}
749+
745750
void amdgpu_amdkfd_ras_poison_consumption_handler(struct amdgpu_device *adev,
746751
enum amdgpu_ras_block block, bool reset)
747752
{

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -320,7 +320,7 @@ int amdgpu_amdkfd_gpuvm_map_gtt_bo_to_kernel(struct kgd_mem *mem,
320320
void **kptr, uint64_t *size);
321321
void amdgpu_amdkfd_gpuvm_unmap_gtt_bo_from_kernel(struct kgd_mem *mem);
322322

323-
int amdgpu_amdkfd_map_gtt_bo_to_gart(struct amdgpu_device *adev, struct amdgpu_bo *bo);
323+
int amdgpu_amdkfd_map_gtt_bo_to_gart(struct amdgpu_bo *bo);
324324

325325
int amdgpu_amdkfd_gpuvm_restore_process_bos(void *process_info,
326326
struct dma_fence __rcu **ef);
@@ -337,6 +337,7 @@ int amdgpu_amdkfd_get_tile_config(struct amdgpu_device *adev,
337337
struct tile_config *config);
338338
void amdgpu_amdkfd_ras_poison_consumption_handler(struct amdgpu_device *adev,
339339
enum amdgpu_ras_block block, bool reset);
340+
bool amdgpu_amdkfd_is_fed(struct amdgpu_device *adev);
340341
bool amdgpu_amdkfd_bo_mapped_to_dev(struct amdgpu_device *adev, struct kgd_mem *mem);
341342
void amdgpu_amdkfd_block_mmu_notifications(void *p);
342343
int amdgpu_amdkfd_criu_resume(void *p);

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2189,13 +2189,12 @@ int amdgpu_amdkfd_gpuvm_sync_memory(
21892189

21902190
/**
21912191
* amdgpu_amdkfd_map_gtt_bo_to_gart - Map BO to GART and increment reference count
2192-
* @adev: Device to which allocated BO belongs
21932192
* @bo: Buffer object to be mapped
21942193
*
21952194
* Before return, bo reference count is incremented. To release the reference and unpin/
21962195
* unmap the BO, call amdgpu_amdkfd_free_gtt_mem.
21972196
*/
2198-
int amdgpu_amdkfd_map_gtt_bo_to_gart(struct amdgpu_device *adev, struct amdgpu_bo *bo)
2197+
int amdgpu_amdkfd_map_gtt_bo_to_gart(struct amdgpu_bo *bo)
21992198
{
22002199
int ret;
22012200

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

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4040,8 +4040,10 @@ int amdgpu_device_init(struct amdgpu_device *adev,
40404040
* early on during init and before calling to RREG32.
40414041
*/
40424042
adev->reset_domain = amdgpu_reset_create_reset_domain(SINGLE_DEVICE, "amdgpu-reset-dev");
4043-
if (!adev->reset_domain)
4044-
return -ENOMEM;
4043+
if (!adev->reset_domain) {
4044+
r = -ENOMEM;
4045+
goto unmap_memory;
4046+
}
40454047

40464048
/* detect hw virtualization here */
40474049
amdgpu_detect_virtualization(adev);
@@ -4051,20 +4053,20 @@ int amdgpu_device_init(struct amdgpu_device *adev,
40514053
r = amdgpu_device_get_job_timeout_settings(adev);
40524054
if (r) {
40534055
dev_err(adev->dev, "invalid lockup_timeout parameter syntax\n");
4054-
return r;
4056+
goto unmap_memory;
40554057
}
40564058

40574059
/* early init functions */
40584060
r = amdgpu_device_ip_early_init(adev);
40594061
if (r)
4060-
return r;
4062+
goto unmap_memory;
40614063

40624064
amdgpu_device_set_mcbp(adev);
40634065

40644066
/* Get rid of things like offb */
40654067
r = drm_aperture_remove_conflicting_pci_framebuffers(adev->pdev, &amdgpu_kms_driver);
40664068
if (r)
4067-
return r;
4069+
goto unmap_memory;
40684070

40694071
/* Enable TMZ based on IP_VERSION */
40704072
amdgpu_gmc_tmz_set(adev);
@@ -4074,7 +4076,7 @@ int amdgpu_device_init(struct amdgpu_device *adev,
40744076
if (adev->gmc.xgmi.supported) {
40754077
r = adev->gfxhub.funcs->get_xgmi_info(adev);
40764078
if (r)
4077-
return r;
4079+
goto unmap_memory;
40784080
}
40794081

40804082
/* enable PCIE atomic ops */
@@ -4343,6 +4345,8 @@ int amdgpu_device_init(struct amdgpu_device *adev,
43434345
failed:
43444346
amdgpu_vf_error_trans_all(adev);
43454347

4348+
unmap_memory:
4349+
iounmap(adev->rmmio);
43464350
return r;
43474351
}
43484352

@@ -5321,6 +5325,7 @@ int amdgpu_do_asic_reset(struct list_head *device_list_handle,
53215325
list_for_each_entry(tmp_adev, device_list_handle, reset_list) {
53225326
if (need_full_reset) {
53235327
/* post card */
5328+
amdgpu_ras_set_fed(tmp_adev, false);
53245329
r = amdgpu_device_asic_init(tmp_adev);
53255330
if (r) {
53265331
dev_warn(tmp_adev->dev, "asic atom init failed!");

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1683,6 +1683,7 @@ static int amdgpu_discovery_set_common_ip_blocks(struct amdgpu_device *adev)
16831683
case IP_VERSION(11, 0, 3):
16841684
case IP_VERSION(11, 0, 4):
16851685
case IP_VERSION(11, 5, 0):
1686+
case IP_VERSION(11, 5, 1):
16861687
amdgpu_device_ip_block_add(adev, &soc21_common_ip_block);
16871688
break;
16881689
default:
@@ -1730,6 +1731,7 @@ static int amdgpu_discovery_set_gmc_ip_blocks(struct amdgpu_device *adev)
17301731
case IP_VERSION(11, 0, 3):
17311732
case IP_VERSION(11, 0, 4):
17321733
case IP_VERSION(11, 5, 0):
1734+
case IP_VERSION(11, 5, 1):
17331735
amdgpu_device_ip_block_add(adev, &gmc_v11_0_ip_block);
17341736
break;
17351737
default:
@@ -2003,6 +2005,7 @@ static int amdgpu_discovery_set_gc_ip_blocks(struct amdgpu_device *adev)
20032005
case IP_VERSION(11, 0, 3):
20042006
case IP_VERSION(11, 0, 4):
20052007
case IP_VERSION(11, 5, 0):
2008+
case IP_VERSION(11, 5, 1):
20062009
amdgpu_device_ip_block_add(adev, &gfx_v11_0_ip_block);
20072010
break;
20082011
default:
@@ -2137,6 +2140,7 @@ static int amdgpu_discovery_set_mm_ip_blocks(struct amdgpu_device *adev)
21372140
amdgpu_device_ip_block_add(adev, &jpeg_v4_0_3_ip_block);
21382141
break;
21392142
case IP_VERSION(4, 0, 5):
2143+
case IP_VERSION(4, 0, 6):
21402144
amdgpu_device_ip_block_add(adev, &vcn_v4_0_5_ip_block);
21412145
amdgpu_device_ip_block_add(adev, &jpeg_v4_0_5_ip_block);
21422146
break;
@@ -2182,6 +2186,7 @@ static int amdgpu_discovery_set_mes_ip_blocks(struct amdgpu_device *adev)
21822186
case IP_VERSION(11, 0, 3):
21832187
case IP_VERSION(11, 0, 4):
21842188
case IP_VERSION(11, 5, 0):
2189+
case IP_VERSION(11, 5, 1):
21852190
amdgpu_device_ip_block_add(adev, &mes_v11_0_ip_block);
21862191
adev->enable_mes = true;
21872192
adev->enable_mes_kiq = true;
@@ -2460,6 +2465,7 @@ int amdgpu_discovery_set_ip_blocks(struct amdgpu_device *adev)
24602465
adev->family = AMDGPU_FAMILY_GC_11_0_1;
24612466
break;
24622467
case IP_VERSION(11, 5, 0):
2468+
case IP_VERSION(11, 5, 1):
24632469
adev->family = AMDGPU_FAMILY_GC_11_5_0;
24642470
break;
24652471
default:
@@ -2479,6 +2485,7 @@ int amdgpu_discovery_set_ip_blocks(struct amdgpu_device *adev)
24792485
case IP_VERSION(11, 0, 1):
24802486
case IP_VERSION(11, 0, 4):
24812487
case IP_VERSION(11, 5, 0):
2488+
case IP_VERSION(11, 5, 1):
24822489
adev->flags |= AMD_IS_APU;
24832490
break;
24842491
default:

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

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1350,14 +1350,6 @@ int amdgpu_display_modeset_create_props(struct amdgpu_device *adev)
13501350
"dither",
13511351
amdgpu_dither_enum_list, sz);
13521352

1353-
if (adev->dc_enabled) {
1354-
adev->mode_info.abm_level_property =
1355-
drm_property_create_range(adev_to_drm(adev), 0,
1356-
"abm level", 0, 4);
1357-
if (!adev->mode_info.abm_level_property)
1358-
return -ENOMEM;
1359-
}
1360-
13611353
return 0;
13621354
}
13631355

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

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,7 @@ int amdgpu_mes_kiq;
199199
int amdgpu_noretry = -1;
200200
int amdgpu_force_asic_type = -1;
201201
int amdgpu_tmz = -1; /* auto */
202+
uint amdgpu_freesync_vid_mode;
202203
int amdgpu_reset_method = -1; /* auto */
203204
int amdgpu_num_kcq = -1;
204205
int amdgpu_smartshift_bias;
@@ -883,6 +884,32 @@ module_param_named(damageclips, amdgpu_damage_clips, int, 0444);
883884
MODULE_PARM_DESC(tmz, "Enable TMZ feature (-1 = auto (default), 0 = off, 1 = on)");
884885
module_param_named(tmz, amdgpu_tmz, int, 0444);
885886

887+
/**
888+
* DOC: freesync_video (uint)
889+
* Enable the optimization to adjust front porch timing to achieve seamless
890+
* mode change experience when setting a freesync supported mode for which full
891+
* modeset is not needed.
892+
*
893+
* The Display Core will add a set of modes derived from the base FreeSync
894+
* video mode into the corresponding connector's mode list based on commonly
895+
* used refresh rates and VRR range of the connected display, when users enable
896+
* this feature. From the userspace perspective, they can see a seamless mode
897+
* change experience when the change between different refresh rates under the
898+
* same resolution. Additionally, userspace applications such as Video playback
899+
* can read this modeset list and change the refresh rate based on the video
900+
* frame rate. Finally, the userspace can also derive an appropriate mode for a
901+
* particular refresh rate based on the FreeSync Mode and add it to the
902+
* connector's mode list.
903+
*
904+
* Note: This is an experimental feature.
905+
*
906+
* The default value: 0 (off).
907+
*/
908+
MODULE_PARM_DESC(
909+
freesync_video,
910+
"Enable freesync modesetting optimization feature (0 = off (default), 1 = on)");
911+
module_param_named(freesync_video, amdgpu_freesync_vid_mode, uint, 0444);
912+
886913
/**
887914
* DOC: reset_method (int)
888915
* GPU reset method (-1 = auto (default), 0 = legacy, 1 = mode0, 2 = mode1, 3 = mode2, 4 = baco)
@@ -2764,8 +2791,7 @@ static int amdgpu_pmops_runtime_idle(struct device *dev)
27642791
{
27652792
struct drm_device *drm_dev = dev_get_drvdata(dev);
27662793
struct amdgpu_device *adev = drm_to_adev(drm_dev);
2767-
/* we don't want the main rpm_idle to call suspend - we want to autosuspend */
2768-
int ret = 1;
2794+
int ret;
27692795

27702796
if (adev->pm.rpm_mode == AMDGPU_RUNPM_NONE) {
27712797
pm_runtime_forbid(dev);

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,7 @@ static struct kmem_cache *amdgpu_fence_slab;
6161

6262
int amdgpu_fence_slab_init(void)
6363
{
64-
amdgpu_fence_slab = kmem_cache_create(
65-
"amdgpu_fence", sizeof(struct amdgpu_fence), 0,
66-
SLAB_HWCACHE_ALIGN, NULL);
64+
amdgpu_fence_slab = KMEM_CACHE(amdgpu_fence, SLAB_HWCACHE_ALIGN);
6765
if (!amdgpu_fence_slab)
6866
return -ENOMEM;
6967
return 0;

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -304,11 +304,11 @@ static int amdgpu_gfx_kiq_acquire(struct amdgpu_device *adev,
304304
return -EINVAL;
305305
}
306306

307-
int amdgpu_gfx_kiq_init_ring(struct amdgpu_device *adev,
308-
struct amdgpu_ring *ring,
309-
struct amdgpu_irq_src *irq, int xcc_id)
307+
int amdgpu_gfx_kiq_init_ring(struct amdgpu_device *adev, int xcc_id)
310308
{
311309
struct amdgpu_kiq *kiq = &adev->gfx.kiq[xcc_id];
310+
struct amdgpu_irq_src *irq = &kiq->irq;
311+
struct amdgpu_ring *ring = &kiq->ring;
312312
int r = 0;
313313

314314
spin_lock_init(&kiq->ring_lock);

0 commit comments

Comments
 (0)