[PATCH] drm/amd/powerplay: add support for 3DP 4K at 120Hz on vega10.
Deucher, Alexander
Alexander.Deucher at amd.com
Wed Jul 19 11:56:33 UTC 2017
> -----Original Message-----
> From: amd-gfx [mailto:amd-gfx-bounces at lists.freedesktop.org] On Behalf
> Of Rex Zhu
> Sent: Wednesday, July 19, 2017 5:29 AM
> To: amd-gfx at lists.freedesktop.org
> Cc: Zhu, Rex
> Subject: [PATCH] drm/amd/powerplay: add support for 3DP 4K at 120Hz on
> vega10.
>
> Change-Id: Ic884366431afde180f9926963871a8daddc4588e
> Signed-off-by: Rex Zhu <Rex.Zhu at amd.com>
Reviewed-by: Alex Deucher <alexander.deucher at amd.com>
> ---
> .../amd/powerplay/hwmgr/vega10_processpptables.c | 39
> ++++++++++++++++++++--
> 1 file changed, 37 insertions(+), 2 deletions(-)
>
> diff --git
> a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_processpptables.c
> b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_processpptables.c
> index 1623644..22ebecf 100644
> --- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_processpptables.c
> +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_processpptables.c
> @@ -31,6 +31,8 @@
> #include "cgs_common.h"
> #include "vega10_pptable.h"
>
> +#define NUM_DSPCLK_LEVELS 8
> +
> static void set_hw_cap(struct pp_hwmgr *hwmgr, bool enable,
> enum phm_platform_caps cap)
> {
> @@ -651,15 +653,43 @@ static int get_dcefclk_voltage_dependency_table(
> const ATOM_Vega10_DCEFCLK_Dependency_Table
> *clk_dep_table)
> {
> uint32_t table_size, i;
> + uint8_t num_entries;
> struct phm_ppt_v1_clock_voltage_dependency_table
> *clk_table;
> + struct cgs_system_info sys_info = {0};
> + uint32_t dev_id;
> + uint32_t rev_id;
>
> PP_ASSERT_WITH_CODE((clk_dep_table->ucNumEntries != 0),
> "Invalid PowerPlay Table!", return -1);
>
> +/*
> + * workaround needed to add another DPM level for pioneer cards
> + * as VBIOS is locked down.
> + * This DPM level was added to support 3DPM monitors @ 4K120Hz
> + *
> + */
> + sys_info.size = sizeof(struct cgs_system_info);
> + sys_info.info_id = CGS_SYSTEM_INFO_PCIE_DEV;
> + cgs_query_system_info(hwmgr->device, &sys_info);
> + dev_id = (uint32_t)sys_info.value;
> +
> + sys_info.size = sizeof(struct cgs_system_info);
> + sys_info.info_id = CGS_SYSTEM_INFO_PCIE_REV;
> + cgs_query_system_info(hwmgr->device, &sys_info);
> + rev_id = (uint32_t)sys_info.value;
> +
> + if (dev_id == 0x6863 && rev_id == 0 &&
> + clk_dep_table->entries[clk_dep_table->ucNumEntries -
> 1].ulClk < 90000)
> + num_entries = clk_dep_table->ucNumEntries + 1 >
> NUM_DSPCLK_LEVELS ?
> + NUM_DSPCLK_LEVELS : clk_dep_table-
> >ucNumEntries + 1;
> + else
> + num_entries = clk_dep_table->ucNumEntries;
> +
> +
> table_size = sizeof(uint32_t) +
>
> sizeof(phm_ppt_v1_clock_voltage_dependency_record) *
> - clk_dep_table->ucNumEntries;
> + num_entries;
>
> clk_table = (struct phm_ppt_v1_clock_voltage_dependency_table *)
> kzalloc(table_size, GFP_KERNEL);
> @@ -667,7 +697,7 @@ static int get_dcefclk_voltage_dependency_table(
> if (!clk_table)
> return -ENOMEM;
>
> - clk_table->count = clk_dep_table->ucNumEntries;
> + clk_table->count = (uint32_t)num_entries;
>
> for (i = 0; i < clk_table->count; i++) {
> clk_table->entries[i].vddInd =
> @@ -676,6 +706,11 @@ static int get_dcefclk_voltage_dependency_table(
> le32_to_cpu(clk_dep_table-
> >entries[i].ulClk);
> }
>
> + if (i < num_entries) {
> + clk_table->entries[i].vddInd = clk_dep_table->entries[i-
> 1].ucVddInd;
> + clk_table->entries[i].clk = 90000;
> + }
> +
> *pp_vega10_clk_dep_table = clk_table;
>
> return 0;
> --
> 1.9.1
>
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
More information about the amd-gfx
mailing list