05 Sep, 2016

1 commit

  • Commit 1bf4ddc46c5d ("irqdomain: Introduce irq_domain_create_{linear,
    tree}") introduced the use of fwnode_handle to identify the interrupt
    controller when calling __irq_domain_add but missed updating the kernel
    doc parameters for the function.

    Update this comment. While we are touching this code, also consolidate
    the declaration and assignment of of_node.

    Signed-off-by: Punit Agrawal
    Acked-by: Marc Zygnier
    Link: http://lkml.kernel.org/r/1464699409-23113-1-git-send-email-punit.agrawal@arm.com
    Signed-off-by: Thomas Gleixner

    Punit Agrawal
     

03 Sep, 2016

1 commit

  • According to the xlate() callback definition, the 'out_type' parameter
    needs to be the "linux irq type".

    A mask for such bits exists, IRQ_TYPE_SENSE_MASK, which is correctly
    applied in irq_domain_xlate_twocell()

    So use it for irq_domain_xlate_onetwocell() as well.

    Signed-off-by: Sebastian Frias
    Cc: Grant Likely
    Cc: Marc Zyngier
    Cc: Mason
    Cc: Jason Cooper
    Link: http://lkml.kernel.org/r/57A05F5D.103@laposte.net
    Signed-off-by: Thomas Gleixner

    Sebastian Frias
     

11 Jul, 2016

1 commit

  • If an irq_domain is auto-recursive and irq_domain_alloc_irqs_recursive()
    for its parent has returned an error, then do return and avoid calling
    irq_domain_free_irqs_recursive() uselessly, because:
    - if domain->ops->alloc() had failed for an auto-recursive irq_domain,
    then irq_domain_free_irqs_recursive() had already been called;
    - if domain->ops->alloc() had failed for a not auto-recursive irq_domain,
    then there is nothing to free at all.

    Signed-off-by: Alexander Popov
    Acked-by: Marc Zyngier
    Link: http://lkml.kernel.org/r/1467505448-2850-1-git-send-email-alex.popov@linux.com
    Signed-off-by: Thomas Gleixner

    Alexander Popov
     

04 Jul, 2016

2 commits

  • Pull the irq affinity managing code which is in a seperate branch for block
    developers to pull.

    Thomas Gleixner
     
  • Add an extra argument to the irq(domain) allocation functions, so we can hand
    down affinity hints to the allocator. Thats necessary to implement proper
    support for multiqueue devices.

    Signed-off-by: Thomas Gleixner
    Cc: Christoph Hellwig
    Cc: linux-block@vger.kernel.org
    Cc: linux-pci@vger.kernel.org
    Cc: linux-nvme@lists.infradead.org
    Cc: axboe@fb.com
    Cc: agordeev@redhat.com
    Link: http://lkml.kernel.org/r/1467621574-8277-4-git-send-email-hch@lst.de
    Signed-off-by: Thomas Gleixner

    Thomas Gleixner
     

23 Jun, 2016

1 commit

  • The function irq_create_of_mapping() is used to create an interrupt
    mapping. However, depending on whether the irqdomain, to which the
    interrupt belongs, is part of a hierarchy, determines whether the
    mapping is created via calling irq_domain_alloc_irqs() or
    irq_create_mapping().

    To dispose of the interrupt mapping, drivers call irq_dispose_mapping().
    However, this function does not check to see if the irqdomain is part
    of a hierarchy or not and simply assumes that it was mapped via calling
    irq_create_mapping() so calls irq_domain_disassociate() to unmap the
    interrupt.

    Fix this by checking to see if the irqdomain is part of a hierarchy and
    if so call irq_domain_free_irqs() to free/unmap the interrupt.

    Signed-off-by: Jon Hunter
    Cc: Marc Zyngier
    Cc: Jiang Liu
    Link: http://lkml.kernel.org/r/1466501002-16368-1-git-send-email-jonathanh@nvidia.com
    Signed-off-by: Thomas Gleixner

    Jon Hunter
     

13 Jun, 2016

