clk: renesas: Pack reset identifier before look up
The reset identifier must be processed via MOD_CLK_PACK() before it is
used to look up register and bit within reset_regs or reset_clear_regs
arrays, otherwise completely bogus register and bit is picked from the
arrays, one which may even be out of range.
Fixes: 326e05c5e2
("clk: renesas: Add and enable CPG reset driver")
Signed-off-by: Marek Vasut <marek.vasut+renesas@mailbox.org>
This commit is contained in:
parent
318af47668
commit
afafaa2a8f
1 changed files with 6 additions and 4 deletions
|
@ -479,8 +479,9 @@ static int gen3_reset_assert(struct reset_ctl *reset_ctl)
|
|||
{
|
||||
struct udevice *cdev = (struct udevice *)dev_get_driver_data(reset_ctl->dev);
|
||||
struct gen3_clk_priv *priv = dev_get_priv(cdev);
|
||||
unsigned int reg = reset_ctl->id / 32;
|
||||
unsigned int bit = reset_ctl->id % 32;
|
||||
unsigned int packed_id = MOD_CLK_PACK(reset_ctl->id);
|
||||
unsigned int reg = packed_id / 32;
|
||||
unsigned int bit = packed_id % 32;
|
||||
u32 bitmask = BIT(bit);
|
||||
|
||||
writel(bitmask, priv->base + priv->info->reset_regs[reg]);
|
||||
|
@ -492,8 +493,9 @@ static int gen3_reset_deassert(struct reset_ctl *reset_ctl)
|
|||
{
|
||||
struct udevice *cdev = (struct udevice *)dev_get_driver_data(reset_ctl->dev);
|
||||
struct gen3_clk_priv *priv = dev_get_priv(cdev);
|
||||
unsigned int reg = reset_ctl->id / 32;
|
||||
unsigned int bit = reset_ctl->id % 32;
|
||||
unsigned int packed_id = MOD_CLK_PACK(reset_ctl->id);
|
||||
unsigned int reg = packed_id / 32;
|
||||
unsigned int bit = packed_id % 32;
|
||||
u32 bitmask = BIT(bit);
|
||||
|
||||
writel(bitmask, priv->base + priv->info->reset_clear_regs[reg]);
|
||||
|
|
Loading…
Reference in a new issue