• Andres Rodriguez's avatar
    drm/amdgpu: implement ring set_priority for gfx_v8 compute v9 · b8866c26
    Andres Rodriguez authored
    Programming CP_HQD_QUEUE_PRIORITY enables a queue to take priority over
    other queues on the same pipe. Multiple queues on a pipe are timesliced
    so this gives us full precedence over other queues.
    
    Programming CP_HQD_PIPE_PRIORITY changes the SPI_ARB_PRIORITY of the
    wave as follows:
            0x2: CS_H
            0x1: CS_M
            0x0: CS_L
    
    The SPI block will then dispatch work according to the policy set by
    SPI_ARB_PRIORITY. In the current policy CS_H is higher priority than
    gfx.
    
    In order to prevent getting stuck in loops of resources bouncing between
    GFX and high priority compute and introducing further latency, we
    statically reserve a portion of the pipe.
    
    v2: fix srbm_select to ring->queue and use ring->funcs->type
    v3: use AMD_SCHED_PRIORITY_* instead of AMDGPU_CTX_PRIORITY_*
    v4: switch int to enum amd_sched_priority
    v5: corresponding changes for srbm_lock
    v6: change CU reservation to PIPE_PERCENT allocation
    v7: use kiq instead of MMIO
    v8: back to MMIO, and make the implementation sleep safe.
    v9: corresponding changes for splitting HIGH into _HW/_SW
    Acked-by: default avatarChristian König <christian.koenig@amd.com>
    Signed-off-by: default avatarAndres Rodriguez <andresx7@gmail.com>
    Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
    b8866c26
amdgpu_device.c 98.9 KB