Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'drm-fixes-5.0' of git://people.freedesktop.org/~agd5f/linux into drm-fixes

amdgpu:
- Vega20 psp fix
- Add vrr range to debugfs for freesync debugging

sched:
- Scheduler race fix

Signed-off-by: Dave Airlie <airlied@redhat.com>
From: Alex Deucher <alexdeucher@gmail.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190213202958.3336-1-alexander.deucher@amd.com

+45 -19
+7 -2
drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
··· 90 90 adev->psp.sos_fw = NULL; 91 91 release_firmware(adev->psp.asd_fw); 92 92 adev->psp.asd_fw = NULL; 93 - release_firmware(adev->psp.ta_fw); 94 - adev->psp.ta_fw = NULL; 93 + if (adev->psp.ta_fw) { 94 + release_firmware(adev->psp.ta_fw); 95 + adev->psp.ta_fw = NULL; 96 + } 95 97 return 0; 96 98 } 97 99 ··· 436 434 { 437 435 struct ta_xgmi_shared_memory *xgmi_cmd; 438 436 int ret; 437 + 438 + if (!psp->adev->psp.ta_fw) 439 + return -ENOENT; 439 440 440 441 if (!psp->xgmi_context.initialized) { 441 442 ret = psp_xgmi_init_shared_buf(psp);
+15 -11
drivers/gpu/drm/amd/amdgpu/psp_v11_0.c
··· 152 152 153 153 snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_ta.bin", chip_name); 154 154 err = request_firmware(&adev->psp.ta_fw, fw_name, adev->dev); 155 - if (err) 156 - goto out2; 155 + if (err) { 156 + release_firmware(adev->psp.ta_fw); 157 + adev->psp.ta_fw = NULL; 158 + dev_info(adev->dev, 159 + "psp v11.0: Failed to load firmware \"%s\"\n", fw_name); 160 + } else { 161 + err = amdgpu_ucode_validate(adev->psp.ta_fw); 162 + if (err) 163 + goto out2; 157 164 158 - err = amdgpu_ucode_validate(adev->psp.ta_fw); 159 - if (err) 160 - goto out2; 161 - 162 - ta_hdr = (const struct ta_firmware_header_v1_0 *)adev->psp.ta_fw->data; 163 - adev->psp.ta_xgmi_ucode_version = le32_to_cpu(ta_hdr->ta_xgmi_ucode_version); 164 - adev->psp.ta_xgmi_ucode_size = le32_to_cpu(ta_hdr->ta_xgmi_size_bytes); 165 - adev->psp.ta_xgmi_start_addr = (uint8_t *)ta_hdr + 166 - le32_to_cpu(ta_hdr->header.ucode_array_offset_bytes); 165 + ta_hdr = (const struct ta_firmware_header_v1_0 *)adev->psp.ta_fw->data; 166 + adev->psp.ta_xgmi_ucode_version = le32_to_cpu(ta_hdr->ta_xgmi_ucode_version); 167 + adev->psp.ta_xgmi_ucode_size = le32_to_cpu(ta_hdr->ta_xgmi_size_bytes); 168 + adev->psp.ta_xgmi_start_addr = (uint8_t *)ta_hdr + 169 + le32_to_cpu(ta_hdr->header.ucode_array_offset_bytes); 170 + } 167 171 168 172 return 0; 169 173
+21 -1
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.c
··· 671 671 return bytes_from_user; 672 672 } 673 673 674 + /* 675 + * Returns the min and max vrr vfreq through the connector's debugfs file. 676 + * Example usage: cat /sys/kernel/debug/dri/0/DP-1/vrr_range 677 + */ 678 + static int vrr_range_show(struct seq_file *m, void *data) 679 + { 680 + struct drm_connector *connector = m->private; 681 + struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector); 682 + 683 + if (connector->status != connector_status_connected) 684 + return -ENODEV; 685 + 686 + seq_printf(m, "Min: %u\n", (unsigned int)aconnector->min_vfreq); 687 + seq_printf(m, "Max: %u\n", (unsigned int)aconnector->max_vfreq); 688 + 689 + return 0; 690 + } 691 + DEFINE_SHOW_ATTRIBUTE(vrr_range); 692 + 674 693 static const struct file_operations dp_link_settings_debugfs_fops = { 675 694 .owner = THIS_MODULE, 676 695 .read = dp_link_settings_read, ··· 716 697 } dp_debugfs_entries[] = { 717 698 {"link_settings", &dp_link_settings_debugfs_fops}, 718 699 {"phy_settings", &dp_phy_settings_debugfs_fop}, 719 - {"test_pattern", &dp_phy_test_pattern_fops} 700 + {"test_pattern", &dp_phy_test_pattern_fops}, 701 + {"vrr_range", &vrr_range_fops} 720 702 }; 721 703 722 704 int connector_debugfs_init(struct amdgpu_dm_connector *connector)
+2 -5
drivers/gpu/drm/scheduler/sched_entity.c
··· 440 440 441 441 while ((entity->dependency = 442 442 sched->ops->dependency(sched_job, entity))) { 443 + trace_drm_sched_job_wait_dep(sched_job, entity->dependency); 443 444 444 - if (drm_sched_entity_add_dependency_cb(entity)) { 445 - 446 - trace_drm_sched_job_wait_dep(sched_job, 447 - entity->dependency); 445 + if (drm_sched_entity_add_dependency_cb(entity)) 448 446 return NULL; 449 - } 450 447 } 451 448 452 449 /* skip jobs from entity that marked guilty */