static int rapl_check_domain(int cpu, int domain)
 {
        unsigned msr;
-       u64 val1, val2 = 0;
-       int retry = 0;
+       u64 val = 0;
 
        switch (domain) {
        case RAPL_DOMAIN_PACKAGE:
                pr_err("invalid domain id %d\n", domain);
                return -EINVAL;
        }
-       if (rdmsrl_safe_on_cpu(cpu, msr, &val1))
-               return -ENODEV;
-
-       /* PP1/uncore/graphics domain may not be active at the time of
-        * driver loading. So skip further checks.
+       /* make sure domain counters are available and contains non-zero
+        * values, otherwise skip it.
         */
-       if (domain == RAPL_DOMAIN_PP1)
-               return 0;
-       /* energy counters roll slowly on some domains */
-       while (++retry < 10) {
-               usleep_range(10000, 15000);
-               rdmsrl_safe_on_cpu(cpu, msr, &val2);
-               if ((val1 & ENERGY_STATUS_MASK) != (val2 & ENERGY_STATUS_MASK))
-                       return 0;
-       }
-       /* if energy counter does not change, report as bad domain */
-       pr_info("domain %s energy ctr %llu:%llu not working, skip\n",
-               rapl_domain_names[domain], val1, val2);
+       if (rdmsrl_safe_on_cpu(cpu, msr, &val) || !val)
+               return -ENODEV;
 
-       return -ENODEV;
+       return 0;
 }
 
 /* Detect active and valid domains for the given CPU, caller must
                /* use physical package id to read counters */
                if (!rapl_check_domain(cpu, i))
                        rp->domain_map |= 1 << i;
+               else
+                       pr_warn("RAPL domain %s detection failed\n",
+                               rapl_domain_names[i]);
        }
        rp->nr_domains = bitmap_weight(&rp->domain_map, RAPL_DOMAIN_MAX);
        if (!rp->nr_domains) {