• José Roberto de Souza's avatar
    drm/i915/psr: Make PSR registers relative to transcoders · 4ab4fa10
    José Roberto de Souza authored
    PSR registers are a mess, some have the full address while others just
    have the additional offset from psr_mmio_base.
    
    For BDW+ psr_mmio_base is nothing more than TRANSCODER_EDP_OFFSET +
    0x800 and using it makes more difficult for people with an PSR
    register address or PSR register name from from BSpec as i915 also
    don't match the BSpec names.
    For HSW psr_mmio_base is _DDI_BUF_CTL_A + 0x800 and PSR registers are
    only available in DDIA.
    
    Other reason to make relative to transcoder is that since BDW every
    transcoder have PSR registers, so in theory it should be possible to
    have PSR enabled in a non-eDP transcoder.
    
    So for BDW+ we can use _TRANS2() to get the register offset of any
    PSR register in any transcoder while for HSW we have _HSW_PSR_ADJ
    that will calculate the register offset for the single PSR instance,
    noting that we are already guarded about trying to enable PSR in other
    port than DDIA on HSW by the 'if (dig_port->base.port != PORT_A)' in
    intel_psr_compute_config(), this check should only be valid for HSW
    and will be changed in future.
    PSR2 registers and PSR_EVENT was added after Haswell so that is why
    _PSR_ADJ() is not used in some macros.
    
    The only registers that can not be relative to transcoder are
    PSR_IMR and PSR_IIR that are not relative to anything, so keeping it
    hardcoded. That changed for TGL but it will be handled in another
    patch.
    
    Also removing BDW_EDP_PSR_BASE from GVT because it is not used as it
    is the only PSR register that GVT have.
    
    v5:
    - Macros changed to be more explicit about HSW (Dhinakaran)
    - Squashed with the patch that added the tran parameter to the
    macros (Dhinakaran)
    
    v6:
    - Checking for interruption errors after module reload in the
    transcoder that will be used (Dhinakaran)
    - Using lowercase to the registers offsets
    
    v7:
    - Removing IS_HASWELL() from registers macros(Jani)
    
    Cc: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
    Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
    Cc: Jani Nikula <jani.nikula@linux.intel.com>
    Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
    Cc: Zhi Wang <zhi.a.wang@intel.com>
    Reviewed-by: default avatarLucas De Marchi <lucas.demarchi@intel.com>
    Signed-off-by: default avatarJosé Roberto de Souza <jose.souza@intel.com>
    Signed-off-by: default avatarLucas De Marchi <lucas.demarchi@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20190820223325.27490-1-jose.souza@intel.com
    4ab4fa10
i915_drv.h 69.5 KB