1. 16 9月, 2015 4 次提交
  2. 15 9月, 2015 7 次提交
    • G
      irqchip/renesas-irqc: Propagate wake-up settings to parent · 4cd7863e
      Geert Uytterhoeven 提交于
      The renesas-irqc interrupt controller is cascaded to the GIC, but its
      driver doesn't propagate wake-up settings to the parent interrupt
      controller.
      
      Since commit aec89ef7 ("irqchip/gic: Enable SKIP_SET_WAKE and
      MASK_ON_SUSPEND"), the GIC driver masks interrupts during suspend, and
      wake-up through gpio-keys now fails on r8a73a4/ape6evm.
      
      Fix this by propagating wake-up settings to the parent interrupt
      controller. There's no need to handle irq_set_irq_wake() failures, as
      the renesas-irqc interrupt controller is always cascaded to a GIC, and
      the GIC driver always sets SKIP_SET_WAKE since the aforementioned
      commit.
      Signed-off-by: NGeert Uytterhoeven <geert+renesas@glider.be>
      Cc: Sudeep Holla <sudeep.holla@arm.com>
      Cc: Magnus Damm <magnus.damm@gmail.com>
      Cc: Jason Cooper <jason@lakedaemon.net>
      Cc: Marc Zyngier <marc.zyngier@arm.com>
      Link: http://lkml.kernel.org/r/1441731636-17610-3-git-send-email-geert%2Brenesas@glider.beSigned-off-by: NThomas Gleixner <tglx@linutronix.de>
      4cd7863e
    • G
      irqchip/renesas-intc-irqpin: Propagate wake-up settings to parent · f4e209cd
      Geert Uytterhoeven 提交于
      The renesas-intc-irqpin interrupt controller is cascaded to the GIC, but
      its driver doesn't propagate wake-up settings to the parent interrupt
      controller.
      
      Since commit aec89ef7 ("irqchip/gic: Enable SKIP_SET_WAKE and
      MASK_ON_SUSPEND"), the GIC driver masks interrupts during suspend, and
      wake-up through gpio-keys now fails on r8a7740/armadillo and
      sh73a0/kzm9g.
      
      Fix this by propagating wake-up settings to the parent interrupt
      controller. There's no need to handle irq_set_irq_wake() failures, as
      the renesas-intc-irqpin interrupt controller is always cascaded to a
      GIC, and the GIC driver always sets SKIP_SET_WAKE since the
      aforementioned commit.
      Signed-off-by: NGeert Uytterhoeven <geert+renesas@glider.be>
      Cc: Sudeep Holla <sudeep.holla@arm.com>
      Cc: Magnus Damm <magnus.damm@gmail.com>
      Cc: Jason Cooper <jason@lakedaemon.net>
      Cc: Marc Zyngier <marc.zyngier@arm.com>
      Link: http://lkml.kernel.org/r/1441731636-17610-2-git-send-email-geert%2Brenesas@glider.beSigned-off-by: NThomas Gleixner <tglx@linutronix.de>
      f4e209cd
    • G
      irqchip/renesas-intc-irqpin: Use a separate lockdep class · 769b5cf7
      Geert Uytterhoeven 提交于
      The renesas-intc-irqpin interrupt controller is cascaded to the GIC.
      Hence when propagating wake-up settings to its parent interrupt
      controller, the following lockdep warning is printed:
      
          =============================================
          [ INFO: possible recursive locking detected ]
          4.2.0-armadillo-10725-g50fcd7643c034198 #781 Not tainted
          ---------------------------------------------
          s2ram/1179 is trying to acquire lock:
          (&irq_desc_lock_class){-.-...}, at: [<c005bb54>] __irq_get_desc_lock+0x78/0x94
      
          but task is already holding lock:
          (&irq_desc_lock_class){-.-...}, at: [<c005bb54>] __irq_get_desc_lock+0x78/0x94
      
          other info that might help us debug this:
          Possible unsafe locking scenario:
      
      	  CPU0
      	  ----
           lock(&irq_desc_lock_class);
           lock(&irq_desc_lock_class);
      
          *** DEADLOCK ***
      
          May be due to missing lock nesting notation
      
          7 locks held by s2ram/1179:
          #0:  (sb_writers#7){.+.+.+}, at: [<c00c9708>] __sb_start_write+0x64/0xb8
          #1:  (&of->mutex){+.+.+.}, at: [<c0125a00>] kernfs_fop_write+0x78/0x1a0
          #2:  (s_active#23){.+.+.+}, at: [<c0125a08>] kernfs_fop_write+0x80/0x1a0
          #3:  (autosleep_lock){+.+.+.}, at: [<c0058244>] pm_autosleep_lock+0x18/0x20
          #4:  (pm_mutex){+.+.+.}, at: [<c0057e50>] pm_suspend+0x54/0x248
          #5:  (&dev->mutex){......}, at: [<c0243a20>] __device_suspend+0xdc/0x240
          #6:  (&irq_desc_lock_class){-.-...}, at: [<c005bb54>] __irq_get_desc_lock+0x78/0x94
      
          stack backtrace:
          CPU: 0 PID: 1179 Comm: s2ram Not tainted 4.2.0-armadillo-10725-g50fcd7643c034198
      
          Hardware name: Generic R8A7740 (Flattened Device Tree)
          [<c00129f4>] (dump_backtrace) from [<c0012bec>] (show_stack+0x18/0x1c)
          [<c0012bd4>] (show_stack) from [<c03f5d94>] (dump_stack+0x20/0x28)
          [<c03f5d74>] (dump_stack) from [<c00514d4>] (__lock_acquire+0x67c/0x1b88)
          [<c0050e58>] (__lock_acquire) from [<c0052df8>] (lock_acquire+0x9c/0xbc)
          [<c0052d5c>] (lock_acquire) from [<c03fb068>] (_raw_spin_lock_irqsave+0x44/0x58)
          [<c03fb024>] (_raw_spin_lock_irqsave) from [<c005bb54>] (__irq_get_desc_lock+0x78/0x94
          [<c005badc>] (__irq_get_desc_lock) from [<c005c3d8>] (irq_set_irq_wake+0x28/0x100)
          [<c005c3b0>] (irq_set_irq_wake) from [<c01e50d0>] (intc_irqpin_irq_set_wake+0x24/0x4c)
          [<c01e50ac>] (intc_irqpin_irq_set_wake) from [<c005c17c>] (set_irq_wake_real+0x3c/0x50
          [<c005c140>] (set_irq_wake_real) from [<c005c414>] (irq_set_irq_wake+0x64/0x100)
          [<c005c3b0>] (irq_set_irq_wake) from [<c02a19b4>] (gpio_keys_suspend+0x60/0xa0)
          [<c02a1954>] (gpio_keys_suspend) from [<c023b750>] (platform_pm_suspend+0x3c/0x5c)
      
      Avoid this false positive by using a separate lockdep class for INTC
      External IRQ Pin interrupts.
      Signed-off-by: NGeert Uytterhoeven <geert+renesas@glider.be>
      Cc: Grygorii Strashko <grygorii.strashko@ti.com>
      Cc: Magnus Damm <magnus.damm@gmail.com>
      Cc: Jason Cooper <jason@lakedaemon.net>
      Link: http://lkml.kernel.org/r/1441798974-25716-3-git-send-email-geert%2Brenesas@glider.beSigned-off-by: NThomas Gleixner <tglx@linutronix.de>
      769b5cf7
    • G
      irqchip/renesas-irqc: Use a separate lockdep class · b1370658
      Geert Uytterhoeven 提交于
      The renesas-irqc interrupt controller is cascaded to the GIC. Hence when
      propagating wake-up settings to its parent interrupt controller, the
      following lockdep warning is printed:
      
          =============================================
          [ INFO: possible recursive locking detected ]
          4.2.0-ape6evm-10725-g50fcd7643c034198 #280 Not tainted
          ---------------------------------------------
          s2ram/1072 is trying to acquire lock:
          (&irq_desc_lock_class){-.-...}, at: [<c008d3fc>] __irq_get_desc_lock+0x58/0x98
      
          but task is already holding lock:
          (&irq_desc_lock_class){-.-...}, at: [<c008d3fc>] __irq_get_desc_lock+0x58/0x98
      
          other info that might help us debug this:
          Possible unsafe locking scenario:
      
      	  CPU0
      	  ----
           lock(&irq_desc_lock_class);
           lock(&irq_desc_lock_class);
      
          *** DEADLOCK ***
      
          May be due to missing lock nesting notation
      
          6 locks held by s2ram/1072:
          #0:  (sb_writers#7){.+.+.+}, at: [<c012eb14>] __sb_start_write+0xa0/0xa8
          #1:  (&of->mutex){+.+.+.}, at: [<c019396c>] kernfs_fop_write+0x4c/0x1bc
          #2:  (s_active#24){.+.+.+}, at: [<c0193974>] kernfs_fop_write+0x54/0x1bc
          #3:  (pm_mutex){+.+.+.}, at: [<c008213c>] pm_suspend+0x10c/0x510
          #4:  (&dev->mutex){......}, at: [<c02af3c4>] __device_suspend+0xdc/0x2cc
          #5:  (&irq_desc_lock_class){-.-...}, at: [<c008d3fc>] __irq_get_desc_lock+0x58/0x98
      
          stack backtrace:
          CPU: 0 PID: 1072 Comm: s2ram Not tainted 4.2.0-ape6evm-10725-g50fcd7643c034198 #280
          Hardware name: Generic R8A73A4 (Flattened Device Tree)
          [<c0018078>] (unwind_backtrace) from [<c00144f0>] (show_stack+0x10/0x14)
          [<c00144f0>] (show_stack) from [<c0451f14>] (dump_stack+0x88/0x98)
          [<c0451f14>] (dump_stack) from [<c007b29c>] (__lock_acquire+0x15cc/0x20e4)
          [<c007b29c>] (__lock_acquire) from [<c007c6e0>] (lock_acquire+0xac/0x12c)
          [<c007c6e0>] (lock_acquire) from [<c0457c00>] (_raw_spin_lock_irqsave+0x40/0x54)
          [<c0457c00>] (_raw_spin_lock_irqsave) from [<c008d3fc>] (__irq_get_desc_lock+0x58/0x98)
          [<c008d3fc>] (__irq_get_desc_lock) from [<c008ebbc>] (irq_set_irq_wake+0x20/0xf8)
          [<c008ebbc>] (irq_set_irq_wake) from [<c0260770>] (irqc_irq_set_wake+0x20/0x4c)
          [<c0260770>] (irqc_irq_set_wake) from [<c008ec28>] (irq_set_irq_wake+0x8c/0xf8)
          [<c008ec28>] (irq_set_irq_wake) from [<c02cb8c0>] (gpio_keys_suspend+0x74/0xc0)
          [<c02cb8c0>] (gpio_keys_suspend) from [<c02ae8cc>] (dpm_run_callback+0x54/0x124)
      
      Avoid this false positive by using a separate lockdep class for IRQC
      interrupts.
      Signed-off-by: NGeert Uytterhoeven <geert+renesas@glider.be>
      Cc: Grygorii Strashko <grygorii.strashko@ti.com>
      Cc: Magnus Damm <magnus.damm@gmail.com>
      Cc: Jason Cooper <jason@lakedaemon.net>
      Link: http://lkml.kernel.org/r/1441798974-25716-2-git-send-email-geert%2Brenesas@glider.beSigned-off-by: NThomas Gleixner <tglx@linutronix.de>
      b1370658
    • P
      irqchip/GICv2m: Fix GICv2m build warning on 32 bits · 157add60
      Pavel Fedin 提交于
      After GICv2m was enabled for 32-bit ARM kernel, a warning popped up:
      
      drivers/irqchip/irq-gic-v2m.c: In function gicv2m_compose_msi_msg:
      drivers/irqchip/irq-gic-v2m.c:100:2: warning: right shift count >= width
      of type [enabled by default]
        msg->address_hi = (u32) (addr >> 32);
        ^
      
      This patch fixes it by using proper macros for splitting up the value.
      Signed-off-by: NPavel Fedin <p.fedin@samsung.com>
      Reviewed-by: NMarc Zyngier <marc.zyngier@arm.com>
      Signed-off-by: NMarc Zyngier <marc.zyngier@arm.com>
      Cc: linux-arm-kernel@lists.infradead.org
      Cc: Stuart Yoder <stuart.yoder@freescale.com>
      Cc: Jason Cooper <jason@lakedaemon.net>
      Link: http://lkml.kernel.org/r/1442142873-20213-4-git-send-email-marc.zyngier@arm.comSigned-off-by: NThomas Gleixner <tglx@linutronix.de>
      157add60
    • M
      irqchip/gic-v3-its: Add missing cache flushes · 5a9a8915
      Marc Zyngier 提交于
      When the ITS is configured for non-cacheable transactions, make sure
      that the allocated, zeroed memory is flushed to the Point of
      Coherency, allowing the ITS to observe the zeros instead of random
      garbage (or even get its own data overwritten by zeros being evicted
      from the cache...).
      
      Fixes: 241a386c "irqchip: gicv3-its: Use non-cacheable accesses when no shareability"
      Reported-and-tested-by: NStuart Yoder <stuart.yoder@freescale.com>
      Signed-off-by: NMarc Zyngier <marc.zyngier@arm.com>
      Cc: linux-arm-kernel@lists.infradead.org
      Cc: Pavel Fedin <p.fedin@samsung.com>
      Cc: Jason Cooper <jason@lakedaemon.net>
      Link: http://lkml.kernel.org/r/1442142873-20213-3-git-send-email-marc.zyngier@arm.comSigned-off-by: NThomas Gleixner <tglx@linutronix.de>
      5a9a8915
    • M
      irqchip/GIC: Add workaround for aliased GIC400 · 12e14066
      Marc Zyngier 提交于
      The GICv2 architecture mandates that the two 4kB GIC regions are
      contiguous, and on two separate physical pages (so that access to
      the second page can be trapped by a hypervisor). This doesn't work
      very well when PAGE_SIZE is 64kB.
      
      A relatively common hack^Wway to work around this is to alias each
      4kB region over its own 64kB page. Of course in this case, the base
      address you want to use is not really the begining of the region,
      but base + 60kB (so that you get a contiguous 8kB region over two
      distinct pages).
      
      Normally, this would be described in DT with a new property, but
      some HW is already out there, and the firmware makes sure that
      it will override whatever you put in the GIC node. Duh. And of course,
      said firmware source code is not available, despite being based
      on u-boot.
      
      The workaround is to detect the case where the CPU interface size
      is set to 128kB, and verify the aliasing by checking that the ID
      register for GIC400 (which is the only GIC wired this way so far)
      is the same at base and base + 0xF000. In this case, we update
      the GIC base address and let it roll.
      
      And if you feel slightly sick by looking at this, rest assured that
      I do too...
      Reported-by: NJulien Grall <julien.grall@citrix.com>
      Signed-off-by: NMarc Zyngier <marc.zyngier@arm.com>
      Cc: linux-arm-kernel@lists.infradead.org
      Cc: Stuart Yoder <stuart.yoder@freescale.com>
      Cc: Pavel Fedin <p.fedin@samsung.com>
      Cc: Jason Cooper <jason@lakedaemon.net>
      Link: http://lkml.kernel.org/r/1442142873-20213-2-git-send-email-marc.zyngier@arm.comSigned-off-by: NThomas Gleixner <tglx@linutronix.de>
      12e14066
  3. 02 9月, 2015 1 次提交
  4. 27 8月, 2015 4 次提交
  5. 26 8月, 2015 2 次提交
  6. 25 8月, 2015 1 次提交
  7. 21 8月, 2015 3 次提交
  8. 20 8月, 2015 3 次提交
    • G
      irqchip/crossbar: Restore set_wake functionality · 8200fe43
      Grygorii Strashko 提交于
      The TI crossbar irqchip doesn't provides any facility to configure the
      wakeup sources, but the conversion to hierarchical irqdomains set the
      irq_set_wake callback to irq_chip_set_wake_parent. The parent chip
      (OMAP wakeupgen) has no irq_set_wake function either so the call will
      fail with -ENOSYS. As a result the irq_set_wake() call in the resume
      path will trigger an 'Unbalanced wake disable' warning.
      
      Before the conversion the GIC irqchip was the top level irqchip and
      correctly flagged with IRQCHIP_SKIP_SET_WAKE.
      
      Restore the correct behaviour by removing the irq_set_type callback
      from the crossbar irqchip and set the IRQCHIP_SKIP_SET_WAKE flag which
      lets the irq_set_irq_wake() call from the driver succeed.
      
      [ tglx: Massaged changelog ]
      
      Fixes: 783d3186 ('irqchip: crossbar: Convert dra7 crossbar...')
      Signed-off-by: NGrygorii Strashko <grygorii.strashko@ti.com>
      Cc: Sudeep Holla <sudeep.holla@arm.com>
      Cc: <linux@arm.linux.org.uk>
      Cc: <nsekhar@ti.com>
      Cc: <jason@lakedaemon.net>
      Cc: <balbi@ti.com>
      Cc: <linux-arm-kernel@lists.infradead.org>
      Cc: <tony@atomide.com>
      Cc: <marc.zyngier@arm.com>
      Cc: stable@vger.kernel.org # 4.1
      Link: http://lkml.kernel.org/r/1439554830-19502-7-git-send-email-grygorii.strashko@ti.comSigned-off-by: NThomas Gleixner <tglx@linutronix.de>
      8200fe43
    • G
      irqchip/crossbar: Restore the mask on suspend behaviour · 4fd8f47e
      Grygorii Strashko 提交于
      The ARM GIC requires that all interrupts which are not used as a
      wakeup source have to be masked during suspend.
      
      The conversion of the crossbar irqchip to hierarchical irq domains
      failed to mark the crossbar irqchip with the IRQCHIP_MASK_ON_SUSPEND
      flag and therefor broke the suspend requirement of the GIC.
      
      Before the conversion the flags were visible because the GIC was the
      top level irqchip. After the conversion the crossbar irqchip is the
      top level irq chip whose flags are evaluated in suspend_device_irq().
      As the flag is not set the masking of the non-wakeup irqs is not
      invoked which breaks suspend.
      
      Add the IRQCHIP_MASK_ON_SUSPEND flag to the crossbar irqchip, so the
      GIC interrupts get masked properly.
      
      [ tglx: Massaged changelog ]
      
      Fixes: 783d3186 ('irqchip: crossbar: Convert dra7 crossbar...')
      Signed-off-by: NGrygorii Strashko <grygorii.strashko@ti.com>
      Cc: Sudeep Holla <sudeep.holla@arm.com>
      Cc: <linux@arm.linux.org.uk>
      Cc: <nsekhar@ti.com>
      Cc: <jason@lakedaemon.net>
      Cc: <balbi@ti.com>
      Cc: <linux-arm-kernel@lists.infradead.org>
      Cc: <tony@atomide.com>
      Cc: <marc.zyngier@arm.com>
      Cc: stable@vger.kernel.org # 4.1
      Link: http://lkml.kernel.org/r/1439554830-19502-6-git-send-email-grygorii.strashko@ti.comSigned-off-by: NThomas Gleixner <tglx@linutronix.de>
      4fd8f47e
    • G
      irqchip/crossbar: Restore the irq_set_type() mechanism · e269ec42
      Grygorii Strashko 提交于
      The conversion of the crossbar irqchip to hierarchical irq domains
      failed to provide a mechanism to properly set the trigger type of an
      interrupt.
      
      The crossbar irq chip itself has no mechanism and therefor no
      irq_set_type() callback. The code before the conversion relayed the
      trigger configuration directly to the underlying GIC.
      
      Restore the correct behaviour by setting the crossbar irq_set_type
      callback to irq_chip_set_type_parent(). This propagates the
      set_trigger() call to the underlying GIC irqchip.
      
      [ tglx: Massaged changelog ]
      
      Fixes: 783d3186 ('irqchip: crossbar: Convert dra7 crossbar...')
      Signed-off-by: NGrygorii Strashko <grygorii.strashko@ti.com>
      Cc: Sudeep Holla <sudeep.holla@arm.com>
      Cc: <linux@arm.linux.org.uk>
      Cc: <nsekhar@ti.com>
      Cc: <jason@lakedaemon.net>
      Cc: <balbi@ti.com>
      Cc: <linux-arm-kernel@lists.infradead.org>
      Cc: <tony@atomide.com>
      Cc: <marc.zyngier@arm.com>
      Cc: stable@vger.kernel.org # 4.1
      Link: http://lkml.kernel.org/r/1439554830-19502-4-git-send-email-grygorii.strashko@ti.comSigned-off-by: NThomas Gleixner <tglx@linutronix.de>
      e269ec42
  9. 04 8月, 2015 2 次提交
    • J
      irqchip/gic: Ensure gic_cpu_if_up/down() programs correct GIC instance · 4c2880b3
      Jon Hunter 提交于
      Commit 32289506 ("irqchip: gic: Preserve gic V2 bypass bits in cpu
      ctrl register") added a new function, gic_cpu_if_up(), to program the
      GIC CPU_CTRL register. This function assumes that there is only one GIC
      instance present and hence always uses the chip data for the primary GIC
      controller. Although it is not common for there to be a secondary, some
      devices do support a secondary. Therefore, fix this by passing
      gic_cpu_if_up() a pointer to the appropriate chip data structure.
      
      Similarly, the function gic_cpu_if_down() only assumes that there is a
      single GIC instance present. Update this function so that an instance
      number is passed for the appropriate GIC and return an error code on
      failure. The vexpress TC2 (which has a single GIC) is currently the only
      user of this function and so update it accordingly. Note that because the
      TC2 only has a single GIC, the call to gic_cpu_if_down() should always
      be successful.
      Signed-off-by: NJon Hunter <jonathanh@nvidia.com>
      Reviewed-by: NMarc Zyngier <marc.zyngier@arm.com>
      Cc: <linux-arm-kernel@lists.infradead.org>
      Cc: Russell King <linux@arm.linux.org.uk>
      Cc: Nicolas Pitre <nicolas.pitre@linaro.org>
      Cc: Jason Cooper <jason@lakedaemon.net>
      Link: http://lkml.kernel.org/r/1438332252-25248-2-git-send-email-jonathanh@nvidia.comSigned-off-by: NThomas Gleixner <tglx@linutronix.de>
      4c2880b3
    • J
      irqchip/gic: Only allow the primary GIC to set the CPU map · 567e5a01
      Jon Hunter 提交于
      The gic_init_bases() function initialises an array that stores the mapping
      between the GIC and CPUs. This array is a global array that is
      unconditionally initialised on every call to gic_init_bases(). Although,
      it is not common for there to be more than one GIC instance, there are
      some devices that do support nested GIC controllers and gic_init_bases()
      can be called more than once.
      
      A 2nd call to gic_init_bases() will clear the previous CPU mapping and
      will only setup the mapping again for the CPU calling gic_init_bases().
      Fix this by only allowing the CPU map to be configured for the primary GIC.
      
      For secondary GICs the CPU map is not relevant because these GICs do not
      directly route the interrupts to the main CPU(s) but to other GICs or
      devices.
      Signed-off-by: NJon Hunter <jonathanh@nvidia.com>
      Reviewed-by: NMarc Zyngier <marc.zyngier@arm.com>
      Cc: <linux-arm-kernel@lists.infradead.org>
      Cc: Russell King <linux@arm.linux.org.uk>
      Cc: Nicolas Pitre <nicolas.pitre@linaro.org>
      Cc: Jason Cooper <jason@lakedaemon.net>
      Link: http://lkml.kernel.org/r/1438332252-25248-1-git-send-email-jonathanh@nvidia.comSigned-off-by: NThomas Gleixner <tglx@linutronix.de>
      567e5a01
  10. 03 8月, 2015 1 次提交
    • A
      MIPS: SMP: Don't increment irq_count multiple times for call function IPIs · 4ace6139
      Alex Smith 提交于
      The majority of SMP platforms handle their IPIs through do_IRQ()
      which calls irq_{enter/exit}(). When a call function IPI is received,
      smp_call_function_interrupt() is called which also calls
      irq_{enter,exit}(), meaning irq_count is raised twice.
      
      When tick broadcasting is used (which is implemented via a call
      function IPI), this incorrectly causes all CPU idle time on the core
      receiving broadcast ticks to be accounted as time spent servicing
      IRQs, as account_process_tick() will account as such if irq_count is
      greater than 1. This results in 100% CPU usage being reported on a
      core which receives its ticks via broadcast.
      
      This patch removes the SMP smp_call_function_interrupt() wrapper which
      calls irq_{enter,exit}(). Platforms which handle their IPIs through
      do_IRQ() now call generic_smp_call_function_interrupt() directly to
      avoid incrementing irq_count a second time. Platforms which don't
      (loongson, sgi-ip27, sibyte) call generic_smp_call_function_interrupt()
      wrapped in irq_{enter,exit}().
      Signed-off-by: NAlex Smith <alex.smith@imgtec.com>
      Cc: linux-mips@linux-mips.org
      Patchwork: https://patchwork.linux-mips.org/patch/10770/Signed-off-by: NRalf Baechle <ralf@linux-mips.org>
      4ace6139
  11. 01 8月, 2015 3 次提交
  12. 30 7月, 2015 7 次提交
  13. 28 7月, 2015 1 次提交
    • R
      ARM: kill off set_irq_flags usage · e8d36d5d
      Rob Herring 提交于
      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: NRob Herring <robh@kernel.org>
      Cc: Russell King <linux@arm.linux.org.uk>
      Cc: Sekhar Nori <nsekhar@ti.com>
      Cc: Kevin Hilman <khilman@deeprootsystems.com>
      Cc: Jason Cooper <jason@lakedaemon.net>
      Cc: Andrew Lunn <andrew@lunn.ch>
      Cc: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
      Cc: Gregory Clement <gregory.clement@free-electrons.com>
      Acked-by: NHans Ulli Kroll <ulli.kroll@googlemail.com>
      Acked-by: NShawn Guo <shawnguo@kernel.org>
      Cc: Sascha Hauer <kernel@pengutronix.de>
      Cc: Imre Kaloz <kaloz@openwrt.org>
      Acked-by: NKrzysztof Halasa <khalasa@piap.pl>
      Cc: Greg Ungerer <gerg@uclinux.org>
      Cc: Roland Stigge <stigge@antcom.de>
      Cc: Tony Lindgren <tony@atomide.com>
      Cc: Daniel Mack <daniel@zonque.org>
      Cc: Haojian Zhuang <haojian.zhuang@gmail.com>
      Cc: Robert Jarzmik <robert.jarzmik@free.fr>
      Cc: Simtec Linux Team <linux@simtec.co.uk>
      Cc: Kukjin Kim <kgene@kernel.org>
      Cc: Krzysztof Kozlowski <k.kozlowski@samsung.com>
      Acked-by: NWan ZongShun <mcuos.com@gmail.com>
      Cc: linux-arm-kernel@lists.infradead.org
      Cc: linux-omap@vger.kernel.org
      Cc: linux-samsung-soc@vger.kernel.org
      Tested-by: NKevin Hilman <khilman@linaro.org>
      Signed-off-by: NOlof Johansson <olof@lixom.net>
      e8d36d5d
  14. 27 7月, 2015 1 次提交
    • F
      irqchip/bcm7120-l2: Fix interrupt status for multiple parent IRQs · 0aef3997
      Florian Fainelli 提交于
      Our irq-bcm7120-l2 interrupt controller driver utilizes the same handler
      function for the different parent interrupts it services: UPG_MAIN, UPG_BSC for
      instance.
      
      The problem is that function reads the IRQSTAT register which can combine
      interrupt causes for different parent interrupts, such that we can end-up in
      the following situation:
      
      - CPU takes an interrupt
      - bcm7120_l2_intc_irq_handle() reads IRQSTAT
      - generic_handle_irq() is invoked
      - there are still pending interrupts flagged in IRQSTAT from a different parent
      - handle_bad_irq() is invoked for these since they come from a different irq_desc/irq
      
      In order to fix this, make sure that we always mask IRQSTAT with the
      appropriate bits that correspond go the parent interrupt source this is coming
      from. To simplify things, associate an unique structure per parent interrupt
      handler to avoid multiplying the number of lookups.
      
      Fixes: a5042de2 ("irqchip: bcm7120-l2: Add Broadcom BCM7120-style Level 2 interrupt controller")
      Signed-off-by: NFlorian Fainelli <f.fainelli@gmail.com>
      Cc: linux-mips@linux-mips.org
      Cc: cernekee@gmail.com
      Cc: jason@lakedaemon.net
      Cc: bcm-kernel-feedback-list@broadcom.com
      Cc: gregory.0xf0@gmail.com
      Cc: computersforpeace@gmail.com
      Link: http://lkml.kernel.org/r/1437691941-3100-1-git-send-email-f.fainelli@gmail.comSigned-off-by: NThomas Gleixner <tglx@linutronix.de>
      0aef3997