2 commits

  • Some IRQ chips, such as GPIO controllers or secondary level interrupt
    controllers, may require require additional runtime power management
    control to ensure they are accessible. For such IRQ chips, it makes sense
    to enable the IRQ chip when interrupts are requested and disabled them
    again once all interrupts have been freed.

    When mapping an IRQ, the IRQ type settings are read and then programmed.
    The mapping of the IRQ happens before the IRQ is requested and so the
    programming of the type settings occurs before the IRQ is requested. This
    is a problem for IRQ chips that require additional power management
    control because they may not be accessible yet. Therefore, when mapping
    the IRQ, don't program the type settings, just save them and then program
    these saved settings when the IRQ is requested (so long as if they are not
    overridden via the call to request the IRQ).

    Add a stub function for irq_domain_free_irqs() to avoid any compilation
    errors when CONFIG_IRQ_DOMAIN_HIERARCHY is not selected.

    Signed-off-by: Jon Hunter
    Reviewed-by: Marc Zyngier
    Signed-off-by: Marc Zyngier

    Jon Hunter
     
  • When mapping an IRQ, it is possible that a mapping for the IRQ already
    exists. If mapping does exist then there are the following issues with
    regard to the handling of the IRQ type settings ...
    1. If the domain is part of a hierarchy, then:
    a. We do not check that the type settings for the existing mapping
    match those of the new mapping.
    b. We do not check to see if the type settings have been programmed
    yet (and they might not have been) and so we may never set the
    type.
    2. If the domain is NOT part of a hierarchy, we will overwrite the
    current type settings programmed if they are different from the
    previous mapping. Please note that irq_create_mapping()
    calls irq_find_mapping() to check if a mapping already exists.

    Although, it may be unlikely that the type settings for a shared
    interrupt would not match, nonetheless we should check for this.
    Therefore, to fix this check if a mapping exists (regardless of whether
    the domain is part of a hierarchy or not) and if it does then:
    1. Return the IRQ number if the type settings match or are not
    specified.
    2. Program the type settings and return the IRQ number if the type
    settings have not been programmed yet.
    3. Otherwise if the type setting do not match, then print a warning
    and don't return the IRQ number.

    Furthermore, add a warning if the type return by irq_domain_translate()
    has bits outside the sense mask set and then clear these bits. If these
    bits are not cleared then this will cause the comparision of the type
    settings for an existing mapping to fail with that of the new mapping
    even if the sense bit themselves match. The reason being is that the
    existing type settings are read by calling irq_get_trigger_type() which
    will clear any bits outside the sense mask. This will allow us to detect
    irqchips that are not correctly clearing these bits and fix them.

    Signed-off-by: Jon Hunter
    Reviewed-by: Marc Zyngier
    Signed-off-by: Marc Zyngier

    Jon Hunter
     

21 May, 2016

1 commit

  • Commit e61452365372 ("radix_tree: add support for multi-order entries")
    left the impression that the support for multiorder radix tree entries
    was functional. As soon as Ross tried to use it, it became apparent
    that my testing was completely inadequate, and it didn't even work a
    little bit for orders that were not a multiple of shift.

    This series of patches is the result of about 6 weeks of redesign,
    reimplementation, testing, arguing and hair-pulling. The great news is
    that the test-suite is now far better than it was. That's reflected in
    the diffstat for the test-suite alone:

    12 files changed, 436 insertions(+), 28 deletions(-)

    The highlight for users of the tree is that the restriction on the order
    of inserted entries being >= RADIX_TREE_MAP_SHIFT is now gone; the radix
    tree now supports any order between 0 and 64.

    For those who are interested in how the tree works, patch 9 is probably
    the most interesting one as it introduces the new machinery for handling
    sibling entries.

    I've tried to be fair in attributing authorship to the person who
    contributed the majority of the code in each patch; Ross has been an
    invaluable partner in the development of this support and it's fair to
    say that each of us has code in every commit.

    I should also express my appreciation of the 0day testing. It prompted
    me that I was bloating the tinyconfig in an unacceptable way, and it
    bisected to a commit which contained a rather nasty memory-corruption
    bug.

    This patch (of 29):

    The irqdomain code was checking for 0 or 1 entries, not 0 entries like
    the comment said they were. Introduce a new helper that will actually
    check for an empty tree.

    Signed-off-by: Matthew Wilcox
    Reviewed-by: Ross Zwisler
    Reviewed-by: Jan Kara
    Cc: Konstantin Khlebnikov
    Cc: Kirill Shutemov
    Cc: Neil Brown
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Matthew Wilcox
     

18 May, 2016

