Merge branch 'master' into modesetting-101
authorThomas Hellstrom <thomas-at-tungstengraphics-dot-com>
Mon, 5 Nov 2007 12:46:06 +0000 (13:46 +0100)
committerThomas Hellstrom <thomas-at-tungstengraphics-dot-com>
Mon, 5 Nov 2007 12:46:06 +0000 (13:46 +0100)
Conflicts:

linux-core/drm_bufs.c
shared-core/i915_dma.c
shared-core/i915_drv.h
shared-core/i915_irq.c

24 files changed:
1  2 
linux-core/Makefile.kernel
linux-core/ati_pcigart.c
linux-core/drmP.h
linux-core/drm_bo.c
linux-core/drm_bo_move.c
linux-core/drm_bufs.c
linux-core/drm_compat.h
linux-core/drm_drv.c
linux-core/drm_fops.c
linux-core/drm_objects.h
linux-core/drm_stub.c
linux-core/i915_buffer.c
linux-core/i915_drv.c
linux-core/i915_fence.c
linux-core/radeon_drv.c
shared-core/drm.h
shared-core/i915_dma.c
shared-core/i915_drm.h
shared-core/i915_drv.h
shared-core/i915_irq.c
shared-core/i915_mem.c
shared-core/radeon_cp.c
shared-core/radeon_drm.h
shared-core/radeon_drv.h

@@@ -20,12 -19,10 +20,12 @@@ r128-objs   := r128_drv.o r128_cce.o r1
  mga-objs    := mga_drv.o mga_dma.o mga_state.o mga_warp.o mga_irq.o
  i810-objs   := i810_drv.o i810_dma.o
  i915-objs   := i915_drv.o i915_dma.o i915_irq.o i915_mem.o i915_fence.o \
 -              i915_buffer.o i915_compat.o
 +              i915_buffer.o intel_display.o intel_crt.o intel_lvds.o \
 +              intel_sdvo.o intel_modes.o intel_i2c.o i915_init.o intel_fb.o \
 +              i915_compat.o
  nouveau-objs := nouveau_drv.o nouveau_state.o nouveau_fifo.o nouveau_mem.o \
                nouveau_object.o nouveau_irq.o nouveau_notifier.o nouveau_swmthd.o \
-               nouveau_sgdma.o nouveau_dma.o nouveau_buffer.o \
+               nouveau_sgdma.o nouveau_dma.o nouveau_buffer.o nouveau_fence.o \
                nv04_timer.o \
                nv04_mc.o nv40_mc.o nv50_mc.o \
                nv04_fb.o nv10_fb.o nv40_fb.o \
@@@ -266,146 -238,3 +266,146 @@@ int drm_ati_pcigart_init(struct drm_dev
        return ret;
  }
  EXPORT_SYMBOL(drm_ati_pcigart_init);
- static int ati_pcigart_needs_unbind_cache_adjust(drm_ttm_backend_t *backend)
 +
