Re: [PATCH 1/2] Revert "iommu/amd: Fix performance counter initialization"

From: Suthikulpanit, Suravee
Date: Tue Apr 13 2021 - 09:36:29 EST


Shuah,

On 4/10/2021 12:06 AM, Shuah Khan wrote:
diff --git a/drivers/iommu/amd/init.c b/drivers/iommu/amd/init.c
index 321f5906e6ed..648cdfd03074 100644
--- a/drivers/iommu/amd/init.c
+++ b/drivers/iommu/amd/init.c
....
@@ -1729,39 +1728,17 @@ static void __init init_iommu_perf_ctr(struct amd_iommu *iommu)
      amd_iommu_pc_present = true;
      /* save the value to restore, if writable */
-    if (iommu_pc_get_set_reg(iommu, 0, 0, 0, &save_reg, false) ||
-        iommu_pc_get_set_reg(iommu, 0, 0, 8, &save_src, false))
-        goto pc_false;
-
-    /*
-     * Disable power gating by programing the performance counter
-     * source to 20 (i.e. counts the reads and writes from/to IOMMU
-     * Reserved Register [MMIO Offset 1FF8h] that are ignored.),
-     * which never get incremented during this init phase.
-     * (Note: The event is also deprecated.)
-     */
-    val = 20;
-    if (iommu_pc_get_set_reg(iommu, 0, 0, 8, &val, true))
+    if (iommu_pc_get_set_reg(iommu, 0, 0, 0, &save_reg, false))
          goto pc_false;
      /* Check if the performance counters can be written to */
-    val = 0xabcd;
-    for (retry = 5; retry; retry--) {
-        if (iommu_pc_get_set_reg(iommu, 0, 0, 0, &val, true) ||
-            iommu_pc_get_set_reg(iommu, 0, 0, 0, &val2, false) ||
-            val2)
-            break;
-
-        /* Wait about 20 msec for power gating to disable and retry. */
-        msleep(20);
-    }
-
-    /* restore */
-    if (iommu_pc_get_set_reg(iommu, 0, 0, 0, &save_reg, true) ||
-        iommu_pc_get_set_reg(iommu, 0, 0, 8, &save_src, true))
+    if ((iommu_pc_get_set_reg(iommu, 0, 0, 0, &val, true)) ||
+        (iommu_pc_get_set_reg(iommu, 0, 0, 0, &val2, false)) ||
+        (val != val2))

Probably don't need parentheses around 'val != val2'

This is the result from git revert. Also, the logic is removed in patch 2/2.

Suravee