[PATCH] reset: stm32: Fix bank and offset computation

BITS_PER_LONG is used to represent register's size which is 32. But when compiled on arch64, BITS_PER_LONG is then equal to 64.
Fix bank and offset computation to make it work on arch32 and arch64 and ensure that register's size is always equal to 32.
Signed-off-by: Patrice Chotard patrice.chotard@foss.st.com Signed-off-by: Pankaj Dev pankaj.dev@st.com ---
drivers/reset/stm32-reset.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/reset/stm32-reset.c b/drivers/reset/stm32-reset.c index daa2e47ebb..bbc6b135a9 100644 --- a/drivers/reset/stm32-reset.c +++ b/drivers/reset/stm32-reset.c @@ -40,8 +40,8 @@ static int stm32_reset_free(struct reset_ctl *reset_ctl) static int stm32_reset_assert(struct reset_ctl *reset_ctl) { struct stm32_reset_priv *priv = dev_get_priv(reset_ctl->dev); - int bank = (reset_ctl->id / BITS_PER_LONG) * 4; - int offset = reset_ctl->id % BITS_PER_LONG; + int bank = (reset_ctl->id / (sizeof(u32) * BITS_PER_BYTE)) * 4; + int offset = reset_ctl->id % (sizeof(u32) * BITS_PER_BYTE);
dev_dbg(reset_ctl->dev, "reset id = %ld bank = %d offset = %d)\n", reset_ctl->id, bank, offset); @@ -61,8 +61,8 @@ static int stm32_reset_assert(struct reset_ctl *reset_ctl) static int stm32_reset_deassert(struct reset_ctl *reset_ctl) { struct stm32_reset_priv *priv = dev_get_priv(reset_ctl->dev); - int bank = (reset_ctl->id / BITS_PER_LONG) * 4; - int offset = reset_ctl->id % BITS_PER_LONG; + int bank = (reset_ctl->id / (sizeof(u32) * BITS_PER_BYTE)) * 4; + int offset = reset_ctl->id % (sizeof(u32) * BITS_PER_BYTE);
dev_dbg(reset_ctl->dev, "reset id = %ld bank = %d offset = %d)\n", reset_ctl->id, bank, offset);

Hi Patrice,
On 4/28/21 1:42 PM, Patrice Chotard wrote:
BITS_PER_LONG is used to represent register's size which is 32. But when compiled on arch64, BITS_PER_LONG is then equal to 64.
Fix bank and offset computation to make it work on arch32 and arch64 and ensure that register's size is always equal to 32.
Signed-off-by: Patrice Chotard patrice.chotard@foss.st.com Signed-off-by: Pankaj Dev pankaj.dev@st.com
drivers/reset/stm32-reset.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/reset/stm32-reset.c b/drivers/reset/stm32-reset.c index daa2e47ebb..bbc6b135a9 100644 --- a/drivers/reset/stm32-reset.c +++ b/drivers/reset/stm32-reset.c @@ -40,8 +40,8 @@ static int stm32_reset_free(struct reset_ctl *reset_ctl) static int stm32_reset_assert(struct reset_ctl *reset_ctl) { struct stm32_reset_priv *priv = dev_get_priv(reset_ctl->dev);
- int bank = (reset_ctl->id / BITS_PER_LONG) * 4;
- int offset = reset_ctl->id % BITS_PER_LONG;
int bank = (reset_ctl->id / (sizeof(u32) * BITS_PER_BYTE)) * 4;
int offset = reset_ctl->id % (sizeof(u32) * BITS_PER_BYTE);
dev_dbg(reset_ctl->dev, "reset id = %ld bank = %d offset = %d)\n", reset_ctl->id, bank, offset);
@@ -61,8 +61,8 @@ static int stm32_reset_assert(struct reset_ctl *reset_ctl) static int stm32_reset_deassert(struct reset_ctl *reset_ctl) { struct stm32_reset_priv *priv = dev_get_priv(reset_ctl->dev);
- int bank = (reset_ctl->id / BITS_PER_LONG) * 4;
- int offset = reset_ctl->id % BITS_PER_LONG;
int bank = (reset_ctl->id / (sizeof(u32) * BITS_PER_BYTE)) * 4;
int offset = reset_ctl->id % (sizeof(u32) * BITS_PER_BYTE);
dev_dbg(reset_ctl->dev, "reset id = %ld bank = %d offset = %d)\n", reset_ctl->id, bank, offset);
Reviewed-by: Patrick Delaunay patrick.delaunay@foss.st.com
Thanks Patrick

Hi,
On 4/28/21 1:42 PM, Patrice Chotard wrote:
BITS_PER_LONG is used to represent register's size which is 32. But when compiled on arch64, BITS_PER_LONG is then equal to 64.
Fix bank and offset computation to make it work on arch32 and arch64 and ensure that register's size is always equal to 32.
Signed-off-by: Patrice Chotard patrice.chotard@foss.st.com Signed-off-by: Pankaj Dev pankaj.dev@st.com
drivers/reset/stm32-reset.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
Reviewed-by: Patrick Delaunay patrick.delaunay@foss.st.com
Thanks Patrick

On 4/28/21 1:42 PM, Patrice Chotard wrote:
BITS_PER_LONG is used to represent register's size which is 32. But when compiled on arch64, BITS_PER_LONG is then equal to 64.
Fix bank and offset computation to make it work on arch32 and arch64 and ensure that register's size is always equal to 32.
Signed-off-by: Patrice Chotard patrice.chotard@foss.st.com Signed-off-by: Pankaj Dev pankaj.dev@st.com
drivers/reset/stm32-reset.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
Applied to u-boot-stm/master, thanks!
Regards Patrick
participants (2)
-
Patrice Chotard
-
Patrick DELAUNAY