|
@@ -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);
|
|
|
-
|
|
|
- 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);
|
|
|
+ format_revision = ((struct atom_common_table_header *)profile)->format_revision;
|
|
|
+ content_revision = ((struct atom_common_table_header *)profile)->content_revision;
|
|
|
+
|
|
|
+ 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->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;
|
|
|
}
|