pinctrl: renesas: Remove unneeded locking around sh_pfc_read() calls
authorGeert Uytterhoeven <geert+renesas@glider.be>
Wed, 17 Nov 2021 09:59:32 +0000 (10:59 +0100)
committerGeert Uytterhoeven <geert+renesas@glider.be>
Fri, 19 Nov 2021 09:55:21 +0000 (10:55 +0100)
There is no need to acquire the spinlock when reading from a pin
controller register:
  1. Reading a single MMIO register is an atomic operation,
  2. While sh_pfc_phys_to_virt() inside sh_pfc_read() has to traverse
     all mapped windows to find the appropriate virtual address, this
     does not need any locking, as the window mappings are never
     changed.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Link: https://lore.kernel.org/r/2008ca99f0079fd5d4e640b7ef78710c98cc9f77.1637143108.git.geert+renesas@glider.be
drivers/pinctrl/renesas/pinctrl.c

index f3eecb2..96b9de9 100644 (file)
@@ -504,7 +504,6 @@ static u32 sh_pfc_pinconf_find_drive_strength_reg(struct sh_pfc *pfc,
 static int sh_pfc_pinconf_get_drive_strength(struct sh_pfc *pfc,
                                             unsigned int pin)
 {
-       unsigned long flags;
        unsigned int offset;
        unsigned int size;
        u32 reg;
@@ -514,11 +513,7 @@ static int sh_pfc_pinconf_get_drive_strength(struct sh_pfc *pfc,
        if (!reg)
                return -EINVAL;
 
-       spin_lock_irqsave(&pfc->lock, flags);
-       val = sh_pfc_read(pfc, reg);
-       spin_unlock_irqrestore(&pfc->lock, flags);
-
-       val = (val >> offset) & GENMASK(size - 1, 0);
+       val = (sh_pfc_read(pfc, reg) >> offset) & GENMASK(size - 1, 0);
 
        /* Convert the value to mA based on a full drive strength value of 24mA.
         * We can make the full value configurable later if needed.
@@ -648,9 +643,7 @@ static int sh_pfc_pinconf_get(struct pinctrl_dev *pctldev, unsigned _pin,
                if (WARN(bit < 0, "invalid pin %#x", _pin))
                        return bit;
 
-               spin_lock_irqsave(&pfc->lock, flags);
                val = sh_pfc_read(pfc, pocctrl);
-               spin_unlock_irqrestore(&pfc->lock, flags);
 
                lower_voltage = (pin->configs & SH_PFC_PIN_VOLTAGE_25_33) ?
                        2500 : 1800;