#define I830_FEATURES \
        GEN(2), \
        .is_mobile = 1, \
-       .num_pipes = 2, \
+       .pipe_mask = BIT(PIPE_A) | BIT(PIPE_B), \
        .display.has_overlay = 1, \
        .display.cursor_needs_physical = 1, \
        .display.overlay_needs_physical = 1, \
 
 #define I845_FEATURES \
        GEN(2), \
-       .num_pipes = 1, \
+       .pipe_mask = BIT(PIPE_A), \
        .display.has_overlay = 1, \
        .display.overlay_needs_physical = 1, \
        .display.has_gmch = 1, \
 
 #define GEN3_FEATURES \
        GEN(3), \
-       .num_pipes = 2, \
+       .pipe_mask = BIT(PIPE_A) | BIT(PIPE_B), \
        .display.has_gmch = 1, \
        .gpu_reset_clobbers_display = true, \
        .engine_mask = BIT(RCS0), \
 
 #define GEN4_FEATURES \
        GEN(4), \
-       .num_pipes = 2, \
+       .pipe_mask = BIT(PIPE_A) | BIT(PIPE_B), \
        .display.has_hotplug = 1, \
        .display.has_gmch = 1, \
        .gpu_reset_clobbers_display = true, \
 
 #define GEN5_FEATURES \
        GEN(5), \
-       .num_pipes = 2, \
+       .pipe_mask = BIT(PIPE_A) | BIT(PIPE_B), \
        .display.has_hotplug = 1, \
        .engine_mask = BIT(RCS0) | BIT(VCS0), \
        .has_snoop = true, \
 
 #define GEN6_FEATURES \
        GEN(6), \
-       .num_pipes = 2, \
+       .pipe_mask = BIT(PIPE_A) | BIT(PIPE_B), \
        .display.has_hotplug = 1, \
        .display.has_fbc = 1, \
        .engine_mask = BIT(RCS0) | BIT(VCS0) | BIT(BCS0), \
 
 #define GEN7_FEATURES  \
        GEN(7), \
-       .num_pipes = 3, \
+       .pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C), \
        .display.has_hotplug = 1, \
        .display.has_fbc = 1, \
        .engine_mask = BIT(RCS0) | BIT(VCS0) | BIT(BCS0), \
        GEN7_FEATURES,
        PLATFORM(INTEL_IVYBRIDGE),
        .gt = 2,
-       .num_pipes = 0, /* legal, last one wins */
+       .pipe_mask = 0, /* legal, last one wins */
        .has_l3_dpf = 1,
 };
 
        PLATFORM(INTEL_VALLEYVIEW),
        GEN(7),
        .is_lp = 1,
-       .num_pipes = 2,
+       .pipe_mask = BIT(PIPE_A) | BIT(PIPE_B),
        .has_runtime_pm = 1,
        .has_rc6 = 1,
        .has_rps = true,
 static const struct intel_device_info intel_cherryview_info = {
        PLATFORM(INTEL_CHERRYVIEW),
        GEN(8),
-       .num_pipes = 3,
+       .pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C),
        .display.has_hotplug = 1,
        .is_lp = 1,
        .engine_mask = BIT(RCS0) | BIT(VCS0) | BIT(BCS0) | BIT(VECS0),
        .is_lp = 1, \
        .display.has_hotplug = 1, \
        .engine_mask = BIT(RCS0) | BIT(VCS0) | BIT(BCS0) | BIT(VECS0), \
-       .num_pipes = 3, \
+       .pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C), \
        .has_64bit_reloc = 1, \
        .display.has_ddi = 1, \
        .has_fpga_dbg = 1, \
 static const struct intel_device_info intel_tigerlake_12_info = {
        GEN12_FEATURES,
        PLATFORM(INTEL_TIGERLAKE),
-       .num_pipes = 4,
+       .pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C) | BIT(PIPE_D),
        .require_force_probe = 1,
        .display.has_modular_fia = 1,
        .engine_mask =
 
 
        if (i915_modparams.disable_display) {
                DRM_INFO("Display disabled (module parameter)\n");
-               info->num_pipes = 0;
+               info->pipe_mask = 0;
        } else if (HAS_DISPLAY(dev_priv) &&
                   (IS_GEN_RANGE(dev_priv, 7, 8)) &&
                   HAS_PCH_SPLIT(dev_priv)) {
                    (HAS_PCH_CPT(dev_priv) &&
                     !(sfuse_strap & SFUSE_STRAP_FUSE_LOCK))) {
                        DRM_INFO("Display fused off, disabling\n");
-                       info->num_pipes = 0;
+                       info->pipe_mask = 0;
                } else if (fuse_strap & IVB_PIPE_C_DISABLE) {
                        DRM_INFO("PipeC fused off\n");
-                       info->num_pipes -= 1;
+                       info->pipe_mask &= ~BIT(PIPE_C);
                }
        } else if (HAS_DISPLAY(dev_priv) && INTEL_GEN(dev_priv) >= 9) {
                u32 dfsm = I915_READ(SKL_DFSM);
-               u8 enabled_mask = BIT(info->num_pipes) - 1;
+               u8 enabled_mask = info->pipe_mask;
 
                if (dfsm & SKL_DFSM_PIPE_A_DISABLE)
                        enabled_mask &= ~BIT(PIPE_A);
                        DRM_ERROR("invalid pipe fuse configuration: enabled_mask=0x%x\n",
                                  enabled_mask);
                else
-                       info->num_pipes = hweight8(enabled_mask);
+                       info->pipe_mask = enabled_mask;
        }
 
        /* Initialize slice/subslice/EU info */