diff options
| author | Cédric Cano <ccano@interfaceconcept.com> | 2011-02-11 19:45:38 -0500 |
|---|---|---|
| committer | Dave Airlie <airlied@redhat.com> | 2011-02-13 18:23:38 -0500 |
| commit | 4eace7fdfa1f8ac2f0a833e12bd07eeb453ec9ef (patch) | |
| tree | e215856a4eebb3186085e386fa893fdc82c2138e /drivers/gpu | |
| parent | 4589433c57bd34b7e49068549e07a43c8d41e39d (diff) | |
drm/radeon/kms: 6xx/7xx big endian fixes
agd5f: minor cleanups
Signed-off-by: Cédric Cano <ccano@interfaceconcept.com>
Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu')
| -rw-r--r-- | drivers/gpu/drm/radeon/r600.c | 22 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/r600_blit_kms.c | 25 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/r600_blit_shaders.c | 4 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/r600d.h | 9 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/rv770.c | 6 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/rv770d.h | 8 |
6 files changed, 54 insertions, 20 deletions
diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c index 650672a0f5ad..de88624d5f87 100644 --- a/drivers/gpu/drm/radeon/r600.c +++ b/drivers/gpu/drm/radeon/r600.c | |||
| @@ -2105,7 +2105,11 @@ static int r600_cp_load_microcode(struct radeon_device *rdev) | |||
| 2105 | 2105 | ||
| 2106 | r600_cp_stop(rdev); | 2106 | r600_cp_stop(rdev); |
| 2107 | 2107 | ||
| 2108 | WREG32(CP_RB_CNTL, RB_NO_UPDATE | RB_BLKSZ(15) | RB_BUFSZ(3)); | 2108 | WREG32(CP_RB_CNTL, |
| 2109 | #ifdef __BIG_ENDIAN | ||
| 2110 | BUF_SWAP_32BIT | | ||
| 2111 | #endif | ||
| 2112 | RB_NO_UPDATE | RB_BLKSZ(15) | RB_BUFSZ(3)); | ||
| 2109 | 2113 | ||
| 2110 | /* Reset cp */ | 2114 | /* Reset cp */ |
| 2111 | WREG32(GRBM_SOFT_RESET, SOFT_RESET_CP); | 2115 | WREG32(GRBM_SOFT_RESET, SOFT_RESET_CP); |
| @@ -2192,7 +2196,11 @@ int r600_cp_resume(struct radeon_device *rdev) | |||
| 2192 | WREG32(CP_RB_WPTR, 0); | 2196 | WREG32(CP_RB_WPTR, 0); |
| 2193 | 2197 | ||
| 2194 | /* set the wb address whether it's enabled or not */ | 2198 | /* set the wb address whether it's enabled or not */ |
| 2195 | WREG32(CP_RB_RPTR_ADDR, (rdev->wb.gpu_addr + RADEON_WB_CP_RPTR_OFFSET) & 0xFFFFFFFC); | 2199 | WREG32(CP_RB_RPTR_ADDR, |
| 2200 | #ifdef __BIG_ENDIAN | ||
| 2201 | RB_RPTR_SWAP(2) | | ||
| 2202 | #endif | ||
| 2203 | ((rdev->wb.gpu_addr + RADEON_WB_CP_RPTR_OFFSET) & 0xFFFFFFFC)); | ||
| 2196 | WREG32(CP_RB_RPTR_ADDR_HI, upper_32_bits(rdev->wb.gpu_addr + RADEON_WB_CP_RPTR_OFFSET) & 0xFF); | 2204 | WREG32(CP_RB_RPTR_ADDR_HI, upper_32_bits(rdev->wb.gpu_addr + RADEON_WB_CP_RPTR_OFFSET) & 0xFF); |
| 2197 | WREG32(SCRATCH_ADDR, ((rdev->wb.gpu_addr + RADEON_WB_SCRATCH_OFFSET) >> 8) & 0xFFFFFFFF); | 2205 | WREG32(SCRATCH_ADDR, ((rdev->wb.gpu_addr + RADEON_WB_SCRATCH_OFFSET) >> 8) & 0xFFFFFFFF); |
| 2198 | 2206 | ||
| @@ -2628,7 +2636,11 @@ void r600_ring_ib_execute(struct radeon_device *rdev, struct radeon_ib *ib) | |||
| 2628 | { | 2636 | { |
| 2629 | /* FIXME: implement */ | 2637 | /* FIXME: implement */ |
| 2630 | radeon_ring_write(rdev, PACKET3(PACKET3_INDIRECT_BUFFER, 2)); | 2638 | radeon_ring_write(rdev, PACKET3(PACKET3_INDIRECT_BUFFER, 2)); |
| 2631 | radeon_ring_write(rdev, ib->gpu_addr & 0xFFFFFFFC); | 2639 | radeon_ring_write(rdev, |
| 2640 | #ifdef __BIG_ENDIAN | ||
| 2641 | (2 << 0) | | ||
| 2642 | #endif | ||
| 2643 | (ib->gpu_addr & 0xFFFFFFFC)); | ||
| 2632 | radeon_ring_write(rdev, upper_32_bits(ib->gpu_addr) & 0xFF); | 2644 | radeon_ring_write(rdev, upper_32_bits(ib->gpu_addr) & 0xFF); |
| 2633 | radeon_ring_write(rdev, ib->length_dw); | 2645 | radeon_ring_write(rdev, ib->length_dw); |
| 2634 | } | 2646 | } |
| @@ -3297,8 +3309,8 @@ restart_ih: | |||
| 3297 | while (rptr != wptr) { | 3309 | while (rptr != wptr) { |
| 3298 | /* wptr/rptr are in bytes! */ | 3310 | /* wptr/rptr are in bytes! */ |
| 3299 | ring_index = rptr / 4; | 3311 | ring_index = rptr / 4; |
| 3300 | src_id = rdev->ih.ring[ring_index] & 0xff; | 3312 | src_id = le32_to_cpu(rdev->ih.ring[ring_index]) & 0xff; |
| 3301 | src_data = rdev->ih.ring[ring_index + 1] & 0xfffffff; | 3313 | src_data = le32_to_cpu(rdev->ih.ring[ring_index + 1]) & 0xfffffff; |
| 3302 | 3314 | ||
| 3303 | switch (src_id) { | 3315 | switch (src_id) { |
| 3304 | case 1: /* D1 vblank/vline */ | 3316 | case 1: /* D1 vblank/vline */ |
diff --git a/drivers/gpu/drm/radeon/r600_blit_kms.c b/drivers/gpu/drm/radeon/r600_blit_kms.c index 86e5aa07f0db..69d94dd4db21 100644 --- a/drivers/gpu/drm/radeon/r600_blit_kms.c +++ b/drivers/gpu/drm/radeon/r600_blit_kms.c | |||
| @@ -165,6 +165,9 @@ set_vtx_resource(struct radeon_device *rdev, u64 gpu_addr) | |||
| 165 | u32 sq_vtx_constant_word2; | 165 | u32 sq_vtx_constant_word2; |
| 166 | 166 | ||
| 167 | sq_vtx_constant_word2 = ((upper_32_bits(gpu_addr) & 0xff) | (16 << 8)); | 167 | sq_vtx_constant_word2 = ((upper_32_bits(gpu_addr) & 0xff) | (16 << 8)); |
| 168 | #ifdef __BIG_ENDIAN | ||
| 169 | sq_vtx_constant_word2 |= (2 << 30); | ||
| 170 | #endif | ||
| 168 | 171 | ||
| 169 | radeon_ring_write(rdev, PACKET3(PACKET3_SET_RESOURCE, 7)); | 172 | radeon_ring_write(rdev, PACKET3(PACKET3_SET_RESOURCE, 7)); |
| 170 | radeon_ring_write(rdev, 0x460); | 173 | radeon_ring_write(rdev, 0x460); |
| @@ -253,7 +256,11 @@ draw_auto(struct radeon_device *rdev) | |||
| 253 | radeon_ring_write(rdev, DI_PT_RECTLIST); | 256 | radeon_ring_write(rdev, DI_PT_RECTLIST); |
| 254 | 257 | ||
| 255 | radeon_ring_write(rdev, PACKET3(PACKET3_INDEX_TYPE, 0)); | 258 | radeon_ring_write(rdev, PACKET3(PACKET3_INDEX_TYPE, 0)); |
| 256 | radeon_ring_write(rdev, DI_INDEX_SIZE_16_BIT); | 259 | radeon_ring_write(rdev, |
| 260 | #ifdef __BIG_ENDIAN | ||
| 261 | (2 << 2) | | ||
| 262 | #endif | ||
| 263 | DI_INDEX_SIZE_16_BIT); | ||
| 257 | 264 | ||
| 258 | radeon_ring_write(rdev, PACKET3(PACKET3_NUM_INSTANCES, 0)); | 265 | radeon_ring_write(rdev, PACKET3(PACKET3_NUM_INSTANCES, 0)); |
| 259 | radeon_ring_write(rdev, 1); | 266 | radeon_ring_write(rdev, 1); |
| @@ -424,7 +431,11 @@ set_default_state(struct radeon_device *rdev) | |||
| 424 | dwords = ALIGN(rdev->r600_blit.state_len, 0x10); | 431 | dwords = ALIGN(rdev->r600_blit.state_len, 0x10); |
| 425 | gpu_addr = rdev->r600_blit.shader_gpu_addr + rdev->r600_blit.state_offset; | 432 | gpu_addr = rdev->r600_blit.shader_gpu_addr + rdev->r600_blit.state_offset; |
| 426 | radeon_ring_write(rdev, PACKET3(PACKET3_INDIRECT_BUFFER, 2)); | 433 | radeon_ring_write(rdev, PACKET3(PACKET3_INDIRECT_BUFFER, 2)); |
| 427 | radeon_ring_write(rdev, gpu_addr & 0xFFFFFFFC); | 434 | radeon_ring_write(rdev, |
| 435 | #ifdef __BIG_ENDIAN | ||
| 436 | (2 << 0) | | ||
| 437 | #endif | ||
| 438 | (gpu_addr & 0xFFFFFFFC)); | ||
| 428 | radeon_ring_write(rdev, upper_32_bits(gpu_addr) & 0xFF); | 439 | radeon_ring_write(rdev, upper_32_bits(gpu_addr) & 0xFF); |
| 429 | radeon_ring_write(rdev, dwords); | 440 | radeon_ring_write(rdev, dwords); |
| 430 | 441 | ||
| @@ -467,7 +478,7 @@ static inline uint32_t i2f(uint32_t input) | |||
| 467 | int r600_blit_init(struct radeon_device *rdev) | 478 | int r600_blit_init(struct radeon_device *rdev) |
| 468 | { | 479 | { |
| 469 | u32 obj_size; | 480 | u32 obj_size; |
| 470 | int r, dwords; | 481 | int i, r, dwords; |
| 471 | void *ptr; | 482 | void *ptr; |
| 472 | u32 packet2s[16]; | 483 | u32 packet2s[16]; |
| 473 | int num_packet2s = 0; | 484 | int num_packet2s = 0; |
| @@ -486,7 +497,7 @@ int r600_blit_init(struct radeon_device *rdev) | |||
| 486 | 497 | ||
| 487 | dwords = rdev->r600_blit.state_len; | 498 | dwords = rdev->r600_blit.state_len; |
| 488 | while (dwords & 0xf) { | 499 | while (dwords & 0xf) { |
| 489 | packet2s[num_packet2s++] = PACKET2(0); | 500 | packet2s[num_packet2s++] = cpu_to_le32(PACKET2(0)); |
| 490 | dwords++; | 501 | dwords++; |
| 491 | } | 502 | } |
| 492 | 503 | ||
| @@ -529,8 +540,10 @@ int r600_blit_init(struct radeon_device *rdev) | |||
| 529 | if (num_packet2s) | 540 | if (num_packet2s) |
| 530 | memcpy_toio(ptr + rdev->r600_blit.state_offset + (rdev->r600_blit.state_len * 4), | 541 | memcpy_toio(ptr + rdev->r600_blit.state_offset + (rdev->r600_blit.state_len * 4), |
| 531 | packet2s, num_packet2s * 4); | 542 | packet2s, num_packet2s * 4); |
| 532 | memcpy(ptr + rdev->r600_blit.vs_offset, r6xx_vs, r6xx_vs_size * 4); | 543 | for (i = 0; i < r6xx_vs_size; i++) |
| 533 | memcpy(ptr + rdev->r600_blit.ps_offset, r6xx_ps, r6xx_ps_size * 4); | 544 | *(u32 *)((unsigned long)ptr + rdev->r600_blit.vs_offset + i * 4) = cpu_to_le32(r6xx_vs[i]); |
| 545 | for (i = 0; i < r6xx_ps_size; i++) | ||
| 546 | *(u32 *)((unsigned long)ptr + rdev->r600_blit.ps_offset + i * 4) = cpu_to_le32(r6xx_ps[i]); | ||
| 534 | radeon_bo_kunmap(rdev->r600_blit.shader_obj); | 547 | radeon_bo_kunmap(rdev->r600_blit.shader_obj); |
| 535 | radeon_bo_unreserve(rdev->r600_blit.shader_obj); | 548 | radeon_bo_unreserve(rdev->r600_blit.shader_obj); |
| 536 | 549 | ||
diff --git a/drivers/gpu/drm/radeon/r600_blit_shaders.c b/drivers/gpu/drm/radeon/r600_blit_shaders.c index e8151c1d55b2..2d1f6c5ee2a7 100644 --- a/drivers/gpu/drm/radeon/r600_blit_shaders.c +++ b/drivers/gpu/drm/radeon/r600_blit_shaders.c | |||
| @@ -684,7 +684,11 @@ const u32 r6xx_vs[] = | |||
| 684 | 0x00000000, | 684 | 0x00000000, |
| 685 | 0x3c000000, | 685 | 0x3c000000, |
| 686 | 0x68cd1000, | 686 | 0x68cd1000, |
| 687 | #ifdef __BIG_ENDIAN | ||
| 688 | 0x000a0000, | ||
| 689 | #else | ||
| 687 | 0x00080000, | 690 | 0x00080000, |
| 691 | #endif | ||
| 688 | 0x00000000, | 692 | 0x00000000, |
| 689 | }; | 693 | }; |
| 690 | 694 | ||
diff --git a/drivers/gpu/drm/radeon/r600d.h b/drivers/gpu/drm/radeon/r600d.h index a5d898b4bad2..04bac0bbd3ec 100644 --- a/drivers/gpu/drm/radeon/r600d.h +++ b/drivers/gpu/drm/radeon/r600d.h | |||
| @@ -154,13 +154,14 @@ | |||
| 154 | #define ROQ_IB2_START(x) ((x) << 8) | 154 | #define ROQ_IB2_START(x) ((x) << 8) |
| 155 | #define CP_RB_BASE 0xC100 | 155 | #define CP_RB_BASE 0xC100 |
| 156 | #define CP_RB_CNTL 0xC104 | 156 | #define CP_RB_CNTL 0xC104 |
| 157 | #define RB_BUFSZ(x) ((x)<<0) | 157 | #define RB_BUFSZ(x) ((x) << 0) |
| 158 | #define RB_BLKSZ(x) ((x)<<8) | 158 | #define RB_BLKSZ(x) ((x) << 8) |
| 159 | #define RB_NO_UPDATE (1<<27) | 159 | #define RB_NO_UPDATE (1 << 27) |
| 160 | #define RB_RPTR_WR_ENA (1<<31) | 160 | #define RB_RPTR_WR_ENA (1 << 31) |
| 161 | #define BUF_SWAP_32BIT (2 << 16) | 161 | #define BUF_SWAP_32BIT (2 << 16) |
| 162 | #define CP_RB_RPTR 0x8700 | 162 | #define CP_RB_RPTR 0x8700 |
| 163 | #define CP_RB_RPTR_ADDR 0xC10C | 163 | #define CP_RB_RPTR_ADDR 0xC10C |
| 164 | #define RB_RPTR_SWAP(x) ((x) << 0) | ||
| 164 | #define CP_RB_RPTR_ADDR_HI 0xC110 | 165 | #define CP_RB_RPTR_ADDR_HI 0xC110 |
| 165 | #define CP_RB_RPTR_WR 0xC108 | 166 | #define CP_RB_RPTR_WR 0xC108 |
| 166 | #define CP_RB_WPTR 0xC114 | 167 | #define CP_RB_WPTR 0xC114 |
diff --git a/drivers/gpu/drm/radeon/rv770.c b/drivers/gpu/drm/radeon/rv770.c index 2211a323db41..d8ba67690656 100644 --- a/drivers/gpu/drm/radeon/rv770.c +++ b/drivers/gpu/drm/radeon/rv770.c | |||
| @@ -321,7 +321,11 @@ static int rv770_cp_load_microcode(struct radeon_device *rdev) | |||
| 321 | return -EINVAL; | 321 | return -EINVAL; |
| 322 | 322 | ||
| 323 | r700_cp_stop(rdev); | 323 | r700_cp_stop(rdev); |
| 324 | WREG32(CP_RB_CNTL, RB_NO_UPDATE | (15 << 8) | (3 << 0)); | 324 | WREG32(CP_RB_CNTL, |
| 325 | #ifdef __BIG_ENDIAN | ||
| 326 | BUF_SWAP_32BIT | | ||
| 327 | #endif | ||
| 328 | RB_NO_UPDATE | RB_BLKSZ(15) | RB_BUFSZ(3)); | ||
| 325 | 329 | ||
| 326 | /* Reset cp */ | 330 | /* Reset cp */ |
| 327 | WREG32(GRBM_SOFT_RESET, SOFT_RESET_CP); | 331 | WREG32(GRBM_SOFT_RESET, SOFT_RESET_CP); |
diff --git a/drivers/gpu/drm/radeon/rv770d.h b/drivers/gpu/drm/radeon/rv770d.h index abc8cf5a3672..79fa588e9ed5 100644 --- a/drivers/gpu/drm/radeon/rv770d.h +++ b/drivers/gpu/drm/radeon/rv770d.h | |||
| @@ -76,10 +76,10 @@ | |||
| 76 | #define ROQ_IB1_START(x) ((x) << 0) | 76 | #define ROQ_IB1_START(x) ((x) << 0) |
| 77 | #define ROQ_IB2_START(x) ((x) << 8) | 77 | #define ROQ_IB2_START(x) ((x) << 8) |
| 78 | #define CP_RB_CNTL 0xC104 | 78 | #define CP_RB_CNTL 0xC104 |
| 79 | #define RB_BUFSZ(x) ((x)<<0) | 79 | #define RB_BUFSZ(x) ((x) << 0) |
| 80 | #define RB_BLKSZ(x) ((x)<<8) | 80 | #define RB_BLKSZ(x) ((x) << 8) |
| 81 | #define RB_NO_UPDATE (1<<27) | 81 | #define RB_NO_UPDATE (1 << 27) |
| 82 | #define RB_RPTR_WR_ENA (1<<31) | 82 | #define RB_RPTR_WR_ENA (1 << 31) |
| 83 | #define BUF_SWAP_32BIT (2 << 16) | 83 | #define BUF_SWAP_32BIT (2 << 16) |
| 84 | #define CP_RB_RPTR 0x8700 | 84 | #define CP_RB_RPTR 0x8700 |
| 85 | #define CP_RB_RPTR_ADDR 0xC10C | 85 | #define CP_RB_RPTR_ADDR 0xC10C |