1 commit

  • Pull GPIO updates from Linus Walleij:
    "This is the bulk of GPIO changes for kernel cycle v4.7:

    Core infrastructural changes:

    - Support for natively single-ended GPIO driver stages.

    This means that if the hardware has registers to configure open
    drain or open source configuration, we use that rather than (as we
    did before) try to emulate it by switching the line to an input to
    get high impedance.

    This is also documented throughly in Documentation/gpio/driver.txt
    for those of you who did not understand one word of what I just
    wrote.

    - Start to do away with the unnecessarily complex and unitelligible
    ARCH_REQUIRE_GPIOLIB and ARCH_WANT_OPTIONAL_GPIOLIB, another
    evolutional artifact from the time when the GPIO subsystem was
    unmaintained.

    Archs can now just select GPIOLIB and be done with it, cleanups to
    arches will trickle in for the next kernel. Some minor archs ACKed
    the changes immediately so these are included in this pull request.

    - Advancing the use of the data pointer inside the GPIO device for
    storing driver data by switching the PowerPC, Super-H Unicore and
    a few other subarches or subsystem drivers in ALSA SoC, Input,
    serial, SSB, staging etc to use it.

    - The initialization now reads the input/output state of the GPIO
    lines, so that each GPIO descriptor knows - if this callback is
    implemented - whether the line is input or output. This also
    reflects nicely in userspace "lsgpio".

    - It is now possible to name GPIO producer names, line names, from
    the device tree. (Platform data has been supported for a while).
    I bet we will get a similar mechanism for ACPI one of those days.
    This makes is possible to get sensible producer names for e.g.
    GPIO rails in "lsgpio" in userspace.

    New drivers:

    - New driver for the Loongson1.

    - The XLP driver now supports Broadcom Vulcan ARM64.

    - The IT87 driver now supports IT8620 and IT8628.

    - The PCA953X driver now supports Galileo Gen2.

    Driver improvements:

    - MCP23S08 was switched to use the gpiolib irqchip helpers and now
    also suppors level-triggered interrupts.

    - 74x164 and RCAR now supports the .set_multiple() callback

    - AMDPT was converted to use generic GPIO.

    - TC3589x, TPS65218, SX150X, F7188X, MENZ127, VX855, WM831X, WM8994
    support the new single ended callback for open drain and in some
    cases open source.

    - Implement the .get_direction() callback for a few more drivers like
    PL061, Xgene.

    Cleanups:

    - Paul Gortmaker combed through the drivers and de-modularized those
    who are not really modules.

    - Move the GPIO poweroff DT bindings to the power subdir where they
    belong.

    - Rename gpio-generic.c to gpio-mmio.c, which is much more to the
    point. That's what it is handling, nothing more, nothing less"

    * tag 'gpio-v4.7-1' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio: (126 commits)
    MIPS: do away with ARCH_[WANT_OPTIONAL|REQUIRE]_GPIOLIB
    gpio: zevio: make it explicitly non-modular
    gpio: timberdale: make it explicitly non-modular
    gpio: stmpe: make it explicitly non-modular
    gpio: sodaville: make it explicitly non-modular
    pinctrl: sh-pfc: Let gpio_chip.to_irq() return zero on error
    gpio: dwapb: Add ACPI device ID for DWAPB GPIO controller on X-Gene platforms
    gpio: dt-bindings: add wd,mbl-gpio bindings
    gpio: of: make it possible to name GPIO lines
    gpio: make gpiod_to_irq() return negative for NO_IRQ
    gpio: xgene: implement .get_direction()
    gpio: xgene: Enable ACPI support for X-Gene GFC GPIO driver
    gpio: tegra: Implement gpio_get_direction callback
    gpio: set up initial state from .get_direction()
    gpio: rename gpio-generic.c into gpio-mmio.c
    gpio: generic: fix GPIO_GENERIC_PLATFORM is set to module case
    gpio: dwapb: add gpio-signaled acpi event support
    gpio: dwapb: convert device node to fwnode
    gpio: dwapb: remove name from dwapb_port_property
    gpio/qoriq: select IRQ_DOMAIN
    ...

    Linus Torvalds
     

02 May, 2016

1 commit

  • When iterating over the irq domain list, we try to match a domain
    either by calling a match() function or by comparing a number
    of fields passed as parameters.

    Both approaches are a bit restrictive:
    - match() is DT specific and only takes a device node
    - the fallback case only deals with the fwnode_handle

    It would be useful if we had a per-domain function that would
    actually perform the matching check on the whole of the
    irq_fwspec structure. This would allow for a domain to triage
    matching attempts that need to extend beyond the fwnode.

    Let's introduce irq_find_matching_fwspec(), which takes a full
    blown irq_fwspec structure, and call into a select() function
    implemented by the irqdomain. irq_find_matching_fwnode() is
    made a wrapper around irq_find_matching_fwspec in order to
    preserve compatibility.

    Signed-off-by: Marc Zyngier
    Cc: Mark Rutland
    Cc: devicetree@vger.kernel.org
    Cc: Jason Cooper
    Cc: Will Deacon
    Cc: Rob Herring
    Link: http://lkml.kernel.org/r/1460365075-7316-2-git-send-email-marc.zyngier@arm.com
    Signed-off-by: Thomas Gleixner

    Marc Zyngier
     

31 Mar, 2016

1 commit


10 Mar, 2016

1 commit

  • Export irq_chip_*_parent(), irq_domain_create_hierarchy(),
    irq_domain_set_hwirq_and_chip(), irq_domain_reset_irq_data(),
    irq_domain_alloc/free_irqs_parent()

    So gpio drivers can be built as modules. First user: gpio-xgene-sb

    Signed-off-by: Quan Nguyen
    Acked-by: Linus Walleij
    Cc: Phong Vo
    Cc: Marc Zyngier
    Cc: patches@apm.com
    Cc: Loc Ho
    Cc: Keyur Chudgar
    Cc: Jiang Liu
    Link: https://lists.01.org/pipermail/kbuild-all/2016-February/017914.html
    Link: http://lkml.kernel.org/r/1457017012-10628-1-git-send-email-qnguyen@apm.com
    Signed-off-by: Thomas Gleixner

    Quan Nguyen
     

25 Feb, 2016

1 commit

  • We will need to use this function to implement irq_reserve_ipi() later. So
    make it non static and move the prototype to irqdomain.h to allow using it
    outside irqdomain.c

    Signed-off-by: Qais Yousef
    Cc:
    Cc:
    Cc:
    Cc:
    Cc:
    Cc:
    Cc: Qais Yousef
    Link: http://lkml.kernel.org/r/1449580830-23652-8-git-send-email-qais.yousef@imgtec.com
    Signed-off-by: Thomas Gleixner

    Qais Yousef
     

01 Feb, 2016

