• Matt Roper's avatar
    drm/i915: Add DISPLAY_VER() and related macros · 01eb15c9
    Matt Roper authored
    Although we've long referred to platforms by a single "GEN" number, the
    hardware teams have recommended that we stop doing this since the
    various component IP blocks are going to start using independent number
    schemes with varying cadence.  To support this, hardware platforms a bit
    down the road are going to start providing MMIO registers that the
    driver can read to obtain the "graphics version," "media version," and
    "display version" without needing to do a PCI ID -> platform -> version
    translation.
    
    Although our current platforms don't yet expose these registers (and the
    next couple we release probably won't have them yet either), the
    hardware teams would still like to see us move to this independent
    numbering scheme now in preparation.  For i915 that means we should try
    to eliminate all usage of INTEL_GEN() throughout our code and instead
    replace it with separate GRAPHICS_VER(), MEDIA_VER(), and DISPLAY_VER()
    constructs in the code.  For old platforms, these will all usually give
    the same value for each IP block (aside from a few special cases like
    GLK which we can no more accurately represent as graphics=9 +
    display=10), but future platforms will have more flexibility to bump IP
    version numbers independently.
    
    The upcoming ADL-P platform will have a display version of 13 and a
    graphics version of 12, so let's just the first step of breaking out
    DISPLAY_VER(), but leaving the rest of INTEL_GEN() untouched for now.
    For now we'll automatically derive the display version from the
    platform's INTEL_GEN() value except in cases where an alternative
    display version is explicitly provided in the device info structure.
    
    We also add some helper macros IS_DISPLAY_VER(i915, ver) and
    IS_DISPLAY_RANGE(i915, from, until) that match the behavior of the
    existing gen-based macros.  However unlike IS_GEN(), we will implement
    those macros with direct comparisons rather than trying to maintain a
    mask to help compiler optimization.  In practice the optimization winds
    up not being used in very many places (since the vast majority of our
    platform checks are of the form "gen >= x") so there is pretty minimal
    size reduction in the final driver binary[1].  We're also likely going
    to need to extend these version numbers to non-integer major.minor
    values at some point in the future, so the mask approach won't work at
    all once we get to platforms like that.
    
     [1] The results before/after the next patch in this series, which
         switches our code over to the new display macros:
    
            $ size i915.ko.{orig,new}
               text    data     bss     dec     hex filename
            2940291  102944    5384 3048619  2e84ab i915.ko.orig
            2940723  102956    5384 3049063  2e8667 i915.ko.new
    
    v2:
     - Move version into device info's display sub-struct. (Jani)
     - Add extra parentheses to macros.  (Jani)
     - Note the lack of genmask optimization in the display-based macros and
       give size data.  (Lucas)
    
    Cc: Jani Nikula <jani.nikula@linux.intel.com>
    Cc: Lucas De Marchi <lucas.demarchi@intel.com>
    Signed-off-by: default avatarMatt Roper <matthew.d.roper@intel.com>
    Reviewed-by: default avatarLucas De Marchi <lucas.demarchi@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20210320044245.3920043-3-matthew.d.roper@intel.com
    01eb15c9
i915_pci.c 29.5 KB