- static int ati_pcigart_populate(drm_ttm_backend_t *backend,
++static int ati_pcigart_needs_unbind_cache_adjust(struct drm_ttm_backend *backend)
 +{
 +      return ((backend->flags & DRM_BE_FLAG_BOUND_CACHED) ? 0 : 1);
 +}
 +
- static int ati_pcigart_unbind_ttm(drm_ttm_backend_t *backend)
++static int ati_pcigart_populate(struct drm_ttm_backend *backend,
 +                              unsigned long num_pages,
 +                              struct page **pages)
 +{
 +      ati_pcigart_ttm_backend_t *atipci_be =
 +              container_of(backend, ati_pcigart_ttm_backend_t, backend);
 +
 +      DRM_ERROR("%ld\n", num_pages);
 +      atipci_be->pages = pages;
 +      atipci_be->num_pages = num_pages;
 +      atipci_be->populated = 1;
 +      return 0;
 +}
 +
 +static int ati_pcigart_bind_ttm(struct drm_ttm_backend *backend,
 +                              struct drm_bo_mem_reg *bo_mem)
 +{
 +      ati_pcigart_ttm_backend_t *atipci_be =
 +              container_of(backend, ati_pcigart_ttm_backend_t, backend);
 +        off_t j;
 +      int i;
 +      struct ati_pcigart_info *info = atipci_be->gart_info;
 +      u32 *pci_gart;
 +      u32 page_base;
 +      unsigned long offset = bo_mem->mm_node->start;
 +      pci_gart = info->addr;
 +
 +      DRM_ERROR("Offset is %08lX\n", bo_mem->mm_node->start);
 +        j = offset;
 +        while (j < (offset + atipci_be->num_pages)) {
 +              if (get_page_base_from_table(info, pci_gart+j))
 +                      return -EBUSY;
 +                j++;
 +        }
 +
 +        for (i = 0, j = offset; i < atipci_be->num_pages; i++, j++) {
 +              struct page *cur_page = atipci_be->pages[i];
 +                /* write value */
 +              page_base = page_to_phys(cur_page);
 +              insert_page_into_table(info, page_base, pci_gart + j);
 +        }
 +
 +#if defined(__i386__) || defined(__x86_64__)
 +      wbinvd();
 +#else
 +      mb();
 +#endif
 +
 +      atipci_be->gart_flush_fn(atipci_be->dev);
 +
 +      atipci_be->bound = 1;
 +      atipci_be->offset = offset;
 +        /* need to traverse table and add entries */
 +      DRM_DEBUG("\n");
 +      return 0;
 +}
 +
- static void ati_pcigart_clear_ttm(drm_ttm_backend_t *backend)
++static int ati_pcigart_unbind_ttm(struct drm_ttm_backend *backend)
 +{
 +      ati_pcigart_ttm_backend_t *atipci_be =
 +              container_of(backend, ati_pcigart_ttm_backend_t, backend);
 +      struct ati_pcigart_info *info = atipci_be->gart_info;   
 +      unsigned long offset = atipci_be->offset;
 +      int i;
 +      off_t j;
 +      u32 *pci_gart = info->addr;
 +
 +      DRM_DEBUG("\n");
 +
 +      if (atipci_be->bound != 1)
 +              return -EINVAL;
 +
 +      for (i = 0, j = offset; i < atipci_be->num_pages; i++, j++) {
 +              *(pci_gart + j) = 0;
 +      }
 +      atipci_be->gart_flush_fn(atipci_be->dev);
 +      atipci_be->bound = 0;
 +      atipci_be->offset = 0;
 +      return 0;
 +}
 +
- static void ati_pcigart_destroy_ttm(drm_ttm_backend_t *backend)
++static void ati_pcigart_clear_ttm(struct drm_ttm_backend *backend)
 +{
 +      ati_pcigart_ttm_backend_t *atipci_be =
 +              container_of(backend, ati_pcigart_ttm_backend_t, backend);
 +
 +      DRM_DEBUG("\n");        
 +      if (atipci_be->pages) {
 +              backend->func->unbind(backend);
 +              atipci_be->pages = NULL;
 +
 +      }
 +      atipci_be->num_pages = 0;
 +}
 +
++static void ati_pcigart_destroy_ttm(struct drm_ttm_backend *backend)
 +{
 +      ati_pcigart_ttm_backend_t *atipci_be;
 +      if (backend) {
 +              DRM_DEBUG("\n");
 +              atipci_be = container_of(backend, ati_pcigart_ttm_backend_t, backend);
 +              if (atipci_be) {
 +                      if (atipci_be->pages) {
 +                              backend->func->clear(backend);
 +                      }
 +                      drm_ctl_free(atipci_be, sizeof(*atipci_be), DRM_MEM_TTM);
 +              }
 +      }
 +}
 +
 +static struct drm_ttm_backend_func ati_pcigart_ttm_backend = 
 +{
 +      .needs_ub_cache_adjust = ati_pcigart_needs_unbind_cache_adjust,
 +      .populate = ati_pcigart_populate,
 +      .clear = ati_pcigart_clear_ttm,
 +      .bind = ati_pcigart_bind_ttm,
 +      .unbind = ati_pcigart_unbind_ttm,
 +      .destroy =  ati_pcigart_destroy_ttm,
 +};
 +
 +struct drm_ttm_backend *ati_pcigart_init_ttm(struct drm_device *dev, struct ati_pcigart_info *info, void (*gart_flush_fn)(struct drm_device *dev))
 +{
 +      ati_pcigart_ttm_backend_t *atipci_be;
 +
 +      atipci_be = drm_ctl_calloc(1, sizeof (*atipci_be), DRM_MEM_TTM);
 +      if (!atipci_be)
 +              return NULL;
 +      
 +      atipci_be->populated = 0;
 +      atipci_be->backend.func = &ati_pcigart_ttm_backend;
 +      atipci_be->gart_info = info;
 +      atipci_be->gart_flush_fn = gart_flush_fn;
 +      atipci_be->dev = dev;
 +
 +      return &atipci_be->backend;
 +}
 +EXPORT_SYMBOL(ati_pcigart_init_ttm);
Simple merge
Simple merge
@@@ -145,11 -144,9 +144,10 @@@ void drm_mem_reg_iounmap(struct drm_dev
        bm = &dev->bm;
        man = &bm->man[mem->mem_type];
  
-       if (virtual && (man->flags & _DRM_FLAG_NEEDS_IOREMAP)) {
+       if (virtual && (man->flags & _DRM_FLAG_NEEDS_IOREMAP))
                iounmap(virtual);
-       }
  }
 +EXPORT_SYMBOL(drm_mem_reg_iounmap);
  
  static int drm_copy_io_page(void *dst, void *src, unsigned long page)
  {
Simple merge
Simple merge
@@@ -115,27 -115,21 +115,27 @@@ static struct drm_ioctl_desc drm_ioctls
  
        DRM_IOCTL_DEF(DRM_IOCTL_SG_ALLOC, drm_sg_alloc_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
        DRM_IOCTL_DEF(DRM_IOCTL_SG_FREE, drm_sg_free, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
 -
        DRM_IOCTL_DEF(DRM_IOCTL_WAIT_VBLANK, drm_wait_vblank, 0),
 -
 -      //      DRM_IOCTL_DEF(DRM_IOCTL_BUFOBJ, drm_bo_ioctl, DRM_AUTH),
 -
        DRM_IOCTL_DEF(DRM_IOCTL_UPDATE_DRAW, drm_update_drawable_info, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
 -
 +      DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETRESOURCES, drm_mode_getresources, DRM_MASTER|DRM_ROOT_ONLY),
 +      DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETCRTC, drm_mode_getcrtc, DRM_MASTER|DRM_ROOT_ONLY),
 +      DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETOUTPUT, drm_mode_getoutput, DRM_MASTER|DRM_ROOT_ONLY),
 +      DRM_IOCTL_DEF(DRM_IOCTL_MODE_SETCRTC, drm_mode_setcrtc, DRM_MASTER|DRM_ROOT_ONLY),
 +      DRM_IOCTL_DEF(DRM_IOCTL_MODE_ADDFB, drm_mode_addfb, DRM_MASTER|DRM_ROOT_ONLY),
 +      DRM_IOCTL_DEF(DRM_IOCTL_MODE_RMFB, drm_mode_rmfb, DRM_MASTER|DRM_ROOT_ONLY),
 +      DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETFB, drm_mode_getfb, DRM_MASTER|DRM_ROOT_ONLY),
 +      DRM_IOCTL_DEF(DRM_IOCTL_MODE_ADDMODE, drm_mode_addmode, DRM_MASTER|DRM_ROOT_ONLY),
 +      DRM_IOCTL_DEF(DRM_IOCTL_MODE_RMMODE, drm_mode_rmmode, DRM_MASTER|DRM_ROOT_ONLY),
 +      DRM_IOCTL_DEF(DRM_IOCTL_MODE_ATTACHMODE, drm_mode_attachmode, DRM_MASTER|DRM_ROOT_ONLY),
 +      DRM_IOCTL_DEF(DRM_IOCTL_MODE_DETACHMODE, drm_mode_detachmode, DRM_MASTER|DRM_ROOT_ONLY),
  
-       DRM_IOCTL_DEF(DRM_IOCTL_MM_INIT, drm_mm_init_ioctl, 
+       DRM_IOCTL_DEF(DRM_IOCTL_MM_INIT, drm_mm_init_ioctl,
                      DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
-       DRM_IOCTL_DEF(DRM_IOCTL_MM_TAKEDOWN, drm_mm_takedown_ioctl, 
+       DRM_IOCTL_DEF(DRM_IOCTL_MM_TAKEDOWN, drm_mm_takedown_ioctl,
                      DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
-       DRM_IOCTL_DEF(DRM_IOCTL_MM_LOCK, drm_mm_lock_ioctl, 
+       DRM_IOCTL_DEF(DRM_IOCTL_MM_LOCK, drm_mm_lock_ioctl,
                      DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
-       DRM_IOCTL_DEF(DRM_IOCTL_MM_UNLOCK, drm_mm_unlock_ioctl, 
+       DRM_IOCTL_DEF(DRM_IOCTL_MM_UNLOCK, drm_mm_unlock_ioctl,
                      DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
  
        DRM_IOCTL_DEF(DRM_IOCTL_FENCE_CREATE, drm_fence_create_ioctl, DRM_AUTH),
Simple merge
@@@ -626,12 -630,8 +629,12 @@@ extern void drm_regs_init(struct drm_re
                                              const void *),
                          void (*reg_destroy)(struct drm_reg *));
  
 +extern int drm_mem_reg_ioremap(struct drm_device *dev, struct drm_bo_mem_reg * mem,
 +                             void **virtual);
 +extern void drm_mem_reg_iounmap(struct drm_device *dev, struct drm_bo_mem_reg * mem,
 +                              void *virtual);
  /*
-  * drm_bo_lock.c 
+  * drm_bo_lock.c
   * Simple replacement for the hardware lock on buffer manager init and clean.
   */
  
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -147,38 -143,33 +147,38 @@@ struct drm_i915_private 
  #endif
  
        DRM_SPINTYPE swaps_lock;
 -      drm_i915_vbl_swap_t vbl_swaps;
 +      struct drm_i915_vbl_swap vbl_swaps;
        unsigned int swaps_pending;
  
 -      /* Register state */
 +      /* LVDS info */
 +      int backlight_duty_cycle;  /* restore backlight to this value */
 +      bool panel_wants_dither;
 +      struct drm_display_mode *panel_fixed_mode;
 +
 +      /* Register state */
        u8 saveLBB;
-       u32 saveDSPACNTR;
-       u32 saveDSPBCNTR;
-       u32 savePIPEACONF;
-       u32 savePIPEBCONF;
-       u32 savePIPEASRC;
-       u32 savePIPEBSRC;
-       u32 saveFPA0;
-       u32 saveFPA1;
-       u32 saveDPLL_A;
-       u32 saveDPLL_A_MD;
-       u32 saveHTOTAL_A;
-       u32 saveHBLANK_A;
-       u32 saveHSYNC_A;
-       u32 saveVTOTAL_A;
-       u32 saveVBLANK_A;
-       u32 saveVSYNC_A;
+       u32 saveDSPACNTR;
+       u32 saveDSPBCNTR;
+       u32 savePIPEACONF;
+       u32 savePIPEBCONF;
+       u32 savePIPEASRC;
+       u32 savePIPEBSRC;
+       u32 saveFPA0;
+       u32 saveFPA1;
+       u32 saveDPLL_A;
+       u32 saveDPLL_A_MD;
+       u32 saveHTOTAL_A;
+       u32 saveHBLANK_A;
+       u32 saveHSYNC_A;
+       u32 saveVTOTAL_A;
+       u32 saveVBLANK_A;
+       u32 saveVSYNC_A;
        u32 saveBCLRPAT_A;
-       u32 saveDSPASTRIDE;
-       u32 saveDSPASIZE;
-       u32 saveDSPAPOS;
-       u32 saveDSPABASE;
-       u32 saveDSPASURF;
+       u32 saveDSPASTRIDE;
+       u32 saveDSPASIZE;
+       u32 saveDSPAPOS;
+       u32 saveDSPABASE;
+       u32 saveDSPASURF;
        u32 saveDSPATILEOFF;
        u32 savePFIT_PGM_RATIOS;
        u32 saveBLC_PWM_CTL;
@@@ -331,15 -318,9 +331,15 @@@ extern void intel_init_chipset_flush_co
  extern void intel_fini_chipset_flush_compat(struct drm_device *dev);
  #endif
  
 +
 +/* modesetting */
 +extern void intel_modeset_init(struct drm_device *dev);
 +extern void intel_modeset_cleanup(struct drm_device *dev);
 +
 +
  #define I915_READ(reg)          DRM_READ32(dev_priv->mmio_map, (reg))
  #define I915_WRITE(reg,val)     DRM_WRITE32(dev_priv->mmio_map, (reg), (val))
- #define I915_READ16(reg)      DRM_READ16(dev_priv->mmio_map, (reg))
+ #define I915_READ16(reg)      DRM_READ16(dev_priv->mmio_map, (reg))
  #define I915_WRITE16(reg,val) DRM_WRITE16(dev_priv->mmio_map, (reg), (val))
  
  #define I915_VERBOSE 0
@@@ -740,18 -637,12 +740,18 @@@ extern int i915_wait_ring(struct drm_de
  
  #define SRC_COPY_BLT_CMD                ((2<<29)|(0x43<<22)|4)
  #define XY_SRC_COPY_BLT_CMD           ((2<<29)|(0x53<<22)|6)
 +#define XY_MONO_SRC_COPY_IMM_BLT      ((2<<29)|(0x71<<22)|5)
  #define XY_SRC_COPY_BLT_WRITE_ALPHA   (1<<21)
  #define XY_SRC_COPY_BLT_WRITE_RGB     (1<<20)
 +#define   BLT_DEPTH_8                 (0<<24)
 +#define   BLT_DEPTH_16_565            (1<<24)
 +#define   BLT_DEPTH_16_1555           (2<<24)
 +#define   BLT_DEPTH_32                        (3<<24)
 +#define   BLT_ROP_GXCOPY              (0xcc<<16)
  
- #define MI_BATCH_BUFFER       ((0x30<<23)|1)
- #define MI_BATCH_BUFFER_START         (0x31<<23)
- #define MI_BATCH_BUFFER_END   (0xA<<23)
+ #define MI_BATCH_BUFFER               ((0x30<<23)|1)
+ #define MI_BATCH_BUFFER_START (0x31<<23)
+ #define MI_BATCH_BUFFER_END   (0xA<<23)
  #define MI_BATCH_NON_SECURE   (1)
  
  #define MI_BATCH_NON_SECURE_I965 (1<<8)
@@@ -523,11 -510,11 +523,12 @@@ int i915_irq_wait(struct drm_device *de
        return i915_wait_irq(dev, irqwait->irq_seq);
  }
  
 -static void i915_enable_interrupt (struct drm_device *dev)
 +void i915_enable_interrupt (struct drm_device *dev)
  {
 -      drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
 +      struct drm_i915_private *dev_priv = (struct drm_i915_private *) dev->dev_private;
 +      
 +      dev_priv->irq_enable_reg = USER_INT_FLAG; 
 -      dev_priv->irq_enable_reg = USER_INT_FLAG;
        if (dev_priv->vblank_pipe & DRM_I915_VBLANK_PIPE_A)
                dev_priv->irq_enable_reg |= VSYNC_PIPEA_FLAG;
        if (dev_priv->vblank_pipe & DRM_I915_VBLANK_PIPE_B)
Simple merge
Simple merge
Simple merge
@@@ -404,30 -396,6 +404,30 @@@ extern int r300_do_cp_cmdbuf(struct drm
                             struct drm_file *file_priv,
                             drm_radeon_kcmd_buffer_t* cmdbuf);
  
- extern drm_ttm_backend_t *radeon_create_ttm_backend_entry(struct drm_device *dev);
 +
 +#ifdef RADEON_HAVE_FENCE
 +/* i915_fence.c */
 +
 +
 +extern void radeon_fence_handler(struct drm_device *dev);
 +extern int radeon_fence_emit_sequence(struct drm_device *dev, uint32_t class,
 +                                    uint32_t flags, uint32_t *sequence, 
 +                                  uint32_t *native_type);
 +extern void radeon_poke_flush(struct drm_device *dev, uint32_t class);
 +extern int radeon_fence_has_irq(struct drm_device *dev, uint32_t class, uint32_t flags);
 +#endif
 +
 +#ifdef RADEON_HAVE_BUFFER
 +/* radeon_buffer.c */
++extern struct drm_ttm_backend *radeon_create_ttm_backend_entry(struct drm_device *dev);
 +extern int radeon_fence_types(struct drm_buffer_object *bo, uint32_t *class, uint32_t *type);
 +extern int radeon_invalidate_caches(struct drm_device *dev, uint64_t buffer_flags);
 +extern uint32_t radeon_evict_mask(struct drm_buffer_object *bo);
 +extern int radeon_init_mem_type(struct drm_device * dev, uint32_t type,
 +                              struct drm_mem_type_manager * man);
 +extern int radeon_move(struct drm_buffer_object * bo,
 +                     int evict, int no_wait, struct drm_bo_mem_reg * new_mem);
 +#endif
  /* Flags for stats.boxes
   */
  #define RADEON_BOX_DMA_IDLE      0x1