Skip to content

Commit b7e00d6

Browse files
committed
Merge tag 'drm-fixes-2022-09-10' of git://anongit.freedesktop.org/drm/drm
Pull drm fixes from Dave Airlie: "From a train in the Irish countryside, regular drm fixes for 6.0-rc5. This is mostly amdgpu/amdkfd and i915 fixes, then one panfrost, one ttm and one edid fix. Nothing too major going on. Hopefully a quiet week next week for LPC. edid: - Fix EDID 1.4 range-descriptor parsing ttm: - Fix ghost-object bulk moves i915: - Fix MIPI sequence block copy from BIOS' table - Fix PCODE min freq setup when GuC's SLPC is in use - Implement Workaround for eDP - Fix has_flat_ccs selection for DG1 amdgpu: - Firmware header fix - SMU 13.x fix - Debugfs memory leak fix - NBIO 7.7 fix - Firmware memory leak fix amdkfd: - Debug output fix panfrost: - Fix devfreq OPP" * tag 'drm-fixes-2022-09-10' of git://anongit.freedesktop.org/drm/drm: drm/panfrost: devfreq: set opp to the recommended one to configure regulator drm/ttm: cleanup the resource of ghost objects after locking them drm/amdgpu: prevent toc firmware memory leak drm/amdgpu: correct doorbell range/size value for CSDMA_DOORBELL_RANGE drm/amdkfd: print address in hex format rather than decimal drm/amd/display: fix memory leak when using debugfs_lookup() drm/amd/pm: add missing SetMGpuFanBoostLimitRpm mapping for SMU 13.0.7 drm/amd/amdgpu: add rlc_firmware_header_v2_4 to amdgpu_firmware_header drm/i915: consider HAS_FLAT_CCS() in needs_ccs_pages drm/i915: Implement WaEdpLinkRateDataReload drm/i915/slpc: Let's fix the PCODE min freq table setup for SLPC drm/i915/bios: Copy the whole MIPI sequence block drm/ttm: update bulk move object of ghost BO drm/edid: Handle EDID 1.4 range descriptor h/vfreq offsets
2 parents e35ff25 + 2edb79a commit b7e00d6

File tree

19 files changed

+149
-35
lines changed

19 files changed

