si.c (ba4b60e85d6c5fc2242fd24e131a47fb922e5d89) si.c (ff212f25feb44a915ce9c0144faef7fae27a6e61)
1/*
2 * Copyright 2011 Advanced Micro Devices, Inc.
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the

--- 3420 unchanged lines hidden (view full) ---

3429 WREG32(SCRATCH_UMSK, 0);
3430 }
3431
3432 mdelay(1);
3433 WREG32(CP_RB0_CNTL, tmp);
3434
3435 WREG32(CP_RB0_BASE, ring->gpu_addr >> 8);
3436
1/*
2 * Copyright 2011 Advanced Micro Devices, Inc.
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the

--- 3420 unchanged lines hidden (view full) ---

3429 WREG32(SCRATCH_UMSK, 0);
3430 }
3431
3432 mdelay(1);
3433 WREG32(CP_RB0_CNTL, tmp);
3434
3435 WREG32(CP_RB0_BASE, ring->gpu_addr >> 8);
3436
3437 ring->rptr = RREG32(CP_RB0_RPTR);
3438
3439 /* ring1 - compute only */
3440 /* Set ring buffer size */
3441 ring = &rdev->ring[CAYMAN_RING_TYPE_CP1_INDEX];
3442 rb_bufsz = order_base_2(ring->ring_size / 8);
3443 tmp = (order_base_2(RADEON_GPU_PAGE_SIZE/8) << 8) | rb_bufsz;
3444#ifdef __BIG_ENDIAN
3445 tmp |= BUF_SWAP_32BIT;
3446#endif

--- 8 unchanged lines hidden (view full) ---

3455 WREG32(CP_RB1_RPTR_ADDR, (rdev->wb.gpu_addr + RADEON_WB_CP1_RPTR_OFFSET) & 0xFFFFFFFC);
3456 WREG32(CP_RB1_RPTR_ADDR_HI, upper_32_bits(rdev->wb.gpu_addr + RADEON_WB_CP1_RPTR_OFFSET) & 0xFF);
3457
3458 mdelay(1);
3459 WREG32(CP_RB1_CNTL, tmp);
3460
3461 WREG32(CP_RB1_BASE, ring->gpu_addr >> 8);
3462
3437 /* ring1 - compute only */
3438 /* Set ring buffer size */
3439 ring = &rdev->ring[CAYMAN_RING_TYPE_CP1_INDEX];
3440 rb_bufsz = order_base_2(ring->ring_size / 8);
3441 tmp = (order_base_2(RADEON_GPU_PAGE_SIZE/8) << 8) | rb_bufsz;
3442#ifdef __BIG_ENDIAN
3443 tmp |= BUF_SWAP_32BIT;
3444#endif

--- 8 unchanged lines hidden (view full) ---

3453 WREG32(CP_RB1_RPTR_ADDR, (rdev->wb.gpu_addr + RADEON_WB_CP1_RPTR_OFFSET) & 0xFFFFFFFC);
3454 WREG32(CP_RB1_RPTR_ADDR_HI, upper_32_bits(rdev->wb.gpu_addr + RADEON_WB_CP1_RPTR_OFFSET) & 0xFF);
3455
3456 mdelay(1);
3457 WREG32(CP_RB1_CNTL, tmp);
3458
3459 WREG32(CP_RB1_BASE, ring->gpu_addr >> 8);
3460
3463 ring->rptr = RREG32(CP_RB1_RPTR);
3464
3465 /* ring2 - compute only */
3466 /* Set ring buffer size */
3467 ring = &rdev->ring[CAYMAN_RING_TYPE_CP2_INDEX];
3468 rb_bufsz = order_base_2(ring->ring_size / 8);
3469 tmp = (order_base_2(RADEON_GPU_PAGE_SIZE/8) << 8) | rb_bufsz;
3470#ifdef __BIG_ENDIAN
3471 tmp |= BUF_SWAP_32BIT;
3472#endif

--- 8 unchanged lines hidden (view full) ---

