From: Joe Konno <joe.konno@linux.intel.com>
To: intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH 1/2 v3] drm/i915: intel_backlight scale() math WA
Date: Mon, 06 Oct 2014 07:14:45 -0700 [thread overview]
Message-ID: <5432A3D5.9050901@linux.intel.com> (raw)
In-Reply-To: <1412030973-16738-2-git-send-email-ullysses.a.eoff@intel.com>
Reviewed-By: Joe Konno <joe.konno@intel.com>
On 09/29/2014 03:49 PM, U. Artie Eoff wrote:
> Improper truncated integer division in the scale() function causes
> actual_brightness != brightness. This (partial) work-around should be
> sufficient for a majority of use-cases, but it is by no means a complete
> solution.
>
> TODO: Determine how best to scale "user" values to "hw" values, and
> vice-versa, when the ranges are of different sizes. That would be a
> buggy scenario even with this work-around.
>
> The issue was introduced in the following (v3.17-rc1) commit:
>
> 6dda730 drm/i915: respect the VBT minimum backlight brightness
>
> v2: (thanks to Chris Wilson) clarify commit message, use rounded division
> macro
>
> v3: -DIV_ROUND_CLOSEST() fails to build with CONFIG_X86_32=y. (Jani)
> -Use DIV_ROUND_CLOSEST_ULL() instead. (Damien)
> -v1 and v2 originally authored by Joe Konno.
>
> Signed-off-by: U. Artie Eoff <ullysses.a.eoff@intel.com>
> ---
> drivers/gpu/drm/i915/intel_panel.c | 8 +++++---
> 1 file changed, 5 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/intel_panel.c
> index f17ada3..f7da913 100644
> --- a/drivers/gpu/drm/i915/intel_panel.c
> +++ b/drivers/gpu/drm/i915/intel_panel.c
> @@ -398,6 +398,9 @@ intel_panel_detect(struct drm_device *dev)
> }
> }
>
> +#define DIV_ROUND_CLOSEST_ULL(ll, d) \
> +({ unsigned long long _tmp = (ll)+(d)/2; do_div(_tmp, d); _tmp; })
> +
> /**
> * scale - scale values from one range to another
> *
> @@ -419,9 +422,8 @@ static uint32_t scale(uint32_t source_val,
> source_val = clamp(source_val, source_min, source_max);
>
> /* avoid overflows */
> - target_val = (uint64_t)(source_val - source_min) *
> - (target_max - target_min);
> - do_div(target_val, source_max - source_min);
> + target_val = DIV_ROUND_CLOSEST_ULL((uint64_t)(source_val - source_min) *
> + (target_max - target_min), source_max - source_min);
> target_val += target_min;
>
> return target_val;
next prev parent reply other threads:[~2014-10-06 14:16 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-09-29 22:49 [PATCH 0/2] drm/i915: WA intel_backlight scale math U. Artie Eoff
2014-09-29 22:49 ` [PATCH 1/2 v3] drm/i915: intel_backlight scale() math WA U. Artie Eoff
2014-09-30 8:04 ` Daniel Vetter
2014-09-30 14:58 ` Eoff, Ullysses A
2014-09-30 16:31 ` Daniel Vetter
2014-09-30 16:52 ` Eoff, Ullysses A
2014-09-30 17:23 ` Daniel Vetter
2014-09-30 21:18 ` Eoff, Ullysses A
2014-10-06 14:14 ` Joe Konno [this message]
2014-09-29 22:49 ` [PATCH 2/2] drm/i915: Move DIV_ROUND_CLOSEST_ULL macro to header U. Artie Eoff
2014-10-06 14:15 ` Joe Konno
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5432A3D5.9050901@linux.intel.com \
--to=joe.konno@linux.intel.com \
--cc=intel-gfx@lists.freedesktop.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.