Commit b7437509 authored by Rex Zhu's avatar Rex Zhu Committed by Alex Deucher

drm/amd/powerplay: add avfs profiling_info_v4_2 support on Vega10.

Signed-off-by: default avatarRex Zhu <Rex.Zhu@amd.com>
Reviewed-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 747f6c92
...@@ -1233,6 +1233,69 @@ struct atom_asic_profiling_info_v4_1 ...@@ -1233,6 +1233,69 @@ struct atom_asic_profiling_info_v4_1
uint32_t phyclk2gfxclk_c; uint32_t phyclk2gfxclk_c;
}; };
struct atom_asic_profiling_info_v4_2 {
struct atom_common_table_header table_header;
uint32_t maxvddc;
uint32_t minvddc;
uint32_t avfs_meannsigma_acontant0;
uint32_t avfs_meannsigma_acontant1;
uint32_t avfs_meannsigma_acontant2;
uint16_t avfs_meannsigma_dc_tol_sigma;
uint16_t avfs_meannsigma_platform_mean;
uint16_t avfs_meannsigma_platform_sigma;
uint32_t gb_vdroop_table_cksoff_a0;
uint32_t gb_vdroop_table_cksoff_a1;
uint32_t gb_vdroop_table_cksoff_a2;
uint32_t gb_vdroop_table_ckson_a0;
uint32_t gb_vdroop_table_ckson_a1;
uint32_t gb_vdroop_table_ckson_a2;
uint32_t avfsgb_fuse_table_cksoff_m1;
uint32_t avfsgb_fuse_table_cksoff_m2;
uint32_t avfsgb_fuse_table_cksoff_b;
uint32_t avfsgb_fuse_table_ckson_m1;
uint32_t avfsgb_fuse_table_ckson_m2;
uint32_t avfsgb_fuse_table_ckson_b;
uint16_t max_voltage_0_25mv;
uint8_t enable_gb_vdroop_table_cksoff;
uint8_t enable_gb_vdroop_table_ckson;
uint8_t enable_gb_fuse_table_cksoff;
uint8_t enable_gb_fuse_table_ckson;
uint16_t psm_age_comfactor;
uint8_t enable_apply_avfs_cksoff_voltage;
uint8_t reserved;
uint32_t dispclk2gfxclk_a;
uint32_t dispclk2gfxclk_b;
uint32_t dispclk2gfxclk_c;
uint32_t pixclk2gfxclk_a;
uint32_t pixclk2gfxclk_b;
uint32_t pixclk2gfxclk_c;
uint32_t dcefclk2gfxclk_a;
uint32_t dcefclk2gfxclk_b;
uint32_t dcefclk2gfxclk_c;
uint32_t phyclk2gfxclk_a;
uint32_t phyclk2gfxclk_b;
uint32_t phyclk2gfxclk_c;
uint32_t acg_gb_vdroop_table_a0;
uint32_t acg_gb_vdroop_table_a1;
uint32_t acg_gb_vdroop_table_a2;
uint32_t acg_avfsgb_fuse_table_m1;
uint32_t acg_avfsgb_fuse_table_m2;
uint32_t acg_avfsgb_fuse_table_b;
uint8_t enable_acg_gb_vdroop_table;
uint8_t enable_acg_gb_fuse_table;
uint32_t acg_dispclk2gfxclk_a;
uint32_t acg_dispclk2gfxclk_b;
uint32_t acg_dispclk2gfxclk_c;
uint32_t acg_pixclk2gfxclk_a;
uint32_t acg_pixclk2gfxclk_b;
uint32_t acg_pixclk2gfxclk_c;
uint32_t acg_dcefclk2gfxclk_a;
uint32_t acg_dcefclk2gfxclk_b;
uint32_t acg_dcefclk2gfxclk_c;
uint32_t acg_phyclk2gfxclk_a;
uint32_t acg_phyclk2gfxclk_b;
uint32_t acg_phyclk2gfxclk_c;
};
/* /*
*************************************************************************** ***************************************************************************
......
...@@ -276,7 +276,10 @@ int pp_atomfwctrl_get_avfs_information(struct pp_hwmgr *hwmgr, ...@@ -276,7 +276,10 @@ int pp_atomfwctrl_get_avfs_information(struct pp_hwmgr *hwmgr,
struct pp_atomfwctrl_avfs_parameters *param) struct pp_atomfwctrl_avfs_parameters *param)
{ {
uint16_t idx; uint16_t idx;
uint8_t format_revision, content_revision;
struct atom_asic_profiling_info_v4_1 *profile; struct atom_asic_profiling_info_v4_1 *profile;
struct atom_asic_profiling_info_v4_2 *profile_v4_2;
idx = GetIndexIntoMasterDataTable(asic_profiling_info); idx = GetIndexIntoMasterDataTable(asic_profiling_info);
profile = (struct atom_asic_profiling_info_v4_1 *) profile = (struct atom_asic_profiling_info_v4_1 *)
...@@ -286,76 +289,172 @@ int pp_atomfwctrl_get_avfs_information(struct pp_hwmgr *hwmgr, ...@@ -286,76 +289,172 @@ int pp_atomfwctrl_get_avfs_information(struct pp_hwmgr *hwmgr,
if (!profile) if (!profile)
return -1; return -1;
param->ulMaxVddc = le32_to_cpu(profile->maxvddc); format_revision = ((struct atom_common_table_header *)profile)->format_revision;
param->ulMinVddc = le32_to_cpu(profile->minvddc); content_revision = ((struct atom_common_table_header *)profile)->content_revision;
param->ulMeanNsigmaAcontant0 =
le32_to_cpu(profile->avfs_meannsigma_acontant0); if (format_revision == 4 && content_revision == 1) {
param->ulMeanNsigmaAcontant1 = param->ulMaxVddc = le32_to_cpu(profile->maxvddc);
le32_to_cpu(profile->avfs_meannsigma_acontant1); param->ulMinVddc = le32_to_cpu(profile->minvddc);
param->ulMeanNsigmaAcontant2 = param->ulMeanNsigmaAcontant0 =
le32_to_cpu(profile->avfs_meannsigma_acontant2); le32_to_cpu(profile->avfs_meannsigma_acontant0);
param->usMeanNsigmaDcTolSigma = param->ulMeanNsigmaAcontant1 =
le16_to_cpu(profile->avfs_meannsigma_dc_tol_sigma); le32_to_cpu(profile->avfs_meannsigma_acontant1);
param->usMeanNsigmaPlatformMean = param->ulMeanNsigmaAcontant2 =
le16_to_cpu(profile->avfs_meannsigma_platform_mean); le32_to_cpu(profile->avfs_meannsigma_acontant2);
param->usMeanNsigmaPlatformSigma = param->usMeanNsigmaDcTolSigma =
le16_to_cpu(profile->avfs_meannsigma_platform_sigma); le16_to_cpu(profile->avfs_meannsigma_dc_tol_sigma);
param->ulGbVdroopTableCksoffA0 = param->usMeanNsigmaPlatformMean =
le32_to_cpu(profile->gb_vdroop_table_cksoff_a0); le16_to_cpu(profile->avfs_meannsigma_platform_mean);
param->ulGbVdroopTableCksoffA1 = param->usMeanNsigmaPlatformSigma =
le32_to_cpu(profile->gb_vdroop_table_cksoff_a1); le16_to_cpu(profile->avfs_meannsigma_platform_sigma);
param->ulGbVdroopTableCksoffA2 = param->ulGbVdroopTableCksoffA0 =
le32_to_cpu(profile->gb_vdroop_table_cksoff_a2); le32_to_cpu(profile->gb_vdroop_table_cksoff_a0);
param->ulGbVdroopTableCksonA0 = param->ulGbVdroopTableCksoffA1 =
le32_to_cpu(profile->gb_vdroop_table_ckson_a0); le32_to_cpu(profile->gb_vdroop_table_cksoff_a1);
param->ulGbVdroopTableCksonA1 = param->ulGbVdroopTableCksoffA2 =
le32_to_cpu(profile->gb_vdroop_table_ckson_a1); le32_to_cpu(profile->gb_vdroop_table_cksoff_a2);
param->ulGbVdroopTableCksonA2 = param->ulGbVdroopTableCksonA0 =
le32_to_cpu(profile->gb_vdroop_table_ckson_a2); le32_to_cpu(profile->gb_vdroop_table_ckson_a0);
param->ulGbFuseTableCksoffM1 = param->ulGbVdroopTableCksonA1 =
le32_to_cpu(profile->avfsgb_fuse_table_cksoff_m1); le32_to_cpu(profile->gb_vdroop_table_ckson_a1);
param->ulGbFuseTableCksoffM2 = param->ulGbVdroopTableCksonA2 =
le32_to_cpu(profile->avfsgb_fuse_table_cksoff_m2); le32_to_cpu(profile->gb_vdroop_table_ckson_a2);
param->ulGbFuseTableCksoffB = param->ulGbFuseTableCksoffM1 =
le32_to_cpu(profile->avfsgb_fuse_table_cksoff_b); le32_to_cpu(profile->avfsgb_fuse_table_cksoff_m1);
param->ulGbFuseTableCksonM1 = param->ulGbFuseTableCksoffM2 =
le32_to_cpu(profile->avfsgb_fuse_table_ckson_m1); le32_to_cpu(profile->avfsgb_fuse_table_cksoff_m2);
param->ulGbFuseTableCksonM2 = param->ulGbFuseTableCksoffB =
le32_to_cpu(profile->avfsgb_fuse_table_ckson_m2); le32_to_cpu(profile->avfsgb_fuse_table_cksoff_b);
param->ulGbFuseTableCksonB = param->ulGbFuseTableCksonM1 =
le32_to_cpu(profile->avfsgb_fuse_table_ckson_b); le32_to_cpu(profile->avfsgb_fuse_table_ckson_m1);
param->ulGbFuseTableCksonM2 =
param->ucEnableGbVdroopTableCkson = le32_to_cpu(profile->avfsgb_fuse_table_ckson_m2);
profile->enable_gb_vdroop_table_ckson; param->ulGbFuseTableCksonB =
param->ucEnableGbFuseTableCkson = le32_to_cpu(profile->avfsgb_fuse_table_ckson_b);
profile->enable_gb_fuse_table_ckson;
param->usPsmAgeComfactor = param->ucEnableGbVdroopTableCkson =
le16_to_cpu(profile->psm_age_comfactor); profile->enable_gb_vdroop_table_ckson;
param->ucEnableGbFuseTableCkson =
param->ulDispclk2GfxclkM1 = profile->enable_gb_fuse_table_ckson;
le32_to_cpu(profile->dispclk2gfxclk_a); param->usPsmAgeComfactor =
param->ulDispclk2GfxclkM2 = le16_to_cpu(profile->psm_age_comfactor);
le32_to_cpu(profile->dispclk2gfxclk_b);
param->ulDispclk2GfxclkB = param->ulDispclk2GfxclkM1 =
le32_to_cpu(profile->dispclk2gfxclk_c); le32_to_cpu(profile->dispclk2gfxclk_a);
param->ulDcefclk2GfxclkM1 = param->ulDispclk2GfxclkM2 =
le32_to_cpu(profile->dcefclk2gfxclk_a); le32_to_cpu(profile->dispclk2gfxclk_b);
param->ulDcefclk2GfxclkM2 = param->ulDispclk2GfxclkB =
le32_to_cpu(profile->dcefclk2gfxclk_b); le32_to_cpu(profile->dispclk2gfxclk_c);
param->ulDcefclk2GfxclkB = param->ulDcefclk2GfxclkM1 =
le32_to_cpu(profile->dcefclk2gfxclk_c); le32_to_cpu(profile->dcefclk2gfxclk_a);
param->ulPixelclk2GfxclkM1 = param->ulDcefclk2GfxclkM2 =
le32_to_cpu(profile->pixclk2gfxclk_a); le32_to_cpu(profile->dcefclk2gfxclk_b);
param->ulPixelclk2GfxclkM2 = param->ulDcefclk2GfxclkB =
le32_to_cpu(profile->pixclk2gfxclk_b); le32_to_cpu(profile->dcefclk2gfxclk_c);
param->ulPixelclk2GfxclkB = param->ulPixelclk2GfxclkM1 =
le32_to_cpu(profile->pixclk2gfxclk_c); le32_to_cpu(profile->pixclk2gfxclk_a);
param->ulPhyclk2GfxclkM1 = param->ulPixelclk2GfxclkM2 =
le32_to_cpu(profile->phyclk2gfxclk_a); le32_to_cpu(profile->pixclk2gfxclk_b);
param->ulPhyclk2GfxclkM2 = param->ulPixelclk2GfxclkB =
le32_to_cpu(profile->phyclk2gfxclk_b); le32_to_cpu(profile->pixclk2gfxclk_c);
param->ulPhyclk2GfxclkB = param->ulPhyclk2GfxclkM1 =
le32_to_cpu(profile->phyclk2gfxclk_c); le32_to_cpu(profile->phyclk2gfxclk_a);
param->ulPhyclk2GfxclkM2 =
le32_to_cpu(profile->phyclk2gfxclk_b);
param->ulPhyclk2GfxclkB =
le32_to_cpu(profile->phyclk2gfxclk_c);
param->ulAcgGbVdroopTableA0 = 0;
param->ulAcgGbVdroopTableA1 = 0;
param->ulAcgGbVdroopTableA2 = 0;
param->ulAcgGbFuseTableM1 = 0;
param->ulAcgGbFuseTableM2 = 0;
param->ulAcgGbFuseTableB = 0;
param->ucAcgEnableGbVdroopTable = 0;
param->ucAcgEnableGbFuseTable = 0;
} else if (format_revision == 4 && content_revision == 2) {
profile_v4_2 = (struct atom_asic_profiling_info_v4_2 *)profile;
param->ulMaxVddc = le32_to_cpu(profile_v4_2->maxvddc);
param->ulMinVddc = le32_to_cpu(profile_v4_2->minvddc);
param->ulMeanNsigmaAcontant0 =
le32_to_cpu(profile_v4_2->avfs_meannsigma_acontant0);
param->ulMeanNsigmaAcontant1 =
le32_to_cpu(profile_v4_2->avfs_meannsigma_acontant1);
param->ulMeanNsigmaAcontant2 =
le32_to_cpu(profile_v4_2->avfs_meannsigma_acontant2);
param->usMeanNsigmaDcTolSigma =
le16_to_cpu(profile_v4_2->avfs_meannsigma_dc_tol_sigma);
param->usMeanNsigmaPlatformMean =
le16_to_cpu(profile_v4_2->avfs_meannsigma_platform_mean);
param->usMeanNsigmaPlatformSigma =
le16_to_cpu(profile_v4_2->avfs_meannsigma_platform_sigma);
param->ulGbVdroopTableCksoffA0 =
le32_to_cpu(profile_v4_2->gb_vdroop_table_cksoff_a0);
param->ulGbVdroopTableCksoffA1 =
le32_to_cpu(profile_v4_2->gb_vdroop_table_cksoff_a1);
param->ulGbVdroopTableCksoffA2 =
le32_to_cpu(profile_v4_2->gb_vdroop_table_cksoff_a2);
param->ulGbVdroopTableCksonA0 =
le32_to_cpu(profile_v4_2->gb_vdroop_table_ckson_a0);
param->ulGbVdroopTableCksonA1 =
le32_to_cpu(profile_v4_2->gb_vdroop_table_ckson_a1);
param->ulGbVdroopTableCksonA2 =
le32_to_cpu(profile_v4_2->gb_vdroop_table_ckson_a2);
param->ulGbFuseTableCksoffM1 =
le32_to_cpu(profile_v4_2->avfsgb_fuse_table_cksoff_m1);
param->ulGbFuseTableCksoffM2 =
le32_to_cpu(profile_v4_2->avfsgb_fuse_table_cksoff_m2);
param->ulGbFuseTableCksoffB =
le32_to_cpu(profile_v4_2->avfsgb_fuse_table_cksoff_b);
param->ulGbFuseTableCksonM1 =
le32_to_cpu(profile_v4_2->avfsgb_fuse_table_ckson_m1);
param->ulGbFuseTableCksonM2 =
le32_to_cpu(profile_v4_2->avfsgb_fuse_table_ckson_m2);
param->ulGbFuseTableCksonB =
le32_to_cpu(profile_v4_2->avfsgb_fuse_table_ckson_b);
param->ucEnableGbVdroopTableCkson =
profile_v4_2->enable_gb_vdroop_table_ckson;
param->ucEnableGbFuseTableCkson =
profile_v4_2->enable_gb_fuse_table_ckson;
param->usPsmAgeComfactor =
le16_to_cpu(profile_v4_2->psm_age_comfactor);
param->ulDispclk2GfxclkM1 =
le32_to_cpu(profile_v4_2->dispclk2gfxclk_a);
param->ulDispclk2GfxclkM2 =
le32_to_cpu(profile_v4_2->dispclk2gfxclk_b);
param->ulDispclk2GfxclkB =
le32_to_cpu(profile_v4_2->dispclk2gfxclk_c);
param->ulDcefclk2GfxclkM1 =
le32_to_cpu(profile_v4_2->dcefclk2gfxclk_a);
param->ulDcefclk2GfxclkM2 =
le32_to_cpu(profile_v4_2->dcefclk2gfxclk_b);
param->ulDcefclk2GfxclkB =
le32_to_cpu(profile_v4_2->dcefclk2gfxclk_c);
param->ulPixelclk2GfxclkM1 =
le32_to_cpu(profile_v4_2->pixclk2gfxclk_a);
param->ulPixelclk2GfxclkM2 =
le32_to_cpu(profile_v4_2->pixclk2gfxclk_b);
param->ulPixelclk2GfxclkB =
le32_to_cpu(profile_v4_2->pixclk2gfxclk_c);
param->ulPhyclk2GfxclkM1 =
le32_to_cpu(profile->phyclk2gfxclk_a);
param->ulPhyclk2GfxclkM2 =
le32_to_cpu(profile_v4_2->phyclk2gfxclk_b);
param->ulPhyclk2GfxclkB =
le32_to_cpu(profile_v4_2->phyclk2gfxclk_c);
param->ulAcgGbVdroopTableA0 = le32_to_cpu(profile_v4_2->acg_gb_vdroop_table_a0);
param->ulAcgGbVdroopTableA1 = le32_to_cpu(profile_v4_2->acg_gb_vdroop_table_a1);
param->ulAcgGbVdroopTableA2 = le32_to_cpu(profile_v4_2->acg_gb_vdroop_table_a2);
param->ulAcgGbFuseTableM1 = le32_to_cpu(profile_v4_2->acg_avfsgb_fuse_table_m1);
param->ulAcgGbFuseTableM2 = le32_to_cpu(profile_v4_2->acg_avfsgb_fuse_table_m2);
param->ulAcgGbFuseTableB = le32_to_cpu(profile_v4_2->acg_avfsgb_fuse_table_b);
param->ucAcgEnableGbVdroopTable = le32_to_cpu(profile_v4_2->enable_acg_gb_vdroop_table);
param->ucAcgEnableGbFuseTable = le32_to_cpu(profile_v4_2->enable_acg_gb_fuse_table);
} else {
pr_info("Invalid VBIOS AVFS ProfilingInfo Revision!\n");
return -EINVAL;
}
return 0; return 0;
} }
......
...@@ -109,6 +109,14 @@ struct pp_atomfwctrl_avfs_parameters { ...@@ -109,6 +109,14 @@ struct pp_atomfwctrl_avfs_parameters {
uint32_t ulPhyclk2GfxclkM1; uint32_t ulPhyclk2GfxclkM1;
uint32_t ulPhyclk2GfxclkM2; uint32_t ulPhyclk2GfxclkM2;
uint32_t ulPhyclk2GfxclkB; uint32_t ulPhyclk2GfxclkB;
uint32_t ulAcgGbVdroopTableA0;
uint32_t ulAcgGbVdroopTableA1;
uint32_t ulAcgGbVdroopTableA2;
uint32_t ulAcgGbFuseTableM1;
uint32_t ulAcgGbFuseTableM2;
uint32_t ulAcgGbFuseTableB;
uint32_t ucAcgEnableGbVdroopTable;
uint32_t ucAcgEnableGbFuseTable;
}; };
struct pp_atomfwctrl_gpio_parameters { struct pp_atomfwctrl_gpio_parameters {
......
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