mirror of https://gitee.com/openkylin/linux.git
Merge tag 'amd-drm-fixes-5.9-2020-09-17' of git://people.freedesktop.org/~agd5f/linux into drm-fixes
amd-drm-fixes-5.9-2020-09-17: amdgpu: - Sienna Cichlid fixes - Navy Flounder fixes - DC fixes amdkfd: - Fix a GPU reset crash - Fix a memory leak radeon: - Revert a PLL fix that broke other boards Signed-off-by: Dave Airlie <airlied@redhat.com> From: Alex Deucher <alexdeucher@gmail.com> Link: https://patchwork.freedesktop.org/patch/msgid/20200917043818.3717-1-alexander.deucher@amd.com
This commit is contained in:
commit
4b1ededb69
|
@ -178,7 +178,7 @@ static int psp_sw_init(void *handle)
|
|||
return ret;
|
||||
}
|
||||
|
||||
if (adev->asic_type == CHIP_NAVI10) {
|
||||
if (adev->asic_type == CHIP_NAVI10 || adev->asic_type == CHIP_SIENNA_CICHLID) {
|
||||
ret= psp_sysfs_init(adev);
|
||||
if (ret) {
|
||||
return ret;
|
||||
|
|
|
@ -58,7 +58,7 @@ MODULE_FIRMWARE("amdgpu/arcturus_ta.bin");
|
|||
MODULE_FIRMWARE("amdgpu/sienna_cichlid_sos.bin");
|
||||
MODULE_FIRMWARE("amdgpu/sienna_cichlid_ta.bin");
|
||||
MODULE_FIRMWARE("amdgpu/navy_flounder_sos.bin");
|
||||
MODULE_FIRMWARE("amdgpu/navy_flounder_asd.bin");
|
||||
MODULE_FIRMWARE("amdgpu/navy_flounder_ta.bin");
|
||||
|
||||
/* address block */
|
||||
#define smnMP1_FIRMWARE_FLAGS 0x3010024
|
||||
|
|
|
@ -1216,6 +1216,8 @@ static int stop_cpsch(struct device_queue_manager *dqm)
|
|||
dqm->sched_running = false;
|
||||
dqm_unlock(dqm);
|
||||
|
||||
pm_release_ib(&dqm->packets);
|
||||
|
||||
kfd_gtt_sa_free(dqm->dev, dqm->fence_mem);
|
||||
pm_uninit(&dqm->packets, hanging);
|
||||
|
||||
|
@ -1326,7 +1328,7 @@ static int create_queue_cpsch(struct device_queue_manager *dqm, struct queue *q,
|
|||
if (q->properties.is_active) {
|
||||
increment_queue_count(dqm, q->properties.type);
|
||||
|
||||
retval = execute_queues_cpsch(dqm,
|
||||
execute_queues_cpsch(dqm,
|
||||
KFD_UNMAP_QUEUES_FILTER_DYNAMIC_QUEUES, 0);
|
||||
}
|
||||
|
||||
|
|
|
@ -5278,19 +5278,6 @@ static void dm_crtc_helper_disable(struct drm_crtc *crtc)
|
|||
{
|
||||
}
|
||||
|
||||
static bool does_crtc_have_active_cursor(struct drm_crtc_state *new_crtc_state)
|
||||
{
|
||||
struct drm_device *dev = new_crtc_state->crtc->dev;
|
||||
struct drm_plane *plane;
|
||||
|
||||
drm_for_each_plane_mask(plane, dev, new_crtc_state->plane_mask) {
|
||||
if (plane->type == DRM_PLANE_TYPE_CURSOR)
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static int count_crtc_active_planes(struct drm_crtc_state *new_crtc_state)
|
||||
{
|
||||
struct drm_atomic_state *state = new_crtc_state->state;
|
||||
|
@ -5354,19 +5341,20 @@ static int dm_crtc_helper_atomic_check(struct drm_crtc *crtc,
|
|||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* We require the primary plane to be enabled whenever the CRTC is, otherwise
|
||||
* drm_mode_cursor_universal may end up trying to enable the cursor plane while all other
|
||||
* planes are disabled, which is not supported by the hardware. And there is legacy
|
||||
* userspace which stops using the HW cursor altogether in response to the resulting EINVAL.
|
||||
*/
|
||||
if (state->enable &&
|
||||
!(state->plane_mask & drm_plane_mask(crtc->primary)))
|
||||
return -EINVAL;
|
||||
|
||||
/* In some use cases, like reset, no stream is attached */
|
||||
if (!dm_crtc_state->stream)
|
||||
return 0;
|
||||
|
||||
/*
|
||||
* We want at least one hardware plane enabled to use
|
||||
* the stream with a cursor enabled.
|
||||
*/
|
||||
if (state->enable && state->active &&
|
||||
does_crtc_have_active_cursor(state) &&
|
||||
dm_crtc_state->active_planes == 0)
|
||||
return -EINVAL;
|
||||
|
||||
if (dc_validate_stream(dc, dm_crtc_state->stream) == DC_OK)
|
||||
return 0;
|
||||
|
||||
|
|
|
@ -409,8 +409,8 @@ static struct _vcs_dpi_soc_bounding_box_st dcn2_0_nv14_soc = {
|
|||
},
|
||||
},
|
||||
.num_states = 5,
|
||||
.sr_exit_time_us = 8.6,
|
||||
.sr_enter_plus_exit_time_us = 10.9,
|
||||
.sr_exit_time_us = 11.6,
|
||||
.sr_enter_plus_exit_time_us = 13.9,
|
||||
.urgent_latency_us = 4.0,
|
||||
.urgent_latency_pixel_data_only_us = 4.0,
|
||||
.urgent_latency_pixel_mixed_with_vm_data_us = 4.0,
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
#define MOD_HDCP_LOG_H_
|
||||
|
||||
#ifdef CONFIG_DRM_AMD_DC_HDCP
|
||||
#define HDCP_LOG_ERR(hdcp, ...) DRM_WARN(__VA_ARGS__)
|
||||
#define HDCP_LOG_ERR(hdcp, ...) DRM_DEBUG_KMS(__VA_ARGS__)
|
||||
#define HDCP_LOG_VER(hdcp, ...) DRM_DEBUG_KMS(__VA_ARGS__)
|
||||
#define HDCP_LOG_FSM(hdcp, ...) DRM_DEBUG_KMS(__VA_ARGS__)
|
||||
#define HDCP_LOG_TOP(hdcp, ...) pr_debug("[HDCP_TOP]:"__VA_ARGS__)
|
||||
|
|
|
@ -88,7 +88,7 @@ enum mod_hdcp_status mod_hdcp_add_display_to_topology(struct mod_hdcp *hdcp,
|
|||
enum mod_hdcp_status status = MOD_HDCP_STATUS_SUCCESS;
|
||||
|
||||
if (!psp->dtm_context.dtm_initialized) {
|
||||
DRM_ERROR("Failed to add display topology, DTM TA is not initialized.");
|
||||
DRM_INFO("Failed to add display topology, DTM TA is not initialized.");
|
||||
display->state = MOD_HDCP_DISPLAY_INACTIVE;
|
||||
return MOD_HDCP_STATUS_FAILURE;
|
||||
}
|
||||
|
|
|
@ -1126,7 +1126,7 @@ static int smu_disable_dpms(struct smu_context *smu)
|
|||
*/
|
||||
if (smu->uploading_custom_pp_table &&
|
||||
(adev->asic_type >= CHIP_NAVI10) &&
|
||||
(adev->asic_type <= CHIP_NAVI12))
|
||||
(adev->asic_type <= CHIP_NAVY_FLOUNDER))
|
||||
return 0;
|
||||
|
||||
/*
|
||||
|
@ -1211,7 +1211,9 @@ static int smu_hw_fini(void *handle)
|
|||
int smu_reset(struct smu_context *smu)
|
||||
{
|
||||
struct amdgpu_device *adev = smu->adev;
|
||||
int ret = 0;
|
||||
int ret;
|
||||
|
||||
amdgpu_gfx_off_ctrl(smu->adev, false);
|
||||
|
||||
ret = smu_hw_fini(adev);
|
||||
if (ret)
|
||||
|
@ -1222,8 +1224,12 @@ int smu_reset(struct smu_context *smu)
|
|||
return ret;
|
||||
|
||||
ret = smu_late_init(adev);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
return ret;
|
||||
amdgpu_gfx_off_ctrl(smu->adev, true);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int smu_suspend(void *handle)
|
||||
|
|
|
@ -933,7 +933,7 @@ static void avivo_get_fb_ref_div(unsigned nom, unsigned den, unsigned post_div,
|
|||
|
||||
/* get matching reference and feedback divider */
|
||||
*ref_div = min(max(den/post_div, 1u), ref_div_max);
|
||||
*fb_div = max(nom * *ref_div * post_div / den, 1u);
|
||||
*fb_div = DIV_ROUND_CLOSEST(nom * *ref_div * post_div, den);
|
||||
|
||||
/* limit fb divider to its maximum */
|
||||
if (*fb_div > fb_div_max) {
|
||||
|
|
Loading…
Reference in New Issue