[PATCH] drm/amd/powerplay: add support for 3DP 4K@120Hz on vega10.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> -----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


[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux