[PATCH] drm/radeon: fix fence driver for dma ring when wb is disabled

2012-12-12 Thread Alex Deucher
On Wed, Dec 12, 2012 at 4:43 PM,   wrote:
> From: Jerome Glisse 
>
> The dma ring can't write to register thus have to write to memory
> its fence value. This ensure that it doesn't try to use scratch
> register for dma ring fence driver.
>
> Signed-off-by: Jerome Glisse 

Reviewed-by: Alex Deucher 

> ---
>  drivers/gpu/drm/radeon/r600.c | 3 ++-
>  drivers/gpu/drm/radeon/radeon_fence.c | 2 +-
>  2 files changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
> index a76eca1..2aaf147 100644
> --- a/drivers/gpu/drm/radeon/r600.c
> +++ b/drivers/gpu/drm/radeon/r600.c
> @@ -2533,11 +2533,12 @@ void r600_dma_fence_ring_emit(struct radeon_device 
> *rdev,
>  {
> struct radeon_ring *ring = >ring[fence->ring];
> u64 addr = rdev->fence_drv[fence->ring].gpu_addr;
> +
> /* write the fence */
> radeon_ring_write(ring, DMA_PACKET(DMA_PACKET_FENCE, 0, 0, 0));
> radeon_ring_write(ring, addr & 0xfffc);
> radeon_ring_write(ring, (upper_32_bits(addr) & 0xff));
> -   radeon_ring_write(ring, fence->seq);
> +   radeon_ring_write(ring, lower_32_bits(fence->seq));
> /* generate an interrupt */
> radeon_ring_write(ring, DMA_PACKET(DMA_PACKET_TRAP, 0, 0, 0));
>  }
> diff --git a/drivers/gpu/drm/radeon/radeon_fence.c 
> b/drivers/gpu/drm/radeon/radeon_fence.c
> index 22bd6c2..410a975 100644
> --- a/drivers/gpu/drm/radeon/radeon_fence.c
> +++ b/drivers/gpu/drm/radeon/radeon_fence.c
> @@ -772,7 +772,7 @@ int radeon_fence_driver_start_ring(struct radeon_device 
> *rdev, int ring)
> int r;
>
> radeon_scratch_free(rdev, rdev->fence_drv[ring].scratch_reg);
> -   if (rdev->wb.use_event) {
> +   if (rdev->wb.use_event || !radeon_ring_supports_scratch_reg(rdev, 
> >ring[ring])) {
> rdev->fence_drv[ring].scratch_reg = 0;
> index = R600_WB_EVENT_OFFSET + ring * 4;
> } else {
> --
> 1.8.0
>
> ___
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel


[PATCH] drm/radeon: fix fence driver for dma ring when wb is disabled

2012-12-12 Thread j.gli...@gmail.com
From: Jerome Glisse 

The dma ring can't write to register thus have to write to memory
its fence value. This ensure that it doesn't try to use scratch
register for dma ring fence driver.

Signed-off-by: Jerome Glisse 
---
 drivers/gpu/drm/radeon/r600.c | 3 ++-
 drivers/gpu/drm/radeon/radeon_fence.c | 2 +-
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
index a76eca1..2aaf147 100644
--- a/drivers/gpu/drm/radeon/r600.c
+++ b/drivers/gpu/drm/radeon/r600.c
@@ -2533,11 +2533,12 @@ void r600_dma_fence_ring_emit(struct radeon_device 
*rdev,
 {
struct radeon_ring *ring = >ring[fence->ring];
u64 addr = rdev->fence_drv[fence->ring].gpu_addr;
+
/* write the fence */
radeon_ring_write(ring, DMA_PACKET(DMA_PACKET_FENCE, 0, 0, 0));
radeon_ring_write(ring, addr & 0xfffc);
radeon_ring_write(ring, (upper_32_bits(addr) & 0xff));
-   radeon_ring_write(ring, fence->seq);
+   radeon_ring_write(ring, lower_32_bits(fence->seq));
/* generate an interrupt */
radeon_ring_write(ring, DMA_PACKET(DMA_PACKET_TRAP, 0, 0, 0));
 }
diff --git a/drivers/gpu/drm/radeon/radeon_fence.c 
b/drivers/gpu/drm/radeon/radeon_fence.c
index 22bd6c2..410a975 100644
--- a/drivers/gpu/drm/radeon/radeon_fence.c
+++ b/drivers/gpu/drm/radeon/radeon_fence.c
@@ -772,7 +772,7 @@ int radeon_fence_driver_start_ring(struct radeon_device 
*rdev, int ring)
int r;

radeon_scratch_free(rdev, rdev->fence_drv[ring].scratch_reg);
-   if (rdev->wb.use_event) {
+   if (rdev->wb.use_event || !radeon_ring_supports_scratch_reg(rdev, 
>ring[ring])) {
rdev->fence_drv[ring].scratch_reg = 0;
index = R600_WB_EVENT_OFFSET + ring * 4;
} else {
-- 
1.8.0



[PATCH] drm/radeon: fix fence driver for dma ring when wb is disabled

2012-12-12 Thread j . glisse
From: Jerome Glisse jgli...@redhat.com

The dma ring can't write to register thus have to write to memory
its fence value. This ensure that it doesn't try to use scratch
register for dma ring fence driver.

Signed-off-by: Jerome Glisse jgli...@redhat.com
---
 drivers/gpu/drm/radeon/r600.c | 3 ++-
 drivers/gpu/drm/radeon/radeon_fence.c | 2 +-
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
index a76eca1..2aaf147 100644
--- a/drivers/gpu/drm/radeon/r600.c
+++ b/drivers/gpu/drm/radeon/r600.c
@@ -2533,11 +2533,12 @@ void r600_dma_fence_ring_emit(struct radeon_device 
*rdev,
 {
struct radeon_ring *ring = rdev-ring[fence-ring];
u64 addr = rdev-fence_drv[fence-ring].gpu_addr;
+
/* write the fence */
radeon_ring_write(ring, DMA_PACKET(DMA_PACKET_FENCE, 0, 0, 0));
radeon_ring_write(ring, addr  0xfffc);
radeon_ring_write(ring, (upper_32_bits(addr)  0xff));
-   radeon_ring_write(ring, fence-seq);
+   radeon_ring_write(ring, lower_32_bits(fence-seq));
/* generate an interrupt */
radeon_ring_write(ring, DMA_PACKET(DMA_PACKET_TRAP, 0, 0, 0));
 }
diff --git a/drivers/gpu/drm/radeon/radeon_fence.c 
b/drivers/gpu/drm/radeon/radeon_fence.c
index 22bd6c2..410a975 100644
--- a/drivers/gpu/drm/radeon/radeon_fence.c
+++ b/drivers/gpu/drm/radeon/radeon_fence.c
@@ -772,7 +772,7 @@ int radeon_fence_driver_start_ring(struct radeon_device 
*rdev, int ring)
int r;
 
radeon_scratch_free(rdev, rdev-fence_drv[ring].scratch_reg);
-   if (rdev-wb.use_event) {
+   if (rdev-wb.use_event || !radeon_ring_supports_scratch_reg(rdev, 
rdev-ring[ring])) {
rdev-fence_drv[ring].scratch_reg = 0;
index = R600_WB_EVENT_OFFSET + ring * 4;
} else {
-- 
1.8.0

___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel


Re: [PATCH] drm/radeon: fix fence driver for dma ring when wb is disabled

2012-12-12 Thread Alex Deucher
On Wed, Dec 12, 2012 at 4:43 PM,  j.gli...@gmail.com wrote:
 From: Jerome Glisse jgli...@redhat.com

 The dma ring can't write to register thus have to write to memory
 its fence value. This ensure that it doesn't try to use scratch
 register for dma ring fence driver.

 Signed-off-by: Jerome Glisse jgli...@redhat.com

Reviewed-by: Alex Deucher alexander.deuc...@amd.com

 ---
  drivers/gpu/drm/radeon/r600.c | 3 ++-
  drivers/gpu/drm/radeon/radeon_fence.c | 2 +-
  2 files changed, 3 insertions(+), 2 deletions(-)

 diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
 index a76eca1..2aaf147 100644
 --- a/drivers/gpu/drm/radeon/r600.c
 +++ b/drivers/gpu/drm/radeon/r600.c
 @@ -2533,11 +2533,12 @@ void r600_dma_fence_ring_emit(struct radeon_device 
 *rdev,
  {
 struct radeon_ring *ring = rdev-ring[fence-ring];
 u64 addr = rdev-fence_drv[fence-ring].gpu_addr;
 +
 /* write the fence */
 radeon_ring_write(ring, DMA_PACKET(DMA_PACKET_FENCE, 0, 0, 0));
 radeon_ring_write(ring, addr  0xfffc);
 radeon_ring_write(ring, (upper_32_bits(addr)  0xff));
 -   radeon_ring_write(ring, fence-seq);
 +   radeon_ring_write(ring, lower_32_bits(fence-seq));
 /* generate an interrupt */
 radeon_ring_write(ring, DMA_PACKET(DMA_PACKET_TRAP, 0, 0, 0));
  }
 diff --git a/drivers/gpu/drm/radeon/radeon_fence.c 
 b/drivers/gpu/drm/radeon/radeon_fence.c
 index 22bd6c2..410a975 100644
 --- a/drivers/gpu/drm/radeon/radeon_fence.c
 +++ b/drivers/gpu/drm/radeon/radeon_fence.c
 @@ -772,7 +772,7 @@ int radeon_fence_driver_start_ring(struct radeon_device 
 *rdev, int ring)
 int r;

 radeon_scratch_free(rdev, rdev-fence_drv[ring].scratch_reg);
 -   if (rdev-wb.use_event) {
 +   if (rdev-wb.use_event || !radeon_ring_supports_scratch_reg(rdev, 
 rdev-ring[ring])) {
 rdev-fence_drv[ring].scratch_reg = 0;
 index = R600_WB_EVENT_OFFSET + ring * 4;
 } else {
 --
 1.8.0

 ___
 dri-devel mailing list
 dri-devel@lists.freedesktop.org
 http://lists.freedesktop.org/mailman/listinfo/dri-devel
___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel