diff mbox series

[1/3] gpio: bcm-kona: Fix GPIO lock/unlock for banks above bank 0

Message ID 20250130-kona-gpio-fixes-v1-1-dd61e0c0a9e7@gmail.com
State New
Headers show
Series gpio: bcm-kona: Various GPIO fixups | expand

Commit Message

Artur Weber Jan. 30, 2025, 5:10 p.m. UTC
The GPIO lock/unlock functions clear/write a bit to the relevant
register for each bank. However, due to an oversight the bit that
was being written was based on the total GPIO number, not the index
of the GPIO within the relevant bank, causing it to fail for any
GPIO above 32 (thus any GPIO for banks above bank 0).

Fix lock/unlock for these banks by using the correct bit.

Fixes: bdb93c03c550 ("gpio: bcm281xx: Centralize register locking")
Signed-off-by: Artur Weber <aweber.kernel@gmail.com>
---
 drivers/gpio/gpio-bcm-kona.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

Comments

Florian Fainelli Jan. 30, 2025, 9:33 p.m. UTC | #1
On 1/30/25 09:10, Artur Weber wrote:
> The GPIO lock/unlock functions clear/write a bit to the relevant
> register for each bank. However, due to an oversight the bit that
> was being written was based on the total GPIO number, not the index
> of the GPIO within the relevant bank, causing it to fail for any
> GPIO above 32 (thus any GPIO for banks above bank 0).
> 
> Fix lock/unlock for these banks by using the correct bit.
> 
> Fixes: bdb93c03c550 ("gpio: bcm281xx: Centralize register locking")
> Signed-off-by: Artur Weber <aweber.kernel@gmail.com>

Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
Markus Mayer Jan. 30, 2025, 10 p.m. UTC | #2
On Thu, 30 Jan 2025 at 13:33, Florian Fainelli
<florian.fainelli@broadcom.com> wrote:
>
> On 1/30/25 09:10, Artur Weber wrote:
> > The GPIO lock/unlock functions clear/write a bit to the relevant
> > register for each bank. However, due to an oversight the bit that
> > was being written was based on the total GPIO number, not the index
> > of the GPIO within the relevant bank, causing it to fail for any
> > GPIO above 32 (thus any GPIO for banks above bank 0).
> >
> > Fix lock/unlock for these banks by using the correct bit.
> >
> > Fixes: bdb93c03c550 ("gpio: bcm281xx: Centralize register locking")
> > Signed-off-by: Artur Weber <aweber.kernel@gmail.com>
>
> Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>

Wow. That recipient list brings back memories.

Also:

Reviewed-by: Markus Mayer <mmayer@broadcom.com>
diff mbox series

Patch

diff --git a/drivers/gpio/gpio-bcm-kona.c b/drivers/gpio/gpio-bcm-kona.c
index 5321ef98f4427d004e62f71d00df6d49bb465ddd..77bd4ec93a231472d7bc40db9d5db12d20bb1611 100644
--- a/drivers/gpio/gpio-bcm-kona.c
+++ b/drivers/gpio/gpio-bcm-kona.c
@@ -86,11 +86,12 @@  static void bcm_kona_gpio_lock_gpio(struct bcm_kona_gpio *kona_gpio,
 	u32 val;
 	unsigned long flags;
 	int bank_id = GPIO_BANK(gpio);
+	int bit = GPIO_BIT(gpio);
 
 	raw_spin_lock_irqsave(&kona_gpio->lock, flags);
 
 	val = readl(kona_gpio->reg_base + GPIO_PWD_STATUS(bank_id));
-	val |= BIT(gpio);
+	val |= BIT(bit);
 	bcm_kona_gpio_write_lock_regs(kona_gpio->reg_base, bank_id, val);
 
 	raw_spin_unlock_irqrestore(&kona_gpio->lock, flags);
@@ -102,11 +103,12 @@  static void bcm_kona_gpio_unlock_gpio(struct bcm_kona_gpio *kona_gpio,
 	u32 val;
 	unsigned long flags;
 	int bank_id = GPIO_BANK(gpio);
+	int bit = GPIO_BIT(gpio);
 
 	raw_spin_lock_irqsave(&kona_gpio->lock, flags);
 
 	val = readl(kona_gpio->reg_base + GPIO_PWD_STATUS(bank_id));
-	val &= ~BIT(gpio);
+	val &= ~BIT(bit);
 	bcm_kona_gpio_write_lock_regs(kona_gpio->reg_base, bank_id, val);
 
 	raw_spin_unlock_irqrestore(&kona_gpio->lock, flags);