1. 26 Aug, 2015 2 commits
    • Mika Westerberg's avatar
      pinctrl: cherryview: Use raw_spinlock for locking · 109fdf15
      Mika Westerberg authored
      When running -rt kernel and an interrupt happens on a GPIO line controlled by
      Intel Cherryview/Braswell pinctrl driver we get:
      
       BUG: sleeping function called from invalid context at kernel/locking/rtmutex.c:917
       in_atomic(): 1, irqs_disabled(): 1, pid: 0, name: swapper/0
       Preemption disabled at:[<ffffffff81092e9f>] cpu_startup_entry+0x17f/0x480
      
       CPU: 0 PID: 0 Comm: swapper/0 Not tainted 4.1.5-rt5 #16
        ...
       Call Trace:
        <IRQ>  [<ffffffff816283c6>] dump_stack+0x4a/0x61
        [<ffffffff81077e17>] ___might_sleep+0xe7/0x170
        [<ffffffff8162d6cf>] rt_spin_lock+0x1f/0x50
        [<ffffffff812e52ed>] chv_gpio_irq_ack+0x3d/0xa0
        [<ffffffff810a72f5>] handle_edge_irq+0x75/0x180
        [<ffffffff810a3457>] generic_handle_irq+0x27/0x40
        [<ffffffff812e57de>] chv_gpio_irq_handler+0x7e/0x110
        [<ffffffff810050aa>] handle_irq+0xaa/0x190
        ...
      
      This is because desc->lock is raw_spinlock and is held when chv_gpio_irq_ack()
      is called by the genirq core. chv_gpio_irq_ack() in turn takes pctrl->lock
      which in -rt is an rt-mutex causing might_sleep() rightfully to complain about
      sleeping function called from invalid context.
      
      In order to keep -rt happy but at the same time make sure that register
      accesses get serialized, convert the driver to use raw_spinlock instead.
      Suggested-by: default avatarLinus Walleij <linus.walleij@linaro.org>
      Signed-off-by: default avatarMika Westerberg <mika.westerberg@linux.intel.com>
      Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
      109fdf15
    • Mika Westerberg's avatar
      pinctrl: baytrail: Use raw_spinlock for locking · 78e1c896
      Mika Westerberg authored
      The Intel Baytrail pinctrl driver implements irqchip callbacks which are
      called with desc->lock raw_spinlock held. In mainline this is fine because
      spinlock resolves to raw_spinlock. However, running the same code in -rt we
      get:
      
       BUG: sleeping function called from invalid context at kernel/locking/rtmutex.c:917
       in_atomic(): 1, irqs_disabled(): 1, pid: 0, name: swapper/0
       Preemption disabled at:[<ffffffff81092e9f>] cpu_startup_entry+0x17f/0x480
      
       CPU: 0 PID: 0 Comm: swapper/0 Not tainted 4.1.5-rt5 #13
        ...
       Call Trace:
        <IRQ>  [<ffffffff816283c6>] dump_stack+0x4a/0x61
        [<ffffffff81077e17>] ___might_sleep+0xe7/0x170
        [<ffffffff8162d6cf>] rt_spin_lock+0x1f/0x50
        [<ffffffff812e3b88>] byt_gpio_clear_triggering+0x38/0x60
        [<ffffffff812e3bc1>] byt_irq_mask+0x11/0x20
        [<ffffffff810a7013>] handle_level_irq+0x83/0x150
        [<ffffffff810a3457>] generic_handle_irq+0x27/0x40
        [<ffffffff812e3a5f>] byt_gpio_irq_handler+0x7f/0xc0
        [<ffffffff810050aa>] handle_irq+0xaa/0x190
        ...
      
      This is because in -rt spinlocks are preemptible so taking the driver
      private spinlock in irqchip callbacks causes might_sleep() to trigger.
      
      In order to keep -rt happy but at the same time make sure that register
      accesses get serialized, convert the driver to use raw_spinlock instead.
      
      Also shorten the critical section a bit in few places.
      Suggested-by: default avatarLinus Walleij <linus.walleij@linaro.org>
      Signed-off-by: default avatarMika Westerberg <mika.westerberg@linux.intel.com>
      Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
      78e1c896
  2. 25 Aug, 2015 2 commits
  3. 24 Aug, 2015 1 commit
  4. 13 Aug, 2015 9 commits
  5. 11 Aug, 2015 1 commit
  6. 03 Aug, 2015 1 commit
  7. 28 Jul, 2015 4 commits
    • Wei Chen's avatar
      pinctrl: sirf: add power management support for atlas7 · 48356aa7
      Wei Chen authored
      We had not implemented the pm interface of atlas7 pinctrl
      and gpio drivers. So when system resumes from sleep, all
      pin configuration and gpio status will be lost.
      
      Now, we implement these interfaces to support pm.
      
      At the same time, this patch also drops a lot of if-else
      by look-up table for getting and setting pull.
      Signed-off-by: default avatarWei Chen <Wei.Chen@csr.com>
      Signed-off-by: default avatarBarry Song <Baohua.Song@csr.com>
      Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
      48356aa7
    • Linus Walleij's avatar
      pinctrl: nomadik: split stn8815 UART0 pin groups · 1051fade
      Linus Walleij authored
      Split the UART pin groups so we can activate RX/TX, CTS/RTS and
      the modem pins (DCD, DSR, RI, DTR) as three different groups
      with function u0.
      Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
      1051fade
    • Krzysztof Kozlowski's avatar
      MAINTAINERS: pinctrl: Move Thomas Abraham to CREDITS · dc9ab949
      Krzysztof Kozlowski authored
      Thomas Abraham's Linaro email address bounces for several months. Also
      there were no replies for several emails sent on LKML to his Samsung
      address. Move his name to CREDITS.
      Signed-off-by: default avatarKrzysztof Kozlowski <k.kozlowski@samsung.com>
      Cc: Tomasz Figa <tomasz.figa@gmail.com>
      Cc: Thomas Abraham <thomas.ab@samsung.com>
      Cc: Linus Walleij <linus.walleij@linaro.org>
      Link: http://lkml.org/lkml/2015/6/15/15Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
      dc9ab949
    • Rob Herring's avatar
      pinctrl: kill off set_irq_flags usage · 9458120e
      Rob Herring authored
      set_irq_flags is ARM specific with custom flags which have genirq
      equivalents. Convert drivers to use the genirq interfaces directly, so we
      can kill off set_irq_flags. The translation of flags is as follows:
      
      IRQF_VALID -> !IRQ_NOREQUEST
      IRQF_PROBE -> !IRQ_NOPROBE
      IRQF_NOAUTOEN -> IRQ_NOAUTOEN
      
      For IRQs managed by an irqdomain, the irqdomain core code handles clearing
      and setting IRQ_NOREQUEST already, so there is no need to do this in
      .map() functions and we can simply remove the set_irq_flags calls. Some
      users also modify IRQ_NOPROBE and this has been maintained although it
      is not clear that is really needed. There appears to be a great deal of
      blind copy and paste of this code.
      Signed-off-by: default avatarRob Herring <robh@kernel.org>
      Cc: Stephen Warren <swarren@wwwdotorg.org>
      Cc: Lee Jones <lee@kernel.org>
      Cc: Matthias Brugger <matthias.bgg@gmail.com>
      Cc: Tomasz Figa <tomasz.figa@gmail.com>
      Cc: Thomas Abraham <thomas.abraham@linaro.org>
      Cc: Kukjin Kim <kgene@kernel.org>
      Cc: Krzysztof Kozlowski <k.kozlowski@samsung.com>
      Cc: linux-gpio@vger.kernel.org
      Cc: linux-rpi-kernel@lists.infradead.org
      Cc: linux-arm-kernel@lists.infradead.org
      Cc: linux-mediatek@lists.infradead.org
      Cc: linux-samsung-soc@vger.kernel.org
      Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
      9458120e
  8. 27 Jul, 2015 9 commits
  9. 23 Jul, 2015 3 commits
  10. 17 Jul, 2015 8 commits