1 commit

  • Pull IRQ fixes from Ingo Molnar:
    "Mostly irqchip driver fixes, but also an irq core crash fix and a
    build fix"

    * 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
    irqchip/mxs: Add missing set_handle_irq()
    irqchip/atmel-aic: Fix wrong bit operation for IRQ priority
    irqchip/gic-v3-its: Recompute the number of pages on page size change
    base: Export platform_msi_domain_[alloc,free]_irqs
    of: MSI: Simplify irqdomain lookup
    irqdomain: Allow domain lookup with DOMAIN_BUS_WIRED token
    irqchip: Fix dependencies for archs w/o HAS_IOMEM
    irqchip/s3c24xx: Mark init_eint as __maybe_unused
    genirq: Validate action before dereferencing it in handle_irq_event_percpu()

    Linus Torvalds
     

26 Jan, 2016

1 commit

  • Let's take the (outlandish) example of an interrupt controller
    capable of handling both wired interrupts and PCI MSIs.

    With the current code, the PCI MSI domain is going to be tagged
    with DOMAIN_BUS_PCI_MSI, and the wired domain with DOMAIN_BUS_ANY.

    Things get hairy when we start looking up the domain for a wired
    interrupt (typically when creating it based on some firmware
    information - DT or ACPI).

    In irq_create_fwspec_mapping(), we perform the lookup using
    DOMAIN_BUS_ANY, which is actually used as a wildcard. This gives
    us one chance out of two to end up with the wrong domain, and
    we try to configure a wired interrupt with the MSI domain.
    Everything grinds to a halt pretty quickly.

    What we really need to do is to start looking for a domain that
    would uniquely identify a wired interrupt domain, and only use
    DOMAIN_BUS_ANY as a fallback.

    In order to solve this, let's introduce a new DOMAIN_BUS_WIRED
    token, which is going to be used exactly as described above.
    Of course, this depends on the irqchip to setup the domain
    bus_token, and nobody had to implement this so far.

    Only so far.

    Signed-off-by: Marc Zyngier
    Cc: Greg Kroah-Hartman
    Cc: Rob Herring
    Cc: Frank Rowand
    Cc: Grant Likely
    Cc: Thomas Petazzoni
    Cc: Jiang Liu
    Link: http://lkml.kernel.org/r/1453816347-32720-2-git-send-email-marc.zyngier@arm.com
    Signed-off-by: Thomas Gleixner

    Marc Zyngier
     

22 Jan, 2016

