rpms/kernel/devel linux-2.6-drm-radeon-update.patch, NONE, 1.1 linux-2.6-git-initial-r500-drm.patch, NONE, 1.1 kernel.spec, 1.323, 1.324 linux-2.6-drm-mm.patch, 1.3, 1.4

Dave Airlie (airlied) fedora-extras-commits at redhat.com
Wed Dec 19 03:50:50 UTC 2007


Author: airlied

Update of /cvs/pkgs/rpms/kernel/devel
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv16831

Modified Files:
	kernel.spec linux-2.6-drm-mm.patch 
Added Files:
	linux-2.6-drm-radeon-update.patch 
	linux-2.6-git-initial-r500-drm.patch 
Log Message:
* Wed Dec 19 2007 Dave Airlie <airlied at redhat.com>
- Update drm upstream patches and add basic r500 drm support


linux-2.6-drm-radeon-update.patch:

--- NEW FILE linux-2.6-drm-radeon-update.patch ---
diff -up linux-2.6.23.noarch/drivers/char/drm/radeon_drm.h.da linux-2.6.23.noarch/drivers/char/drm/radeon_drm.h
--- linux-2.6.23.noarch/drivers/char/drm/radeon_drm.h.da	2007-10-10 06:31:38.000000000 +1000
+++ linux-2.6.23.noarch/drivers/char/drm/radeon_drm.h	2007-12-12 11:43:08.000000000 +1000
@@ -656,6 +656,7 @@ typedef struct drm_radeon_indirect {
 #define RADEON_PARAM_SCRATCH_OFFSET        11
 #define RADEON_PARAM_CARD_TYPE             12
 #define RADEON_PARAM_VBLANK_CRTC           13   /* VBLANK CRTC */
+#define RADEON_PARAM_FB_LOCATION           14   /* FB location */
 
 typedef struct drm_radeon_getparam {
 	int param;
diff -up linux-2.6.23.noarch/drivers/char/drm/radeon_state.c.da linux-2.6.23.noarch/drivers/char/drm/radeon_state.c
--- linux-2.6.23.noarch/drivers/char/drm/radeon_state.c.da	2007-12-12 11:42:44.000000000 +1000
+++ linux-2.6.23.noarch/drivers/char/drm/radeon_state.c	2007-12-12 11:43:21.000000000 +1000
@@ -3033,6 +3033,9 @@ static int radeon_cp_getparam(struct drm
 	case RADEON_PARAM_VBLANK_CRTC:
 		value = radeon_vblank_crtc_get(dev);
 		break;
+	case RADEON_PARAM_FB_LOCATION:
+		value = radeon_read_fb_location(dev_priv);
+		break;
 	default:
 		DRM_DEBUG("Invalid parameter %d\n", param->param);
 		return -EINVAL;
diff -up linux-2.6.23.noarch/drivers/char/drm/radeon_cp.c.da linux-2.6.23.noarch/drivers/char/drm/radeon_cp.c
--- linux-2.6.23.noarch/drivers/char/drm/radeon_cp.c.da	2007-12-12 11:42:44.000000000 +1000
+++ linux-2.6.23.noarch/drivers/char/drm/radeon_cp.c	2007-12-12 11:43:08.000000000 +1000
@@ -816,6 +816,21 @@ static const u32 R300_cp_microcode[][2] 
 	{0000000000, 0000000000},
 };
 
+u32 radeon_read_fb_location(drm_radeon_private_t *dev_priv)
+{
+	return RADEON_READ(RADEON_MC_FB_LOCATION);
+}
+
+static void radeon_write_fb_location(drm_radeon_private_t *dev_priv, u32 fb_loc)
+{
+	RADEON_WRITE(RADEON_MC_FB_LOCATION, fb_loc);
+}
+
+static void radeon_write_agp_location(drm_radeon_private_t *dev_priv, u32 agp_loc)
+{
+	RADEON_WRITE(RADEON_MC_AGP_LOCATION, agp_loc);
+}
+
 static int RADEON_READ_PLL(struct drm_device * dev, int addr)
 {
 	drm_radeon_private_t *dev_priv = dev->dev_private;
@@ -1134,14 +1149,14 @@ static void radeon_cp_init_ring_buffer(s
 	 * always appended to the fb which is not necessarily the case
 	 */
 	if (!dev_priv->new_memmap)
-		RADEON_WRITE(RADEON_MC_FB_LOCATION,
+		radeon_write_fb_location(dev_priv,
 			     ((dev_priv->gart_vm_start - 1) & 0xffff0000)
 			     | (dev_priv->fb_location >> 16));
 
 #if __OS_HAS_AGP
 	if (dev_priv->flags & RADEON_IS_AGP) {
 		RADEON_WRITE(RADEON_AGP_BASE, (unsigned int)dev->agp->base);
-		RADEON_WRITE(RADEON_MC_AGP_LOCATION,
+		radeon_write_agp_location(dev_priv,
 			     (((dev_priv->gart_vm_start - 1 +
 				dev_priv->gart_size) & 0xffff0000) |
 			      (dev_priv->gart_vm_start >> 16)));
@@ -1299,7 +1314,7 @@ static void radeon_set_igpgart(drm_radeo
 
 		RADEON_WRITE(RADEON_AGP_BASE, (unsigned int)dev_priv->gart_vm_start);
 		dev_priv->gart_size = 32*1024*1024;
-		RADEON_WRITE(RADEON_MC_AGP_LOCATION,
+		radeon_write_agp_location(dev_priv,
 			     (((dev_priv->gart_vm_start - 1 +
 			       dev_priv->gart_size) & 0xffff0000) |
 			     (dev_priv->gart_vm_start >> 16)));
@@ -1333,7 +1348,7 @@ static void radeon_set_pciegart(drm_rade
 				  dev_priv->gart_vm_start +
 				  dev_priv->gart_size - 1);
 
-		RADEON_WRITE(RADEON_MC_AGP_LOCATION, 0xffffffc0);	/* ?? */
+		radeon_write_agp_location(dev_priv, 0xffffffc0); /* ?? */
 
 		RADEON_WRITE_PCIE(RADEON_PCIE_TX_GART_CNTL,
 				  RADEON_PCIE_TX_GART_EN);
@@ -1376,7 +1391,7 @@ static void radeon_set_pcigart(drm_radeo
 
 		/* Turn off AGP aperture -- is this required for PCI GART?
 		 */
-		RADEON_WRITE(RADEON_MC_AGP_LOCATION, 0xffffffc0);	/* ?? */
+		radeon_write_agp_location(dev_priv, 0xffffffc0);
 		RADEON_WRITE(RADEON_AGP_COMMAND, 0);	/* clear AGP_COMMAND */
 	} else {
 		RADEON_WRITE(RADEON_AIC_CNTL,
@@ -1581,10 +1596,9 @@ static int radeon_do_init_cp(struct drm_
 			  dev->agp_buffer_map->handle);
 	}
 
-	dev_priv->fb_location = (RADEON_READ(RADEON_MC_FB_LOCATION)
-				 & 0xffff) << 16;
+	dev_priv->fb_location = (radeon_read_fb_location(dev_priv) & 0xffff) << 16;
 	dev_priv->fb_size =
-		((RADEON_READ(RADEON_MC_FB_LOCATION) & 0xffff0000u) + 0x10000)
+		((radeon_read_fb_location(dev_priv) & 0xffff0000u) + 0x10000)
 		- dev_priv->fb_location;
 
 	dev_priv->front_pitch_offset = (((dev_priv->front_pitch / 64) << 22) |
diff -up linux-2.6.23.noarch/drivers/char/drm/radeon_drv.h.da linux-2.6.23.noarch/drivers/char/drm/radeon_drv.h
--- linux-2.6.23.noarch/drivers/char/drm/radeon_drv.h.da	2007-12-12 11:42:44.000000000 +1000
+++ linux-2.6.23.noarch/drivers/char/drm/radeon_drv.h	2007-12-12 11:43:08.000000000 +1000
@@ -336,6 +336,7 @@ extern int radeon_cp_resume(struct drm_d
 extern int radeon_engine_reset(struct drm_device *dev, void *data, struct drm_file *file_priv);
 extern int radeon_fullscreen(struct drm_device *dev, void *data, struct drm_file *file_priv);
 extern int radeon_cp_buffers(struct drm_device *dev, void *data, struct drm_file *file_priv);
+extern u32 radeon_read_fb_location(drm_radeon_private_t *dev_priv);
 
 extern void radeon_freelist_reset(struct drm_device * dev);
 extern struct drm_buf *radeon_freelist_get(struct drm_device * dev);

linux-2.6-git-initial-r500-drm.patch:

--- NEW FILE linux-2.6-git-initial-r500-drm.patch ---
diff -up linux-2.6.23.noarch/drivers/char/drm/drm_pciids.h.r500 linux-2.6.23.noarch/drivers/char/drm/drm_pciids.h
--- linux-2.6.23.noarch/drivers/char/drm/drm_pciids.h.r500	2007-12-12 11:17:09.000000000 +1000
+++ linux-2.6.23.noarch/drivers/char/drm/drm_pciids.h	2007-12-12 11:17:39.000000000 +1000
@@ -139,6 +139,107 @@
 	{0x1002, 0x5e4c, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV410|RADEON_NEW_MEMMAP}, \
 	{0x1002, 0x5e4d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV410|RADEON_NEW_MEMMAP}, \
 	{0x1002, 0x5e4f, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV410|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7100, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R520|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7101, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R520|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7102, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R520|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7103, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R520|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7104, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R520|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7105, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R520|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7106, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R520|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7108, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R520|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7109, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R520|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x710A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R520|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x710B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R520|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x710C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R520|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x710E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R520|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x710F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R520|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7140, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7141, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7142, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7143, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7144, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7145, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7146, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7147, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7149, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x714A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x714B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x714C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x714D, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x714E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x714F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7151, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7152, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7153, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x715E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x715F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7180, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7181, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7183, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7186, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7187, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7188, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x718A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x718B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x718C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x718D, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x718F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7193, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7196, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x719B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x719F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x71C0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV530|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x71C1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV530|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x71C2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV530|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x71C3, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV530|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x71C4, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV530|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x71C5, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV530|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x71C6, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV530|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x71C7, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV530|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x71CD, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV530|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x71CE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV530|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x71D2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV530|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x71D4, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV530|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x71D5, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV530|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x71D6, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV530|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x71DA, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV530|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x71DE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV530|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7200, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV530|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7210, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV530|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7211, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV530|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7240, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R580|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7243, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R580|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7244, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R580|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7245, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R580|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7246, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R580|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7247, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R580|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7248, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R580|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7249, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R580|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x724A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R580|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x724B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R580|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x724C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R580|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x724D, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R580|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x724E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R580|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x724F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R580|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7280, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV570|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7281, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV560|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7283, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV560|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7284, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R580|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7287, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV560|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7288, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV570|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7289, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV570|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x728B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV570|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x728C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV570|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7290, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV560|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7291, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV560|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7293, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV560|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7297, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV560|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7104, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R520|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7142, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x71c7, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R520|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7183, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV515|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7249, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R580|RADEON_NEW_MEMMAP}, \
+	{0x1002, 0x7280, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV570|RADEON_NEW_MEMMAP}, \
 	{0x1002, 0x7834, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS300|RADEON_IS_IGP|RADEON_NEW_MEMMAP}, \
 	{0x1002, 0x7835, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS300|RADEON_IS_IGP|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
 	{0, 0, 0}
diff -up linux-2.6.23.noarch/drivers/char/drm/radeon_cp.c.r500 linux-2.6.23.noarch/drivers/char/drm/radeon_cp.c
--- linux-2.6.23.noarch/drivers/char/drm/radeon_cp.c.r500	2007-12-12 11:17:09.000000000 +1000
+++ linux-2.6.23.noarch/drivers/char/drm/radeon_cp.c	2007-12-12 11:17:39.000000000 +1000
@@ -816,19 +816,44 @@ static const u32 R300_cp_microcode[][2] 
 	{0000000000, 0000000000},
 };
 
+static u32 RADEON_READ_MCIND(drm_radeon_private_t *dev_priv, int addr)
+{
+	u32 ret;
+	RADEON_WRITE(R520_MC_IND_INDEX, 0x7f0000 | (addr & 0xff));
+	ret = RADEON_READ(R520_MC_IND_DATA);
+	RADEON_WRITE(R520_MC_IND_INDEX, 0);
+	return ret;
+}
+
 u32 radeon_read_fb_location(drm_radeon_private_t *dev_priv)
 {
-	return RADEON_READ(RADEON_MC_FB_LOCATION);
+	
+	if ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV515)
+		return RADEON_READ_MCIND(dev_priv, RV515_MC_FB_LOCATION);
+	else if ((dev_priv->flags & RADEON_FAMILY_MASK) > CHIP_RV515)
+		return RADEON_READ_MCIND(dev_priv, R520_MC_FB_LOCATION);
+	else
+		return RADEON_READ(RADEON_MC_FB_LOCATION);
 }
 
 static void radeon_write_fb_location(drm_radeon_private_t *dev_priv, u32 fb_loc)
 {
-	RADEON_WRITE(RADEON_MC_FB_LOCATION, fb_loc);
+	if ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV515)
+		RADEON_WRITE_MCIND(RV515_MC_FB_LOCATION, fb_loc);
+	else if ((dev_priv->flags & RADEON_FAMILY_MASK) > CHIP_RV515)
+		RADEON_WRITE_MCIND(R520_MC_FB_LOCATION, fb_loc);
+	else
+		RADEON_WRITE(RADEON_MC_FB_LOCATION, fb_loc);
 }
 
 static void radeon_write_agp_location(drm_radeon_private_t *dev_priv, u32 agp_loc)
 {
-	RADEON_WRITE(RADEON_MC_AGP_LOCATION, agp_loc);
+	if ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV515)
+		RADEON_WRITE_MCIND(RV515_MC_AGP_LOCATION, agp_loc);
+	else if ((dev_priv->flags & RADEON_FAMILY_MASK) > CHIP_RV515)
+		RADEON_WRITE_MCIND(R520_MC_AGP_LOCATION, agp_loc);
+	else
+		RADEON_WRITE(RADEON_MC_AGP_LOCATION, agp_loc);
 }
 
 static int RADEON_READ_PLL(struct drm_device * dev, int addr)
@@ -1089,41 +1114,43 @@ static int radeon_do_engine_reset(struct
 
 	radeon_do_pixcache_flush(dev_priv);
 
-	clock_cntl_index = RADEON_READ(RADEON_CLOCK_CNTL_INDEX);
-	mclk_cntl = RADEON_READ_PLL(dev, RADEON_MCLK_CNTL);
-
-	RADEON_WRITE_PLL(RADEON_MCLK_CNTL, (mclk_cntl |
-					    RADEON_FORCEON_MCLKA |
-					    RADEON_FORCEON_MCLKB |
-					    RADEON_FORCEON_YCLKA |
-					    RADEON_FORCEON_YCLKB |
-					    RADEON_FORCEON_MC |
-					    RADEON_FORCEON_AIC));
-
-	rbbm_soft_reset = RADEON_READ(RADEON_RBBM_SOFT_RESET);
-
-	RADEON_WRITE(RADEON_RBBM_SOFT_RESET, (rbbm_soft_reset |
-					      RADEON_SOFT_RESET_CP |
-					      RADEON_SOFT_RESET_HI |
-					      RADEON_SOFT_RESET_SE |
-					      RADEON_SOFT_RESET_RE |
-					      RADEON_SOFT_RESET_PP |
-					      RADEON_SOFT_RESET_E2 |
-					      RADEON_SOFT_RESET_RB));
-	RADEON_READ(RADEON_RBBM_SOFT_RESET);
-	RADEON_WRITE(RADEON_RBBM_SOFT_RESET, (rbbm_soft_reset &
-					      ~(RADEON_SOFT_RESET_CP |
-						RADEON_SOFT_RESET_HI |
-						RADEON_SOFT_RESET_SE |
-						RADEON_SOFT_RESET_RE |
-						RADEON_SOFT_RESET_PP |
-						RADEON_SOFT_RESET_E2 |
-						RADEON_SOFT_RESET_RB)));
-	RADEON_READ(RADEON_RBBM_SOFT_RESET);
-
-	RADEON_WRITE_PLL(RADEON_MCLK_CNTL, mclk_cntl);
-	RADEON_WRITE(RADEON_CLOCK_CNTL_INDEX, clock_cntl_index);
-	RADEON_WRITE(RADEON_RBBM_SOFT_RESET, rbbm_soft_reset);
+	if ((dev_priv->flags & RADEON_FAMILY_MASK) < CHIP_RV515) {
+		clock_cntl_index = RADEON_READ(RADEON_CLOCK_CNTL_INDEX);
+		mclk_cntl = RADEON_READ_PLL(dev, RADEON_MCLK_CNTL);
+		
+		RADEON_WRITE_PLL(RADEON_MCLK_CNTL, (mclk_cntl |
+						    RADEON_FORCEON_MCLKA |
+						    RADEON_FORCEON_MCLKB |
+						    RADEON_FORCEON_YCLKA |
+						    RADEON_FORCEON_YCLKB |
+						    RADEON_FORCEON_MC |
+						    RADEON_FORCEON_AIC));
+		
+		rbbm_soft_reset = RADEON_READ(RADEON_RBBM_SOFT_RESET);
+		
+		RADEON_WRITE(RADEON_RBBM_SOFT_RESET, (rbbm_soft_reset |
+						      RADEON_SOFT_RESET_CP |
+						      RADEON_SOFT_RESET_HI |
+						      RADEON_SOFT_RESET_SE |
+						      RADEON_SOFT_RESET_RE |
+						      RADEON_SOFT_RESET_PP |
+						      RADEON_SOFT_RESET_E2 |
+						      RADEON_SOFT_RESET_RB));
+		RADEON_READ(RADEON_RBBM_SOFT_RESET);
+		RADEON_WRITE(RADEON_RBBM_SOFT_RESET, (rbbm_soft_reset &
+						      ~(RADEON_SOFT_RESET_CP |
+							RADEON_SOFT_RESET_HI |
+							RADEON_SOFT_RESET_SE |
+							RADEON_SOFT_RESET_RE |
+							RADEON_SOFT_RESET_PP |
+							RADEON_SOFT_RESET_E2 |
+							RADEON_SOFT_RESET_RB)));
+		RADEON_READ(RADEON_RBBM_SOFT_RESET);
+		
+		RADEON_WRITE_PLL(RADEON_MCLK_CNTL, mclk_cntl);
+		RADEON_WRITE(RADEON_CLOCK_CNTL_INDEX, clock_cntl_index);
+		RADEON_WRITE(RADEON_RBBM_SOFT_RESET, rbbm_soft_reset);
+	}
 
 	/* Reset the CP ring */
 	radeon_do_cp_reset(dev_priv);
@@ -1844,7 +1871,7 @@ int radeon_cp_init(struct drm_device *de
 	LOCK_TEST_WITH_RETURN(dev, file_priv);
 
 	if (init->func == RADEON_INIT_R300_CP)
-		r300_init_reg_flags();
+		r300_init_reg_flags(dev);
 
 	switch (init->func) {
 	case RADEON_INIT_CP:
@@ -2253,6 +2280,10 @@ int radeon_driver_load(struct drm_device
 	case CHIP_R350:
 	case CHIP_R420:
 	case CHIP_RV410:
+	case CHIP_RV515:
+	case CHIP_R520:
+	case CHIP_RV570:
+	case CHIP_R580:
 		dev_priv->flags |= RADEON_HAS_HIERZ;
 		break;
 	default:
diff -up linux-2.6.23.noarch/drivers/char/drm/radeon_drv.h.r500 linux-2.6.23.noarch/drivers/char/drm/radeon_drv.h
--- linux-2.6.23.noarch/drivers/char/drm/radeon_drv.h.r500	2007-12-12 11:17:09.000000000 +1000
+++ linux-2.6.23.noarch/drivers/char/drm/radeon_drv.h	2007-12-12 11:18:25.000000000 +1000
@@ -123,6 +123,12 @@ enum radeon_family {
 	CHIP_R420,
 	CHIP_RV410,
 	CHIP_RS400,
+	CHIP_RV515,
+	CHIP_R520,
+	CHIP_RV530,
+	CHIP_RV560,
+	CHIP_RV570,
+	CHIP_R580,
 	CHIP_LAST,
 };
 
@@ -383,7 +389,7 @@ extern long radeon_compat_ioctl(struct f
 				unsigned long arg);
 
 /* r300_cmdbuf.c */
-extern void r300_init_reg_flags(void);
+extern void r300_init_reg_flags(struct drm_device *dev);
 
 extern int r300_do_cp_cmdbuf(struct drm_device * dev,
 			     struct drm_file *file_priv,
@@ -455,6 +461,16 @@ extern int r300_do_cp_cmdbuf(struct drm_
 #define RADEON_IGPGART_ENABLE           0x38
 #define RADEON_IGPGART_UNK_39           0x39
 
+#define R520_MC_IND_INDEX 0x70
+#define R520_MC_IND_WR_EN (1<<24)
+#define R520_MC_IND_DATA  0x74
+
+#define RV515_MC_FB_LOCATION 0x01
+#define RV515_MC_AGP_LOCATION 0x02
+
+#define R520_MC_FB_LOCATION 0x04
+#define R520_MC_AGP_LOCATION 0x05
+
 #define RADEON_MPP_TB_CONFIG		0x01c0
 #define RADEON_MEM_CNTL			0x0140
 #define RADEON_MEM_SDRAM_MODE_REG	0x0158
@@ -1005,6 +1021,13 @@ do {									\
 	RADEON_WRITE( RADEON_PCIE_DATA, (val) );			\
 } while (0)
 
+#define RADEON_WRITE_MCIND( addr, val )					\
+	do {								\
+		RADEON_WRITE(R520_MC_IND_INDEX, 0xff0000 | ((addr) & 0xff));	\
+		RADEON_WRITE(R520_MC_IND_DATA, (val));			\
+		RADEON_WRITE(R520_MC_IND_INDEX, 0);	\
+	} while (0)
+
 #define CP_PACKET0( reg, n )						\
 	(RADEON_CP_PACKET0 | ((n) << 16) | ((reg) >> 2))
 #define CP_PACKET0_TABLE( reg, n )					\
diff -up linux-2.6.23.noarch/drivers/char/drm/r300_cmdbuf.c.r500 linux-2.6.23.noarch/drivers/char/drm/r300_cmdbuf.c
--- linux-2.6.23.noarch/drivers/char/drm/r300_cmdbuf.c.r500	2007-12-12 11:17:09.000000000 +1000
+++ linux-2.6.23.noarch/drivers/char/drm/r300_cmdbuf.c	2007-12-12 11:17:39.000000000 +1000
@@ -77,23 +77,31 @@ static int r300_emit_cliprects(drm_radeo
 				return -EFAULT;
 			}
 
-			box.x1 =
-			    (box.x1 +
-			     R300_CLIPRECT_OFFSET) & R300_CLIPRECT_MASK;
-			box.y1 =
-			    (box.y1 +
-			     R300_CLIPRECT_OFFSET) & R300_CLIPRECT_MASK;
-			box.x2 =
-			    (box.x2 +
-			     R300_CLIPRECT_OFFSET) & R300_CLIPRECT_MASK;
-			box.y2 =
-			    (box.y2 +
-			     R300_CLIPRECT_OFFSET) & R300_CLIPRECT_MASK;
+			if ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_RV515) {
+				box.x1 = (box.x1) &
+					R300_CLIPRECT_MASK;
+				box.y1 = (box.y1) &
+					R300_CLIPRECT_MASK;
+				box.x2 = (box.x2) &
+					R300_CLIPRECT_MASK;
+				box.y2 = (box.y2) &
+					R300_CLIPRECT_MASK;
+			} else {
+				box.x1 = (box.x1 + R300_CLIPRECT_OFFSET) &
+					R300_CLIPRECT_MASK;
+				box.y1 = (box.y1 + R300_CLIPRECT_OFFSET) &
+					R300_CLIPRECT_MASK;
+				box.x2 = (box.x2 + R300_CLIPRECT_OFFSET) &
+					R300_CLIPRECT_MASK;
+				box.y2 = (box.y2 + R300_CLIPRECT_OFFSET) &
+					R300_CLIPRECT_MASK;
 
+			}
 			OUT_RING((box.x1 << R300_CLIPRECT_X_SHIFT) |
 				 (box.y1 << R300_CLIPRECT_Y_SHIFT));
 			OUT_RING((box.x2 << R300_CLIPRECT_X_SHIFT) |
 				 (box.y2 << R300_CLIPRECT_Y_SHIFT));
+
 		}
 
 		OUT_RING_REG(R300_RE_CLIPRECT_CNTL, r300_cliprect_cntl[nr - 1]);
@@ -133,9 +141,11 @@ static int r300_emit_cliprects(drm_radeo
 
 static u8 r300_reg_flags[0x10000 >> 2];
 
-void r300_init_reg_flags(void)
+void r300_init_reg_flags(struct drm_device *dev)
 {
 	int i;
+	drm_radeon_private_t *dev_priv = dev->dev_private;
+
 	memset(r300_reg_flags, 0, 0x10000 >> 2);
 #define ADD_RANGE_MARK(reg, count,mark) \
 		for(i=((reg)>>2);i<((reg)>>2)+(count);i++)\
@@ -230,6 +240,9 @@ void r300_init_reg_flags(void)
 	ADD_RANGE(R300_VAP_INPUT_ROUTE_0_0, 8);
 	ADD_RANGE(R300_VAP_INPUT_ROUTE_1_0, 8);
 
+	if ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_RV515) {
+		ADD_RANGE(0x4074, 16);
+	}
 }
 
 static __inline__ int r300_check_range(unsigned reg, int count)


Index: kernel.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/kernel.spec,v
retrieving revision 1.323
retrieving revision 1.324
diff -u -r1.323 -r1.324
--- kernel.spec	18 Dec 2007 22:10:10 -0000	1.323
+++ kernel.spec	19 Dec 2007 03:50:12 -0000	1.324
@@ -639,6 +639,8 @@
 # nouveau + drm fixes
 Patch1802: nouveau-drm.patch
 Patch1803: linux-2.6-ppc32-ucmpdi2.patch
+Patch1804: linux-2.6-drm-radeon-update.patch
+Patch1805: linux-2.6-git-initial-r500-drm.patch
 
 # Work around E1000 corrupt EEPROM problem.
 Patch2000: linux-2.6-e1000-corrupt-eeprom-checksum.patch
@@ -1164,6 +1166,8 @@
 # Nouveau DRM + drm fixes
 ApplyPatch nouveau-drm.patch
 ApplyPatch linux-2.6-ppc32-ucmpdi2.patch
+ApplyPatch linux-2.6-drm-radeon-update.patch
+ApplyPatch linux-2.6-git-initial-r500-drm.patch
 
 # ---------- below all scheduled for 2.6.24 -----------------
 
@@ -1733,6 +1737,9 @@
 %kernel_variant_files -a /%{image_install_path}/xen*-%{KVERREL} -e /etc/ld.so.conf.d/kernelcap-%{KVERREL}.conf %{with_xen} xen
 
 %changelog
+* Wed Dec 19 2007 Dave Airlie <airlied at redhat.com>
+- Update drm upstream patches and add basic r500 drm support
+
 * Tue Dec 18 2007 Chuck Ebbert <cebbert at redhat.com>
 - Enable CIFS upcall support.
 

linux-2.6-drm-mm.patch:

Index: linux-2.6-drm-mm.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/linux-2.6-drm-mm.patch,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- linux-2.6-drm-mm.patch	29 Nov 2007 00:01:53 -0000	1.3
+++ linux-2.6-drm-mm.patch	19 Dec 2007 03:50:12 -0000	1.4
@@ -75,7 +75,7 @@
      http://dri.sourceforge.net/doc/security_low_level.html
 -
 diff --git a/drivers/char/drm/drm.h b/drivers/char/drm/drm.h
-index 82fb3d0..9a4ff13 100644
+index 82fb3d0..c6686f1 100644
 --- a/drivers/char/drm/drm.h
 +++ b/drivers/char/drm/drm.h
 @@ -190,6 +190,7 @@ enum drm_map_type {
@@ -86,7 +86,17 @@
  };
  
  /**
-@@ -470,6 +471,7 @@ struct drm_irq_busid {
+@@ -202,7 +203,8 @@ enum drm_map_flags {
+ 	_DRM_KERNEL = 0x08,	     /**< kernel requires access */
+ 	_DRM_WRITE_COMBINING = 0x10, /**< use write-combining if available */
+ 	_DRM_CONTAINS_LOCK = 0x20,   /**< SHM page that contains lock */
+-	_DRM_REMOVABLE = 0x40	     /**< Removable mapping */
++	_DRM_REMOVABLE = 0x40,	     /**< Removable mapping */
++	_DRM_DRIVER = 0x80	     /**< Managed by driver */
+ };
+ 
+ struct drm_ctx_priv_map {
+@@ -470,6 +472,7 @@ struct drm_irq_busid {
  enum drm_vblank_seq_type {
  	_DRM_VBLANK_ABSOLUTE = 0x0,	/**< Wait for specific vblank sequence number */
  	_DRM_VBLANK_RELATIVE = 0x1,	/**< Wait for given number of vblanks */
@@ -94,7 +104,7 @@
  	_DRM_VBLANK_NEXTONMISS = 0x10000000,	/**< If missed, wait for next vblank */
  	_DRM_VBLANK_SECONDARY = 0x20000000,	/**< Secondary display controller */
  	_DRM_VBLANK_SIGNAL = 0x40000000	/**< Send signal instead of blocking */
-@@ -572,6 +574,271 @@ struct drm_set_version {
+@@ -572,6 +575,271 @@ struct drm_set_version {
  	int drm_dd_minor;
  };
  
@@ -366,7 +376,7 @@
  #define DRM_IOCTL_BASE			'd'
  #define DRM_IO(nr)			_IO(DRM_IOCTL_BASE,nr)
  #define DRM_IOR(nr,type)		_IOR(DRM_IOCTL_BASE,nr,type)
-@@ -634,6 +901,29 @@ struct drm_set_version {
+@@ -634,6 +902,29 @@ struct drm_set_version {
  
  #define DRM_IOCTL_UPDATE_DRAW		DRM_IOW(0x3f, struct drm_update_draw)
  
@@ -4316,7 +4326,7 @@
  			break;
  		}
 diff --git a/drivers/char/drm/drm_drv.c b/drivers/char/drm/drm_drv.c
-index 44a4626..46c3fdb 100644
+index 44a4626..a26e13c 100644
 --- a/drivers/char/drm/drm_drv.c
 +++ b/drivers/char/drm/drm_drv.c
 @@ -117,6 +117,34 @@ static struct drm_ioctl_desc drm_ioctls[] = {
@@ -4363,7 +4373,7 @@
  	if (dev->driver->lastclose)
  		dev->driver->lastclose(dev);
  	DRM_DEBUG("driver lastclose completed\n");
-@@ -196,7 +226,7 @@ int drm_lastclose(struct drm_device * dev)
+@@ -196,12 +226,14 @@ int drm_lastclose(struct drm_device * dev)
  	/* Clear vma list (only built for debugging) */
  	list_for_each_entry_safe(vma, vma_temp, &dev->vmalist, head) {
  		list_del(&vma->head);
@@ -4372,7 +4382,16 @@
  	}
  
  	list_for_each_entry_safe(r_list, list_t, &dev->maplist, head) {
-@@ -228,6 +258,7 @@ int drm_lastclose(struct drm_device * dev)
+-		drm_rmmap_locked(dev, r_list->map);
+-		r_list = NULL;
++		if (!(r_list->map->flags & _DRM_DRIVER)) {
++			drm_rmmap_locked(dev, r_list->map);
++			r_list = NULL;
++		}
+ 	}
+ 
+ 	if (drm_core_check_feature(dev, DRIVER_DMA_QUEUE) && dev->queuelist) {
+@@ -228,6 +260,7 @@ int drm_lastclose(struct drm_device * dev)
  		dev->lock.file_priv = NULL;
  		wake_up_interruptible(&dev->lock.lock_queue);
  	}
@@ -4380,7 +4399,7 @@
  	mutex_unlock(&dev->struct_mutex);
  
  	DRM_DEBUG("lastclose completed\n");
-@@ -255,8 +286,6 @@ int drm_init(struct drm_driver *driver)
+@@ -255,8 +288,6 @@ int drm_init(struct drm_driver *driver)
  
  	DRM_DEBUG("\n");
  
@@ -4389,19 +4408,31 @@
  	for (i = 0; driver->pci_driver.id_table[i].vendor != 0; i++) {
  		pid = (struct pci_device_id *)&driver->pci_driver.id_table[i];
  
-@@ -292,8 +321,11 @@ static void drm_cleanup(struct drm_device * dev)
+@@ -292,10 +323,7 @@ static void drm_cleanup(struct drm_device * dev)
  	}
  
  	drm_lastclose(dev);
+-
+-	drm_ht_remove(&dev->map_hash);
+-
+-	drm_ctxbitmap_cleanup(dev);
 +	drm_fence_manager_takedown(dev);
  
- 	drm_ht_remove(&dev->map_hash);
+ 	if (drm_core_has_MTRR(dev) && drm_core_has_AGP(dev) &&
+ 	    dev->agp && dev->agp->agp_mtrr >= 0) {
+@@ -314,6 +342,11 @@ static void drm_cleanup(struct drm_device * dev)
+ 	if (dev->driver->unload)
+ 		dev->driver->unload(dev);
+ 
++	drm_ht_remove(&dev->map_hash);
 +	drm_mm_takedown(&dev->offset_manager);
 +	drm_ht_remove(&dev->object_hash);
- 
- 	drm_ctxbitmap_cleanup(dev);
- 
-@@ -356,8 +388,32 @@ static const struct file_operations drm_stub_fops = {
++	drm_ctxbitmap_cleanup(dev);
++
+ 	drm_put_head(&dev->primary);
+ 	if (drm_put_dev(dev))
+ 		DRM_ERROR("Cannot unload module\n");
+@@ -356,8 +389,32 @@ static const struct file_operations drm_stub_fops = {
  
  static int __init drm_core_init(void)
  {
@@ -4418,11 +4449,11 @@
 +	 */
 +
 +	avail_memctl_mem = si.totalram - si.totalhigh;
- 
++
 +	/*
 +	 * Avoid overflows
 +	 */
-+
+ 
 +	max_memctl_mem = 1UL << (32 - PAGE_SHIFT);
 +	max_memctl_mem = (max_memctl_mem / si.mem_unit) * PAGE_SIZE;
 +
@@ -4435,7 +4466,7 @@
  	drm_cards_limit =
  	    (drm_cards_limit <
  	     DRM_MAX_MINOR + 1 ? drm_cards_limit : DRM_MAX_MINOR + 1);
-@@ -383,22 +439,24 @@ static int __init drm_core_init(void)
+@@ -383,22 +440,24 @@ static int __init drm_core_init(void)
  		goto err_p3;
  	}
  
@@ -8145,7 +8176,7 @@
 +	DRM_MEMORYBARRIER();
 +}
 diff --git a/drivers/char/drm/i915_dma.c b/drivers/char/drm/i915_dma.c
-index e61a43e..9e5adca 100644
+index e61a43e..a7fba91 100644
 --- a/drivers/char/drm/i915_dma.c
 +++ b/drivers/char/drm/i915_dma.c
 @@ -31,17 +31,6 @@
@@ -9062,7 +9093,7 @@
  	/* i915 has 4 more counters */
  	dev->counters += 4;
  	dev->types[6] = _DRM_STAT_IRQ;
-@@ -791,24 +1289,52 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
+@@ -791,24 +1289,53 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
  	dev->types[8] = _DRM_STAT_SECONDARY;
  	dev->types[9] = _DRM_STAT_DMA;
  
@@ -9078,7 +9109,8 @@
 +	base = drm_get_resource_start(dev, mmio_bar);
 +	size = drm_get_resource_len(dev, mmio_bar);
 +
-+	ret = drm_addmap(dev, base, size, _DRM_REGISTERS, _DRM_KERNEL,
++	ret = drm_addmap(dev, base, size, _DRM_REGISTERS,
++			 _DRM_KERNEL | _DRM_DRIVER,
 +			 &dev_priv->mmio_map);
 +	return ret;
 +}
@@ -9122,7 +9154,7 @@
  }
  
  struct drm_ioctl_desc i915_ioctls[] = {
-@@ -828,7 +1354,9 @@ struct drm_ioctl_desc i915_ioctls[] = {
+@@ -828,7 +1355,9 @@ struct drm_ioctl_desc i915_ioctls[] = {
  	DRM_IOCTL_DEF(DRM_I915_SET_VBLANK_PIPE,  i915_vblank_pipe_set, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY ),
  	DRM_IOCTL_DEF(DRM_I915_GET_VBLANK_PIPE,  i915_vblank_pipe_get, DRM_AUTH ),
  	DRM_IOCTL_DEF(DRM_I915_VBLANK_SWAP, i915_vblank_swap, DRM_AUTH),
@@ -9132,7 +9164,7 @@
  };
  
  int i915_max_ioctl = DRM_ARRAY_SIZE(i915_ioctls);
-@@ -848,3 +1376,9 @@ int i915_driver_device_is_agp(struct drm_device * dev)
+@@ -848,3 +1377,9 @@ int i915_driver_device_is_agp(struct drm_device * dev)
  {
  	return 1;
  }
@@ -11047,7 +11079,7 @@
 +	return 0;
 +}
 diff --git a/drivers/char/drm/i915_irq.c b/drivers/char/drm/i915_irq.c
-index a443f4a..d1621eb 100644
+index a443f4a..1860f28 100644
 --- a/drivers/char/drm/i915_irq.c
 +++ b/drivers/char/drm/i915_irq.c
 @@ -38,6 +38,71 @@
@@ -11511,7 +11543,7 @@
  			spin_unlock_irqrestore(&dev_priv->swaps_lock, irqflags);
  			DRM_DEBUG("Already scheduled\n");
  			return 0;
-@@ -550,8 +690,12 @@ int i915_vblank_swap(struct drm_device *dev, void *data,
+@@ -550,12 +690,16 @@ int i915_vblank_swap(struct drm_device *dev, void *data,
  	DRM_DEBUG("\n");
  
  	vbl_swap->drw_id = swap->drawable;
@@ -11525,6 +11557,11 @@
  
  	spin_lock_irqsave(&dev_priv->swaps_lock, irqflags);
  
+-	list_add_tail((struct list_head *)vbl_swap, &dev_priv->vbl_swaps.head);
++	list_add_tail(&vbl_swap->head, &dev_priv->vbl_swaps.head);
+ 	dev_priv->swaps_pending++;
+ 
+ 	spin_unlock_irqrestore(&dev_priv->swaps_lock, irqflags);
 @@ -569,7 +713,7 @@ void i915_driver_irq_preinstall(struct drm_device * dev)
  {
  	drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
@@ -11581,7 +11618,7 @@
  }
 -
 diff --git a/drivers/char/drm/mga_dma.c b/drivers/char/drm/mga_dma.c
-index c567c34..04998b7 100644
+index c567c34..9d95f60 100644
 --- a/drivers/char/drm/mga_dma.c
 +++ b/drivers/char/drm/mga_dma.c
 @@ -493,7 +493,7 @@ static int mga_do_agp_dma_bootstrap(struct drm_device * dev,
@@ -11611,6 +11648,15 @@
  				dev_priv->agp_textures = NULL;
  				dev_priv->agp_size = 0;
  				dev_priv->agp_handle = 0;
+@@ -998,7 +998,7 @@ static int mga_do_cleanup_dma(struct drm_device *dev, int full_cleanup)
+ 		}
+ 	}
+ 
+-	return 0;
++	return err;
+ }
+ 
+ int mga_dma_init(struct drm_device *dev, void *data,
 diff --git a/drivers/char/drm/mga_drv.h b/drivers/char/drm/mga_drv.h
 index cd94c04..44a9e66 100644
 --- a/drivers/char/drm/mga_drv.h




More information about the fedora-extras-commits mailing list