• Ville Syrjälä's avatar
    drm/i915/dsb: Allocate command buffer from local memory · bcdcae63
    Ville Syrjälä authored
    Using system memory for the DSB command buffer doesn't appear to work.
    On DG2 it seems like the hardware internally replaces the actual memory
    reads with zeroes, and so we end up executing a bunch of NOOPs instead
    of whatever commands we put in the buffer. To determine that I measured
    the time it takes to execute the instructions, and the results are
    always more or less consistent with executing a buffer full of NOOPs
    from local memory.
    
    Another theory I considered was some kind of cache coherency issue.
    Looks like i915_gem_object_pin_map_unlocked() will in fact give you a
    WB mapping for system memory on DGFX regardless of what mapping mode
    was requested (WC in case of the DSB code). But clflush did not
    change the behaviour at all, so that theory seems moot.
    
    On DG1 it looks like the hardware might actually be fetching data from
    system memory as the logs indicate that we just get underruns. But that
    is equally bad, so doesn't look like we can really use system memory on
    DG1 either.
    
    Thus always allocate the DSB command buffer from local memory on
    discrete GPUs.
    Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20231009132204.15098-1-ville.syrjala@linux.intel.comReviewed-by: default avatarUma Shankar <uma.shankar@intel.com>
    bcdcae63
intel_dsb.c 14 KB