[AMD Official Use Only - AMD Internal Distribution Only] Series is
Reviewed-by: Asad Kamal <[email protected]> Thanks & Regards Asad -----Original Message----- From: Lazar, Lijo <[email protected]> Sent: Monday, March 23, 2026 11:08 AM To: [email protected] Cc: Zhang, Hawking <[email protected]>; Deucher, Alexander <[email protected]>; Kamal, Asad <[email protected]>; Wang, Yang(Kevin) <[email protected]> Subject: Re: [PATCH 1/3] drm/amd/pm: Unify version check in SMUv11 <ping> On 20-Mar-26 11:34 AM, Lijo Lazar wrote: > Use common helper function for firmware version check and logging in > SMUv11 > > Signed-off-by: Lijo Lazar <[email protected]> > --- > drivers/gpu/drm/amd/pm/swsmu/inc/smu_v11_0.h | 14 ---- > .../gpu/drm/amd/pm/swsmu/smu11/arcturus_ppt.c | 5 +- > .../amd/pm/swsmu/smu11/cyan_skillfish_ppt.c | 3 +- > .../gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c | 21 +++++- > .../amd/pm/swsmu/smu11/sienna_cichlid_ppt.c | 25 ++++++- > .../gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c | 75 ------------------- > .../gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c | 3 +- > 7 files changed, 52 insertions(+), 94 deletions(-) > > diff --git a/drivers/gpu/drm/amd/pm/swsmu/inc/smu_v11_0.h > b/drivers/gpu/drm/amd/pm/swsmu/inc/smu_v11_0.h > index 7c1701ed3e11..dd94e8a9e218 100644 > --- a/drivers/gpu/drm/amd/pm/swsmu/inc/smu_v11_0.h > +++ b/drivers/gpu/drm/amd/pm/swsmu/inc/smu_v11_0.h > @@ -25,18 +25,6 @@ > > #include "amdgpu_smu.h" > > -#define SMU11_DRIVER_IF_VERSION_INV 0xFFFFFFFF -#define > SMU11_DRIVER_IF_VERSION_ARCT 0x17 -#define > SMU11_DRIVER_IF_VERSION_NV10 0x37 -#define > SMU11_DRIVER_IF_VERSION_NV12 0x38 -#define > SMU11_DRIVER_IF_VERSION_NV14 0x38 -#define > SMU11_DRIVER_IF_VERSION_Sienna_Cichlid 0x40 -#define > SMU11_DRIVER_IF_VERSION_Navy_Flounder 0xE -#define > SMU11_DRIVER_IF_VERSION_VANGOGH 0x03 -#define > SMU11_DRIVER_IF_VERSION_Dimgrey_Cavefish 0xF -#define > SMU11_DRIVER_IF_VERSION_Beige_Goby 0xD -#define > SMU11_DRIVER_IF_VERSION_Cyan_Skillfish 0x8 > - > /* MP Apertures */ > #define MP0_Public 0x03800000 > #define MP0_SRAM 0x03900000 > @@ -148,8 +136,6 @@ int smu_v11_0_setup_pptable(struct smu_context > *smu); > > int smu_v11_0_get_vbios_bootup_values(struct smu_context *smu); > > -int smu_v11_0_check_fw_version(struct smu_context *smu); > - > int smu_v11_0_set_driver_table_location(struct smu_context *smu); > > int smu_v11_0_set_tool_table_location(struct smu_context *smu); diff > --git a/drivers/gpu/drm/amd/pm/swsmu/smu11/arcturus_ppt.c > b/drivers/gpu/drm/amd/pm/swsmu/smu11/arcturus_ppt.c > index 0c4afd1e1aab..d73c3c191e9c 100644 > --- a/drivers/gpu/drm/amd/pm/swsmu/smu11/arcturus_ppt.c > +++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/arcturus_ppt.c > @@ -65,6 +65,8 @@ > #define SMU_FEATURES_HIGH_MASK 0xFFFFFFFF00000000 > #define SMU_FEATURES_HIGH_SHIFT 32 > > +#define SMU11_DRIVER_IF_VERSION_ARCT 0x17 > + > static const struct smu_feature_bits arcturus_dpm_features = { > .bits = { SMU_FEATURE_BIT_INIT(FEATURE_DPM_PREFETCHER_BIT), > SMU_FEATURE_BIT_INIT(FEATURE_DPM_GFXCLK_BIT), > @@ -1906,7 +1908,7 @@ static const struct pptable_funcs arcturus_ppt_funcs = { > /* pptable related */ > .setup_pptable = arcturus_setup_pptable, > .get_vbios_bootup_values = smu_v11_0_get_vbios_bootup_values, > - .check_fw_version = smu_v11_0_check_fw_version, > + .check_fw_version = smu_cmn_check_fw_version, > .write_pptable = smu_cmn_write_pptable, > .set_driver_table_location = smu_v11_0_set_driver_table_location, > .set_tool_table_location = smu_v11_0_set_tool_table_location, > @@ -1959,5 +1961,6 @@ void arcturus_set_ppt_funcs(struct smu_context *smu) > smu->table_map = arcturus_table_map; > smu->pwr_src_map = arcturus_pwr_src_map; > smu->workload_map = arcturus_workload_map; > + smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_ARCT; > smu_v11_0_init_msg_ctl(smu, arcturus_message_map); > } > diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu11/cyan_skillfish_ppt.c > b/drivers/gpu/drm/amd/pm/swsmu/smu11/cyan_skillfish_ppt.c > index 87953a4d0a43..1cc26cc79454 100644 > --- a/drivers/gpu/drm/amd/pm/swsmu/smu11/cyan_skillfish_ppt.c > +++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/cyan_skillfish_ppt.c > @@ -582,7 +582,7 @@ cyan_skillfish_get_enabled_mask(struct smu_context *smu, > static const struct pptable_funcs cyan_skillfish_ppt_funcs = { > > .check_fw_status = smu_v11_0_check_fw_status, > - .check_fw_version = smu_v11_0_check_fw_version, > + .check_fw_version = smu_cmn_check_fw_version, > .init_power = smu_v11_0_init_power, > .fini_power = smu_v11_0_fini_power, > .init_smc_tables = cyan_skillfish_init_smc_tables, @@ -605,5 +605,6 > @@ void cyan_skillfish_set_ppt_funcs(struct smu_context *smu) > smu->ppt_funcs = &cyan_skillfish_ppt_funcs; > smu->table_map = cyan_skillfish_table_map; > smu->is_apu = true; > + smu->smc_driver_if_version = MP1_DRIVER_IF_VERSION; > smu_v11_0_init_msg_ctl(smu, cyan_skillfish_message_map); > } > diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c > b/drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c > index 737bfdfb814c..f2ce8de58cb9 100644 > --- a/drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c > +++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c > @@ -73,6 +73,10 @@ static const struct smu_feature_bits > navi10_dpm_features = { > > #define SMU_11_0_GFX_BUSY_THRESHOLD 15 > > +#define SMU11_DRIVER_IF_VERSION_NV10 0x37 #define > +SMU11_DRIVER_IF_VERSION_NV12 0x38 #define > +SMU11_DRIVER_IF_VERSION_NV14 0x38 > + > static struct cmn2asic_msg_mapping navi10_message_map[SMU_MSG_MAX_COUNT] = { > MSG_MAP(TestMessage, PPSMC_MSG_TestMessage, > 1), > MSG_MAP(GetSmuVersion, PPSMC_MSG_GetSmuVersion, > 1), > @@ -3310,7 +3314,7 @@ static const struct pptable_funcs navi10_ppt_funcs = { > .check_fw_status = smu_v11_0_check_fw_status, > .setup_pptable = navi10_setup_pptable, > .get_vbios_bootup_values = smu_v11_0_get_vbios_bootup_values, > - .check_fw_version = smu_v11_0_check_fw_version, > + .check_fw_version = smu_cmn_check_fw_version, > .write_pptable = smu_cmn_write_pptable, > .set_driver_table_location = smu_v11_0_set_driver_table_location, > .set_tool_table_location = smu_v11_0_set_tool_table_location, > @@ -3363,11 +3367,26 @@ static const struct pptable_funcs > navi10_ppt_funcs = { > > void navi10_set_ppt_funcs(struct smu_context *smu) > { > + struct amdgpu_device *adev = smu->adev; > + > smu->ppt_funcs = &navi10_ppt_funcs; > smu->clock_map = navi10_clk_map; > smu->feature_map = navi10_feature_mask_map; > smu->table_map = navi10_table_map; > smu->pwr_src_map = navi10_pwr_src_map; > smu->workload_map = navi10_workload_map; > + > + switch (amdgpu_ip_version(adev, MP1_HWIP, 0)) { > + case IP_VERSION(11, 0, 0): > + smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_NV10; > + break; > + case IP_VERSION(11, 0, 9): > + smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_NV12; > + break; > + case IP_VERSION(11, 0, 5): > + smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_NV14; > + break; > + } > + > smu_v11_0_init_msg_ctl(smu, navi10_message_map); > } > diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c > b/drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c > index 6268bc5ed3e6..68255cfcb04d 100644 > --- a/drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c > +++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c > @@ -3120,7 +3120,7 @@ static const struct pptable_funcs > sienna_cichlid_ppt_funcs = { > .check_fw_status = smu_v11_0_check_fw_status, > .setup_pptable = sienna_cichlid_setup_pptable, > .get_vbios_bootup_values = smu_v11_0_get_vbios_bootup_values, > - .check_fw_version = smu_v11_0_check_fw_version, > + .check_fw_version = smu_cmn_check_fw_version, > .write_pptable = smu_cmn_write_pptable, > .set_driver_table_location = smu_v11_0_set_driver_table_location, > .set_tool_table_location = smu_v11_0_set_tool_table_location, > @@ -3177,13 +3177,36 @@ static const struct pptable_funcs > sienna_cichlid_ppt_funcs = { > .mode2_reset = sienna_cichlid_mode2_reset, > }; > > +#define SMU11_DRIVER_IF_VERSION_Sienna_Cichlid 0x40 > +#define SMU11_DRIVER_IF_VERSION_Navy_Flounder 0xE > +#define SMU11_DRIVER_IF_VERSION_Dimgrey_Cavefish 0xF > +#define SMU11_DRIVER_IF_VERSION_Beige_Goby 0xD > + > void sienna_cichlid_set_ppt_funcs(struct smu_context *smu) > { > + struct amdgpu_device *adev = smu->adev; > + > smu->ppt_funcs = &sienna_cichlid_ppt_funcs; > smu->clock_map = sienna_cichlid_clk_map; > smu->feature_map = sienna_cichlid_feature_mask_map; > smu->table_map = sienna_cichlid_table_map; > smu->pwr_src_map = sienna_cichlid_pwr_src_map; > smu->workload_map = sienna_cichlid_workload_map; > + > + switch (amdgpu_ip_version(adev, MP1_HWIP, 0)) { > + case IP_VERSION(11, 0, 7): > + smu->smc_driver_if_version = > SMU11_DRIVER_IF_VERSION_Sienna_Cichlid; > + break; > + case IP_VERSION(11, 0, 11): > + smu->smc_driver_if_version = > SMU11_DRIVER_IF_VERSION_Navy_Flounder; > + break; > + case IP_VERSION(11, 0, 12): > + smu->smc_driver_if_version = > SMU11_DRIVER_IF_VERSION_Dimgrey_Cavefish; > + break; > + case IP_VERSION(11, 0, 13): > + smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_Beige_Goby; > + break; > + } > + > smu_v11_0_init_msg_ctl(smu, sienna_cichlid_message_map); > } > diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c > b/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c > index 1eec1a88e05f..98e7109bbc95 100644 > --- a/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c > +++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c > @@ -192,81 +192,6 @@ int smu_v11_0_check_fw_status(struct smu_context *smu) > return -EIO; > } > > -int smu_v11_0_check_fw_version(struct smu_context *smu) -{ > - struct amdgpu_device *adev = smu->adev; > - uint32_t if_version = 0xff, smu_version = 0xff; > - uint8_t smu_program, smu_major, smu_minor, smu_debug; > - int ret = 0; > - > - ret = smu_cmn_get_smc_version(smu, &if_version, &smu_version); > - if (ret) > - return ret; > - > - smu_program = (smu_version >> 24) & 0xff; > - smu_major = (smu_version >> 16) & 0xff; > - smu_minor = (smu_version >> 8) & 0xff; > - smu_debug = (smu_version >> 0) & 0xff; > - if (smu->is_apu) > - adev->pm.fw_version = smu_version; > - > - switch (amdgpu_ip_version(adev, MP1_HWIP, 0)) { > - case IP_VERSION(11, 0, 0): > - smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_NV10; > - break; > - case IP_VERSION(11, 0, 9): > - smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_NV12; > - break; > - case IP_VERSION(11, 0, 5): > - smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_NV14; > - break; > - case IP_VERSION(11, 0, 7): > - smu->smc_driver_if_version = > SMU11_DRIVER_IF_VERSION_Sienna_Cichlid; > - break; > - case IP_VERSION(11, 0, 11): > - smu->smc_driver_if_version = > SMU11_DRIVER_IF_VERSION_Navy_Flounder; > - break; > - case IP_VERSION(11, 5, 0): > - case IP_VERSION(11, 5, 2): > - smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_VANGOGH; > - break; > - case IP_VERSION(11, 0, 12): > - smu->smc_driver_if_version = > SMU11_DRIVER_IF_VERSION_Dimgrey_Cavefish; > - break; > - case IP_VERSION(11, 0, 13): > - smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_Beige_Goby; > - break; > - case IP_VERSION(11, 0, 8): > - smu->smc_driver_if_version = > SMU11_DRIVER_IF_VERSION_Cyan_Skillfish; > - break; > - case IP_VERSION(11, 0, 2): > - smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_ARCT; > - break; > - default: > - dev_err(smu->adev->dev, "smu unsupported IP version: 0x%x.\n", > - amdgpu_ip_version(adev, MP1_HWIP, 0)); > - smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_INV; > - break; > - } > - > - /* > - * 1. if_version mismatch is not critical as our fw is designed > - * to be backward compatible. > - * 2. New fw usually brings some optimizations. But that's visible > - * only on the paired driver. > - * Considering above, we just leave user a verbal message instead > - * of halt driver loading. > - */ > - if (if_version != smu->smc_driver_if_version) { > - dev_info(smu->adev->dev, "smu driver if version = 0x%08x, smu > fw if version = 0x%08x, " > - "smu fw program = %d, version = 0x%08x (%d.%d.%d)\n", > - smu->smc_driver_if_version, if_version, > - smu_program, smu_version, smu_major, smu_minor, > smu_debug); > - } > - > - return ret; > -} > - > static int smu_v11_0_set_pptable_v2_0(struct smu_context *smu, void > **table, uint32_t *size) > { > struct amdgpu_device *adev = smu->adev; diff --git > a/drivers/gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c > b/drivers/gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c > index 08179840697e..0349c73eb000 100644 > --- a/drivers/gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c > +++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c > @@ -2512,7 +2512,7 @@ static u32 vangogh_get_gfxoff_entrycount(struct > smu_context *smu, uint64_t *entr > static const struct pptable_funcs vangogh_ppt_funcs = { > > .check_fw_status = smu_v11_0_check_fw_status, > - .check_fw_version = smu_v11_0_check_fw_version, > + .check_fw_version = smu_cmn_check_fw_version, > .init_smc_tables = vangogh_init_smc_tables, > .fini_smc_tables = smu_v11_0_fini_smc_tables, > .init_power = smu_v11_0_init_power, @@ -2562,5 +2562,6 @@ void > vangogh_set_ppt_funcs(struct smu_context *smu) > smu->table_map = vangogh_table_map; > smu->workload_map = vangogh_workload_map; > smu->is_apu = true; > + smu->smc_driver_if_version = SMU13_DRIVER_IF_VERSION; > smu_v11_0_init_msg_ctl(smu, vangogh_message_map); > }
