Message ID | 20170705143154.32132-2-mahesh1.kumar@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Wed, 05 Jul 2017, Mahesh Kumar <mahesh1.kumar@intel.com> wrote: > From: "Kumar, Mahesh" <mahesh1.kumar@intel.com> > > This patch creates a new function for clamping u64 to fixed16. > And make use of this function in other fixed16 wrappers. > > Signed-off-by: Mahesh Kumar <mahesh1.kumar@intel.com> > Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> > --- > drivers/gpu/drm/i915/i915_drv.h | 28 ++++++++++++---------------- > 1 file changed, 12 insertions(+), 16 deletions(-) > > diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h > index 5e70f5711fc8..1b525051bf5f 100644 > --- a/drivers/gpu/drm/i915/i915_drv.h > +++ b/drivers/gpu/drm/i915/i915_drv.h > @@ -160,6 +160,14 @@ static inline uint_fixed_16_16_t max_fixed_16_16(uint_fixed_16_16_t max1, > return max; > } > > +static inline uint_fixed_16_16_t clamp_u64_to_fixed16(uint64_t val) > +{ > + uint_fixed_16_16_t fp; > + WARN_ON(val >> 32); WARN_ON(val > U32_MAX); makes much more sense. Same all over the place. > + fp.val = clamp_t(uint32_t, val, 0, ~0); The use of clamp_t here is pointless, as fp.val is uint32_t. Assign, possibly with a cast, and be done with it. > + return fp; > +} > + > static inline uint32_t div_round_up_fixed16(uint_fixed_16_16_t val, > uint_fixed_16_16_t d) > { > @@ -170,26 +178,21 @@ static inline uint32_t mul_round_up_u32_fixed16(uint32_t val, > uint_fixed_16_16_t mul) > { > uint64_t intermediate_val; > - uint32_t result; > > intermediate_val = (uint64_t) val * mul.val; > intermediate_val = DIV_ROUND_UP_ULL(intermediate_val, 1 << 16); > WARN_ON(intermediate_val >> 32); > - result = clamp_t(uint32_t, intermediate_val, 0, ~0); > - return result; > + return clamp_t(uint32_t, intermediate_val, 0, ~0); Same here, the function is uint32_t, just return with a cast. > } > > static inline uint_fixed_16_16_t mul_fixed16(uint_fixed_16_16_t val, > uint_fixed_16_16_t mul) > { > uint64_t intermediate_val; > - uint_fixed_16_16_t fp; > > intermediate_val = (uint64_t) val.val * mul.val; > intermediate_val = intermediate_val >> 16; > - WARN_ON(intermediate_val >> 32); > - fp.val = clamp_t(uint32_t, intermediate_val, 0, ~0); > - return fp; > + return clamp_u64_to_fixed16(intermediate_val); > } > > static inline uint_fixed_16_16_t fixed_16_16_div(uint32_t val, uint32_t d) > @@ -203,15 +206,11 @@ static inline uint_fixed_16_16_t fixed_16_16_div(uint32_t val, uint32_t d) > > static inline uint_fixed_16_16_t fixed_16_16_div_u64(uint32_t val, uint32_t d) > { > - uint_fixed_16_16_t res; > uint64_t interm_val; > > interm_val = (uint64_t)val << 16; > interm_val = DIV_ROUND_UP_ULL(interm_val, d); > - WARN_ON(interm_val >> 32); > - res.val = (uint32_t) interm_val; > - > - return res; > + return clamp_u64_to_fixed16(interm_val); > } > > static inline uint32_t div_round_up_u32_fixed16(uint32_t val, > @@ -229,12 +228,9 @@ static inline uint_fixed_16_16_t mul_u32_fixed_16_16(uint32_t val, > uint_fixed_16_16_t mul) > { > uint64_t intermediate_val; > - uint_fixed_16_16_t fp; > > intermediate_val = (uint64_t) val * mul.val; > - WARN_ON(intermediate_val >> 32); > - fp.val = (uint32_t) intermediate_val; > - return fp; > + return clamp_u64_to_fixed16(intermediate_val); > } > > static inline const char *yesno(bool v)
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index 5e70f5711fc8..1b525051bf5f 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h @@ -160,6 +160,14 @@ static inline uint_fixed_16_16_t max_fixed_16_16(uint_fixed_16_16_t max1, return max; } +static inline uint_fixed_16_16_t clamp_u64_to_fixed16(uint64_t val) +{ + uint_fixed_16_16_t fp; + WARN_ON(val >> 32); + fp.val = clamp_t(uint32_t, val, 0, ~0); + return fp; +} + static inline uint32_t div_round_up_fixed16(uint_fixed_16_16_t val, uint_fixed_16_16_t d) { @@ -170,26 +178,21 @@ static inline uint32_t mul_round_up_u32_fixed16(uint32_t val, uint_fixed_16_16_t mul) { uint64_t intermediate_val; - uint32_t result; intermediate_val = (uint64_t) val * mul.val; intermediate_val = DIV_ROUND_UP_ULL(intermediate_val, 1 << 16); WARN_ON(intermediate_val >> 32); - result = clamp_t(uint32_t, intermediate_val, 0, ~0); - return result; + return clamp_t(uint32_t, intermediate_val, 0, ~0); } static inline uint_fixed_16_16_t mul_fixed16(uint_fixed_16_16_t val, uint_fixed_16_16_t mul) { uint64_t intermediate_val; - uint_fixed_16_16_t fp; intermediate_val = (uint64_t) val.val * mul.val; intermediate_val = intermediate_val >> 16; - WARN_ON(intermediate_val >> 32); - fp.val = clamp_t(uint32_t, intermediate_val, 0, ~0); - return fp; + return clamp_u64_to_fixed16(intermediate_val); } static inline uint_fixed_16_16_t fixed_16_16_div(uint32_t val, uint32_t d) @@ -203,15 +206,11 @@ static inline uint_fixed_16_16_t fixed_16_16_div(uint32_t val, uint32_t d) static inline uint_fixed_16_16_t fixed_16_16_div_u64(uint32_t val, uint32_t d) { - uint_fixed_16_16_t res; uint64_t interm_val; interm_val = (uint64_t)val << 16; interm_val = DIV_ROUND_UP_ULL(interm_val, d); - WARN_ON(interm_val >> 32); - res.val = (uint32_t) interm_val; - - return res; + return clamp_u64_to_fixed16(interm_val); } static inline uint32_t div_round_up_u32_fixed16(uint32_t val, @@ -229,12 +228,9 @@ static inline uint_fixed_16_16_t mul_u32_fixed_16_16(uint32_t val, uint_fixed_16_16_t mul) { uint64_t intermediate_val; - uint_fixed_16_16_t fp; intermediate_val = (uint64_t) val * mul.val; - WARN_ON(intermediate_val >> 32); - fp.val = (uint32_t) intermediate_val; - return fp; + return clamp_u64_to_fixed16(intermediate_val); } static inline const char *yesno(bool v)