3481 WREG32(CP_RB2_RPTR_ADDR, (rdev->wb.gpu_addr + RADEON_WB_CP2_RPTR_OFFSET) & 0xFFFFFFFC);
3482 WREG32(CP_RB2_RPTR_ADDR_HI, upper_32_bits(rdev->wb.gpu_addr + RADEON_WB_CP2_RPTR_OFFSET) & 0xFF);
3483
3484 mdelay(1);
3485 WREG32(CP_RB2_CNTL, tmp);
3486
3487 WREG32(CP_RB2_BASE, ring->gpu_addr >> 8);
3488
3461 /* ring2 - compute only */
3462 /* Set ring buffer size */
3463 ring = &rdev->ring[CAYMAN_RING_TYPE_CP2_INDEX];
3464 rb_bufsz = order_base_2(ring->ring_size / 8);
3465 tmp = (order_base_2(RADEON_GPU_PAGE_SIZE/8) << 8) | rb_bufsz;
3466#ifdef __BIG_ENDIAN
3467 tmp |= BUF_SWAP_32BIT;
3468#endif

--- 8 unchanged lines hidden (view full) ---

3477 WREG32(CP_RB2_RPTR_ADDR, (rdev->wb.gpu_addr + RADEON_WB_CP2_RPTR_OFFSET) & 0xFFFFFFFC);
3478 WREG32(CP_RB2_RPTR_ADDR_HI, upper_32_bits(rdev->wb.gpu_addr + RADEON_WB_CP2_RPTR_OFFSET) & 0xFF);
3479
3480 mdelay(1);
3481 WREG32(CP_RB2_CNTL, tmp);
3482
3483 WREG32(CP_RB2_BASE, ring->gpu_addr >> 8);
3484
3489 ring->rptr = RREG32(CP_RB2_RPTR);
3490
3491 /* start the rings */
3492 si_cp_start(rdev);
3493 rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ready = true;
3494 rdev->ring[CAYMAN_RING_TYPE_CP1_INDEX].ready = true;
3495 rdev->ring[CAYMAN_RING_TYPE_CP2_INDEX].ready = true;
3496 r = radeon_ring_test(rdev, RADEON_RING_TYPE_GFX_INDEX, &rdev->ring[RADEON_RING_TYPE_GFX_INDEX]);
3497 if (r) {
3498 rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ready = false;

--- 368 unchanged lines hidden (view full) ---

3867 */
3868bool si_gfx_is_lockup(struct radeon_device *rdev, struct radeon_ring *ring)
3869{
3870 u32 reset_mask = si_gpu_check_soft_reset(rdev);
3871
3872 if (!(reset_mask & (RADEON_RESET_GFX |
3873 RADEON_RESET_COMPUTE |
3874 RADEON_RESET_CP))) {
3485 /* start the rings */
3486 si_cp_start(rdev);
3487 rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ready = true;
3488 rdev->ring[CAYMAN_RING_TYPE_CP1_INDEX].ready = true;
3489 rdev->ring[CAYMAN_RING_TYPE_CP2_INDEX].ready = true;
3490 r = radeon_ring_test(rdev, RADEON_RING_TYPE_GFX_INDEX, &rdev->ring[RADEON_RING_TYPE_GFX_INDEX]);
3491 if (r) {
3492 rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ready = false;

--- 368 unchanged lines hidden (view full) ---

3861 */
3862bool si_gfx_is_lockup(struct radeon_device *rdev, struct radeon_ring *ring)
3863{
3864 u32 reset_mask = si_gpu_check_soft_reset(rdev);
3865
3866 if (!(reset_mask & (RADEON_RESET_GFX |
3867 RADEON_RESET_COMPUTE |
3868 RADEON_RESET_CP))) {
3875 radeon_ring_lockup_update(ring);
3869 radeon_ring_lockup_update(rdev, ring);
3876 return false;
3877 }
3878 /* force CP activities */
3879 radeon_ring_force_activity(rdev, ring);
3880 return radeon_ring_test_lockup(rdev, ring);
3881}
3882
3883/* MC */

--- 3401 unchanged lines hidden ---
3870 return false;
3871 }
3872 /* force CP activities */
3873 radeon_ring_force_activity(rdev, ring);
3874 return radeon_ring_test_lockup(rdev, ring);
3875}
3876
3877/* MC */

--- 3401 unchanged lines hidden ---