struct intel_rc6 *rc6 = >->rc6;
        u64 rc0_power, rc6_power;
        intel_wakeref_t wakeref;
+       bool has_power;
        ktime_t dt;
        u64 res[2];
        int err = 0;
        if (IS_VALLEYVIEW(gt->i915) || IS_CHERRYVIEW(gt->i915))
                return 0;
 
+       has_power = librapl_supported(gt->i915);
        wakeref = intel_runtime_pm_get(gt->uncore->rpm);
 
        /* Force RC6 off for starters */
                goto out_unlock;
        }
 
-       rc0_power = div64_u64(NSEC_PER_SEC * rc0_power, ktime_to_ns(dt));
-       if (!rc0_power) {
-               pr_err("No power measured while in RC0\n");
-               err = -EINVAL;
-               goto out_unlock;
+       if (has_power) {
+               rc0_power = div64_u64(NSEC_PER_SEC * rc0_power,
+                                     ktime_to_ns(dt));
+               if (!rc0_power) {
+                       pr_err("No power measured while in RC0\n");
+                       err = -EINVAL;
+                       goto out_unlock;
+               }
        }
 
        /* Manually enter RC6 */
                err = -EINVAL;
        }
 
-       rc6_power = div64_u64(NSEC_PER_SEC * rc6_power, ktime_to_ns(dt));
-       pr_info("GPU consumed %llduW in RC0 and %llduW in RC6\n",
-               rc0_power, rc6_power);
-       if (2 * rc6_power > rc0_power) {
-               pr_err("GPU leaked energy while in RC6!\n");
-               err = -EINVAL;
-               goto out_unlock;
+       if (has_power) {
+               rc6_power = div64_u64(NSEC_PER_SEC * rc6_power,
+                                     ktime_to_ns(dt));
+               pr_info("GPU consumed %llduW in RC0 and %llduW in RC6\n",
+                       rc0_power, rc6_power);
+               if (2 * rc6_power > rc0_power) {
+                       pr_err("GPU leaked energy while in RC6!\n");
+                       err = -EINVAL;
+                       goto out_unlock;
+               }
        }
 
        /* Restore what should have been the original state! */
 
 
 #include <asm/msr.h>
 
+#include "i915_drv.h"
 #include "librapl.h"
 
+bool librapl_supported(const struct drm_i915_private *i915)
+{
+       /* Discrete cards require hwmon integration */
+       if (IS_DGFX(i915))
+               return false;
+
+       return librapl_energy_uJ();
+}
+
 u64 librapl_energy_uJ(void)
 {
        unsigned long long power;