diff options
author | Alex Deucher <alexdeucher@gmail.com> | 2011-02-14 17:43:10 +0100 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2011-02-15 00:18:50 +0100 |
commit | a4b40d5d97f5c9ad0b7f4bf2818291ca184bb433 (patch) | |
tree | d6286b29edab8ead8b42c9f53607e368ff57fe91 /drivers | |
parent | drm: fix wrong usages of drm_device in DRM Developer's Guide (diff) | |
download | linux-a4b40d5d97f5c9ad0b7f4bf2818291ca184bb433.tar.xz linux-a4b40d5d97f5c9ad0b7f4bf2818291ca184bb433.zip |
drm/radeon/kms: add bounds checking to avivo pll algo
Prevent divider overflow.
Fixes:
https://bugzilla.kernel.org/show_bug.cgi?id=28932
Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
Cc: stable@kernel.org
Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_display.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c index 2eff98cfd728..0e657095de7c 100644 --- a/drivers/gpu/drm/radeon/radeon_display.c +++ b/drivers/gpu/drm/radeon/radeon_display.c @@ -793,6 +793,11 @@ static void avivo_get_fb_div(struct radeon_pll *pll, tmp *= target_clock; *fb_div = tmp / pll->reference_freq; *frac_fb_div = tmp % pll->reference_freq; + + if (*fb_div > pll->max_feedback_div) + *fb_div = pll->max_feedback_div; + else if (*fb_div < pll->min_feedback_div) + *fb_div = pll->min_feedback_div; } static u32 avivo_get_post_div(struct radeon_pll *pll, @@ -826,6 +831,11 @@ static u32 avivo_get_post_div(struct radeon_pll *pll, post_div--; } + if (post_div > pll->max_post_div) + post_div = pll->max_post_div; + else if (post_div < pll->min_post_div) + post_div = pll->min_post_div; + return post_div; } |