Revert radeon patches we already have: drm/radeon/kms: add wait idle ioctl for eg->cayman drm/radeon/evergreen/btc/fusion: setup hdp to invalidate and flush when asked Drop individual patches we have: ips-use-interruptible-waits-in-ips-monitor.patch drm-vblank-events-fix-hangs.patch mm-vmscan-correct-use-of-pgdat_balanced-in-sleeping_prematurely.patch mm-vmscan-correctly-check-if-reclaimer-should-schedule-during-shrink_slab.patch
203 lines
7.3 KiB
Diff
203 lines
7.3 KiB
Diff
From 97bfd0acd32e9639c9136e03955d574655d5cc2b Mon Sep 17 00:00:00 2001
|
|
From: Dave Airlie <airlied@redhat.com>
|
|
Date: Thu, 19 May 2011 14:14:43 +1000
|
|
Subject: drm/radeon/kms: add wait idle ioctl for eg->cayman
|
|
|
|
From: Dave Airlie <airlied@redhat.com>
|
|
|
|
commit 97bfd0acd32e9639c9136e03955d574655d5cc2b upstream.
|
|
|
|
None of the latest GPUs had this hooked up, this is necessary for
|
|
correct operation in a lot of cases, however we should test this on a few
|
|
GPUs in these families as we've had problems in this area before.
|
|
|
|
Reviewed-by: Alex Deucher <alexdeucher@gmail.com>
|
|
Signed-off-by: Dave Airlie <airlied@redhat.com>
|
|
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
|
|
|
---
|
|
drivers/gpu/drm/radeon/radeon_asic.c | 4 ++++
|
|
1 file changed, 4 insertions(+)
|
|
|
|
--- a/drivers/gpu/drm/radeon/radeon_asic.c
|
|
+++ b/drivers/gpu/drm/radeon/radeon_asic.c
|
|
@@ -782,6 +782,7 @@ static struct radeon_asic evergreen_asic
|
|
.hpd_fini = &evergreen_hpd_fini,
|
|
.hpd_sense = &evergreen_hpd_sense,
|
|
.hpd_set_polarity = &evergreen_hpd_set_polarity,
|
|
+ .ioctl_wait_idle = r600_ioctl_wait_idle,
|
|
.gui_idle = &r600_gui_idle,
|
|
.pm_misc = &evergreen_pm_misc,
|
|
.pm_prepare = &evergreen_pm_prepare,
|
|
@@ -828,6 +829,7 @@ static struct radeon_asic sumo_asic = {
|
|
.hpd_fini = &evergreen_hpd_fini,
|
|
.hpd_sense = &evergreen_hpd_sense,
|
|
.hpd_set_polarity = &evergreen_hpd_set_polarity,
|
|
+ .ioctl_wait_idle = r600_ioctl_wait_idle,
|
|
.gui_idle = &r600_gui_idle,
|
|
.pm_misc = &evergreen_pm_misc,
|
|
.pm_prepare = &evergreen_pm_prepare,
|
|
@@ -874,6 +876,8 @@ static struct radeon_asic btc_asic = {
|
|
.hpd_fini = &evergreen_hpd_fini,
|
|
.hpd_sense = &evergreen_hpd_sense,
|
|
.hpd_set_polarity = &evergreen_hpd_set_polarity,
|
|
+ .ioctl_wait_idle = r600_ioctl_wait_idle,
|
|
+ .ioctl_wait_idle = r600_ioctl_wait_idle,
|
|
.gui_idle = &r600_gui_idle,
|
|
.pm_misc = &evergreen_pm_misc,
|
|
.pm_prepare = &evergreen_pm_prepare,
|
|
From f25a5c63bfa017498c9adecb24d649ae96ba5c68 Mon Sep 17 00:00:00 2001
|
|
From: Alex Deucher <alexdeucher@gmail.com>
|
|
Date: Thu, 19 May 2011 11:07:57 -0400
|
|
Subject: drm/radeon/evergreen/btc/fusion: setup hdp to invalidate and
|
|
flush when asked
|
|
|
|
From: Alex Deucher <alexdeucher@gmail.com>
|
|
|
|
commit f25a5c63bfa017498c9adecb24d649ae96ba5c68 upstream.
|
|
|
|
This needs to be explicitly set on btc. It's set by default
|
|
on evergreen/fusion, so it fine to just unconditionally enable it for
|
|
all chips.
|
|
|
|
Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
|
|
Signed-off-by: Dave Airlie <airlied@gmail.com>
|
|
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
|
|
|
---
|
|
drivers/gpu/drm/radeon/evergreen.c | 6 +++++-
|
|
drivers/gpu/drm/radeon/evergreend.h | 2 ++
|
|
2 files changed, 7 insertions(+), 1 deletion(-)
|
|
|
|
--- a/drivers/gpu/drm/radeon/evergreen.c
|
|
+++ b/drivers/gpu/drm/radeon/evergreen.c
|
|
@@ -1585,7 +1585,7 @@ static void evergreen_gpu_init(struct ra
|
|
u32 sq_stack_resource_mgmt_2;
|
|
u32 sq_stack_resource_mgmt_3;
|
|
u32 vgt_cache_invalidation;
|
|
- u32 hdp_host_path_cntl;
|
|
+ u32 hdp_host_path_cntl, tmp;
|
|
int i, j, num_shader_engines, ps_thread_count;
|
|
|
|
switch (rdev->family) {
|
|
@@ -2145,6 +2145,10 @@ static void evergreen_gpu_init(struct ra
|
|
for (i = SQ_ALU_CONST_BUFFER_SIZE_HS_0; i < 0x29000; i += 4)
|
|
WREG32(i, 0);
|
|
|
|
+ tmp = RREG32(HDP_MISC_CNTL);
|
|
+ tmp |= HDP_FLUSH_INVALIDATE_CACHE;
|
|
+ WREG32(HDP_MISC_CNTL, tmp);
|
|
+
|
|
hdp_host_path_cntl = RREG32(HDP_HOST_PATH_CNTL);
|
|
WREG32(HDP_HOST_PATH_CNTL, hdp_host_path_cntl);
|
|
|
|
--- a/drivers/gpu/drm/radeon/evergreend.h
|
|
+++ b/drivers/gpu/drm/radeon/evergreend.h
|
|
@@ -64,6 +64,8 @@
|
|
#define GB_BACKEND_MAP 0x98FC
|
|
#define DMIF_ADDR_CONFIG 0xBD4
|
|
#define HDP_ADDR_CONFIG 0x2F48
|
|
+#define HDP_MISC_CNTL 0x2F4C
|
|
+#define HDP_FLUSH_INVALIDATE_CACHE (1 << 0)
|
|
|
|
#define CC_SYS_RB_BACKEND_DISABLE 0x3F88
|
|
#define GC_USER_RB_BACKEND_DISABLE 0x9B7C
|
|
From alexdeucher@gmail.com Mon May 9 16:35:34 2011
|
|
From: Alex Deucher <alexdeucher@gmail.com>
|
|
Date: Fri, 6 May 2011 14:29:55 -0400
|
|
Subject: [stable] [PATCH] drm/radeon/kms: fix gart setup on fusion parts (v2) backport
|
|
To: stable@kernel.org
|
|
Cc: Alex Deucher <alexdeucher@gmail.com>, airlied@redhat.com, gregkh@suse.de
|
|
Message-ID: <1304706595-9781-1-git-send-email-alexdeucher@gmail.com>
|
|
|
|
From: Alex Deucher <alexdeucher@gmail.com>
|
|
|
|
Backport of 8aeb96f80232e9a701b5c4715504f4c9173978bd
|
|
(drm/radeon/kms: fix gart setup on fusion parts (v2))
|
|
to the stable tree.
|
|
|
|
Out of the entire GART/VM subsystem, the hw designers changed
|
|
the location of 3 regs.
|
|
|
|
v2: airlied: add parameter for userspace to work from.
|
|
|
|
Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
|
|
Signed-off-by: Jerome Glisse <jglisse@redhat.com>
|
|
Signed-off-by: Dave Airlie <airlied@redhat.com>
|
|
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
|
---
|
|
drivers/gpu/drm/radeon/evergreen.c | 17 +++++++++--------
|
|
drivers/gpu/drm/radeon/evergreend.h | 5 +++++
|
|
drivers/gpu/drm/radeon/radeon_kms.c | 3 +++
|
|
include/drm/radeon_drm.h | 1 +
|
|
4 files changed, 18 insertions(+), 8 deletions(-)
|
|
|
|
--- a/drivers/gpu/drm/radeon/evergreen.c
|
|
+++ b/drivers/gpu/drm/radeon/evergreen.c
|
|
@@ -869,9 +869,15 @@ int evergreen_pcie_gart_enable(struct ra
|
|
SYSTEM_ACCESS_MODE_NOT_IN_SYS |
|
|
SYSTEM_APERTURE_UNMAPPED_ACCESS_PASS_THRU |
|
|
EFFECTIVE_L1_TLB_SIZE(5) | EFFECTIVE_L1_QUEUE_SIZE(5);
|
|
- WREG32(MC_VM_MD_L1_TLB0_CNTL, tmp);
|
|
- WREG32(MC_VM_MD_L1_TLB1_CNTL, tmp);
|
|
- WREG32(MC_VM_MD_L1_TLB2_CNTL, tmp);
|
|
+ if (rdev->flags & RADEON_IS_IGP) {
|
|
+ WREG32(FUS_MC_VM_MD_L1_TLB0_CNTL, tmp);
|
|
+ WREG32(FUS_MC_VM_MD_L1_TLB1_CNTL, tmp);
|
|
+ WREG32(FUS_MC_VM_MD_L1_TLB2_CNTL, tmp);
|
|
+ } else {
|
|
+ WREG32(MC_VM_MD_L1_TLB0_CNTL, tmp);
|
|
+ WREG32(MC_VM_MD_L1_TLB1_CNTL, tmp);
|
|
+ WREG32(MC_VM_MD_L1_TLB2_CNTL, tmp);
|
|
+ }
|
|
WREG32(MC_VM_MB_L1_TLB0_CNTL, tmp);
|
|
WREG32(MC_VM_MB_L1_TLB1_CNTL, tmp);
|
|
WREG32(MC_VM_MB_L1_TLB2_CNTL, tmp);
|
|
@@ -2930,11 +2936,6 @@ static int evergreen_startup(struct rade
|
|
rdev->asic->copy = NULL;
|
|
dev_warn(rdev->dev, "failed blitter (%d) falling back to memcpy\n", r);
|
|
}
|
|
- /* XXX: ontario has problems blitting to gart at the moment */
|
|
- if (rdev->family == CHIP_PALM) {
|
|
- rdev->asic->copy = NULL;
|
|
- radeon_ttm_set_active_vram_size(rdev, rdev->mc.visible_vram_size);
|
|
- }
|
|
|
|
/* allocate wb buffer */
|
|
r = radeon_wb_init(rdev);
|
|
--- a/drivers/gpu/drm/radeon/evergreend.h
|
|
+++ b/drivers/gpu/drm/radeon/evergreend.h
|
|
@@ -221,6 +221,11 @@
|
|
#define MC_VM_MD_L1_TLB0_CNTL 0x2654
|
|
#define MC_VM_MD_L1_TLB1_CNTL 0x2658
|
|
#define MC_VM_MD_L1_TLB2_CNTL 0x265C
|
|
+
|
|
+#define FUS_MC_VM_MD_L1_TLB0_CNTL 0x265C
|
|
+#define FUS_MC_VM_MD_L1_TLB1_CNTL 0x2660
|
|
+#define FUS_MC_VM_MD_L1_TLB2_CNTL 0x2664
|
|
+
|
|
#define MC_VM_SYSTEM_APERTURE_DEFAULT_ADDR 0x203C
|
|
#define MC_VM_SYSTEM_APERTURE_HIGH_ADDR 0x2038
|
|
#define MC_VM_SYSTEM_APERTURE_LOW_ADDR 0x2034
|
|
--- a/drivers/gpu/drm/radeon/radeon_kms.c
|
|
+++ b/drivers/gpu/drm/radeon/radeon_kms.c
|
|
@@ -205,6 +205,9 @@ int radeon_info_ioctl(struct drm_device
|
|
/* return clock value in KHz */
|
|
value = rdev->clock.spll.reference_freq * 10;
|
|
break;
|
|
+ case RADEON_INFO_FUSION_GART_WORKING:
|
|
+ value = 1;
|
|
+ break;
|
|
default:
|
|
DRM_DEBUG_KMS("Invalid request %d\n", info->request);
|
|
return -EINVAL;
|
|
--- a/include/drm/radeon_drm.h
|
|
+++ b/include/drm/radeon_drm.h
|
|
@@ -908,6 +908,7 @@ struct drm_radeon_cs {
|
|
#define RADEON_INFO_WANT_HYPERZ 0x07
|
|
#define RADEON_INFO_WANT_CMASK 0x08 /* get access to CMASK on r300 */
|
|
#define RADEON_INFO_CLOCK_CRYSTAL_FREQ 0x09 /* clock crystal frequency */
|
|
+#define RADEON_INFO_FUSION_GART_WORKING 0x0c /* fusion writes to GTT were broken before this */
|
|
|
|
struct drm_radeon_info {
|
|
uint32_t request;
|