Skip to content
Snippets Groups Projects
Commit cb57f471 authored by Sebastian Reichel's avatar Sebastian Reichel
Browse files

clk: divider: Fix handling of rates > UINT_MAX


Fix handling of rates that exceed UINT_MAX (4.29 GHz) to do something
reasonably sensible. Right now asking for UINT_MAX+1 will effectively
return the smallest rate available instead of the biggest one.

Signed-off-by: default avatarSebastian Reichel <sebastian.reichel@collabora.com>
parent ff7311be
No related branches found
No related tags found
No related merge requests found
......@@ -220,7 +220,7 @@ static int _div_round_up(const struct clk_div_table *table,
unsigned long parent_rate, unsigned long rate,
unsigned long flags)
{
int div = DIV_ROUND_UP_ULL((u64)parent_rate, rate);
int div = DIV_ROUND_UP_ULL((u64)parent_rate, rate > UINT_MAX ? UINT_MAX : rate);
if (flags & CLK_DIVIDER_POWER_OF_TWO)
div = __roundup_pow_of_two(div);
......@@ -237,7 +237,7 @@ static int _div_round_closest(const struct clk_div_table *table,
int up, down;
unsigned long up_rate, down_rate;
up = DIV_ROUND_UP_ULL((u64)parent_rate, rate);
up = DIV_ROUND_UP_ULL((u64)parent_rate, rate > UINT_MAX ? UINT_MAX : rate);
down = parent_rate / rate;
if (flags & CLK_DIVIDER_POWER_OF_TWO) {
......@@ -473,7 +473,7 @@ int divider_get_val(unsigned long rate, unsigned long parent_rate,
{
unsigned int div, value;
div = DIV_ROUND_UP_ULL((u64)parent_rate, rate);
div = DIV_ROUND_UP_ULL((u64)parent_rate, rate > UINT_MAX ? UINT_MAX : rate);
if (!_is_valid_div(table, div, flags))
return -EINVAL;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment