From: Ville Syrjälä <[email protected]> In order to eliminate runtime platform check overhead from the mmio read/write functions, we'll need a good way to construct optimal variants for each platform. Do that in the form of __intel_de_{read,write}() that can be customized via (compile time constnt) mmio_flags. The compiler will eliminate all the stuff we don't want.
For now there is nothing to eliminate but next we'll start moving more stuff in to make that possible. Signed-off-by: Ville Syrjälä <[email protected]> --- drivers/gpu/drm/i915/display/intel_de.c | 26 +++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/i915/display/intel_de.c b/drivers/gpu/drm/i915/display/intel_de.c index 4f423a684ec2..cde2886fe2ca 100644 --- a/drivers/gpu/drm/i915/display/intel_de.c +++ b/drivers/gpu/drm/i915/display/intel_de.c @@ -163,16 +163,38 @@ u16 intel_de_read16(struct intel_display *display, intel_reg_t reg) return intel_uncore_read16(__to_uncore(display), reg); } +static __always_inline u32 +__intel_de_read(struct intel_display *display, intel_reg_t reg, + const unsigned int mmio_flags) +{ + u32 val; + + val = intel_uncore_read(__to_uncore(display), reg); + + return val; +} + +static __always_inline void +__intel_de_write(struct intel_display *display, intel_reg_t reg, u32 val, + const unsigned int mmio_flags) +{ + intel_uncore_write(__to_uncore(display), reg, val); +} + +#define I9XX_MMIO_FLAGS 0 + static u32 i9xx_mmio_read(struct intel_display *display, intel_reg_t reg) { - return intel_uncore_read(__to_uncore(display), reg); + return __intel_de_read(display, reg, I9XX_MMIO_FLAGS); } static void i9xx_mmio_write(struct intel_display *display, intel_reg_t reg, u32 val) { - intel_uncore_write(__to_uncore(display), reg, val); + __intel_de_write(display, reg, val, I9XX_MMIO_FLAGS); } +#undef I9XX_MMIO_FLAGS + static const struct intel_mmio_funcs i9xx_mmio_funcs = { .read = i9xx_mmio_read, .write = i9xx_mmio_write, -- 2.56.0
