From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex Deucher Subject: Re: [PATCH v2] drm/radeon: Enable DMA_IB_SWAP_ENABLE on big endian hosts. Date: Thu, 24 Jan 2013 14:00:54 -0500 Message-ID: References: <1359049320-4866-1-git-send-email-michel@daenzer.net> <1359050521-24334-1-git-send-email-michel@daenzer.net> Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Return-path: Received: from mail-vc0-f180.google.com (mail-vc0-f180.google.com [209.85.220.180]) by gabe.freedesktop.org (Postfix) with ESMTP id 7C644E6188 for ; Thu, 24 Jan 2013 11:00:55 -0800 (PST) Received: by mail-vc0-f180.google.com with SMTP id fo13so4148649vcb.11 for ; Thu, 24 Jan 2013 11:00:55 -0800 (PST) In-Reply-To: <1359050521-24334-1-git-send-email-michel@daenzer.net> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: dri-devel-bounces+sf-dri-devel=m.gmane.org@lists.freedesktop.org Errors-To: dri-devel-bounces+sf-dri-devel=m.gmane.org@lists.freedesktop.org To: =?ISO-8859-1?Q?Michel_D=E4nzer?= Cc: dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org On Thu, Jan 24, 2013 at 1:02 PM, Michel D=E4nzer wrote: > From: Michel D=E4nzer > > Fixes GPU hang during DMA ring IB test. > > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=3D59672 > > Signed-off-by: Michel D=E4nzer > --- > > v2: The patch fixes real GPU hangs, not just spurious ones. Change the co= mmit > log accordingly. Thanks. Added to my fixes queue. Alex > > drivers/gpu/drm/radeon/ni.c | 8 ++++++-- > drivers/gpu/drm/radeon/r600.c | 8 ++++++-- > 2 files changed, 12 insertions(+), 4 deletions(-) > > diff --git a/drivers/gpu/drm/radeon/ni.c b/drivers/gpu/drm/radeon/ni.c > index 39e8be1..c6ace17 100644 > --- a/drivers/gpu/drm/radeon/ni.c > +++ b/drivers/gpu/drm/radeon/ni.c > @@ -1216,7 +1216,7 @@ void cayman_dma_stop(struct radeon_device *rdev) > int cayman_dma_resume(struct radeon_device *rdev) > { > struct radeon_ring *ring; > - u32 rb_cntl, dma_cntl; > + u32 rb_cntl, dma_cntl, ib_cntl; > u32 rb_bufsz; > u32 reg_offset, wb_offset; > int i, r; > @@ -1265,7 +1265,11 @@ int cayman_dma_resume(struct radeon_device *rdev) > WREG32(DMA_RB_BASE + reg_offset, ring->gpu_addr >> 8); > > /* enable DMA IBs */ > - WREG32(DMA_IB_CNTL + reg_offset, DMA_IB_ENABLE | CMD_VMID= _FORCE); > + ib_cntl =3D DMA_IB_ENABLE | CMD_VMID_FORCE; > +#ifdef __BIG_ENDIAN > + ib_cntl |=3D DMA_IB_SWAP_ENABLE; > +#endif > + WREG32(DMA_IB_CNTL + reg_offset, ib_cntl); > > dma_cntl =3D RREG32(DMA_CNTL + reg_offset); > dma_cntl &=3D ~CTXEMPTY_INT_ENABLE; > diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c > index 2aaf147..cf1b853 100644 > --- a/drivers/gpu/drm/radeon/r600.c > +++ b/drivers/gpu/drm/radeon/r600.c > @@ -2256,7 +2256,7 @@ void r600_dma_stop(struct radeon_device *rdev) > int r600_dma_resume(struct radeon_device *rdev) > { > struct radeon_ring *ring =3D &rdev->ring[R600_RING_TYPE_DMA_INDEX= ]; > - u32 rb_cntl, dma_cntl; > + u32 rb_cntl, dma_cntl, ib_cntl; > u32 rb_bufsz; > int r; > > @@ -2296,7 +2296,11 @@ int r600_dma_resume(struct radeon_device *rdev) > WREG32(DMA_RB_BASE, ring->gpu_addr >> 8); > > /* enable DMA IBs */ > - WREG32(DMA_IB_CNTL, DMA_IB_ENABLE); > + ib_cntl =3D DMA_IB_ENABLE; > +#ifdef __BIG_ENDIAN > + ib_cntl |=3D DMA_IB_SWAP_ENABLE; > +#endif > + WREG32(DMA_IB_CNTL, ib_cntl); > > dma_cntl =3D RREG32(DMA_CNTL); > dma_cntl &=3D ~CTXEMPTY_INT_ENABLE; > -- > 1.7.10.4 >