rpms/kernel/F-10 drm-modesetting-radeon.patch, 1.65, 1.66 kernel.spec, 1.1171, 1.1172
Dave Airlie
airlied at fedoraproject.org
Wed Dec 3 00:25:44 UTC 2008
- Previous message (by thread): rpms/fetchlog/devel .cvsignore, 1.8, 1.9 fetchlog.spec, 1.11, 1.12 sources, 1.9, 1.10
- Next message (by thread): rpms/liberation-fonts/devel .cvsignore, 1.7, 1.8 liberation-fonts.spec, 1.23, 1.24 sources, 1.10, 1.11
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Author: airlied
Update of /cvs/pkgs/rpms/kernel/F-10
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv28324
Modified Files:
drm-modesetting-radeon.patch kernel.spec
Log Message:
- radeon: fix AGP harder than the last time.
drm-modesetting-radeon.patch:
Index: drm-modesetting-radeon.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-10/drm-modesetting-radeon.patch,v
retrieving revision 1.65
retrieving revision 1.66
diff -u -r1.65 -r1.66
--- drm-modesetting-radeon.patch 2 Dec 2008 02:56:50 -0000 1.65
+++ drm-modesetting-radeon.patch 3 Dec 2008 00:25:39 -0000 1.66
@@ -1,3 +1,13 @@
+commit 09daed1f3e4942496793c3411aee485cb97eb694
+Author: Dave Airlie <airlied at redhat.com>
+Date: Wed Dec 3 20:28:05 2008 +1000
+
+ radeon: AGP fixes round 2.
+
+ More I can't believe its not AGP fixes.
+ Limit the AGP aperture to the GART size, and init the registers
+ in the right place
+
commit 4a7eb33e9c27c28129c07123c0878e3e603c937e
Author: Dave Airlie <airlied at redhat.com>
Date: Tue Dec 2 12:49:17 2008 +1000
@@ -24269,7 +24279,7 @@
+ return NULL;
+}
diff --git a/drivers/gpu/drm/radeon/radeon_cp.c b/drivers/gpu/drm/radeon/radeon_cp.c
-index dcebb4b..e0f7284 100644
+index dcebb4b..7688cde 100644
--- a/drivers/gpu/drm/radeon/radeon_cp.c
+++ b/drivers/gpu/drm/radeon/radeon_cp.c
@@ -31,6 +31,7 @@
@@ -24306,7 +24316,7 @@
}
u32 radeon_read_fb_location(drm_radeon_private_t *dev_priv)
-@@ -86,33 +104,71 @@ u32 radeon_read_fb_location(drm_radeon_private_t *dev_priv)
+@@ -86,39 +104,77 @@ u32 radeon_read_fb_location(drm_radeon_private_t *dev_priv)
else if (((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS690) ||
((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS740))
return RS690_READ_MCIND(dev_priv, RS690_MC_FB_LOCATION);
@@ -24366,7 +24376,7 @@
}
-static void radeon_write_agp_location(drm_radeon_private_t *dev_priv, u32 agp_loc)
-+static void radeon_write_agp_location(drm_radeon_private_t *dev_priv, u32 agp_loc, u32 agp_loc_hi)
++void radeon_write_agp_location(drm_radeon_private_t *dev_priv, u32 agp_loc, u32 agp_loc_hi)
{
if ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV515)
R500_WRITE_MCIND(RV515_MC_AGP_LOCATION, agp_loc);
@@ -24381,6 +24391,13 @@
R500_WRITE_MCIND(R520_MC_AGP_LOCATION, agp_loc);
else
RADEON_WRITE(RADEON_MC_AGP_LOCATION, agp_loc);
+ }
+
+-static void radeon_write_agp_base(drm_radeon_private_t *dev_priv, u64 agp_base)
++void radeon_write_agp_base(drm_radeon_private_t *dev_priv, u64 agp_base)
+ {
+ u32 agp_base_hi = upper_32_bits(agp_base);
+ u32 agp_base_lo = agp_base & 0xffffffff;
@@ -144,20 +200,116 @@ static void radeon_write_agp_base(drm_radeon_private_t *dev_priv, u64 agp_base)
}
}
@@ -24405,7 +24422,9 @@
+ RADEON_WRITE(RADEON_BUS_CNTL, tmp);
+ } /* PCIE cards appears to not need this */
+}
-+
+
+- RADEON_WRITE8(RADEON_CLOCK_CNTL_INDEX, addr & 0x1f);
+- return RADEON_READ(RADEON_CLOCK_CNTL_DATA);
+void radeon_pll_errata_after_index(struct drm_radeon_private *dev_priv)
+{
+ if (!(dev_priv->pll_errata & CHIP_ERRATA_PLL_DUMMYREADS))
@@ -24442,9 +24461,7 @@
+u32 RADEON_READ_PLL(struct drm_radeon_private *dev_priv, int addr)
+{
+ uint32_t data;
-
-- RADEON_WRITE8(RADEON_CLOCK_CNTL_INDEX, addr & 0x1f);
-- return RADEON_READ(RADEON_CLOCK_CNTL_DATA);
++
+ RADEON_WRITE8(RADEON_CLOCK_CNTL_INDEX, addr & 0x3f);
+ radeon_pll_errata_after_index(dev_priv);
+ data = RADEON_READ(RADEON_CLOCK_CNTL_DATA);
@@ -24675,26 +24692,26 @@
- RADEON_WRITE(RADEON_BUS_CNTL, tmp);
- } /* PCIE cards appears to not need this */
+ radeon_enable_bm(dev_priv);
-+
-+ dev_priv->scratch[0] = 0;
-+ RADEON_WRITE(RADEON_LAST_FRAME_REG, 0);
-+
-+ dev_priv->scratch[1] = 0;
-+ RADEON_WRITE(RADEON_LAST_DISPATCH_REG, 0);
- dev_priv->sarea_priv->last_frame = dev_priv->scratch[0] = 0;
- RADEON_WRITE(RADEON_LAST_FRAME_REG, dev_priv->sarea_priv->last_frame);
-+ dev_priv->scratch[2] = 0;
-+ RADEON_WRITE(RADEON_LAST_CLEAR_REG, 0);
++ dev_priv->scratch[0] = 0;
++ RADEON_WRITE(RADEON_LAST_FRAME_REG, 0);
- dev_priv->sarea_priv->last_dispatch = dev_priv->scratch[1] = 0;
- RADEON_WRITE(RADEON_LAST_DISPATCH_REG,
- dev_priv->sarea_priv->last_dispatch);
-+ dev_priv->scratch[3] = 0;
-+ RADEON_WRITE(RADEON_LAST_SWI_REG, 0);
++ dev_priv->scratch[1] = 0;
++ RADEON_WRITE(RADEON_LAST_DISPATCH_REG, 0);
- dev_priv->sarea_priv->last_clear = dev_priv->scratch[2] = 0;
- RADEON_WRITE(RADEON_LAST_CLEAR_REG, dev_priv->sarea_priv->last_clear);
++ dev_priv->scratch[2] = 0;
++ RADEON_WRITE(RADEON_LAST_CLEAR_REG, 0);
++
++ dev_priv->scratch[3] = 0;
++ RADEON_WRITE(RADEON_LAST_SWI_REG, 0);
++
+ dev_priv->scratch[4] = 0;
+ RADEON_WRITE(RADEON_SCRATCH_REG4, 0);
+
@@ -25159,7 +25176,7 @@
LOCK_TEST_WITH_RETURN(dev, file_priv);
return radeon_do_engine_reset(dev);
-@@ -1711,6 +1940,739 @@ int radeon_cp_buffers(struct drm_device *dev, void *data, struct drm_file *file_
+@@ -1711,6 +1940,632 @@ int radeon_cp_buffers(struct drm_device *dev, void *data, struct drm_file *file_
return ret;
}
@@ -25639,108 +25656,6 @@
+ return 0;
+}
+
-+#if __OS_HAS_AGP
-+int radeon_modeset_agp_init(struct drm_device *dev)
-+{
-+ drm_radeon_private_t *dev_priv = dev->dev_private;
-+ struct drm_agp_mode mode;
-+ struct drm_agp_info info;
-+ int ret;
-+ int default_mode;
-+ uint32_t agp_status;
-+ bool is_v3;
-+
-+ /* Acquire AGP. */
-+ ret = drm_agp_acquire(dev);
-+ if (ret) {
-+ DRM_ERROR("Unable to acquire AGP: %d\n", ret);
-+ return ret;
-+ }
-+
-+ ret = drm_agp_info(dev, &info);
-+ if (ret) {
-+ DRM_ERROR("Unable to get AGP info: %d\n", ret);
-+ return ret;
-+ }
-+
-+ mode.mode = info.mode;
-+
-+ agp_status = (RADEON_READ(RADEON_AGP_STATUS) | RADEON_AGPv3_MODE) & mode.mode;
-+ is_v3 = !!(agp_status & RADEON_AGPv3_MODE);
-+
-+ if (is_v3) {
-+ default_mode = (agp_status & RADEON_AGPv3_8X_MODE) ? 8 : 4;
-+ } else {
-+ if (agp_status & RADEON_AGP_4X_MODE) default_mode = 4;
-+ else if (agp_status & RADEON_AGP_2X_MODE) default_mode = 2;
-+ else default_mode = 1;
-+ }
-+
-+ if (radeon_agpmode > 0) {
-+ if ((radeon_agpmode < (is_v3 ? 4 : 1)) ||
-+ (radeon_agpmode > (is_v3 ? 8 : 4)) ||
-+ (radeon_agpmode & (radeon_agpmode - 1))) {
-+ DRM_ERROR("Illegal AGP Mode: %d (valid %s), leaving at %d\n",
-+ radeon_agpmode, is_v3 ? "4, 8" : "1, 2, 4",
-+ default_mode);
-+ radeon_agpmode = default_mode;
-+ }
-+ else
-+ DRM_INFO("AGP mode requested: %d\n", radeon_agpmode);
-+ } else
-+ radeon_agpmode = default_mode;
-+
-+ mode.mode &= ~RADEON_AGP_MODE_MASK;
-+ if (is_v3) {
-+ switch(radeon_agpmode) {
-+ case 8:
-+ mode.mode |= RADEON_AGPv3_8X_MODE;
-+ break;
-+ case 4:
-+ default:
-+ mode.mode |= RADEON_AGPv3_4X_MODE;
-+ break;
-+ }
-+ } else {
-+ switch(radeon_agpmode) {
-+ case 4: mode.mode |= RADEON_AGP_4X_MODE;
-+ case 2: mode.mode |= RADEON_AGP_2X_MODE;
-+ case 1:
-+ default:
-+ mode.mode |= RADEON_AGP_1X_MODE;
-+ break;
-+ }
-+ }
-+
-+ mode.mode &= ~RADEON_AGP_FW_MODE; /* disable fw */
-+
-+ ret = drm_agp_enable(dev, mode);
-+ if (ret) {
-+ DRM_ERROR("Unable to enable AGP (mode = 0x%lx)\n", mode.mode);
-+ return ret;
-+ }
-+
-+ /* workaround some hw issues */
-+ if (dev_priv->chip_family < CHIP_R200) {
-+ RADEON_WRITE(RADEON_AGP_CNTL, RADEON_READ(RADEON_AGP_CNTL) | 0x000e0000);
-+ }
-+
-+ radeon_write_agp_base(dev_priv, dev->agp->base);
-+
-+ radeon_write_agp_location(dev_priv,
-+ (((dev_priv->gart_vm_start - 1 +
-+ dev_priv->gart_size) & 0xffff0000) |
-+ (dev_priv->gart_vm_start >> 16)), 0);
-+ return 0;
-+}
-+
-+void radeon_modeset_agp_destroy(struct drm_device *dev)
-+{
-+ if (dev->agp->acquired)
-+ drm_agp_release(dev);
-+}
-+#endif
-+
+int radeon_modeset_cp_init(struct drm_device *dev)
+{
+ drm_radeon_private_t *dev_priv = dev->dev_private;
@@ -25775,11 +25690,6 @@
+ /* turn off HDP read cache for now */
+ RADEON_WRITE(RADEON_HOST_PATH_CNTL, RADEON_READ(RADEON_HOST_PATH_CNTL) | RADEON_HP_LIN_RD_CACHE_DIS);
+
-+#if __OS_HAS_AGP
-+ if (dev_priv->flags & RADEON_IS_AGP)
-+ radeon_modeset_agp_init(dev);
-+#endif
-+
+ return radeon_modeset_cp_resume(dev);
+}
+
@@ -25899,7 +25809,7 @@
int radeon_driver_load(struct drm_device *dev, unsigned long flags)
{
drm_radeon_private_t *dev_priv;
-@@ -1724,6 +2686,8 @@ int radeon_driver_load(struct drm_device *dev, unsigned long flags)
+@@ -1724,6 +2579,8 @@ int radeon_driver_load(struct drm_device *dev, unsigned long flags)
dev->dev_private = (void *)dev_priv;
dev_priv->flags = flags;
@@ -25908,7 +25818,7 @@
switch (flags & RADEON_FAMILY_MASK) {
case CHIP_R100:
case CHIP_RV200:
-@@ -1744,6 +2708,18 @@ int radeon_driver_load(struct drm_device *dev, unsigned long flags)
+@@ -1744,6 +2601,18 @@ int radeon_driver_load(struct drm_device *dev, unsigned long flags)
break;
}
@@ -25927,7 +25837,7 @@
if (drm_device_is_agp(dev))
dev_priv->flags |= RADEON_IS_AGP;
else if (drm_device_is_pcie(dev))
-@@ -1751,9 +2727,34 @@ int radeon_driver_load(struct drm_device *dev, unsigned long flags)
+@@ -1751,9 +2620,34 @@ int radeon_driver_load(struct drm_device *dev, unsigned long flags)
else
dev_priv->flags |= RADEON_IS_PCI;
@@ -25963,7 +25873,7 @@
if (ret != 0)
return ret;
-@@ -1763,28 +2764,122 @@ int radeon_driver_load(struct drm_device *dev, unsigned long flags)
+@@ -1763,28 +2657,122 @@ int radeon_driver_load(struct drm_device *dev, unsigned long flags)
return ret;
}
@@ -26097,7 +26007,7 @@
return 0;
}
-@@ -1793,6 +2888,18 @@ int radeon_driver_unload(struct drm_device *dev)
+@@ -1793,6 +2781,14 @@ int radeon_driver_unload(struct drm_device *dev)
{
drm_radeon_private_t *dev_priv = dev->dev_private;
@@ -26105,10 +26015,6 @@
+ drm_irq_uninstall(dev);
+ radeon_modeset_cleanup(dev);
+ radeon_gem_mm_fini(dev);
-+#if __OS_HAS_AGP
-+ if (dev_priv->flags & RADEON_IS_AGP)
-+ radeon_modeset_agp_destroy(dev);
-+#endif
+ }
+
+ drm_rmmap(dev, dev_priv->mmio);
@@ -26116,7 +26022,7 @@
DRM_DEBUG("\n");
drm_rmmap(dev, dev_priv->mmio);
-@@ -1802,3 +2909,63 @@ int radeon_driver_unload(struct drm_device *dev)
+@@ -1802,3 +2798,63 @@ int radeon_driver_unload(struct drm_device *dev)
dev->dev_private = NULL;
return 0;
}
@@ -27942,7 +27848,7 @@
}
diff --git a/drivers/gpu/drm/radeon/radeon_drv.h b/drivers/gpu/drm/radeon/radeon_drv.h
-index 7a18378..dec86db 100644
+index 7a18378..58c71fa 100644
--- a/drivers/gpu/drm/radeon/radeon_drv.h
+++ b/drivers/gpu/drm/radeon/radeon_drv.h
@@ -34,6 +34,8 @@
@@ -28598,7 +28504,7 @@
#define OUT_RING( x ) do { \
if ( RADEON_VERBOSE ) { \
-@@ -1443,4 +1625,149 @@ do { \
+@@ -1443,4 +1625,151 @@ do { \
write &= mask; \
} while (0)
@@ -28747,6 +28653,8 @@
+extern int r300_check_range(unsigned reg, int count);
+extern int r300_get_reg_flags(unsigned reg);
+int radeon_gem_prelocate(struct drm_radeon_cs_parser *parser);
++void radeon_write_agp_location(drm_radeon_private_t *dev_priv, u32 agp_loc, u32 agp_loc_hi);
++void radeon_write_agp_base(drm_radeon_private_t *dev_priv, u64 agp_base);
#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
@@ -30901,10 +30809,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..9980a9f
+index 0000000..e5e21a5
--- /dev/null
+++ b/drivers/gpu/drm/radeon/radeon_gem.c
-@@ -0,0 +1,1677 @@
+@@ -0,0 +1,1797 @@
+/*
+ * Copyright 2008 Red Hat Inc.
+ *
@@ -31538,6 +31446,17 @@
+ /* gart values setup - start the GART */
+ if (dev_priv->flags & RADEON_IS_AGP) {
+ radeon_set_pcigart(dev_priv, 0);
++ /* enable AGP GART bits */
++
++ DRM_INFO("setting agp_base to %x\n", dev->agp->base);
++ radeon_write_agp_base(dev_priv, dev->agp->base);
++
++ DRM_INFO("setting agp_location to %x\n", dev_priv->gart_vm_start);
++ radeon_write_agp_location(dev_priv,
++ (((dev_priv->gart_vm_start - 1 +
++ dev_priv->gart_size) & 0xffff0000) |
++ (dev_priv->gart_vm_start >> 16)), 0);
++
+ } else {
+ radeon_set_pcigart(dev_priv, 1);
+ }
@@ -31870,6 +31789,101 @@
+
+}
+
++#if __OS_HAS_AGP
++int radeon_modeset_agp_init(struct drm_device *dev)
++{
++ drm_radeon_private_t *dev_priv = dev->dev_private;
++ struct drm_agp_mode mode;
++ struct drm_agp_info info;
++ int ret;
++ int default_mode;
++ uint32_t agp_status;
++ bool is_v3;
++
++ /* Acquire AGP. */
++ ret = drm_agp_acquire(dev);
++ if (ret) {
++ DRM_ERROR("Unable to acquire AGP: %d\n", ret);
++ return ret;
++ }
++
++ ret = drm_agp_info(dev, &info);
++ if (ret) {
++ DRM_ERROR("Unable to get AGP info: %d\n", ret);
++ return ret;
++ }
++
++ mode.mode = info.mode;
++
++ agp_status = (RADEON_READ(RADEON_AGP_STATUS) | RADEON_AGPv3_MODE) & mode.mode;
++ is_v3 = !!(agp_status & RADEON_AGPv3_MODE);
++
++ if (is_v3) {
++ default_mode = (agp_status & RADEON_AGPv3_8X_MODE) ? 8 : 4;
++ } else {
++ if (agp_status & RADEON_AGP_4X_MODE) default_mode = 4;
++ else if (agp_status & RADEON_AGP_2X_MODE) default_mode = 2;
++ else default_mode = 1;
++ }
++
++ if (radeon_agpmode > 0) {
++ if ((radeon_agpmode < (is_v3 ? 4 : 1)) ||
++ (radeon_agpmode > (is_v3 ? 8 : 4)) ||
++ (radeon_agpmode & (radeon_agpmode - 1))) {
++ DRM_ERROR("Illegal AGP Mode: %d (valid %s), leaving at %d\n",
++ radeon_agpmode, is_v3 ? "4, 8" : "1, 2, 4",
++ default_mode);
++ radeon_agpmode = default_mode;
++ }
++ else
++ DRM_INFO("AGP mode requested: %d\n", radeon_agpmode);
++ } else
++ radeon_agpmode = default_mode;
++
++ mode.mode &= ~RADEON_AGP_MODE_MASK;
++ if (is_v3) {
++ switch(radeon_agpmode) {
++ case 8:
++ mode.mode |= RADEON_AGPv3_8X_MODE;
++ break;
++ case 4:
++ default:
++ mode.mode |= RADEON_AGPv3_4X_MODE;
++ break;
++ }
++ } else {
++ switch(radeon_agpmode) {
++ case 4: mode.mode |= RADEON_AGP_4X_MODE;
++ case 2: mode.mode |= RADEON_AGP_2X_MODE;
++ case 1:
++ default:
++ mode.mode |= RADEON_AGP_1X_MODE;
++ break;
++ }
++ }
++
++ mode.mode &= ~RADEON_AGP_FW_MODE; /* disable fw */
++
++ ret = drm_agp_enable(dev, mode);
++ if (ret) {
++ DRM_ERROR("Unable to enable AGP (mode = 0x%lx)\n", mode.mode);
++ return ret;
++ }
++
++ /* workaround some hw issues */
++ if (dev_priv->chip_family < CHIP_R200) {
++ RADEON_WRITE(RADEON_AGP_CNTL, RADEON_READ(RADEON_AGP_CNTL) | 0x000e0000);
++ }
++ return 0;
++}
++
++void radeon_modeset_agp_destroy(struct drm_device *dev)
++{
++ if (dev->agp->acquired)
++ drm_agp_release(dev);
++}
++#endif
++
+/* init memory manager - start with all of VRAM and a 32MB GART aperture for now */
+int radeon_gem_mm_init(struct drm_device *dev)
+{
@@ -31895,6 +31909,15 @@
+ ((dev_priv->mm.vram_visible) >> PAGE_SHIFT) - 16,
+ 0);
+
++ /* need AGP to work out sizes */
++#if __OS_HAS_AGP
++ if (dev_priv->flags & RADEON_IS_AGP) {
++ radeon_modeset_agp_init(dev);
++
++ if (dev->agp->agp_info.aper_size < radeon_gart_size)
++ radeon_gart_size = dev->agp->agp_info.aper_size;
++ }
++#endif
+
+ if (dev_priv->chip_family > CHIP_R600) {
+ dev_priv->mm_enabled = true;
@@ -31958,6 +31981,11 @@
+ }
+ }
+
++#if __OS_HAS_AGP
++ if (dev_priv->flags & RADEON_IS_AGP)
++ radeon_modeset_agp_destroy(dev);
++#endif
++
+ if (drm_bo_clean_mm(dev, DRM_BO_MEM_VRAM, 1)) {
+ DRM_DEBUG("delaying takedown of VRAM memory\n");
+ }
Index: kernel.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-10/kernel.spec,v
retrieving revision 1.1171
retrieving revision 1.1172
diff -u -r1.1171 -r1.1172
--- kernel.spec 2 Dec 2008 21:32:49 -0000 1.1171
+++ kernel.spec 3 Dec 2008 00:25:40 -0000 1.1172
@@ -1929,6 +1929,9 @@
%kernel_variant_files -k vmlinux %{with_kdump} kdump
%changelog
+* Tue Dec 03 2008 Dave Airlie <airlied at redhat.com> 2.6.27.7-136
+- radeon: fix AGP harder than the last time.
+
* Tue Dec 02 2008 John W. Linville <linville at redhat.com> 2.6.27.7-135
- Backported ath9k DMA fixes from pre-2.6.28
- Drop patch to disable ath9k when swiotlb is in use
- Previous message (by thread): rpms/fetchlog/devel .cvsignore, 1.8, 1.9 fetchlog.spec, 1.11, 1.12 sources, 1.9, 1.10
- Next message (by thread): rpms/liberation-fonts/devel .cvsignore, 1.7, 1.8 liberation-fonts.spec, 1.23, 1.24 sources, 1.10, 1.11
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the fedora-extras-commits
mailing list