1. 14 12月, 2012 2 次提交
  2. 01 11月, 2012 2 次提交
  3. 31 10月, 2012 1 次提交
  4. 04 10月, 2012 4 次提交
  5. 16 8月, 2012 1 次提交
    • A
      pseries: Rework irq assignment to avoid carrying qemu_irqs around · a307d594
      Alexey Kardashevskiy 提交于
      Currently, the interfaces in the pseries machine code for assignment
      and setup of interrupts pass around qemu_irq objects.  That was done
      in an attempt not to be too closely linked to the specific XICS
      interrupt controller.  However interactions with the device tree setup
      made that attempt rather futile, and XICS is part of the PAPR spec
      anyway, so this really just meant we had to carry both the qemu_irq
      pointers and the XICS irq numbers around.
      
      This mess will just get worse when we add upcoming PCI MSI support,
      since that will require tracking a bunch more interrupt.  Therefore,
      this patch reworks the spapr code to just use XICS irq numbers
      (roughly equivalent to GSIs on x86) and only retrieve the qemu_irq
      pointers from the XICS code when we need them (a trivial lookup).
      
      This is a reworked and generalized version of an earlier spapr_pci
      specific patch from Alexey Kardashevskiy.
      Signed-off-by: NAlexey Kardashevskiy <aik@ozlabs.ru>
      Signed-off-by: NDavid Gibson <david@gibson.dropbear.id.au>
      [agraf: fix checkpath warning]
      Signed-off-by: NAlexander Graf <agraf@suse.de>
      a307d594
  6. 15 3月, 2012 2 次提交
    • D
      pseries: Add support for level interrupts to XICS · d07fee7e
      David Gibson 提交于
      The pseries "xics" interrupt controller, like most interrupt
      controllers can support both message (i.e. edge sensitive) interrupts
      and level sensitive interrupts, but it needs to know which are which.
      
      When I implemented the xics emulation for qemu, the only devices we
      supported were the PAPR virtual IO devices.  These devices only use
      message interrupts, so they were the only ones I implemented in xics.
      
      Since then, however, we have added support for PCI devices, which use
      level sensitive interrupts.  It turns out the message interrupt logic
      still actually works most of the time for these, but there are
      circumstances where we can lost interrupts due to the incorrect
      interrupt logic.
      
      This patch, therefore, implements the correct xics level-sensitive
      interrupt logic.  The type of the interrupt is set when a device
      allocates a new xics interrupt.
      Signed-off-by: NDavid Gibson <david@gibson.dropbear.id.au>
      Signed-off-by: NAlexander Graf <agraf@suse.de>
      d07fee7e
    • A
      ppc hw/: Don't use CPUState · e2684c0b
      Andreas Färber 提交于
      Scripted conversion:
        for file in hw/ppc*.[hc] hw/mpc8544_guts.c hw/spapr*.[hc] hw/virtex_ml507.c hw/xics.c; do
          sed -i "s/CPUState/CPUPPCState/g" $file
        done
      Signed-off-by: NAndreas Färber <afaerber@suse.de>
      Acked-by: NAnthony Liguori <aliguori@us.ibm.com>
      e2684c0b
  7. 06 10月, 2011 1 次提交
    • D
      pseries: Bugfixes for interrupt numbering in XICS code · cc67b9c8
      David Gibson 提交于
      The implementation of the XICS interrupt controller contains several
      (difficult to trigger) bugs due to the fact that we were not 100%
      consistent with which irq numbering we used.  In most places, global
      numbers were used as handled by the presentation layer, however a few
      functions took "local" numberings, that is the source number within
      the interrupt source controller which is offset from the global
      number.  In most cases the function and its caller agreed on this, but
      in a few cases it didn't.
      
      This patch cleans this up by always using global numbering.
      Translation to the local number is now always and only done when we
      look up the individual interrupt source state structure.  This should
      remove the existing bugs and with luck reduce the chances of
      re-introducing such bugs.
      Signed-off-by: NDavid Gibson <david@gibson.dropbear.id.au>
      Signed-off-by: NAlexander Graf <agraf@suse.de>
      cc67b9c8
  8. 21 9月, 2011 1 次提交
  9. 21 8月, 2011 1 次提交
  10. 08 4月, 2011 1 次提交
    • D
      pseries: Abolish envs array · c7a5c0c9
      David Gibson 提交于
      Currently the pseries machine init code builds up an array, envs, of
      CPUState pointers for all the cpus in the system.  This is kind of
      pointless, given the generic code already has a perfectly good linked list
      of the cpus.
      
      In addition, there are a number of places which assume that the cpu's
      cpu_index field is equal to its index in this array.  This is true in
      practice, because cpu_index values are just assigned sequentially, but
      it's conceptually incorrect and may not always be true.
      
      Therefore, this patch abolishes the envs array, and explicitly uses the
      generic cpu linked list and cpu_index values throughout.
      Signed-off-by: NDavid Gibson <david@gibson.dropbear.id.au>
      Signed-off-by: NAlexander Graf <agraf@suse.de>
      c7a5c0c9
  11. 02 4月, 2011 1 次提交
    • D
      Implement the PAPR (pSeries) virtualized interrupt controller (xics) · b5cec4c5
      David Gibson 提交于
      PAPR defines an interrupt control architecture which is logically divided
      into ICS (Interrupt Control Presentation, each unit is responsible for
      presenting interrupts to a particular "interrupt server", i.e. CPU) and
      ICS (Interrupt Control Source, each unit responsible for one or more
      hardware interrupts as numbered globally across the system).  All PAPR
      virtual IO devices expect to deliver interrupts via this mechanism.  In
      Linux, this interrupt controller system is handled by the "xics" driver.
      
      On pSeries systems, access to the interrupt controller is virtualized via
      hypercalls and RTAS methods.  However, the virtualized interface is very
      similar to the underlying interrupt controller hardware, and similar PICs
      exist un-virtualized in some other systems.
      
      This patch implements both the ICP and ICS sides of the PAPR interrupt
      controller.  For now, only the hypercall virtualized interface is provided,
      however it would be relatively straightforward to graft an emulated
      register interface onto the underlying interrupt logic if we want to add
      a machine with a hardware ICS/ICP system in the future.
      
      There are some limitations in this implementation: it is assumed for now
      that only one instance of the ICS exists, although a full xics system can
      have several, each responsible for a different group of hardware irqs.
      ICP/ICS can handle both level-sensitve (LSI) and message signalled (MSI)
      interrupt inputs.  For now, this implementation supports only MSI
      interrupts, since that is used by PAPR virtual IO devices.
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      Signed-off-by: NDavid Gibson <dwg@au1.ibm.com>
      Signed-off-by: NAlexander Graf <agraf@suse.de>
      b5cec4c5