L:    dri-devel@lists.freedesktop.org
  L:    linux-tegra@vger.kernel.org
  T:    git git://anongit.freedesktop.org/tegra/linux.git
- S:    Maintained
+ S:    Supported
 +F:    drivers/gpu/drm/tegra/
  F:    drivers/gpu/host1x/
 +F:    include/linux/host1x.h
  F:    include/uapi/drm/tegra_drm.h
  F:    Documentation/devicetree/bindings/gpu/nvidia,tegra20-host1x.txt
  
 
        strncpy(intel_dp->adapter.name, name, sizeof(intel_dp->adapter.name) - 1);
        intel_dp->adapter.name[sizeof(intel_dp->adapter.name) - 1] = '\0';
        intel_dp->adapter.algo_data = &intel_dp->algo;
 -      intel_dp->adapter.dev.parent = &intel_connector->base.kdev;
 +      intel_dp->adapter.dev.parent = intel_connector->base.kdev;
  
-       ironlake_edp_panel_vdd_on(intel_dp);
        ret = i2c_dp_aux_add_bus(&intel_dp->adapter);
-       ironlake_edp_panel_vdd_off(intel_dp, false);
        return ret;
  }
  
 
        }
        dev_priv->backlight.device =
                backlight_device_register("intel_backlight",
-                                         connector->kdev, dev,
 -                                        &connector->kdev,
++                                        connector->kdev,
+                                         to_intel_connector(connector),
                                          &intel_panel_bl_ops, &props);
  
        if (IS_ERR(dev_priv->backlight.device)) {
 
  nouveau_mc_intr(int irq, void *arg)
  {
        struct nouveau_mc *pmc = arg;
 -      const struct nouveau_mc_intr *map = pmc->intr_map;
 -      struct nouveau_device *device = nv_device(pmc);
 +      const struct nouveau_mc_oclass *oclass = (void *)nv_object(pmc)->oclass;
 +      const struct nouveau_mc_intr *map = oclass->intr;
-       struct nouveau_device *device = nv_device(pmc);
        struct nouveau_subdev *unit;
 -      u32 stat, intr;
 -
 -      intr = stat = nv_rd32(pmc, 0x000100);
 -      if (intr == 0xffffffff)
 -              return IRQ_NONE;
 -      while (stat && map->stat) {
 -              if (stat & map->stat) {
 -                      unit = nouveau_subdev(pmc, map->unit);
 -                      if (unit && unit->intr)
 -                              unit->intr(unit);
 -                      intr &= ~map->stat;
 -              }
 -              map++;
 -      }
 +      u32 intr;
  
 +      nv_wr32(pmc, 0x000140, 0x00000000);
 +      nv_rd32(pmc, 0x000140);
 +      intr = nouveau_mc_intr_mask(pmc);
        if (pmc->use_msi)
 -              nv_wr08(pmc->base.base.parent, 0x00088068, 0xff);
 +              oclass->msi_rearm(pmc);
  
        if (intr) {
 -              nv_error(pmc, "unknown intr 0x%08x\n", stat);
 +              u32 stat = intr = nouveau_mc_intr_mask(pmc);
 +              while (map->stat) {
 +                      if (intr & map->stat) {
 +                              unit = nouveau_subdev(pmc, map->unit);
 +                              if (unit && unit->intr)
 +                                      unit->intr(unit);
 +                              stat &= ~map->stat;
 +                      }
 +                      map++;
 +              }
 +
 +              if (stat)
 +                      nv_error(pmc, "unknown intr 0x%08x\n", stat);
        }
  
 -      if (stat == IRQ_HANDLED)
 -              pm_runtime_mark_last_busy(&device->pdev->dev);
 -      return stat ? IRQ_HANDLED : IRQ_NONE;
 +      nv_wr32(pmc, 0x000140, 0x00000001);
 +      return intr ? IRQ_HANDLED : IRQ_NONE;
  }
  
  int
 
        u8 *sadb;
        int sad_count;
  
+       /* XXX: setting this register causes hangs on some asics */
+       return;
+ 
        list_for_each_entry(connector, &encoder->dev->mode_config.connector_list, head) {
 -              if (connector->encoder == encoder)
 +              if (connector->encoder == encoder) {
                        radeon_connector = to_radeon_connector(connector);
 +                      break;
 +              }
        }
  
        if (!radeon_connector) {
 
        u8 *sadb;
        int sad_count;
  
+       /* XXX: setting this register causes hangs on some asics */
+       return;
+ 
        list_for_each_entry(connector, &encoder->dev->mode_config.connector_list, head) {
 -              if (connector->encoder == encoder)
 +              if (connector->encoder == encoder) {
                        radeon_connector = to_radeon_connector(connector);
 +                      break;
 +              }
        }
  
        if (!radeon_connector) {
 
                        drm_object_attach_property(&radeon_connector->base.base,
                                                      rdev->mode_info.underscan_vborder_property,
                                                      0);
-                       drm_object_attach_property(&radeon_connector->base.base,
-                                                  rdev->mode_info.audio_property,
-                                                  RADEON_AUDIO_AUTO);
++
 +                      drm_object_attach_property(&radeon_connector->base.base,
 +                                                 rdev->mode_info.dither_property,
 +                                                 RADEON_FMT_DITHER_DISABLE);
++
+                       if (radeon_audio != 0)
+                               drm_object_attach_property(&radeon_connector->base.base,
+                                                          rdev->mode_info.audio_property,
+                                                          (radeon_audio == 1) ?
+                                                          RADEON_AUDIO_AUTO :
+                                                          RADEON_AUDIO_DISABLE);
++
                        subpixel_order = SubPixelHorizontalRGB;
                        connector->interlace_allowed = true;
                        if (connector_type == DRM_MODE_CONNECTOR_HDMIB)
                                                              rdev->mode_info.underscan_vborder_property,
                                                              0);
                        }
-                       if (ASIC_IS_DCE2(rdev)) {
+                       if (ASIC_IS_DCE2(rdev) && (radeon_audio != 0)) {
                                drm_object_attach_property(&radeon_connector->base.base,
-                                                             rdev->mode_info.audio_property,
-                                                             RADEON_AUDIO_AUTO);
+                                                          rdev->mode_info.audio_property,
+                                                          (radeon_audio == 1) ?
+                                                          RADEON_AUDIO_AUTO :
+                                                          RADEON_AUDIO_DISABLE);
                        }
 +                      if (ASIC_IS_AVIVO(rdev)) {
 +                              drm_object_attach_property(&radeon_connector->base.base,
 +                                                         rdev->mode_info.dither_property,
 +                                                         RADEON_FMT_DITHER_DISABLE);
 +                      }
                        if (connector_type == DRM_MODE_CONNECTOR_DVII) {
                                radeon_connector->dac_load_detect = true;
                                drm_object_attach_property(&radeon_connector->base.base,
                                                              rdev->mode_info.underscan_vborder_property,
                                                              0);
                        }
-                       if (ASIC_IS_DCE2(rdev)) {
+                       if (ASIC_IS_DCE2(rdev) && (radeon_audio != 0)) {
                                drm_object_attach_property(&radeon_connector->base.base,
-                                                             rdev->mode_info.audio_property,
-                                                             RADEON_AUDIO_AUTO);
+                                                          rdev->mode_info.audio_property,
+                                                          (radeon_audio == 1) ?
+                                                          RADEON_AUDIO_AUTO :
+                                                          RADEON_AUDIO_DISABLE);
                        }
 +                      if (ASIC_IS_AVIVO(rdev)) {
 +                              drm_object_attach_property(&radeon_connector->base.base,
 +                                                         rdev->mode_info.dither_property,
 +                                                         RADEON_FMT_DITHER_DISABLE);
 +                      }
                        subpixel_order = SubPixelHorizontalRGB;
                        connector->interlace_allowed = true;
                        if (connector_type == DRM_MODE_CONNECTOR_HDMIB)
                                                              rdev->mode_info.underscan_vborder_property,
                                                              0);
                        }
-                       if (ASIC_IS_DCE2(rdev)) {
+                       if (ASIC_IS_DCE2(rdev) && (radeon_audio != 0)) {
                                drm_object_attach_property(&radeon_connector->base.base,
-                                                             rdev->mode_info.audio_property,
-                                                             RADEON_AUDIO_AUTO);
+                                                          rdev->mode_info.audio_property,
+                                                          (radeon_audio == 1) ?
+                                                          RADEON_AUDIO_AUTO :
+                                                          RADEON_AUDIO_DISABLE);
                        }
 +                      if (ASIC_IS_AVIVO(rdev)) {
 +                              drm_object_attach_property(&radeon_connector->base.base,
 +                                                         rdev->mode_info.dither_property,
 +                                                         RADEON_FMT_DITHER_DISABLE);
++
 +                      }
                        connector->interlace_allowed = true;
                        /* in theory with a DP to VGA converter... */
                        connector->doublescan_allowed = false;
 
  extern u32 evergreen_get_number_of_dram_channels(struct radeon_device *rdev);
  extern void evergreen_print_gpu_status_regs(struct radeon_device *rdev);
  extern bool evergreen_is_display_hung(struct radeon_device *rdev);
 -extern void si_dma_vm_set_page(struct radeon_device *rdev,
 -                             struct radeon_ib *ib,
 -                             uint64_t pe,
 -                             uint64_t addr, unsigned count,
 -                             uint32_t incr, uint32_t flags);
  static void si_enable_gui_idle_interrupt(struct radeon_device *rdev,
                                         bool enable);
+ static void si_fini_pg(struct radeon_device *rdev);
+ static void si_fini_cg(struct radeon_device *rdev);
+ static void si_rlc_stop(struct radeon_device *rdev);
  
  static const u32 verde_rlc_save_restore_register_list[] =
  {