Merge tag 'v3.5-rc7' into drm-next
authorDave Airlie <airlied@redhat.com>
Fri, 20 Jul 2012 04:53:28 +0000 (00:53 -0400)
committerDave Airlie <airlied@redhat.com>
Fri, 20 Jul 2012 04:53:28 +0000 (00:53 -0400)
Merge Linus tree into drm to fixup conflicts in radeon code for further
testing before upstream merge.

Signed-off-by: Dave Airlie <airlied@redhat.com>
Conflicts:
drivers/gpu/drm/i915/i915_dma.c
drivers/gpu/drm/i915/intel_display.c
drivers/gpu/drm/radeon/radeon_gart.c

1  2 
drivers/gpu/drm/i915/i915_irq.c
drivers/gpu/drm/i915/i915_suspend.c
drivers/gpu/drm/i915/intel_display.c
drivers/gpu/drm/radeon/radeon_gart.c
drivers/gpu/drm/radeon/radeon_gem.c
drivers/gpu/drm/radeon/si.c

Simple merge
Simple merge
@@@ -7172,31 -6921,22 +7172,15 @@@ static void i915_disable_vga(struct drm
        POSTING_READ(vga_reg);
  }
  
- static void ivb_pch_pwm_override(struct drm_device *dev)
- {
-       struct drm_i915_private *dev_priv = dev->dev_private;
-       /*
-        * IVB has CPU eDP backlight regs too, set things up to let the
-        * PCH regs control the backlight
-        */
-       I915_WRITE(BLC_PWM_CPU_CTL2, BLM_PWM_ENABLE);
-       I915_WRITE(BLC_PWM_CPU_CTL, 0);
-       I915_WRITE(BLC_PWM_PCH_CTL1, BLM_PCH_PWM_ENABLE | BLM_PCH_OVERRIDE_ENABLE);
- }
  void intel_modeset_init_hw(struct drm_device *dev)
  {
 -      struct drm_i915_private *dev_priv = dev->dev_private;
 +      intel_prepare_ddi(dev);
  
        intel_init_clock_gating(dev);
  
 -      if (IS_IRONLAKE_M(dev)) {
 -              ironlake_enable_drps(dev);
 -              ironlake_enable_rc6(dev);
 -              intel_init_emon(dev);
 -      }
 -
 -      if ((IS_GEN6(dev) || IS_GEN7(dev)) && !IS_VALLEYVIEW(dev)) {
 -              gen6_enable_rps(dev_priv);
 -              gen6_update_ring_freq(dev_priv);
 -      }
 +      mutex_lock(&dev->struct_mutex);
 +      intel_enable_gt_powersave(dev);
 +      mutex_unlock(&dev->struct_mutex);
-       if (IS_IVYBRIDGE(dev))
-               ivb_pch_pwm_override(dev);
  }
  
  void intel_modeset_init(struct drm_device *dev)
@@@ -421,79 -282,31 +421,80 @@@ void radeon_gart_fini(struct radeon_dev
   *
   * TODO bind a default page at vm initialization for default address
   */
 +
 +/**
 + * radeon_vm_manager_init - init the vm manager
 + *
 + * @rdev: radeon_device pointer
 + *
 + * Init the vm manager (cayman+).
 + * Returns 0 for success, error for failure.
 + */
  int radeon_vm_manager_init(struct radeon_device *rdev)
  {
 +      struct radeon_vm *vm;
 +      struct radeon_bo_va *bo_va;
        int r;
  
 -      rdev->vm_manager.enabled = false;
 +      if (!rdev->vm_manager.enabled) {
 +              /* mark first vm as always in use, it's the system one */
++              /* allocate enough for 2 full VM pts */
 +              r = radeon_sa_bo_manager_init(rdev, &rdev->vm_manager.sa_manager,
-                                             rdev->vm_manager.max_pfn * 8,
++                                            rdev->vm_manager.max_pfn * 8 * 2,
 +                                            RADEON_GEM_DOMAIN_VRAM);
 +              if (r) {
 +                      dev_err(rdev->dev, "failed to allocate vm bo (%dKB)\n",
 +                              (rdev->vm_manager.max_pfn * 8) >> 10);
 +                      return r;
 +              }
  
 -      /* mark first vm as always in use, it's the system one */
 -      /* allocate enough for 2 full VM pts */
 -      r = radeon_sa_bo_manager_init(rdev, &rdev->vm_manager.sa_manager,
 -                                    rdev->vm_manager.max_pfn * 8 * 2,
 -                                    RADEON_GEM_DOMAIN_VRAM);
 -      if (r) {
 -              dev_err(rdev->dev, "failed to allocate vm bo (%dKB)\n",
 -                      (rdev->vm_manager.max_pfn * 8) >> 10);
 -              return r;
 +              r = rdev->vm_manager.funcs->init(rdev);
 +              if (r)
 +                      return r;
 +      
 +              rdev->vm_manager.enabled = true;
 +
 +              r = radeon_sa_bo_manager_start(rdev, &rdev->vm_manager.sa_manager);
 +              if (r)
 +                      return r;
        }
  
 -      r = rdev->vm_manager.funcs->init(rdev);
 -      if (r == 0)
 -              rdev->vm_manager.enabled = true;
 +      /* restore page table */
 +      list_for_each_entry(vm, &rdev->vm_manager.lru_vm, list) {
 +              if (vm->id == -1)
 +                      continue;
  
 -      return r;
 +              list_for_each_entry(bo_va, &vm->va, vm_list) {
 +                      struct ttm_mem_reg *mem = NULL;
 +                      if (bo_va->valid)
 +                              mem = &bo_va->bo->tbo.mem;
 +
 +                      bo_va->valid = false;
 +                      r = radeon_vm_bo_update_pte(rdev, vm, bo_va->bo, mem);
 +                      if (r) {
 +                              DRM_ERROR("Failed to update pte for vm %d!\n", vm->id);
 +                      }
 +              }
 +
 +              r = rdev->vm_manager.funcs->bind(rdev, vm, vm->id);
 +              if (r) {
 +                      DRM_ERROR("Failed to bind vm %d!\n", vm->id);
 +              }
 +      }
 +      return 0;
  }
  
 -/* cs mutex must be lock */
 +/* global mutex must be lock */
 +/**
 + * radeon_vm_unbind_locked - unbind a specific vm
 + *
 + * @rdev: radeon_device pointer
 + * @vm: vm to unbind
 + *
 + * Unbind the requested vm (cayman+).
 + * Wait for use of the VM to finish, then unbind the page table,
 + * and free the page table memory.
 + */
  static void radeon_vm_unbind_locked(struct radeon_device *rdev,
                                    struct radeon_vm *vm)
  {
Simple merge
Simple merge