rpms/kernel/devel drm-modesetting-radeon.patch, 1.46, 1.47 kernel.spec, 1.1103, 1.1104

Dave Airlie airlied at fedoraproject.org
Thu Oct 30 04:05:01 UTC 2008


Author: airlied

Update of /cvs/pkgs/rpms/kernel/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv10998

Modified Files:
	drm-modesetting-radeon.patch kernel.spec 
Log Message:
- radeon: try and workaround AGP badness with kms + enable VRAM mtrr


drm-modesetting-radeon.patch:

Index: drm-modesetting-radeon.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/drm-modesetting-radeon.patch,v
retrieving revision 1.46
retrieving revision 1.47
diff -u -r1.46 -r1.47
--- drm-modesetting-radeon.patch	29 Oct 2008 06:54:40 -0000	1.46
+++ drm-modesetting-radeon.patch	30 Oct 2008 04:05:00 -0000	1.47
@@ -1,3 +1,17 @@
+commit 6c478ab791fd0242bf7abf871570d1af0c2285a9
+Author: Dave Airlie <airlied at redhat.com>
+Date:   Thu Oct 30 14:00:39 2008 +1000
+
+    radeon: add mtrr support for VRAM aperture.
+    
+    This speeds things up a bit
+
+commit 465bcd6438c356a8ff2b07d16176826f6a1762c4
+Author: Dave Airlie <airlied at redhat.com>
+Date:   Thu Oct 30 14:00:15 2008 +1000
+
+    radeon: disable AGP for certain chips if not specified until we figure it out
+
 commit 3c57b60805cc6d8bbec85ce147fa8bbd0404cb08
 Author: Dave Airlie <airlied at redhat.com>
 Date:   Wed Oct 29 15:45:47 2008 +1000
@@ -23279,7 +23293,7 @@
 +	return NULL;
 +}
 diff --git a/drivers/gpu/drm/radeon/radeon_cp.c b/drivers/gpu/drm/radeon/radeon_cp.c
-index 59a2132..2be65a5 100644
+index 59a2132..2dc0c7e 100644
 --- a/drivers/gpu/drm/radeon/radeon_cp.c
 +++ b/drivers/gpu/drm/radeon/radeon_cp.c
 @@ -31,6 +31,7 @@
@@ -24866,14 +24880,21 @@
  	if (drm_device_is_agp(dev))
  		dev_priv->flags |= RADEON_IS_AGP;
  	else if (drm_device_is_pcie(dev))
-@@ -1752,33 +2687,123 @@ int radeon_driver_load(struct drm_device *dev, unsigned long flags)
+@@ -1752,7 +2687,119 @@ int radeon_driver_load(struct drm_device *dev, unsigned long flags)
  
  	DRM_DEBUG("%s card detected\n",
  		  ((dev_priv->flags & RADEON_IS_AGP) ? "AGP" : (((dev_priv->flags & RADEON_IS_PCIE) ? "PCIE" : "PCI"))));
 +
-+	if ((dev_priv->flags & RADEON_IS_AGP) && (radeon_agpmode == -1)) {
-+		DRM_INFO("Forcing AGP to PCI mode\n");
-+		dev_priv->flags &= ~RADEON_IS_AGP;
++	if (dev_priv->flags & RADEON_IS_AGP) {
++
++		/* disable AGP for any chips after RV280 if not specified */
++		if ((dev_priv->chip_family > CHIP_RV280) && (radeon_agpmode == 0))
++			radeon_agpmode = -1;
++
++		if (radeon_agpmode == -1) {
++			DRM_INFO("Forcing AGP to PCI mode\n");
++			dev_priv->flags &= ~RADEON_IS_AGP;
++		}
 +	}
 +
 +
@@ -24926,13 +24947,13 @@
 +	}
 +
 +
-+	return ret;
+ 	return ret;
 +modeset_fail:
 +	dev->driver->driver_features &= ~DRIVER_MODESET;
 +	drm_put_minor(&dev->control);
