lkml.org 
[lkml]   [2014]   [Feb]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.13 079/120] drm/radeon: set the full cache bit for fences on r7xx+
    Date
    3.13-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Alex Deucher <alexander.deucher@amd.com>

    commit d45b964a22cad962d3ede1eba8d24f5cee7b2a92 upstream.

    Needed to properly flush the read caches for fences.

    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/gpu/drm/radeon/r600.c | 13 +++++++------
    drivers/gpu/drm/radeon/r600d.h | 1 +
    2 files changed, 8 insertions(+), 6 deletions(-)

    --- a/drivers/gpu/drm/radeon/r600.c
    +++ b/drivers/gpu/drm/radeon/r600.c
    @@ -2607,14 +2607,17 @@ void r600_fence_ring_emit(struct radeon_
    struct radeon_fence *fence)
    {
    struct radeon_ring *ring = &rdev->ring[fence->ring];
    + u32 cp_coher_cntl = PACKET3_TC_ACTION_ENA | PACKET3_VC_ACTION_ENA |
    + PACKET3_SH_ACTION_ENA;
    +
    + if (rdev->family >= CHIP_RV770)
    + cp_coher_cntl |= PACKET3_FULL_CACHE_ENA;

    if (rdev->wb.use_event) {
    u64 addr = rdev->fence_drv[fence->ring].gpu_addr;
    /* flush read cache over gart */
    radeon_ring_write(ring, PACKET3(PACKET3_SURFACE_SYNC, 3));
    - radeon_ring_write(ring, PACKET3_TC_ACTION_ENA |
    - PACKET3_VC_ACTION_ENA |
    - PACKET3_SH_ACTION_ENA);
    + radeon_ring_write(ring, cp_coher_cntl);
    radeon_ring_write(ring, 0xFFFFFFFF);
    radeon_ring_write(ring, 0);
    radeon_ring_write(ring, 10); /* poll interval */
    @@ -2628,9 +2631,7 @@ void r600_fence_ring_emit(struct radeon_
    } else {
    /* flush read cache over gart */
    radeon_ring_write(ring, PACKET3(PACKET3_SURFACE_SYNC, 3));
    - radeon_ring_write(ring, PACKET3_TC_ACTION_ENA |
    - PACKET3_VC_ACTION_ENA |
    - PACKET3_SH_ACTION_ENA);
    + radeon_ring_write(ring, cp_coher_cntl);
    radeon_ring_write(ring, 0xFFFFFFFF);
    radeon_ring_write(ring, 0);
    radeon_ring_write(ring, 10); /* poll interval */
    --- a/drivers/gpu/drm/radeon/r600d.h
    +++ b/drivers/gpu/drm/radeon/r600d.h
    @@ -1575,6 +1575,7 @@
    # define PACKET3_CP_DMA_CMD_DAIC (1 << 29)
    #define PACKET3_SURFACE_SYNC 0x43
    # define PACKET3_CB0_DEST_BASE_ENA (1 << 6)
    +# define PACKET3_FULL_CACHE_ENA (1 << 20) /* r7xx+ only */
    # define PACKET3_TC_ACTION_ENA (1 << 23)
    # define PACKET3_VC_ACTION_ENA (1 << 24)
    # define PACKET3_CB_ACTION_ENA (1 << 25)



    \
     
     \ /
      Last update: 2014-02-11 20:41    [W:2.054 / U:0.144 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site