All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] drm/amd/pm: Check feature support using IP version
@ 2022-03-25  8:31 Lijo Lazar
  2022-03-25 11:25 ` Wang, Yang(Kevin)
  0 siblings, 1 reply; 3+ messages in thread
From: Lijo Lazar @ 2022-03-25  8:31 UTC (permalink / raw)
  To: amd-gfx; +Cc: Alexander.Deucher, Evan.Quan, KevinYang.Wang, Hawking.Zhang

Instead of ASIC type, use GC and MP1 IP versions for feature support checks.

Signed-off-by: Lijo Lazar <lijo.lazar@amd.com>
---
 drivers/gpu/drm/amd/pm/amdgpu_pm.c | 72 ++++++++++++++++--------------
 1 file changed, 39 insertions(+), 33 deletions(-)

diff --git a/drivers/gpu/drm/amd/pm/amdgpu_pm.c b/drivers/gpu/drm/amd/pm/amdgpu_pm.c
index 5cd67ddf8495..f89e0ff3f5a4 100644
--- a/drivers/gpu/drm/amd/pm/amdgpu_pm.c
+++ b/drivers/gpu/drm/amd/pm/amdgpu_pm.c
@@ -1954,8 +1954,9 @@ static int default_attr_update(struct amdgpu_device *adev, struct amdgpu_device_
 			       uint32_t mask, enum amdgpu_device_attr_states *states)
 {
 	struct device_attribute *dev_attr = &attr->dev_attr;
+	uint32_t mp1_ver = adev->ip_versions[MP1_HWIP][0];
+	uint32_t gc_ver = adev->ip_versions[GC_HWIP][0];
 	const char *attr_name = dev_attr->attr.name;
-	enum amd_asic_type asic_type = adev->asic_type;
 
 	if (!(attr->flags & mask)) {
 		*states = ATTR_STATE_UNSUPPORTED;
@@ -1965,53 +1966,55 @@ static int default_attr_update(struct amdgpu_device *adev, struct amdgpu_device_
 #define DEVICE_ATTR_IS(_name)	(!strcmp(attr_name, #_name))
 
 	if (DEVICE_ATTR_IS(pp_dpm_socclk)) {
-		if (asic_type < CHIP_VEGA10)
+		if (gc_ver < IP_VERSION(9, 0, 0))
 			*states = ATTR_STATE_UNSUPPORTED;
 	} else if (DEVICE_ATTR_IS(pp_dpm_dcefclk)) {
-		if (asic_type < CHIP_VEGA10 ||
-		    asic_type == CHIP_ARCTURUS ||
-		    asic_type == CHIP_ALDEBARAN)
+		if (gc_ver < IP_VERSION(9, 0, 0) ||
+		    gc_ver == IP_VERSION(9, 4, 1) ||
+		    gc_ver == IP_VERSION(9, 4, 2))
 			*states = ATTR_STATE_UNSUPPORTED;
 	} else if (DEVICE_ATTR_IS(pp_dpm_fclk)) {
-		if (asic_type < CHIP_VEGA20)
+		if (mp1_ver < IP_VERSION(10, 0, 0))
 			*states = ATTR_STATE_UNSUPPORTED;
 	} else if (DEVICE_ATTR_IS(pp_od_clk_voltage)) {
 		*states = ATTR_STATE_UNSUPPORTED;
 		if (amdgpu_dpm_is_overdrive_supported(adev))
 			*states = ATTR_STATE_SUPPORTED;
 	} else if (DEVICE_ATTR_IS(mem_busy_percent)) {
-		if (adev->flags & AMD_IS_APU || asic_type == CHIP_VEGA10)
+		if (adev->flags & AMD_IS_APU || gc_ver == IP_VERSION(9, 0, 1))
 			*states = ATTR_STATE_UNSUPPORTED;
 	} else if (DEVICE_ATTR_IS(pcie_bw)) {
 		/* PCIe Perf counters won't work on APU nodes */
 		if (adev->flags & AMD_IS_APU)
 			*states = ATTR_STATE_UNSUPPORTED;
 	} else if (DEVICE_ATTR_IS(unique_id)) {
-		if (asic_type != CHIP_VEGA10 &&
-		    asic_type != CHIP_VEGA20 &&
-		    asic_type != CHIP_ARCTURUS &&
-		    asic_type != CHIP_ALDEBARAN)
+		if (gc_ver != IP_VERSION(9, 0, 1) &&
+		    gc_ver != IP_VERSION(9, 4, 0) &&
+		    gc_ver != IP_VERSION(9, 4, 1) &&
+		    gc_ver != IP_VERSION(9, 4, 2))
 			*states = ATTR_STATE_UNSUPPORTED;
 	} else if (DEVICE_ATTR_IS(pp_features)) {
-		if (adev->flags & AMD_IS_APU || asic_type < CHIP_VEGA10)
+		if (adev->flags & AMD_IS_APU || gc_ver < IP_VERSION(9, 0, 0))
 			*states = ATTR_STATE_UNSUPPORTED;
 	} else if (DEVICE_ATTR_IS(gpu_metrics)) {
-		if (asic_type < CHIP_VEGA12)
+		if (gc_ver < IP_VERSION(9, 1, 0))
 			*states = ATTR_STATE_UNSUPPORTED;
 	} else if (DEVICE_ATTR_IS(pp_dpm_vclk)) {
-		if (!(asic_type == CHIP_VANGOGH || asic_type == CHIP_SIENNA_CICHLID))
+		if (!(gc_ver == IP_VERSION(10, 3, 1) ||
+		      gc_ver == IP_VERSION(10, 3, 0)))
 			*states = ATTR_STATE_UNSUPPORTED;
 	} else if (DEVICE_ATTR_IS(pp_dpm_dclk)) {
-		if (!(asic_type == CHIP_VANGOGH || asic_type == CHIP_SIENNA_CICHLID))
+		if (!(gc_ver == IP_VERSION(10, 3, 1) ||
+		      gc_ver == IP_VERSION(10, 3, 0)))
 			*states = ATTR_STATE_UNSUPPORTED;
 	} else if (DEVICE_ATTR_IS(pp_power_profile_mode)) {
 		if (amdgpu_dpm_get_power_profile_mode(adev, NULL) == -EOPNOTSUPP)
 			*states = ATTR_STATE_UNSUPPORTED;
 	}
 
-	switch (asic_type) {
-	case CHIP_ARCTURUS:
-	case CHIP_ALDEBARAN:
+	switch (gc_ver) {
+	case IP_VERSION(9, 4, 1):
+	case IP_VERSION(9, 4, 2):
 		/* the Mi series card does not support standalone mclk/socclk/fclk level setting */
 		if (DEVICE_ATTR_IS(pp_dpm_mclk) ||
 		    DEVICE_ATTR_IS(pp_dpm_socclk) ||
@@ -2026,7 +2029,7 @@ static int default_attr_update(struct amdgpu_device *adev, struct amdgpu_device_
 
 	if (DEVICE_ATTR_IS(pp_dpm_dcefclk)) {
 		/* SMU MP1 does not support dcefclk level setting */
-		if (asic_type >= CHIP_NAVI10) {
+		if (gc_ver >= IP_VERSION(10, 0, 0)) {
 			dev_attr->attr.mode &= ~S_IWUGO;
 			dev_attr->store = NULL;
 		}
@@ -2864,8 +2867,9 @@ static ssize_t amdgpu_hwmon_show_power_label(struct device *dev,
 					 char *buf)
 {
 	struct amdgpu_device *adev = dev_get_drvdata(dev);
+	uint32_t gc_ver = adev->ip_versions[GC_HWIP][0];
 
-	if (adev->asic_type == CHIP_VANGOGH)
+	if (gc_ver == IP_VERSION(10, 3, 1))
 		return sysfs_emit(buf, "%s\n",
 				  to_sensor_dev_attr(attr)->index == PP_PWR_TYPE_FAST ?
 				  "fastPPT" : "slowPPT");
@@ -3177,6 +3181,7 @@ static umode_t hwmon_attributes_visible(struct kobject *kobj,
 	struct device *dev = kobj_to_dev(kobj);
 	struct amdgpu_device *adev = dev_get_drvdata(dev);
 	umode_t effective_mode = attr->mode;
+	uint32_t gc_ver = adev->ip_versions[GC_HWIP][0];
 
 	/* under multi-vf mode, the hwmon attributes are all not supported */
 	if (amdgpu_sriov_vf(adev) && !amdgpu_sriov_is_pp_one_vf(adev))
@@ -3245,18 +3250,18 @@ static umode_t hwmon_attributes_visible(struct kobject *kobj,
 	      attr == &sensor_dev_attr_pwm1_enable.dev_attr.attr)) /* can't manage state */
 		effective_mode &= ~S_IWUSR;
 
+	/* not implemented yet for GC 10.3.1 APUs */
 	if (((adev->family == AMDGPU_FAMILY_SI) ||
-		 ((adev->flags & AMD_IS_APU) &&
-	      (adev->asic_type != CHIP_VANGOGH))) &&	/* not implemented yet */
+	     ((adev->flags & AMD_IS_APU) && (gc_ver != IP_VERSION(10, 3, 1)))) &&
 	    (attr == &sensor_dev_attr_power1_cap_max.dev_attr.attr ||
-	     attr == &sensor_dev_attr_power1_cap_min.dev_attr.attr||
+	     attr == &sensor_dev_attr_power1_cap_min.dev_attr.attr ||
 	     attr == &sensor_dev_attr_power1_cap.dev_attr.attr ||
 	     attr == &sensor_dev_attr_power1_cap_default.dev_attr.attr))
 		return 0;
 
+	/* not implemented yet for APUs having <= GC 9.3.0 */
 	if (((adev->family == AMDGPU_FAMILY_SI) ||
-	     ((adev->flags & AMD_IS_APU) &&
-	      (adev->asic_type < CHIP_RENOIR))) &&	/* not implemented yet */
+	     ((adev->flags & AMD_IS_APU) && (gc_ver < IP_VERSION(9, 3, 0)))) &&
 	    (attr == &sensor_dev_attr_power1_average.dev_attr.attr))
 		return 0;
 
@@ -3294,8 +3299,7 @@ static umode_t hwmon_attributes_visible(struct kobject *kobj,
 		return 0;
 
 	/* only SOC15 dGPUs support hotspot and mem temperatures */
-	if (((adev->flags & AMD_IS_APU) ||
-	     adev->asic_type < CHIP_VEGA10) &&
+	if (((adev->flags & AMD_IS_APU) || gc_ver < IP_VERSION(9, 0, 0)) &&
 	    (attr == &sensor_dev_attr_temp2_crit.dev_attr.attr ||
 	     attr == &sensor_dev_attr_temp2_crit_hyst.dev_attr.attr ||
 	     attr == &sensor_dev_attr_temp3_crit.dev_attr.attr ||
@@ -3310,13 +3314,13 @@ static umode_t hwmon_attributes_visible(struct kobject *kobj,
 		return 0;
 
 	/* only Vangogh has fast PPT limit and power labels */
-	if (!(adev->asic_type == CHIP_VANGOGH) &&
+	if (!(gc_ver == IP_VERSION(10, 3, 1)) &&
 	    (attr == &sensor_dev_attr_power2_average.dev_attr.attr ||
-		 attr == &sensor_dev_attr_power2_cap_max.dev_attr.attr ||
+	     attr == &sensor_dev_attr_power2_cap_max.dev_attr.attr ||
 	     attr == &sensor_dev_attr_power2_cap_min.dev_attr.attr ||
-		 attr == &sensor_dev_attr_power2_cap.dev_attr.attr ||
-		 attr == &sensor_dev_attr_power2_cap_default.dev_attr.attr ||
-		 attr == &sensor_dev_attr_power2_label.dev_attr.attr))
+	     attr == &sensor_dev_attr_power2_cap.dev_attr.attr ||
+	     attr == &sensor_dev_attr_power2_cap_default.dev_attr.attr ||
+	     attr == &sensor_dev_attr_power2_label.dev_attr.attr))
 		return 0;
 
 	return effective_mode;
@@ -3421,6 +3425,8 @@ static void amdgpu_debugfs_prints_cpu_info(struct seq_file *m,
 
 static int amdgpu_debugfs_pm_info_pp(struct seq_file *m, struct amdgpu_device *adev)
 {
+	uint32_t mp1_ver = adev->ip_versions[MP1_HWIP][0];
+	uint32_t gc_ver = adev->ip_versions[GC_HWIP][0];
 	uint32_t value;
 	uint64_t value64 = 0;
 	uint32_t query = 0;
@@ -3467,7 +3473,7 @@ static int amdgpu_debugfs_pm_info_pp(struct seq_file *m, struct amdgpu_device *a
 	if (!amdgpu_dpm_read_sensor(adev, AMDGPU_PP_SENSOR_ENABLED_SMC_FEATURES_MASK, (void *)&value64, &size))
 		seq_printf(m, "SMC Feature Mask: 0x%016llx\n", value64);
 
-	if (adev->asic_type > CHIP_VEGA20) {
+	if (gc_ver != IP_VERSION(9, 4, 0) && mp1_ver > IP_VERSION(9, 0, 0)) {
 		/* VCN clocks */
 		if (!amdgpu_dpm_read_sensor(adev, AMDGPU_PP_SENSOR_VCN_POWER_STATE, (void *)&value, &size)) {
 			if (!value) {
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] drm/amd/pm: Check feature support using IP version
  2022-03-25  8:31 [PATCH] drm/amd/pm: Check feature support using IP version Lijo Lazar
@ 2022-03-25 11:25 ` Wang, Yang(Kevin)
  2022-03-25 14:04   ` Lazar, Lijo
  0 siblings, 1 reply; 3+ messages in thread
From: Wang, Yang(Kevin) @ 2022-03-25 11:25 UTC (permalink / raw)
  To: Lazar, Lijo, amd-gfx; +Cc: Deucher, Alexander, Quan, Evan, Zhang, Hawking

[-- Attachment #1: Type: text/plain, Size: 11325 bytes --]

[AMD Official Use Only]

       if (adev->asic_type > CHIP_VEGA20) {
+       if (gc_ver != IP_VERSION(9, 4, 0) && mp1_ver > IP_VERSION(9, 0, 0)) {
                 /* VCN clocks */
[kevin]:

please put some comments here (why mp1_ver and gc_ver is needed both), it can help developer to understand some backgrounds.
thanks.

Reviewed-by: Kevin Wang <kevinyang.wang@amd.com>

Best Regards,
Kevin
________________________________
From: Lazar, Lijo <Lijo.Lazar@amd.com>
Sent: Friday, March 25, 2022 4:31 PM
To: amd-gfx@lists.freedesktop.org <amd-gfx@lists.freedesktop.org>
Cc: Zhang, Hawking <Hawking.Zhang@amd.com>; Deucher, Alexander <Alexander.Deucher@amd.com>; Wang, Yang(Kevin) <KevinYang.Wang@amd.com>; Quan, Evan <Evan.Quan@amd.com>
Subject: [PATCH] drm/amd/pm: Check feature support using IP version

Instead of ASIC type, use GC and MP1 IP versions for feature support checks.

Signed-off-by: Lijo Lazar <lijo.lazar@amd.com>
---
 drivers/gpu/drm/amd/pm/amdgpu_pm.c | 72 ++++++++++++++++--------------
 1 file changed, 39 insertions(+), 33 deletions(-)

diff --git a/drivers/gpu/drm/amd/pm/amdgpu_pm.c b/drivers/gpu/drm/amd/pm/amdgpu_pm.c
index 5cd67ddf8495..f89e0ff3f5a4 100644
--- a/drivers/gpu/drm/amd/pm/amdgpu_pm.c
+++ b/drivers/gpu/drm/amd/pm/amdgpu_pm.c
@@ -1954,8 +1954,9 @@ static int default_attr_update(struct amdgpu_device *adev, struct amdgpu_device_
                                uint32_t mask, enum amdgpu_device_attr_states *states)
 {
         struct device_attribute *dev_attr = &attr->dev_attr;
+       uint32_t mp1_ver = adev->ip_versions[MP1_HWIP][0];
+       uint32_t gc_ver = adev->ip_versions[GC_HWIP][0];
         const char *attr_name = dev_attr->attr.name;
-       enum amd_asic_type asic_type = adev->asic_type;

         if (!(attr->flags & mask)) {
                 *states = ATTR_STATE_UNSUPPORTED;
@@ -1965,53 +1966,55 @@ static int default_attr_update(struct amdgpu_device *adev, struct amdgpu_device_
 #define DEVICE_ATTR_IS(_name)   (!strcmp(attr_name, #_name))

         if (DEVICE_ATTR_IS(pp_dpm_socclk)) {
-               if (asic_type < CHIP_VEGA10)
+               if (gc_ver < IP_VERSION(9, 0, 0))
                         *states = ATTR_STATE_UNSUPPORTED;
         } else if (DEVICE_ATTR_IS(pp_dpm_dcefclk)) {
-               if (asic_type < CHIP_VEGA10 ||
-                   asic_type == CHIP_ARCTURUS ||
-                   asic_type == CHIP_ALDEBARAN)
+               if (gc_ver < IP_VERSION(9, 0, 0) ||
+                   gc_ver == IP_VERSION(9, 4, 1) ||
+                   gc_ver == IP_VERSION(9, 4, 2))
                         *states = ATTR_STATE_UNSUPPORTED;
         } else if (DEVICE_ATTR_IS(pp_dpm_fclk)) {
-               if (asic_type < CHIP_VEGA20)
+               if (mp1_ver < IP_VERSION(10, 0, 0))
                         *states = ATTR_STATE_UNSUPPORTED;
         } else if (DEVICE_ATTR_IS(pp_od_clk_voltage)) {
                 *states = ATTR_STATE_UNSUPPORTED;
                 if (amdgpu_dpm_is_overdrive_supported(adev))
                         *states = ATTR_STATE_SUPPORTED;
         } else if (DEVICE_ATTR_IS(mem_busy_percent)) {
-               if (adev->flags & AMD_IS_APU || asic_type == CHIP_VEGA10)
+               if (adev->flags & AMD_IS_APU || gc_ver == IP_VERSION(9, 0, 1))
                         *states = ATTR_STATE_UNSUPPORTED;
         } else if (DEVICE_ATTR_IS(pcie_bw)) {
                 /* PCIe Perf counters won't work on APU nodes */
                 if (adev->flags & AMD_IS_APU)
                         *states = ATTR_STATE_UNSUPPORTED;
         } else if (DEVICE_ATTR_IS(unique_id)) {
-               if (asic_type != CHIP_VEGA10 &&
-                   asic_type != CHIP_VEGA20 &&
-                   asic_type != CHIP_ARCTURUS &&
-                   asic_type != CHIP_ALDEBARAN)
+               if (gc_ver != IP_VERSION(9, 0, 1) &&
+                   gc_ver != IP_VERSION(9, 4, 0) &&
+                   gc_ver != IP_VERSION(9, 4, 1) &&
+                   gc_ver != IP_VERSION(9, 4, 2))
                         *states = ATTR_STATE_UNSUPPORTED;
         } else if (DEVICE_ATTR_IS(pp_features)) {
-               if (adev->flags & AMD_IS_APU || asic_type < CHIP_VEGA10)
+               if (adev->flags & AMD_IS_APU || gc_ver < IP_VERSION(9, 0, 0))
                         *states = ATTR_STATE_UNSUPPORTED;
         } else if (DEVICE_ATTR_IS(gpu_metrics)) {
-               if (asic_type < CHIP_VEGA12)
+               if (gc_ver < IP_VERSION(9, 1, 0))
                         *states = ATTR_STATE_UNSUPPORTED;
         } else if (DEVICE_ATTR_IS(pp_dpm_vclk)) {
-               if (!(asic_type == CHIP_VANGOGH || asic_type == CHIP_SIENNA_CICHLID))
+               if (!(gc_ver == IP_VERSION(10, 3, 1) ||
+                     gc_ver == IP_VERSION(10, 3, 0)))
                         *states = ATTR_STATE_UNSUPPORTED;
         } else if (DEVICE_ATTR_IS(pp_dpm_dclk)) {
-               if (!(asic_type == CHIP_VANGOGH || asic_type == CHIP_SIENNA_CICHLID))
+               if (!(gc_ver == IP_VERSION(10, 3, 1) ||
+                     gc_ver == IP_VERSION(10, 3, 0)))
                         *states = ATTR_STATE_UNSUPPORTED;
         } else if (DEVICE_ATTR_IS(pp_power_profile_mode)) {
                 if (amdgpu_dpm_get_power_profile_mode(adev, NULL) == -EOPNOTSUPP)
                         *states = ATTR_STATE_UNSUPPORTED;
         }

-       switch (asic_type) {
-       case CHIP_ARCTURUS:
-       case CHIP_ALDEBARAN:
+       switch (gc_ver) {
+       case IP_VERSION(9, 4, 1):
+       case IP_VERSION(9, 4, 2):
                 /* the Mi series card does not support standalone mclk/socclk/fclk level setting */
                 if (DEVICE_ATTR_IS(pp_dpm_mclk) ||
                     DEVICE_ATTR_IS(pp_dpm_socclk) ||
@@ -2026,7 +2029,7 @@ static int default_attr_update(struct amdgpu_device *adev, struct amdgpu_device_

         if (DEVICE_ATTR_IS(pp_dpm_dcefclk)) {
                 /* SMU MP1 does not support dcefclk level setting */
-               if (asic_type >= CHIP_NAVI10) {
+               if (gc_ver >= IP_VERSION(10, 0, 0)) {
                         dev_attr->attr.mode &= ~S_IWUGO;
                         dev_attr->store = NULL;
                 }
@@ -2864,8 +2867,9 @@ static ssize_t amdgpu_hwmon_show_power_label(struct device *dev,
                                          char *buf)
 {
         struct amdgpu_device *adev = dev_get_drvdata(dev);
+       uint32_t gc_ver = adev->ip_versions[GC_HWIP][0];

-       if (adev->asic_type == CHIP_VANGOGH)
+       if (gc_ver == IP_VERSION(10, 3, 1))
                 return sysfs_emit(buf, "%s\n",
                                   to_sensor_dev_attr(attr)->index == PP_PWR_TYPE_FAST ?
                                   "fastPPT" : "slowPPT");
@@ -3177,6 +3181,7 @@ static umode_t hwmon_attributes_visible(struct kobject *kobj,
         struct device *dev = kobj_to_dev(kobj);
         struct amdgpu_device *adev = dev_get_drvdata(dev);
         umode_t effective_mode = attr->mode;
+       uint32_t gc_ver = adev->ip_versions[GC_HWIP][0];

         /* under multi-vf mode, the hwmon attributes are all not supported */
         if (amdgpu_sriov_vf(adev) && !amdgpu_sriov_is_pp_one_vf(adev))
@@ -3245,18 +3250,18 @@ static umode_t hwmon_attributes_visible(struct kobject *kobj,
               attr == &sensor_dev_attr_pwm1_enable.dev_attr.attr)) /* can't manage state */
                 effective_mode &= ~S_IWUSR;

+       /* not implemented yet for GC 10.3.1 APUs */
         if (((adev->family == AMDGPU_FAMILY_SI) ||
-                ((adev->flags & AMD_IS_APU) &&
-             (adev->asic_type != CHIP_VANGOGH))) &&     /* not implemented yet */
+            ((adev->flags & AMD_IS_APU) && (gc_ver != IP_VERSION(10, 3, 1)))) &&
             (attr == &sensor_dev_attr_power1_cap_max.dev_attr.attr ||
-            attr == &sensor_dev_attr_power1_cap_min.dev_attr.attr||
+            attr == &sensor_dev_attr_power1_cap_min.dev_attr.attr ||
              attr == &sensor_dev_attr_power1_cap.dev_attr.attr ||
              attr == &sensor_dev_attr_power1_cap_default.dev_attr.attr))
                 return 0;

+       /* not implemented yet for APUs having <= GC 9.3.0 */
         if (((adev->family == AMDGPU_FAMILY_SI) ||
-            ((adev->flags & AMD_IS_APU) &&
-             (adev->asic_type < CHIP_RENOIR))) &&       /* not implemented yet */
+            ((adev->flags & AMD_IS_APU) && (gc_ver < IP_VERSION(9, 3, 0)))) &&
             (attr == &sensor_dev_attr_power1_average.dev_attr.attr))
                 return 0;

@@ -3294,8 +3299,7 @@ static umode_t hwmon_attributes_visible(struct kobject *kobj,
                 return 0;

         /* only SOC15 dGPUs support hotspot and mem temperatures */
-       if (((adev->flags & AMD_IS_APU) ||
-            adev->asic_type < CHIP_VEGA10) &&
+       if (((adev->flags & AMD_IS_APU) || gc_ver < IP_VERSION(9, 0, 0)) &&
             (attr == &sensor_dev_attr_temp2_crit.dev_attr.attr ||
              attr == &sensor_dev_attr_temp2_crit_hyst.dev_attr.attr ||
              attr == &sensor_dev_attr_temp3_crit.dev_attr.attr ||
@@ -3310,13 +3314,13 @@ static umode_t hwmon_attributes_visible(struct kobject *kobj,
                 return 0;

         /* only Vangogh has fast PPT limit and power labels */
-       if (!(adev->asic_type == CHIP_VANGOGH) &&
+       if (!(gc_ver == IP_VERSION(10, 3, 1)) &&
             (attr == &sensor_dev_attr_power2_average.dev_attr.attr ||
-                attr == &sensor_dev_attr_power2_cap_max.dev_attr.attr ||
+            attr == &sensor_dev_attr_power2_cap_max.dev_attr.attr ||
              attr == &sensor_dev_attr_power2_cap_min.dev_attr.attr ||
-                attr == &sensor_dev_attr_power2_cap.dev_attr.attr ||
-                attr == &sensor_dev_attr_power2_cap_default.dev_attr.attr ||
-                attr == &sensor_dev_attr_power2_label.dev_attr.attr))
+            attr == &sensor_dev_attr_power2_cap.dev_attr.attr ||
+            attr == &sensor_dev_attr_power2_cap_default.dev_attr.attr ||
+            attr == &sensor_dev_attr_power2_label.dev_attr.attr))
                 return 0;

         return effective_mode;
@@ -3421,6 +3425,8 @@ static void amdgpu_debugfs_prints_cpu_info(struct seq_file *m,

 static int amdgpu_debugfs_pm_info_pp(struct seq_file *m, struct amdgpu_device *adev)
 {
+       uint32_t mp1_ver = adev->ip_versions[MP1_HWIP][0];
+       uint32_t gc_ver = adev->ip_versions[GC_HWIP][0];
         uint32_t value;
         uint64_t value64 = 0;
         uint32_t query = 0;
@@ -3467,7 +3473,7 @@ static int amdgpu_debugfs_pm_info_pp(struct seq_file *m, struct amdgpu_device *a
         if (!amdgpu_dpm_read_sensor(adev, AMDGPU_PP_SENSOR_ENABLED_SMC_FEATURES_MASK, (void *)&value64, &size))
                 seq_printf(m, "SMC Feature Mask: 0x%016llx\n", value64);

-       if (adev->asic_type > CHIP_VEGA20) {
+       if (gc_ver != IP_VERSION(9, 4, 0) && mp1_ver > IP_VERSION(9, 0, 0)) {
                 /* VCN clocks */
                 if (!amdgpu_dpm_read_sensor(adev, AMDGPU_PP_SENSOR_VCN_POWER_STATE, (void *)&value, &size)) {
                         if (!value) {
--
2.25.1


[-- Attachment #2: Type: text/html, Size: 26234 bytes --]

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] drm/amd/pm: Check feature support using IP version
  2022-03-25 11:25 ` Wang, Yang(Kevin)
