diff options
Diffstat (limited to 'common/recipes-kernel/linux/files/1024-drm-amdgpu-dce11.2-pick-pll-based-on-transmitter.patch')
-rw-r--r-- | common/recipes-kernel/linux/files/1024-drm-amdgpu-dce11.2-pick-pll-based-on-transmitter.patch | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/1024-drm-amdgpu-dce11.2-pick-pll-based-on-transmitter.patch b/common/recipes-kernel/linux/files/1024-drm-amdgpu-dce11.2-pick-pll-based-on-transmitter.patch new file mode 100644 index 00000000..6a79c195 --- /dev/null +++ b/common/recipes-kernel/linux/files/1024-drm-amdgpu-dce11.2-pick-pll-based-on-transmitter.patch @@ -0,0 +1,62 @@ +From 50efa1d0792c189c154143fc9a26192881b660ac Mon Sep 17 00:00:00 2001 +From: Alex Deucher <alexander.deucher@amd.com> +Date: Mon, 18 Apr 2016 17:40:52 -0400 +Subject: [PATCH 1024/1110] drm/amdgpu/dce11.2: pick pll based on transmitter + +The plls are part of the phys. + +Reviewed-by: Harry Wentland <harry.wentland@amd.com> +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/dce_v11_0.c | 28 +++++++++++++++++++++++++++- + 1 file changed, 27 insertions(+), 1 deletion(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c +index 22c6250..6a2c77d 100644 +--- a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c ++++ b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c +@@ -2412,6 +2412,10 @@ static u32 dce_v11_0_pick_pll(struct drm_crtc *crtc) + + if ((adev->asic_type == CHIP_POLARIS10) || + (adev->asic_type == CHIP_POLARIS11)) { ++ struct amdgpu_encoder *amdgpu_encoder = ++ to_amdgpu_encoder(amdgpu_crtc->encoder); ++ struct amdgpu_encoder_atom_dig *dig = amdgpu_encoder->enc_priv; ++ + if (ENCODER_MODE_IS_DP(amdgpu_atombios_encoder_get_encoder_mode(amdgpu_crtc->encoder))) + return ATOM_DP_DTO; + /* use the same PPLL for all monitors with the same clock */ +@@ -2419,7 +2423,29 @@ static u32 dce_v11_0_pick_pll(struct drm_crtc *crtc) + if (pll != ATOM_PPLL_INVALID) + return pll; + +- return ATOM_COMBOPHY_PLL0 + amdgpu_crtc->crtc_id; ++ switch (amdgpu_encoder->encoder_id) { ++ case ENCODER_OBJECT_ID_INTERNAL_UNIPHY: ++ if (dig->linkb) ++ return ATOM_COMBOPHY_PLL1; ++ else ++ return ATOM_COMBOPHY_PLL0; ++ break; ++ case ENCODER_OBJECT_ID_INTERNAL_UNIPHY1: ++ if (dig->linkb) ++ return ATOM_COMBOPHY_PLL3; ++ else ++ return ATOM_COMBOPHY_PLL2; ++ break; ++ case ENCODER_OBJECT_ID_INTERNAL_UNIPHY2: ++ if (dig->linkb) ++ return ATOM_COMBOPHY_PLL5; ++ else ++ return ATOM_COMBOPHY_PLL4; ++ break; ++ default: ++ DRM_ERROR("invalid encoder_id: 0x%x\n", amdgpu_encoder->encoder_id); ++ return ATOM_PPLL_INVALID; ++ } + } + + if (ENCODER_MODE_IS_DP(amdgpu_atombios_encoder_get_encoder_mode(amdgpu_crtc->encoder))) { +-- +2.7.4 + |