- 	return ret;
- }
- 
++	return ret;
++}
++
 +int radeon_master_create(struct drm_device *dev, struct drm_master *master)
 +{
 +	struct drm_radeon_master_private *master_priv;
@@ -24976,10 +24997,10 @@
 +	drm_free(master_priv, sizeof(*master_priv), DRM_MEM_DRIVER);
 +
 +	master->driver_priv = NULL;
-+}
-+
+ }
+ 
  /* Create mappings for registers and framebuffer so userland doesn't necessarily
-  * have to find them.
+@@ -1760,25 +2807,10 @@ int radeon_driver_load(struct drm_device *dev, unsigned long flags)
   */
  int radeon_driver_firstopen(struct drm_device *dev)
  {
@@ -25005,7 +25026,7 @@
  	return 0;
  }
  
-@@ -1786,9 +2811,44 @@ int radeon_driver_unload(struct drm_device *dev)
+@@ -1786,9 +2818,44 @@ int radeon_driver_unload(struct drm_device *dev)
  {
  	drm_radeon_private_t *dev_priv = dev->dev_private;
  
@@ -26789,7 +26810,7 @@
  }
  
 diff --git a/drivers/gpu/drm/radeon/radeon_drv.h b/drivers/gpu/drm/radeon/radeon_drv.h
-index 4dbb813..f924a84 100644
+index 4dbb813..57d4aab 100644
 --- a/drivers/gpu/drm/radeon/radeon_drv.h
 +++ b/drivers/gpu/drm/radeon/radeon_drv.h
 @@ -34,6 +34,8 @@
@@ -26924,7 +26945,7 @@
 +	uint32_t __user *chunk_data;
 +	uint32_t *kdata;
 +};
