rpms/kernel/devel drm-modesetting-i915.patch, NONE, 1.1 config-generic, 1.165, 1.166 drm-modesetting-radeon.patch, 1.23, 1.24 kernel.spec, 1.939, 1.940
Dave Airlie
airlied at fedoraproject.org
Tue Sep 9 06:16:50 UTC 2008
- Previous message (by thread): rpms/perl-Locale-SubCountry/devel .cvsignore, 1.3, 1.4 perl-Locale-SubCountry.spec, 1.5, 1.6 sources, 1.3, 1.4
- Next message (by thread): rpms/perl-Locale-SubCountry/F-9 perl-Locale-SubCountry.spec, 1.5, 1.6 sources, 1.3, 1.4
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Author: airlied
Update of /cvs/pkgs/rpms/kernel/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv6028
Modified Files:
config-generic drm-modesetting-radeon.patch kernel.spec
Added Files:
drm-modesetting-i915.patch
Log Message:
* Tue Sep 09 2008 Dave Airlie <airlied at redhat.com>
- radeon - update modesetting bits - should fix r400
- add i915 modesetting bits - don't enable these by default yet
drm-modesetting-i915.patch:
--- NEW FILE drm-modesetting-i915.patch ---
diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
index 649757f..a1ed52b 100644
--- a/drivers/gpu/drm/Kconfig
+++ b/drivers/gpu/drm/Kconfig
@@ -84,6 +84,15 @@ config DRM_I915
endchoice
+config DRM_I915_KMS
+ bool "Enable modesetting on intel by default"
+ depends on DRM_I915
+ help
+ Choose this option if you want kernel modesetting enabled by default,
+ and you have a new enough userspace to support this. Running old
+ userspaces with this enabled will cause pain.
+
+
config DRM_MGA
tristate "Matrox g200/g400"
depends on DRM
diff --git a/drivers/gpu/drm/drm_mm.c b/drivers/gpu/drm/drm_mm.c
index 217ad7d..367c590 100644
--- a/drivers/gpu/drm/drm_mm.c
+++ b/drivers/gpu/drm/drm_mm.c
@@ -296,3 +296,4 @@ void drm_mm_takedown(struct drm_mm * mm)
drm_free(entry, sizeof(*entry), DRM_MEM_MM);
}
+EXPORT_SYMBOL(drm_mm_takedown);
diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile
index 362d419..57aa9da 100644
--- a/drivers/gpu/drm/i915/Makefile
+++ b/drivers/gpu/drm/i915/Makefile
@@ -4,10 +4,15 @@
ccflags-y := -Iinclude/drm
i915-y := i915_drv.o i915_dma.o i915_irq.o i915_mem.o i915_init.o i915_opregion.o \
+ i915_suspend.o \
i915_gem.o \
i915_gem_debug.o \
i915_gem_proc.o \
- i915_gem_tiling.o
+ i915_gem_tiling.o \
+ intel_display.o intel_crt.o intel_lvds.o intel_bios.o \
+ intel_sdvo.o intel_modes.o intel_i2c.o i915_init.o intel_fb.o \
+ intel_tv.o intel_dvo.o dvo_ch7xxx.o \
+ dvo_ch7017.o dvo_ivch.o dvo_tfp410.o dvo_sil164.o
i915-$(CONFIG_COMPAT) += i915_ioc32.o
diff --git a/drivers/gpu/drm/i915/dvo.h b/drivers/gpu/drm/i915/dvo.h
new file mode 100644
index 0000000..b122ea1
--- /dev/null
+++ b/drivers/gpu/drm/i915/dvo.h
@@ -0,0 +1,159 @@
+/*
+ * Copyright © 2006 Eric Anholt
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that copyright
+ * notice and this permission notice appear in supporting documentation, and
+ * that the name of the copyright holders not be used in advertising or
+ * publicity pertaining to distribution of the software without specific,
+ * written prior permission. The copyright holders make no representations
+ * about the suitability of this software for any purpose. It is provided "as
+ * is" without express or implied warranty.
+ *
+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ */
+
+#ifndef _INTEL_DVO_H
+#define _INTEL_DVO_H
+
+#include <linux/i2c.h>
+#include "drmP.h"
+#include "drm.h"
+#include "drm_crtc.h"
+#include "intel_drv.h"
+
+struct intel_dvo_device {
+ char *name;
+ int type;
+ /* DVOA/B/C output register */
+ u32 dvo_reg;
+ /* GPIO register used for i2c bus to control this device */
+ u32 gpio;
+ int slave_addr;
+ struct intel_i2c_chan *i2c_bus;
+
+ const struct intel_dvo_dev_ops *dev_ops;
+ void *dev_priv;
+
+ struct drm_display_mode *panel_fixed_mode;
+ bool panel_wants_dither;
+};
+
+struct intel_dvo_dev_ops {
+ /*
+ * Initialize the device at startup time.
+ * Returns NULL if the device does not exist.
+ */
+ bool (*init)(struct intel_dvo_device *dvo,
+ struct intel_i2c_chan *i2cbus);
+
+ /*
+ * Called to allow the output a chance to create properties after the
+ * RandR objects have been created.
+ */
+ void (*create_resources)(struct intel_dvo_device *dvo);
+
+ /*
+ * Turn on/off output or set intermediate power levels if available.
+ *
+ * Unsupported intermediate modes drop to the lower power setting.
+ * If the mode is DPMSModeOff, the output must be disabled,
+ * as the DPLL may be disabled afterwards.
+ */
+ void (*dpms)(struct intel_dvo_device *dvo, int mode);
+
+ /*
+ * Saves the output's state for restoration on VT switch.
+ */
+ void (*save)(struct intel_dvo_device *dvo);
+
+ /*
+ * Restore's the output's state at VT switch.
+ */
+ void (*restore)(struct intel_dvo_device *dvo);
+
+ /*
+ * Callback for testing a video mode for a given output.
+ *
+ * This function should only check for cases where a mode can't
+ * be supported on the output specifically, and not represent
+ * generic CRTC limitations.
+ *
+ * \return MODE_OK if the mode is valid, or another MODE_* otherwise.
+ */
+ int (*mode_valid)(struct intel_dvo_device *dvo,
+ struct drm_display_mode *mode);
+
+ /*
+ * Callback to adjust the mode to be set in the CRTC.
+ *
+ * This allows an output to adjust the clock or even the entire set of
+ * timings, which is used for panels with fixed timings or for
+ * buses with clock limitations.
+ */
+ bool (*mode_fixup)(struct intel_dvo_device *dvo,
+ struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode);
+
+ /*
+ * Callback for preparing mode changes on an output
+ */
+ void (*prepare)(struct intel_dvo_device *dvo);
+
+ /*
+ * Callback for committing mode changes on an output
+ */
+ void (*commit)(struct intel_dvo_device *dvo);
+
+ /*
+ * Callback for setting up a video mode after fixups have been made.
+ *
+ * This is only called while the output is disabled. The dpms callback
+ * must be all that's necessary for the output, to turn the output on
+ * after this function is called.
+ */
+ void (*mode_set)(struct intel_dvo_device *dvo,
+ struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode);
+
+ /*
+ * Probe for a connected output, and return detect_status.
+ */
+ enum drm_connector_status (*detect)(struct intel_dvo_device *dvo);
+
+ /**
+ * Query the device for the modes it provides.
+ *
+ * This function may also update MonInfo, mm_width, and mm_height.
+ *
+ * \return singly-linked list of modes or NULL if no modes found.
+ */
+ struct drm_display_mode *(*get_modes)(struct intel_dvo_device *dvo);
+
+#ifdef RANDR_12_INTERFACE
+ /**
+ * Callback when an output's property has changed.
+ */
[...12227 lines suppressed...]
@@ -406,6 +408,23 @@ struct drm_i915_gem_mmap {
uint64_t addr_ptr;
};
+struct drm_i915_gem_mmap_gtt {
+ /** Handle for the object being mapped. */
+ uint32_t handle;
+ uint32_t pad;
+ /** Offset in the object to map. */
+ uint64_t offset;
+ /**
+ * Length of data to map.
+ *
+ * The value will be page-aligned.
+ */
+ uint64_t size;
+ /** Returned pointer the data was mapped at */
+ uint64_t addr_ptr; /* void *, but pointers are not 32/64 compatible */
+ uint32_t flags;
+};
+
struct drm_i915_gem_set_domain {
/** Handle for the object */
uint32_t handle;
diff --git a/mm/mmap.c b/mm/mmap.c
index 339cf5c..62f54fe 100644
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -1244,6 +1244,171 @@ unacct_error:
return error;
}
+/**
+ * mmap_io_region - map an I/O region, creating a new VMA if necessary
+ * @file: file to account mapping against
+ * @addr: user address to map
+ * @len: size of mapping
+ * @flags: mmap flags
+ * @vm_flags: VM protection bits
+ * @pgoff: pfn of backing pages
+ * @accountable: account for these pages?
+ *
+ * Normally drivers can simply override ->mmap and use remap_pfn_range
+ * themselves, but if remapping needs to be done in other functions (say ioctl)
+ * some function has to provide VMA allocation & linking services, thus
+ * this function.
+ */
+unsigned long mmap_io_region(struct file *file, unsigned long addr,
+ unsigned long len, unsigned long flags,
+ unsigned int vm_flags, unsigned long pgoff,
+ int accountable)
+{
+ struct mm_struct *mm = current->mm;
+ struct vm_area_struct *vma, *prev;
+ int correct_wcount = 0;
+ int error;
+ struct rb_node **rb_link, *rb_parent;
+ unsigned long charged = 0;
+ struct inode *inode = file ? file->f_path.dentry->d_inode : NULL;
+
+ /* Clear old maps */
+ error = -ENOMEM;
+munmap_back:
+ vma = find_vma_prepare(mm, addr, &prev, &rb_link, &rb_parent);
+ if (vma && vma->vm_start < addr + len) {
+ if (do_munmap(mm, addr, len))
+ return -ENOMEM;
+ goto munmap_back;
+ }
+
+ /* Check against address space limit. */
+ if (!may_expand_vm(mm, len >> PAGE_SHIFT))
+ return -ENOMEM;
+
+ if (flags & MAP_NORESERVE)
+ vm_flags |= VM_NORESERVE;
+
+ if (accountable && (!(flags & MAP_NORESERVE) ||
+ sysctl_overcommit_memory == OVERCOMMIT_NEVER)) {
+ if (vm_flags & VM_SHARED) {
+ /* Check memory availability in shmem_file_setup? */
+ vm_flags |= VM_ACCOUNT;
+ } else if (vm_flags & VM_WRITE) {
+ /*
+ * Private writable mapping: check memory availability
+ */
+ charged = len >> PAGE_SHIFT;
+ if (security_vm_enough_memory(charged))
+ return -ENOMEM;
+ vm_flags |= VM_ACCOUNT;
+ }
+ }
+
+ printk(KERN_ERR "%s: using vma %p\n", __FUNCTION__, vma);
+
+ /*
+ * Determine the object being mapped and call the appropriate
+ * specific mapper. the address has already been validated, but
+ * not unmapped, but the maps are removed from the list.
+ */
+ vma = kmem_cache_zalloc(vm_area_cachep, GFP_KERNEL);
+ if (!vma) {
+ error = -ENOMEM;
+ goto unacct_error;
+ }
+
+ vma->vm_mm = mm;
+ vma->vm_start = addr;
+ vma->vm_end = addr + len;
+ vma->vm_flags = vm_flags;
+ vma->vm_page_prot = vm_get_page_prot(vm_flags);
+ vma->vm_pgoff = pgoff;
+
+ error = -EINVAL;
+ if (vm_flags & (VM_GROWSDOWN|VM_GROWSUP))
+ goto free_vma;
+ if (vm_flags & VM_DENYWRITE) {
+ error = deny_write_access(file);
+ if (error)
+ goto free_vma;
+ correct_wcount = 1;
+ }
+
+ get_file(file);
+ printk(KERN_ERR "remap_pfn_range(%p, 0x%lx, 0x%lx, 0x%lx, 0x%lx)\n",
+ vma, vma->vm_start, vma->vm_pgoff, len, vma->vm_page_prot);
+ error = remap_pfn_range(vma, vma->vm_start, vma->vm_pgoff, len,
+ vma->vm_page_prot);
+ if (error)
+ goto unmap_and_free_vma;
+ if (vm_flags & VM_EXECUTABLE)
+ added_exe_file_vma(mm);
+
+ /* We set VM_ACCOUNT in a shared mapping's vm_flags, to inform
+ * shmem_zero_setup (perhaps called through /dev/zero's ->mmap)
+ * that memory reservation must be checked; but that reservation
+ * belongs to shared memory object, not to vma: so now clear it.
+ */
+ if ((vm_flags & (VM_SHARED|VM_ACCOUNT)) == (VM_SHARED|VM_ACCOUNT))
+ vma->vm_flags &= ~VM_ACCOUNT;
+
+ /* Can addr have changed??
+ *
+ * Answer: Yes, several device drivers can do it in their
+ * f_op->mmap method. -DaveM
+ */
+ addr = vma->vm_start;
+ pgoff = vma->vm_pgoff;
+ vm_flags = vma->vm_flags;
+
+ if (vma_wants_writenotify(vma))
+ vma->vm_page_prot = vm_get_page_prot(vm_flags & ~VM_SHARED);
+
+ if (file && vma_merge(mm, prev, addr, vma->vm_end,
+ vma->vm_flags, NULL, file, pgoff, vma_policy(vma))) {
+ mpol_put(vma_policy(vma));
+ kmem_cache_free(vm_area_cachep, vma);
+ fput(file);
+ if (vm_flags & VM_EXECUTABLE)
+ removed_exe_file_vma(mm);
+ } else {
+ vma_link(mm, vma, prev, rb_link, rb_parent);
+ file = vma->vm_file;
+ }
+
+ /* Once vma denies write, undo our temporary denial count */
+ if (correct_wcount)
+ atomic_inc(&inode->i_writecount);
+
+ mm->total_vm += len >> PAGE_SHIFT;
+ vm_stat_account(mm, vm_flags, file, len >> PAGE_SHIFT);
+ if (vm_flags & VM_LOCKED) {
+ mm->locked_vm += len >> PAGE_SHIFT;
+ make_pages_present(addr, addr + len);
+ }
+ if ((flags & MAP_POPULATE) && !(flags & MAP_NONBLOCK))
+ make_pages_present(addr, addr + len);
+ return addr;
+
+unmap_and_free_vma:
+ if (correct_wcount)
+ atomic_inc(&inode->i_writecount);
+ vma->vm_file = NULL;
+ fput(file);
+
+ /* Undo any partial mapping done by a device driver. */
+ unmap_region(mm, vma, prev, vma->vm_start, vma->vm_end);
+ charged = 0;
+free_vma:
+ kmem_cache_free(vm_area_cachep, vma);
+unacct_error:
+ if (charged)
+ vm_unacct_memory(charged);
+ return error;
+}
+EXPORT_SYMBOL(mmap_io_region);
+
/* Get an address range which is currently unmapped.
* For shmat() with addr=0.
*
Index: config-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/config-generic,v
retrieving revision 1.165
retrieving revision 1.166
diff -u -r1.165 -r1.166
--- config-generic 5 Sep 2008 04:25:29 -0000 1.165
+++ config-generic 9 Sep 2008 06:16:19 -0000 1.166
@@ -2103,6 +2103,7 @@
CONFIG_DRM_SIS=m
CONFIG_DRM_SAVAGE=m
CONFIG_DRM_I915=m
+CONFIG_DRM_I915_KMS=n
CONFIG_DRM_VIA=m
CONFIG_DRM_NOUVEAU=m
drm-modesetting-radeon.patch:
Index: drm-modesetting-radeon.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/drm-modesetting-radeon.patch,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -r1.23 -r1.24
--- drm-modesetting-radeon.patch 8 Sep 2008 00:35:14 -0000 1.23
+++ drm-modesetting-radeon.patch 9 Sep 2008 06:16:19 -0000 1.24
@@ -1,3 +1,21 @@
+commit dc35ec837f7a0ff258e6fde4326ccae7fd77650b
+Author: Dave Airlie <airlied at redhat.com>
+Date: Tue Sep 9 15:55:38 2008 +1000
+
+ radeon: sort out atom vs combios tables for r400 cards
+
+commit 3f4de41530215c5fe6a15b75defa1164615f4878
+Author: Dave Airlie <airlied at redhat.com>
+Date: Mon Sep 8 11:37:26 2008 +1000
+
+ radeon: remove unneeded debugging
+
+commit 2a5b61e6726691102e075e07e6d9f8b1817b73d4
+Author: Dave Airlie <airlied at redhat.com>
+Date: Mon Sep 8 11:25:12 2008 +1000
+
+ radeon: don't do full edid for detection purposes
+
commit 563e90db2ca306fe0dee104703a48b5bc5d7fd93
Author: Dave Airlie <airlied at redhat.com>
Date: Mon Sep 8 10:27:48 2008 +1000
@@ -27952,10 +27970,10 @@
diff --git a/drivers/gpu/drm/radeon/radeon_atombios.c b/drivers/gpu/drm/radeon/radeon_atombios.c
new file mode 100644
-index 0000000..10e3a77
+index 0000000..4d98cba
--- /dev/null
+++ b/drivers/gpu/drm/radeon/radeon_atombios.c
-@@ -0,0 +1,417 @@
+@@ -0,0 +1,453 @@
+/*
+ * Copyright 2007-8 Advanced Micro Devices, Inc.
+ * Copyright 2008 Red Hat Inc.
@@ -28263,12 +28281,48 @@
+ return true;
+}
+
++
++void radeon_atombios_get_tmds_info(struct radeon_encoder *encoder)
++{
++ struct drm_device *dev = encoder->base.dev;
++ struct drm_radeon_private *dev_priv = dev->dev_private;
++ struct radeon_mode_info *mode_info = &dev_priv->mode_info;
++ int index = GetIndexIntoMasterTable(DATA, TMDS_Info);
++ uint16_t data_offset;
++ struct _ATOM_TMDS_INFO *tmds_info;
++ uint8_t frev, crev;
++ uint16_t maxfreq;
++ int i;
++
++ atom_parse_data_header(mode_info->atom_context, index, NULL, &frev, &crev, &data_offset);
++
++ tmds_info = (struct _ATOM_TMDS_INFO *)(mode_info->atom_context->bios + data_offset);
++
++ maxfreq = le16_to_cpu(tmds_info->usMaxFrequency);
++ for (i = 0; i < 4; i++) {
++ encoder->tmds_pll[i].freq = le16_to_cpu(tmds_info->asMiscInfo[i].usFrequency);
++ encoder->tmds_pll[i].value = tmds_info->asMiscInfo[i].ucPLL_ChargePump & 0x3f;
++ encoder->tmds_pll[i].value |= (tmds_info->asMiscInfo[i].ucPLL_VCO_Gain & 0x3f << 6);
++ encoder->tmds_pll[i].value |= (tmds_info->asMiscInfo[i].ucPLL_DutyCycle & 0xf << 12);
++ encoder->tmds_pll[i].value |= (tmds_info->asMiscInfo[i].ucPLL_VoltageSwing & 0xf << 16);
++
++ DRM_DEBUG("TMDS PLL From BIOS %u %x\n",
++ encoder->tmds_pll[i].freq,
++ encoder->tmds_pll[i].value);
++
++ if (maxfreq == encoder->tmds_pll[i].freq) {
++ encoder->tmds_pll[i].freq = 0xffffffff;
++ break;
++ }
++ }
++}
++
+union lvds_info {
+ struct _ATOM_LVDS_INFO info;
+ struct _ATOM_LVDS_INFO_V12 info_12;
+};
+
-+void radeon_get_lvds_info(struct radeon_encoder *encoder)
++void radeon_atombios_get_lvds_info(struct radeon_encoder *encoder)
+{
+ struct drm_device *dev = encoder->base.dev;
+ struct drm_radeon_private *dev_priv = dev->dev_private;
@@ -28821,10 +28875,10 @@
+}
diff --git a/drivers/gpu/drm/radeon/radeon_combios.c b/drivers/gpu/drm/radeon/radeon_combios.c
new file mode 100644
-index 0000000..200761e
+index 0000000..bca9e13
--- /dev/null
+++ b/drivers/gpu/drm/radeon/radeon_combios.c
-@@ -0,0 +1,1344 @@
+@@ -0,0 +1,1359 @@
+/*
+ * Copyright 2004 ATI Technologies Inc., Markham, Ontario
+ * Copyright 2007-8 Advanced Micro Devices, Inc.
@@ -28882,7 +28936,7 @@
+ COMBIOS_CONNECTOR_INFO_TABLE,
+ COMBIOS_DYN_CLK_1_TABLE,
+ COMBIOS_RESERVED_MEM_TABLE,
-+ COMBIOS_EXT_TDMS_INFO_TABLE,
++ COMBIOS_EXT_TMDS_INFO_TABLE,
+ COMBIOS_MEM_CLK_INFO_TABLE,
+ COMBIOS_EXT_DAC_INFO_TABLE,
+ COMBIOS_MISC_INFO_TABLE,
@@ -29044,7 +29098,7 @@
+ if (check_offset)
+ offset = check_offset;
+ break;
-+ case COMBIOS_EXT_TDMS_INFO_TABLE:
++ case COMBIOS_EXT_TMDS_INFO_TABLE:
+ check_offset = radeon_bios16(dev_priv, dev_priv->bios_header_start + 0x58);
+ if (check_offset)
+ offset = check_offset;
@@ -29594,6 +29648,21 @@
+ return false;
+}
+
++bool radeon_combios_get_ext_tmds_info(struct radeon_encoder *encoder)
++{
++ struct drm_device *dev = encoder->base.dev;
++ struct drm_radeon_private *dev_priv = dev->dev_private;
++ uint16_t ext_tmds_info;
++ uint8_t ver;
++
++ ext_tmds_info = combios_get_table_offset(dev, COMBIOS_EXT_TMDS_INFO_TABLE);
++ if (ext_tmds_info) {
++ ver = radeon_bios8(dev_priv, ext_tmds_info);
++ DRM_INFO("External TMDS Table revision: %d\n", ver);
++ // TODO
++ }
++}
++
+static void radeon_apply_legacy_quirks(struct drm_device *dev, int bios_index)
+{
+ struct drm_radeon_private *dev_priv = dev->dev_private;
@@ -30171,10 +30240,10 @@
+}
diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c
new file mode 100644
-index 0000000..5ce66d7
+index 0000000..f217fe7
--- /dev/null
+++ b/drivers/gpu/drm/radeon/radeon_connectors.c
-@@ -0,0 +1,377 @@
+@@ -0,0 +1,367 @@
+/*
+ * Copyright 2007-8 Advanced Micro Devices, Inc.
+ * Copyright 2008 Red Hat Inc.
@@ -30340,18 +30409,16 @@
+
+static enum drm_connector_status radeon_vga_detect(struct drm_connector *connector)
+{
-+ struct edid *edid;
+ struct radeon_connector *radeon_connector = to_radeon_connector(connector);
+ struct drm_encoder *encoder;
+ struct drm_encoder_helper_funcs *encoder_funcs;
++ bool ret;
+
+ radeon_i2c_do_lock(radeon_connector, 1);
-+ edid = drm_get_edid(&radeon_connector->base, &radeon_connector->ddc_bus->adapter);
++ ret = radeon_ddc_probe(radeon_connector);
+ radeon_i2c_do_lock(radeon_connector, 0);
-+ if (edid) {
-+ kfree(edid);
++ if (ret)
+ return connector_status_connected;
-+ }
+
+ /* if EDID fails to a load detect */
+ encoder = radeon_best_single_encoder(connector);
@@ -30377,27 +30444,19 @@
+
+static enum drm_connector_status radeon_dvi_detect(struct drm_connector *connector)
+{
-+ struct edid *edid;
+ struct radeon_connector *radeon_connector = to_radeon_connector(connector);
+ struct drm_encoder *encoder;
+ struct drm_encoder_helper_funcs *encoder_funcs;
+ struct drm_mode_object *obj;
+ int i;
+ enum drm_connector_status ret;
++ bool dret;
+
+ radeon_i2c_do_lock(radeon_connector, 1);
-+ edid = drm_get_edid(&radeon_connector->base, &radeon_connector->ddc_bus->adapter);
++ dret = radeon_ddc_probe(radeon_connector);
+ radeon_i2c_do_lock(radeon_connector, 0);
-+ if (edid) {
-+ /* if the monitor is digital - set the bits */
-+ if (edid->digital)
-+ radeon_connector->use_digital = 1;
-+ else
-+ radeon_connector->use_digital = 0;
-+
-+ kfree(edid);
++ if (dret)
+ return connector_status_connected;
-+ }
+
+ for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
+ if (connector->encoder_ids[i] == 0)
@@ -30553,7 +30612,7 @@
+ return NULL;
+}
diff --git a/drivers/gpu/drm/radeon/radeon_cp.c b/drivers/gpu/drm/radeon/radeon_cp.c
-index 248ab4a..8994326 100644
+index 248ab4a..cc96220 100644
--- a/drivers/gpu/drm/radeon/radeon_cp.c
+++ b/drivers/gpu/drm/radeon/radeon_cp.c
@@ -31,6 +31,7 @@
@@ -31303,7 +31362,7 @@
LOCK_TEST_WITH_RETURN(dev, file_priv);
return radeon_do_engine_reset(dev);
-@@ -1688,6 +1866,602 @@ int radeon_cp_buffers(struct drm_device *dev, void *data, struct drm_file *file_
+@@ -1688,6 +1866,600 @@ int radeon_cp_buffers(struct drm_device *dev, void *data, struct drm_file *file_
return ret;
}
@@ -31773,11 +31832,9 @@
+ }
+ radeon_gart_flush(dev);
+
-+ DRM_ERROR("microcode loading\n");
+ radeon_cp_load_microcode(dev_priv);
+ radeon_cp_init_ring_buffer(dev, dev_priv);
+
-+ DRM_ERROR("engine init\n");
+ radeon_do_engine_reset(dev);
+
+ radeon_do_cp_start(dev_priv);
@@ -31906,7 +31963,7 @@
int radeon_driver_load(struct drm_device *dev, unsigned long flags)
{
drm_radeon_private_t *dev_priv;
-@@ -1701,6 +2475,8 @@ int radeon_driver_load(struct drm_device *dev, unsigned long flags)
+@@ -1701,6 +2473,8 @@ int radeon_driver_load(struct drm_device *dev, unsigned long flags)
dev->dev_private = (void *)dev_priv;
dev_priv->flags = flags;
@@ -31915,7 +31972,7 @@
switch (flags & RADEON_FAMILY_MASK) {
case CHIP_R100:
case CHIP_RV200:
-@@ -1720,18 +2496,119 @@ int radeon_driver_load(struct drm_device *dev, unsigned long flags)
+@@ -1720,18 +2494,119 @@ int radeon_driver_load(struct drm_device *dev, unsigned long flags)
break;
}
@@ -32036,7 +32093,7 @@
/* Create mappings for registers and framebuffer so userland doesn't necessarily
* have to find them.
*/
-@@ -1743,19 +2620,6 @@ int radeon_driver_firstopen(struct drm_device *dev)
+@@ -1743,19 +2618,6 @@ int radeon_driver_firstopen(struct drm_device *dev)
dev_priv->gart_info.table_size = RADEON_PCIGART_TABLE_SIZE;
@@ -32056,7 +32113,7 @@
return 0;
}
-@@ -1763,9 +2627,40 @@ int radeon_driver_unload(struct drm_device *dev)
+@@ -1763,9 +2625,40 @@ int radeon_driver_unload(struct drm_device *dev)
{
drm_radeon_private_t *dev_priv = dev->dev_private;
@@ -32765,10 +32822,10 @@
+
diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c
new file mode 100644
-index 0000000..2e516a1
+index 0000000..a2cb66a
--- /dev/null
+++ b/drivers/gpu/drm/radeon/radeon_display.c
-@@ -0,0 +1,645 @@
+@@ -0,0 +1,651 @@
+/*
+ * Copyright 2007-8 Advanced Micro Devices, Inc.
+ * Copyright 2008 Red Hat Inc.
@@ -32802,6 +32859,7 @@
+#include <asm/div64.h>
+
+#include "drm_crtc_helper.h"
++#include "drm_edid.h"
+
+int radeon_ddc_dump(struct drm_connector *connector);
+
@@ -33076,6 +33134,11 @@
+ edid = drm_get_edid(&radeon_connector->base, &radeon_connector->ddc_bus->adapter);
+ radeon_i2c_do_lock(radeon_connector, 0);
+ if (edid) {
++ /* update digital bits here */
++ if (edid->digital)
++ radeon_connector->use_digital = 1;
++ else
++ radeon_connector->use_digital = 0;
+ drm_mode_connector_update_edid_property(&radeon_connector->base, edid);
+ ret = drm_add_edid_modes(&radeon_connector->base, edid);
+ kfree(edid);
@@ -34243,7 +34306,7 @@
#endif /* __RADEON_DRV_H__ */
diff --git a/drivers/gpu/drm/radeon/radeon_encoders.c b/drivers/gpu/drm/radeon/radeon_encoders.c
new file mode 100644
-index 0000000..e3a58c8
+index 0000000..e791ab7
--- /dev/null
+++ b/drivers/gpu/drm/radeon/radeon_encoders.c
@@ -0,0 +1,1081 @@
@@ -34636,7 +34699,7 @@
+
+ /* TODO get the LVDS info from the BIOS for panel size etc. */
+ /* get the lvds info from the bios */
-+ radeon_get_lvds_info(radeon_encoder);
++ radeon_atombios_get_lvds_info(radeon_encoder);
+
+ /* LVDS gets default RMX full scaling */
+ radeon_encoder->rmx_type = RMX_FULL;
@@ -36364,10 +36427,10 @@
+
diff --git a/drivers/gpu/drm/radeon/radeon_gem.c b/drivers/gpu/drm/radeon/radeon_gem.c
new file mode 100644
-index 0000000..12a0358
+index 0000000..382d348
--- /dev/null
+++ b/drivers/gpu/drm/radeon/radeon_gem.c
-@@ -0,0 +1,1382 @@
+@@ -0,0 +1,1381 @@
+/*
+ * Copyright 2008 Red Hat Inc.
+ *
@@ -36982,7 +37045,6 @@
+ if (!dev_priv->mm.pcie_table_backup)
+ return -EINVAL;
+
-+ DRM_ERROR("pcie table bo created %p, %x\n", dev_priv->mm.pcie_table.bo, dev_priv->mm.pcie_table.bo->offset);
+ ret = drm_bo_kmap(dev_priv->mm.pcie_table.bo, 0, RADEON_PCIGART_TABLE_SIZE >> PAGE_SHIFT,
+ &dev_priv->mm.pcie_table.kmap);
+ if (ret)
@@ -37752,10 +37814,10 @@
+
diff --git a/drivers/gpu/drm/radeon/radeon_i2c.c b/drivers/gpu/drm/radeon/radeon_i2c.c
new file mode 100644
-index 0000000..00fc7c0
+index 0000000..94a485b
--- /dev/null
+++ b/drivers/gpu/drm/radeon/radeon_i2c.c
-@@ -0,0 +1,163 @@
+@@ -0,0 +1,196 @@
+/*
+ * Copyright 2007-8 Advanced Micro Devices, Inc.
+ * Copyright 2008 Red Hat Inc.
@@ -37785,6 +37847,38 @@
+#include "radeon_drm.h"
+#include "radeon_drv.h"
+
++/**
++ * radeon_ddc_probe
++ *
++ */
++bool radeon_ddc_probe(struct radeon_connector *radeon_connector)
++{
++ u8 out_buf[] = { 0x0, 0x0};
++ u8 buf[2];
++ int ret;
++ struct i2c_msg msgs[] = {
++ {
++ .addr = 0x50,
++ .flags = 0,
++ .len = 1,
++ .buf = out_buf,
++ },
++ {
++ .addr = 0x50,
++ .flags = I2C_M_RD,
++ .len = 1,
++ .buf = buf,
++ }
++ };
++
++ ret = i2c_transfer(&radeon_connector->ddc_bus->adapter, msgs, 2);
++ if (ret == 2)
++ return true;
++
++ return false;
++}
++
++
+void radeon_i2c_do_lock(struct radeon_connector *radeon_connector, int lock_state)
+{
+ struct drm_radeon_private *dev_priv = radeon_connector->base.dev->dev_private;
@@ -37919,6 +38013,7 @@
+{
+ return NULL;
+}
++
diff --git a/drivers/gpu/drm/radeon/radeon_irq.c b/drivers/gpu/drm/radeon/radeon_irq.c
index ee40d19..4d16f4a 100644
--- a/drivers/gpu/drm/radeon/radeon_irq.c
@@ -39000,10 +39095,10 @@
+}
diff --git a/drivers/gpu/drm/radeon/radeon_legacy_encoders.c b/drivers/gpu/drm/radeon/radeon_legacy_encoders.c
new file mode 100644
-index 0000000..0d6babb
+index 0000000..c80e0b5
--- /dev/null
+++ b/drivers/gpu/drm/radeon/radeon_legacy_encoders.c
-@@ -0,0 +1,1328 @@
+@@ -0,0 +1,1356 @@
+/*
+ * Copyright 2007-8 Advanced Micro Devices, Inc.
+ * Copyright 2008 Red Hat Inc.
@@ -39275,16 +39370,20 @@
+
+static void radeon_legacy_lvds_prepare(struct drm_encoder *encoder)
+{
++ struct drm_radeon_private *dev_priv = encoder->dev->dev_private;
+ // fix me: atom/legacy r4xx
-+ radeon_combios_output_lock(encoder, true);
++ if (!dev_priv->is_atom_bios)
++ radeon_combios_output_lock(encoder, true);
+ radeon_legacy_lvds_dpms(encoder, DRM_MODE_DPMS_OFF);
+}
+
+static void radeon_legacy_lvds_commit(struct drm_encoder *encoder)
+{
++ struct drm_radeon_private *dev_priv = encoder->dev->dev_private;
+ radeon_legacy_lvds_dpms(encoder, DRM_MODE_DPMS_ON);
+ // fix me: atom/legacy r4xx
-+ radeon_combios_output_lock(encoder, false);
++ if (!dev_priv->is_atom_bios)
++ radeon_combios_output_lock(encoder, false);
+}
+
+static void radeon_legacy_lvds_mode_set(struct drm_encoder *encoder,
@@ -39367,6 +39466,7 @@
+
+struct drm_encoder *radeon_encoder_legacy_lvds_add(struct drm_device *dev, int bios_index)
+{
++ struct drm_radeon_private *dev_priv = dev->dev_private;
+ struct radeon_encoder *radeon_encoder;
+ struct drm_encoder *encoder;
+
@@ -39388,7 +39488,10 @@
+ drm_encoder_helper_add(encoder, &radeon_legacy_lvds_helper_funcs);
+
+ /* get the lvds info from the bios */
-+ radeon_combios_get_lvds_info(radeon_encoder);
++ if (dev_priv->is_atom_bios)
++ radeon_atombios_get_lvds_info(radeon_encoder);
++ else
++ radeon_combios_get_lvds_info(radeon_encoder);
+
+ /* LVDS gets default RMX full scaling */
+ radeon_encoder->rmx_type = RMX_FULL;
@@ -39463,16 +39566,20 @@
+
+static void radeon_legacy_primary_dac_prepare(struct drm_encoder *encoder)
+{
++ struct drm_radeon_private *dev_priv = encoder->dev->dev_private;
+ // fix me: atom/legacy r4xx
-+ radeon_combios_output_lock(encoder, true);
++ if (!dev_priv->is_atom_bios)
++ radeon_combios_output_lock(encoder, true);
+ radeon_legacy_primary_dac_dpms(encoder, DRM_MODE_DPMS_OFF);
+}
+
+static void radeon_legacy_primary_dac_commit(struct drm_encoder *encoder)
+{
++ struct drm_radeon_private *dev_priv = encoder->dev->dev_private;
+ radeon_legacy_primary_dac_dpms(encoder, DRM_MODE_DPMS_ON);
+ // fix me: atom/legacy r4xx
-+ radeon_combios_output_lock(encoder, false);
++ if (!dev_priv->is_atom_bios)
++ radeon_combios_output_lock(encoder, false);
+}
+
+static void radeon_legacy_primary_dac_mode_set(struct drm_encoder *encoder,
@@ -39609,6 +39716,7 @@
+
+struct drm_encoder *radeon_encoder_legacy_primary_dac_add(struct drm_device *dev, int bios_index, int has_tv)
+{
++ struct drm_radeon_private *dev_priv = dev->dev_private;
+ struct radeon_encoder *radeon_encoder;
+ struct drm_encoder *encoder;
+
@@ -39629,7 +39737,8 @@
+ drm_encoder_helper_add(encoder, &radeon_legacy_primary_dac_helper_funcs);
+
+ /* get the primary dac bg/adj vals from bios tables */
-+ radeon_combios_get_primary_dac_info(radeon_encoder);
++ if (!dev_priv->is_atom_bios)
++ radeon_combios_get_primary_dac_info(radeon_encoder);
+
+ return encoder;
+}
@@ -39687,16 +39796,20 @@
+
+static void radeon_legacy_tmds_int_prepare(struct drm_encoder *encoder)
+{
++ struct drm_radeon_private *dev_priv = encoder->dev->dev_private;
+ // fix me: atom/legacy r4xx
-+ radeon_combios_output_lock(encoder, true);
++ if (!dev_priv->is_atom_bios)
++ radeon_combios_output_lock(encoder, true);
+ radeon_legacy_tmds_int_dpms(encoder, DRM_MODE_DPMS_OFF);
+}
+
+static void radeon_legacy_tmds_int_commit(struct drm_encoder *encoder)
+{
++ struct drm_radeon_private *dev_priv = encoder->dev->dev_private;
+ radeon_legacy_tmds_int_dpms(encoder, DRM_MODE_DPMS_ON);
+ // fix me: atom/legacy r4xx
-+ radeon_combios_output_lock(encoder, true);
++ if (!dev_priv->is_atom_bios)
++ radeon_combios_output_lock(encoder, true);
+}
+
+static void radeon_legacy_tmds_int_mode_set(struct drm_encoder *encoder,
@@ -39800,6 +39913,7 @@
+
+struct drm_encoder *radeon_encoder_legacy_tmds_int_add(struct drm_device *dev, int bios_index)
+{
++ struct drm_radeon_private *dev_priv = dev->dev_private;
+ struct radeon_encoder *radeon_encoder;
+ struct drm_encoder *encoder;
+
@@ -39819,7 +39933,10 @@
+
+ drm_encoder_helper_add(encoder, &radeon_legacy_tmds_int_helper_funcs);
+
-+ radeon_combios_get_tmds_info(radeon_encoder);
++ if (dev_priv->is_atom_bios)
++ radeon_atombios_get_tmds_info(radeon_encoder);
++ else
++ radeon_combios_get_tmds_info(radeon_encoder);
+
+ return encoder;
+}
@@ -39878,16 +39995,20 @@
+
+static void radeon_legacy_tmds_ext_prepare(struct drm_encoder *encoder)
+{
++ struct drm_radeon_private *dev_priv = encoder->dev->dev_private;
+ // fix me: atom/legacy r4xx
-+ radeon_combios_output_lock(encoder, true);
++ if (!dev_priv->is_atom_bios)
++ radeon_combios_output_lock(encoder, true);
+ radeon_legacy_tmds_ext_dpms(encoder, DRM_MODE_DPMS_OFF);
+}
+
+static void radeon_legacy_tmds_ext_commit(struct drm_encoder *encoder)
+{
++ struct drm_radeon_private *dev_priv = encoder->dev->dev_private;
+ radeon_legacy_tmds_ext_dpms(encoder, DRM_MODE_DPMS_ON);
+ // fix me: atom/legacy r4xx
-+ radeon_combios_output_lock(encoder, false);
++ if (!dev_priv->is_atom_bios)
++ radeon_combios_output_lock(encoder, false);
+}
+
+static void radeon_legacy_tmds_ext_mode_set(struct drm_encoder *encoder,
@@ -39962,6 +40083,7 @@
+
+struct drm_encoder *radeon_encoder_legacy_tmds_ext_add(struct drm_device *dev, int bios_index)
+{
++ struct drm_radeon_private *dev_priv = dev->dev_private;
+ struct radeon_encoder *radeon_encoder;
+ struct drm_encoder *encoder;
+
@@ -39981,7 +40103,8 @@
+
+ drm_encoder_helper_add(encoder, &radeon_legacy_tmds_ext_helper_funcs);
+
-+ //radeon_combios_get_tmds_info(radeon_encoder);
++ if (!dev_priv->is_atom_bios)
++ radeon_combios_get_ext_tmds_info(radeon_encoder);
+ return encoder;
+}
+
@@ -40334,10 +40457,10 @@
+}
diff --git a/drivers/gpu/drm/radeon/radeon_mode.h b/drivers/gpu/drm/radeon/radeon_mode.h
new file mode 100644
-index 0000000..8236d1c
+index 0000000..ef268a2
--- /dev/null
+++ b/drivers/gpu/drm/radeon/radeon_mode.h
-@@ -0,0 +1,333 @@
+@@ -0,0 +1,337 @@
+/*
+ * Copyright 2000 ATI Technologies Inc., Markham, Ontario, and
+ * VA Linux Systems Inc., Fremont, California.
@@ -40587,6 +40710,7 @@
+ struct radeon_i2c_bus_rec *rec,
+ const char *name);
+extern void radeon_i2c_destroy(struct radeon_i2c_chan *i2c);
++extern bool radeon_ddc_probe(struct radeon_connector *radeon_connector);
+extern int radeon_ddc_get_modes(struct radeon_connector *radeon_connector);
+extern struct drm_connector *radeon_connector_add(struct drm_device *dev, int bios_index);
+
@@ -40627,9 +40751,11 @@
+
+extern bool radeon_atom_get_clock_info(struct drm_device *dev);
+extern bool radeon_combios_get_clock_info(struct drm_device *dev);
-+extern void radeon_get_lvds_info(struct radeon_encoder *encoder);
++extern void radeon_atombios_get_lvds_info(struct radeon_encoder *encoder);
++extern void radeon_atombios_get_tmds_info(struct radeon_encoder *encoder);
+extern bool radeon_combios_get_lvds_info(struct radeon_encoder *encoder);
+extern bool radeon_combios_get_tmds_info(struct radeon_encoder *encoder);
++extern bool radeon_combios_get_ext_tmds_info(struct radeon_encoder *encoder);
+extern bool radeon_combios_get_tv_info(struct radeon_encoder *encoder);
+extern bool radeon_combios_get_tv_dac_info(struct radeon_encoder *encoder);
+extern bool radeon_combios_get_primary_dac_info(struct radeon_encoder *encoder);
@@ -40670,6 +40796,7 @@
+void radeon_copy_fb(struct drm_device *dev, struct drm_gem_object *dst_obj);
+void radeon_combios_asic_init(struct drm_device *dev);
+extern int radeon_static_clocks_init(struct drm_device *dev);
++
+#endif
diff --git a/drivers/gpu/drm/radeon/radeon_pm.c b/drivers/gpu/drm/radeon/radeon_pm.c
new file mode 100644
Index: kernel.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/kernel.spec,v
retrieving revision 1.939
retrieving revision 1.940
diff -u -r1.939 -r1.940
--- kernel.spec 9 Sep 2008 01:47:35 -0000 1.939
+++ kernel.spec 9 Sep 2008 06:16:19 -0000 1.940
@@ -607,6 +607,7 @@
# nouveau + drm fixes
Patch1811: drm-modesetting-radeon.patch
+Patch1812: drm-modesetting-i915.patch
Patch1813: drm-nouveau.patch
# kludge to make ich9 e1000 work
@@ -1152,6 +1153,7 @@
# Nouveau DRM + drm fixes
ApplyPatch drm-modesetting-radeon.patch
+ApplyPatch drm-modesetting-i915.patch
ApplyPatch drm-nouveau.patch
# linux1394 git patches
@@ -1744,6 +1746,10 @@
%kernel_variant_files -k vmlinux %{with_kdump} kdump
%changelog
+* Tue Sep 09 2008 Dave Airlie <airlied at redhat.com>
+- radeon - update modesetting bits - should fix r400
+- add i915 modesetting bits - don't enable these by default yet
+
* Mon Sep 08 2008 Dave Jones <davej at redhat.com>
- 2.6.27-rc5-git10
- Previous message (by thread): rpms/perl-Locale-SubCountry/devel .cvsignore, 1.3, 1.4 perl-Locale-SubCountry.spec, 1.5, 1.6 sources, 1.3, 1.4
- Next message (by thread): rpms/perl-Locale-SubCountry/F-9 perl-Locale-SubCountry.spec, 1.5, 1.6 sources, 1.3, 1.4
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the fedora-extras-commits
mailing list