Commit 1c01a45a authored by Leo Li's avatar Leo Li Committed by Alex Deucher

drm/amd/display: Add functionality to get XGMI SS info

[Why]
When XGMI is enabled, the DP reference clock needs to be adjusted
according to the XGMI spread spectrum percentage and mode. But first,
we need the ability to fetch this info.

[How]
Within the BIOS parser, Read from vBIOS when XGMI SS info is requested.

In addition, diags build uses include_legacy/atomfirmware.h for the
smu_info_v3_3 table headers. Update that as well.
Signed-off-by: default avatarLeo Li <sunpeng.li@amd.com>
Reviewed-by: default avatarNicholas Kazlauskas <Nicholas.Kazlauskas@amd.com>
Acked-by: default avatarTony Cheng <Tony.Cheng@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent b8b6ce89
...@@ -638,6 +638,7 @@ static enum bp_result get_ss_info_v4_1( ...@@ -638,6 +638,7 @@ static enum bp_result get_ss_info_v4_1(
{ {
enum bp_result result = BP_RESULT_OK; enum bp_result result = BP_RESULT_OK;
struct atom_display_controller_info_v4_1 *disp_cntl_tbl = NULL; struct atom_display_controller_info_v4_1 *disp_cntl_tbl = NULL;
struct atom_smu_info_v3_3 *smu_info = NULL;
if (!ss_info) if (!ss_info)
return BP_RESULT_BADINPUT; return BP_RESULT_BADINPUT;
...@@ -650,6 +651,7 @@ static enum bp_result get_ss_info_v4_1( ...@@ -650,6 +651,7 @@ static enum bp_result get_ss_info_v4_1(
if (!disp_cntl_tbl) if (!disp_cntl_tbl)
return BP_RESULT_BADBIOSTABLE; return BP_RESULT_BADBIOSTABLE;
ss_info->type.STEP_AND_DELAY_INFO = false; ss_info->type.STEP_AND_DELAY_INFO = false;
ss_info->spread_percentage_divider = 1000; ss_info->spread_percentage_divider = 1000;
/* BIOS no longer uses target clock. Always enable for now */ /* BIOS no longer uses target clock. Always enable for now */
...@@ -688,6 +690,19 @@ static enum bp_result get_ss_info_v4_1( ...@@ -688,6 +690,19 @@ static enum bp_result get_ss_info_v4_1(
*/ */
result = BP_RESULT_UNSUPPORTED; result = BP_RESULT_UNSUPPORTED;
break; break;
case AS_SIGNAL_TYPE_XGMI:
smu_info = GET_IMAGE(struct atom_smu_info_v3_3,
DATA_TABLES(smu_info));
if (!smu_info)
return BP_RESULT_BADBIOSTABLE;
ss_info->spread_spectrum_percentage =
smu_info->waflclk_ss_percentage;
ss_info->spread_spectrum_range =
smu_info->gpuclk_ss_rate_10hz * 10;
if (smu_info->waflclk_ss_mode & ATOM_SS_CENTRE_SPREAD_MODE)
ss_info->type.CENTER_MODE = true;
break;
default: default:
result = BP_RESULT_UNSUPPORTED; result = BP_RESULT_UNSUPPORTED;
} }
......
...@@ -41,6 +41,7 @@ enum as_signal_type { ...@@ -41,6 +41,7 @@ enum as_signal_type {
AS_SIGNAL_TYPE_LVDS, AS_SIGNAL_TYPE_LVDS,
AS_SIGNAL_TYPE_DISPLAY_PORT, AS_SIGNAL_TYPE_DISPLAY_PORT,
AS_SIGNAL_TYPE_GPU_PLL, AS_SIGNAL_TYPE_GPU_PLL,
AS_SIGNAL_TYPE_XGMI,
AS_SIGNAL_TYPE_UNKNOWN AS_SIGNAL_TYPE_UNKNOWN
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment