mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-26 19:00:25 +00:00
bus: ti-sysc: Fix iterating over clocks
commit2c81f0f6d3
upstream. Commitd878970f6c
("bus: ti-sysc: Add separate functions for handling clocks") separated handling of optional clocks from the main clocks, but introduced an issue where we do not necessarily allocate a slot for both fck and ick clocks, but still assume fixed slots for enumerating over the clocks. Let's fix the issue by ensuring we always have slots for both fck and ick even if we don't use ick, and don't attempt to enumerate optional clocks if not allocated. In the long run we might want to simplify things a bit by only allocating space only for the optional clocks as we have only few devices with optional clocks. Fixes:d878970f6c
("bus: ti-sysc: Add separate functions for handling clocks") Signed-off-by: Tony Lindgren <tony@atomide.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
289ecfaadf
commit
5aacb4de36
1 changed files with 8 additions and 2 deletions
|
@ -343,6 +343,12 @@ static int sysc_get_clocks(struct sysc *ddata)
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* Always add a slot for main clocks fck and ick even if unused */
|
||||
if (!nr_fck)
|
||||
ddata->nr_clocks++;
|
||||
if (!nr_ick)
|
||||
ddata->nr_clocks++;
|
||||
|
||||
ddata->clocks = devm_kcalloc(ddata->dev,
|
||||
ddata->nr_clocks, sizeof(*ddata->clocks),
|
||||
GFP_KERNEL);
|
||||
|
@ -421,7 +427,7 @@ static int sysc_enable_opt_clocks(struct sysc *ddata)
|
|||
struct clk *clock;
|
||||
int i, error;
|
||||
|
||||
if (!ddata->clocks)
|
||||
if (!ddata->clocks || ddata->nr_clocks < SYSC_OPTFCK0 + 1)
|
||||
return 0;
|
||||
|
||||
for (i = SYSC_OPTFCK0; i < SYSC_MAX_CLOCKS; i++) {
|
||||
|
@ -455,7 +461,7 @@ static void sysc_disable_opt_clocks(struct sysc *ddata)
|
|||
struct clk *clock;
|
||||
int i;
|
||||
|
||||
if (!ddata->clocks)
|
||||
if (!ddata->clocks || ddata->nr_clocks < SYSC_OPTFCK0 + 1)
|
||||
return;
|
||||
|
||||
for (i = SYSC_OPTFCK0; i < SYSC_MAX_CLOCKS; i++) {
|
||||
|
|
Loading…
Reference in a new issue