+149
-35
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1728,7 +1728,7 @@ int amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu(
17281728
add_kgd_mem_to_kfd_bo_list(*mem, avm->process_info, user_addr);
17291729

17301730
if (user_addr) {
1731-
pr_debug("creating userptr BO for user_addr = %llu\n", user_addr);
1731+
pr_debug("creating userptr BO for user_addr = %llx\n", user_addr);
17321732
ret = init_user_pages(*mem, user_addr, criu_resume);
17331733
if (ret)
17341734
goto allocate_init_user_pages_failed;

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -486,11 +486,14 @@ static int psp_sw_fini(void *handle)
486486
release_firmware(psp->ta_fw);
487487
psp->ta_fw = NULL;
488488
}
489-
if (adev->psp.cap_fw) {
489+
if (psp->cap_fw) {
490490
release_firmware(psp->cap_fw);
491491
psp->cap_fw = NULL;
492492
}
493-
493+
if (psp->toc_fw) {
494+
release_firmware(psp->toc_fw);
495+
psp->toc_fw = NULL;
496+
}
494497
if (adev->ip_versions[MP0_HWIP][0] == IP_VERSION(11, 0, 0) ||
495498
adev->ip_versions[MP0_HWIP][0] == IP_VERSION(11, 0, 7))
496499
psp_sysfs_fini(adev);

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -390,6 +390,7 @@ union amdgpu_firmware_header {
390390
struct rlc_firmware_header_v2_1 rlc_v2_1;
391391
struct rlc_firmware_header_v2_2 rlc_v2_2;
392392
struct rlc_firmware_header_v2_3 rlc_v2_3;
393+
struct rlc_firmware_header_v2_4 rlc_v2_4;
393394
struct sdma_firmware_header_v1_0 sdma;
394395
struct sdma_firmware_header_v1_1 sdma_v1_1;
395396
struct sdma_firmware_header_v2_0 sdma_v2_0;

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

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -68,12 +68,6 @@ static void nbio_v7_7_sdma_doorbell_range(struct amdgpu_device *adev, int instan
6868
doorbell_range = REG_SET_FIELD(doorbell_range,
6969
GDC0_BIF_CSDMA_DOORBELL_RANGE,
7070
SIZE, doorbell_size);
71-
doorbell_range = REG_SET_FIELD(doorbell_range,
72-
GDC0_BIF_SDMA0_DOORBELL_RANGE,
73-
OFFSET, doorbell_index);
74-
doorbell_range = REG_SET_FIELD(doorbell_range,
75-
GDC0_BIF_SDMA0_DOORBELL_RANGE,
76-
SIZE, doorbell_size);
7771
} else {
7872
doorbell_range = REG_SET_FIELD(doorbell_range,
7973
GDC0_BIF_SDMA0_DOORBELL_RANGE,

drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3288,6 +3288,7 @@ void crtc_debugfs_init(struct drm_crtc *crtc)
32883288
&crc_win_y_end_fops);
32893289
debugfs_create_file_unsafe("crc_win_update", 0644, dir, crtc,
32903290
&crc_win_update_fops);
3291+
dput(dir);
32913292
#endif
32923293
debugfs_create_file("amdgpu_current_bpc", 0644, crtc->debugfs_entry,
32933294
crtc, &amdgpu_current_bpc_fops);

drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ static struct cmn2asic_msg_mapping smu_v13_0_7_message_map[SMU_MSG_MAX_COUNT] =
120120
MSG_MAP(DisallowGfxOff, PPSMC_MSG_DisallowGfxOff, 0),
121121
MSG_MAP(Mode1Reset, PPSMC_MSG_Mode1Reset, 0),
122122
MSG_MAP(PrepareMp1ForUnload, PPSMC_MSG_PrepareMp1ForUnload, 0),
123+
MSG_MAP(SetMGpuFanBoostLimitRpm, PPSMC_MSG_SetMGpuFanBoostLimitRpm, 0),
123124
};
124125

125126
static struct cmn2asic_mapping smu_v13_0_7_clk_map[SMU_CLK_COUNT] = {

drivers/gpu/drm/drm_debugfs.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -377,8 +377,8 @@ static int vrr_range_show(struct seq_file *m, void *data)
377377
if (connector->status != connector_status_connected)
378378
return -ENODEV;
379379

380-
seq_printf(m, "Min: %u\n", (u8)connector->display_info.monitor_range.min_vfreq);
381-
seq_printf(m, "Max: %u\n", (u8)connector->display_info.monitor_range.max_vfreq);
380+
seq_printf(m, "Min: %u\n", connector->display_info.monitor_range.min_vfreq);
381+
seq_printf(m, "Max: %u\n", connector->display_info.monitor_range.max_vfreq);
382382

383383
return 0;
384384
}

drivers/gpu/drm/drm_edid.c

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5971,12 +5971,14 @@ static void drm_parse_cea_ext(struct drm_connector *connector,
59715971
}
59725972

59735973
static
5974-
void get_monitor_range(const struct detailed_timing *timing,
5975-
void *info_monitor_range)
5974+
void get_monitor_range(const struct detailed_timing *timing, void *c)
59765975
{
5977-
struct drm_monitor_range_info *monitor_range = info_monitor_range;
5976+
struct detailed_mode_closure *closure = c;
5977+
struct drm_display_info *info = &closure->connector->display_info;
5978+
struct drm_monitor_range_info *monitor_range = &info->monitor_range;
59785979
const struct detailed_non_pixel *data = &timing->data.other_data;
59795980
const struct detailed_data_monitor_range *range = &data->data.range;
5981+
const struct edid *edid = closure->drm_edid->edid;
59805982

59815983
if (!is_display_descriptor(timing, EDID_DETAIL_MONITOR_RANGE))
59825984
return;
@@ -5992,18 +5994,28 @@ void get_monitor_range(const struct detailed_timing *timing,
59925994

59935995
monitor_range->min_vfreq = range->min_vfreq;
59945996
monitor_range->max_vfreq = range->max_vfreq;
5997+
5998+
if (edid->revision >= 4) {
5999+
if (data->pad2 & DRM_EDID_RANGE_OFFSET_MIN_VFREQ)
6000+
monitor_range->min_vfreq += 255;
6001+
if (data->pad2 & DRM_EDID_RANGE_OFFSET_MAX_VFREQ)
6002+
monitor_range->max_vfreq += 255;
6003+
}
59956004
}
59966005

59976006
static void drm_get_monitor_range(struct drm_connector *connector,
59986007
const struct drm_edid *drm_edid)
59996008
{
6000-
struct drm_display_info *info = &connector->display_info;
6009+
const struct drm_display_info *info = &connector->display_info;
6010+
struct detailed_mode_closure closure = {
6011+
.connector = connector,
6012+
.drm_edid = drm_edid,
6013+
};
60016014

60026015
if (!version_greater(drm_edid, 1, 1))
60036016
return;
60046017

6005-
drm_for_each_detailed_block(drm_edid, get_monitor_range,
6006-
&info->monitor_range);
6018+
drm_for_each_detailed_block(drm_edid, get_monitor_range, &closure);
60076019

60086020
DRM_DEBUG_KMS("Supported Monitor Refresh rate range is %d Hz - %d Hz\n",
60096021
info->monitor_range.min_vfreq,

drivers/gpu/drm/i915/display/intel_bios.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -479,6 +479,13 @@ init_bdb_block(struct drm_i915_private *i915,
479479

480480
block_size = get_blocksize(block);
481481

482+
/*
483+
* Version number and new block size are considered
484+
* part of the header for MIPI sequenece block v3+.
485+
*/
486+
if (section_id == BDB_MIPI_SEQUENCE && *(const u8 *)block >= 3)
487+
block_size += 5;
488+
482489
entry = kzalloc(struct_size(entry, data, max(min_size, block_size) + 3),
483490
GFP_KERNEL);
484491
if (!entry) {

drivers/gpu/drm/i915/display/intel_dp_link_training.c

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -671,6 +671,28 @@ intel_dp_prepare_link_train(struct intel_dp *intel_dp,
671671
intel_dp_compute_rate(intel_dp, crtc_state->port_clock,
672672
&link_bw, &rate_select);
673673

674+
/*
675+
* WaEdpLinkRateDataReload
676+
*
677+
* Parade PS8461E MUX (used on varius TGL+ laptops) needs
678+
* to snoop the link rates reported by the sink when we
679+
* use LINK_RATE_SET in order to operate in jitter cleaning
680+
* mode (as opposed to redriver mode). Unfortunately it
681+
* loses track of the snooped link rates when powered down,
682+
* so we need to make it re-snoop often. Without this high
683+
* link rates are not stable.
684+
*/
685+
if (!link_bw) {
686+
struct intel_connector *connector = intel_dp->attached_connector;
687+
__le16 sink_rates[DP_MAX_SUPPORTED_RATES];
688+
689+
drm_dbg_kms(&i915->drm, "[CONNECTOR:%d:%s] Reloading eDP link rates\n",
690+
connector->base.base.id, connector->base.name);
691+
692+
drm_dp_dpcd_read(&intel_dp->aux, DP_SUPPORTED_LINK_RATES,
693+
sink_rates, sizeof(sink_rates));
694+
}
695+
674696
if (link_bw)
675697
drm_dbg_kms(&i915->drm,
676698
"[ENCODER:%d:%s] Using LINK_BW_SET value %02x\n",

0 commit comments

Comments
 (0)