platform/x86/amd: pmc: Move idlemask check into `amd_pmc_idlemask_read`
authorMario Limonciello <mario.limonciello@amd.com>
Sun, 9 Apr 2023 18:53:44 +0000 (00:23 +0530)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 11 May 2023 14:03:15 +0000 (23:03 +0900)
[ Upstream commit 9217bd1d7699f34a01b26ba14ff38c1714ce1185 ]

The version check requirement for idle mask support actually only
applies to RN/CZN/BRC platforms.

So far no issues have happened because the PMFW version string is
bigger on other supported systems.  This can be reset for any new platform
so move the check to only RN/CZN/BRC case.

Fixes: f6045de1f532 ("platform/x86: amd-pmc: Export Idlemask values based on the APU")
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
Link: https://lore.kernel.org/r/20230409185348.556161-5-Shyam-sundar.S-k@amd.com
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/platform/x86/amd/pmc.c

index 40cce95000e675fb16509cd3486ed6d381308fb0..752015ca507f90b0d95e8b2f4f554680e56a29b9 100644 (file)
@@ -310,33 +310,6 @@ static int amd_pmc_setup_smu_logging(struct amd_pmc_dev *dev)
        return 0;
 }
 
-static int amd_pmc_idlemask_read(struct amd_pmc_dev *pdev, struct device *dev,
-                                struct seq_file *s)
-{
-       u32 val;
-
-       switch (pdev->cpu_id) {
-       case AMD_CPU_ID_CZN:
-               val = amd_pmc_reg_read(pdev, AMD_PMC_SCRATCH_REG_CZN);
-               break;
-       case AMD_CPU_ID_YC:
-       case AMD_CPU_ID_CB:
-       case AMD_CPU_ID_PS:
-               val = amd_pmc_reg_read(pdev, AMD_PMC_SCRATCH_REG_YC);
-               break;
-       default:
-               return -EINVAL;
-       }
-
-       if (dev)
-               dev_dbg(pdev->dev, "SMU idlemask s0i3: 0x%x\n", val);
-
-       if (s)
-               seq_printf(s, "SMU idlemask : 0x%x\n", val);
-
-       return 0;
-}
-
 static int get_metrics_table(struct amd_pmc_dev *pdev, struct smu_metrics *table)
 {
        if (!pdev->smu_virt_addr) {
@@ -513,28 +486,47 @@ static int s0ix_stats_show(struct seq_file *s, void *unused)
 }
 DEFINE_SHOW_ATTRIBUTE(s0ix_stats);
 
-static int amd_pmc_idlemask_show(struct seq_file *s, void *unused)
+static int amd_pmc_idlemask_read(struct amd_pmc_dev *pdev, struct device *dev,
+                                struct seq_file *s)
 {
-       struct amd_pmc_dev *dev = s->private;
+       u32 val;
        int rc;
 
-       /* we haven't yet read SMU version */
-       if (!dev->major) {
-               rc = amd_pmc_get_smu_version(dev);
-               if (rc)
-                       return rc;
+       switch (pdev->cpu_id) {
+       case AMD_CPU_ID_CZN:
+               /* we haven't yet read SMU version */
+               if (!pdev->major) {
+                       rc = amd_pmc_get_smu_version(pdev);
+                       if (rc)
+                               return rc;
+               }
+               if (pdev->major > 56 || (pdev->major >= 55 && pdev->minor >= 37))
+                       val = amd_pmc_reg_read(pdev, AMD_PMC_SCRATCH_REG_CZN);
+               else
+                       return -EINVAL;
+               break;
+       case AMD_CPU_ID_YC:
+       case AMD_CPU_ID_CB:
+       case AMD_CPU_ID_PS:
+               val = amd_pmc_reg_read(pdev, AMD_PMC_SCRATCH_REG_YC);
+               break;
+       default:
+               return -EINVAL;
        }
 
-       if (dev->major > 56 || (dev->major >= 55 && dev->minor >= 37)) {
-               rc = amd_pmc_idlemask_read(dev, NULL, s);
-               if (rc)
-                       return rc;
-       } else {
-               seq_puts(s, "Unsupported SMU version for Idlemask\n");
-       }
+       if (dev)
+               dev_dbg(pdev->dev, "SMU idlemask s0i3: 0x%x\n", val);
+
+       if (s)
+               seq_printf(s, "SMU idlemask : 0x%x\n", val);
 
        return 0;
 }
+
+static int amd_pmc_idlemask_show(struct seq_file *s, void *unused)
+{
+       return amd_pmc_idlemask_read(s->private, NULL, s);
+}
 DEFINE_SHOW_ATTRIBUTE(amd_pmc_idlemask);
 
 static void amd_pmc_dbgfs_unregister(struct amd_pmc_dev *dev)