@ 2022-03-25 14:04   ` Lazar, Lijo
  0 siblings, 0 replies; 3+ messages in thread
From: Lazar, Lijo @ 2022-03-25 14:04 UTC (permalink / raw)
  To: Wang, Yang(Kevin), amd-gfx; +Cc: Deucher, Alexander, Quan, Evan, Zhang, Hawking



On 3/25/2022 4:55 PM, Wang, Yang(Kevin) wrote:
> [AMD Official Use Only]
> 
> 
>         if (adev->asic_type > CHIP_VEGA20) {
> +       if (gc_ver != IP_VERSION(9, 4, 0) && mp1_ver > IP_VERSION(9, 0, 
> 0)) {
>                   /* VCN clocks */
> [kevin]:
> 
> please put some comments here (why mp1_ver and gc_ver is needed both), 
> it can help developer to understand some backgrounds.
> thanks.
> 

Sure, will add them. > VEGA_20 includes RAVEN whose GC and MP1 IP 
versions are lesser than VG20. For clarity, I will add something like > 
VEG20 supports this.

Thanks,
Lijo

> Reviewed-by: Kevin Wang <kevinyang.wang@amd.com>
> Best Regards,
> Kevin
> ------------------------------------------------------------------------
> *From:* Lazar, Lijo <Lijo.Lazar@amd.com>
> *Sent:* Friday, March 25, 2022 4:31 PM
> *To:* amd-gfx@lists.freedesktop.org <amd-gfx@lists.freedesktop.org>
> *Cc:* Zhang, Hawking <Hawking.Zhang@amd.com>; Deucher, Alexander 
> <Alexander.Deucher@amd.com>; Wang, Yang(Kevin) <KevinYang.Wang@amd.com>; 
> Quan, Evan <Evan.Quan@amd.com>
> *Subject:* [PATCH] drm/amd/pm: Check feature support using IP version
> Instead of ASIC type, use GC and MP1 IP versions for feature support checks.
> 
> Signed-off-by: Lijo Lazar <lijo.lazar@amd.com>
> ---
>   drivers/gpu/drm/amd/pm/amdgpu_pm.c | 72 ++++++++++++++++--------------
>   1 file changed, 39 insertions(+), 33 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/pm/amdgpu_pm.c 
> b/drivers/gpu/drm/amd/pm/amdgpu_pm.c
> index 5cd67ddf8495..f89e0ff3f5a4 100644
> --- a/drivers/gpu/drm/amd/pm/amdgpu_pm.c
> +++ b/drivers/gpu/drm/amd/pm/amdgpu_pm.c
> @@ -1954,8 +1954,9 @@ static int default_attr_update(struct 
> amdgpu_device *adev, struct amdgpu_device_
>                                  uint32_t mask, enum 
> amdgpu_device_attr_states *states)
>   {
>           struct device_attribute *dev_attr = &attr->dev_attr;
> +       uint32_t mp1_ver = adev->ip_versions[MP1_HWIP][0];
> +       uint32_t gc_ver = adev->ip_versions[GC_HWIP][0];
>           const char *attr_name = dev_attr->attr.name;
> -       enum amd_asic_type asic_type = adev->asic_type;
> 
>           if (!(attr->flags & mask)) {
>                   *states = ATTR_STATE_UNSUPPORTED;
> @@ -1965,53 +1966,55 @@ static int default_attr_update(struct 
> amdgpu_device *adev, struct amdgpu_device_
>   #define DEVICE_ATTR_IS(_name)   (!strcmp(attr_name, #_name))
> 
>           if (DEVICE_ATTR_IS(pp_dpm_socclk)) {
> -               if (asic_type < CHIP_VEGA10)
> +               if (gc_ver < IP_VERSION(9, 0, 0))
>                           *states = ATTR_STATE_UNSUPPORTED;
>           } else if (DEVICE_ATTR_IS(pp_dpm_dcefclk)) {
> -               if (asic_type < CHIP_VEGA10 ||
> -                   asic_type == CHIP_ARCTURUS ||
> -                   asic_type == CHIP_ALDEBARAN)
> +               if (gc_ver < IP_VERSION(9, 0, 0) ||
> +                   gc_ver == IP_VERSION(9, 4, 1) ||
> +                   gc_ver == IP_VERSION(9, 4, 2))
>                           *states = ATTR_STATE_UNSUPPORTED;
>           } else if (DEVICE_ATTR_IS(pp_dpm_fclk)) {
> -               if (asic_type < CHIP_VEGA20)
> +               if (mp1_ver < IP_VERSION(10, 0, 0))
>                           *states = ATTR_STATE_UNSUPPORTED;
>           } else if (DEVICE_ATTR_IS(pp_od_clk_voltage)) {
>                   *states = ATTR_STATE_UNSUPPORTED;
>                   if (amdgpu_dpm_is_overdrive_supported(adev))
>                           *states = ATTR_STATE_SUPPORTED;
>           } else if (DEVICE_ATTR_IS(mem_busy_percent)) {
> -               if (adev->flags & AMD_IS_APU || asic_type == CHIP_VEGA10)
> +               if (adev->flags & AMD_IS_APU || gc_ver == IP_VERSION(9, 
> 0, 1))
>                           *states = ATTR_STATE_UNSUPPORTED;
>           } else if (DEVICE_ATTR_IS(pcie_bw)) {
>                   /* PCIe Perf counters won't work on APU nodes */
>                   if (adev->flags & AMD_IS_APU)
>                           *states = ATTR_STATE_UNSUPPORTED;
>           } else if (DEVICE_ATTR_IS(unique_id)) {
> -               if (asic_type != CHIP_VEGA10 &&
> -                   asic_type != CHIP_VEGA20 &&
> -                   asic_type != CHIP_ARCTURUS &&
> -                   asic_type != CHIP_ALDEBARAN)
> +               if (gc_ver != IP_VERSION(9, 0, 1) &&
> +                   gc_ver != IP_VERSION(9, 4, 0) &&
> +                   gc_ver != IP_VERSION(9, 4, 1) &&
> +                   gc_ver != IP_VERSION(9, 4, 2))
>                           *states = ATTR_STATE_UNSUPPORTED;
>           } else if (DEVICE_ATTR_IS(pp_features)) {
> -               if (adev->flags & AMD_IS_APU || asic_type < CHIP_VEGA10)
> +               if (adev->flags & AMD_IS_APU || gc_ver < IP_VERSION(9, 
> 0, 0))
>                           *states = ATTR_STATE_UNSUPPORTED;
>           } else if (DEVICE_ATTR_IS(gpu_metrics)) {
> -               if (asic_type < CHIP_VEGA12)
> +               if (gc_ver < IP_VERSION(9, 1, 0))
>                           *states = ATTR_STATE_UNSUPPORTED;
>           } else if (DEVICE_ATTR_IS(pp_dpm_vclk)) {
> -               if (!(asic_type == CHIP_VANGOGH || asic_type == 
> CHIP_SIENNA_CICHLID))
> +               if (!(gc_ver == IP_VERSION(10, 3, 1) ||
> +                     gc_ver == IP_VERSION(10, 3, 0)))
>                           *states = ATTR_STATE_UNSUPPORTED;
>           } else if (DEVICE_ATTR_IS(pp_dpm_dclk)) {
> -               if (!(asic_type == CHIP_VANGOGH || asic_type == 
> CHIP_SIENNA_CICHLID))
> +               if (!(gc_ver == IP_VERSION(10, 3, 1) ||
> +                     gc_ver == IP_VERSION(10, 3, 0)))
>                           *states = ATTR_STATE_UNSUPPORTED;
>           } else if (DEVICE_ATTR_IS(pp_power_profile_mode)) {
>                   if (amdgpu_dpm_get_power_profile_mode(adev, NULL) == 
> -EOPNOTSUPP)
>                           *states = ATTR_STATE_UNSUPPORTED;
>           }
> 
> -       switch (asic_type) {
> -       case CHIP_ARCTURUS:
> -       case CHIP_ALDEBARAN:
> +       switch (gc_ver) {
> +       case IP_VERSION(9, 4, 1):
> +       case IP_VERSION(9, 4, 2):
>                   /* the Mi series card does not support standalone 
> mclk/socclk/fclk level setting */
>                   if (DEVICE_ATTR_IS(pp_dpm_mclk) ||
>                       DEVICE_ATTR_IS(pp_dpm_socclk) ||
> @@ -2026,7 +2029,7 @@ static int default_attr_update(struct 
> amdgpu_device *adev, struct amdgpu_device_
> 
>           if (DEVICE_ATTR_IS(pp_dpm_dcefclk)) {
>                   /* SMU MP1 does not support dcefclk level setting */
> -               if (asic_type >= CHIP_NAVI10) {
> +               if (gc_ver >= IP_VERSION(10, 0, 0)) {
>                           dev_attr->attr.mode &= ~S_IWUGO;
>                           dev_attr->store = NULL;
>                   }
> @@ -2864,8 +2867,9 @@ static ssize_t 
> amdgpu_hwmon_show_power_label(struct device *dev,
>                                            char *buf)
>   {
>           struct amdgpu_device *adev = dev_get_drvdata(dev);
> +       uint32_t gc_ver = adev->ip_versions[GC_HWIP][0];
> 
> -       if (adev->asic_type == CHIP_VANGOGH)
> +       if (gc_ver == IP_VERSION(10, 3, 1))
>                   return sysfs_emit(buf, "%s\n",
>                                     to_sensor_dev_attr(attr)->index == 
> PP_PWR_TYPE_FAST ?
>                                     "fastPPT" : "slowPPT");
> @@ -3177,6 +3181,7 @@ static umode_t hwmon_attributes_visible(struct 
> kobject *kobj,
>           struct device *dev = kobj_to_dev(kobj);
>           struct amdgpu_device *adev = dev_get_drvdata(dev);
>           umode_t effective_mode = attr->mode;
> +       uint32_t gc_ver = adev->ip_versions[GC_HWIP][0];
> 
>           /* under multi-vf mode, the hwmon attributes are all not 
> supported */
>           if (amdgpu_sriov_vf(adev) && !amdgpu_sriov_is_pp_one_vf(adev))
> @@ -3245,18 +3250,18 @@ static umode_t hwmon_attributes_visible(struct 
> kobject *kobj,
>                 attr == &sensor_dev_attr_pwm1_enable.dev_attr.attr)) /* 
> can't manage state */
>                   effective_mode &= ~S_IWUSR;
> 
> +       /* not implemented yet for GC 10.3.1 APUs */
>           if (((adev->family == AMDGPU_FAMILY_SI) ||
> -                ((adev->flags & AMD_IS_APU) &&
> -             (adev->asic_type != CHIP_VANGOGH))) &&     /* not 
> implemented yet */
> +            ((adev->flags & AMD_IS_APU) && (gc_ver != IP_VERSION(10, 3, 
> 1)))) &&
>               (attr == &sensor_dev_attr_power1_cap_max.dev_attr.attr ||
> -            attr == &sensor_dev_attr_power1_cap_min.dev_attr.attr||
> +            attr == &sensor_dev_attr_power1_cap_min.dev_attr.attr ||
>                attr == &sensor_dev_attr_power1_cap.dev_attr.attr ||
>                attr == &sensor_dev_attr_power1_cap_default.dev_attr.attr))
>                   return 0;
> 
> +       /* not implemented yet for APUs having <= GC 9.3.0 */
>           if (((adev->family == AMDGPU_FAMILY_SI) ||
> -            ((adev->flags & AMD_IS_APU) &&
> -             (adev->asic_type < CHIP_RENOIR))) &&       /* not 
> implemented yet */
> +            ((adev->flags & AMD_IS_APU) && (gc_ver < IP_VERSION(9, 3, 
> 0)))) &&
>               (attr == &sensor_dev_attr_power1_average.dev_attr.attr))
>                   return 0;
> 
> @@ -3294,8 +3299,7 @@ static umode_t hwmon_attributes_visible(struct 
> kobject *kobj,
>                   return 0;
> 
>           /* only SOC15 dGPUs support hotspot and mem temperatures */
> -       if (((adev->flags & AMD_IS_APU) ||
> -            adev->asic_type < CHIP_VEGA10) &&
> +       if (((adev->flags & AMD_IS_APU) || gc_ver < IP_VERSION(9, 0, 0)) &&
>               (attr == &sensor_dev_attr_temp2_crit.dev_attr.attr ||
>                attr == &sensor_dev_attr_temp2_crit_hyst.dev_attr.attr ||
>                attr == &sensor_dev_attr_temp3_crit.dev_attr.attr ||
> @@ -3310,13 +3314,13 @@ static umode_t hwmon_attributes_visible(struct 
> kobject *kobj,
>                   return 0;
> 
>           /* only Vangogh has fast PPT limit and power labels */
> -       if (!(adev->asic_type == CHIP_VANGOGH) &&
> +       if (!(gc_ver == IP_VERSION(10, 3, 1)) &&
>               (attr == &sensor_dev_attr_power2_average.dev_attr.attr ||
> -                attr == &sensor_dev_attr_power2_cap_max.dev_attr.attr ||
> +            attr == &sensor_dev_attr_power2_cap_max.dev_attr.attr ||
>                attr == &sensor_dev_attr_power2_cap_min.dev_attr.attr ||
> -                attr == &sensor_dev_attr_power2_cap.dev_attr.attr ||
> -                attr == 
> &sensor_dev_attr_power2_cap_default.dev_attr.attr ||
> -                attr == &sensor_dev_attr_power2_label.dev_attr.attr))
> +            attr == &sensor_dev_attr_power2_cap.dev_attr.attr ||
> +            attr == &sensor_dev_attr_power2_cap_default.dev_attr.attr ||
> +            attr == &sensor_dev_attr_power2_label.dev_attr.attr))
>                   return 0;
> 
>           return effective_mode;
> @@ -3421,6 +3425,8 @@ static void amdgpu_debugfs_prints_cpu_info(struct 
> seq_file *m,
> 
>   static int amdgpu_debugfs_pm_info_pp(struct seq_file *m, struct 
> amdgpu_device *adev)
>   {
> +       uint32_t mp1_ver = adev->ip_versions[MP1_HWIP][0];
> +       uint32_t gc_ver = adev->ip_versions[GC_HWIP][0];
>           uint32_t value;
>           uint64_t value64 = 0;
>           uint32_t query = 0;
> @@ -3467,7 +3473,7 @@ static int amdgpu_debugfs_pm_info_pp(struct 
> seq_file *m, struct amdgpu_device *a
>           if (!amdgpu_dpm_read_sensor(adev, 
> AMDGPU_PP_SENSOR_ENABLED_SMC_FEATURES_MASK, (void *)&value64, &size))
>                   seq_printf(m, "SMC Feature Mask: 0x%016llx\n", value64);
> 
> -       if (adev->asic_type > CHIP_VEGA20) {
> +       if (gc_ver != IP_VERSION(9, 4, 0) && mp1_ver > IP_VERSION(9, 0, 
> 0)) {
>                   /* VCN clocks */
>                   if (!amdgpu_dpm_read_sensor(adev, 
> AMDGPU_PP_SENSOR_VCN_POWER_STATE, (void *)&value, &size)) {
>                           if (!value) {
> -- 
> 2.25.1
> 

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2022-03-25 14:04 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-03-25  8:31 [PATCH] drm/amd/pm: Check feature support using IP version Lijo Lazar
2022-03-25 11:25 ` Wang, Yang(Kevin)
2022-03-25 14:04   ` Lazar, Lijo

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.