From: Greg KH <gregkh@suse.de>
To: linux-kernel@vger.kernel.org, stable@kernel.org
Cc: stable-review@kernel.org, torvalds@linux-foundation.org,
akpm@linux-foundation.org, alan@lxorguk.ukuu.org.uk,
Alex Deucher <alexdeucher@gmail.com>,
Dave Airlie <airlied@redhat.com>
Subject: [30/36] drm/radeon/kms/r7xx: add workaround for hw issue with HDP flush
Date: Fri, 06 Aug 2010 12:20:11 -0700 [thread overview]
Message-ID: <20100806192117.169237763@clark.site> (raw)
In-Reply-To: <20100806192649.GA1614@kroah.com>
2.6.34-stable review patch. If anyone has any objections, please let us know.
------------------
From: Alex Deucher <alexdeucher@gmail.com>
commit 812d046915f48236657f02c06d7dc47140e9ceda upstream.
Use of HDP_*_COHERENCY_FLUSH_CNTL can cause a hang in certain
situations. Add workaround.
Signed-off-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/r600.c | 24 ++++++++++++++++++++++--
drivers/gpu/drm/radeon/r600d.h | 1 +
drivers/gpu/drm/radeon/rv770.c | 5 ++++-
drivers/gpu/drm/radeon/rv770d.h | 1 +
4 files changed, 28 insertions(+), 3 deletions(-)
--- a/drivers/gpu/drm/radeon/r600.c
+++ b/drivers/gpu/drm/radeon/r600.c
@@ -361,7 +361,17 @@ void r600_pcie_gart_tlb_flush(struct rad
u32 tmp;
/* flush hdp cache so updates hit vram */
- WREG32(R_005480_HDP_MEM_COHERENCY_FLUSH_CNTL, 0x1);
+ if ((rdev->family >= CHIP_RV770) && (rdev->family <= CHIP_RV740)) {
+ void __iomem *ptr = (void *)rdev->gart.table.vram.ptr;
+ u32 tmp;
+
+ /* r7xx hw bug. write to HDP_DEBUG1 followed by fb read
+ * rather than write to HDP_REG_COHERENCY_FLUSH_CNTL
+ */
+ WREG32(HDP_DEBUG1, 0);
+ tmp = readl((void __iomem *)ptr);
+ } else
+ WREG32(R_005480_HDP_MEM_COHERENCY_FLUSH_CNTL, 0x1);
WREG32(VM_CONTEXT0_INVALIDATION_LOW_ADDR, rdev->mc.gtt_start >> 12);
WREG32(VM_CONTEXT0_INVALIDATION_HIGH_ADDR, (rdev->mc.gtt_end - 1) >> 12);
@@ -2949,5 +2959,15 @@ int r600_debugfs_mc_info_init(struct rad
*/
void r600_ioctl_wait_idle(struct radeon_device *rdev, struct radeon_bo *bo)
{
- WREG32(R_005480_HDP_MEM_COHERENCY_FLUSH_CNTL, 0x1);
+ /* r7xx hw bug. write to HDP_DEBUG1 followed by fb read
+ * rather than write to HDP_REG_COHERENCY_FLUSH_CNTL
+ */
+ if ((rdev->family >= CHIP_RV770) && (rdev->family <= CHIP_RV740)) {
+ void __iomem *ptr = (void *)rdev->gart.table.vram.ptr;
+ u32 tmp;
+
+ WREG32(HDP_DEBUG1, 0);
+ tmp = readl((void __iomem *)ptr);
+ } else
+ WREG32(R_005480_HDP_MEM_COHERENCY_FLUSH_CNTL, 0x1);
}
--- a/drivers/gpu/drm/radeon/r600d.h
+++ b/drivers/gpu/drm/radeon/r600d.h
@@ -245,6 +245,7 @@
#define HDP_NONSURFACE_SIZE 0x2C0C
#define HDP_REG_COHERENCY_FLUSH_CNTL 0x54A0
#define HDP_TILING_CONFIG 0x2F3C
+#define HDP_DEBUG1 0x2F34
#define MC_VM_AGP_TOP 0x2184
#define MC_VM_AGP_BOT 0x2188
--- a/drivers/gpu/drm/radeon/rv770.c
+++ b/drivers/gpu/drm/radeon/rv770.c
@@ -174,7 +174,10 @@ static void rv770_mc_program(struct rade
WREG32((0x2c20 + j), 0x00000000);
WREG32((0x2c24 + j), 0x00000000);
}
- WREG32(HDP_REG_COHERENCY_FLUSH_CNTL, 0);
+ /* r7xx hw bug. Read from HDP_DEBUG1 rather
+ * than writing to HDP_REG_COHERENCY_FLUSH_CNTL
+ */
+ tmp = RREG32(HDP_DEBUG1);
rv515_mc_stop(rdev, &save);
if (r600_mc_wait_for_idle(rdev)) {
--- a/drivers/gpu/drm/radeon/rv770d.h
+++ b/drivers/gpu/drm/radeon/rv770d.h
@@ -128,6 +128,7 @@
#define HDP_NONSURFACE_SIZE 0x2C0C
#define HDP_REG_COHERENCY_FLUSH_CNTL 0x54A0
#define HDP_TILING_CONFIG 0x2F3C
+#define HDP_DEBUG1 0x2F34
#define MC_SHARED_CHMAP 0x2004
#define NOOFCHAN_SHIFT 12
next prev parent reply other threads:[~2010-08-06 19:31 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-08-06 19:26 [00/36] 2.6.34.3-stable review Greg KH
2010-08-06 19:19 ` [01/36] mm: fix ia64 crash when gcore reads gate area Greg KH
2010-08-06 19:19 ` [02/36] NFS: kswapd must not block in nfs_release_page Greg KH
2010-08-06 19:19 ` [03/36] NFS: Fix a typo in include/linux/nfs_fs.h Greg KH
2010-08-06 19:19 ` [04/36] comedi: Uncripple 8255-based DIO subdevices Greg KH
2010-08-06 19:19 ` [05/36] PARISC: led.c - fix potential stack overflow in led_proc_write() Greg KH
2010-08-06 19:19 ` [06/36] arm/imx/gpio: add spinlock protection Greg KH
2010-08-06 19:19 ` [07/36] parisc: pass through \t to early (iodc) console Greg KH
2010-08-06 19:19 ` [08/36] amd64_edac: Fix DCT base address selector Greg KH
2010-08-06 19:19 ` [09/36] amd64_edac: Correct scrub rate setting Greg KH
2010-08-06 19:19 ` [10/36] amd64_edac: Fix operator precendence error Greg KH
2010-08-06 19:19 ` [11/36] e1000e: dont inadvertently re-set INTX_DISABLE Greg KH
2010-08-06 19:19 ` [12/36] e1000e: 82577/82578 PHY register access issues Greg KH
2010-08-06 19:19 ` [13/36] 9p: strlen() doesnt count the terminator Greg KH
2010-08-06 19:19 ` [14/36] igb: Use only a single Tx queue in SR-IOV mode Greg KH
2010-08-06 19:19 ` [15/36] ath9k: enable serialize_regmode for non-PCIE AR9160 Greg KH
2010-08-06 19:19 ` [16/36] ath9k: fix a potential buffer leak in the STA teardown path Greg KH
2010-08-06 19:19 ` [17/36] ath9k_hw: fix an off-by-one error in the PDADC boundaries calculation Greg KH
2010-08-06 19:19 ` [18/36] ath9k: fix TSF after reset on AR913x Greg KH
2010-08-06 19:20 ` [19/36] ath9k: fix yet another buffer leak in the tx aggregation code Greg KH
2010-08-06 19:20 ` [20/36] iwlwifi: fix scan abort Greg KH
2010-08-06 19:20 ` [21/36] cfg80211: ignore spurious deauth Greg KH
2010-08-06 19:20 ` [22/36] cfg80211: dont get expired BSSes Greg KH
2010-08-06 19:20 ` [23/36] mac80211: avoid scheduling while atomic in mesh_rx_plink_frame Greg KH
2010-08-06 19:20 ` [24/36] SCSI: enclosure: fix error path - actually return ERR_PTR() on error Greg KH
2010-08-06 19:20 ` [25/36] GFS2: rename causes kernel Oops Greg KH
2010-08-06 19:20 ` [26/36] KVM: MMU: flush remote tlbs when overwriting spte with different pfn Greg KH
2010-08-06 19:20 ` [27/36] xen: drop xen_sched_clock in favour of using plain wallclock time Greg KH
2010-08-06 19:20 ` [28/36] drm/radeon/kms/igp: sideport is AMD only Greg KH
2010-08-06 19:20 ` [29/36] drm/radeon: add new pci ids Greg KH
2010-08-06 19:20 ` Greg KH [this message]
2010-08-06 19:20 ` [31/36] drm/i915: Check overlay stride errata for i830 and i845 Greg KH
2010-08-06 19:20 ` [32/36] Revert "ssb: Handle Netbook devices where the SPROM address is changed" Greg KH
2010-08-06 19:20 ` [33/36] ssb: do not read SPROM if it does not exist Greg KH
2010-08-06 19:20 ` [34/36] ssb: Look for SPROM at different offset on higher rev CC Greg KH
2010-08-06 19:20 ` [35/36] ssb: fix NULL ptr deref when pcihost_wrapper is used Greg KH
2010-08-06 19:20 ` [36/36] ssb: Handle alternate SSPROM location Greg KH
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20100806192117.169237763@clark.site \
--to=gregkh@suse.de \
--cc=airlied@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=alexdeucher@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=stable-review@kernel.org \
--cc=stable@kernel.org \
--cc=torvalds@linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox