1. 24 5月, 2017 1 次提交
  2. 04 4月, 2017 1 次提交
    • C
      KVM: arm/arm64: vgic: Fix GICC_PMR uaccess on GICv3 and clarify ABI · 6d56111c
      Christoffer Dall 提交于
      As an oversight, for GICv2, we accidentally export the GICC_PMR register
      in the format of the GICH_VMCR.VMPriMask field in the lower 5 bits of a
      word, meaning that userspace must always use the lower 5 bits to
      communicate with the KVM device and must shift the value left by 3
      places to obtain the actual priority mask level.
      
      Since GICv3 supports the full 8 bits of priority masking in the ICH_VMCR,
      we have to fix the value we export when emulating a GICv2 on top of a
      hardware GICv3 and exporting the emulated GICv2 state to userspace.
      
      Take the chance to clarify this aspect of the ABI.
      Reviewed-by: NMarc Zyngier <marc.zyngier@arm.com>
      Signed-off-by: NChristoffer Dall <cdall@linaro.org>
      6d56111c
  3. 13 6月, 2016 2 次提交
    • J
      irqchip/gic: Add platform driver for non-root GICs that require RPM · 9c8edddf
      Jon Hunter 提交于
      Add a platform driver to support non-root GICs that require runtime
      power-management. Currently, only non-root GICs are supported because
      the functions, smp_cross_call() and set_handle_irq(), that need to
      be called for a root controller are located in the __init section and
      so cannot be called by the platform driver.
      
      The GIC platform driver re-uses many functions from the existing GIC
      driver including some functions to save and restore the GIC context
      during power transitions. The functions for saving and restoring the
      GIC context are currently only defined if CONFIG_CPU_PM is enabled and
      to ensure that these functions are always defined when the platform
      driver is enabled, a dependency on CONFIG_ARM_GIC_PM (which selects the
      platform driver) has been added.
      
      In order to re-use the private GIC initialisation code, a new public
      function, gic_of_init_child(), has been added which calls various
      private functions to initialise the GIC. This is different from the
      existing gic_of_init() because it only supports non-root GICs (ie. does
      not call smp_cross_call() is set_handle_irq()) and is not located in
      the __init section (so can be used by platform drivers). Furthermore,
      gic_of_init_child() dynamically allocates memory for the GIC chip data
      which is also different from gic_of_init().
      
      There is no specific suspend handling for GICs registered as platform
      devices. Non-wakeup interrupts will be disabled by the kernel during
      late suspend, however, this alone will not power down the GIC if
      interrupts have been requested and not freed. Therefore, requestors of
      non-wakeup interrupts will need to free them on entering suspend in
      order to power-down the GIC.
      Signed-off-by: NJon Hunter <jonathanh@nvidia.com>
      Signed-off-by: NMarc Zyngier <marc.zyngier@arm.com>
      9c8edddf
    • J
      irqchip/gic: Prepare for adding platform driver · cdbb813d
      Jon Hunter 提交于
      To support GICs that require runtime power management, it is necessary
      to add a platform driver, so that the probing of the chip can be
      deferred if resources, such as a power-domain, is not yet available.
      
      To prepare for adding a platform driver:
       1. Drop the __init section from the gic_dist_config() so this can be
          re-used by the platform driver.
       2. Add prototypes for functions required by the platform driver to the
          GIC header file so they can be re-used.
      Signed-off-by: NJon Hunter <jonathanh@nvidia.com>
      Signed-off-by: NMarc Zyngier <marc.zyngier@arm.com>
      cdbb813d
  4. 20 5月, 2016 2 次提交
  5. 21 12月, 2015 1 次提交
  6. 16 12月, 2015 1 次提交
    • L
      irqchip/gic: Support RealView variant setup · 8673c1d7
      Linus Walleij 提交于
      The ARM RealView PB11MPCore reference design has some special
      bits in a system controller register to set up the GIC in one
      of three modes: legacy, new with DCC, new without DCC. The
      register is also used to enable FIQ.
      
      Since the platform will not boot unless this register is set
      up to "new with DCC" mode, we need a special quirk to be
      compiled-in for the RealView platforms.
      
      If we find the right compatible string on the GIC TestChip,
      we enable this quirk by looking up the system controller and
      enabling the special bits.
      
      We depend on the CONFIG_REALVIEW_DT Kconfig symbol as the old
      boardfile code has the same fix hardcoded, and this is only
      needed for the attempts to modernize the RealView code using
      device tree.
      
      After fixing this, the PB11MPCore boots with device tree
      only.
      
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Jason Cooper <jason@lakedaemon.net>
      Signed-off-by: NLinus Walleij <linus.walleij@linaro.org>
      Signed-off-by: NMarc Zyngier <marc.zyngier@arm.com>
      8673c1d7
  7. 14 10月, 2015 1 次提交
  8. 27 8月, 2015 1 次提交
    • M
      irqchip/GIC: Convert to EOImode == 1 · 0b996fd3
      Marc Zyngier 提交于
      So far, GICv2 has been used with EOImode == 0. The effect of this
      mode is to perform the priority drop and the deactivation of the
      interrupt at the same time.
      
      While this works perfectly for Linux (we only have a single priority),
      it causes issues when an interrupt is forwarded to a guest, and when
      we want the guest to perform the EOI itself.
      
      For this case, the GIC architecture provides EOImode == 1, where:
      - A write to the EOI register drops the priority of the interrupt
        and leaves it active. Other interrupts at the same priority level
        can now be taken, but the active interrupt cannot be taken again
      - A write to the DIR marks the interrupt as inactive, meaning it can
        now be taken again.
      
      We only enable this feature when booted in HYP mode and that
      the device-tree reported a suitable CPU interface. Observable behaviour
      should remain unchanged.
      Signed-off-by: NMarc Zyngier <marc.zyngier@arm.com>
      Reviewed-and-tested-by: NEric Auger <eric.auger@linaro.org>
      Cc: Christoffer Dall <christoffer.dall@linaro.org>
      Cc: Jiang Liu <jiang.liu@linux.intel.com>
      Cc: <linux-arm-kernel@lists.infradead.org>
      Cc: kvmarm@lists.cs.columbia.edu
      Cc: Jason Cooper <jason@lakedaemon.net>
      Link: http://lkml.kernel.org/r/1440604845-28229-4-git-send-email-marc.zyngier@arm.comSigned-off-by: NThomas Gleixner <tglx@linutronix.de>
      0b996fd3
  9. 12 8月, 2015 1 次提交
  10. 04 8月, 2015 1 次提交
    • 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
  11. 27 7月, 2015 1 次提交
  12. 25 4月, 2015 1 次提交
  13. 15 3月, 2015 2 次提交
  14. 29 11月, 2014 1 次提交
  15. 26 11月, 2014 1 次提交
  16. 19 8月, 2014 2 次提交
  17. 19 5月, 2014 1 次提交
  18. 05 2月, 2014 1 次提交
    • S
      DRIVERS: IRQCHIP: IRQ-GIC: Add support for routable irqs · 006e983b
      Sricharan R 提交于
      In some socs the gic can be preceded by a crossbar IP which
      routes the peripheral interrupts to the gic inputs. The peripheral
      interrupts are associated with a fixed crossbar input line and the
      crossbar routes that to one of the free gic input line.
      
      The DT entries for peripherals provides the fixed crossbar input line
      as its interrupt number and the mapping code should associate this with
      a free gic input line. This patch adds the support inside the gic irqchip
      to handle such routable irqs. The routable irqs are registered in a linear
      domain. The registered routable domain's callback should be implemented
      to get a free irq and to configure the IP to route it.
      
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Linus Walleij <linus.walleij@linaro.org>
      Cc: Santosh Shilimkar <santosh.shilimkar@ti.com>
      Cc: Russell King <linux@arm.linux.org.uk>
      Cc: Tony Lindgren <tony@atomide.com>
      Cc: Rajendra Nayak <rnayak@ti.com>
      Cc: Marc Zyngier <marc.zyngier@arm.com>
      Cc: Grant Likely <grant.likely@linaro.org>
      Cc: Rob Herring <rob.herring@calxeda.com>
      Signed-off-by: NSricharan R <r.sricharan@ti.com>
      Reviewed-by: NThomas Gleixner <tglx@linutronix.de>
      Acked-by: NSantosh Shilimkar <santosh.shilimkar@ti.com>
      Acked-by: NLinus Walleij <linus.walleij@linaro.org>
      006e983b
  19. 22 12月, 2013 1 次提交
  20. 24 9月, 2013 2 次提交
  21. 29 8月, 2013 1 次提交
    • N
      drivers: irq-chip: irq-gic: introduce gic_cpu_if_down() · 10d9eb8a
      Nicolas Pitre 提交于
      When processors are about to hit low power states, the assertion of
      standbywfi signal, triggered by the wfi instruction, is essential to
      entering low power modes. If an IRQ is pending on the processor at the
      time wfi is issued, the wfi instruction completes and the processor
      restarts execution without asserting the standbywfi signal. Depending
      on the platform power controller HW this behaviour can be acceptable or
      not; if this behaviour must be prevented software should be provided
      with a way to disable the routing of interrupts to the core IRQ pins.
      
      On systems where raw GIC distributor interrupts are connected to the power
      controller as wake-up events (hence the power controller still senses
      IRQs and can wake up cores upon IRQ pending), the GIC CPU interface can
      be disabled on power down, so that the GIC CPU IF output is gated and wfi
      cannot complete, thereby preventing the standbywfi issue.
      
      This patch adds a simple function to the GIC driver that allows to
      disable the GIC CPU IF from power down procedures.
      Signed-off-by: NNicolas Pitre <nico@linaro.org>
      Signed-off-by: NLorenzo Pieralisi <lorenzo.pieralisi@arm.com>
      [rewrote commit log]
      Signed-off-by: NOlof Johansson <olof@lixom.net>
      10d9eb8a
  22. 30 7月, 2013 2 次提交
    • N
      ARM: bL_switcher: do not hardcode GIC IDs in the code · ed96762e
      Nicolas Pitre 提交于
      Currently, GIC IDs are hardcoded making the code dependent on the 4+4 b.L
      configuration.  Let's allow for GIC IDs to be discovered upon switcher
      initialization to support other b.L configurations such as the 1+1 one,
      or 2+3 as on the VExpress TC2.
      Signed-off-by: NNicolas Pitre <nico@linaro.org>
      ed96762e
    • N
      ARM: gic: add CPU migration support · 1a6b69b6
      Nicolas Pitre 提交于
      This is required by the big.LITTLE switcher code.
      
      The gic_migrate_target() changes the CPU interface mapping for the
      current CPU to redirect SGIs to the specified interface, and it also
      updates the target CPU for each interrupts to that CPU interface
      if they were targeting the current interface.  Finally, pending
      SGIs for the current CPU are forwarded to the new interface.
      
      Because Linux does not use it, the SGI source information for the
      forwarded SGIs is not preserved.  Neither is the source information
      for the SGIs sent by the current CPU to other CPUs adjusted to match
      the new CPU interface mapping.  The required registers are banked so
      only the target CPU could do it.
      Signed-off-by: NNicolas Pitre <nico@linaro.org>
      1a6b69b6
  23. 27 3月, 2013 1 次提交
  24. 12 2月, 2013 3 次提交
  25. 13 1月, 2013 3 次提交
    • R
      irqchip: Move ARM gic.h to include/linux/irqchip/arm-gic.h · 520f7bd7
      Rob Herring 提交于
      Now that we have GIC moved to drivers/irqchip and all GIC DT init for
      platforms using irqchip_init, move gic.h and update the remaining
      includes.
      Signed-off-by: NRob Herring <rob.herring@calxeda.com>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Russell King <linux@arm.linux.org.uk>
      Cc: Anton Vorontsov <avorontsov@mvista.com>
      Cc: Kukjin Kim <kgene.kim@samsung.com>
      Cc: Sascha Hauer <kernel@pengutronix.de>
      Cc: David Brown <davidb@codeaurora.org>
      Cc: Daniel Walker <dwalker@fifo99.com>
      Cc: Bryan Huntsman <bryanh@codeaurora.org>
      Cc: Tony Lindgren <tony@atomide.com>
      Cc: Paul Mundt <lethal@linux-sh.org>
      Cc: Magnus Damm <magnus.damm@gmail.com>
      Cc: Viresh Kumar <viresh.linux@gmail.com>
      Cc: Shiraz Hashim <shiraz.hashim@st.com>
      Cc: Stephen Warren <swarren@wwwdotorg.org>
      Cc: Srinidhi Kasagar <srinidhi.kasagar@stericsson.com>
      Cc: Linus Walleij <linus.walleij@linaro.org>
      Cc: Samuel Ortiz <sameo@linux.intel.com>
      520f7bd7
    • R
      ARM: use common irqchip_init for GIC init · 0529e315
      Rob Herring 提交于
      Convert all GIC DT initialization over to use common irqchip_init
      function.
      Signed-off-by: NRob Herring <rob.herring@calxeda.com>
      Cc: Russell King <linux@arm.linux.org.uk>
      Cc: Kukjin Kim <kgene.kim@samsung.com>
      Acked-by: NShawn Guo <shawn.guo@linaro.org>
      Cc: Sascha Hauer <kernel@pengutronix.de>
      Cc: David Brown <davidb@codeaurora.org>
      Cc: Daniel Walker <dwalker@fifo99.com>
      Cc: Bryan Huntsman <bryanh@codeaurora.org>
      Cc: Tony Lindgren <tony@atomide.com>
      Cc: Paul Mundt <lethal@linux-sh.org>
      Cc: Magnus Damm <magnus.damm@gmail.com>
      Cc: Dinh Nguyen <dinguyen@altera.com>
      Cc: Viresh Kumar <viresh.linux@gmail.com>
      Cc: Shiraz Hashim <shiraz.hashim@st.com>
      Cc: Stephen Warren <swarren@wwwdotorg.org>
      Cc: Srinidhi Kasagar <srinidhi.kasagar@stericsson.com>
      Cc: Linus Walleij <linus.walleij@linaro.org>
      0529e315
    • R
      ARM: remove mach .handle_irq for GIC users · 1d5cc604
      Rob Herring 提交于
      Now that the GIC initialization sets up the handle_arch_irq pointer, we
      can remove it for all machines and make it static.
      Signed-off-by: NRob Herring <rob.herring@calxeda.com>
      Cc: Russell King <linux@arm.linux.org.uk>
      Cc: Anton Vorontsov <avorontsov@mvista.com>
      Cc: Kyungmin Park <kyungmin.park@samsung.com>
      Cc: Sascha Hauer <kernel@pengutronix.de>
      Cc: David Brown <davidb@codeaurora.org>
      Cc: Daniel Walker <dwalker@fifo99.com>
      Cc: Bryan Huntsman <bryanh@codeaurora.org>
      Acked-by: NTony Lindgren <tony@atomide.com>
      Cc: Paul Mundt <lethal@linux-sh.org>
      Cc: Magnus Damm <magnus.damm@gmail.com>
      Cc: Dinh Nguyen <dinguyen@altera.com>
      Cc: Shiraz Hashim <shiraz.hashim@st.com>
      Acked-by: NStephen Warren <swarren@nvidia.com>
      Cc: Srinidhi Kasagar <srinidhi.kasagar@stericsson.com>
      Cc: Linus Walleij <linus.walleij@linaro.org>
      Acked-by: NViresh Kumar <viresh.kumar@linaro.org>
      Acked-by: NKukjin Kim <kgene.kim@samsung.com>
      Acked-by: NShawn Guo <shawn.guo@linaro.org>
      Acked-by: NOlof Johansson <olof@lixom.net>
      Acked-by: NArnd Bergmann <arnd@arndb.de>
      1d5cc604
  26. 11 1月, 2013 2 次提交
  27. 16 2月, 2012 1 次提交
    • G
      irq_domain: Remove 'new' irq_domain in favour of the ppc one · 75294957
      Grant Likely 提交于
      This patch removes the simplistic implementation of irq_domains and enables
      the powerpc infrastructure for all irq_domain users.  The powerpc
      infrastructure includes support for complex mappings between Linux and
      hardware irq numbers, and can manage allocation of irq_descs.
      
      This patch also converts the few users of irq_domain_add()/irq_domain_del()
      to call irq_domain_add_legacy() instead.
      
      v3: Fix bug that set up too many irqs in translation range.
      v2: Fix removal of irq_alloc_descs() call in gic driver
      Signed-off-by: NGrant Likely <grant.likely@secretlab.ca>
      Cc: Rob Herring <rob.herring@calxeda.com>
      Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Milton Miller <miltonm@bga.com>
      Tested-by: NOlof Johansson <olof@lixom.net>
      75294957
  28. 16 11月, 2011 2 次提交