1 commit

  • Pull PCI updates from Bjorn Helgaas:
    "PCI changes for the v4.5 merge window:

    Enumeration:
    - Simplify config space size computation (Bjorn Helgaas)
    - Avoid iterating through ROM outside the resource window (Edward O'Callaghan)
    - Support PCIe devices with short cfg_size (Jason S. McMullan)
    - Add Netronome vendor and device IDs (Jason S. McMullan)
    - Limit config space size for Netronome NFP6000 family (Jason S. McMullan)
    - Add Netronome NFP4000 PF device ID (Simon Horman)
    - Limit config space size for Netronome NFP4000 (Simon Horman)
    - Print warnings for all invalid expansion ROM headers (Vladis Dronov)

    Resource management:
    - Fix minimum allocation address overwrite (Christoph Biedl)

    PCI device hotplug:
    - acpiphp_ibm: Fix null dereferences on null ibm_slot (Colin Ian King)
    - pciehp: Always protect pciehp_disable_slot() with hotplug mutex (Guenter Roeck)
    - shpchp: Constify hpc_ops structure (Julia Lawall)
    - ibmphp: Remove unneeded NULL test (Julia Lawall)

    Power management:
    - Make ASPM sysfs link_state_store() consistent with link_state_show() (Andy Lutomirski)

    Virtualization
    - Add function 1 DMA alias quirk for Lite-On/Plextor M6e/Marvell 88SS9183 (Tim Sander)

    MSI:
    - Remove empty pci_msi_init_pci_dev() (Bjorn Helgaas)
    - Mark PCIe/PCI (MSI) IRQ cascade handlers as IRQF_NO_THREAD (Grygorii Strashko)
    - Initialize MSI capability for all architectures (Guilherme G. Piccoli)
    - Relax msi_domain_alloc() to support parentless MSI irqdomains (Liu Jiang)

    ARM Versatile host bridge driver:
    - Remove unused pci_sys_data structures (Lorenzo Pieralisi)

    Broadcom iProc host bridge driver:
    - Hide CONFIG_PCIE_IPROC (Arnd Bergmann)
    - Do not use 0x in front of %pap (Dmitry V. Krivenok)
    - Update iProc PCIe device tree binding (Ray Jui)
    - Add PAXC interface support (Ray Jui)
    - Add iProc PCIe MSI device tree binding (Ray Jui)
    - Add iProc PCIe MSI support (Ray Jui)

    Freescale i.MX6 host bridge driver:
    - Use gpio_set_value_cansleep() (Fabio Estevam)
    - Add support for active-low reset GPIO (Petr Štetiar)

    HiSilicon host bridge driver:
    - Add support for HiSilicon Hip06 PCIe host controllers (Gabriele Paoloni)

    Intel VMD host bridge driver:
    - Export irq_domain_set_info() for module use (Keith Busch)
    - x86/PCI: Allow DMA ops specific to a PCI domain (Keith Busch)
    - Use 32 bit PCI domain numbers (Keith Busch)
    - Add driver for Intel Volume Management Device (VMD) (Keith Busch)

    Qualcomm host bridge driver:
    - Document PCIe devicetree bindings (Stanimir Varbanov)
    - Add Qualcomm PCIe controller driver (Stanimir Varbanov)
    - dts: apq8064: add PCIe devicetree node (Stanimir Varbanov)
    - dts: ifc6410: enable PCIe DT node for this board (Stanimir Varbanov)

    Renesas R-Car host bridge driver:
    - Add support for R-Car H3 to pcie-rcar (Harunobu Kurokawa)
    - Allow DT to override default window settings (Phil Edworthy)
    - Convert to DT resource parsing API (Phil Edworthy)
    - Revert "PCI: rcar: Build pcie-rcar.c only on ARM" (Phil Edworthy)
    - Remove unused pci_sys_data struct from pcie-rcar (Phil Edworthy)
    - Add runtime PM support to pcie-rcar (Phil Edworthy)
    - Add Gen2 PHY setup to pcie-rcar (Phil Edworthy)
    - Add gen2 fallback compatibility string for pci-rcar-gen2 (Simon Horman)
    - Add gen2 fallback compatibility string for pcie-rcar (Simon Horman)

    Synopsys DesignWare host bridge driver:
    - Simplify control flow (Bjorn Helgaas)
    - Make config accessor override checking symmetric (Bjorn Helgaas)
    - Ensure ATU is enabled before IO/conf space accesses (Stanimir Varbanov)

    Miscellaneous:
    - Add of_pci_get_host_bridge_resources() stub (Arnd Bergmann)
    - Check for PCI_HEADER_TYPE_BRIDGE equality, not bitmask (Bjorn Helgaas)
    - Fix all whitespace issues (Bogicevic Sasa)
    - x86/PCI: Simplify pci_bios_{read,write} (Geliang Tang)
    - Use to_pci_dev() instead of open-coding it (Geliang Tang)
    - Use kobj_to_dev() instead of open-coding it (Geliang Tang)
    - Use list_for_each_entry() to simplify code (Geliang Tang)
    - Fix typos in (Thomas Petazzoni)
    - x86/PCI: Clarify AMD Fam10h config access restrictions comment (Tomasz Nowicki)"

    * tag 'pci-v4.5-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci: (58 commits)
    PCI: Add function 1 DMA alias quirk for Lite-On/Plextor M6e/Marvell 88SS9183
    PCI: Limit config space size for Netronome NFP4000
    PCI: Add Netronome NFP4000 PF device ID
    x86/PCI: Add driver for Intel Volume Management Device (VMD)
    PCI/AER: Use 32 bit PCI domain numbers
    x86/PCI: Allow DMA ops specific to a PCI domain
    irqdomain: Export irq_domain_set_info() for module use
    PCI: host: Add of_pci_get_host_bridge_resources() stub
    genirq/MSI: Relax msi_domain_alloc() to support parentless MSI irqdomains
    PCI: rcar: Add Gen2 PHY setup to pcie-rcar
    PCI: rcar: Add runtime PM support to pcie-rcar
    PCI: designware: Make config accessor override checking symmetric
    PCI: ibmphp: Remove unneeded NULL test
    ARM: dts: ifc6410: enable PCIe DT node for this board
    ARM: dts: apq8064: add PCIe devicetree node
    PCI: hotplug: Use list_for_each_entry() to simplify code
    PCI: rcar: Remove unused pci_sys_data struct from pcie-rcar
    PCI: hisi: Add support for HiSilicon Hip06 PCIe host controllers
    PCI: Avoid iterating through memory outside the resource window
    PCI: acpiphp_ibm: Fix null dereferences on null ibm_slot
    ...

    Linus Torvalds
     

16 Jan, 2016

1 commit


29 Dec, 2015

1 commit


21 Dec, 2015

1 commit


20 Dec, 2015

1 commit

  • The Linux kernel already has the concept of IRQ domain, wherein a
    component can expose a set of IRQs which are managed by a particular
    interrupt controller chip or other subsystem. The PCI driver exposes
    the notion of an IRQ domain for Message-Signaled Interrupts (MSI) from
    PCI Express devices. This patch exposes the functions which are
    necessary for creating a MSI IRQ domain within a module.

    [ tglx: Split it into x86 and core irq parts ]

    Signed-off-by: Jake Oshins
    Cc: gregkh@linuxfoundation.org
    Cc: kys@microsoft.com
    Cc: devel@linuxdriverproject.org
    Cc: olaf@aepfle.de
    Cc: apw@canonical.com
    Cc: vkuznets@redhat.com
    Cc: haiyangz@microsoft.com
    Cc: marc.zyngier@arm.com
    Cc: bhelgaas@google.com
    Link: http://lkml.kernel.org/r/1449769983-12948-4-git-send-email-jakeo@microsoft.com
    Signed-off-by: Thomas Gleixner

    Jake Oshins
     

16 Dec, 2015

1 commit


14 Oct, 2015

8 commits

  • As we're about to start converting the various MSI layers to
    use fwnode_handle instead of device_node, add irq_domain_create_hierarchy
    as a directly equivalent of irq_domain_add_hierarchy (which still
    exists as a compatibility interface).

    Signed-off-by: Marc Zyngier
    Tested-by: Hanjun Guo
    Tested-by: Lorenzo Pieralisi
    Cc:
    Cc: Tomasz Nowicki
    Cc: Suravee Suthikulpanit
    Cc: Graeme Gregory
    Cc: Jake Oshins
    Cc: Jiang Liu
    Cc: Jason Cooper
    Cc: Rafael J. Wysocki
    Link: http://lkml.kernel.org/r/1444737105-31573-16-git-send-email-marc.zyngier@arm.com
    Signed-off-by: Thomas Gleixner

    Marc Zyngier
     
  • In order to be able to reference an irqdomain from ACPI, we need
    to be able to create an identifier, which is usually a struct
    device_node.

    This device node does't really fit the ACPI infrastructure, so
    we cunningly allocate a new structure containing a fwnode_handle,
    and return that.

    This structure doesn't really point to a device (interrupt
    controllers are not "real" devices in Linux), but as we cannot
    really deny that they exist, we create them with a new fwnode_type
    (FWNODE_IRQCHIP).

    Signed-off-by: Marc Zyngier
    Acked-by: Rafael J. Wysocki
    Reviewed-and-tested-by: Hanjun Guo
    Tested-by: Lorenzo Pieralisi
    Cc:
    Cc: Tomasz Nowicki
    Cc: Suravee Suthikulpanit
    Cc: Graeme Gregory
    Cc: Jake Oshins
    Cc: Jiang Liu
    Cc: Jason Cooper
    Cc: Rafael J. Wysocki
    Link: http://lkml.kernel.org/r/1444737105-31573-9-git-send-email-marc.zyngier@arm.com
    Signed-off-by: Thomas Gleixner

    Marc Zyngier
     
  • Just like we have irq_domain_add_{linear,tree} to create a irq domain
    identified by an of_node, introduce irq_domain_create_{linear,tree}
    that do the same thing, except that they take a struct fwnode_handle.

    Existing functions get rewritten in terms of the new ones so that
    everything keeps working as before (and __irq_domain_add is now
    fwnode_handle based as well).

    Signed-off-by: Marc Zyngier
    Reviewed-and-tested-by: Hanjun Guo
    Tested-by: Lorenzo Pieralisi
    Cc:
    Cc: Tomasz Nowicki
    Cc: Suravee Suthikulpanit
    Cc: Graeme Gregory
    Cc: Jake Oshins
    Cc: Jiang Liu
    Cc: Jason Cooper
    Cc: Rafael J. Wysocki
    Link: http://lkml.kernel.org/r/1444737105-31573-8-git-send-email-marc.zyngier@arm.com
    Signed-off-by: Thomas Gleixner

    Marc Zyngier
     
  • Just like we have irq_create_of_mapping, irq_create_fwspec_mapping
    creates a IRQ domain mapping for an interrupt described in a
    struct irq_fwspec.

    irq_create_of_mapping gets rewritten in terms of the new function,
    and the hack we introduced before gets removed (now that no stacked
    irqchip uses of_phandle_args anymore).

    Signed-off-by: Marc Zyngier
    Reviewed-and-tested-by: Hanjun Guo
    Tested-by: Lorenzo Pieralisi
    Cc:
    Cc: Tomasz Nowicki
    Cc: Suravee Suthikulpanit
    Cc: Graeme Gregory
    Cc: Jake Oshins
    Cc: Jiang Liu
    Cc: Jason Cooper
    Cc: Rafael J. Wysocki
    Link: http://lkml.kernel.org/r/1444737105-31573-7-git-send-email-marc.zyngier@arm.com
    Signed-off-by: Thomas Gleixner

    Marc Zyngier
     
  • So far the closest thing to a generic IRQ specifier structure is
    of_phandle_args, which happens to be pretty OF specific (the of_node
    pointer in there is quite annoying).

    Let's introduce 'struct irq_fwspec' that can be used in place of
    of_phandle_args for OF, but also for other firmware implementations
    (that'd be ACPI). This is used together with a new 'translate' method
    that is the pendent of 'xlate'.

    We convert irq_create_of_mapping to use this new structure (with a
    small hack that will be removed later).

    Signed-off-by: Marc Zyngier
    Reviewed-and-tested-by: Hanjun Guo
    Tested-by: Lorenzo Pieralisi
    Cc:
    Cc: Tomasz Nowicki
    Cc: Suravee Suthikulpanit
    Cc: Graeme Gregory
    Cc: Jake Oshins
    Cc: Jiang Liu
    Cc: Jason Cooper
    Cc: Rafael J. Wysocki
    Link: http://lkml.kernel.org/r/1444737105-31573-5-git-send-email-marc.zyngier@arm.com
    Signed-off-by: Thomas Gleixner

    Marc Zyngier
     
  • So far, our irq domains are still looked up by device node.
    Let's change this and allow a domain to be looked up using
    a fwnode_handle pointer.

    The existing interfaces are preserved with a couple of helpers.

    Signed-off-by: Marc Zyngier
    Reviewed-and-tested-by: Hanjun Guo
    Tested-by: Lorenzo Pieralisi
    Cc:
    Cc: Tomasz Nowicki
    Cc: Suravee Suthikulpanit
    Cc: Graeme Gregory
    Cc: Jake Oshins
    Cc: Jiang Liu
    Cc: Jason Cooper
    Cc: Rafael J. Wysocki
    Link: http://lkml.kernel.org/r/1444737105-31573-4-git-send-email-marc.zyngier@arm.com
    Signed-off-by: Thomas Gleixner

    Marc Zyngier
     
  • Now that we have everyone accessing the of_node field via the
    irq_domain_get_of_node accessor, it is pretty easy to swap it
    for a pointer to a fwnode_handle.

    This translates into a few limited changes in __irq_domain_add,
    and an updated irq_domain_get_of_node.

    Signed-off-by: Marc Zyngier
    Reviewed-and-tested-by: Hanjun Guo
    Tested-by: Lorenzo Pieralisi
    Cc:
    Cc: Tomasz Nowicki
    Cc: Suravee Suthikulpanit
    Cc: Graeme Gregory
    Cc: Jake Oshins
    Cc: Jiang Liu
    Cc: Jason Cooper
    Cc: Rafael J. Wysocki
    Link: http://lkml.kernel.org/r/1444737105-31573-3-git-send-email-marc.zyngier@arm.com
    Signed-off-by: Thomas Gleixner

    Marc Zyngier
     
  • The struct irq_domain contains a "struct device_node *" field
    (of_node) that is almost the only link between the irqdomain
    and the device tree infrastructure.

    In order to prepare for the removal of that field, convert all
    users to use irq_domain_get_of_node() instead.

    Signed-off-by: Marc Zyngier
    Reviewed-and-tested-by: Hanjun Guo
    Tested-by: Lorenzo Pieralisi
    Cc:
    Cc: Tomasz Nowicki
    Cc: Suravee Suthikulpanit
    Cc: Graeme Gregory
    Cc: Jake Oshins
    Cc: Jiang Liu
    Cc: Jason Cooper
    Cc: Rafael J. Wysocki
    Link: http://lkml.kernel.org/r/1444737105-31573-2-git-send-email-marc.zyngier@arm.com
    Signed-off-by: Thomas Gleixner

    Marc Zyngier
     

16 Sep, 2015

1 commit

  • NUMA node information is per-irq instead of per-irqchip, so move it into
    struct irq_common_data. Also use CONFIG_NUMA to guard irq_common_data.node.

    Signed-off-by: Jiang Liu
    Cc: Konrad Rzeszutek Wilk
    Cc: Tony Luck
    Cc: Bjorn Helgaas
    Cc: Benjamin Herrenschmidt
    Cc: Randy Dunlap
    Cc: Yinghai Lu
    Cc: Borislav Petkov
    Cc: Jason Cooper
    Cc: Kevin Cernekee
    Cc: Arnd Bergmann
    Link: http://lkml.kernel.org/r/1433145945-789-8-git-send-email-jiang.liu@linux.intel.com
    Signed-off-by: Thomas Gleixner

    Jiang Liu
     

30 Jul, 2015

1 commit

  • It is not uncommon (at least with the ARM stuff) to have a piece
    of hardware that implements different flavours of "interrupts".
    A typical example of this is the GICv3 ITS, which implements
    standard PCI/MSI support, but also some form of "generic MSI".

    So far, the PCI/MSI domain is registered using the ITS device_node,
    so that irq_find_host can return it. On the contrary, the raw MSI
    domain is not registered with an device_node, making it impossible
    to be looked up by another subsystem (obviously, using the same
    device_node twice would only result in confusion, as it is not
    defined which one irq_find_host would return).

    A solution to this is to "type" domains that may be aliasing, and
    to be able to lookup an device_node that matches a given type.
    For this, we introduce irq_find_matching_host() as a superset
    of irq_find_host:

    struct irq_domain *irq_find_matching_host(struct device_node *node,
    enum irq_domain_bus_token bus_token);

    where bus_token is the "type" we want to match the domain against
    (so far, only DOMAIN_BUS_ANY is defined). This result in some
    moderately invasive changes on the PPC side (which is the only
    user of the .match method).

    This has otherwise no functionnal change.

    Reviewed-by: Hanjun Guo
    Signed-off-by: Marc Zyngier
    Cc:
    Cc: Yijing Wang
    Cc: Ma Jun
    Cc: Lorenzo Pieralisi
    Cc: Duc Dang
    Cc: Bjorn Helgaas
    Cc: Jiang Liu
    Cc: Jason Cooper
    Link: http://lkml.kernel.org/r/1438091186-10244-2-git-send-email-marc.zyngier@arm.com
    Signed-off-by: Thomas Gleixner

    Marc Zyngier
     

21 Jun, 2015

1 commit


12 Jun, 2015

2 commits

  • Introduce helper function irq_data_get_node() and variants thereof to
    hide struct irq_data implementation details.

    Convert the core code to use them.

    Signed-off-by: Jiang Liu
    Cc: Konrad Rzeszutek Wilk
    Cc: Tony Luck
    Cc: Bjorn Helgaas
    Cc: Benjamin Herrenschmidt
    Cc: Randy Dunlap
    Cc: Yinghai Lu
    Cc: Borislav Petkov
    Cc: Jason Cooper
    Cc: Kevin Cernekee
    Cc: Arnd Bergmann
    Link: http://lkml.kernel.org/r/1433145945-789-5-git-send-email-jiang.liu@linux.intel.com
    Signed-off-by: Thomas Gleixner

    Jiang Liu
     
  • With the introduction of hierarchy irqdomain, struct irq_data becomes
    per-chip instead of per-irq and there may be multiple irq_datas
    associated with the same irq. Some per-irq data stored in struct
    irq_data now may get duplicated into multiple irq_datas, and causes
    inconsistent view.

    So introduce struct irq_common_data to host per-irq common data and to
    achieve consistent view among irq_chips.

    Signed-off-by: Jiang Liu
    Cc: Konrad Rzeszutek Wilk
    Cc: Tony Luck
    Cc: Bjorn Helgaas
    Cc: Benjamin Herrenschmidt
    Cc: Randy Dunlap
    Cc: Yinghai Lu
    Cc: Borislav Petkov
    Cc: Jason Cooper
    Cc: Kevin Cernekee
    Cc: Arnd Bergmann
    Cc: Marc Zyngier
    Link: http://lkml.kernel.org/r/1433145945-789-4-git-send-email-jiang.liu@linux.intel.com
    Signed-off-by: Thomas Gleixner

    Jiang Liu
     

18 May, 2015

1 commit

  • This adds the helper irq_domain_set_info() in a non-domain hierarchy
    variant. This allows to use the helper for generic chip since not
    all chips using generic chip support domain hierarchy.

    Signed-off-by: Stefan Agner
    Cc: marc.zyngier@arm.com
    Cc: linux@arm.linux.org.uk
    Cc: u.kleine-koenig@pengutronix.de
    Cc: olof@lixom.net
    Cc: arnd@arndb.de
    Cc: daniel.lezcano@linaro.org
    Cc: mark.rutland@arm.com
    Cc: pawel.moll@arm.com
    Cc: robh+dt@kernel.org
    Cc: ijc+devicetree@hellion.org.uk
    Cc: galak@codeaurora.org
    Cc: mcoquelin.stm32@gmail.com
    Cc: linux-arm-kernel@lists.infradead.org
    Cc: shawn.guo@linaro.org
    Cc: kernel@pengutronix.de
    Cc: jason@lakedaemon.net
    Link: http://lkml.kernel.org/r/1431769465-26867-2-git-send-email-stefan@agner.ch
    Signed-off-by: Thomas Gleixner

    Stefan Agner
     

23 Nov, 2014

4 commits

  • Introduce helper function irq_domain_add_hierarchy(), which creates
    a linear irqdomain if parameter 'size' is not zero, otherwise creates
    a tree irqdomain.

    Signed-off-by: Jiang Liu
    Cc: Tony Luck
    Cc: linux-arm-kernel@lists.infradead.org
    Cc: Bjorn Helgaas
    Cc: Grant Likely
    Cc: Marc Zyngier
    Cc: Yijing Wang
    Cc: Yingjoe Chen
    Cc: Borislav Petkov
    Cc: Benjamin Herrenschmidt
    Cc: Matthias Brugger
    Link: http://lkml.kernel.org/r/1416061447-9472-5-git-send-email-jiang.liu@linux.intel.com
    Signed-off-by: Thomas Gleixner

    Jiang Liu
     
  • Add a flags to irq_domain.flags to control whether the irqdomain core
    should automatically call parent irqdomain's alloc/free callbacks. It
    help to reduce hierarchy irqdomains users' code size.

    Signed-off-by: Jiang Liu
    Cc: Tony Luck
    Cc: linux-arm-kernel@lists.infradead.org
    Cc: Bjorn Helgaas
    Cc: Grant Likely
    Cc: Marc Zyngier
    Cc: Yijing Wang
    Cc: Yingjoe Chen
    Cc: Borislav Petkov
    Cc: Benjamin Herrenschmidt
    Cc: Matthias Brugger
    Link: http://lkml.kernel.org/r/1416061447-9472-4-git-send-email-jiang.liu@linux.intel.com
    Signed-off-by: Thomas Gleixner

    Jiang Liu
     
  • Signed-off-by: Jiang Liu
    Cc: Bjorn Helgaas
    Cc: Grant Likely
    Cc: Marc Zyngier
    Cc: Yingjoe Chen
    Cc: Yijing Wang
    Signed-off-by: Thomas Gleixner

    Jiang Liu
     
  • It is possible to call irq_create_of_mapping to create/translate the
    same IRQ from DT for multiple times. Perform irq_find_mapping check
    and set_type for hierarchy irqdomain in irq_create_of_mapping() to
    avoid duplicate these functionality in all outer most irqdomain.

    Signed-off-by: Yingjoe Chen
    Signed-off-by: Jiang Liu
    Cc: Bjorn Helgaas
    Cc: Grant Likely
    Cc: Marc Zyngier
    Cc: Yingjoe Chen
    Cc: Yijing Wang
    Signed-off-by: Thomas Gleixner

    Yingjoe Chen