drm/amd/display: BIOS LTTPR Caps Interface

[WHY]
Some platforms will have LTTPR capabilities forced on by VBIOS flags;
the functions added here will access those flags.

Signed-off-by: Wesley Chalmers <Wesley.Chalmers@amd.com>
Reviewed-by: Jun Lei <Jun.Lei@amd.com>
Acked-by: Anson Jacob <Anson.Jacob@amd.com>
Tested-by: Dan Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
Wesley Chalmers
2021-02-21 23:05:48 -05:00
committed by Alex Deucher
parent 0698b13403
commit 95574c6961
3 changed files with 178 additions and 1 deletions

View File

@@ -916,6 +916,143 @@ static enum bp_result bios_parser_get_soc_bb_info(
return result;
}
static enum bp_result get_lttpr_caps_v4_1(
struct bios_parser *bp,
uint8_t *dce_caps)
{
enum bp_result result = BP_RESULT_OK;
struct atom_display_controller_info_v4_1 *disp_cntl_tbl = NULL;
if (!dce_caps)
return BP_RESULT_BADINPUT;
if (!DATA_TABLES(dce_info))
return BP_RESULT_BADBIOSTABLE;
disp_cntl_tbl = GET_IMAGE(struct atom_display_controller_info_v4_1,
DATA_TABLES(dce_info));
if (!disp_cntl_tbl)
return BP_RESULT_BADBIOSTABLE;
*dce_caps = !!(disp_cntl_tbl->display_caps & DCE_INFO_CAPS_LTTPR_SUPPORT_ENABLE);
return result;
}
static enum bp_result get_lttpr_caps_v4_2(
struct bios_parser *bp,
uint8_t *dce_caps)
{
enum bp_result result = BP_RESULT_OK;
struct atom_display_controller_info_v4_2 *disp_cntl_tbl = NULL;
if (!dce_caps)
return BP_RESULT_BADINPUT;
if (!DATA_TABLES(dce_info))
return BP_RESULT_BADBIOSTABLE;
disp_cntl_tbl = GET_IMAGE(struct atom_display_controller_info_v4_2,
DATA_TABLES(dce_info));
if (!disp_cntl_tbl)
return BP_RESULT_BADBIOSTABLE;
*dce_caps = !!(disp_cntl_tbl->display_caps & DCE_INFO_CAPS_LTTPR_SUPPORT_ENABLE);
return result;
}
static enum bp_result get_lttpr_caps_v4_3(
struct bios_parser *bp,
uint8_t *dce_caps)
{
enum bp_result result = BP_RESULT_OK;
struct atom_display_controller_info_v4_3 *disp_cntl_tbl = NULL;
if (!dce_caps)
return BP_RESULT_BADINPUT;
if (!DATA_TABLES(dce_info))
return BP_RESULT_BADBIOSTABLE;
disp_cntl_tbl = GET_IMAGE(struct atom_display_controller_info_v4_3,
DATA_TABLES(dce_info));
if (!disp_cntl_tbl)
return BP_RESULT_BADBIOSTABLE;
*dce_caps = !!(disp_cntl_tbl->display_caps & DCE_INFO_CAPS_LTTPR_SUPPORT_ENABLE);
return result;
}
static enum bp_result get_lttpr_caps_v4_4(
struct bios_parser *bp,
uint8_t *dce_caps)
{
enum bp_result result = BP_RESULT_OK;
struct atom_display_controller_info_v4_4 *disp_cntl_tbl = NULL;
if (!dce_caps)
return BP_RESULT_BADINPUT;
if (!DATA_TABLES(dce_info))
return BP_RESULT_BADBIOSTABLE;
disp_cntl_tbl = GET_IMAGE(struct atom_display_controller_info_v4_4,
DATA_TABLES(dce_info));
if (!disp_cntl_tbl)
return BP_RESULT_BADBIOSTABLE;
*dce_caps = !!(disp_cntl_tbl->display_caps & DCE_INFO_CAPS_LTTPR_SUPPORT_ENABLE);
return result;
}
static enum bp_result bios_parser_get_lttpr_caps(
struct dc_bios *dcb,
uint8_t *dce_caps)
{
struct bios_parser *bp = BP_FROM_DCB(dcb);
enum bp_result result = BP_RESULT_UNSUPPORTED;
struct atom_common_table_header *header;
struct atom_data_revision tbl_revision;
if (!DATA_TABLES(dce_info))
return BP_RESULT_UNSUPPORTED;
header = GET_IMAGE(struct atom_common_table_header,
DATA_TABLES(dce_info));
get_atom_data_table_revision(header, &tbl_revision);
switch (tbl_revision.major) {
case 4:
switch (tbl_revision.minor) {
case 1:
result = get_lttpr_caps_v4_1(bp, dce_caps);
break;
case 2:
result = get_lttpr_caps_v4_2(bp, dce_caps);
break;
case 3:
result = get_lttpr_caps_v4_3(bp, dce_caps);
break;
case 4:
result = get_lttpr_caps_v4_4(bp, dce_caps);
break;
default:
break;
}
break;
default:
break;
}
return result;
}
static enum bp_result get_embedded_panel_info_v2_1(
struct bios_parser *bp,
struct embedded_panel_info *info)
@@ -2531,6 +2668,8 @@ static const struct dc_vbios_funcs vbios_funcs = {
.get_soc_bb_info = bios_parser_get_soc_bb_info,
.get_disp_connector_caps_info = bios_parser_get_disp_connector_caps_info,
.get_lttpr_caps = bios_parser_get_lttpr_caps,
};
static bool bios_parser2_construct(

View File

@@ -150,6 +150,9 @@ struct dc_vbios_funcs {
struct dc_bios *dcb,
struct graphics_object_id object_id,
struct bp_disp_connector_caps_info *info);
enum bp_result (*get_lttpr_caps)(
struct dc_bios *dcb,
uint8_t *dce_caps);
};
struct bios_registers {