On Tue, 09 Aug 2011 09:38:56 -0700
Keith Packard <kei...@keithp.com> wrote:

> On Tue,  9 Aug 2011 09:17:46 -0700, Jesse Barnes <jbar...@virtuousgeek.org> 
> wrote:
> 
> > IVB uses the same interrupt reg layout as SNB, so add an IS_GEN7 to the
> > interrupt debugfs file.
> 
> Here's a list of code which uses IS_GEN6 but is not also using
> IS_GEN7 or IS_IVYBRIDGE. Seems like some of these should get fixed too:
> 
> i915_debugfs.c-499-   seq_printf(m, "Interrupts received: %d\n",
> i915_debugfs.c-500-              atomic_read(&dev_priv->irq_received));
> i915_debugfs.c-501-   for (i = 0; i < I915_NUM_RINGS; i++) {
> i915_debugfs.c:502:           if (IS_GEN6(dev)) {
> i915_debugfs.c-503-                   seq_printf(m, "Graphics Interrupt mask 
> (%s):    %08x\n",
> i915_debugfs.c-504-                              dev_priv->ring[i].name,
> i915_debugfs.c-505-                              
> I915_READ_IMR(&dev_priv->ring[i]));
> --
> i915_debugfs.c-646-   seq_printf(m, "  Size :    %08x\n", ring->size);
> i915_debugfs.c-647-   seq_printf(m, "  Active :  %08x\n", 
> intel_ring_get_active_head(ring));
> i915_debugfs.c-648-   seq_printf(m, "  NOPID :   %08x\n", 
> I915_READ_NOPID(ring));
> i915_debugfs.c:649:   if (IS_GEN6(dev)) {
> i915_debugfs.c-650-           seq_printf(m, "  Sync 0 :   %08x\n", 
> I915_READ_SYNC_0(ring));
> i915_debugfs.c-651-           seq_printf(m, "  Sync 1 :   %08x\n", 
> I915_READ_SYNC_1(ring));
> i915_debugfs.c-652-   }
> --
> i915_debugfs.c-1531-  struct drm_i915_private *dev_priv = dev->dev_private;
> i915_debugfs.c-1532-  int ret;
> i915_debugfs.c-1533-
> i915_debugfs.c:1534:  if (!IS_GEN6(dev))
> i915_debugfs.c-1535-          return 0;
> i915_debugfs.c-1536-
> i915_debugfs.c-1537-  ret = mutex_lock_interruptible(&dev->struct_mutex);
> --
> i915_debugfs.c-1548-  struct drm_device *dev = inode->i_private;
> i915_debugfs.c-1549-  struct drm_i915_private *dev_priv = dev->dev_private;
> i915_debugfs.c-1550-
> i915_debugfs.c:1551:  if (!IS_GEN6(dev))
> i915_debugfs.c-1552-          return 0;
> i915_debugfs.c-1553-
> i915_debugfs.c-1554-  /*

Debugfs is a bit of a mess wrt generations today; I'll clean it up for
ivb at least.

> --
> i915_gem.c-3698-      obj->base.write_domain = I915_GEM_DOMAIN_CPU;
> i915_gem.c-3699-      obj->base.read_domains = I915_GEM_DOMAIN_CPU;
> i915_gem.c-3700-
> i915_gem.c:3701:      if (IS_GEN6(dev)) {
> i915_gem.c-3702-              /* On Gen6, we can have the GPU use the LLC 
> (the CPU
> i915_gem.c-3703-               * cache) for about a 10% performance 
> improvement
> i915_gem.c-3704-               * compared to uncached.  Graphics requests 
> other than

Hm this one looks important. :)

> --
> i915_irq.c-567-
> i915_irq.c-568-       atomic_inc(&dev_priv->irq_received);
> i915_irq.c-569-
> i915_irq.c:570:       if (IS_GEN6(dev))
> i915_irq.c-571-               bsd_usr_interrupt = GT_GEN6_BSD_USER_INTERRUPT;
> i915_irq.c-572-
> i915_irq.c-573-       /* disable master interrupt before clearing iir  */
> --
> i915_irq.c-581-       pm_iir = I915_READ(GEN6_PMIIR);
> i915_irq.c-582-
> i915_irq.c-583-       if (de_iir == 0 && gt_iir == 0 && pch_iir == 0 &&
> i915_irq.c:584:           (!IS_GEN6(dev) || pm_iir == 0))
> i915_irq.c-585-               goto done;
> i915_irq.c-586-
> i915_irq.c-587-       if (HAS_PCH_CPT(dev))
> --
> i915_irq.c-636-               i915_handle_rps_change(dev);
> i915_irq.c-637-       }
> i915_irq.c-638-
> i915_irq.c:639:       if (IS_GEN6(dev) && pm_iir & GEN6_PM_DEFERRED_EVENTS) {
> i915_irq.c-640-               /*
> i915_irq.c-641-                * IIR bits should never already be set because 
> IMR should
> i915_irq.c-642-                * prevent an interrupt from being shown in 
> IIR. The warning
> --
> i915_irq.c-1646-              I915_WRITE_CTL(ring, tmp);
> i915_irq.c-1647-              return true;
> i915_irq.c-1648-      }
> i915_irq.c:1649:      if (IS_GEN6(dev) &&
> i915_irq.c-1650-          (tmp & RING_WAIT_SEMAPHORE)) {
> i915_irq.c-1651-              DRM_ERROR("Kicking stuck semaphore on %s\n",
> i915_irq.c-1652-                        ring->name);
> --
> i915_irq.c-1806-      I915_WRITE(GTIIR, I915_READ(GTIIR));
> i915_irq.c-1807-      I915_WRITE(GTIMR, dev_priv->gt_irq_mask);
> i915_irq.c-1808-
> i915_irq.c:1809:      if (IS_GEN6(dev))
> i915_irq.c-1810-              render_irqs =
> i915_irq.c-1811-                      GT_USER_INTERRUPT |
> i915_irq.c-1812-                      GT_GEN6_BSD_USER_INTERRUPT |

As do these, I'll check them out.

> --
> i915_suspend.c-820-
> i915_suspend.c-821-   if (IS_IRONLAKE_M(dev))
> i915_suspend.c-822-           ironlake_disable_drps(dev);
> i915_suspend.c:823:   if (IS_GEN6(dev))
> i915_suspend.c-824-           gen6_disable_rps(dev);
> i915_suspend.c-825-
> i915_suspend.c-826-   /* Cache mode state */

Once I get a C0 part I can actually test the RPS stuff.

> --
> i915_suspend.c-878-           intel_init_emon(dev);
> i915_suspend.c-879-   }
> i915_suspend.c-880-
> i915_suspend.c:881:   if (IS_GEN6(dev)) {
> i915_suspend.c-882-           gen6_enable_rps(dev_priv);
> i915_suspend.c-883-           gen6_update_ring_freq(dev_priv);
> i915_suspend.c-884-   }
> --
> intel_display.c-1625- /* enable it... */
> intel_display.c-1626- I915_WRITE(ILK_DPFC_CONTROL, dpfc_ctl | DPFC_CTL_EN);
> intel_display.c-1627-
> intel_display.c:1628: if (IS_GEN6(dev)) {
> intel_display.c-1629-         I915_WRITE(SNB_DPFC_CTL_SA,
> intel_display.c-1630-                    SNB_CPU_FENCE_ENABLE | 
> obj->fence_reg);
> intel_display.c-1631-         I915_WRITE(DPFC_CPU_FENCE_OFFSET, crtc->y);

FBC hasn't been tested either, I'll take a look.

> --
> intel_display.c-2516- temp = I915_READ(reg);
> intel_display.c-2517- temp &= ~FDI_LINK_TRAIN_NONE;
> intel_display.c-2518- temp |= FDI_LINK_TRAIN_PATTERN_2;
> intel_display.c:2519: if (IS_GEN6(dev)) {
> intel_display.c-2520-         temp &= ~FDI_LINK_TRAIN_VOL_EMP_MASK;
> intel_display.c-2521-         /* SNB-B */
> intel_display.c-2522-         temp |= FDI_LINK_TRAIN_400MV_0DB_SNB_B;

This is in the gen6 link train, not ivb, so it should be fine.


> --
> intel_display.c-8152-                 }
> intel_display.c-8153-                 dev_priv->display.fdi_link_train = 
> ironlake_fdi_link_train;
> intel_display.c-8154-                 dev_priv->display.init_clock_gating = 
> ironlake_init_clock_gating;
> intel_display.c:8155:         } else if (IS_GEN6(dev)) {
> intel_display.c-8156-                 if (SNB_READ_WM0_LATENCY()) {
> intel_display.c-8157-                         dev_priv->display.update_wm = 
> sandybridge_update_wm;
> intel_display.c-8158-                 } else {

The IVB version is just below this.

> --
> intel_dp.c-303-        * clock divider.
> intel_dp.c-304-        */
> intel_dp.c-305-       if (is_edp(intel_dp) && !is_pch_edp(intel_dp)) {
> intel_dp.c:306:               if (IS_GEN6(dev))
> intel_dp.c-307-                       aux_clock_divider = 200; /* SNB eDP 
> input clock at 400Mhz */
> intel_dp.c-308-               else
> intel_dp.c-309-                       aux_clock_divider = 225; /* eDP input 
> clock at 450Mhz */
> --
> intel_dp.c-312-       else
> intel_dp.c-313-               aux_clock_divider = intel_hrawclk(dev) / 2;
> intel_dp.c-314-
> intel_dp.c:315:       if (IS_GEN6(dev))
> intel_dp.c-316-               precharge = 3;
> intel_dp.c-317-       else
> intel_dp.c-318-               precharge = 5;
> --
> intel_dp.c-1375-      for (;;) {
> intel_dp.c-1376-              /* Use intel_dp->train_set[0] to set the 
> voltage and pre emphasis values */
> intel_dp.c-1377-              uint32_t    signal_levels;
> intel_dp.c:1378:              if (IS_GEN6(dev) && is_edp(intel_dp)) {
> intel_dp.c-1379-                      signal_levels = 
> intel_gen6_edp_signal_levels(intel_dp->train_set[0]);
> intel_dp.c-1380-                      DP = (DP & 
> ~EDP_LINK_TRAIN_VOL_EMP_MASK_SNB) | signal_levels;
> intel_dp.c-1381-              } else {
> --
> intel_dp.c-1450-                      break;
> intel_dp.c-1451-              }
> intel_dp.c-1452-
> intel_dp.c:1453:              if (IS_GEN6(dev) && is_edp(intel_dp)) {
> intel_dp.c-1454-                      signal_levels = 
> intel_gen6_edp_signal_levels(intel_dp->train_set[0]);
> intel_dp.c-1455-                      DP = (DP & 
> ~EDP_LINK_TRAIN_VOL_EMP_MASK_SNB) | signal_levels;
> intel_dp.c-1456-              } else {

I posted patches for these earlier, but haven't seen issues with DP on
IVB.  I'll double check anyway.

> 
> 
> And, a couple which appear to be using IS_IVYBRIDGE instead of IS_GEN7
> for no particularly good reason:
> 
> i915_irq.c-1744-
> i915_irq.c-1745-      INIT_WORK(&dev_priv->hotplug_work, 
> i915_hotplug_work_func);
> i915_irq.c-1746-      INIT_WORK(&dev_priv->error_work, i915_error_work_func);
> i915_irq.c:1747:      if (IS_GEN6(dev) || IS_IVYBRIDGE(dev))
> i915_irq.c-1748-              INIT_WORK(&dev_priv->rps_work, 
> gen6_pm_rps_work);
> i915_irq.c-1749-
> i915_irq.c-1750-      I915_WRITE(HWSTAM, 0xeffe);
> i915_irq.c:1751:      if (IS_GEN6(dev) || IS_GEN7(dev)) {
> i915_irq.c-1752-              /* Workaround stalls observed on Sandy Bridge 
> GPUs by
> i915_irq.c-1753-               * making the blitter command streamer generate 
> a
> i915_irq.c-1754-               * write to the Hardware Status Page for
> --
> i915_irq.c-2053-{
> i915_irq.c-2054-      dev->driver->get_vblank_counter = 
> i915_get_vblank_counter;
> i915_irq.c-2055-      dev->max_vblank_count = 0xffffff; /* only 24 bits of 
> frame count */
> i915_irq.c:2056:      if (IS_G4X(dev) || IS_GEN5(dev) || IS_GEN6(dev) || 
> IS_IVYBRIDGE(dev)) {
> i915_irq.c-2057-              dev->max_vblank_count = 0xffffffff; /* full 32 
> bit counter */
> i915_irq.c-2058-              dev->driver->get_vblank_counter = 
> gm45_get_vblank_counter;
> i915_irq.c-2059-      }

Don't get me started on IS_GEN vs IS_<chipset>.  I already posted
patches for that and got shot down.

-- 
Jesse Barnes, Intel Open Source Technology Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to