* [PATCH 1/2] drm/radeon: Skip dma copy test in benchmark if card doesn't have dma engine. @ 2010-02-10 22:10 Pauli Nieminen 2010-02-10 22:10 ` [PATCH 2/2] drm/radeon: Add asic hook for dma copy to r200 cards Pauli Nieminen 0 siblings, 1 reply; 8+ messages in thread From: Pauli Nieminen @ 2010-02-10 22:10 UTC (permalink / raw) To: dri-devel radeon_copy_dma is only available for r200 or newer cards. Call to radeon_copy_dma would result to NULL pointer dereference if benchmarking asic without dma engine. Signed-off-by: Pauli Nieminen <suokkos@gmail.com> --- drivers/gpu/drm/radeon/radeon_benchmark.c | 55 +++++++++++++++++----------- 1 files changed, 33 insertions(+), 22 deletions(-) diff --git a/drivers/gpu/drm/radeon/radeon_benchmark.c b/drivers/gpu/drm/radeon/radeon_benchmark.c index 4ddfd4b..7932dc4 100644 --- a/drivers/gpu/drm/radeon/radeon_benchmark.c +++ b/drivers/gpu/drm/radeon/radeon_benchmark.c @@ -65,31 +65,42 @@ void radeon_benchmark_move(struct radeon_device *rdev, unsigned bsize, if (r) { goto out_cleanup; } - start_jiffies = jiffies; - for (i = 0; i < n; i++) { - r = radeon_fence_create(rdev, &fence); - if (r) { - goto out_cleanup; + + /* r100 doesn't have dma engine so skip the test */ + if (rdev->asic->copy_dma) { + + start_jiffies = jiffies; + for (i = 0; i < n; i++) { + r = radeon_fence_create(rdev, &fence); + if (r) { + goto out_cleanup; + } + + r = radeon_copy_dma(rdev, saddr, daddr, + size / RADEON_GPU_PAGE_SIZE, fence); + + if (r) { + goto out_cleanup; + } + r = radeon_fence_wait(fence, false); + if (r) { + goto out_cleanup; + } + radeon_fence_unref(&fence); } - r = radeon_copy_dma(rdev, saddr, daddr, size / RADEON_GPU_PAGE_SIZE, fence); - if (r) { - goto out_cleanup; + end_jiffies = jiffies; + time = end_jiffies - start_jiffies; + time = jiffies_to_msecs(time); + if (time > 0) { + i = ((n * size) >> 10) / time; + printk(KERN_INFO "radeon: dma %u bo moves of %ukb from" + " %d to %d in %lums (%ukb/ms %ukb/s %uM/s)\n", + n, size >> 10, + sdomain, ddomain, time, + i, i * 1000, (i * 1000) / 1024); } - r = radeon_fence_wait(fence, false); - if (r) { - goto out_cleanup; - } - radeon_fence_unref(&fence); - } - end_jiffies = jiffies; - time = end_jiffies - start_jiffies; - time = jiffies_to_msecs(time); - if (time > 0) { - i = ((n * size) >> 10) / time; - printk(KERN_INFO "radeon: dma %u bo moves of %ukb from %d to %d" - " in %lums (%ukb/ms %ukb/s %uM/s)\n", n, size >> 10, - sdomain, ddomain, time, i, i * 1000, (i * 1000) / 1024); } + start_jiffies = jiffies; for (i = 0; i < n; i++) { r = radeon_fence_create(rdev, &fence); -- 1.6.3.3 ------------------------------------------------------------------------------ SOLARIS 10 is the OS for Data Centers - provides features such as DTrace, Predictive Self Healing and Award Winning ZFS. Get Solaris 10 NOW http://p.sf.net/sfu/solaris-dev2dev -- ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 2/2] drm/radeon: Add asic hook for dma copy to r200 cards. 2010-02-10 22:10 [PATCH 1/2] drm/radeon: Skip dma copy test in benchmark if card doesn't have dma engine Pauli Nieminen @ 2010-02-10 22:10 ` Pauli Nieminen 2010-02-10 23:40 ` Maarten Maathuis 0 siblings, 1 reply; 8+ messages in thread From: Pauli Nieminen @ 2010-02-10 22:10 UTC (permalink / raw) To: dri-devel r200 cards have dma engine which can be used to tranfer data between vram and system memory. r300 dma engine registers match r200 dma engine. Enabling dma copy for r200 is simple as hooking r200 asic to already existing function r300_copy_dma. Rename r300_dma_copy to r200_dma_copyto reflect that supports starts from r200 cards. Signed-off-by: Pauli Nieminen <suokkos@gmail.com> --- drivers/gpu/drm/radeon/r200.c | 46 ++++++++++++++++++++++++++++++++ drivers/gpu/drm/radeon/r300.c | 44 ------------------------------ drivers/gpu/drm/radeon/radeon_asic.h | 18 ++++++------ drivers/gpu/drm/radeon/radeon_device.c | 3 ++ 4 files changed, 58 insertions(+), 53 deletions(-) diff --git a/drivers/gpu/drm/radeon/r200.c b/drivers/gpu/drm/radeon/r200.c index ff1e0cd..1146c99 100644 --- a/drivers/gpu/drm/radeon/r200.c +++ b/drivers/gpu/drm/radeon/r200.c @@ -31,6 +31,7 @@ #include "radeon_reg.h" #include "radeon.h" +#include "r100d.h" #include "r200_reg_safe.h" #include "r100_track.h" @@ -79,6 +80,51 @@ static int r200_get_vtx_size_0(uint32_t vtx_fmt_0) return vtx_size; } +int r200_copy_dma(struct radeon_device *rdev, + uint64_t src_offset, + uint64_t dst_offset, + unsigned num_pages, + struct radeon_fence *fence) +{ + uint32_t size; + uint32_t cur_size; + int i, num_loops; + int r = 0; + + /* radeon pitch is /64 */ + size = num_pages << PAGE_SHIFT; + num_loops = DIV_ROUND_UP(size, 0x1FFFFF); + r = radeon_ring_lock(rdev, num_loops * 4 + 64); + if (r) { + DRM_ERROR("radeon: moving bo (%d).\n", r); + return r; + } + /* Must wait for 2D idle & clean before DMA or hangs might happen */ + radeon_ring_write(rdev, PACKET0(RADEON_WAIT_UNTIL, 0)); + radeon_ring_write(rdev, (1 << 16)); + for (i = 0; i < num_loops; i++) { + cur_size = size; + if (cur_size > 0x1FFFFF) { + cur_size = 0x1FFFFF; + } + size -= cur_size; + radeon_ring_write(rdev, PACKET0(0x720, 2)); + radeon_ring_write(rdev, src_offset); + radeon_ring_write(rdev, dst_offset); + radeon_ring_write(rdev, cur_size | (1 << 31) | (1 << 30)); + src_offset += cur_size; + dst_offset += cur_size; + } + radeon_ring_write(rdev, PACKET0(RADEON_WAIT_UNTIL, 0)); + radeon_ring_write(rdev, RADEON_WAIT_DMA_GUI_IDLE); + if (fence) { + r = radeon_fence_emit(rdev, fence); + } + radeon_ring_unlock_commit(rdev); + return r; +} + + static int r200_get_vtx_size_1(uint32_t vtx_fmt_1) { int vtx_size, i, tex_size; diff --git a/drivers/gpu/drm/radeon/r300.c b/drivers/gpu/drm/radeon/r300.c index 43b55a0..6516cd6 100644 --- a/drivers/gpu/drm/radeon/r300.c +++ b/drivers/gpu/drm/radeon/r300.c @@ -198,50 +198,6 @@ void r300_fence_ring_emit(struct radeon_device *rdev, radeon_ring_write(rdev, RADEON_SW_INT_FIRE); } -int r300_copy_dma(struct radeon_device *rdev, - uint64_t src_offset, - uint64_t dst_offset, - unsigned num_pages, - struct radeon_fence *fence) -{ - uint32_t size; - uint32_t cur_size; - int i, num_loops; - int r = 0; - - /* radeon pitch is /64 */ - size = num_pages << PAGE_SHIFT; - num_loops = DIV_ROUND_UP(size, 0x1FFFFF); - r = radeon_ring_lock(rdev, num_loops * 4 + 64); - if (r) { - DRM_ERROR("radeon: moving bo (%d).\n", r); - return r; - } - /* Must wait for 2D idle & clean before DMA or hangs might happen */ - radeon_ring_write(rdev, PACKET0(RADEON_WAIT_UNTIL, 0 )); - radeon_ring_write(rdev, (1 << 16)); - for (i = 0; i < num_loops; i++) { - cur_size = size; - if (cur_size > 0x1FFFFF) { - cur_size = 0x1FFFFF; - } - size -= cur_size; - radeon_ring_write(rdev, PACKET0(0x720, 2)); - radeon_ring_write(rdev, src_offset); - radeon_ring_write(rdev, dst_offset); - radeon_ring_write(rdev, cur_size | (1 << 31) | (1 << 30)); - src_offset += cur_size; - dst_offset += cur_size; - } - radeon_ring_write(rdev, PACKET0(RADEON_WAIT_UNTIL, 0)); - radeon_ring_write(rdev, RADEON_WAIT_DMA_GUI_IDLE); - if (fence) { - r = radeon_fence_emit(rdev, fence); - } - radeon_ring_unlock_commit(rdev); - return r; -} - void r300_ring_start(struct radeon_device *rdev) { unsigned gb_tile_config; diff --git a/drivers/gpu/drm/radeon/radeon_asic.h b/drivers/gpu/drm/radeon/radeon_asic.h index 05ee1ae..0489ef8 100644 --- a/drivers/gpu/drm/radeon/radeon_asic.h +++ b/drivers/gpu/drm/radeon/radeon_asic.h @@ -138,7 +138,7 @@ extern int rv370_pcie_gart_set_page(struct radeon_device *rdev, int i, uint64_t extern uint32_t rv370_pcie_rreg(struct radeon_device *rdev, uint32_t reg); extern void rv370_pcie_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v); extern void rv370_set_pcie_lanes(struct radeon_device *rdev, int lanes); -extern int r300_copy_dma(struct radeon_device *rdev, +extern int r200_copy_dma(struct radeon_device *rdev, uint64_t src_offset, uint64_t dst_offset, unsigned num_pages, @@ -162,7 +162,7 @@ static struct radeon_asic r300_asic = { .fence_ring_emit = &r300_fence_ring_emit, .cs_parse = &r300_cs_parse, .copy_blit = &r100_copy_blit, - .copy_dma = &r300_copy_dma, + .copy_dma = &r200_copy_dma, .copy = &r100_copy_blit, .get_engine_clock = &radeon_legacy_get_engine_clock, .set_engine_clock = &radeon_legacy_set_engine_clock, @@ -206,7 +206,7 @@ static struct radeon_asic r420_asic = { .fence_ring_emit = &r300_fence_ring_emit, .cs_parse = &r300_cs_parse, .copy_blit = &r100_copy_blit, - .copy_dma = &r300_copy_dma, + .copy_dma = &r200_copy_dma, .copy = &r100_copy_blit, .get_engine_clock = &radeon_atom_get_engine_clock, .set_engine_clock = &radeon_atom_set_engine_clock, @@ -255,7 +255,7 @@ static struct radeon_asic rs400_asic = { .fence_ring_emit = &r300_fence_ring_emit, .cs_parse = &r300_cs_parse, .copy_blit = &r100_copy_blit, - .copy_dma = &r300_copy_dma, + .copy_dma = &r200_copy_dma, .copy = &r100_copy_blit, .get_engine_clock = &radeon_legacy_get_engine_clock, .set_engine_clock = &radeon_legacy_set_engine_clock, @@ -314,7 +314,7 @@ static struct radeon_asic rs600_asic = { .fence_ring_emit = &r300_fence_ring_emit, .cs_parse = &r300_cs_parse, .copy_blit = &r100_copy_blit, - .copy_dma = &r300_copy_dma, + .copy_dma = &r200_copy_dma, .copy = &r100_copy_blit, .get_engine_clock = &radeon_atom_get_engine_clock, .set_engine_clock = &radeon_atom_set_engine_clock, @@ -360,8 +360,8 @@ static struct radeon_asic rs690_asic = { .fence_ring_emit = &r300_fence_ring_emit, .cs_parse = &r300_cs_parse, .copy_blit = &r100_copy_blit, - .copy_dma = &r300_copy_dma, - .copy = &r300_copy_dma, + .copy_dma = &r200_copy_dma, + .copy = &r200_copy_dma, .get_engine_clock = &radeon_atom_get_engine_clock, .set_engine_clock = &radeon_atom_set_engine_clock, .get_memory_clock = &radeon_atom_get_memory_clock, @@ -412,7 +412,7 @@ static struct radeon_asic rv515_asic = { .fence_ring_emit = &r300_fence_ring_emit, .cs_parse = &r300_cs_parse, .copy_blit = &r100_copy_blit, - .copy_dma = &r300_copy_dma, + .copy_dma = &r200_copy_dma, .copy = &r100_copy_blit, .get_engine_clock = &radeon_atom_get_engine_clock, .set_engine_clock = &radeon_atom_set_engine_clock, @@ -455,7 +455,7 @@ static struct radeon_asic r520_asic = { .fence_ring_emit = &r300_fence_ring_emit, .cs_parse = &r300_cs_parse, .copy_blit = &r100_copy_blit, - .copy_dma = &r300_copy_dma, + .copy_dma = &r200_copy_dma, .copy = &r100_copy_blit, .get_engine_clock = &radeon_atom_get_engine_clock, .set_engine_clock = &radeon_atom_set_engine_clock, diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c index 768b150..5d15943 100644 --- a/drivers/gpu/drm/radeon/radeon_device.c +++ b/drivers/gpu/drm/radeon/radeon_device.c @@ -329,10 +329,13 @@ int radeon_asic_init(struct radeon_device *rdev) case CHIP_RS100: case CHIP_RV200: case CHIP_RS200: + rdev->asic = &r100_asic; + break; case CHIP_R200: case CHIP_RV250: case CHIP_RS300: case CHIP_RV280: + r100_asic.copy_dma = &r200_copy_dma; rdev->asic = &r100_asic; break; case CHIP_R300: -- 1.6.3.3 ------------------------------------------------------------------------------ SOLARIS 10 is the OS for Data Centers - provides features such as DTrace, Predictive Self Healing and Award Winning ZFS. Get Solaris 10 NOW http://p.sf.net/sfu/solaris-dev2dev -- ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] drm/radeon: Add asic hook for dma copy to r200 cards. 2010-02-10 22:10 ` [PATCH 2/2] drm/radeon: Add asic hook for dma copy to r200 cards Pauli Nieminen @ 2010-02-10 23:40 ` Maarten Maathuis 2010-02-11 11:51 ` Jerome Glisse 0 siblings, 1 reply; 8+ messages in thread From: Maarten Maathuis @ 2010-02-10 23:40 UTC (permalink / raw) To: Pauli Nieminen; +Cc: dri-devel What happens if you have two cards, one RS200 and one RV280 (just an example). I think you shouldn't change values in a static struct. On Wed, Feb 10, 2010 at 11:10 PM, Pauli Nieminen <suokkos@gmail.com> wrote: > r200 cards have dma engine which can be used to tranfer data > between vram and system memory. > > r300 dma engine registers match r200 dma engine. Enabling > dma copy for r200 is simple as hooking r200 asic to already > existing function r300_copy_dma. > > Rename r300_dma_copy to r200_dma_copyto reflect that supports > starts from r200 cards. > > Signed-off-by: Pauli Nieminen <suokkos@gmail.com> > --- > drivers/gpu/drm/radeon/r200.c | 46 ++++++++++++++++++++++++++++++++ > drivers/gpu/drm/radeon/r300.c | 44 ------------------------------ > drivers/gpu/drm/radeon/radeon_asic.h | 18 ++++++------ > drivers/gpu/drm/radeon/radeon_device.c | 3 ++ > 4 files changed, 58 insertions(+), 53 deletions(-) > > diff --git a/drivers/gpu/drm/radeon/r200.c b/drivers/gpu/drm/radeon/r200.c > index ff1e0cd..1146c99 100644 > --- a/drivers/gpu/drm/radeon/r200.c > +++ b/drivers/gpu/drm/radeon/r200.c > @@ -31,6 +31,7 @@ > #include "radeon_reg.h" > #include "radeon.h" > > +#include "r100d.h" > #include "r200_reg_safe.h" > > #include "r100_track.h" > @@ -79,6 +80,51 @@ static int r200_get_vtx_size_0(uint32_t vtx_fmt_0) > return vtx_size; > } > > +int r200_copy_dma(struct radeon_device *rdev, > + uint64_t src_offset, > + uint64_t dst_offset, > + unsigned num_pages, > + struct radeon_fence *fence) > +{ > + uint32_t size; > + uint32_t cur_size; > + int i, num_loops; > + int r = 0; > + > + /* radeon pitch is /64 */ > + size = num_pages << PAGE_SHIFT; > + num_loops = DIV_ROUND_UP(size, 0x1FFFFF); > + r = radeon_ring_lock(rdev, num_loops * 4 + 64); > + if (r) { > + DRM_ERROR("radeon: moving bo (%d).\n", r); > + return r; > + } > + /* Must wait for 2D idle & clean before DMA or hangs might happen */ > + radeon_ring_write(rdev, PACKET0(RADEON_WAIT_UNTIL, 0)); > + radeon_ring_write(rdev, (1 << 16)); > + for (i = 0; i < num_loops; i++) { > + cur_size = size; > + if (cur_size > 0x1FFFFF) { > + cur_size = 0x1FFFFF; > + } > + size -= cur_size; > + radeon_ring_write(rdev, PACKET0(0x720, 2)); > + radeon_ring_write(rdev, src_offset); > + radeon_ring_write(rdev, dst_offset); > + radeon_ring_write(rdev, cur_size | (1 << 31) | (1 << 30)); > + src_offset += cur_size; > + dst_offset += cur_size; > + } > + radeon_ring_write(rdev, PACKET0(RADEON_WAIT_UNTIL, 0)); > + radeon_ring_write(rdev, RADEON_WAIT_DMA_GUI_IDLE); > + if (fence) { > + r = radeon_fence_emit(rdev, fence); > + } > + radeon_ring_unlock_commit(rdev); > + return r; > +} > + > + > static int r200_get_vtx_size_1(uint32_t vtx_fmt_1) > { > int vtx_size, i, tex_size; > diff --git a/drivers/gpu/drm/radeon/r300.c b/drivers/gpu/drm/radeon/r300.c > index 43b55a0..6516cd6 100644 > --- a/drivers/gpu/drm/radeon/r300.c > +++ b/drivers/gpu/drm/radeon/r300.c > @@ -198,50 +198,6 @@ void r300_fence_ring_emit(struct radeon_device *rdev, > radeon_ring_write(rdev, RADEON_SW_INT_FIRE); > } > > -int r300_copy_dma(struct radeon_device *rdev, > - uint64_t src_offset, > - uint64_t dst_offset, > - unsigned num_pages, > - struct radeon_fence *fence) > -{ > - uint32_t size; > - uint32_t cur_size; > - int i, num_loops; > - int r = 0; > - > - /* radeon pitch is /64 */ > - size = num_pages << PAGE_SHIFT; > - num_loops = DIV_ROUND_UP(size, 0x1FFFFF); > - r = radeon_ring_lock(rdev, num_loops * 4 + 64); > - if (r) { > - DRM_ERROR("radeon: moving bo (%d).\n", r); > - return r; > - } > - /* Must wait for 2D idle & clean before DMA or hangs might happen */ > - radeon_ring_write(rdev, PACKET0(RADEON_WAIT_UNTIL, 0 )); > - radeon_ring_write(rdev, (1 << 16)); > - for (i = 0; i < num_loops; i++) { > - cur_size = size; > - if (cur_size > 0x1FFFFF) { > - cur_size = 0x1FFFFF; > - } > - size -= cur_size; > - radeon_ring_write(rdev, PACKET0(0x720, 2)); > - radeon_ring_write(rdev, src_offset); > - radeon_ring_write(rdev, dst_offset); > - radeon_ring_write(rdev, cur_size | (1 << 31) | (1 << 30)); > - src_offset += cur_size; > - dst_offset += cur_size; > - } > - radeon_ring_write(rdev, PACKET0(RADEON_WAIT_UNTIL, 0)); > - radeon_ring_write(rdev, RADEON_WAIT_DMA_GUI_IDLE); > - if (fence) { > - r = radeon_fence_emit(rdev, fence); > - } > - radeon_ring_unlock_commit(rdev); > - return r; > -} > - > void r300_ring_start(struct radeon_device *rdev) > { > unsigned gb_tile_config; > diff --git a/drivers/gpu/drm/radeon/radeon_asic.h b/drivers/gpu/drm/radeon/radeon_asic.h > index 05ee1ae..0489ef8 100644 > --- a/drivers/gpu/drm/radeon/radeon_asic.h > +++ b/drivers/gpu/drm/radeon/radeon_asic.h > @@ -138,7 +138,7 @@ extern int rv370_pcie_gart_set_page(struct radeon_device *rdev, int i, uint64_t > extern uint32_t rv370_pcie_rreg(struct radeon_device *rdev, uint32_t reg); > extern void rv370_pcie_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v); > extern void rv370_set_pcie_lanes(struct radeon_device *rdev, int lanes); > -extern int r300_copy_dma(struct radeon_device *rdev, > +extern int r200_copy_dma(struct radeon_device *rdev, > uint64_t src_offset, > uint64_t dst_offset, > unsigned num_pages, > @@ -162,7 +162,7 @@ static struct radeon_asic r300_asic = { > .fence_ring_emit = &r300_fence_ring_emit, > .cs_parse = &r300_cs_parse, > .copy_blit = &r100_copy_blit, > - .copy_dma = &r300_copy_dma, > + .copy_dma = &r200_copy_dma, > .copy = &r100_copy_blit, > .get_engine_clock = &radeon_legacy_get_engine_clock, > .set_engine_clock = &radeon_legacy_set_engine_clock, > @@ -206,7 +206,7 @@ static struct radeon_asic r420_asic = { > .fence_ring_emit = &r300_fence_ring_emit, > .cs_parse = &r300_cs_parse, > .copy_blit = &r100_copy_blit, > - .copy_dma = &r300_copy_dma, > + .copy_dma = &r200_copy_dma, > .copy = &r100_copy_blit, > .get_engine_clock = &radeon_atom_get_engine_clock, > .set_engine_clock = &radeon_atom_set_engine_clock, > @@ -255,7 +255,7 @@ static struct radeon_asic rs400_asic = { > .fence_ring_emit = &r300_fence_ring_emit, > .cs_parse = &r300_cs_parse, > .copy_blit = &r100_copy_blit, > - .copy_dma = &r300_copy_dma, > + .copy_dma = &r200_copy_dma, > .copy = &r100_copy_blit, > .get_engine_clock = &radeon_legacy_get_engine_clock, > .set_engine_clock = &radeon_legacy_set_engine_clock, > @@ -314,7 +314,7 @@ static struct radeon_asic rs600_asic = { > .fence_ring_emit = &r300_fence_ring_emit, > .cs_parse = &r300_cs_parse, > .copy_blit = &r100_copy_blit, > - .copy_dma = &r300_copy_dma, > + .copy_dma = &r200_copy_dma, > .copy = &r100_copy_blit, > .get_engine_clock = &radeon_atom_get_engine_clock, > .set_engine_clock = &radeon_atom_set_engine_clock, > @@ -360,8 +360,8 @@ static struct radeon_asic rs690_asic = { > .fence_ring_emit = &r300_fence_ring_emit, > .cs_parse = &r300_cs_parse, > .copy_blit = &r100_copy_blit, > - .copy_dma = &r300_copy_dma, > - .copy = &r300_copy_dma, > + .copy_dma = &r200_copy_dma, > + .copy = &r200_copy_dma, > .get_engine_clock = &radeon_atom_get_engine_clock, > .set_engine_clock = &radeon_atom_set_engine_clock, > .get_memory_clock = &radeon_atom_get_memory_clock, > @@ -412,7 +412,7 @@ static struct radeon_asic rv515_asic = { > .fence_ring_emit = &r300_fence_ring_emit, > .cs_parse = &r300_cs_parse, > .copy_blit = &r100_copy_blit, > - .copy_dma = &r300_copy_dma, > + .copy_dma = &r200_copy_dma, > .copy = &r100_copy_blit, > .get_engine_clock = &radeon_atom_get_engine_clock, > .set_engine_clock = &radeon_atom_set_engine_clock, > @@ -455,7 +455,7 @@ static struct radeon_asic r520_asic = { > .fence_ring_emit = &r300_fence_ring_emit, > .cs_parse = &r300_cs_parse, > .copy_blit = &r100_copy_blit, > - .copy_dma = &r300_copy_dma, > + .copy_dma = &r200_copy_dma, > .copy = &r100_copy_blit, > .get_engine_clock = &radeon_atom_get_engine_clock, > .set_engine_clock = &radeon_atom_set_engine_clock, > diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c > index 768b150..5d15943 100644 > --- a/drivers/gpu/drm/radeon/radeon_device.c > +++ b/drivers/gpu/drm/radeon/radeon_device.c > @@ -329,10 +329,13 @@ int radeon_asic_init(struct radeon_device *rdev) > case CHIP_RS100: > case CHIP_RV200: > case CHIP_RS200: > + rdev->asic = &r100_asic; > + break; > case CHIP_R200: > case CHIP_RV250: > case CHIP_RS300: > case CHIP_RV280: > + r100_asic.copy_dma = &r200_copy_dma; > rdev->asic = &r100_asic; > break; > case CHIP_R300: > -- > 1.6.3.3 > > > ------------------------------------------------------------------------------ > SOLARIS 10 is the OS for Data Centers - provides features such as DTrace, > Predictive Self Healing and Award Winning ZFS. Get Solaris 10 NOW > http://p.sf.net/sfu/solaris-dev2dev > -- > _______________________________________________ > Dri-devel mailing list > Dri-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/dri-devel > ------------------------------------------------------------------------------ SOLARIS 10 is the OS for Data Centers - provides features such as DTrace, Predictive Self Healing and Award Winning ZFS. Get Solaris 10 NOW http://p.sf.net/sfu/solaris-dev2dev -- ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] drm/radeon: Add asic hook for dma copy to r200 cards. 2010-02-10 23:40 ` Maarten Maathuis @ 2010-02-11 11:51 ` Jerome Glisse 2010-02-11 15:08 ` Alex Deucher 2010-02-11 17:25 ` [PATCH 2/2] drm/radeon: Add asic hook for dma copy to r200 cards Pauli Nieminen 0 siblings, 2 replies; 8+ messages in thread From: Jerome Glisse @ 2010-02-11 11:51 UTC (permalink / raw) To: Maarten Maathuis; +Cc: dri-devel On Thu, Feb 11, 2010 at 12:40:45AM +0100, Maarten Maathuis wrote: > What happens if you have two cards, one RS200 and one RV280 (just an > example). I think you shouldn't change values in a static struct. > Yeah good catch, it's best to do a separate asic struct for r200 rather than changing the static struct. Cheers, Jerome ------------------------------------------------------------------------------ SOLARIS 10 is the OS for Data Centers - provides features such as DTrace, Predictive Self Healing and Award Winning ZFS. Get Solaris 10 NOW http://p.sf.net/sfu/solaris-dev2dev -- ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] drm/radeon: Add asic hook for dma copy to r200 cards. 2010-02-11 11:51 ` Jerome Glisse @ 2010-02-11 15:08 ` Alex Deucher 2010-02-11 17:55 ` [PATCH] drm/radeon/kms: Create asic structure for r300 pcie cards Pauli Nieminen 2010-02-11 17:25 ` [PATCH 2/2] drm/radeon: Add asic hook for dma copy to r200 cards Pauli Nieminen 1 sibling, 1 reply; 8+ messages in thread From: Alex Deucher @ 2010-02-11 15:08 UTC (permalink / raw) To: Jerome Glisse; +Cc: dri-devel On Thu, Feb 11, 2010 at 6:51 AM, Jerome Glisse <glisse@freedesktop.org> wrote: > On Thu, Feb 11, 2010 at 12:40:45AM +0100, Maarten Maathuis wrote: >> What happens if you have two cards, one RS200 and one RV280 (just an >> example). I think you shouldn't change values in a static struct. >> > > Yeah good catch, it's best to do a separate asic struct for r200 rather > than changing the static struct. > We do a similar thing in the code already for AGP/PCIE r3xx/r4xx cards. Should probably fix that. Alex > Cheers, > Jerome > > ------------------------------------------------------------------------------ > SOLARIS 10 is the OS for Data Centers - provides features such as DTrace, > Predictive Self Healing and Award Winning ZFS. Get Solaris 10 NOW > http://p.sf.net/sfu/solaris-dev2dev > -- > _______________________________________________ > Dri-devel mailing list > Dri-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/dri-devel > ------------------------------------------------------------------------------ SOLARIS 10 is the OS for Data Centers - provides features such as DTrace, Predictive Self Healing and Award Winning ZFS. Get Solaris 10 NOW http://p.sf.net/sfu/solaris-dev2dev -- ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH] drm/radeon/kms: Create asic structure for r300 pcie cards. 2010-02-11 15:08 ` Alex Deucher @ 2010-02-11 17:55 ` Pauli Nieminen 2010-02-18 4:49 ` Dave Airlie 0 siblings, 1 reply; 8+ messages in thread From: Pauli Nieminen @ 2010-02-11 17:55 UTC (permalink / raw) To: dri-devel; +Cc: Alex Deucher Setting global asic structure to point to different function would cause problem in system where is multiple r300 cards with different bus type. r300_asic_pcie is just copy from r300_asic with gart tlb functions replaced with pcie versions. Signed-off-by: Pauli Nieminen <suokkos@gmail.com> --- drivers/gpu/drm/radeon/radeon_asic.h | 38 ++++++++++++++++++++++++++++++++ drivers/gpu/drm/radeon/radeon_device.c | 9 +++---- 2 files changed, 42 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/radeon/radeon_asic.h b/drivers/gpu/drm/radeon/radeon_asic.h index 0971e7e..af18ffe 100644 --- a/drivers/gpu/drm/radeon/radeon_asic.h +++ b/drivers/gpu/drm/radeon/radeon_asic.h @@ -221,6 +221,44 @@ static struct radeon_asic r300_asic = { .ioctl_wait_idle = NULL, }; + +static struct radeon_asic r300_asic_pcie = { + .init = &r300_init, + .fini = &r300_fini, + .suspend = &r300_suspend, + .resume = &r300_resume, + .vga_set_state = &r100_vga_set_state, + .gpu_reset = &r300_gpu_reset, + .gart_tlb_flush = &rv370_pci_gart_tlb_flush, + .gart_set_page = &rv370_pci_gart_set_page, + .cp_commit = &r100_cp_commit, + .ring_start = &r300_ring_start, + .ring_test = &r100_ring_test, + .ring_ib_execute = &r100_ring_ib_execute, + .irq_set = &r100_irq_set, + .irq_process = &r100_irq_process, + .get_vblank_counter = &r100_get_vblank_counter, + .fence_ring_emit = &r300_fence_ring_emit, + .cs_parse = &r300_cs_parse, + .copy_blit = &r100_copy_blit, + .copy_dma = &r200_copy_dma, + .copy = &r100_copy_blit, + .get_engine_clock = &radeon_legacy_get_engine_clock, + .set_engine_clock = &radeon_legacy_set_engine_clock, + .get_memory_clock = &radeon_legacy_get_memory_clock, + .set_memory_clock = NULL, + .set_pcie_lanes = &rv370_set_pcie_lanes, + .set_clock_gating = &radeon_legacy_set_clock_gating, + .set_surface_reg = r100_set_surface_reg, + .clear_surface_reg = r100_clear_surface_reg, + .bandwidth_update = &r100_bandwidth_update, + .hpd_init = &r100_hpd_init, + .hpd_fini = &r100_hpd_fini, + .hpd_sense = &r100_hpd_sense, + .hpd_set_polarity = &r100_hpd_set_polarity, + .ioctl_wait_idle = NULL, +}; + /* * r420,r423,rv410 */ diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c index b5c9d38..767aed8 100644 --- a/drivers/gpu/drm/radeon/radeon_device.c +++ b/drivers/gpu/drm/radeon/radeon_device.c @@ -341,11 +341,10 @@ int radeon_asic_init(struct radeon_device *rdev) case CHIP_R350: case CHIP_RV350: case CHIP_RV380: - rdev->asic = &r300_asic; - if (rdev->flags & RADEON_IS_PCIE) { - rdev->asic->gart_tlb_flush = &rv370_pcie_gart_tlb_flush; - rdev->asic->gart_set_page = &rv370_pcie_gart_set_page; - } + if (rdev->flags & RADEON_IS_PCIE) + rdev->asic = &r300_asic_pcie; + else + rdev->asic = &r300_asic; break; case CHIP_R420: case CHIP_R423: -- 1.6.3.3 ------------------------------------------------------------------------------ SOLARIS 10 is the OS for Data Centers - provides features such as DTrace, Predictive Self Healing and Award Winning ZFS. Get Solaris 10 NOW http://p.sf.net/sfu/solaris-dev2dev -- ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH] drm/radeon/kms: Create asic structure for r300 pcie cards. 2010-02-11 17:55 ` [PATCH] drm/radeon/kms: Create asic structure for r300 pcie cards Pauli Nieminen @ 2010-02-18 4:49 ` Dave Airlie 0 siblings, 0 replies; 8+ messages in thread From: Dave Airlie @ 2010-02-18 4:49 UTC (permalink / raw) To: Pauli Nieminen; +Cc: Alex Deucher, dri-devel On Fri, Feb 12, 2010 at 3:55 AM, Pauli Nieminen <suokkos@gmail.com> wrote: > Setting global asic structure to point to different function > would cause problem in system where is multiple r300 cards > with different bus type. This contains a typo which I fixed locally please make sure it compiles before sending to me ;-) hint: rv370_pci_set_gart_flush Dave. > > r300_asic_pcie is just copy from r300_asic with gart tlb > functions replaced with pcie versions. > > Signed-off-by: Pauli Nieminen <suokkos@gmail.com> > --- > drivers/gpu/drm/radeon/radeon_asic.h | 38 ++++++++++++++++++++++++++++++++ > drivers/gpu/drm/radeon/radeon_device.c | 9 +++---- > 2 files changed, 42 insertions(+), 5 deletions(-) > > diff --git a/drivers/gpu/drm/radeon/radeon_asic.h b/drivers/gpu/drm/radeon/radeon_asic.h > index 0971e7e..af18ffe 100644 > --- a/drivers/gpu/drm/radeon/radeon_asic.h > +++ b/drivers/gpu/drm/radeon/radeon_asic.h > @@ -221,6 +221,44 @@ static struct radeon_asic r300_asic = { > .ioctl_wait_idle = NULL, > }; > > + > +static struct radeon_asic r300_asic_pcie = { > + .init = &r300_init, > + .fini = &r300_fini, > + .suspend = &r300_suspend, > + .resume = &r300_resume, > + .vga_set_state = &r100_vga_set_state, > + .gpu_reset = &r300_gpu_reset, > + .gart_tlb_flush = &rv370_pci_gart_tlb_flush, > + .gart_set_page = &rv370_pci_gart_set_page, > + .cp_commit = &r100_cp_commit, > + .ring_start = &r300_ring_start, > + .ring_test = &r100_ring_test, > + .ring_ib_execute = &r100_ring_ib_execute, > + .irq_set = &r100_irq_set, > + .irq_process = &r100_irq_process, > + .get_vblank_counter = &r100_get_vblank_counter, > + .fence_ring_emit = &r300_fence_ring_emit, > + .cs_parse = &r300_cs_parse, > + .copy_blit = &r100_copy_blit, > + .copy_dma = &r200_copy_dma, > + .copy = &r100_copy_blit, > + .get_engine_clock = &radeon_legacy_get_engine_clock, > + .set_engine_clock = &radeon_legacy_set_engine_clock, > + .get_memory_clock = &radeon_legacy_get_memory_clock, > + .set_memory_clock = NULL, > + .set_pcie_lanes = &rv370_set_pcie_lanes, > + .set_clock_gating = &radeon_legacy_set_clock_gating, > + .set_surface_reg = r100_set_surface_reg, > + .clear_surface_reg = r100_clear_surface_reg, > + .bandwidth_update = &r100_bandwidth_update, > + .hpd_init = &r100_hpd_init, > + .hpd_fini = &r100_hpd_fini, > + .hpd_sense = &r100_hpd_sense, > + .hpd_set_polarity = &r100_hpd_set_polarity, > + .ioctl_wait_idle = NULL, > +}; > + > /* > * r420,r423,rv410 > */ > diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c > index b5c9d38..767aed8 100644 > --- a/drivers/gpu/drm/radeon/radeon_device.c > +++ b/drivers/gpu/drm/radeon/radeon_device.c > @@ -341,11 +341,10 @@ int radeon_asic_init(struct radeon_device *rdev) > case CHIP_R350: > case CHIP_RV350: > case CHIP_RV380: > - rdev->asic = &r300_asic; > - if (rdev->flags & RADEON_IS_PCIE) { > - rdev->asic->gart_tlb_flush = &rv370_pcie_gart_tlb_flush; > - rdev->asic->gart_set_page = &rv370_pcie_gart_set_page; > - } > + if (rdev->flags & RADEON_IS_PCIE) > + rdev->asic = &r300_asic_pcie; > + else > + rdev->asic = &r300_asic; > break; > case CHIP_R420: > case CHIP_R423: > -- > 1.6.3.3 > > > ------------------------------------------------------------------------------ > SOLARIS 10 is the OS for Data Centers - provides features such as DTrace, > Predictive Self Healing and Award Winning ZFS. Get Solaris 10 NOW > http://p.sf.net/sfu/solaris-dev2dev > -- > _______________________________________________ > Dri-devel mailing list > Dri-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/dri-devel > ------------------------------------------------------------------------------ Download Intel® Parallel Studio Eval Try the new software tools for yourself. Speed compiling, find bugs proactively, and fine-tune applications for parallel performance. See why Intel Parallel Studio got high marks during beta. http://p.sf.net/sfu/intel-sw-dev -- ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 2/2] drm/radeon: Add asic hook for dma copy to r200 cards. 2010-02-11 11:51 ` Jerome Glisse 2010-02-11 15:08 ` Alex Deucher @ 2010-02-11 17:25 ` Pauli Nieminen 1 sibling, 0 replies; 8+ messages in thread From: Pauli Nieminen @ 2010-02-11 17:25 UTC (permalink / raw) To: dri-devel r200 cards have dma engine which can be used to tranfer data between vram and system memory. r300 dma engine registers match r200 dma engine. Enabling dma copy for r200 is simple as hooking r200 asic to already existing function r300_copy_dma. Rename r300_dma_copy to r200_dma_copyto reflect that supports starts from r200 cards. v2: Created a new asic object for r200 cards. Signed-off-by: Pauli Nieminen <suokkos@gmail.com> --- drivers/gpu/drm/radeon/r200.c | 46 +++++++++++++++++++++ drivers/gpu/drm/radeon/r300.c | 44 -------------------- drivers/gpu/drm/radeon/radeon_asic.h | 69 +++++++++++++++++++++++++------ drivers/gpu/drm/radeon/radeon_device.c | 4 +- 4 files changed, 104 insertions(+), 59 deletions(-) diff --git a/drivers/gpu/drm/radeon/r200.c b/drivers/gpu/drm/radeon/r200.c index ff1e0cd..1146c99 100644 --- a/drivers/gpu/drm/radeon/r200.c +++ b/drivers/gpu/drm/radeon/r200.c @@ -31,6 +31,7 @@ #include "radeon_reg.h" #include "radeon.h" +#include "r100d.h" #include "r200_reg_safe.h" #include "r100_track.h" @@ -79,6 +80,51 @@ static int r200_get_vtx_size_0(uint32_t vtx_fmt_0) return vtx_size; } +int r200_copy_dma(struct radeon_device *rdev, + uint64_t src_offset, + uint64_t dst_offset, + unsigned num_pages, + struct radeon_fence *fence) +{ + uint32_t size; + uint32_t cur_size; + int i, num_loops; + int r = 0; + + /* radeon pitch is /64 */ + size = num_pages << PAGE_SHIFT; + num_loops = DIV_ROUND_UP(size, 0x1FFFFF); + r = radeon_ring_lock(rdev, num_loops * 4 + 64); + if (r) { + DRM_ERROR("radeon: moving bo (%d).\n", r); + return r; + } + /* Must wait for 2D idle & clean before DMA or hangs might happen */ + radeon_ring_write(rdev, PACKET0(RADEON_WAIT_UNTIL, 0)); + radeon_ring_write(rdev, (1 << 16)); + for (i = 0; i < num_loops; i++) { + cur_size = size; + if (cur_size > 0x1FFFFF) { + cur_size = 0x1FFFFF; + } + size -= cur_size; + radeon_ring_write(rdev, PACKET0(0x720, 2)); + radeon_ring_write(rdev, src_offset); + radeon_ring_write(rdev, dst_offset); + radeon_ring_write(rdev, cur_size | (1 << 31) | (1 << 30)); + src_offset += cur_size; + dst_offset += cur_size; + } + radeon_ring_write(rdev, PACKET0(RADEON_WAIT_UNTIL, 0)); + radeon_ring_write(rdev, RADEON_WAIT_DMA_GUI_IDLE); + if (fence) { + r = radeon_fence_emit(rdev, fence); + } + radeon_ring_unlock_commit(rdev); + return r; +} + + static int r200_get_vtx_size_1(uint32_t vtx_fmt_1) { int vtx_size, i, tex_size; diff --git a/drivers/gpu/drm/radeon/r300.c b/drivers/gpu/drm/radeon/r300.c index 43b55a0..6516cd6 100644 --- a/drivers/gpu/drm/radeon/r300.c +++ b/drivers/gpu/drm/radeon/r300.c @@ -198,50 +198,6 @@ void r300_fence_ring_emit(struct radeon_device *rdev, radeon_ring_write(rdev, RADEON_SW_INT_FIRE); } -int r300_copy_dma(struct radeon_device *rdev, - uint64_t src_offset, - uint64_t dst_offset, - unsigned num_pages, - struct radeon_fence *fence) -{ - uint32_t size; - uint32_t cur_size; - int i, num_loops; - int r = 0; - - /* radeon pitch is /64 */ - size = num_pages << PAGE_SHIFT; - num_loops = DIV_ROUND_UP(size, 0x1FFFFF); - r = radeon_ring_lock(rdev, num_loops * 4 + 64); - if (r) { - DRM_ERROR("radeon: moving bo (%d).\n", r); - return r; - } - /* Must wait for 2D idle & clean before DMA or hangs might happen */ - radeon_ring_write(rdev, PACKET0(RADEON_WAIT_UNTIL, 0 )); - radeon_ring_write(rdev, (1 << 16)); - for (i = 0; i < num_loops; i++) { - cur_size = size; - if (cur_size > 0x1FFFFF) { - cur_size = 0x1FFFFF; - } - size -= cur_size; - radeon_ring_write(rdev, PACKET0(0x720, 2)); - radeon_ring_write(rdev, src_offset); - radeon_ring_write(rdev, dst_offset); - radeon_ring_write(rdev, cur_size | (1 << 31) | (1 << 30)); - src_offset += cur_size; - dst_offset += cur_size; - } - radeon_ring_write(rdev, PACKET0(RADEON_WAIT_UNTIL, 0)); - radeon_ring_write(rdev, RADEON_WAIT_DMA_GUI_IDLE); - if (fence) { - r = radeon_fence_emit(rdev, fence); - } - radeon_ring_unlock_commit(rdev); - return r; -} - void r300_ring_start(struct radeon_device *rdev) { unsigned gb_tile_config; diff --git a/drivers/gpu/drm/radeon/radeon_asic.h b/drivers/gpu/drm/radeon/radeon_asic.h index 05ee1ae..0971e7e 100644 --- a/drivers/gpu/drm/radeon/radeon_asic.h +++ b/drivers/gpu/drm/radeon/radeon_asic.h @@ -43,7 +43,7 @@ void radeon_atom_set_memory_clock(struct radeon_device *rdev, uint32_t mem_clock void radeon_atom_set_clock_gating(struct radeon_device *rdev, int enable); /* - * r100,rv100,rs100,rv200,rs200,r200,rv250,rs300,rv280 + * r100,rv100,rs100,rv200,rs200 */ extern int r100_init(struct radeon_device *rdev); extern void r100_fini(struct radeon_device *rdev); @@ -120,6 +120,51 @@ static struct radeon_asic r100_asic = { .ioctl_wait_idle = NULL, }; +/* + * r200,rv250,rs300,rv280 + */ +extern int r200_copy_dma(struct radeon_device *rdev, + uint64_t src_offset, + uint64_t dst_offset, + unsigned num_pages, + struct radeon_fence *fence); +static struct radeon_asic r200_asic = { + .init = &r100_init, + .fini = &r100_fini, + .suspend = &r100_suspend, + .resume = &r100_resume, + .vga_set_state = &r100_vga_set_state, + .gpu_reset = &r100_gpu_reset, + .gart_tlb_flush = &r100_pci_gart_tlb_flush, + .gart_set_page = &r100_pci_gart_set_page, + .cp_commit = &r100_cp_commit, + .ring_start = &r100_ring_start, + .ring_test = &r100_ring_test, + .ring_ib_execute = &r100_ring_ib_execute, + .irq_set = &r100_irq_set, + .irq_process = &r100_irq_process, + .get_vblank_counter = &r100_get_vblank_counter, + .fence_ring_emit = &r100_fence_ring_emit, + .cs_parse = &r100_cs_parse, + .copy_blit = &r100_copy_blit, + .copy_dma = &r200_copy_dma, + .copy = &r100_copy_blit, + .get_engine_clock = &radeon_legacy_get_engine_clock, + .set_engine_clock = &radeon_legacy_set_engine_clock, + .get_memory_clock = &radeon_legacy_get_memory_clock, + .set_memory_clock = NULL, + .set_pcie_lanes = NULL, + .set_clock_gating = &radeon_legacy_set_clock_gating, + .set_surface_reg = r100_set_surface_reg, + .clear_surface_reg = r100_clear_surface_reg, + .bandwidth_update = &r100_bandwidth_update, + .hpd_init = &r100_hpd_init, + .hpd_fini = &r100_hpd_fini, + .hpd_sense = &r100_hpd_sense, + .hpd_set_polarity = &r100_hpd_set_polarity, + .ioctl_wait_idle = NULL, +}; + /* * r300,r350,rv350,rv380 @@ -138,11 +183,7 @@ extern int rv370_pcie_gart_set_page(struct radeon_device *rdev, int i, uint64_t extern uint32_t rv370_pcie_rreg(struct radeon_device *rdev, uint32_t reg); extern void rv370_pcie_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v); extern void rv370_set_pcie_lanes(struct radeon_device *rdev, int lanes); -extern int r300_copy_dma(struct radeon_device *rdev, - uint64_t src_offset, - uint64_t dst_offset, - unsigned num_pages, - struct radeon_fence *fence); + static struct radeon_asic r300_asic = { .init = &r300_init, .fini = &r300_fini, @@ -162,7 +203,7 @@ static struct radeon_asic r300_asic = { .fence_ring_emit = &r300_fence_ring_emit, .cs_parse = &r300_cs_parse, .copy_blit = &r100_copy_blit, - .copy_dma = &r300_copy_dma, + .copy_dma = &r200_copy_dma, .copy = &r100_copy_blit, .get_engine_clock = &radeon_legacy_get_engine_clock, .set_engine_clock = &radeon_legacy_set_engine_clock, @@ -206,7 +247,7 @@ static struct radeon_asic r420_asic = { .fence_ring_emit = &r300_fence_ring_emit, .cs_parse = &r300_cs_parse, .copy_blit = &r100_copy_blit, - .copy_dma = &r300_copy_dma, + .copy_dma = &r200_copy_dma, .copy = &r100_copy_blit, .get_engine_clock = &radeon_atom_get_engine_clock, .set_engine_clock = &radeon_atom_set_engine_clock, @@ -255,7 +296,7 @@ static struct radeon_asic rs400_asic = { .fence_ring_emit = &r300_fence_ring_emit, .cs_parse = &r300_cs_parse, .copy_blit = &r100_copy_blit, - .copy_dma = &r300_copy_dma, + .copy_dma = &r200_copy_dma, .copy = &r100_copy_blit, .get_engine_clock = &radeon_legacy_get_engine_clock, .set_engine_clock = &radeon_legacy_set_engine_clock, @@ -314,7 +355,7 @@ static struct radeon_asic rs600_asic = { .fence_ring_emit = &r300_fence_ring_emit, .cs_parse = &r300_cs_parse, .copy_blit = &r100_copy_blit, - .copy_dma = &r300_copy_dma, + .copy_dma = &r200_copy_dma, .copy = &r100_copy_blit, .get_engine_clock = &radeon_atom_get_engine_clock, .set_engine_clock = &radeon_atom_set_engine_clock, @@ -360,8 +401,8 @@ static struct radeon_asic rs690_asic = { .fence_ring_emit = &r300_fence_ring_emit, .cs_parse = &r300_cs_parse, .copy_blit = &r100_copy_blit, - .copy_dma = &r300_copy_dma, - .copy = &r300_copy_dma, + .copy_dma = &r200_copy_dma, + .copy = &r200_copy_dma, .get_engine_clock = &radeon_atom_get_engine_clock, .set_engine_clock = &radeon_atom_set_engine_clock, .get_memory_clock = &radeon_atom_get_memory_clock, @@ -412,7 +453,7 @@ static struct radeon_asic rv515_asic = { .fence_ring_emit = &r300_fence_ring_emit, .cs_parse = &r300_cs_parse, .copy_blit = &r100_copy_blit, - .copy_dma = &r300_copy_dma, + .copy_dma = &r200_copy_dma, .copy = &r100_copy_blit, .get_engine_clock = &radeon_atom_get_engine_clock, .set_engine_clock = &radeon_atom_set_engine_clock, @@ -455,7 +496,7 @@ static struct radeon_asic r520_asic = { .fence_ring_emit = &r300_fence_ring_emit, .cs_parse = &r300_cs_parse, .copy_blit = &r100_copy_blit, - .copy_dma = &r300_copy_dma, + .copy_dma = &r200_copy_dma, .copy = &r100_copy_blit, .get_engine_clock = &radeon_atom_get_engine_clock, .set_engine_clock = &radeon_atom_set_engine_clock, diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c index 768b150..b5c9d38 100644 --- a/drivers/gpu/drm/radeon/radeon_device.c +++ b/drivers/gpu/drm/radeon/radeon_device.c @@ -329,11 +329,13 @@ int radeon_asic_init(struct radeon_device *rdev) case CHIP_RS100: case CHIP_RV200: case CHIP_RS200: + rdev->asic = &r100_asic; + break; case CHIP_R200: case CHIP_RV250: case CHIP_RS300: case CHIP_RV280: - rdev->asic = &r100_asic; + rdev->asic = &r200_asic; break; case CHIP_R300: case CHIP_R350: -- 1.6.3.3 ------------------------------------------------------------------------------ SOLARIS 10 is the OS for Data Centers - provides features such as DTrace, Predictive Self Healing and Award Winning ZFS. Get Solaris 10 NOW http://p.sf.net/sfu/solaris-dev2dev -- ^ permalink raw reply related [flat|nested] 8+ messages in thread
end of thread, other threads:[~2010-02-18 4:49 UTC | newest] Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2010-02-10 22:10 [PATCH 1/2] drm/radeon: Skip dma copy test in benchmark if card doesn't have dma engine Pauli Nieminen 2010-02-10 22:10 ` [PATCH 2/2] drm/radeon: Add asic hook for dma copy to r200 cards Pauli Nieminen 2010-02-10 23:40 ` Maarten Maathuis 2010-02-11 11:51 ` Jerome Glisse 2010-02-11 15:08 ` Alex Deucher 2010-02-11 17:55 ` [PATCH] drm/radeon/kms: Create asic structure for r300 pcie cards Pauli Nieminen 2010-02-18 4:49 ` Dave Airlie 2010-02-11 17:25 ` [PATCH 2/2] drm/radeon: Add asic hook for dma copy to r200 cards Pauli Nieminen
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.