Merge branch 'drm-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied...
Linus Torvalds [Mon, 21 Sep 2009 15:10:09 +0000 (08:10 -0700)]
* 'drm-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6: (133 commits)
  drm/vgaarb: add VGA arbitration support to the drm and kms.
  drm/radeon: some r420s have a CP race with the DMA engine.
  drm/radeon/r600/kms: rv670 is not DCE3
  drm/radeon/kms: r420 idle after programming GA_ENHANCE
  drm/radeon/kms: more fixes to rv770 suspend/resume path.
  drm/radeon/kms: more alignment for rv770.c with r600.c
  drm/radeon/kms: rv770 blit init called too late.
  drm/radeon/kms: move around new init path code to avoid posting at init
  drm/radeon/r600: fix some issues with suspend/resume.
  drm/radeon/kms: disable VGA rendering engine before taking over VRAM
  drm/radeon/kms: Move radeon_get_clock_info() call out of radeon_clocks_init().
  drm/radeon/kms: add initial connector properties
  drm/radeon/kms: Use surfaces for scanout / cursor byte swapping on big endian.
  drm/radeon/kms: don't fail if we fail to init GPU acceleration
  drm/r600/kms: fixup number of loops per blit calculation.
  drm/radeon/kms: reprogram format in set base.
  drm/radeon: avivo chips have no separate int bit for display
  drm/radeon/r600: don't do interrupts
  drm: fix _DRM_GEM addmap error message
  drm: update crtc x/y when only fb changes
  ...

Fixed up trivial conflicts in firmware/Makefile due to network driver
(cxgb3) and drm (mga/r128/radeon) firmware being listed next to each
other.

1  2 
drivers/gpu/drm/drm_sysfs.c
drivers/gpu/drm/i915/i915_gem.c
drivers/gpu/drm/i915/intel_drv.h
drivers/gpu/drm/i915/intel_tv.c
firmware/Makefile
firmware/WHENCE

@@@ -16,6 -16,7 +16,7 @@@
  #include <linux/kdev_t.h>
  #include <linux/err.h>
  
+ #include "drm_sysfs.h"
  #include "drm_core.h"
  #include "drmP.h"
  
@@@ -76,7 -77,7 +77,7 @@@ static ssize_t version_show(struct clas
                       CORE_MINOR, CORE_PATCHLEVEL, CORE_DATE);
  }
  
 -static char *drm_nodename(struct device *dev)
 +static char *drm_devnode(struct device *dev, mode_t *mode)
  {
        return kasprintf(GFP_KERNEL, "dri/%s", dev_name(dev));
  }
@@@ -112,7 -113,7 +113,7 @@@ struct class *drm_sysfs_create(struct m
        if (err)
                goto err_out_class;
  
 -      class->nodename = drm_nodename;
 +      class->devnode = drm_devnode;
  
        return class;
  
@@@ -253,6 -254,7 +254,7 @@@ static ssize_t subconnector_show(struc
                case DRM_MODE_CONNECTOR_Composite:
                case DRM_MODE_CONNECTOR_SVIDEO:
                case DRM_MODE_CONNECTOR_Component:
+               case DRM_MODE_CONNECTOR_TV:
                        prop = dev->mode_config.tv_subconnector_property;
                        is_tv = 1;
                        break;
@@@ -293,6 -295,7 +295,7 @@@ static ssize_t select_subconnector_show
                case DRM_MODE_CONNECTOR_Composite:
                case DRM_MODE_CONNECTOR_SVIDEO:
                case DRM_MODE_CONNECTOR_Component:
+               case DRM_MODE_CONNECTOR_TV:
                        prop = dev->mode_config.tv_select_subconnector_property;
                        is_tv = 1;
                        break;
@@@ -391,6 -394,7 +394,7 @@@ int drm_sysfs_connector_add(struct drm_
                case DRM_MODE_CONNECTOR_Composite:
                case DRM_MODE_CONNECTOR_SVIDEO:
                case DRM_MODE_CONNECTOR_Component:
+               case DRM_MODE_CONNECTOR_TV:
                        for (i = 0; i < ARRAY_SIZE(connector_attrs_opt1); i++) {
                                ret = device_create_file(&connector->kdev, &connector_attrs_opt1[i]);
                                if (ret)
@@@ -519,3 -523,27 +523,27 @@@ void drm_sysfs_device_remove(struct drm
  {
        device_unregister(&minor->kdev);
  }
+ /**
+  * drm_class_device_register - Register a struct device in the drm class.
+  *
+  * @dev: pointer to struct device to register.
+  *
+  * @dev should have all relevant members pre-filled with the exception
+  * of the class member. In particular, the device_type member must
+  * be set.
+  */
+ int drm_class_device_register(struct device *dev)
+ {
+       dev->class = drm_class;
+       return device_register(dev);
+ }
+ EXPORT_SYMBOL_GPL(drm_class_device_register);
+ void drm_class_device_unregister(struct device *dev)
+ {
+       return device_unregister(dev);
+ }
+ EXPORT_SYMBOL_GPL(drm_class_device_unregister);
@@@ -29,6 -29,7 +29,7 @@@
  #include "drm.h"
  #include "i915_drm.h"
  #include "i915_drv.h"
+ #include "intel_drv.h"
  #include <linux/swap.h>
  #include <linux/pci.h>
  
@@@ -111,7 -112,8 +112,8 @@@ i915_gem_create_ioctl(struct drm_devic
  {
        struct drm_i915_gem_create *args = data;
        struct drm_gem_object *obj;
-       int handle, ret;
+       int ret;
+       u32 handle;
  
        args->size = roundup(args->size, PAGE_SIZE);
  
@@@ -981,6 -983,7 +983,7 @@@ i915_gem_set_domain_ioctl(struct drm_de
        struct drm_i915_private *dev_priv = dev->dev_private;
        struct drm_i915_gem_set_domain *args = data;
        struct drm_gem_object *obj;
+       struct drm_i915_gem_object *obj_priv;
        uint32_t read_domains = args->read_domains;
        uint32_t write_domain = args->write_domain;
        int ret;
        obj = drm_gem_object_lookup(dev, file_priv, args->handle);
        if (obj == NULL)
                return -EBADF;
+       obj_priv = obj->driver_private;
  
        mutex_lock(&dev->struct_mutex);
+       intel_mark_busy(dev, obj);
  #if WATCH_BUF
        DRM_INFO("set_domain_ioctl %p(%zd), %08x %08x\n",
                 obj, obj->size, read_domains, write_domain);
  #endif
        if (read_domains & I915_GEM_DOMAIN_GTT) {
-               struct drm_i915_gem_object *obj_priv = obj->driver_private;
                ret = i915_gem_object_set_to_gtt_domain(obj, write_domain != 0);
  
                /* Update the LRU on the fence for the CPU access that's
@@@ -2776,6 -2781,8 +2781,8 @@@ i915_gem_object_set_to_gpu_domain(struc
        BUG_ON(obj->pending_read_domains & I915_GEM_DOMAIN_CPU);
        BUG_ON(obj->pending_write_domain == I915_GEM_DOMAIN_CPU);
  
+       intel_mark_busy(dev, obj);
  #if WATCH_BUF
        DRM_INFO("%s: object %p read %08x -> %08x write %08x -> %08x\n",
                 __func__, obj,
@@@ -4093,7 -4100,6 +4100,6 @@@ i915_gem_init_ringbuffer(struct drm_dev
  
        /* Set up the kernel mapping for the ring. */
        ring->Size = obj->size;
-       ring->tail_mask = obj->size - 1;
  
        ring->map.offset = dev->agp->base + obj_priv->gtt_offset;
        ring->map.size = obj->size;
  i915_gem_leavevt_ioctl(struct drm_device *dev, void *data,
                       struct drm_file *file_priv)
  {
        if (drm_core_check_feature(dev, DRIVER_MODESET))
                return 0;
  
 -      ret = i915_gem_idle(dev);
        drm_irq_uninstall(dev);
 -
 -      return ret;
 +      return i915_gem_idle(dev);
  }
  
  void
@@@ -74,7 -74,6 +74,7 @@@
  #define INTEL_LVDS_CLONE_BIT 14
  #define INTEL_DVO_TMDS_CLONE_BIT 15
  #define INTEL_DVO_LVDS_CLONE_BIT 16
 +#define INTEL_EDP_CLONE_BIT 17
  
  #define INTEL_DVO_CHIP_NONE 0
  #define INTEL_DVO_CHIP_LVDS 1
@@@ -117,9 -116,9 +117,9 @@@ struct intel_crtc 
        uint32_t cursor_addr;
        u8 lut_r[256], lut_g[256], lut_b[256];
        int dpms_mode;
-       struct intel_framebuffer *fbdev_fb;
-       /* a mode_set for fbdev users on this crtc */
-       struct drm_mode_set mode_set;
+       bool busy; /* is scanout buffer being updated frequently? */
+       struct timer_list idle_timer;
+       bool lowfreq_avail;
  };
  
  #define to_intel_crtc(x) container_of(x, struct intel_crtc, base)
@@@ -138,6 -137,7 +138,7 @@@ extern void intel_hdmi_init(struct drm_
  extern bool intel_sdvo_init(struct drm_device *dev, int output_device);
  extern void intel_dvo_init(struct drm_device *dev);
  extern void intel_tv_init(struct drm_device *dev);
+ extern void intel_mark_busy(struct drm_device *dev, struct drm_gem_object *obj);
  extern void intel_lvds_init(struct drm_device *dev);
  extern void intel_dp_init(struct drm_device *dev, int dp_reg);
  void
@@@ -178,4 -178,5 +179,5 @@@ extern int intel_framebuffer_create(str
                                    struct drm_mode_fb_cmd *mode_cmd,
                                    struct drm_framebuffer **fb,
                                    struct drm_gem_object *obj);
  #endif /* __INTEL_DRV_H__ */
@@@ -1437,6 -1437,35 +1437,35 @@@ intel_tv_detect_type (struct drm_crtc *
        return type;
  }
  
+ /*
+  * Here we set accurate tv format according to connector type
+  * i.e Component TV should not be assigned by NTSC or PAL
+  */
+ static void intel_tv_find_better_format(struct drm_connector *connector)
+ {
+       struct intel_output *intel_output = to_intel_output(connector);
+       struct intel_tv_priv *tv_priv = intel_output->dev_priv;
+       const struct tv_mode *tv_mode = intel_tv_mode_find(intel_output);
+       int i;
+       if ((tv_priv->type == DRM_MODE_CONNECTOR_Component) ==
+               tv_mode->component_only)
+               return;
+       for (i = 0; i < sizeof(tv_modes) / sizeof(*tv_modes); i++) {
+               tv_mode = tv_modes + i;
+               if ((tv_priv->type == DRM_MODE_CONNECTOR_Component) ==
+                       tv_mode->component_only)
+                       break;
+       }
+       tv_priv->tv_format = tv_mode->name;
+       drm_connector_property_set_value(connector,
+               connector->dev->mode_config.tv_mode_property, i);
+ }
  /**
   * Detect the TV connection.
   *
@@@ -1473,6 -1502,7 +1502,7 @@@ intel_tv_detect(struct drm_connector *c
        if (type < 0)
                return connector_status_disconnected;
  
+       intel_tv_find_better_format(connector);
        return connector_status_connected;
  }
  
@@@ -1730,7 -1760,6 +1760,7 @@@ intel_tv_init(struct drm_device *dev
        drm_mode_connector_attach_encoder(&intel_output->base, &intel_output->enc);
        tv_priv = (struct intel_tv_priv *)(intel_output + 1);
        intel_output->type = INTEL_OUTPUT_TVOUT;
 +      intel_output->crtc_mask = (1 << 0) | (1 << 1);
        intel_output->clone_mask = (1 << INTEL_TV_CLONE_BIT);
        intel_output->enc.possible_crtcs = ((1 << 0) | (1 << 1));
        intel_output->enc.possible_clones = (1 << INTEL_OUTPUT_TVOUT);
diff --combined firmware/Makefile
@@@ -32,29 -32,40 +32,45 @@@ fw-shipped-$(CONFIG_ADAPTEC_STARFIRE) +
                                         adaptec/starfire_tx.bin
  fw-shipped-$(CONFIG_ATARI_DSP56K) += dsp56k/bootstrap.bin
  fw-shipped-$(CONFIG_ATM_AMBASSADOR) += atmsar11.fw
 -fw-shipped-$(CONFIG_BNX2X) += bnx2x-e1-4.8.53.0.fw bnx2x-e1h-4.8.53.0.fw
 -fw-shipped-$(CONFIG_BNX2) += bnx2/bnx2-mips-09-4.6.17.fw \
 -                           bnx2/bnx2-rv2p-09-4.6.15.fw \
 -                           bnx2/bnx2-mips-06-4.6.16.fw \
 -                           bnx2/bnx2-rv2p-06-4.6.16.fw
 +fw-shipped-$(CONFIG_BNX2X) += bnx2x-e1-5.0.21.0.fw bnx2x-e1h-5.0.21.0.fw
 +fw-shipped-$(CONFIG_BNX2) += bnx2/bnx2-mips-09-5.0.0.j3.fw \
 +                           bnx2/bnx2-rv2p-09-5.0.0.j3.fw \
 +                           bnx2/bnx2-rv2p-09ax-5.0.0.j3.fw \
 +                           bnx2/bnx2-mips-06-5.0.0.j3.fw \
 +                           bnx2/bnx2-rv2p-06-5.0.0.j3.fw
  fw-shipped-$(CONFIG_CASSINI) += sun/cassini.bin
  fw-shipped-$(CONFIG_COMPUTONE) += intelliport2.bin
  fw-shipped-$(CONFIG_CHELSIO_T3) += cxgb3/t3b_psram-1.1.0.bin \
                                   cxgb3/t3c_psram-1.1.0.bin \
 -                                 cxgb3/t3fw-7.4.0.bin
 +                                 cxgb3/t3fw-7.4.0.bin \
 +                                 cxgb3/ael2005_opt_edc.bin \
 +                                 cxgb3/ael2005_twx_edc.bin \
 +                                 cxgb3/ael2020_twx_edc.bin
+ fw-shipped-$(CONFIG_DRM_MGA) += matrox/g200_warp.fw matrox/g400_warp.fw
+ fw-shipped-$(CONFIG_DRM_R128) += r128/r128_cce.bin
+ fw-shipped-$(CONFIG_DRM_RADEON) += radeon/R100_cp.bin radeon/R200_cp.bin \
+                                  radeon/R300_cp.bin radeon/R420_cp.bin \
+                                  radeon/RS690_cp.bin radeon/RS600_cp.bin \
+                                  radeon/R520_cp.bin \
+                                  radeon/R600_pfp.bin radeon/R600_me.bin \
+                                  radeon/RV610_pfp.bin radeon/RV610_me.bin \
+                                  radeon/RV630_pfp.bin radeon/RV630_me.bin \
+                                  radeon/RV620_pfp.bin radeon/RV620_me.bin \
+                                  radeon/RV635_pfp.bin radeon/RV635_me.bin \
+                                  radeon/RV670_pfp.bin radeon/RV670_me.bin \
+                                  radeon/RS780_pfp.bin radeon/RS780_me.bin \
+                                  radeon/RV770_pfp.bin radeon/RV770_me.bin \
+                                  radeon/RV730_pfp.bin radeon/RV730_me.bin \
+                                  radeon/RV710_pfp.bin radeon/RV710_me.bin
  fw-shipped-$(CONFIG_DVB_AV7110) += av7110/bootcode.bin
  fw-shipped-$(CONFIG_DVB_TTUSB_BUDGET) += ttusb-budget/dspbootcode.bin
  fw-shipped-$(CONFIG_E100) += e100/d101m_ucode.bin e100/d101s_ucode.bin \
                             e100/d102e_ucode.bin
  fw-shipped-$(CONFIG_MYRI_SBUS) += myricom/lanai.bin
 -fw-shipped-$(CONFIG_PCMCIA_PCNET) += cis/LA-PCM.cis
 +fw-shipped-$(CONFIG_PCMCIA_PCNET) += cis/LA-PCM.cis cis/PCMLM28.cis
  fw-shipped-$(CONFIG_PCMCIA_3C589) += cis/3CXEM556.cis
  fw-shipped-$(CONFIG_PCMCIA_3C574) += cis/3CCFEM556.cis
 +fw-shipped-$(CONFIG_SERIAL_8250_CS) += cis/MT5634ZLX.cis cis/RS-COM-2P.cis
  fw-shipped-$(CONFIG_PCMCIA_SMC91C92) += ositech/Xilinx7OD.bin
  fw-shipped-$(CONFIG_SCSI_ADVANSYS) += advansys/mcode.bin advansys/38C1600.bin \
                                      advansys/3550.bin advansys/38C0800.bin
diff --combined firmware/WHENCE
@@@ -418,23 -418,6 +418,23 @@@ License: GPLv2 or OpenIB.org BSD licens
  
  --------------------------------------------------------------------------
  
 +Driver: cxgb3 - Chelsio Terminator 3 1G/10G Ethernet adapter
 +
 +File: cxgb3/ael2005_opt_edc.bin.ihex
 +File: cxgb3/ael2005_twx_edc.bin.ihex
 +File: cxgb3/ael2020_twx_edc.bin.ihex
 +
 +Licence:
 + *    Copyright (c) 2007-2009 NetLogic Microsystems, Inc.
 + *
 + *    Permission is hereby granted for the distribution of this firmware
 + *    data in hexadecimal or equivalent format, provided this copyright
 + *    notice is accompanying it.
 +
 +Found in hex form in kernel source.
 +
 +--------------------------------------------------------------------------
 +
  Driver: e100 -- Intel PRO/100 Ethernet NIC
  
  File: e100/d101m_ucode.bin
@@@ -596,7 -579,6 +596,7 @@@ Found in hex form in kernel source
  Driver: PCMCIA_PCNET - NE2000 compatible PCMCIA adapter
  
  File: cis/LA-PCM.cis
 +      cis/PCMLM28.cis
  
  Licence: GPL
  
@@@ -624,17 -606,6 +624,17 @@@ Originally developed by the pcmcia-cs p
  
  --------------------------------------------------------------------------
  
 +Driver: SERIAL_8250_CS - Serial PCMCIA adapter
 +
 +File: cis/MT5634ZLX.cis
 +      cis/RS-COM-2P.cis
 +
 +Licence: GPL
 +
 +Originally developed by the pcmcia-cs project
 +
 +--------------------------------------------------------------------------
 +
  Driver: PCMCIA_SMC91C92 - SMC 91Cxx PCMCIA
  
  File: ositech/Xilinx7OD.bin
@@@ -727,3 -698,124 +727,124 @@@ Found in hex form in kernel source, wit
     Copyright (c) 1998-2002 by Paul Davis <pbd@op.net>
  
  --------------------------------------------------------------------------
+ Driver: mga - Matrox G200/G400/G550
+ File: matrox/g200_warp.fw
+ File: matrox/g400_warp.fw
+ Licence:
+ Copyright 1999 Matrox Graphics Inc.
+ All Rights Reserved.
+ Permission is hereby granted, free of charge, to any person obtaining a
+ copy of this software and associated documentation files (the "Software"),
+ to deal in the Software without restriction, including without limitation
+ the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ and/or sell copies of the Software, and to permit persons to whom the
+ Software is furnished to do so, subject to the following conditions:
+ The above copyright notice and this permission notice shall be included
+ in all copies or substantial portions of the Software.
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ MATROX GRAPHICS INC., OR ANY OTHER CONTRIBUTORS BE LIABLE FOR ANY CLAIM,
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+ OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
+ OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ Found in hex form in kernel source.
+ --------------------------------------------------------------------------
+ Driver: r128 - ATI Rage 128
+ File: r128/r128_cce.bin
+ Licence:
+ Copyright 2000 Advanced Micro Devices, Inc.
+  * Permission is hereby granted, free of charge, to any person obtaining a
+  * copy of this software and associated documentation files (the "Software"),
+  * to deal in the Software without restriction, including without limitation
+  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+  * and/or sell copies of the Software, and to permit persons to whom the
+  * Software is furnished to do so, subject to the following conditions:
+  *
+  * The above copyright notice and this permission notice (including the next
+  * paragraph) shall be included in all copies or substantial portions of the
+  * Software.
+  *
+  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+  * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+  * DEALINGS IN THE SOFTWARE.
+ Found in decimal form in kernel source.
+ --------------------------------------------------------------------------
+ Driver: radeon - ATI Radeon
+ File: radeon/R100_cp.bin
+ File: radeon/R200_cp.bin
+ File: radeon/R300_cp.bin
+ File: radeon/R420_cp.bin
+ File: radeon/RS600_cp.bin
+ File: radeon/RS690_cp.bin
+ File: radeon/R520_cp.bin
+ File: radeon/R600_pfp.bin
+ File: radeon/R600_me.bin
+ File: radeon/RV610_pfp.bin
+ File: radeon/RV610_me.bin
+ File: radeon/RV630_pfp.bin
+ File: radeon/RV630_me.bin
+ File: radeon/RV620_pfp.bin
+ File: radeon/RV620_me.bin
+ File: radeon/RV635_pfp.bin
+ File: radeon/RV635_me.bin
+ File: radeon/RV670_pfp.bin
+ File: radeon/RV670_me.bin
+ File: radeon/RS780_pfp.bin
+ File: radeon/RS780_me.bin
+ File: radeon/RV770_pfp.bin
+ File: radeon/RV770_me.bin
+ File: radeon/RV730_pfp.bin
+ File: radeon/RV730_me.bin
+ File: radeon/RV710_pfp.bin
+ File: radeon/RV710_me.bin
+ Licence:
+  * Copyright 2007-2009 Advanced Micro Devices, Inc.
+  * All Rights Reserved.
+  *
+  * Permission is hereby granted, free of charge, to any person obtaining a
+  * copy of this software and associated documentation files (the "Software"),
+  * to deal in the Software without restriction, including without limitation
+  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+  * and/or sell copies of the Software, and to permit persons to whom the
+  * Software is furnished to do so, subject to the following conditions:
+  *
+  * The above copyright notice and this permission notice (including the next
+  * paragraph) shall be included in all copies or substantial portions of the
+  * Software.
+  *
+  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+  * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
+  * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+  * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ Found in hex form in kernel source.
+ --------------------------------------------------------------------------