drm/amd/powerplay: add avfs profiling_info_v4_2 support on Vega10.
Signed-off-by: Rex Zhu <Rex.Zhu@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
@@ -1233,6 +1233,69 @@ struct atom_asic_profiling_info_v4_1
|
||||
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,
|
||||
struct pp_atomfwctrl_avfs_parameters *param)
|
||||
{
|
||||
uint16_t idx;
|
||||
uint8_t format_revision, content_revision;
|
||||
|
||||
struct atom_asic_profiling_info_v4_1 *profile;
|
||||
struct atom_asic_profiling_info_v4_2 *profile_v4_2;
|
||||
|
||||
idx = GetIndexIntoMasterDataTable(asic_profiling_info);
|
||||
profile = (struct atom_asic_profiling_info_v4_1 *)
|
||||
@@ -286,76 +289,172 @@ int pp_atomfwctrl_get_avfs_information(struct pp_hwmgr *hwmgr,
|
||||
if (!profile)
|
||||
return -1;
|
||||
|
||||
param->ulMaxVddc = le32_to_cpu(profile->maxvddc);
|
||||
param->ulMinVddc = le32_to_cpu(profile->minvddc);
|
||||
param->ulMeanNsigmaAcontant0 =
|
||||
le32_to_cpu(profile->avfs_meannsigma_acontant0);
|
||||
param->ulMeanNsigmaAcontant1 =
|
||||
le32_to_cpu(profile->avfs_meannsigma_acontant1);
|
||||
param->ulMeanNsigmaAcontant2 =
|
||||
le32_to_cpu(profile->avfs_meannsigma_acontant2);
|
||||
param->usMeanNsigmaDcTolSigma =
|
||||
le16_to_cpu(profile->avfs_meannsigma_dc_tol_sigma);
|
||||
param->usMeanNsigmaPlatformMean =
|
||||
le16_to_cpu(profile->avfs_meannsigma_platform_mean);
|
||||
param->usMeanNsigmaPlatformSigma =
|
||||
le16_to_cpu(profile->avfs_meannsigma_platform_sigma);
|
||||
param->ulGbVdroopTableCksoffA0 =
|
||||
le32_to_cpu(profile->gb_vdroop_table_cksoff_a0);
|
||||
param->ulGbVdroopTableCksoffA1 =
|
||||
le32_to_cpu(profile->gb_vdroop_table_cksoff_a1);
|
||||
param->ulGbVdroopTableCksoffA2 =
|
||||
le32_to_cpu(profile->gb_vdroop_table_cksoff_a2);
|
||||
param->ulGbVdroopTableCksonA0 =
|
||||
le32_to_cpu(profile->gb_vdroop_table_ckson_a0);
|
||||
param->ulGbVdroopTableCksonA1 =
|
||||
le32_to_cpu(profile->gb_vdroop_table_ckson_a1);
|
||||
param->ulGbVdroopTableCksonA2 =
|
||||
le32_to_cpu(profile->gb_vdroop_table_ckson_a2);
|
||||
param->ulGbFuseTableCksoffM1 =
|
||||
le32_to_cpu(profile->avfsgb_fuse_table_cksoff_m1);
|
||||
param->ulGbFuseTableCksoffM2 =
|
||||
le32_to_cpu(profile->avfsgb_fuse_table_cksoff_m2);
|
||||
param->ulGbFuseTableCksoffB =
|
||||
le32_to_cpu(profile->avfsgb_fuse_table_cksoff_b);
|
||||
param->ulGbFuseTableCksonM1 =
|
||||
le32_to_cpu(profile->avfsgb_fuse_table_ckson_m1);
|
||||
param->ulGbFuseTableCksonM2 =
|
||||
le32_to_cpu(profile->avfsgb_fuse_table_ckson_m2);
|
||||
param->ulGbFuseTableCksonB =
|
||||
le32_to_cpu(profile->avfsgb_fuse_table_ckson_b);
|
||||
format_revision = ((struct atom_common_table_header *)profile)->format_revision;
|
||||
content_revision = ((struct atom_common_table_header *)profile)->content_revision;
|
||||
|
||||
param->ucEnableGbVdroopTableCkson =
|
||||
profile->enable_gb_vdroop_table_ckson;
|
||||
param->ucEnableGbFuseTableCkson =
|
||||
profile->enable_gb_fuse_table_ckson;
|
||||
param->usPsmAgeComfactor =
|
||||
le16_to_cpu(profile->psm_age_comfactor);
|
||||
if (format_revision == 4 && content_revision == 1) {
|
||||
param->ulMaxVddc = le32_to_cpu(profile->maxvddc);
|
||||
param->ulMinVddc = le32_to_cpu(profile->minvddc);
|
||||
param->ulMeanNsigmaAcontant0 =
|
||||
le32_to_cpu(profile->avfs_meannsigma_acontant0);
|
||||
param->ulMeanNsigmaAcontant1 =
|
||||
le32_to_cpu(profile->avfs_meannsigma_acontant1);
|
||||
param->ulMeanNsigmaAcontant2 =
|
||||
le32_to_cpu(profile->avfs_meannsigma_acontant2);
|
||||
param->usMeanNsigmaDcTolSigma =
|
||||
le16_to_cpu(profile->avfs_meannsigma_dc_tol_sigma);
|
||||
param->usMeanNsigmaPlatformMean =
|
||||
le16_to_cpu(profile->avfs_meannsigma_platform_mean);
|
||||
param->usMeanNsigmaPlatformSigma =
|
||||
le16_to_cpu(profile->avfs_meannsigma_platform_sigma);
|
||||
param->ulGbVdroopTableCksoffA0 =
|
||||
le32_to_cpu(profile->gb_vdroop_table_cksoff_a0);
|
||||
param->ulGbVdroopTableCksoffA1 =
|
||||
le32_to_cpu(profile->gb_vdroop_table_cksoff_a1);
|
||||
param->ulGbVdroopTableCksoffA2 =
|
||||
le32_to_cpu(profile->gb_vdroop_table_cksoff_a2);
|
||||
param->ulGbVdroopTableCksonA0 =
|
||||
le32_to_cpu(profile->gb_vdroop_table_ckson_a0);
|
||||
param->ulGbVdroopTableCksonA1 =
|
||||
le32_to_cpu(profile->gb_vdroop_table_ckson_a1);
|
||||
param->ulGbVdroopTableCksonA2 =
|
||||
le32_to_cpu(profile->gb_vdroop_table_ckson_a2);
|
||||
param->ulGbFuseTableCksoffM1 =
|
||||
le32_to_cpu(profile->avfsgb_fuse_table_cksoff_m1);
|
||||
param->ulGbFuseTableCksoffM2 =
|
||||
le32_to_cpu(profile->avfsgb_fuse_table_cksoff_m2);
|
||||
param->ulGbFuseTableCksoffB =
|
||||
le32_to_cpu(profile->avfsgb_fuse_table_cksoff_b);
|
||||
param->ulGbFuseTableCksonM1 =
|
||||
le32_to_cpu(profile->avfsgb_fuse_table_ckson_m1);
|
||||
param->ulGbFuseTableCksonM2 =
|
||||
le32_to_cpu(profile->avfsgb_fuse_table_ckson_m2);
|
||||
param->ulGbFuseTableCksonB =
|
||||
le32_to_cpu(profile->avfsgb_fuse_table_ckson_b);
|
||||
|
||||
param->ulDispclk2GfxclkM1 =
|
||||
le32_to_cpu(profile->dispclk2gfxclk_a);
|
||||
param->ulDispclk2GfxclkM2 =
|
||||
le32_to_cpu(profile->dispclk2gfxclk_b);
|
||||
param->ulDispclk2GfxclkB =
|
||||
le32_to_cpu(profile->dispclk2gfxclk_c);
|
||||
param->ulDcefclk2GfxclkM1 =
|
||||
le32_to_cpu(profile->dcefclk2gfxclk_a);
|
||||
param->ulDcefclk2GfxclkM2 =
|
||||
le32_to_cpu(profile->dcefclk2gfxclk_b);
|
||||
param->ulDcefclk2GfxclkB =
|
||||
le32_to_cpu(profile->dcefclk2gfxclk_c);
|
||||
param->ulPixelclk2GfxclkM1 =
|
||||
le32_to_cpu(profile->pixclk2gfxclk_a);
|
||||
param->ulPixelclk2GfxclkM2 =
|
||||
le32_to_cpu(profile->pixclk2gfxclk_b);
|
||||
param->ulPixelclk2GfxclkB =
|
||||
le32_to_cpu(profile->pixclk2gfxclk_c);
|
||||
param->ulPhyclk2GfxclkM1 =
|
||||
le32_to_cpu(profile->phyclk2gfxclk_a);
|
||||
param->ulPhyclk2GfxclkM2 =
|
||||
le32_to_cpu(profile->phyclk2gfxclk_b);
|
||||
param->ulPhyclk2GfxclkB =
|
||||
le32_to_cpu(profile->phyclk2gfxclk_c);
|
||||
param->ucEnableGbVdroopTableCkson =
|
||||
profile->enable_gb_vdroop_table_ckson;
|
||||
param->ucEnableGbFuseTableCkson =
|
||||
profile->enable_gb_fuse_table_ckson;
|
||||
param->usPsmAgeComfactor =
|
||||
le16_to_cpu(profile->psm_age_comfactor);
|
||||
|
||||
param->ulDispclk2GfxclkM1 =
|
||||
le32_to_cpu(profile->dispclk2gfxclk_a);
|
||||
param->ulDispclk2GfxclkM2 =
|
||||
le32_to_cpu(profile->dispclk2gfxclk_b);
|
||||
param->ulDispclk2GfxclkB =
|
||||
le32_to_cpu(profile->dispclk2gfxclk_c);
|
||||
param->ulDcefclk2GfxclkM1 =
|
||||
le32_to_cpu(profile->dcefclk2gfxclk_a);
|
||||
param->ulDcefclk2GfxclkM2 =
|
||||
le32_to_cpu(profile->dcefclk2gfxclk_b);
|
||||
param->ulDcefclk2GfxclkB =
|
||||
le32_to_cpu(profile->dcefclk2gfxclk_c);
|
||||
param->ulPixelclk2GfxclkM1 =
|
||||
le32_to_cpu(profile->pixclk2gfxclk_a);
|
||||
param->ulPixelclk2GfxclkM2 =
|
||||
le32_to_cpu(profile->pixclk2gfxclk_b);
|
||||
param->ulPixelclk2GfxclkB =
|
||||
le32_to_cpu(profile->pixclk2gfxclk_c);
|
||||
param->ulPhyclk2GfxclkM1 =
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -109,6 +109,14 @@ struct pp_atomfwctrl_avfs_parameters {
|
||||
uint32_t ulPhyclk2GfxclkM1;
|
||||
uint32_t ulPhyclk2GfxclkM2;
|
||||
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 {
|
||||
|
||||
Reference in New Issue
Block a user