-+
+ 
 +struct drm_radeon_cs_parser {
 +	struct drm_device *dev;
 +	struct drm_file *file_priv;
@@ -26966,7 +26987,7 @@
 +
 +typedef struct drm_radeon_private {
 +	drm_radeon_ring_buffer_t ring;
- 
++
 +	bool new_memmap;
 +	bool user_mm_enable; /* userspace enabled the memory manager */
  	int gart_size;
@@ -27010,7 +27031,7 @@
  
  	u32 scratch_ages[5];
  
-@@ -318,6 +423,41 @@ typedef struct drm_radeon_private {
+@@ -318,6 +423,44 @@ typedef struct drm_radeon_private {
  
  	int num_gb_pipes;
  	int track_flush;
@@ -27049,10 +27070,13 @@
 +	struct radeon_pm_regs pmregs;
 +	int irq_emitted;
 +	atomic_t irq_received;
++
++	uint32_t aper_size;
++	int vram_mtrr;
  } drm_radeon_private_t;
  
  typedef struct drm_radeon_buf_priv {
-@@ -332,8 +472,12 @@ typedef struct drm_radeon_kcmd_buffer {
+@@ -332,8 +475,12 @@ typedef struct drm_radeon_kcmd_buffer {
  } drm_radeon_kcmd_buffer_t;
  
  extern int radeon_no_wb;
@@ -27065,7 +27089,7 @@
  
  /* Check whether the given hardware address is inside the framebuffer or the
   * GART area.
-@@ -367,12 +511,9 @@ extern struct drm_buf *radeon_freelist_get(struct drm_device * dev);
+@@ -367,12 +514,9 @@ extern struct drm_buf *radeon_freelist_get(struct drm_device * dev);
  
  extern int radeon_wait_ring(drm_radeon_private_t * dev_priv, int n);
  
@@ -27079,7 +27103,7 @@
  extern int radeon_mem_alloc(struct drm_device *dev, void *data, struct drm_file *file_priv);
  extern int radeon_mem_free(struct drm_device *dev, void *data, struct drm_file *file_priv);
  extern int radeon_mem_init_heap(struct drm_device *dev, void *data, struct drm_file *file_priv);
-@@ -400,16 +541,19 @@ extern int radeon_vblank_crtc_set(struct drm_device *dev, int64_t value);
+@@ -400,16 +544,19 @@ extern int radeon_vblank_crtc_set(struct drm_device *dev, int64_t value);
  extern int radeon_driver_load(struct drm_device *dev, unsigned long flags);
  extern int radeon_driver_unload(struct drm_device *dev);
  extern int radeon_driver_firstopen(struct drm_device *dev);
@@ -27103,7 +27127,7 @@
  /* r300_cmdbuf.c */
  extern void r300_init_reg_flags(struct drm_device *dev);
  
-@@ -417,6 +561,11 @@ extern int r300_do_cp_cmdbuf(struct drm_device *dev,
+@@ -417,6 +564,11 @@ extern int r300_do_cp_cmdbuf(struct drm_device *dev,
  			     struct drm_file *file_priv,
  			     drm_radeon_kcmd_buffer_t *cmdbuf);
  
@@ -27115,7 +27139,7 @@
  /* Flags for stats.boxes
   */
  #define RADEON_BOX_DMA_IDLE      0x1
-@@ -425,10 +574,14 @@ extern int r300_do_cp_cmdbuf(struct drm_device *dev,
+@@ -425,10 +577,14 @@ extern int r300_do_cp_cmdbuf(struct drm_device *dev,
  #define RADEON_BOX_WAIT_IDLE     0x8
  #define RADEON_BOX_TEXTURE_LOAD  0x10
  
@@ -27130,7 +27154,7 @@
  #define RADEON_AGP_COMMAND		0x0f60
  #define RADEON_AGP_COMMAND_PCI_CONFIG   0x0060	/* offset in PCI config */
  #	define RADEON_AGP_ENABLE	(1<<8)
-@@ -447,12 +600,12 @@ extern int r300_do_cp_cmdbuf(struct drm_device *dev,
+@@ -447,12 +603,12 @@ extern int r300_do_cp_cmdbuf(struct drm_device *dev,
   * handling, not bus mastering itself.
   */
  #define RADEON_BUS_CNTL			0x0030
@@ -27148,7 +27172,7 @@
  
  #define RADEON_BUS_CNTL1		0x0034
  #	define RADEON_PMI_BM_DIS		(1 << 2)
-@@ -554,16 +707,6 @@ extern int r300_do_cp_cmdbuf(struct drm_device *dev,
+@@ -554,16 +710,6 @@ extern int r300_do_cp_cmdbuf(struct drm_device *dev,
  #define R520_MC_IND_WR_EN (1 << 24)
  #define R520_MC_IND_DATA  0x74
  
@@ -27165,7 +27189,7 @@
  #define RADEON_MPP_TB_CONFIG		0x01c0
  #define RADEON_MEM_CNTL			0x0140
  #define RADEON_MEM_SDRAM_MODE_REG	0x0158
-@@ -628,14 +771,23 @@ extern int r300_do_cp_cmdbuf(struct drm_device *dev,
+@@ -628,14 +774,23 @@ extern int r300_do_cp_cmdbuf(struct drm_device *dev,
  #define RADEON_SCRATCH_REG3		0x15ec
  #define RADEON_SCRATCH_REG4		0x15f0
  #define RADEON_SCRATCH_REG5		0x15f4
@@ -27192,7 +27216,7 @@
  
  #define RADEON_GEN_INT_CNTL		0x0040
  #	define RADEON_CRTC_VBLANK_MASK		(1 << 0)
-@@ -654,10 +806,11 @@ extern int r300_do_cp_cmdbuf(struct drm_device *dev,
+@@ -654,10 +809,11 @@ extern int r300_do_cp_cmdbuf(struct drm_device *dev,
  #	define RADEON_SW_INT_FIRE		(1 << 26)
  #       define R500_DISPLAY_INT_STATUS          (1 << 0)
  
@@ -27208,7 +27232,7 @@
  
  #define RADEON_ISYNC_CNTL		0x1724
  #	define RADEON_ISYNC_ANY2D_IDLE3D	(1 << 0)
-@@ -696,12 +849,17 @@ extern int r300_do_cp_cmdbuf(struct drm_device *dev,
+@@ -696,12 +852,17 @@ extern int r300_do_cp_cmdbuf(struct drm_device *dev,
  #define RADEON_PP_TXFILTER_1		0x1c6c
  #define RADEON_PP_TXFILTER_2		0x1c84
  
@@ -27232,7 +27256,7 @@
  #define RADEON_RB3D_CNTL		0x1c3c
  #	define RADEON_ALPHA_BLEND_ENABLE	(1 << 0)
  #	define RADEON_PLANE_MASK_ENABLE		(1 << 1)
-@@ -728,11 +886,6 @@ extern int r300_do_cp_cmdbuf(struct drm_device *dev,
+@@ -728,11 +889,6 @@ extern int r300_do_cp_cmdbuf(struct drm_device *dev,
  #	define R300_ZC_FLUSH		        (1 << 0)
  #	define R300_ZC_FREE		        (1 << 1)
  #	define R300_ZC_BUSY		        (1 << 31)
@@ -27244,7 +27268,7 @@
  #define R300_RB3D_DSTCACHE_CTLSTAT              0x4e4c
  #	define R300_RB3D_DC_FLUSH		(2 << 0)
  #	define R300_RB3D_DC_FREE		(2 << 2)
-@@ -740,15 +893,15 @@ extern int r300_do_cp_cmdbuf(struct drm_device *dev,
+@@ -740,15 +896,15 @@ extern int r300_do_cp_cmdbuf(struct drm_device *dev,
  #define RADEON_RB3D_ZSTENCILCNTL	0x1c2c
  #	define RADEON_Z_TEST_MASK		(7 << 4)
  #	define RADEON_Z_TEST_ALWAYS		(7 << 4)
@@ -27264,7 +27288,7 @@
  #define RADEON_RBBM_SOFT_RESET		0x00f0
  #	define RADEON_SOFT_RESET_CP		(1 <<  0)
  #	define RADEON_SOFT_RESET_HI		(1 <<  1)
-@@ -937,7 +1090,7 @@ extern int r300_do_cp_cmdbuf(struct drm_device *dev,
+@@ -937,7 +1093,7 @@ extern int r300_do_cp_cmdbuf(struct drm_device *dev,
  
  #define RADEON_AIC_CNTL			0x01d0
  #	define RADEON_PCIGART_TRANSLATE_EN	(1 << 0)
@@ -27273,7 +27297,7 @@
  #define RADEON_AIC_STAT			0x01d4
  #define RADEON_AIC_PT_BASE		0x01d8
  #define RADEON_AIC_LO_ADDR		0x01dc
-@@ -1009,27 +1162,6 @@ extern int r300_do_cp_cmdbuf(struct drm_device *dev,
+@@ -1009,27 +1165,6 @@ extern int r300_do_cp_cmdbuf(struct drm_device *dev,
  #define RADEON_NUM_VERTICES_SHIFT		16
  
  #define RADEON_COLOR_FORMAT_CI8		2
@@ -27301,7 +27325,7 @@
  
  #define R200_PP_TXCBLEND_0                0x2f00
  #define R200_PP_TXCBLEND_1                0x2f10
-@@ -1140,16 +1272,44 @@ extern int r300_do_cp_cmdbuf(struct drm_device *dev,
+@@ -1140,16 +1275,44 @@ extern int r300_do_cp_cmdbuf(struct drm_device *dev,
  
  #define R200_SE_TCL_POINT_SPRITE_CNTL     0x22c4
  
@@ -27348,7 +27372,7 @@
  #define R500_D1CRTC_STATUS 0x609c
  #define R500_D2CRTC_STATUS 0x689c
  #define R500_CRTC_V_BLANK (1<<0)
-@@ -1190,19 +1350,36 @@ extern int r300_do_cp_cmdbuf(struct drm_device *dev,
+@@ -1190,19 +1353,36 @@ extern int r300_do_cp_cmdbuf(struct drm_device *dev,
  #define RADEON_RING_HIGH_MARK		128
  
  #define RADEON_PCIGART_TABLE_SIZE      (32*1024)
@@ -27392,7 +27416,7 @@
  #define RADEON_WRITE_PCIE(addr, val)					\
  do {									\
  	RADEON_WRITE8(RADEON_PCIE_INDEX,				\
-@@ -1259,7 +1436,7 @@ do {									\
+@@ -1259,7 +1439,7 @@ do {									\
  #define RADEON_WAIT_UNTIL_2D_IDLE() do {				\
  	OUT_RING( CP_PACKET0( RADEON_WAIT_UNTIL, 0 ) );			\
  	OUT_RING( (RADEON_WAIT_2D_IDLECLEAN |				\
@@ -27401,7 +27425,7 @@
  } while (0)
  
  #define RADEON_WAIT_UNTIL_3D_IDLE() do {				\
-@@ -1336,8 +1513,9 @@ do {									\
+@@ -1336,8 +1516,9 @@ do {									\
  } while (0)
  
  #define VB_AGE_TEST_WITH_RETURN( dev_priv )				\
@@ -27413,7 +27437,7 @@
  	if ( sarea_priv->last_dispatch >= RADEON_MAX_VB_AGE ) {		\
  		int __ret = radeon_do_cp_idle( dev_priv );		\
  		if ( __ret ) return __ret;				\
-@@ -1443,4 +1621,146 @@ do {									\
+@@ -1443,4 +1624,146 @@ do {									\
  	write &= mask;						\
  } while (0)
  
@@ -29707,10 +29731,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..f39e8b4
+index 0000000..2e20de3
 --- /dev/null
 +++ b/drivers/gpu/drm/radeon/radeon_gem.c
-@@ -0,0 +1,1591 @@
+@@ -0,0 +1,1597 @@
 +/*
 + * Copyright 2008 Red Hat Inc.
 + *
@@ -30660,6 +30684,10 @@
 +			- dev_priv->fb_location;
 +	}
 +
++	/* add an MTRR for the VRAM */
++	dev_priv->aper_size = aper_size;
++	dev_priv->vram_mtrr = mtrr_add(dev_priv->fb_aper_offset, dev_priv->aper_size, MTRR_TYPE_WRCOMB, 1);
++
 +}
 +
 +/* init memory manager - start with all of VRAM and a 32MB GART aperture for now */
@@ -30750,6 +30778,8 @@
 +		DRM_DEBUG("delaying takedown of VRAM memory\n");
 +	}
 +
++	if (dev_priv->vram_mtrr)
++		mtrr_del(dev_priv->vram_mtrr, dev_priv->fb_aper_offset, dev_priv->aper_size);
 +	mutex_unlock(&dev->struct_mutex);
 +
 +	drm_bo_driver_finish(dev);


Index: kernel.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/kernel.spec,v
retrieving revision 1.1103
retrieving revision 1.1104
diff -u -r1.1103 -r1.1104
--- kernel.spec	30 Oct 2008 02:23:18 -0000	1.1103
+++ kernel.spec	30 Oct 2008 04:05:00 -0000	1.1104
@@ -1884,6 +1884,9 @@
 %kernel_variant_files -k vmlinux %{with_kdump} kdump
 
 %changelog
+* Thu Oct 30 2008 Dave Airlie <airlied at redhat.com> 2.6.27.4-67
+- radeon: try and workaround AGP badness with kms + enable VRAM mtrr
+
 * Wed Oct 29 2008 Dave Jones <davej at redhat.com>
 - Reduce maximum supported CPUs on x86-64 to 64.
 




More information about the scm-commits mailing list